10REM Reduce hard disc size after reformatting to reserve space 20REM needed by *PARK utility. 30: 40MODE3 50PROCdrive 60PROCinitialise 70PROCreadmap 80PROCreserve 90PROCchangemap 100PROCchecksum 110STOP 120PROCwritemap 130*mount 140END 150: 160DEFPROCdrive 170PRINT"Reserving space needed by *PARK utility" 180REPEAT 190 PRINT"Which winchester (0..1) ? "; 200 D$=GET$ 210 D%=EVAL(D$) 220UNTIL D%=0 OR D%=1 230OSCLI("MOUNT "+STR$D%) 240PRINT 250ENDPROC 260: 270: 280DEFPROCinitialise 290@%=1 300buffer%=&3000 310DIM code% 100 320DIM block% 20 330PROCassemble 340sect%=33 :REM sectors per track, controller dependent 350ENDPROC 360: 370DEFPROCreserve 380INPUT"How many engineering tracks (including park track) do you wish to reserve ";sptracks% 390maxda%=(buffer%!252) AND &FFFFFF 400engsect%=sptracks%*sect% 410adfsmaxda%=maxda%-engsect% 420IF adfsmaxda%<=0 THEN PRINT"You have reserved too many tracks":STOP 430PRINT 440PRINT"Disc currently has "; 450PROCprint(maxda%) 460PRINT"You have reserved "; 470PROCprint(engsect%) 480PRINT"So the disc will have "; 490PROCprint(adfsmaxda%) 500PRINT 510ENDPROC 520: 530DEFPROCassemble 540P%=code% 550[ OPT2 560.crc% 570CLC:LDY#&FF:TYA 580.L1% ADC buffer%+255,Y 590DEY:BNE L1% 600TAX:DEY:CLC:TYA 610.L2% ADC buffer%-1,Y 620DEY:BNE L2% 630STX buffer%+511 640STA buffer%+255 650RTS 660] 670ENDPROC 680: 690DEFPROCos72(C$) 700opcode%=-1 710IFC$="Read" opcode%=8 720IFC$="Write" opcode%=&A 730IF opcode%=-1 THEN PRINT"Opcode error in PROCos":STOP 740block%?0=0 750block%!1=buffer% 760block%?5=opcode% 770block%?6=0 780block%?7=0 790block%?8=0 800block%?9=2 810block%?&A=0 820block%!&B=0 830A%=&72 840X%= block% 850Y%=block% DIV &100 860CALL &FFF1 870ENDPROC 880: 890DEFPROCreadmap 900PROCos72("Read") 910ENDPROC 920: 930DEFPROCchangemap 940pointer%=(?(buffer%+&100+254))-3:REM pointer to end of free space list 950freespaceda%=(buffer%!pointer%)AND &FFFFFF :REM DA of first free space 960IFfreespaceda%