, > MakeRFS 1.00 14-Dec-2016 J.G.Harston :  -<&4200: 7 ("Build fast ROMFS ROM" 28 ctrl% 19, name% 255, mem% &3FFF:X%=ctrl%:Y%=X%256 <= "ROM title: "title$: title$="":title$="ROMFS" F! "ROM copyright: (C)"copy$ Pcrc:header Z+ "Enter files to add, end with RETURN" d n "File to add: "in$ x@ in$<>"": "Filename to use: "name$: name$="":name$=in$  in$<>"":add in$="" ?O%="+":O%=O%+1 0: "Save ROM as: "out$: out$="":11 @ out$<>"":A$="SAVE "+out$+" "+~mem%+" "+~O%+" 0 FFFBBC00" "Saving ";out$;:A$:  : crc ( crc16% 40:crc=&70:addr=&72:num=&74  opt%=0 2 2 P%=crc16% [OPT opt% /.bytelp:LDX #8:LDA (addr-8 &FF,X): crc+0 $.rotlp:ASL crc+1:ROL A:BCC clear -TAY:LDA crc+1: #&21:STA crc+1:TYA: #&10 "A.clear:DEX:BNE rotlp:STA crc+0:INC addr+0:BNE next:INC addr+1 , .next:DEC num:BNE bytelp:RTS 6] @ J: T header ^ opt%=4 6 2 hP%=&8000:O%=mem% r [OPT opt% |BRK:BRK:BRK:JMP Service !EQUB &82:EQUB Copyright-&8000 EQUB &00:EQUS title$ .Copyright +EQUB &00:EQUS "(C)":EQUS copy$:EQUB &00  .Service -PHA:CMP #13:BEQ Serv13:CMP #14:BEQ Serv14  .ServQuit  PLA:RTS  .Serv13 9TYA: #15:CMP &F4:BCC ServQuit :\ Not this ROM LDA &F4: #15:STA &F5 GLDA #Data 255:STA &F6 :\ Point to start of RFS data LDA #Data 256:STA &F7 BNE ServExit .Serv14Slow >LDA (&F6),Y:TAY:LDA #1:JSR AddPTR :\ Get single byte & .ServExit 0PLA:LDA #0:RTS : .Serv14 D9LDA &F5: #15:CMP &F4:BNE ServQuit :\ Not this ROM NOLDY #0:\LDA &281:\BEQ Serv14Slow :\ Demo, *FX1,0 to select slow call X7LDA &E2: #8:BNE Serv14Slow :\ Cataloging bFLDA &C2:CMP #4:BNE Serv14Slow :\ Not fetching data block lQLDA &27A:BPL Serv14lp0 :\ No Tube, with CS from previous CMP vAJSR AddPTR:BCC Serv14lp :\ Do next data block H.Serv14Last RAINY:LDA (&F6),Y:BNE Serv14Last :\ Step past filename \ETYA:CLC:ADC #11:TAY:LDA (&F6),Y:STA &3C8:\ Get final block length fPLDA #0:STA &3C9 :\ Set top byte=0 to flag last block pSTYA:CLC:ADC #9 :\ Prepare to point to final data block zZLDY #0:BEQ Serv14Next2 :\ Jump to update pointer and fetch last block .Serv14Finished DPLP:STA &BE:STA &BF:STA &C2 :\ CRC=Ok, Progress=Done &3F00:"Not enough space":#in%:in%=0: $ A%=1:in%=(in$) .' in%=0:"File '"in$"' not found": 8#name$=name$,8): should be ,10 Bhdr0%=O%:Block%=0 L V3hdr%=O%:BlkLen%=Size%: BlkLen%>256:BlkLen%=256 `5Flag%=0: Size%<257:Flag%=&80: Size%=0:Flag%=&C0 j&$O%="*"+name$:O%=O%+1+name$:?O%=0 tPO%!1=Load%:O%!5=Exec%:O%!9=Block%:O%!11=BlkLen%:O%?13=Flag%:O%!14=0:O%=O%+18 ~m Block%=0 Flag%<>0:!crc=0:!addr=hdr%+1:!num=O%-hdr%-1: crc16%:!O%=!crc:O%=O%+2 ?hdr%="#":O%=hdr%+1 gbpb(4,in%,O%,BlkLen%,0) )!crc=0:!addr=O%:!num=BlkLen%: crc16% #O%!BlkLen%=!crc:O%=O%+BlkLen%+2 'Size%=Size%-BlkLen%:Block%=Block%+1  Size%=0 #hdr0%!(15+name$)=O%-mem%+&8000 0!crc=0:!addr=hdr0%+1:!num=18+name$: crc16% 3hdr0%?(19+name$)=crc?0:hdr0%?(20+name$)=crc?1 "hdr%!(15+name$)=O%-mem%+&8000 /!crc=0:!addr=hdr%+1:!num=18+name$: crc16% 1hdr%?(19+name$)=crc?0:hdr%?(20+name$)=crc?1 #in%:in%=0   : Bݤfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF Tgbpb(A%,chn%,addr%,num%,ptr%):?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:&FFD1: