zxuno-git/firmware/bootloader.asm

143 lines
4.1 KiB
NASM

macro wreg dir, dato
rst $28
defb dir, dato
endm
output bootloader.rom
define zxuno_port $fc3b
define master_conf 0
define master_mapper 1
define flash_spi 2
define flash_cs 3
define joyconf 6
define scandbl_ctrl 11
di
ld sp, $bfff-ini+6
wreg flash_cs, 1 ; desactivamos spi, enviando un 0
ld de, $c771 ; tras el out (c), h de bffc se ejecuta
push de ; un rst 0 para iniciar la nueva ROM
ld de, $ed80 ; en $bffc para evitar que el cambio de ROM
push de ; colisione con la siguiente instruccion
ld bc, $bffc-ini+6
push bc
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
jp cont
nop
rst28 ld bc, zxuno_port + $100
pop hl
outi
ld b, (zxuno_port >> 8)+2
outi
jp (hl)
getbit ld a, (hl)
dec hl
adc a, a
ret
nop
rst38 jp $c006
block $0066 - $
nmi66 jp $c003
retn
cont wreg flash_cs, 1 ; desactivamos spi, enviando un 1
wreg joyconf, %00010000
wreg master_mapper, 8 ; paginamos la ROM en $c000
lee in a, ($1f)
djnz lee
wreg scandbl_ctrl, $c0 ; lo pongo a 28MHz
cp %00011000 ; arriba y disparo a la vez
jr z, recov
cp %00010100 ; arriba y disparo a la vez
jr z, recov
wreg flash_cs, 0 ; activamos spi, enviando un 0
wreg flash_spi, 3 ; envio flash_spi un 3, orden de lectura
ini out (c), h ; envia direccion 008000, a=00,e=80,a=00
out (c), e
out (c), h
add hl, sp
boot ini
inc b
cp h ; compruebo si la direccion es 0000 (final)
jr c, boot ; repito si no lo es
boot1 dec b
out (c), 0 ; a master_conf quiero enviar un 0 para pasar
inc b
ret
recov ld hl, firmware-1
ld de, $ffff
push bc
call dzx7b
pop bc
jr boot1
block $0100 - $
include scroll/define.asm
ld sp, 0
ld de, $5e6d+filesize-1
ld hl, scroll-1
call dzx7b
jp $7be4
; -----------------------------------------------------------------------------
; ZX7 Backwards by Einar Saukas, Antonio Villena
; Parameters:
; HL: source address (compressed data)
; DE: destination address (decompressing)
; -----------------------------------------------------------------------------
dzx7b ld bc, $8000
ld a, b
copyby inc c
ldd
mainlo add a, a
call z, getbit
jr nc, copyby
push de
ld d, c
defb $30
lenval add a, a
call z, getbit
rl c
rl b
add a, a
call z, getbit
jr nc, lenval
inc c
jr z, exitdz
ld e, (hl)
dec hl
sll e
jr nc, offend
ld d, $10
nexbit add a, a
call z, getbit
rl d
jr nc, nexbit
inc d
srl d
offend rr e
ex (sp), hl
ex de, hl
adc hl, de
lddr
exitdz pop hl
jr nc, mainlo
ret
incbin firmware.rom.zx7b
firmware
incbin scroll/scroll.bin.zx7b
scroll
;block $4000 - $