10 REM > BuildMOS
   20 :
   30 A%=0:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
   40 DIM ctrl% 31,mem% &3FFF:X%=ctrl%:Y%=X%DIV256
   50 s$=".":IFos%AND32:d$="\"ELSE IFos%AND8:d$="/"ELSE s$="/":d$="."
   60 out$="MOS321"+s$+"rom"
   70 :
   80 ok%=TRUE:ON ERROR ok%=FALSE
   90 IF ok%:OSCLI"Access "+out$+" wr/wr"
  100 ON ERROR OFF
  110 :
  120 PRINT"Building 128K ROM image";
  130 out%=OPENOUT(out$):PRINT
  140 FOR rom%=8 TO 15:READ A$:PRINT A$;
  150   OSCLI"Load "+A$+" "+STR$~mem%
  160   IF rom%=14:READ A$:IF A$<>"":IF A$<>"*":PRINT 'A$;:OSCLI"Load "+A$+" "+STR$~mem%
  170   PROCgbpb(2,out%,mem%,&4000,PTR#out%)
  180 PRINT:NEXT rom%
  190 :
  200 PRINT "Fix Y2K bug";
  210 PTR#out%=7*&4000+&9881-&8000:BPUT#out%,&20
  220 PRINT'"Fix *MOVE bug";
  230 PTR#out%=7*&4000+&91E0-&8000:BPUT#out%,&80
  240 PRINT'"Fix OSBYTE &6B bug";
  250 PTR#out%=0*&4000+&EEAB-&C000:BPUT#out%,&EA:BPUT#out%,&98
  260 PRINT'"Change to version 3.21";
  270 PTR#out%=7*&4000+&9F07-&8000:BPUT#out%,&31
  280 PTR#out%=0*&4000+&EF79-&C000:BPUT#out%,&31
  290 CLOSE#out%:out%=0:PRINT
  300 OSCLI"Access "+out$+" R/R"
  310 OSCLI"SetType "+out$+" BBC"
  320 OSCLI"Stamp "+out$
  330 END
  340 :
  350 REM Filenames of ROM images to gather together
  360 DATA :System.ROMs.AcornMOS.Master320.G_MOS320
  370 REM  :System.ROMs.Filing.Disk.Acorn.DFS224+Mse
  380 DATA :System.ROMs.Filing.Disk.Acorn.DFS224MsRC
  390 DATA :System.ROMs.Filing.Network.Acorn.ANFS425
  400 DATA :Software.HADFS.SystemDisk.HADFSROM
  410 DATA :System.ROMs.AcornMOS.Master320.C_BASIC400
  420 DATA :Info.Comp.BBC.IDE.ADFS.ADFS153
  430 :
  440 REM Filename of ROM 14 image with MOS code
  450 DATA :System.ROMs.AcornMOS.Master320.E_ViewB30
  460 :
  470 REM Filename of short ROM 14 image or * for none
  480 DATA :System.ROMs.TextEd.ViewJ300lo
  490 :
  500 REM Filename of ROM 15 image
  510 DATA :System.ROMs.AcornMOS.Master320.F_TUtil320
  520 :
  530 REM General OSGBPB call
  540 DEFPROCgbpb(A%,chn%,addr%,num%,ptr%)
  550 ?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:IFPAGE<&FFFFF:CALL &FFD1:ENDPROC
  560 IFA%=1ORA%=3:PTR#?X%=X%!9
  570 REPEAT:IFA%=1ORA%=2:BPUT#?X%,?X%!1 ELSE IFA%=3ORA%=4:?X%!1=BGET#?X%
  580 X%!1=X%!1+1:X%!5=X%!5-1:UNTIL(EOF#?X% AND A%>2)OR X%!5<1:ENDPROC