10
20
30
40
50 OSWRCH=&FFEE:OSNEWL=&FFE7
60 OSARGS=&FFDA:OSBYTE=&FFF4
70 l_ptr=&A8:addr=&AA:rom=&AC
80 end_ad=&AD
90 mcode%=&900
100 tempY=mcode%:buff=mcode%+2
110 tube=&27A
120 FOR P=0 TO 1
130 P%=mcode%
140 [OPT P*3
150 LDA #1:LDY #0:LDX #l_ptr
160 JSR OSARGS
170 LDA (l_ptr),Y:CMP #13:BEQ syntax
180 LDX #addr:JSR get_hex_addr
190 JSR space2:BEQ mdump
200 STA forever
210 LDX #end_ad
220 CMP #ASC"+":BEQ plus
230 JSR get_hex_addr
240 JMP mdump
250 .syntax
260 BRK
270 OPT FNequs(CHR$220+"Syntax: MDump <start> (<end>/+<length>)")
280 BRK
290 .plus
300 JSR skpspc:BEQ syntax
310 JSR get_hex_addr
320 CLC:LDA addr:ADC end_ad:STA end_ad
330 LDA addr+1:ADC end_ad+1:STA end_ad+1
340 .mdump
350 LDA #0:LDX #255:JSR OSBYTE
360 CPX #2:BCC mdump1:BEQ Bplus
370 LDA &FE34:AND #&F3:STA acc1
380 ORA #&0C:STA acc2:BNE set_acc
390 .Bplus
400 LDA #128:STA acc2
410 .set_acc
420 LDA #255:STA accflg
430 .mdump1
440 LDA end_ad:CLC:ADC #7:STA end_ad
450 LDA end_ad+1:ADC #0:STA end_ad+1
460 .loop
470 JSR pr_addr
480 JSR get_8_bytes
490 LDX #0
500 .loop1
510 LDA #32:JSR OSWRCH
520 LDA buff,X:JSR pr_hex
530 INX:CPX #8:BNE loop1
540 LDA #32:JSR OSWRCH
550 LDX #0
560 .loop2
570 LDA buff,X:AND #127
580 CMP #32:BCS pr_char
590 .pr_dot LDA #ASC"."
600 .pr_char CMP #127:BEQ pr_dot
610 JSR OSWRCH
620 INX:CPX #8:BNE loop2
630 JSR OSNEWL
640 LDA addr:CLC:ADC #8:STA addr
650 LDA addr+1:ADC #0:STA addr+1
660 LDA rom:ADC #0:STA rom
670 BIT forever:BMI mdump2
680 LDA addr:EOR end_ad:AND #&F8
690 BNE mdump2
700 LDA addr+1:EOR end_ad+1
710 BEQ exit
720 .mdump2
730 BIT &FF:BPL loop
740 LDA #124:JSR OSBYTE:\ Ack Esc
750 .exit
760 RTS
770 .get_8_bytes
780 LDX rom:BIT tube:BMI tubeget
790 CPX #&FE:BCC getbyte4
800 .getbyte1
810 LDA &F4:PHA
820 BIT accflg:BPL getbyte3
830 LDA &FE34:PHA
840 LDA acc1:CPX #&FE:BNE getbyte2:LDA acc2
850 .getbyte2
860 STA &FE34
870 CPX #&F0:BCS getbyte3
880 LDA #&8F:STA &F4:STA &FE30:BNE getbyte4
890 .getbyte3
900 LDA rom:AND #15:STA &F4:STA &FE30
910 .getbyte4
920 LDX #7:LDY #7
930 .getbyteloop
940 LDA (addr),Y:STA buff,X
950 DEY:DEX:BPL getbyteloop
960 LDA rom:CMP #&FE:BCC getbyte6
970 BIT accflg:BPL getbyte5
980 PLA:STA &FE34
990 .getbyte5
1000 PLA:STA &F4:STA &FE30
1010 .getbyte6
1020 RTS
1030 .tubeget
1040 CPX #&FE:BCS getbyte1
1050 .tubeclaim \Claim tube hardware
1060 LDA #&C0+&10:JSR &406:BCC tubeclaim
1070 LDX #addr:LDY #0
1080 LDA #0:JSR &406:LDX #0
1090 .tubeloop
1100 LDY #9:\ 24ish us delay
1110 .tube_wait
1120 DEY:BNE tube_wait
1130 LDA &FEE5:STA buff,X
1140 INX:CPX #8:BNE tubeloop
1150 LDA #&80+&10:JSR &406:\ Release tube hardware
1160 RTS
1170 .pr_addr
1180 LDA rom:JSR pr_hex
1190 LDA addr+1:JSR pr_hex
1200 LDA addr
1210 .pr_hex
1220 PHA:LSR A:LSR A:LSR A:LSR A
1230 JSR h_first:PLA
1240 .h_first
1250 AND #15:CMP #10:BCC h_over
1260 ADC #6:.h_over
1270 ADC #48:JMP OSWRCH
1280 .get_hex_addr
1290 LDA #0
1300 STA 0,X:STA 1,X:STA 2,X
1310 .nextchar
1320 LDA (l_ptr),Y:JSR asc_to_bin
1330 BCS gh_exit
1340 ASL A:ASL A:ASL A:ASL A
1350 STY tempY:LDY #4
1360 .gh_again
1370 ASL A:ROL 0,X:ROL 1,X:ROL 2,X
1380 DEY:BNE gh_again
1390 LDY tempY
1400 INY:BNE nextchar
1410 .gh_exit
1420 RTS
1430 .asc_to_bin
1440 CMP #48:BCC illegal
1450 CMP #58:BCC zero_nine
1460 SBC #7:BCC illegal
1470 CMP #64:BCS illegal
1480 .zero_nine
1490 AND #&0F:RTS
1500 .illegal
1510 SEC:RTS
1520 .skpspc INY
1530 .space2 LDA (l_ptr),Y:CMP #32
1540 BEQ skpspc
1550 CMP #13:RTS
1560 .accflg:BRK
1570 .acc1:BRK
1580 .acc2:BRK
1590 .forever:OPT FNequs(CHR$255)
1600 ]
1610 NEXT
1620 $&780="*SAVE MDUMP "+STR$~(mcode%OR&FFFF0000)+" "+STR$~(P%OR&FFFF0000)
1630 X%=&80:Y%=7:CALL&FFF7
1640 END
1650 DEFFNequs(A$):$P%=A$:P%=P%+LENA$:=P*3