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