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