1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
mkdir -p build
sdcc -mz80 --allow-unsafe-read -I . -I ../../arch/include -I ../../drivers/include -DDEBUG -c main.c -o build/main.rel
sdcc -mz80 --no-std-crt0 build/crt0.rel -L ../../drivers/build -l drivers.a -pedantic build/main.rel -o build/pio_test.hex
makebin -s 8192 -yo 1 build/pio_test.hex build/pio_test.bin
#dz80 -b -n build/pio_test.bin
r2 -a z80 build/pio_test.bin -A \
-c 'afr main 0x200; \
pd 0x10; \
s 0x100; \
pd 10; \
s 0x200; \
pd 0xa0' \
/ (fcn) fcn.00000000 13
| fcn.00000000 ();
| ; XREFS: DATA 0x00000202 DATA 0x00000204 DATA 0x00000209 DATA 0x0000020c DATA 0x00000216 DATA 0x00000219 DATA 0x00000220 DATA 0x00000221
| ; XREFS: DATA 0x00000226 DATA 0x00000256
\ ,=< 0x00000000 c30001 jp loc.00000100
| 0x00000003 ff rst 0x38
| 0x00000004 ff rst 0x38
| 0x00000005 ff rst 0x38
| 0x00000006 ff rst 0x38
| 0x00000007 ff rst 0x38
| 0x00000008 ff rst 0x38
| 0x00000009 ff rst 0x38
| 0x0000000a ff rst 0x38
| 0x0000000b ff rst 0x38
| 0x0000000c ff rst 0x38
| 0x0000000d ff rst 0x38
| 0x0000000e ff rst 0x38
| 0x0000000f ff rst 0x38
| 0x00000010 ff rst 0x38
| 0x00000011 ff rst 0x38
|- loc.00000100 10
| loc.00000100 ();
| ; JMP XREF from 0x00000000 (fcn.00000000)
| ; JMP XREF from 0x00000106 (loc.00000100)
| 0x00000100 31ffff ld sp, 0xffff
| 0x00000103 cd0002 call main
| ,=< 0x00000106 c30901 jp 0x0109
| | ; JMP XREF from 0x00000106 (loc.00000100)
\ `-> 0x00000109 76 halt
0x0000010a ff rst 0x38
0x0000010b ff rst 0x38
0x0000010c ff rst 0x38
0x0000010d ff rst 0x38
0x0000010e ff rst 0x38
0x0000010f ff rst 0x38
/ (fcn) main 50
| main ();
| ; CALL XREF from 0x00000103 (loc.00000100)
| ; CALL XREF from 0x00000200 (main)
| 0x00000200 0600 ld b, 0x00
| 0x00000202 c5 push bc
| 0x00000203 af xor a
| 0x00000204 f5 push af
| 0x00000205 33 inc sp
| 0x00000206 210300 ld hl, 0x0003
| 0x00000209 e5 push hl
| 0x0000020a 2e00 ld l, 0x00
| 0x0000020c e5 push hl
| 0x0000020d cd5502 call fcn.00000255
| 0x00000210 f1 pop af
| 0x00000211 f1 pop af
| 0x00000212 33 inc sp
| 0x00000213 210000 ld hl, 0x0000
| 0x00000216 e5 push hl
| 0x00000217 2e00 ld l, 0x00
| 0x00000219 e5 push hl
| 0x0000021a cd8e02 call fcn.0000028e
| 0x0000021d f1 pop af
| 0x0000021e f1 pop af
\ 0x0000021f c1 pop bc
| ; JMP XREF from 0x00000230 (main)
| .-> 0x00000220 c5 push bc
| | 0x00000221 c5 push bc
| | 0x00000222 33 inc sp
| | 0x00000223 210000 ld hl, 0x0000
| | 0x00000226 e5 push hl
| | 0x00000227 cde002 call fcn.000002e0
| | 0x0000022a f1 pop af
| | 0x0000022b 33 inc sp
| | 0x0000022c c1 pop bc
| | 0x0000022d 78 ld a, b
| | 0x0000022e 2f cpl
| | 0x0000022f 47 ld b, a
| `=< 0x00000230 18ee jr 0xee
0x00000232 210200 ld hl, 0x0002
0x00000235 39 add hl, sp
0x00000236 4e ld c, [hl]
0x00000237 0600 ld b, 0x00
0x00000239 210042 ld hl, 0x4200
0x0000023c 09 add hl, bc
0x0000023d fd210300 ld iy, 0x0003
0x00000241 fd39 add iy, sp
0x00000243 fd7e00 ld a, [iy+0x00]
0x00000246 77 ld [hl], a
0x00000247 c9 ret
0x00000248 210200 ld hl, 0x0002
0x0000024b 39 add hl, sp
0x0000024c 4e ld c, [hl]
0x0000024d 0600 ld b, 0x00
0x0000024f 210042 ld hl, 0x4200
0x00000252 09 add hl, bc
0x00000253 6e ld l, [hl]
0x00000254 c9 ret
/ (fcn) fcn.00000255 8
| fcn.00000255 ();
| ; CALL XREF from 0x0000020d (main)
| 0x00000255 dde5 push ix
| 0x00000257 dd210000 ld ix, 0x0000
\ 0x0000025b dd39 add ix, sp
0x0000025d dd7e06 ld a, [ix+0x06]
0x00000260 0f rrca
0x00000261 0f rrca
0x00000262 e6c0 and 0xc0
0x00000264 f60f or 0x0f
0x00000266 57 ld d, a
0x00000267 dd5e04 ld e, [ix+0x04]
0x0000026a 1c inc e
0x0000026b 1c inc e
0x0000026c 6b ld l, e
0x0000026d 2600 ld h, 0x00
0x0000026f 010042 ld bc, 0x4200
0x00000272 09 add hl, bc
0x00000273 72 ld [hl], d
0x00000274 dd7e06 ld a, [ix+0x06]
0x00000277 d603 sub 0x03
,=< 0x00000279 2010 jr nz, 0x10
| 0x0000027b dd7e07 ld a, [ix+0x07]
| 0x0000027e b7 or a
,==< 0x0000027f 200a jr nz, 0x0a
|| 0x00000281 dd4e08 ld c, [ix+0x08]
|| 0x00000284 1600 ld d, 0x00
|| 0x00000286 210042 ld hl, 0x4200
|| 0x00000289 19 add hl, de
|| 0x0000028a 71 ld [hl], c
``-> 0x0000028b dde1 pop ix
0x0000028d c9 ret
/ (fcn) fcn.0000028e 29
| fcn.0000028e ();
| ; CALL XREF from 0x0000021a (main)
| 0x0000028e 210400 ld hl, 0x0004
| 0x00000291 39 add hl, sp
| 0x00000292 7e ld a, [hl]
| 0x00000293 07 rlca
| 0x00000294 07 rlca
| 0x00000295 07 rlca
| 0x00000296 07 rlca
| 0x00000297 e6f0 and 0xf0
| 0x00000299 f607 or 0x07
| 0x0000029b 4f ld c, a
| 0x0000029c 210200 ld hl, 0x0002
| 0x0000029f 39 add hl, sp
| 0x000002a0 5e ld e, [hl]
| 0x000002a1 1c inc e
| 0x000002a2 1c inc e
| 0x000002a3 1600 ld d, 0x00
| 0x000002a5 210042 ld hl, 0x4200
| 0x000002a8 19 add hl, de
| 0x000002a9 71 ld [hl], c
\ 0x000002aa c9 ret
0x000002ab dde5 push ix
0x000002ad dd210000 ld ix, 0x0000
0x000002b1 dd39 add ix, sp
0x000002b3 dd7e06 ld a, [ix+0x06]
0x000002b6 f617 or 0x17
0x000002b8 57 ld d, a
0x000002b9 dd5e04 ld e, [ix+0x04]
0x000002bc 1c inc e
0x000002bd 1c inc e
0x000002be 6b ld l, e
0x000002bf 2600 ld h, 0x00
0x000002c1 010042 ld bc, 0x4200
0x000002c4 09 add hl, bc
0x000002c5 72 ld [hl], d
0x000002c6 dd4e08 ld c, [ix+0x08]
0x000002c9 1600 ld d, 0x00
0x000002cb 210042 ld hl, 0x4200
0x000002ce 19 add hl, de
0x000002cf 71 ld [hl], c
0x000002d0 dde1 pop ix
0x000002d2 c9 ret
0x000002d3 210200 ld hl, 0x0002
0x000002d6 39 add hl, sp
0x000002d7 4e ld c, [hl]
0x000002d8 0600 ld b, 0x00
0x000002da 210042 ld hl, 0x4200
0x000002dd 09 add hl, bc
0x000002de 6e ld l, [hl]
0x000002df c9 ret
/ (fcn) fcn.000002e0 18
| fcn.000002e0 ();
| ; CALL XREF from 0x00000227 (main)
| 0x000002e0 210400 ld hl, 0x0004
| 0x000002e3 39 add hl, sp
| 0x000002e4 4e ld c, [hl]
| 0x000002e5 210200 ld hl, 0x0002
| 0x000002e8 39 add hl, sp
| 0x000002e9 5e ld e, [hl]
| 0x000002ea 1600 ld d, 0x00
| 0x000002ec 210042 ld hl, 0x4200
| 0x000002ef 19 add hl, de
| 0x000002f0 71 ld [hl], c
\ 0x000002f1 c9 ret
0x000002f2 ff rst 0x38
0x000002f3 ff rst 0x38
0x000002f4 ff rst 0x38
0x000002f5 ff rst 0x38
0x000002f6 ff rst 0x38
0x000002f7 ff rst 0x38
0x000002f8 ff rst 0x38
0x000002f9 ff rst 0x38
0x000002fa ff rst 0x38
0x000002fb ff rst 0x38
0x000002fc ff rst 0x38
0x000002fd ff rst 0x38
0x000002fe ff rst 0x38
0x000002ff ff rst 0x38
0x00000300 ff rst 0x38
0x00000301 ff rst 0x38
0x00000302 ff rst 0x38
-- Change the graph block definition with graph.callblocks, graph.jmpblocks, graph.flagblocks
[0x00000200]>
[0x00000200]> q
[0x00000200]> q
[0x00000200]> q
|