Comando .backup para FLASH Q128
Comando .backup para FLASH Q128
¿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.
He probado hacer un backup de la flash con iMPACT, pero falla muchísimo, y no lo he conseguido.
- antoniovillena
- Mensajes: 2621
- Registrado: 27 Sep 2015, 20:41
Re: Comando .backup para FLASH Q128
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'
- antoniovillena
- Mensajes: 2621
- Registrado: 27 Sep 2015, 20:41
Re: Comando .backup para FLASH Q128
El upgrade sería así:
Nota: Por motivos obvios no probar a no ser que se tengan medios para desbriquear.
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'
Re: Comando .backup para FLASH Q128
OK, lo puedo probar pero, ¿cómo lo compilo?
Re: Comando .backup para FLASH Q128
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.
Re: Comando .backup para FLASH Q128
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 comandoUto 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.
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...
Re: Comando .backup para FLASH Q128
Probado el comando .upgrade, y funciona correctamente. Gracias por las modificaciones Antonio.
- antoniovillena
- Mensajes: 2621
- Registrado: 27 Sep 2015, 20:41
Re: Comando .backup para FLASH Q128
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.carmeloco escribió:Probado el comando .upgrade, y funciona correctamente. Gracias por las modificaciones Antonio.
- Adjuntos
-
- upgr_back_16m.zip
- (930 Bytes) Descargado 206 veces