>MDump106/s & Source for *MDUMP by J.G.Harston + v0.10 12-Feb-1986 Original MG version (8 v1.00 10-Mar-1989 Tidied up for Micro User article 2( v1.01 23-Aug-2006 Added -80 option <4 v1.02 23-Aug-2006 Tidied up and compacted code F3 v1.03 25-Aug-2006 Ensured 4-byte Tube address PF v1.04 27-Sep-2006 Uses &FFFDxxxx and &FFFExxxx for screen memory Z? v1.05 29-Sep-2006 Accesses shadow memory on B, not yet B+ d: v1.06 15-Nov-2006 Accesses ROMs and Tube on Electron n: x7OSWRCH=&FFEE:OSNEWL=&FFE7:OSARGS=&FFDA:OSBYTE=&FFF4 : . mcode% &300:load%=&FFFF08F8:ver$="v1.06" : Maddr=&A8:end=&AC:rom=addr+2:mem=addr+3:os=&AE:cols=&AF:lptr=&F0:tube=&27A P=0 1 P%=load%:O%=mcode% [OPT P*3+4 .syntax P\BRK:\EQUB 220:\EQUS "Syntax:\ MDump (-) |+":\BRK ABRK:EQUB 220:EQUS "Syntax: MDump |+":BRK : .buff .start% LDA #135:JSR OSBYTE LDX #&16:TYA:BEQ setcols CPY #3:BEQ setcols:LDX #8 " .setcols , STX addr 6ELDA #1:LDX #lptr:LDY #0:JSR OSARGS:\ NB! writes 4 bytes of memory @ LDX #addr J(LDA (lptr),Y:CMP #"-":BNE mdumpcols TINY:JSR GetHex ^.mdumpcols h#CMP #13:BEQ syntax:LDA addr:PHA rJSR GetHex:BEQ syntax |)CMP #"+":PHP:BNE P%+5:JSR SkipSpace1 )LDX #end:JSR GetHex:PLP:BNE mdump:CLC "LDA addr+0:ADC end+0:STA end+0 "LDA addr+1:ADC end+1:STA end+1 :  .mdump EPLA: #&1F:CMP #&10:BCC P%+4:SBC #6:STA cols:\ Columns in decimal 3LDX #&FF:LDA tube:BMI mdump1:LDA rom:BPL mdump1 5STX mem:\ If no Tube, extend &Fxxxxx to &FFFxxxxx  .mdump1 LDA #&FC:BIT &FFB3 5PHP:SEI:LDA &F4:PHA :\ Disable IRQs, save ROM H*LDA &FE34:PHA :\ Save ACCCON R>LDX mem:INX:BNE GetTube :\ addr<&FFxxxxxx, language memory \D #&13:JSR SetACCCON :\ Master, ACCCON=I/O, no FS RAM, main RAM f4LDA rom:CLC:ADC #&40 :\ &FFFx and &FF0x - ROM p5 #&8F:JSR SelectROM :\ Select the specified ROM zLDA rom:TAX 2INX:BEQ GetIOMem :\ &FFFF - Main memory 5INX:BEQ GetDisplay :\ &FFFE - Display memory 4INX:BEQ GetShadow :\ &FFFD - Shadow memory /CMP #&80: #&40 :\ &FFCx - Hidden ROM ,BCC P%+4:A #&08 :\ &FF8x - FS RAM 6A &FE34:JSR SetACCCON :\ Page in requested memory JMP GetIOMem : .GetDisplay @\LDA &D0:\ #16:\BEQ GetIOMem :\ Not shadow screen displayed LDA #&84:JSR OSBYTE :TYA:BPL GetIOMem :\ Not shadow screen displayed .GetShadow 4LDA #1:JSR vramSelect :\ Page in shadow memory :  .GetIOMem $ LDY cols ..GetByteLp 8DEY:LDA (addr),Y:STA buff,Y BTYA:BNE GetByteLp VJSR vramSelect : `EPLA:JSR SetACCCON:PLA:PLP :\ Restore ACCCON, restore ROM and IRQs j.SelectROM tSTA &F4:JMP &FFB9 ~: .SetACCCON \LDX os:\CPX #3 6\BCC P%+5:\STA &FE34 :\ Set ACCCON if on Master \LDX OSARGS:\CPX #&5C 6\BCS P%+5:\STA &FE34 :\ Set ACCCON if on Master >BIT OSARGS+2:BPL P%+5:STA &FE34 :\ Set ACCCON if on Master  .vramOk RTS : .vramSelect :PHA:TAX :\ A=0 main RAM, A=1 video RAM ALDA #108:JSR OSBYTE :\ Attempt to select Master video RAM 1PLA:INX:BNE vramOk :\ X<>255, successful 8 #1:TAX :\ A=1 main RAM, A=0 video RAM  BLDA #111:JMP OSBYTE :\ Attempt to select Aries/Watford RAM :  .GetTube (.BIT tube:BPL GetIOMem :\ No Tube present 2.GetTubeClaim <LDA #&C0+&10:JSR &406 F)BCC GetTubeClaim :\ Claim Tube PLDX #addr:LDY #0 Z3TYA:JSR &406:LDY #0 :\ Read bytes from Tube d.GetTubeLp n6LDX #9 :\ Delay between each byte x.GetTubeWait ADEX:BNE GetTubeWait :\ 2+(2+3)*9+2+2 = 51 cycles = 25.5us  .TUBEIO .LDA &FEE5:STA buff,Y :\ Fetch from Tube INY:CPY cols:BNE GetTubeLp