org &4000
nolist
pen0 equ %00000000
pen1 equ %00001000
pen2 equ %10000000
pen3 equ %10001000
start:
call make_scr_table
ld h,0
ld l,1
call set_txt_coord
ld h,pen0
ld l,pen1
call set_txt_colours
ld hl,message
call display_message
l1:
jp l1
display_message:
ld a,(hl)
inc hl
or a
ret z
call display_char
jr display_message
message: defb "THIS IS A TEST",0
display_char:
push hl
push de
push bc
sub ' '
ld l,a
ld h,0
add hl,hl
add hl,hl
add hl,hl
ld de,font
add hl,de
call depack_char
ld a,(txt_x)
srl a
ld c,a
add a,a
add a,c
ld c,a
ld a,(txt_x)
and &1
add a,c
ld h,a
ld a,(txt_y)
add a,a
add a,a
add a,a
ld l,a
call get_scr_addr
ld de,char_depack_buffer
ex de,hl
call display_char2
ld hl,txt_x
inc (hl)
pop bc
pop de
pop hl
ret
display_char2:
ld a,(txt_x)
and 1
jp nz,display_char_odd
jp display_char_even
set_txt_coord:
ld (txt_coords),hl
ret
set_txt_colours:
ld a,h
ld (bk_color+1),a
ld a,l
ld (fg_color+1),a
ret
depack_char:
ld b,8
ld de,char_depack_buffer
depack_char2:
push bc
ld c,(hl)
call depack_byte
call depack_byte
inc hl
pop bc
djnz depack_char2
ret
depack_byte:
xor a
call depack_pixel
call depack_pixel
call depack_pixel
call depack_pixel
ld (de),a
inc de
ret
depack_pixel:
call depack_pix
or b
rlca
ret
depack_pix:
rlc c
bk_color:
ld b,0
ret nc
fg_color:
ld b,1
ret
scr_next_line:
ld a,h
add a,8
ld h,a
ret nc
ld a,l
add a,&50
ld l,a
ld a,h
adc a,&c0
ld h,a
ret
get_scr_addr:
push bc
push de
ld c,h
ld h,0
add hl,hl
ld de,scr_table
add hl,de
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
ld b,0
add hl,bc
pop de
pop bc
ret
make_scr_table:
ld ix,scr_table
ld hl,&c000
ld b,200
mst1:
ld (ix+0),l
ld (ix+1),h
inc ix
inc ix
call scr_next_line
djnz mst1
ret
scr_table:
defs 200*2
txt_coords:
txt_y:
defb 0
txt_x:
defb 0
display_char_odd:
ld b,8
dco1:
push bc
push de
ld a,(de)
and %11001100
ld c,a
ld a,(hl)
rrca
rrca
and %00110011
or c
ld (de),a
inc de
ld a,(hl)
rlca
rlca
and %11001100
ld c,a
inc hl
ld a,(hl)
rrca
rrca
and %00110011
or c
ld (de),a
inc hl
pop de
ex de,hl
call scr_next_line
ex de,hl
pop bc
djnz dco1
ret
display_char_even:
ld b,8
dce1:
push bc
push de
ld a,(hl)
ld (de),a
inc de
inc hl
ld a,(de)
and %00110011
ld c,a
ld a,(hl)
and %11001100
or c
ld (de),a
inc hl
pop de
ex de,hl
call scr_next_line
ex de,hl
pop bc
djnz dce1
ret
char_depack_buffer: defs 16
font:
defb &00
defb &00,&00,&00,&00,&00,&00,&00,&00,&10,&10,&10,&10,&00,&10,&00,&00
defb &28,&28,&00,&00,&00,&00,&00,&00,&28,&7c,&28,&28,&7c,&28,&00,&00
defb &10,&7c,&50,&7c,&14,&7c,&10,&60,&64,&08,&10,&20,&4c,&0c,&00,&10
defb &28,&28,&30,&54,&48,&34,&00,&10,&10,&20,&00,&00,&00,&00,&00,&08
defb &10,&20,&20,&20,&10,&08,&00,&20,&10,&08,&08,&08,&10,&20,&00,&00
defb &00,&28,&10,&7c,&10,&28,&00,&00,&00,&10,&10,&7c,&10,&10,&00,&00
defb &00,&00,&00,&00,&20,&20,&40,&00,&00,&00,&00,&7c,&00,&00,&00,&00
defb &00,&00,&00,&00,&30,&30,&00,&00,&00,&04,&08,&10,&20,&40,&00,&00
defb &38,&4c,&54,&54,&64,&38,&00,&00,&30,&50,&10,&10,&10,&7c,&00,&00
defb &38,&44,&04,&38,&40,&7c,&00,&00,&38,&44,&18,&04,&44,&38,&00,&00
defb &08,&18,&28,&48,&7c,&08,&00,&00,&7c,&40,&78,&04,&44,&38,&00,&00
defb &38,&40,&78,&44,&44,&38,&00,&00,&7c,&04,&08,&10,&20,&20,&00,&00
defb &38,&44,&38,&44,&44,&38,&00,&00,&38,&44,&44,&3c,&04,&38,&00,&00
defb &00,&00,&20,&00,&00,&20,&00,&00,&00,&10,&00,&00,&10,&10,&20,&00
defb &00,&08,&10,&20,&10,&08,&00,&00,&00,&00,&7c,&00,&7c,&00,&00,&00
defb &00,&20,&10,&08,&10,&20,&00,&00,&38,&44,&08,&10,&00,&10,&00,&70
defb &00,&70,&48,&48,&48,&48,&00,&00,&38,&44,&44,&7c,&44,&44,&00,&00
defb &78,&44,&78,&44,&44,&78,&00,&00,&38,&44,&40,&40,&44,&38,&00,&00
defb &78,&24,&24,&24,&24,&78,&00,&00,&7c,&40,&78,&40,&40,&7c,&00,&00
defb &7c,&40,&78,&40,&40,&40,&00,&00,&38,&44,&40,&4c,&44,&38,&00,&00
defb &44,&44,&7c,&44,&44,&44,&00,&00,&38,&10,&10,&10,&10,&38,&00,&00
defb &04,&04,&04,&44,&44,&38,&00,&00,&48,&50,&60,&50,&48,&44,&00,&00
defb &40,&40,&40,&40,&40,&7c,&00,&00,&44,&6c,&54,&44,&44,&44,&00,&00
defb &44,&64,&54,&4c,&44,&44,&00,&00,&38,&44,&44,&44,&44,&38,&00,&00
defb &78,&44,&44,&78,&40,&40,&00,&00,&38,&44,&44,&54,&48,&34,&00,&00
defb &78,&44,&44,&78,&48,&44,&00,&00,&38,&40,&38,&04,&44,&38,&00,&00
defb &7c,&10,&10,&10,&10,&10,&00,&00,&44,&44,&44,&44,&44,&38,&00,&00
defb &44,&44,&44,&44,&28,&10,&00,&00,&44,&44,&44,&44,&54,&28,&00,&00
defb &44,&28,&10,&10,&28,&44,&00,&00,&44,&44,&28,&10,&10,&10,&00,&00
defb &7c,&08,&10,&20,&40,&7c,&00,&00
list