zxuno-git/firmware/scroll/scroll.asm

268 lines
5.4 KiB
NASM

output scroll.bin
org $5d27
ld hl, fondo
ld b, $40 ; filtro RCS inverso
start ld a, b
xor c
and $f8
xor c
ld d, a
xor b
xor c
rlca
rlca
ld e, a
inc bc
ldi
inc bc
ld a, b
sub $58
jr nz, start
ld b, 3
ldir
out ($fe), a
inc a
ex af, af'
ld hl, chr
push hl
pop ix
ld de, $b400-fondo+chr
ld bc, fondo-chr
ldir
ld hl, $b000
start1 ld b, $08
start2 ld a, (hl)
rrca
ld (de), a
inc de
cpi
jp pe, start2
jr nc, start1
start3 ei
halt
di
ld c, 4
start4 djnz start4
dec c
jr nz, start4
include lineas.asm
ld sp, $401b+$800*2+$100*7+$20*7
sbc hl, hl
push hl
push hl
push hl
push hl
push hl
push hl
push hl
push hl
push hl
push hl
push hl
ld sp, hl
ld hl, start3
push hl
ex af, af'
rrca
jr c, start5
ex af, af'
ret
start5 ex af, af'
xor a
cp (ix)
jr nz, start6
ld ix, string
start6 push ix
pop hl
ld c, $2b
cpir
ld b, c
ld c, $17
push bc
srl b
ld a, b
jr c, prn2
and %11111100
ld d, a
xor b
ld b, a
ld e, a
jr z, prn1
dec e
prn1 ld a, d
rrca
ld d, a
rrca
add a, d
add a, e
ld e, a
ld a, c
and %00011000
or %01000000
ld d, a
ld a, c
and %00000111
rrca
rrca
rrca
add a, e
ld e, a
inc c
rr b
jr c, pos26
jr nz, pos4
pos0 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $2c
call simple
pos2 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $32
ld bc, $04fc
call doble
pos4 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $30
ld bc, $04f0
call doble
pos6 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $2e
call simple
inc de
jr pos0
pos26 rr b
jr c, pos6
jr pos2
posf pop bc
inc c
ret
prn2 and %11111100
ld d, a
xor b
ld b, a
cp 2
adc a, -1
ld e, a
ld a, d
rrca
ld d, a
rrca
add a, d
add a, e
ld e, a
ld a, c
and %00011000
or %01000000
ld d, a
ld a, c
and %00000111
rrca
rrca
rrca
add a, e
ld e, a
inc c
rr b
jr c, pos37
jr nz, pos5
pos1 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $2f
ld bc, $04e0
call doble
pos3 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $2d
call simple
pos5 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $33
ld bc, $04fe
call doble
pos7 ld a, (ix)
inc ix
add a, a
jr z, posf
ld h, $31
ld bc, $04f8
call doble
jr pos1
pos37 rr b
jr c, pos7
jr pos3
simple ld b, 4
ld l, a
add hl, hl
add hl, hl
simple2 ld a, (de)
xor (hl)
ld (de), a
inc d
inc l
ld a, (de)
xor (hl)
ld (de), a
inc d
inc l
djnz simple2
ld hl, $f800
add hl, de
ex de, hl
ret
doble ld l, a
add hl, hl
add hl, hl
doble2 ld a, (de)
xor (hl)
and c
xor (hl)
ld (de), a
inc e
ld a, (hl)
and c
ld (de), a
inc d
inc l
ld a, (hl)
and c
ld (de), a
dec e
ld a, (de)
xor (hl)
and c
xor (hl)
ld (de), a
inc d
inc l
djnz doble2
ld hl, $f801
add hl, de
ex de, hl
ret
string include string.asm
chr incbin fuente6x8.bin
fondo incbin fondo.rcs
fin