mirror of https://github.com/zxdos/zxuno.git
				
				
				
			
		
			
				
	
	
		
			186 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			NASM
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			NASM
		
	
	
	
                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'
 |