/ > XLoad/src v0.10 18-Feb-2015 J.G.Harston ? Source for *XLOAD - load to page-wide extended RAM in JIM : (7OSARGS=&FFDA:OSFILE=&FFDD:OSGBPB=&FFD1:OSFIND=&FFCE 2GSINIT=&FFC2:GSREAD=&FFC5 <: F. mcode% &300:load%=&FFFF0900:ver$="v0.10" P: Z gbpb=&2EE d>addr=&A8:num=&AC:handle=&AF:lptr=&F2:latch=&FCFF:jim=&FD00 n P=0 1 xP%=load%:O%=mcode% [OPT P*3+4 .CopyData FLDA #0:SEC:SBC addr+0 :\ Number of bytes to page boundary 1PHA:STA gbpb+5 :\ count b0-b7 2LDX #0:TAY:BNE P%+3:INX :\ &0xx or &100 STX gbpb+6:LDX #0 BSTX gbpb+7:STX gbpb+8 :\ count=&000000xx or &00000100 DEX 4STX gbpb+4:STX gbpb+3 :\ addr=&FFFFxxxx LDA #buffer 256:STA gbpb+2 4LDA #buffer 255:STA gbpb+1 :\ addr=&FFFFbuffer ,LDA handle:STA gbpb+0 :\ handle LDX #gbpb 255 LDY #gbpb 256 4LDA #4:JSR OSGBPB :\ Read from file CPLA:LDX gbpb+6:BNE Close :\ 256 bytes unread, end of file "PHA:STA num ,: 61LDA addr+1:STA latch-0 :\ Select bank @LDA addr+2:STA latch-1 JLDA addr+3:STA latch-2 TLDX #0:LDY addr+0 ^.CopyBytes hLDA buffer,X:STA jim,Y r!INX:INY:DEC num:BNE CopyBytes |6PLA:TAX :\ X=number written : 1CLC:ADC addr+0:STA addr+0:PHP :\ Update addr 2LDA #0:CPX #1:BCS P%+4:LDA #1 :\ &100 or &0xx PLP:ADC addr+1:STA addr+1  LDA #0:ADC addr+2:STA addr+2  LDA #0:ADC addr+3:STA addr+3 JMP CopyData :  .Close  LDY handle:LDA #0:JMP OSFIND : (\ Code used once, use as buffer area  .ctrl  .buffer :  .start% &&LDA #1:LDX #addr:LDY #0:JSR OSARGS 0R\ Can't read directly to &F2/3 'cos 4-byte address, would overwrite &F4 ROMNUM :3LDA addr+0:STA lptr+0:STA ctrl+0 :\ =>filename D$LDA addr+1:STA lptr+1:STA ctrl+1 N CLC:JSR GSINIT:BEQ jmpSyntax X .SkipName b7JSR GSREAD:BCC SkipName :\ Step past name l5JSR SkipSpace:BNE ScanAddr :\ Load address vLDX #ctrl 255 LDY #ctrl 256 9LDA #5:JSR OSFILE:LDX #3 :\ Read file's info  .AddrLp LDA ctrl+2,X:STA addr,X DEX:BPL AddrLp:BMI LoadFile  .ScanAddr 4JSR GetHexDigit:BCC errSyntax :\ Bad address LDX #addr:JSR GetHex  .LoadFile 5LDX ctrl+0:LDY ctrl+1 :\ XY=>filename +LDA #&40:JSR OSFIND:TAY:BEQ errNotFound STY handle:JMP CopyData .jmpSyntax JMP errSyntax  : .GetHexDigit  LDA (lptr),Y *CMP #"0":BCC HexDigitBad 4CMP #"9"+1:BCC HexDigitOk >CMP #"A":BCC HexDigitBad H #&DF RCMP #"F"+1:BCS HexDigitBad \ SBC #7 f.HexDigitOk pSBC #"0"-1:RTS z.HexDigitBad  CLC:RTS :  .GetHex  LDA #0 #STA 0,X:STA 1,X:STA 2,X:STA 3,X .GetHexNext !JSR GetHexDigit:BCC SkipSpace PHA:TYA:PHA:LDY #4 .GetHexMultiply #ASL 0,X:ROL 1,X:ROL 2,X:ROL 3,X DEY:BNE GetHexMultiply PLA:TAY:PLA:A 0,X:STA 0,X INY:BNE GetHexNext : .SkipSpace1 INY $.SkipSpace .)LDA (lptr),Y:CMP #" ":BEQ SkipSpace1 8CMP #13:RTS B: L.errNotFound V&BRK:EQUB 214:EQUS "File not found" `.errSyntax j9BRK:EQUB 220:EQUS "Syntax: XLoad ()":BRK t: ~ EQUS ver$ : ]: ' (P%&FFFF)>&B00:"Code overrun": % buffer>&A00:"Buffer overrun": V"*SAVE XLoad "+~mcode%+" "+~O%+" "+~(start%&FFFF0000)+" "+~(load%&FFFF0000)