mirror of
https://github.com/andreili/OriVEmu.git
synced 2025-08-23 11:24:07 +02:00
969 lines
21 KiB
NASM
969 lines
21 KiB
NASM
.org 0
|
|
_p00_config = 0x0000
|
|
_p03_set = 0x0003
|
|
_p04_RAM0 = 0x0004
|
|
_p05_RAM1 = 0x0005
|
|
_p06_RAM2 = 0x0006
|
|
_p07_set = 0x0007
|
|
_p0a_mem_man = 0x000a
|
|
_p0b_set = 0x000b
|
|
_p1d_set = 0x001d
|
|
_p3b_set = 0x003b
|
|
_pfa_vbank = 0x00fa
|
|
_pfc_color_reg = 0x00fc
|
|
_pf8_vmode = 0xf8
|
|
|
|
CONFIG_TURBO_BIT = 3
|
|
CONFIG_WIDE_BIT = 4
|
|
CONFIG_MEM_TEST_BIT = 5
|
|
|
|
MEMM_RAM0EN_BIT = 0
|
|
MEMM_RAM1EN_BIT = 1
|
|
MEMM_RAM2EN_BIT = 2
|
|
MEMM_TURBO_BIT = 5
|
|
VB_WIDE_BIT = 7
|
|
|
|
VBANK_START = 0xc000
|
|
RAM1_WINDOW = 0x4000
|
|
|
|
TEST_16C_PALLETE = 0x5f
|
|
|
|
TEST_VBANK_IDX = 0x00
|
|
|
|
; registers global:
|
|
; B - configuration switches
|
|
; C - phase (0x00/0xFF)
|
|
|
|
init:
|
|
ld sp, 0x3fff
|
|
ld a, 0x98
|
|
out (_p03_set), a
|
|
ld a, 0x80
|
|
out (_p07_set), a
|
|
ld a, 0x80
|
|
out (_p0b_set), a
|
|
ld a, 0x92
|
|
out (_p1d_set), a
|
|
ld a, 0x16
|
|
out (_p3b_set), a
|
|
ld a, 0x56
|
|
out (_p3b_set), a
|
|
ld a, 0x96
|
|
out (_p3b_set), a
|
|
ld a, 0x10
|
|
out (_p0a_mem_man), a
|
|
ld a, 0x00
|
|
out (_pf8_vmode), a
|
|
jp fill_vmem
|
|
|
|
main:
|
|
in a, (_p00_config)
|
|
ld b, a ; save configuration to B
|
|
jp set_turbo
|
|
main_turbo:
|
|
ld a, TEST_VBANK_IDX
|
|
jp set_vbank ; set video bank to 0 (0xC000-0xFFFF)
|
|
main_vbank:
|
|
bit CONFIG_MEM_TEST_BIT, b
|
|
jr NZ, mem_test
|
|
main_memt:
|
|
ld a, b ; load configuretion to A
|
|
and 0x07 ; extract video test number
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl
|
|
ld de, video_tests
|
|
add hl, de
|
|
ld a, (hl)
|
|
inc hl
|
|
ld h, (hl)
|
|
ld l, a
|
|
jp (hl)
|
|
main_video_end:
|
|
ld de, TEST_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 28
|
|
ld hl, main_title_end
|
|
jp print_str
|
|
main_title_end:
|
|
; wait loop
|
|
ld d, 0
|
|
wait_loop0:
|
|
inc d
|
|
ld hl, 0x0000
|
|
wait_loop1:
|
|
inc hl
|
|
ld a, h
|
|
sub a, 0x80
|
|
jr C, wait_loop1
|
|
ld a, d
|
|
sub a, 4
|
|
jr C, wait_loop0
|
|
jr main
|
|
|
|
TEST_TITLE:
|
|
.db "ORION-128 NG tests (andreil, 2020)", 0x00
|
|
|
|
mem_test:
|
|
; monochrome video mode
|
|
ld a, VMODE_2COLOR_1PALLETE
|
|
out (_pf8_vmode), a
|
|
; disable widescreen
|
|
ld a, TEST_VBANK_IDX
|
|
out (_pfa_vbank), a
|
|
; enable turbo mode
|
|
in a, (_p0a_mem_man)
|
|
set MEMM_TURBO_BIT, a
|
|
out (_p0a_mem_man), a
|
|
mem_test_main_loop:
|
|
; draw screen
|
|
ld de, TEST_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 31
|
|
ld hl, main_title_end
|
|
jp print_str
|
|
jr mem_test_main_loop
|
|
|
|
video_tests:
|
|
.DW test_2colors_pallet1
|
|
.DW test_2colors_pallet2
|
|
.DW test_4colors_pallet1
|
|
.DW test_4colors_pallet2
|
|
.DW test_16colors_group
|
|
.DW test_16colors_pallet
|
|
.DW test_3bit
|
|
.DW test_4bit
|
|
|
|
fill_vmem:
|
|
; enable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
set MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
ld c, 0
|
|
; set RAM 1 segment
|
|
loop_seg:
|
|
ld a, c
|
|
out (_p05_RAM1), a
|
|
; screen pointer
|
|
ld hl, RAM1_WINDOW
|
|
ld d, 00
|
|
loop_vm:
|
|
ld (hl), d
|
|
inc hl
|
|
; check end
|
|
ld a, h
|
|
cp 0x80
|
|
jr NZ, loop_vm
|
|
ld a, c
|
|
inc c
|
|
cp 16
|
|
jr NZ, loop_seg
|
|
; disable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
res MEMM_RAM1EN_BIT, a
|
|
nop
|
|
out (_p0a_mem_man), a
|
|
jp main
|
|
|
|
set_turbo:
|
|
in a, (_p0a_mem_man)
|
|
res MEMM_TURBO_BIT, a
|
|
bit CONFIG_TURBO_BIT, b
|
|
jr Z, turbo_not_set
|
|
set MEMM_TURBO_BIT, a
|
|
turbo_not_set:
|
|
out (_p0a_mem_man), a
|
|
jp main_turbo
|
|
|
|
set_vbank:
|
|
bit CONFIG_WIDE_BIT, b
|
|
jr NZ, wide_not_set
|
|
set VB_WIDE_BIT, a
|
|
wide_not_set:
|
|
out (_pfa_vbank), a
|
|
jp main_vbank
|
|
|
|
VMODE_2COLOR_1PALLETE = 0x00
|
|
VMODE_2COLOR_2PALLETE = 0x01
|
|
VMODE_4COLOR_1PALLETE = 0x04
|
|
VMODE_4COLOR_2PALLETE = 0x05
|
|
VMODE_16COLOR_GROUP = 0x06
|
|
VMODE_16COLOR_PALLET = 0x0e
|
|
VMODE_3BIT = 0x10
|
|
VMODE_4BIT = 0x14
|
|
|
|
VIDEO_TEST_0_TITLE:
|
|
.db "TEST: 2 colors, pallete 1 ", 0x00
|
|
VIDEO_TEST_1_TITLE:
|
|
.db "TEST: 2 colors, pallete 2 ", 0x00
|
|
VIDEO_TEST_2_TITLE:
|
|
.db "TEST: 4 colors, pallete 1 ", 0x00
|
|
VIDEO_TEST_3_TITLE:
|
|
.db "TEST: 4 colors, pallete 2 ", 0x00
|
|
VIDEO_TEST_4_TITLE:
|
|
.db "TEST: 16 colors, group ", 0x00
|
|
VIDEO_TEST_5_TITLE:
|
|
.db "TEST: 16 colors, pallete (port 0xFC)", 0x00
|
|
VIDEO_TEST_6_TITLE:
|
|
.db "TEST: 3bit colors ", 0x00
|
|
VIDEO_TEST_7_TITLE:
|
|
.db "TEST: 4bit colors ", 0x00
|
|
|
|
test_2colors_pallet1:
|
|
ld a, VMODE_2COLOR_1PALLETE
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_2colors_pallet1_end:
|
|
ld de, VIDEO_TEST_0_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_2colors_pallet2:
|
|
ld a, VMODE_2COLOR_2PALLETE
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_2colors_pallet2_end:
|
|
ld de, VIDEO_TEST_1_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_4colors_pallet1:
|
|
ld a, VMODE_4COLOR_1PALLETE
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_4colors_pallet1_end:
|
|
jp fill_scr_2_4c
|
|
test_4colors_pallet1_end2:
|
|
ld de, VIDEO_TEST_2_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_4colors_pallet2:
|
|
ld a, VMODE_4COLOR_2PALLETE
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_4colors_pallet2_end:
|
|
jp fill_scr_2_4c
|
|
test_4colors_pallet2_end2:
|
|
ld de, VIDEO_TEST_3_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_16colors_group:
|
|
ld a, VMODE_16COLOR_GROUP
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_16colors_group_end:
|
|
jp fill_scr_2_16c
|
|
test_16colors_group_end2:
|
|
ld de, VIDEO_TEST_4_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_16colors_pallet:
|
|
ld a, VMODE_16COLOR_PALLET
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_16colors_pallet_end:
|
|
ld a, TEST_16C_PALLETE
|
|
out (_pfc_color_reg), a
|
|
test_16colors_pallet_end2:
|
|
ld de, VIDEO_TEST_5_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_3bit:
|
|
ld a, VMODE_3BIT
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_3bit_end:
|
|
jp fill_scr_blue
|
|
test_3bit_end3:
|
|
jp fill_scr_red
|
|
test_3bit_end4:
|
|
ld de, VIDEO_TEST_6_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_4bit:
|
|
ld a, VMODE_4BIT
|
|
out (_pf8_vmode), a
|
|
jp fill_scr_1
|
|
test_4bit_end:
|
|
; fill I
|
|
jp fill_scr_2_4c
|
|
test_4bit_end2:
|
|
jp fill_scr_blue
|
|
test_4bit_end3:
|
|
jp fill_scr_red
|
|
test_4bit_end4:
|
|
ld de, VIDEO_TEST_7_TITLE
|
|
ld iyh, 0
|
|
ld iyl, 29
|
|
ld hl, main_video_end
|
|
jp print_str
|
|
|
|
test_ret_table:
|
|
.DW test_2colors_pallet1_end
|
|
.DW test_2colors_pallet2_end
|
|
.DW test_4colors_pallet1_end
|
|
.DW test_4colors_pallet2_end
|
|
.DW test_16colors_group_end
|
|
.DW test_16colors_pallet_end
|
|
.DW test_3bit_end
|
|
.DW test_4bit_end
|
|
|
|
fill_scr_1:
|
|
; usage:
|
|
; hl - screen pointer
|
|
; de - temp
|
|
ld hl, VBANK_START
|
|
loop_f1_col:
|
|
ld l, 0
|
|
loop_f1_row:
|
|
ld (hl), 0xff
|
|
inc hl
|
|
ld (hl), 0x81
|
|
inc hl
|
|
ld (hl), 0x81
|
|
inc hl
|
|
ld (hl), 0x81
|
|
inc hl
|
|
ld (hl), 0x81
|
|
inc hl
|
|
ld (hl), 0x81
|
|
inc hl
|
|
ld (hl), 0x81
|
|
inc hl
|
|
ld (hl), 0xff
|
|
inc hl
|
|
; check column end
|
|
ld a, l
|
|
cp 0xe0
|
|
jr C, loop_f1_row
|
|
ld de, 0x0020
|
|
ld a, h
|
|
add hl, de
|
|
; check row end
|
|
cp 0xff
|
|
jr NZ, loop_f1_col
|
|
; print column numbers
|
|
ld d, 0
|
|
ld hl, 0 ; h=*10 , l=*1
|
|
fill1_nbrs:
|
|
ld a, l
|
|
add a, '0'
|
|
ld iyh, d
|
|
ld iyl, 31
|
|
ld ix, fill1_enbrs1
|
|
jp print_chr
|
|
fill1_enbrs1:
|
|
ld a, h
|
|
add a, '0'
|
|
ld iyh, d
|
|
ld iyl, 30
|
|
ld ix, fill1_enbrs2
|
|
jp print_chr
|
|
fill1_enbrs2:
|
|
inc l
|
|
ld a, l
|
|
cp 10
|
|
jr C, fill1_nnbrs
|
|
inc h
|
|
ld l, 0
|
|
fill1_nnbrs:
|
|
inc d
|
|
ld a, d
|
|
cp 64
|
|
jr C, fill1_nbrs
|
|
fill1_end:
|
|
; return to test
|
|
ld a, b ; load configuration to A
|
|
and 0x07 ; extract video test number
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl
|
|
ld de, test_ret_table
|
|
add hl, de
|
|
ld a, (hl)
|
|
inc hl
|
|
ld h, (hl)
|
|
ld l, a
|
|
jp (hl)
|
|
|
|
test_ret_table_2:
|
|
.DW 0
|
|
.DW 0
|
|
.DW test_4colors_pallet1_end2
|
|
.DW test_4colors_pallet2_end2
|
|
.DW test_16colors_group_end2
|
|
.DW 0
|
|
.DW 0
|
|
.DW test_4bit_end2
|
|
|
|
fill_scr_2_4c:
|
|
; enable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
set MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; set RAM 1 to segment #7
|
|
ld a, 7
|
|
out (_p05_RAM1), a
|
|
; screen pointer
|
|
ld hl, RAM1_WINDOW
|
|
ld d, 0 ; columns
|
|
fill2_row:
|
|
; col N
|
|
ld a, 0
|
|
fill2_sr1:
|
|
ld (hl), 0xff
|
|
inc hl
|
|
inc a
|
|
cp 0xe0
|
|
jr C, fill2_sr1
|
|
; skip 4 rows
|
|
ld a, d
|
|
ld de, 0x0020
|
|
add hl, de
|
|
ld d, a
|
|
; col N+1
|
|
ld a, 0
|
|
fill2_sr2:
|
|
ld (hl), 0x00
|
|
inc hl
|
|
inc a
|
|
cp 0xe0
|
|
jr C, fill2_sr2
|
|
; skip 4 rows
|
|
ld a, d
|
|
ld de, 0x0020
|
|
add hl, de
|
|
ld d, a
|
|
; decrease columns counter
|
|
inc d
|
|
ld a, d
|
|
cp 32
|
|
jr C, fill2_row
|
|
fill2_end:
|
|
; disable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
res MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; return to test
|
|
ld a, b ; load configuration to A
|
|
and 0x07 ; extract video test number
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl
|
|
ld de, test_ret_table_2
|
|
add hl, de
|
|
ld a, (hl)
|
|
inc hl
|
|
ld h, (hl)
|
|
ld l, a
|
|
jp (hl)
|
|
|
|
fill_scr_2_16c:
|
|
; enable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
set MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; set RAM 1 to segment #7
|
|
ld a, 7
|
|
out (_p05_RAM1), a
|
|
; screen pointer
|
|
ld hl, RAM1_WINDOW
|
|
ld d, 0 ; columns
|
|
fill3_row:
|
|
; calculate fill value
|
|
ld a, d
|
|
and 0x0f
|
|
sla a
|
|
sla a
|
|
sla a
|
|
sla a
|
|
ld e, a
|
|
ld c, 0
|
|
; rows main
|
|
fill3_sr1:
|
|
ld a, c
|
|
and 0x0f
|
|
add a, e
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
inc c
|
|
ld a, c
|
|
cp 0x1c
|
|
jr C, fill3_sr1
|
|
; rows titles
|
|
;ld a, d
|
|
;and 0x0f
|
|
;jr NZ, fill3_nz
|
|
ld a, 1
|
|
fill3_nz:
|
|
ld e, a
|
|
ld a, 0
|
|
fill3_sr2:
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
inc a
|
|
cp 0x4
|
|
jr C, fill3_sr2
|
|
; decrease columns counter
|
|
inc d
|
|
ld a, d
|
|
cp 64
|
|
jr C, fill3_row
|
|
fill3_end:
|
|
; disable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
res MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; return to test
|
|
ld a, b ; load configuration to A
|
|
and 0x07 ; extract video test number
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl
|
|
ld de, test_ret_table_2
|
|
add hl, de
|
|
ld a, (hl)
|
|
inc hl
|
|
ld h, (hl)
|
|
ld l, a
|
|
jp (hl)
|
|
|
|
test_ret_table_3:
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW test_3bit_end3
|
|
.DW test_4bit_end3
|
|
|
|
fill_scr_blue:
|
|
; enable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
set MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; set RAM 1 to segment #6
|
|
ld a, 6
|
|
out (_p05_RAM1), a
|
|
; screen pointer
|
|
ld hl, RAM1_WINDOW
|
|
ld d, 0 ; columns
|
|
fill4_row:
|
|
ld c, 0
|
|
; rows main
|
|
fill4_sr1:
|
|
ld a, l
|
|
and 0x08
|
|
cp 0x08
|
|
jr C, fill4_ff
|
|
ld a, 0x00
|
|
jp fill4_st
|
|
fill4_ff:
|
|
ld a, 0xff
|
|
fill4_st:
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
inc c
|
|
ld a, c
|
|
cp 0x1c
|
|
jr C, fill4_sr1
|
|
; rows titles
|
|
;ld a, d
|
|
;and 0x0f
|
|
;jr NZ, fill3_nz
|
|
ld a, 1
|
|
fill4_nz:
|
|
ld e, 0
|
|
ld a, 0
|
|
fill4_sr2:
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
inc a
|
|
cp 0x4
|
|
jr C, fill4_sr2
|
|
; decrease columns counter
|
|
inc d
|
|
ld a, d
|
|
cp 64
|
|
jr C, fill4_row
|
|
fill4_end:
|
|
; disable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
res MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; return to test
|
|
ld a, b ; load configuration to A
|
|
and 0x07 ; extract video test number
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl
|
|
ld de, test_ret_table_3
|
|
add hl, de
|
|
ld a, (hl)
|
|
inc hl
|
|
ld h, (hl)
|
|
ld l, a
|
|
jp (hl)
|
|
|
|
test_ret_table_4:
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW 0
|
|
.DW test_3bit_end4
|
|
.DW test_4bit_end4
|
|
|
|
fill_scr_red:
|
|
; enable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
set MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; set RAM 1 to segment #2
|
|
ld a, 2
|
|
out (_p05_RAM1), a
|
|
; screen pointer
|
|
ld hl, RAM1_WINDOW
|
|
ld d, 0 ; columns
|
|
fill5_row:
|
|
ld c, 0
|
|
; rows main
|
|
fill5_sr1:
|
|
ld a, l
|
|
and 0x10
|
|
cp 0x10
|
|
jr C, fill5_ff
|
|
ld a, 0x00
|
|
jp fill5_st
|
|
fill5_ff:
|
|
ld a, 0xff
|
|
fill5_st:
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
ld (hl), a
|
|
inc hl
|
|
inc c
|
|
ld a, c
|
|
cp 0x1c
|
|
jr C, fill5_sr1
|
|
; rows titles
|
|
;ld a, d
|
|
;and 0x0f
|
|
;jr NZ, fill3_nz
|
|
ld a, 1
|
|
fill5_nz:
|
|
ld e, 0
|
|
ld a, 0
|
|
fill5_sr2:
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
ld (hl), e
|
|
inc hl
|
|
inc a
|
|
cp 0x4
|
|
jr C, fill5_sr2
|
|
; decrease columns counter
|
|
inc d
|
|
ld a, d
|
|
cp 64
|
|
jr C, fill5_row
|
|
fill5_end:
|
|
; disable window on RAM1
|
|
in a, (_p0a_mem_man)
|
|
res MEMM_RAM1EN_BIT, a
|
|
out (_p0a_mem_man), a
|
|
; return to test
|
|
ld a, b ; load configuration to A
|
|
and 0x07 ; extract video test number
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl
|
|
ld de, test_ret_table_4
|
|
add hl, de
|
|
ld a, (hl)
|
|
inc hl
|
|
ld h, (hl)
|
|
ld l, a
|
|
jp (hl)
|
|
|
|
print_chr:
|
|
; parameters:
|
|
; A - char
|
|
; iyh - column
|
|
; iyl - row
|
|
; ix - return address
|
|
; usage:
|
|
; shadow registers
|
|
exx
|
|
; get character start
|
|
ld de, font
|
|
ld h, 0
|
|
ld l, a
|
|
add hl, hl ; *2
|
|
add hl, hl ; *2
|
|
add hl, hl ; *2
|
|
add hl, de
|
|
; calculate screen start
|
|
ld a, iyl ;28
|
|
add a, a ; *2
|
|
add a, a ; *2
|
|
add a, a ; *2
|
|
ld e, a
|
|
ld a, iyh ;0
|
|
add a, 0xc0
|
|
ld d, a
|
|
; set count
|
|
ld bc, 0x0008
|
|
ldir
|
|
exx
|
|
jp ix
|
|
|
|
print_str:
|
|
; parameters:
|
|
; de - string start (ZERO-ended)
|
|
; iyh - column
|
|
; iyl - row
|
|
; hl - return address
|
|
ld ix, print_str_add
|
|
print_str_loop:
|
|
ld a, (de)
|
|
cp 0
|
|
jr Z, print_str_exit
|
|
inc de
|
|
jp print_chr
|
|
print_str_add:
|
|
inc iyh
|
|
jr print_str_loop
|
|
print_str_exit:
|
|
jp hl
|
|
|
|
font:
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 0
|
|
.db 0x00, 0x3E, 0x41, 0x55, 0x41, 0x55, 0x49, 0x3E // 1
|
|
.db 0x00, 0x3E, 0x7F, 0x6B, 0x7F, 0x6B, 0x77, 0x3E // 2
|
|
.db 0x00, 0x22, 0x77, 0x7F, 0x7F, 0x3E, 0x1C, 0x08 // 3
|
|
.db 0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08 // 4
|
|
.db 0x00, 0x08, 0x1C, 0x2A, 0x7F, 0x2A, 0x08, 0x1C // 5
|
|
.db 0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x08, 0x1C // 6
|
|
.db 0x00, 0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00 // 7
|
|
.db 0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0xC1, 0xE3, 0xFF // 8
|
|
.db 0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00 // 9
|
|
.db 0xFF, 0xFF, 0xE3, 0xDD, 0xDD, 0xDD, 0xE3, 0xFF // a
|
|
.db 0x00, 0x0F, 0x03, 0x05, 0x39, 0x48, 0x48, 0x30 // b
|
|
.db 0x00, 0x08, 0x3E, 0x08, 0x1C, 0x22, 0x22, 0x1C // c
|
|
.db 0x00, 0x18, 0x14, 0x10, 0x10, 0x30, 0x70, 0x60 // d
|
|
.db 0x00, 0x0F, 0x19, 0x11, 0x13, 0x37, 0x76, 0x60 // e
|
|
.db 0x00, 0x08, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x08 // f
|
|
.db 0x00, 0x60, 0x78, 0x7E, 0x7F, 0x7E, 0x78, 0x60 // 10
|
|
.db 0x00, 0x03, 0x0F, 0x3F, 0x7F, 0x3F, 0x0F, 0x03 // 11
|
|
.db 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x08 // 12
|
|
.db 0x00, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66 // 13
|
|
.db 0x00, 0x3F, 0x65, 0x65, 0x3D, 0x05, 0x05, 0x05 // 14
|
|
.db 0x00, 0x0C, 0x32, 0x48, 0x24, 0x12, 0x4C, 0x30 // 15
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F // 16
|
|
.db 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x3E // 17
|
|
.db 0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x1C, 0x1C, 0x1C // 18
|
|
.db 0x00, 0x1C, 0x1C, 0x1C, 0x7F, 0x3E, 0x1C, 0x08 // 19
|
|
.db 0x00, 0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, 0x08 // 1a
|
|
.db 0x00, 0x08, 0x18, 0x3F, 0x7F, 0x3F, 0x18, 0x08 // 1b
|
|
.db 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x7F, 0x7F // 1c
|
|
.db 0x00, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00 // 1d
|
|
.db 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x3E, 0x7F, 0x7F // 1e
|
|
.db 0x00, 0x7F, 0x7F, 0x3E, 0x3E, 0x1C, 0x1C, 0x08 // 1f
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 20
|
|
.db 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18 // 21
|
|
.db 0x00, 0x36, 0x36, 0x14, 0x00, 0x00, 0x00, 0x00 // 22
|
|
.db 0x00, 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36 // 23
|
|
.db 0x00, 0x08, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x08 // 24
|
|
.db 0x00, 0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06 // 25
|
|
.db 0x00, 0x3C, 0x66, 0x3C, 0x28, 0x65, 0x66, 0x3F // 26
|
|
.db 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00 // 27
|
|
.db 0x00, 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06 //
|
|
.db 0x00, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60 //
|
|
.db 0x00, 0x00, 0x36, 0x1C, 0x7F, 0x1C, 0x36, 0x00
|
|
.db 0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x60
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60
|
|
.db 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00
|
|
.db 0x00, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C
|
|
.db 0x00, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E
|
|
.db 0x00, 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E
|
|
.db 0x00, 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C
|
|
.db 0x00, 0x0C, 0x1C, 0x2C, 0x4C, 0x7E, 0x0C, 0x0C
|
|
.db 0x00, 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C
|
|
.db 0x00, 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C
|
|
.db 0x00, 0x7E, 0x66, 0x0C, 0x0C, 0x18, 0x18, 0x18
|
|
.db 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C
|
|
.db 0x00, 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C
|
|
.db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00
|
|
.db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30
|
|
.db 0x00, 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06
|
|
.db 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00
|
|
.db 0x00, 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60
|
|
.db 0x00, 0x3C, 0x66, 0x06, 0x1C, 0x18, 0x00, 0x18
|
|
.db 0x00, 0x38, 0x44, 0x5C, 0x58, 0x42, 0x3C, 0x00
|
|
.db 0x00, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66
|
|
.db 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C
|
|
.db 0x00, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C
|
|
.db 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C
|
|
.db 0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E
|
|
.db 0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60
|
|
.db 0x00, 0x3C, 0x66, 0x60, 0x60, 0x6E, 0x66, 0x3C
|
|
.db 0x00, 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66
|
|
.db 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C
|
|
.db 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x6C, 0x6C, 0x38
|
|
.db 0x00, 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66
|
|
.db 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E
|
|
.db 0x00, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63
|
|
.db 0x00, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63, 0x63
|
|
.db 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C
|
|
.db 0x00, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60
|
|
.db 0x00, 0x3C, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x06
|
|
.db 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66
|
|
.db 0x00, 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C
|
|
.db 0x00, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18
|
|
.db 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E
|
|
.db 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18
|
|
.db 0x00, 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63
|
|
.db 0x00, 0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63
|
|
.db 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18
|
|
.db 0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E
|
|
.db 0x00, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E
|
|
.db 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00
|
|
.db 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78
|
|
.db 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F
|
|
.db 0x00, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00
|
|
.db 0x00, 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E
|
|
.db 0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C
|
|
.db 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C
|
|
.db 0x00, 0x06, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E
|
|
.db 0x00, 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C
|
|
.db 0x00, 0x1C, 0x36, 0x30, 0x30, 0x7C, 0x30, 0x30
|
|
.db 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C
|
|
.db 0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66
|
|
.db 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C
|
|
.db 0x00, 0x0C, 0x00, 0x0C, 0x0C, 0x6C, 0x6C, 0x38
|
|
.db 0x00, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66
|
|
.db 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18
|
|
.db 0x00, 0x00, 0x00, 0x63, 0x77, 0x7F, 0x6B, 0x6B
|
|
.db 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x66, 0x66, 0x66
|
|
.db 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C
|
|
.db 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60
|
|
.db 0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3C, 0x0D, 0x0F
|
|
.db 0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x60, 0x60
|
|
.db 0x00, 0x00, 0x00, 0x3E, 0x40, 0x3C, 0x02, 0x7C
|
|
.db 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18
|
|
.db 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E
|
|
.db 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18
|
|
.db 0x00, 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x6B, 0x3E
|
|
.db 0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66
|
|
.db 0x00, 0x00, 0x00, 0x66, 0x66, 0x3E, 0x06, 0x3C
|
|
.db 0x00, 0x00, 0x00, 0x3C, 0x0C, 0x18, 0x30, 0x3C
|
|
.db 0x00, 0x0E, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0E
|
|
.db 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18
|
|
.db 0x00, 0x70, 0x18, 0x18, 0x0C, 0x18, 0x18, 0x70
|
|
.db 0x00, 0x00, 0x00, 0x3A, 0x6C, 0x00, 0x00, 0x00
|
|
.db 0x00, 0x08, 0x1C, 0x36, 0x63, 0x41, 0x41, 0x7F |