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