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