zxuno-git/firmware/firmloader.asm

87 lines
2.2 KiB
NASM

output firmloader.rom
macro wreg dir, dato
rst $28
defb dir, dato
endm
define zxuno_port $fc3b
define master_conf 0
define master_mapper 1
di
ld sp, $bfff
ld de, $c771 ; tras el out (c), h de bffc se ejecuta
push de ; un rst 0 para iniciar la nueva ROM
ld de, $edff ; en $bffc para evitar que el cambio de ROM
push de ; colisione con la siguiente instruccion
wreg master_mapper, 8 ; paginamos la ROM en $c000
ld hl, fin-1
ld d, e
rst $38
ld bc, zxuno_port
out (c), 0 ; a master_conf quiero enviar un 0 para pasar
inc b
jp $bffc
acab rr e
ex de, hl
adc hl, de
lddr
exitdz pop hl
jr nc, mainlo
ret
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
; -----------------------------------------------------------------------------
; 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 ex (sp), hl
jr acab
incbin firmware.rom.zx7b
fin