From 725167420245d19446c18af15a87fd9bd8669506 Mon Sep 17 00:00:00 2001 From: antoniovillena <_@antoniovillena.es> Date: Mon, 18 Feb 2019 15:58:23 +0100 Subject: [PATCH] Actualizo utilidades zxdos --- utils/BACK32M | Bin 0 -> 460 bytes utils/ROMSBACK | Bin 395 -> 508 bytes utils/ROMSUPGR | Bin 0 -> 733 bytes utils/UPGR32M | Bin 0 -> 561 bytes utils/back32m.asm | 170 +++++++++++++++ utils/romsback.asm | 339 ++++++++++++++++-------------- utils/romsupgr.asm | 500 ++++++++++++++++++++++++--------------------- utils/upgr32m.asm | 203 ++++++++++++++++++ 8 files changed, 825 insertions(+), 387 deletions(-) create mode 100644 utils/BACK32M create mode 100644 utils/ROMSUPGR create mode 100644 utils/UPGR32M create mode 100644 utils/back32m.asm create mode 100644 utils/upgr32m.asm diff --git a/utils/BACK32M b/utils/BACK32M new file mode 100644 index 0000000000000000000000000000000000000000..fd8c857a1fd87b7889936bc4830bddb077e6bf23 GIT binary patch literal 460 zcmZutze~eF6u#J6ic+vH(m{QPgLaY9j>TAQ6$M4HgVHUeQG@j^UL!Uj($#-KLBak3 z9bH9m$PlvWYK9hyyv4ymR7_K7LFA4H_r3T1c;}4MVLS<=@jeX>qdQxhz_M=Sb<#uVUP_}@DTtp#`uB6zlx{r0dC`N2kK@Grj%w71{@ literal 0 HcmV?d00001 diff --git a/utils/ROMSBACK b/utils/ROMSBACK index 671b83d0aa2e09ca0dfe144202dc1736922b4ff8..f0dbe6ce210a380f1530c5922cd5ec8a88764ca8 100644 GIT binary patch delta 387 zcmeBX{=>|7woZ}tZ6V9sf=}`aXXj7kmEo{a_;%oJ;%uQP*h}S zV009)V>mxg@c@HGz};HgXUq!BcKO%u*52Ktpb9sZ4Qw2odsL6{Z6;Xg@6(4sPjU)p^(OMkL|H3*JMgyhti1wI#*X`KC5s)y+sc#c&vzO~ zp4C$fc2P)9EJ{(x%P&#L%qvbUDoIUYILXGP*ra%VmeENC0|}ra=fphq5{3MN)I5bC zf8Sues0c%blR(p34D0XeIS4W|C?+u237$1qRAgvibQG{-I6qJE0E30z-CEmc%nHnQ z`Pc8({?k=pRy<$=RBYz}R4M4dAo&!eoWa5Bq{8`m4-Eu>7KImOmZU1U78T_eF`T@s ztFR9wHybFy>y((BU0R@!oS$2elUkC>%W(3c-Ss+UzU>OXUUIB|dbV7Vnc-~tYG%=Yi?;+JqY0|59QZF>L! diff --git a/utils/ROMSUPGR b/utils/ROMSUPGR new file mode 100644 index 0000000000000000000000000000000000000000..863729896b88be919638d8b337826bbea89c076d GIT binary patch literal 733 zcmX?mQjzs-APx1<9UnvIp`zqw+mnanF=a;0WFr2jGW_?@9^0wlcy^)Q=w*zl0 z&pIeDTK}=*28!A-ysbRB{(Pr_Bv50pi$Zc@Q3_adW?pe>5m-ALqv92%^RtXh6%Ay7 zirg}DQWbz!1nWgb7=o3i<(K9GtvP#AiJ1XNFwK8k0f8V9#%q!aPC#v;1?feJDVcfc z2)$`V`MCTvy4WMGi6Az%WV0*Xek89?0*dVduUmRd{Nv@BnPi!;>8A;o8ycQg|EqHWHXdKyi0=qY^G< zOb}&u3O5<8|FXPYj1}1`JiQ4vh{INcn?t7h8Nb3BMN=h&(^)|YruE_efkmYT`CwYalwTeOhz6yEyB??9P`6a0-3@6XZC^0ht38wjPD|H z&Brm=LoX`A2#n6KEqQsQUymW-PLRwLNu0pU2FT+_2MYzM+zz&9UkLoeL&4dV9 zC|ZRoo}Udgj2B{BszP#pZb43JNh-+85Pzd> 8)+2 + outi + jp (hl) + +FileName dz 'FLASH.ZX2' diff --git a/utils/romsback.asm b/utils/romsback.asm index 39a55d4..7dbd876 100644 --- a/utils/romsback.asm +++ b/utils/romsback.asm @@ -1,154 +1,185 @@ - output ROMSBACK - - include zxuno.inc - - 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 - esxdos 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) - esxdos F_OPEN - ld (handle+1), a - jr nc, FileFound - call Print - dz 'Can\'t open ROMS.ZX1' - ret -FileFound call Print - db 'Backing up ROMS.ZX1 to SD', 13 - dz '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - ld ixl, 64 - ld de, $8000 - ld hl, $0060 - ld a, $11 - call rdflsh - ld hl, $8000 - ld bc, $1041 -handle ld a, 0 - esxdos F_WRITE - ld hl, $00c0 - jr c, tError -Bucle ld a, ixl - dec a - and $03 - jr nz, punto - ld a, 'o' - rst $10 -punto ld a, ixl - cp 45 - jr nz, o45roms - ld hl, $34c0 -o45roms ld de, $8000 - ld a, $40 - call rdflsh - ld de, $0040 - add hl, de - push hl - ld hl, $8000 - ld bc, $4000 - ld a, (handle+1) - esxdos F_WRITE - pop hl - jr nc, ReadOK -tError call Print - dz 'Write Error' - ret -ReadOK dec ixl - jr nz, Bucle - ld a, (handle+1) - esxdos F_CLOSE - call Print - dz 13, 'Backup complete', 13 - 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 'ROMS.ZX1' + output ROMSBACK + + include zxuno.inc + + org $2000 ; comienzo de la ejecución de los comandos ESXDOS + + call wrear0 + dec b + 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 + esxdos 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) + esxdos F_OPEN + ld (handle+1), a + jr nc, FileFound + call Print + dz 'Can\'t open ROMS.ZX1' + ret +FileFound call Print + db 'Backing up ROMS.ZX1 to SD', 13 + dz '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 + wreg flash_cs, 0 ; activamos spi, enviando un 0 + wreg flash_spi, $9f ; jedec id + in a, (c) + in a, (c) + in a, (c) + in a, (c) + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + sub $19 + jr nz, ZX1 + ld ix, $1d40 + ld iy, $0000 + jr ZX2cont +ZX1 ld ix, $2d40 + ld iy, $34c0 +ZX2cont ld de, $8000 + ld hl, $0060 + ld a, $11 + call rdflsh + ld hl, $8000 + ld bc, $1041 +handle ld a, 0 + esxdos F_WRITE + ld hl, $00c0 + jr c, tError +Bucle ld a, ixl + dec a + and $03 + jr nz, punto + ld a, 'o' + rst $10 +punto ld a, ixl + cp ixh + jr nz, o29roms + 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, $c5 ; envío wrear + ld l, 1 + out (c), l + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + push iy + pop hl +o29roms ld de, $8000 + ld a, $40 + call rdflsh + ld de, $0040 + add hl, de + push hl + ld hl, $8000 + ld bc, $4000 + ld a, (handle+1) + esxdos F_WRITE + pop hl + jr nc, ReadOK +tError call Print + dz 'Write Error' + ret +ReadOK dec ixl + jr nz, Bucle + ld a, (handle+1) + esxdos F_CLOSE + call Print + dz 13, 'Backup complete', 13 + ld iy, $5c3a +wrear0 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, $c5 ; envío wrear + out (c), 0 + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + 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 'ROMS.ZX1' diff --git a/utils/romsupgr.asm b/utils/romsupgr.asm index 414e209..e7795b1 100644 --- a/utils/romsupgr.asm +++ b/utils/romsupgr.asm @@ -1,233 +1,267 @@ - output ROMSUPGR - - include zxuno.inc - - 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 - esxdos 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) - esxdos F_OPEN - ld (handle+1), a - jr nc, FileFound - call Print - dz 'File ROMS.ZX1 not found' - ret -FileFound call Print - db 'Upgrading ROMS.ZX1 from SD', 13 - dz '[', 6, ' ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 - ld ixl, 64 - ld de, $8000 - ld hl, $0060 - ld a, $20 - call rdflsh - ld de, $0060 - exx - ld hl, $8000 - ld bc, $1041 -handle ld a, 0 - esxdos F_READ - jr c, tError - ld a, $20 - ld hl, $8000 - exx - call wrflsh - ld e, $c0 - exx -Bucle ld a, ixl - dec a - and $03 - jr nz, punto - ld a, 'o' - exx - push de - rst $10 - pop de - exx -punto ld hl, $8000 - ld bc, $4000 - ld a, (handle+1) - esxdos F_READ - jr nc, ReadOK -tError call Print - dz 'Read Error' - ret -ReadOK ld a, $40 - ld hl, $8000 - exx - call wrflsh - inc de - ld a, ixl - cp 46 - jr nz, o45roms - ld de, $34c0 -o45roms exx - dec ixl - jr nz, Bucle - ld a, (handle+1) - esxdos F_CLOSE - call Print - dz 13, 'Upgrade complete', 13 - 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 - -; ------------------------ -; Write to SPI flash -; Parameters: -; A: number of pages (256 bytes) to write -; DE: target address without last byte -; 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 'ROMS.ZX1' + output ROMSUPGR + + include zxuno.inc + + org $2000 ; comienzo de la ejecución de los comandos ESXDOS + + call wrear0 + dec b + 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 + esxdos 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) + esxdos F_OPEN + ld (handle+1), a + jr nc, FileFound + call Print + dz 'File ROMS.ZX1 not found' + ret +FileFound wreg flash_cs, 0 ; activamos spi, enviando un 0 + wreg flash_spi, $9f ; jedec id + in a, (c) + in a, (c) + in a, (c) + in a, (c) + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + sub $19 + jr nz, ZX1 + call Print + db 'Upgrading ROMS.ZX1 from SD', 13 + dz '[ ]', 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 + ld ix, $0a2c + ld iy, $0000 + jr ZX2cont +ZX1 call Print + db 'Upgrading ROMS.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, $2e40 + ld iy, $34c0 +ZX2cont ld de, $8000 + ld hl, $0060 + ld a, $20 + call rdflsh + ld de, $0060 + exx + ld hl, $8000 + ld bc, $1041 +handle ld a, 0 + esxdos F_READ + jr c, tError + ld a, $20 + ld hl, $8000 + exx + call wrflsh + ld e, $c0 + exx +Bucle ld a, ixl + dec a + and $03 + jr nz, punto + ld a, 'o' + exx + push de + rst $10 + pop de + exx +punto ld hl, $8000 + ld bc, $4000 + ld a, (handle+1) + esxdos F_READ + jr nc, ReadOK +tError call Print + dz 'Read Error' + ret +ReadOK ld a, $40 + ld hl, $8000 + exx + call wrflsh + inc de + ld a, ixl + cp ixh + jr nz, o10roms + 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, $c5 ; envío wrear + ld l, 1 + out (c), l + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + push iy + pop de +o10roms exx + dec ixl + jr nz, Bucle + ld a, (handle+1) + esxdos F_CLOSE + call Print + dz 13, 'Upgrade complete', 13 + ld iy, $5c3a +wrear0 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, $c5 ; envío wrear + out (c), 0 + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + 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 + +; ------------------------ +; Write to SPI flash +; Parameters: +; A: number of pages (256 bytes) to write +; DE: target address without last byte +; 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 'ROMS.ZX1' diff --git a/utils/upgr32m.asm b/utils/upgr32m.asm new file mode 100644 index 0000000..c7b837b --- /dev/null +++ b/utils/upgr32m.asm @@ -0,0 +1,203 @@ + output UPGR32M + + include zxuno.inc + + org $2000 ; comienzo de la ejecución de los comandos ESXDOS + + call wrear0 + dec b + out (c), 0 + inc b + in f, (c) + jp p, Nonlock + call Print + dz 'ROM not rooted' + ret +Nonlock wreg flash_cs, 0 ; activamos spi, enviando un 0 + wreg flash_spi, $9f ; jedec id + in a, (c) + in a, (c) + in a, (c) + in a, (c) + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + sub $19 + jr z, Goodflsh + call Print + dz 'Incorrect flash IC' + ret +Goodflsh 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 + esxdos 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) + esxdos F_OPEN + ld (handle+1), a + jr nc, FileFound + call Print + dz 'Can\'t open FLASH.ZX2' + ret +FileFound call Print + dz 'Upgrading FLASH.ZX2 from SD', 13 + call read16m + 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, $c5 ; envío wrear + ld l, 1 + out (c), l + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + call read16m + ld a, (handle+1) + esxdos F_CLOSE + call Print + dz 13, 'Upgrade complete' +wrear0 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, $c5 ; envío wrear + out (c), 0 + wreg flash_cs, 1 ; desactivamos spi, enviando un 1 + ret + +read16m 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 + esxdos 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 + 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.ZX2'