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