]> cloudbase.mooo.com Git - ddt180.git/blame - ddt180.z80
Renaming
[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
32TAB equ 9\r
33LF equ 10\r
34CR equ 13\r
35\r
36; CP/M memory layout\r
37\r
38BDOS equ 5\r
c788b3b7
L
39dfcb1 equ 05ch\r
40dfcb2 equ 06ch\r
0c4244e5
L
41DMA_BUF equ 080h\r
42TPA equ 0100h\r
43\r
44; BDOS function calls\r
45\r
46BDOS_CIN equ 1 ;Console Input\r
47BDOS_COUT equ 2 ;Console Output\r
48BDOS_PSTR equ 9 ;Print String\r
49BDOS_CBUF equ 10 ;Read Console Buffer\r
50BDOS_CSTAT equ 11 ;Get Console Status\r
51BDOS_OPEN equ 15 ;Open File\r
52BDOS_CLOSE equ 16 ;Close File\r
53BDOS_DELETE equ 19 ;Delete File\r
54BDOS_READ equ 20 ;Read Sequential\r
55BDOS_WRITE equ 21 ;Write Sequential\r
56BDOS_CREATE equ 22 ;Make File\r
57BDOS_SETDMA equ 26 ;Set DMA Address\r
58\r
59; ddtz specific definitions\r
60\r
0dc44d17 61STACK_SIZE equ 80 ;ddtz internal stack\r
0c4244e5
L
62CONBUF_SIZE equ 80 ;Size of console input buffer\r
63EXPR_BUF_SIZE equ 128 ;expressen buffer for conditional breakpoints\r
64BP_CNT equ 12 ;Number of breakpoints\r
65BP_SIZE equ 8 ;Size of a breakpoint record\r
66YREG_CNT equ 10 ;Number of Y registers (0..9)\r
67\r
1d3941c8
L
68SYMCASE_SENS equ 0 ;Symbols are case sensitive\r
69SYMCASE_CONV equ 1 ;Convert case when symbols are loaded\r
70SYMCASE_LOWER equ 2 ;Convert to lower case if set, else to upper case\r
0c4244e5 71\r
c486c4da 72;-------------------------------------------------------------------------------\r
1d3941c8 73\r
0c4244e5 74ddtz_base:\r
c788b3b7 75 jp ddtz_bdos\r
0c4244e5 76l0003h:\r
c788b3b7 77 rst 30h\r
4bb547a7 78di_or_ei:\r
c788b3b7
L
79 nop\r
80 ret\r
81ddtz_bdos:\r
82 jp 0\r
c486c4da
L
83screen_width:\r
84 db 80\r
85symlen_max:\r
86 db 16\r
87\r
88symattrib:\r
89 db 0\r
90\r
0c4244e5 91\r
899547a8
L
92current_cseg defl $ - current_cseg\r
93 .phase current_phase + current_cseg\r
94signon:\r
8bc5ea22
L
95 db 'Symbolic DDTZ/180'\r
96 db ' - Version '\r
97 maclib version.inc\r
98 defvers\r
99 db CR,LF,'$'\r
899547a8
L
100msgz80:\r
101 db 'Z80 or better required!',cr,lf,'$'\r
102\r
103current_phase defl $\r
104 .dephase\r
105current_cseg defl $\r
106 ds STACK_SIZE - (current_phase - signon)\r
107\r
0c4244e5
L
108\r
109stack:\r
9bed91b3
L
110reg.l2: db 000h\r
111reg.h2: db 000h\r
112reg.e2: db 000h\r
113reg.d2: db 000h\r
114reg.c2: db 000h\r
115reg.b2: db 000h\r
116reg.f2: db 000h\r
117reg.a2: db 000h\r
118l004eh: db 000h\r
119reg.i: db 000h\r
120reg.iy: dw 0000h\r
121reg.ix: dw 0000h\r
122reg.f: db 000h\r
123reg.a: db 000h\r
124reg.c: db 000h\r
125reg.b: db 000h\r
126reg.e: db 000h\r
127reg.d: db 000h\r
128reg.l: db 000h\r
129reg.h: db 000h\r
130reg_sp: dw TPA\r
0c4244e5 131reg.iff:\r
9bed91b3
L
132 db 0f3h\r
133 db 0c3h\r
ac35765e
L
134reg.pc: dw TPA\r
135var.$: dw 0000h\r
136var.@: dw 0\r
0c4244e5 137\r
0dc44d17 138error_func:dw p_msg_error\r
9bed91b3 139cmd_rpt:dw mainloop\r
0c4244e5 140\r
9711a430
L
141;-------------------------------------------------------------------------------\r
142\r
0c4244e5 143conbuf:\r
9bed91b3 144 db CONBUF_SIZE\r
0c4244e5 145\r
c788b3b7
L
146 ld sp,stack\r
147 exx\r
148 ld de,ddtz_base\r
149 or a\r
150 sbc hl,de\r
151 add hl,de\r
152 jr c,l0079h\r
153 ex de,hl\r
0c4244e5 154l0079h:\r
c788b3b7 155 ld de,TPA\r
0c4244e5 156l007ch:\r
c788b3b7
L
157 dec hl\r
158 ld (hl),000h\r
159 ld a,h\r
160 sub d\r
161 ld b,a\r
162 ld a,l\r
163 sub e\r
164 or b\r
165 jr nz,l007ch\r
166 ld a,i\r
167 ld (reg.i),a\r
168 ld a,0f3h\r
169 jp po,l0093h\r
170 ld a,0fbh\r
0c4244e5 171l0093h:\r
c788b3b7 172 ld (reg.iff),a\r
4bb547a7 173 call di_or_ei\r
c788b3b7
L
174 ld hl,ddtz_base\r
175 ld l,000h\r
176 ld (reg_sp),hl\r
177 call cpy_fcb2\r
178 ld a,(dfcb1+1)\r
179 cp ' '\r
180 ld hl,0\r
181 call nz,read_file\r
182 jr mainloop\r
0c4244e5
L
183\r
184 ds CONBUF_SIZE + 3 - ($ - conbuf)\r
185\r
9711a430
L
186;-------------------------------------------------------------------------------\r
187\r
ac35765e
L
188CMDTAB:\r
189 dw cmd_@ ;examine/substitute the displacement register @\r
190 dw cmd_A ;Assemble\r
191 dw cmd_B ;Breakpoints display/set/clear\r
192 dw cmd_C ;trace over Calls\r
193 dw cmd_D ;Display memory in hex and ascii\r
194 dw ERROR ;\r
195 dw cmd_F ;specify Filename and command line\r
196 dw cmd_G ;Go\r
197 dw cmd_H ;compute Hex and other expressions\r
198 dw cmd_I ;Input a byte from port\r
199 dw ERROR ;\r
200 dw ERROR ;\r
201 dw cmd_L ;List disassembled code\r
202 dw cmd_M ;Move memory [and verify]\r
203 dw ERROR ;\r
204 dw cmd_O ;Output a byte to port\r
205 dw ERROR ;\r
206 dw cmd_Q ;Qery memory for byte string\r
207 dw cmd_R ;Read binary or hex file and/or symbol file\r
208 dw cmd_S ;Substitute memory\r
209 dw cmd_T ;Trace\r
210 dw ERROR ;\r
211 dw cmd_V ;Verify (compare) two memory areas\r
212 dw cmd_W ;Write a file to disk\r
213 dw cmd_X ;eXamine [and substitute] registers\r
214 dw cmd_Y ;examine [and substitute] Y variables\r
215 dw cmd_Z ;Zap (fill) memory with a byte string\r
216\r
0c4244e5 217mainloop:\r
0716e834 218 ld sp,stack\r
0dc44d17 219 ld hl,p_msg_error\r
ac35765e
L
220 ld (error_func),hl\r
221 ld hl,(reg.pc)\r
222 ld (var.$),hl\r
0716e834
L
223 call bp_clr_temporary\r
224 ld hl,(cmd_rpt)\r
225 ld de,mainloop\r
226 call cp_hl_de\r
227 ld a,'>'\r
228 call outchar\r
229 call nz,outchar\r
230 call z,outbl\r
231 call get_line\r
232 call skipbl\r
233 jr z,exe_hl\r
234 ld hl,mainloop\r
235 ld (cmd_rpt),hl\r
236 inc de\r
237 sub '@'\r
238 jr c,ERROR\r
239 cp 'Z'+1-'@'\r
240 jr nc,ERROR\r
241 add a,a\r
242 ld hl,CMDTAB\r
243 call add_hl_a\r
244 ld a,(hl)\r
245 inc hl\r
246 ld h,(hl)\r
247 ld l,a\r
248 jr exe_hl\r
ac35765e 249\r
0c4244e5 250ERROR:\r
ac35765e 251 ld hl,(error_func)\r
0c4244e5 252exe_hl:\r
0716e834
L
253 call CALL_HL\r
254 jr mainloop\r
0c4244e5 255\r
9711a430
L
256;-------------------------------------------------------------------------------\r
257\r
0dc44d17 258p_msg_error:\r
37ade8ec
L
259 call pstr_inl\r
260 dc '?'\r
ac35765e
L
261 ;fall thru\r
262crlf:\r
37ade8ec
L
263 call pstr_inl\r
264 db CR,LF+80h\r
ac35765e 265 call inchar\r
ac35765e
L
266 ld a,0\r
267 ld (con_col),a\r
268 jr c,mainloop\r
269 ret\r
270\r
0c4244e5 271out.hl.@:\r
0716e834
L
272 call out_hl\r
273 push de\r
274 push hl\r
ac35765e 275 ld de,(var.@)\r
0716e834
L
276 ld a,d\r
277 or e\r
278 jr z,l01bfh\r
279 call outbl\r
37ade8ec
L
280 call pstr_inl\r
281 dc '@'\r
0716e834
L
282 and a\r
283 sbc hl,de\r
284 call out_hl\r
0c4244e5 285l01bfh:\r
0716e834
L
286 pop hl\r
287 pop de\r
288 ret\r
3f9577cd 289\r
0c4244e5 290sub_01d9h:\r
37ade8ec
L
291 call pstr_inl\r
292 dc '-'\r
0716e834
L
293 dec hl\r
294 jp cpl.hl\r
0c4244e5
L
295\r
296out_hl_dec_neg:\r
0716e834
L
297 push hl\r
298 call sub_01d9h\r
d1d6fee5 299 defb 03eh ;ld a,.. swallow push hl\r
0c4244e5 300out.hl.dec:\r
0716e834
L
301 push hl\r
302 ld b,006h\r
303 call sub_01f9h\r
304 pop hl\r
37ade8ec
L
305 call pstr_inl\r
306 dc '.'\r
0c4244e5 307l01f3h:\r
0716e834
L
308 call outbl\r
309 djnz l01f3h\r
310 ret\r
8bc5ea22 311\r
0c4244e5 312sub_01f9h:\r
0716e834
L
313 dec b\r
314 push de\r
315 ld de,10\r
316 call div_hl_de\r
317 ld a,h\r
318 or l\r
319 call nz,sub_01f9h\r
320 ld a,e\r
321 pop de\r
322 jr out_dgt\r
0c4244e5
L
323\r
324out_hl_neg:\r
0716e834
L
325 push hl\r
326 call sub_01d9h\r
327 call out_hl\r
328 pop hl\r
329 ret\r
0c4244e5
L
330\r
331out_hl:\r
0716e834
L
332 ld a,h\r
333 call out_hex\r
334 ld a,l\r
0c4244e5
L
335\r
336out_hex:\r
0716e834
L
337 push af\r
338 rra\r
339 rra\r
340 rra\r
341 rra\r
342 call out_dgt\r
343 pop af\r
0c4244e5
L
344\r
345out_dgt:\r
f81f70a9
L
346 or 0f0h\r
347 daa\r
348 add a,0a0h\r
349 adc a,040h\r
0716e834 350 jr outchar\r
5023df4f 351\r
01cb8973
L
352out.bin.w:\r
353 ld a,h\r
354 call out.bin.b\r
355 ld a,l\r
356out.bin.b:\r
357 ld b,8\r
358l01c9h:\r
d1d6fee5
L
359 rlca\r
360 push af\r
361 ld a,'0'/2\r
362 adc a,a\r
363 call outchar\r
01cb8973
L
364 pop af\r
365 djnz l01c9h\r
366 ld a,'"'\r
367 jr outchar\r
368\r
0c4244e5 369out.ascii:\r
d24eec89
L
370 push bc\r
371 ld c,a\r
0716e834
L
372 res 7,a\r
373 cp ' '\r
5023df4f
L
374 push af\r
375 call nc,outbl\r
376 call outquote\r
377 pop af\r
0716e834
L
378 jr nc,l0242h\r
379 sub 0c0h\r
d24eec89 380 ld b,a\r
37ade8ec
L
381 call pstr_inl\r
382 dc '^'\r
d24eec89 383 ld a,b\r
0c4244e5 384l0242h:\r
0716e834 385 call outchar\r
0716e834
L
386 cp ''''\r
387 call z,outchar\r
0716e834 388 call outquote\r
d24eec89
L
389 sla c\r
390 pop bc\r
391 ret nc\r
0716e834 392 ld a,'.'\r
d24eec89 393 jr outchar\r
646e8b05 394\r
01cb8973
L
395outbl6:\r
396 call outbl2\r
397outbl4:\r
398 call outbl2\r
399outbl2:\r
400 call outbl\r
401outbl:\r
402 ld a,' '\r
403 jr outchar\r
404\r
0c4244e5 405outquote:\r
0716e834 406 ld a,''''\r
0c4244e5 407outchar:\r
85b57f2a
L
408 push ix\r
409 push iy\r
0716e834
L
410 push hl\r
411 push de\r
412 push bc\r
413 push af\r
414 and 07fh\r
415 ld e,a\r
416 ld c,BDOS_COUT\r
417 call ddtz_bdos\r
418 ld hl,con_col\r
419 inc (hl)\r
420 pop af\r
421 pop bc\r
422 pop de\r
423 pop hl\r
85b57f2a
L
424 pop iy\r
425 pop ix\r
0716e834 426 ret\r
9bed91b3 427\r
01cb8973 428pstr:\r
01cb8973
L
429 ld a,(hl)\r
430 inc hl\r
431 and a\r
432 ret z\r
433 call outchar\r
01cb8973
L
434 and a\r
435 ret m\r
37ade8ec 436 jr pstr\r
01cb8973
L
437\r
438pstr_inl:\r
439 ex (sp),hl\r
440 call pstr\r
441 ex (sp),hl\r
442 ret\r
443\r
08d0db09
L
444p_align_@_sym:\r
445 push de\r
446 ld de,(var.@)\r
447 ld a,d\r
448 or e\r
449 pop de\r
c486c4da 450 ld a,(symlen_cur)\r
08d0db09
L
451 jr z,$+4\r
452 add a,6\r
453 add a,c\r
454 ld c,a\r
455p_goto_col:\r
8bc5ea22
L
456 ld a,(con_col)\r
457 cp c\r
08d0db09
L
458 ret nc\r
459 ret z\r
460 call outbl\r
461 jr p_goto_col\r
462\r
9711a430 463;-------------------------------------------------------------------------------\r
8bc5ea22 464\r
0c4244e5 465inchar:\r
1d3941c8 466 push ix\r
0716e834
L
467 push hl\r
468 push de\r
469 push bc\r
470 ld c,BDOS_CSTAT\r
471 call ddtz_bdos\r
472 and a\r
473 jr z,l0284h\r
474 ld c,BDOS_CIN\r
475 call ddtz_bdos\r
476 scf\r
0c4244e5 477l0284h:\r
0716e834
L
478 pop bc\r
479 pop de\r
480 pop hl\r
1d3941c8 481 pop ix\r
0716e834 482 ret\r
ac35765e 483\r
01cb8973
L
484get_line:\r
485 push hl\r
486 ld de,conbuf\r
487 ld c,BDOS_CBUF\r
488 call ddtz_bdos\r
489 call crlf\r
0c461f1d
L
490 ld hl,conbuf+1\r
491 ld e,(hl)\r
492 xor a\r
493 ld d,a\r
494 inc hl\r
495 ex de,hl\r
496 add hl,de\r
497 ld (hl),a\r
01cb8973 498 pop hl\r
d1f2492e
L
499 ret\r
500\r
9711a430
L
501;-------------------------------------------------------------------------------\r
502\r
0c461f1d
L
503get_char_upper:\r
504 ld a,(de)\r
01cb8973
L
505toupper:\r
506 cp 'a'\r
507 ret c\r
508 cp 'z'+1\r
1d3941c8
L
509 ccf\r
510 ret c\r
01cb8973 511 and 05fh\r
0716e834 512 ret\r
0c4244e5 513\r
1d3941c8
L
514tolower:\r
515 cp 'A'\r
516 ret c\r
517 cp 'Z'+1\r
518 ccf\r
519 ret c\r
520 or 020h\r
521 ret\r
522\r
9711a430
L
523;-------------------------------------------------------------------------------\r
524\r
0c4244e5 525skipbl0:\r
0716e834 526 inc de\r
0c4244e5 527skipbl:\r
0c461f1d 528 call get_char_upper\r
c9b3681c 529 call test_whitespace\r
0716e834
L
530 jr z,skipbl0\r
531 or a\r
532 ret\r
0c4244e5
L
533\r
534next_arg:\r
0716e834
L
535 call skipbl\r
536 cp ','\r
537 ret nz\r
538 inc de\r
539 call skipbl\r
540 cp a\r
541 ret\r
0c4244e5
L
542\r
543assert_eol:\r
0716e834
L
544 call skipbl\r
545 ret z\r
0c4244e5 546to_error:\r
0716e834 547 jp ERROR\r
0c4244e5 548\r
9711a430
L
549;-------------------------------------------------------------------------------\r
550\r
85b57f2a 551chk_stack:\r
0716e834
L
552 push hl\r
553 push de\r
554 ld hl,0\r
555 add hl,sp\r
0dc44d17 556 ld de,stack-(STACK_SIZE-28)\r
0716e834
L
557 call cp_hl_de\r
558 pop de\r
559 pop hl\r
560 jr c,to_error\r
561 ret\r
0c4244e5 562\r
9711a430
L
563;-------------------------------------------------------------------------------\r
564\r
01cb8973
L
565add_hl_a:\r
566 add a,l\r
567 ld l,a\r
568 ret nc\r
569 inc h\r
570 ret\r
571\r
0c4244e5 572cp_hl_de:\r
0716e834
L
573 and a\r
574 sbc hl,de\r
575 add hl,de\r
576 ret\r
0c4244e5 577\r
b772ed31
L
578sub_hl_a1:\r
579 dec hl\r
580sub_hl_a:\r
581 push bc\r
582 ld c,a\r
583 ld b,0\r
584 or a\r
585 sbc hl,bc\r
586 pop bc\r
587 ret\r
588\r
9711a430
L
589;-------------------------------------------------------------------------------\r
590\r
b772ed31
L
591sym_getname:\r
592 push de\r
593 push hl\r
594 ld hl,ddtz_base+2\r
595sgn_l:\r
596 ld d,(hl)\r
597 dec hl\r
598 ld e,(hl)\r
599 dec hl\r
600 ld a,(hl)\r
601 cp 0c3h\r
602 jr z,sgn_e\r
603\r
604 ex (sp),hl\r
605 call cp_hl_de\r
606 jr z,sgn_e\r
607 ex (sp),hl\r
608 call sub_hl_a1\r
609 jr sgn_l\r
610sgn_e:\r
611 sub 0c3h\r
612 pop hl\r
613 pop de\r
614 ret\r
615\r
616p_symstr:\r
617 push bc\r
618 ld b,(hl)\r
619pss_l:\r
620 dec hl\r
621 ld a,(hl)\r
622 call outchar\r
623 djnz pss_l\r
2d914eb7 624 dec hl\r
b772ed31
L
625 pop bc\r
626 ret\r
627\r
08d0db09 628p_symbol:\r
b772ed31
L
629 if 0\r
630 ld a,(dash_flag)\r
631 or a\r
632 ret nz\r
633 endif\r
b772ed31 634 push hl\r
b772ed31 635 call sym_getname\r
08d0db09 636 call nz,p_symstr\r
b772ed31
L
637 pop hl\r
638 ret\r
639\r
640p_label:\r
641 if 0\r
642 ld a,(dash_flag)\r
643 or a\r
644 ret nz\r
645 endif\r
646 push hl\r
647 call sym_getname\r
648 jr z,pl_e\r
649 call p_symstr\r
37ade8ec
L
650 call pstr_inl\r
651 dc ':'\r
b772ed31
L
652 call crlf\r
653pl_e:\r
654 pop hl\r
655 ret\r
656\r
9711a430
L
657;-------------------------------------------------------------------------------\r
658\r
0c4244e5 659lookupch:\r
0716e834 660 ld b,0\r
0c4244e5 661l02f5h:\r
0716e834
L
662 ld a,(hl)\r
663 and a\r
664 ret z\r
0c461f1d 665 call get_char_upper\r
0716e834
L
666 cp (hl)\r
667 jr z,l0300h\r
668 inc hl\r
669 inc b\r
670 jr l02f5h\r
0c4244e5 671l0300h:\r
0716e834
L
672 scf\r
673 inc de\r
674 ret\r
0c4244e5
L
675\r
676sub_0303h:\r
f81f70a9 677 ld hl,t_reg_names\r
0716e834
L
678 ld b,07fh\r
679 jr l030ch\r
b0b4005c 680\r
0c4244e5 681sub_030ah:\r
0716e834 682 ld b,0ffh\r
0c4244e5 683l030ch:\r
0716e834
L
684 inc b\r
685 ld a,(hl)\r
686 and a\r
687 ret z\r
688 call sub_031ch\r
689 jr nc,l030ch\r
690 res 7,b\r
691 ret\r
0c4244e5
L
692\r
693sub_0318h:\r
0716e834
L
694 push bc\r
695 res 7,b\r
0c461f1d 696 defb 03eh ;ld a,nn\r
0c4244e5 697sub_031ch:\r
0716e834
L
698 push bc\r
699 push de\r
0c4244e5 700l031eh:\r
0c461f1d 701 call get_char_upper\r
0716e834
L
702 xor (hl)\r
703 and 07fh\r
704 jr nz,l0336h\r
705 bit 7,(hl)\r
706 inc hl\r
707 inc de\r
708 jr z,l031eh\r
709 scf\r
710 bit 7,b\r
711 call z,sub_060ch\r
712 jr nc,l0339h\r
713 pop af\r
714 scf\r
715 pop bc\r
716 ret\r
0c4244e5 717l0336h:\r
0716e834 718 call sub_0345h\r
0c4244e5 719l0339h:\r
0716e834
L
720 pop de\r
721 and a\r
722 pop bc\r
723 ret\r
646e8b05
L
724\r
725sel_dc_string:\r
0716e834 726 inc b\r
0c4244e5 727l033eh:\r
0716e834
L
728 dec b\r
729 ret z\r
730 call sub_0345h\r
731 jr l033eh\r
646e8b05 732\r
0c4244e5 733sub_0345h:\r
0716e834
L
734 ld a,(hl)\r
735 and a\r
736 ret z\r
0c4244e5 737l0348h:\r
0716e834
L
738 ld a,(hl)\r
739 inc hl\r
740 and a\r
741 ret m\r
742 jr l0348h\r
646e8b05 743\r
0c4244e5 744sub_034eh:\r
0716e834
L
745 call get_arg_range\r
746 push hl\r
747 push bc\r
748 call next_arg\r
749 call sub_0363h\r
750 ex de,hl\r
751 pop bc\r
752 pop hl\r
753 ret\r
0c4244e5
L
754\r
755sub_035dh:\r
0716e834
L
756 call expr\r
757 jr c,error0\r
758 ret\r
0c4244e5
L
759\r
760sub_0363h:\r
0716e834 761 call sub_035dh\r
0c4244e5 762l0366h:\r
0716e834 763 jp assert_eol\r
0c4244e5
L
764\r
765get_lastarg_def:\r
0716e834
L
766 call get_arg_def\r
767 jr l0366h\r
b0b4005c 768\r
0c4244e5 769get_arg_def:\r
0716e834
L
770 push hl\r
771 call expr\r
772 jr c,l0375h\r
773 ex (sp),hl\r
0c4244e5 774l0375h:\r
0716e834
L
775 pop hl\r
776 ret\r
b0b4005c 777\r
0c4244e5 778sub_0377h:\r
0716e834
L
779 call b_037c_start\r
780 jr l0366h\r
0c4244e5
L
781\r
782b_037c_start:\r
d1d6fee5 783 defb 0e6h ;and a,.. clear carry\r
0c4244e5 784get_arg_range:\r
0716e834
L
785 scf\r
786 ex af,af'\r
787 push bc\r
788 push hl\r
789 call expr\r
790 jr nc,l038ch\r
791 ex af,af'\r
792 jr c,error0\r
793 ex af,af'\r
794 pop hl\r
d1d6fee5 795 defb 03eh ;ld a,.. swallow pop af\r
0c4244e5 796l038ch:\r
0716e834
L
797 pop af\r
798 call get_range\r
799 jr nc,l0398h\r
800 ex af,af'\r
801 pop bc\r
802 ret nc\r
0c4244e5 803error0:\r
0716e834 804 jp ERROR\r
0c4244e5 805l0398h:\r
0716e834
L
806 pop af\r
807 ret\r
0c4244e5 808\r
b0b4005c 809get_range:\r
0716e834
L
810 call next_arg\r
811 cp 'S'\r
812 jr nz,l03a2h\r
813 inc de\r
0c4244e5 814l03a2h:\r
0716e834 815 push hl\r
85b57f2a 816 push af ;'S' flag\r
0716e834
L
817 call expr\r
818 jr c,l03b8h\r
819 ld b,h\r
820 ld c,l\r
821 pop af\r
822 pop hl\r
85b57f2a 823 jr z,l03b6h ;'S'?\r
0716e834
L
824 ld a,c\r
825 sub l\r
826 ld c,a\r
827 ld a,b\r
828 sbc a,h\r
829 ld b,a\r
830 inc bc\r
0c4244e5 831l03b6h:\r
0716e834
L
832 and a\r
833 ret\r
0c4244e5 834l03b8h:\r
0716e834
L
835 pop af\r
836 pop hl\r
85b57f2a 837 jr z,error0 ;'S', but no expression following\r
0716e834
L
838 scf\r
839 ret\r
0c4244e5 840\r
9711a430
L
841;-------------------------------------------------------------------------------\r
842\r
0c4244e5 843expr:\r
0716e834 844 call skipbl\r
0c4244e5 845expr1:\r
0716e834
L
846 call do_subexpr\r
847 ret c\r
848 call do_rel_op\r
849 ret nc\r
850 push bc\r
851 push hl\r
852 call do_subexpr\r
853 jr c,error0\r
854 ex de,hl\r
855 ex (sp),hl\r
856 and a\r
857 sbc hl,de\r
858 ld hl,0ffffh\r
859 pop de\r
860 ret\r
0c4244e5 861\r
9711a430
L
862;-------------------------------------------------------------------------------\r
863\r
0c4244e5 864do_op_eq:\r
0716e834
L
865 jr z,l03edh\r
866 jr l03ech\r
0c4244e5 867do_op_ne:\r
0716e834
L
868 jr nz,l03edh\r
869 jr l03ech\r
0c4244e5 870do_op_le:\r
0716e834 871 jr z,l03edh\r
0c4244e5 872do_op_lt:\r
0716e834
L
873 jr c,l03edh\r
874 jr l03ech\r
0c4244e5 875do_op_gt:\r
0716e834 876 jr z,l03ech\r
0c4244e5 877do_op_ge:\r
0716e834 878 jr nc,l03edh\r
0c4244e5 879l03ech:\r
0716e834 880 inc hl\r
0c4244e5 881l03edh:\r
0716e834
L
882 and a\r
883 ret\r
0c4244e5 884do_rel_op:\r
0716e834
L
885 push hl\r
886 ld hl,tab_eq_le_ge\r
887 call lookupch\r
888 jr nc,l041dh\r
889 ld a,b\r
890 or a\r
891 jr z,l0411h\r
892 ld a,(de)\r
893 cp '='\r
894 jr nz,l0406h\r
895 inc de\r
896 inc b\r
897 inc b\r
898 jr l0411h\r
0c4244e5 899l0406h:\r
0716e834
L
900 bit 0,b\r
901 jr z,l0411h\r
902 cp '>'\r
903 jr nz,l0411h\r
904 inc de\r
905 ld b,005h\r
0c4244e5 906l0411h:\r
0716e834
L
907 ld hl,tab_func_eqlege\r
908 ld a,b\r
909 add a,a\r
910 call add_hl_a\r
911 ld c,(hl)\r
912 inc hl\r
913 ld b,(hl)\r
914 scf\r
0c4244e5 915l041dh:\r
0716e834
L
916 pop hl\r
917 ret\r
0c4244e5
L
918\r
919tab_eq_le_ge:\r
920 db '=<>',0\r
921\r
922tab_func_eqlege:\r
0716e834
L
923 dw do_op_eq\r
924 dw do_op_lt\r
925 dw do_op_gt\r
926 dw do_op_le\r
927 dw do_op_ge\r
928 dw do_op_ne\r
0c4244e5
L
929\r
930do_subexpr:\r
0716e834
L
931 call do_factor\r
932 ret c\r
0c4244e5 933l0433h:\r
0716e834
L
934 call do_binary_op\r
935 push hl\r
936 push bc\r
937 call do_factor\r
938 pop bc\r
939 ex de,hl\r
940 ex (sp),hl\r
941 jr nc,l0447h\r
942 pop de\r
943 ld a,b\r
944 or c\r
945 ret z\r
946 jp ERROR\r
0c4244e5
L
947\r
948l0447h:\r
0716e834
L
949 ld a,b\r
950 or c\r
951 push bc\r
952 ret nz\r
953 pop bc\r
0c4244e5
L
954\r
955doop_add:\r
0716e834 956 add hl,de\r
0c4244e5 957l044dh:\r
0716e834
L
958 pop de\r
959 jr l0433h\r
0c4244e5
L
960\r
961doop_sub:\r
0716e834
L
962 and a\r
963 sbc hl,de\r
964 jr l044dh\r
0c4244e5
L
965\r
966doop_mlt:\r
0716e834
L
967 push bc\r
968 ld b,h\r
969 ld c,l\r
970 ld hl,0\r
971 ld a,010h\r
0c4244e5 972l045dh:\r
0716e834
L
973 add hl,hl\r
974 ex de,hl\r
975 add hl,hl\r
976 ex de,hl\r
977 jr nc,l0464h\r
978 add hl,bc\r
0c4244e5 979l0464h:\r
0716e834
L
980 dec a\r
981 jr nz,l045dh\r
982 pop bc\r
983 jr l044dh\r
0c4244e5
L
984\r
985doop_div:\r
0716e834
L
986 call div_hl_de\r
987 jr l044dh\r
0c4244e5
L
988\r
989doop_mod:\r
0716e834
L
990 call div_hl_de\r
991 ex de,hl\r
992 jr l044dh\r
0c4244e5
L
993\r
994; divide x/y\r
995; hl: x\r
996; de: y\r
997; return:\r
998; hl: q (x/y)\r
999; de: r (x%y)\r
1000\r
1001div_hl_de:\r
f33961b5
L
1002 push bc\r
1003 ex de,hl ;de: x\r
1004 ld b,h ;bc: y\r
1005 ld c,l\r
1006 ld hl,0 ;hl: r\r
1007 ld a,16\r
0c4244e5
L
1008\r
1009; de: x (x shifted out, q shifted in)\r
1010; bc: y\r
1011; hl: r (initially 0)\r
1012\r
f33961b5
L
1013div_lp:\r
1014 ex de,hl\r
1015 add hl,hl ;x <<= 1\r
1016 ex de,hl\r
1017 adc hl,hl ;r <<= 1\r
1018 inc de\r
1019 or a\r
1020 sbc hl,bc\r
1021 jr nc,div_norestore\r
1022 dec de\r
1023 add hl,bc\r
1024div_norestore:\r
1025 dec a\r
1026 jr nz,div_lp\r
1027 ex de,hl\r
1028 pop bc\r
0716e834 1029 ret\r
0c4244e5
L
1030\r
1031doop_and:\r
0716e834
L
1032 ld a,h\r
1033 and d\r
1034 ld h,a\r
1035 ld a,l\r
1036 and e\r
1037 ld l,a\r
1038 jr l044dh\r
0c4244e5
L
1039\r
1040doop_or:\r
0716e834
L
1041 ld a,h\r
1042 or d\r
1043 ld h,a\r
1044 ld a,l\r
1045 or e\r
1046 ld l,a\r
1047 jr l044dh\r
0c4244e5
L
1048\r
1049doop_xor:\r
0716e834
L
1050 ld a,h\r
1051 xor d\r
1052 ld h,a\r
1053 ld a,l\r
1054 xor e\r
1055 ld l,a\r
1056 jr l044dh\r
0c4244e5
L
1057\r
1058do_binary_op:\r
0716e834
L
1059 push hl\r
1060 ld hl,tab_op_a\r
1061 call lookupch\r
1062 ld a,b\r
1063 ld hl,tblf_opa\r
1064 add a,a\r
1065 call add_hl_a\r
1066 ld c,(hl)\r
1067 inc hl\r
1068 ld b,(hl)\r
1069 pop hl\r
1070 ret\r
0c4244e5
L
1071\r
1072tab_op_a:\r
1073 DB '+-*/%&!#',0\r
1074\r
1075tblf_opa:\r
0716e834
L
1076 dw doop_add\r
1077 dw doop_sub\r
1078 dw doop_mlt\r
1079 dw doop_div\r
1080 dw doop_mod\r
1081 dw doop_and\r
1082 dw doop_or\r
1083 dw doop_xor\r
1084 dw 0\r
0c4244e5 1085\r
9711a430
L
1086;-------------------------------------------------------------------------------\r
1087\r
0c4244e5 1088fact_factor:\r
0716e834
L
1089 call do_factor\r
1090 ret nc\r
1091 jp ERROR\r
0c4244e5
L
1092\r
1093do_factor:\r
85b57f2a 1094 call chk_stack\r
0716e834
L
1095 call get.number\r
1096 ret nc\r
1097 inc de\r
1098 ld hl,(BDOS+1)\r
1099 cp 'T'\r
1100 ret z\r
1101 ld hl,(high_load)\r
1102 cp 'H'\r
1103 ret z\r
1104 ld hl,(max_load)\r
1105 cp 'M'\r
1106 ret z\r
1107 ld hl,TPA\r
1108 cp 'L'\r
1109 ret z\r
ac35765e 1110 ld hl,(var.@)\r
0716e834
L
1111 cp '@'\r
1112 ret z\r
ac35765e 1113 ld hl,(var.$)\r
0716e834
L
1114 cp '$'\r
1115 ret z\r
1d3941c8
L
1116 ld hl,ddtz_base\r
1117 cp 'Z'\r
1118 ret z\r
0716e834
L
1119 cp '-'\r
1120 jr z,fact_factneg\r
1121 cp '~'\r
1122 jr z,fact_factinv\r
1123 cp '+'\r
1124 jr z,fact_factor\r
1125 cp '^'\r
1126 jr z,fact_reg.CPU\r
1127 cp 'Y'\r
1128 jr z,fact_reg.Y\r
1129 cp '('\r
1130 jr z,fact_mem\r
1131 cp '['\r
3a4deef9 1132 jr z,expr_brckt\r
0716e834
L
1133 cp ''''\r
1134 jr z,fact_factstring\r
3a4deef9
L
1135 cp '.'\r
1136 jr z,fact_symbol\r
0716e834
L
1137 dec de\r
1138 scf\r
1139 ret\r
0c4244e5 1140\r
9711a430
L
1141;-------------------------------------------------------------------------------\r
1142\r
0c4244e5 1143fact_reg.Y:\r
0716e834 1144 call get.decdigit\r
30673dea 1145 jr c,error1\r
0716e834 1146 inc de\r
4903b8b8 1147get_y_val:\r
0716e834
L
1148 add a,a\r
1149 ld hl,reg_Y\r
1150 call add_hl_a\r
1151 ld a,(hl)\r
1152 inc hl\r
1153 ld h,(hl)\r
1154 ld l,a\r
1155 and a\r
1156 ret\r
0c4244e5
L
1157\r
1158fact_factstring:\r
0716e834 1159 ld hl,0\r
0c4244e5 1160l054bh:\r
0716e834
L
1161 ld a,(de)\r
1162 cp ''''\r
1163 jr z,l0557h\r
1164 and a\r
1165 ret z\r
0c4244e5 1166l0552h:\r
0716e834
L
1167 ld h,l\r
1168 ld l,a\r
1169 inc de\r
1170 jr l054bh\r
0c4244e5 1171l0557h:\r
0716e834
L
1172 inc de\r
1173 ld a,(de)\r
1174 cp ''''\r
1175 jr z,l0552h\r
1176 sub '.'\r
1177 or a\r
1178 ret nz\r
1179 inc de\r
1180 set 7,l\r
1181 ret\r
0c4244e5
L
1182\r
1183fact_reg.CPU:\r
0716e834 1184 call sub_0caeh\r
30673dea 1185 jr nc,error1\r
0716e834
L
1186 ld a,(hl)\r
1187 inc hl\r
1188 ld h,(hl)\r
1189 ld l,a\r
1190 and a\r
1191 bit 0,c\r
1192 ret nz\r
1193 ld h,000h\r
1194 ret\r
0c4244e5
L
1195\r
1196fact_factneg:\r
0716e834
L
1197 call fact_factor\r
1198 dec hl\r
0c4244e5 1199cpl.hl:\r
0716e834
L
1200 ld a,h\r
1201 cpl\r
1202 ld h,a\r
1203 ld a,l\r
1204 cpl\r
1205 ld l,a\r
1206 ret\r
0c4244e5
L
1207\r
1208fact_factinv:\r
0716e834
L
1209 call fact_factor\r
1210 jr cpl.hl\r
0c4244e5
L
1211\r
1212fact_mem:\r
0716e834 1213 call expr1\r
30673dea 1214 jr c,error1\r
0716e834
L
1215 ld a,(de)\r
1216 cp ')'\r
30673dea 1217 jr nz,error1\r
0716e834
L
1218 inc de\r
1219 ld a,(hl)\r
1220 inc hl\r
1221 ld h,(hl)\r
1222 ld l,a\r
1223 ld a,(de)\r
1224 inc de\r
1225 cp '.'\r
1226 ret z\r
1227 dec de\r
1228 xor a\r
1229 ld h,a\r
1230 ret\r
0c4244e5
L
1231\r
1232expr_brckt:\r
0716e834 1233 call expr1\r
30673dea 1234 jr c,error1\r
0716e834
L
1235 ld a,(de)\r
1236 cp ']'\r
1237 inc de\r
1238 ret z\r
30673dea 1239error1:\r
0716e834 1240 jp ERROR\r
0c4244e5 1241\r
3a4deef9
L
1242fact_symbol:\r
1243 push bc\r
b9ba3380 1244 ld hl,ddtz_base ;symtbl start\r
c486c4da
L
1245 ld a,(symattrib)\r
1246 ld c,07fh\r
1247 rra\r
1248 jr c,fs_nxtsym\r
1249 res 5,c\r
3a4deef9
L
1250\r
1251fs_nxtsym:\r
1252 ld a,(hl) ;symlen\r
1253 cp 0c3h\r
30673dea 1254 jr z,error1\r
b9ba3380 1255 ld b,a ;symlen\r
3a4deef9 1256 inc b\r
b9ba3380
L
1257 push hl ;symtbl ptr\r
1258 push de ;inpsym ptr\r
46b2e3c7 1259fs_nxtchar:\r
3a4deef9 1260 ld a,(de)\r
b9ba3380
L
1261 djnz fs_3\r
1262 call test_sym_char\r
3a4deef9 1263 jr z,fs_cont\r
b9ba3380 1264 pop hl ;inpsym ptr (discard)\r
46b2e3c7
L
1265 inc de\r
1266 cp a,':'\r
1267 jr z,fs_cont_1\r
1268 dec de\r
1269\r
b9ba3380
L
1270 pop hl ;symtbl ptr\r
1271 inc hl\r
1272 ld a,(hl) ;symval h\r
1273 inc hl\r
1274 ld h,(hl) ;symval l\r
1275 ld l,a\r
1276 or a ;clear carry\r
1277 pop bc\r
1278 ret\r
46b2e3c7 1279\r
b9ba3380 1280fs_3:\r
3a4deef9
L
1281 inc de\r
1282 dec hl\r
c486c4da
L
1283 xor (hl)\r
1284 and c\r
46b2e3c7 1285 jr z,fs_nxtchar\r
b9ba3380
L
1286fs_cont: ;start over\r
1287 pop de ;inpsym ptr\r
3c019a46 1288fs_cont_1:\r
b9ba3380 1289 pop hl ;symtbl ptr\r
3a4deef9
L
1290 ld a,(hl)\r
1291 add a,3\r
1292 call sub_hl_a\r
1293 jr fs_nxtsym\r
1294\r
9711a430
L
1295;-------------------------------------------------------------------------------\r
1296\r
0c4244e5 1297get.number:\r
0716e834
L
1298 call get.hexdigit\r
1299 ret c\r
1300 push de\r
0c4244e5 1301test_number:\r
0716e834
L
1302 inc de\r
1303 call get.hexdigit\r
1304 jr nc,test_number\r
1305 pop de\r
1306 cp '.'\r
1307 jr z,get_dec_number\r
1308 cp '"'\r
1309 jr z,get_bin_number\r
1310 ld hl,0\r
0c4244e5 1311next_hexdigit:\r
0716e834
L
1312 call get.hexdigit\r
1313 jr c,hexnum_done\r
1314 add hl,hl\r
1315 add hl,hl\r
1316 add hl,hl\r
1317 add hl,hl\r
1318 call add_hl_a\r
1319 inc de\r
1320 jr next_hexdigit\r
0c4244e5
L
1321\r
1322hexnum_done:\r
0716e834
L
1323 xor 'H'\r
1324 ret nz\r
1325 inc de\r
1326 ret\r
0c4244e5
L
1327\r
1328get_bin_number:\r
0716e834 1329 ld hl,0\r
0c4244e5 1330next_bindigit:\r
0716e834 1331 call get.bindigit\r
0c4244e5 1332l05dbh:\r
0716e834
L
1333 inc de\r
1334 jr c,l05e4h\r
1335 add hl,hl\r
1336 call add_hl_a\r
1337 jr next_bindigit\r
0c4244e5 1338l05e4h:\r
0716e834 1339 cp '"'\r
1bfdbe14 1340 jr nz,error11\r
0716e834
L
1341 call get.bindigit\r
1342 jr nc,l05dbh\r
1343 or a\r
1344 ret\r
0c4244e5
L
1345\r
1346get_dec_number:\r
0716e834 1347 ld hl,0\r
0c4244e5 1348next_decdigit:\r
0716e834
L
1349 call get.decdigit\r
1350 inc de\r
1351 jr c,decnum_done\r
1352 push bc\r
1353 add hl,hl\r
1354 ld b,h\r
1355 ld c,l\r
1356 add hl,hl\r
1357 add hl,hl\r
1358 add hl,bc\r
1359 pop bc\r
1360 call add_hl_a\r
1361 jr next_decdigit\r
0c4244e5 1362decnum_done:\r
0716e834
L
1363 cp '.'\r
1364 ret z\r
1bfdbe14 1365error11:\r
0716e834 1366 jp ERROR\r
0c4244e5
L
1367\r
1368sub_060ch:\r
0c461f1d 1369 call get_char_upper\r
d1d6fee5 1370 cp 'Z'+1\r
0716e834 1371 jr l0614h\r
0c4244e5
L
1372\r
1373get.hexdigit:\r
c788b3b7 1374 ld a,(de)\r
0c4244e5 1375hex_digit:\r
0c461f1d 1376 call toupper\r
c788b3b7 1377 cp 'F'+1\r
0c4244e5 1378l0614h:\r
c788b3b7
L
1379 ccf\r
1380 ret c\r
1381 cp 'A'\r
1382 jr c,l061eh\r
1383 sub 'A'-10\r
1384 ret\r
0c4244e5
L
1385\r
1386get.decdigit:\r
0c461f1d 1387 call get_char_upper\r
0c4244e5 1388l061eh:\r
c788b3b7
L
1389 cp '9'+1\r
1390 jr l0625h\r
0c4244e5
L
1391\r
1392get.bindigit:\r
0c461f1d 1393 call get_char_upper\r
c788b3b7 1394 cp '1'+1\r
0c4244e5 1395l0625h:\r
c788b3b7
L
1396 ccf\r
1397 ret c\r
1398 cp '0'\r
1399 ret c\r
1400 sub '0'\r
1401 ret\r
0c4244e5 1402\r
9711a430
L
1403;-------------------------------------------------------------------------------\r
1404\r
25a690e5 1405p_cpustat0:\r
0716e834 1406 call assert_eol\r
25a690e5 1407p_cpustat:\r
0716e834
L
1408 call p_f\r
1409 call outbl2\r
1410 ld hl,b_06e9_start\r
1411 ld de,b_0709_start\r
1412 ld b,6\r
0c4244e5 1413l063eh:\r
0716e834
L
1414 call p_regs\r
1415 djnz l063eh\r
1416 push hl\r
1417 push de\r
ac35765e 1418 ld iy,(reg.pc)\r
0716e834 1419 call p_disas_instr\r
d24eec89
L
1420 pop de\r
1421 ex (sp),hl\r
1422 push af\r
0716e834
L
1423 call crlf\r
1424 call p_f2\r
1425 call outbl2\r
0716e834 1426 ld b,7\r
0c4244e5 1427l065bh:\r
0716e834
L
1428 call p_regs\r
1429 djnz l065bh\r
d24eec89
L
1430 pop af\r
1431 pop hl\r
d24eec89
L
1432 call nz,outbl6\r
1433 call nz,p_offset\r
0716e834 1434 jp crlf\r
0c4244e5 1435\r
25a690e5 1436p_f:\r
0716e834
L
1437 ld a,(reg.f)\r
1438 call p_flags\r
1439 ld a,(reg.iff)\r
1440 cp 0f3h\r
1441 jp z,outbl\r
1442 ld a,'E'\r
1443 jp outchar\r
25a690e5 1444p_f2:\r
0716e834
L
1445 ld a,(reg.f2)\r
1446 call p_flags\r
1447 jp outbl\r
d24eec89 1448\r
25a690e5 1449p_flags:\r
836f48ab
L
1450 push hl\r
1451 ld hl,t_flag_names+7\r
1452 ld c,a\r
1453 ld b,8\r
1454fl_loop:\r
1455 ld a,' '\r
1456 cp (hl)\r
1457 ld a,c\r
1458 rlca\r
1459 ld c,a\r
1460 jr z,fl_skip\r
1461 ld a,(hl)\r
1462 call c,outchar\r
1463 call nc,outbl\r
1464fl_skip:\r
1465 dec hl\r
1466 djnz fl_loop\r
1467 pop hl\r
1468 ret\r
25a690e5
L
1469\r
1470p_regs:\r
0716e834
L
1471 push de\r
1472 call pstr\r
37ade8ec
L
1473 call pstr_inl\r
1474 dc '='\r
0716e834
L
1475 ex (sp),hl\r
1476 ld e,(hl)\r
1477 inc hl\r
1478 ld d,(hl)\r
1479 inc hl\r
1480 ld a,(hl)\r
1481 inc hl\r
1482 push hl\r
1483 and a\r
1484 jr z,l06deh\r
d24eec89
L
1485 ex de,hl\r
1486 ld e,(hl)\r
1487 inc hl\r
1488 ld d,(hl)\r
1489 ex de,hl\r
0716e834
L
1490 dec a\r
1491 jr z,l06d9h\r
1492 call out.hl.@\r
1493 call z,outbl6\r
1494 jr l06e2h\r
0c4244e5 1495l06d9h:\r
0716e834
L
1496 call out_hl\r
1497 jr l06e2h\r
0c4244e5 1498l06deh:\r
0716e834
L
1499 ld a,(de)\r
1500 call out_hex\r
0c4244e5 1501l06e2h:\r
0716e834
L
1502 call outbl\r
1503 pop de\r
1504 pop hl\r
0716e834 1505 ret\r
0c4244e5
L
1506\r
1507b_06e9_start:\r
1508 DC 'A '\r
1509 DC 'BC '\r
1510 DC 'DE '\r
1511 DC 'HL '\r
1512 DC 'SP'\r
1513 DC 'PC'\r
899547a8
L
1514 DC 'a'''\r
1515 DC 'bc'''\r
1516 DC 'de'''\r
1517 DC 'hl'''\r
0c4244e5
L
1518 DC 'IX'\r
1519 DC 'IY'\r
1520 DC 'I'\r
1521 DB 0\r
1522\r
1523b_0709_start:\r
0716e834
L
1524 dw reg.a\r
1525 db 000h\r
1526 dw reg.c\r
1527 db 001h\r
1528 dw reg.e\r
1529 db 001h\r
1530 dw reg.l\r
1531 db 001h\r
1532 dw reg_sp\r
1533 db 001h\r
ac35765e 1534 dw reg.pc\r
0716e834
L
1535 db 002h\r
1536 dw reg.a2\r
1537 db 000h\r
1538 dw reg.c2\r
1539 db 001h\r
1540 dw reg.e2\r
1541 db 001h\r
1542 dw reg.l2\r
1543 db 001h\r
1544 dw reg.ix\r
1545 db 001h\r
1546 dw reg.iy\r
1547 db 001h\r
1548 dw reg.i\r
1549 db 000h\r
1550 db 000h\r
0c4244e5 1551\r
9711a430
L
1552;-------------------------------------------------------------------------------\r
1553; > G [startaddr] [;breakp..]\r
1554; Go [to start] [with temporary breakpoints]\r
1555\r
0c4244e5 1556cmd_G:\r
0716e834
L
1557 sub a\r
1558 ld (trace_call_flag),a\r
4bb547a7 1559 ld (bp_p_cpu_flag),a\r
0716e834
L
1560 call expr\r
1561 jr c,l0740h\r
ac35765e 1562 ld (reg.pc),hl\r
0c4244e5 1563l0740h:\r
0716e834 1564 call skipbl\r
4bb547a7 1565 jr z,user_go0\r
0716e834
L
1566 cp ';'\r
1567 jp nz,ERROR\r
1568 inc de\r
1569 ld a,002h\r
1570 call bp_enter\r
4bb547a7 1571user_go0:\r
0716e834 1572 jp user_go\r
0c4244e5 1573\r
9711a430 1574;-------------------------------------------------------------------------------\r
1bfdbe14
L
1575\r
1576bpl_init:\r
1577 ld b,BP_CNT\r
1578 ld ix,bp_tab\r
1579 ex (sp),hl\r
1580 ld (pbl_loop_adr),hl\r
1581 ex (sp),hl\r
1582 ret\r
1583\r
1584bpl_next:\r
1585 ld de,BP_SIZE\r
81c1eadb 1586 push af\r
1bfdbe14 1587 add ix,de\r
81c1eadb 1588 pop af\r
1bfdbe14
L
1589 dec b\r
1590 ret z\r
1591\r
1592 ex (sp),hl\r
1593 ld hl,(pbl_loop_adr)\r
1594 ex (sp),hl\r
1595 ret\r
1596\r
0c4244e5 1597bp_clr_temporary:\r
1bfdbe14
L
1598 call bpl_init\r
1599\r
0716e834
L
1600 ld a,(ix+000h)\r
1601 and 0f1h\r
1602 ld (ix+000h),a\r
1603 call bp_clr_condition\r
1bfdbe14
L
1604\r
1605 call bpl_next\r
0716e834 1606 ret\r
0c4244e5 1607\r
9711a430
L
1608;-------------------------------------------------------------------------------\r
1609; > B\r
1610; display all breakpoints\r
1611; > B breakp [breakp..]\r
1612; set breakpoints\r
1613; > BX\r
1614; clear all breakpoints\r
1615; > BX address [address..]\r
1616; clear breakpoints\r
1617;\r
1618; where breakp is:\r
1619; [R] expression [I condition]\r
1620\r
0c4244e5 1621cmd_B:\r
0716e834 1622 call skipbl\r
4903b8b8 1623 jr z,bp_print\r
0716e834
L
1624 inc de\r
1625 cp 'X'\r
4903b8b8 1626 jr z,bp_clr0\r
0716e834
L
1627 dec de\r
1628 ld a,001h\r
1629 jp bp_enter\r
81c1eadb 1630\r
4903b8b8 1631bp_clr0:\r
0716e834
L
1632 call skipbl\r
1633 jr z,bp_clr_all\r
4903b8b8 1634bp_clr_next:\r
0716e834
L
1635 call expr\r
1636 jp c,assert_eol\r
1637 push de\r
1638 call bp_clr\r
1639 pop de\r
1640 call next_arg\r
4903b8b8 1641 jr bp_clr_next\r
0c4244e5
L
1642\r
1643bp_clr_all:\r
0716e834 1644 scf\r
0c4244e5 1645bp_clr:\r
1bfdbe14
L
1646 call bpl_init\r
1647\r
0716e834
L
1648 push af\r
1649 jr c,l07a7h\r
1650 ld e,(ix+002h)\r
1651 ld d,(ix+003h)\r
1652 call cp_hl_de\r
1653 jr nz,l07aeh\r
0c4244e5 1654l07a7h:\r
0716e834
L
1655 ld (ix+000h),000h\r
1656 call bp_clr_condition\r
0c4244e5 1657l07aeh:\r
0716e834 1658 pop af\r
1bfdbe14 1659 call bpl_next\r
0716e834 1660 ret\r
0c4244e5 1661\r
4903b8b8 1662bp_print:\r
1bfdbe14
L
1663 call bpl_init\r
1664\r
0716e834 1665 bit 0,(ix+000h)\r
4903b8b8 1666 jr z,bp_pr_cont\r
0716e834
L
1667 ld a,'R'\r
1668 bit 4,(ix+000h)\r
1669 jr nz,l07cdh\r
1670 ld a,' '\r
0c4244e5 1671l07cdh:\r
0716e834
L
1672 call outchar\r
1673 call outbl\r
1674 ld l,(ix+002h)\r
1675 ld h,(ix+003h)\r
1676 call out.hl.@\r
08d0db09
L
1677 call outbl\r
1678 call p_symbol\r
1679 ld c,9\r
1680 call p_align_@_sym\r
4903b8b8
L
1681 call pstr_inl\r
1682 dc ':'\r
0716e834
L
1683 ld l,(ix+004h)\r
1684 ld h,(ix+005h)\r
1685 call out_hl\r
1686 ld l,(ix+006h)\r
1687 ld h,(ix+007h)\r
1688 ld a,h\r
1689 or l\r
1690 jr z,l0805h\r
1691 call outbl4\r
37ade8ec
L
1692 call pstr_inl\r
1693 dc 'I '\r
0716e834 1694 call pstr\r
0c4244e5 1695l0805h:\r
0716e834 1696 call crlf\r
4903b8b8 1697bp_pr_cont:\r
1bfdbe14 1698 call bpl_next\r
0716e834 1699 ret\r
0c4244e5 1700\r
9711a430 1701;-------------------------------------------------------------------------------\r
0c4244e5
L
1702; Add break points to list\r
1703; A = 1 Permanent (B command)\r
1704; A = 2 Temporary (G command)\r
1705\r
1706bp_enter:\r
0716e834
L
1707 ld b,a\r
1708 call skipbl\r
1709 ret z\r
1710 cp 'R'\r
4903b8b8 1711 jr nz,bp_e_1\r
0716e834
L
1712 inc de\r
1713 set 4,b\r
4903b8b8 1714bp_e_1:\r
0716e834
L
1715 push bc\r
1716 call expr\r
1bfdbe14 1717 jr c,error12\r
0716e834
L
1718 pop bc\r
1719 bit 0,b\r
1720 push bc\r
1721 push de\r
1722 push hl\r
1723 call nz,bp_clr\r
1724 pop hl\r
1725 call bp_get_freeslot\r
1726 pop de\r
1727 ld (ix+002h),l\r
1728 ld (ix+003h),h\r
1729 call bp_get_count\r
1730 ld (ix+004h),l\r
1731 ld (ix+005h),h\r
1732 call bp_get_condition\r
1733 ld (ix+006h),l\r
1734 ld (ix+007h),h\r
1735 call next_arg\r
1736 pop af\r
1737 ld (ix+000h),a\r
1738 and 00fh\r
1739 jr bp_enter\r
0c4244e5
L
1740\r
1741bp_get_freeslot:\r
1bfdbe14
L
1742 call bpl_init\r
1743\r
0716e834
L
1744 ld a,(ix+000h)\r
1745 and 00fh\r
1746 ret z\r
1bfdbe14
L
1747\r
1748 call bpl_next\r
1749error12\r
0716e834 1750 jp ERROR\r
0c4244e5
L
1751\r
1752bp_get_count:\r
0716e834
L
1753 call skipbl\r
1754 ld hl,1\r
1755 cp ':'\r
1756 ret nz\r
1757 inc de\r
1758 call expr\r
1bfdbe14 1759 jr c,error12\r
0716e834 1760 ret\r
0c4244e5
L
1761\r
1762bp_get_condition:\r
0716e834
L
1763 call skipbl\r
1764 cp 'I'\r
1765 ld hl,0\r
1766 ret nz\r
1767 inc de\r
1768 call skipbl\r
1769 push de\r
1770 call expr\r
1bfdbe14 1771 jr c,error12\r
0716e834
L
1772 ex de,hl\r
1773 pop de\r
1774 push de\r
1775 sbc hl,de\r
1776 ld b,h\r
1777 ld c,l\r
1778 ld hl,(expr_p1)\r
1779 push hl\r
1780 add hl,bc\r
1781 ld de,expr_bufe\r
1782 call cp_hl_de\r
1bfdbe14 1783 jr nc,error12\r
a768c062
L
1784 pop de\r
1785 pop hl\r
1786 push de\r
0716e834 1787 ldir\r
0716e834 1788 ex de,hl\r
a768c062
L
1789 ld (hl),c ; trailing 0\r
1790 inc hl\r
0716e834 1791 ld (expr_p1),hl\r
a768c062 1792 pop hl\r
0716e834 1793 ret\r
0c4244e5 1794\r
9711a430 1795;-------------------------------------------------------------------------------\r
a768c062 1796; Breakpoint handling routine.\r
9711a430 1797\r
0c4244e5 1798bpddtz:\r
0716e834
L
1799 ld (reg.l),hl\r
1800 pop hl\r
1801 dec hl\r
ac35765e 1802 ld (reg.pc),hl\r
0716e834
L
1803 ld (reg_sp),sp\r
1804 ld sp,reg.l\r
1805 push de\r
1806 push bc\r
1807 push af\r
1808 push ix\r
1809 push iy\r
1810 ld a,i\r
4bb547a7 1811 call di_or_ei\r
0716e834
L
1812 ld h,a\r
1813 ld l,000h\r
1814 push hl\r
4bb547a7 1815 ld a,0f3h ; EI\r
0716e834 1816 jp po,l08dfh\r
4bb547a7 1817 ld a,0fbh ; DI\r
0c4244e5 1818l08dfh:\r
0716e834
L
1819 ld (reg.iff),a\r
1820 ex af,af'\r
1821 push af\r
1822 exx\r
1823 push bc\r
1824 push de\r
1825 push hl\r
4bb547a7 1826 call bp_restore_mem\r
0716e834
L
1827 ld a,(b_21e2_start)\r
1828 dec a\r
1829 jr z,l090bh\r
4bb547a7
L
1830 call inchar ;Keyboard hit?\r
1831 jr c,do_break ;yes\r
0716e834
L
1832 call sub_0913h\r
1833 and a\r
1834 jp z,user_go\r
1835 and 083h\r
1836 jp z,l2151h\r
4bb547a7 1837do_break:\r
0716e834
L
1838 call bp_clr_temporary\r
1839 call p_cpustat\r
1840 jp mainloop\r
0c4244e5
L
1841\r
1842l090bh:\r
0716e834
L
1843 ld (b_21e2_start),a\r
1844 ld c,007h\r
1845 jp l0a41h\r
0c4244e5
L
1846\r
1847sub_0913h:\r
0716e834
L
1848 ld a,080h\r
1849 ex af,af'\r
1850 sub a\r
4bb547a7 1851 ld (bp_p_cpu_flag),a\r
1bfdbe14
L
1852 call bpl_init\r
1853\r
0716e834
L
1854 ld a,(ix+000h)\r
1855 and 007h\r
1856 jr z,l0938h\r
1857 ld e,(ix+002h)\r
1858 ld d,(ix+003h)\r
ac35765e 1859 ld hl,(reg.pc)\r
0716e834
L
1860 call cp_hl_de\r
1861 push bc\r
1862 call z,sub_0942h\r
1863 pop bc\r
0c4244e5 1864l0938h:\r
1bfdbe14
L
1865\r
1866 call bpl_next\r
0716e834
L
1867 ex af,af'\r
1868 ret\r
0c4244e5 1869\r
0c4244e5 1870sub_0942h:\r
0716e834
L
1871 ex af,af'\r
1872 res 7,a\r
1873 ex af,af'\r
1874 ld e,(ix+006h)\r
1875 ld d,(ix+007h)\r
1876 ld a,d\r
1877 or e\r
1878 ld hl,0ffffh\r
1879 call nz,expr\r
1880 ld a,h\r
1881 or l\r
1882 jr z,l0969h\r
1883 ld e,(ix+004h)\r
1884 ld d,(ix+005h)\r
1885 dec de\r
1886 ld a,d\r
1887 or e\r
1888 jr z,l0974h\r
1889 ld (ix+004h),e\r
1890 ld (ix+005h),d\r
0c4244e5 1891l0969h:\r
0716e834
L
1892 bit 4,(ix+000h)\r
1893 ret z\r
1894 ld a,001h\r
4bb547a7 1895 ld (bp_p_cpu_flag),a\r
0716e834 1896 ret\r
0c4244e5 1897l0974h:\r
0716e834
L
1898 ex af,af'\r
1899 or (ix+000h)\r
1900 ex af,af'\r
1901 ret\r
0c4244e5 1902\r
4bb547a7 1903bp_restore_mem:\r
1bfdbe14
L
1904 call bpl_init\r
1905\r
0716e834
L
1906 bit 5,(ix+000h)\r
1907 res 5,(ix+000h)\r
1908 jr z,l099ah\r
1909 ld l,(ix+002h)\r
1910 ld h,(ix+003h)\r
1911 ld a,(l0003h)\r
1912 cp (hl)\r
1913 jr nz,l099ah\r
1914 ld a,(ix+001h)\r
1915 ld (hl),a\r
0c4244e5 1916l099ah:\r
0716e834 1917 res 3,(ix+000h)\r
1bfdbe14
L
1918\r
1919 call bpl_next\r
0716e834 1920 ret\r
0c4244e5 1921\r
4bb547a7 1922bp_tst_@pc:\r
1bfdbe14
L
1923 call bpl_init\r
1924\r
0716e834
L
1925 ld a,(ix+000h)\r
1926 and 003h\r
4a39ae18 1927 jr z,bp_tst_e\r
0716e834
L
1928 ld e,(ix+002h)\r
1929 ld d,(ix+003h)\r
ac35765e 1930 ld hl,(reg.pc)\r
0716e834
L
1931 call cp_hl_de\r
1932 ret z\r
4a39ae18 1933bp_tst_e:\r
1bfdbe14 1934 call bpl_next\r
0716e834
L
1935 sub a\r
1936 inc a\r
1937 ret\r
0c4244e5 1938\r
4bb547a7 1939bp_trace_enter:\r
0716e834
L
1940 call bp_get_freeslot\r
1941 ld (ix+004h),001h\r
1942 ld (ix+005h),000h\r
1943 ld (ix+002h),l\r
1944 ld (ix+003h),h\r
1945 ld (ix+006h),000h\r
1946 ld (ix+007h),000h\r
1947 ld a,(b_21e2_start)\r
1948 and a\r
1949 ld a,008h\r
4a39ae18 1950 jr nz,bp_t_e\r
1d3941c8 1951 rra\r
4a39ae18 1952bp_t_e:\r
0716e834
L
1953 ld (ix+000h),a\r
1954 ret\r
0c4244e5 1955\r
1d3941c8 1956bp_set_to_mem:\r
1bfdbe14
L
1957 call bpl_init\r
1958\r
0716e834
L
1959 ld a,(ix+000h)\r
1960 and c\r
1961 jr z,l0a1dh\r
1962 set 5,(ix+000h)\r
1963 ld l,(ix+002h)\r
1964 ld h,(ix+003h)\r
1965 ld a,(hl)\r
1966 ld (ix+001h),a\r
1967 ld a,(l0003h)\r
1968 ld (hl),a\r
1969 and 038h\r
1970 ld h,000h\r
1971 ld l,a\r
1972 ld (hl),0c3h\r
1973 inc hl\r
1974 ld de,bpddtz\r
1975 ld (hl),e\r
1976 inc hl\r
1977 ld (hl),d\r
0c4244e5 1978l0a1dh:\r
1bfdbe14
L
1979\r
1980 call bpl_next\r
0716e834 1981 ret\r
0c4244e5 1982\r
9711a430
L
1983;-------------------------------------------------------------------------------\r
1984\r
0c4244e5 1985user_go:\r
0716e834
L
1986 sub a\r
1987 ld (b_21e2_start),a\r
4bb547a7 1988 ld a,(bp_p_cpu_flag)\r
0716e834
L
1989 and a\r
1990 call nz,p_cpustat\r
4bb547a7 1991 call bp_tst_@pc\r
0716e834
L
1992 ld c,007h\r
1993 jr nz,l0a41h\r
1994 ld a,001h\r
1995 ld (b_21e2_start),a\r
4a39ae18 1996 call tc_set_bp\r
0716e834 1997 ld c,008h\r
0c4244e5 1998l0a41h:\r
1d3941c8 1999 call bp_set_to_mem\r
0716e834
L
2000 ld sp,reg.l2\r
2001 pop hl\r
2002 pop de\r
2003 pop bc\r
2004 pop af\r
2005 exx\r
2006 ex af,af'\r
2007 pop af\r
2008 ld i,a\r
2009 pop iy\r
2010 pop ix\r
2011 pop af\r
2012 pop bc\r
2013 pop de\r
2014 pop hl\r
2015 ld sp,(reg_sp)\r
2016 jp reg.iff\r
0c4244e5 2017\r
9711a430
L
2018;-------------------------------------------------------------------------------\r
2019\r
0c4244e5 2020bp_clr_condition:\r
0716e834
L
2021 ld a,(ix+000h)\r
2022 and 003h\r
2023 ret nz\r
2024 ld e,(ix+006h)\r
2025 ld d,(ix+007h)\r
2026 ld a,d\r
2027 or e\r
2028 ret z\r
2029 push bc\r
2030 ld h,d\r
2031 ld l,e\r
2032 sub a\r
2033 ld (ix+006h),a\r
2034 ld (ix+007h),a\r
2035 ld bc,0ffffh\r
2036 cpir\r
0c4244e5 2037l0a7dh:\r
0716e834
L
2038 push de\r
2039 ld de,(expr_p1)\r
2040 call cp_hl_de\r
2041 pop de\r
2042 jr nc,l0a93h\r
2043 call sub_0a99h\r
0c4244e5 2044l0a8bh:\r
0716e834
L
2045 ld a,(hl)\r
2046 ldi\r
2047 and a\r
2048 jr nz,l0a8bh\r
2049 jr l0a7dh\r
0c4244e5 2050l0a93h:\r
0716e834
L
2051 ld (expr_p1),de\r
2052 pop bc\r
2053 ret\r
0c4244e5
L
2054\r
2055sub_0a99h:\r
0716e834
L
2056 ld iy,bp_tab\r
2057 push de\r
0c4244e5 2058l0a9eh:\r
0716e834
L
2059 ld e,(iy+006h)\r
2060 ld d,(iy+007h)\r
2061 call cp_hl_de\r
2062 jr z,l0ab0h\r
2063 ld de,BP_SIZE\r
2064 add iy,de\r
2065 jr l0a9eh\r
0c4244e5 2066l0ab0h:\r
0716e834
L
2067 pop de\r
2068 ld (iy+006h),e\r
2069 ld (iy+007h),d\r
2070 ret\r
0c4244e5 2071\r
9711a430
L
2072;-------------------------------------------------------------------------------\r
2073; > Y\r
2074; examine all Y variables\r
2075; > Y[0..9]\r
2076; examine (and substitute) an Y variable\r
2077\r
0c4244e5 2078cmd_Y:\r
0716e834
L
2079 call get.decdigit\r
2080 jr c,l0bc3h\r
2081 inc de\r
2082 push af\r
2083 call assert_eol\r
2084 pop af\r
2085 call sub_0bdch\r
2086 jp l0c15h\r
0c4244e5 2087l0bc3h:\r
0716e834
L
2088 call assert_eol\r
2089 xor a\r
0c4244e5 2090l0bc7h:\r
0716e834
L
2091 push af\r
2092 call sub_0bdch\r
08d0db09 2093 call outbl\r
4903b8b8
L
2094 pop af\r
2095 push af\r
2096 call get_y_val\r
08d0db09 2097 call p_symbol\r
0716e834
L
2098 pop af\r
2099 inc a\r
0716e834 2100 push af\r
08d0db09
L
2101 rra\r
2102 push af\r
2103 ld c,11\r
2104 call c,p_align_@_sym\r
2105 pop af\r
2106 call nc,crlf\r
0716e834
L
2107 pop af\r
2108 cp YREG_CNT\r
2109 jr c,l0bc7h\r
2110 ret\r
0c4244e5
L
2111\r
2112sub_0bdch:\r
0716e834
L
2113 ld c,a\r
2114 ld b,0\r
2115 add a,'0'+080h\r
2116 ld de,msg_Y+1\r
2117 ld (de),a\r
2118 dec de\r
2119 ld hl,reg_Y\r
2120 add hl,bc\r
2121 add hl,bc\r
2122 ex de,hl\r
2123 ld c,003h\r
2124 jp l0c33h\r
0c4244e5 2125\r
9711a430
L
2126;-------------------------------------------------------------------------------\r
2127; > X\r
2128; eXamine (display) all cpu registers and\r
2129; the instruction at the current program counter\r
2130; > X register\r
2131; eXamine (and substitute) a register\r
2132\r
2133\r
0c4244e5 2134cmd_X:\r
0716e834
L
2135 call skipbl\r
2136 call sub_0caeh\r
2137 jp nc,p_cpustat0\r
2138 call assert_eol\r
2139 ld a,b\r
2140 cp 01eh\r
2141 jr z,l0c5fh\r
2142 cp 01fh\r
2143 jr z,l0c4fh\r
2144 cp 01dh\r
2145 jp z,ERROR\r
2146 ex de,hl\r
f81f70a9 2147 ld hl,t_reg_names\r
0716e834 2148 call sel_dc_string\r
0c4244e5 2149l0c12h:\r
0716e834 2150 call l0c33h\r
0c4244e5 2151l0c15h:\r
0716e834
L
2152 call outbl\r
2153 push de\r
2154 push bc\r
2155 call get_line\r
2156 call skipbl\r
2157 jr z,l0c30h\r
2158 call sub_0363h\r
cab0d80a
L
2159 ex de,hl\r
2160 pop bc\r
0716e834 2161 pop hl\r
cab0d80a
L
2162 ld (hl),e\r
2163 bit 0,c\r
0716e834
L
2164 ret z\r
2165 inc hl\r
cab0d80a 2166 ld (hl),d\r
0716e834 2167 ret\r
0c4244e5 2168l0c30h:\r
0716e834
L
2169 pop af\r
2170 pop hl\r
2171 ret\r
d1f2492e 2172\r
0c4244e5 2173l0c33h:\r
0716e834 2174 call pstr\r
37ade8ec
L
2175 call pstr_inl\r
2176 dc '='\r
0716e834 2177 ld a,(de)\r
cab0d80a 2178 bit 0,c\r
0716e834
L
2179 jp z,out_hex\r
2180 ld l,a\r
2181 inc de\r
2182 ld a,(de)\r
2183 dec de\r
2184 ld h,a\r
cab0d80a 2185 bit 1,c\r
0716e834
L
2186 jp z,out_hl\r
2187 jp out.hl.@\r
0c4244e5
L
2188\r
2189l0c4fh:\r
0716e834
L
2190 call p_f\r
2191 ld a,0f3h\r
2192 ld (reg.iff),a\r
2193 scf\r
2194 call sub_0c6ah\r
2195 ld (reg.f),a\r
2196 ret\r
0c4244e5 2197l0c5fh:\r
0716e834
L
2198 call p_f2\r
2199 and a\r
2200 call sub_0c6ah\r
2201 ld (reg.f2),a\r
2202 ret\r
d24eec89 2203\r
0c4244e5 2204sub_0c6ah:\r
d24eec89 2205 push af\r
0716e834
L
2206 call outbl\r
2207 call assert_eol\r
2208 call get_line\r
d24eec89
L
2209 pop af\r
2210 ex af,af'\r
b0451b39 2211 ld b,0\r
0c4244e5 2212l0c76h:\r
0716e834
L
2213 call skipbl\r
2214 ld a,b\r
2215 ret z\r
2216 push bc\r
f81f70a9 2217 ld hl,t_flag_names\r
0716e834
L
2218 call lookupch\r
2219 jp nc,ERROR\r
f81f70a9
L
2220 inc b\r
2221 xor a\r
2222 scf\r
2223nxt_f:\r
2224 rla\r
2225 djnz nxt_f\r
2226 pop bc\r
2227 jr c,l0c97h\r
2228 or b\r
2229 ld b,a\r
0716e834 2230 jr l0c76h\r
f81f70a9 2231\r
0c4244e5 2232l0c97h:\r
0716e834
L
2233 ex af,af'\r
2234 jp nc,ERROR\r
2235 ex af,af'\r
2236 ld a,0fbh\r
2237 ld (reg.iff),a\r
0716e834 2238 jr l0c76h\r
0c4244e5 2239\r
f81f70a9 2240t_flag_names:\r
0c4244e5
L
2241 db 'CNV H ZSE',0\r
2242\r
2243sub_0caeh:\r
0716e834
L
2244 call sub_0303h\r
2245 ret nc\r
2246 ld a,b\r
2247 add a,b\r
2248 add a,b\r
2249 ld hl,b_0cfa_start\r
2250 call add_hl_a\r
2251 ld c,(hl)\r
2252 inc hl\r
2253 ld a,(hl)\r
2254 inc hl\r
2255 ld h,(hl)\r
2256 ld l,a\r
2257 scf\r
2258 ret\r
0c4244e5 2259\r
f81f70a9 2260t_reg_names:\r
0c4244e5
L
2261 DC 'BC'''\r
2262 DC 'DE'''\r
2263 DC 'HL'''\r
2264 DC 'BC'\r
2265 DC 'DE'\r
2266 DC 'HL'\r
2267 DC 'A'''\r
2268 DC 'B'''\r
2269 DC 'C'''\r
2270 DC 'D'''\r
2271 DC 'E'''\r
2272 DC 'H'''\r
2273 DC 'L'''\r
2274 DC 'A'\r
2275 DC 'B'\r
2276 DC 'C'\r
2277 DC 'D'\r
2278 DC 'E'\r
2279 DC 'H'\r
2280 DC 'L'\r
2281 DC 'IX'\r
2282 DC 'IY'\r
2283 DC 'SP'\r
2284 DC 'PC'\r
2285 DC 'X'\r
2286 DC 'Y'\r
2287 DC 'S'\r
2288 DC 'P'\r
2289 DC 'I'\r
2290 DC 'IP'\r
2291 DC 'F'''\r
2292 DC 'F'\r
2293 DB 0\r
2294\r
2295b_0cfa_start:\r
0716e834
L
2296 db 003h\r
2297 dw reg.c2\r
2298 db 003h\r
2299 dw reg.e2\r
2300 db 003h\r
2301 dw reg.l2\r
2302 db 003h\r
2303 dw reg.c\r
2304 db 003h\r
2305 dw reg.e\r
2306 db 003h\r
2307 dw reg.l\r
2308 db 000h\r
2309 dw reg.a2\r
2310 db 000h\r
2311 dw reg.b2\r
2312 db 000h\r
2313 dw reg.c2\r
2314 db 000h\r
2315 dw reg.d2\r
2316 db 000h\r
2317 dw reg.e2\r
2318 db 000h\r
2319 dw reg.h2\r
2320 db 000h\r
2321 dw reg.l2\r
2322 db 000h\r
2323 dw reg.a\r
2324 db 000h\r
2325 dw reg.b\r
2326 db 000h\r
2327 dw reg.c\r
2328 db 000h\r
2329 dw reg.d\r
2330 db 000h\r
2331 dw reg.e\r
2332 db 000h\r
2333 dw reg.h\r
2334 db 000h\r
2335 dw reg.l\r
2336 db 003h\r
2337 dw reg.ix\r
2338 db 003h\r
2339 dw reg.iy\r
2340 db 003h\r
2341 dw reg_sp\r
2342 db 003h\r
ac35765e 2343 dw reg.pc\r
0716e834
L
2344 db 003h\r
2345 dw reg.ix\r
2346 db 003h\r
2347 dw reg.iy\r
2348 db 003h\r
2349 dw reg_sp\r
2350 db 003h\r
ac35765e 2351 dw reg.pc\r
0716e834
L
2352 db 000h\r
2353 dw reg.i\r
2354 db 003h\r
2355 dw l004eh\r
2356 db 000h\r
2357 dw reg.f2\r
2358 db 000h\r
2359 dw reg.f\r
0c4244e5 2360\r
9711a430
L
2361;-------------------------------------------------------------------------------\r
2362; > S [startaddr]\r
2363; Substitute memory\r
2364\r
0c4244e5 2365cmd_S:\r
0716e834
L
2366 ld hl,(last_S)\r
2367 call get_lastarg_def\r
0c4244e5 2368l0d60h:\r
0716e834
L
2369 ld (last_S),hl\r
2370 call out.hl.@\r
2371 call outbl\r
2372 ld a,(hl)\r
2373 call out_hex\r
2374 call outbl2\r
2375 call get_line\r
2376 call skipbl\r
2377 inc hl\r
2378 jr z,l0d60h\r
2379 dec hl\r
2380 inc de\r
2381 cp '.'\r
85b57f2a 2382 jr nz,cmds_dash\r
0c461f1d 2383 call get_char_upper\r
85b57f2a
L
2384 or a\r
2385 jr nz,l0d8ah\r
2386 ret\r
2387cmds_dash:\r
0716e834
L
2388 jp z,assert_eol\r
2389 cp '-'\r
2390 jr nz,l0d8ah\r
0c461f1d 2391 call get_char_upper\r
0716e834
L
2392 or a\r
2393 dec hl\r
2394 jr z,l0d60h\r
2395 inc hl\r
0c4244e5 2396l0d8ah:\r
0716e834
L
2397 dec de\r
2398 call sub_0ef8h\r
2399 jr l0d60h\r
0c4244e5 2400\r
9711a430
L
2401;-------------------------------------------------------------------------------\r
2402; > @\r
2403; examine (substitute) displacement register @\r
2404\r
0c4244e5 2405cmd_@:\r
0716e834 2406 call assert_eol\r
ac35765e
L
2407 ld hl,msg_@\r
2408 ld de,var.@\r
0716e834
L
2409 ld c,001h\r
2410 jp l0c12h\r
0c4244e5 2411\r
ac35765e 2412msg_@:\r
0716e834 2413 dc '@'\r
0c4244e5 2414\r
9711a430
L
2415;-------------------------------------------------------------------------------\r
2416; >>I [port]\r
2417; Input a byte from port\r
2418\r
0c4244e5 2419cmd_I:\r
0716e834
L
2420 ld hl,cmd_I\r
2421 ld (cmd_rpt),hl\r
2422 ld hl,(last_I)\r
2423 call get_lastarg_def\r
2424 ld (last_I),hl\r
2425 ld b,h\r
2426 ld c,l\r
2427 in a,(c)\r
2428 push af\r
2429 call out_hex\r
2430 call outbl4\r
2431 pop af\r
2432 call out.bin.b\r
2433 jp crlf\r
0c4244e5 2434\r
9711a430
L
2435;-------------------------------------------------------------------------------\r
2436; >>O [byte] [port]\r
2437; Output a byte to a port\r
2438\r
0c4244e5 2439cmd_O:\r
0716e834
L
2440 ld hl,cmd_O\r
2441 ld (cmd_rpt),hl\r
2442 ld hl,(last_O_val)\r
2443 call get_arg_def\r
2444 ld a,l\r
2445 ld (last_O_val),a\r
2446 push af\r
2447 call next_arg\r
2448 ld hl,(last_O_addr)\r
2449 call get_lastarg_def\r
2450 ld (last_O_addr),hl\r
2451 ld b,h\r
2452 ld c,l\r
2453 pop af\r
2454 out (c),a\r
2455 ret\r
0c4244e5 2456\r
9711a430
L
2457;-------------------------------------------------------------------------------\r
2458; > Vstartaddr endaddr targetaddr\r
2459; Verify (compare) two memory areas\r
2460\r
0c4244e5 2461cmd_V:\r
0716e834 2462 call sub_034eh\r
0c4244e5 2463l0dedh:\r
0716e834
L
2464 push bc\r
2465 ld a,(de)\r
2466 ld b,(hl)\r
2467 cp b\r
2468 jr z,l0e10h\r
2469 ld c,a\r
2470 call out.hl.@\r
2471 call outbl\r
2472 ld a,b\r
2473 call out_hex\r
2474 call outbl2\r
2475 ld a,c\r
2476 call out_hex\r
2477 call outbl\r
2478 ex de,hl\r
2479 call out.hl.@\r
2480 ex de,hl\r
2481 call crlf\r
0c4244e5 2482l0e10h:\r
0716e834
L
2483 pop bc\r
2484 inc hl\r
2485 inc de\r
2486 dec bc\r
2487 ld a,b\r
2488 or c\r
2489 jr nz,l0dedh\r
2490 ret\r
0c4244e5 2491\r
9711a430
L
2492;-------------------------------------------------------------------------------\r
2493; > M[V] startaddr endaddr destaddr\r
2494; Move memory [and verify]\r
2495\r
0c4244e5 2496cmd_M:\r
0c461f1d 2497 call get_char_upper\r
0716e834
L
2498 cp 'V'\r
2499 jr nz,l0e1fh\r
2500 inc de\r
0c4244e5 2501l0e1fh:\r
0716e834
L
2502 push af\r
2503 call sub_034eh\r
2504 push hl\r
2505 push de\r
2506 push bc\r
2507 call cp_hl_de\r
3f9577cd 2508 jr nc,cmdm_up\r
0716e834
L
2509 add hl,bc\r
2510 ex de,hl\r
2511 add hl,bc\r
2512 ex de,hl\r
2513 dec hl\r
2514 dec de\r
2515 lddr\r
3f9577cd
L
2516 db 01h ;swallow ldir instruction (ld bc,...)\r
2517cmdm_up:\r
2518 ldir\r
0716e834
L
2519 pop bc\r
2520 pop de\r
2521 pop hl\r
2522 pop af\r
2523 jr z,l0dedh\r
2524 ret\r
0c4244e5 2525\r
9711a430
L
2526;-------------------------------------------------------------------------------\r
2527; > H\r
2528; display Highest load address of last filed loaded, Maximum "High"\r
2529; off all loaded files, and Top address of available memory\r
2530; > HS\r
2531; display symbol list\r
2532; > H expression\r
2533; evaluate expression and display result in hex, decimal and other formats\r
2534; > H expression expression\r
2535; display sum und difference of expressions\r
2536\r
0c4244e5 2537cmd_H:\r
0c461f1d 2538 call get_char_upper\r
3f9577cd 2539 cp 'S'\r
08d0db09 2540 jr z,p_sym_list\r
3f9577cd 2541\r
0716e834
L
2542 call expr\r
2543 jp c,p_max_high0\r
2544 call next_arg\r
2545 push hl\r
2546 call expr\r
2547 push af\r
2548 call assert_eol\r
2549 pop af\r
2550 ex de,hl\r
2551 pop hl\r
2552 jr c,l0e5eh\r
2553 push hl\r
2554 push de\r
2555 add hl,de\r
2556 call l0e5eh\r
2557 pop de\r
2558 pop hl\r
2559 and a\r
2560 sbc hl,de\r
0c4244e5 2561l0e5eh:\r
0716e834
L
2562 call out_hl\r
2563 call outbl2\r
2564 call out_hl_neg\r
2565 call outbl4\r
2566 call out.hl.dec\r
2567 call outbl2\r
2568 call out_hl_dec_neg\r
2569 call outbl4\r
2570 call out.bin.w\r
3a4deef9 2571 call outbl\r
0716e834
L
2572 ld a,l\r
2573 call out.ascii\r
08d0db09
L
2574 call outbl2\r
2575 call p_symbol\r
0716e834 2576 jp crlf\r
0c4244e5 2577\r
08d0db09 2578p_sym_list:\r
3f9577cd
L
2579 inc de\r
2580 call assert_eol\r
c486c4da 2581 ld a,(symlen_cur)\r
2d914eb7 2582 add a,7\r
4903b8b8 2583 ld b,a\r
2d914eb7 2584 ld c,0\r
b772ed31 2585 ld hl,ddtz_base+2\r
2d914eb7 2586psym_nxtsym:\r
3f9577cd
L
2587 ld d,(hl)\r
2588 dec hl\r
2589 ld e,(hl)\r
2590 dec hl\r
4903b8b8 2591 ld a,(hl)\r
3a4deef9 2592 cp 0c3h\r
4903b8b8 2593 jr z,psym_e\r
3f9577cd 2594\r
08d0db09 2595 call p_goto_col\r
3f9577cd
L
2596 ex de,hl\r
2597 call out_hl\r
3f9577cd 2598 call outbl\r
4903b8b8 2599 ex de,hl\r
2d914eb7
L
2600 call p_symstr\r
2601\r
2602 ld a,c\r
2603 add b\r
2604 ld c,a\r
c486c4da 2605 ld a,(screen_width)\r
2d914eb7
L
2606 sub b\r
2607 cp c\r
08d0db09 2608 jr nc,psym_nxtsym\r
2d914eb7 2609\r
3f9577cd 2610 call crlf\r
08d0db09 2611 ld c,0\r
2d914eb7
L
2612 jr psym_nxtsym\r
2613\r
4903b8b8 2614psym_e:\r
2d914eb7
L
2615 ld a,c\r
2616 or a\r
4903b8b8
L
2617 ret z\r
2618 jp crlf\r
3f9577cd 2619\r
2d914eb7 2620\r
9711a430
L
2621;-------------------------------------------------------------------------------\r
2622; > Q[J] startaddr endaddr bytes\r
2623; Query memory for a byte string [Justified]\r
2624\r
0c4244e5 2625cmd_Q:\r
0c461f1d 2626 call get_char_upper\r
0716e834
L
2627 sub 'J'\r
2628 ld (cmd_Q_jopt),a\r
2629 jr nz,l0e8dh\r
2630 inc de\r
0c4244e5 2631l0e8dh:\r
0716e834
L
2632 call get_arg_range\r
2633 push bc\r
2634 push hl\r
2635 call sub_0ee6h\r
2636 pop hl\r
0c4244e5 2637l0e96h:\r
0716e834
L
2638 call sub_0ed7h\r
2639 jr nz,l0eb0h\r
2640 push bc\r
2641 push hl\r
2642 ld a,(cmd_Q_jopt)\r
2643 or a\r
2644 jr nz,l0ea7h\r
2645 ld bc,-8\r
2646 add hl,bc\r
0c4244e5 2647l0ea7h:\r
0716e834
L
2648 ld bc,16\r
2649 and a\r
2650 call sub_0f58h\r
2651 pop hl\r
2652 pop bc\r
0c4244e5 2653l0eb0h:\r
0716e834
L
2654 inc hl\r
2655 ex (sp),hl\r
2656 dec hl\r
2657 ld a,h\r
2658 or l\r
2659 ex (sp),hl\r
2660 jr nz,l0e96h\r
2661 pop bc\r
2662 ret\r
0c4244e5 2663\r
9711a430
L
2664;-------------------------------------------------------------------------------\r
2665; > Z startaddr endaddr bytes\r
2666; Zap (fill) memory with a byte string\r
2667\r
0c4244e5 2668cmd_Z:\r
0716e834
L
2669 call get_arg_range\r
2670 push bc\r
2671 push hl\r
2672 call sub_0ee6h\r
2673 ld a,b\r
2674 pop hl\r
2675 pop bc\r
2676 push hl\r
2677 ex de,hl\r
0c4244e5 2678l0ec7h:\r
0716e834
L
2679 ldi\r
2680 jp po,l0ed3h\r
2681 dec a\r
2682 jr nz,l0ec7h\r
2683 pop hl\r
2684 ldir\r
2685 ret\r
0c4244e5 2686l0ed3h:\r
0716e834
L
2687 pop hl\r
2688 ret\r
0c4244e5 2689\r
0c4244e5 2690sub_0ed7h:\r
0716e834 2691 push hl\r
0c4244e5 2692 push de\r
0716e834 2693 push bc\r
0c4244e5 2694l0edah:\r
46b2e3c7 2695 ld a,(de)\r
0716e834
L
2696 cp (hl)\r
2697 jr nz,l0ee2h\r
2698 inc de\r
2699 inc hl\r
2700 djnz l0edah\r
0c4244e5 2701l0ee2h:\r
0716e834
L
2702 pop bc\r
2703 pop de\r
2704 pop hl\r
2705 ret\r
0c4244e5
L
2706\r
2707sub_0ee6h:\r
0716e834
L
2708 ld hl,conbuf+1\r
2709 call sub_0ef7h\r
2710 ld de,conbuf+1\r
2711 and a\r
2712 sbc hl,de\r
2713 ld b,l\r
2714 ret nz\r
2715 jp ERROR\r
0c4244e5
L
2716\r
2717sub_0ef7h:\r
0716e834 2718 db 0e6h ; and 037h (clear carry)\r
0c4244e5 2719sub_0ef8h:\r
0716e834 2720 scf\r
0c4244e5 2721l0ef9h:\r
0716e834
L
2722 push af\r
2723 call next_arg\r
2724 cp 'W'\r
2725 jr nz,l0f0eh\r
2726 inc de\r
2727 push hl\r
2728 call sub_035dh\r
2729 ex de,hl\r
2730 ex (sp),hl\r
2731 ld (hl),e\r
2732 inc hl\r
2733 ld a,d\r
2734 pop de\r
2735 jr l0f1ah\r
0c4244e5 2736l0f0eh:\r
0716e834
L
2737 cp ''''\r
2738 jr z,l0f1eh\r
2739 push hl\r
2740 call expr\r
2741 ld a,l\r
2742 pop hl\r
2743 jr c,l0f42h\r
0c4244e5 2744l0f1ah:\r
0716e834
L
2745 ld (hl),a\r
2746 inc hl\r
2747 jr l0f3ah\r
0c4244e5 2748l0f1eh:\r
0716e834
L
2749 inc de\r
2750 ld a,(de)\r
2751 cp ''''\r
2752 jr z,l0f2bh\r
2753 or a\r
2754 jr z,l0f42h\r
0c4244e5 2755l0f27h:\r
0716e834
L
2756 ld (hl),a\r
2757 inc hl\r
2758 jr l0f1eh\r
0c4244e5 2759l0f2bh:\r
0716e834
L
2760 inc de\r
2761 ld a,(de)\r
2762 cp ''''\r
2763 jr z,l0f27h\r
2764 cp '.'\r
2765 jr nz,l0f3ah\r
2766 inc de\r
2767 dec hl\r
2768 set 7,(hl)\r
2769 inc hl\r
0c4244e5 2770l0f3ah:\r
0716e834
L
2771 pop af\r
2772 jr nc,l0ef9h\r
2773 ld (last_S),hl\r
2774 jr l0ef9h\r
0c4244e5 2775l0f42h:\r
0716e834
L
2776 pop af\r
2777 ret nc\r
2778 ld (last_S),hl\r
2779 ret\r
0c4244e5 2780\r
9711a430
L
2781;-------------------------------------------------------------------------------\r
2782; >>D [startaddr] [endaddr]\r
2783; Display memory in hex and ASCII\r
2784\r
0c4244e5 2785cmd_D:\r
0716e834
L
2786 ld hl,cmd_D\r
2787 ld (cmd_rpt),hl\r
2788 ld hl,(last_D)\r
2789 ld bc,128\r
2790 call sub_0377h\r
2791 scf\r
0c4244e5 2792sub_0f58h:\r
0716e834
L
2793 push bc\r
2794 push de\r
2795 push hl\r
d24eec89 2796 push af\r
0c4244e5 2797l0f5ch:\r
0716e834
L
2798 call out.hl.@\r
2799 call z,outbl2\r
2800 call outbl\r
2801 ld de,0\r
0c4244e5 2802l0f68h:\r
0716e834
L
2803 ld a,(hl)\r
2804 inc hl\r
2805 call out_hex\r
2806 call outbl\r
2807 dec bc\r
2808 inc e\r
2809 ld a,e\r
2810 cp 010h\r
2811 jr z,l0f80h\r
2812 and 003h\r
2813 call z,outbl\r
2814 ld a,b\r
2815 or c\r
2816 jr nz,l0f68h\r
0c4244e5 2817l0f80h:\r
0716e834
L
2818 call outbl\r
2819 and a\r
2820 sbc hl,de\r
0c4244e5 2821l0f86h:\r
0716e834
L
2822 ld a,(hl)\r
2823 call sub_0fa3h\r
2824 call outchar\r
2825 inc hl\r
2826 dec e\r
2827 jr nz,l0f86h\r
d24eec89
L
2828 pop af\r
2829 push af\r
0716e834
L
2830 jr nc,l0f97h\r
2831 ld (last_D),hl\r
0c4244e5 2832l0f97h:\r
0716e834
L
2833 call crlf\r
2834 ld a,b\r
2835 or c\r
2836 jr nz,l0f5ch\r
d24eec89 2837 pop af\r
0716e834
L
2838 pop hl\r
2839 pop de\r
2840 pop bc\r
2841 ret\r
0c4244e5
L
2842\r
2843sub_0fa3h:\r
0716e834
L
2844 and 07fh\r
2845 cp 07fh\r
2846 jr z,l0fach\r
2847 cp ' '\r
2848 ret nc\r
0c4244e5 2849l0fach:\r
0716e834
L
2850 ld a,'.'\r
2851 ret\r
0c4244e5 2852\r
9711a430
L
2853;-------------------------------------------------------------------------------\r
2854; > Fcommandline\r
2855; specifiy filenames and command line\r
2856\r
0c4244e5 2857cmd_F:\r
c788b3b7
L
2858 push de\r
2859 ld hl,DMA_BUF+1\r
2860 ld (hl),' '\r
2861 inc hl\r
0c4244e5 2862l0fb6h:\r
0c461f1d 2863 call get_char_upper\r
c788b3b7
L
2864 ld (hl),a\r
2865 inc hl\r
2866 inc de\r
2867 and a\r
2868 jr nz,l0fb6h\r
2869 ld a,l\r
2870 sub DMA_BUF+2\r
2871 ld (DMA_BUF),a\r
2872 pop hl\r
2873 ld de,dfcb1\r
2874 call parse_filename\r
2875 ld de,dfcb2\r
2876 call parse_filename\r
2877 ;fall thru\r
2878\r
2879cpy_fcb2:\r
2880 ld hl,dfcb2\r
2881 ld de,fcbsym\r
2882 ld bc,16\r
2883 ldir\r
2884 ret\r
0c4244e5
L
2885\r
2886parse_filename:\r
0716e834
L
2887 call sub_102ch\r
2888 push de\r
2889 push bc\r
2890 ld b,(hl)\r
2891 inc hl\r
2892 ld a,(hl)\r
2893 cp ':'\r
2894 jr nz,l0fe1h\r
2895 inc hl\r
2896 ld a,b\r
2897 sub 040h\r
2898 and 01fh\r
2899 jr l0fe3h\r
0c4244e5 2900l0fe1h:\r
0716e834
L
2901 dec hl\r
2902 xor a\r
0c4244e5 2903l0fe3h:\r
0716e834
L
2904 ld (de),a\r
2905 inc de\r
2906 ld b,8\r
2907 call sub_0ff2h\r
2908 ld b,3\r
2909 call sub_0ff2h\r
2910 pop bc\r
2911 pop de\r
2912 ret\r
0c4244e5
L
2913\r
2914sub_0ff2h:\r
0716e834
L
2915 call sub_1012h\r
2916 jr z,l0ffeh\r
2917 inc hl\r
2918 ld (de),a\r
2919 inc de\r
2920 djnz sub_0ff2h\r
2921 jr l1003h\r
0c4244e5 2922l0ffeh:\r
0716e834 2923 ld a,c\r
0c4244e5 2924l0fffh:\r
0716e834
L
2925 ld (de),a\r
2926 inc de\r
2927 djnz l0fffh\r
0c4244e5 2928l1003h:\r
0716e834
L
2929 call sub_1012h\r
2930 inc hl\r
2931 jr nz,l1003h\r
2932 cp '*'\r
2933 jr z,l1003h\r
2934 cp '.'\r
2935 ret z\r
2936 dec hl\r
2937 ret\r
0c4244e5
L
2938\r
2939sub_1012h:\r
0716e834
L
2940 ld a,(hl)\r
2941 ld c,' '\r
2942 and 01fh\r
2943 ret z\r
2944 ld a,(hl)\r
2945 cp ' '\r
2946 ret z\r
2947 call sub_1043h\r
2948 ret z\r
2949 cp '/'\r
2950 ret z\r
2951 cp '.'\r
2952 ret z\r
2953 ld c,'?'\r
c9705ee4 2954 call toupper\r
0716e834
L
2955 cp '*'\r
2956 ret\r
0c4244e5
L
2957\r
2958l102bh:\r
0716e834 2959 inc hl\r
0c4244e5 2960sub_102ch:\r
0716e834
L
2961 ld a,(hl)\r
2962 cp '/'\r
2963 jr z,l103bh\r
2964 call sub_1043h\r
2965 jr z,l102bh\r
0c4244e5 2966l1036h:\r
0716e834
L
2967 cp ' '\r
2968 jr z,l102bh\r
2969 ret\r
0c4244e5
L
2970\r
2971l103bh:\r
0716e834
L
2972 ld a,(hl)\r
2973 cp ' '+1\r
2974 jr c,l1036h\r
2975 inc hl\r
2976 jr l103bh\r
0c4244e5
L
2977\r
2978sub_1043h:\r
0716e834
L
2979 cp '='\r
2980 ret z\r
2981 cp '_'\r
2982 ret z\r
2983 cp ','\r
2984 ret\r
0c4244e5 2985\r
9711a430
L
2986;-------------------------------------------------------------------------------\r
2987\r
c788b3b7
L
2988setup_fcb:\r
2989 push de\r
2990 ld hl,12\r
2991 add hl,de\r
2992 xor a\r
2993 ld b,21\r
0c4244e5 2994l1052h:\r
c788b3b7
L
2995 ld (hl),a\r
2996 inc hl\r
2997 djnz l1052h\r
2998 ld de,DMA_BUF\r
2999 ld c,BDOS_SETDMA\r
3000 call ddtz_bdos\r
3001 pop de\r
3002 ret\r
0c4244e5 3003\r
9711a430
L
3004;-------------------------------------------------------------------------------\r
3005\r
c788b3b7
L
3006file_open:\r
3007 ld (cur_fcb),de\r
0716e834
L
3008 call setup_fcb\r
3009 ld c,BDOS_OPEN\r
3010 call ddtz_bdos\r
3011 inc a\r
3012 jp z,ERROR\r
3013 ld a,080h\r
3014 ld (cmdR_rindex),a\r
c788b3b7 3015 ret\r
0c4244e5
L
3016\r
3017read_byte:\r
0716e834
L
3018 ld a,(cmdR_rindex)\r
3019 cp 080h\r
3020 jr nz,l1111h\r
3021 call read_sector\r
2d914eb7 3022 ld a,01ah\r
0716e834
L
3023 ret z\r
3024 sub a\r
0c4244e5 3025l1111h:\r
0716e834
L
3026 inc a\r
3027 ld (cmdR_rindex),a\r
3028 push hl\r
3029 add a,07fh\r
3030 ld l,a\r
3031 ld h,000h\r
3032 ld a,(hl)\r
3033 pop hl\r
3034 cp 01ah\r
3035 ret\r
0c4244e5 3036\r
0c4244e5 3037read_sector:\r
0716e834
L
3038 push hl\r
3039 push de\r
3040 push bc\r
3041 ld de,(cur_fcb)\r
3042 ld c,BDOS_READ\r
3043 call ddtz_bdos\r
2d914eb7 3044 sub a,1\r
0716e834 3045 jr z,l1132h\r
30673dea 3046 jr nc,error2\r
0c4244e5 3047l1132h:\r
0716e834
L
3048 pop bc\r
3049 pop de\r
3050 pop hl\r
3051 ret\r
0c4244e5
L
3052\r
3053cmdR_storebyte:\r
0716e834
L
3054 push af\r
3055 push de\r
3056 ld de,TPA\r
3057 call cp_hl_de\r
30673dea 3058 jr c,error2\r
0716e834
L
3059 ld de,(BDOS+1)\r
3060 call cp_hl_de\r
30673dea 3061 jr nc,error2\r
0716e834
L
3062 ld de,(high_load)\r
3063 call cp_hl_de\r
3064 jr c,l1157h\r
3065 ld (high_load),hl\r
0c4244e5 3066l1157h:\r
0716e834
L
3067 ld de,(max_load)\r
3068 call cp_hl_de\r
3069 jr c,l1163h\r
3070 ld (max_load),hl\r
0c4244e5 3071l1163h:\r
0716e834
L
3072 pop de\r
3073 pop af\r
3074 ld (hl),a\r
3075 ret\r
0c4244e5
L
3076\r
3077strncmp:\r
0716e834
L
3078 ld a,(de)\r
3079 cp (hl)\r
3080 inc de\r
3081 inc hl\r
3082 ret nz\r
3083 djnz strncmp\r
3084 ret\r
0c4244e5 3085\r
c788b3b7
L
3086str_hex:\r
3087 db 'HEX'\r
3088\r
3089read_hexchar:\r
3090 call read_hexdigit\r
3091 rlca\r
3092 rlca\r
3093 rlca\r
3094 rlca\r
3095 ld d,a\r
3096 call read_hexdigit\r
3097 add a,d\r
3098 ld d,a\r
3099 add a,c\r
3100 ld c,a\r
3101 ld a,d\r
3102 ret\r
3103\r
3104read_hexdigit:\r
3105 call read_byte\r
30673dea 3106 jr z,error2\r
c788b3b7
L
3107hex_digit_v:\r
3108 call hex_digit\r
3109 ret nc\r
30673dea 3110error2:\r
c788b3b7
L
3111 jp ERROR\r
3112\r
3113read_hexbyte:\r
3114 call read_byte\r
3115read_hexbyte0:\r
3116 push bc\r
3117 call hex_digit_v\r
3118 rlca\r
3119 rlca\r
3120 rlca\r
3121 rlca\r
3122 ld c,a\r
3123 call read_byte\r
3124 call hex_digit_v\r
3125 or c\r
3126 pop bc\r
3127 ret\r
3128\r
9711a430
L
3129;-------------------------------------------------------------------------------\r
3130; > R [displacement]\r
3131; Read a binary or hex file and or symbol file [add displacement]\r
3132\r
c788b3b7 3133cmd_R:\r
0716e834
L
3134 ld hl,0\r
3135 call get_lastarg_def\r
c788b3b7
L
3136read_file:\r
3137 ld de,dfcb1+1\r
3138 ld a,(de)\r
3139 cp '?'\r
3140 jr z,read_symfile\r
3141 dec de\r
0716e834
L
3142 push hl\r
3143 ld hl,0\r
3144 ld (high_load),hl\r
c788b3b7 3145 call file_open\r
0716e834
L
3146 ld hl,dfcb1+9\r
3147 ld de,str_hex\r
3148 ld b,3\r
3149 call strncmp\r
3150 pop hl\r
3151 jr z,read_hexfile\r
3152 ld de,TPA\r
0716e834 3153 push hl\r
2d914eb7 3154 add hl,de\r
c788b3b7 3155l108eh:\r
0716e834 3156 call read_sector\r
2d914eb7 3157 jr nz,read_file_nxt\r
0716e834 3158 pop hl\r
2d914eb7
L
3159 jr read_symfile\r
3160\r
3161read_file_nxt:\r
0716e834
L
3162 ld de,DMA_BUF\r
3163 ld b,080h\r
c788b3b7 3164l109ah:\r
0716e834
L
3165 ld a,(de)\r
3166 call cmdR_storebyte\r
3167 inc de\r
3168 inc hl\r
3169 djnz l109ah\r
0716e834 3170 jr l108eh\r
c788b3b7
L
3171\r
3172read_hexfile:\r
0716e834 3173 push hl\r
c788b3b7 3174l10aeh:\r
2d914eb7 3175 call read_byte ; RECORD MARK\r
0716e834
L
3176 jr z,rdhex_done\r
3177 cp ':'\r
3178 jr nz,l10aeh\r
3179 ld c,0\r
2d914eb7 3180 call read_hexchar ; RECLEN\r
0716e834 3181 ld b,a\r
2d914eb7 3182 call read_hexchar ; LOAD ADDR H\r
0716e834 3183 ld h,a\r
2d914eb7 3184 call read_hexchar ; LOAD ADDR L\r
0716e834
L
3185 ld l,a\r
3186 ld a,b\r
3187 and a\r
3188 jr z,rdhex_done\r
2d914eb7 3189 call read_hexchar ; RECTYP\r
c788b3b7 3190l10cch:\r
2d914eb7 3191 call read_hexchar ; DATA\r
0716e834
L
3192 pop de\r
3193 push de\r
3194 push hl\r
3195 add hl,de\r
3196 call cmdR_storebyte\r
3197 pop hl\r
3198 inc hl\r
3199 djnz l10cch\r
2d914eb7 3200 call read_hexchar ; CHKSUM\r
0716e834
L
3201 ld a,c\r
3202 and a\r
30673dea 3203 jr nz,error3\r
0716e834 3204 jr l10aeh\r
c788b3b7 3205rdhex_done:\r
0716e834
L
3206 pop hl\r
3207 jr read_symfile\r
c788b3b7
L
3208\r
3209read_symfile:\r
3210 ld de,fcbsym+1\r
3211 ld a,(de)\r
3212 cp ' '\r
3213 jp z,p_max_high\r
3214\r
2d914eb7 3215 push hl ; offset\r
d1f2492e
L
3216 call pstr_inl\r
3217 db 'SYMBOLS',CR,LF+80h\r
c788b3b7 3218\r
1d3941c8
L
3219 dec de\r
3220 call file_open\r
3221 ld a,(symattrib)\r
3222 ld c,a\r
c788b3b7
L
3223rs_1:\r
3224 call read_byte\r
3225rs_2:\r
2d914eb7 3226 pop de ; offset\r
c788b3b7 3227 cp 1ah\r
4903b8b8 3228 jp z,p_max_high\r
2d914eb7 3229 push de ; offset\r
c788b3b7
L
3230 cp '!'\r
3231 jr c,rs_1\r
2d914eb7
L
3232 call read_hexbyte0 ; symval H\r
3233 ld h,a\r
3234 call read_hexbyte ; symval L\r
3235 ld l,a\r
3236 add hl,de\r
c788b3b7
L
3237 call read_byte\r
3238 cp ' '\r
3239 jr z,rs_4\r
c788b3b7
L
3240rs_3: call read_byte\r
3241 cp ' '\r
c9b3681c
L
3242 jr nc,rs_3\r
3243 jr rs_2\r
2d914eb7 3244\r
c9b3681c
L
3245rs_4:\r
3246 push hl ; symval\r
3247 ld hl,(BDOS+1) ;\r
3248 ld b,0 ; setup symlen\r
3249rs_5:\r
3250 dec hl ;\r
2d914eb7 3251 call read_byte ; next char of symbol name\r
c9b3681c
L
3252 call test_sym_char ; valid char?\r
3253 jr nz,rs_6\r
1d3941c8
L
3254 bit SYMCASE_CONV,c\r
3255 jr z,rs_51\r
3256 call toupper\r
3257 bit SYMCASE_LOWER,c\r
3258 call nz,tolower\r
3259rs_51:\r
c788b3b7 3260 ld (hl),a ;\r
c9b3681c 3261 inc b ; symlen++\r
1d3941c8
L
3262 ld a,(symlen_max) ;\r
3263 cp b ;\r
3264 jr nc,rs_5 ;\r
30673dea 3265error3:\r
c788b3b7 3266 jp ERROR ;\r
2d914eb7 3267\r
c9b3681c
L
3268rs_6:\r
3269 call test_symterm_ch\r
3270 jr nz,error3\r
3271\r
3272 push bc ; symlen\r
c788b3b7
L
3273 ex de,hl ;\r
3274 ld hl,(BDOS+1) ;\r
3275 inc hl ;\r
c9b3681c 3276 ld c,(hl) ;\r
c788b3b7 3277 inc hl ;\r
c9b3681c
L
3278 ld b,(hl) ;\r
3279 ex de,hl\r
3280 ld (hl),b ;\r
c788b3b7 3281 dec hl ;\r
c9b3681c 3282 ld (hl),c ;\r
c788b3b7
L
3283 dec hl ;\r
3284 ld (hl),0c3h ;\r
3285\r
3286 ld de,(max_load) ;\r
3287 call cp_hl_de ;\r
30673dea 3288 jr c,error3 ;\r
c788b3b7
L
3289 ld de,(reg_sp) ;\r
3290 call cp_hl_de ;\r
3291 jr nc,rs_61 ;\r
3292 ld (reg_sp),hl ;\r
3293rs_61:\r
c788b3b7
L
3294 ld de,(BDOS+1) ;\r
3295 ld (BDOS+1),hl ;\r
3296 ex de,hl ;\r
1d3941c8
L
3297 pop bc ; symlen\r
3298 ld (hl),b ;\r
c788b3b7
L
3299 inc hl ;\r
3300 pop de ; symval\r
3301 ld (hl),e ;\r
3302 inc hl ;\r
3303 ld (hl),d ;\r
1d3941c8 3304 ld a,b ;\r
c486c4da 3305 ld hl,symlen_cur ;\r
8bc5ea22
L
3306 cp (hl) ; new max?\r
3307 jr c,$+3 ;\r
3308 ld (hl),a ;\r
c788b3b7 3309 jp rs_1 ;\r
4903b8b8 3310\r
c788b3b7 3311\r
c9b3681c
L
3312; test for valid character for symbols\r
3313; return z if valid\r
3314\r
3315test_sym_char:\r
3316 cp '$'\r
3317 ret z\r
3318 cp '%'\r
3319 ret z\r
3320 cp '.'\r
3321 ret z\r
3322 cp '_'\r
3323 ret z\r
3324 call test_alphanum\r
3325 ret c ; cy == 1 --> z == 0\r
3326 cp a ; return z\r
3327 ret\r
3328\r
3329\r
3330; check if char is in [0..9,?,@,A..Z,a..z]\r
3331; return cy if invalid\r
3332; return nc if valid alfanumeric char\r
3333\r
3334test_alphanum:\r
46b2e3c7
L
3335 cp 'z'\r
3336 ret z\r
c9b3681c
L
3337 ccf\r
3338 ret c\r
3339 cp 'a'\r
3340 ret nc\r
46b2e3c7
L
3341 cp 'Z'\r
3342 ret z\r
c9b3681c
L
3343 ccf\r
3344 ret c\r
3345 cp '?'\r
3346 ret nc\r
3347test_numeral:\r
46b2e3c7
L
3348 cp '9'\r
3349 ret z\r
c9b3681c
L
3350 ccf\r
3351 ret c\r
3352 cp '0'\r
3353 ret\r
3354\r
3355test_symterm_ch:\r
3356 cp CR\r
3357 ret z\r
3358 cp LF\r
3359 ret z\r
3360test_whitespace:\r
3361 cp ' '\r
3362 ret z\r
3363 cp TAB\r
3364 ret\r
3365\r
9711a430
L
3366;-------------------------------------------------------------------------------\r
3367\r
25a690e5 3368p_max_high0:\r
d1f2492e 3369 call assert_eol\r
25a690e5 3370p_max_high:\r
d1f2492e 3371 call pstr_inl\r
0c4244e5 3372 DC 'High = '\r
d1f2492e
L
3373 ld hl,(high_load)\r
3374 call out_hl\r
3375 call pstr_inl\r
0c4244e5 3376 DC ' Max = '\r
d1f2492e
L
3377 ld hl,(max_load)\r
3378 call out_hl\r
3a4deef9
L
3379 call pstr_inl\r
3380 DC ' Top = '\r
3381 ld hl,(BDOS+1)\r
3382 call out_hl\r
d1f2492e 3383 jp crlf\r
0c4244e5 3384\r
9711a430
L
3385;-------------------------------------------------------------------------------\r
3386; > Wstartaddr endaddr\r
3387; Write a file to disk\r
3388\r
0c4244e5 3389cmd_W:\r
0716e834
L
3390 call get_arg_range\r
3391 call assert_eol\r
3392 push hl\r
3393 ld a,c\r
3394 add a,07fh\r
3395 jr nc,l11adh\r
3396 inc b\r
0c4244e5 3397l11adh:\r
0716e834
L
3398 and 080h\r
3399 ld c,a\r
3400 push bc\r
3401 ld a,(dfcb1+1)\r
3402 cp ' '\r
30673dea 3403 jr z,error4\r
c788b3b7 3404 ld de,dfcb1\r
0716e834
L
3405 call setup_fcb\r
3406 push de\r
3407 ld c,BDOS_DELETE\r
3408 call ddtz_bdos\r
3409 pop de\r
3410 ld c,BDOS_CREATE\r
3411 call ddtz_bdos\r
3412 inc a\r
30673dea 3413 jr z,error4\r
0716e834
L
3414 pop bc\r
3415 pop hl\r
0c4244e5 3416l11cch:\r
0716e834
L
3417 ld a,b\r
3418 or c\r
3419 jr z,close_file\r
3420 push bc\r
3421 ld de,080h ; DMA_BUF\r
3422 ld b,d\r
3423 ld c,e\r
3424 ldir\r
3425 call write_sector\r
3426 ex (sp),hl\r
3427 ld bc,0ff80h\r
3428 add hl,bc\r
3429 ex (sp),hl\r
3430 pop bc\r
3431 jr l11cch\r
0c4244e5
L
3432\r
3433write_sector:\r
0716e834
L
3434 push hl\r
3435 ld de,dfcb1\r
3436 ld c,BDOS_WRITE\r
3437 call ddtz_bdos\r
3438 pop hl\r
3439 and a\r
3440 ret z\r
3441 call close_file\r
30673dea 3442error4:\r
0716e834 3443 jp ERROR\r
0c4244e5
L
3444\r
3445close_file:\r
0716e834
L
3446 ld de,dfcb1\r
3447 ld c,BDOS_CLOSE\r
3448 jp ddtz_bdos\r
0c4244e5 3449\r
9711a430
L
3450;-------------------------------------------------------------------------------\r
3451; > A [startaddr]\r
3452; Assemble Zilog Z180 mnemonics\r
3453\r
0c4244e5 3454cmd_A:\r
0716e834
L
3455 ld hl,(last_A)\r
3456 call get_lastarg_def\r
85b57f2a
L
3457 ld (last_A),hl\r
3458 ld (cmd_A_prev),hl\r
3459 ld hl,cmda_restart\r
ac35765e 3460 ld (error_func),hl\r
0716e834 3461 ld (l1262h),sp\r
85b57f2a
L
3462cmda_loop:\r
3463 ld hl,(last_A)\r
ac35765e 3464 ld (var.$),hl\r
0716e834
L
3465 push hl\r
3466 call p_disas_line\r
85b57f2a 3467 ld c,19\r
08d0db09 3468 call p_align_@_sym\r
8bc5ea22 3469 ld c,b\r
0716e834
L
3470 push bc\r
3471 call get_line\r
3472 pop bc\r
85b57f2a 3473 pop hl\r
0716e834
L
3474 call skipbl\r
3475 cp '.'\r
3476 ret z\r
3477 cp '-'\r
3478 jr nz,l124bh\r
85b57f2a
L
3479 ld hl,(cmd_A_prev)\r
3480 jr cmda_lpend\r
0c4244e5 3481l124bh:\r
85b57f2a
L
3482 push hl\r
3483 pop iy\r
3484 push hl\r
0716e834 3485 and a\r
85b57f2a 3486 call nz,asemble_line\r
0716e834 3487 ld b,0\r
85b57f2a
L
3488 pop hl\r
3489 ld (cmd_A_prev),hl\r
3490 add hl,bc\r
3491cmda_lpend:\r
3492 ld (last_A),hl\r
3493 jr cmda_loop\r
ac35765e 3494\r
85b57f2a 3495cmda_restart:\r
0dc44d17 3496 call p_msg_error\r
0716e834 3497 ld sp,(l1262h)\r
85b57f2a 3498 jr cmda_loop\r
0c4244e5 3499\r
85b57f2a 3500asemble_line:\r
0716e834
L
3501 call skipbl\r
3502 ld hl,t_MNEMONICS\r
3503 call sub_030ah\r
0c461f1d 3504 jr nc,error4\r
0716e834
L
3505 call skipbl\r
3506 push de\r
3507 ld a,b\r
3508 add a,b\r
3509 add a,b\r
3510 ld hl,b_1289_start\r
3511 call add_hl_a\r
3512 ld e,(hl)\r
3513 inc hl\r
3514 ld d,(hl)\r
3515 inc hl\r
3516 ld b,(hl)\r
3517 ex de,hl\r
3518 pop de\r
646e8b05
L
3519\r
3520CALL_HL:\r
0716e834 3521 jp (hl)\r
0c4244e5 3522\r
9711a430
L
3523;-------------------------------------------------------------------------------\r
3524\r
0c4244e5 3525b_1289_start:\r
0716e834
L
3526 dw as.ADC_SBC ;ADC\r
3527 db 088h ;\r
3528 dw as.ADD ;ADD\r
3529 db 080h ;\r
3530 dw as.AND_CP_OR_SUB_XOR ;AND\r
3531 db 0a0h ;\r
3532 dw as.BITOP ;BIT\r
3533 db 040h ;\r
3534 dw as.CALL ;CALL\r
3535 db 0c4h ;\r
3536 dw as.opc.noarg ;CCF\r
3537 db 03fh ;\r
3538 dw as.AND_CP_OR_SUB_XOR ;CP\r
3539 db 0b8h ;\r
3540 dw gen.opc.ED2 ;CPD\r
3541 db 0a9h ;\r
3542 dw gen.opc.ED2 ;CPDR\r
3543 db 0b9h ;\r
3544 dw gen.opc.ED2 ;CPI\r
3545 db 0a1h ;\r
3546 dw gen.opc.ED2 ;CPIR\r
3547 db 0b1h ;\r
3548 dw as.opc.noarg ;CPL\r
3549 db 02fh ;\r
3550 dw as.opc.noarg ;DAA\r
3551 db 027h ;\r
3552 dw as.DEC_INC ;DEC\r
3553 db 005h ;\r
3554 dw as.opc.noarg ;DI\r
3555 db 0f3h ;\r
3556 dw as.DJNZ ;DJNZ\r
3557 db 010h ;\r
3558 dw as.opc.noarg ;EI\r
3559 db 0fbh ;\r
3560 dw as.EX ;EX\r
3561 db 0e3h ;\r
3562 dw as.opc.noarg ;EXX\r
3563 db 0d9h ;\r
3564 dw as.opc.noarg ;HALT\r
3565 db 076h ;\r
3566 dw as.IM ;IM\r
3567 db 046h ;\r
3568 dw as.IN ;IN\r
3569 db 040h ;\r
3570 dw as.DEC_INC ;INC\r
3571 db 004h ;\r
3572 dw gen.opc.ED2 ;IND\r
3573 db 0aah ;\r
3574 dw gen.opc.ED2 ;INDR\r
3575 db 0bah ;\r
3576 dw gen.opc.ED2 ;INI\r
3577 db 0a2h ;\r
3578 dw gen.opc.ED2 ;INIR\r
3579 db 0b2h ;\r
3580 dw as.JP ;JP\r
3581 db 0c2h ;\r
3582 dw as.JR ;JR\r
3583 db 020h ;\r
3584 dw as.LD ;LD\r
3585 db 040h ;\r
3586 dw gen.opc.ED2 ;LDD\r
3587 db 0a8h ;\r
3588 dw gen.opc.ED2 ;LDDR\r
3589 db 0b8h ;\r
3590 dw gen.opc.ED2 ;LDI\r
3591 db 0a0h ;\r
3592 dw gen.opc.ED2 ;LDIR\r
3593 db 0b0h ;\r
3594 dw gen.opc.ED2 ;NEG\r
3595 db 044h ;\r
3596 dw as.opc.noarg ;NOP\r
3597 db 000h ;\r
3598 dw as.AND_CP_OR_SUB_XOR ;OR\r
3599 db 0b0h ;\r
3600 dw gen.opc.ED2 ;OTDR\r
3601 db 0bbh ;\r
3602 dw gen.opc.ED2 ;OTIR\r
3603 db 0b3h ;\r
3604 dw as.OUT ;OUT\r
3605 db 041h ;\r
3606 dw gen.opc.ED2 ;OUTD\r
3607 db 0abh ;\r
3608 dw gen.opc.ED2 ;OUTI\r
3609 db 0a3h ;\r
3610 dw as.POP_PUSH ;POP\r
3611 db 0c1h ;\r
3612 dw as.POP_PUSH ;PUSH\r
3613 db 0c5h ;\r
3614 dw as.BITOP ;RES\r
3615 db 080h ;\r
3616 dw as.RET ;RET\r
3617 db 0c0h ;\r
3618 dw gen.opc.ED2 ;RETI\r
3619 db 04dh ;\r
3620 dw gen.opc.ED2 ;RETN\r
3621 db 045h ;\r
3622 dw as.SHIFTOP ;RL\r
3623 db 010h ;\r
3624 dw as.opc.noarg ;RLA\r
3625 db 017h ;\r
3626 dw as.SHIFTOP ;RLC\r
3627 db 000h ;\r
3628 dw as.opc.noarg ;RLCA\r
3629 db 007h ;\r
3630 dw gen.opc.ED2 ;RLD\r
3631 db 06fh ;\r
3632 dw as.SHIFTOP ;RR\r
3633 db 018h ;\r
3634 dw as.opc.noarg ;RRA\r
3635 db 01fh ;\r
3636 dw as.SHIFTOP ;RRC\r
3637 db 008h ;\r
3638 dw as.opc.noarg ;RRCA\r
3639 db 00fh ;\r
3640 dw gen.opc.ED2 ;RRD\r
3641 db 067h ;\r
3642 dw as.RST ;RST\r
3643 db 0c7h ;\r
3644 dw as.ADC_SBC ;SBC\r
3645 db 098h ;\r
3646 dw as.opc.noarg ;SCF\r
3647 db 037h ;\r
3648 dw as.BITOP ;SET\r
3649 db 0c0h ;\r
3650 dw as.SHIFTOP ;SLA\r
3651 db 020h ;\r
3652 dw as.SHIFTOP ;SRA\r
3653 db 028h ;\r
3654 dw as.SHIFTOP ;SRL\r
3655 db 038h ;\r
3656 dw as.AND_CP_OR_SUB_XOR ;SUB\r
3657 db 090h ;\r
3658 dw as.AND_CP_OR_SUB_XOR ;XOR\r
3659 db 0a8h ;\r
9bed91b3
L
3660\r
3661 dw as.IN0 ;IN0\r
3662 db 000h ;\r
3663 dw as.MLT ;MLT\r
3664 db 04ch ;\r
3665 dw gen.opc.ED2 ;OTDM\r
3666 db 08bh ;\r
3667 dw gen.opc.ED2 ;OTDMR\r
3668 db 09bh ;\r
3669 dw gen.opc.ED2 ;OTIM\r
3670 db 083h ;\r
3671 dw gen.opc.ED2 ;OTIMR\r
3672 db 093h ;\r
3673 dw as.OUTO ;OUT0\r
3674 db 001h ;\r
3675 dw gen.opc.ED2 ;SLP\r
3676 db 076h ;\r
3677 dw as.TST ;TST\r
3678 db 004h ;\r
3679 dw as.TSTIO ;TSTIO\r
3680 db 074h ;\r
b0b4005c 3681\r
9711a430
L
3682;-------------------------------------------------------------------------------\r
3683\r
b0b4005c
L
3684as.TST:\r
3685 call arg.r_HL_A ;\r
3686 jr nc,as.tst_0\r
3687 rlca\r
3688 rlca\r
3689 rlca\r
3690 add a,b\r
3691 ld b,a\r
3692 jp gen.opc.ED2\r
3693as.tst_0:\r
3694 ld b,064h\r
3695as.TSTIO:\r
3696 call arg.imm_8bit ;\r
3697 jr as.store_io0\r
3698\r
3699as.IN0:\r
3700 call arg.r_HL_A ;\r
30673dea 3701 jr nc,error5\r
b0b4005c 3702 cp 006h\r
30673dea 3703 jr z,error5\r
b0b4005c
L
3704 rlca\r
3705 rlca\r
3706 rlca\r
3707 add a,b\r
3708 ld b,a\r
3709 call assert_comma ;\r
3710 call arg.addr_8bit ;\r
3711 jr as.store_io0\r
3712\r
3713as.OUTO:\r
3714 call arg.addr_8bit ;\r
3715 call assert_comma ;\r
3716 call arg.r_HL_A ;\r
30673dea 3717 jr nc,error5\r
b0b4005c 3718 cp 006h\r
30673dea 3719 jr z,error5\r
b0b4005c
L
3720 rlca\r
3721 rlca\r
3722 rlca\r
3723 add a,b\r
3724 ld b,a\r
3725\r
3726as.store_io0:\r
3727 call assert_eol\r
3728 ld (iy+000h),0edh\r
3729 ld (iy+001h),b\r
3730 ld (iy+002h),l\r
3731 ld c,003h\r
3732 ret\r
3733\r
3734as.MLT:\r
3735 call arg.ww ;\r
30673dea 3736 jr nc,error5\r
b0b4005c
L
3737 add a,b\r
3738 ld b,a\r
3739 jp gen.opc.ED2\r
3740\r
30673dea 3741error5:\r
b0b4005c
L
3742 jp ERROR\r
3743\r
3744as.LD:\r
0716e834
L
3745 call arg.r_HL_A\r
3746 jr c,l13d4h\r
3747 call arg.IDX_displcmnt\r
3748 jp c,l1471h\r
3749 call arg.ww\r
3750 jp c,l149ch\r
3751 call arg.IX_IY\r
3752 jp c,l14f5h\r
0c461f1d 3753 call get_char_upper\r
0716e834
L
3754 cp 'I'\r
3755 jp z,l1511h\r
3756 cp 'R'\r
3757 jp z,l1519h\r
3758 cp '('\r
0c461f1d 3759 jr nz,error5\r
0716e834
L
3760 inc de\r
3761 call arg.ww\r
3762 jp c,l1528h\r
3763 call test_expr\r
3764 call test_paren_close\r
3765 call assert_comma\r
3766 call arg.ww\r
3767 jr c,l13c2h\r
3768 call arg.IX_IY\r
3769 jr nc,l13aah\r
3770 ld b,022h\r
0c4244e5 3771l1395h:\r
0716e834
L
3772 call assert_eol\r
3773 ld a,(prefix_ixiy)\r
0c4244e5 3774l139bh:\r
0716e834
L
3775 ld (iy+000h),a\r
3776 ld (iy+001h),b\r
3777 ld (iy+002h),l\r
3778 ld (iy+003h),h\r
3779 ld c,004h\r
3780 ret\r
0c461f1d 3781\r
0c4244e5 3782l13aah:\r
0c461f1d 3783 call get_char_upper\r
0716e834 3784 cp 'A'\r
0c461f1d 3785 jr nz,error5\r
0716e834
L
3786 inc de\r
3787 ld b,032h\r
0c461f1d 3788\r
b0b4005c 3789as.store_3:\r
0716e834
L
3790 call assert_eol\r
3791 ld (iy+000h),b\r
3792 ld (iy+001h),l\r
3793 ld (iy+002h),h\r
3794 ld c,003h\r
3795 ret\r
0c461f1d 3796\r
0c4244e5 3797l13c2h:\r
0716e834
L
3798 cp 020h\r
3799 jr z,l13d0h\r
3800 add a,043h\r
3801 ld b,a\r
0c4244e5 3802l13c9h:\r
0716e834
L
3803 call assert_eol\r
3804 ld a,0edh\r
3805 jr l139bh\r
0c4244e5 3806l13d0h:\r
0716e834
L
3807 ld b,022h\r
3808 jr as.store_3\r
0c461f1d 3809\r
0c4244e5 3810l13d4h:\r
0716e834
L
3811 ld b,a\r
3812 call assert_comma\r
3813 call arg.r_HL_A\r
3814 jr nc,l13f0h\r
3815 push af\r
3816 ld a,b\r
3817 rlca\r
3818 rlca\r
3819 rlca\r
3820 ld b,a\r
3821 pop af\r
3822 add a,b\r
3823 add a,040h\r
3824 cp 076h\r
0c461f1d 3825 jr z,error60\r
0c4244e5 3826l13ech:\r
0716e834
L
3827 ld b,a\r
3828 jp as.opc.noarg\r
0c461f1d 3829\r
0c4244e5 3830l13f0h:\r
0716e834
L
3831 call arg.IDX_displcmnt\r
3832 jr nc,l1413h\r
3833 ld a,b\r
3834 rlca\r
3835 rlca\r
3836 rlca\r
3837 add a,046h\r
3838 cp 076h\r
0c461f1d 3839 jr z,error60\r
b0b4005c 3840\r
0c4244e5 3841l1400h:\r
0716e834
L
3842 ld b,a\r
3843 call assert_eol\r
3844 ld (iy+001h),b\r
3845 ld (iy+002h),c\r
3846 ld a,(prefix_ixiy)\r
3847 ld (iy+000h),a\r
3848 ld c,003h\r
3849 ret\r
0c461f1d 3850\r
0c4244e5 3851l1413h:\r
0c461f1d 3852 call get_char_upper\r
0716e834
L
3853 cp 'I'\r
3854 jr z,l1426h\r
3855 cp 'R'\r
3856 jr nz,l1432h\r
3857 ld a,b\r
3858 cp 007h\r
0c461f1d 3859 jr nz,error60\r
0716e834
L
3860 ld b,05fh\r
3861 jr l142eh\r
0c461f1d 3862\r
0c4244e5 3863l1426h:\r
0716e834
L
3864 ld a,b\r
3865 cp 007h\r
0c461f1d 3866 jr nz,error60\r
0716e834 3867 ld b,057h\r
0c4244e5 3868l142eh:\r
0716e834
L
3869 inc de\r
3870 jp gen.opc.ED2\r
0c4244e5 3871l1432h:\r
0716e834
L
3872 cp '('\r
3873 jr z,l144ch\r
3874 call arg.imm_8bit\r
3875 ld a,b\r
3876 rlca\r
3877 rlca\r
3878 rlca\r
3879 add a,006h\r
0c4244e5 3880l143fh:\r
0716e834 3881 ld b,a\r
b0b4005c 3882as.store_2:\r
0716e834
L
3883 call assert_eol\r
3884 ld (iy+000h),b\r
3885 ld (iy+001h),l\r
3886 ld c,002h\r
3887 ret\r
0c4244e5 3888l144ch:\r
0716e834
L
3889 inc de\r
3890 ld a,b\r
3891 cp 007h\r
0c461f1d 3892 jr nz,error60\r
0716e834
L
3893 call arg.ww\r
3894 jr nc,l1466h\r
3895 cp 030h\r
0c461f1d 3896 jr nc,error60\r
0716e834
L
3897 add a,00ah\r
3898 ld b,a\r
3899 call test_paren_close\r
3900 jp as.opc.noarg\r
0c461f1d
L
3901\r
3902error60:\r
3903 jp error\r
3904\r
0c4244e5 3905l1466h:\r
0716e834
L
3906 call test_expr\r
3907 call test_paren_close\r
3908 ld b,03ah\r
3909 jp as.store_3\r
b0b4005c 3910\r
0c4244e5 3911l1471h:\r
0716e834
L
3912 call assert_comma\r
3913 call arg.r_HL_A\r
3914 jr nc,l1483h\r
3915 cp 006h\r
0c461f1d 3916 jr z,error60\r
0716e834
L
3917 add a,070h\r
3918 jp l1400h\r
b0b4005c 3919\r
0c4244e5 3920l1483h:\r
0716e834
L
3921 call arg.imm_8bit\r
3922 call assert_eol\r
3923 ld a,(prefix_ixiy)\r
3924 ld (iy+000h),a\r
3925 ld (iy+001h),036h\r
3926 ld (iy+002h),c\r
3927 ld (iy+003h),l\r
3928 ld c,004h\r
3929 ret\r
0c4244e5 3930l149ch:\r
0716e834
L
3931 ld b,a\r
3932 call assert_comma\r
3933 ld hl,t_HL.AF\r
3934 call sub_0318h\r
3935 jr c,l14c3h\r
3936 call arg.IX_IY\r
3937 jr nc,l14cch\r
3938 ld a,b\r
3939 cp 030h\r
3940 jr nz,error6\r
3941 ld b,0f9h\r
0c4244e5 3942l14b4h:\r
0716e834
L
3943 call assert_eol\r
3944 ld a,(prefix_ixiy)\r
3945 ld (iy+000h),a\r
3946 ld (iy+001h),b\r
3947 ld c,002h\r
3948 ret\r
0c461f1d 3949\r
0c4244e5 3950l14c3h:\r
0716e834
L
3951 ld a,b\r
3952 cp 030h\r
3953 jr nz,error6\r
3954 ld b,0f9h\r
3955 jr as.opc.noarg ;14ca\r
0c461f1d 3956\r
0c4244e5 3957l14cch:\r
0c461f1d 3958 call get_char_upper\r
0716e834
L
3959 cp '('\r
3960 jr nz,l14e8h\r
3961 inc de\r
3962 call test_expr\r
3963 call test_paren_close\r
3964 ld a,b\r
3965 cp 020h\r
3966 jr z,l14e3h\r
3967 add a,04bh\r
3968 ld b,a\r
3969 jp l13c9h\r
0c461f1d 3970\r
0c4244e5 3971l14e3h:\r
0716e834
L
3972 ld b,02ah\r
3973 jp as.store_3\r
0c461f1d 3974\r
0c4244e5 3975l14e8h:\r
0716e834
L
3976 call test_expr\r
3977 call assert_eol\r
3978 ld a,001h\r
3979 add a,b\r
3980 ld b,a\r
3981 jp as.store_3\r
0c4244e5 3982l14f5h:\r
0716e834 3983 call assert_comma\r
0c461f1d 3984 call get_char_upper\r
0716e834
L
3985 cp '('\r
3986 jr nz,l1509h\r
3987 inc de\r
3988 call test_expr\r
3989 call test_paren_close\r
3990 ld b,02ah\r
3991 jp l1395h\r
0c461f1d 3992\r
0c4244e5 3993l1509h:\r
0716e834
L
3994 call test_expr\r
3995 ld b,021h\r
3996 jp l1395h\r
0c461f1d 3997\r
0c4244e5 3998l1511h:\r
0716e834
L
3999 inc de\r
4000 call assert_comma\r
4001 ld b,047h\r
4002 jr l151fh\r
0c461f1d 4003\r
0c4244e5 4004l1519h:\r
0716e834
L
4005 inc de\r
4006 call assert_comma\r
4007 ld b,04fh\r
0c4244e5 4008l151fh:\r
0c461f1d 4009 call get_char_upper\r
0716e834
L
4010 inc de\r
4011 cp 'A'\r
4012 jr z,gen.opc.ED2\r
0c4244e5 4013error6:\r
0716e834 4014 jp ERROR\r
0c4244e5
L
4015\r
4016l1528h:\r
0716e834
L
4017 cp 020h\r
4018 jr nc,error6\r
4019 add a,002h\r
4020 ld b,a\r
4021 call test_paren_close\r
4022 call assert_comma\r
0c461f1d 4023 call get_char_upper\r
0716e834
L
4024 cp 'A'\r
4025 jr nz,error6\r
4026 inc de\r
b0b4005c 4027as.opc.noarg:\r
0716e834
L
4028 call assert_eol\r
4029 ld (iy+000h),b\r
4030 ld c,001h\r
4031 ret\r
0c4244e5 4032\r
b0b4005c 4033gen.opc.ED2:\r
0716e834
L
4034 call assert_eol\r
4035 ld (iy+000h),0edh\r
4036 ld (iy+001h),b\r
4037 ld c,002h\r
4038 ret\r
0c4244e5 4039\r
b0b4005c 4040as.ADC_SBC:\r
0716e834
L
4041 ld hl,t_HL.AF\r
4042 call sub_0318h\r
4043 jr nc,as.AND_CP_OR_SUB_XOR\r
4044 call assert_comma\r
4045 call arg.ww\r
0c461f1d 4046 jr nc,error6\r
0716e834
L
4047 push af\r
4048 ld a,b\r
4049 cp 088h\r
4050 ld b,04ah\r
4051 jr z,l156ch\r
4052 ld b,042h\r
0c4244e5 4053l156ch:\r
0716e834
L
4054 pop af\r
4055 add a,b\r
0c4244e5 4056l156eh:\r
0716e834
L
4057 ld b,a\r
4058 jr gen.opc.ED2\r
0c461f1d 4059\r
b0b4005c 4060as.ADD:\r
0716e834
L
4061 ld hl,t_HL.AF\r
4062 call sub_0318h\r
4063 jr c,l159ah\r
4064 call arg.IX_IY\r
4065 jr nc,as.AND_CP_OR_SUB_XOR\r
4066 call assert_comma\r
4067 ld hl,t_BC.DE.IX.SP\r
4068 ld a,(prefix_ixiy)\r
4069 cp 0fdh\r
4070 jr nz,l158eh\r
4071 ld hl,t_BC.DE.IY.SP\r
0c4244e5 4072l158eh:\r
0716e834 4073 call arg.reg_16bit\r
0c461f1d 4074 jr nc,error6\r
0716e834 4075 add a,009h\r
0c4244e5 4076l1596h:\r
0716e834
L
4077 ld b,a\r
4078 jp l14b4h\r
0c4244e5 4079l159ah:\r
0716e834
L
4080 call assert_comma\r
4081 call arg.ww\r
0c461f1d
L
4082error61nc:\r
4083 jr nc,error6\r
0716e834
L
4084 add a,009h\r
4085 jp l13ech\r
b0b4005c 4086as.AND_CP_OR_SUB_XOR:\r
0c461f1d 4087 call get_char_upper\r
0716e834
L
4088 cp 'A'\r
4089 jr nz,l15b8h\r
4090 push de\r
4091 inc de\r
4092 call next_arg\r
4093 jr z,l15b7h\r
4094 pop de\r
4095 jr l15b8h\r
0c4244e5 4096l15b7h:\r
0716e834 4097 pop af\r
0c4244e5 4098l15b8h:\r
0716e834
L
4099 call arg.r_HL_A\r
4100 jr c,l15cbh\r
4101 call arg.IDX_displcmnt\r
4102 jr c,l15cfh\r
4103 call arg.imm_8bit\r
4104 ld a,b\r
4105 add a,046h\r
4106 jp l143fh\r
0c4244e5 4107l15cbh:\r
0716e834
L
4108 add a,b\r
4109 jp l13ech\r
0c4244e5 4110l15cfh:\r
0716e834
L
4111 ld a,b\r
4112 add a,006h\r
4113 jp l1400h\r
b0b4005c
L
4114\r
4115as.SHIFTOP:\r
0716e834
L
4116 call arg.r_HL_A\r
4117 jr c,l15fah\r
4118 call arg.IDX_displcmnt\r
0c461f1d 4119 jr nc,error61nc\r
0716e834
L
4120 ld a,b\r
4121 add a,006h\r
4122 ld b,a\r
0c4244e5 4123l15e4h:\r
0716e834
L
4124 call assert_eol\r
4125 ld a,(prefix_ixiy)\r
4126 ld (iy+000h),a\r
4127 ld (iy+001h),0cbh\r
4128 ld (iy+002h),c\r
4129 ld (iy+003h),b\r
4130 ld c,004h\r
4131 ret\r
b0b4005c 4132\r
0c4244e5 4133l15fah:\r
0716e834 4134 add a,b\r
0c4244e5 4135l15fbh:\r
0716e834
L
4136 ld b,a\r
4137 call assert_eol\r
4138 ld (iy+001h),b\r
4139 ld (iy+000h),0cbh\r
4140 ld c,002h\r
4141 ret\r
b0b4005c
L
4142\r
4143as.BITOP:\r
0716e834
L
4144 call arg.bit\r
4145 call assert_comma\r
4146 call arg.r_HL_A\r
4147 jr c,l1624h\r
4148 call arg.IDX_displcmnt\r
0c461f1d 4149 jr nc,error61nc\r
0716e834
L
4150 ld a,l\r
4151 rlca\r
4152 rlca\r
4153 rlca\r
4154 add a,006h\r
4155 add a,b\r
4156 ld b,a\r
4157 jr l15e4h\r
0c4244e5 4158l1624h:\r
0716e834
L
4159 add a,b\r
4160 ld b,a\r
4161 ld a,l\r
4162 rlca\r
4163 rlca\r
4164 rlca\r
4165 add a,b\r
4166 jr l15fbh\r
b0b4005c
L
4167\r
4168as.CALL:\r
0716e834
L
4169 push de\r
4170 call arg.cc_ZCPS\r
4171 jr nc,l163ch\r
4172 add a,b\r
4173 ld b,a\r
4174 call next_arg\r
4175 jr z,l163eh\r
4176 pop de\r
4177 push de\r
0c4244e5 4178l163ch:\r
0716e834 4179 ld b,0cdh\r
0c4244e5 4180l163eh:\r
0716e834
L
4181 pop af\r
4182 call test_expr\r
4183 jp as.store_3\r
b0b4005c
L
4184\r
4185as.RET:\r
0716e834
L
4186 call arg.cc_ZCPS\r
4187 jr nc,l164eh\r
4188 add a,b\r
4189 ld b,a\r
4190 jr l1650h\r
0c4244e5 4191l164eh:\r
0716e834 4192 ld b,0c9h\r
0c4244e5 4193l1650h:\r
0716e834 4194 jp as.opc.noarg\r
b0b4005c
L
4195\r
4196as.JP:\r
0716e834
L
4197 push de\r
4198 call arg.cc_ZCPS\r
4199 jr c,l1666h\r
0c4244e5 4200l1659h:\r
0716e834
L
4201 pop de\r
4202 ld hl,l168ch\r
4203 call sub_030ah\r
4204 jr c,l1674h\r
4205 ld b,0c3h\r
4206 jr l166eh\r
b0b4005c 4207\r
0c4244e5 4208l1666h:\r
0716e834
L
4209 add a,b\r
4210 ld b,a\r
4211 call next_arg\r
4212 jr nz,l1659h\r
4213 pop af\r
0c4244e5 4214l166eh:\r
0716e834
L
4215 call test_expr\r
4216 jp as.store_3\r
0c4244e5 4217l1674h:\r
0716e834
L
4218 call assert_eol\r
4219 ld a,b\r
4220 and a\r
4221 jr nz,l1680h\r
4222 ld b,0e9h\r
4223 jp as.opc.noarg\r
0c4244e5 4224l1680h:\r
0716e834
L
4225 ld b,0ddh\r
4226 dec a\r
4227 jr z,l1687h\r
4228 ld b,0fdh\r
0c4244e5 4229l1687h:\r
0716e834
L
4230 ld l,0e9h\r
4231 jp as.store_2\r
0c4244e5
L
4232\r
4233l168ch:\r
4234 DC '(HL)'\r
4235 DC '(IX)'\r
4236 DC '(IY)'\r
4237 DB 0\r
4238\r
b0b4005c 4239as.DJNZ:\r
0716e834
L
4240 call next_arg\r
4241 ld b,010h\r
4242 jr l16aeh\r
b0b4005c 4243as.JR:\r
0716e834
L
4244 call arg.cc_ZC\r
4245 jr c,l16a9h\r
4246 ld b,018h\r
4247 jr l16aeh\r
0c4244e5 4248l16a9h:\r
0716e834
L
4249 add a,b\r
4250 ld b,a\r
4251 call assert_comma\r
0c4244e5 4252l16aeh:\r
0716e834
L
4253 call arg.j_displ\r
4254 jp as.store_2\r
0c4244e5 4255\r
b0b4005c 4256as.IM:\r
0716e834
L
4257 call arg.imm_8bit\r
4258 ld a,l\r
4259 cp 003h\r
30673dea 4260 jr nc,error7\r
0716e834
L
4261 and a\r
4262 jr z,l16c7h\r
4263 ld b,056h\r
4264 cp 001h\r
4265 jr z,l16c7h\r
4266 ld b,05eh\r
0c4244e5 4267l16c7h:\r
0716e834 4268 jp gen.opc.ED2\r
0c4244e5 4269\r
b0b4005c 4270as.RST:\r
0716e834
L
4271 call arg.imm_8bit\r
4272 ld a,l\r
4273 push af\r
4274 add a,b\r
4275 ld b,a\r
4276 pop af\r
4277 and 0c7h\r
30673dea 4278 jr nz,error7\r
0716e834 4279 jp as.opc.noarg\r
0c4244e5 4280\r
b0b4005c 4281as.POP_PUSH:\r
0716e834
L
4282 call arg.IX_IY\r
4283 jr c,l16e7h\r
4284 call arg.zz\r
30673dea 4285 jr nc,error7\r
0716e834
L
4286 add a,b\r
4287 jp l13ech\r
0c4244e5 4288l16e7h:\r
0716e834
L
4289 ld a,b\r
4290 add a,020h\r
4291 jp l1596h\r
0c4244e5 4292\r
b0b4005c 4293as.IN:\r
0716e834 4294 call arg.r_HL_A\r
30673dea 4295 jr nc,error7\r
0716e834 4296 cp 006h\r
30673dea 4297 jr z,error7\r
0716e834
L
4298 rlca\r
4299 rlca\r
4300 rlca\r
4301 add a,b\r
4302 ld b,a\r
4303 cp 078h\r
4304 jr nz,l170fh\r
4305 call assert_comma\r
4306 call sub_171bh\r
4307 jr c,l1715h\r
4308 call arg.addr_8bit\r
4309 ld b,0dbh\r
4310 jp as.store_2\r
0c4244e5 4311l170fh:\r
0716e834
L
4312 call assert_comma\r
4313 call sub_171bh\r
0c4244e5 4314l1715h:\r
0716e834 4315 jp c,gen.opc.ED2\r
30673dea 4316error7:\r
0716e834 4317 jp ERROR\r
0c4244e5
L
4318\r
4319sub_171bh:\r
0716e834
L
4320 ld hl,t__C_\r
4321 jp sub_0318h\r
0c4244e5 4322\r
b0b4005c 4323as.OUT:\r
0716e834
L
4324 call sub_171bh\r
4325 jr nc,l1739h\r
4326 call assert_comma\r
4327 call arg.r_HL_A\r
30673dea 4328 jr nc,error7\r
0716e834 4329 cp 006h\r
30673dea 4330 jr z,error7\r
0716e834
L
4331 rlca\r
4332 rlca\r
4333 rlca\r
4334 add a,b\r
4335 jp l156eh\r
0c4244e5
L
4336\r
4337l1739h:\r
0716e834
L
4338 call arg.addr_8bit\r
4339 call assert_comma\r
4340 cp 'A'\r
30673dea 4341 jr nz,error7\r
0716e834
L
4342 inc de\r
4343 ld b,0d3h\r
4344 jp as.store_2\r
0c4244e5 4345\r
b0b4005c 4346as.EX:\r
0716e834
L
4347 ld hl,b_176d_start\r
4348 call sub_030ah\r
0c461f1d 4349 jr nc,error7\r
0716e834
L
4350 ld c,b\r
4351 call assert_eol\r
4352 ld b,000h\r
4353 ld hl,l178eh\r
4354 add hl,bc\r
4355 add hl,bc\r
4356 ld a,(hl)\r
4357 ld (iy+000h),a\r
4358 ld c,001h\r
4359 inc hl\r
4360 ld a,(hl)\r
4361 and a\r
4362 ret z\r
4363 ld (iy+001h),a\r
4364 ld c,002h\r
4365 ret\r
0c4244e5
L
4366\r
4367b_176d_start:\r
4368 DC 'AF,AF'''\r
4369l1773h:\r
4370 DC 'DE,HL'\r
4371 DC '(SP),HL'\r
4372 DC '(SP),IX'\r
4373 DC '(SP),IY'\r
4374 db 0\r
4375l178eh:\r
0716e834
L
4376 db 008h,000h\r
4377 db 0ebh,000h\r
4378 db 0e3h,000h\r
4379 db 0ddh,0e3h\r
4380 db 0fdh,0e3h\r
0c4244e5 4381\r
b0b4005c 4382as.DEC_INC:\r
0716e834
L
4383 call arg.IX_IY\r
4384 jr c,l17b3h\r
4385 call arg.ww\r
4386 jr c,l17bfh\r
4387 call arg.r_HL_A\r
4388 jr c,l17cch\r
4389 call arg.IDX_displcmnt\r
0c461f1d 4390 jr nc,error8\r
0716e834
L
4391 ld a,b\r
4392 add a,030h\r
4393 jp l1400h\r
0c4244e5 4394l17b3h:\r
0716e834
L
4395 ld a,b\r
4396 ld b,023h\r
4397 cp 004h\r
4398 jr z,l17bch\r
4399 ld b,02bh\r
0c4244e5 4400l17bch:\r
0716e834 4401 jp l14b4h\r
0c4244e5 4402l17bfh:\r
0716e834
L
4403 push af\r
4404 ld a,b\r
4405 ld b,003h\r
4406 cp 004h\r
4407 jr z,l17c9h\r
4408 ld b,00bh\r
0c4244e5 4409l17c9h:\r
0716e834
L
4410 pop af\r
4411 jr l17cfh\r
0c4244e5 4412l17cch:\r
0716e834
L
4413 rlca\r
4414 rlca\r
4415 rlca\r
0c4244e5 4416l17cfh:\r
0716e834
L
4417 add a,b\r
4418 jp l13ech\r
b0b4005c
L
4419\r
4420arg.bit:\r
0716e834
L
4421 call arg.imm_8bit\r
4422 ld a,l\r
4423 cp 008h\r
30673dea 4424 jr nc,error8\r
0716e834 4425 ret\r
b0b4005c
L
4426\r
4427arg.j_displ:\r
0716e834
L
4428 call test_expr\r
4429 push bc\r
4430 push iy\r
4431 pop bc\r
4432 and a\r
4433 sbc hl,bc\r
4434 dec hl\r
4435 dec hl\r
4436 pop bc\r
4437 call sub_1802h\r
4438 ld a,h\r
4439 xor l\r
4440 bit 7,a\r
30673dea 4441 jr nz,error8\r
0716e834 4442 ret\r
0c4244e5 4443\r
b0b4005c 4444arg.addr_8bit:\r
0c461f1d 4445 call get_char_upper\r
0716e834
L
4446 cp '('\r
4447 jr nz,arg.imm_8bit\r
4448 inc de\r
4449 call arg.imm_8bit\r
4450 jp test_paren_close\r
0c4244e5 4451\r
b0b4005c 4452arg.imm_8bit:\r
0716e834 4453 call test_expr\r
0c4244e5 4454sub_1802h:\r
0716e834
L
4455 ld a,h\r
4456 and a\r
4457 ret z\r
4458 inc a\r
4459 ret z\r
30673dea 4460 jr error8\r
0c4244e5
L
4461\r
4462test_expr:\r
0716e834
L
4463 push bc\r
4464 call expr\r
4465 pop bc\r
4466 ret nc\r
30673dea 4467error8:\r
0716e834 4468 jp ERROR\r
0c4244e5 4469\r
b0b4005c 4470arg.zz:\r
0716e834
L
4471 push hl\r
4472 ld hl,t_BC.DE.HL.AF\r
4473 jr l181fh\r
0c4244e5 4474\r
b0b4005c 4475arg.reg_16bit:\r
0716e834
L
4476 push hl\r
4477 jr l181fh\r
0c4244e5 4478\r
b0b4005c 4479arg.ww:\r
0716e834
L
4480 push hl\r
4481 ld hl,t_BC.DE.HL.SP\r
0c4244e5 4482l181fh:\r
0716e834
L
4483 push bc\r
4484 call sub_030ah\r
4485 jr nc,l182bh\r
4486 ld a,b\r
4487 rlca\r
4488 rlca\r
4489 rlca\r
4490 rlca\r
4491 scf\r
0c4244e5 4492l182bh:\r
0716e834
L
4493 pop bc\r
4494 pop hl\r
4495 ret\r
0c4244e5 4496\r
b0b4005c 4497arg.r_HL_A:\r
0716e834
L
4498 call skipbl\r
4499 push bc\r
4500 push hl\r
4501 ld hl,t_BCDEHL_HL_A\r
4502 call sub_030ah\r
4503 ld a,b\r
4504 pop hl\r
4505 pop bc\r
4506 ret\r
0c4244e5 4507\r
b0b4005c 4508arg.IX_IY:\r
0716e834
L
4509 push hl\r
4510 push bc\r
4511 ld hl,t_IX.IY\r
4512 call sub_030ah\r
4513 jr nc,l1852h\r
4514 ld a,0ddh\r
4515 dec b\r
4516 jr nz,l184eh\r
4517 ld a,0fdh\r
0c4244e5 4518l184eh:\r
0716e834
L
4519 ld (prefix_ixiy),a\r
4520 scf\r
0c4244e5 4521l1852h:\r
0716e834
L
4522 pop bc\r
4523 pop hl\r
4524 ret\r
b0b4005c
L
4525\r
4526arg.IDX_displcmnt:\r
0716e834
L
4527 push hl\r
4528 push bc\r
0c461f1d 4529 call get_char_upper\r
0716e834
L
4530 cp '('\r
4531 jr nz,l18a1h\r
4532 push de\r
4533 inc de\r
4534 ld hl,t_IX.IY\r
4535 call sub_030ah\r
4536 jr nc,l18a0h\r
4537 pop af\r
4538 ld a,0ddh\r
4539 dec b\r
4540 jr nz,l186eh\r
4541 ld a,0fdh\r
0c4244e5 4542l186eh:\r
0716e834 4543 ld (prefix_ixiy),a\r
0c461f1d 4544 call get_char_upper\r
0716e834
L
4545 cp '+'\r
4546 jr z,l1882h\r
4547 cp ')'\r
4548 ld hl,0\r
4549 jr z,l189ah\r
4550 cp '-'\r
0c461f1d 4551 jr nz,error9\r
0c4244e5 4552l1882h:\r
0716e834
L
4553 push af\r
4554 inc de\r
4555 call arg.imm_8bit\r
4556 pop af\r
4557 cp '+'\r
4558 jr z,l1894h\r
4559 ld b,h\r
4560 ld c,l\r
4561 ld hl,0\r
4562 and a\r
4563 sbc hl,bc\r
0c4244e5 4564l1894h:\r
0c461f1d 4565 call get_char_upper\r
0716e834 4566 cp ')'\r
0c461f1d 4567 jr nz,error9\r
0c4244e5 4568l189ah:\r
0716e834
L
4569 inc de\r
4570 pop bc\r
4571 ld c,l\r
4572 pop hl\r
4573 scf\r
4574 ret\r
0c4244e5 4575l18a0h:\r
0716e834 4576 pop de\r
0c4244e5 4577l18a1h:\r
0716e834
L
4578 pop bc\r
4579 pop hl\r
4580 and a\r
4581 ret\r
0c4244e5 4582\r
b0b4005c 4583arg.cc_ZCPS:\r
0716e834
L
4584 ld hl,t_tstfl_ZCPS\r
4585 ld c,007h\r
4586 jr l18b1h\r
0c4244e5 4587\r
b0b4005c 4588arg.cc_ZC:\r
0716e834
L
4589 ld hl,t_tstfl_ZC\r
4590 ld c,003h\r
0c4244e5 4591l18b1h:\r
0716e834
L
4592 push bc\r
4593 call sub_030ah\r
4594 ld a,b\r
4595 pop bc\r
4596 ret nc\r
4597 and c\r
4598 rlca\r
4599 rlca\r
4600 rlca\r
4601 scf\r
4602 ret\r
0c4244e5
L
4603\r
4604assert_comma:\r
0716e834
L
4605 call next_arg\r
4606 ret z\r
0c461f1d 4607error9:\r
0716e834 4608 jp ERROR\r
0c4244e5
L
4609\r
4610test_paren_close:\r
0c461f1d 4611 call get_char_upper\r
0716e834 4612 cp ')'\r
0c461f1d 4613 jr nz,error9\r
0716e834
L
4614 inc de\r
4615 ret\r
0c4244e5 4616\r
9711a430
L
4617;-------------------------------------------------------------------------------\r
4618; >>L [startaddr] [endaddr]\r
4619; List disassembled code\r
4620\r
0c4244e5 4621cmd_L:\r
0716e834
L
4622 ld hl,cmd_L\r
4623 ld (cmd_rpt),hl\r
4624 call expr\r
4625 jr nc,l18dbh\r
4626 ld hl,(last_L)\r
0c4244e5 4627l18dbh:\r
0716e834
L
4628 call next_arg\r
4629 call get_range\r
4630 jr nc,l1905h\r
4631 call assert_eol\r
4632 ld b,16\r
0c4244e5 4633l18ebh:\r
0716e834 4634 push bc\r
85b57f2a 4635 call cmdl_p_line\r
0716e834
L
4636 pop bc\r
4637 djnz l18ebh\r
4638 ret\r
85b57f2a 4639\r
0c4244e5 4640l1905h:\r
0716e834 4641 call assert_eol\r
85b57f2a
L
4642 ld d,h\r
4643 ld e,l\r
4644 add hl,bc\r
4645 ex de,hl\r
0c4244e5 4646l190fh:\r
85b57f2a
L
4647 push de\r
4648 call cmdl_p_line\r
4649 pop de\r
4650 call cp_hl_de\r
4651 jr c,l190fh\r
4652 ret\r
4653\r
9711a430
L
4654;-------------------------------------------------------------------------------\r
4655\r
85b57f2a
L
4656cmdl_p_line:\r
4657 push hl\r
4658 call p_disas_line\r
4659 call crlf\r
4660 pop hl\r
4661 ld c,b\r
4662 ld b,0\r
4663 add hl,bc\r
4664 ld (last_L),hl\r
4665 ret\r
0c4244e5 4666\r
25a690e5 4667p_disas_line:\r
3f9577cd
L
4668 call p_label\r
4669 call outbl2\r
0716e834
L
4670 call out.hl.@\r
4671 call z,outbl\r
4672 call outbl\r
4673 sub a\r
4674 ld (con_col),a\r
85b57f2a
L
4675 push hl\r
4676 pop iy\r
0716e834 4677 call p_disas_instr\r
0716e834 4678 ret z\r
8bc5ea22 4679\r
08d0db09
L
4680 ld c,15\r
4681 call p_goto_col\r
cab0d80a 4682 call p_offset\r
08d0db09
L
4683 call outbl\r
4684 jp p_symbol\r
0c4244e5 4685\r
9711a430
L
4686;-------------------------------------------------------------------------------\r
4687\r
25a690e5 4688p_offset:\r
ac35765e 4689 ld de,(var.@)\r
0716e834
L
4690 ld a,d\r
4691 or e\r
4692 ret z\r
37ade8ec
L
4693 call pstr_inl\r
4694 dc '(@'\r
0716e834
L
4695 and a\r
4696 sbc hl,de\r
4697 call out_hl\r
cab0d80a 4698 add hl,de\r
0716e834 4699 jp out_rparen\r
0c4244e5 4700\r
9711a430
L
4701;-------------------------------------------------------------------------------\r
4702\r
25a690e5 4703p_disas_instr:\r
0716e834 4704 sub a\r
08d0db09 4705 ld (disas_argtype),a\r
0716e834
L
4706 call disas_get_instrlen\r
4707 jr nc,l197fh\r
85b57f2a
L
4708 push bc\r
4709 ld a,(con_col)\r
4710 add a,5\r
4711 ld c,a\r
4712 call pstr\r
08d0db09 4713 call p_goto_col\r
0716e834
L
4714 ex de,hl\r
4715 call call_hl\r
4716 pop bc\r
08d0db09 4717 ld a,(disas_argtype)\r
85b57f2a 4718 ld hl,(disas_arg_16)\r
08d0db09 4719 or a\r
0716e834
L
4720 scf\r
4721 ret\r
0c4244e5
L
4722\r
4723l197fh:\r
d1f2492e 4724 call pstr_inl\r
0c4244e5 4725 DC '???'\r
85b57f2a 4726 ld b,1\r
d1f2492e
L
4727 sub a\r
4728 ret\r
0c4244e5
L
4729\r
4730disas_get_instrlen:\r
0716e834
L
4731 sub a\r
4732 ld (isprefix_ixiy),a\r
4733 ld a,(iy+000h)\r
4734 cp 0edh\r
4735 jp z,disas_pfx.ED\r
4736 cp 0ddh\r
4737 jr z,l19abh\r
4738 cp 0fdh\r
4739 jr z,l19afh\r
0c4244e5 4740sub_19a0h:\r
0716e834
L
4741 ld a,(iy+000h)\r
4742 cp 0cbh\r
4743 jp z,disas_pfx.CB\r
4744 jp disas_nopfx\r
0c4244e5 4745l19abh:\r
0716e834
L
4746 ld a,1\r
4747 jr l19b1h\r
0c4244e5 4748l19afh:\r
0716e834 4749 ld a,2\r
0c4244e5 4750l19b1h:\r
0716e834
L
4751 ld (isprefix_ixiy),a\r
4752 call disas_pfx.DDFD\r
4753 ret nc\r
4754 push bc\r
4755 call sub_19a0h\r
4756 pop af\r
4757 add a,b\r
4758 ld b,a\r
4759 scf\r
4760 ret\r
0c4244e5 4761\r
9711a430
L
4762;-------------------------------------------------------------------------------\r
4763\r
0c4244e5 4764disas_pfx.DDFD:\r
0716e834
L
4765 inc iy\r
4766 ld hl,b_19ef_start\r
4767 call test_DDFD\r
4768 ld b,002h\r
4769 ret c\r
4770 ld hl,l1a0ah\r
4771 call test_DDFD\r
4772 ld b,001h\r
4773 ret c\r
4774 ld a,(iy+000h)\r
4775 cp 0cbh\r
4776 jr nz,l19edh\r
4777 ld a,(iy+002h)\r
4778 cp 036h\r
4779 ret z\r
4780 and 007h\r
4781 cp 006h\r
4782 jr nz,l19edh\r
4783 ld b,002h\r
4784 scf\r
4785 ret\r
0c4244e5 4786l19edh:\r
0716e834
L
4787 and a\r
4788 ret\r
0c4244e5 4789\r
9711a430 4790;-------------------------------------------------------------------------------\r
eb982d46 4791; DD/FD 3 byte (ix+d)/(iy+d)\r
0c4244e5 4792b_19ef_start:\r
0716e834
L
4793 db 034h\r
4794 db 035h\r
4795 db 036h\r
4796 db 046h\r
4797 db 04eh\r
4798 db 056h\r
4799 db 05eh\r
4800 db 066h\r
4801 db 06eh\r
4802 db 070h\r
4803 db 071h\r
4804 db 072h\r
4805 db 073h\r
4806 db 074h\r
4807 db 075h\r
4808 db 077h\r
4809 db 07eh\r
4810 db 086h\r
4811 db 08eh\r
4812 db 096h\r
4813 db 09eh\r
4814 db 0a6h\r
4815 db 0aeh\r
4816 db 0b6h\r
4817 db 0beh\r
4818 db 0\r
0c4244e5 4819\r
eb982d46 4820; DD/FD 2 byte\r
0c4244e5 4821l1a0ah:\r
0716e834
L
4822 db 009h\r
4823 db 019h\r
4824 db 021h\r
4825 db 022h\r
4826 db 023h\r
4827 db 029h\r
4828 db 02ah\r
4829 db 02bh\r
4830 db 039h\r
4831 db 0e1h\r
4832 db 0e3h\r
4833 db 0e5h\r
4834 db 0e9h\r
4835 db 0f9h\r
4836 db 0\r
0c4244e5 4837\r
9711a430
L
4838;-------------------------------------------------------------------------------\r
4839\r
0c4244e5 4840disas_pfx.ED:\r
0716e834
L
4841 inc iy\r
4842 ld hl,b_1bc9_start\r
4843 call sub_1a72h\r
4844 ld b,2\r
4845 ret c\r
4846 ld hl,b_1bf4_start\r
4847 call lookup_opc\r
4848 ld b,2\r
4849 ret c\r
b0b4005c
L
4850\r
4851 ld hl,l228bh\r
4852 call lookup_opc\r
4853 ld b,3\r
4854 ret c\r
0716e834
L
4855 ld hl,b_1c40_start\r
4856 call lookup_opc\r
4857 ld b,4\r
4858 ret\r
0c4244e5 4859\r
9711a430
L
4860;-------------------------------------------------------------------------------\r
4861\r
0c4244e5 4862disas_pfx.CB:\r
0716e834
L
4863 push iy\r
4864 inc iy\r
4865 ld a,(isprefix_ixiy)\r
4866 and a\r
4867 jr z,l1a42h\r
4868 inc iy\r
0c4244e5 4869l1a42h:\r
0716e834
L
4870 ld hl,b_1c55_start\r
4871 call lookup_opc\r
4872 pop iy\r
4873 ld b,2\r
4874 ret\r
0c4244e5 4875\r
9711a430
L
4876;-------------------------------------------------------------------------------\r
4877\r
0c4244e5 4878disas_nopfx:\r
0716e834
L
4879 ld hl,b_1b54_start\r
4880 call lookup_opc\r
4881 ld b,2\r
4882 ret c\r
4883 ld hl,b_1ab6_start\r
4884 call sub_1a72h\r
4885 ld b,1\r
4886 ret c\r
4887 ld hl,b_1ad1_start\r
4888 call lookup_opc\r
4889 ld b,1\r
4890 ret c\r
4891 ld hl,b_1b9b_start\r
4892 call lookup_opc\r
4893 ret nc\r
4894 ld b,3\r
4895 ret\r
0c4244e5 4896\r
9711a430
L
4897;-------------------------------------------------------------------------------\r
4898\r
0c4244e5 4899sub_1a72h:\r
0716e834
L
4900 ld a,(hl)\r
4901 cp 0ffh\r
4902 ret z\r
4903 cp (iy+000h)\r
4904 jr z,l1a7fh\r
4905 inc hl\r
4906 inc hl\r
4907 jr sub_1a72h\r
0c4244e5 4908l1a7fh:\r
cab0d80a 4909 ld de,l1c97h\r
0716e834
L
4910 inc hl\r
4911 ld c,(hl)\r
cab0d80a
L
4912 jr get_mnemonic\r
4913\r
0c4244e5
L
4914\r
4915test_DDFD:\r
0716e834
L
4916 ld a,(hl)\r
4917 and a\r
4918 ret z\r
4919 inc hl\r
4920 cp (iy+000h)\r
4921 jr nz,test_DDFD\r
4922 scf\r
4923 ret\r
0c4244e5
L
4924\r
4925lookup_opc:\r
0716e834
L
4926 ld a,(iy+000h)\r
4927 and (hl)\r
4928 inc hl\r
4929 cp (hl)\r
4930 jr z,l1aa8h\r
4931 inc hl\r
4932 inc hl\r
4933 inc hl\r
4934 inc hl\r
4935 ld a,(hl)\r
4936 and a\r
4937 jr nz,lookup_opc\r
4938 ret\r
cab0d80a 4939\r
0c4244e5 4940l1aa8h:\r
0716e834
L
4941 inc hl\r
4942 ld c,(hl)\r
4943 inc hl\r
4944 ld e,(hl)\r
4945 inc hl\r
4946 ld d,(hl)\r
cab0d80a 4947get_mnemonic:\r
0716e834 4948 ld hl,t_MNEMONICS\r
cab0d80a 4949 ld b,0\r
0716e834
L
4950 add hl,bc\r
4951 scf\r
4952 ret\r
0c4244e5 4953\r
9711a430 4954;-------------------------------------------------------------------------------\r
b0b4005c
L
4955; 1 byte opcodes (no parameters)\r
4956; Format: db opcode, t_MNEMONICS-index\r
0c4244e5 4957b_1ab6_start:\r
b0b4005c
L
4958 db 076h,039h ;halt\r
4959 db 0d9h,036h ;exx\r
4960 db 0f3h,02ch ;di\r
4961 db 0fbh,032h ;ei\r
4962 db 000h,069h ;nop\r
4963 db 007h,09eh ;rlca\r
4964 db 00fh,0adh ;rrca\r
4965 db 017h,098h ;rla\r
4966 db 01fh,0a7h ;rra\r
4967 db 027h,026h ;daa\r
4968 db 02fh,023h ;cpl\r
4969 db 037h,0bah ;scf\r
4970 db 03fh,010h ;ccf\r
4971 db 0ffh\r
4972\r
0c4244e5 4973\r
cab0d80a 4974; 1 byte opcodes\r
b0b4005c
L
4975; Format: db mask, match, t_MNEMONICS-index\r
4976; dw argument formating fuction\r
0c4244e5 4977b_1ad1_start:\r
b0b4005c 4978 db 0c0h,040h,056h ;ld r,r\r
25a690e5 4979 dw p_arg_r_r\r
b0b4005c 4980 db 0f8h,080h,003h ;add a,r\r
25a690e5 4981 dw p_arg_a_r\r
b0b4005c 4982 db 0f8h,088h,000h ;adc a,r\r
25a690e5
L
4983 dw p_arg_a_r\r
4984 db 0f8h,090h,0c9h ;sub r\r
4985 dw p_arg_rs\r
4986 db 0f8h,098h,0b7h ;sbc a,r\r
4987 dw p_arg_a_r\r
4988 db 0f8h,0a0h,006h ;and r\r
4989 dw p_arg_rs\r
4990 db 0f8h,0a8h,0cch ;xor r\r
4991 dw p_arg_rs\r
4992 db 0f8h,0b0h,06ch ;or r\r
4993 dw p_arg_rs\r
4994 db 0f8h,0b8h,013h ;cp r\r
4995 dw p_arg_rs\r
b0b4005c 4996 db 0c7h,0c0h,08bh ;ret cc\r
25a690e5 4997 dw p_arg_cc\r
b0b4005c
L
4998 db 0c7h,0c7h,0b4h ;rst\r
4999 dw l1c98h\r
5000 db 0ffh,0c9h,08bh ;ret\r
5001 dw l1c97h\r
5002 db 0cfh,0c1h,081h ;pop rr\r
25a690e5 5003 dw p_arg_zz\r
b0b4005c 5004 db 0cfh,0c5h,084h ;push rr\r
25a690e5 5005 dw p_arg_zz\r
b0b4005c
L
5006 db 0ffh,0e3h,034h ;ex (sp),hl\r
5007 dw l1ca0h\r
5008 db 0ffh,0e9h,052h ;jp (hl)\r
5009 dw l1caeh\r
5010 db 0ffh,0ebh,034h ;ex de,hl\r
25a690e5 5011 dw p_arg_ex_dehl\r
b0b4005c
L
5012 db 0ffh,0f9h,056h ;ld sp,hl\r
5013 dw l1cc1h\r
5014 db 0cfh,003h,041h ;inc rr\r
25a690e5 5015 dw p_arg_ww\r
b0b4005c 5016 db 0cfh,00bh,029h ;dec rr\r
25a690e5 5017 dw p_arg_ww\r
b0b4005c 5018 db 0c7h,004h,041h ;inc r\r
25a690e5 5019 dw p_arg_r\r
b0b4005c 5020 db 0c7h,005h,029h ;dec r\r
25a690e5 5021 dw p_arg_r\r
b0b4005c 5022 db 0ffh,008h,034h ;ex af,af'\r
25a690e5 5023 dw p_arg_ex_afaf\r
b0b4005c
L
5024 db 0cfh,009h,003h ;add hl,rr\r
5025 dw l1cd3h\r
5026 db 0efh,002h,056h ;ld (rr),a ;rr=bc,de\r
5027 dw l1cdch\r
5028 db 0efh,00ah,056h ;ld a,(rr) ;rr=bc,de\r
5029 dw l1ce5h\r
5030 db 0\r
0c4244e5 5031\r
cab0d80a 5032; 2 byte opdodes\r
0c4244e5 5033b_1b54_start:\r
b0b4005c
L
5034 db 0c7h,006h,056h ;ld r,nn\r
5035 dw l1cfah\r
5036 db 0ffh,0c6h,003h ;add a,nn\r
5037 dw l1cf5h\r
5038 db 0ffh,0ceh,000h ;adc a,nn\r
5039 dw l1cf5h\r
5040 db 0ffh,0d6h,0c9h ;sub a,nn\r
5041 dw l1d09h\r
5042 db 0ffh,0deh,0b7h ;sbc a,nn\r
5043 dw l1cf5h\r
5044 db 0ffh,0e6h,006h ;and a,nn\r
5045 dw l1d09h\r
5046 db 0ffh,0eeh,0cch ;xor nn\r
5047 dw l1d09h\r
5048 db 0ffh,0f6h,06ch ;or nn\r
5049 dw l1d09h\r
5050 db 0ffh,0feh,013h ;cp a,nn\r
5051 dw l1d09h\r
5052 db 0ffh,010h,02eh ;djnz\r
08d0db09 5053 dw p_arg_jrel\r
b0b4005c 5054 db 0ffh,018h,054h ;jr\r
08d0db09
L
5055 dw p_arg_jrel\r
5056 db 0e7h,020h,054h ;jr cc,\r
5057 dw p_arg_cc_jrel\r
b0b4005c
L
5058 db 0ffh,0d3h,076h ;out (nn),a\r
5059 dw l1d37h\r
5060 db 0ffh,0dbh,03fh ;in a,(nn)\r
5061 dw l1d29h\r
5062 db 0\r
0c4244e5 5063\r
cab0d80a 5064; 3 byte opcodes\r
0c4244e5 5065b_1b9b_start:\r
25a690e5
L
5066 db 0c7h,0c2h,052h ;jp cc,mn\r
5067 dw p_arg_cc_mn\r
5068 db 0c7h,0c4h,00ch ;call cc,mn\r
5069 dw p_arg_cc_mn\r
5070 db 0cfh,001h,056h ;ld ww,mn\r
5071 dw p_arg_ww_mn\r
5072 db 0ffh,0c3h,052h ;jp mn\r
5073 dw p_arg_mn\r
5074 db 0ffh,0cdh,00ch ;call mn\r
5075 dw p_arg_mn\r
5076 db 0ffh,022h,056h ;ld (mn),hl\r
5077 dw p_arg_addr_hl\r
5078 db 0ffh,02ah,056h ;ld hl,(mn)\r
5079 dw p_arg_hl_addr\r
5080 db 0ffh,032h,056h ;ld (mn),a\r
5081 dw p_arg_addr_a\r
5082 db 0ffh,03ah,056h ;ld a,(mn)\r
5083 dw p_arg_a_addr\r
b0b4005c
L
5084 db 0\r
5085\r
5086; Prefix ED + 1 byte opcode, no arguments\r
5087; Format: opcode, t_MNEMONICS index\r
0c4244e5 5088b_1bc9_start:\r
b0b4005c
L
5089 db 044h,066h ;neg\r
5090 db 045h,092h ;retn\r
5091 db 04dh,08eh ;reti\r
5092 db 067h,0b1h ;rrd\r
5093 db 06fh,0a2h ;rld\r
5094 db 0a0h,05fh ;ldi\r
5095 db 0a1h,01ch ;cpi\r
5096 db 0a2h,04bh ;ini\r
5097 db 0a3h,07dh ;outi\r
5098 db 0a8h,058h ;ldd\r
5099 db 0a9h,015h ;cpd\r
5100 db 0aah,044h ;ind\r
5101 db 0abh,079h ;outd\r
5102 db 0b0h,062h ;ldir\r
5103 db 0b1h,01fh ;cpir\r
5104 db 0b2h,04eh ;inir\r
5105 db 0b3h,072h ;otir\r
5106 db 0b8h,05bh ;lddr\r
5107 db 0b9h,018h ;cpdr\r
5108 db 0bah,047h ;indr\r
5109 db 0bbh,06eh ;otdr\r
5110 db 08bh,0d5h ;otdm\r
5111 db 09bh,0d9h ;otdmr\r
5112 db 083h,0deh ;otim\r
5113 db 093h,0e2h ;otimr\r
5114 db 076h,0ebh ;slp\r
5115 db 0ffh ;<end mark>\r
0c4244e5
L
5116\r
5117b_1bf4_start:\r
646e8b05 5118 db 0e7h,040h,03fh ;in r,(c) ;r=b,c,d,e\r
25a690e5 5119 dw p_arg_in_c ;\r
646e8b05 5120 db 0f7h,060h,03fh ;in r,(c) ;r=h,l\r
25a690e5 5121 dw p_arg_in_c ;\r
b0b4005c 5122 db 0ffh,078h,03fh ;in r,(c) ;r=a\r
25a690e5 5123 dw p_arg_in_c ;\r
646e8b05 5124 db 0e7h,041h,076h ;out (c),r ;r=b,c,d,e\r
25a690e5 5125 dw p_arg_out_c ;\r
646e8b05 5126 db 0f7h,061h,076h ;out (c),r ;r=h,l\r
25a690e5 5127 dw p_arg_out_c ;\r
b0b4005c 5128 db 0ffh,079h,076h ;out (c),r ;r=a\r
25a690e5 5129 dw p_arg_out_c ;\r
b0b4005c
L
5130 db 0cfh,042h,0b7h ;sbc hl,rr\r
5131 dw l1dcah ;\r
5132 db 0cfh,04ah,000h ;adc hl,rr\r
5133 dw l1dcah ;\r
5134 db 0ffh,046h,03dh ;im 0\r
5135 dw l1d85h ;\r
5136 db 0ffh,056h,03dh ;im 1\r
5137 dw l1d89h ;\r
5138 db 0ffh,05eh,03dh ;im 2\r
5139 dw l1d8dh ;\r
5140 db 0ffh,047h,056h ;ld i,a\r
5141 dw l1d92h ;\r
5142 db 0ffh,057h,056h ;ld a,i\r
5143 dw l1d97h ;\r
5144 db 0ffh,04fh,056h ;ld r,a\r
5145 dw l1d9ch ;\r
5146 db 0ffh,05fh,056h ;ld a,r\r
5147 dw l1da1h\r
5148 db 0cfh,04ch,0d2h ;mlt rr\r
25a690e5 5149 dw p_arg_ww\r
b0b4005c 5150 db 0c7h,004h,0eeh ;tst r\r
25a690e5 5151 dw p_arg_r\r
b0b4005c
L
5152 db 0\r
5153\r
5154l228bh:\r
646e8b05 5155 db 0e7h,000h,0cfh ;in0 r,(m) ;r=b,c,d,e\r
25a690e5 5156 dw p_arg_r_m\r
646e8b05 5157 db 0f7h,020h,0cfh ;in0 r,(m) ;r=h,l\r
25a690e5 5158 dw p_arg_r_m\r
b0b4005c 5159 db 0ffh,038h,0cfh ;in0 a,(m)\r
25a690e5 5160 dw p_arg_r_m\r
646e8b05 5161 db 0e7h,001h,0e7h ;out0 (m),r ;r=b,c,d,e\r
25a690e5 5162 dw p_arg_m_r\r
646e8b05 5163 db 0f7h,021h,0e7h ;out0 (m),r ;r=h,l\r
25a690e5 5164 dw p_arg_m_r\r
b0b4005c 5165 db 0ffh,039h,0e7h ;out0 (m),a\r
25a690e5 5166 dw p_arg_m_r\r
b0b4005c
L
5167 db 0ffh,064h,0eeh ;tst m\r
5168 dw l1d09h\r
5169 db 0ffh,074h,0f1h ;tstio m\r
5170 dw l1d09h\r
5171 db 0\r
0c4244e5
L
5172\r
5173b_1c40_start:\r
b0b4005c 5174 db 0efh,043h,056h ;ld (mn),ww ;ww=bc,de\r
25a690e5 5175 dw p_arg_addr_ww\r
b0b4005c 5176 db 0ffh,073h,056h ;ld (mn),sp\r
25a690e5 5177 dw p_arg_addr_ww\r
b0b4005c 5178 db 0efh,04bh,056h ;ld ww,(mn) ;ww=bc,de\r
25a690e5 5179 dw p_arg_ww_addr\r
b0b4005c 5180 db 0ffh,07bh,056h ;ld sp,(mn)\r
25a690e5 5181 dw p_arg_ww_addr\r
b0b4005c
L
5182 db 0\r
5183\r
5184; CB\r
0c4244e5 5185b_1c55_start:\r
b0b4005c
L
5186 db 0f8h,000h,09bh ;rlc g\r
5187 dw l1e03h\r
5188 db 0f8h,008h,0aah ;rrc g\r
5189 dw l1e03h\r
5190 db 0f8h,010h,096h ;rl g\r
5191 dw l1e03h\r
5192 db 0f8h,018h,0a5h ;rr g\r
5193 dw l1e03h\r
5194 db 0f8h,020h,0c0h ;sla g\r
5195 dw l1e03h\r
5196 db 0f8h,028h,0c3h ;sra g\r
5197 dw l1e03h\r
5198 db 0f8h,038h,0c6h ;srl g\r
5199 dw l1e03h\r
5200 db 0c0h,040h,009h ;bit b,g\r
25a690e5 5201 dw p_arg_bitop\r
b0b4005c 5202 db 0c0h,080h,088h ;res b,g\r
25a690e5 5203 dw p_arg_bitop\r
b0b4005c 5204 db 0c0h,0c0h,0bdh ;set b,g\r
25a690e5 5205 dw p_arg_bitop\r
b0b4005c 5206 db 0\r
0c4244e5 5207\r
9711a430
L
5208;-------------------------------------------------------------------------------\r
5209\r
25a690e5 5210p_arg_r_r:\r
0716e834
L
5211 call p_arg_r\r
5212 call p_char_comma\r
5213 jp p_arg_rs\r
25a690e5 5214p_arg_a_r:\r
0716e834
L
5215 call p_A_comma\r
5216 jp p_arg_rs\r
0c4244e5 5217l1c97h:\r
0716e834 5218 ret\r
b0b4005c 5219\r
25a690e5
L
5220p_arg_r_m:\r
5221 call p_arg_r\r
5222 call p_char_comma\r
b0b4005c 5223 jp sub_1d2ch\r
25a690e5
L
5224\r
5225p_arg_m_r:\r
b0b4005c 5226 call sub_1d2ch\r
25a690e5
L
5227 call p_char_comma\r
5228 jp p_arg_r\r
b0b4005c 5229\r
0c4244e5 5230l1c98h:\r
0716e834
L
5231 ld a,(iy+000h)\r
5232 and 038h\r
5233 jp out_hex\r
25a690e5 5234\r
0c4244e5 5235l1ca0h:\r
0716e834 5236 call pstr_inl\r
0c4244e5 5237 DC '(SP),'\r
0716e834 5238 jp p_arg_hlixiy\r
25a690e5 5239\r
0c4244e5 5240l1caeh:\r
0716e834
L
5241 call p_char_lparen\r
5242 call p_arg_hlixiy\r
25a690e5
L
5243 jr out_rparen\r
5244\r
5245p_arg_ex_dehl:\r
0716e834
L
5246 ld hl,l1773h\r
5247 jp pstr\r
25a690e5 5248\r
0c4244e5 5249l1cc1h:\r
d1f2492e 5250 call pstr_inl\r
0c4244e5 5251 DC 'SP,'\r
d1f2492e 5252 jp p_arg_hlixiy\r
25a690e5
L
5253\r
5254p_arg_ex_afaf:\r
0716e834
L
5255 ld hl,b_176d_start\r
5256 jp pstr\r
25a690e5 5257\r
0c4244e5 5258l1cd3h:\r
0716e834
L
5259 call p_arg_hlixiy\r
5260 call p_char_comma\r
5261 jp p_arg_ww\r
0c4244e5 5262l1cdch:\r
0716e834
L
5263 call sub_1ce8h\r
5264 call p_char_comma\r
5265 jp p_char_A\r
0c4244e5
L
5266\r
5267l1ce5h:\r
0716e834 5268 call p_A_comma\r
0c4244e5 5269sub_1ce8h:\r
0716e834
L
5270 call p_char_lparen\r
5271 call p_arg_ww\r
836f48ab 5272 jr out_rparen\r
25a690e5 5273\r
0c4244e5 5274l1cf5h:\r
0716e834
L
5275 call p_A_comma\r
5276 jr l1d09h\r
0c4244e5 5277l1cfah:\r
0716e834
L
5278 call p_arg_r\r
5279 call p_char_comma\r
5280 ld a,(isprefix_ixiy)\r
5281 and a\r
5282 ld a,(iy+002h)\r
5283 jr nz,l1d0ch\r
0c4244e5 5284l1d09h:\r
0716e834 5285 ld a,(iy+001h)\r
0c4244e5 5286l1d0ch:\r
0716e834 5287 jp out_hex\r
b0b4005c 5288\r
08d0db09 5289p_arg_cc_jrel:\r
0716e834
L
5290 ld a,(iy+000h)\r
5291 and 018h\r
5292 call p_arg_cc0\r
5293 call p_char_comma\r
08d0db09 5294p_arg_jrel:\r
0716e834
L
5295 ld c,(iy+001h)\r
5296 ld a,c\r
5297 rla\r
5298 sbc a,a\r
5299 ld b,a\r
5300 push iy\r
5301 pop hl\r
5302 add hl,bc\r
5303 inc hl\r
5304 inc hl\r
5305 jr l1d4eh\r
08d0db09 5306\r
0c4244e5 5307l1d29h:\r
0716e834 5308 call p_A_comma\r
0c4244e5 5309sub_1d2ch:\r
0716e834
L
5310 call p_char_lparen\r
5311 ld a,(iy+001h)\r
836f48ab
L
5312p_arg_nn_rp:\r
5313 call out_hex\r
5314out_rparen:\r
5315 jr p_char_rparen\r
5316\r
0c4244e5 5317l1d37h:\r
0716e834 5318 call sub_1d2ch\r
25a690e5
L
5319 jr p_char_comma_A\r
5320\r
5321p_arg_cc_mn:\r
0716e834
L
5322 call p_arg_cc\r
5323 call p_char_comma\r
25a690e5 5324p_arg_mn:\r
0716e834
L
5325 ld l,(iy+001h)\r
5326 ld h,(iy+002h)\r
0c4244e5 5327l1d4eh:\r
0716e834 5328 ld a,002h\r
0c4244e5 5329sub_1d50h:\r
08d0db09 5330 ld (disas_argtype),a\r
85b57f2a
L
5331 ld (disas_arg_16),hl\r
5332 jp out_hl\r
5333\r
25a690e5 5334p_arg_ww_mn:\r
0716e834
L
5335 call p_arg_ww\r
5336 call p_char_comma\r
5337 jr p_arg_mn\r
25a690e5
L
5338\r
5339p_arg_addr_hl:\r
08d0db09 5340 call p_arg_addr\r
0716e834
L
5341 call p_char_comma\r
5342 jp p_arg_hlixiy\r
85b57f2a 5343\r
25a690e5 5344p_arg_hl_addr:\r
0716e834
L
5345 call p_arg_hlixiy\r
5346 call p_char_comma\r
08d0db09 5347 jp p_arg_addr\r
25a690e5
L
5348\r
5349p_arg_addr_a:\r
08d0db09 5350 call p_arg_addr\r
25a690e5 5351p_char_comma_A:\r
0716e834 5352 call p_char_comma\r
836f48ab
L
5353 jr p_char_A\r
5354\r
5355p_A_comma:\r
5356 call p_char_A\r
5357p_char_comma:\r
5358 ld a,','\r
5359 db 021h\r
25a690e5 5360p_char_A:\r
0716e834 5361 ld a,'A'\r
836f48ab 5362 db 021h\r
0c4244e5 5363l1d85h:\r
0716e834 5364 ld a,'0'\r
836f48ab 5365 db 021h\r
0c4244e5 5366l1d89h:\r
0716e834 5367 ld a,'1'\r
836f48ab 5368 db 021h\r
0c4244e5 5369l1d8dh:\r
0716e834 5370 ld a,'2'\r
836f48ab
L
5371 db 021h\r
5372p_char_rparen:\r
5373 ld a,')'\r
5374 db 021h\r
5375p_char_lparen:\r
5376 ld a,'('\r
0716e834 5377 jp outchar\r
25a690e5 5378\r
0c4244e5 5379l1d92h:\r
0716e834
L
5380 ld hl,b_1da7_start\r
5381 jr l1da4h\r
0c4244e5 5382l1d97h:\r
0716e834
L
5383 ld hl,l1daah\r
5384 jr l1da4h\r
0c4244e5 5385l1d9ch:\r
0716e834
L
5386 ld hl,l1dadh\r
5387 jr l1da4h\r
0c4244e5 5388l1da1h:\r
0716e834 5389 ld hl,l1db0h\r
0c4244e5 5390l1da4h:\r
0716e834 5391 jp pstr\r
0c4244e5
L
5392\r
5393b_1da7_start:\r
5394 DC 'I,A'\r
5395l1daah:\r
5396 DC 'A,I'\r
5397l1dadh:\r
5398 DC 'R,A'\r
5399l1db0h:\r
5400 DC 'A,R'\r
5401\r
25a690e5 5402p_arg_in_c:\r
0716e834
L
5403 call p_arg_r\r
5404 call p_char_comma\r
5405 ld hl,t__C_\r
5406 jp pstr\r
25a690e5
L
5407\r
5408p_arg_out_c:\r
0716e834
L
5409 ld hl,t__C_\r
5410 call pstr\r
5411 call p_char_comma\r
5412 jr p_arg_r\r
25a690e5 5413\r
0c4244e5 5414l1dcah:\r
0716e834
L
5415 call p_arg_hlixiy\r
5416 call p_char_comma\r
5417 jp p_arg_ww\r
25a690e5
L
5418\r
5419p_arg_addr_ww:\r
08d0db09 5420 call p_arg_addr\r
0716e834
L
5421 call p_char_comma\r
5422 jp p_arg_ww\r
25a690e5
L
5423\r
5424p_arg_ww_addr:\r
0716e834
L
5425 call p_arg_ww\r
5426 call p_char_comma\r
e128c8d9 5427 jr p_arg_addr\r
836f48ab
L
5428\r
5429p_arg_a_addr:\r
5430 call p_A_comma\r
5431p_arg_addr:\r
5432 call p_char_lparen\r
5433 ld l,(iy+001h)\r
5434 ld h,(iy+002h)\r
5435 ld a,001h\r
5436 call sub_1d50h\r
5437 jr p_char_rparen\r
25a690e5
L
5438\r
5439p_arg_bitop:\r
0716e834
L
5440 ld a,(isprefix_ixiy)\r
5441 and a\r
5442 jr nz,l1defh\r
5443 ld a,(iy+001h)\r
5444 jr l1df2h\r
0c4244e5 5445l1defh:\r
0716e834 5446 ld a,(iy+002h)\r
0c4244e5 5447l1df2h:\r
0716e834
L
5448 push af\r
5449 rra\r
5450 rra\r
5451 rra\r
5452 and 007h\r
5453 add a,'0'\r
5454 call outchar\r
5455 call p_char_comma\r
5456 pop af\r
5457 jr p_arg_r0\r
25a690e5 5458\r
0c4244e5 5459l1e03h:\r
0716e834
L
5460 ld a,(isprefix_ixiy)\r
5461 and a\r
5462 jr nz,l1e0eh\r
5463 ld a,(iy+001h)\r
5464 jr l1e11h\r
0c4244e5 5465l1e0eh:\r
0716e834 5466 ld a,(iy+002h)\r
0c4244e5 5467l1e11h:\r
0716e834 5468 jr p_arg_r0\r
25a690e5 5469\r
25a690e5 5470p_arg_r:\r
0716e834
L
5471 ld a,(iy+000h)\r
5472 rra\r
5473 rra\r
5474 rra\r
5475 jr p_arg_r0\r
25a690e5 5476p_arg_rs:\r
0716e834 5477 ld a,(iy+000h)\r
25a690e5 5478p_arg_r0:\r
0716e834
L
5479 and 007h\r
5480 cp 006h\r
5481 jr nz,p_arg_r1\r
5482 ld a,(isprefix_ixiy)\r
5483 and a\r
5484 ld a,006h\r
5485 jr z,p_arg_r1\r
5486 ld hl,b_1e78_start\r
5487 ld a,(isprefix_ixiy)\r
5488 dec a\r
5489 jr z,l1e4dh\r
5490 ld hl,l1e7bh\r
0c4244e5 5491l1e4dh:\r
0716e834
L
5492 call pstr\r
5493 ld a,(iy+001h)\r
836f48ab
L
5494 push af\r
5495 rlca\r
5496 ld a,'+'\r
5497 jr nc,l1e61h\r
5498 pop af\r
0716e834 5499 neg\r
836f48ab
L
5500 push af\r
5501 ld a,'-'\r
5502l1e61h:\r
5503 call outchar\r
5504 pop af\r
5505 jp p_arg_nn_rp\r
646e8b05 5506\r
25a690e5 5507p_arg_r1:\r
0716e834
L
5508 ld hl,t_BCDEHL_HL_A\r
5509 jr p_arg\r
0c4244e5
L
5510\r
5511b_1e78_start:\r
5512 DC '(IX'\r
5513l1e7bh:\r
5514 DC '(IY'\r
646e8b05 5515\r
25a690e5 5516p_arg_hlixiy:\r
0716e834
L
5517 ld a,(isprefix_ixiy)\r
5518 ld hl,t_HL.IX.IY\r
5519 jr p_arg\r
25a690e5 5520p_arg_zz:\r
0716e834
L
5521 ld hl,t_BC.DE.HL.AF\r
5522 jr l1e8eh\r
25a690e5 5523p_arg_ww:\r
0716e834 5524 ld hl,t_BC.DE.HL.SP\r
0c4244e5 5525l1e8eh:\r
0716e834
L
5526 ld a,(iy+000h)\r
5527 rra\r
5528 rra\r
5529 rra\r
5530 rra\r
5531 and 003h\r
5532 cp 002h\r
5533 jr z,p_arg_hlixiy\r
5534 jr p_arg\r
646e8b05 5535\r
25a690e5 5536p_arg_cc:\r
0716e834 5537 ld a,(iy+000h)\r
25a690e5 5538p_arg_cc0:\r
0716e834
L
5539 rra\r
5540 rra\r
5541 rra\r
5542 and 007h\r
5543 ld hl,t_tstfl_ZCPS\r
25a690e5 5544p_arg:\r
0716e834
L
5545 ld b,a\r
5546 call sel_dc_string\r
5547 jp pstr\r
0c4244e5 5548\r
9711a430
L
5549;-------------------------------------------------------------------------------\r
5550\r
0c4244e5
L
5551t_MNEMONICS:\r
5552 DC 'ADC'\r
5553 DC 'ADD'\r
5554 DC 'AND'\r
5555 DC 'BIT'\r
5556 DC 'CALL'\r
5557 DC 'CCF'\r
5558 DC 'CP'\r
5559 DC 'CPD'\r
5560 DC 'CPDR'\r
5561 DC 'CPI'\r
5562 DC 'CPIR'\r
5563 DC 'CPL'\r
5564 DC 'DAA'\r
5565 DC 'DEC'\r
5566 DC 'DI'\r
5567 DC 'DJNZ'\r
5568 DC 'EI'\r
5569 DC 'EX'\r
5570 DC 'EXX'\r
5571 DC 'HALT'\r
5572 DC 'IM'\r
5573 DC 'IN'\r
5574 DC 'INC'\r
5575 DC 'IND'\r
5576 DC 'INDR'\r
5577 DC 'INI'\r
5578 DC 'INIR'\r
5579 DC 'JP'\r
5580 DC 'JR'\r
5581 DC 'LD'\r
5582 DC 'LDD'\r
5583 DC 'LDDR'\r
5584 DC 'LDI'\r
5585 DC 'LDIR'\r
5586 DC 'NEG'\r
5587 DC 'NOP'\r
5588 DC 'OR'\r
5589 DC 'OTDR'\r
5590 DC 'OTIR'\r
5591 DC 'OUT'\r
5592 DC 'OUTD'\r
5593 DC 'OUTI'\r
5594 DC 'POP'\r
5595 DC 'PUSH'\r
5596 DC 'RES'\r
5597 DC 'RET'\r
5598 DC 'RETI'\r
5599 DC 'RETN'\r
5600 DC 'RL'\r
5601 DC 'RLA'\r
5602 DC 'RLC'\r
5603 DC 'RLCA'\r
5604 DC 'RLD'\r
5605 DC 'RR'\r
5606 DC 'RRA'\r
5607 DC 'RRC'\r
5608 DC 'RRCA'\r
5609 DC 'RRD'\r
5610 DC 'RST'\r
5611 DC 'SBC'\r
5612 DC 'SCF'\r
5613 DC 'SET'\r
5614 DC 'SLA'\r
5615 DC 'SRA'\r
5616 DC 'SRL'\r
5617 DC 'SUB'\r
5618 DC 'XOR'\r
0c4244e5
L
5619 DC 'IN0'\r
5620 DC 'MLT'\r
5621 DC 'OTDM'\r
5622 DC 'OTDMR'\r
5623 DC 'OTIM'\r
5624 DC 'OTIMR'\r
5625 DC 'OUT0'\r
5626 DC 'SLP'\r
5627 DC 'TST'\r
5628 DC 'TSTIO'\r
0c4244e5
L
5629 DB 0\r
5630\r
5631t_BCDEHL_HL_A:\r
5632 DC 'B'\r
5633 DC 'C'\r
5634 DC 'D'\r
5635 DC 'E'\r
5636 DC 'H'\r
5637 DC 'L'\r
5638 DC '(HL)'\r
5639 DC 'A'\r
5640 DB 0\r
5641t_BC.DE.HL.SP:\r
5642 DC 'BC'\r
5643 DC 'DE'\r
5644 DC 'HL'\r
5645 DC 'SP'\r
5646 DB 0\r
5647t_BC.DE.HL.AF:\r
5648 DC 'BC'\r
5649 DC 'DE'\r
5650t_HL.AF:\r
5651 DC 'HL'\r
5652 DC 'AF'\r
5653 DB 0\r
5654t_BC.DE.IY.SP:\r
5655 DC 'BC'\r
5656 DC 'DE'\r
5657 DC 'IY'\r
5658 DC 'SP'\r
5659 DB 0\r
5660t_BC.DE.IX.SP:\r
5661 DC 'BC'\r
5662 DC 'DE'\r
5663 DC 'IX'\r
5664 DC 'SP'\r
5665 DB 0\r
5666t_HL.IX.IY:\r
5667 DC 'HL'\r
5668t_IX.IY:\r
5669 DC 'IX'\r
5670 DC 'IY'\r
5671 DB 0\r
5672t_tstfl_ZC:\r
5673 DC 'NZ'\r
5674 DC 'Z'\r
5675 DC 'NC'\r
5676 DC 'C'\r
5677 DC 'NE'\r
5678 DC 'EQ'\r
5679 DC 'GE'\r
5680 DC 'LT'\r
5681 DB 0\r
5682t_tstfl_ZCPS:\r
5683 DC 'NZ'\r
5684 DC 'Z'\r
5685 DC 'NC'\r
5686 DC 'C'\r
5687 DC 'PO'\r
5688 DC 'PE'\r
5689 DC 'P'\r
5690 DC 'M'\r
5691 DC 'NE'\r
5692 DC 'EQ'\r
5693 DC 'GE'\r
5694 DC 'LT'\r
5695 DC 'NV'\r
5696 DC 'V'\r
5697 DB 0\r
5698t__C_:\r
5699 DC '(C)'\r
5700 DB 0\r
5701\r
9711a430
L
5702;-------------------------------------------------------------------------------\r
5703\r
4a39ae18 5704tc_set_bp:\r
ac35765e 5705 ld hl,(reg.pc)\r
0716e834
L
5706 ld a,h\r
5707 or l\r
5708 jr z,l2037h\r
5709 ld de,BDOS\r
5710 and a\r
5711 sbc hl,de\r
5712 ld hl,l20edh\r
5713 jr z,l2031h\r
ac35765e 5714 ld iy,(reg.pc)\r
0716e834
L
5715 call disas_get_instrlen\r
5716 jp nc,ERROR\r
5717 ld c,b\r
85b57f2a 5718 ld b,0\r
ac35765e 5719 ld hl,(reg.pc)\r
0716e834 5720 add hl,bc\r
4bb547a7 5721 call bp_trace_enter\r
ac35765e 5722 ld iy,(reg.pc)\r
0716e834
L
5723 ld hl,b_2039_start\r
5724 call lookup_opc\r
5725 ccf\r
5726 ret c\r
5727 ex de,hl\r
0c4244e5 5728l2031h:\r
0716e834 5729 call CALL_HL\r
4bb547a7 5730 call c,bp_trace_enter\r
0c4244e5 5731l2037h:\r
0716e834
L
5732 scf\r
5733 ret\r
0c4244e5 5734\r
9711a430
L
5735;-------------------------------------------------------------------------------\r
5736\r
0c4244e5 5737b_2039_start:\r
646e8b05 5738 db 0ffh,0ddh,000h ;Prefix DD\r
b0b4005c 5739 dw l20a7h\r
646e8b05 5740 db 0ffh,0fdh,000h ;Prefix FD\r
b0b4005c 5741 dw l20ach\r
646e8b05 5742 db 0ffh,0edh,000h ;Prefix ED\r
b0b4005c 5743 dw l20b8h\r
0c4244e5
L
5744\r
5745b_2048_start:\r
646e8b05 5746 db 0ffh,0cdh,000h ;call mn\r
b0b4005c 5747 dw l2080h\r
646e8b05 5748 db 0ffh,0c3h,000h ;jp mn\r
b0b4005c 5749 dw l208bh\r
646e8b05 5750 db 0ffh,0e9h,000h ;jp ()\r
b0b4005c 5751 dw l20a2h\r
646e8b05 5752 db 0ffh,0c9h,000h ;ret\r
b0b4005c 5753 dw l20dch\r
646e8b05 5754 db 0ffh,0cfh,000h ;rst 8\r
b0b4005c 5755 dw l2115h\r
4a39ae18 5756 db 0c7h,0c7h,000h ;rst n\r
b0b4005c 5757 dw l20f9h\r
4a39ae18 5758 db 0c7h,0c4h,000h ;call cc,mn\r
b0b4005c 5759 dw l2080h\r
4a39ae18 5760 db 0f7h,010h,000h ;djnz d; jr d\r
b0b4005c 5761 dw l2093h\r
4a39ae18 5762 db 0e7h,020h,000h ;jr cc,d\r
b0b4005c 5763 dw l2093h\r
4a39ae18 5764 db 0c7h,0c2h,000h ;jp cc,mn\r
b0b4005c 5765 dw l208bh\r
4a39ae18 5766 db 0c7h,0c0h,000h ;ret cc\r
b0b4005c
L
5767 dw l20c5h\r
5768 db 0\r
0c4244e5 5769\r
9711a430 5770;-------------------------------------------------------------------------------\r
4a39ae18 5771; call mn call cc,mn\r
0c4244e5 5772l2080h:\r
0716e834
L
5773 ld a,(b_21e2_start)\r
5774 and a\r
5775 jr nz,l208bh\r
5776 ld a,(trace_call_flag)\r
5777 and a\r
5778 ret nz\r
4a39ae18
L
5779\r
5780; jp mn jp cc,mn\r
0c4244e5 5781l208bh:\r
0716e834
L
5782 ld l,(iy+001h)\r
5783 ld h,(iy+002h)\r
5784 scf\r
5785 ret\r
4a39ae18 5786\r
0c4244e5 5787l2093h:\r
0716e834
L
5788 ld c,(iy+001h)\r
5789 ld a,c\r
5790 rla\r
5791 sbc a,a\r
5792 ld b,a\r
ac35765e 5793 ld hl,(reg.pc)\r
0716e834
L
5794 add hl,bc\r
5795 inc hl\r
5796 inc hl\r
5797 scf\r
5798 ret\r
4a39ae18
L
5799\r
5800; jp (hl)\r
0c4244e5 5801l20a2h:\r
0716e834
L
5802 ld hl,(reg.l)\r
5803 scf\r
5804 ret\r
4a39ae18
L
5805\r
5806; Prefix DD\r
0c4244e5 5807l20a7h:\r
0716e834
L
5808 ld hl,(reg.ix)\r
5809 jr l20afh\r
4a39ae18 5810; Prefix FD\r
0c4244e5 5811l20ach:\r
0716e834 5812 ld hl,(reg.iy)\r
0c4244e5 5813l20afh:\r
0716e834 5814 ld a,(iy+001h)\r
4a39ae18 5815 cp 0e9h ; jp (ix); jp (iy)\r
0716e834
L
5816 scf\r
5817 ret z\r
5818 and a\r
5819 ret\r
4a39ae18
L
5820\r
5821; Prefix ED\r
0c4244e5 5822l20b8h:\r
0716e834 5823 ld a,(iy+001h)\r
4a39ae18 5824 cp 04dh ; reti\r
0716e834 5825 jr z,l20dch\r
4a39ae18 5826 cp 045h ; retn\r
0716e834
L
5827 jr z,l20dch\r
5828 and a\r
5829 ret\r
0c4244e5 5830l20c5h:\r
0716e834
L
5831 ld a,(iy+000h)\r
5832 ld (l20d7h),a\r
5833 ld hl,(reg.f)\r
5834 push hl\r
5835 pop af\r
5836 call l20d7h\r
5837 scf\r
5838 jr c,l20dch\r
5839 ret\r
0c4244e5 5840l20d7h:\r
0716e834
L
5841 nop\r
5842 and a\r
5843 pop hl\r
5844 inc hl\r
5845 jp (hl)\r
0c4244e5
L
5846\r
5847l20dch:\r
0716e834
L
5848 ld a,(b_21e2_start)\r
5849 and a\r
5850 jr nz,l20edh\r
5851 ld a,(trace_call_flag)\r
5852 and a\r
5853 jr z,l20edh\r
5854 call l20edh\r
5855 pop hl\r
5856 ret\r
0c4244e5 5857l20edh:\r
0716e834
L
5858 ld hl,(reg_sp)\r
5859 ld e,(hl)\r
5860 inc hl\r
5861 ld d,(hl)\r
5862 ex de,hl\r
4bb547a7 5863 call bp_trace_enter\r
4a39ae18 5864l2115h:\r
0716e834
L
5865 and a\r
5866 ret\r
0c4244e5
L
5867\r
5868l20f9h:\r
0716e834
L
5869 ld a,(l0003h)\r
5870 cp (iy+000h)\r
5871 ret z\r
5872 ld a,(iy+000h)\r
5873 and 038h\r
5874 ld l,a\r
5875 ld h,000h\r
5876 ld a,(b_21e2_start)\r
5877 and a\r
5878 jr nz,l2113h\r
5879 ld a,(trace_call_flag)\r
5880 and a\r
5881 ret nz\r
0c4244e5 5882l2113h:\r
0716e834
L
5883 scf\r
5884 ret\r
9711a430
L
5885\r
5886;-------------------------------------------------------------------------------\r
5887; >>C[N][J] [steps]\r
5888; >>C[N][J] W expression\r
5889; >>C[N][J] U expression\r
5890; trace over Calls [No list] [Jumps only] /.While./.Until.\r
5891\r
0c4244e5 5892cmd_C:\r
0716e834 5893 ld hl,cmd_C\r
cab0d80a 5894 ld a,1\r
4a39ae18 5895 jr cmd_tc\r
9711a430
L
5896\r
5897;-------------------------------------------------------------------------------\r
5898; >>T[N][J] [steps]\r
5899; >>T[N][J] W expression\r
5900; >>T[N][J] U expression\r
5901; Trace [no List] [Jumps only] / .While. / .Until.\r
5902\r
0c4244e5 5903cmd_T:\r
0716e834
L
5904 xor a\r
5905 ld hl,cmd_T\r
4a39ae18 5906cmd_tc:\r
0716e834
L
5907 ld (cmd_rpt),hl\r
5908 ld (trace_call_flag),a\r
0c461f1d 5909 call get_char_upper\r
0716e834 5910 sub 'N'\r
4a39ae18 5911 jr nz,tc_non\r
0716e834 5912 inc de\r
4a39ae18 5913tc_non:\r
0716e834 5914 ld (trace_N_flag),a\r
0c461f1d 5915 call get_char_upper\r
0716e834 5916 sub 'J'\r
4a39ae18 5917 jr nz,tc_noj\r
0716e834 5918 inc de\r
4a39ae18 5919tc_noj:\r
0716e834 5920 ld (trace_J_flag),a\r
4a39ae18
L
5921 call tc_chk_u_or_w\r
5922 jr z,tc_save_uw_expr_ptr\r
5923 ld hl,1 ;default: 1 step\r
0716e834 5924 call get_lastarg_def\r
4a39ae18
L
5925tc_save_uw_expr_ptr:\r
5926 ld (trace_cnt_or_ptr),hl\r
0716e834 5927 sub a\r
4bb547a7 5928 ld (bp_p_cpu_flag),a\r
0c4244e5 5929l214ch:\r
4a39ae18
L
5930 call tc_set_bp\r
5931 jr user_go1\r
0c4244e5
L
5932\r
5933l2151h:\r
0716e834
L
5934 call bp_clr_temporary\r
5935 ld a,(trace_J_flag)\r
5936 and a\r
5937 jr nz,l216bh\r
ac35765e 5938 ld iy,(reg.pc)\r
0716e834
L
5939 call sub_21c8h\r
5940 jr z,l216bh\r
5941 ld hl,b_2048_start\r
5942 call lookup_opc\r
5943 jr nc,l214ch\r
0c4244e5 5944l216bh:\r
4a39ae18 5945 ld a,(trace_UW_flag) ;0 or 'U' or 'W'\r
0716e834 5946 and a\r
4a39ae18
L
5947 jr z,tc_cnt ;flag is 0, check for step count.\r
5948 ld de,(trace_cnt_or_ptr)\r
0716e834
L
5949 call expr\r
5950 ld a,h\r
5951 or l\r
5952 add a,0ffh\r
5953 sbc a,a\r
4a39ae18 5954 ld hl,trace_UW_flag ;'U' or 'W'\r
0716e834 5955 xor (hl)\r
4a39ae18 5956 bit 1,a ;'U' = 55H, 'W' = 57H\r
0716e834 5957 jr z,l2193h\r
4bb547a7
L
5958do_break0: ;print registers and go to main loop\r
5959 jp do_break\r
4a39ae18
L
5960\r
5961tc_cnt:\r
5962 ld hl,(trace_cnt_or_ptr)\r
0716e834 5963 dec hl\r
4a39ae18 5964 ld (trace_cnt_or_ptr),hl\r
0716e834
L
5965 ld a,h\r
5966 or l\r
4bb547a7 5967 jr z,do_break0\r
0c4244e5 5968l2193h:\r
4a39ae18 5969 call tc_set_bp\r
4bb547a7 5970 jr nc,do_break0\r
0716e834
L
5971 ld a,(trace_N_flag)\r
5972 ld b,a\r
4bb547a7 5973 ld a,(bp_p_cpu_flag)\r
0716e834 5974 or b\r
4bb547a7 5975 ld (bp_p_cpu_flag),a\r
4a39ae18 5976user_go1:\r
0716e834 5977 jp user_go\r
0c4244e5 5978\r
4a39ae18 5979tc_chk_u_or_w:\r
0716e834
L
5980 call skipbl\r
5981 xor a\r
5982 ld (trace_UW_flag),a\r
0c461f1d 5983 call get_char_upper\r
0716e834
L
5984 cp 'U'\r
5985 jr z,l21b5h\r
5986 cp 'W'\r
5987 ret nz\r
0c4244e5 5988l21b5h:\r
0716e834
L
5989 inc de\r
5990 push af\r
5991 push de\r
5992 call expr\r
5993 jp c,ERROR\r
5994 call assert_eol\r
5995 pop hl\r
5996 pop af\r
5997 ld (trace_UW_flag),a\r
5998 sub a\r
5999 ret\r
0c4244e5
L
6000\r
6001sub_21c8h:\r
0716e834
L
6002 ld a,(iy+000h)\r
6003 cp 0edh\r
6004 jr z,l21dah\r
6005 and 0dfh\r
6006 cp 0ddh\r
6007 ret nz\r
6008 ld a,(iy+001h)\r
6009 cp 0e9h\r
6010 ret\r
0c4244e5 6011l21dah:\r
0716e834
L
6012 ld a,(iy+001h)\r
6013 and 0f7h\r
6014 cp 045h\r
6015 ret\r
0c4244e5 6016\r
9711a430
L
6017;-------------------------------------------------------------------------------\r
6018\r
4bb547a7
L
6019con_col:\r
6020 db 0\r
6021\r
6022;-------------------------------------------------------------------------------\r
6023\r
0c4244e5 6024b_21e2_start:\r
9bed91b3 6025 db 0\r
0c4244e5 6026trace_call_flag:\r
9bed91b3 6027 db 0 ;1=call, 0=trace\r
0c4244e5 6028trace_UW_flag:\r
9bed91b3 6029 db 0 ;0 or 'U' or 'W'\r
4a39ae18 6030trace_cnt_or_ptr:\r
9bed91b3 6031 dw 0\r
0c4244e5 6032trace_N_flag:\r
9bed91b3 6033 db 0 ;0 if 'N'\r
0c4244e5 6034trace_J_flag:\r
9bed91b3
L
6035 db 0 ;0 if 'J'\r
6036\r
4bb547a7 6037bp_p_cpu_flag:\r
9bed91b3
L
6038 db 0\r
6039\r
6040bp_tab:\r
6041 rept BP_CNT\r
6042 rept BP_SIZE\r
6043 db 0\r
6044 endm\r
6045 endm\r
6046\r
6047expr_p1:\r
6048 dw expr_buf\r
9bed91b3
L
6049\r
6050expr_buf:\r
6051current_cseg defl $ - current_cseg\r
6052 .phase current_phase + current_cseg\r
6053\r
6054start:\r
6055 LD SP,ldr_end+(stack-ddtz_base)\r
6056 LD DE,signon ;ldr_end+(expr_buf-ddtz_base)\r
6057 LD C,BDOS_PSTR\r
6058 CALL BDOS\r
6059\r
6060 xor a\r
6061 dec a\r
6062 jp po,reloc\r
6063 ld de,msgz80\r
6064 LD C,BDOS_PSTR\r
6065 CALL BDOS\r
6066 jp 0\r
6067\r
6068reloc:\r
6069 LD HL,ldr_end+ddtz_size ;start of reloc bitmap\r
6070 ld bc,0108h ;init bit counter\r
6071\r
6072 EXX\r
6073 LD HL,(BDOS+1)\r
c788b3b7 6074 LD (ldr_end+(ddtz_bdos+1-ddtz_base)),HL\r
9bed91b3
L
6075 LD BC,ddtz_size-1\r
6076 LD D,B\r
6077 LD E,0FFH\r
6078 INC DE ;size rounded up to next page boundary\r
6079 INC BC ;ddtz_size\r
6080 OR A\r
6081 SBC HL,DE ;BDOS - size\r
6082 LD (BDOS+1),HL ;-> new BDOS entry\r
6083\r
6084 push hl\r
6085 PUSH BC\r
6086 ld de,ldr_end\r
6087 sbc hl,de\r
6088 EX DE,HL ;-> DE\r
6089 LD HL,ldr_size\r
6090 add hl,bc\r
6091 ld b,h\r
6092 ld c,l\r
6093 LD HL,TPA\r
6094reloc_lp:\r
6095 EXX\r
6096 djnz reloc_nl\r
6097 ld b,c ;reload bit counter\r
6098 LD e,(HL) ;get next 8 relocation bits\r
6099 INC HL\r
6100reloc_nl:\r
6101 sla e\r
6102 EXX\r
6103 JR NC,reloc_next\r
6104 DEC HL\r
6105 LD A,(HL)\r
6106 ADD A,E\r
6107 LD (HL),A\r
6108 INC HL\r
6109 LD A,(HL)\r
6110 ADC A,D\r
6111 LD (HL),A\r
6112reloc_next:\r
6113 cpi\r
6114 jp pe,reloc_lp\r
6115 dec hl\r
6116\r
6117 POP BC\r
6118 pop de\r
6119 EX DE,HL\r
6120 ADD HL,BC\r
6121 EX DE,HL\r
6122 DEC DE\r
6123 LDDR\r
6124 LD HL,conbuf+2-ddtz_base\r
6125 ADD HL,DE\r
6126 JP (HL)\r
6127\r
6128current_phase defl $\r
6129 .dephase\r
6130current_cseg defl $\r
6131\r
6132 ds EXPR_BUF_SIZE - ($ - expr_buf)\r
6133expr_bufe:\r
6134\r
9711a430
L
6135;-------------------------------------------------------------------------------\r
6136\r
9bed91b3
L
6137msg_Y:\r
6138 dc 'Yn'\r
6139reg_Y:\r
6140 rept YREG_CNT\r
6141 dw 0\r
6142 endm\r
6143\r
6144last_S:\r
6145 dw TPA\r
6146\r
6147last_I:\r
6148 dw 0\r
6149\r
6150last_O_addr:\r
6151 dw 0\r
6152last_O_val:\r
6153 db 0\r
6154\r
6155cmd_Q_jopt:\r
6156 db -1\r
6157\r
6158last_D:\r
6159 dw TPA\r
6160\r
6161cmdR_rindex:\r
6162 db 0\r
6163\r
6164high_load:\r
6165 dw TPA\r
6166max_load:\r
6167 dw TPA\r
6168\r
6169l1262h:\r
6170 dw 0\r
6171last_A:\r
6172 dw TPA\r
6173cmd_A_prev:\r
6174 dw TPA\r
6175\r
6176prefix_ixiy:\r
6177 db 0\r
6178\r
6179isprefix_ixiy:\r
6180 db 0\r
6181last_L:\r
6182 dw TPA\r
85b57f2a 6183disas_arg_16:\r
9bed91b3 6184 dw 0\r
08d0db09 6185disas_argtype:\r
9bed91b3 6186 db 0\r
0c4244e5 6187\r
1bfdbe14
L
6188pbl_loop_adr:\r
6189 dw 0\r
6190\r
c486c4da 6191symlen_cur: ;max length of symbols read so far\r
4903b8b8 6192 db 0\r
c788b3b7
L
6193cur_fcb:\r
6194 dw 0\r
6195fcbsym:\r
6196 ds 33\r
6197\r
0c4244e5
L
6198ddtz_size equ $-ddtz_base\r
6199ddtz_end:\r
6200\r
6201;-------------------------------------------------------------------------------\r
0c4244e5
L
6202\r
6203 end\r