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