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