@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} MODULE;; Codeblock is Bob Puff's routines; BYTE OldPortB, PortB=$D301, cntBYTE ARRAY Exist(128), DataL(256T}), DataH(256)PROC RSize=*()[$78$A0$0$8C$D40E$8C$D20E$AD$D301$48$A2$FF$8C$D301$AD$4000$99 DataL$8E$4000$8A$99 U}DataH $C8$D0$ED$CA$8E$D301$86$0$8E$4000$8E$8000$8E$C000$A2$0$8C$D301$AD$4000$C9$FF$D0$5$E8$8E$4000$8A$99 DataH $C8$D0$EB$V}8E cnt $A2$1$8A$A0$FF$D9 DataH $F0$24$88$C0$FF$D0$F6$EA$8C$D301$B9 DataL$8D$4000$88$C0$FF$D0$F2$68$8D$D301$A9$C0$8D$D40E$AW}5$10$8D$D20E$58$60$98$9D Exist $E8$E0$41$90$CB$A0$FE$D0$D5]BYTE FUNC Ram_Size() RSize()RETURN(cnt)MODULEsSET $E=$3000SET $491=$3000INCLUDE "D2:MYSYS.ACT"INCLUDE "D2:BANKNKH.ACT"INCLUDE "D2:PMEM.ACT"INCLUDE "D2:MISC.ACT"BY Y}TE ARRAY cfg(80), cmd(80), bmsk=[128 64 32 16 8 4 2 1], fn=[13 'D 'n ': 'C 'O 'N 'F 'I 'G '. 'S 'Y 'S ]BY Z}TE i, pnt0, pnt1, dlmtr, bv, msg=[1], lines=[0], nmb, t0, t1, t2, t3BYTE POINTER bpCARD memlo=$2E7, smem, nml, curdrv, [} cptr, vlu, cvBYTE ARRAY init=[ 28 $20 $FF $FF $A9 $00 $8D $E7 $02 $A9 $00 $8D $E8 $02 $A9 $00 $8D $02 $D7 $A9 $F \}F $8D $00 $D7 $A9 $34 $8D $02 $D7 ]BYTE ARRAY code(1024), resv(128), bat(16), temp(128)BYTE ARRAY finish=[ 0 ]} $20 $32 $07 $20 $46 $CD $9B 'T 'h 'e $20 'M 'a 'g 'e $27 's $20 'M 'y 's 't 'i 'c 'a 'l $20 'C 'u 's 't 'o 'm 'i 'z 'e 'r ^} $20 'v '2 '. '0 $9B '( 'c ') $20 '1 '9 '8 '9 $20 'P 'S 'I $9B $FF $20 $37 $07 $60 ]PROC StrUpr(BYTE ARRAY txt)BYTE i _}FOR i=1 TO txt(0) DO txt(i) = ToUpper(txt(i)) ODRETURNPROC StrLwr(BYTE ARRAY txt)BYTE i FOR i=1 TO txt(0) DO txt(i) `} = ToLower(txt(i)) ODRETURNPROC GetArg(BYTE ARRAY txt1, BYTE ARRAY cmd)BYTE t1 pnt1=1 txt1(0)=0 cmd(0)=0 DO t1=txt1( a}pnt0) dlmtr=IsDelim(t1) IF dlmtr=0 THEN cmd(pnt1)=t1 pnt0==+1 pnt1==+1 ELSE cmd(0)=pnt1-1 pnt0==+1 EXIT FI OD b}RETURNBYTE FUNC Dec(BYTE ARRAY hex)BYTE hptr, hxp, v, v1BYTE ARRAY hxc=[ 16 '0 '1 '2 '3 '4 '5 '6 '7 '8 '9 'A 'B 'C 'D c}'E 'F ] v=0 StrUpr(hex) FOR hptr=2 TO hex(0) DO FOR hxp=1 TO 16 DO IF hex(hptr)=hxc(hxp) THEN v1=(hxp-1) EXIT d} FI OD v==*16 v==+v1 ODRETURN(v)CARD FUNC DecC(BYTE ARRAY hex)BYTE hptr, hxpCARD v, v1BYTE ARRAY hxc=[ 16 '0 '1 ' e}2 '3 '4 '5 '6 '7 '8 '9 'A 'B 'C 'D 'E 'F ] v=0 StrUpr(hex) FOR hptr=2 TO hex(0) DO FOR hxp=1 TO 16 DO IF hex(hptr)= f}hxc(hxp) THEN v1=(hxp-1) EXIT FI OD v==*16 v==+v1 ODRETURN(v)PROC Main=*() bp=82 bp^=0 bp=710 bp^=0 Put(125) g} PutE() PrintE("The Mage's Mystical Customizer v2.01") PrintE("(c) 1989 PSI") Init_PMEM() Clr_PMEM() curdrv=PeekC($A)+34 h}fn(2)=Peek(curdrv) cptr=0 Close(1) Open(1, fn, 4, 0) PrintF("%EProcessing: %S", fn) DO lines==+1 Position(0,6) PrintF( i}" Line #%D", lines) pnt0=1 InputSD(1, cfg) IF eof(1) THEN EXIT FI GetArg(cfg, cmd) StrLwr(cmd) IF SCompare(cmd, j} "mem")=0 THEN nmb=Ram_Size() cv=nmb*16 bv=0 Position(0,8) PrintF("Banks found: %D", nmb) PrintF("%EExtended RAM Siz k}e: %Dk", cv) WHILE dlmtr#2 DO DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD bv==+1 IF cmd(1)='$ l}THEN resv(bv)=Dec(cmd) ELSE resv(bv)=ValB(cmd) FI OD t2=0 resv(0)=bv IF bv THEN PrintF("%E# of re m}served banks: %D", bv) FOR t0=1 TO nmb DO t1=exist(t0) IF InString(t1, resv)=0 THEN temp(t2)=exist(t0) t2 n}==+1 FI OD t2==-1 Set_PMEM(7,16,temp,t2+1) ELSE Set_PMEM(7,16,exist+1,nmb) t2=nmb-1 FI SCopy(bat, " o}") FOR t0=0 TO t2 DO t1=t0/8 t3=t0&7 bv=bat(t1) bv==%bmsk(t3) bat(t1)=bv OD Set_PMEM(7,0,bat,16) p}ELSEIF SCompare(cmd, "keyrep")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN q} bv=Dec(cmd) ELSE bv=ValB(cmd) FI code(cptr)=$A9 cptr==+1 code(cptr)=bv cptr==+1 code(cptr)=$8D cptr==+1 r} code(cptr)=$DA cptr==+1 code(cptr)=$02 cptr==+1 ELSEIF SCompare(cmd, "keydlay")=0 THEN DO GetArg(cfg, cmd) s}UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN bv=Dec(cmd) ELSE bv=ValB(cmd) FI code(cptr)=$A9 cptr= t}=+1 code(cptr)=bv cptr==+1 code(cptr)=$8D cptr==+1 code(cptr)=$D9 cptr==+1 code(cptr)=$02 cptr==+1 ELSEIF SComp u}are(cmd, "bdrclr")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN bv=Dec(cmd v}) ELSE bv=ValB(cmd) FI code(cptr)=$A9 cptr==+1 code(cptr)=bv cptr==+1 code(cptr)=$8D cptr==+1 code(cptr w})=$C8 cptr==+1 code(cptr)=$02 cptr==+1 ELSEIF SCompare(cmd, "bkgclr")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr= x}2 OR cmd(0)>0) OD IF cmd(1)='$ THEN bv=Dec(cmd) ELSE bv=ValB(cmd) FI code(cptr)=$A9 cptr==+1 code(c y}ptr)=bv cptr==+1 code(cptr)=$8D cptr==+1 code(cptr)=$C6 cptr==+1 code(cptr)=$02 cptr==+1 ELSEIF SCompare(cmd, "fgc z}lr")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN bv=Dec(cmd) ELSE {}bv=ValB(cmd) FI code(cptr)=$A9 cptr==+1 code(cptr)=bv cptr==+1 code(cptr)=$8D cptr==+1 code(cptr)=$C5 cptr==+1 |} code(cptr)=$02 cptr==+1 ELSEIF SCompare(cmd, "lmar")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) }} OD IF cmd(1)='$ THEN bv=Dec(cmd) ELSE bv=ValB(cmd) FI code(cptr)=$A9 cptr==+1 code(cptr)=bv cptr==+1 ~} code(cptr)=$85 cptr==+1 code(cptr)=$52 cptr==+1 ELSEIF SCompare(cmd, "msg")=0 THEN DO GetArg(cfg, cmd) UNT }IL (dlmtr=2 OR cmd(0)>0) OD StrLwr(cmd) IF SCompare(cmd, "off")=0 THEN msg=0 ELSE msg=1 FI ELSEIF SC }ompare(cmd, "click")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD StrLwr(cmd) IF SCompare(cmd }, "off")=0 THEN code(cptr)=$A9 cptr==+1 code(cptr)=$FF cptr==+1 code(cptr)=$8D cptr==+1 code(cptr)=$DB cptr== }+1 code(cptr)=$02 cptr==+1 FI ELSEIF SCompare(cmd, "exec")=0 THEN DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cm }d(0)>0) OD IF cmd(1)='$ THEN vlu=DecC(cmd) ELSE vlu=ValC(cmd) FI code(cptr)=$20 cptr==+1 code(cptr) }=vlu&255 cptr==+1 vlu==-(vlu&255) code(cptr)=vlu/256 cptr==+1 ELSEIF SCompare(cmd, "code")=0 THEN DO DO G }etArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)#39 THEN StrLwr(cmd) FI IF SCompare(cmd, "en }d")=0 THEN EXIT FI IF cmd(1)='$ THEN bv=Dec(cmd) ELSEIF cmd(1)=39 THEN bv=cmd(2) ELSE bv= }ValB(cmd) FI code(cptr)=bv cptr==+1 IF dlmtr=2 THEN EXIT FI OD ELSEIF SCompare(cmd, "set")=0 THEN } DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN vlu=DecC(cmd) ELSE vlu=ValC(cm }d) FI DO GetArg(cfg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN bv=Dec(cmd) ELSEIF cmd(1 })=39 THEN bv=cmd(2) ELSE bv=ValB(cmd) FI code(cptr)=$A9 cptr==+1 code(cptr)=bv cptr==+1 IF vlu>255 THE }N code(cptr)=$8D cptr==+1 code(cptr)=vlu&255 cptr==+1 vlu==-(vlu&255) code(cptr)=vlu/256 cptr==+1 ELSE } code(cptr)=$85 cptr==+1 code(cptr)=vlu cptr==+1 FI ELSEIF SCompare(cmd, "setc")=0 THEN DO GetArg(cfg, cmd) } UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN vlu=DecC(cmd) ELSE vlu=ValC(cmd) FI DO GetArg(c }fg, cmd) UNTIL (dlmtr=2 OR cmd(0)>0) OD IF cmd(1)='$ THEN cv=DecC(cmd) ELSE cv=ValC(cmd) FI code(cp }tr)=$A9 cptr==+1 code(cptr)=cv&255 cptr==+1 IF vlu>255 THEN code(cptr)=$8D cptr==+1 code(cptr)=vlu&255 cptr==+1 } vlu==-(vlu&255) code(cptr)=vlu/256 cptr==+1 ELSE code(cptr)=$85 cptr==+1 code(cptr)=vlu cptr==+1 FI } cv==-(cv&255) vlu==+1 code(cptr)=$A9 cptr==+1 code(cptr)=cv/256 cptr==+1 IF vlu>255 THEN code(cptr)=$8D cptr==+ }1 code(cptr)=vlu&255 cptr==+1 vlu==-(vlu&255) code(cptr)=vlu/256 cptr==+1 ELSE code(cptr)=$85 cptr==+1 } code(cptr)=vlu cptr==+1 FI FI UNTIL (EOF(1)) OD Close(1) PutE() smem=memlo nml=memlo+28+cptr IF msg=1 THEN nml= }=+61 ELSE nml==+1 FI init(2)=Peek($C) init(3)=Peek($D) init(5)=nml&255 init(10)=nml/256 MoveBlock(smem, init+1, 28) } MoveBlock(smem+28, code, cptr) IF msg=1 THEN MoveBlock(smem+28+cptr, finish+1, 61) ELSE Poke(smem+28+cptr, $60) FI Po }sition(0,12) smem==+3 PokeC($C, memlo) [$6C smem]RETURN :MODULE;************************************;Test if 'c' is uppercase alphabetic;************************************BYTE }FUNC IsUpper=*(BYTE c) [ 162 0 201 'A 144 7 201 'Z+1 144 2 176 1 232 134 160 96 ];************************************;}Test if 'c' is lowercase alphabetic;************************************BYTE FUNC IsLower=*(BYTE c) [ 162 0 201 'a 144 7 2}01 'z+1 144 2 176 1 232 134 160 96 ];************************************;see if a byte is in a character string; retur}n 1 if it is, 0 if it is not;************************************BYTE FUNC InString=*(CHAR b CHAR ARRAY a) [ 72 134 161 13}2 162 160 0 132 160 177 161 168 104 209 161 240 4 136 208 249 96 230 160 96 ];************************************;**}**********************************;** **;** THE FOLLOWING ROUTINES **;** DEPEND ON} PREVIOUS ROUTINES **;** **;************************************;************************}************;************************************;Change 'c' to uppercase if necessary;***********************************}*BYTE FUNC ToUpper(BYTE c) IF IsLower(c) THEN c==-$20 FIRETURN(c);************************************;Change 'c}' to lowercase if necessary;************************************BYTE FUNC ToLower(BYTE c) IF IsUpper(c) THEN c==+$20} FIRETURN(c);************************************;return true for space, eol, tab;************************************}BYTE FUNC IsDelim(BYTE b) BYTE a,i BYTE ARRAY _dt_=[ 3 32 155 127 ] a=InString(b,_dt_) IF a THEN FOR i=1 TO _dt_(}0) DO IF _dt_(i)=b THEN RETURN(i) FI OD FIRETURN(a)MODULE ; for userbMODULE ; MYSYS.ACTDEFINE STRING="CHAR ARRAY"DEFINE EOL="$9B"DEFINE OpenBuf = "$0500"DEFINE OpenBufL = "$00"DEFINE OpenB}ufH = "$05"PROC Null=*()[$60]PROC Clos=*(BYTE d)[$FFA2$A686$CA0$AD0]PROC Output=*(BYTE d, STRING s)[$A684$BA0$4D0]PROC I}n=*(BYTE d, STRING s)[$A684$5A0$A586$A2$0$A386]PROC XIOstr=*(BYTE d,x,c,a1,a2,STRING s)[$A0A$A0A$98AA$9D$342$A3A5$AF0$9D$3}4A$A4A5$9D$34B$A9$0$9DA8$349$A5B1$9D$348$12F0$18$A5A5$169$9D$344$A6A5$69$0$9D$345$4C$E456$60]PROC Opn=*(BYTE d,STRING s,BYT}E m,o)[$A586$A684$3A0$4CXIOstr]PROC Prt=*(BYTE d,STRING s)[$A586$A684$A2$0$A386$9A0$20XIOstr$AD0$BA9$9D$342$9BA9$4C$E456$6}0]PROC Error(BYTE err)[$6C$A$0$1113$8301]PROC Break=*()[$BA$8E$4C1$80A0$98$4C Error]PROC LShift=*()[$84A4$AF0$8586$A$852}6$88$FAD0$85A6$60]PROC RShift=*()[$84A4$AF0$8586$8546$6A$88$FAD0$85A6$60]PROC SetSign=*()[$D3A4$1010]PROC SS1=*()[$8685$}8786$38$A9$0$86E5$A8$A9$0$87E5$AA$98$60]PROC SMOps=*()[$D386$E0$0$310$20SS1$8285$8386$85A5$E10$AA$D345$D385$84A5$20SS1$848}5$8586$A9$0$8785$60]PROC MultB=*()[$1BF0$CA$C786$AA$15F0$C686$A9$0$8A2$A$C606$290$C765$CA$F6D0$18$8765$8785$86A5$87A6$60]}PROC MultI=*()[$20SMOps$82A6$1BF0$C686$84A6$15F0$CA$C786$8A2$A$8726$C606$690$C765$290$87E6$CA$F0D0$8685$82A5$85A6$20MultB$}83A5$84A6$20MultB$4CSetSign]PROC DivI=*()[$20SMOps$85A5$27F0$8A2$8226$8326$8726$38$83A5$84E5$A8$87A5$85E5$490$8785$8384$C}A$E7D0$82A5$2A$A2$0$83A4$8684$4CSetSign$10A2$8226$8326$2A$4B0$84C5$390$84E5$38$CA$EFD0$8226$8326$8685$82A5$83A6$4CSetSign]}PROC RemI=*()[$20 DivI$86A5$87A6$60]PROC SArgs=*()[$A085$A186$A284$18$68$8485$369$A8$68$8585$69$0$48$98$48$1A0$84B1$8285$C}8$84B1$8385$C8$84B1$A8$B9$A0$0$8291$88$F810$11A5$FD0$11E6$4C Break$6308$1109$1819$2113$3323$60]SET $4E4=LShiftSET $4E6=RSh}iftSET $4E8=MultISET $4EA=DivISET $4EC=RemISET $4EE=SArgsPROC ChkErr=*(BYTE r,b,eC)[$1610$88C0$8F0$98$80C0$12F0$4C Err}or$8A$4A4A$4A4A$98AA$9D EOF$60]PROC Break1=*(BYTE err)[$1A2$1186$48$20 Break$68$A8$60]PROC Open=*(BYTE d,STRING f,BYTE m,a}2)[$48$A186$A284$A8$A9$0$99 EOF$A8$A1B1$8D OpenBuf $A8$C8$9BA9$2D0$A1B1$99 OpenBuf $88$F8D0$68$A2 OpenBufL $A0 OpenBufH $20}Opn$4C ChkErr]PROC PrintE=*(STRING s)[$A186$AA$A1A4$A5device]PROC PrintDE=*(BYTE d,STRING s)[$20 Prt$4C ChkErr]PROC Close}=*(BYTE d)[$20 Clos$4C ChkErr]PROC Print=*(STRING s)[$A186$AA$A1A4$A5device]PROC PrintD=*(BYTE d,STRING s)[$20Output$4C Ch}kErr]PROC InS=*()[$20In$A084$BD$348$3F0$38$1E9$A0$0$A591$A0A4$60]PROC InputS=*(STRING s)[$A286$AA$A2A4$A5device]PROC Inpu}tSD=*(BYTE d,STRING s)[$48$FFA9$A385$68]PROC InputMD=*(BYTE d,STRING s,BYTE m)[$48$A186$A284$A0$0$A3A5$A191$68$A2A4]PROC I}nputD=*(BYTE d,STRING s)[$20InS$4C ChkErr]CHAR FUNC GetD=*(BYTE d)[$7A2]PROC CCIO=*()[$A386$A0A$A0A$AA$A3A5$9D$342$A9$0$9D}$348$9D$349$98$20$E456$A085$4C ChkErr]PROC PutE=*()[$A9$9B]PROC Put=*(CHAR c)[$AA$A5device]PROC PutD=*(BYTE d,CHAR c)[$A1}86$A1A4]PROC PutD1=*()[$BA2$4C CCIO]PROC PutDE=*(BYTE dev)[$A0$9B$F7D0]PROC XIO=*(BYTE d,f,c,a1,a2,STRING s)[$20XIOstr$4C} ChkErr]PROC CToStr=*()[$D485$D586$20$D9AA$20$D8E6$FFA0$A2$0$C8$E8$F3B1$9D$550$F710$8049$9D$550$8E$550$60]PROC PrintB=*(B}YTE n)[$A2$0]PROC PrintC=*(CARD n)[$20 CToStr$A5device]PROC PNum=*()[$50A2$5A0$20 Output$4C ChkErr]PROC PrintBE=*(BYTE n)[}$A2$0]PROC PrintCE=*(CARD n)[$20PrintC$4CPutE]PROC PrintBD=*(BYTE d, n)[$A0$0]PROC PrintCD=*(BYTE d, CARD n)[$A085$8A$A28}4$A2A6$20 CToStr$A0A5$4CPNum]PROC PrintBDE=*(BYTE d, n)[$A0$0]PROC PrintCDE=*(BYTE d,CARD n)[$20PrintCD$A0A5$4CPutDE]PROC} PrintI=*(INT n)[$A286$AA$A2A4$A5device]PROC PrintID=*(BYTE d,INT n)[$C0$0$1610$48$A186$A284$2DA0$20PutD1$38$A9$0$A1E5$AA$A}9$0$A2E5$A8$68$4CPrintCD]PROC PrintIE=*(INT n)[$20PrintI$4CPutE]PROC PrintIDE=*(BYTE d,INT n)[$20PrintID$A0A5$4CPutDE]PRO}C StrB=*(BYTE n, STRING s)[$A286$A384$A2$0$A2A4]PROC StrC=*(CARD n, STRING s)[$A284$20 CToStr$C8$B9$550$A291$88$F810$60]PRO}C StrI=*(INT n, STRING s)[$E0$0$ED10$A085$A186$A284$38$A9$0$A0E5$A8$A9$0$A1E5$AA$98$20 CToStr$E8$8A$A8$B9$54F$A291$88$F8D0$}8A$A291$C8$2DA9$A291$60]BYTE FUNC InputB=*()CARD FUNC InputC=*()INT FUNC InputI=*()[$A5 device]BYTE FUNC InputBD=*(BYTE }d)CARD FUNC InputCD=*(BYTE d)INT FUNC InputID=*(BYTE d)[$13A2$8E$550$50A2$5A0$20InputD$50A9$5A2]BYTE FUNC ValB=*(STRING s})CARD FUNC ValC=*(STRING s)INT FUNC ValI=*(STRING s)[$A485$A586$A0$0$A084$A184$A284$A4B1$A385$A3E6$20A9$C8$A4D1$5D0$C8$A3}C4$F730$A4B1$2DC9$3D0$A285$C8$A3C4$3610$A4B1$30C9$3030$3AC9$2C10$38$30E9$AA$A1A5$48$A0A5$A$A126$A$A126$18$A065$A085$68$A165}$A185$A006$A126$18$8A$A065$A085$290$A1E6$C8$A3C4$CA30$A2A5$DF0$38$A9$0$A0E5$A085$A9$0$A1E5$A185$60]PROC PrintH=*(CARD n)[}$A485$A586$4A9$A685$24A9$20Put$A9$0$4A2$A406$A526$2A$CA$F8D0$3069$3AC9$230$669$20Put$A6C6$E5D0$60]PROC PrtH=*(BYTE n)[$A4}85$A585$2A9$A685$24A9$20Put$A9$0$4A2$A406$A526$2A$CA$F8D0$3069$3AC9$230$669$20Put$A6C6$E5D0$60]PROC PrintF=*(STRING f, CAR}D a1,a2,a3,a4,a5)[$C085$C186$8C$5F0$A0$0$C0B1$C285$C2E6$DA2$A2B5$9D$5F0$CA$F8D0$8B86$8A86]PROC PF2=*()[$8AE6$8AA4$C2C4$DAB}0$C0B1$25C9$FD0$8AE6$C8$C0B1$25C9$6F0$45C9$8D0$9BA9$20Put$4CPF2$8BA4$8BE6$8BE6$A085$B9$5F0$BE$5F1$A0A4$43C0$E6F0$53C0$6D0$20}Print$4CPF2$49C0$6D0$20PrintI$4CPF2$48C0$6D0$20PrintH$4CPF2$68C0$6D0$20PrtH$4CPF2$20PrintC$4CPF2]PROC Note=*(BYTE d,CARD} POINTER s,BYTE POINTER o)[$A186$A284$A0A$A0A$AA$26A9$9D$342$20$E456$20 ChkErr$A0$0$BD$34E$A391$BD$34C$A191$BD$34D$C8$A191$}60]PROC Point=*(BYTE d,CARD s,BYTE o)[$A186$A0A$A0A$98AA$9D$34D$A1A5$9D$34C$A3A5$9D$34E$25A9$9D$342$20$E456$4C ChkErr]MOD}ULE ; GRAPHIC ROUTINESSTRING dev_S="S:", dev_E="E:"PROC Graphics=*(BYTE m)[$48$A9$0$20 Close$CA9$A385$A9$0$AEdev_E$ACdev_E}+1$20Open$6A9$20 Close$68$A485$3029$1C49$A385$6A9$AEdev_S$ACdev_S+1$4COpen]PROC Position=*(CARD c,BYTE r)[$5B85$5C86$5A84]}PROC Pos1=*()[$5585$5686$5484$60]PROC GrIO=*()[$20Pos1$AD$2FD$8D$2FB$ADdev_S$A585$ADdev_S+1$A685$A9$0$A385$A485$6A9$60]PRO}C DrawTo=*(CARD c,BYTE r)[$20GrIO$11A0$4CXIO]BYTE FUNC Locate=*(CARD c,BYTE r)[$20Position$6A9$4CGetD]PROC Plot=*(CARD c,}BYTE r)[$20Pos1$6A9$AE$2FD$4CPutD]PROC SetColor=*(BYTE reg,hue,lum)[$5C9$1610$A085$98$F29$A285$8A$A0A$A0A$A205$A0A6$9D$2C4}$9D$D016$60]PROC Fill=*(CARD c,BYTE r)[$20GrIO$12A0$4CXIO]PROC Sound=*(BYTE v, p, d, vol)[$3C9$1D10$A$A284$A8$7C9$530$64A}0$20 Error$998A$D200$A2A5$A0A$A0A$A305$99$D201$60$A4A$A284$A8$7C9$530$64A0$20 Error$998A$D210$A2A5$A0A$A0A$A305$99$D211$60}]PROC SndRst=*()[$AD$232$EF29$8D$232$8D$D20F$A9$0$8A2$9D$D200$CA$FA10$3A9$8D$D21F$A9$0$8A2$9D$D210$CA$FA10$60]BYTE FUNC St}ick=*(BYTE p)[$A2$0$2C9$330$E8$129$BDA8$D300$88$4D0$4A4A$4A4A$F29$A085$60]BYTE FUNC STrig=*(BYTE p)[$BDAA$D010$A085$60]BYT}E FUNC Peek=*(CARD a)CARD FUNC PeekC=*(CARD a)[$A285$A386$A0$0$A2B1$A085$C8$A2B1$A185$60]PROC Poke=*(CARD a,BYTE v)[$A085$}A186$A098$9100$60A0]PROC PokeC=*(CARD a,v)[$20Poke$A5C8$91A3$60A0]PROC Zero=*(BYTE POINTER a,CARD s)[$48$A9$0$A485$68]PROC} SetBlock=*(BYTE POINTER a,CARD s,BYTE v)[$A085$A186$A284$A0$0$A4A5$A3A6$10F0$A091$C8$FBD0$A1E6$A3C6$F5D0$3F0$A091$C8$A2C4$}F9D0$60]PROC MoveBlock=*(BYTE POINTER d,s,CARD sz)[$A085$A186$A284$A0$0$A5A5$16F0$A2B1$A091$C8$F9D0$A1E6$A3E6$A5C6$F1D0$5}F0$A2B1$A091$C8$A4C4$F7D0$60]INT FUNC SCompare=*(STRING a,b)[$A485$A586$A284$A0$0$A084$A184$A4B1$A2D1$3F0$20*+21$C9$0$1D0}$60$A685$C8$A4B1$A2D1$5D0$A6C4$F590$60$FFA2$A086$390$A2B1$E8$A186$60]PROC SCopy=*(STRING d,s)[$A085$A186$A284$A0$0$A2B1$A0}91$8F0$A8$A2B1$A091$88$F9D0$60]PROC SCopyS=*(STRING d,s,BYTE b,e)[$A085$A186$A284$A0$0$A2B1$A5C5$2B0$A585$A4C6$18$A2A5$A46}5$A285$290$A3E6$38$A5A5$A4E5$2B0$A9$0$4CSCopy+10]PROC SAssign=*(STRING d,s,BYTE b,e)[$A085$A186$A284$A0$0$A2B1$DF0$A685$A4C}6$38$A5A5$A4E5$2F0$1B0$AA60$A6C5$890$18$A6A5$AA$A465$A585$A5A5$A0D1$390$A091$18$A0A5$A465$A085$290$A1E6$4C8ASCopy+14]MODU}LE ; for userMODULE ; PMEM.ACTBYTE pmem_bnk=$D700, pmem_ctrl=$D702PROC Init_PMEM() pmem_ctrl=0 pmem_bnk=$FF pmem_ctrl=$34RETURNP}ROC Set_PMEM_Bank(BYTE bnk)BYTE i pmem_bnk=bnk FOR i=0 TO 9 DO ODRETURNPROC Set_PMEM(BYTE bnk, d, CARD s, BYTE l) S}et_PMEM_Bank(bnk) MoveBlock($D600+d, s, l)RETURNPROC Get_PMEM(BYTE bnk, CARD d, BYTE s, l) Set_PMEM_Bank(bnk) MoveBlo}ck(d, $D600+s, l)RETURNPROC Clr_PMEM()BYTE i FOR i=0 TO 7 DO pmem_bnk=i%$8 Zero($D600,256) ODRETURNMODULEySET $E=$2C00SET $491=$2C00PROC Null=*()[$60]INCLUDE "D2:SYS.ACT"INCLUDE "D2:PMEM.ACT"INCLUDE "D2:SECTIO.ACT"INCLUDE "}D2:SDOS.ACT"BYTE ARRAY txt(10), sec0(128), str(10), bmsk=[$80 $40 $20 $10 $8 $4 $2 $1], bmsk0=[$7F $BF $DF $EF $F7 $FB $F}D $FE], bmap=$6000, exist(128), use(128), sec1(128)=[0 3 0 48 224 7 76 128 48 0 0 0 0 0 0 0 2 0 32 0 0 0 ' 'ӛ ' '- 'D }'i 's 'k 255 128 32 6 1 255 255 0 0 0 0 0 0 0 0 0 0 0 'P 'o 'r 't 'a 'l 32 32 'S 'y 's 't 'e 'm 's 32 'I 'n 'c '. 32 32 }32 32 '( 'c ') 32 '1 '9 '9 '0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 0 ]BYTE rdnum, maxbnk, PortB=$D301PROC Set_Memlo()BYTE FUNC Ram_Size()BYTE ARRAY bat=$D600, btab=$D610BYTE _rs, }s, s0, s1, s2 Set_PMEM_Bank(7) s2=0 FOR _rs=0 TO 127 DO s0=(_rs RSH 3) s1=_rs&$07 s=bat(s0)&bmsk(s1) IF s THEN s2}==+1 exist(s2)=btab(_rs) use(s2)=_rs FI OD exist(0)=s2 use(0)=s2RETURN(s2)PROC Bnk_Alloc(BYTE bnk)BYTE s0, s1, s2}BYTE ARRAY bat=$D600 bnk==&$7F s0=bnk s0==RSH 3 s1=bnk&$07 s2=bat(s0) s2==&bmsk0(s1) bat(s0)=s2RETURNPROC WipeMEM()BY}TE wm0, twm, barBYTE POINTER varCARD POINTER varptr varptr=$6F4 var=varptr^ twm=PortB [$78] FOR wm0=0 TO maxbnk DO Po}rtB=var^ var==+1 Zero($4000, 16384) bar=wm0&$3 IF bar=0 THEN Print("") ELSEIF bar=1 THEN Print("") ELSEIF ba}r=2 THEN Print("") ELSEIF bar=3 THEN Print("") FI PortB=twm OD PortB=twm [$58] PutE()RETURNPROC SetSec(}BYTE vlu)BYTE l FOR l=0 TO 127 DO sec0(l)=vlu ODRETURNPROC Alloc(CARD sctr)CARD s0, s1BYTE s2 sctr==-1 s0=sctr/}8 s1=sctr&7 s2=bmap(s0) s2==&bmsk0(s1) bmap(s0)=s2RETURNPROC DeAlloc(CARD sctr)CARD s0, s1BYTE s2 sctr==-1 s0=sctr/8} s1=sctr&7 s2=bmap(s0) s2==%bmsk(s1) bmap(s0)=s2RETURNPROC Format(BYTE numbnx)CARD scnt, t0, t1, t2BYTE nbmsBYTE POIN}TER bptr t2=0 scnt=numbnx*128 t0=scnt/8 Zero($6000, 1024) t1=numbnx*16 SetBlock($6000, t1, 255) nbms=t1/128 t2=t1-(nbms*}128) IF t2>0 THEN nbms==+1 FI sec1(9)=nbms+2 bptr=@scnt sec1(11)=bptr^ bptr==+1 sec1(12)=bptr^ t0=scnt-(nbms+4) bptr}=@t0 sec1(13)=bptr^ bptr==+1 sec1(14)=bptr^ sec1(15)=nbms sec1(20)=nbms+3 bptr=$D20A sec1(39)=bptr^ t0=WriteSector(rdnum,} 1, sec1, 1) FOR t0=1 TO nbms+4 DO Alloc(t0) OD FOR t0=1 TO nbms DO FOR t2=0 TO 127 DO sec0(t2)=bmap((t0-1)*128+t2)} OD t1=WriteSector(rdnum, t0+1, sec0, 1) OD SetSec(0) sec0(4)=nbms+3 t1=WriteSector(rdnum, nbms+2, sec0, 1) SetSec(0)} sec0(0)=40 sec0(3)=23 sec0(6)='M sec0(7)='a sec0(8)='s sec0(9)='t sec0(10)='e sec0(11)='r sec0(12)=32 sec0(13)=32 sec0(14})=32 sec0(15)=32 sec0(16)=32 t1=WriteSector(rdnum, nbms+3, sec0, 1)RETURNBYTE FUNC GetDrv()BYTE btmp, btmp0BYTE POINT}ER soundr soundr=$41 soundr^=0 FOR btmp=1 TO 9 DO btmp0=Status(btmp) IF btmp0=138 THEN EXIT FI OD soundr^=1}RETURN(btmp)PROC Main()BYTE n0, nb=[0], n1, fmt=[0], sz, n2, z, zx=[0], crsr=752, wipe=[0], lastdrv=[0], PortB=$}D301CARD memsz, memloBYTE ARRAY chk(10)CARD POINTER varptrBYTE POINTER var, rst, mlow, bp0, bp1 Zero(use, 128) Zero(exi}st, 128) sz=Ram_Size() memsz=sz*16 Put('}) PutE() PrintE("-Disk v3.11 (c) 1990 PSI") PrintE("16k-2048k RAM-Disk Hand}ler") PutE() Print("Available RAM: ") PrintC(memsz) Put('k) PutE() PutE() IF _setup()=0 THEN PrintE("Must use SpartaDOS}!!") RETURN FI n0=_howmany() crsr=1 nb=sz IF n0=1 THEN PrintE("%Syntax: RD (Dn: or /L) ") PrintE(" Option}s:") PrintE(" /C - Check, format if") PrintE(" scrambled") PrintE(" /B=n - Use n Banks") PrintE(" /F -} Format") PrintE(" /N - Don't display info") PrintE(" /W - Zero sectors at format") crsr=0 RETURN FI _getpar}m(1, txt) rdnum=txt(2)-48 IF txt(4)='/ THEN IF txt(5)='l OR txt(5)='L THEN rdnum=GetDrv() FI FI varptr=$6F0 var=var}ptr^ var^=rdnum FOR n1=2 TO n0-1 DO _getparm(n1,txt) txt(5)==&$5F IF txt(4)#'/ THEN EXIT FI IF txt(5)='B THEN }SCopyS(str, txt, 7, txt(0)) nb=ValB(str) ELSEIF txt(5)='N THEN zx=1 ELSEIF txt(5)='W THEN wipe=1 ELSEIF txt(5) }='C THEN fmt=5 ELSEIF txt(5)='F THEN fmt=10 FI OD IF nb>=sz THEN nb=sz FI varptr=$6F2 var=varptr^ maxbnk=nb } var^=maxbnk IF zx=0 THEN PrintE(" ") PrintE(" ") PrintE("  } ") PrintE("") Print("") PrintF("-Disk emulates D%C:%E", rdnum }+48) Print("RAM-Disk size: ") PrintC(maxbnk*16) PrintE("k") PutE() PutE() FI varptr=$6F4 var=varptr^ memlo=var memlo }==+maxbnk varptr=$C rst=varptr^ rst==+3 Set_Memlo=rst rst==+1 varptr=$6F6 varptr^=memlo mlow=$6F6 rst^=mlow^ mlow==+1 rs}t==+5 rst^=mlow^ Set_Memlo() FOR n1=1 TO nb DO var^=exist(n1) var==+1 n0=use(n1) Bnk_Alloc(n0) OD IF fmt=5 THEN Pr}intE("Checking -Disk.....") n1=ReadSector(rdnum, 1, sec0, 1) FOR n1=48 TO 53 DO chk(n1-47)=sec0(n1) OD chk(0)=6} IF SCompare(chk, "Portal")=0 THEN fmt=0 ELSE fmt=10 FI FOR n1=80 TO 127 DO IF sec0(n1) THEN fmt=10 }EXIT FI OD IF fmt=0 THEN PrintE("Data intact. -Disk restored.") ELSE PrintE("Data scrambled.") FI FI }IF fmt=10 THEN IF wipe THEN PrintE("Zeroing RAM...") WipeMEM() FI PrintF("Formatting...%E%E") Format(maxbnk) }IF wipe THEN PrintF(": -Disk D%C:%E", rdnum+48) ELSE PrintF(": -Disk D%C:%E", rdnum+48) FI FI} var=$4000 var^=$60 crsr=0RETURN%dX;File: PSI_RD.M65n"X;SIO trap routines for the PSIx X;RAM-diskX;F=EI TREGS0 MEMLODVSTAT!}DDEVIC DUNITDCOMNDDSTATS DBUFDTIMLODBYTES DAUX1  DAUX2  P!}ORTB@;;any address will do" RST , Q>4MLOW6 PMEMLO@ Q>5MLOWJ PMEMLOT:^ RSIO!h DEVCHKQDDEVI!}C;;check devicerR>1|HRSIO;;not disk driveQDUNIT;;check drive number RRDNUMHRSIO;;not our drive numberQDC!}OMND;;process commandR> R FVREADR> W FVWRITER> P FVWRITER> S FVSTATR> ? FVHSI%> 'DSTATS!}&:0VREAD!READ:VWRITE!WRITEDVSTAT!STATN VHSI!HSIX BNKON;b QDAUX1lS>v PTREGS QDAUX2S> PTR!}EGSQ> PTREGS PTREGS$>B1VTREGS WTREGS WTREGS0HB1$>B2TTREGS  UT!}REGS0 HB2* QTREGS4L>@> PTREGSH QPORTBR POPORTB\ QTREGSf RMAXBNKp IBNKERRz? QEXIST8M>!} PPORTB: BNKERR77%> 'DSTATS: HSIQ>? 'DSTATS: STATQ> PDVSTATQ>$PDVSTAT!}.PDVSTAT8 QMAXBNKBPDVSTATL%>V 'DSTATS`:j READ=tQ>~PԈ BNKON%>R1Q@TREGS7 P!}SBUF81IR1 QOPORTB PPORTB QDBUF PTREGS QDBUF PTREGS%>  R2QSBUF8P@TREGS71(! }IR22Q><PF.P%>Z 'DSTATSd:n WRITE=xQ>PԌ QDBUF PTREGS QDBUF PTREGS%>!!}W2Q@TREGS7 PSBUF81IW2 BNKON%> W1QSBUF8P@TREGS71IW1" QOPORTB, PPORTB6Q>@P!"}J.T%>^ 'DSTATSh:r OPORTB | RDNUM  MAXBNK  SBUF EXISTSBUFMLOWEXIST STARTQ>!#}` PSTARTQ  PRSTQ  PRST Q>4RSTP  Q>5RSTP  Q>4RDNUMP& Q>5RDNUM0P: Q>4MAX!$}BNKDPN Q>5MAXBNKXPb Q>4EXISTlPv Q>5EXISTP;Q S>  PVEC0 PVEC1 PVEC2 P!%}VEC3Q S> PVEC0 PVEC1 PVEC2 PVEC3 $> VEC0Q9  PRSIO*24 VEC1Q9> PRS!&}IOH0R Q>4DEVCHK\ VEC2P9f2p Q>5DEVCHKz VEC3P9 !RST TSET $E=$2800SET $491=$2800INCLUDE "D2:RDRT.ACT"INCLUDE "D2:SECTIO.ACT"INCLUDE "D2:SDOS.ACT"BYTE ARRAY txt(10), sec0(1%(}28), bmsk=[$80 $40 $20 $10 $8 $4 $2 $1], bmap=$6000, sec1(128)=[0 3 0 48 224 7 76 128 48 0 0 0 0 0 0 0 2 0 32 0 0 0 208 %)}211 201 '- 'D 'i 's 'k 255 128 32 6 1 255 255 0 0 0 0 0 0 0 0 0 0 0 'P 'o 'r 't 'a 'l 32 32 'S 'y 's 't 'e 'm 's 32 'I %*}'n 'c '. 32 32 32 32 '( 'c ') 32 '1 '9 '9 '0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %+}0 0 0 0 0 0 0 0 0 0 0 ]BYTE rdnum, maxbnkPROC SetSec(BYTE vlu)BYTE l FOR l=0 TO 127 DO sec0(l)=vlu ODRETURNPRO%,}C Alloc(CARD sctr)CARD s0, s1BYTE s2 sctr==-1 s0=sctr/8 s1=sctr&7 s2=bmap(s0) s2==!255 s2==%bmsk(s1) s2==!255 bmap(s0)=%-}s2RETURNPROC DeAlloc(CARD sctr)CARD s0, s1BYTE s2 sctr==-1 s0=sctr/8 s1=sctr&7 s2=bmap(s0) s2==%bmsk(s1) bmap(s0)=s2%.}RETURNPROC SetBlock=*(CARD a, l, v)[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04$A5$A3$F0$16$A5$A4$91$A0$C8$D0$02$E6$A1$C6$A2$%/}A5$A2$C9$FF$D0$E7$C6$A3$38$B0$E2$60]PROC Format(BYTE numbnx)CARD scnt, t0, t1, t2BYTE nbmsBYTE POINTER bptr numbnx==+%0}1 t2=0 scnt=numbnx*128 t0=scnt/8 SetBlock($6000, 1024, 0) t1=numbnx*16 SetBlock($6000, t1, 255) nbms=t1/128 t2=t1-(nbms%1}*128) IF t2>0 THEN nbms==+1 FI sec1(9)=nbms+2 bptr=@scnt sec1(11)=bptr^ bptr==+1 sec1(12)=bptr^ t0=scnt-(nbms+4) bpt%2}r=@t0 sec1(13)=bptr^ bptr==+1 sec1(14)=bptr^ sec1(15)=nbms sec1(20)=nbms+3 bptr=$D20A sec1(39)=bptr^ t0=WriteSector(rdnum%3}, 1, sec1, 1) FOR t0=1 TO nbms+4 DO Alloc(t0) OD FOR t0=1 TO nbms DO FOR t2=0 TO 127 DO sec0(t2)=bmap((t0-1)*128+t2%4}) OD t1=WriteSector(rdnum, t0+1, sec0, 1) OD SetSec(0) sec0(4)=nbms+3 t1=WriteSector(rdnum, nbms+2, sec0, 1) SetSec(0%5}) sec0(0)=40 sec0(3)=23 sec0(6)='M sec0(7)='a sec0(8)='s sec0(9)='t sec0(10)='e sec0(11)='r sec0(12)=32 sec0(13)=32 sec0(1%6}4)=32 sec0(15)=32 sec0(16)=32 t1=WriteSector(rdnum, nbms+3, sec0, 1)RETURNPROC Main()BYTE n0BYTE ARRAY dvstat=$2EA %7}Put('}) PutE() PrintE("-Disk Format Program v1.10") PrintE("(c) 1990 PSI") PrintE("Written by Nathan Hartwell") PutE()%8} IF _setup()=0 THEN PrintE("Must use SpartaDOS!!") RETURN FI n0=_howmany() IF n0<2 THEN PrintE("%Syntax: RDF Dn: %9}[/B=xx]") RETURN FI _getparm(1, txt) rdnum=txt(2)-48 IF n0=3 THEN _getparm(2, txt) IF txt(4)#'/ THEN RETURN F%:}I IF txt(5)='b OR txt(5)='B THEN maxbnk=ValB(txt+6) ELSE RETURN FI FI DCB.driveCmd='S DCB.stat=$40 DCB.devID='%;}1 DCB.driveNum=rdnum SIO() IF dvstat(3)=0 THEN IF n0<3 THEN PrintE("Must give a /B parameter.") RETURN FI ELSE%<} maxbnk=dvstat(3)-1 FI Format(maxbnk) PrintF(": -Disk D%C:%E", rdnum+48)RETURN$cPROC Null=*()[$60]PROC _CPYPRM=*()SET $4EE = _CPYPRM;Called when subroutine has more;than 2 bytes of parameters.[$85$A0)>}$86$A1$84$A2$18$68$85$84$69$03$A8$68$85$85$69$00$48$98$48$A0$01$B1$84$85$82$C8$B1$84$85$83$C8$B1$84$A8$B9$A0$00$91$82$88$1)?}0$F8$60]PROC _CHGSGN=*();utility for math routines.[$85$C0$86$C1$38$A9$00$E5$C0$48$A9$00$E5$C1$AA$68$60]PROC _FIXSGN=*)@}();utility for math routines.[$86$C2$E0$00$10$03$20 _CHGSGN $85$82$86$83$A5$85$45$C2$85$C2$A6$85$10$09$A5$84$20 _CHGSGN $)A}85$84$86$85$60]PROC _FIXRES=*();utility for math routines.[$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN$60]PROC _MUL=*()SET $4)B}E8 = _MUL;integer multiplication.[$20 _FIXSGN $A9$00$85$86$85$87$A5$82$D0$04$A5$83$F0$22$A5$84$D0$04$A5$85$F0$1A$46$85$66)C}$84$90$0D$18$A5$86$65$82$85$86$A5$87$65$83$85$87$06$82$26$83$38$B0$D6$4C _FIXRES]PROC _DIV=*()SET $4EA = _DIV;integer d)D}ivision.[$20 _FIXSGN $A9$00$85$86$85$87$85$C1$A9$01$85$C0$A5$82$D0$04$A5$83$F0$5F$A5$84$D0$04$A5$85$F0$57$A5$82$C5$84$A5$)E}83$E5$85$90$0F$A5$C1$30$0B$06$84$26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0$04$A5$C1$F0$36$A5$82$D0$04$A5$83$F0$2E$A5$82$C5$84$A5)F}$83$E5$85$90$19$38$A5$82$E5$84$85$82$A5$83$E5$85$85$83$A5$86$05$C0$85$86$A5$87$05$C1$85$87$46$85$66$84$46$C1$66$C0$38$B0$C)G}2$4C_FIXRES]PROC _ERROU=*();Error routine.[$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A$38$E9$10$D0$F1$6C$0A$00]PROC _ERRVEC=)H}*()[_ERROU]PROC _DEVIC=*()[$00]MODULECARD Error=_ERRVECBYTE device=_DEVICPROC _GOCIO=*();JSR to CIO routine and ch)I}eck;for errors.[$20$56$E4$10$1A$C0$88$F0$06$68$68$98$6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA$A9$01$9D$C0$05$68$AA$68$60]PRO)J}C _LODCHN=*();Check A reg for illegal IOCB #.;If ok, X reg = A reg * 16.[$C9$08$90$07$68$68$A9$86$6C _ERRVEC$0A$0A$0A$0A$)K}AA$60]PROC _SHFTR=*();I/O utility.[$48$8A$A8$68$AA$AD _DEVIC $60]PROC _CLREOL=*();Clear EOL flag.[$48$A9$00$85$A5$68$)L}60]PROC _SETEOL=*();Set EOL flag.[$48$A9$01$85$A5$68$60]PROC _PRECON=*();I/O utility.[$8A$48$98$AA$68$A0$03$84$A3$A0$)M}FD$60]PROC _DOPRNT=*();Print a string.[$86$A3$84$A4$20 _LODCHN $A9$00$9D$49$03$A8$B1$A3$F0$1A$9D$48$03$18$A5$A3$69$01$9)N}D$44$03$A5$A4$69$00$9D$45$03$A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0$12$A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A9$9B$20 _GOCIO )O}$60]PROC StrC=*(CARD c, s)[$85$D4$86$D5$84$A2$20$AA$D9$20$E6$D8$A0$00$B1$F3$30$06$C8$91$A2$38$B0$F6$29$7F$C8$91$A2$98$A0)P}$00$91$A2$60]PROC StrI=*(INT i CARD s)[$E0$00$30$03$4C StrC $49$FF$85$A2$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20StrC $A0$0)Q}0$18$B1$A2$69$01$91$A2$A8$88$B1$A2$C8$91$A2$88$88$D0$F7$C8$A9$2D$91$A2$60]PROC _DOPRNC=*();Print a CARD.[$48$20 _PRECON)R} $20 StrC $68$A2$FD$A0$03$4C _DOPRNT]PROC PrintCD=*(BYTE d CARD c)[$20 _CLREOL $4C _DOPRNC]PROC PrintC=*(CARD c)[$20 _)S}SHFTR $4C PrintCD]PROC PrintD=*(BYTE d CARD s)[$20 _CLREOL $4C _DOPRNT]PROC Print=*(CARD s)[$20 _SHFTR $4C PrintD]PRO)T}C PrintDE=*(BYTE d CARD s)[$20 _SETEOL $4C _DOPRNT]PROC PrintE=*(CARD s)[$20 _SHFTR $4C PrintDE]PROC _HEXSTR=*();Conve)U}rt a number to a hex string;for PrintF.[$85$84$86$85$A9$FD$85$A2$A9$03$85$A3$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9$00$A2$04)V}$06$84$26$85$2A$CA$D0$F8$69$30$C9$3A$90$02$69$06$C8$91$A2$C0$05$D0$E5$60]PROC PrintF=*(CARD s,a,b,c,d,e,f,g)[$85$82$86$8)W}3$84$A2$AD _DEVIC $0A$0A$0A$0A$85$C1$A0$00$84$87$84$C0$B1$82$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86$F0$02$B0$3E$B1$82$C9$25$D)X}0$3E$E6$C0$C8$C4$86$F0$02$B0$35$B1$82$C9$25$F0$2F$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4$B5$A2$48$B5$A3$E8$E8$86$87$AA$68$C0$43)Y}$F0$15$C0$49$F0$34$C0$48$F0$3C$C0$53$F0$3F$38$B0$1D$60$38$B0$B2$A9$9B$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$98$2)Z}0 _GOCIO $38$B0$E4$A0$03$84$A3$A0$FD$20 StrC $38$B0$0F$A0$03$84$A3$A0$FD$20 StrI $38$B0$03$20 _HEXSTR $A9$FD$A2$03$85$84$8)[}6$85$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5$9D$48$03$18$A5$84$69$01$9D$44$03$A5$85$69$00$9D$45$03$A9$0B$9D$42$03$20_GOCIO $3)\}8$B0$98]PROC PutD=*(BYTE d, c)[$86$A0$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO$60]PROC Put=*)]}(BYTE c)[$AA$AD _DEVIC $4C PutD]PROC PutE=*()[$A9$9B$4C Put]BYTE FUNC ValB=*(CARD a)CARD FUNC ValC=*(CARD a)INT FUNC )^}ValI=*(CARD a)[$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5$A8$B1$A2$85$A4$C8$B1$A2$C9$20$F0$F9$C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B)_}0$31$B1$A2$38$E9$30$90$2A$C9$0A$B0$26$48$06$A0$26$A1$A5$A0$A6$A1$0A$26$A1$0A$26$A1$18$65$A0$85$A0$8A$65$A1$85$A1$18$68$65)`}$A0$85$A0$90$CD$E6$A1$38$B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85$A0$A9$00$E5$A1$85$A1$60]INT FUNC SCompare=*(CARD s1, s2)[$8)a}5$A4$86$A5$84$A2$A0$00$84$A0$84$A1$B1$A4$85$A6$B1$A2$85$A7$C4$A6$F0$15$C4$A7$F0$11$C8$B1$A4$D1$A2$F0$F1$90$03$E6$A0$60$C6$)b}A0$C6$A1$60$A5$A6$C5$A7$F0$F9$B0$F0$90$F1]PROC SCopyS=*(CARD d, s BYTE b, e)[$85$A0$86$A1$84$A2$A0$00$84$A6$B1$A2$C5$A5$)c}B0$02$85$A5$A5$A4$F0$15$C5$A5$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6$A4$A6$91$A0$38$B0$E7$A5$A6$A0$00$91$A0$60]PROC SetBloc)d}k=*(CARD a, l, v)[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04$A5$A3$F0$16$A5$A4$91$A0$C8$D0$02$E6$A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A)e}3$38$B0$E2$60]MODULE(;sdos.act;bill aycock, 9/89;support for sparta parameter passing;also: see the SDCS manual pp.108-111moduleTYPE HANDT-g}AB=[BYTE dvnm CARD cmdtab]proc _zcr()byte func _setup() byte sparta=$700 card dosvec=10,sd23=$700 HANDTAB pointer ht=$-q}B%DOS SYSB*)DUP SYSBSBANKNKH ACTB?XCONF ACTBMISC ACTB?MYSYS ACTBPMEM ACTB-PSI ACTBPSI_RD M65B'RDF ACTB)=RTIME ACTB fSDOS ACTB {SECTIO ACTB#SYS ACT31A if sd23#$70B then if sparta#'S then return(0) fi else do if ht.dvnm='D then if ht.cmdtab#$700 then -r} return(0) else exit fi fi ht==+3 od fi _zcr=dosvec+3return(1)byte func _cmdlen() card dosvec=10-s} byte pointer _cmdline byte i _cmdline=dosvec+63 for i=0 to 63 do if _cmdline^=155 then exit fi _cmdline==+1 odr-t}eturn(i)proc _getcmds(byte array cmds) card dosvec=10 byte pointer _cmdline byte i,j _cmdline=dosvec+63 i=_cmdlen() -u}cmds^=i for j=1 to i do cmds(j)=_cmdline^ _cmdline==+1 odreturnbyte func _howmany() card dosvec=10 byte pointer -v}_argbuf byte pointer _bufoff byte i,j _argbuf=dosvec+33 _bufoff=dosvec+10 _bufoff^=0 i=_cmdlen() j=0 while _bufoff^-w} < i do _zcr() j==+1 odreturn(j)proc _getparm(byte which byte array parm) card dosvec=10 byte point-x}er _argbuf byte pointer _bufoff byte i parm^=0 if which>(_howmany()-1) then return fi _argbuf=dosvec+33 _bufoff=dosve-y}c+10 _bufoff^=0 for i=1 to which do ;skip to desired _zcr() ; parameter od _zcr() for i=1 to 28 do i-z}f _argbuf^=155 then exit fi parm(i)=_argbuf^ _argbuf==+1 od parm^=i-1returnMODULE,]MODULE ; SPARTADOS SECTIO.ACT; The following routines perform; direct sector access to a disk; drive.PROC JSR=$00CB()1|}PROC SIO()CARD DOSVEC=10,COMTAB,USIO=$00CCCARD POINTER CPTRBYTE POINTER BPTRCOMTAB=DOSVECCPTR=DOSVEC CPTR==-10USIO=CPTR1}}^BPTR=$CB BPTR^=$20BPTR=$CE BPTR^=$60JSR()RETURNMODULETYPE DCBREC = [ BYTE devID, driveNum, d1~}riveCmd, stat CARD buf, timeOut, count, sect ]DCBREC POINTER DCBSET DCB = $3001}BYTE FUNC SectIO( BYTE drive, CARD sector, buffer, BYTE density ) DCB.devID = '1 DCB.driveNum = drive DCB.buf 1} = buffer DCB.timeOut = 15 DCB.sect = sector ; Set byte count for proper density IF (density = 1) O1}R (sector <= 3) THEN DCB.count = 128 ELSE DCB.count = 256 FI SIO() ; Call SIO to perform operati1}onRETURN( DCB.stat )BYTE FUNC Status( BYTE drive )BYTE ARRAY zip(4) DCB.devID = '1 DCB.driveNum = drive DC1}B.driveCmd = 'S DCB.stat = $40 DCB.buf = zip DCB.timeOut = 15 DCB.sect = 0 DCB.count = 41} SIO()RETURN( DCB.stat )BYTE FUNC ReadSector( BYTE drive, CARD sector, buffer, BYTE density ) DCB.driveCmd = 'R 1} DCB.stat = $40 SectIO( drive, sector, buffer, density )[ $60 ]BYTE FUNC WriteSector( BYTE drive, CARD sector, bu1}ffer, BYTE density ) DCB.driveCmd = 'W DCB.stat = $80 SectIO( drive, sector, buffer, density )[ $60 ]MODUL1}E ; For user0MODULE ; SYS.ACTDEFINE STRING="CHAR ARRAY"DEFINE EOL="$9B"DEFINE OpenBuf = "$0500"DEFINE OpenBufL = "$00"DEFINE OpenBuf5}H = "$05"; Primitive IO routinesPROC Clos=*(BYTE d)[$FFA2$A686$CA0$AD0]PROC Output=*(BYTE d, STRING s)[$A684$BA0$4D0] 5}PROC In=*(BYTE d, STRING s)[$A684$5A0$A586$A2$0$A386]PROC XIOstr=*(BYTE d,x,c,a1,a2,STRING s)[$A0A$A0A$98AA$9D$342$A3A5$5}AF0$9D$34A$A4A5$9D$34B$A9$0$9DA8$349$A5B1$9D$348$12F0$18$A5A5$169$9D$344$A6A5$69$0$9D$345$4C$E456$60]PROC Opn=*(BYTE d,STR5}ING s,BYTE m,o)[$A586$A684$3A0$4CXIOstr]PROC Prt=*(BYTE d,STRING s)[$A586$A684$A2$0$A386$9A0$20XIOstr$AD0$BA9$9D$342$9BA95}$4C$E456$60]PROC Error(BYTE err)[$6C$A$0$1113$8301]PROC Break=*()[$BA$8E$4C1$80A0$98$4C Error]; math library routines5}PROC LShift=*()[$84A4$AF0$8586$A$8526$88$FAD0$85A6$60]PROC RShift=*()[$84A4$AF0$8586$8546$6A$88$FAD0$85A6$60]PROC SetS5}ign=*()[$D3A4$1010]PROC SS1=*()[$8685$8786$38$A9$0$86E5$A8$A9$0$87E5$AA$98$60]PROC SMOps=*()[$D386$E0$0$310$20SS1$8285$85}386$85A5$E10$AA$D345$D385$84A5$20SS1$8485$8586$A9$0$8785$60]PROC MultB=*()[$1BF0$CA$C786$AA$15F0$C686$A9$0$8A2$A$C606$2905}$C765$CA$F6D0$18$8765$8785$86A5$87A6$60]PROC MultI=*()[$20SMOps$82A6$1BF0$C686$84A6$15F0$CA$C786$8A2$A$8726$C606$690$C765}5$290$87E6$CA$F0D0$8685$82A5$85A6$20MultB$83A5$84A6$20MultB$4CSetSign]PROC DivI=*()[$20SMOps$85A5$27F0$8A2$8226$8326$8725}6$38$83A5$84E5$A8$87A5$85E5$490$8785$8384$CA$E7D0$82A5$2A$A2$0$83A4$8684$4CSetSign$10A2$8226$8326$2A$4B0$84C5$390$84E5$38$C5}A$EFD0$8226$8326$8685$82A5$83A6$4CSetSign]PROC RemI=*()[$20 DivI$86A5$87A6$60]PROC SArgs=*()[$A085$A186$A284$18$68$84855}$369$A8$68$8585$69$0$48$98$48$1A0$84B1$8285$C8$84B1$8385$C8$84B1$A8$B9$A0$0$8291$88$F810$11A5$FD0$11E6$4C Break$6308$1109$15}819$2113$3323$60]SET $4E4=LShiftSET $4E6=RShiftSET $4E8=MultISET $4EA=DivISET $4EC=RemISET $4EE=SArgsPROC ChkErr=*(B5}YTE r,b,eC)[$1610$88C0$8F0$98$80C0$12F0$4C Error$8A$4A4A$4A4A$98AA$9D EOF$60]PROC Break1=*(BYTE err)[$1A2$1186$48$20 Bre5}ak$68$A8$60]PROC PrintE=*(STRING s)[$A186$AA$A1A4$A5device]PROC PrintDE=*(BYTE d,STRING s)[$20 Prt$4C ChkErr]PROC Print5}=*(STRING s)[$A186$AA$A1A4$A5device]PROC PrintD=*(BYTE d,STRING s)[$20Output$4C ChkErr]PROC CCIO=*()[$A386$A0A$A0A$AA$A35}A5$9D$342$A9$0$9D$348$9D$349$98$20$E456$A085$4C ChkErr]PROC PutE=*()[$A9$9B]PROC Put=*(CHAR c)[$AA$A5device]PROC PutD=*(5}BYTE d,CHAR c)[$A186$A1A4]PROC PutD1=*()[$BA2$4C CCIO]PROC CToStr=*()[$D485$D586$20$D9AA$20$D8E6$FFA0$A2$0$C8$E8$F3B1$9D5}$550$F710$8049$9D$550$8E$550$60]PROC PrintC=*(CARD n)[$20 CToStr$A5device]PROC PNum=*()[$50A2$5A0$20 Output$4C ChkErr]PR5}OC StrC=*(CARD n, STRING s)[$A284$20 CToStr$C8$B9$550$A291$88$F810$60]PROC StrI=*(INT n, STRING s)[$E0$0$ED10$A085$A186$A2845}$38$A9$0$A0E5$A8$A9$0$A1E5$AA$98$20 CToStr$E8$8A$A8$B9$54F$A291$88$F8D0$8A$A291$C8$2DA9$A291$60]BYTE FUNC ValB=*(STRING s5})CARD FUNC ValC=*(STRING s)INT FUNC ValI=*(STRING s)[$A485$A586$A0$0$A084$A184$A284$A4B1$A385$A3E6$20A9$C8$A4D1$5D0$C8$A35}C4$F730$A4B1$2DC9$3D0$A285$C8$A3C4$3610$A4B1$30C9$3030$3AC9$2C10$38$30E9$AA$A1A5$48$A0A5$A$A126$A$A126$18$A065$A085$68$A1655}$A185$A006$A126$18$8A$A065$A085$290$A1E6$C8$A3C4$CA30$A2A5$DF0$38$A9$0$A0E5$A085$A9$0$A1E5$A185$60]PROC PrintH=*(CARD n)5}[$A485$A586$4A9$A685$24A9$20Put$A9$0$4A2$A406$A526$2A$CA$F8D0$3069$3AC9$230$669$20Put$A6C6$E5D0$60]PROC PrintF=*(STRING f5}, CARD a1,a2,a3,a4,a5)[$C085$C186$8C$5F0$A0$0$C0B1$C285$C2E6$DA2$A2B5$9D$5F0$CA$F8D0$8B86$8A86]PROC PF2=*()[$8AE6$8AA4$C2C5}4$DAB0$C0B1$25C9$FD0$8AE6$C8$C0B1$25C9$6F0$45C9$8D0$9BA9$20Put$4CPF2$8BA4$8BE6$8BE6$A085$B9$5F0$BE$5F1$A0A4$43C0$E6F0$53C0$65}D0$20Print$4CPF2$49C0$6D0$20PrintI$4CPF2$48C0$6D0$20PrintH$4CPF2$20PrintC$4CPF2]PROC Zero=*(BYTE POINTER a,CARD s)[$48$A5}9$0$A485$68]PROC SetBlock=*(BYTE POINTER a,CARD s,BYTE v)[$A085$A186$A284$A0$0$A4A5$A3A6$10F0$A091$C8$FBD0$A1E6$A3C6$F5D0$5}3F0$A091$C8$A2C4$F9D0$60]INT FUNC SCompare=*(STRING a,b)[$A485$A586$A284$A0$0$A084$A184$A4B1$A2D1$3F0$20*+21$C9$0$1D0$60$5}A685$C8$A4B1$A2D1$5D0$A6C4$F590$60$FFA2$A086$390$A2B1$E8$A186$60]PROC SCopy=*(STRING d,s)[$A085$A186$A284$A0$0$A2B1$A091$5}8F0$A8$A2B1$A091$88$F9D0$60]PROC SCopyS=*(STRING d,s,BYTE b,e)[$A085$A186$A284$A0$0$A2B1$A5C5$2B0$A585$A4C6$18$A2A5$A465$5}A285$290$A3E6$38$A5A5$A4E5$2B0$A9$0$4CSCopy+10]MODULE ; for user4D