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