1 REM > MakeRFS 1.01 04-May-2023 J.G.Harston
   30 IFHIMEM-LOMEM<&4200:MODE&87:IFHIMEM-LOMEM<&4200:VDU28,0,24,39,19:HIMEM=&77C0
   40 PRINT"Build fast ROMFS ROM":DIMj%19,h%255,c%&3FFF:X%=j%:Y%=X%DIV256:INPUTLINE"ROM title:"SPC8""J$:IFJ$="":J$="ROMFS"
   70 INPUTLINE"ROM copyright: (C)"L$:PROC@:PROC0:PRINT"Enter files to add, end with RETURN":REPEAT:INPUTLINE"File to add:"SPC6""H$:IFH$<>"":INPUTLINE"Filename to use:  "G$:IFG$="":G$=H$
  130   IFH$<>"":PROC1
  140   UNTILH$="":?O%=ASC"+":O%=O%+1:REPEATINPUTLINE"Save ROM as:"SPC6""I$:IFI$="":VDU11
  170 UNTILI$<>"":K$="SAVE "+I$+" "+STR$~c%+" "+STR$~O%+" 0 FFFBBC00":PRINT"Saving ";I$;:OSCLIK$:PRINT:END
  210 DEFPROC@:DIMd%40:G=&70:H=&72:I=&74:FORi%=0TO2STEP2:P%=d%:[OPTi%:.S:LDX#8:LDA(H-8AND&FF,X):EORG+0:.T:ASLG+1:ROLA:BCCU:TAY:LDAG+1:EOR#&21:STAG+1:TYA:EOR#&10:.U:DEX:BNET:STAG+0:INCH+0:BNEV:INCH+1:.V:DECI:BNES:RTS:]NEXT:ENDPROC
  340 DEFPROC0:FORi%=4TO6STEP2:P%=&8000:O%=c%:[OPTi%:BRK:BRK:BRK:JMPW:EQUB&82:EQUBX-&8000:EQUB&00:EQUSJ$:.X:EQUB&00:EQUS"(C)":EQUSL$:EQUB&00:.W:PHA:CMP#13:BEQY:CMP#14:BEQZ:.K:PLA:RTS:.Y:TYA:EOR#15:CMP&F4:BCCK:LDA&F4:EOR#15:STA&F5:LDA#LAND255:STA&F6:LDA#LDIV256:STA&F7:BNEM
  530   .N:LDA(&F6),Y:TAY:LDA#1:JSRJ:.M:PLA:LDA#0:RTS:.Z:LDA&F5:EOR#15:CMP&F4:BNEK:LDY#0:LDA&E2:AND#8:BNEN:LDA&C2:CMP#4:BNEN:LDA&27A:BPL_:LDA&B2:AND&B3:CMP#&FF:PHP:.`:PLP:._:PHP:BCSO:.a:LDA(&F6),Y:STA&FEE5:JSRQ:JSRQ:INY:CPY&3C8:BNEa:BEQb:.O:LDA(&F6),Y:STA(&B0),Y
  750   INY:CPY&3C8:BNEO:.b:TYA:JSRJ:LDA#2:JSRJ:LDA&3C9:BEQc:INC&B1:INC&F7:LDA(&F6),Y:CMP#ASC"#":BNER:LDA#1:.d:JSRJ:BCC`:.R:INY:LDA(&F6),Y:BNER:TYA:CLC:ADC#11:TAY:LDA(&F6),Y:STA&3C8:LDA#0:STA&3C9:TYA:CLC:ADC#9:LDY#0:BEQd:.c:PLP:STA&BE:STA&BF:STA&C2:LDA#&80
  920 STA&BD:STA&3CA:JMPM:.J:CLC:ADC&F6:STA&F6:LDA&F7:ADC#0:STA&F7:.Q:RTS:.L:]NEXT:ENDPROC
 1030 DEFPROC1:a%=0:A%=FN@(H$,5):k%=X%!2:l%=X%!6:b%=X%!10:q%=X%!14:IFA%:IFO%-c%+b%>&3F00:PRINT"Not enough space":CLOSE#a%:a%=0:ENDPROC
 1060 IFA%=1:a%=OPENIN(H$)
 1070 IFa%=0:PRINT"File '"H$"' not found":ENDPROC
 1080 G$=LEFT$(G$,8):e%=O%:f%=0:REPEAT:_%=O%:`%=b%:IF`%>256:`%=256
 1120   g%=0:IFb%<257:g%=&80:IFb%=0:g%=&C0
 1130   $O%="*"+G$:O%=O%+1+LENG$:?O%=0:O%!1=k%:O%!5=l%:O%!9=f%:O%!11=`%:O%?13=g%:O%!14=0:O%=O%+18:IFf%=0ORg%<>0:!G=0:!H=_%+1:!I=O%-_%-1:CALLd%:!O%=!G:O%=O%+2ELSE?_%=ASC"#":O%=_%+1
 1160 PROC2(4,a%,O%,`%,0):!G=0:!H=O%:!I=`%:CALLd%:O%!`%=!G:O%=O%+`%+2:b%=b%-`%:f%=f%+1:UNTILb%=0:e%!(15+LENG$)=O%-c%+&8000:!G=0:!H=e%+1:!I=18+LENG$:CALLd%:e%?(19+LENG$)=G?0:e%?(20+LENG$)=G?1:_%!(15+LENG$)=O%-c%+&8000:!G=0:!H=_%+1:!I=18+LENG$:CALLd%:_%?(19+LENG$)=G?0:_%?(20+LENG$)=G?1
 1270 CLOSE#a%:a%=0:ENDPROC
 1300 DEFFN@(K$,A%)$h%=K$:?X%=h%:X%?1=h%DIV256:=(USR&FFDD)AND&FF
 1310 DEFPROC2(A%,m%,n%,o%,p%)?X%=m%:X%!1=n%:X%!5=o%:X%!9=p%:CALL&FFD1:ENDPROC