Comando .backup para FLASH Q128

Dudas, cuestiones, sugerencias y peticiones en general sobre el proyecto / Questions and requests about the project
Responder
Avatar de Usuario
carmeloco
Mensajes: 749
Registrado: 25 Dic 2015, 12:02

Comando .backup para FLASH Q128

Mensaje por carmeloco » 22 Feb 2017, 23:52

¿Es muy complicado modificar el comando para poder hacer el backup de la flash Q128? He mirado el archivo en ASM, pero no sé qué modificar para que haga el backup de 16 MB de flash en vez de 4 MB.
He probado hacer un backup de la flash con iMPACT, pero falla muchísimo, y no lo he conseguido.

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Comando .backup para FLASH Q128

Mensaje por antoniovillena » 23 Feb 2017, 01:21

Puede que con esto funcione (no lo he probado):

Código: Seleccionar todo

                output  BACKUP

                include zxuno.inc

              macro wreg  dir, dato
                call    rst28
                defb    dir, dato
              endm

                org     $2000           ; comienzo de la ejecución de los comandos ESXDOS

Main            ld      bc, zxuno_port
                out     (c), 0
                inc     b
                in      f, (c)
                jp      p, Nonlock
                call    Print
                dz      'ROM not rooted'
                ret
Nonlock         ld      a, scandbl_ctrl
                dec     b
                out     (c), a
                inc     b
                in      a, (c)
                and     $3f
                ld      (normal+1), a
                or      $c0
                out     (c), a
                call    init
                ld      bc, zxuno_port
                ld      a, scandbl_ctrl
                out     (c), a
                inc     b
normal          ld      a, 0
                out     (c), a
                ret
init            xor     a
                rst     $08
                db      M_GETSETDRV     ; A = unidad actual
                jr      nc, SDCard
                call    Print
                dz      'SD card not inserted'
                ret
SDCard          ld      b, FA_WRITE | FA_OPEN_AL ; B = modo de apertura
                ld      hl, FileName    ; HL = Puntero al nombre del fichero (ASCIIZ)
                rst     $08
                db      F_OPEN
                ld      (handle+1), a
                jr      nc, FileFound
                call    Print
                dz      'Can\'t open FLASH.ZX1'
                ret
FileFound       call    Print
                db      'Backing up FLASH.ZX1 to SD', 13
                dz      '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
                ld      hl, $0000
Bucle           push    hl
                ld      de, $8000
                ld      a, $40
                call    rdflsh
                add     hl, hl
                add     hl, hl
                ld      a, h
                and     $3f
                jr      nz, punto
                ld      a, 'o'
                rst     $10
punto           ld      hl, $8000
                ld      bc, $4000
handle          ld      a, 0
                rst     $08
                db      F_WRITE
                pop     hl
                jr      nc, WriteOK
                call    Print
                dz      'Write Error'
                ret
WriteOK         ld      de, $0040
                adc     hl, de
                jr      nc, Bucle
                rst     $08
                db      F_CLOSE
                call    Print
                dz      13, 'Backup complete'
                ret

Print           pop     hl
                db      $3e
Print1          rst     $10
                ld      a, (hl)
                inc     hl
                or      a
                jr      nz, Print1
                jp      (hl)

; ------------------------
; Read from SPI flash
; Parameters:
;   DE: destination address
;   HL: source address without last byte
;    A: number of pages (256 bytes) to read
; ------------------------
rdflsh          ex      af, af'
                xor     a
                push    hl
                wreg    flash_cs, 0     ; activamos spi, enviando un 0
                wreg    flash_spi, 3    ; envio flash_spi un 3, orden de lectura
                pop     hl
                push    hl
                out     (c), h
                out     (c), l
                out     (c), a
                ex      af, af'
                ex      de, hl
                in      f, (c)
rdfls1          ld      e, $20
rdfls2          ini
                inc     b
                ini
                inc     b
                ini
                inc     b
                ini
                inc     b
                ini
                inc     b
                ini
                inc     b
                ini
                inc     b
                ini
                inc     b
                dec     e
                jr      nz, rdfls2
                dec     a
                jr      nz, rdfls1
                wreg    flash_cs, 1
                pop     hl
                ret
        
rst28           ld      bc, zxuno_port + $100
                pop     hl
                outi
                ld      b, (zxuno_port >> 8)+2
                outi
                jp      (hl)

FileName        dz      'FLASH.ZX1'

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Comando .backup para FLASH Q128

Mensaje por antoniovillena » 23 Feb 2017, 01:31

El upgrade sería así:

Nota: Por motivos obvios no probar a no ser que se tengan medios para desbriquear.

Código: Seleccionar todo

                output  UPGRADE

                include zxuno.inc

              macro wreg  dir, dato
                call    rst28
                defb    dir, dato
              endm

                org     $2000           ; comienzo de la ejecución de los comandos ESXDOS

Main            ld      bc, zxuno_port
                out     (c), 0
                inc     b
                in      f, (c)
                jp      p, Nonlock
                call    Print
                dz      'ROM not rooted'
                ret
Nonlock         ld      a, scandbl_ctrl
                dec     b
                out     (c), a
                inc     b
                in      a, (c)
                and     $3f
                ld      (normal+1), a
                or      $c0
                out     (c), a
                call    init
                ld      bc, zxuno_port
                ld      a, scandbl_ctrl
                out     (c), a
                inc     b
normal          ld      a, 0
                out     (c), a
                ret
init            xor     a
                rst     $08
                db      M_GETSETDRV     ; A = unidad actual
                jr      nc, SDCard
                call    Print
                dz      'SD card not inserted'
                ret
SDCard          ld      b, FA_READ      ; B = modo de apertura
                ld      hl, FileName    ; HL = Puntero al nombre del fichero (ASCIIZ)
                rst     $08
                db      F_OPEN
                ld      (handle+1), a
                jr      nc, FileFound
                call    Print
                dz      'File FLASH not found'
                ret
FileFound       call    Print
                db      'Upgrading FLASH.ZX1 from SD', 13
                dz      '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
                ld      ix, $0400
                ld      de, $0000
                exx
Bucle           ld      a, ixl
                inc     a
                and     $3f
                jr      nz, punto
                ld      a, 'o'
                exx
                push    de
                rst     $10
                pop     de
                exx
punto           ld      hl, $8000
                ld      bc, $4000
handle          ld      a, 0
                rst     $08
                db      F_READ
                jr      nc, ReadOK
                call    Print
                dz      'Read Error'
                ret
ReadOK          ld      a, $40
                ld      hl, $8000
                exx
                call    wrflsh
                inc     de
                exx
                dec     ixl
                jr      nz, Bucle
                dec     ixh
                jr      nz, Bucle
                ld      a, (handle+1)
                rst     $08
                db      F_CLOSE
                call    Print
                dz      13, 'Upgrade complete'
                ret

Print           pop     hl
                db      $3e
Print1          rst     $10
                ld      a, (hl)
                inc     hl
                or      a
                jr      nz, Print1
                jp      (hl)

; ------------------------
; Write to SPI flash
; Parameters:
;    A: number of pages (256 bytes) to write
;   DE: target address without last byte
;  BC': zxuno_port+$100 (constant)
;  HL': source address from memory
; ------------------------
wrflsh          ex      af, af'
                xor     a
wrfls1          wreg    flash_cs, 0     ; activamos spi, enviando un 0
                wreg    flash_spi, 6    ; envío write enable
                wreg    flash_cs, 1     ; desactivamos spi, enviando un 1
                wreg    flash_cs, 0     ; activamos spi, enviando un 0
                wreg    flash_spi, $20  ; envío sector erase
                out     (c), d
                out     (c), e
                out     (c), a
                wreg    flash_cs, 1     ; desactivamos spi, enviando un 1
wrfls2          call    waits5
                wreg    flash_cs, 0     ; activamos spi, enviando un 0
                wreg    flash_spi, 6    ; envío write enable
                wreg    flash_cs, 1     ; desactivamos spi, enviando un 1
                wreg    flash_cs, 0     ; activamos spi, enviando un 0
                wreg    flash_spi, 2    ; page program
                out     (c), d
                out     (c), e
                out     (c), a
                ld      a, $20
                exx
                ld      bc, zxuno_port+$100
wrfls3          inc     b
                outi
                inc     b
                outi
                inc     b
                outi
                inc     b
                outi
                inc     b
                outi
                inc     b
                outi
                inc     b
                outi
                inc     b
                outi
                dec     a
                jr      nz, wrfls3
                exx
                wreg    flash_cs, 1     ; desactivamos spi, enviando un 1
                ex      af, af'
                dec     a
                jr      z, waits5
                ex      af, af'
                inc     e
                ld      a, e
                and     $0f
                jr      nz, wrfls2
                ld      hl, wrfls1
                push    hl
waits5          wreg    flash_cs, 0     ; activamos spi, enviando un 0
                wreg    flash_spi, 5    ; envío read status
                in      a, (c)
waits6          in      a, (c)
                and     1
                jr      nz, waits6
                wreg    flash_cs, 1     ; desactivamos spi, enviando un 1
                ret
        
rst28           ld      bc, zxuno_port + $100
                pop     hl
                outi
                ld      b, (zxuno_port >> 8)+2
                outi
                jp      (hl)

FileName        dz      'FLASH.ZX1'

Avatar de Usuario
carmeloco
Mensajes: 749
Registrado: 25 Dic 2015, 12:02

Re: Comando .backup para FLASH Q128

Mensaje por carmeloco » 23 Feb 2017, 09:04

OK, lo puedo probar pero, ¿cómo lo compilo?

Avatar de Usuario
Uto
Mensajes: 1389
Registrado: 17 Dic 2015, 16:39

Re: Comando .backup para FLASH Q128

Mensaje por Uto » 23 Feb 2017, 09:38

carmeloco escribió:OK, lo puedo probar pero, ¿cómo lo compilo?

Si no recuerdo mal, esos comandos están en el formato de sjasm plus.

No te olvides de bajar el zxuno.inc que hay en el repo también, aunque si no lo haces ya se quejará el sjasm.

Avatar de Usuario
carmeloco
Mensajes: 749
Registrado: 25 Dic 2015, 12:02

Re: Comando .backup para FLASH Q128

Mensaje por carmeloco » 23 Feb 2017, 09:49

Uto escribió:
carmeloco escribió:OK, lo puedo probar pero, ¿cómo lo compilo?

Si no recuerdo mal, esos comandos están en el formato de sjasm plus.

No te olvides de bajar el zxuno.inc que hay en el repo también, aunque si no lo haces ya se quejará el sjasm.
Si, yo habia mirado ya el original en ASM del repo, y había visto también el zxuno.inc, y suponía que se hacía con sjasmplus, pero no se exáctamente que opciones tengo que ponerle al comando :?

Edito: Creo que ya se como se hace. Lo pruebo a ver. ;)

Edito 2: Compilado y probando. Tiene pinta de que funciona, porque tarda mucho en hacerse el backup.

Edito 3: El backup funciona. Me queda pendiente probar el upgrade, pero como la bios ya lo hace...

Avatar de Usuario
carmeloco
Mensajes: 749
Registrado: 25 Dic 2015, 12:02

Re: Comando .backup para FLASH Q128

Mensaje por carmeloco » 24 Feb 2017, 16:44

Probado el comando .upgrade, y funciona correctamente. Gracias por las modificaciones Antonio. :D

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Comando .backup para FLASH Q128

Mensaje por antoniovillena » 24 Feb 2017, 16:51

carmeloco escribió:Probado el comando .upgrade, y funciona correctamente. Gracias por las modificaciones Antonio. :D
Gracias a ti por haberlo probado. Los fuentes los acabo de subir al repositorio. Los binarios los pongo aquí mismo. Recordad que esto es sólo para Q128, bajadlo sólo si tenéis este chip y estáis seguros de lo que hacéis.
Adjuntos
upgr_back_16m.zip
(930 Bytes) Descargado 114 veces

Responder