;
ld hl,0x5800+0x10a
ld de,text
ld c,7
text1:
ld b,12
text2:
ld a,(de)
ld (hl),a
inc hl
inc de
djnz text2
push bc
ld bc, 20
add hl,bc
pop bc
dec c
jr nz, text1
looping:
halt
jr looping
w1time:
dw 0
w2time:
db 0
w1dir:
db 0
effect:
ld bc,(w1time)
ld a,(w1dir)
and a
jr z, down
up:
dec bc
ccf
ld hl,START
sbc hl,bc
jr c, no_ovl
ld bc,START
xor a
ld (w1dir),a
jr no_ovl
down:
inc bc
inc bc
ccf
ld hl,START+WAIT
sbc hl,bc
jr nc, no_ovl
ld bc,START+WAIT
ld a,1
ld (w1dir),a
no_ovl:
ld (w1time),bc
w1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dec bc
ld a,b
or c
jr nz,w1
;;
ld d,16
ld hl,bar
ld a,(barpos)
ld b,a
add a,l
ld l,a
ld a,b
inc a
and 15
ld (barpos),a
lineloop:
ld a,(hl)
inc hl
out (254),a
ld bc,18
w2:
nop
dec bc
ld a,b
or c
jr nz,w2
dec d
jr nz, lineloop
xor a
out (254),a
ret
ld a,3
out (254),a
loop
jr loop
bar:
db 0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0
db 0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0
barpos:
db 0
text:
db 0,9,0,0,0,9,0,0,9,0,9,0
db 9,0,9,0,9,0,9,0,9,0,9,0
db 9,0,0,0,9,0,0,0,9,0,9,0
db 0,9,0,0,9,0,0,0,0,9,0,0
db 0,0,9,0,9,0,0,0,9,0,9,0
db 9,0,9,0,9,0,9,0,9,0,9,0
db 0,9,0,0,0,9,0,0,9,0,9,0
;----------------------------------------
; Next screen line address in HL
;----------------------------------------
down_hl
inc h
ld a, h
and #07
ret nz
ld a, l
sub #e0
ld l, a
sbc a, a
and #f8
add a, h
ld h, a
ret
;----------------------------------------
; Previous screen line address in HL
;----------------------------------------
up_hl
dec h
ld a, h
cpl
and #07
ret nz
ld a, l
sub #20
ld l, a
ret c
ld a, h
add a, #08
ld h, a
ret
;----------------------------------------
; in: L = x [0..255]
; H = y [0..191]
; out: HL = addr in screen [4000..57FF]
; C = pixel number [0..7]
;----------------------------------------
hl_to_scr
ld c, l
ld a, l
rlca : rlca : rlca
xor h
and #c7
xor h
rlca : rlca
ld l, a
ld a, h
and #c0
inc a
rra : rra : rra
xor h
and #f8
xor h
ld h, a
ld a, c
and 7
ret
;----------------------------------------
; in: HL = addr in screen [4000..57FF]
; out: HL = addr in attrs [5800..5AFF]
;----------------------------------------
scr_to_attrs
ld a, h
rrca : rrca : rrca
and #03
or #58
ld h, a
ret
;----------------------------------------
; in: L = x [0..255]
; H = y [0..191]
;----------------------------------------
set_point
call hl_to_scr
ld de, pixel_tbl
add a, e
ld e, a
ld a, (de)
ld (hl), a
ret
align 8
pixel_tbl
db #80,#40,#20,#10,#08,#04,#02,#01
;----------------------------------------
; in: none
; out: HL = random 16bit value
;----------------------------------------
rnd16
sd equ $+1
ld de, 0
ld a, d
ld h, e
ld l, 253
or a
sbc hl, de
sbc a, 0
sbc hl, de
ld d, 0
sbc a, d
ld e, a
sbc hl, de
jr nc, .st
inc hl
st ld (.sd), hl
ret
;----------------------------------------
; in: IX = addr of 256b buffer
; out: generated sin table
;----------------------------------------
gen_sin
ld de, #7fbc
ld hl, #ff7f
g0 ld a, d
xor #80 ; uncomment for unsigned
ld (ix), a
xor #80 ; uncomment for unsigned
rla
sbc a, a
ld b, a
ld c, d
adc hl, bc
rr c
rrca
rr c
add hl, bc
ld b, h
ld a, l
ex de, hl
sra b : rra
sra b : rra
sra b : rra
ld c, a
;or a
sbc hl, bc
ex de, hl
inc ixl
jr nz, .g0
ret