testpico: check more settable bits
[megadrive.git] / testpico / z80_test.s80
CommitLineData
e71680d5 1; for sjasm 0.42
ffd4b35c 2 ORG $0
3
4init
e71680d5 5 di ; 4
6 im $1 ; 8
7
8loop_prep
9 ld sp, $1002 ; 10
10 ld hl, $1000 ; 10
11 ld b, jtable ; 7
12 ld d, $0 ; 7
13 xor a ; 4 (50)
ffd4b35c 14
15loop
e71680d5 16 add a, (hl) ; 7
17 jp z, loop ; 10 17 (27 worst)
ffd4b35c 18
e71680d5 19 add a ; 4 a *= 2
20 add b ; 4 a += table
21 ld e, a ; 4
22 ld a, (de) ; 7
23 inc e ; 4
be6b619d 24 ld ixl, a ; 8
e71680d5 25 ld a, (de) ; 7
be6b619d 26 ld ixh, a ; 8
e71680d5 27
28 pop hl ; src 10 ld hl, ($1002)
29 pop de ; dst 10 ld de, ($1004)
30 pop bc ; len 10 ld bc, ($1006)
31 jp ix ; 8 (86+27)
32
33end
34 xor a ; 4
35 ld ($1000), a ; 13 (17)
36 jp loop_prep
37
38; ---
39
40 BLOCK $38-$
a385208c 41
e71680d5 42irq
43 ret
a385208c 44
e71680d5 45; ---
46
47jtable
48 dw end
49 dw t_copy
50 dw t_rd_timing
51 dw t_idle_loop
52 dw t_timer_a
53 dw t_timer_b
54jtable_end
55 ld b, jtable_end ; ensure < $100
56
57; - 1 -
58t_copy
59 ldir ; 21/16 ((de) <- (hl)) bc times
a385208c 60 jp end ; 10
61
e71680d5 62; - 2 -
63t_rd_timing
a385208c 64 ld d, h ; 4
65 ld e, l ; 4
66 inc de ; 6 14 (132)
67loop_read
68 ld a, (hl) ; 7
69 ld a, (de) ; 7
70 dec bc ; 6
71 ld a, b ; 4
72 or a, c ; 4
73 jp nz,loop_read ; 10 38
74
e71680d5 75end_vcnt
a385208c 76 ld a, ($7f08) ; vcnt 13
77 ld de, ($1004) ; dst 20
ffd4b35c 78 ld (de), a ; 7
a385208c 79 jp end ; 10 50
ffd4b35c 80
e71680d5 81; - 3 -
82t_idle_loop
83 exx ; 4 (waste cycles)
84 ld b, $4 ; 7
851 djnz 1b ; 13 13*3+8=47
86 exx ; 4
87 nop ; 4 (66)
ffd4b35c 88
e71680d5 89 dec bc ; 6
90 ld a, b ; 4
91 or a, c ; 4
92 jp z,end_vcnt ; 10
93 jp t_idle_loop ; 10 (66+34)
ffd4b35c 94
e71680d5 95; helper for tests 5 and 6
96macro ld_a 2
97 ld a, @2 ; 7
98 ld @1, a ; 7
99endmacro
100macro save_hvcount_unstable dst
1010
102 ld bc, ($7f08) ; hvc 20
103 ld hl, ($7f08) ; hvc 16
104 ld a, b ; 4
105 xor a, h ; 4
106 and a, $c0 ; 7 hcnt bad sample?
107 jp nz,0b ; 10 (61 loop)
108 ld a, c ; 4
109 xor a, l ; 4 vcnt changed while sampling?
110 jp nz,0b ; 10 (79 loop)
111 ld (dst), hl ; 20 (99)
112endmacro
113macro save_hvcount dst
114 ld hl, $7f08 ; vcnt 10
1150
116 ld a, (hl) ; 7
117 cp a, (hl) ; 7
118 jp nz,0b ; 10
119 ld (dst), a
120endmacro
121t_timer_prepare
122 ld d, $2 ; 7
123 ld hl, $4000 ; addr 10
124 ld bc, $4001 ; data 14
125 ld (hl), $26 ; 10
126 ld_a (bc), $ff ; 14
127 ld (hl), $27 ; 10
128 ld_a (bc), $3a ; 14 enable timer+flag,clear
1290
130 ld a, (hl) ; 7
131 and d ; 4
132 jp z,0b ; 10
133 xor a ; 4
134 ld (bc), a ; 7 stop (timer tick in (16*72*2)*7/15)
135 ld a, ($7f08) ; vcnt 13
136 exx ; 4
137 save_hvcount $1102 ; 99+
138 exx ; 4
139 ret ; 10
ffd4b35c 140
e71680d5 141; - 4 -
142t_timer_a
143 ld sp, $2000 ; 10
144 call t_timer_prepare ; 17++
145 ld d, $1 ; 7
146 xor a ; 4
147 ld (hl), $24 ; 10
148 ld (bc), a ; 7
149 ld (hl), $25 ; 10
150 ld (bc), a ; 7
151 ld (hl), $27 ; 10
be6b619d 152 ld_a (bc), $35 ; 14 enable timer+flag,clear
e71680d5 153 nop ; 4 flag clear delay
154tim_a_loop
155 ld a, (hl) ; 7
156 and d ; 4
157 jp z,tim_a_loop ; 10
158 save_hvcount $1100 ; 99+
159 jp end ; 10
a385208c 160
e71680d5 161; - 5 -
162t_timer_b
163 ld sp, $2000 ; 10 copy-pasta from t_timer_a because I'm lazy
164 call t_timer_prepare ; 17++
165 ld d, $2 ; 7
a385208c 166 xor a ; 4
e71680d5 167 ld (hl), $26 ; 10
168 ld (hl), $26 ; 10 dup for timing
169 ld_a (bc), $c0 ; 14
170 ld (hl), $27 ; 10
171 ld_a (bc), $3a ; 14 enable timer+flag,clear
172 nop ; 4 flag clear delay
173tim_b_loop
174 ld a, (hl) ; 7
175 and d ; 4
176 jp z,tim_b_loop ; 10
177 save_hvcount $1100 ; 99+
178 jp end ; 10
a385208c 179