]>
Commit | Line | Data |
---|---|---|
0c4244e5 | 1 | ; Disassembled ddtz.com, version "DDT/Z [8101]"\r |
ed6c425a | 2 | ; with modified relocater.\r |
0c4244e5 | 3 | ;\r |
ed6c425a L |
4 | ; Build steps:\r |
5 | ; - Assemble to a .REL file with M80 or a compatible assembler.\r | |
6 | ; - Use Digital Research Link-80 to generate a .PRL file (op switch).\r | |
7 | ; - Cut the .PRL header (first 256 byte) end rename the result to DDTZ.COM.\r | |
0c4244e5 L |
8 | \r |
9 | ;-------------------------------------------------------------------------------\r | |
10 | ; Relocation loader\r | |
11 | ;\r | |
ed6c425a L |
12 | TPA equ 0100h\r |
13 | cseg\r | |
14 | .phase TPA\r | |
15 | \r | |
899547a8 | 16 | jp start\r |
1d3941c8 | 17 | ds 3\r |
0c4244e5 | 18 | \r |
0c4244e5 | 19 | ldr_end:\r |
ed6c425a | 20 | ldr_size equ $ - TPA\r |
899547a8 | 21 | current_phase defl $\r |
0c4244e5 | 22 | \r |
ed6c425a | 23 | .dephase\r |
899547a8 L |
24 | current_cseg defl $\r |
25 | \r | |
0c4244e5 L |
26 | ;-------------------------------------------------------------------------------\r |
27 | ; DDT/Z core\r | |
28 | ;\r | |
29 | \r | |
30 | ; Some greneral definitions\r | |
31 | \r | |
12eea40b L |
32 | BS equ 08h\r |
33 | TAB equ 09h\r | |
34 | CR equ 0dh\r | |
35 | LF equ 0ah\r | |
36 | DEL equ 7fh\r | |
37 | CNTRX equ 'X'-'@'\r | |
0c4244e5 L |
38 | \r |
39 | ; CP/M memory layout\r | |
40 | \r | |
41 | BDOS equ 5\r | |
0c4244e5 L |
42 | TPA equ 0100h\r |
43 | \r | |
44 | ; BDOS function calls\r | |
45 | \r | |
0c4244e5 | 46 | BDOS_PSTR equ 9 ;Print String\r |
0c4244e5 L |
47 | \r |
48 | ; ddtz specific definitions\r | |
49 | \r | |
0dc44d17 | 50 | STACK_SIZE equ 80 ;ddtz internal stack\r |
0c4244e5 L |
51 | CONBUF_SIZE equ 80 ;Size of console input buffer\r |
52 | EXPR_BUF_SIZE equ 128 ;expressen buffer for conditional breakpoints\r | |
53 | BP_CNT equ 12 ;Number of breakpoints\r | |
d2df51e3 | 54 | BP_SIZE equ 4 ;Size of a breakpoint record\r |
0c4244e5 | 55 | \r |
c486c4da | 56 | ;-------------------------------------------------------------------------------\r |
1d3941c8 | 57 | \r |
0c4244e5 | 58 | ddtz_base:\r |
c788b3b7 | 59 | jp ddtz_bdos\r |
0c4244e5 | 60 | l0003h:\r |
c788b3b7 | 61 | rst 30h\r |
4bb547a7 | 62 | di_or_ei:\r |
c788b3b7 L |
63 | nop\r |
64 | ret\r | |
65 | ddtz_bdos:\r | |
66 | jp 0\r | |
0c4244e5 | 67 | \r |
899547a8 L |
68 | current_cseg defl $ - current_cseg\r |
69 | .phase current_phase + current_cseg\r | |
70 | signon:\r | |
4210c8a1 | 71 | db 'DDTZ/180'\r |
8bc5ea22 L |
72 | db ' - Version '\r |
73 | maclib version.inc\r | |
74 | defvers\r | |
75 | db CR,LF,'$'\r | |
899547a8 L |
76 | msgz80:\r |
77 | db 'Z80 or better required!',cr,lf,'$'\r | |
78 | \r | |
79 | current_phase defl $\r | |
80 | .dephase\r | |
81 | current_cseg defl $\r | |
82 | ds STACK_SIZE - (current_phase - signon)\r | |
83 | \r | |
0c4244e5 L |
84 | \r |
85 | stack:\r | |
9bed91b3 L |
86 | reg.l2: db 000h\r |
87 | reg.h2: db 000h\r | |
88 | reg.e2: db 000h\r | |
89 | reg.d2: db 000h\r | |
90 | reg.c2: db 000h\r | |
91 | reg.b2: db 000h\r | |
92 | reg.f2: db 000h\r | |
93 | reg.a2: db 000h\r | |
b270cd3a | 94 | db 000h\r |
9bed91b3 L |
95 | reg.i: db 000h\r |
96 | reg.iy: dw 0000h\r | |
97 | reg.ix: dw 0000h\r | |
98 | reg.f: db 000h\r | |
99 | reg.a: db 000h\r | |
100 | reg.c: db 000h\r | |
101 | reg.b: db 000h\r | |
102 | reg.e: db 000h\r | |
103 | reg.d: db 000h\r | |
104 | reg.l: db 000h\r | |
105 | reg.h: db 000h\r | |
106 | reg_sp: dw TPA\r | |
0c4244e5 | 107 | reg.iff:\r |
9bed91b3 L |
108 | db 0f3h\r |
109 | db 0c3h\r | |
ac35765e | 110 | reg.pc: dw TPA\r |
0c4244e5 | 111 | \r |
9bed91b3 | 112 | cmd_rpt:dw mainloop\r |
0c4244e5 | 113 | \r |
9711a430 L |
114 | ;-------------------------------------------------------------------------------\r |
115 | \r | |
0c4244e5 | 116 | conbuf:\r |
9bed91b3 | 117 | db CONBUF_SIZE\r |
0c4244e5 | 118 | \r |
c788b3b7 L |
119 | ld sp,stack\r |
120 | exx\r | |
121 | ld de,ddtz_base\r | |
35b535f6 | 122 | call cp_hl_de\r |
c788b3b7 L |
123 | jr c,l0079h\r |
124 | ex de,hl\r | |
0c4244e5 | 125 | l0079h:\r |
c788b3b7 | 126 | ld de,TPA\r |
0c4244e5 | 127 | l007ch:\r |
c788b3b7 L |
128 | dec hl\r |
129 | ld (hl),000h\r | |
130 | ld a,h\r | |
131 | sub d\r | |
132 | ld b,a\r | |
133 | ld a,l\r | |
134 | sub e\r | |
135 | or b\r | |
136 | jr nz,l007ch\r | |
137 | ld a,i\r | |
138 | ld (reg.i),a\r | |
139 | ld a,0f3h\r | |
140 | jp po,l0093h\r | |
141 | ld a,0fbh\r | |
0c4244e5 | 142 | l0093h:\r |
c788b3b7 | 143 | ld (reg.iff),a\r |
4bb547a7 | 144 | call di_or_ei\r |
c788b3b7 L |
145 | ld hl,ddtz_base\r |
146 | ld l,000h\r | |
147 | ld (reg_sp),hl\r | |
929d3747 L |
148 | \r |
149 | ld hl,(1) ;wboot addr\r | |
150 | ld de,?const\r | |
151 | ld b,6\r | |
152 | vini_l:\r | |
153 | inc hl\r | |
154 | inc hl\r | |
155 | inc hl\r | |
156 | ex de,hl\r | |
157 | inc hl\r | |
158 | ld (hl),e\r | |
159 | inc hl\r | |
160 | ld (hl),d\r | |
161 | inc hl\r | |
162 | ex de,hl\r | |
163 | djnz vini_l\r | |
164 | \r | |
c788b3b7 | 165 | jr mainloop\r |
0c4244e5 L |
166 | \r |
167 | ds CONBUF_SIZE + 3 - ($ - conbuf)\r | |
168 | \r | |
9711a430 L |
169 | ;-------------------------------------------------------------------------------\r |
170 | \r | |
929d3747 L |
171 | ?const: jp 0 ; return console input status\r |
172 | ?conin: jp 0 ; return console input character\r | |
173 | ?cono: jp 0 ; send console output character\r | |
174 | ?list: jp 0 ; send list output character\r | |
175 | ?auxo: jp 0 ; send auxiliary output character\r | |
176 | ?auxi: jp 0 ; return auxiliary input character\r | |
12eea40b | 177 | \r |
ac35765e | 178 | CMDTAB:\r |
35b535f6 | 179 | dw ERROR ;cmd_@ ;examine/substitute the displacement register @\r |
786e99f6 | 180 | dw ERROR ;cmd_A ;Assemble\r |
ac35765e | 181 | dw cmd_B ;Breakpoints display/set/clear\r |
3628b074 | 182 | dw ERROR ;cmd_C ;trace over Calls\r |
ac35765e L |
183 | dw cmd_D ;Display memory in hex and ascii\r |
184 | dw ERROR ;\r | |
25e453a7 | 185 | dw ERROR ;cmd_F ;specify Filename and command line\r |
ac35765e L |
186 | dw cmd_G ;Go\r |
187 | dw cmd_H ;compute Hex and other expressions\r | |
188 | dw cmd_I ;Input a byte from port\r | |
189 | dw ERROR ;\r | |
190 | dw ERROR ;\r | |
191 | dw cmd_L ;List disassembled code\r | |
192 | dw cmd_M ;Move memory [and verify]\r | |
193 | dw ERROR ;\r | |
194 | dw cmd_O ;Output a byte to port\r | |
195 | dw ERROR ;\r | |
196 | dw cmd_Q ;Qery memory for byte string\r | |
ca1c9c55 | 197 | dw cmd_R ;Read binary or hex file\r |
ac35765e L |
198 | dw cmd_S ;Substitute memory\r |
199 | dw cmd_T ;Trace\r | |
200 | dw ERROR ;\r | |
201 | dw cmd_V ;Verify (compare) two memory areas\r | |
25e453a7 | 202 | dw ERROR ;cmd_W ;Write a file to disk\r |
ac35765e | 203 | dw cmd_X ;eXamine [and substitute] registers\r |
1190f4f0 | 204 | dw ERROR ;cmd_Y ;examine [and substitute] Y variables\r |
ac35765e L |
205 | dw cmd_Z ;Zap (fill) memory with a byte string\r |
206 | \r | |
474b928c | 207 | ERROR:\r |
474b928c L |
208 | call pstr_inl\r |
209 | dc '?',CR,LF\r | |
210 | ;fall thru\r | |
0c4244e5 | 211 | mainloop:\r |
0716e834 | 212 | ld sp,stack\r |
ac35765e | 213 | ld hl,(reg.pc)\r |
0716e834 L |
214 | call bp_clr_temporary\r |
215 | ld hl,(cmd_rpt)\r | |
216 | ld de,mainloop\r | |
d0ff7c76 | 217 | push de\r |
0716e834 L |
218 | call cp_hl_de\r |
219 | ld a,'>'\r | |
220 | call outchar\r | |
221 | call nz,outchar\r | |
222 | call z,outbl\r | |
223 | call get_line\r | |
224 | call skipbl\r | |
225 | jr z,exe_hl\r | |
d0ff7c76 L |
226 | pop hl\r |
227 | push hl\r | |
0716e834 L |
228 | ld (cmd_rpt),hl\r |
229 | inc de\r | |
230 | sub '@'\r | |
231 | jr c,ERROR\r | |
232 | cp 'Z'+1-'@'\r | |
233 | jr nc,ERROR\r | |
0716e834 | 234 | ld hl,CMDTAB\r |
6bc52899 | 235 | call add_hl_a2\r |
0716e834 L |
236 | ld a,(hl)\r |
237 | inc hl\r | |
238 | ld h,(hl)\r | |
239 | ld l,a\r | |
0c4244e5 | 240 | exe_hl:\r |
b270cd3a | 241 | CALL_HL:\r |
d0ff7c76 | 242 | jp (hl)\r |
0c4244e5 | 243 | \r |
9711a430 L |
244 | ;-------------------------------------------------------------------------------\r |
245 | \r | |
ac35765e | 246 | crlf:\r |
37ade8ec | 247 | call pstr_inl\r |
474b928c | 248 | dc CR,LF\r |
b5b85b4c | 249 | xor a\r |
ac35765e | 250 | ld (con_col),a\r |
b5b85b4c | 251 | call inchar\r |
ac35765e L |
252 | jr c,mainloop\r |
253 | ret\r | |
254 | \r | |
0c4244e5 | 255 | sub_01d9h:\r |
37ade8ec L |
256 | call pstr_inl\r |
257 | dc '-'\r | |
0716e834 L |
258 | dec hl\r |
259 | jp cpl.hl\r | |
0c4244e5 L |
260 | \r |
261 | out_hl_dec_neg:\r | |
0716e834 L |
262 | push hl\r |
263 | call sub_01d9h\r | |
d1d6fee5 | 264 | defb 03eh ;ld a,.. swallow push hl\r |
0c4244e5 | 265 | out.hl.dec:\r |
0716e834 L |
266 | push hl\r |
267 | ld b,006h\r | |
268 | call sub_01f9h\r | |
269 | pop hl\r | |
37ade8ec L |
270 | call pstr_inl\r |
271 | dc '.'\r | |
0c4244e5 | 272 | l01f3h:\r |
0716e834 L |
273 | call outbl\r |
274 | djnz l01f3h\r | |
275 | ret\r | |
8bc5ea22 | 276 | \r |
0c4244e5 | 277 | sub_01f9h:\r |
0716e834 L |
278 | dec b\r |
279 | push de\r | |
280 | ld de,10\r | |
281 | call div_hl_de\r | |
282 | ld a,h\r | |
283 | or l\r | |
284 | call nz,sub_01f9h\r | |
285 | ld a,e\r | |
286 | pop de\r | |
287 | jr out_dgt\r | |
0c4244e5 L |
288 | \r |
289 | out_hl_neg:\r | |
0716e834 L |
290 | push hl\r |
291 | call sub_01d9h\r | |
292 | call out_hl\r | |
293 | pop hl\r | |
294 | ret\r | |
0c4244e5 L |
295 | \r |
296 | out_hl:\r | |
0716e834 L |
297 | ld a,h\r |
298 | call out_hex\r | |
299 | ld a,l\r | |
0c4244e5 L |
300 | \r |
301 | out_hex:\r | |
0716e834 L |
302 | push af\r |
303 | rra\r | |
304 | rra\r | |
305 | rra\r | |
306 | rra\r | |
307 | call out_dgt\r | |
308 | pop af\r | |
0c4244e5 L |
309 | \r |
310 | out_dgt:\r | |
f81f70a9 L |
311 | or 0f0h\r |
312 | daa\r | |
313 | add a,0a0h\r | |
314 | adc a,040h\r | |
0716e834 | 315 | jr outchar\r |
5023df4f | 316 | \r |
01cb8973 L |
317 | out.bin.w:\r |
318 | ld a,h\r | |
319 | call out.bin.b\r | |
320 | ld a,l\r | |
321 | out.bin.b:\r | |
322 | ld b,8\r | |
323 | l01c9h:\r | |
d1d6fee5 L |
324 | rlca\r |
325 | push af\r | |
326 | ld a,'0'/2\r | |
327 | adc a,a\r | |
328 | call outchar\r | |
01cb8973 L |
329 | pop af\r |
330 | djnz l01c9h\r | |
331 | ld a,'"'\r | |
332 | jr outchar\r | |
333 | \r | |
0c4244e5 | 334 | out.ascii:\r |
d24eec89 L |
335 | push bc\r |
336 | ld c,a\r | |
0716e834 L |
337 | res 7,a\r |
338 | cp ' '\r | |
5023df4f L |
339 | push af\r |
340 | call nc,outbl\r | |
6bc52899 L |
341 | call pstr_inl\r |
342 | dc ''''\r | |
5023df4f | 343 | pop af\r |
0716e834 L |
344 | jr nc,l0242h\r |
345 | sub 0c0h\r | |
d24eec89 | 346 | ld b,a\r |
37ade8ec L |
347 | call pstr_inl\r |
348 | dc '^'\r | |
d24eec89 | 349 | ld a,b\r |
0c4244e5 | 350 | l0242h:\r |
0716e834 | 351 | call outchar\r |
0716e834 L |
352 | cp ''''\r |
353 | call z,outchar\r | |
6bc52899 L |
354 | call pstr_inl\r |
355 | dc ''''\r | |
d24eec89 L |
356 | sla c\r |
357 | pop bc\r | |
358 | ret nc\r | |
0716e834 | 359 | ld a,'.'\r |
d24eec89 | 360 | jr outchar\r |
646e8b05 | 361 | \r |
01cb8973 L |
362 | outbl6:\r |
363 | call outbl2\r | |
364 | outbl4:\r | |
365 | call outbl2\r | |
366 | outbl2:\r | |
367 | call outbl\r | |
368 | outbl:\r | |
369 | ld a,' '\r | |
0c4244e5 | 370 | outchar:\r |
85b57f2a L |
371 | push ix\r |
372 | push iy\r | |
0716e834 L |
373 | push hl\r |
374 | push de\r | |
375 | push bc\r | |
376 | push af\r | |
377 | and 07fh\r | |
12eea40b L |
378 | ld c,a\r |
379 | call ?cono\r | |
0716e834 L |
380 | ld hl,con_col\r |
381 | inc (hl)\r | |
382 | pop af\r | |
383 | pop bc\r | |
384 | pop de\r | |
385 | pop hl\r | |
85b57f2a L |
386 | pop iy\r |
387 | pop ix\r | |
0716e834 | 388 | ret\r |
9bed91b3 | 389 | \r |
a942c6d5 L |
390 | pstr_sel:\r |
391 | inc b\r | |
392 | jr pstr_sel2\r | |
393 | pstr_sel1:\r | |
394 | call sub_0345h\r | |
395 | pstr_sel2:\r | |
396 | djnz pstr_sel1\r | |
397 | ;fall thru\r | |
01cb8973 | 398 | pstr:\r |
01cb8973 L |
399 | ld a,(hl)\r |
400 | inc hl\r | |
401 | and a\r | |
402 | ret z\r | |
403 | call outchar\r | |
01cb8973 | 404 | ret m\r |
37ade8ec | 405 | jr pstr\r |
01cb8973 L |
406 | \r |
407 | pstr_inl:\r | |
408 | ex (sp),hl\r | |
409 | call pstr\r | |
410 | ex (sp),hl\r | |
411 | ret\r | |
412 | \r | |
08d0db09 | 413 | p_goto_col:\r |
8bc5ea22 L |
414 | ld a,(con_col)\r |
415 | cp c\r | |
08d0db09 L |
416 | ret nc\r |
417 | ret z\r | |
418 | call outbl\r | |
419 | jr p_goto_col\r | |
420 | \r | |
9711a430 | 421 | ;-------------------------------------------------------------------------------\r |
8bc5ea22 | 422 | \r |
b5b85b4c L |
423 | incharw:\r |
424 | call inchar\r | |
425 | jr nc,incharw\r | |
12eea40b L |
426 | ret\r |
427 | \r | |
428 | ;-------------------------------------------------------------------------------\r | |
429 | \r | |
0c4244e5 | 430 | inchar:\r |
1d3941c8 | 431 | push ix\r |
0716e834 L |
432 | push hl\r |
433 | push de\r | |
434 | push bc\r | |
12eea40b | 435 | call ?const\r |
0716e834 | 436 | and a\r |
12eea40b L |
437 | jr z,inch1\r |
438 | call ?conin\r | |
0716e834 | 439 | scf\r |
12eea40b | 440 | inch1:\r |
0716e834 L |
441 | pop bc\r |
442 | pop de\r | |
443 | pop hl\r | |
1d3941c8 | 444 | pop ix\r |
0716e834 | 445 | ret\r |
ac35765e | 446 | \r |
12eea40b L |
447 | ;-------------------------------------------------------------------------------\r |
448 | \r | |
449 | DELC:\r | |
450 | ld a,b\r | |
451 | or a\r | |
452 | ret z\r | |
453 | call DELC1\r | |
454 | dec hl\r | |
455 | dec b\r | |
456 | inc c\r | |
457 | ld a,(hl)\r | |
458 | cp ' '\r | |
459 | ret nc\r | |
460 | DELC1:\r | |
b5b85b4c L |
461 | call pstr_inl\r |
462 | dc BS,' ',BS\r | |
12eea40b L |
463 | ret\r |
464 | \r | |
465 | DELL:\r | |
466 | ld a,b ;\r | |
467 | or a ;\r | |
468 | ret z ;\r | |
469 | call DELC ;\r | |
470 | jr DELL ;\r | |
471 | \r | |
472 | ;-------------------------------------------------------------------------------\r | |
473 | \r | |
01cb8973 | 474 | get_line:\r |
12eea40b L |
475 | push hl ;\r |
476 | ld hl,conbuf ;\r | |
477 | ld c,(hl) ;\r | |
478 | inc hl ;\r | |
479 | ld b,000h ;\r | |
480 | inc hl ;\r | |
481 | inlnxtch:\r | |
482 | ld a,c ;\r | |
483 | or a ;\r | |
484 | jr z,inl_e ;\r | |
b5b85b4c | 485 | call incharw ;\r |
12eea40b L |
486 | cp CR ;\r |
487 | jr z,inl_e ;Accept line\r | |
488 | cp LF ;\r | |
489 | jr z,inl_e ;Accept line\r | |
b5b85b4c | 490 | \r |
12eea40b | 491 | cp BS ;\r |
b5b85b4c | 492 | jr z,gl_1 ;\r |
12eea40b L |
493 | cp DEL ;\r |
494 | jr nz,gl_2 ;\r | |
b5b85b4c | 495 | gl_1:\r |
12eea40b L |
496 | call DELC ;Delete Char\r |
497 | jr inlnxtch ;\r | |
498 | gl_2:\r | |
499 | cp CNTRX ;\r | |
500 | jr nz,gl_3 ;\r | |
501 | call DELL ;Delete Line\r | |
502 | jr inlnxtch ;\r | |
503 | gl_3:\r | |
504 | cp TAB ;\r | |
505 | jr nz,gl_4 ;\r | |
506 | ld a,' ' ;\r | |
507 | gl_4:\r | |
508 | ld (hl),a ;\r | |
509 | cp ' ' ;\r | |
510 | jr nc,gl_5 ;\r | |
511 | ld a,'^' ;Controll characters\r | |
b5b85b4c | 512 | call outchar ;\r |
12eea40b L |
513 | ld a,(hl) ;\r |
514 | add a,'@' ;\r | |
515 | gl_5:\r | |
b5b85b4c | 516 | call outchar ;\r |
12eea40b L |
517 | inc hl ;\r |
518 | inc b ;\r | |
519 | dec c ;\r | |
520 | jr inlnxtch ;\r | |
521 | \r | |
522 | inl_e:\r | |
523 | ld (hl),0\r | |
524 | ld hl,conbuf+1 ;\r | |
525 | ld (hl),b ;\r | |
526 | call CRLF ;\r | |
0c461f1d L |
527 | inc hl\r |
528 | ex de,hl\r | |
12eea40b L |
529 | pop hl ;\r |
530 | ret ;\r | |
d1f2492e | 531 | \r |
9711a430 L |
532 | ;-------------------------------------------------------------------------------\r |
533 | \r | |
0c461f1d L |
534 | get_char_upper:\r |
535 | ld a,(de)\r | |
01cb8973 L |
536 | toupper:\r |
537 | cp 'a'\r | |
538 | ret c\r | |
539 | cp 'z'+1\r | |
1d3941c8 L |
540 | ccf\r |
541 | ret c\r | |
01cb8973 | 542 | and 05fh\r |
0716e834 | 543 | ret\r |
0c4244e5 | 544 | \r |
9711a430 L |
545 | ;-------------------------------------------------------------------------------\r |
546 | \r | |
0c4244e5 | 547 | skipbl0:\r |
0716e834 | 548 | inc de\r |
0c4244e5 | 549 | skipbl:\r |
0c461f1d | 550 | call get_char_upper\r |
b5b85b4c L |
551 | cp ' '\r |
552 | jr z,skipbl0\r | |
0716e834 L |
553 | or a\r |
554 | ret\r | |
0c4244e5 | 555 | \r |
b5b85b4c L |
556 | ;-------------------------------------------------------------------------------\r |
557 | \r | |
0c4244e5 | 558 | next_arg:\r |
0716e834 L |
559 | call skipbl\r |
560 | cp ','\r | |
561 | ret nz\r | |
b5b85b4c | 562 | call skipbl0\r |
0716e834 L |
563 | cp a\r |
564 | ret\r | |
0c4244e5 L |
565 | \r |
566 | assert_eol:\r | |
0716e834 L |
567 | call skipbl\r |
568 | ret z\r | |
0c4244e5 | 569 | to_error:\r |
0716e834 | 570 | jp ERROR\r |
0c4244e5 | 571 | \r |
9711a430 L |
572 | ;-------------------------------------------------------------------------------\r |
573 | \r | |
85b57f2a | 574 | chk_stack:\r |
0716e834 L |
575 | push hl\r |
576 | push de\r | |
577 | ld hl,0\r | |
578 | add hl,sp\r | |
0dc44d17 | 579 | ld de,stack-(STACK_SIZE-28)\r |
0716e834 L |
580 | call cp_hl_de\r |
581 | pop de\r | |
582 | pop hl\r | |
583 | jr c,to_error\r | |
584 | ret\r | |
0c4244e5 | 585 | \r |
9711a430 L |
586 | ;-------------------------------------------------------------------------------\r |
587 | \r | |
6bc52899 L |
588 | add_hl_a2:\r |
589 | add a,a\r | |
01cb8973 L |
590 | add_hl_a:\r |
591 | add a,l\r | |
592 | ld l,a\r | |
593 | ret nc\r | |
594 | inc h\r | |
595 | ret\r | |
596 | \r | |
0c4244e5 | 597 | cp_hl_de:\r |
0716e834 L |
598 | and a\r |
599 | sbc hl,de\r | |
600 | add hl,de\r | |
601 | ret\r | |
6bc52899 | 602 | \r |
9711a430 L |
603 | ;-------------------------------------------------------------------------------\r |
604 | \r | |
0c4244e5 | 605 | lookupch:\r |
0716e834 | 606 | ld b,0\r |
0c4244e5 | 607 | l02f5h:\r |
0716e834 L |
608 | ld a,(hl)\r |
609 | and a\r | |
610 | ret z\r | |
0c461f1d | 611 | call get_char_upper\r |
0716e834 L |
612 | cp (hl)\r |
613 | jr z,l0300h\r | |
614 | inc hl\r | |
615 | inc b\r | |
616 | jr l02f5h\r | |
0c4244e5 | 617 | l0300h:\r |
0716e834 L |
618 | scf\r |
619 | inc de\r | |
620 | ret\r | |
0c4244e5 L |
621 | \r |
622 | sub_0303h:\r | |
f81f70a9 | 623 | ld hl,t_reg_names\r |
0716e834 | 624 | ld b,07fh\r |
0c4244e5 | 625 | l030ch:\r |
0716e834 L |
626 | inc b\r |
627 | ld a,(hl)\r | |
628 | and a\r | |
629 | ret z\r | |
630 | call sub_031ch\r | |
631 | jr nc,l030ch\r | |
632 | res 7,b\r | |
633 | ret\r | |
0c4244e5 | 634 | \r |
0c4244e5 | 635 | sub_031ch:\r |
0716e834 L |
636 | push bc\r |
637 | push de\r | |
0c4244e5 | 638 | l031eh:\r |
0c461f1d | 639 | call get_char_upper\r |
0716e834 L |
640 | xor (hl)\r |
641 | and 07fh\r | |
642 | jr nz,l0336h\r | |
643 | bit 7,(hl)\r | |
644 | inc hl\r | |
645 | inc de\r | |
646 | jr z,l031eh\r | |
647 | scf\r | |
648 | bit 7,b\r | |
649 | call z,sub_060ch\r | |
650 | jr nc,l0339h\r | |
651 | pop af\r | |
652 | scf\r | |
653 | pop bc\r | |
654 | ret\r | |
0c4244e5 | 655 | l0336h:\r |
0716e834 | 656 | call sub_0345h\r |
0c4244e5 | 657 | l0339h:\r |
0716e834 L |
658 | pop de\r |
659 | and a\r | |
660 | pop bc\r | |
661 | ret\r | |
646e8b05 | 662 | \r |
0c4244e5 | 663 | sub_0345h:\r |
0716e834 L |
664 | ld a,(hl)\r |
665 | and a\r | |
666 | ret z\r | |
0c4244e5 | 667 | l0348h:\r |
0716e834 L |
668 | ld a,(hl)\r |
669 | inc hl\r | |
670 | and a\r | |
671 | ret m\r | |
672 | jr l0348h\r | |
646e8b05 | 673 | \r |
0c4244e5 | 674 | sub_034eh:\r |
0716e834 L |
675 | call get_arg_range\r |
676 | push hl\r | |
677 | push bc\r | |
678 | call next_arg\r | |
679 | call sub_0363h\r | |
680 | ex de,hl\r | |
681 | pop bc\r | |
682 | pop hl\r | |
683 | ret\r | |
0c4244e5 L |
684 | \r |
685 | sub_035dh:\r | |
0716e834 L |
686 | call expr\r |
687 | jr c,error0\r | |
688 | ret\r | |
0c4244e5 L |
689 | \r |
690 | sub_0363h:\r | |
0716e834 | 691 | call sub_035dh\r |
0c4244e5 | 692 | l0366h:\r |
0716e834 | 693 | jp assert_eol\r |
0c4244e5 L |
694 | \r |
695 | get_lastarg_def:\r | |
0716e834 L |
696 | call get_arg_def\r |
697 | jr l0366h\r | |
b0b4005c | 698 | \r |
0c4244e5 | 699 | get_arg_def:\r |
0716e834 L |
700 | push hl\r |
701 | call expr\r | |
702 | jr c,l0375h\r | |
703 | ex (sp),hl\r | |
0c4244e5 | 704 | l0375h:\r |
0716e834 L |
705 | pop hl\r |
706 | ret\r | |
b0b4005c | 707 | \r |
0c4244e5 | 708 | sub_0377h:\r |
0716e834 L |
709 | call b_037c_start\r |
710 | jr l0366h\r | |
0c4244e5 L |
711 | \r |
712 | b_037c_start:\r | |
d1d6fee5 | 713 | defb 0e6h ;and a,.. clear carry\r |
0c4244e5 | 714 | get_arg_range:\r |
0716e834 L |
715 | scf\r |
716 | ex af,af'\r | |
717 | push bc\r | |
718 | push hl\r | |
719 | call expr\r | |
720 | jr nc,l038ch\r | |
721 | ex af,af'\r | |
722 | jr c,error0\r | |
723 | ex af,af'\r | |
724 | pop hl\r | |
d1d6fee5 | 725 | defb 03eh ;ld a,.. swallow pop af\r |
0c4244e5 | 726 | l038ch:\r |
0716e834 L |
727 | pop af\r |
728 | call get_range\r | |
729 | jr nc,l0398h\r | |
730 | ex af,af'\r | |
731 | pop bc\r | |
732 | ret nc\r | |
0c4244e5 | 733 | error0:\r |
0716e834 | 734 | jp ERROR\r |
0c4244e5 | 735 | l0398h:\r |
0716e834 L |
736 | pop af\r |
737 | ret\r | |
0c4244e5 | 738 | \r |
b0b4005c | 739 | get_range:\r |
0716e834 L |
740 | call next_arg\r |
741 | cp 'S'\r | |
742 | jr nz,l03a2h\r | |
743 | inc de\r | |
0c4244e5 | 744 | l03a2h:\r |
0716e834 | 745 | push hl\r |
85b57f2a | 746 | push af ;'S' flag\r |
0716e834 L |
747 | call expr\r |
748 | jr c,l03b8h\r | |
749 | ld b,h\r | |
750 | ld c,l\r | |
751 | pop af\r | |
752 | pop hl\r | |
85b57f2a | 753 | jr z,l03b6h ;'S'?\r |
0716e834 L |
754 | ld a,c\r |
755 | sub l\r | |
756 | ld c,a\r | |
757 | ld a,b\r | |
758 | sbc a,h\r | |
759 | ld b,a\r | |
760 | inc bc\r | |
0c4244e5 | 761 | l03b6h:\r |
0716e834 L |
762 | and a\r |
763 | ret\r | |
0c4244e5 | 764 | l03b8h:\r |
0716e834 L |
765 | pop af\r |
766 | pop hl\r | |
85b57f2a | 767 | jr z,error0 ;'S', but no expression following\r |
0716e834 L |
768 | scf\r |
769 | ret\r | |
0c4244e5 | 770 | \r |
9711a430 L |
771 | ;-------------------------------------------------------------------------------\r |
772 | \r | |
0c4244e5 | 773 | expr:\r |
0716e834 | 774 | call skipbl\r |
0c4244e5 | 775 | expr1:\r |
0716e834 L |
776 | call do_factor\r |
777 | ret c\r | |
0c4244e5 | 778 | l0433h:\r |
0716e834 L |
779 | call do_binary_op\r |
780 | push hl\r | |
781 | push bc\r | |
782 | call do_factor\r | |
783 | pop bc\r | |
784 | ex de,hl\r | |
785 | ex (sp),hl\r | |
786 | jr nc,l0447h\r | |
787 | pop de\r | |
788 | ld a,b\r | |
789 | or c\r | |
790 | ret z\r | |
791 | jp ERROR\r | |
0c4244e5 L |
792 | \r |
793 | l0447h:\r | |
0716e834 L |
794 | ld a,b\r |
795 | or c\r | |
796 | push bc\r | |
797 | ret nz\r | |
798 | pop bc\r | |
0c4244e5 L |
799 | \r |
800 | doop_add:\r | |
0716e834 | 801 | add hl,de\r |
0c4244e5 | 802 | l044dh:\r |
0716e834 L |
803 | pop de\r |
804 | jr l0433h\r | |
0c4244e5 L |
805 | \r |
806 | doop_sub:\r | |
0716e834 L |
807 | and a\r |
808 | sbc hl,de\r | |
809 | jr l044dh\r | |
0c4244e5 L |
810 | \r |
811 | doop_mlt:\r | |
0716e834 L |
812 | push bc\r |
813 | ld b,h\r | |
814 | ld c,l\r | |
815 | ld hl,0\r | |
816 | ld a,010h\r | |
0c4244e5 | 817 | l045dh:\r |
0716e834 L |
818 | add hl,hl\r |
819 | ex de,hl\r | |
820 | add hl,hl\r | |
821 | ex de,hl\r | |
822 | jr nc,l0464h\r | |
823 | add hl,bc\r | |
0c4244e5 | 824 | l0464h:\r |
0716e834 L |
825 | dec a\r |
826 | jr nz,l045dh\r | |
827 | pop bc\r | |
828 | jr l044dh\r | |
0c4244e5 L |
829 | \r |
830 | doop_div:\r | |
0716e834 L |
831 | call div_hl_de\r |
832 | jr l044dh\r | |
0c4244e5 L |
833 | \r |
834 | doop_mod:\r | |
0716e834 L |
835 | call div_hl_de\r |
836 | ex de,hl\r | |
837 | jr l044dh\r | |
0c4244e5 L |
838 | \r |
839 | ; divide x/y\r | |
840 | ; hl: x\r | |
841 | ; de: y\r | |
842 | ; return:\r | |
843 | ; hl: q (x/y)\r | |
844 | ; de: r (x%y)\r | |
845 | \r | |
846 | div_hl_de:\r | |
f33961b5 L |
847 | push bc\r |
848 | ex de,hl ;de: x\r | |
849 | ld b,h ;bc: y\r | |
850 | ld c,l\r | |
851 | ld hl,0 ;hl: r\r | |
852 | ld a,16\r | |
0c4244e5 L |
853 | \r |
854 | ; de: x (x shifted out, q shifted in)\r | |
855 | ; bc: y\r | |
856 | ; hl: r (initially 0)\r | |
857 | \r | |
f33961b5 L |
858 | div_lp:\r |
859 | ex de,hl\r | |
860 | add hl,hl ;x <<= 1\r | |
861 | ex de,hl\r | |
862 | adc hl,hl ;r <<= 1\r | |
863 | inc de\r | |
864 | or a\r | |
865 | sbc hl,bc\r | |
866 | jr nc,div_norestore\r | |
867 | dec de\r | |
868 | add hl,bc\r | |
869 | div_norestore:\r | |
870 | dec a\r | |
871 | jr nz,div_lp\r | |
872 | ex de,hl\r | |
873 | pop bc\r | |
0716e834 | 874 | ret\r |
0c4244e5 L |
875 | \r |
876 | doop_and:\r | |
0716e834 L |
877 | ld a,h\r |
878 | and d\r | |
879 | ld h,a\r | |
880 | ld a,l\r | |
881 | and e\r | |
882 | ld l,a\r | |
883 | jr l044dh\r | |
0c4244e5 L |
884 | \r |
885 | doop_or:\r | |
0716e834 L |
886 | ld a,h\r |
887 | or d\r | |
888 | ld h,a\r | |
889 | ld a,l\r | |
890 | or e\r | |
891 | ld l,a\r | |
892 | jr l044dh\r | |
0c4244e5 L |
893 | \r |
894 | doop_xor:\r | |
0716e834 L |
895 | ld a,h\r |
896 | xor d\r | |
897 | ld h,a\r | |
898 | ld a,l\r | |
899 | xor e\r | |
900 | ld l,a\r | |
901 | jr l044dh\r | |
0c4244e5 L |
902 | \r |
903 | do_binary_op:\r | |
0716e834 L |
904 | push hl\r |
905 | ld hl,tab_op_a\r | |
906 | call lookupch\r | |
907 | ld a,b\r | |
908 | ld hl,tblf_opa\r | |
6bc52899 | 909 | call add_hl_a2\r |
0716e834 L |
910 | ld c,(hl)\r |
911 | inc hl\r | |
912 | ld b,(hl)\r | |
913 | pop hl\r | |
914 | ret\r | |
0c4244e5 L |
915 | \r |
916 | tab_op_a:\r | |
917 | DB '+-*/%&!#',0\r | |
918 | \r | |
919 | tblf_opa:\r | |
0716e834 L |
920 | dw doop_add\r |
921 | dw doop_sub\r | |
922 | dw doop_mlt\r | |
923 | dw doop_div\r | |
924 | dw doop_mod\r | |
925 | dw doop_and\r | |
926 | dw doop_or\r | |
927 | dw doop_xor\r | |
928 | dw 0\r | |
0c4244e5 | 929 | \r |
9711a430 L |
930 | ;-------------------------------------------------------------------------------\r |
931 | \r | |
0c4244e5 | 932 | fact_factor:\r |
0716e834 L |
933 | call do_factor\r |
934 | ret nc\r | |
935 | jp ERROR\r | |
0c4244e5 L |
936 | \r |
937 | do_factor:\r | |
85b57f2a | 938 | call chk_stack\r |
0716e834 L |
939 | call get.number\r |
940 | ret nc\r | |
941 | inc de\r | |
0f35ae66 | 942 | ld hl,ddtz_base-1\r |
0716e834 L |
943 | cp 'T'\r |
944 | ret z\r | |
945 | ld hl,(high_load)\r | |
946 | cp 'H'\r | |
947 | ret z\r | |
948 | ld hl,(max_load)\r | |
949 | cp 'M'\r | |
950 | ret z\r | |
951 | ld hl,TPA\r | |
952 | cp 'L'\r | |
953 | ret z\r | |
0716e834 L |
954 | cp '-'\r |
955 | jr z,fact_factneg\r | |
956 | cp '~'\r | |
957 | jr z,fact_factinv\r | |
958 | cp '+'\r | |
959 | jr z,fact_factor\r | |
960 | cp '^'\r | |
961 | jr z,fact_reg.CPU\r | |
0716e834 L |
962 | cp '('\r |
963 | jr z,fact_mem\r | |
964 | cp '['\r | |
3a4deef9 | 965 | jr z,expr_brckt\r |
0716e834 L |
966 | cp ''''\r |
967 | jr z,fact_factstring\r | |
968 | dec de\r | |
969 | scf\r | |
970 | ret\r | |
0c4244e5 | 971 | \r |
9711a430 L |
972 | ;-------------------------------------------------------------------------------\r |
973 | \r | |
0c4244e5 | 974 | fact_factstring:\r |
0716e834 | 975 | ld hl,0\r |
0c4244e5 | 976 | l054bh:\r |
0716e834 L |
977 | ld a,(de)\r |
978 | cp ''''\r | |
979 | jr z,l0557h\r | |
980 | and a\r | |
981 | ret z\r | |
0c4244e5 | 982 | l0552h:\r |
0716e834 L |
983 | ld h,l\r |
984 | ld l,a\r | |
985 | inc de\r | |
986 | jr l054bh\r | |
0c4244e5 | 987 | l0557h:\r |
0716e834 L |
988 | inc de\r |
989 | ld a,(de)\r | |
990 | cp ''''\r | |
991 | jr z,l0552h\r | |
992 | sub '.'\r | |
993 | or a\r | |
994 | ret nz\r | |
995 | inc de\r | |
996 | set 7,l\r | |
997 | ret\r | |
0c4244e5 L |
998 | \r |
999 | fact_reg.CPU:\r | |
0716e834 | 1000 | call sub_0caeh\r |
30673dea | 1001 | jr nc,error1\r |
0716e834 L |
1002 | ld a,(hl)\r |
1003 | inc hl\r | |
1004 | ld h,(hl)\r | |
1005 | ld l,a\r | |
1006 | and a\r | |
1007 | bit 0,c\r | |
1008 | ret nz\r | |
1009 | ld h,000h\r | |
1010 | ret\r | |
0c4244e5 L |
1011 | \r |
1012 | fact_factneg:\r | |
0716e834 L |
1013 | call fact_factor\r |
1014 | dec hl\r | |
0c4244e5 | 1015 | cpl.hl:\r |
0716e834 L |
1016 | ld a,h\r |
1017 | cpl\r | |
1018 | ld h,a\r | |
1019 | ld a,l\r | |
1020 | cpl\r | |
1021 | ld l,a\r | |
1022 | ret\r | |
0c4244e5 L |
1023 | \r |
1024 | fact_factinv:\r | |
0716e834 L |
1025 | call fact_factor\r |
1026 | jr cpl.hl\r | |
0c4244e5 L |
1027 | \r |
1028 | fact_mem:\r | |
0716e834 | 1029 | call expr1\r |
30673dea | 1030 | jr c,error1\r |
0716e834 L |
1031 | ld a,(de)\r |
1032 | cp ')'\r | |
30673dea | 1033 | jr nz,error1\r |
0716e834 L |
1034 | inc de\r |
1035 | ld a,(hl)\r | |
1036 | inc hl\r | |
1037 | ld h,(hl)\r | |
1038 | ld l,a\r | |
1039 | ld a,(de)\r | |
1040 | inc de\r | |
1041 | cp '.'\r | |
1042 | ret z\r | |
1043 | dec de\r | |
1044 | xor a\r | |
1045 | ld h,a\r | |
1046 | ret\r | |
0c4244e5 L |
1047 | \r |
1048 | expr_brckt:\r | |
0716e834 | 1049 | call expr1\r |
30673dea | 1050 | jr c,error1\r |
0716e834 L |
1051 | ld a,(de)\r |
1052 | cp ']'\r | |
1053 | inc de\r | |
1054 | ret z\r | |
30673dea | 1055 | error1:\r |
0716e834 | 1056 | jp ERROR\r |
0c4244e5 | 1057 | \r |
9711a430 L |
1058 | ;-------------------------------------------------------------------------------\r |
1059 | \r | |
0c4244e5 | 1060 | get.number:\r |
0716e834 L |
1061 | call get.hexdigit\r |
1062 | ret c\r | |
1063 | push de\r | |
0c4244e5 | 1064 | test_number:\r |
0716e834 L |
1065 | inc de\r |
1066 | call get.hexdigit\r | |
1067 | jr nc,test_number\r | |
1068 | pop de\r | |
1069 | cp '.'\r | |
1070 | jr z,get_dec_number\r | |
1071 | cp '"'\r | |
1072 | jr z,get_bin_number\r | |
1073 | ld hl,0\r | |
0c4244e5 | 1074 | next_hexdigit:\r |
0716e834 L |
1075 | call get.hexdigit\r |
1076 | jr c,hexnum_done\r | |
1077 | add hl,hl\r | |
1078 | add hl,hl\r | |
1079 | add hl,hl\r | |
1080 | add hl,hl\r | |
1081 | call add_hl_a\r | |
1082 | inc de\r | |
1083 | jr next_hexdigit\r | |
0c4244e5 L |
1084 | \r |
1085 | hexnum_done:\r | |
0716e834 L |
1086 | xor 'H'\r |
1087 | ret nz\r | |
1088 | inc de\r | |
1089 | ret\r | |
0c4244e5 L |
1090 | \r |
1091 | get_bin_number:\r | |
0716e834 | 1092 | ld hl,0\r |
0c4244e5 | 1093 | next_bindigit:\r |
0716e834 | 1094 | call get.bindigit\r |
0c4244e5 | 1095 | l05dbh:\r |
0716e834 L |
1096 | inc de\r |
1097 | jr c,l05e4h\r | |
1098 | add hl,hl\r | |
1099 | call add_hl_a\r | |
1100 | jr next_bindigit\r | |
0c4244e5 | 1101 | l05e4h:\r |
0716e834 | 1102 | cp '"'\r |
1bfdbe14 | 1103 | jr nz,error11\r |
0716e834 L |
1104 | call get.bindigit\r |
1105 | jr nc,l05dbh\r | |
1106 | or a\r | |
1107 | ret\r | |
0c4244e5 L |
1108 | \r |
1109 | get_dec_number:\r | |
0716e834 | 1110 | ld hl,0\r |
0c4244e5 | 1111 | next_decdigit:\r |
0716e834 L |
1112 | call get.decdigit\r |
1113 | inc de\r | |
1114 | jr c,decnum_done\r | |
1115 | push bc\r | |
1116 | add hl,hl\r | |
1117 | ld b,h\r | |
1118 | ld c,l\r | |
1119 | add hl,hl\r | |
1120 | add hl,hl\r | |
1121 | add hl,bc\r | |
1122 | pop bc\r | |
1123 | call add_hl_a\r | |
1124 | jr next_decdigit\r | |
0c4244e5 | 1125 | decnum_done:\r |
0716e834 L |
1126 | cp '.'\r |
1127 | ret z\r | |
1bfdbe14 | 1128 | error11:\r |
0716e834 | 1129 | jp ERROR\r |
0c4244e5 L |
1130 | \r |
1131 | sub_060ch:\r | |
0c461f1d | 1132 | call get_char_upper\r |
d1d6fee5 | 1133 | cp 'Z'+1\r |
0716e834 | 1134 | jr l0614h\r |
0c4244e5 L |
1135 | \r |
1136 | get.hexdigit:\r | |
c788b3b7 | 1137 | ld a,(de)\r |
0c4244e5 | 1138 | hex_digit:\r |
0c461f1d | 1139 | call toupper\r |
c788b3b7 | 1140 | cp 'F'+1\r |
0c4244e5 | 1141 | l0614h:\r |
c788b3b7 L |
1142 | ccf\r |
1143 | ret c\r | |
1144 | cp 'A'\r | |
1145 | jr c,l061eh\r | |
1146 | sub 'A'-10\r | |
1147 | ret\r | |
0c4244e5 L |
1148 | \r |
1149 | get.decdigit:\r | |
0c461f1d | 1150 | call get_char_upper\r |
0c4244e5 | 1151 | l061eh:\r |
c788b3b7 L |
1152 | cp '9'+1\r |
1153 | jr l0625h\r | |
0c4244e5 L |
1154 | \r |
1155 | get.bindigit:\r | |
0c461f1d | 1156 | call get_char_upper\r |
c788b3b7 | 1157 | cp '1'+1\r |
0c4244e5 | 1158 | l0625h:\r |
c788b3b7 L |
1159 | ccf\r |
1160 | ret c\r | |
1161 | cp '0'\r | |
1162 | ret c\r | |
1163 | sub '0'\r | |
1164 | ret\r | |
0c4244e5 | 1165 | \r |
9711a430 L |
1166 | ;-------------------------------------------------------------------------------\r |
1167 | \r | |
25a690e5 | 1168 | p_cpustat0:\r |
0716e834 | 1169 | call assert_eol\r |
25a690e5 | 1170 | p_cpustat:\r |
0716e834 L |
1171 | call p_f\r |
1172 | call outbl2\r | |
1173 | ld hl,b_06e9_start\r | |
1174 | ld de,b_0709_start\r | |
1175 | ld b,6\r | |
0c4244e5 | 1176 | l063eh:\r |
0716e834 L |
1177 | call p_regs\r |
1178 | djnz l063eh\r | |
27a5c416 | 1179 | call outbl6\r |
0716e834 L |
1180 | push hl\r |
1181 | push de\r | |
ac35765e | 1182 | ld iy,(reg.pc)\r |
0716e834 | 1183 | call p_disas_instr\r |
d24eec89 | 1184 | pop de\r |
8320b8eb | 1185 | pop hl\r |
0716e834 L |
1186 | call crlf\r |
1187 | call p_f2\r | |
1188 | call outbl2\r | |
0716e834 | 1189 | ld b,7\r |
0c4244e5 | 1190 | l065bh:\r |
0716e834 L |
1191 | call p_regs\r |
1192 | djnz l065bh\r | |
0716e834 | 1193 | jp crlf\r |
0c4244e5 | 1194 | \r |
25a690e5 | 1195 | p_f:\r |
0716e834 L |
1196 | ld a,(reg.f)\r |
1197 | call p_flags\r | |
1198 | ld a,(reg.iff)\r | |
1199 | cp 0f3h\r | |
8320b8eb | 1200 | jr z,outbl_1\r |
0716e834 L |
1201 | ld a,'E'\r |
1202 | jp outchar\r | |
25a690e5 | 1203 | p_f2:\r |
0716e834 L |
1204 | ld a,(reg.f2)\r |
1205 | call p_flags\r | |
8320b8eb | 1206 | jr outbl_1\r |
d24eec89 | 1207 | \r |
25a690e5 | 1208 | p_flags:\r |
836f48ab L |
1209 | push hl\r |
1210 | ld hl,t_flag_names+7\r | |
1211 | ld c,a\r | |
1212 | ld b,8\r | |
1213 | fl_loop:\r | |
1214 | ld a,' '\r | |
1215 | cp (hl)\r | |
1216 | ld a,c\r | |
1217 | rlca\r | |
1218 | ld c,a\r | |
1219 | jr z,fl_skip\r | |
1220 | ld a,(hl)\r | |
1221 | call c,outchar\r | |
1222 | call nc,outbl\r | |
1223 | fl_skip:\r | |
1224 | dec hl\r | |
1225 | djnz fl_loop\r | |
1226 | pop hl\r | |
1227 | ret\r | |
25a690e5 L |
1228 | \r |
1229 | p_regs:\r | |
0716e834 L |
1230 | push de\r |
1231 | call pstr\r | |
37ade8ec L |
1232 | call pstr_inl\r |
1233 | dc '='\r | |
0716e834 L |
1234 | ex (sp),hl\r |
1235 | ld e,(hl)\r | |
1236 | inc hl\r | |
1237 | ld d,(hl)\r | |
1238 | inc hl\r | |
1239 | ld a,(hl)\r | |
1240 | inc hl\r | |
1241 | push hl\r | |
1242 | and a\r | |
1243 | jr z,l06deh\r | |
d24eec89 L |
1244 | ex de,hl\r |
1245 | ld e,(hl)\r | |
1246 | inc hl\r | |
1247 | ld d,(hl)\r | |
1248 | ex de,hl\r | |
0716e834 L |
1249 | call out_hl\r |
1250 | jr l06e2h\r | |
0c4244e5 | 1251 | l06deh:\r |
0716e834 L |
1252 | ld a,(de)\r |
1253 | call out_hex\r | |
0c4244e5 | 1254 | l06e2h:\r |
0716e834 L |
1255 | pop de\r |
1256 | pop hl\r | |
8320b8eb L |
1257 | outbl_1:\r |
1258 | jp outbl\r | |
0c4244e5 L |
1259 | \r |
1260 | b_06e9_start:\r | |
1261 | DC 'A '\r | |
1262 | DC 'BC '\r | |
1263 | DC 'DE '\r | |
1264 | DC 'HL '\r | |
1265 | DC 'SP'\r | |
1266 | DC 'PC'\r | |
899547a8 L |
1267 | DC 'a'''\r |
1268 | DC 'bc'''\r | |
1269 | DC 'de'''\r | |
1270 | DC 'hl'''\r | |
0c4244e5 L |
1271 | DC 'IX'\r |
1272 | DC 'IY'\r | |
1273 | DC 'I'\r | |
1274 | DB 0\r | |
1275 | \r | |
1276 | b_0709_start:\r | |
0716e834 L |
1277 | dw reg.a\r |
1278 | db 000h\r | |
1279 | dw reg.c\r | |
1280 | db 001h\r | |
1281 | dw reg.e\r | |
1282 | db 001h\r | |
1283 | dw reg.l\r | |
1284 | db 001h\r | |
1285 | dw reg_sp\r | |
1286 | db 001h\r | |
ac35765e | 1287 | dw reg.pc\r |
0716e834 L |
1288 | db 002h\r |
1289 | dw reg.a2\r | |
1290 | db 000h\r | |
1291 | dw reg.c2\r | |
1292 | db 001h\r | |
1293 | dw reg.e2\r | |
1294 | db 001h\r | |
1295 | dw reg.l2\r | |
1296 | db 001h\r | |
1297 | dw reg.ix\r | |
1298 | db 001h\r | |
1299 | dw reg.iy\r | |
1300 | db 001h\r | |
1301 | dw reg.i\r | |
1302 | db 000h\r | |
1303 | db 000h\r | |
0c4244e5 | 1304 | \r |
9711a430 L |
1305 | ;-------------------------------------------------------------------------------\r |
1306 | ; > G [startaddr] [;breakp..]\r | |
1307 | ; Go [to start] [with temporary breakpoints]\r | |
1308 | \r | |
0c4244e5 | 1309 | cmd_G:\r |
0716e834 | 1310 | sub a\r |
4bb547a7 | 1311 | ld (bp_p_cpu_flag),a\r |
0716e834 L |
1312 | call expr\r |
1313 | jr c,l0740h\r | |
ac35765e | 1314 | ld (reg.pc),hl\r |
0c4244e5 | 1315 | l0740h:\r |
0716e834 | 1316 | call skipbl\r |
4bb547a7 | 1317 | jr z,user_go0\r |
0716e834 L |
1318 | cp ';'\r |
1319 | jp nz,ERROR\r | |
1320 | inc de\r | |
1321 | ld a,002h\r | |
1322 | call bp_enter\r | |
4bb547a7 | 1323 | user_go0:\r |
0716e834 | 1324 | jp user_go\r |
0c4244e5 | 1325 | \r |
9711a430 | 1326 | ;-------------------------------------------------------------------------------\r |
1bfdbe14 L |
1327 | \r |
1328 | bpl_init:\r | |
1329 | ld b,BP_CNT\r | |
1330 | ld ix,bp_tab\r | |
1331 | ex (sp),hl\r | |
1332 | ld (pbl_loop_adr),hl\r | |
1333 | ex (sp),hl\r | |
1334 | ret\r | |
1335 | \r | |
1336 | bpl_next:\r | |
1337 | ld de,BP_SIZE\r | |
81c1eadb | 1338 | push af\r |
1bfdbe14 | 1339 | add ix,de\r |
81c1eadb | 1340 | pop af\r |
1bfdbe14 L |
1341 | dec b\r |
1342 | ret z\r | |
1343 | \r | |
1344 | ex (sp),hl\r | |
1345 | ld hl,(pbl_loop_adr)\r | |
1346 | ex (sp),hl\r | |
1347 | ret\r | |
1348 | \r | |
0c4244e5 | 1349 | bp_clr_temporary:\r |
1bfdbe14 L |
1350 | call bpl_init\r |
1351 | \r | |
0716e834 L |
1352 | ld a,(ix+000h)\r |
1353 | and 0f1h\r | |
1354 | ld (ix+000h),a\r | |
1bfdbe14 L |
1355 | \r |
1356 | call bpl_next\r | |
0716e834 | 1357 | ret\r |
0c4244e5 | 1358 | \r |
9711a430 L |
1359 | ;-------------------------------------------------------------------------------\r |
1360 | ; > B\r | |
1361 | ; display all breakpoints\r | |
1362 | ; > B breakp [breakp..]\r | |
1363 | ; set breakpoints\r | |
1364 | ; > BX\r | |
1365 | ; clear all breakpoints\r | |
d2df51e3 | 1366 | ; > BX breakp [breakp..]\r |
9711a430 L |
1367 | ; clear breakpoints\r |
1368 | ;\r | |
d2df51e3 | 1369 | ; breakp can be any valid expression\r |
9711a430 | 1370 | \r |
0c4244e5 | 1371 | cmd_B:\r |
0716e834 | 1372 | call skipbl\r |
4903b8b8 | 1373 | jr z,bp_print\r |
0716e834 L |
1374 | inc de\r |
1375 | cp 'X'\r | |
4903b8b8 | 1376 | jr z,bp_clr0\r |
0716e834 L |
1377 | dec de\r |
1378 | ld a,001h\r | |
1379 | jp bp_enter\r | |
81c1eadb | 1380 | \r |
4903b8b8 | 1381 | bp_clr0:\r |
0716e834 L |
1382 | call skipbl\r |
1383 | jr z,bp_clr_all\r | |
4903b8b8 | 1384 | bp_clr_next:\r |
0716e834 L |
1385 | call expr\r |
1386 | jp c,assert_eol\r | |
1387 | push de\r | |
1388 | call bp_clr\r | |
1389 | pop de\r | |
1390 | call next_arg\r | |
4903b8b8 | 1391 | jr bp_clr_next\r |
0c4244e5 L |
1392 | \r |
1393 | bp_clr_all:\r | |
0716e834 | 1394 | scf\r |
0c4244e5 | 1395 | bp_clr:\r |
1bfdbe14 L |
1396 | call bpl_init\r |
1397 | \r | |
0716e834 L |
1398 | push af\r |
1399 | jr c,l07a7h\r | |
1400 | ld e,(ix+002h)\r | |
1401 | ld d,(ix+003h)\r | |
1402 | call cp_hl_de\r | |
1403 | jr nz,l07aeh\r | |
0c4244e5 | 1404 | l07a7h:\r |
0716e834 | 1405 | ld (ix+000h),000h\r |
0c4244e5 | 1406 | l07aeh:\r |
0716e834 | 1407 | pop af\r |
1bfdbe14 | 1408 | call bpl_next\r |
0716e834 | 1409 | ret\r |
0c4244e5 | 1410 | \r |
4903b8b8 | 1411 | bp_print:\r |
3628b074 | 1412 | ld c,0\r |
1bfdbe14 L |
1413 | call bpl_init\r |
1414 | \r | |
0716e834 | 1415 | bit 0,(ix+000h)\r |
4903b8b8 | 1416 | jr z,bp_pr_cont\r |
0716e834 L |
1417 | ld l,(ix+002h)\r |
1418 | ld h,(ix+003h)\r | |
35b535f6 | 1419 | call out_hl\r |
3628b074 L |
1420 | call outbl2\r |
1421 | inc c\r | |
4903b8b8 | 1422 | bp_pr_cont:\r |
1bfdbe14 | 1423 | call bpl_next\r |
3628b074 L |
1424 | ld a,c\r |
1425 | or a\r | |
1426 | call nz,crlf\r | |
0716e834 | 1427 | ret\r |
0c4244e5 | 1428 | \r |
9711a430 | 1429 | ;-------------------------------------------------------------------------------\r |
0c4244e5 L |
1430 | ; Add break points to list\r |
1431 | ; A = 1 Permanent (B command)\r | |
1432 | ; A = 2 Temporary (G command)\r | |
1433 | \r | |
1434 | bp_enter:\r | |
0716e834 L |
1435 | ld b,a\r |
1436 | call skipbl\r | |
1437 | ret z\r | |
3628b074 | 1438 | \r |
0716e834 L |
1439 | push bc\r |
1440 | call expr\r | |
1bfdbe14 | 1441 | jr c,error12\r |
0716e834 L |
1442 | pop bc\r |
1443 | bit 0,b\r | |
1444 | push bc\r | |
1445 | push de\r | |
1446 | push hl\r | |
1447 | call nz,bp_clr\r | |
1448 | pop hl\r | |
1449 | call bp_get_freeslot\r | |
1450 | pop de\r | |
1451 | ld (ix+002h),l\r | |
1452 | ld (ix+003h),h\r | |
0716e834 L |
1453 | call next_arg\r |
1454 | pop af\r | |
1455 | ld (ix+000h),a\r | |
1456 | and 00fh\r | |
1457 | jr bp_enter\r | |
0c4244e5 L |
1458 | \r |
1459 | bp_get_freeslot:\r | |
1bfdbe14 L |
1460 | call bpl_init\r |
1461 | \r | |
0716e834 L |
1462 | ld a,(ix+000h)\r |
1463 | and 00fh\r | |
1464 | ret z\r | |
1bfdbe14 L |
1465 | \r |
1466 | call bpl_next\r | |
1467 | error12\r | |
0716e834 | 1468 | jp ERROR\r |
0c4244e5 | 1469 | \r |
0c4244e5 | 1470 | \r |
9711a430 | 1471 | ;-------------------------------------------------------------------------------\r |
a768c062 | 1472 | ; Breakpoint handling routine.\r |
9711a430 | 1473 | \r |
0c4244e5 | 1474 | bpddtz:\r |
0716e834 L |
1475 | ld (reg.l),hl\r |
1476 | pop hl\r | |
1477 | dec hl\r | |
ac35765e | 1478 | ld (reg.pc),hl\r |
0716e834 L |
1479 | ld (reg_sp),sp\r |
1480 | ld sp,reg.l\r | |
1481 | push de\r | |
1482 | push bc\r | |
1483 | push af\r | |
1484 | push ix\r | |
1485 | push iy\r | |
1486 | ld a,i\r | |
4bb547a7 | 1487 | call di_or_ei\r |
0716e834 L |
1488 | ld h,a\r |
1489 | ld l,000h\r | |
1490 | push hl\r | |
4bb547a7 | 1491 | ld a,0f3h ; EI\r |
0716e834 | 1492 | jp po,l08dfh\r |
4bb547a7 | 1493 | ld a,0fbh ; DI\r |
0c4244e5 | 1494 | l08dfh:\r |
0716e834 L |
1495 | ld (reg.iff),a\r |
1496 | ex af,af'\r | |
1497 | push af\r | |
1498 | exx\r | |
1499 | push bc\r | |
1500 | push de\r | |
1501 | push hl\r | |
4bb547a7 | 1502 | call bp_restore_mem\r |
0716e834 L |
1503 | ld a,(b_21e2_start)\r |
1504 | dec a\r | |
1505 | jr z,l090bh\r | |
4bb547a7 L |
1506 | call inchar ;Keyboard hit?\r |
1507 | jr c,do_break ;yes\r | |
0716e834 L |
1508 | call sub_0913h\r |
1509 | and a\r | |
1510 | jp z,user_go\r | |
1511 | and 083h\r | |
1512 | jp z,l2151h\r | |
4bb547a7 | 1513 | do_break:\r |
0716e834 L |
1514 | call bp_clr_temporary\r |
1515 | call p_cpustat\r | |
1516 | jp mainloop\r | |
0c4244e5 L |
1517 | \r |
1518 | l090bh:\r | |
0716e834 L |
1519 | ld (b_21e2_start),a\r |
1520 | ld c,007h\r | |
1521 | jp l0a41h\r | |
0c4244e5 L |
1522 | \r |
1523 | sub_0913h:\r | |
0716e834 L |
1524 | ld a,080h\r |
1525 | ex af,af'\r | |
1526 | sub a\r | |
4bb547a7 | 1527 | ld (bp_p_cpu_flag),a\r |
1bfdbe14 L |
1528 | call bpl_init\r |
1529 | \r | |
0716e834 L |
1530 | ld a,(ix+000h)\r |
1531 | and 007h\r | |
1532 | jr z,l0938h\r | |
1533 | ld e,(ix+002h)\r | |
1534 | ld d,(ix+003h)\r | |
ac35765e | 1535 | ld hl,(reg.pc)\r |
0716e834 | 1536 | call cp_hl_de\r |
d2df51e3 | 1537 | jr nz,l0938h\r |
0716e834 L |
1538 | ex af,af'\r |
1539 | res 7,a\r | |
0716e834 L |
1540 | or (ix+000h)\r |
1541 | ex af,af'\r | |
d2df51e3 L |
1542 | l0938h:\r |
1543 | call bpl_next\r | |
1544 | ex af,af'\r | |
0716e834 | 1545 | ret\r |
0c4244e5 | 1546 | \r |
4bb547a7 | 1547 | bp_restore_mem:\r |
1bfdbe14 L |
1548 | call bpl_init\r |
1549 | \r | |
0716e834 L |
1550 | bit 5,(ix+000h)\r |
1551 | res 5,(ix+000h)\r | |
1552 | jr z,l099ah\r | |
1553 | ld l,(ix+002h)\r | |
1554 | ld h,(ix+003h)\r | |
1555 | ld a,(l0003h)\r | |
1556 | cp (hl)\r | |
1557 | jr nz,l099ah\r | |
1558 | ld a,(ix+001h)\r | |
1559 | ld (hl),a\r | |
0c4244e5 | 1560 | l099ah:\r |
0716e834 | 1561 | res 3,(ix+000h)\r |
1bfdbe14 L |
1562 | \r |
1563 | call bpl_next\r | |
0716e834 | 1564 | ret\r |
0c4244e5 | 1565 | \r |
4bb547a7 | 1566 | bp_tst_@pc:\r |
1bfdbe14 L |
1567 | call bpl_init\r |
1568 | \r | |
0716e834 L |
1569 | ld a,(ix+000h)\r |
1570 | and 003h\r | |
4a39ae18 | 1571 | jr z,bp_tst_e\r |
0716e834 L |
1572 | ld e,(ix+002h)\r |
1573 | ld d,(ix+003h)\r | |
ac35765e | 1574 | ld hl,(reg.pc)\r |
0716e834 L |
1575 | call cp_hl_de\r |
1576 | ret z\r | |
4a39ae18 | 1577 | bp_tst_e:\r |
1bfdbe14 | 1578 | call bpl_next\r |
0716e834 L |
1579 | sub a\r |
1580 | inc a\r | |
1581 | ret\r | |
0c4244e5 | 1582 | \r |
4bb547a7 | 1583 | bp_trace_enter:\r |
0716e834 | 1584 | call bp_get_freeslot\r |
0716e834 L |
1585 | ld (ix+002h),l\r |
1586 | ld (ix+003h),h\r | |
0716e834 L |
1587 | ld a,(b_21e2_start)\r |
1588 | and a\r | |
1589 | ld a,008h\r | |
4a39ae18 | 1590 | jr nz,bp_t_e\r |
1d3941c8 | 1591 | rra\r |
4a39ae18 | 1592 | bp_t_e:\r |
0716e834 L |
1593 | ld (ix+000h),a\r |
1594 | ret\r | |
0c4244e5 | 1595 | \r |
1d3941c8 | 1596 | bp_set_to_mem:\r |
1bfdbe14 L |
1597 | call bpl_init\r |
1598 | \r | |
0716e834 L |
1599 | ld a,(ix+000h)\r |
1600 | and c\r | |
1601 | jr z,l0a1dh\r | |
1602 | set 5,(ix+000h)\r | |
1603 | ld l,(ix+002h)\r | |
1604 | ld h,(ix+003h)\r | |
1605 | ld a,(hl)\r | |
1606 | ld (ix+001h),a\r | |
1607 | ld a,(l0003h)\r | |
1608 | ld (hl),a\r | |
1609 | and 038h\r | |
1610 | ld h,000h\r | |
1611 | ld l,a\r | |
1612 | ld (hl),0c3h\r | |
1613 | inc hl\r | |
1614 | ld de,bpddtz\r | |
1615 | ld (hl),e\r | |
1616 | inc hl\r | |
1617 | ld (hl),d\r | |
0c4244e5 | 1618 | l0a1dh:\r |
1bfdbe14 L |
1619 | \r |
1620 | call bpl_next\r | |
0716e834 | 1621 | ret\r |
0c4244e5 | 1622 | \r |
9711a430 L |
1623 | ;-------------------------------------------------------------------------------\r |
1624 | \r | |
0c4244e5 | 1625 | user_go:\r |
0716e834 L |
1626 | sub a\r |
1627 | ld (b_21e2_start),a\r | |
4bb547a7 | 1628 | ld a,(bp_p_cpu_flag)\r |
0716e834 L |
1629 | and a\r |
1630 | call nz,p_cpustat\r | |
4bb547a7 | 1631 | call bp_tst_@pc\r |
0716e834 L |
1632 | ld c,007h\r |
1633 | jr nz,l0a41h\r | |
1634 | ld a,001h\r | |
1635 | ld (b_21e2_start),a\r | |
4a39ae18 | 1636 | call tc_set_bp\r |
0716e834 | 1637 | ld c,008h\r |
0c4244e5 | 1638 | l0a41h:\r |
1d3941c8 | 1639 | call bp_set_to_mem\r |
0716e834 L |
1640 | ld sp,reg.l2\r |
1641 | pop hl\r | |
1642 | pop de\r | |
1643 | pop bc\r | |
1644 | pop af\r | |
1645 | exx\r | |
1646 | ex af,af'\r | |
1647 | pop af\r | |
1648 | ld i,a\r | |
1649 | pop iy\r | |
1650 | pop ix\r | |
1651 | pop af\r | |
1652 | pop bc\r | |
1653 | pop de\r | |
1654 | pop hl\r | |
1655 | ld sp,(reg_sp)\r | |
1656 | jp reg.iff\r | |
0c4244e5 | 1657 | \r |
9711a430 L |
1658 | ;-------------------------------------------------------------------------------\r |
1659 | ; > Y\r | |
1660 | ; examine all Y variables\r | |
1661 | ; > Y[0..9]\r | |
1662 | ; examine (and substitute) an Y variable\r | |
1663 | \r | |
0c4244e5 | 1664 | \r |
9711a430 L |
1665 | ;-------------------------------------------------------------------------------\r |
1666 | ; > X\r | |
1667 | ; eXamine (display) all cpu registers and\r | |
1668 | ; the instruction at the current program counter\r | |
1669 | ; > X register\r | |
1670 | ; eXamine (and substitute) a register\r | |
1671 | \r | |
1672 | \r | |
0c4244e5 | 1673 | cmd_X:\r |
0716e834 L |
1674 | call skipbl\r |
1675 | call sub_0caeh\r | |
1676 | jp nc,p_cpustat0\r | |
1677 | call assert_eol\r | |
1678 | ld a,b\r | |
a942c6d5 | 1679 | cp 25\r |
0716e834 | 1680 | jr z,l0c5fh\r |
a942c6d5 | 1681 | cp 26\r |
0716e834 | 1682 | jr z,l0c4fh\r |
0716e834 | 1683 | ex de,hl\r |
f81f70a9 | 1684 | ld hl,t_reg_names\r |
a942c6d5 | 1685 | call pstr_sel\r |
0716e834 | 1686 | call l0c33h\r |
35b535f6 | 1687 | \r |
0716e834 L |
1688 | call outbl\r |
1689 | push de\r | |
1690 | push bc\r | |
1691 | call get_line\r | |
1692 | call skipbl\r | |
1693 | jr z,l0c30h\r | |
1694 | call sub_0363h\r | |
cab0d80a L |
1695 | ex de,hl\r |
1696 | pop bc\r | |
0716e834 | 1697 | pop hl\r |
cab0d80a L |
1698 | ld (hl),e\r |
1699 | bit 0,c\r | |
0716e834 L |
1700 | ret z\r |
1701 | inc hl\r | |
cab0d80a | 1702 | ld (hl),d\r |
0716e834 | 1703 | ret\r |
0c4244e5 | 1704 | l0c30h:\r |
0716e834 L |
1705 | pop af\r |
1706 | pop hl\r | |
1707 | ret\r | |
d1f2492e | 1708 | \r |
0c4244e5 | 1709 | l0c33h:\r |
37ade8ec L |
1710 | call pstr_inl\r |
1711 | dc '='\r | |
0716e834 | 1712 | ld a,(de)\r |
cab0d80a | 1713 | bit 0,c\r |
0716e834 L |
1714 | jp z,out_hex\r |
1715 | ld l,a\r | |
1716 | inc de\r | |
1717 | ld a,(de)\r | |
1718 | dec de\r | |
1719 | ld h,a\r | |
35b535f6 | 1720 | jp out_hl\r |
0c4244e5 L |
1721 | \r |
1722 | l0c4fh:\r | |
0716e834 L |
1723 | call p_f\r |
1724 | ld a,0f3h\r | |
1725 | ld (reg.iff),a\r | |
1726 | scf\r | |
1727 | call sub_0c6ah\r | |
1728 | ld (reg.f),a\r | |
1729 | ret\r | |
0c4244e5 | 1730 | l0c5fh:\r |
0716e834 L |
1731 | call p_f2\r |
1732 | and a\r | |
1733 | call sub_0c6ah\r | |
1734 | ld (reg.f2),a\r | |
1735 | ret\r | |
d24eec89 | 1736 | \r |
0c4244e5 | 1737 | sub_0c6ah:\r |
d24eec89 | 1738 | push af\r |
0716e834 L |
1739 | call outbl\r |
1740 | call assert_eol\r | |
1741 | call get_line\r | |
d24eec89 L |
1742 | pop af\r |
1743 | ex af,af'\r | |
b0451b39 | 1744 | ld b,0\r |
0c4244e5 | 1745 | l0c76h:\r |
0716e834 L |
1746 | call skipbl\r |
1747 | ld a,b\r | |
1748 | ret z\r | |
1749 | push bc\r | |
f81f70a9 | 1750 | ld hl,t_flag_names\r |
0716e834 L |
1751 | call lookupch\r |
1752 | jp nc,ERROR\r | |
f81f70a9 L |
1753 | inc b\r |
1754 | xor a\r | |
1755 | scf\r | |
1756 | nxt_f:\r | |
1757 | rla\r | |
1758 | djnz nxt_f\r | |
1759 | pop bc\r | |
1760 | jr c,l0c97h\r | |
1761 | or b\r | |
1762 | ld b,a\r | |
0716e834 | 1763 | jr l0c76h\r |
f81f70a9 | 1764 | \r |
0c4244e5 | 1765 | l0c97h:\r |
0716e834 L |
1766 | ex af,af'\r |
1767 | jp nc,ERROR\r | |
1768 | ex af,af'\r | |
1769 | ld a,0fbh\r | |
1770 | ld (reg.iff),a\r | |
0716e834 | 1771 | jr l0c76h\r |
0c4244e5 | 1772 | \r |
f81f70a9 | 1773 | t_flag_names:\r |
0c4244e5 L |
1774 | db 'CNV H ZSE',0\r |
1775 | \r | |
1776 | sub_0caeh:\r | |
0716e834 L |
1777 | call sub_0303h\r |
1778 | ret nc\r | |
1779 | ld a,b\r | |
1780 | add a,b\r | |
1781 | add a,b\r | |
1782 | ld hl,b_0cfa_start\r | |
1783 | call add_hl_a\r | |
1784 | ld c,(hl)\r | |
1785 | inc hl\r | |
1786 | ld a,(hl)\r | |
1787 | inc hl\r | |
1788 | ld h,(hl)\r | |
1789 | ld l,a\r | |
1790 | scf\r | |
1791 | ret\r | |
0c4244e5 | 1792 | \r |
f81f70a9 | 1793 | t_reg_names:\r |
a942c6d5 L |
1794 | DC 'BC''' ;0\r |
1795 | DC 'DE''' ;1\r | |
1796 | DC 'HL''' ;2\r | |
1797 | DC 'BC' ;3\r | |
1798 | DC 'DE' ;4\r | |
1799 | DC 'HL' ;5\r | |
1800 | DC 'A''' ;6\r | |
1801 | DC 'B''' ;7\r | |
1802 | DC 'C''' ;8\r | |
1803 | DC 'D''' ;9\r | |
1804 | DC 'E''' ;10\r | |
1805 | DC 'H''' ;11\r | |
1806 | DC 'L''' ;12\r | |
1807 | DC 'A' ;13\r | |
1808 | DC 'B' ;14\r | |
1809 | DC 'C' ;15\r | |
1810 | DC 'D' ;16\r | |
1811 | DC 'E' ;17\r | |
1812 | DC 'H' ;18\r | |
1813 | DC 'L' ;19\r | |
1814 | DC 'IX' ;20\r | |
1815 | DC 'IY' ;21\r | |
1816 | DC 'SP' ;22\r | |
1817 | DC 'PC' ;23\r | |
1818 | DC 'I' ;24\r | |
1819 | DC 'F''' ;25\r | |
1820 | DC 'F' ;26\r | |
0c4244e5 L |
1821 | DB 0\r |
1822 | \r | |
1823 | b_0cfa_start:\r | |
0716e834 L |
1824 | db 003h\r |
1825 | dw reg.c2\r | |
1826 | db 003h\r | |
1827 | dw reg.e2\r | |
1828 | db 003h\r | |
1829 | dw reg.l2\r | |
1830 | db 003h\r | |
1831 | dw reg.c\r | |
1832 | db 003h\r | |
1833 | dw reg.e\r | |
1834 | db 003h\r | |
1835 | dw reg.l\r | |
1836 | db 000h\r | |
1837 | dw reg.a2\r | |
1838 | db 000h\r | |
1839 | dw reg.b2\r | |
1840 | db 000h\r | |
1841 | dw reg.c2\r | |
1842 | db 000h\r | |
1843 | dw reg.d2\r | |
1844 | db 000h\r | |
1845 | dw reg.e2\r | |
1846 | db 000h\r | |
1847 | dw reg.h2\r | |
1848 | db 000h\r | |
1849 | dw reg.l2\r | |
1850 | db 000h\r | |
1851 | dw reg.a\r | |
1852 | db 000h\r | |
1853 | dw reg.b\r | |
1854 | db 000h\r | |
1855 | dw reg.c\r | |
1856 | db 000h\r | |
1857 | dw reg.d\r | |
1858 | db 000h\r | |
1859 | dw reg.e\r | |
1860 | db 000h\r | |
1861 | dw reg.h\r | |
1862 | db 000h\r | |
1863 | dw reg.l\r | |
1864 | db 003h\r | |
1865 | dw reg.ix\r | |
1866 | db 003h\r | |
1867 | dw reg.iy\r | |
1868 | db 003h\r | |
1869 | dw reg_sp\r | |
1870 | db 003h\r | |
ac35765e | 1871 | dw reg.pc\r |
0716e834 L |
1872 | db 000h\r |
1873 | dw reg.i\r | |
0716e834 L |
1874 | db 000h\r |
1875 | dw reg.f2\r | |
1876 | db 000h\r | |
1877 | dw reg.f\r | |
0c4244e5 | 1878 | \r |
9711a430 L |
1879 | ;-------------------------------------------------------------------------------\r |
1880 | ; > S [startaddr]\r | |
1881 | ; Substitute memory\r | |
1882 | \r | |
0c4244e5 | 1883 | cmd_S:\r |
0716e834 L |
1884 | ld hl,(last_S)\r |
1885 | call get_lastarg_def\r | |
0c4244e5 | 1886 | l0d60h:\r |
0716e834 | 1887 | ld (last_S),hl\r |
35b535f6 | 1888 | call out_hl\r |
0716e834 L |
1889 | call outbl\r |
1890 | ld a,(hl)\r | |
1891 | call out_hex\r | |
1892 | call outbl2\r | |
1893 | call get_line\r | |
1894 | call skipbl\r | |
1895 | inc hl\r | |
1896 | jr z,l0d60h\r | |
1897 | dec hl\r | |
1898 | inc de\r | |
1899 | cp '.'\r | |
85b57f2a | 1900 | jr nz,cmds_dash\r |
0c461f1d | 1901 | call get_char_upper\r |
85b57f2a L |
1902 | or a\r |
1903 | jr nz,l0d8ah\r | |
1904 | ret\r | |
1905 | cmds_dash:\r | |
0716e834 L |
1906 | jp z,assert_eol\r |
1907 | cp '-'\r | |
1908 | jr nz,l0d8ah\r | |
0c461f1d | 1909 | call get_char_upper\r |
0716e834 L |
1910 | or a\r |
1911 | dec hl\r | |
1912 | jr z,l0d60h\r | |
1913 | inc hl\r | |
0c4244e5 | 1914 | l0d8ah:\r |
0716e834 L |
1915 | dec de\r |
1916 | call sub_0ef8h\r | |
1917 | jr l0d60h\r | |
0c4244e5 | 1918 | \r |
9711a430 L |
1919 | ;-------------------------------------------------------------------------------\r |
1920 | ; > @\r | |
1921 | ; examine (substitute) displacement register @\r | |
1922 | \r | |
35b535f6 | 1923 | ;cmd_@:\r |
0c4244e5 | 1924 | \r |
9711a430 L |
1925 | ;-------------------------------------------------------------------------------\r |
1926 | ; >>I [port]\r | |
1927 | ; Input a byte from port\r | |
1928 | \r | |
0c4244e5 | 1929 | cmd_I:\r |
0716e834 L |
1930 | ld (cmd_rpt),hl\r |
1931 | ld hl,(last_I)\r | |
1932 | call get_lastarg_def\r | |
1933 | ld (last_I),hl\r | |
1934 | ld b,h\r | |
1935 | ld c,l\r | |
1936 | in a,(c)\r | |
1937 | push af\r | |
1938 | call out_hex\r | |
1939 | call outbl4\r | |
1940 | pop af\r | |
1941 | call out.bin.b\r | |
1942 | jp crlf\r | |
0c4244e5 | 1943 | \r |
9711a430 L |
1944 | ;-------------------------------------------------------------------------------\r |
1945 | ; >>O [byte] [port]\r | |
1946 | ; Output a byte to a port\r | |
1947 | \r | |
0c4244e5 | 1948 | cmd_O:\r |
0716e834 L |
1949 | ld (cmd_rpt),hl\r |
1950 | ld hl,(last_O_val)\r | |
1951 | call get_arg_def\r | |
1952 | ld a,l\r | |
1953 | ld (last_O_val),a\r | |
1954 | push af\r | |
1955 | call next_arg\r | |
1956 | ld hl,(last_O_addr)\r | |
1957 | call get_lastarg_def\r | |
1958 | ld (last_O_addr),hl\r | |
1959 | ld b,h\r | |
1960 | ld c,l\r | |
1961 | pop af\r | |
1962 | out (c),a\r | |
1963 | ret\r | |
0c4244e5 | 1964 | \r |
9711a430 L |
1965 | ;-------------------------------------------------------------------------------\r |
1966 | ; > Vstartaddr endaddr targetaddr\r | |
1967 | ; Verify (compare) two memory areas\r | |
1968 | \r | |
0c4244e5 | 1969 | cmd_V:\r |
0716e834 | 1970 | call sub_034eh\r |
0c4244e5 | 1971 | l0dedh:\r |
0716e834 L |
1972 | push bc\r |
1973 | ld a,(de)\r | |
1974 | ld b,(hl)\r | |
1975 | cp b\r | |
1976 | jr z,l0e10h\r | |
1977 | ld c,a\r | |
35b535f6 | 1978 | call out_hl\r |
0716e834 L |
1979 | call outbl\r |
1980 | ld a,b\r | |
1981 | call out_hex\r | |
1982 | call outbl2\r | |
1983 | ld a,c\r | |
1984 | call out_hex\r | |
1985 | call outbl\r | |
1986 | ex de,hl\r | |
35b535f6 | 1987 | call out_hl\r |
0716e834 L |
1988 | ex de,hl\r |
1989 | call crlf\r | |
0c4244e5 | 1990 | l0e10h:\r |
0716e834 | 1991 | pop bc\r |
0716e834 | 1992 | inc de\r |
391ac6fb L |
1993 | cpi\r |
1994 | jp pe,l0dedh\r | |
0716e834 | 1995 | ret\r |
0c4244e5 | 1996 | \r |
9711a430 | 1997 | ;-------------------------------------------------------------------------------\r |
391ac6fb L |
1998 | ; > M startaddr endaddr destaddr\r |
1999 | ; Move memory\r | |
9711a430 | 2000 | \r |
0c4244e5 | 2001 | cmd_M:\r |
0716e834 | 2002 | call sub_034eh\r |
0716e834 | 2003 | call cp_hl_de\r |
3f9577cd | 2004 | jr nc,cmdm_up\r |
0716e834 L |
2005 | add hl,bc\r |
2006 | ex de,hl\r | |
2007 | add hl,bc\r | |
2008 | ex de,hl\r | |
2009 | dec hl\r | |
2010 | dec de\r | |
2011 | lddr\r | |
3f9577cd L |
2012 | db 01h ;swallow ldir instruction (ld bc,...)\r |
2013 | cmdm_up:\r | |
2014 | ldir\r | |
0716e834 | 2015 | ret\r |
0c4244e5 | 2016 | \r |
9711a430 L |
2017 | ;-------------------------------------------------------------------------------\r |
2018 | ; > H\r | |
2019 | ; display Highest load address of last filed loaded, Maximum "High"\r | |
2020 | ; off all loaded files, and Top address of available memory\r | |
9711a430 L |
2021 | ; > H expression\r |
2022 | ; evaluate expression and display result in hex, decimal and other formats\r | |
9711a430 | 2023 | \r |
0c4244e5 | 2024 | cmd_H:\r |
0716e834 L |
2025 | call expr\r |
2026 | jp c,p_max_high0\r | |
0716e834 | 2027 | call assert_eol\r |
0716e834 L |
2028 | call out_hl\r |
2029 | call outbl2\r | |
2030 | call out_hl_neg\r | |
2031 | call outbl4\r | |
2032 | call out.hl.dec\r | |
2033 | call outbl2\r | |
2034 | call out_hl_dec_neg\r | |
2035 | call outbl4\r | |
2036 | call out.bin.w\r | |
ca1c9c55 | 2037 | call outbl2\r |
0716e834 L |
2038 | ld a,l\r |
2039 | call out.ascii\r | |
2040 | jp crlf\r | |
0c4244e5 | 2041 | \r |
9711a430 L |
2042 | ;-------------------------------------------------------------------------------\r |
2043 | ; > Q[J] startaddr endaddr bytes\r | |
2044 | ; Query memory for a byte string [Justified]\r | |
2045 | \r | |
0c4244e5 | 2046 | cmd_Q:\r |
0716e834 L |
2047 | call get_arg_range\r |
2048 | push bc\r | |
2049 | push hl\r | |
2050 | call sub_0ee6h\r | |
2051 | pop hl\r | |
0c4244e5 | 2052 | l0e96h:\r |
c18ba819 L |
2053 | push hl\r |
2054 | push de\r | |
2055 | push bc\r | |
2056 | l0edah:\r | |
2057 | ld a,(de)\r | |
2058 | cp (hl)\r | |
2059 | jr nz,l0ee2h\r | |
2060 | inc de\r | |
2061 | inc hl\r | |
2062 | djnz l0edah\r | |
2063 | l0ee2h:\r | |
2064 | pop bc\r | |
2065 | pop de\r | |
2066 | pop hl\r | |
0716e834 L |
2067 | jr nz,l0eb0h\r |
2068 | push bc\r | |
0716e834 | 2069 | ld bc,16\r |
c18ba819 | 2070 | and a ;clear carry\r |
0716e834 | 2071 | call sub_0f58h\r |
0716e834 | 2072 | pop bc\r |
0c4244e5 | 2073 | l0eb0h:\r |
0716e834 L |
2074 | inc hl\r |
2075 | ex (sp),hl\r | |
2076 | dec hl\r | |
2077 | ld a,h\r | |
2078 | or l\r | |
2079 | ex (sp),hl\r | |
2080 | jr nz,l0e96h\r | |
2081 | pop bc\r | |
2082 | ret\r | |
0c4244e5 | 2083 | \r |
9711a430 L |
2084 | ;-------------------------------------------------------------------------------\r |
2085 | ; > Z startaddr endaddr bytes\r | |
2086 | ; Zap (fill) memory with a byte string\r | |
2087 | \r | |
0c4244e5 | 2088 | cmd_Z:\r |
0716e834 L |
2089 | call get_arg_range\r |
2090 | push bc\r | |
2091 | push hl\r | |
2092 | call sub_0ee6h\r | |
2093 | ld a,b\r | |
2094 | pop hl\r | |
2095 | pop bc\r | |
2096 | push hl\r | |
2097 | ex de,hl\r | |
0c4244e5 | 2098 | l0ec7h:\r |
0716e834 L |
2099 | ldi\r |
2100 | jp po,l0ed3h\r | |
2101 | dec a\r | |
2102 | jr nz,l0ec7h\r | |
2103 | pop hl\r | |
2104 | ldir\r | |
2105 | ret\r | |
0c4244e5 | 2106 | l0ed3h:\r |
0716e834 L |
2107 | pop hl\r |
2108 | ret\r | |
0c4244e5 | 2109 | \r |
0c4244e5 | 2110 | sub_0ee6h:\r |
0716e834 L |
2111 | ld hl,conbuf+1\r |
2112 | call sub_0ef7h\r | |
2113 | ld de,conbuf+1\r | |
2114 | and a\r | |
2115 | sbc hl,de\r | |
2116 | ld b,l\r | |
2117 | ret nz\r | |
2118 | jp ERROR\r | |
0c4244e5 | 2119 | \r |
c18ba819 L |
2120 | sub_0ef7h: ;from cmd_Q, cmd_Z\r |
2121 | db 0e6h ;and 037h (clear carry)\r | |
2122 | sub_0ef8h: ;from cmd_S\r | |
0716e834 | 2123 | scf\r |
0c4244e5 | 2124 | l0ef9h:\r |
0716e834 L |
2125 | push af\r |
2126 | call next_arg\r | |
0716e834 L |
2127 | cp ''''\r |
2128 | jr z,l0f1eh\r | |
2129 | push hl\r | |
2130 | call expr\r | |
2131 | ld a,l\r | |
2132 | pop hl\r | |
2133 | jr c,l0f42h\r | |
0716e834 L |
2134 | ld (hl),a\r |
2135 | inc hl\r | |
2136 | jr l0f3ah\r | |
0c4244e5 | 2137 | l0f1eh:\r |
0716e834 L |
2138 | inc de\r |
2139 | ld a,(de)\r | |
2140 | cp ''''\r | |
2141 | jr z,l0f2bh\r | |
2142 | or a\r | |
2143 | jr z,l0f42h\r | |
0c4244e5 | 2144 | l0f27h:\r |
0716e834 L |
2145 | ld (hl),a\r |
2146 | inc hl\r | |
2147 | jr l0f1eh\r | |
0c4244e5 | 2148 | l0f2bh:\r |
0716e834 L |
2149 | inc de\r |
2150 | ld a,(de)\r | |
2151 | cp ''''\r | |
2152 | jr z,l0f27h\r | |
2153 | cp '.'\r | |
2154 | jr nz,l0f3ah\r | |
2155 | inc de\r | |
2156 | dec hl\r | |
2157 | set 7,(hl)\r | |
2158 | inc hl\r | |
0c4244e5 | 2159 | l0f3ah:\r |
0716e834 L |
2160 | pop af\r |
2161 | jr nc,l0ef9h\r | |
2162 | ld (last_S),hl\r | |
2163 | jr l0ef9h\r | |
0c4244e5 | 2164 | l0f42h:\r |
0716e834 L |
2165 | pop af\r |
2166 | ret nc\r | |
2167 | ld (last_S),hl\r | |
2168 | ret\r | |
0c4244e5 | 2169 | \r |
9711a430 L |
2170 | ;-------------------------------------------------------------------------------\r |
2171 | ; >>D [startaddr] [endaddr]\r | |
2172 | ; Display memory in hex and ASCII\r | |
2173 | \r | |
0c4244e5 | 2174 | cmd_D:\r |
0716e834 L |
2175 | ld (cmd_rpt),hl\r |
2176 | ld hl,(last_D)\r | |
2177 | ld bc,128\r | |
2178 | call sub_0377h\r | |
2179 | scf\r | |
0c4244e5 | 2180 | sub_0f58h:\r |
0716e834 L |
2181 | push bc\r |
2182 | push de\r | |
2183 | push hl\r | |
d24eec89 | 2184 | push af\r |
0c4244e5 | 2185 | l0f5ch:\r |
35b535f6 | 2186 | call out_hl\r |
c18ba819 | 2187 | call outbl2\r |
0716e834 | 2188 | ld de,0\r |
0c4244e5 | 2189 | l0f68h:\r |
0716e834 L |
2190 | ld a,(hl)\r |
2191 | inc hl\r | |
2192 | call out_hex\r | |
2193 | call outbl\r | |
2194 | dec bc\r | |
2195 | inc e\r | |
2196 | ld a,e\r | |
2197 | cp 010h\r | |
2198 | jr z,l0f80h\r | |
2199 | and 003h\r | |
2200 | call z,outbl\r | |
2201 | ld a,b\r | |
2202 | or c\r | |
2203 | jr nz,l0f68h\r | |
0c4244e5 | 2204 | l0f80h:\r |
0716e834 L |
2205 | call outbl\r |
2206 | and a\r | |
2207 | sbc hl,de\r | |
0c4244e5 | 2208 | l0f86h:\r |
0716e834 L |
2209 | ld a,(hl)\r |
2210 | call sub_0fa3h\r | |
2211 | call outchar\r | |
2212 | inc hl\r | |
2213 | dec e\r | |
2214 | jr nz,l0f86h\r | |
d24eec89 L |
2215 | pop af\r |
2216 | push af\r | |
0716e834 L |
2217 | jr nc,l0f97h\r |
2218 | ld (last_D),hl\r | |
0c4244e5 | 2219 | l0f97h:\r |
0716e834 L |
2220 | call crlf\r |
2221 | ld a,b\r | |
2222 | or c\r | |
2223 | jr nz,l0f5ch\r | |
d24eec89 | 2224 | pop af\r |
0716e834 L |
2225 | pop hl\r |
2226 | pop de\r | |
2227 | pop bc\r | |
2228 | ret\r | |
0c4244e5 L |
2229 | \r |
2230 | sub_0fa3h:\r | |
0716e834 L |
2231 | and 07fh\r |
2232 | cp 07fh\r | |
2233 | jr z,l0fach\r | |
2234 | cp ' '\r | |
2235 | ret nc\r | |
0c4244e5 | 2236 | l0fach:\r |
0716e834 L |
2237 | ld a,'.'\r |
2238 | ret\r | |
0c4244e5 | 2239 | \r |
9711a430 L |
2240 | ;-------------------------------------------------------------------------------\r |
2241 | ; > Fcommandline\r | |
2242 | ; specifiy filenames and command line\r | |
2243 | \r | |
25e453a7 | 2244 | ;cmd_F:\r |
0c4244e5 | 2245 | \r |
9711a430 | 2246 | ;-------------------------------------------------------------------------------\r |
25e453a7 L |
2247 | ; > R [displacement]\r |
2248 | ; Read Intel Hex File from console [add displacement]\r | |
9711a430 | 2249 | \r |
25e453a7 L |
2250 | cmd_R:\r |
2251 | ld hl,0\r | |
2252 | call get_lastarg_def ;get offset from command line\r | |
2253 | push hl\r | |
2254 | ld hl,0\r | |
2255 | ld (high_load),hl\r | |
2256 | w_recstart:\r | |
2257 | call i.getchar\r | |
2258 | jr z,rdhex_done\r | |
2259 | cp ':'\r | |
2260 | jr nz,w_recstart\r | |
2261 | ld c,0 ;init checksum\r | |
2262 | call i.gethexbyte ;record len\r | |
2263 | ld b,a\r | |
2264 | call i.gethexbyte ;address high\r | |
2265 | ld h,a\r | |
2266 | call i.gethexbyte ;address low\r | |
2267 | ld l,a\r | |
2268 | call i.gethexbyte ;record type (ignored)\r | |
2269 | ld a,b\r | |
2270 | and a ;record len == 0?\r | |
2271 | jr z,rdhex_done\r | |
2272 | l16c6h:\r | |
2273 | call i.gethexbyte\r | |
2274 | pop de ;offset\r | |
c788b3b7 | 2275 | push de\r |
25e453a7 | 2276 | push hl\r |
c788b3b7 | 2277 | add hl,de\r |
25e453a7 L |
2278 | call i.storebyte\r |
2279 | pop hl\r | |
c788b3b7 | 2280 | inc hl\r |
25e453a7 L |
2281 | djnz l16c6h ;repeat for record len\r |
2282 | call i.gethexbyte ;checksum\r | |
2283 | ld a,c\r | |
2284 | and a\r | |
b270cd3a | 2285 | jr nz,error2 ;exit if checksum error\r |
25e453a7 | 2286 | jr w_recstart ;next record\r |
b270cd3a | 2287 | \r |
25e453a7 L |
2288 | rdhex_done:\r |
2289 | pop hl\r | |
2290 | call i.gethexbyte\r | |
2291 | jp p_max_high\r | |
9711a430 | 2292 | \r |
25e453a7 L |
2293 | i.gethexbyte:\r |
2294 | call sub_16f6h\r | |
2295 | rlca\r | |
2296 | rlca\r | |
2297 | rlca\r | |
2298 | rlca\r | |
2299 | ld d,a\r | |
2300 | call sub_16f6h\r | |
2301 | add a,d\r | |
2302 | ld d,a\r | |
2303 | add a,c\r | |
2304 | ld c,a\r | |
2305 | ld a,d\r | |
c788b3b7 | 2306 | ret\r |
0c4244e5 | 2307 | \r |
25e453a7 L |
2308 | sub_16f6h:\r |
2309 | call i.getchar\r | |
2310 | jr z,error2\r | |
2311 | call hex_digit\r | |
2312 | ret nc\r | |
2313 | error2:\r | |
2314 | jp ERROR\r | |
0c4244e5 | 2315 | \r |
25e453a7 | 2316 | i.getchar:\r |
b5b85b4c | 2317 | call incharw\r |
25e453a7 | 2318 | cp 01ah\r |
0716e834 | 2319 | ret\r |
0c4244e5 | 2320 | \r |
25e453a7 | 2321 | i.storebyte:\r |
0716e834 L |
2322 | push af\r |
2323 | push de\r | |
25e453a7 | 2324 | ld de,TPA ;lowest allowed load address\r |
0716e834 | 2325 | call cp_hl_de\r |
30673dea | 2326 | jr c,error2\r |
25e453a7 | 2327 | ld de,(BDOS+1) ;highest allowed load address\r |
0716e834 | 2328 | call cp_hl_de\r |
30673dea | 2329 | jr nc,error2\r |
0716e834 L |
2330 | ld de,(high_load)\r |
2331 | call cp_hl_de\r | |
2332 | jr c,l1157h\r | |
2333 | ld (high_load),hl\r | |
0c4244e5 | 2334 | l1157h:\r |
0716e834 L |
2335 | ld de,(max_load)\r |
2336 | call cp_hl_de\r | |
2337 | jr c,l1163h\r | |
2338 | ld (max_load),hl\r | |
0c4244e5 | 2339 | l1163h:\r |
0716e834 L |
2340 | pop de\r |
2341 | pop af\r | |
25e453a7 | 2342 | ld (hl),a ;store byte\r |
0716e834 | 2343 | ret\r |
0c4244e5 | 2344 | \r |
9711a430 | 2345 | ;-------------------------------------------------------------------------------\r |
9711a430 | 2346 | \r |
25a690e5 | 2347 | p_max_high0:\r |
d1f2492e | 2348 | call assert_eol\r |
25a690e5 | 2349 | p_max_high:\r |
d1f2492e | 2350 | call pstr_inl\r |
0c4244e5 | 2351 | DC 'High = '\r |
d1f2492e L |
2352 | ld hl,(high_load)\r |
2353 | call out_hl\r | |
2354 | call pstr_inl\r | |
0c4244e5 | 2355 | DC ' Max = '\r |
d1f2492e L |
2356 | ld hl,(max_load)\r |
2357 | call out_hl\r | |
3a4deef9 L |
2358 | call pstr_inl\r |
2359 | DC ' Top = '\r | |
0f35ae66 | 2360 | ld hl,ddtz_base-1\r |
3a4deef9 | 2361 | call out_hl\r |
d1f2492e | 2362 | jp crlf\r |
0c4244e5 | 2363 | \r |
9711a430 L |
2364 | ;-------------------------------------------------------------------------------\r |
2365 | ; > Wstartaddr endaddr\r | |
2366 | ; Write a file to disk\r | |
2367 | \r | |
25e453a7 | 2368 | ;cmd_W:\r |
0c4244e5 | 2369 | \r |
9711a430 L |
2370 | ;-------------------------------------------------------------------------------\r |
2371 | ; > A [startaddr]\r | |
2372 | ; Assemble Zilog Z180 mnemonics\r | |
2373 | \r | |
786e99f6 | 2374 | ;cmd_A:\r |
ac35765e | 2375 | \r |
9711a430 L |
2376 | ;-------------------------------------------------------------------------------\r |
2377 | ; >>L [startaddr] [endaddr]\r | |
2378 | ; List disassembled code\r | |
2379 | \r | |
0c4244e5 | 2380 | cmd_L:\r |
0716e834 L |
2381 | ld (cmd_rpt),hl\r |
2382 | call expr\r | |
2383 | jr nc,l18dbh\r | |
2384 | ld hl,(last_L)\r | |
0c4244e5 | 2385 | l18dbh:\r |
0716e834 L |
2386 | call next_arg\r |
2387 | call get_range\r | |
2388 | jr nc,l1905h\r | |
2389 | call assert_eol\r | |
2390 | ld b,16\r | |
0c4244e5 | 2391 | l18ebh:\r |
0716e834 | 2392 | push bc\r |
85b57f2a | 2393 | call cmdl_p_line\r |
0716e834 L |
2394 | pop bc\r |
2395 | djnz l18ebh\r | |
2396 | ret\r | |
85b57f2a | 2397 | \r |
0c4244e5 | 2398 | l1905h:\r |
0716e834 | 2399 | call assert_eol\r |
85b57f2a L |
2400 | ld d,h\r |
2401 | ld e,l\r | |
2402 | add hl,bc\r | |
2403 | ex de,hl\r | |
0c4244e5 | 2404 | l190fh:\r |
85b57f2a L |
2405 | push de\r |
2406 | call cmdl_p_line\r | |
2407 | pop de\r | |
2408 | call cp_hl_de\r | |
2409 | jr c,l190fh\r | |
2410 | ret\r | |
2411 | \r | |
9711a430 L |
2412 | ;-------------------------------------------------------------------------------\r |
2413 | \r | |
85b57f2a L |
2414 | cmdl_p_line:\r |
2415 | push hl\r | |
35b535f6 | 2416 | call out_hl\r |
a942c6d5 | 2417 | call outbl2\r |
0716e834 L |
2418 | sub a\r |
2419 | ld (con_col),a\r | |
85b57f2a L |
2420 | push hl\r |
2421 | pop iy\r | |
0716e834 | 2422 | call p_disas_instr\r |
6bc52899 L |
2423 | call crlf\r |
2424 | pop hl\r | |
2425 | ld c,b\r | |
2426 | ld b,0\r | |
2427 | add hl,bc\r | |
2428 | ld (last_L),hl\r | |
35b535f6 | 2429 | ret\r |
0c4244e5 | 2430 | \r |
9711a430 L |
2431 | ;-------------------------------------------------------------------------------\r |
2432 | \r | |
25a690e5 | 2433 | p_disas_instr:\r |
0716e834 L |
2434 | call disas_get_instrlen\r |
2435 | jr nc,l197fh\r | |
85b57f2a L |
2436 | push bc\r |
2437 | ld a,(con_col)\r | |
2438 | add a,5\r | |
2439 | ld c,a\r | |
b270cd3a | 2440 | call pstr ;print mnemonic\r |
08d0db09 | 2441 | call p_goto_col\r |
0716e834 | 2442 | ex de,hl\r |
b270cd3a | 2443 | call CALL_HL ;print arguments\r |
0716e834 | 2444 | pop bc\r |
0716e834 L |
2445 | scf\r |
2446 | ret\r | |
0c4244e5 L |
2447 | \r |
2448 | l197fh:\r | |
d1f2492e | 2449 | call pstr_inl\r |
0c4244e5 | 2450 | DC '???'\r |
85b57f2a | 2451 | ld b,1\r |
d1f2492e L |
2452 | sub a\r |
2453 | ret\r | |
0c4244e5 L |
2454 | \r |
2455 | disas_get_instrlen:\r | |
0716e834 L |
2456 | sub a\r |
2457 | ld (isprefix_ixiy),a\r | |
2458 | ld a,(iy+000h)\r | |
2459 | cp 0edh\r | |
100f8242 | 2460 | jr z,disas_pfx.ED\r |
0716e834 L |
2461 | cp 0ddh\r |
2462 | jr z,l19abh\r | |
2463 | cp 0fdh\r | |
2464 | jr z,l19afh\r | |
0c4244e5 | 2465 | sub_19a0h:\r |
0716e834 L |
2466 | ld a,(iy+000h)\r |
2467 | cp 0cbh\r | |
100f8242 L |
2468 | jr z,disas_pfx.CB\r |
2469 | jr disas_nopfx\r | |
0c4244e5 | 2470 | l19abh:\r |
0716e834 L |
2471 | ld a,1\r |
2472 | jr l19b1h\r | |
0c4244e5 | 2473 | l19afh:\r |
0716e834 | 2474 | ld a,2\r |
0c4244e5 | 2475 | l19b1h:\r |
0716e834 L |
2476 | ld (isprefix_ixiy),a\r |
2477 | call disas_pfx.DDFD\r | |
2478 | ret nc\r | |
2479 | push bc\r | |
2480 | call sub_19a0h\r | |
2481 | pop af\r | |
2482 | add a,b\r | |
2483 | ld b,a\r | |
2484 | scf\r | |
2485 | ret\r | |
0c4244e5 | 2486 | \r |
9711a430 L |
2487 | ;-------------------------------------------------------------------------------\r |
2488 | \r | |
100f8242 L |
2489 | disas_nopfx:\r |
2490 | ld hl,b_1b54_start ;2 byte opcodes\r | |
2491 | call lookup_op_arg\r | |
2492 | ld b,2\r | |
2493 | ret c\r | |
2494 | ld hl,b_1ab6_start ;1 byte opcodes (no parameters)\r | |
2495 | call lookup_op\r | |
2496 | ld b,1\r | |
2497 | ret c\r | |
2498 | ld hl,b_1ad1_start ;1 byte opcodes\r | |
2499 | call lookup_op_arg\r | |
2500 | ld b,1\r | |
2501 | ret c\r | |
2502 | ld hl,b_1b9b_start ;3 byte opcodes\r | |
2503 | call lookup_op_arg\r | |
2504 | ld b,3\r | |
2505 | ret\r | |
2506 | \r | |
2507 | ;-------------------------------------------------------------------------------\r | |
2508 | \r | |
2509 | disas_pfx.ED:\r | |
2510 | inc iy\r | |
2511 | ld hl,b_1bc9_start ;1 byte opcode, no arguments\r | |
2512 | call lookup_op\r | |
2513 | ld b,2\r | |
2514 | ret c\r | |
2515 | ld hl,b_1bf4_start\r | |
2516 | call lookup_op_arg\r | |
2517 | ld b,2\r | |
2518 | ret c\r | |
2519 | \r | |
2520 | ld hl,l228bh\r | |
2521 | call lookup_op_arg\r | |
2522 | ld b,3\r | |
2523 | ret c\r | |
2524 | ld hl,b_1c40_start\r | |
2525 | call lookup_op_arg\r | |
2526 | ld b,4\r | |
2527 | ret\r | |
2528 | \r | |
2529 | ;-------------------------------------------------------------------------------\r | |
2530 | \r | |
2531 | disas_pfx.CB:\r | |
2532 | push iy\r | |
2533 | inc iy\r | |
2534 | ld a,(isprefix_ixiy)\r | |
2535 | and a\r | |
2536 | jr z,l1a42h\r | |
2537 | inc iy\r | |
2538 | l1a42h:\r | |
2539 | ld hl,b_1c55_start\r | |
2540 | call lookup_op_arg\r | |
2541 | pop iy\r | |
2542 | ld b,2\r | |
2543 | ret\r | |
2544 | \r | |
2545 | ;-------------------------------------------------------------------------------\r | |
2546 | \r | |
0c4244e5 | 2547 | disas_pfx.DDFD:\r |
0716e834 L |
2548 | inc iy\r |
2549 | ld hl,b_19ef_start\r | |
2550 | call test_DDFD\r | |
2551 | ld b,002h\r | |
2552 | ret c\r | |
2553 | ld hl,l1a0ah\r | |
2554 | call test_DDFD\r | |
2555 | ld b,001h\r | |
2556 | ret c\r | |
2557 | ld a,(iy+000h)\r | |
2558 | cp 0cbh\r | |
2559 | jr nz,l19edh\r | |
2560 | ld a,(iy+002h)\r | |
2561 | cp 036h\r | |
2562 | ret z\r | |
2563 | and 007h\r | |
2564 | cp 006h\r | |
2565 | jr nz,l19edh\r | |
2566 | ld b,002h\r | |
2567 | scf\r | |
2568 | ret\r | |
0c4244e5 | 2569 | l19edh:\r |
0716e834 L |
2570 | and a\r |
2571 | ret\r | |
0c4244e5 | 2572 | \r |
9711a430 | 2573 | ;-------------------------------------------------------------------------------\r |
eb982d46 | 2574 | ; DD/FD 3 byte (ix+d)/(iy+d)\r |
0c4244e5 | 2575 | b_19ef_start:\r |
0716e834 L |
2576 | db 034h\r |
2577 | db 035h\r | |
2578 | db 036h\r | |
2579 | db 046h\r | |
2580 | db 04eh\r | |
2581 | db 056h\r | |
2582 | db 05eh\r | |
2583 | db 066h\r | |
2584 | db 06eh\r | |
2585 | db 070h\r | |
2586 | db 071h\r | |
2587 | db 072h\r | |
2588 | db 073h\r | |
2589 | db 074h\r | |
2590 | db 075h\r | |
2591 | db 077h\r | |
2592 | db 07eh\r | |
2593 | db 086h\r | |
2594 | db 08eh\r | |
2595 | db 096h\r | |
2596 | db 09eh\r | |
2597 | db 0a6h\r | |
2598 | db 0aeh\r | |
2599 | db 0b6h\r | |
2600 | db 0beh\r | |
2601 | db 0\r | |
0c4244e5 | 2602 | \r |
eb982d46 | 2603 | ; DD/FD 2 byte\r |
0c4244e5 | 2604 | l1a0ah:\r |
0716e834 L |
2605 | db 009h\r |
2606 | db 019h\r | |
2607 | db 021h\r | |
2608 | db 022h\r | |
2609 | db 023h\r | |
2610 | db 029h\r | |
2611 | db 02ah\r | |
2612 | db 02bh\r | |
2613 | db 039h\r | |
2614 | db 0e1h\r | |
2615 | db 0e3h\r | |
2616 | db 0e5h\r | |
2617 | db 0e9h\r | |
2618 | db 0f9h\r | |
2619 | db 0\r | |
0c4244e5 | 2620 | \r |
9711a430 L |
2621 | ;-------------------------------------------------------------------------------\r |
2622 | \r | |
100f8242 | 2623 | lookup_op:\r |
0716e834 L |
2624 | ld a,(hl)\r |
2625 | cp 0ffh\r | |
2626 | ret z\r | |
2627 | cp (iy+000h)\r | |
2628 | jr z,l1a7fh\r | |
2629 | inc hl\r | |
2630 | inc hl\r | |
100f8242 | 2631 | jr lookup_op\r |
0c4244e5 | 2632 | l1a7fh:\r |
e611c31d | 2633 | ld de,p_arg_none\r |
0716e834 L |
2634 | inc hl\r |
2635 | ld c,(hl)\r | |
cab0d80a L |
2636 | jr get_mnemonic\r |
2637 | \r | |
0c4244e5 L |
2638 | \r |
2639 | test_DDFD:\r | |
0716e834 L |
2640 | ld a,(hl)\r |
2641 | and a\r | |
2642 | ret z\r | |
2643 | inc hl\r | |
2644 | cp (iy+000h)\r | |
2645 | jr nz,test_DDFD\r | |
2646 | scf\r | |
2647 | ret\r | |
0c4244e5 | 2648 | \r |
100f8242 | 2649 | lookup_op_arg:\r |
0716e834 L |
2650 | ld a,(iy+000h)\r |
2651 | and (hl)\r | |
2652 | inc hl\r | |
2653 | cp (hl)\r | |
2654 | jr z,l1aa8h\r | |
2655 | inc hl\r | |
2656 | inc hl\r | |
2657 | inc hl\r | |
2658 | inc hl\r | |
2659 | ld a,(hl)\r | |
2660 | and a\r | |
100f8242 | 2661 | jr nz,lookup_op_arg\r |
0716e834 | 2662 | ret\r |
cab0d80a | 2663 | \r |
0c4244e5 | 2664 | l1aa8h:\r |
0716e834 L |
2665 | inc hl\r |
2666 | ld c,(hl)\r | |
25ba7c19 L |
2667 | inc c\r |
2668 | ret z\r | |
2669 | dec c\r | |
0716e834 L |
2670 | inc hl\r |
2671 | ld e,(hl)\r | |
2672 | inc hl\r | |
2673 | ld d,(hl)\r | |
cab0d80a | 2674 | get_mnemonic:\r |
0716e834 | 2675 | ld hl,t_MNEMONICS\r |
cab0d80a | 2676 | ld b,0\r |
0716e834 L |
2677 | add hl,bc\r |
2678 | scf\r | |
2679 | ret\r | |
0c4244e5 | 2680 | \r |
9711a430 | 2681 | ;-------------------------------------------------------------------------------\r |
b0b4005c L |
2682 | ; 1 byte opcodes (no parameters)\r |
2683 | ; Format: db opcode, t_MNEMONICS-index\r | |
0c4244e5 | 2684 | b_1ab6_start:\r |
9a7481b8 L |
2685 | db 076h,o_HALT ;halt\r |
2686 | db 0d9h,o_EXX ;exx\r | |
2687 | db 0f3h,o_DI ;di\r | |
2688 | db 0fbh,o_EI ;ei\r | |
2689 | db 000h,o_NOP ;nop\r | |
2690 | db 007h,o_RLCA ;rlca\r | |
2691 | db 00fh,o_RRCA ;rrca\r | |
2692 | db 017h,o_RLA ;rla\r | |
2693 | db 01fh,o_RRA ;rra\r | |
2694 | db 027h,o_DAA ;daa\r | |
2695 | db 02fh,o_CPL ;cpl\r | |
2696 | db 037h,o_SCF ;scf\r | |
2697 | db 03fh,o_CCF ;ccf\r | |
2698 | db 0c9h,o_RET ;ret\r | |
b0b4005c L |
2699 | db 0ffh\r |
2700 | \r | |
0c4244e5 | 2701 | \r |
cab0d80a | 2702 | ; 1 byte opcodes\r |
b0b4005c | 2703 | ; Format: db mask, match, t_MNEMONICS-index\r |
78c98259 | 2704 | ; dw argument formating function\r |
0c4244e5 | 2705 | b_1ad1_start:\r |
b270cd3a L |
2706 | db 0c0h,040h,o_LD ;ld r[y],r[z]\r |
2707 | dw p_arg_ry_rz\r | |
2708 | db 0f8h,080h,o_ADD ;add a,r[z]\r | |
25a690e5 | 2709 | dw p_arg_a_r\r |
b270cd3a | 2710 | db 0f8h,088h,o_ADC ;adc a,r[z]\r |
25a690e5 | 2711 | dw p_arg_a_r\r |
b270cd3a | 2712 | db 0f8h,090h,o_SUB ;sub r[z]\r |
514bb0fd | 2713 | dw p_rz\r |
b270cd3a | 2714 | db 0f8h,098h,o_SBC ;sbc a,r[z]\r |
25a690e5 | 2715 | dw p_arg_a_r\r |
b270cd3a | 2716 | db 0f8h,0a0h,o_AND ;and r[z]\r |
514bb0fd | 2717 | dw p_rz\r |
b270cd3a | 2718 | db 0f8h,0a8h,o_XOR ;xor r[z]\r |
514bb0fd | 2719 | dw p_rz\r |
b270cd3a | 2720 | db 0f8h,0b0h,o_OR ;or r[z]\r |
514bb0fd | 2721 | dw p_rz\r |
b270cd3a | 2722 | db 0f8h,0b8h,o_CP ;cp r[z]\r |
514bb0fd | 2723 | dw p_rz\r |
9a7481b8 | 2724 | db 0c7h,0c0h,o_RET ;ret cc\r |
514bb0fd | 2725 | dw p_cc\r |
9a7481b8 | 2726 | db 0c7h,0c7h,o_RST ;rst\r |
e611c31d | 2727 | dw p_arg_rst\r |
9a7481b8 | 2728 | db 0cfh,0c1h,o_POP ;pop rr\r |
514bb0fd | 2729 | dw p_rp2\r |
9a7481b8 | 2730 | db 0cfh,0c5h,o_PUSH ;push rr\r |
514bb0fd | 2731 | dw p_rp2\r |
9a7481b8 | 2732 | db 0ffh,0e3h,o_EX ;ex (sp),hl\r |
b0b4005c | 2733 | dw l1ca0h\r |
9a7481b8 | 2734 | db 0ffh,0e9h,o_JP ;jp (hl)\r |
b0b4005c | 2735 | dw l1caeh\r |
9a7481b8 | 2736 | db 0ffh,0ebh,o_EX ;ex de,hl\r |
25a690e5 | 2737 | dw p_arg_ex_dehl\r |
9a7481b8 | 2738 | db 0ffh,0f9h,o_LD ;ld sp,hl\r |
b0b4005c | 2739 | dw l1cc1h\r |
9a7481b8 | 2740 | db 0cfh,003h,o_INC ;inc rr\r |
514bb0fd | 2741 | dw p_rp\r |
9a7481b8 | 2742 | db 0cfh,00bh,o_DEC ;dec rr\r |
514bb0fd | 2743 | dw p_rp\r |
9a7481b8 | 2744 | db 0c7h,004h,o_INC ;inc r\r |
514bb0fd | 2745 | dw p_ry\r |
9a7481b8 | 2746 | db 0c7h,005h,o_DEC ;dec r\r |
514bb0fd | 2747 | dw p_ry\r |
9a7481b8 | 2748 | db 0ffh,008h,o_EX ;ex af,af'\r |
25a690e5 | 2749 | dw p_arg_ex_afaf\r |
7c2469ef | 2750 | db 0cfh,009h,o_ADD ;add hl,rr\r |
b0b4005c | 2751 | dw l1cd3h\r |
9a7481b8 | 2752 | db 0efh,002h,o_LD ;ld (rr),a ;rr=bc,de\r |
b0b4005c | 2753 | dw l1cdch\r |
9a7481b8 | 2754 | db 0efh,00ah,o_LD ;ld a,(rr) ;rr=bc,de\r |
b0b4005c L |
2755 | dw l1ce5h\r |
2756 | db 0\r | |
0c4244e5 | 2757 | \r |
cab0d80a | 2758 | ; 2 byte opdodes\r |
0c4244e5 | 2759 | b_1b54_start:\r |
9a7481b8 | 2760 | db 0c7h,006h,o_LD ;ld r,nn\r |
b0b4005c | 2761 | dw l1cfah\r |
9a7481b8 | 2762 | db 0ffh,0c6h,o_ADD ;add a,nn\r |
b0b4005c | 2763 | dw l1cf5h\r |
9a7481b8 | 2764 | db 0ffh,0ceh,o_ADC ;adc a,nn\r |
b0b4005c | 2765 | dw l1cf5h\r |
9a7481b8 | 2766 | db 0ffh,0d6h,o_SUB ;sub nn\r |
b0b4005c | 2767 | dw l1d09h\r |
9a7481b8 | 2768 | db 0ffh,0deh,o_SBC ;sbc a,nn\r |
b0b4005c | 2769 | dw l1cf5h\r |
9a7481b8 | 2770 | db 0ffh,0e6h,o_AND ;and nn\r |
b0b4005c | 2771 | dw l1d09h\r |
9a7481b8 | 2772 | db 0ffh,0eeh,o_XOR ;xor nn\r |
b0b4005c | 2773 | dw l1d09h\r |
9a7481b8 | 2774 | db 0ffh,0f6h,o_OR ;or nn\r |
b0b4005c | 2775 | dw l1d09h\r |
9a7481b8 | 2776 | db 0ffh,0feh,o_CP ;cp nn\r |
b0b4005c | 2777 | dw l1d09h\r |
9a7481b8 | 2778 | db 0ffh,010h,o_DJNZ ;djnz\r |
08d0db09 | 2779 | dw p_arg_jrel\r |
9a7481b8 | 2780 | db 0ffh,018h,o_JR ;jr\r |
08d0db09 | 2781 | dw p_arg_jrel\r |
9a7481b8 | 2782 | db 0e7h,020h,o_JR ;jr cc,\r |
08d0db09 | 2783 | dw p_arg_cc_jrel\r |
9a7481b8 | 2784 | db 0ffh,0d3h,o_OUT ;out (nn),a\r |
b0b4005c | 2785 | dw l1d37h\r |
9a7481b8 | 2786 | db 0ffh,0dbh,o_IN ;in a,(nn)\r |
b0b4005c L |
2787 | dw l1d29h\r |
2788 | db 0\r | |
0c4244e5 | 2789 | \r |
cab0d80a | 2790 | ; 3 byte opcodes\r |
0c4244e5 | 2791 | b_1b9b_start:\r |
9a7481b8 | 2792 | db 0c7h,0c2h,o_JP ;jp cc,mn\r |
25a690e5 | 2793 | dw p_arg_cc_mn\r |
9a7481b8 | 2794 | db 0c7h,0c4h,o_CALL ;call cc,mn\r |
25a690e5 | 2795 | dw p_arg_cc_mn\r |
9a7481b8 | 2796 | db 0cfh,001h,o_LD ;ld ww,mn\r |
25a690e5 | 2797 | dw p_arg_ww_mn\r |
9a7481b8 | 2798 | db 0ffh,0c3h,o_JP ;jp mn\r |
25a690e5 | 2799 | dw p_arg_mn\r |
9a7481b8 | 2800 | db 0ffh,0cdh,o_CALL ;call mn\r |
25a690e5 | 2801 | dw p_arg_mn\r |
9a7481b8 | 2802 | db 0ffh,022h,o_LD ;ld (mn),hl\r |
25a690e5 | 2803 | dw p_arg_addr_hl\r |
9a7481b8 | 2804 | db 0ffh,02ah,o_LD ;ld hl,(mn)\r |
25a690e5 | 2805 | dw p_arg_hl_addr\r |
9a7481b8 | 2806 | db 0ffh,032h,o_LD ;ld (mn),a\r |
25a690e5 | 2807 | dw p_arg_addr_a\r |
9a7481b8 | 2808 | db 0ffh,03ah,o_LD ;ld a,(mn)\r |
25a690e5 | 2809 | dw p_arg_a_addr\r |
b0b4005c L |
2810 | db 0\r |
2811 | \r | |
2812 | ; Prefix ED + 1 byte opcode, no arguments\r | |
2813 | ; Format: opcode, t_MNEMONICS index\r | |
0c4244e5 | 2814 | b_1bc9_start:\r |
9a7481b8 L |
2815 | db 044h,o_NEG ;neg\r |
2816 | db 045h,o_RETN ;retn\r | |
2817 | db 04dh,o_RETI ;reti\r | |
2818 | db 067h,o_RRD ;rrd\r | |
2819 | db 06fh,o_RLD ;rld\r | |
2820 | db 0a0h,o_LDI ;ldi\r | |
2821 | db 0a1h,o_CPI ;cpi\r | |
2822 | db 0a2h,o_INI ;ini\r | |
2823 | db 0a3h,o_OUTI ;outi\r | |
2824 | db 0a8h,o_LDD ;ldd\r | |
2825 | db 0a9h,o_CPD ;cpd\r | |
2826 | db 0aah,o_IND ;ind\r | |
2827 | db 0abh,o_OUTD ;outd\r | |
2828 | db 0b0h,o_LDIR ;ldir\r | |
2829 | db 0b1h,o_CPIR ;cpir\r | |
2830 | db 0b2h,o_INIR ;inir\r | |
2831 | db 0b3h,o_OTIR ;otir\r | |
2832 | db 0b8h,o_LDDR ;lddr\r | |
2833 | db 0b9h,o_CPDR ;cpdr\r | |
2834 | db 0bah,o_INDR ;indr\r | |
2835 | db 0bbh,o_OTDR ;otdr\r | |
2836 | db 08bh,o_OTDM ;otdm\r | |
2837 | db 09bh,o_OTDMR ;otdmr\r | |
b270cd3a L |
2838 | db 083h,o_OTIM ;otim\r |
2839 | db 093h,o_OTIMR ;otimr\r | |
9a7481b8 | 2840 | db 076h,o_SLP ;slp\r |
b0b4005c | 2841 | db 0ffh ;<end mark>\r |
0c4244e5 L |
2842 | \r |
2843 | b_1bf4_start:\r | |
25ba7c19 | 2844 | db 0ffh,070h,0ffh ;in (c) ;\r |
25a690e5 | 2845 | dw p_arg_in_c ;\r |
25ba7c19 | 2846 | db 0c7h,040h,o_IN ;in r,(c) ;r=b,c,d,e,h,l,a\r |
25a690e5 | 2847 | dw p_arg_in_c ;\r |
25ba7c19 | 2848 | db 0ffh,071h,0ffh ;out (c),0 ;\r |
25a690e5 | 2849 | dw p_arg_out_c ;\r |
25ba7c19 | 2850 | db 0c7h,041h,o_OUT ;out (c),r ;r=b,c,d,e,h,l,a\r |
25a690e5 | 2851 | dw p_arg_out_c ;\r |
9a7481b8 | 2852 | db 0cfh,042h,o_SBC ;sbc hl,rr\r |
b0b4005c | 2853 | dw l1dcah ;\r |
9a7481b8 | 2854 | db 0cfh,04ah,o_ADC ;adc hl,rr\r |
b0b4005c | 2855 | dw l1dcah ;\r |
9a7481b8 | 2856 | db 0ffh,046h,o_IM ;im 0\r |
b0b4005c | 2857 | dw l1d85h ;\r |
9a7481b8 | 2858 | db 0ffh,056h,o_IM ;im 1\r |
b0b4005c | 2859 | dw l1d89h ;\r |
9a7481b8 | 2860 | db 0ffh,05eh,o_IM ;im 2\r |
b0b4005c | 2861 | dw l1d8dh ;\r |
9a7481b8 | 2862 | db 0e7h,047h,o_LD ;ld i,a ... ld a,r\r |
e611c31d | 2863 | dw p_arg_IR ;\r |
9a7481b8 | 2864 | db 0cfh,04ch,o_MLT ;mlt rr\r |
514bb0fd | 2865 | dw p_rp\r |
9a7481b8 | 2866 | db 0c7h,004h,o_TST ;tst r\r |
514bb0fd | 2867 | dw p_ry\r |
b0b4005c L |
2868 | db 0\r |
2869 | \r | |
2870 | l228bh:\r | |
25ba7c19 | 2871 | db 0ffh,030h,0ffh ;in0 (m)\r |
25a690e5 | 2872 | dw p_arg_r_m\r |
b270cd3a | 2873 | db 0c7h,000h,o_IN0 ;in0 r,(m) ;r=b,c,d,e,h,l,a\r |
25a690e5 | 2874 | dw p_arg_r_m\r |
25ba7c19 | 2875 | db 0ffh,031h,0ffh ;out0 (m),0\r |
25a690e5 | 2876 | dw p_arg_m_r\r |
b270cd3a | 2877 | db 0c7h,001h,o_OUT0 ;out0 (m),r ;r=b,c,d,e\r |
25a690e5 | 2878 | dw p_arg_m_r\r |
9a7481b8 | 2879 | db 0ffh,064h,o_TST ;tst m\r |
b0b4005c | 2880 | dw l1d09h\r |
9a7481b8 | 2881 | db 0ffh,074h,o_TSTIO ;tstio m\r |
b0b4005c L |
2882 | dw l1d09h\r |
2883 | db 0\r | |
0c4244e5 | 2884 | \r |
78c98259 L |
2885 | ; Prefix ED + 1 byte opcode + 2 byte address\r |
2886 | ; Format: db mask, match, t_MNEMONICS-index\r | |
2887 | ; dw argument formating function\r | |
0c4244e5 | 2888 | b_1c40_start:\r |
78c98259 | 2889 | db 0cfh,043h,o_LD ;ld (mn),ww ;ww=bc,de,hl,sp\r |
25a690e5 | 2890 | dw p_arg_addr_ww\r |
78c98259 | 2891 | db 0cfh,04bh,o_LD ;ld ww,(mn) ;ww=bc,de,hl,sp\r |
25a690e5 | 2892 | dw p_arg_ww_addr\r |
b0b4005c L |
2893 | db 0\r |
2894 | \r | |
2895 | ; CB\r | |
0c4244e5 | 2896 | b_1c55_start:\r |
9a7481b8 | 2897 | db 0f8h,000h,o_RLC ;rlc g\r |
514bb0fd | 2898 | dw p_rz_cb\r |
9a7481b8 | 2899 | db 0f8h,008h,o_RRC ;rrc g\r |
514bb0fd | 2900 | dw p_rz_cb\r |
9a7481b8 | 2901 | db 0f8h,010h,o_RL ;rl g\r |
514bb0fd | 2902 | dw p_rz_cb\r |
9a7481b8 | 2903 | db 0f8h,018h,o_RR ;rr g\r |
514bb0fd | 2904 | dw p_rz_cb\r |
9a7481b8 | 2905 | db 0f8h,020h,o_SLA ;sla g\r |
514bb0fd | 2906 | dw p_rz_cb\r |
9a7481b8 | 2907 | db 0f8h,028h,o_SRA ;sra g\r |
514bb0fd | 2908 | dw p_rz_cb\r |
9a7481b8 | 2909 | db 0f8h,038h,o_SRL ;srl g\r |
514bb0fd | 2910 | dw p_rz_cb\r |
9a7481b8 | 2911 | db 0c0h,040h,o_BIT ;bit b,g\r |
25a690e5 | 2912 | dw p_arg_bitop\r |
9a7481b8 | 2913 | db 0c0h,080h,o_RES ;res b,g\r |
25a690e5 | 2914 | dw p_arg_bitop\r |
9a7481b8 | 2915 | db 0c0h,0c0h,o_SET ;set b,g\r |
25a690e5 | 2916 | dw p_arg_bitop\r |
b0b4005c | 2917 | db 0\r |
0c4244e5 | 2918 | \r |
9711a430 L |
2919 | ;-------------------------------------------------------------------------------\r |
2920 | \r | |
b270cd3a | 2921 | p_arg_ry_rz:\r |
514bb0fd | 2922 | call p_ry\r |
0716e834 | 2923 | call p_char_comma\r |
514bb0fd | 2924 | jp p_rz\r |
25a690e5 | 2925 | p_arg_a_r:\r |
0716e834 | 2926 | call p_A_comma\r |
514bb0fd | 2927 | jp p_rz\r |
b0b4005c | 2928 | \r |
25a690e5 | 2929 | p_arg_r_m:\r |
514bb0fd | 2930 | call p_ry\r |
25a690e5 | 2931 | call p_char_comma\r |
b0b4005c | 2932 | jp sub_1d2ch\r |
25a690e5 L |
2933 | \r |
2934 | p_arg_m_r:\r | |
b0b4005c | 2935 | call sub_1d2ch\r |
25a690e5 | 2936 | call p_char_comma\r |
514bb0fd | 2937 | jp p_ry\r |
b0b4005c | 2938 | \r |
e611c31d | 2939 | p_arg_rst:\r |
0716e834 L |
2940 | ld a,(iy+000h)\r |
2941 | and 038h\r | |
2942 | jp out_hex\r | |
25a690e5 | 2943 | \r |
0c4244e5 | 2944 | l1ca0h:\r |
0716e834 | 2945 | call pstr_inl\r |
0c4244e5 | 2946 | DC '(SP),'\r |
0716e834 | 2947 | jp p_arg_hlixiy\r |
25a690e5 | 2948 | \r |
0c4244e5 | 2949 | l1caeh:\r |
0716e834 L |
2950 | call p_char_lparen\r |
2951 | call p_arg_hlixiy\r | |
25a690e5 L |
2952 | jr out_rparen\r |
2953 | \r | |
2954 | p_arg_ex_dehl:\r | |
a942c6d5 L |
2955 | call pstr_inl\r |
2956 | DC 'DE,HL'\r | |
e611c31d | 2957 | p_arg_none:\r |
a942c6d5 | 2958 | ret\r |
25a690e5 | 2959 | \r |
0c4244e5 | 2960 | l1cc1h:\r |
d1f2492e | 2961 | call pstr_inl\r |
0c4244e5 | 2962 | DC 'SP,'\r |
d1f2492e | 2963 | jp p_arg_hlixiy\r |
25a690e5 L |
2964 | \r |
2965 | p_arg_ex_afaf:\r | |
a942c6d5 L |
2966 | call pstr_inl\r |
2967 | DC 'AF,AF'''\r | |
2968 | ret\r | |
25a690e5 | 2969 | \r |
0c4244e5 | 2970 | l1cd3h:\r |
0716e834 L |
2971 | call p_arg_hlixiy\r |
2972 | call p_char_comma\r | |
514bb0fd | 2973 | jp p_rp\r |
0c4244e5 | 2974 | l1cdch:\r |
0716e834 L |
2975 | call sub_1ce8h\r |
2976 | call p_char_comma\r | |
2977 | jp p_char_A\r | |
0c4244e5 L |
2978 | \r |
2979 | l1ce5h:\r | |
0716e834 | 2980 | call p_A_comma\r |
0c4244e5 | 2981 | sub_1ce8h:\r |
0716e834 | 2982 | call p_char_lparen\r |
514bb0fd | 2983 | call p_rp\r |
836f48ab | 2984 | jr out_rparen\r |
25a690e5 | 2985 | \r |
0c4244e5 | 2986 | l1cf5h:\r |
0716e834 L |
2987 | call p_A_comma\r |
2988 | jr l1d09h\r | |
0c4244e5 | 2989 | l1cfah:\r |
514bb0fd | 2990 | call p_ry\r |
0716e834 L |
2991 | call p_char_comma\r |
2992 | ld a,(isprefix_ixiy)\r | |
2993 | and a\r | |
2994 | ld a,(iy+002h)\r | |
2995 | jr nz,l1d0ch\r | |
0c4244e5 | 2996 | l1d09h:\r |
0716e834 | 2997 | ld a,(iy+001h)\r |
0c4244e5 | 2998 | l1d0ch:\r |
0716e834 | 2999 | jp out_hex\r |
b0b4005c | 3000 | \r |
08d0db09 | 3001 | p_arg_cc_jrel:\r |
0716e834 L |
3002 | ld a,(iy+000h)\r |
3003 | and 018h\r | |
3004 | call p_arg_cc0\r | |
3005 | call p_char_comma\r | |
08d0db09 | 3006 | p_arg_jrel:\r |
0716e834 L |
3007 | ld c,(iy+001h)\r |
3008 | ld a,c\r | |
3009 | rla\r | |
3010 | sbc a,a\r | |
3011 | ld b,a\r | |
3012 | push iy\r | |
3013 | pop hl\r | |
3014 | add hl,bc\r | |
3015 | inc hl\r | |
3016 | inc hl\r | |
3017 | jr l1d4eh\r | |
08d0db09 | 3018 | \r |
0c4244e5 | 3019 | l1d29h:\r |
0716e834 | 3020 | call p_A_comma\r |
0c4244e5 | 3021 | sub_1d2ch:\r |
0716e834 L |
3022 | call p_char_lparen\r |
3023 | ld a,(iy+001h)\r | |
836f48ab L |
3024 | p_arg_nn_rp:\r |
3025 | call out_hex\r | |
3026 | out_rparen:\r | |
3027 | jr p_char_rparen\r | |
3028 | \r | |
0c4244e5 | 3029 | l1d37h:\r |
0716e834 | 3030 | call sub_1d2ch\r |
25a690e5 L |
3031 | jr p_char_comma_A\r |
3032 | \r | |
3033 | p_arg_cc_mn:\r | |
0716e834 L |
3034 | call p_arg_cc\r |
3035 | call p_char_comma\r | |
25a690e5 | 3036 | p_arg_mn:\r |
0716e834 L |
3037 | ld l,(iy+001h)\r |
3038 | ld h,(iy+002h)\r | |
0c4244e5 | 3039 | l1d4eh:\r |
85b57f2a L |
3040 | jp out_hl\r |
3041 | \r | |
25a690e5 | 3042 | p_arg_ww_mn:\r |
514bb0fd | 3043 | call p_rp\r |
0716e834 L |
3044 | call p_char_comma\r |
3045 | jr p_arg_mn\r | |
25a690e5 L |
3046 | \r |
3047 | p_arg_addr_hl:\r | |
08d0db09 | 3048 | call p_arg_addr\r |
0716e834 L |
3049 | call p_char_comma\r |
3050 | jp p_arg_hlixiy\r | |
85b57f2a | 3051 | \r |
25a690e5 | 3052 | p_arg_hl_addr:\r |
0716e834 L |
3053 | call p_arg_hlixiy\r |
3054 | call p_char_comma\r | |
08d0db09 | 3055 | jp p_arg_addr\r |
25a690e5 L |
3056 | \r |
3057 | p_arg_addr_a:\r | |
08d0db09 | 3058 | call p_arg_addr\r |
25a690e5 | 3059 | p_char_comma_A:\r |
0716e834 | 3060 | call p_char_comma\r |
836f48ab L |
3061 | jr p_char_A\r |
3062 | \r | |
3063 | p_A_comma:\r | |
3064 | call p_char_A\r | |
3065 | p_char_comma:\r | |
3066 | ld a,','\r | |
3067 | db 021h\r | |
25a690e5 | 3068 | p_char_A:\r |
0716e834 | 3069 | ld a,'A'\r |
836f48ab | 3070 | db 021h\r |
0c4244e5 | 3071 | l1d85h:\r |
0716e834 | 3072 | ld a,'0'\r |
836f48ab | 3073 | db 021h\r |
0c4244e5 | 3074 | l1d89h:\r |
0716e834 | 3075 | ld a,'1'\r |
836f48ab | 3076 | db 021h\r |
0c4244e5 | 3077 | l1d8dh:\r |
0716e834 | 3078 | ld a,'2'\r |
836f48ab L |
3079 | db 021h\r |
3080 | p_char_rparen:\r | |
3081 | ld a,')'\r | |
3082 | db 021h\r | |
3083 | p_char_lparen:\r | |
3084 | ld a,'('\r | |
0716e834 | 3085 | jp outchar\r |
25a690e5 | 3086 | \r |
e611c31d L |
3087 | p_arg_IR:\r |
3088 | ld a,(iy+000h)\r | |
3089 | rra\r | |
3090 | rra\r | |
3091 | rra\r | |
3092 | and 03\r | |
3093 | ld hl,t_arg_IR\r | |
3094 | jp p_arg\r | |
0c4244e5 | 3095 | \r |
e611c31d | 3096 | t_arg_IR:\r |
0c4244e5 | 3097 | DC 'I,A'\r |
0c4244e5 | 3098 | DC 'R,A'\r |
e611c31d | 3099 | DC 'A,I'\r |
0c4244e5 | 3100 | DC 'A,R'\r |
e611c31d | 3101 | db 0\r |
0c4244e5 | 3102 | \r |
25a690e5 | 3103 | p_arg_in_c:\r |
514bb0fd | 3104 | call p_ry\r |
0716e834 L |
3105 | call p_char_comma\r |
3106 | ld hl,t__C_\r | |
3107 | jp pstr\r | |
25a690e5 L |
3108 | \r |
3109 | p_arg_out_c:\r | |
0716e834 L |
3110 | ld hl,t__C_\r |
3111 | call pstr\r | |
3112 | call p_char_comma\r | |
514bb0fd | 3113 | jr p_ry\r |
25a690e5 | 3114 | \r |
0c4244e5 | 3115 | l1dcah:\r |
0716e834 L |
3116 | call p_arg_hlixiy\r |
3117 | call p_char_comma\r | |
514bb0fd | 3118 | jp p_rp\r |
25a690e5 L |
3119 | \r |
3120 | p_arg_addr_ww:\r | |
08d0db09 | 3121 | call p_arg_addr\r |
0716e834 | 3122 | call p_char_comma\r |
514bb0fd | 3123 | jp p_rp\r |
25a690e5 L |
3124 | \r |
3125 | p_arg_ww_addr:\r | |
514bb0fd | 3126 | call p_rp\r |
0716e834 | 3127 | call p_char_comma\r |
e128c8d9 | 3128 | jr p_arg_addr\r |
836f48ab L |
3129 | \r |
3130 | p_arg_a_addr:\r | |
3131 | call p_A_comma\r | |
3132 | p_arg_addr:\r | |
3133 | call p_char_lparen\r | |
3134 | ld l,(iy+001h)\r | |
3135 | ld h,(iy+002h)\r | |
836f48ab | 3136 | jr p_char_rparen\r |
25a690e5 L |
3137 | \r |
3138 | p_arg_bitop:\r | |
0716e834 L |
3139 | ld a,(isprefix_ixiy)\r |
3140 | and a\r | |
3141 | jr nz,l1defh\r | |
3142 | ld a,(iy+001h)\r | |
3143 | jr l1df2h\r | |
0c4244e5 | 3144 | l1defh:\r |
0716e834 | 3145 | ld a,(iy+002h)\r |
0c4244e5 | 3146 | l1df2h:\r |
0716e834 L |
3147 | push af\r |
3148 | rra\r | |
3149 | rra\r | |
3150 | rra\r | |
3151 | and 007h\r | |
3152 | add a,'0'\r | |
3153 | call outchar\r | |
3154 | call p_char_comma\r | |
3155 | pop af\r | |
514bb0fd | 3156 | jr p_r0\r |
25a690e5 | 3157 | \r |
514bb0fd | 3158 | p_rz_cb:\r |
0716e834 L |
3159 | ld a,(isprefix_ixiy)\r |
3160 | and a\r | |
3161 | jr nz,l1e0eh\r | |
3162 | ld a,(iy+001h)\r | |
3163 | jr l1e11h\r | |
0c4244e5 | 3164 | l1e0eh:\r |
0716e834 | 3165 | ld a,(iy+002h)\r |
0c4244e5 | 3166 | l1e11h:\r |
514bb0fd | 3167 | jr p_r0\r |
25a690e5 | 3168 | \r |
514bb0fd | 3169 | p_ry:\r |
0716e834 L |
3170 | ld a,(iy+000h)\r |
3171 | rra\r | |
3172 | rra\r | |
3173 | rra\r | |
514bb0fd L |
3174 | jr p_r0\r |
3175 | p_rz:\r | |
0716e834 | 3176 | ld a,(iy+000h)\r |
514bb0fd | 3177 | p_r0:\r |
0716e834 L |
3178 | and 007h\r |
3179 | cp 006h\r | |
a942c6d5 | 3180 | ld b,a\r |
514bb0fd | 3181 | ld hl,t_arg_r\r |
a942c6d5 | 3182 | jr nz,p_arg0\r |
0716e834 L |
3183 | ld a,(isprefix_ixiy)\r |
3184 | and a\r | |
a942c6d5 L |
3185 | jr z,p_arg0\r |
3186 | ld hl,t_lp_IXIY\r | |
0716e834 | 3187 | dec a\r |
a942c6d5 | 3188 | call p_arg\r |
0716e834 | 3189 | ld a,(iy+001h)\r |
836f48ab L |
3190 | push af\r |
3191 | rlca\r | |
3192 | ld a,'+'\r | |
3193 | jr nc,l1e61h\r | |
3194 | pop af\r | |
0716e834 | 3195 | neg\r |
836f48ab L |
3196 | push af\r |
3197 | ld a,'-'\r | |
3198 | l1e61h:\r | |
3199 | call outchar\r | |
3200 | pop af\r | |
3201 | jp p_arg_nn_rp\r | |
646e8b05 | 3202 | \r |
a942c6d5 | 3203 | t_lp_IXIY:\r |
0c4244e5 | 3204 | DC '(IX'\r |
0c4244e5 | 3205 | DC '(IY'\r |
646e8b05 | 3206 | \r |
25a690e5 | 3207 | p_arg_hlixiy:\r |
0716e834 L |
3208 | ld a,(isprefix_ixiy)\r |
3209 | ld hl,t_HL.IX.IY\r | |
3210 | jr p_arg\r | |
7c2469ef | 3211 | \r |
514bb0fd | 3212 | p_rp2:\r |
25a690e5 | 3213 | p_arg_zz:\r |
514bb0fd | 3214 | ld hl,t_arg_rp2\r |
0716e834 | 3215 | jr l1e8eh\r |
514bb0fd | 3216 | p_rp:\r |
25a690e5 | 3217 | p_arg_ww:\r |
514bb0fd | 3218 | ld hl,t_arg_rp\r |
0c4244e5 | 3219 | l1e8eh:\r |
0716e834 L |
3220 | ld a,(iy+000h)\r |
3221 | rra\r | |
3222 | rra\r | |
3223 | rra\r | |
3224 | rra\r | |
3225 | and 003h\r | |
3226 | cp 002h\r | |
3227 | jr z,p_arg_hlixiy\r | |
3228 | jr p_arg\r | |
646e8b05 | 3229 | \r |
514bb0fd | 3230 | p_cc:\r |
25a690e5 | 3231 | p_arg_cc:\r |
0716e834 | 3232 | ld a,(iy+000h)\r |
25a690e5 | 3233 | p_arg_cc0:\r |
0716e834 L |
3234 | rra\r |
3235 | rra\r | |
3236 | rra\r | |
3237 | and 007h\r | |
514bb0fd | 3238 | ld hl,t_arg_cc\r |
25a690e5 | 3239 | p_arg:\r |
0716e834 | 3240 | ld b,a\r |
a942c6d5 L |
3241 | p_arg0:\r |
3242 | jp pstr_sel\r | |
0c4244e5 | 3243 | \r |
514bb0fd L |
3244 | ;-------------------------------------------------------------------------------\r |
3245 | \r | |
7c2469ef L |
3246 | if 0\r |
3247 | p_bli:\r | |
3248 | ld a,(iy+000h)\r | |
3249 | rra\r | |
3250 | and 00ch\r | |
3251 | ld b,a\r | |
3252 | ld a,(iy+000h)\r | |
3253 | and 003h\r | |
3254 | or b\r | |
3255 | ld hl,t_mn_bli\r | |
3256 | jr p_arg\r | |
3257 | endif\r | |
3258 | \r | |
9711a430 L |
3259 | ;-------------------------------------------------------------------------------\r |
3260 | \r | |
3b18d7ae | 3261 | opc macro x\r |
a370992b | 3262 | \r |
3b18d7ae | 3263 | i_&x equ opc_index\r |
a370992b | 3264 | o_&x equ $-opc_tabstart\r |
3b18d7ae L |
3265 | dc '&x'\r |
3266 | opc_index defl opc_index+1\r | |
a370992b L |
3267 | endm\r |
3268 | \r | |
3269 | opc1 macro x,y\r | |
3270 | \r | |
3271 | i_&x&y equ opc_index\r | |
3272 | o_&x&y equ $-opc_tabstart\r | |
3273 | db '&x'\r | |
3274 | i_&y equ opc_index+1\r | |
3275 | o_&y equ $-opc_tabstart\r | |
3276 | dc '&y'\r | |
3277 | opc_index defl opc_index+2\r | |
3b18d7ae L |
3278 | endm\r |
3279 | \r | |
3280 | \r | |
0c4244e5 | 3281 | t_MNEMONICS:\r |
a370992b L |
3282 | opc_tabstart defl $\r |
3283 | opc_index defl 0\r | |
7c2469ef L |
3284 | ; 1-byte other\r |
3285 | opc NOP\r | |
a370992b | 3286 | opc1 R,LD\r |
7c2469ef | 3287 | opc INC\r |
3b18d7ae | 3288 | opc DEC\r |
3b18d7ae | 3289 | opc DJNZ\r |
3b18d7ae | 3290 | opc JR\r |
7c2469ef L |
3291 | opc HALT\r |
3292 | \r | |
3293 | opc RLCA\r | |
3294 | opc RRCA\r | |
3295 | opc RLA\r | |
3296 | opc RRA\r | |
3297 | opc DAA\r | |
3298 | opc CPL\r | |
3299 | opc SCF\r | |
3300 | opc CCF\r | |
3301 | \r | |
3302 | ; 1-byte "alu"\r | |
3303 | opc ADD\r | |
3304 | opc ADC\r | |
3305 | opc SUB\r | |
3306 | opc SBC\r | |
3307 | opc AND\r | |
a370992b L |
3308 | ; opc XOR\r |
3309 | opc1 X,OR\r | |
7c2469ef L |
3310 | opc CP\r |
3311 | \r | |
3312 | opc RET\r | |
3b18d7ae | 3313 | opc POP\r |
7c2469ef L |
3314 | opc JP\r |
3315 | opc CALL\r | |
3b18d7ae | 3316 | opc PUSH\r |
7c2469ef L |
3317 | opc RST\r |
3318 | opc OUT\r | |
3319 | opc EXX\r | |
3320 | opc IN\r | |
3321 | opc EX\r | |
a370992b | 3322 | opc1 L,DI\r |
7c2469ef L |
3323 | opc EI\r |
3324 | ; CB\r | |
3b18d7ae | 3325 | opc RLC\r |
3b18d7ae | 3326 | opc RRC\r |
a370992b | 3327 | opc1 S,RL\r |
7c2469ef | 3328 | opc RR\r |
3b18d7ae L |
3329 | opc SLA\r |
3330 | opc SRA\r | |
7c2469ef | 3331 | ; SLL\r |
a370992b | 3332 | ; opc SRL\r |
7c2469ef L |
3333 | opc BIT\r |
3334 | opc RES\r | |
3335 | opc SET\r | |
3336 | \r | |
3337 | ; ED\r | |
3338 | opc NEG\r | |
3339 | opc RETN\r | |
3340 | opc RETI\r | |
a370992b | 3341 | opc1 OT,IM\r |
7c2469ef | 3342 | opc RRD\r |
a370992b | 3343 | ; opc RLD\r |
7c2469ef L |
3344 | \r |
3345 | ;Block instructions\r | |
3346 | t_mn_bli:\r | |
a370992b | 3347 | ; opc LDI\r |
7c2469ef L |
3348 | opc CPI\r |
3349 | opc INI\r | |
3350 | opc OUTI\r | |
3351 | opc LDD\r | |
3352 | opc CPD\r | |
3353 | opc IND\r | |
3354 | opc OUTD\r | |
3355 | opc LDIR\r | |
3356 | opc CPIR\r | |
3357 | opc INIR\r | |
3358 | opc OTIR\r | |
3359 | opc LDDR\r | |
3360 | opc CPDR\r | |
3361 | opc INDR\r | |
3362 | opc OTDR\r | |
3363 | \r | |
3364 | ;Z180\r | |
3b18d7ae | 3365 | opc IN0\r |
3b18d7ae | 3366 | opc OUT0\r |
3b18d7ae | 3367 | opc TST\r |
7c2469ef | 3368 | opc MLT\r |
3b18d7ae | 3369 | opc TSTIO\r |
7c2469ef | 3370 | opc SLP\r |
a370992b | 3371 | ; opc OTIM\r |
7c2469ef L |
3372 | opc OTDM\r |
3373 | opc OTIMR\r | |
3374 | opc OTDMR\r | |
3375 | \r | |
0c4244e5 L |
3376 | DB 0\r |
3377 | \r | |
514bb0fd | 3378 | t_arg_r:\r |
0c4244e5 L |
3379 | DC 'B'\r |
3380 | DC 'C'\r | |
3381 | DC 'D'\r | |
3382 | DC 'E'\r | |
3383 | DC 'H'\r | |
3384 | DC 'L'\r | |
3385 | DC '(HL)'\r | |
3386 | DC 'A'\r | |
3387 | DB 0\r | |
514bb0fd | 3388 | t_arg_rp:\r |
0c4244e5 L |
3389 | DC 'BC'\r |
3390 | DC 'DE'\r | |
3391 | DC 'HL'\r | |
3392 | DC 'SP'\r | |
3393 | DB 0\r | |
514bb0fd | 3394 | t_arg_rp2:\r |
0c4244e5 L |
3395 | DC 'BC'\r |
3396 | DC 'DE'\r | |
0c4244e5 L |
3397 | DC 'HL'\r |
3398 | DC 'AF'\r | |
3399 | DB 0\r | |
0c4244e5 L |
3400 | t_HL.IX.IY:\r |
3401 | DC 'HL'\r | |
0c4244e5 L |
3402 | DC 'IX'\r |
3403 | DC 'IY'\r | |
3404 | DB 0\r | |
514bb0fd | 3405 | t_arg_cc:\r |
0c4244e5 L |
3406 | DC 'NZ'\r |
3407 | DC 'Z'\r | |
3408 | DC 'NC'\r | |
3409 | DC 'C'\r | |
3410 | DC 'PO'\r | |
3411 | DC 'PE'\r | |
3412 | DC 'P'\r | |
3413 | DC 'M'\r | |
0c4244e5 L |
3414 | DB 0\r |
3415 | t__C_:\r | |
3416 | DC '(C)'\r | |
3417 | DB 0\r | |
3418 | \r | |
9711a430 | 3419 | ;-------------------------------------------------------------------------------\r |
8320b8eb L |
3420 | ;-------------------------------------------------------------------------------\r |
3421 | if 0\r | |
3422 | \r | |
3423 | lookup_argstr:\r | |
3424 | ;todo\r | |
3425 | ret\r | |
3426 | \r | |
3427 | \r | |
3428 | pr_instr_args:\r | |
3429 | ld hl,t_argf\r | |
3430 | call lookup_argstr\r | |
3431 | \r | |
3432 | ret z\r | |
3433 | \r | |
3434 | pria_l:\r | |
3435 | ld a,(hl) ;get next token\r | |
3436 | inc hl\r | |
3437 | or a\r | |
3438 | ret z ;\r | |
3439 | jp m,pria_1\r | |
3440 | call outchar ;print as normal character\r | |
3441 | jr pria_l\r | |
3442 | \r | |
3443 | pria_1: ;\r | |
3444 | push hl\r | |
3445 | ld hl,do_arg_n\r | |
3446 | and 07fh\r | |
6bc52899 | 3447 | call add_hl_a2\r |
8320b8eb L |
3448 | ld a,(hl)\r |
3449 | inc hl\r | |
3450 | ld h,(hl)\r | |
3451 | ld l,a\r | |
3452 | call CALL_HL\r | |
3453 | pop hl\r | |
3454 | jr pria_l\r | |
3455 | \r | |
514bb0fd L |
3456 | ;\r |
3457 | ; http://www.z80.info/decoding.htm\r | |
8320b8eb L |
3458 | ;\r |
3459 | ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |\r | |
3460 | ; | x | y | z |\r | |
3461 | ; | p | q |\r | |
3462 | ;\r | |
3463 | \r | |
3464 | t_argf:\r | |
3465 | db fi_ry,',',fi_rz,0 ;ld r[y],r[z]\r | |
3466 | db 'A,',fi_rz,0 ;op A,r[z]\r | |
3467 | db fi_ry,',(',fi_m8,')',0 ;in a,(m8)\r | |
3468 | db '(',fi_m8,'),',fi_ry,0 ;out (m8),a\r | |
3469 | db fi_rst,0\r | |
3470 | db '(SP),',fi_hlixiy,0 ;\r | |
3471 | db 'DE,HL',0\r | |
3472 | db 'AF,AF''',0\r | |
3473 | db fi_hlixiy,0\r | |
514bb0fd L |
3474 | db fi_rp ;rp[p]\r |
3475 | db fi_rp2 ;rp2[p]\r | |
8320b8eb L |
3476 | \r |
3477 | ;-------------------------------------------------------------------------------\r | |
3478 | \r | |
3479 | argpf_index defl 0\r | |
3480 | \r | |
3481 | argpf macro x\r | |
3482 | fi_&x equ 80h+argpf_index\r | |
3483 | dw p_&x\r | |
3484 | argpf_index defl argpf_index+1\r | |
3485 | endm\r | |
3486 | \r | |
3487 | do_arg_n:\r | |
3488 | argpf ry\r | |
3489 | argpf rz\r | |
3490 | argpf m8\r | |
3491 | argpf rst\r | |
3492 | argpf hlixiy\r | |
514bb0fd L |
3493 | argpf rp\r |
3494 | argpf rp2\r | |
8320b8eb L |
3495 | \r |
3496 | p_ry:\r | |
3497 | p_rz:\r | |
3498 | p_m8:\r | |
3499 | p_rst:\r | |
3500 | p_hlixiy:\r | |
514bb0fd L |
3501 | p_rp:\r |
3502 | p_rp2:\r | |
3503 | \r | |
8320b8eb | 3504 | \r |
8320b8eb L |
3505 | endif\r |
3506 | ;-------------------------------------------------------------------------------\r | |
3507 | ;-------------------------------------------------------------------------------\r | |
9711a430 | 3508 | \r |
4a39ae18 | 3509 | tc_set_bp:\r |
ac35765e | 3510 | ld hl,(reg.pc)\r |
0716e834 L |
3511 | ld a,h\r |
3512 | or l\r | |
3513 | jr z,l2037h\r | |
3514 | ld de,BDOS\r | |
3515 | and a\r | |
3516 | sbc hl,de\r | |
d2df51e3 | 3517 | ld hl,l20edh ;set break after BDOS call\r |
0716e834 | 3518 | jr z,l2031h\r |
ac35765e | 3519 | ld iy,(reg.pc)\r |
0716e834 L |
3520 | call disas_get_instrlen\r |
3521 | jp nc,ERROR\r | |
3522 | ld c,b\r | |
85b57f2a | 3523 | ld b,0\r |
ac35765e | 3524 | ld hl,(reg.pc)\r |
0716e834 | 3525 | add hl,bc\r |
4bb547a7 | 3526 | call bp_trace_enter\r |
ac35765e | 3527 | ld iy,(reg.pc)\r |
e611c31d | 3528 | ld hl,t_op_branch\r |
100f8242 | 3529 | call lookup_op_arg\r |
0716e834 L |
3530 | ccf\r |
3531 | ret c\r | |
3532 | ex de,hl\r | |
0c4244e5 | 3533 | l2031h:\r |
0716e834 | 3534 | call CALL_HL\r |
4bb547a7 | 3535 | call c,bp_trace_enter\r |
0c4244e5 | 3536 | l2037h:\r |
0716e834 L |
3537 | scf\r |
3538 | ret\r | |
0c4244e5 | 3539 | \r |
9711a430 L |
3540 | ;-------------------------------------------------------------------------------\r |
3541 | \r | |
e611c31d | 3542 | t_op_branch:\r |
9a7481b8 | 3543 | db 0ffh,0ddh,0 ;Prefix DD\r |
b0b4005c | 3544 | dw l20a7h\r |
9a7481b8 | 3545 | db 0ffh,0fdh,0 ;Prefix FD\r |
b0b4005c | 3546 | dw l20ach\r |
9a7481b8 | 3547 | db 0ffh,0edh,0 ;Prefix ED\r |
b0b4005c | 3548 | dw l20b8h\r |
e611c31d | 3549 | t_op_branch0:\r |
9a7481b8 | 3550 | db 0ffh,0cdh,0 ;call mn\r |
b0b4005c | 3551 | dw l2080h\r |
9a7481b8 | 3552 | db 0ffh,0c3h,0 ;jp mn\r |
b0b4005c | 3553 | dw l208bh\r |
9a7481b8 | 3554 | db 0ffh,0e9h,0 ;jp ()\r |
b0b4005c | 3555 | dw l20a2h\r |
9a7481b8 | 3556 | db 0ffh,0c9h,0 ;ret\r |
b0b4005c | 3557 | dw l20dch\r |
9a7481b8 | 3558 | db 0ffh,0cfh,0 ;rst 8\r |
b0b4005c | 3559 | dw l2115h\r |
9a7481b8 | 3560 | db 0c7h,0c7h,0 ;rst n\r |
b0b4005c | 3561 | dw l20f9h\r |
9a7481b8 | 3562 | db 0c7h,0c4h,0 ;call cc,mn\r |
b0b4005c | 3563 | dw l2080h\r |
9a7481b8 | 3564 | db 0f7h,010h,0 ;djnz d; jr d\r |
b0b4005c | 3565 | dw l2093h\r |
9a7481b8 | 3566 | db 0e7h,020h,0 ;jr cc,d\r |
b0b4005c | 3567 | dw l2093h\r |
9a7481b8 | 3568 | db 0c7h,0c2h,0 ;jp cc,mn\r |
b0b4005c | 3569 | dw l208bh\r |
9a7481b8 | 3570 | db 0c7h,0c0h,0 ;ret cc\r |
b0b4005c L |
3571 | dw l20c5h\r |
3572 | db 0\r | |
0c4244e5 | 3573 | \r |
9711a430 | 3574 | ;-------------------------------------------------------------------------------\r |
4a39ae18 | 3575 | ; call mn call cc,mn\r |
0c4244e5 | 3576 | l2080h:\r |
4a39ae18 L |
3577 | \r |
3578 | ; jp mn jp cc,mn\r | |
0c4244e5 | 3579 | l208bh:\r |
0716e834 L |
3580 | ld l,(iy+001h)\r |
3581 | ld h,(iy+002h)\r | |
3582 | scf\r | |
3583 | ret\r | |
4a39ae18 | 3584 | \r |
0c4244e5 | 3585 | l2093h:\r |
0716e834 L |
3586 | ld c,(iy+001h)\r |
3587 | ld a,c\r | |
3588 | rla\r | |
3589 | sbc a,a\r | |
3590 | ld b,a\r | |
ac35765e | 3591 | ld hl,(reg.pc)\r |
0716e834 L |
3592 | add hl,bc\r |
3593 | inc hl\r | |
3594 | inc hl\r | |
3595 | scf\r | |
3596 | ret\r | |
4a39ae18 L |
3597 | \r |
3598 | ; jp (hl)\r | |
0c4244e5 | 3599 | l20a2h:\r |
0716e834 L |
3600 | ld hl,(reg.l)\r |
3601 | scf\r | |
3602 | ret\r | |
4a39ae18 L |
3603 | \r |
3604 | ; Prefix DD\r | |
0c4244e5 | 3605 | l20a7h:\r |
0716e834 L |
3606 | ld hl,(reg.ix)\r |
3607 | jr l20afh\r | |
4a39ae18 | 3608 | ; Prefix FD\r |
0c4244e5 | 3609 | l20ach:\r |
0716e834 | 3610 | ld hl,(reg.iy)\r |
0c4244e5 | 3611 | l20afh:\r |
0716e834 | 3612 | ld a,(iy+001h)\r |
4a39ae18 | 3613 | cp 0e9h ; jp (ix); jp (iy)\r |
0716e834 L |
3614 | scf\r |
3615 | ret z\r | |
3616 | and a\r | |
3617 | ret\r | |
4a39ae18 L |
3618 | \r |
3619 | ; Prefix ED\r | |
0c4244e5 | 3620 | l20b8h:\r |
0716e834 | 3621 | ld a,(iy+001h)\r |
4a39ae18 | 3622 | cp 04dh ; reti\r |
0716e834 | 3623 | jr z,l20dch\r |
4a39ae18 | 3624 | cp 045h ; retn\r |
0716e834 L |
3625 | jr z,l20dch\r |
3626 | and a\r | |
3627 | ret\r | |
0c4244e5 | 3628 | l20c5h:\r |
0716e834 L |
3629 | ld a,(iy+000h)\r |
3630 | ld (l20d7h),a\r | |
3631 | ld hl,(reg.f)\r | |
3632 | push hl\r | |
3633 | pop af\r | |
3634 | call l20d7h\r | |
3635 | scf\r | |
3636 | jr c,l20dch\r | |
3637 | ret\r | |
0c4244e5 | 3638 | l20d7h:\r |
0716e834 L |
3639 | nop\r |
3640 | and a\r | |
3641 | pop hl\r | |
3642 | inc hl\r | |
3643 | jp (hl)\r | |
0c4244e5 L |
3644 | \r |
3645 | l20dch:\r | |
0c4244e5 | 3646 | l20edh:\r |
d2df51e3 | 3647 | ld hl,(reg_sp) ;break on return address\r |
0716e834 L |
3648 | ld e,(hl)\r |
3649 | inc hl\r | |
3650 | ld d,(hl)\r | |
3651 | ex de,hl\r | |
4bb547a7 | 3652 | call bp_trace_enter\r |
4a39ae18 | 3653 | l2115h:\r |
0716e834 L |
3654 | and a\r |
3655 | ret\r | |
0c4244e5 L |
3656 | \r |
3657 | l20f9h:\r | |
0716e834 L |
3658 | ld a,(l0003h)\r |
3659 | cp (iy+000h)\r | |
3660 | ret z\r | |
3661 | ld a,(iy+000h)\r | |
3662 | and 038h\r | |
3663 | ld l,a\r | |
3664 | ld h,000h\r | |
3665 | ld a,(b_21e2_start)\r | |
3666 | and a\r | |
3628b074 | 3667 | ret z\r |
0716e834 L |
3668 | scf\r |
3669 | ret\r | |
9711a430 L |
3670 | \r |
3671 | ;-------------------------------------------------------------------------------\r | |
3672 | ; >>C[N][J] [steps]\r | |
3673 | ; >>C[N][J] W expression\r | |
3674 | ; >>C[N][J] U expression\r | |
3675 | ; trace over Calls [No list] [Jumps only] /.While./.Until.\r | |
3676 | \r | |
9711a430 L |
3677 | \r |
3678 | ;-------------------------------------------------------------------------------\r | |
3679 | ; >>T[N][J] [steps]\r | |
3680 | ; >>T[N][J] W expression\r | |
3681 | ; >>T[N][J] U expression\r | |
3682 | ; Trace [no List] [Jumps only] / .While. / .Until.\r | |
3683 | \r | |
0c4244e5 | 3684 | cmd_T:\r |
0716e834 | 3685 | ld (cmd_rpt),hl\r |
4a39ae18 | 3686 | ld hl,1 ;default: 1 step\r |
0716e834 | 3687 | call get_lastarg_def\r |
4a39ae18 | 3688 | ld (trace_cnt_or_ptr),hl\r |
0716e834 | 3689 | sub a\r |
4bb547a7 | 3690 | ld (bp_p_cpu_flag),a\r |
4a39ae18 L |
3691 | call tc_set_bp\r |
3692 | jr user_go1\r | |
0c4244e5 L |
3693 | \r |
3694 | l2151h:\r | |
0716e834 | 3695 | call bp_clr_temporary\r |
4a39ae18 | 3696 | ld hl,(trace_cnt_or_ptr)\r |
0716e834 | 3697 | dec hl\r |
4a39ae18 | 3698 | ld (trace_cnt_or_ptr),hl\r |
0716e834 L |
3699 | ld a,h\r |
3700 | or l\r | |
3628b074 L |
3701 | jp z,do_break\r |
3702 | \r | |
4a39ae18 | 3703 | call tc_set_bp\r |
3628b074 L |
3704 | jp nc,do_break\r |
3705 | sbc a,a\r | |
4bb547a7 | 3706 | ld (bp_p_cpu_flag),a\r |
4a39ae18 | 3707 | user_go1:\r |
0716e834 | 3708 | jp user_go\r |
0c4244e5 | 3709 | \r |
9711a430 L |
3710 | ;-------------------------------------------------------------------------------\r |
3711 | \r | |
4bb547a7 L |
3712 | con_col:\r |
3713 | db 0\r | |
3714 | \r | |
3715 | ;-------------------------------------------------------------------------------\r | |
3716 | \r | |
0c4244e5 | 3717 | b_21e2_start:\r |
9bed91b3 | 3718 | db 0\r |
4a39ae18 | 3719 | trace_cnt_or_ptr:\r |
9bed91b3 | 3720 | dw 0\r |
9bed91b3 | 3721 | \r |
4bb547a7 | 3722 | bp_p_cpu_flag:\r |
9bed91b3 L |
3723 | db 0\r |
3724 | \r | |
3725 | bp_tab:\r | |
3726 | rept BP_CNT\r | |
3727 | rept BP_SIZE\r | |
3728 | db 0\r | |
3729 | endm\r | |
3730 | endm\r | |
3731 | \r | |
9bed91b3 L |
3732 | expr_buf:\r |
3733 | current_cseg defl $ - current_cseg\r | |
3734 | .phase current_phase + current_cseg\r | |
3735 | \r | |
3736 | start:\r | |
3737 | LD SP,ldr_end+(stack-ddtz_base)\r | |
3738 | LD DE,signon ;ldr_end+(expr_buf-ddtz_base)\r | |
3739 | LD C,BDOS_PSTR\r | |
3740 | CALL BDOS\r | |
3741 | \r | |
3742 | xor a\r | |
3743 | dec a\r | |
3744 | jp po,reloc\r | |
3745 | ld de,msgz80\r | |
3746 | LD C,BDOS_PSTR\r | |
3747 | CALL BDOS\r | |
3748 | jp 0\r | |
3749 | \r | |
3750 | reloc:\r | |
3751 | LD HL,ldr_end+ddtz_size ;start of reloc bitmap\r | |
3752 | ld bc,0108h ;init bit counter\r | |
3753 | \r | |
3754 | EXX\r | |
3755 | LD HL,(BDOS+1)\r | |
c788b3b7 | 3756 | LD (ldr_end+(ddtz_bdos+1-ddtz_base)),HL\r |
9bed91b3 L |
3757 | LD BC,ddtz_size-1\r |
3758 | LD D,B\r | |
3759 | LD E,0FFH\r | |
3760 | INC DE ;size rounded up to next page boundary\r | |
3761 | INC BC ;ddtz_size\r | |
3762 | OR A\r | |
3763 | SBC HL,DE ;BDOS - size\r | |
3764 | LD (BDOS+1),HL ;-> new BDOS entry\r | |
3765 | \r | |
3766 | push hl\r | |
3767 | PUSH BC\r | |
3768 | ld de,ldr_end\r | |
3769 | sbc hl,de\r | |
3770 | EX DE,HL ;-> DE\r | |
3771 | LD HL,ldr_size\r | |
3772 | add hl,bc\r | |
3773 | ld b,h\r | |
3774 | ld c,l\r | |
3775 | LD HL,TPA\r | |
3776 | reloc_lp:\r | |
3777 | EXX\r | |
3778 | djnz reloc_nl\r | |
3779 | ld b,c ;reload bit counter\r | |
3780 | LD e,(HL) ;get next 8 relocation bits\r | |
3781 | INC HL\r | |
3782 | reloc_nl:\r | |
3783 | sla e\r | |
3784 | EXX\r | |
3785 | JR NC,reloc_next\r | |
3786 | DEC HL\r | |
3787 | LD A,(HL)\r | |
3788 | ADD A,E\r | |
3789 | LD (HL),A\r | |
3790 | INC HL\r | |
3791 | LD A,(HL)\r | |
3792 | ADC A,D\r | |
3793 | LD (HL),A\r | |
3794 | reloc_next:\r | |
3795 | cpi\r | |
3796 | jp pe,reloc_lp\r | |
3797 | dec hl\r | |
3798 | \r | |
3799 | POP BC\r | |
3800 | pop de\r | |
3801 | EX DE,HL\r | |
3802 | ADD HL,BC\r | |
3803 | EX DE,HL\r | |
3804 | DEC DE\r | |
3805 | LDDR\r | |
3806 | LD HL,conbuf+2-ddtz_base\r | |
3807 | ADD HL,DE\r | |
3808 | JP (HL)\r | |
3809 | \r | |
3810 | current_phase defl $\r | |
3811 | .dephase\r | |
3812 | current_cseg defl $\r | |
3813 | \r | |
3814 | ds EXPR_BUF_SIZE - ($ - expr_buf)\r | |
3815 | expr_bufe:\r | |
3816 | \r | |
9711a430 L |
3817 | ;-------------------------------------------------------------------------------\r |
3818 | \r | |
9bed91b3 L |
3819 | last_S:\r |
3820 | dw TPA\r | |
3821 | \r | |
3822 | last_I:\r | |
3823 | dw 0\r | |
3824 | \r | |
3825 | last_O_addr:\r | |
3826 | dw 0\r | |
3827 | last_O_val:\r | |
3828 | db 0\r | |
3829 | \r | |
9bed91b3 L |
3830 | last_D:\r |
3831 | dw TPA\r | |
3832 | \r | |
9bed91b3 L |
3833 | high_load:\r |
3834 | dw TPA\r | |
3835 | max_load:\r | |
3836 | dw TPA\r | |
3837 | \r | |
9bed91b3 L |
3838 | isprefix_ixiy:\r |
3839 | db 0\r | |
3840 | last_L:\r | |
3841 | dw TPA\r | |
0c4244e5 | 3842 | \r |
1bfdbe14 L |
3843 | pbl_loop_adr:\r |
3844 | dw 0\r | |
3845 | \r | |
0c4244e5 L |
3846 | ddtz_size equ $-ddtz_base\r |
3847 | ddtz_end:\r | |
3848 | \r | |
3849 | ;-------------------------------------------------------------------------------\r | |
0c4244e5 L |
3850 | \r |
3851 | end\r |