/ > ROMCommand 1.01 05-Feb-2016 J.G.Harston 1 Put a 6502 program into sideways ROM module B NOTE Not suitable for *command that reads command parameters (: 2 S% 500:T%=S% < "6502 code file: "in$ F "Output ROM file: "fname$ P "Command name: "cmd$ Z "Version string: "ver$ d! "Copyright string: (C)"cpy$ n1p(in$):p(fname$):p(cmd$):p(ver$):p(cpy$) x;: S% T%-S%:assem(0):: S% T%-S%:assem(2):sm_table FA$="*SAVE "+fname$+" "+~(mcode%+M%)+" "+~O%+" FFFF0000 FFFBBC00" A$;:A$:  : !p(A$):$T%=A$:T%=T%+$T%+1: ݤg:B%=T%:T%=T%+$T%+1:=$B% assem(pass%) 2T%=S%:in$=g:fname$=g:cmd$=g:ver$=g:cpy$=g &FFFF:"File '"in$"' is not I/O code": %load%=X%!2:exec%=X%!6:size%=X%!10 ! mcode% size%*2.5+300, L% -1 7OSWRCH=&FFE3:OSNEWL=&FFE7:OSBYTE=&FFF4:OS_CLI=&FFF7  pass%=pass% pass%+1 "opt%=sm_pass(pass%)+8+16 , [OPT opt% 6 .RomStart @BRK:EQUW RelocTable JJMP Service T$EQUB &82:EQUB Copyright-RomStart ^ .RomTitle hEQUB ver%:EQUS cmd$ rEQUB &00 :EQUS ver$ |.Copyright #EQUB &00:EQUS "(C)"+cpy$:EQUB 0 :  .Service )CMP #4:BEQ Serv4 :\ *command *CMP #9:BNE NotServ9 :\ Not *Help LDA (&F2),Y /CMP #13:BNE Serv9Skip :\ Not *Help JSR OSNEWL:LDX #0  .Serv9Lp 0LDA RomTitle+1,X :\ Print ROM title 3BNE P%+4:LDA #" " :\ Convert &00 to )CMP #"(":BEQ Serv9Done :\ End at '(' JSR OSWRCH:INX:BNE Serv9Lp .Serv9Done JSR OSNEWL .Serv9Skip & LDA #9 0 .NotServ9 :RTS D: N .Serv4 XTYA:PHA:DEY:LDX #&FF b .Serv4Lp lINX:INY:LDA (&F2),Y vCMP #".":BEQ Serv4Dot CMP #"!":BCC Serv4End 8CMP RomTitle+1,X:BEQ Serv4Lp :\ Match with ROM title - #&20 :\ Change case 8CMP RomTitle+1,X:BEQ Serv4Lp :\ Match with ROM title .Serv4Quit EPLA:TAY:LDA #4:RTS :\ Restore Y, A and return unclaimed  .Serv4End "LDA RomTitle+1,X:BNE Serv4Quit DEY  .Serv4Dot @INY:PLA :\ Step past '.', balance stack JSR Serv4Call 2LDA #0:RTS :\ Return claimed :  .Serv4Call  LDA #(load% &00FF):STA &A8  &LDA #(load% &FF00) 256:STA &A9 * LDY #0 4 .TreeLp3 >LDA src,Y:STA &AA,Y HINY:CPY #4:BCC TreeLp3 RTAY:BEQ TreeLp5:LDY #0 \ .TreeLp4 fLDA (&AA),Y:STA (&A8),Y pINY:BNE TreeLp4 zINC &A9:INC &AB DEC &AD:BNE TreeLp4  .TreeLp5 LDA (&AA),Y:STA (&A8),Y INY:CPY &AC:BCC TreeLp5  JMP exec% : .src EQUW src+4:EQUW size%  .file ] 9 O%+size%L%:"Code overrun": L="4646",pass%+1,1) V: `sm_table j>base80%=mcode%+M%:base81%=mcode%:byte%=0:count%=0:off%=0: tPbyte80%=base80%?off%:byte81%=base81%?off%: off%>=M%:byte80%=&80:byte81%=&80 ~[ ((byte81%-byte80%) &FE)<>0: "ERROR: Offset by more than one page at &";~&8000+off% M (byte80% &C0)=&80:byte%=byte%2+128*(byte81%-byte80%):count%=count%+1 1 count%=8:?O%=byte%:O%=O%+1:byte%=0:count%=0 $off%=off%+1:off%>=M% count%=0  : Bݤfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF