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