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