]> cloudbase.mooo.com Git - ddt180.git/blame - ddt180.z80
Disassembler: rename 'print arg' routines
[ddt180.git] / ddt180.z80
CommitLineData
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
12TPA 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 19ldr_end:\r
ed6c425a 20ldr_size equ $ - TPA\r
899547a8 21current_phase defl $\r
0c4244e5 22\r
ed6c425a 23 .dephase\r
899547a8
L
24current_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
32BS equ 08h\r
33TAB equ 09h\r
34CR equ 0dh\r
35LF equ 0ah\r
36DEL equ 7fh\r
37CNTRX equ 'X'-'@'\r
0c4244e5
L
38\r
39; CP/M memory layout\r
40\r
41BDOS equ 5\r
0c4244e5
L
42TPA equ 0100h\r
43\r
44; BDOS function calls\r
45\r
0c4244e5 46BDOS_PSTR equ 9 ;Print String\r
0c4244e5
L
47\r
48; ddtz specific definitions\r
49\r
0dc44d17 50STACK_SIZE equ 80 ;ddtz internal stack\r
0c4244e5
L
51CONBUF_SIZE equ 80 ;Size of console input buffer\r
52EXPR_BUF_SIZE equ 128 ;expressen buffer for conditional breakpoints\r
53BP_CNT equ 12 ;Number of breakpoints\r
d2df51e3 54BP_SIZE equ 4 ;Size of a breakpoint record\r
0c4244e5 55\r
c486c4da 56;-------------------------------------------------------------------------------\r
1d3941c8 57\r
0c4244e5 58ddtz_base:\r
c788b3b7 59 jp ddtz_bdos\r
0c4244e5 60l0003h:\r
c788b3b7 61 rst 30h\r
4bb547a7 62di_or_ei:\r
c788b3b7
L
63 nop\r
64 ret\r
65ddtz_bdos:\r
66 jp 0\r
0c4244e5 67\r
899547a8
L
68current_cseg defl $ - current_cseg\r
69 .phase current_phase + current_cseg\r
70signon:\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
76msgz80:\r
77 db 'Z80 or better required!',cr,lf,'$'\r
78\r
79current_phase defl $\r
80 .dephase\r
81current_cseg defl $\r
82 ds STACK_SIZE - (current_phase - signon)\r
83\r
0c4244e5
L
84\r
85stack:\r
9bed91b3
L
86reg.l2: db 000h\r
87reg.h2: db 000h\r
88reg.e2: db 000h\r
89reg.d2: db 000h\r
90reg.c2: db 000h\r
91reg.b2: db 000h\r
92reg.f2: db 000h\r
93reg.a2: db 000h\r
b270cd3a 94 db 000h\r
9bed91b3
L
95reg.i: db 000h\r
96reg.iy: dw 0000h\r
97reg.ix: dw 0000h\r
98reg.f: db 000h\r
99reg.a: db 000h\r
100reg.c: db 000h\r
101reg.b: db 000h\r
102reg.e: db 000h\r
103reg.d: db 000h\r
104reg.l: db 000h\r
105reg.h: db 000h\r
106reg_sp: dw TPA\r
0c4244e5 107reg.iff:\r
9bed91b3
L
108 db 0f3h\r
109 db 0c3h\r
ac35765e 110reg.pc: dw TPA\r
0c4244e5 111\r
9bed91b3 112cmd_rpt:dw mainloop\r
0c4244e5 113\r
9711a430
L
114;-------------------------------------------------------------------------------\r
115\r
0c4244e5 116conbuf:\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 125l0079h:\r
c788b3b7 126 ld de,TPA\r
0c4244e5 127l007ch:\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 142l0093h:\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
152vini_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 178CMDTAB:\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 207ERROR:\r
474b928c
L
208 call pstr_inl\r
209 dc '?',CR,LF\r
210 ;fall thru\r
0c4244e5 211mainloop:\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 240exe_hl:\r
b270cd3a 241CALL_HL:\r
d0ff7c76 242 jp (hl)\r
0c4244e5 243\r
9711a430
L
244;-------------------------------------------------------------------------------\r
245\r
ac35765e 246crlf:\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 255sub_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
261out_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 265out.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 272l01f3h:\r
0716e834
L
273 call outbl\r
274 djnz l01f3h\r
275 ret\r
8bc5ea22 276\r
0c4244e5 277sub_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
289out_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
296out_hl:\r
0716e834
L
297 ld a,h\r
298 call out_hex\r
299 ld a,l\r
0c4244e5
L
300\r
301out_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
310out_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
317out.bin.w:\r
318 ld a,h\r
319 call out.bin.b\r
320 ld a,l\r
321out.bin.b:\r
322 ld b,8\r
323l01c9h:\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 334out.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 350l0242h:\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
362outbl6:\r
363 call outbl2\r
364outbl4:\r
365 call outbl2\r
366outbl2:\r
367 call outbl\r
368outbl:\r
369 ld a,' '\r
0c4244e5 370outchar:\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
390pstr_sel:\r
391 inc b\r
392 jr pstr_sel2\r
393pstr_sel1:\r
394 call sub_0345h\r
395pstr_sel2:\r
396 djnz pstr_sel1\r
397 ;fall thru\r
01cb8973 398pstr:\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
407pstr_inl:\r
408 ex (sp),hl\r
409 call pstr\r
410 ex (sp),hl\r
411 ret\r
412\r
08d0db09 413p_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
423incharw:\r
424 call inchar\r
425 jr nc,incharw\r
12eea40b
L
426 ret\r
427\r
428;-------------------------------------------------------------------------------\r
429\r
0c4244e5 430inchar:\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 440inch1:\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
449DELC:\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
460DELC1:\r
b5b85b4c
L
461 call pstr_inl\r
462 dc BS,' ',BS\r
12eea40b
L
463 ret\r
464\r
465DELL:\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 474get_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
481inlnxtch:\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 495gl_1:\r
12eea40b
L
496 call DELC ;Delete Char\r
497 jr inlnxtch ;\r
498gl_2:\r
499 cp CNTRX ;\r
500 jr nz,gl_3 ;\r
501 call DELL ;Delete Line\r
502 jr inlnxtch ;\r
503gl_3:\r
504 cp TAB ;\r
505 jr nz,gl_4 ;\r
506 ld a,' ' ;\r
507gl_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
515gl_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
522inl_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
534get_char_upper:\r
535 ld a,(de)\r
01cb8973
L
536toupper:\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 547skipbl0:\r
0716e834 548 inc de\r
0c4244e5 549skipbl:\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 558next_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
566assert_eol:\r
0716e834
L
567 call skipbl\r
568 ret z\r
0c4244e5 569to_error:\r
0716e834 570 jp ERROR\r
0c4244e5 571\r
9711a430
L
572;-------------------------------------------------------------------------------\r
573\r
85b57f2a 574chk_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
588add_hl_a2:\r
589 add a,a\r
01cb8973
L
590add_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 597cp_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 605lookupch:\r
0716e834 606 ld b,0\r
0c4244e5 607l02f5h:\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 617l0300h:\r
0716e834
L
618 scf\r
619 inc de\r
620 ret\r
0c4244e5
L
621\r
622sub_0303h:\r
f81f70a9 623 ld hl,t_reg_names\r
0716e834 624 ld b,07fh\r
0c4244e5 625l030ch:\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 635sub_031ch:\r
0716e834
L
636 push bc\r
637 push de\r
0c4244e5 638l031eh:\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 655l0336h:\r
0716e834 656 call sub_0345h\r
0c4244e5 657l0339h:\r
0716e834
L
658 pop de\r
659 and a\r
660 pop bc\r
661 ret\r
646e8b05 662\r
0c4244e5 663sub_0345h:\r
0716e834
L
664 ld a,(hl)\r
665 and a\r
666 ret z\r
0c4244e5 667l0348h:\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 674sub_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
685sub_035dh:\r
0716e834
L
686 call expr\r
687 jr c,error0\r
688 ret\r
0c4244e5
L
689\r
690sub_0363h:\r
0716e834 691 call sub_035dh\r
0c4244e5 692l0366h:\r
0716e834 693 jp assert_eol\r
0c4244e5
L
694\r
695get_lastarg_def:\r
0716e834
L
696 call get_arg_def\r
697 jr l0366h\r
b0b4005c 698\r
0c4244e5 699get_arg_def:\r
0716e834
L
700 push hl\r
701 call expr\r
702 jr c,l0375h\r
703 ex (sp),hl\r
0c4244e5 704l0375h:\r
0716e834
L
705 pop hl\r
706 ret\r
b0b4005c 707\r
0c4244e5 708sub_0377h:\r
0716e834
L
709 call b_037c_start\r
710 jr l0366h\r
0c4244e5
L
711\r
712b_037c_start:\r
d1d6fee5 713 defb 0e6h ;and a,.. clear carry\r
0c4244e5 714get_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 726l038ch:\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 733error0:\r
0716e834 734 jp ERROR\r
0c4244e5 735l0398h:\r
0716e834
L
736 pop af\r
737 ret\r
0c4244e5 738\r
b0b4005c 739get_range:\r
0716e834
L
740 call next_arg\r
741 cp 'S'\r
742 jr nz,l03a2h\r
743 inc de\r
0c4244e5 744l03a2h:\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 761l03b6h:\r
0716e834
L
762 and a\r
763 ret\r
0c4244e5 764l03b8h:\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 773expr:\r
0716e834 774 call skipbl\r
0c4244e5 775expr1:\r
0716e834
L
776 call do_factor\r
777 ret c\r
0c4244e5 778l0433h:\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
793l0447h:\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
800doop_add:\r
0716e834 801 add hl,de\r
0c4244e5 802l044dh:\r
0716e834
L
803 pop de\r
804 jr l0433h\r
0c4244e5
L
805\r
806doop_sub:\r
0716e834
L
807 and a\r
808 sbc hl,de\r
809 jr l044dh\r
0c4244e5
L
810\r
811doop_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 817l045dh:\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 824l0464h:\r
0716e834
L
825 dec a\r
826 jr nz,l045dh\r
827 pop bc\r
828 jr l044dh\r
0c4244e5
L
829\r
830doop_div:\r
0716e834
L
831 call div_hl_de\r
832 jr l044dh\r
0c4244e5
L
833\r
834doop_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
846div_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
858div_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
869div_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
876doop_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
885doop_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
894doop_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
903do_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
916tab_op_a:\r
917 DB '+-*/%&!#',0\r
918\r
919tblf_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 932fact_factor:\r
0716e834
L
933 call do_factor\r
934 ret nc\r
935 jp ERROR\r
0c4244e5
L
936\r
937do_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 974fact_factstring:\r
0716e834 975 ld hl,0\r
0c4244e5 976l054bh:\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 982l0552h:\r
0716e834
L
983 ld h,l\r
984 ld l,a\r
985 inc de\r
986 jr l054bh\r
0c4244e5 987l0557h:\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
999fact_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
1012fact_factneg:\r
0716e834
L
1013 call fact_factor\r
1014 dec hl\r
0c4244e5 1015cpl.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
1024fact_factinv:\r
0716e834
L
1025 call fact_factor\r
1026 jr cpl.hl\r
0c4244e5
L
1027\r
1028fact_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
1048expr_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 1055error1:\r
0716e834 1056 jp ERROR\r
0c4244e5 1057\r
9711a430
L
1058;-------------------------------------------------------------------------------\r
1059\r
0c4244e5 1060get.number:\r
0716e834
L
1061 call get.hexdigit\r
1062 ret c\r
1063 push de\r
0c4244e5 1064test_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 1074next_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
1085hexnum_done:\r
0716e834
L
1086 xor 'H'\r
1087 ret nz\r
1088 inc de\r
1089 ret\r
0c4244e5
L
1090\r
1091get_bin_number:\r
0716e834 1092 ld hl,0\r
0c4244e5 1093next_bindigit:\r
0716e834 1094 call get.bindigit\r
0c4244e5 1095l05dbh:\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 1101l05e4h:\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
1109get_dec_number:\r
0716e834 1110 ld hl,0\r
0c4244e5 1111next_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 1125decnum_done:\r
0716e834
L
1126 cp '.'\r
1127 ret z\r
1bfdbe14 1128error11:\r
0716e834 1129 jp ERROR\r
0c4244e5
L
1130\r
1131sub_060ch:\r
0c461f1d 1132 call get_char_upper\r
d1d6fee5 1133 cp 'Z'+1\r
0716e834 1134 jr l0614h\r
0c4244e5
L
1135\r
1136get.hexdigit:\r
c788b3b7 1137 ld a,(de)\r
0c4244e5 1138hex_digit:\r
0c461f1d 1139 call toupper\r
c788b3b7 1140 cp 'F'+1\r
0c4244e5 1141l0614h:\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
1149get.decdigit:\r
0c461f1d 1150 call get_char_upper\r
0c4244e5 1151l061eh:\r
c788b3b7
L
1152 cp '9'+1\r
1153 jr l0625h\r
0c4244e5
L
1154\r
1155get.bindigit:\r
0c461f1d 1156 call get_char_upper\r
c788b3b7 1157 cp '1'+1\r
0c4244e5 1158l0625h:\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 1168p_cpustat0:\r
0716e834 1169 call assert_eol\r
25a690e5 1170p_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 1176l063eh:\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 1190l065bh:\r
0716e834
L
1191 call p_regs\r
1192 djnz l065bh\r
0716e834 1193 jp crlf\r
0c4244e5 1194\r
25a690e5 1195p_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 1203p_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 1208p_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
1213fl_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
1223fl_skip:\r
1224 dec hl\r
1225 djnz fl_loop\r
1226 pop hl\r
1227 ret\r
25a690e5
L
1228\r
1229p_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 1251l06deh:\r
0716e834
L
1252 ld a,(de)\r
1253 call out_hex\r
0c4244e5 1254l06e2h:\r
0716e834
L
1255 pop de\r
1256 pop hl\r
8320b8eb
L
1257outbl_1:\r
1258 jp outbl\r
0c4244e5
L
1259\r
1260b_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
1276b_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 1309cmd_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 1315l0740h:\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 1323user_go0:\r
0716e834 1324 jp user_go\r
0c4244e5 1325\r
9711a430 1326;-------------------------------------------------------------------------------\r
1bfdbe14
L
1327\r
1328bpl_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
1336bpl_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 1349bp_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 1371cmd_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 1381bp_clr0:\r
0716e834
L
1382 call skipbl\r
1383 jr z,bp_clr_all\r
4903b8b8 1384bp_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
1393bp_clr_all:\r
0716e834 1394 scf\r
0c4244e5 1395bp_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 1404l07a7h:\r
0716e834 1405 ld (ix+000h),000h\r
0c4244e5 1406l07aeh:\r
0716e834 1407 pop af\r
1bfdbe14 1408 call bpl_next\r
0716e834 1409 ret\r
0c4244e5 1410\r
4903b8b8 1411bp_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 1422bp_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
1434bp_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
1459bp_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
1467error12\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 1474bpddtz:\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 1494l08dfh:\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 1513do_break:\r
0716e834
L
1514 call bp_clr_temporary\r
1515 call p_cpustat\r
1516 jp mainloop\r
0c4244e5
L
1517\r
1518l090bh:\r
0716e834
L
1519 ld (b_21e2_start),a\r
1520 ld c,007h\r
1521 jp l0a41h\r
0c4244e5
L
1522\r
1523sub_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
1542l0938h:\r
1543 call bpl_next\r
1544 ex af,af'\r
0716e834 1545 ret\r
0c4244e5 1546\r
4bb547a7 1547bp_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 1560l099ah:\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 1566bp_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 1577bp_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 1583bp_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 1592bp_t_e:\r
0716e834
L
1593 ld (ix+000h),a\r
1594 ret\r
0c4244e5 1595\r
1d3941c8 1596bp_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 1618l0a1dh:\r
1bfdbe14
L
1619\r
1620 call bpl_next\r
0716e834 1621 ret\r
0c4244e5 1622\r
9711a430
L
1623;-------------------------------------------------------------------------------\r
1624\r
0c4244e5 1625user_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 1638l0a41h:\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 1673cmd_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 1704l0c30h:\r
0716e834
L
1705 pop af\r
1706 pop hl\r
1707 ret\r
d1f2492e 1708\r
0c4244e5 1709l0c33h:\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
1722l0c4fh:\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 1730l0c5fh:\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 1737sub_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 1745l0c76h:\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
1756nxt_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 1765l0c97h:\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 1773t_flag_names:\r
0c4244e5
L
1774 db 'CNV H ZSE',0\r
1775\r
1776sub_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 1793t_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
1823b_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 1883cmd_S:\r
0716e834
L
1884 ld hl,(last_S)\r
1885 call get_lastarg_def\r
0c4244e5 1886l0d60h:\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
1905cmds_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 1914l0d8ah:\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 1929cmd_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 1948cmd_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 1969cmd_V:\r
0716e834 1970 call sub_034eh\r
0c4244e5 1971l0dedh:\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 1990l0e10h:\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 2001cmd_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
2013cmdm_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 2024cmd_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 2046cmd_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 2052l0e96h:\r
c18ba819
L
2053 push hl\r
2054 push de\r
2055 push bc\r
2056l0edah:\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
2063l0ee2h:\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 2073l0eb0h:\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 2088cmd_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 2098l0ec7h:\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 2106l0ed3h:\r
0716e834
L
2107 pop hl\r
2108 ret\r
0c4244e5 2109\r
0c4244e5 2110sub_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
2120sub_0ef7h: ;from cmd_Q, cmd_Z\r
2121 db 0e6h ;and 037h (clear carry)\r
2122sub_0ef8h: ;from cmd_S\r
0716e834 2123 scf\r
0c4244e5 2124l0ef9h:\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 2137l0f1eh:\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 2144l0f27h:\r
0716e834
L
2145 ld (hl),a\r
2146 inc hl\r
2147 jr l0f1eh\r
0c4244e5 2148l0f2bh:\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 2159l0f3ah:\r
0716e834
L
2160 pop af\r
2161 jr nc,l0ef9h\r
2162 ld (last_S),hl\r
2163 jr l0ef9h\r
0c4244e5 2164l0f42h:\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 2174cmd_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 2180sub_0f58h:\r
0716e834
L
2181 push bc\r
2182 push de\r
2183 push hl\r
d24eec89 2184 push af\r
0c4244e5 2185l0f5ch:\r
35b535f6 2186 call out_hl\r
c18ba819 2187 call outbl2\r
0716e834 2188 ld de,0\r
0c4244e5 2189l0f68h:\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 2204l0f80h:\r
0716e834
L
2205 call outbl\r
2206 and a\r
2207 sbc hl,de\r
0c4244e5 2208l0f86h:\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 2219l0f97h:\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
2230sub_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 2236l0fach:\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
2250cmd_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
2256w_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
2272l16c6h:\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
2288rdhex_done:\r
2289 pop hl\r
2290 call i.gethexbyte\r
2291 jp p_max_high\r
9711a430 2292\r
25e453a7
L
2293i.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
2308sub_16f6h:\r
2309 call i.getchar\r
2310 jr z,error2\r
2311 call hex_digit\r
2312 ret nc\r
2313error2:\r
2314 jp ERROR\r
0c4244e5 2315\r
25e453a7 2316i.getchar:\r
b5b85b4c 2317 call incharw\r
25e453a7 2318 cp 01ah\r
0716e834 2319 ret\r
0c4244e5 2320\r
25e453a7 2321i.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 2334l1157h:\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 2339l1163h:\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 2347p_max_high0:\r
d1f2492e 2348 call assert_eol\r
25a690e5 2349p_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 2380cmd_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 2385l18dbh:\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 2391l18ebh:\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 2398l1905h:\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 2404l190fh:\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
2414cmdl_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 2433p_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
2448l197fh:\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
2455disas_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 2465sub_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 2470l19abh:\r
0716e834
L
2471 ld a,1\r
2472 jr l19b1h\r
0c4244e5 2473l19afh:\r
0716e834 2474 ld a,2\r
0c4244e5 2475l19b1h:\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
2489disas_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
2509disas_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
2531disas_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
2538l1a42h:\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 2547disas_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 2569l19edh:\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 2575b_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 2604l1a0ah:\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 2623lookup_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 2632l1a7fh:\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
2639test_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 2649lookup_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 2664l1aa8h:\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 2674get_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 2684b_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 2705b_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 2759b_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 2791b_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 2814b_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
2843b_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
2870l228bh:\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 2888b_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 2896b_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 2921p_arg_ry_rz:\r
514bb0fd 2922 call p_ry\r
0716e834 2923 call p_char_comma\r
514bb0fd 2924 jp p_rz\r
25a690e5 2925p_arg_a_r:\r
0716e834 2926 call p_A_comma\r
514bb0fd 2927 jp p_rz\r
b0b4005c 2928\r
25a690e5 2929p_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
2934p_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 2939p_arg_rst:\r
0716e834
L
2940 ld a,(iy+000h)\r
2941 and 038h\r
2942 jp out_hex\r
25a690e5 2943\r
0c4244e5 2944l1ca0h:\r
0716e834 2945 call pstr_inl\r
0c4244e5 2946 DC '(SP),'\r
0716e834 2947 jp p_arg_hlixiy\r
25a690e5 2948\r
0c4244e5 2949l1caeh:\r
0716e834
L
2950 call p_char_lparen\r
2951 call p_arg_hlixiy\r
25a690e5
L
2952 jr out_rparen\r
2953\r
2954p_arg_ex_dehl:\r
a942c6d5
L
2955 call pstr_inl\r
2956 DC 'DE,HL'\r
e611c31d 2957p_arg_none:\r
a942c6d5 2958 ret\r
25a690e5 2959\r
0c4244e5 2960l1cc1h:\r
d1f2492e 2961 call pstr_inl\r
0c4244e5 2962 DC 'SP,'\r
d1f2492e 2963 jp p_arg_hlixiy\r
25a690e5
L
2964\r
2965p_arg_ex_afaf:\r
a942c6d5
L
2966 call pstr_inl\r
2967 DC 'AF,AF'''\r
2968 ret\r
25a690e5 2969\r
0c4244e5 2970l1cd3h:\r
0716e834
L
2971 call p_arg_hlixiy\r
2972 call p_char_comma\r
514bb0fd 2973 jp p_rp\r
0c4244e5 2974l1cdch:\r
0716e834
L
2975 call sub_1ce8h\r
2976 call p_char_comma\r
2977 jp p_char_A\r
0c4244e5
L
2978\r
2979l1ce5h:\r
0716e834 2980 call p_A_comma\r
0c4244e5 2981sub_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 2986l1cf5h:\r
0716e834
L
2987 call p_A_comma\r
2988 jr l1d09h\r
0c4244e5 2989l1cfah:\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 2996l1d09h:\r
0716e834 2997 ld a,(iy+001h)\r
0c4244e5 2998l1d0ch:\r
0716e834 2999 jp out_hex\r
b0b4005c 3000\r
08d0db09 3001p_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 3006p_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 3019l1d29h:\r
0716e834 3020 call p_A_comma\r
0c4244e5 3021sub_1d2ch:\r
0716e834
L
3022 call p_char_lparen\r
3023 ld a,(iy+001h)\r
836f48ab
L
3024p_arg_nn_rp:\r
3025 call out_hex\r
3026out_rparen:\r
3027 jr p_char_rparen\r
3028\r
0c4244e5 3029l1d37h:\r
0716e834 3030 call sub_1d2ch\r
25a690e5
L
3031 jr p_char_comma_A\r
3032\r
3033p_arg_cc_mn:\r
0716e834
L
3034 call p_arg_cc\r
3035 call p_char_comma\r
25a690e5 3036p_arg_mn:\r
0716e834
L
3037 ld l,(iy+001h)\r
3038 ld h,(iy+002h)\r
0c4244e5 3039l1d4eh:\r
85b57f2a
L
3040 jp out_hl\r
3041\r
25a690e5 3042p_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
3047p_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 3052p_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
3057p_arg_addr_a:\r
08d0db09 3058 call p_arg_addr\r
25a690e5 3059p_char_comma_A:\r
0716e834 3060 call p_char_comma\r
836f48ab
L
3061 jr p_char_A\r
3062\r
3063p_A_comma:\r
3064 call p_char_A\r
3065p_char_comma:\r
3066 ld a,','\r
3067 db 021h\r
25a690e5 3068p_char_A:\r
0716e834 3069 ld a,'A'\r
836f48ab 3070 db 021h\r
0c4244e5 3071l1d85h:\r
0716e834 3072 ld a,'0'\r
836f48ab 3073 db 021h\r
0c4244e5 3074l1d89h:\r
0716e834 3075 ld a,'1'\r
836f48ab 3076 db 021h\r
0c4244e5 3077l1d8dh:\r
0716e834 3078 ld a,'2'\r
836f48ab
L
3079 db 021h\r
3080p_char_rparen:\r
3081 ld a,')'\r
3082 db 021h\r
3083p_char_lparen:\r
3084 ld a,'('\r
0716e834 3085 jp outchar\r
25a690e5 3086\r
e611c31d
L
3087p_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 3096t_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 3103p_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
3109p_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 3115l1dcah:\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
3120p_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
3125p_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
3130p_arg_a_addr:\r
3131 call p_A_comma\r
3132p_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
3138p_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 3144l1defh:\r
0716e834 3145 ld a,(iy+002h)\r
0c4244e5 3146l1df2h:\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 3158p_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 3164l1e0eh:\r
0716e834 3165 ld a,(iy+002h)\r
0c4244e5 3166l1e11h:\r
514bb0fd 3167 jr p_r0\r
25a690e5 3168\r
514bb0fd 3169p_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
3175p_rz:\r
0716e834 3176 ld a,(iy+000h)\r
514bb0fd 3177p_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
3198l1e61h:\r
3199 call outchar\r
3200 pop af\r
3201 jp p_arg_nn_rp\r
646e8b05 3202\r
a942c6d5 3203t_lp_IXIY:\r
0c4244e5 3204 DC '(IX'\r
0c4244e5 3205 DC '(IY'\r
646e8b05 3206\r
25a690e5 3207p_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 3212p_rp2:\r
25a690e5 3213p_arg_zz:\r
514bb0fd 3214 ld hl,t_arg_rp2\r
0716e834 3215 jr l1e8eh\r
514bb0fd 3216p_rp:\r
25a690e5 3217p_arg_ww:\r
514bb0fd 3218 ld hl,t_arg_rp\r
0c4244e5 3219l1e8eh:\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 3230p_cc:\r
25a690e5 3231p_arg_cc:\r
0716e834 3232 ld a,(iy+000h)\r
25a690e5 3233p_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 3239p_arg:\r
0716e834 3240 ld b,a\r
a942c6d5
L
3241p_arg0:\r
3242 jp pstr_sel\r
0c4244e5 3243\r
514bb0fd
L
3244;-------------------------------------------------------------------------------\r
3245\r
7c2469ef
L
3246if 0\r
3247p_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
3257endif\r
3258\r
9711a430
L
3259;-------------------------------------------------------------------------------\r
3260\r
3b18d7ae 3261opc macro x\r
a370992b 3262\r
3b18d7ae 3263i_&x equ opc_index\r
a370992b 3264o_&x equ $-opc_tabstart\r
3b18d7ae
L
3265 dc '&x'\r
3266opc_index defl opc_index+1\r
a370992b
L
3267 endm\r
3268\r
3269opc1 macro x,y\r
3270\r
3271i_&x&y equ opc_index\r
3272o_&x&y equ $-opc_tabstart\r
3273 db '&x'\r
3274i_&y equ opc_index+1\r
3275o_&y equ $-opc_tabstart\r
3276 dc '&y'\r
3277opc_index defl opc_index+2\r
3b18d7ae
L
3278 endm\r
3279\r
3280\r
0c4244e5 3281t_MNEMONICS:\r
a370992b
L
3282opc_tabstart defl $\r
3283opc_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
3346t_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 3378t_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 3388t_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 3394t_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
3400t_HL.IX.IY:\r
3401 DC 'HL'\r
0c4244e5
L
3402 DC 'IX'\r
3403 DC 'IY'\r
3404 DB 0\r
514bb0fd 3405t_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
3415t__C_:\r
3416 DC '(C)'\r
3417 DB 0\r
3418\r
9711a430 3419;-------------------------------------------------------------------------------\r
8320b8eb
L
3420;-------------------------------------------------------------------------------\r
3421if 0\r
3422\r
3423lookup_argstr:\r
3424 ;todo\r
3425 ret\r
3426\r
3427\r
3428pr_instr_args:\r
3429 ld hl,t_argf\r
3430 call lookup_argstr\r
3431\r
3432 ret z\r
3433\r
3434pria_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
3443pria_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
3464t_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
3479argpf_index defl 0\r
3480\r
3481argpf macro x\r
3482fi_&x equ 80h+argpf_index\r
3483 dw p_&x\r
3484argpf_index defl argpf_index+1\r
3485 endm\r
3486\r
3487do_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
3496p_ry:\r
3497p_rz:\r
3498p_m8:\r
3499p_rst:\r
3500p_hlixiy:\r
514bb0fd
L
3501p_rp:\r
3502p_rp2:\r
3503\r
8320b8eb 3504\r
8320b8eb
L
3505endif\r
3506;-------------------------------------------------------------------------------\r
3507;-------------------------------------------------------------------------------\r
9711a430 3508\r
4a39ae18 3509tc_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 3533l2031h:\r
0716e834 3534 call CALL_HL\r
4bb547a7 3535 call c,bp_trace_enter\r
0c4244e5 3536l2037h:\r
0716e834
L
3537 scf\r
3538 ret\r
0c4244e5 3539\r
9711a430
L
3540;-------------------------------------------------------------------------------\r
3541\r
e611c31d 3542t_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 3549t_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 3576l2080h:\r
4a39ae18
L
3577\r
3578; jp mn jp cc,mn\r
0c4244e5 3579l208bh:\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 3585l2093h:\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 3599l20a2h:\r
0716e834
L
3600 ld hl,(reg.l)\r
3601 scf\r
3602 ret\r
4a39ae18
L
3603\r
3604; Prefix DD\r
0c4244e5 3605l20a7h:\r
0716e834
L
3606 ld hl,(reg.ix)\r
3607 jr l20afh\r
4a39ae18 3608; Prefix FD\r
0c4244e5 3609l20ach:\r
0716e834 3610 ld hl,(reg.iy)\r
0c4244e5 3611l20afh:\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 3620l20b8h:\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 3628l20c5h:\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 3638l20d7h:\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
3645l20dch:\r
0c4244e5 3646l20edh:\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 3653l2115h:\r
0716e834
L
3654 and a\r
3655 ret\r
0c4244e5
L
3656\r
3657l20f9h:\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 3684cmd_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
3694l2151h:\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 3707user_go1:\r
0716e834 3708 jp user_go\r
0c4244e5 3709\r
9711a430
L
3710;-------------------------------------------------------------------------------\r
3711\r
4bb547a7
L
3712con_col:\r
3713 db 0\r
3714\r
3715;-------------------------------------------------------------------------------\r
3716\r
0c4244e5 3717b_21e2_start:\r
9bed91b3 3718 db 0\r
4a39ae18 3719trace_cnt_or_ptr:\r
9bed91b3 3720 dw 0\r
9bed91b3 3721\r
4bb547a7 3722bp_p_cpu_flag:\r
9bed91b3
L
3723 db 0\r
3724\r
3725bp_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
3732expr_buf:\r
3733current_cseg defl $ - current_cseg\r
3734 .phase current_phase + current_cseg\r
3735\r
3736start:\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
3750reloc:\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
3776reloc_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
3782reloc_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
3794reloc_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
3810current_phase defl $\r
3811 .dephase\r
3812current_cseg defl $\r
3813\r
3814 ds EXPR_BUF_SIZE - ($ - expr_buf)\r
3815expr_bufe:\r
3816\r
9711a430
L
3817;-------------------------------------------------------------------------------\r
3818\r
9bed91b3
L
3819last_S:\r
3820 dw TPA\r
3821\r
3822last_I:\r
3823 dw 0\r
3824\r
3825last_O_addr:\r
3826 dw 0\r
3827last_O_val:\r
3828 db 0\r
3829\r
9bed91b3
L
3830last_D:\r
3831 dw TPA\r
3832\r
9bed91b3
L
3833high_load:\r
3834 dw TPA\r
3835max_load:\r
3836 dw TPA\r
3837\r
9bed91b3
L
3838isprefix_ixiy:\r
3839 db 0\r
3840last_L:\r
3841 dw TPA\r
0c4244e5 3842\r
1bfdbe14
L
3843pbl_loop_adr:\r
3844 dw 0\r
3845\r
0c4244e5
L
3846ddtz_size equ $-ddtz_base\r
3847ddtz_end:\r
3848\r
3849;-------------------------------------------------------------------------------\r
0c4244e5
L
3850\r
3851 end\r