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