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