zxuno-git/cores/Spectrum/testrom.asm

186 lines
7.7 KiB
NASM

ZXUNOREGADDR equ 0fc3bh
ZXUNOREGDATA equ 0fd3bh
MASTERCONF equ 0
MASTERMAPPER equ 1
FLASHSPI equ 2
FLASHCS equ 3
; Selecciona un registro ZXUno de forma que los siguientes IN/OUTs a (C)
; se hagan en el registro deseado
select macro dir
ld bc,ZXUNOREGADDR
ld a,dir
out (c),a
inc b
endm
; Escribe "dato" en el registro ZXUno de direccion "dir"
wreg macro dir,dato
ld bc,ZXUNOREGADDR
ld a,dir
out (c),a
inc b
ld a,dato
out (c),a
endm
; Lee un byte desde el registro ZXUno cuya dirección es "dir" y lo almacena en "dest" (un registro de 8 bits)
rreg macro dir,dest
ld bc,ZXUNOREGADDR
ld a,dir
out (c),a
inc b
in dest,(c)
endm
;--------------------------------------------------------------------------
org 32768
Main di
ld sp,49151 ;stack fuera de la pagina de memoria que tocaremos
; Borramos la pantalla shadow, ya que Open SE IV parece que no la borra
wreg MASTERMAPPER,7 ;paginamos la pantalla shadow
call BorraBloque
; Elige uno, para probar
;------------------------------------------------- ROM de 48K con DIVMMC (se copia la interna)
wreg MASTERMAPPER,11 ;Donde estaría la ROM 3
ld hl,0
ld de,49152
ld bc,16384
ldir
ld bc,1ffdh
ld a,2
out (c),a
ld b,7fh
ld a,10h
out (c),a
call CopiaESXDOS
wreg MASTERCONF,010b ;Fin del modo boot. La nueva ROM está en su sitio y activada. DIVMMC está activado.
jp 0 ;Vamonos a ella.
;------------------------------------------------- ROM del +3 con DIVMMC
; call CopiaPlus3
; call CopiaESXDOS
; wreg MASTERCONF,2 ;Fin del modo boot. La nueva ROM está en su sitio y activada. DIVMMC está activado
; jp 0 ;Vamonos a ella.
;------------------------------------------------- ROM SE IV con DIVMMC, sin NMI en DIVMMC
; call CopiaOpenSE
; ld bc,1ffdh
; ld a,2
; out (c),a
; ld b,7fh
; ld a,10h
; out (c),a
; call CopiaESXDOS
; wreg MASTERCONF,110b ;Fin del modo boot. La nueva ROM está en su sitio y activada. DIVMMC está activado pero sin NMI
; jp 0 ;Vamonos a ella.
;-------------------------------------------------
CopiaESXDOS wreg MASTERMAPPER,16 ;Borramos los 128KB de la RAM del DIVMMC (bancos 16 a 23)
call BorraBloque
wreg MASTERMAPPER,17
call BorraBloque
wreg MASTERMAPPER,18
call BorraBloque
wreg MASTERMAPPER,19
call BorraBloque
wreg MASTERMAPPER,20
call BorraBloque
wreg MASTERMAPPER,21
call BorraBloque
wreg MASTERMAPPER,22
call BorraBloque
wreg MASTERMAPPER,23
call BorraBloque
wreg MASTERMAPPER,12 ;En los primeros 8KB del bloque 12 está la ROM del DIVMMC (ESXDOS)
wreg FLASHCS,0 ;linea CS de la flash a nivel bajo. Necesario antes de emitir comandos SPI
wreg FLASHSPI,3 ;comando de lectura de la flash
ld a,04h ;
out (c),a ; Dirección donde se encuentra
ld a,80h ; la ROM del ESXDOS en la flash: 048000h
out (c),a ;
ld a,00h ;
out (c),a ; A partir de aqui leemos secuencialmente
in a,(c) ; Primera lectura que se descarta...
ld hl,49152
ld de,8192 ; son solo 8K a copiar
call BucCopia
wreg FLASHCS,1
ret
CopiaPlus3 wreg MASTERMAPPER,8 ;primera página de RAM que se convertirá en ROM (la 8)
wreg FLASHCS,0 ;linea CS de la flash a nivel bajo. Necesario antes de emitir comandos SPI
wreg FLASHSPI,3 ;comando de lectura de la flash
ld a,03h ;
out (c),a ; Dirección donde se encuentra
ld a,00h ; la ROM en la flash: 030000h
out (c),a ;
ld a,00h ;
out (c),a ; A partir de aqui leemos secuencialmente
in a,(c) ; Primera lectura que se descarta...
call CopiaBloque ;copia 16K de la flash a la página 8
wreg MASTERMAPPER,9
select FLASHSPI
call CopiaBloque ;copia 16K de la flash a la página 9
wreg MASTERMAPPER,10
select FLASHSPI
call CopiaBloque ;etc...
wreg MASTERMAPPER,11
select FLASHSPI
call CopiaBloque
wreg FLASHCS,1 ;Deseleccionar flash
ret
CopiaOpenSE wreg MASTERMAPPER,11 ;Solo copiamos la ROM 1 de la SE Basic, como ROM 3.
wreg FLASHCS,0 ;linea CS de la flash a nivel bajo
wreg FLASHSPI,3 ;comando de lectura de la flash
ld a,04h ;
out (c),a ; Dirección donde se encuentra
ld a,40h ; la ROM en la flash: 044000h
out (c),a ;
ld a,00h ;
out (c),a ; A partir de aqui leemos secuencialmente
in a,(c) ; Primera lectura que se descarta...
call CopiaBloque
wreg FLASHCS,1 ;Deseleccionar flash
ret
CopiaBloque ld hl,49152
ld de,16384
BucCopia in a,(c) ;leemos de la flash...
ld (hl),a ;...a memoria
inc hl
dec de
ld a,d
or e
jr nz,BucCopia
ret
BorraBloque ld hl,49152
ld de,49153
ld bc,16383
ld (hl),l
ldir
ret
end Main