> SRLoad/src v1.05  Source for *SRLoad command , 12-Oct-1996 v1.04: Electron compatible (B 12-Feb-2016 v1.05: Changes MODE if needed, EEPROM compatible 2: <6 *SRLOAD file - load to highest unused RAM F! *SRLOAD file r - ROM r P. *SRLOAD file nnnn r - ROM r, ignore nnnn Z: d7OSARGS=&FFDA:OSFILE=&FFDD:GSINIT=&FFC2:GSREAD=&FFC5 n7OSBYTE=&FFF4:OSRDCH=&FFE0:OSWRCH=&FFEE:OSNEWL=&FFE7 x! mcode% &300:load%=&FFFF0900 #src=&A8:dst=&AA:rom=&AC:flg=&AD 7 flg=%BxxxIRQP for Bank, Insert, Run, Quick, Pause : P=0 1 P%=load%:O%=mcode% [OPT P*2+4 .text EQUS "Press SPACE to load" .errSyntax CBRK:EQUB 220:EQUS "Syntax: SRLoad () (I)(R)(P)":BRK : .exec% >LDA #0:LDX #1:JSR OSBYTE :\ Find machine type DTXA:BNE CmdLine :\ If not Electron, X<>&00 FLDA #&05:STA ROMSEL+1 :\ Change to Electron ROMSEL HDEC ROMTABLE1+1:DEC ROMTABLE2+1 :\ Change to Electron ROMTABLE " .CmdLine ,?STY rom:STY flg :\ ROM=0, clear flags 6OLDA #1:LDX #src:JSR OSARGS :\ Find command line (Y=0 from above) @ALDA src+0:STA &F2:LDA src+1:STA &F3 :\ GSTEXT=>command line J CLC:JSR GSINIT:BEQ errSyntax T .loop1 ^?JSR GSREAD:BCC loop1 :\ Step past filename h .loop2 r8LDA (&F2),Y:INY:CMP #32:BEQ loop2 :\ Skip spaces |GCMP #13:BEQ load :\ End of line, load the file 6CMP #"0":BCC errSyntax :\ <'0', error BCMP #"9"+1:BCC digit :\ '0'-'9', set ROM number 9CMP #"A":BCC errSyntax :\ '9'-'A', error  #&DF BCMP #"G":BCC digithex :\ 'A'-'F', set ROM number  0 -> 1  2 -> 4 <\CMP #"Q":\BEQ option :\ 'Q'uick -> 1 -> 8 3CMP #"I":BNE loop2 :\ 'I'nsert BADC #1 :\ Convert 'I' to 3 -> 2  .option  #3:TAX:LDA BitMap,X  .option2 A flg:STA flg:BNE loop2  .digithex  SBC #6 & .digit 0 #15:LDX #4 : .digitlp DASL rom:DEX:BNE digitlp NFA rom:STA rom :\ Move digit into ROM number XALDA #&80:BNE option2 :\ ROM number specified b .BitMap lEQUB 1:EQUB 8:EQUB 4:EQUB 2 v.jmpSyntax JMP errSyntax :  .load FSEI :\ Disable IRQs while manipulating ROMs LDA &F4:PHA 9BIT flg:BMI loadrom :\ specified, use it :  .loadrom H6LDA rom:CMP #&10:BCC lorom :\ rom<&10 - use as hex R>SBC #6:STA rom :\ rom=&10-&15 - use as decimal \(CMP #16:BCS jmpSyntax :\ rom>15 f .lorom pTAX:JSR SelectRom z:JSR ramtest:BEQ loadgo :\ Writable, jump to use it -BRK:EQUB 135:EQUS "Bank not writable":BRK :  .loadgo CLI 3LDA src+0:STA blk+0 :\ Point to filename LDA src+1:STA blk+1 7LSR flg:BCC preload :\ No 'P'ause, flg=flg/2 LDY #0:BEQ prmsg  .prmsglp JSR OSWRCH:INY  .prmsg LDA text,Y:BNE prmsglp 5JSR OSRDCH:JSR OSNEWL :\ Wait for a keypress :  .preload 4LDA #&84:JSR OSBYTE :\ Read top of memory $4CPY #&70:BCS loadfile :\ Enough free memory .LDA #22:JSR OSWRCH 8/LDA #&87:JSR OSWRCH :\ Change to 7 B:LDA #&84:JSR OSBYTE :\ Read top of memory again L: V .loadfile `.TYA:SEC:SBC #&40:STA blk+3 :\ load=-&4000 j-STA src+1 :\ src=-&4000 t!LDX #blk 255:LDY #blk 256 ~:LDA #255:JSR OSFILE :\ Load file to main memory ;LDA #0:JSR InsertRom :\ Remove ROM from ROM table 1TAY:JSR SelectRom :\ and page it in 7STY src+0:STY dst+0 :\ Also set Y=0 for loop +LDA #&80:STA dst+1 :\ dst=&8000  .copylp1 4LDX #64 :\ 64 bytes at a time  .copylp2 +LDA (src),Y:STA (dst),Y :\ Copy data 3INY:DEX:BNE copylp2 :\ Loop for 64 bytes 8DEY :\ Step back to last byte  .copylp3 9CMP (dst),Y:BNE copylp3 :\ Wait for data to settle 4INY:BNE copylp1 :\ Loop for 256 bytes  INC src+1:INC dst+1 6BIT dst+1:BVC copylp1 :\ Loop until dst=&C000 : (8LSR flg:BCC done :\ No 'I'nsert, flg=flg/2 2LDX #3:LDY &8007 < .chkhdr F2LDA &8003,Y:CMP header,X :\ Check ROM header P/BNE done :\ No ROM header Z6DEY:DEX:BPL chkhdr :\ ROM has valid header d=LDA &8006:JSR InsertRom :\ Store ROM type in ROM table n: x*LSR flg:BCC done :\ No 'R'un 5LDA #142:JMP OSBYTE :\ Enter as a language :  .done -PLA:TAX :\ Restore ROM .SelectRom LDA #12:JSR SelectRom2 5TXA:STA &FF30,X :\ Enable WERAM writes .SelectRom2  STA &F4  .ROMSEL ,STA &FE30:RTS :\ Select ROM .InsertRom  LDX rom .ROMTABLE2 =STA &2A1,X:RTS :\ Store ROM type in ROM table : " .ramtest ,9LDA &8008: #&AA:STA &8008 :\ Modify version byte 6:CMP &8008:PHP: #&AA:STA &8008 :\ Restore version byte @ .romtest J?LDA &8008: &8008:BNE romtest :\ Loop until stops changing TDPLP:RTS :\ EQ=writable, NE=not writable ^: h .header rEQUB 0:EQUS "(C)" |.blk  EQUW 0:EQUD &FFFF3000:EQUD 0 \EQUD 0:\EQUD 0 : EQUS "v1.05" ] P%>&B00:"Code overrun": E" *SAVE SRLoad ";~mcode%;" ";~O%;" ";~exec%&FFFF0000;" ";~load%