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