]> cloudbase.mooo.com Git - z180-stamp.git/blob - z180/ddtz.180
DDTZ: remove some unused labels
[z180-stamp.git] / z180 / ddtz.180
1 page 255
2 .z80
3
4 extrn ?const,?conin,?cono
5 extrn getiff
6 extrn selbnk,@cbnk
7
8 global ddtz,bpent
9 global $stack
10
11
12 include config.inc
13 if CPU_Z180
14 include z180reg.inc
15 include z180.lib
16 endif
17
18 BS equ 08h
19 TAB equ 09h
20 CR equ 0dh
21 LF equ 0ah
22 DEL equ 7fh
23 CNTRX equ 'X'-'@'
24
25 TPA equ 100h
26 TOPRAM equ 0f000h
27
28
29 MEMDUMP_CNT equ 16 ;mem dump bytes per line
30 BP_CNT equ 12 ;number of breakbpoints
31
32
33 ;--------------------------------------------------
34 ;
35
36 ; copy code to common memory and execute it there
37 comst macro
38 call ?excom
39 ds 1
40 ?lcs defl $
41 endm
42
43 ; mark end of common code snippet
44 comend macro
45 ?lce defl $
46 ?lclen defl ?lce-?lcs
47 org ?lcs-1
48 db ?lclen
49 org ?lce
50 ifndef ?lcmax
51 ?lcmax defl 0
52 endif
53 if ?lclen gt ?lcmax
54 ?lcmax defl ?lclen
55 endif
56 endm
57
58
59
60
61 cseg
62
63 ;----------------------------------------------------------
64
65 MSG:
66 DB 'DDT/Z - HD64180 (ROM)'
67 DB CR,LF,0
68
69 HLPMSG:
70 DB 'DDT/Z180 (ROM) Commands:',CR,LF
71 DB '> @ examine/substitute the displacement register @',CR,LF
72 DB '> A [address] Assemble',CR,LF
73 DB '> B[X] display [or clear] all Breakpoints',CR,LF
74 DB ' B breakp [:count] [breakp..] set Breakpoints',CR,LF
75 DB ' BX address [address..] clear Breakpoints',CR,LF
76 DB '>>C[N][J] [count] trace over Calls [No list] [Jumps only]',CR,LF
77 DB ' C[N][J] W|U expression trace over Calls While|Until ...',CR,LF
78 DB '>>D [startadr] [endadr] Display memory in hex and ascii',CR,LF
79 DB '> G [startadr] [;breakp..] Go [to start] [temporary breakpoints]',CR,LF
80 DB '> H [expression [expression]] compute expressions / show High/max load adr.',CR,LF
81 DB '>>I [port] Input a byte from port',CR,LF
82 DB '>>L [startadr] [endadr] List disassembled code',CR,LF
83 DB '> M[V] startadr endadr destadr Move memory [and verify]',CR,LF
84 DB '>>O [byte] [port] Output a byte to port',CR,LF
85 DB '> Q[J] startadr endadr bytes Qery memory for byte string [Justified]',CR,LF
86 DB '> R [displacement] Read intel hex from console [add displacemt]',CR,LF
87 DB '> S address Substitute memory',CR,LF
88 DB '>>T[N][J] [count] Trace [No list] [Jumps only] [count steps]',CR,LF
89 DB ' T[N][J] W|U expression Trace While|Until expression',CR,LF
90 DB '> V startadr endadr destadr Verify (compare) two memory areas',CR,LF
91 DB '> X[register] eXamine [and substitute] registers',CR,LF
92 DB '> Y[0..9] eXamine [and substitute] Y variables',CR,LF
93 DB '> Z startadr endadr bytes Zap (fill) memory with a byte string',CR,LF
94 DB 0
95
96 ddtz:
97 ld sp,$stack
98 ld a,(wstrtflg) ;check warm start flag
99 or a
100 ;;; jr nz,ddtz_w
101
102 exx
103 ld hl,sysramc
104 ld de,topcodbeg
105 ld bc,topcodend-topcodbeg
106 ldir
107
108 exx
109
110 if CPU_Z180
111 ld a,e
112 ld (ubbr),a
113 endif
114
115 ddtz_w:
116 ld hl,MSG
117 call PSTR
118 call ddtei
119
120 ; DDTZ main loop
121
122 DDTZML:
123 ld sp,$stack
124 ld hl,l07eah
125 ld (CMD_ERR),hl
126 ld hl,(REG.PC)
127 ld (OFFS.pc),hl
128 call sub_0e68h
129 ld hl,(CMD_RPT)
130 ld de,DDTZML
131 call CP.HL.DE
132 ld a,'>'
133 call OUTCHAR
134 call nz,OUTCHAR
135 call z,OUTBL
136 call INLINE
137 call SKIPBL
138 jr z,exe_hl
139 ld hl,DDTZML
140 ld (CMD_RPT),hl
141 inc de
142 sub '?'
143 jr c,ERROR
144 cp 'Z'+1-'?'
145 jr nc,ERROR
146 add a,a
147 ld hl,CMDTAB
148 call ADD_HL_A
149 ld a,(hl)
150 inc hl
151 ld h,(hl)
152 ld l,a
153 jr exe_hl
154 ERROR:
155 ld hl,(CMD_ERR)
156 exe_hl:
157 call CALL.HL
158 jr DDTZML
159
160 CALL.HL:
161 jp (hl)
162
163
164 CMDTAB:
165 defw CMD.? ;Help
166 defw CMD.@ ;Offset
167 defw CMD.A ;Assemble
168 defw CMD.B ;Breakpoint
169 defw CMD.C ;Call
170 defw CMD.D ;Display
171 defw ERROR ;
172 defw ERROR ;
173 defw CMD.G ;Go
174 defw CMD.H ;Hex Math
175 defw CMD.I ;In Port
176 defw ERROR ;
177 defw ERROR ;
178 defw CMD.L ;List
179 defw CMD.M ;Move
180 defw ERROR ;
181 defw CMD.O ;Out Port
182 defw ERROR ;
183 defw CMD.Q ;Query
184 defw CMD.R ;Read Intel Hex
185 defw CMD.S ;Substitute
186 defw CMD.T ;Trace
187 defw ERROR ;
188 defw CMD.V ;Verify
189 defw ERROR ;
190 defw CMD.X ;eXamine
191 defw CMD.Y ;eXamine Y Registers
192 defw CMD.Z ;Zap (fill) memory
193 l07eah:
194 ld a,'?'
195 call OUTCHAR
196 jp CRLF
197
198 CMD.?:
199 call assert_eol
200 ld hl,HLPMSG
201 call PSTR
202 ret
203
204 $ci:
205 push hl
206 push de
207 push bc
208 call ?conin
209 pop bc
210 pop de
211 pop hl
212 ret
213
214 $co:
215 push hl
216 push de
217 push bc
218 ld c,a
219 call ?cono
220 pop bc
221 pop de
222 pop hl
223 ret
224
225 DELC:
226 ld a,b
227 or a
228 ret z
229 call DELC1
230 dec hl
231 dec b
232 inc c
233 ld a,(hl)
234 cp ' '
235 ret nc
236 DELC1:
237 push de
238 push hl
239 push bc
240 ld c,BS
241 call ?cono
242 ld c,' '
243 call ?cono
244 ld c,BS
245 call ?cono
246 pop bc
247 pop hl
248 pop de
249 ret
250
251 DELL:
252 ld a,b ;
253 or a ;
254 ret z ;
255 call DELC ;
256 jr DELL ;
257
258 INLINE:
259 push hl ;
260 ld hl,CI.BUF ;
261 ld c,(hl) ;
262 inc hl ;
263 ld b,000h ;
264 inc hl ;
265 inlnxtch:
266 ld a,c ;
267 or a ;
268 jr z,inl_e ;
269 call $ci ;
270 cp CR ;
271 jr z,inl_e ;Accept line
272 cp LF ;
273 jr z,inl_e ;Accept line
274 cp BS ;
275 jr nz,l0844h ;
276 call DELC ;Delete Char
277 jr inlnxtch ;
278 l0844h:
279 cp DEL ;
280 jr nz,l084dh ;
281 call DELC ;Delete Char
282 jr inlnxtch ;
283 l084dh:
284 cp CNTRX ;
285 jr nz,l0856h ;
286 call DELL ;Delete Line
287 jr inlnxtch ;
288 l0856h:
289 cp TAB ;
290 jr nz,l085ch ;
291 ld a,' ' ;
292 l085ch:
293 ld (hl),a ;
294 cp ' ' ;
295 jr nc,l0869h ;
296 ld a,'^' ;Controll characters
297 call $co ;
298 ld a,(hl) ;
299 add a,'@' ;
300 l0869h:
301 call $co ;
302 inc hl ;
303 inc b ;
304 dec c ;
305 jr inlnxtch ;
306
307 inl_e:
308 ld hl,ci.buf+1 ;
309 ld (hl),b ;
310 call CRLF ;
311 ld de,ci.buf+1 ;
312 ld a,(de) ;
313 ld b,a ;
314 ld c,000h ;
315 inc b ;
316 l0880h:
317 inc de ;
318 dec b ;
319 jr z,l08b2h ;
320 ld a,(de) ;
321 bit 0,c ;
322 call z,UPCASE ;
323 ld (de),a ;
324 cp '''' ;
325 jr nz,l0880h ;
326 push de ;
327 dec de ;
328 ld a,(de) ;
329 cp '''' ;
330 jr z,l08aeh ;
331 dec de ;
332 ld a,(de) ;
333 cp '^' ;
334 jr z,l08a2h ;
335 dec de ;
336 ld a,(de) ;
337 cp '^' ;
338 jr nz,l08aeh ;
339 l08a2h:
340 inc de ;
341 push bc ;
342 call sub_0a0eh ;
343 pop bc ;
344 dec de ;
345 ld a,(de) ;
346 cp '''' ;
347 jr z,l08afh ;
348 l08aeh:
349 inc c ;
350 l08afh:
351 pop de ;
352 jr l0880h ;
353 l08b2h:
354 xor a ;
355 ld (de),a ;
356 ld de,ci.buf+2 ;
357 pop hl ;
358 ret ;
359
360 UPCASE:
361 cp 'a' ;
362 ret c ;
363 cp 'z'+1 ;
364 ret nc ;
365 and 05fh ;
366 ret ;
367
368 out.hl.@:
369 call out.hl ;
370 push de ;
371 push hl ;
372 ld de,(offs.@) ;
373 ld a,d ;
374 or e ;
375 jr z,l08ddh ;
376 call OUTBL ;
377 ld a,'@' ;
378 call OUTCHAR ;
379 and a ;
380 sbc hl,de ;
381 call out.hl ;
382 l08ddh:
383 pop hl ;
384 pop de ;
385 ret ;
386
387 out.bin.w:
388 ld a,h ;
389 call out.bin.b ;
390 ld a,l ;
391 out.bin.b:
392 ld b,008h ;
393 l08e7h:
394 add a,a ;
395 push af ;
396 ld a,0 ;
397 adc a,a ;
398 call out.digit ;
399 pop af ;
400 djnz l08e7h ;
401 ld a,'"' ;
402 jp OUTCHAR ;
403
404 sub_08f7h:
405 ld a,'-' ;
406 call OUTCHAR ;
407 dec hl ;
408 jp cpl.hl ;
409
410 out.hl.decm:
411 push hl ;
412 call sub_08f7h ;
413 db 3eh ; ld a,0E5h
414 out.hl.dec:
415 push hl
416 ld b,6 ;
417 call sub_0917h ;
418 pop hl ;
419 ld a,'.' ;
420 call OUTCHAR ;
421 l0911h:
422 call OUTBL ;
423 djnz l0911h ;
424 ret ;
425
426
427 sub_0917h:
428 dec b
429 push de
430 ld de,10
431 call DIV_HL_DE
432 ld a,h
433 or l
434 call nz,sub_0917h
435 ld a,e
436 pop de
437 jr out.digit
438
439 sub_0928h:
440 push hl
441 call sub_08f7h
442 call out.hl
443 pop hl
444 ret
445 out.hl:
446 ld a,h
447 call out.hex
448 ld a,l
449 out.hex:
450 push af
451 rra
452 rra
453 rra
454 rra
455 call out.digit
456 pop af
457 out.digit:
458 and 00fh
459 cp 10
460 jr c,l0947h
461 add a,007h
462 l0947h:
463 add a,'0'
464 jr OUTCHAR
465 l094bh:
466 ld a,'-'
467 call OUTCHAR
468 ld a,040h
469 out.ascii:
470 ex af,af'
471 call outquote
472 ex af,af'
473 push af
474 res 7,a
475 cp ' '
476 jr nc,l0960h
477 sub 0c0h
478 l0960h:
479 call OUTCHAR
480 push af
481 cp ''''
482 call z,OUTCHAR
483 pop af
484 ex af,af'
485 call outquote
486 pop af
487 or a
488 ld a,'.'
489 call m,OUTCHAR
490 ex af,af'
491 jr c,l094bh
492 ret
493
494 outquote:
495 ld a,''''
496 OUTCHAR:
497 push hl
498 push de
499 push bc
500 push af
501 and 07fh
502 ld c,a
503 call ?cono
504 ld hl,CON.COL
505 inc (hl)
506 pop af
507 pop bc
508 pop de
509 pop hl
510 ret
511
512 inchar:
513 push hl
514 push de
515 push bc
516 call ?const
517 and a
518 jr z,inch1
519 call ?conin
520 scf
521 inch1:
522 pop bc
523 pop de
524 pop hl
525 ret
526
527 PSTR:
528 ld c,000h
529 l0995h:
530 ld a,(hl)
531 and a
532 ret z
533 call OUTCHAR
534 inc c
535 inc hl
536 and a
537 ret m
538 jr l0995h
539
540 outbl6:
541 call outbl2
542 outbl4:
543 call outbl2
544 outbl2:
545 call OUTBL
546 OUTBL:
547 ld a,' '
548 jr OUTCHAR
549 CRLF:
550 call inchar
551 ld a,CR
552 call OUTCHAR
553 ld a,LF
554 call OUTCHAR
555 ld a,000h
556 ld (CON.COL),a
557 jp c,DDTZML
558 ret
559
560 ADD_HL_A:
561 add a,l
562 ld l,a
563 ret nc
564 inc h
565 ret
566
567 SKIPBL0:
568 inc de
569 SKIPBL:
570 ld a,(de)
571 cp ' '
572 jr z,SKIPBL0
573 cp 009h
574 jr z,SKIPBL0
575 or a
576 ret
577
578 skip_to_nextarg:
579 call SKIPBL
580 cp ','
581 ret nz
582 inc de
583 call SKIPBL
584 cp a
585 ret
586
587 assert_eol:
588 call SKIPBL
589 ret z
590 l09e5h:
591 jp ERROR
592
593 chk.sp:
594 push hl
595 push de
596 ld hl,0
597 add hl,sp
598 ld de,$stack-50
599 call CP.HL.DE
600 pop de
601 pop hl
602 jr c,l09e5h
603 ret
604
605 CP.HL.DE:
606 and a
607 sbc hl,de
608 add hl,de
609 ret
610
611 lookupch:
612 ld b,000h
613 l0a00h:
614 ld a,(hl)
615 and a
616 ret z
617 ld a,(de)
618 cp (hl)
619 jr z,l0a0bh
620 inc hl
621 inc b
622 jr l0a00h
623 l0a0bh:
624 scf
625 inc de
626 ret
627
628 sub_0a0eh:
629 ld hl,b_0x132A_start
630 ld b,07fh
631 jr l0a17h
632
633 sub_0a15h:
634 ld b,0ffh
635 l0a17h:
636 inc b
637 ld a,(hl)
638 and a
639 ret z
640 call l0a27
641 jr nc,l0a17h
642 res 7,b
643 ret
644
645 sub_0a23h:
646 push bc
647 res 7,b
648 db 3eh ;0a26 ld a,0c5h
649 l0a27:
650 push bc
651 push de
652 l0a29h:
653 ld a,(de)
654 xor (hl)
655 and 07fh
656 jr nz,l0a41h
657 bit 7,(hl)
658 inc hl
659 inc de
660 jr z,l0a29h
661 scf
662 bit 7,b
663 call z,sub_0d20h
664 jr nc,l0a44h
665 pop af
666 scf
667 pop bc
668 ret
669
670 l0a41h:
671 call sub_0a50h
672 l0a44h:
673 pop de
674 and a
675 pop bc
676 ret
677
678 sub_0a48h:
679 inc b
680 l0a49h:
681 dec b
682 ret z
683 call sub_0a50h
684 jr l0a49h
685 sub_0a50h:
686 ld a,(hl)
687 and a
688 ret z
689 l0a53h:
690 ld a,(hl)
691 inc hl
692 and a
693 ret m
694 jr l0a53h
695
696 get_arg3:
697 call get_arg_range
698 push hl
699 push bc
700 call skip_to_nextarg
701 call get_arg
702 ex de,hl
703 pop bc
704 pop hl
705 ret
706
707 sub_0a68h:
708 call EXPR
709 jr c,error0
710 ret
711
712 get_arg:
713 call sub_0a68h
714 l0a71h:
715 jp assert_eol
716
717 get_lastarg_def:
718 call get_arg_def
719 jr l0a71h
720
721 get_arg_def:
722 push hl
723 call EXPR
724 jr c,l0a80h
725 ex (sp),hl
726 l0a80h:
727 pop hl
728 ret
729
730 sub_0a82h:
731 call sub_0a87h
732 jr l0a71h
733
734 sub_0a87h:
735 db 0e6h ;0a87 and 037h (clear carry)
736 get_arg_range:
737 scf
738 ex af,af'
739 push bc
740 push hl
741 call EXPR
742 jr nc,l0a97h
743 ex af,af'
744 jr c,error0
745 ex af,af'
746 pop hl
747
748 defb 03eh
749 l0a97h:
750 pop af
751 call sub_0aa5h
752 jr nc,l0aa3h
753 ex af,af'
754 pop bc
755 ret nc
756 error0:
757 jp ERROR
758
759 l0aa3h:
760 pop af
761 ret
762
763 sub_0aa5h:
764 call skip_to_nextarg
765 cp 'S'
766 jr nz,l0aadh
767 inc de
768 l0aadh:
769 push hl
770 push af
771 call EXPR
772 jr c,l0ac3h
773 ld b,h
774 ld c,l
775 pop af
776 pop hl
777 jr z,l0ac1h
778 ld a,c
779 sub l
780 ld c,a
781 ld a,b
782 sbc a,h
783 ld b,a
784 inc bc
785 l0ac1h:
786 and a
787 ret
788
789 l0ac3h:
790 pop af
791 pop hl
792 jr z,error0
793 scf
794 ret
795
796 EXPR:
797 call SKIPBL
798 EXPR1:
799 call do_subexpr
800 ret c
801 call do_rel_op
802 ret nc
803 push bc
804 push hl
805 call do_subexpr
806 jr c,error0
807 ex de,hl
808 ex (sp),hl
809 and a
810 sbc hl,de
811 ld hl,0ffffh
812 pop de
813 ret
814
815 do_op_eq:
816 jr z,l0af8h
817 jr l0af7h
818 do_op_ne:
819 jr nz,l0af8h
820 jr l0af7h
821 do_op_le:
822 jr z,l0af8h
823 do_op_lt:
824 jr c,l0af8h
825 jr l0af7h
826 do_op_gt:
827 jr z,l0af7h
828 do_op_ge:
829 jr nc,l0af8h
830 l0af7h:
831 inc hl
832 l0af8h:
833 and a
834 ret
835
836 do_rel_op:
837 push hl
838 ld hl,tab_eq_le_ge
839 call lookupch
840 jr nc,l0b28h
841 ld a,b
842 or a
843 jr z,l0b1ch
844 ld a,(de)
845 cp '='
846 jr nz,l0b11h
847 inc de
848 inc b
849 inc b
850 jr l0b1ch
851
852 l0b11h:
853 bit 0,b
854 jr z,l0b1ch
855 cp '>'
856 jr nz,l0b1ch
857 inc de
858 ld b,005h
859 l0b1ch:
860 ld hl,tab_func_eqlege
861 ld a,b
862 add a,a
863 call ADD_HL_A
864 ld c,(hl)
865 inc hl
866 ld b,(hl)
867 scf
868 l0b28h:
869 pop hl
870 ret
871
872 tab_eq_le_ge:
873 db '=<>',0
874
875 tab_func_eqlege:
876 defw do_op_eq
877 defw do_op_lt
878 defw do_op_gt
879 defw do_op_le
880 defw do_op_ge
881 defw do_op_ne
882
883 do_subexpr:
884 call do_factor
885 ret c
886 l0b3eh:
887 call do_binary_op
888 push hl
889 push bc
890 call do_factor
891 pop bc
892 ex de,hl
893 ex (sp),hl
894 jr nc,l0b52h
895 pop de
896 ld a,b
897 or c
898 ret z
899 jp ERROR
900
901 l0b52h:
902 ld a,b
903 or c
904 push bc
905 ret nz
906 pop bc
907 do_op_add:
908 add hl,de
909 l0b58h:
910 pop de
911 jr l0b3eh
912
913 do_op_sub:
914 and a
915 sbc hl,de
916 jr l0b58h
917
918 do_op_mlt:
919 push bc
920 if CPU_Z180
921 ld b,h
922 ld c,e
923 ld h,e
924 ld e,l
925 mlt bc
926 mlt de
927 mlt hl
928 ld a,h
929 add a,c
930 add a,e
931 ld h,a
932 else
933 ld b,h
934 ld c,l
935 ld hl,0
936 ld a,16
937 mlt_1:
938 add hl,hl
939 ex de,hl
940 add hl,hl
941 ex de,hl
942 jr nc,mlt_2
943 add hl,bc
944 mlt_2:
945 dec a
946 jr nz,mlt_1
947 endif
948 pop bc
949 jr l0b58h
950
951 do_op_div:
952 call DIV_HL_DE
953 jr l0b58h
954
955 do_op_mod:
956 call DIV_HL_DE
957 ex de,hl
958 jr l0b58h
959
960 ; divide x/y
961 ; hl: x
962 ; de: y
963 ; return:
964 ; hl: q (x/y)
965 ; de: r (x%y)
966
967 DIV_HL_DE:
968 push bc
969 ex de,hl ;de = x, hl = y
970 ld b,h ;bc = y
971 ld c,l
972 ld hl,0 ;r = 0
973 ld a,16 ;count
974
975 ; de: x (x shifted out, q shifted in)
976 ; bc: y
977 ; hl: r (initially 0)
978
979 l0b89h:
980 ex de,hl ;x
981 add hl,hl ;x <<= 1
982 ex de,hl ;r
983 adc hl,hl ;r <<= 1
984
985 or a
986 sbc hl,bc
987 inc de
988 jr nc,div_no_restore
989 add hl,bc
990 dec de
991 div_no_restore:
992 dec a
993 jr nz,l0b89h
994 ex de,hl ;hl: q de: r
995 pop bc
996 ret
997
998 do_op_and:
999 ld a,h
1000 and d
1001 ld h,a
1002 ld a,l
1003 and e
1004 ld l,a
1005 jr l0b58h
1006
1007 do_op_or:
1008 ld a,h
1009 or d
1010 ld h,a
1011 ld a,l
1012 or e
1013 ld l,a
1014 jr l0b58h
1015
1016 do_op_xor:
1017 ld a,h
1018 xor d
1019 ld h,a
1020 ld a,l
1021 xor e
1022 ld l,a
1023 jr l0b58h
1024
1025 do_binary_op:
1026 push hl
1027 ld hl,tab_op_a
1028 call lookupch
1029 ld a,b
1030 ld hl,tab_func_opa
1031 add a,a
1032 call ADD_HL_A
1033 ld c,(hl)
1034 inc hl
1035 ld b,(hl)
1036 pop hl
1037 ret
1038
1039 tab_op_a:
1040 DB '+-*/%&!#',0
1041 tab_func_opa:
1042 defw do_op_add
1043 defw do_op_sub
1044 defw do_op_mlt
1045 defw do_op_div
1046 defw do_op_mod
1047 defw do_op_and
1048 defw do_op_or
1049 defw do_op_xor
1050 defw 0
1051
1052 fact_factor:
1053 call do_factor
1054 ret nc
1055 jp ERROR
1056
1057 do_factor:
1058 call chk.sp
1059 call get.number
1060 ret nc
1061 inc de
1062 ld hl,TOPRAM
1063 cp 'T'
1064 ret z
1065 ld hl,(HILOD)
1066 cp 'H'
1067 ret z
1068 ld hl,(MAXLOD)
1069 cp 'M'
1070 ret z
1071 ld hl,TPA
1072 cp 'L'
1073 ret z
1074 ld hl,(offs.@)
1075 cp '@'
1076 ret z
1077 ld hl,(OFFS.pc)
1078 cp '$'
1079 ret z
1080 cp '-'
1081 jr z,fact_factneg
1082 cp '~'
1083 jr z,fact_factinv
1084 cp '+'
1085 jr z,fact_factor
1086 cp '^'
1087 jr z,fact_reg.CPU
1088 cp 'Y'
1089 jr z,fact_reg.Y
1090 cp '('
1091 jr z,fact_mem
1092 cp '['
1093 jp z,EXPR_BRCKT ;0c35 [ expression ]
1094 cp ''''
1095 jr z,fact_factstring
1096 dec de
1097 scf
1098 ret
1099
1100 fact_reg.Y:
1101 call get.decdigit
1102 jp c,ERROR
1103 inc de
1104 add a,a
1105 ld hl,reg.Y
1106 call ADD_HL_A
1107 ld a,(hl)
1108 inc hl
1109 ld h,(hl)
1110 ld l,a
1111 and a
1112 ret
1113 fact_factstring:
1114 ld hl,0
1115 l0c56h:
1116 ld a,(de)
1117 cp ''''
1118 jr z,l0c62h
1119 and a
1120 ret z
1121 l0c5dh:
1122 ld h,l
1123 ld l,a
1124 inc de
1125 jr l0c56h
1126
1127 l0c62h:
1128 inc de
1129 ld a,(de)
1130 cp ''''
1131 jr z,l0c5dh
1132 sub '.'
1133 or a
1134 ret nz
1135 inc de
1136 set 7,l
1137 ret
1138
1139 fact_reg.CPU:
1140 call sub_1315h
1141 jr nc,l0cbbh
1142 ld a,(hl)
1143 inc hl
1144 ld h,(hl)
1145 ld l,a
1146 and a
1147 bit 0,c
1148 ret nz
1149 ld h,000h
1150 ret
1151
1152 fact_factneg:
1153 call fact_factor
1154 dec hl
1155 cpl.hl:
1156 ld a,h
1157 cpl
1158 ld h,a
1159 ld a,l
1160 cpl
1161 ld l,a
1162 ret
1163 fact_factinv:
1164 call fact_factor
1165 jr cpl.hl
1166
1167 fact_mem:
1168 call EXPR1
1169 jr c,l0cbbh
1170 ld a,(de)
1171 cp ')'
1172 jr nz,l0cbbh
1173 inc de
1174 comst
1175 ld a,(hl)
1176 inc hl ;
1177 ld h,(hl) ;
1178 comend
1179 ld l,a
1180 ld a,(de)
1181 inc de
1182 cp '.'
1183 ret z
1184 dec de
1185 xor a
1186 ld h,a
1187 ret
1188
1189 EXPR_BRCKT:
1190 call EXPR1
1191 jr c,l0cbbh
1192 ld a,(de)
1193 cp ']'
1194 inc de
1195 ret z
1196 l0cbbh:
1197 jp ERROR
1198
1199 get.number:
1200 call get.hexdigit
1201 ret c
1202 push de
1203 l0cc3h:
1204 inc de
1205 call get.hexdigit
1206 jr nc,l0cc3h
1207 pop de
1208 cp '.'
1209 jr z,l0d04h
1210 cp '"'
1211 jr z,l0ce9h
1212 ld hl,0
1213 l0cd5h:
1214 call get.hexdigit
1215 jr c,l0ce4h
1216 add hl,hl
1217 add hl,hl
1218 add hl,hl
1219 add hl,hl
1220 call ADD_HL_A
1221 inc de
1222 jr l0cd5h
1223 l0ce4h:
1224 xor 'H'
1225 ret nz
1226 inc de
1227 ret
1228
1229 l0ce9h:
1230 ld hl,0
1231 l0cech:
1232 call get.bindigit
1233 l0cefh:
1234 inc de
1235 jr c,l0cf8h
1236 add hl,hl
1237 call ADD_HL_A
1238 jr l0cech
1239 l0cf8h:
1240 cp '"'
1241 jp nz,ERROR
1242 call get.bindigit
1243 jr nc,l0cefh
1244 or a
1245 ret
1246 l0d04h:
1247 ld hl,0
1248 l0d07h:
1249 call get.decdigit
1250 inc de
1251 jr c,l0d1ah
1252 push bc
1253 add hl,hl ;0d0e hl *= 10
1254 ld b,h
1255 ld c,l
1256 add hl,hl
1257 add hl,hl
1258 add hl,bc
1259 pop bc
1260 call ADD_HL_A
1261 jr l0d07h
1262 l0d1ah:
1263 cp '.'
1264 ret z
1265 jp ERROR
1266
1267 sub_0d20h:
1268 ld a,(de)
1269 cp 05bh
1270 jr l0d28h
1271
1272 get.hexdigit:
1273 ld a,(de)
1274 sub_0d26h:
1275 cp 'F'+1
1276 l0d28h:
1277 ccf
1278 ret c
1279 cp 'A'
1280 jr c,l0d32h
1281 sub 'A'-10
1282 ret
1283
1284 get.decdigit:
1285 ld a,(de)
1286 l0d32h:
1287 cp '9'+1
1288 jr l0d39h
1289 get.bindigit:
1290 ld a,(de)
1291 cp '1'+1
1292 l0d39h:
1293 ccf
1294 ret c
1295 cp '0'
1296 ret c
1297 sub '0'
1298 ret
1299
1300 l0d41h:
1301 call assert_eol
1302
1303 prnt_cpustat:
1304 call prnt_f
1305 call outbl2
1306 ld hl,b_0x0DFD_start
1307 ld de,b_0x0E1D_start
1308 ld b,006h
1309 l0d52h:
1310 call prnt_regs
1311 djnz l0d52h
1312 push hl
1313 push de
1314 ld iy,(REG.PC)
1315 call sub_1f77h
1316 exx
1317 ex af,af'
1318 call CRLF
1319 call prnt_f2
1320 call outbl2
1321 pop de
1322 pop hl
1323 ld b,007h
1324 l0d6fh:
1325 call prnt_regs
1326 djnz l0d6fh
1327 exx
1328 ex af,af'
1329 and a
1330 jr z,l0d7fh
1331 call outbl6
1332 call sub_1f5bh
1333 l0d7fh:
1334 jp crlf
1335
1336 prnt_f:
1337 ld a,(reg.f)
1338 call prnt_flags
1339 ld a,(reg.iff)
1340 cp 0f3h
1341 jp z,outbl
1342 ld a,'E'
1343 jp outchar
1344
1345 prnt_f2:
1346 ld a,(reg.f2)
1347 call prnt_flags
1348 jp outbl
1349
1350 prnt_flags:
1351 ld b,a
1352 ld a,'S'
1353 call sub_0dbeh
1354 ld a,'Z'
1355 call sub_0dbeh
1356 rl b
1357 ld a,'H'
1358 call sub_0dbeh
1359 rl b
1360 ld a,'V'
1361 call sub_0dbeh
1362 ld a,'N'
1363 call sub_0dbeh
1364 ld a,'C'
1365 sub_0dbeh:
1366 rl b
1367 jp c,OUTCHAR
1368 jp OUTBL
1369
1370 prnt_regs:
1371 push bc
1372 push de
1373 call PSTR
1374 ld a,'='
1375 call OUTCHAR
1376 ex (sp),hl
1377 ld e,(hl)
1378 inc hl
1379 ld d,(hl)
1380 inc hl
1381 ld a,(hl)
1382 inc hl
1383 push hl
1384 and a
1385 jr z,l0df2h
1386 push af
1387 ld a,(de)
1388 ld l,a
1389 inc de
1390 ld a,(de)
1391 ld h,a
1392 pop af
1393 dec a
1394 jr z,l0dedh
1395 call out.hl.@
1396 call z,outbl6
1397 jr l0df6h
1398 l0dedh:
1399 call out.hl
1400 jr l0df6h
1401 l0df2h:
1402 ld a,(de)
1403 call out.hex
1404 l0df6h:
1405 call OUTBL
1406 pop de
1407 pop hl
1408 pop bc
1409 ret
1410
1411 b_0x0DFD_start:
1412 DC 'A '
1413 DC 'BC '
1414 DC 'DE '
1415 DC 'HL '
1416 DC 'SP'
1417 DC 'PC'
1418 DC 'A'''
1419 DC 'BC'''
1420 DC 'DE'''
1421 DC 'HL'''
1422 DC 'IX'
1423 DC 'IY'
1424 DC 'I'
1425 DB 0
1426
1427 b_0x0E1D_start:
1428 defw reg.a
1429 defb 000h
1430 defw reg.c
1431 defb 001h
1432 defw reg.e
1433 defb 001h
1434 defw reg.l
1435 defb 001h
1436 defw reg.sp
1437 defb 001h
1438 defw reg.pc
1439 defb 002h
1440 defw reg.a2
1441 defb 000h
1442 defw reg.c2
1443 defb 001h
1444 defw reg.e2
1445 defb 001h
1446 defw reg.l2
1447 defb 001h
1448 defw reg.ix
1449 defb 001h
1450 defw reg.iy
1451 defb 001h
1452 defw reg.i
1453 dw 0
1454
1455 CMD.G:
1456 sub a
1457 ld (TCFLG),a
1458 ld (XA747),a
1459 call EXPR
1460 jr c,l0e54h
1461 ld (REG.PC),hl
1462 l0e54h:
1463 call SKIPBL
1464 jp z,l1183h
1465 cp ';'
1466 jp nz,ERROR
1467 inc de
1468 ld a,002h
1469 call sub_0f24h
1470 jp l1183h
1471
1472 sub_0e68h:
1473 ld b,BP_CNT
1474 ld ix,bp_tab
1475 l0e6eh:
1476 ld a,(ix+000h)
1477 and 0f1h
1478 ld (ix+000h),a
1479 call sub_11c5h
1480 ld de,BP_SIZE
1481 add ix,de
1482 djnz l0e6eh
1483 ret
1484
1485 CMD.B:
1486 call SKIPBL
1487 jr z,l0ecbh
1488 inc de
1489 cp 'X'
1490 jr z,l0e91h
1491 dec de
1492 ld a,001h
1493 jp sub_0f24h
1494 l0e91h:
1495 call SKIPBL
1496 jr z,l0ea6h
1497 l0e96h:
1498 call EXPR
1499 jp c,assert_eol
1500 push de
1501 call sub_0ea7h
1502 pop de
1503 call skip_to_nextarg
1504 jr l0e96h
1505 l0ea6h:
1506 scf
1507 sub_0ea7h:
1508 ld b,BP_CNT
1509 ld ix,bp_tab
1510 l0eadh:
1511 push af
1512 jr c,l0ebbh
1513 ld e,(ix+002h)
1514 ld d,(ix+003h)
1515 call CP.HL.DE
1516 jr nz,l0ec2h
1517 l0ebbh:
1518 ld (ix+000h),000h
1519 call sub_11c5h
1520 l0ec2h:
1521 ld de,BP_SIZE
1522 add ix,de
1523 pop af
1524 djnz l0eadh
1525 ret
1526 l0ecbh:
1527 ld b,BP_CNT
1528 ld ix,bp_tab
1529 l0ed1h:
1530 bit 0,(ix+000h)
1531 jr z,l0f1ch
1532 ld a,'R'
1533 bit 4,(ix+000h)
1534 jr nz,l0ee1h
1535 ld a,' '
1536 l0ee1h:
1537 call OUTCHAR
1538 call OUTBL
1539 ld l,(ix+002h)
1540 ld h,(ix+003h)
1541 call out.hl.@
1542 call outbl2
1543 ld a,':'
1544 call OUTCHAR
1545 ld l,(ix+004h)
1546 ld h,(ix+005h)
1547 call out.hl
1548 ld l,(ix+006h)
1549 ld h,(ix+007h)
1550 ld a,h
1551 or l
1552 jr z,l0f19h
1553 call outbl4
1554 ld a,'I'
1555 call OUTCHAR
1556 call outbl2
1557 call PSTR
1558 l0f19h:
1559 call CRLF
1560 l0f1ch:
1561 ld de,BP_SIZE
1562 add ix,de
1563 djnz l0ed1h
1564 ret
1565
1566 sub_0f24h:
1567 ld b,a
1568 call SKIPBL
1569 ret z
1570 cp 'R'
1571 jr nz,l0f30h
1572 inc de
1573 set 4,b
1574 l0f30h:
1575 push bc
1576 call EXPR
1577 jp c,ERROR
1578 pop bc
1579 bit 0,b
1580 push bc
1581 push de
1582 push hl
1583 call nz,sub_0ea7h
1584 pop hl
1585 call sub_0f68h
1586 pop de
1587 ld (ix+002h),l
1588 ld (ix+003h),h
1589 call sub_0f80h
1590 ld (ix+004h),l
1591 ld (ix+005h),h
1592 call sub_0f91h
1593 ld (ix+006h),l
1594 ld (ix+007h),h
1595 call skip_to_nextarg
1596 pop af
1597 ld (ix+000h),a
1598 and 00fh
1599 jr sub_0f24h
1600 sub_0f68h:
1601 ld b,BP_CNT
1602 ld ix,bp_tab
1603 l0f6eh:
1604 ld a,(ix+000h)
1605 and 00fh
1606 ret z
1607 push bc
1608 ld bc,BP_SIZE
1609 add ix,bc
1610 pop bc
1611 djnz l0f6eh
1612 jp ERROR
1613
1614 sub_0f80h:
1615 call SKIPBL
1616 ld hl,1
1617 cp 03ah
1618 ret nz
1619 inc de
1620 call EXPR
1621 jp c,ERROR
1622 ret
1623 sub_0f91h:
1624 call SKIPBL
1625 cp 049h
1626 ld hl,0
1627 ret nz
1628 inc de
1629 call SKIPBL
1630 push de
1631 call EXPR
1632 jp c,ERROR
1633 ex de,hl
1634 pop de
1635 push de
1636 sbc hl,de
1637 ld b,h
1638 ld c,l
1639 ld hl,(sexp1)
1640 push hl
1641 add hl,bc
1642 ld de,sexpbufe
1643 call CP.HL.DE
1644 jp nc,ERROR
1645 pop hl
1646 ld (sexp2),hl
1647 pop de
1648 ex de,hl
1649 ldir
1650 xor a
1651 ld (de),a
1652 inc de
1653 ex de,hl
1654 ld (sexp1),hl
1655 ld hl,(sexp2)
1656 ret
1657
1658 bpddtz:
1659 if ROMSYS
1660 ld h,ROMEN
1661 jr z,l0fd2h
1662 inc h
1663 l0fd2h:
1664 push hl ;save rom enable stat
1665 endif
1666 push bc
1667 push de
1668 push ix
1669 push iy
1670 ld a,i
1671 ld h,a
1672 ld l,000h
1673 push hl ;save I register
1674
1675 if CPU_Z180
1676 ld a,0f3h ;DI
1677 jp po,l0fe6h
1678 ld a,0fbh ;EI
1679 else ;NMOS Z80 design flaw
1680 call getiff ;return Carry set, if INTs are disabled.
1681 ld a,0f3h ;DI
1682 jr c,l0fe6h
1683 ld a,0fbh ;EI
1684 endif
1685 l0fe6h:
1686 ld (reg.iff),a
1687 ld hl,ivtab
1688 ld a,h
1689 ld i,a
1690 call ddtei
1691 ex af,af'
1692 push af
1693 exx
1694 push bc
1695 push de
1696 push hl
1697 call bp.unset
1698 if CPU_Z180
1699 in0 a,(itc)
1700 jp p,l1017h
1701 res TRAP,a
1702 out0 (itc),a
1703 bit UFO,a
1704 jr z,l1011h
1705 ld hl,(REG.PC)
1706 dec hl
1707 ld (REG.PC),hl
1708 l1011h:
1709 ld hl,MSG_trap
1710 call PSTR
1711 l1017h:
1712 endif
1713
1714 ld a,(XBFE8)
1715 dec a
1716 jr z,l1051h
1717 call inchar
1718 jr c,l102eh
1719 call sub_1059h
1720 and a
1721 jp z,l1183h
1722 and 083h
1723 jp z,l284ah
1724 l102eh:
1725 call sub_0e68h
1726 call prnt_cpustat
1727 jp DDTZML
1728
1729 if CPU_Z180
1730 MSG_trap:
1731 DB CR,LF,'Undefined opcode trap'
1732 DB CR,LF,0
1733 endif
1734
1735 l1051h:
1736 ld (XBFE8),a
1737 ld c,007h
1738 jp l119fh
1739 sub_1059h:
1740 ld a,080h
1741 ex af,af'
1742 sub a
1743 ld (XA747),a
1744 ld b,BP_CNT
1745 ld ix,bp_tab
1746 l1066h:
1747 ld a,(ix+000h)
1748 and 007h
1749 jr z,l107eh
1750 ld e,(ix+002h)
1751 ld d,(ix+003h)
1752 ld hl,(REG.PC)
1753 call CP.HL.DE
1754 push bc
1755 call z,sub_1087h
1756 pop bc
1757 l107eh:
1758 ld de,BP_SIZE
1759 add ix,de
1760 djnz l1066h
1761 ex af,af'
1762 ret
1763 sub_1087h:
1764 ex af,af'
1765 res 7,a
1766 ex af,af'
1767 ld e,(ix+006h)
1768 ld d,(ix+007h)
1769 ld a,d
1770 or e
1771 ld hl,0ffffh
1772 call nz,EXPR
1773 ld a,h
1774 or l
1775 jr z,l10aeh
1776 ld e,(ix+004h)
1777 ld d,(ix+005h)
1778 dec de
1779 ld a,d
1780 or e
1781 jr z,l10b9h
1782 ld (ix+004h),e
1783 ld (ix+005h),d
1784 l10aeh:
1785 bit 4,(ix+000h)
1786 ret z
1787 ld a,001h
1788 ld (XA747),a
1789 ret
1790 l10b9h:
1791 ex af,af'
1792 or (ix+000h)
1793 ex af,af'
1794 ret
1795
1796 bp.unset:
1797 ld b,BP_CNT
1798 ld ix,bp_tab
1799 l10c5h:
1800 bit 5,(ix+000h)
1801 res 5,(ix+000h)
1802 jr z,l10e7h
1803 ld l,(ix+002h)
1804 ld h,(ix+003h)
1805 ld a,(ddtzrst)
1806 comst
1807 cp (hl)
1808 comend
1809 jr nz,l10e7h
1810 ld a,(ix+001h)
1811 comst
1812 ld (hl),a
1813 comend
1814 l10e7h:
1815 res 3,(ix+000h)
1816 ld de,BP_SIZE
1817 add ix,de
1818 djnz l10c5h
1819 ret
1820 sub_10f3h:
1821 ld b,BP_CNT
1822 ld ix,bp_tab
1823 l10f9h:
1824 ld a,(ix+000h)
1825 and 003h
1826 jr z,l110dh
1827 ld e,(ix+002h)
1828 ld d,(ix+003h)
1829 ld hl,(REG.PC)
1830 call CP.HL.DE
1831 ret z
1832 l110dh:
1833 ld de,BP_SIZE
1834 add ix,de
1835 djnz l10f9h
1836 sub a
1837 inc a
1838 ret
1839 sub_1117h:
1840 call sub_0f68h
1841 ld (ix+004h),001h
1842 ld (ix+005h),000h
1843 ld (ix+002h),l
1844 ld (ix+003h),h
1845 ld (ix+006h),000h
1846 ld (ix+007h),000h
1847 ld a,(XBFE8)
1848 and a
1849 ld a,008h
1850 jr nz,l113ah
1851 ld a,004h
1852 l113ah:
1853 ld (ix+000h),a
1854 ret
1855
1856 bp.set:
1857 ld b,BP_CNT
1858 ld ix,bp_tab
1859 l1144h:
1860 ld a,(ix+000h)
1861 and c
1862 jr z,l117bh
1863 set 5,(ix+000h)
1864 ld l,(ix+002h)
1865 ld h,(ix+003h)
1866
1867
1868 ld a,(ddtzrst)
1869 comst
1870 ld e,(hl)
1871 ld (hl),a
1872 comend
1873 ld (ix+001h),e
1874 and 038h
1875 ld h,0
1876 ld l,a
1877 ld de,bpent
1878 comst ;
1879 ld (hl),0c3h
1880 inc hl
1881 ld (hl),e
1882 inc hl
1883 ld (hl),d
1884 comend
1885
1886
1887 l117bh:
1888 ld de,BP_SIZE
1889 add ix,de
1890 djnz l1144h
1891 ret
1892
1893 l1183h:
1894 sub a
1895 ld (XBFE8),a
1896 ld a,(XA747)
1897 and a
1898 call nz,prnt_cpustat
1899 call sub_10f3h
1900 ld c,007h
1901 jr nz,l119fh
1902 ld a,001h
1903 ld (XBFE8),a
1904 call sub_26e7h
1905 ld c,008h
1906 l119fh:
1907 call bp.set
1908 ld sp,$stack ;11a2 set/restore user cpu state
1909 pop hl
1910 pop de
1911 pop bc
1912 pop af
1913 exx
1914 ex af,af'
1915 pop af
1916 ld i,a
1917 pop iy
1918 pop ix
1919 pop de
1920 pop bc
1921 if ROMSYS
1922 pop hl
1923 ld a,l
1924 and M_MWI
1925 ld l,a
1926 di
1927 in0 a,(dcntl)
1928 and ~M_MWI
1929 or l
1930 ld l,a
1931 ld a,h
1932 else
1933 pop hl
1934 di
1935 endif
1936 jp $go ;11c2 common ram, switch banks and go to user prog
1937
1938 sub_11c5h:
1939 ld a,(ix+000h)
1940 and 003h
1941 ret nz
1942 ld e,(ix+006h)
1943 ld d,(ix+007h)
1944 ld a,d
1945 or e
1946 ret z
1947 push bc
1948 ld h,d
1949 ld l,e
1950 sub a
1951 ld (ix+006h),a
1952 ld (ix+007h),a
1953 ld bc,0ffffh
1954 cpir
1955 l11e3h:
1956 push de
1957 ld de,(sexp1)
1958 call CP.HL.DE
1959 pop de
1960 jr nc,l11f9h
1961 call sub_11ffh
1962 l11f1h:
1963 ld a,(hl)
1964 ldi
1965 and a
1966 jr nz,l11f1h
1967 jr l11e3h
1968 l11f9h:
1969 ld (sexp1),de
1970 pop bc
1971 ret
1972 sub_11ffh:
1973 ld iy,bp_tab
1974 push de
1975 l1204h:
1976 ld e,(iy+006h)
1977 ld d,(iy+007h)
1978 call CP.HL.DE
1979 jr z,l1216h
1980 ld de,BP_SIZE
1981 add iy,de
1982 jr l1204h
1983 l1216h:
1984 pop de
1985 ld (iy+006h),e
1986 ld (iy+007h),d
1987 ret
1988
1989 CMD.Y:
1990 call get.decdigit
1991 jr c,l122fh
1992 inc de
1993 push af
1994 call assert_eol
1995 pop af
1996 call sub_1248h
1997 jp l127ch
1998 l122fh:
1999 call assert_eol
2000 xor a
2001 l1233h:
2002 push af
2003 call sub_1248h
2004 call outbl4
2005 pop af
2006 inc a
2007 bit 0,a
2008 push af
2009 call z,CRLF
2010 pop af
2011 cp LF
2012 jr c,l1233h
2013 ret
2014
2015 sub_1248h:
2016 ld c,a
2017 ld b,0
2018 add a,'0'+080h
2019 ld de,msg.Y+1
2020 ld (de),a
2021 dec de
2022 ld hl,reg.Y
2023 add hl,bc
2024 add hl,bc
2025 ex de,hl
2026 ld c,003h
2027 jp l129ah
2028
2029 CMD.X:
2030 call SKIPBL
2031 call sub_1315h
2032 jp nc,l0d41h
2033 call assert_eol
2034 ld a,b
2035 cp 01fh
2036 jr z,l12c6h
2037 cp 020h
2038 jr z,l12b6h
2039 ex de,hl
2040 ld hl,b_0x132A_start
2041 call sub_0a48h
2042 l1279h:
2043 call l129ah
2044 l127ch:
2045 call OUTBL
2046 push de
2047 push bc
2048 call INLINE
2049 call SKIPBL
2050 jr z,l1297h
2051 call get_arg
2052 ld b,h
2053 ld c,l
2054 pop af
2055 pop hl
2056 ld (hl),c
2057 bit 0,a
2058 ret z
2059 inc hl
2060 ld (hl),b
2061 ret
2062 l1297h:
2063 pop af
2064 pop hl
2065 ret
2066 l129ah:
2067 ld b,c
2068 call PSTR
2069 ld a,'='
2070 call OUTCHAR
2071 ld a,(de)
2072 bit 0,b
2073 jp z,out.hex
2074 ld l,a
2075 inc de
2076 ld a,(de)
2077 dec de
2078 ld h,a
2079 bit 1,b
2080 jp z,out.hl
2081 jp out.hl.@
2082
2083 l12b6h:
2084 call prnt_f
2085 ld a,0f3h
2086 ld (reg.iff),a
2087 scf
2088 call sub_12d1h
2089 ld (reg.f),a
2090 ret
2091
2092 l12c6h:
2093 call prnt_f2
2094 and a
2095 call sub_12d1h
2096 ld (reg.f2),a
2097 ret
2098
2099 sub_12d1h:
2100 ex af,af'
2101 ld b,000h
2102 call outbl
2103 call assert_eol
2104 call inline
2105 l12ddh:
2106 call skipbl
2107 ld a,b
2108 ret z
2109 push bc
2110 ld hl,tab_pr_flags
2111 call lookupch
2112 jp nc,error
2113 ld a,b
2114 cp 008h
2115 jr z,l12feh
2116 inc b
2117 ld a,001h
2118 jr l12f7h
2119 l12f6h:
2120 rlca
2121 l12f7h:
2122 djnz l12f6h
2123 pop bc
2124 or b
2125 ld b,a
2126 jr l12ddh
2127 l12feh:
2128 ex af,af'
2129 jp nc,ERROR
2130 ex af,af'
2131 ld a,0FBh
2132 ld (reg.iff),a
2133 pop bc
2134 jr l12ddh
2135
2136 tab_pr_flags:
2137 db 'CNV H ZSE'
2138 db 0
2139
2140 sub_1315h:
2141 call sub_0a0eh
2142 ret nc
2143 ld a,b
2144 add a,b
2145 add a,b
2146 ld hl,b_0x136C_start
2147 call ADD_HL_A
2148 ld c,(hl)
2149 inc hl
2150 ld a,(hl)
2151 inc hl
2152 ld h,(hl)
2153 ld l,a
2154 scf
2155 ret
2156
2157 b_0x132A_start:
2158 if ROMSYS
2159 DC 'ROMSEL'
2160 endif
2161 if CPU_Z180
2162 DC 'CBAR'
2163 DC 'BBR'
2164 else
2165 DC 'BNK'
2166 endif
2167 DC 'BC'''
2168 DC 'DE'''
2169 DC 'HL'''
2170 DC 'BC'
2171 DC 'DE'
2172 DC 'HL'
2173 DC 'A'''
2174 DC 'B'''
2175 DC 'C'''
2176 DC 'D'''
2177 DC 'E'''
2178 DC 'H'''
2179 DC 'L'''
2180 DC 'A'
2181 DC 'B'
2182 DC 'C'
2183 DC 'D'
2184 DC 'E'
2185 DC 'H'
2186 DC 'L'
2187 DC 'IX'
2188 DC 'IY'
2189 DC 'SP'
2190 DC 'PC'
2191 DC 'X'
2192 DC 'Y'
2193 DC 'S'
2194 DC 'P'
2195 DC 'I'
2196 DC 'F'''
2197 DC 'F'
2198 DB 0
2199 b_0x136C_start:
2200 if ROMSYS
2201 defb 000h
2202 defw uromen
2203 endif
2204 if CPU_Z180
2205 defb 000h
2206 defw ucbar
2207 defb 000h
2208 defw ubbr
2209 else
2210 defb 000h
2211 defw ubnk
2212 endif
2213 defb 003h
2214 defw reg.c2
2215 defb 003h
2216 defw reg.e2
2217 defb 003h
2218 defw reg.l2
2219 defb 003h
2220 defw reg.c
2221 defb 003h
2222 defw reg.e
2223 defb 003h
2224 defw reg.l
2225 defb 000h
2226 defw reg.a2
2227 defb 000h
2228 defw reg.b2
2229 defb 000h
2230 defw reg.c2
2231 defb 000h
2232 defw reg.d2
2233 defb 000h
2234 defw reg.e2
2235 defb 000h
2236 defw reg.h2
2237 defb 000h
2238 defw reg.l2
2239 defb 000h
2240 defw reg.a
2241 defb 000h
2242 defw reg.b
2243 defb 000h
2244 defw reg.c
2245 defb 000h
2246 defw reg.d
2247 defb 000h
2248 defw reg.e
2249 defb 000h
2250 defw reg.h
2251 defb 000h
2252 defw reg.l
2253 defb 003h
2254 defw reg.ix
2255 defb 003h
2256 defw reg.iy
2257 defb 003h
2258 defw reg.sp
2259 defb 003h
2260 defw reg.pc
2261 defb 003h
2262 defw reg.ix
2263 defb 003h
2264 defw reg.iy
2265 defb 003h
2266 defw reg.sp
2267 defb 003h
2268 defw reg.pc
2269 defb 000h
2270 defw reg.i
2271 defb 000h
2272 defw reg.f2
2273 defb 000h
2274 defw reg.f
2275 CMD.S:
2276 ld hl,(lst.S)
2277 call get_lastarg_def
2278 l13d8h:
2279 ld (lst.S),hl
2280 call out.hl.@
2281 call OUTBL
2282 comst
2283 ld a,(hl)
2284 comend
2285 call out.hex
2286 call outbl2
2287 call INLINE
2288 call SKIPBL
2289 inc hl
2290 jr z,l13d8h
2291 dec hl
2292 inc de
2293 cp '.'
2294 jp z,assert_eol
2295 cp '-'
2296 jr nz,l1406h
2297 ld a,(de)
2298 or a
2299 dec hl
2300 jr z,l13d8h
2301 inc hl
2302 l1406h:
2303 dec de
2304 call get_bytes_m
2305 jr l13d8h
2306
2307 CMD.@:
2308 call assert_eol
2309 ld hl,MSG_at
2310 ld de,offs.@
2311 ld c,001h
2312 jp l1279h
2313 MSG_at:
2314 dc '@'
2315
2316 CMD.I:
2317 ld hl,CMD.I
2318 ld (CMD_RPT),hl
2319 ld hl,(lst.IP)
2320 call get_lastarg_def
2321 ld (lst.IP),hl
2322 ld b,h
2323 ld c,l
2324 if CPU_Z180
2325 ld a,b
2326 or a
2327 jr nz,l1442h
2328 ld a,c
2329 ld hl,ucbar
2330 cp cbar
2331 jr z,l143fh
2332 ld hl,ubbr
2333 cp bbr
2334 jr nz,l1442h
2335 l143fh:
2336 ld a,(hl)
2337 jr l1444h
2338 l1442h:
2339 endif
2340 in a,(c)
2341 l1444h:
2342 push af
2343 call out.hex
2344 call outbl4
2345 pop af
2346 call out.bin.b
2347 jp CRLF
2348 CMD.O:
2349 ld hl,CMD.O
2350 ld (CMD_RPT),hl
2351 ld hl,(lst.OD)
2352 call get_arg_def
2353 ld a,l
2354 ld (lst.OD),a
2355 push af
2356 call skip_to_nextarg
2357 ld hl,(lst.OP)
2358 call get_lastarg_def
2359 ld (lst.OP),hl
2360 ld b,h
2361 ld c,l
2362 if CPU_Z180
2363 ld a,b
2364 or a
2365 jr nz,l1489h
2366 ld a,c
2367 ld hl,ucbar
2368 cp cbar
2369 jr z,l148dh
2370 ld hl,ubbr
2371 cp bbr
2372 jr z,l148dh
2373 cp cbr
2374 jp z,ERROR
2375 l1489h:
2376 endif
2377 pop af
2378 out (c),a
2379 ret
2380 if CPU_Z180
2381 l148dh:
2382 pop af
2383 ld (hl),a
2384 ret
2385 endif
2386
2387 CMD.V:
2388 call get_arg3 ;1490 get from, size, to
2389 cmp_mem:
2390 push bc
2391 comst
2392 ld a,(de)
2393 ld b,(hl)
2394 comend
2395 cp b
2396 jr z,l14bah
2397 ld c,a
2398 call out.hl.@
2399 call OUTBL
2400 ld a,b
2401 call out.hex
2402 call outbl2
2403 ld a,c
2404 call out.hex
2405 call OUTBL
2406 ex de,hl
2407 call out.hl.@
2408 ex de,hl
2409 call CRLF
2410 l14bah:
2411 pop bc
2412 inc hl
2413 inc de
2414 dec bc
2415 ld a,b
2416 or c
2417 jr nz,cmp_mem
2418 ret
2419
2420 CMD.M:
2421 ld a,(de)
2422 cp 'V'
2423 jr nz,bm_nv
2424 inc de
2425 bm_nv:
2426 push af ;14c9 save 'V' flag
2427 call get_arg3
2428 push hl
2429 push de
2430 push bc
2431 call CP.HL.DE
2432 jr nc,bm_mvdown
2433 add hl,bc
2434 ex de,hl
2435 add hl,bc
2436 ex de,hl
2437 dec hl
2438 dec de
2439 comst
2440 lddr
2441 comend
2442 jr bm_done
2443 bm_mvdown:
2444 comst
2445 ldir
2446 comend
2447 bm_done:
2448 pop bc
2449 pop de
2450 pop hl
2451 pop af
2452 jr z,cmp_mem ;14ed validate?
2453 ret
2454 CMD.H:
2455 call EXPR
2456 jp c,l173ch ;no parameters, print High and Max
2457 call skip_to_nextarg
2458 push hl
2459 call EXPR
2460 push af
2461 call assert_eol
2462 pop af
2463 ex de,hl
2464 pop hl
2465 jr c,l1511h
2466 push hl
2467 push de
2468 add hl,de
2469 call l1511h
2470 pop de
2471 pop hl
2472 and a
2473 sbc hl,de
2474 l1511h:
2475 call out.hl ;1511 val
2476 call outbl2
2477 call sub_0928h ;1517 -val
2478 call outbl4
2479 call out.hl.dec ;151d dec
2480 call outbl2
2481 call out.hl.decm ;1523 -dec
2482 call outbl4
2483 call out.bin.w ;1529 bin
2484 call outbl2
2485 ld a,l
2486 call out.ascii
2487 jp CRLF
2488
2489 CMD.Q:
2490 ld a,(de)
2491 sub 'J'
2492 ld (lst.Qj),a
2493 jr nz,l153fh
2494 inc de
2495 l153fh:
2496 call get_arg_range
2497 push bc
2498 push hl
2499 call sub_15a7h
2500 pop hl
2501 l1548h:
2502 call sub_1594h
2503 jr nz,l1562h
2504 push bc
2505 push hl
2506 ld a,(lst.Qj)
2507 or a
2508 jr nz,l1559h
2509 ld bc,-8
2510 add hl,bc
2511 l1559h:
2512 ld bc,MEMDUMP_CNT
2513 and a
2514 call memdump
2515 pop hl
2516 pop bc
2517 l1562h:
2518 inc hl
2519 ex (sp),hl
2520 dec hl
2521 ld a,h
2522 or l
2523 ex (sp),hl
2524 jr nz,l1548h
2525 pop bc
2526 ret
2527
2528 CMD.Z:
2529 call get_arg_range
2530 push bc
2531 push hl
2532 call sub_15a7h
2533 ld a,b
2534 pop hl
2535 pop bc
2536 push hl
2537 ex de,hl
2538 l1579h:
2539 push af
2540 ld a,(hl)
2541 comst
2542 ld (de),a
2543 comend
2544 pop af
2545 inc de
2546 cpi
2547 jp po,l1592h
2548 dec a
2549 jr nz,l1579h
2550 pop hl
2551 comst
2552 ldir
2553 comend
2554 ret
2555 l1592h:
2556 pop hl
2557 ret
2558
2559 sub_1594h:
2560 push hl
2561 push de
2562 push bc
2563 l1597h:
2564 ld a,(de)
2565 comst
2566 cp (hl)
2567 comend
2568 jr nz,l15a3h
2569 inc de
2570 inc hl
2571 djnz l1597h
2572 l15a3h:
2573 pop bc
2574 pop de
2575 pop hl
2576 ret
2577
2578 sub_15a7h:
2579 ld hl,ci.buf+1
2580 call get_bytes
2581 ld de,ci.buf+1
2582 and a
2583 sbc hl,de
2584 ld b,l
2585 ret nz
2586 jp ERROR
2587
2588 get_bytes:
2589 db 0e6h ;15b8 and 037h (clear carry, skip next opc)
2590 get_bytes_m:
2591 scf
2592 l15bah:
2593 push af
2594 call skip_to_nextarg
2595 cp 'W'
2596 jr nz,l15d9h
2597 inc de
2598 push hl
2599 call sub_0a68h
2600 ex de,hl
2601 pop bc
2602 pop af
2603 push af
2604 push bc
2605 ex (sp),hl
2606 jr nc,l15d3h
2607 comst
2608 l15d3h:
2609 ld (hl),e
2610 comend
2611 inc hl
2612 ld c,d
2613 pop de
2614 jr l15e5h
2615 l15d9h:
2616 cp ''''
2617 jr z,l15f1h
2618 push hl
2619 call EXPR
2620 ld c,l
2621 pop hl
2622 jr c,l1626h
2623 l15e5h:
2624 pop af
2625 push af
2626 jr nc,l15edh
2627 comst
2628 l15edh:
2629 ld (hl),c
2630 comend
2631 inc hl
2632 jr l161eh
2633 l15f1h:
2634 inc de
2635 ld a,(de)
2636 cp ''''
2637 jr z,l1607h
2638 or a
2639 jr z,l1626h
2640 l15fah:
2641 ld c,a
2642 pop af
2643 push af
2644 jr nc,l1603h
2645 comst
2646 l1603h:
2647 ld (hl),c
2648 comend
2649 inc hl
2650 jr l15f1h
2651 l1607h:
2652 inc de
2653 ld a,(de)
2654 cp ''''
2655 jr z,l15fah
2656 cp '.'
2657 jr nz,l161eh
2658 inc de
2659 dec hl
2660 pop af
2661 push af
2662 jr nc,l161bh
2663 comst
2664 l161bh:
2665 set 7,(hl)
2666 comend
2667 inc hl
2668 l161eh:
2669 pop af
2670 jr nc,l15bah
2671 ld (lst.S),hl
2672 jr l15bah
2673
2674 l1626h:
2675 pop af
2676 ret nc
2677 ld (lst.S),hl
2678 ret
2679
2680 CMD.D:
2681 ld hl,CMD.D
2682 ld (CMD_RPT),hl
2683 ld hl,(lst.D)
2684 ld bc,00080h
2685 call sub_0a82h
2686 scf
2687 memdump:
2688 push bc
2689 push de
2690 push hl
2691 ex af,af'
2692 l1640h:
2693 call out.hl.@
2694 call z,outbl2
2695 call OUTBL
2696 ld de,0
2697 l164ch:
2698 comst
2699 ld a,(hl)
2700 comend
2701 inc hl
2702 call out.hex
2703 call OUTBL
2704 dec bc
2705 inc e
2706 ld a,e
2707 cp 010h
2708 jr z,l1668h
2709 and 003h
2710 call z,OUTBL
2711 ld a,b
2712 or c
2713 jr nz,l164ch
2714 l1668h:
2715 call OUTBL
2716 and a
2717 sbc hl,de
2718 l166eh:
2719 comst
2720 ld a,(hl)
2721 comend
2722 call sub_168fh
2723 call OUTCHAR
2724 inc hl
2725 dec e
2726 jr nz,l166eh
2727 ex af,af'
2728 jr nc,l1683h
2729 ld (lst.D),hl
2730 l1683h:
2731 ex af,af'
2732 call CRLF
2733 ld a,b
2734 or c
2735 jr nz,l1640h
2736 pop hl
2737 pop de
2738 pop bc
2739 ret
2740 sub_168fh:
2741 and 07fh
2742 cp 07fh
2743 jr z,l1698h
2744 cp 020h
2745 ret nc
2746 l1698h:
2747 ld a,02eh
2748 ret
2749
2750 ; Read Intel Hex File from console.
2751 CMD.R:
2752 ld hl,0
2753 call get_lastarg_def ;169e get offset from command line
2754 push hl
2755 ld hl,0
2756 ld (HILOD),hl
2757 w_recstart:
2758 call i.getchar
2759 jr z,l16deh
2760 cp ':'
2761 jr nz,w_recstart
2762 ld c,0 ;16b1 init checksum
2763 call i.gethexbyte ;16b3 record len
2764 ld b,a
2765 call i.gethexbyte ;16b7 address high
2766 ld h,a
2767 call i.gethexbyte ;16bb address low
2768 ld l,a
2769 call i.gethexbyte ;16bf record type (ignored)
2770 ld a,b
2771 and a ;16c3 record len == 0?
2772 jr z,l16deh
2773 l16c6h:
2774 call i.gethexbyte
2775 pop de ;16c9 offset
2776 push de
2777 push hl
2778 add hl,de
2779 call i.storebyte
2780 pop hl
2781 inc hl
2782 djnz l16c6h ;16d2 repeat for record len
2783 call i.gethexbyte ;16d4 checksum
2784 ld a,c
2785 and a
2786 jp nz,ERROR ;16d9 exit if checksum error
2787 jr w_recstart ;16dc next record
2788 l16deh:
2789 pop hl
2790 call i.gethexbyte
2791 jp l173fh
2792
2793 i.gethexbyte:
2794 call sub_16f6h
2795 rlca
2796 rlca
2797 rlca
2798 rlca
2799 ld d,a
2800 call sub_16f6h
2801 add a,d
2802 ld d,a
2803 add a,c
2804 ld c,a
2805 ld a,d
2806 ret
2807
2808 sub_16f6h:
2809 call i.getchar
2810 jr z,l16ffh
2811 call sub_0d26h
2812 ret nc
2813 l16ffh:
2814 jp ERROR
2815
2816 i.getchar:
2817 call $ci
2818 cp 01ah
2819 ret
2820
2821 i.storebyte:
2822 push af
2823 push de
2824 ld de,TPA ;170a lowest allowed load address
2825 call CP.HL.DE
2826 jp c,ERROR
2827 ld de,$stcka ;1713 highest allowed load address
2828 call CP.HL.DE
2829 jp nc,ERROR
2830 ld de,(HILOD)
2831 call CP.HL.DE
2832 jr c,l1728h
2833 ld (HILOD),hl
2834 l1728h:
2835 ld de,(MAXLOD)
2836 call CP.HL.DE
2837 jr c,l1734h
2838 ld (MAXLOD),hl
2839 l1734h:
2840 pop de
2841 pop af
2842 comst
2843 ld (hl),a ;173a store byte
2844 comend
2845 ret
2846
2847 l173ch:
2848 call assert_eol
2849 l173fh:
2850 ld hl,MSG_high
2851 call PSTR
2852 ld hl,(HILOD)
2853 call out.hl
2854 ld hl,MSG_max
2855 call PSTR
2856 ld hl,(MAXLOD)
2857 call out.hl
2858 jp CRLF
2859
2860 MSG_high:
2861 DC 'High = '
2862 MSG_max:
2863 DC ' Max = '
2864
2865 CMD.A:
2866 ld hl,(lst.A)
2867 call get_lastarg_def
2868 push hl
2869 pop iy
2870 ld hl,l17c4h
2871 ld (CMD_ERR),hl
2872 ld (XB068),sp
2873 l177ch:
2874 push iy
2875 pop hl
2876 ld (lst.A),hl
2877 ld (OFFS.pc),hl
2878 push hl
2879 call sub_1f3fh
2880 pop iy
2881 ld c,b
2882 ld de,(offs.@)
2883 ld a,d
2884 or e
2885 ld b,011h
2886 jr z,l1798h
2887 ld b,019h
2888 l1798h:
2889 call OUTBL
2890 ld a,(CON.COL)
2891 cp b
2892 jr c,l1798h
2893 push bc
2894 call INLINE
2895 pop bc
2896 call SKIPBL
2897 cp '.'
2898 ret z
2899 cp '-'
2900 jr nz,l17b6h
2901 ld iy,(XB06C)
2902 jr l177ch
2903 l17b6h:
2904 and a
2905 call nz,sub_17cdh
2906 ld (XB06C),iy
2907 ld b,0
2908 add iy,bc
2909 jr l177ch
2910 l17c4h:
2911 call l07eah
2912 ld sp,(XB068)
2913 jr l177ch
2914
2915 sub_17cdh:
2916 call SKIPBL
2917 ld hl,t_MNEMONICS
2918 call sub_0a15h
2919 jp nc,ERROR
2920 call SKIPBL
2921 push de
2922 ld a,b
2923 add a,b
2924 add a,b
2925 ld hl,b_0x17EE_start
2926 call ADD_HL_A
2927 ld e,(hl)
2928 inc hl
2929 ld d,(hl)
2930 inc hl
2931 ld b,(hl)
2932 ex de,hl
2933 pop de
2934 jp (hl)
2935
2936 b_0x17EE_start:
2937 defw l1b54h
2938 defb 088h
2939 defw l1b74h
2940 defb 080h
2941 defw l1babh
2942 defb 0a0h
2943 defw l1c14h
2944 defb 040h
2945 defw l1c38h
2946 defb 0c4h
2947 defw l1b36h
2948 defb 03fh
2949 defw l1babh
2950 defb 0b8h
2951 defw gen.opc.ED2
2952 defb 0a9h
2953 defw gen.opc.ED2
2954 defb 0b9h
2955 defw gen.opc.ED2
2956 defb 0a1h
2957 defw gen.opc.ED2
2958 defb 0b1h
2959 defw l1b36h
2960 defb 02fh
2961 defw l1b36h
2962 defb 027h
2963 defw l1dabh
2964 defb 005h
2965 defw l1b36h
2966 defb 0f3h
2967 defw l1ca4h
2968 defb 010h
2969 defw l1b36h
2970 defb 0fbh
2971 defw l1d54h
2972 defb 0e3h
2973 defw l1b36h
2974 defb 0d9h
2975 defw l1b36h
2976 defb 076h
2977 defw l1cbfh
2978 defb 046h
2979 defw l1cf8h
2980 defb 040h
2981 defw l1dabh
2982 defb 004h
2983 defw gen.opc.ED2
2984 defb 0aah
2985 defw gen.opc.ED2
2986 defb 0bah
2987 defw gen.opc.ED2
2988 defb 0a2h
2989 defw gen.opc.ED2
2990 defb 0b2h
2991 defw l1c5eh
2992 defb 0c2h
2993 defw l1cabh
2994 defb 020h
2995 defw l1934h
2996 defb 040h
2997 defw gen.opc.ED2
2998 defb 0a8h
2999 defw gen.opc.ED2
3000 defb 0b8h
3001 defw gen.opc.ED2
3002 defb 0a0h
3003 defw gen.opc.ED2
3004 defb 0b0h
3005 defw gen.opc.ED2
3006 defb 044h
3007 defw l1b36h
3008 defb 000h
3009 defw l1babh
3010 defb 0b0h
3011 defw gen.opc.ED2
3012 defb 0bbh
3013 defw gen.opc.ED2
3014 defb 0b3h
3015 defw l1d2ch
3016 defb 041h
3017 defw gen.opc.ED2
3018 defb 0abh
3019 defw gen.opc.ED2
3020 defb 0a3h
3021 defw l1ce4h
3022 defb 0c1h
3023 defw l1ce4h
3024 defb 0c5h
3025 defw l1c14h
3026 defb 080h
3027 defw l1c50h
3028 defb 0c0h
3029 defw gen.opc.ED2
3030 defb 04dh
3031 defw gen.opc.ED2
3032 defb 045h
3033 defw l1bd8h
3034 defb 010h
3035 defw l1b36h
3036 defb 017h
3037 defw l1bd8h
3038 defb 000h
3039 defw l1b36h
3040 defb 007h
3041 defw gen.opc.ED2
3042 defb 06fh
3043 defw l1bd8h
3044 defb 018h
3045 defw l1b36h
3046 defb 01fh
3047 defw l1bd8h
3048 defb 008h
3049 defw l1b36h
3050 defb 00fh
3051 defw gen.opc.ED2
3052 defb 067h
3053 defw l1cd5h
3054 defb 0c7h
3055 defw l1b54h
3056 defb 098h
3057 defw l1b36h
3058 defb 037h
3059 defw l1c14h
3060 defb 0c0h
3061 defw l1bd8h
3062 defb 020h
3063 defw l1bd8h
3064 defb 028h
3065 defw l1bd8h
3066 defb 038h
3067 defw l1babh
3068 defb 090h
3069 defw l1babh
3070 defb 0a8h
3071 defw A.IN0
3072 defb 000h
3073 defw A.MLT
3074 b_0x18BC_start:
3075 defb 04ch
3076 ld b,e
3077 dec de
3078
3079 b_0x18BF_start:
3080 defb 08bh
3081 defw gen.opc.ED2
3082 defb 09bh
3083 defw gen.opc.ED2
3084 defb 083h
3085 defw gen.opc.ED2
3086 defb 093h
3087 defw l18fdh
3088 defb 001h
3089 defw gen.opc.ED2
3090 defb 076h
3091 defw l191dh
3092 defb 004h
3093 defw l192ch
3094 defb 074h
3095 A.IN0:
3096 call sub_1e41h
3097 jr nc,l1931h
3098 cp 006h
3099 jr z,l1931h
3100 rlca
3101 rlca
3102 rlca
3103 add a,b
3104 ld b,a
3105 call sub_1ed1h
3106 call sub_1e06h
3107 l18e9h:
3108 call assert_eol
3109 comst
3110 ld (iy+000h),0edh
3111 ld (iy+001h),b
3112 ld (iy+002h),l
3113 comend
3114 ld c,003h
3115 ret
3116 l18fdh:
3117 call sub_1e06h
3118 call sub_1ed1h
3119 call sub_1e41h
3120 jr nc,l1931h
3121 cp 006h
3122 jr z,l1931h
3123 rlca
3124 rlca
3125 rlca
3126 add a,b
3127 ld b,a
3128 jr l18e9h
3129 A.MLT:
3130 call sub_1e2eh
3131 jr nc,l1931h
3132 add a,b
3133 ld b,a
3134 jp gen.opc.ED2
3135 l191dh:
3136 call sub_1e41h
3137 jr nc,l192ah
3138 rlca
3139 rlca
3140 rlca
3141 add a,b
3142 ld b,a
3143 jp gen.opc.ED2
3144 l192ah:
3145 ld b,064h
3146 l192ch:
3147 call sub_1e12h
3148 jr l18e9h
3149 l1931h:
3150 jp ERROR
3151 l1934h:
3152 call sub_1e41h
3153 jp c,l19bfh
3154 call sub_1e68h
3155 jp c,l1a64h
3156 call sub_1e2eh
3157 jp c,l1a93h
3158 call sub_1e50h
3159 jp c,l1af0h
3160 ld a,(de)
3161 cp 049h
3162 jp z,l1b0ch
3163 cp 052h
3164 jp z,l1b14h
3165 cp 028h
3166 jp nz,ERROR
3167 inc de
3168 call sub_1e2eh
3169 jp c,l1b23h
3170 call tst_EXPR
3171 call sub_1ed8h
3172 call sub_1ed1h
3173 call sub_1e2eh
3174 jr c,l19adh
3175 call sub_1e50h
3176 jr nc,l1991h
3177 ld b,022h
3178 l1978h:
3179 call assert_eol
3180 ld a,(pfx.IXY)
3181 l197eh:
3182 comst
3183 ld (iy+000h),a
3184 ld (iy+001h),b
3185 ld (iy+002h),l
3186 ld (iy+003h),h
3187 comend
3188 ld c,004h
3189 ret
3190 l1991h:
3191 ld a,(de)
3192 cp 041h
3193 jp nz,ERROR
3194 inc de
3195 ld b,032h
3196 l199ah:
3197 call assert_eol
3198 comst
3199 ld (iy+000h),b
3200 ld (iy+001h),l
3201 ld (iy+002h),h
3202 comend
3203 ld c,003h
3204 ret
3205 l19adh:
3206 cp 020h
3207 jr z,l19bbh
3208 add a,043h
3209 ld b,a
3210 l19b4h:
3211 call assert_eol
3212 ld a,0edh
3213 jr l197eh
3214 l19bbh:
3215 ld b,022h
3216 jr l199ah
3217 l19bfh:
3218 ld b,a
3219 call sub_1ed1h
3220 call sub_1e41h
3221 jr nc,l19dbh
3222 push af
3223 ld a,b
3224 rlca
3225 rlca
3226 rlca
3227 ld b,a
3228 pop af
3229 add a,b
3230 add a,040h
3231 cp 076h
3232 jp z,ERROR
3233 l19d7h:
3234 ld b,a
3235 jp l1b36h
3236 l19dbh:
3237 call sub_1e68h
3238 jr nc,l1a02h
3239 ld a,b
3240 rlca
3241 rlca
3242 rlca
3243 add a,046h
3244 cp 076h
3245 jp z,ERROR
3246 l19ebh:
3247 ld b,a
3248 call assert_eol
3249 ld a,(pfx.IXY)
3250 comst
3251 ld (iy+000h),a
3252 ld (iy+001h),b
3253 ld (iy+002h),c
3254 comend
3255 ld c,003h
3256 ret
3257 l1a02h:
3258 ld a,(de)
3259 cp 'I'
3260 jr z,l1a15h
3261 cp 'R'
3262 jr nz,l1a21h
3263 ld a,b
3264 cp 007h
3265 jp nz,ERROR
3266 ld b,05fh
3267 jr l1a1dh
3268 l1a15h:
3269 ld a,b
3270 cp 007h
3271 jp nz,ERROR
3272 ld b,057h
3273 l1a1dh:
3274 inc de
3275 jp gen.opc.ED2
3276 l1a21h:
3277 cp '('
3278 jr z,l1a3fh
3279 call sub_1e12h
3280 ld a,b ;1a28 ld r,nn
3281 rlca
3282 rlca
3283 rlca
3284 add a,006h
3285 l1a2eh:
3286 ld b,a
3287 l1a2fh:
3288 call assert_eol
3289 comst
3290 ld (iy+000h),b
3291 ld (iy+001h),l
3292 comend
3293 ld c,002h
3294 ret
3295 l1a3fh:
3296 inc de
3297 ld a,b
3298 cp 007h
3299 jp nz,ERROR
3300 call sub_1e2eh
3301 jr nc,l1a59h
3302 cp 030h
3303 jp nc,ERROR
3304 add a,00ah
3305 ld b,a
3306 call sub_1ed8h
3307 jp l1b36h
3308 l1a59h:
3309 call tst_EXPR
3310 call sub_1ed8h
3311 ld b,03ah
3312 jp l199ah
3313 l1a64h:
3314 call sub_1ed1h
3315 call sub_1e41h
3316 jr nc,l1a76h
3317 cp 006h
3318 jp z,ERROR
3319 add a,070h
3320 jp l19ebh
3321 l1a76h:
3322 call sub_1e12h
3323 call assert_eol
3324 ld a,(pfx.IXY)
3325 comst
3326 ld (iy+000h),a ;1a83 dd/fd
3327 ld (iy+001h),036h
3328 ld (iy+002h),c ;1a8a displacement
3329 ld (iy+003h),l ;1a8d nn
3330 comend
3331 ld c,4
3332 ret
3333 l1a93h:
3334 ld b,a
3335 call sub_1ed1h
3336 ld hl,t_HL.AF
3337 call sub_0a23h
3338 jr c,l1abeh
3339 call sub_1e50h
3340 jr nc,l1ac7h
3341 ld a,b
3342 cp 030h
3343 jr nz,l1b20h
3344 ld b,0f9h
3345 l1aabh:
3346 call assert_eol
3347 ld a,(pfx.IXY)
3348 comst
3349 ld (iy+000h),a
3350 ld (iy+001h),b
3351 comend
3352 ld c,002h
3353 ret
3354 l1abeh:
3355 ld a,b
3356 cp 030h
3357 jr nz,l1b20h
3358 ld b,0f9h
3359 jr l1b36h
3360 l1ac7h:
3361 ld a,(de)
3362 cp 028h
3363 jr nz,l1ae3h
3364 inc de
3365 call tst_EXPR
3366 call sub_1ed8h
3367 ld a,b
3368 cp 020h
3369 jr z,l1adeh
3370 add a,04bh
3371 ld b,a
3372 jp l19b4h
3373 l1adeh:
3374 ld b,02ah
3375 jp l199ah
3376 l1ae3h:
3377 call tst_EXPR
3378 call assert_eol
3379 ld a,001h
3380 add a,b
3381 ld b,a
3382 jp l199ah
3383 l1af0h:
3384 call sub_1ed1h
3385 ld a,(de)
3386 cp 028h
3387 jr nz,l1b04h
3388 inc de
3389 call tst_EXPR
3390 call sub_1ed8h
3391 ld b,02ah
3392 jp l1978h
3393 l1b04h:
3394 call tst_EXPR
3395 ld b,021h
3396 jp l1978h
3397 l1b0ch:
3398 inc de
3399 call sub_1ed1h
3400 ld b,047h
3401 jr l1b1ah
3402 l1b14h:
3403 inc de
3404 call sub_1ed1h
3405 ld b,04fh
3406 l1b1ah:
3407 ld a,(de)
3408 inc de
3409 cp 041h
3410 jr z,gen.opc.ED2
3411 l1b20h:
3412 jp ERROR
3413 l1b23h:
3414 cp 020h
3415 jr nc,l1b20h
3416 add a,002h
3417 ld b,a
3418 call sub_1ed8h
3419 call sub_1ed1h
3420 ld a,(de)
3421 cp 041h
3422 jr nz,l1b20h
3423 inc de
3424 l1b36h:
3425 call assert_eol
3426 comst
3427 ld (iy+000h),b
3428 comend
3429 ld c,001h
3430 ret
3431 gen.opc.ED2:
3432 call assert_eol
3433 comst
3434 ld (iy+000h),0edh
3435 ld (iy+001h),b
3436 comend
3437 ld c,002h
3438 ret
3439 l1b54h:
3440 ld hl,t_HL.AF
3441 call sub_0a23h
3442 jr nc,l1babh
3443 call sub_1ed1h
3444 call sub_1e2eh
3445 jp nc,ERROR
3446 push af
3447 ld a,b
3448 cp 088h
3449 ld b,04ah
3450 jr z,l1b6fh
3451 ld b,042h
3452 l1b6fh:
3453 pop af
3454 add a,b
3455 l1b71h:
3456 ld b,a
3457 jr gen.opc.ED2
3458 l1b74h:
3459 ld hl,t_HL.AF
3460 call sub_0a23h
3461 jr c,l1b9dh
3462 call sub_1e50h
3463 jr nc,l1babh
3464 call sub_1ed1h
3465 ld hl,t_BC.DE.IX.SP
3466 ld a,(pfx.IXY)
3467 cp 0fdh
3468 jr nz,l1b91h
3469 ld hl,t_BC.DE.IY.SP
3470 l1b91h:
3471 call sub_1e2bh
3472 jp nc,ERROR
3473 add a,009h
3474 l1b99h:
3475 ld b,a
3476 jp l1aabh
3477 l1b9dh:
3478 call sub_1ed1h
3479 call sub_1e2eh
3480 jp nc,ERROR
3481 add a,009h
3482 jp l19d7h
3483 l1babh:
3484 ld a,(de)
3485 cp 041h
3486 jr nz,l1bbbh
3487 push de
3488 inc de
3489 call skip_to_nextarg
3490 jr z,l1bbah
3491 pop de
3492 jr l1bbbh
3493 l1bbah:
3494 pop af
3495 l1bbbh:
3496 call sub_1e41h
3497 jr c,l1bceh
3498 call sub_1e68h
3499 jr c,l1bd2h
3500 call sub_1e12h
3501 ld a,b
3502 add a,046h
3503 jp l1a2eh
3504 l1bceh:
3505 add a,b
3506 jp l19d7h
3507 l1bd2h:
3508 ld a,b
3509 add a,006h
3510 jp l19ebh
3511 l1bd8h:
3512 call sub_1e41h
3513 jr c,l1c01h
3514 call sub_1e68h
3515 jp nc,ERROR
3516 ld a,b
3517 add a,006h
3518 ld b,a
3519 l1be7h:
3520 call assert_eol
3521 ld a,(pfx.IXY)
3522 comst
3523 ld (iy+000h),a
3524 ld (iy+001h),0cbh
3525 ld (iy+002h),c
3526 ld (iy+003h),b
3527 comend
3528 ld c,004h
3529 ret
3530 l1c01h:
3531 add a,b
3532 l1c02h:
3533 ld b,a
3534 call assert_eol
3535 comst
3536 ld (iy+000h),0cbh
3537 ld (iy+001h),b
3538 comend
3539 ld c,002h
3540 ret
3541 l1c14h:
3542 call sub_1de6h
3543 call sub_1ed1h
3544 call sub_1e41h
3545 jr c,l1c2fh
3546 call sub_1e68h
3547 jp nc,ERROR
3548 ld a,l
3549 rlca
3550 rlca
3551 rlca
3552 add a,006h
3553 add a,b
3554 ld b,a
3555 jr l1be7h
3556 l1c2fh:
3557 add a,b
3558 ld b,a
3559 ld a,l
3560 rlca
3561 rlca
3562 rlca
3563 add a,b
3564 jr l1c02h
3565 l1c38h:
3566 push de
3567 call sub_1eb8h
3568 jr nc,l1c47h
3569 add a,b
3570 ld b,a
3571 call skip_to_nextarg
3572 jr z,l1c49h
3573 pop de
3574 push de
3575 l1c47h:
3576 ld b,0cdh
3577 l1c49h:
3578 pop af
3579 call tst_EXPR
3580 jp l199ah
3581 l1c50h:
3582 call sub_1eb8h
3583 jr nc,l1c59h
3584 add a,b
3585 ld b,a
3586 jr l1c5bh
3587 l1c59h:
3588 ld b,0c9h
3589 l1c5bh:
3590 jp l1b36h
3591 l1c5eh:
3592 push de
3593 call sub_1eb8h
3594 jr c,l1c71h
3595 l1c64h:
3596 pop de
3597 ld hl,b_0x1C97_start
3598 call sub_0a15h
3599 jr c,l1c7fh
3600 ld b,0c3h
3601 jr l1c79h
3602 l1c71h:
3603 add a,b
3604 ld b,a
3605 call skip_to_nextarg
3606 jr nz,l1c64h
3607 pop af
3608 l1c79h:
3609 call tst_EXPR
3610 jp l199ah
3611 l1c7fh:
3612 call assert_eol
3613 ld a,b
3614 and a
3615 jr nz,l1c8bh
3616 ld b,0e9h
3617 jp l1b36h
3618 l1c8bh:
3619 ld b,0ddh
3620 dec a
3621 jr z,l1c92h
3622 ld b,0fdh
3623 l1c92h:
3624 ld l,0e9h
3625 jp l1a2fh
3626
3627 b_0x1C97_start:
3628 DC '(HL)'
3629 DC '(IX)'
3630 DC '(IY)'
3631 DB 0
3632
3633 l1ca4h:
3634 call skip_to_nextarg
3635 ld b,010h
3636 jr l1cb9h
3637 l1cabh:
3638 call sub_1ebfh
3639 jr c,l1cb4h
3640 ld b,018h
3641 jr l1cb9h
3642 l1cb4h:
3643 add a,b
3644 ld b,a
3645 call sub_1ed1h
3646 l1cb9h:
3647 call sub_1defh
3648 jp l1a2fh
3649 l1cbfh:
3650 call sub_1e12h
3651 ld a,l
3652 cp 003h
3653 jr nc,l1d23h
3654 and a
3655 jr z,l1cd2h
3656 ld b,056h
3657 cp 001h
3658 jr z,l1cd2h
3659 ld b,05eh
3660 l1cd2h:
3661 jp gen.opc.ED2
3662 l1cd5h:
3663 call sub_1e12h
3664 ld a,l
3665 push af
3666 add a,b
3667 ld b,a
3668 pop af
3669 and 0c7h
3670 jr nz,l1d23h
3671 jp l1b36h
3672 l1ce4h:
3673 call sub_1e50h
3674 jr c,l1cf2h
3675 call sub_1e25h
3676 jr nc,l1d23h
3677 add a,b
3678 jp l19d7h
3679 l1cf2h:
3680 ld a,b
3681 add a,020h
3682 jp l1b99h
3683 l1cf8h:
3684 call sub_1e41h
3685 jr nc,l1d23h
3686 cp 006h
3687 jr z,l1d23h
3688 rlca
3689 rlca
3690 rlca
3691 add a,b
3692 ld b,a
3693 cp 078h
3694 jr nz,l1d1ah
3695 call sub_1ed1h
3696 call sub_1d26h
3697 jr c,l1d20h
3698 call sub_1e06h
3699 ld b,0dbh
3700 jp l1a2fh
3701 l1d1ah:
3702 call sub_1ed1h
3703 call sub_1d26h
3704 l1d20h:
3705 jp c,gen.opc.ED2
3706 l1d23h:
3707 jp ERROR
3708 sub_1d26h:
3709 ld hl,t__C_
3710 jp sub_0a23h
3711 l1d2ch:
3712 call sub_1d26h
3713 jr nc,l1d44h
3714 call sub_1ed1h
3715 call sub_1e41h
3716 jr nc,l1d23h
3717 cp 006h
3718 jr z,l1d23h
3719 rlca
3720 rlca
3721 rlca
3722 add a,b
3723 jp l1b71h
3724 l1d44h:
3725 call sub_1e06h
3726 call sub_1ed1h
3727 cp 041h
3728 jr nz,l1d23h
3729 inc de
3730 ld b,0d3h
3731 jp l1a2fh
3732 l1d54h:
3733 ld hl,b_0x1D80_start
3734 call sub_0a15h
3735 jp nc,ERROR
3736 ld c,b
3737 call assert_eol
3738 ld b,000h
3739 ld hl,b_0x1DA1_start
3740 add hl,bc
3741 add hl,bc
3742 ld a,(hl)
3743 comst
3744 ld (iy+000h),a
3745 comend
3746 ld c,001h
3747 inc hl
3748 ld a,(hl)
3749 and a
3750 ret z
3751 comst
3752 ld (iy+001h),a
3753 comend
3754 ld c,002h
3755 ret
3756
3757 b_0x1D80_start:
3758 DC 'AF,AF'''
3759 l1d86h:
3760 DC 'DE,HL'
3761 DC '(SP),HL'
3762 DC '(SP),IX'
3763 DC '(SP),IY'
3764 db 000h
3765
3766 b_0x1DA1_start:
3767 db 008h
3768 db 000h
3769 db 0ebh
3770 db 000h
3771 db 0e3h
3772 db 000h
3773 db 0ddh
3774 db 0e3h
3775 db 0fdh
3776 db 0e3h
3777 l1dabh:
3778 call sub_1e50h
3779 jr c,l1dc6h
3780 call sub_1e2eh
3781 jr c,l1dd2h
3782 call sub_1e41h
3783 jr c,l1ddfh
3784 call sub_1e68h
3785 jp nc,ERROR
3786 ld a,b
3787 add a,030h
3788 jp l19ebh
3789 l1dc6h:
3790 ld a,b
3791 ld b,023h
3792 cp 004h
3793 jr z,l1dcfh
3794 ld b,02bh
3795 l1dcfh:
3796 jp l1aabh
3797 l1dd2h:
3798 push af
3799 ld a,b
3800 ld b,003h
3801 cp 004h
3802 jr z,l1ddch
3803 ld b,00bh
3804 l1ddch:
3805 pop af
3806 jr l1de2h
3807 l1ddfh:
3808 rlca
3809 rlca
3810 rlca
3811 l1de2h:
3812 add a,b
3813 jp l19d7h
3814 sub_1de6h:
3815 call sub_1e12h
3816 ld a,l
3817 cp 008h
3818 jr nc,error1
3819 ret
3820 sub_1defh:
3821 call tst_EXPR
3822 push bc
3823 push iy
3824 pop bc
3825 and a
3826 sbc hl,bc
3827 dec hl
3828 dec hl
3829 pop bc
3830 call sub_1e15h
3831 ld a,h
3832 xor l
3833 bit 7,a
3834 jr nz,error1
3835 ret
3836 sub_1e06h:
3837 ld a,(de)
3838 cp 028h
3839 jr nz,sub_1e12h
3840 inc de
3841 call sub_1e12h
3842 jp sub_1ed8h
3843
3844 sub_1e12h:
3845 call tst_EXPR
3846 sub_1e15h:
3847 ld a,h
3848 and a
3849 ret z
3850 inc a
3851 ret z
3852 jr error1
3853
3854 tst_EXPR:
3855 push bc
3856 call EXPR
3857 pop bc
3858 ret nc
3859 error1:
3860 jp ERROR
3861 sub_1e25h:
3862 push hl
3863 ld hl,t_BC.DE.HL.AF
3864 jr l1e32h
3865 sub_1e2bh:
3866 push hl
3867 jr l1e32h
3868 sub_1e2eh:
3869 push hl
3870 ld hl,t_BC.DE.HL.SP
3871 l1e32h:
3872 push bc
3873 call sub_0a15h
3874 jr nc,l1e3eh
3875 ld a,b
3876 rlca
3877 rlca
3878 rlca
3879 rlca
3880 scf
3881 l1e3eh:
3882 pop bc
3883 pop hl
3884 ret
3885 sub_1e41h:
3886 call SKIPBL
3887 push bc
3888 push hl
3889 ld hl,t_BCDEHL_HL_A
3890 call sub_0a15h
3891 ld a,b
3892 pop hl
3893 pop bc
3894 ret
3895 sub_1e50h:
3896 push hl
3897 push bc
3898 ld hl,t_IX.IY
3899 call sub_0a15h
3900 jr nc,l1e65h
3901 ld a,0ddh
3902 dec b
3903 jr nz,l1e61h
3904 ld a,0fdh
3905 l1e61h:
3906 ld (pfx.IXY),a
3907 scf
3908 l1e65h:
3909 pop bc
3910 pop hl
3911 ret
3912 sub_1e68h:
3913 push hl
3914 push bc
3915 ld a,(de)
3916 cp '('
3917 jr nz,l1eb4h
3918 push de
3919 inc de
3920 ld hl,t_IX.IY
3921 call sub_0a15h
3922 jr nc,l1eb3h
3923 pop af
3924 ld a,0ddh
3925 dec b
3926 jr nz,l1e81h
3927 ld a,0fdh
3928 l1e81h:
3929 ld (pfx.IXY),a
3930 ld a,(de)
3931 cp '+'
3932 jr z,l1e95h
3933 cp ')'
3934 ld hl,0
3935 jr z,l1eadh
3936 cp '-'
3937 jp nz,ERROR
3938 l1e95h:
3939 push af
3940 inc de
3941 call sub_1e12h ;1e97 get displacement
3942 pop af
3943 cp '+'
3944 jr z,l1ea7h
3945 ld b,h
3946 ld c,l
3947 ld hl,0
3948 and a
3949 sbc hl,bc
3950 l1ea7h:
3951 ld a,(de)
3952 cp ')'
3953 jp nz,ERROR
3954 l1eadh:
3955 inc de
3956 pop bc
3957 ld c,l
3958 pop hl
3959 scf
3960 ret
3961 l1eb3h:
3962 pop de
3963 l1eb4h:
3964 pop bc
3965 pop hl
3966 and a
3967 ret
3968 sub_1eb8h:
3969 ld hl,t_tstfl_ZCPS
3970 ld c,007h
3971 jr l1ec4h
3972 sub_1ebfh:
3973 ld hl,t_tstfl_ZC
3974 ld c,003h
3975 l1ec4h:
3976 push bc
3977 call sub_0a15h
3978 ld a,b
3979 pop bc
3980 ret nc
3981 and c
3982 rlca
3983 rlca
3984 rlca
3985 scf
3986 ret
3987 sub_1ed1h:
3988 call skip_to_nextarg
3989 ret z
3990 l1ed5h:
3991 jp ERROR
3992 sub_1ed8h:
3993 ld a,(de)
3994 cp 029h
3995 jr nz,l1ed5h
3996 inc de
3997 ret
3998 CMD.L:
3999 ld hl,CMD.L
4000 ld (CMD_RPT),hl
4001 call EXPR
4002 jr nc,l1eedh
4003 ld hl,(lst.L)
4004 l1eedh:
4005 push hl
4006 pop iy
4007 call skip_to_nextarg
4008 call sub_0aa5h
4009 jr nc,l1f17h
4010 call assert_eol
4011 ld b,010h
4012 l1efdh:
4013 push bc
4014 push iy
4015 pop hl
4016 push hl
4017 call sub_1f3fh
4018 call CRLF
4019 pop iy
4020 ld c,b
4021 ld b,000h
4022 add iy,bc
4023 ld (lst.L),iy
4024 pop bc
4025 djnz l1efdh
4026 ret
4027 l1f17h:
4028 call assert_eol
4029 ld h,b
4030 ld l,c
4031 ld a,b
4032 or c
4033 jr nz,l1f21h
4034 dec hl
4035 l1f21h:
4036 push hl
4037 push iy
4038 pop hl
4039 push hl
4040 call sub_1f3fh
4041 call CRLF
4042 pop iy
4043 ld e,b
4044 ld d,000h
4045 add iy,de
4046 ld (lst.L),iy
4047 pop hl
4048 and a
4049 sbc hl,de
4050 ret z
4051 ret c
4052 jr l1f21h
4053 sub_1f3fh:
4054 call out.hl.@
4055 call z,OUTBL
4056 call OUTBL
4057 sub a
4058 ld (CON.COL),a
4059 call sub_1f77h
4060 and a
4061 ret z
4062 l1f51h:
4063 call OUTBL
4064 ld a,(CON.COL)
4065 cp 010h
4066 jr c,l1f51h
4067 sub_1f5bh:
4068 ld de,(offs.@)
4069 ld a,d
4070 or e
4071 ret z
4072 ld a,'('
4073 call OUTCHAR
4074 ld a,'@'
4075 call OUTCHAR
4076 and a
4077 sbc hl,de
4078 call out.hl
4079 ld a,')'
4080 jp OUTCHAR
4081 sub_1f77h:
4082 sub a
4083 ld (XBE03),a
4084 call sub_1f9eh
4085 jr nc,l1f91h
4086 push bc
4087 call sub_2581h
4088 ex de,hl
4089 call sub_1fdbh
4090 pop bc
4091 ld a,(XBE03)
4092 ld hl,(XBE01)
4093 scf
4094 ret
4095 l1f91h:
4096 ld hl,b_0x1F9B_start
4097 call PSTR
4098 ld b,001h
4099 sub a
4100 ret
4101
4102 b_0x1F9B_start:
4103 DC '???'
4104
4105 sub_1f9eh:
4106 sub a
4107 ld (is.pfx.IXY),a
4108 comst
4109 ld a,(iy+000h)
4110 comend
4111 cp 0edh
4112 jp z,disas_pfx.ED
4113 cp 0ddh
4114 jr z,l1fc5h
4115 cp 0fdh
4116 jr z,l1fc9h
4117 sub_1fb6h:
4118 comst
4119 ld a,(iy+000h)
4120 comend
4121 cp 0cbh
4122 jp z,l2061h
4123 jp l2078h
4124 l1fc5h:
4125 ld a,001h
4126 jr l1fcbh
4127 l1fc9h:
4128 ld a,002h
4129 l1fcbh:
4130 ld (is.pfx.IXY),a
4131 call sub_1fdch
4132 ret nc
4133 push bc
4134 call sub_1fb6h
4135 pop af
4136 add a,b
4137 ld b,a
4138 scf
4139 ret
4140
4141 sub_1fdbh:
4142 jp (hl)
4143
4144 sub_1fdch:
4145 inc iy
4146 ld hl,b_0x2011_start
4147 call sub_20bbh
4148 ld b,002h
4149 ret c
4150 ld hl,l202ch
4151 call sub_20bbh
4152 ld b,001h
4153 ret c
4154 comst
4155 ld a,(iy+000h)
4156 comend
4157 cp 0cbh
4158 jr nz,l200fh
4159 comst
4160 ld a,(iy+002h)
4161 comend
4162 cp 036h
4163 ret z
4164 and 007h
4165 cp 006h
4166 jr nz,l200fh
4167 ld b,002h
4168 scf
4169 ret
4170 l200fh:
4171 and a
4172 ret
4173
4174 b_0x2011_start:
4175 db 034h
4176 db 035h
4177 db 036h
4178 db 046h
4179 db 04eh
4180 db 056h
4181 db 05eh
4182 db 066h
4183 db 06eh
4184 db 070h
4185 db 071h
4186 db 072h
4187 db 073h
4188 db 074h
4189 db 075h
4190 db 076h
4191 db 077h
4192 db 07eh
4193 db 086h
4194 db 08eh
4195 db 096h
4196 db 09eh
4197 db 0a6h
4198 db 0aeh
4199 db 0b6h
4200 db 0beh
4201 db 000h
4202 l202ch:
4203 db 009h
4204 db 019h
4205 db 021h
4206 db 022h
4207 db 023h
4208 db 029h
4209 db 02ah
4210 db 02bh
4211 db 039h
4212 db 0e1h
4213 db 0e3h
4214 db 0e5h
4215 db 0e9h
4216 db 0f9h
4217 db 000h
4218
4219 disas_pfx.ED:
4220 inc iy
4221 ld hl,b_0x2200_start
4222 call sub_209dh
4223 ld b,002h
4224 ret c
4225 ld hl,l2235h
4226 call lookup_opc
4227 ld b,002h
4228 ret c
4229 ld hl,l228bh
4230 call lookup_opc
4231 ld b,003h
4232 ret c
4233 ld hl,l22b4h
4234 call lookup_opc
4235 ld b,004h
4236 ret
4237 l2061h:
4238 push iy
4239 inc iy
4240 ld a,(is.pfx.IXY)
4241 and a
4242 jr z,l206dh
4243 inc iy
4244 l206dh:
4245 ld hl,l22c9h
4246 call lookup_opc
4247 pop iy
4248 ld b,002h
4249 ret
4250 l2078h:
4251 ld hl,b_0x218B_start
4252 call lookup_opc
4253 ld b,002h
4254 ret c
4255 ld hl,b_0x20ED_start
4256 call sub_209dh
4257 ld b,001h
4258 ret c
4259 ld hl,b_0x2108_start
4260 call lookup_opc
4261 ld b,001h
4262 ret c
4263 ld hl,b_0x21D2_start
4264 call lookup_opc
4265 ret nc
4266 ld b,003h
4267 ret
4268
4269 sub_209dh:
4270 ld a,(hl)
4271 cp 0ffh
4272 ret z
4273 comst
4274 cp (iy+000h)
4275 comend
4276 jr z,l20aeh
4277 inc hl
4278 inc hl
4279 jr sub_209dh
4280 l20aeh:
4281 inc hl
4282 ld c,(hl)
4283 ld hl,t_MNEMONICS
4284 ld b,000h
4285 add hl,bc
4286 ld de,l230bh
4287 scf
4288 ret
4289 sub_20bbh:
4290 ld a,(hl)
4291 and a
4292 ret z
4293 inc hl
4294 comst
4295 cp (iy+000h)
4296 comend
4297 jr nz,sub_20bbh
4298 scf
4299 ret
4300
4301 lookup_opc:
4302 comst
4303 ld a,(iy+000h)
4304 comend
4305 and (hl)
4306 inc hl
4307 cp (hl)
4308 jr z,l20dfh
4309 inc hl
4310 inc hl
4311 inc hl
4312 inc hl
4313 ld a,(hl)
4314 and a
4315 jr nz,lookup_opc
4316 ret
4317 l20dfh:
4318 inc hl
4319 ld c,(hl)
4320 inc hl
4321 ld e,(hl)
4322 inc hl
4323 ld d,(hl)
4324 ld hl,t_MNEMONICS
4325 ld b,000h
4326 add hl,bc
4327 scf
4328 ret
4329
4330 b_0x20ED_start: ; 1 byte opcodes (no parameters)
4331 db 076h ;20ed halt
4332 db 039h ;20ee
4333 db 0d9h ;20ef exx
4334 db 036h
4335 db 0f3h ;20f1 di
4336 db 02ch
4337 db 0fbh ;20f3 ei
4338 db 032h
4339 db 000h ;20f5 nop
4340 db 069h
4341 db 007h ;20f7 rlca
4342 db 09eh
4343 db 00fh ;20f9 rrca
4344 db 0adh
4345 db 017h ;20fb rla
4346 db 098h
4347 db 01fh ;20fd rra
4348 db 0a7h
4349 db 027h ;20ff daa
4350 db 026h
4351 db 02fh ;2101 cpl
4352 db 023h
4353 db 037h ;2103 scf
4354 db 0bah
4355 db 03fh ;2105 ccf
4356 db 010h
4357 db 0ffh ;2107 EOT
4358
4359 b_0x2108_start: ; 1 byte opcodes
4360 defb 0c0h ;2108 ld r,r
4361 defb 040h
4362 defb 056h
4363 defw l22fch
4364
4365 defb 0f8h ;210d add a,r
4366 defb 080h
4367 defb 003h
4368 defw l2305h
4369
4370 defb 0f8h ;2112 adc a,r
4371 defb 088h
4372 defb 000h
4373 defw l2305h
4374
4375 defb 0f8h
4376 defb 090h
4377 defb 0c9h
4378 defw l24ebh
4379
4380 defb 0f8h
4381 defb 098h
4382 defb 0b7h
4383 defw l2305h
4384
4385 defb 0f8h
4386 defb 0a0h
4387 defb 006h
4388 defw l24ebh
4389
4390 defb 0f8h
4391 defb 0a8h
4392 defb 0cch
4393 defw l24ebh
4394
4395 defb 0f8h
4396 defb 0b0h
4397 defb 06ch
4398 defw l24ebh
4399
4400 defb 0f8h
4401 defb 0b8h
4402 defb 013h
4403 defw l24ebh
4404
4405 defb 0c7h
4406 defb 0c0h ;2136 ret cc
4407 defb 08bh
4408 defw l2561h
4409
4410 defb 0c7h ;213a rst
4411 defb 0c7h
4412 defb 0b4h
4413 defw l231eh
4414
4415 defb 0ffh ;213f ret
4416 defb 0c9h
4417 defb 08bh
4418 defw l230bh
4419
4420 defb 0cfh ;2144 pop rr
4421 defb 0c1h
4422 defb 081h
4423 defw l2546h
4424
4425 defb 0cfh ;2149 push rr
4426 defb 0c5h
4427 defb 084h
4428 defw l2546h
4429
4430 defb 0ffh ;214e ex (sp),hl
4431 defb 0e3h
4432 defb 034h
4433 defw l232ah
4434
4435 defb 0ffh ;2153 jp (hl)
4436 defb 0e9h
4437 defb 052h
4438 defw l2338h
4439
4440 defb 0ffh ;2158 ex de,hl
4441 defb 0ebh
4442 defb 034h
4443 defw l2345h
4444
4445 defb 0ffh ;215d ld sp,hl
4446 defb 0f9h
4447 defb 056h
4448 defw l234bh
4449
4450 defb 0cfh ;2162 inc rr
4451 defb 003h
4452 defb 041h
4453 defw l254bh
4454
4455 defb 0cfh ;2167 dec rr
4456 defb 00bh
4457 defb 029h
4458 defw l254bh
4459
4460
4461 defb 0c7h ;216c inc r
4462 defb 004h
4463 defb 041h
4464 defw l24dfh
4465
4466 defb 0c7h ;2171 dec r
4467 defb 005h
4468 defb 029h
4469 defw l24dfh
4470
4471 defb 0ffh ;2176 ex af,af'
4472 defb 008h
4473 defb 034h
4474 defw l2357h
4475
4476 defb 0cfh ;217b add hl,rr
4477 defb 009h
4478 defb 003h
4479 defw l235dh
4480
4481 defb 0efh ;2180 ld (rr),a ;rr=bc,de
4482 defb 002h
4483 defb 056h
4484 defw l2366h
4485
4486 defb 0efh ;2185 ld a,(rr) ;rr=bc,de
4487 defb 00ah
4488 defb 056h
4489 defw l236fh
4490
4491 defb 000h ;218a EOT
4492
4493 b_0x218B_start: ; 2 byte opdodes
4494 defb 0c7h ;218b ld r,nn
4495 defb 006h
4496 defb 056h
4497 defw l2384h
4498
4499 defb 0ffh ;2190 add a,nn
4500 defb 0c6h
4501 defb 003h
4502 defw l237fh
4503
4504 defb 0ffh ;2195 adc a,nn
4505 defb 0ceh
4506 defb 000h
4507 defw l237fh
4508
4509 defb 0ffh ;219a sub a,nn
4510 defb 0d6h
4511 defb 0c9h
4512 defw l2397h
4513
4514 defb 0ffh
4515 defb 0deh
4516 defb 0b7h
4517 defw l237fh
4518
4519 defb 0ffh ;21a4 and a,nn
4520 defb 0e6h
4521 defb 006h
4522 defw l2397h
4523
4524 defb 0ffh
4525 defb 0eeh
4526 defb 0cch
4527 defw l2397h
4528
4529 defb 0ffh
4530 defb 0f6h
4531 defb 06ch
4532 defw l2397h
4533
4534 defb 0ffh ;21b3 cp a,nn
4535 defb 0feh
4536 defb 013h
4537 defw l2397h
4538
4539 defb 0ffh ;21b8 djnz
4540 defb 010h
4541 defb 02eh
4542 defw l23b0h
4543
4544 defb 0ffh ;21bd jr
4545 defb 018h
4546 defb 054h
4547 defw l23b0h
4548
4549 defb 0e7h ;21c2 jr,cc
4550 defb 020h
4551 defb 054h
4552 defw l23a1h
4553
4554 defb 0ffh
4555 defb 0d3h ;21c8 out (nn),a
4556 defb 076h
4557 defw l23d5h
4558
4559 defb 0ffh ;21cc in a,(nn)
4560 defb 0dbh
4561 defb 03fh
4562 defw l23c3h
4563
4564 defb 000h ;21d1 EOT
4565
4566 b_0x21D2_start: ; 3 byte opcodes
4567 defb 0c7h
4568 defb 0c2h
4569 defb 052h
4570 defw l23e0h
4571
4572 defb 0c7h
4573 defb 0c4h
4574 defb 00ch
4575 defw l23e0h
4576
4577 defb 0cfh
4578 defb 001h
4579 defb 056h
4580 defw l23fch
4581
4582 defb 0ffh
4583 defb 0c3h
4584 defb 052h
4585 defw l23e6h
4586
4587 defb 0ffh
4588 defb 0cdh
4589 defb 00ch
4590 defw l23e6h
4591
4592 defb 0ffh
4593 defb 022h
4594 defb 056h
4595 defw l2404h
4596
4597 defb 0ffh
4598 defb 02ah
4599 defb 056h
4600 defw l240dh
4601
4602 defb 0ffh
4603 defb 032h
4604 defb 056h
4605 defw l2416h
4606
4607 defb 0ffh
4608 defb 03ah
4609 defb 056h
4610 defw l2421h
4611
4612 defb 000h
4613
4614 b_0x2200_start: ; prefix ED + 1 byte opcode
4615 defb 044h ;2200 neg
4616 defb 066h
4617 defb 045h ;2202 retn
4618 defb 092h
4619 defb 04dh ;2204 reti
4620 defb 08eh
4621 defb 067h ;2206 rrd
4622 defb 0b1h
4623 defb 06fh ;2208 rld
4624 defb 0a2h
4625 defb 0a0h ;220a ldi
4626 defb 05fh
4627 defb 0a1h
4628 defb 01ch
4629 defb 0a2h
4630 defb 04bh
4631 defb 0a3h
4632 defb 07dh
4633 defb 0a8h ;2212 ldd
4634 defb 058h
4635 defb 0a9h
4636 defb 015h
4637 defb 0aah
4638 defb 044h
4639 defb 0abh
4640 defb 079h
4641 defb 0b0h ;221a ldir
4642 defb 062h
4643 defb 0b1h
4644 defb 01fh
4645 defb 0b2h
4646 defb 04eh
4647 defb 0b3h
4648 defb 072h
4649 defb 0b8h ;2222 lddr
4650 defb 05bh
4651 defb 0b9h
4652 defb 018h
4653 defb 0bah
4654 defb 047h
4655 defb 0bbh
4656 defb 06eh
4657 defb 08bh ;222a otdm
4658 defb 0d5h
4659 defb 09bh ;222c otdmr
4660 defb 0d9h
4661 defb 083h ;222e otim
4662 defb 0deh
4663 defb 093h ;2230 otimr
4664 defb 0e2h
4665 defb 076h ;2232 slp
4666 defb 0ebh
4667 defb 0ffh ;2234 EOT
4668
4669 l2235h:
4670 defb 0e7h ;2235 in r,(c) ;r=bcde
4671 defb 040h
4672 defb 03fh
4673 defw l2455h
4674
4675 defb 0f7h ;223a in r,(c) ;r=hl
4676 defb 060h
4677 defb 03fh
4678 defw l2455h
4679
4680 defb 0ffh ;223f in r,(c) ;r=a
4681 defb 078h
4682 defb 03fh
4683 defw l2455h
4684
4685 defb 0e7h
4686 defb 041h
4687 defb 076h
4688 defw l2461h
4689
4690 defb 0f7h
4691 defb 061h
4692 defb 076h
4693 defw l2461h
4694
4695 defb 0ffh ;224e out (c),r ;r=a
4696 defb 079h
4697 defb 076h
4698 defw l2461h
4699
4700 defb 0cfh ;2253 sbc hl,rr
4701 defb 042h
4702 defb 0b7h
4703 defw l246dh
4704
4705 defb 0cfh ;2258 adc hl,rr
4706 defb 04ah
4707 defb 000h
4708 defw l246dh
4709
4710 defb 0ffh ;225d im 0
4711 defb 046h
4712 defb 03dh
4713 defw l2427h
4714
4715 defb 0ffh ;2262 im 1
4716 defb 056h
4717 defb 03dh
4718 defw l242bh
4719
4720 defb 0ffh ;2267 im 2
4721 defb 05eh
4722 defb 03dh
4723 defw l242fh
4724
4725 defb 0ffh ;226c ld i,a
4726 defb 047h
4727 defb 056h
4728 defw l2434h
4729
4730 defb 0ffh
4731 defb 057h
4732 defb 056h
4733 defw l2439h
4734
4735 defb 0ffh
4736 defb 04fh
4737 defb 056h
4738 defw l243eh
4739
4740 defb 0ffh
4741 defb 05fh
4742 defb 056h
4743 defw l2443h
4744
4745 defb 0cfh ;2280 mlt rr
4746 defb 04ch
4747 defb 0d2h
4748 defw l254bh
4749
4750 defb 0c7h ;2285 tst r
4751 defb 004h
4752 defb 0eeh
4753 defw l24dfh
4754
4755 defb 000h
4756
4757 l228bh:
4758 defb 0e7h
4759 defb 000h
4760 defb 0cfh
4761 defw l230ch
4762
4763 defb 0f7h
4764 defb 020h
4765 defb 0cfh
4766 defw l230ch
4767
4768 defb 0ffh
4769 defb 038h
4770 defb 0cfh
4771 defw l230ch
4772
4773 defb 0e7h
4774 defb 001h
4775 defb 0e7h
4776 defw l2315h
4777
4778 defb 0f7h
4779 defb 021h
4780 defb 0e7h
4781 defw l2315h
4782
4783 defb 0ffh
4784 defb 039h
4785 defb 0e7h
4786 defw l2315h
4787
4788 defb 0ffh
4789 defb 064h
4790 defb 0eeh
4791 defw l2397h
4792
4793 defb 0ffh
4794 defb 074h
4795 defb 0f1h
4796 defw l2397h
4797 defb 000h
4798
4799 l22b4h:
4800 defb 0efh
4801 defb 043h
4802 defb 056h
4803
4804 b_0x22B7_start:
4805 defw l2476h
4806
4807 b_0x22B9_start:
4808 defb 0ffh
4809 defb 073h
4810 defb 056h
4811
4812 b_0x22BC_start:
4813 defw l2476h
4814
4815 b_0x22BE_start:
4816 defb 0efh
4817 defb 04bh
4818 defb 056h
4819
4820 b_0x22C1_start:
4821 defw l247fh
4822
4823 b_0x22C3_start:
4824 defb 0ffh
4825 defb 07bh
4826 defb 056h
4827
4828 b_0x22C6_start:
4829 defw l247fh
4830
4831 b_0x22C8_start:
4832 defb 000h
4833 l22c9h:
4834 defb 0f8h
4835 defb 000h
4836 defb 09bh
4837
4838 b_0x22CC_start:
4839 defw l24aeh
4840
4841 b_0x22CE_start:
4842 defb 0f8h
4843 defb 008h
4844 defb 0aah
4845
4846 b_0x22D1_start:
4847 defw l24aeh
4848
4849 b_0x22D3_start:
4850 defb 0f8h
4851 defb 010h
4852 defb 096h
4853
4854 b_0x22D6_start:
4855 defw l24aeh
4856
4857 b_0x22D8_start:
4858 defb 0f8h
4859 defb 018h
4860 defb 0a5h
4861
4862 b_0x22DB_start:
4863 defw l24aeh
4864
4865 b_0x22DD_start:
4866 defb 0f8h
4867 defb 020h
4868 defb 0c0h
4869
4870 b_0x22E0_start:
4871 defw l24aeh
4872
4873 b_0x22E2_start:
4874 defb 0f8h
4875 defb 028h
4876 defb 0c3h
4877
4878 b_0x22E5_start:
4879 defw l24aeh
4880
4881 b_0x22E7_start:
4882 defb 0f8h
4883 defb 038h
4884 defb 0c6h
4885
4886 b_0x22EA_start:
4887 defw l24aeh
4888
4889 b_0x22EC_start:
4890 defb 0c0h
4891 defb 040h
4892 defb 009h
4893
4894 b_0x22EF_start:
4895 defw l2487h
4896
4897 b_0x22F1_start:
4898 defb 0c0h
4899 defb 080h
4900 defb 088h
4901
4902 b_0x22F4_start:
4903 defw l2487h
4904
4905 b_0x22F6_start:
4906 defb 0c0h
4907 defb 0c0h
4908 defb 0bdh
4909
4910 b_0x22F9_start:
4911 defw l2487h
4912
4913 b_0x22FB_start:
4914 defb 000h
4915 l22fch:
4916 call l24dfh
4917 call sub_257ch
4918 jp l24ebh
4919 l2305h:
4920 call sub_2579h
4921 jp l24ebh
4922 l230bh:
4923 ret
4924 l230ch:
4925 call l24dfh
4926 call sub_257ch
4927 jp l23c6h
4928 l2315h:
4929 call l23c6h
4930 call sub_257ch
4931 jp l24dfh
4932 l231eh:
4933 comst
4934 ld a,(iy+000h)
4935 comend
4936 and 038h
4937 jp out.hex
4938 l232ah:
4939 ld hl,b_0x2333_start
4940 call PSTR
4941 jp l253eh
4942
4943 b_0x2333_start:
4944 DC '(SP),'
4945
4946 l2338h:
4947 ld a,'('
4948 call OUTCHAR
4949 call l253eh
4950 ld a,')'
4951 jp OUTCHAR
4952 l2345h:
4953 ld hl,l1d86h
4954 jp PSTR
4955 l234bh:
4956 ld hl,b_0x2354_start
4957 call PSTR
4958 jp l253eh
4959
4960 b_0x2354_start:
4961 DC 'SP,'
4962
4963 l2357h:
4964 ld hl,b_0x1D80_start
4965 jp PSTR
4966 l235dh:
4967 call l253eh
4968 call sub_257ch
4969 jp l254bh
4970 l2366h:
4971 call sub_2372h
4972 call sub_257ch
4973 jp l23dbh
4974 l236fh:
4975 call sub_2579h
4976 sub_2372h:
4977 ld a,'('
4978 call OUTCHAR
4979 call l254bh
4980 ld a,')'
4981 jp OUTCHAR
4982 l237fh:
4983 call sub_2579h
4984 jr l2397h
4985 l2384h:
4986 call l24dfh
4987 call sub_257ch
4988 ld a,(is.pfx.IXY)
4989 and a
4990 comst
4991 ld a,(iy+002h)
4992 comend
4993 jr nz,l239eh
4994 l2397h:
4995 comst
4996 ld a,(iy+001h)
4997 comend
4998 l239eh:
4999 jp out.hex
5000 l23a1h:
5001 comst
5002 ld a,(iy+000h)
5003 comend
5004 and 018h
5005 call sub_2568h
5006 call sub_257ch
5007 l23b0h:
5008 comst
5009 ld c,(iy+001h)
5010 comend
5011 ld a,c
5012 rla
5013 sbc a,a
5014 ld b,a
5015 push iy
5016 pop hl
5017 add hl,bc
5018 inc hl
5019 inc hl
5020 jr l23f0h
5021 l23c3h:
5022 call sub_2579h
5023 l23c6h:
5024 ld a,028h
5025 call OUTCHAR
5026 comst
5027 ld a,(iy+001h)
5028 comend
5029 jp l252bh
5030 l23d5h:
5031 call l23c6h
5032 call sub_257ch
5033 l23dbh:
5034 ld a,041h
5035 jp OUTCHAR
5036 l23e0h:
5037 call l2561h
5038 call sub_257ch
5039 l23e6h:
5040 comst
5041 ld l,(iy+001h)
5042 ld h,(iy+002h)
5043 comend
5044 l23f0h:
5045 ld a,002h
5046 sub_23f2h:
5047 ld (XBE03),a
5048 ld (XBE01),hl
5049 call out.hl
5050 ret
5051 l23fch:
5052 call l254bh
5053 call sub_257ch
5054 jr l23e6h
5055 l2404h:
5056 call sub_24c6h
5057 call sub_257ch
5058 jp l253eh
5059 l240dh:
5060 call l253eh
5061 call sub_257ch
5062 jp sub_24c6h
5063 l2416h:
5064 call sub_24c6h
5065 call sub_257ch
5066 ld a,041h
5067 jp OUTCHAR
5068 l2421h:
5069 call sub_2579h
5070 jp sub_24c6h
5071 l2427h:
5072 ld a,030h
5073 jr l2431h
5074 l242bh:
5075 ld a,031h
5076 jr l2431h
5077 l242fh:
5078 ld a,032h
5079 l2431h:
5080 jp OUTCHAR
5081 l2434h:
5082 ld hl,b_0x2449_start
5083 jr l2446h
5084 l2439h:
5085 ld hl,l244ch
5086 jr l2446h
5087 l243eh:
5088 ld hl,l244fh
5089 jr l2446h
5090 l2443h:
5091 ld hl,l2452h
5092 l2446h:
5093 jp PSTR
5094
5095 b_0x2449_start:
5096 DC 'I,A'
5097 l244ch:
5098 DC 'A,I'
5099 l244fh:
5100 DC 'R,A'
5101 l2452h:
5102 DC 'A,R'
5103
5104 l2455h:
5105 call l24dfh
5106 call sub_257ch
5107 ld hl,t__C_
5108 jp PSTR
5109 l2461h:
5110 ld hl,t__C_
5111 call PSTR
5112 call sub_257ch
5113 jp l24dfh
5114 l246dh:
5115 call l253eh
5116 call sub_257ch
5117 jp l254bh
5118 l2476h:
5119 call sub_24c6h
5120 call sub_257ch
5121 jp l254bh
5122 l247fh:
5123 call l254bh
5124 call sub_257ch
5125 jr sub_24c6h
5126 l2487h:
5127 ld a,(is.pfx.IXY)
5128 and a
5129 jr nz,l2496h
5130 comst
5131 ld a,(iy+001h)
5132 comend
5133 jr l249dh
5134 l2496h:
5135 comst
5136 ld a,(iy+002h)
5137 comend
5138 l249dh:
5139 push af
5140 rra
5141 rra
5142 rra
5143 and 007h
5144 add a,'0'
5145 call OUTCHAR
5146 call sub_257ch
5147 pop af
5148 jr l24f2h
5149 l24aeh:
5150 ld a,(is.pfx.IXY)
5151 and a
5152 jr nz,l24bdh
5153 comst
5154 ld a,(iy+001h)
5155 comend
5156 jr l24c4h
5157 l24bdh:
5158 comst
5159 ld a,(iy+002h)
5160 comend
5161 l24c4h:
5162 jr l24f2h
5163 sub_24c6h:
5164 ld a,'('
5165 call OUTCHAR
5166 comst
5167 ld l,(iy+001h)
5168 ld h,(iy+002h)
5169 comend
5170 ld a,001h
5171 call sub_23f2h
5172 ld a,')'
5173 jp OUTCHAR
5174 l24dfh:
5175 comst
5176 ld a,(iy+000h)
5177 comend
5178 rra
5179 rra
5180 rra
5181 jr l24f2h
5182 l24ebh:
5183 comst
5184 ld a,(iy+000h)
5185 comend
5186 l24f2h:
5187 and 007h
5188 cp 006h
5189 jr nz,l2533h
5190 ld a,(is.pfx.IXY)
5191 and a
5192 ld a,006h
5193 jr z,l2533h
5194 ld hl,b_0x2538_start
5195 ld a,(is.pfx.IXY)
5196 dec a
5197 jr z,l250ch
5198 ld hl,b_0x253B_start
5199 l250ch:
5200 call PSTR
5201 comst
5202 ld a,(iy+001h)
5203 comend
5204 and a
5205 push af
5206 jp m,l2523h
5207 ld a,'+'
5208 call OUTCHAR
5209 pop af
5210 jr l252bh
5211 l2523h:
5212 ld a,'-'
5213 call OUTCHAR
5214 pop af
5215 neg
5216 l252bh:
5217 call out.hex
5218 ld a,')'
5219 jp OUTCHAR
5220 l2533h:
5221 ld hl,t_BCDEHL_HL_A
5222 jr l2572h
5223
5224 b_0x2538_start:
5225 DC '(IX'
5226 b_0x253B_start:
5227 DC '(IY'
5228
5229 l253eh:
5230 ld a,(is.pfx.IXY)
5231 ld hl,t_HL.IX.IY
5232 jr l2572h
5233 l2546h:
5234 ld hl,t_BC.DE.HL.AF
5235 jr l254eh
5236 l254bh:
5237 ld hl,t_BC.DE.HL.SP
5238 l254eh:
5239 comst
5240 ld a,(iy+000h)
5241 comend
5242 rra
5243 rra
5244 rra
5245 rra
5246 and 003h
5247 cp 002h
5248 jr z,l253eh
5249 jr l2572h
5250 l2561h:
5251 comst
5252 ld a,(iy+000h)
5253 comend
5254 sub_2568h:
5255 rra
5256 rra
5257 rra
5258 and 007h
5259 ld hl,t_tstfl_ZCPS
5260 jr l2572h
5261 l2572h:
5262 ld b,a
5263 call sub_0a48h
5264 jp PSTR
5265 sub_2579h:
5266 call l23dbh
5267 sub_257ch:
5268 ld a,','
5269 jp OUTCHAR
5270 sub_2581h:
5271 call PSTR
5272 l2584h:
5273 call OUTBL
5274 inc c
5275 ld a,c
5276 cp 006h
5277 jr nz,l2584h
5278 ret
5279
5280 t_MNEMONICS:
5281 DC 'ADC'
5282 DC 'ADD'
5283 DC 'AND'
5284 DC 'BIT'
5285 DC 'CALL'
5286 DC 'CCF'
5287 DC 'CP'
5288 DC 'CPD'
5289 DC 'CPDR'
5290 DC 'CPI'
5291 DC 'CPIR'
5292 DC 'CPL'
5293 DC 'DAA'
5294 DC 'DEC'
5295 DC 'DI'
5296 DC 'DJNZ'
5297 DC 'EI'
5298 DC 'EX'
5299 DC 'EXX'
5300 DC 'HALT'
5301 DC 'IM'
5302 DC 'IN'
5303 DC 'INC'
5304 DC 'IND'
5305 DC 'INDR'
5306 DC 'INI'
5307 DC 'INIR'
5308 DC 'JP'
5309 DC 'JR'
5310 DC 'LD'
5311 DC 'LDD'
5312 DC 'LDDR'
5313 DC 'LDI'
5314 DC 'LDIR'
5315 DC 'NEG'
5316 DC 'NOP'
5317 DC 'OR'
5318 DC 'OTDR'
5319 DC 'OTIR'
5320 DC 'OUT'
5321 DC 'OUTD'
5322 DC 'OUTI'
5323 DC 'POP'
5324 DC 'PUSH'
5325 DC 'RES'
5326 DC 'RET'
5327 DC 'RETI'
5328 DC 'RETN'
5329 DC 'RL'
5330 DC 'RLA'
5331 DC 'RLC'
5332 DC 'RLCA'
5333 DC 'RLD'
5334 DC 'RR'
5335 DC 'RRA'
5336 DC 'RRC'
5337 DC 'RRCA'
5338 DC 'RRD'
5339 DC 'RST'
5340 DC 'SBC'
5341 DC 'SCF'
5342 DC 'SET'
5343 DC 'SLA'
5344 DC 'SRA'
5345 DC 'SRL'
5346 DC 'SUB'
5347 DC 'XOR'
5348 DC 'IN0'
5349 DC 'MLT'
5350 DC 'OTDM'
5351 DC 'OTDMR'
5352 DC 'OTIM'
5353 DC 'OTIMR'
5354 DC 'OUT0'
5355 DC 'SLP'
5356 DC 'TST'
5357 DC 'TSTIO'
5358 DB 0
5359
5360 t_BCDEHL_HL_A:
5361 DC 'B'
5362 DC 'C'
5363 DC 'D'
5364 DC 'E'
5365 DC 'H'
5366 DC 'L'
5367 DC '(HL)'
5368 DC 'A'
5369 DB 0
5370 t_BC.DE.HL.SP:
5371 DC 'BC'
5372 DC 'DE'
5373 DC 'HL'
5374 DC 'SP'
5375 DB 0
5376 t_BC.DE.HL.AF:
5377 DC 'BC'
5378 DC 'DE'
5379 t_HL.AF:
5380 DC 'HL'
5381 DC 'AF'
5382 DB 0
5383 t_BC.DE.IY.SP:
5384 DC 'BC'
5385 DC 'DE'
5386 DC 'IY'
5387 DC 'SP'
5388 DB 0
5389 t_BC.DE.IX.SP:
5390 DC 'BC'
5391 DC 'DE'
5392 DC 'IX'
5393 DC 'SP'
5394 DB 0
5395 t_HL.IX.IY:
5396 DC 'HL'
5397 t_IX.IY:
5398 DC 'IX'
5399 DC 'IY'
5400 DB 0
5401 t_tstfl_ZC:
5402 DC 'NZ'
5403 DC 'Z'
5404 DC 'NC'
5405 DC 'C'
5406 DC 'NE'
5407 DC 'EQ'
5408 DC 'GE'
5409 DC 'LT'
5410 DB 0
5411 t_tstfl_ZCPS:
5412 DC 'NZ'
5413 DC 'Z'
5414 DC 'NC'
5415 DC 'C'
5416 DC 'PO'
5417 DC 'PE'
5418 DC 'P'
5419 DC 'M'
5420 DC 'NE'
5421 DC 'EQ'
5422 DC 'GE'
5423 DC 'LT'
5424 DC 'NV'
5425 DC 'V'
5426 DB 0
5427 t__C_:
5428 DC '(C)'
5429 DB 0
5430
5431 sub_26e7h:
5432 ld hl,(REG.PC)
5433 ld a,h
5434 or l
5435 jr z,l2715h
5436 ld iy,(REG.PC)
5437 call sub_1f9eh
5438 jp nc,ERROR
5439 ld c,b
5440 ld b,000h
5441 ld hl,(REG.PC)
5442 add hl,bc
5443 call sub_1117h
5444 ld iy,(REG.PC)
5445 ld hl,b_0x2717_start
5446 call lookup_opc
5447 ccf
5448 ret c
5449 ex de,hl
5450 call CALL.HL
5451 call c,sub_1117h
5452 l2715h:
5453 scf
5454 ret
5455
5456 b_0x2717_start:
5457 db 0ffh
5458 db 0ddh
5459 db 000h
5460 dw x278d
5461
5462 db 0ffh
5463 db 0fdh
5464 db 000h
5465 dw x2792
5466
5467 db 0ffh
5468 db 0edh
5469 db 000h
5470 dw x27a2
5471
5472 l2726h:
5473 db 0ffh
5474 db 0cdh
5475 db 000h
5476 dw x275e
5477
5478 db 0ffh
5479 db 0c3h
5480 db 000h
5481 dw x2769
5482
5483 db 0ffh
5484 db 0e9h
5485 db 000h
5486 dw x2788
5487
5488 db 0ffh
5489 db 0c9h
5490 db 000h
5491 dw x27c9
5492
5493 db 0ffh
5494 db 0cfh
5495 db 000h
5496 dw x280e
5497
5498 db 0c7h
5499 db 0c7h
5500 db 000h
5501 dw x27ea
5502
5503 db 0c7h
5504 db 0c4h
5505 db 000h
5506 dw x275e
5507
5508 db 0f7h
5509 db 010h
5510 db 000h
5511 dw x2775
5512
5513 db 0e7h
5514 db 020h
5515 db 000h
5516 dw x2775
5517
5518 db 0c7h
5519 db 0c2h
5520 db 000h
5521 dw x2769
5522
5523 db 0c7h
5524 db 0c0h
5525 db 000h
5526 dw x27b3
5527
5528 db 000h
5529
5530 x275e:
5531 ld a,(XBFE8)
5532 and a
5533 jr nz,x2769
5534 ld a,(TCFLG)
5535 and a
5536 ret nz
5537
5538 x2769:
5539 comst
5540 ld l,(iy+001h)
5541 ld h,(iy+002h)
5542 comend
5543 scf
5544 ret
5545
5546 x2775:
5547 comst
5548 ld c,(iy+001h)
5549 comend
5550 ld a,c
5551 rla
5552 sbc a,a
5553 ld b,a
5554 ld hl,(REG.PC)
5555 add hl,bc
5556 inc hl
5557 inc hl
5558 scf
5559 ret
5560
5561 x2788:
5562 ld hl,(REG.L)
5563 scf
5564 ret
5565
5566 x278d:
5567 ld hl,(reg.ix)
5568 jr l2795h
5569
5570 x2792:
5571 ld hl,(reg.iy)
5572 l2795h:
5573 comst
5574 ld a,(iy+001h)
5575 comend
5576 cp 0e9h
5577 scf
5578 ret z
5579 and a
5580 ret
5581
5582 x27a2:
5583 comst
5584 ld a,(iy+001h)
5585 comend
5586 cp 04dh
5587 jr z,x27c9
5588 cp 045h
5589 jr z,x27c9
5590 and a
5591 ret
5592
5593 x27b3:
5594 comst
5595 ld a,(iy+000h)
5596 comend
5597 ld (XBEDD),a
5598 ld hl,(REG.F)
5599 push hl
5600 pop af
5601 call XBEDD
5602 scf
5603 jr c,x27c9
5604 ret
5605
5606 x27c9:
5607 ld a,(XBFE8)
5608 and a
5609 jr nz,l27dah
5610 ld a,(TCFLG)
5611 and a
5612 jr z,l27dah
5613 call l27dah
5614 pop hl
5615 ret
5616 l27dah:
5617 ld hl,(REG.SP)
5618 comst
5619 ld e,(hl)
5620 inc hl
5621 ld d,(hl)
5622 comend
5623 ex de,hl
5624 call sub_1117h
5625 and a
5626 ret
5627
5628 x27ea:
5629 ld a,(ddtzrst)
5630 comst
5631 cp (iy+000h)
5632 comend
5633 ret z
5634 comst
5635 ld a,(iy+000h)
5636 comend
5637 and 038h
5638 ld l,a
5639 ld h,000h
5640 ld a,(XBFE8)
5641 and a
5642 jr nz,l280ch
5643 ld a,(TCFLG)
5644 and a
5645 ret nz
5646 l280ch:
5647 scf
5648 ret
5649
5650 x280e:
5651 and a
5652 ret
5653
5654 CMD.C:
5655 ld hl,CMD.C
5656 ld a,001h
5657 jr l281bh
5658
5659 CMD.T:
5660 xor a
5661 ld hl,CMD.T
5662 l281bh:
5663 ld (CMD_RPT),hl
5664 ld (TCFLG),a
5665 ld a,(de)
5666 sub 'N'
5667 jr nz,l2827h
5668 inc de
5669 l2827h:
5670 ld (TCNFLG),a
5671 ld a,(de)
5672 sub 'J'
5673 jr nz,l2830h
5674 inc de
5675 l2830h:
5676 ld (TRJFLG),a
5677 call sub_289fh
5678 jr z,l283eh
5679 ld hl,1
5680 call get_lastarg_def
5681 l283eh:
5682 ld (TCCSTR),hl
5683 sub a
5684 ld (XA747),a
5685 l2845h:
5686 call sub_26e7h
5687 jr l289ch
5688 l284ah:
5689 call sub_0e68h
5690 ld a,(TRJFLG)
5691 and a
5692 jr nz,l2864h
5693 ld iy,(REG.PC)
5694 call sub_28c1h
5695 jr z,l2864h
5696 ld hl,l2726h
5697 call lookup_opc
5698 jr nc,l2845h
5699 l2864h:
5700 ld a,(XBFEA)
5701 and a
5702 jr z,l2881h
5703 ld de,(TCCSTR)
5704 call EXPR
5705 ld a,h
5706 or l
5707 add a,0ffh
5708 sbc a,a
5709 ld hl,XBFEA
5710 xor (hl)
5711 bit 1,a
5712 jr z,l288ch
5713 l287eh:
5714 jp l102eh
5715 l2881h:
5716 ld hl,(TCCSTR)
5717 dec hl
5718 ld (TCCSTR),hl
5719 ld a,h
5720 or l
5721 jr z,l287eh
5722 l288ch:
5723 call sub_26e7h
5724 jr nc,l287eh
5725 ld a,(TCNFLG)
5726 ld b,a
5727 ld a,(XA747)
5728 or b
5729 ld (XA747),a
5730 l289ch:
5731 jp l1183h
5732
5733 sub_289fh:
5734 call SKIPBL
5735 xor a
5736 ld (XBFEA),a
5737 ld a,(de)
5738 cp 'U'
5739 jr z,l28aeh
5740 cp 'W'
5741 ret nz
5742
5743 l28aeh:
5744 inc de
5745 push af
5746 push de
5747 call EXPR
5748 jp c,ERROR
5749 call assert_eol
5750 pop hl
5751 pop af
5752 ld (XBFEA),a
5753 sub a
5754 ret
5755
5756 sub_28c1h:
5757 comst
5758 ld a,(iy+000h)
5759 ld b,(iy+0001)
5760 comend
5761 cp 0edh
5762 jr z,l28dbh
5763 and 0dfh
5764 cp 0ddh
5765 ret nz
5766 ld a,b
5767 cp 0e9h
5768 ret
5769 l28dbh:
5770 ld a,b
5771 and 0f7h
5772 cp 045h
5773 ret
5774
5775 ?excom:
5776 ex (sp),hl
5777 push af
5778 push bc
5779 push de
5780 ld c,(hl)
5781 ld b,000h
5782 inc hl
5783 ld a,?lcmax
5784 sub c
5785 ld de,?exeit
5786 ldir
5787 ex de,hl
5788 ld (hl),018h
5789 inc hl
5790 ld (hl),a
5791 ex de,hl
5792 pop de
5793 pop bc
5794 pop af
5795 ex (sp),hl
5796 if CPU_Z180
5797 push hl
5798 ld hl,(ubbr)
5799
5800 else
5801 push af
5802 ld a,(ubnk)
5803 endif
5804 if ROMSYS
5805 push af
5806 ld a,(uromen)
5807 endif
5808 jp ?comcod
5809
5810 ;------------------------------------------
5811 ; ddtram
5812 ;------------------------------------------
5813
5814 vartab:
5815 ; dseg
5816 cseg
5817 ddtram:
5818 ;todo:
5819 ; The following 2 params are changeable by user.
5820 ; Should these moved to top ram?
5821 ;
5822 ddtzrst:
5823 rst DDTZRSTVEC ;rst used by ddtz
5824 ddtei: ei ;ints enabled/disabled while ddtz is running
5825 ret ;
5826 offs.pc:
5827 dw TPA
5828 offs.@:
5829 dw 0
5830 CMD_ERR:
5831 dw 0
5832 CMD_RPT:
5833 dw DDTZML
5834 ci.buf:
5835 db 80
5836 rept 83
5837 db 0
5838 endm
5839 CON.COL:
5840 db 0
5841 XA747:
5842 db 0
5843 bp_tab:
5844 rept BP_CNT
5845 db 0,0
5846 dw 0,0,0
5847 endm
5848 BP_SIZE equ 8
5849 sexp1:
5850 dw sexpbuf
5851 sexp2:
5852 dw sexpbuf
5853 sexpbuf:
5854 rept 128
5855 db 0
5856 endm
5857 sexpbufe:
5858
5859 msg.Y:
5860 dc 'Y0'
5861 reg.Y:
5862 rept 10
5863 dw 0
5864 endm
5865 lst.S:
5866 dw 0
5867 lst.IP:
5868 dw 0
5869 lst.OP:
5870 dw 0
5871 lst.OD:
5872 db 0
5873 lst.Qj:
5874 db 0
5875 lst.D:
5876 dw 0
5877 HILOD:
5878 dw 0
5879 MAXLOD:
5880 dw 0
5881 XB068:
5882 dw 0
5883 lst.A:
5884 dw 0
5885 XB06C:
5886 dw 0
5887 pfx.IXY:
5888 db 000h
5889 is.pfx.IXY:
5890 db 000h
5891 lst.L:
5892 dw 0
5893 XBE01:
5894 dw 0
5895 XBE03:
5896 db 000h
5897 XBEDD:
5898 ret ;ret cc
5899 and a
5900 pop hl
5901 inc hl
5902 jp (hl)
5903 XBFE8:
5904 db 0
5905 TCFLG:
5906 db 0
5907 XBFEA:
5908 db 0
5909 TCCSTR:
5910 dw 0
5911 TCNFLG:
5912 db 0
5913 TRJFLG:
5914 db 0
5915 wstrtflg:
5916 db 1
5917
5918 cseg
5919 vartabe:
5920
5921 ;------------------------------------------
5922
5923 .phase sysram_start+bs$stack$size
5924 $stack:
5925 $stcka equ $ - bs$stack$size
5926
5927 curphse defl $
5928 .dephase
5929 sysramc:
5930 .phase curphse
5931 topcodbeg:
5932
5933 reg.l2: db 0 ; 0fe50h
5934 reg.h2: db 0 ; 0fe51h
5935 reg.e2: db 0 ; 0fe52h
5936 reg.d2: db 0 ; 0fe53h
5937 reg.c2: db 0 ; 0fe54h
5938 reg.b2: db 0 ; 0fe55h
5939 reg.f2: db 0 ; 0fe56h
5940 reg.a2: db 0 ; 0fe57h
5941 db 0
5942 reg.i: db high ivtab
5943 reg.iy: dw 0 ; 0fe5ah
5944 reg.ix: dw 0 ; 0fe5ch
5945 reg.e: db 0 ; 0fe5eh
5946 reg.d: db 0 ; 0fe5fh
5947 reg.c: db 0 ; 0fe60h
5948 reg.b: db 0 ; 0fe61h
5949 if ROMSYS
5950 udcntl: db CWAITIO ; 0fe62h (mem-, io- wait)
5951 uromen: db ROM_DIS ; 0fe63h
5952 endif
5953 if CPU_Z180
5954 ubbr: db 0 ; 0fe64h
5955 ucbar: db USR$CBAR ; 0fe65h
5956 else
5957 db 0 ; 0fe64h
5958 ubnk: db 0 ; 0fe65h
5959 endif
5960 reg.f: db 0 ; 0fe66h
5961 reg.a: db 0 ; 0fe67h
5962 reg.l: db 0 ; 0fe68h
5963 reg.h: db 0 ; 0fe69h
5964 reg.sp: dw TOPRAM ; 0fe6ah
5965
5966 $go:
5967 if ROMSYS
5968 out (000h),a ;064c fe6c
5969 out0 (dcntl),l
5970 pop hl
5971 endif
5972 if CPU_Z180
5973 out0 (cbar),h
5974 out0 (bbr),l
5975 else
5976 ld a,h
5977 call selbnk
5978 endif
5979 pop af
5980 pop hl
5981 ld sp,(reg.sp)
5982 reg.iff:
5983 ei
5984 db 0C3h ;jp TPA ;065f feff ($+1): reg.pc
5985 reg.pc:
5986 dw TPA
5987
5988 bpent:
5989 ld (reg.l),hl ;0662 fe82: bpent:
5990 pop hl
5991 dec hl
5992 ld (reg.pc),hl
5993 ld (reg.sp),sp
5994 ld sp,reg.l
5995 push af
5996 if CPU_Z180
5997 ;;; TODO: cbar on trap?
5998 in0 h,(cbar)
5999 in0 l,(bbr)
6000 ld a,SYS$CBAR
6001 out0 (cbar),a
6002 else
6003 ld a,(@cbnk)
6004 ld h,a
6005 xor a
6006 ld l,a
6007 call selbnk
6008 endif
6009 push hl
6010
6011 if ROMSYS
6012 in0 l,(dcntl)
6013 ld a,CWAITROM+CWAITIO
6014 out0 (dcntl),a
6015 ld a,($crom)
6016 cp c$rom
6017 ld a,ROM_EN
6018 out (000h),a
6019 endif
6020
6021 jp bpddtz
6022
6023 ?comcod:
6024 if ROMSYS
6025 out (000h),a ;0692 feb2
6026 pop af
6027 endif
6028
6029 if CPU_Z180
6030 out0 (cbar),h
6031 out0 (bbr),l
6032 pop hl
6033 else
6034 call selbnk
6035 pop af
6036 endif
6037 ?exeit:
6038 ds ?lcmax+2
6039 push af
6040 if CPU_Z180
6041 ld a,SYS$CBAR
6042 out0 (cbar),a
6043
6044 ;;; TODO: bbr?
6045 else
6046 xor a
6047 call selbnk
6048 endif
6049 if ROMSYS
6050 ld a,ROM_EN
6051 out (000h),a
6052 endif
6053
6054 pop af
6055 ret
6056
6057 topcodend:
6058 curph defl $
6059 .dephase
6060 sysrame:
6061
6062 end