ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RyHP   * 1H0芢@) Y0.Ș`i#(PMRR\ \b Pgi 0  % @ / ՠ`d   0DDԝLH}N@  )?HI Y0`HIJH) * J j * hJJJ )HJ h i     } YS S0 i`ϣ߳ϣ߳H J3xj2h} 1 |9 ӭ45(420 *(0241өX.`  R *i)Lvw  ~*P}E 5 LN(G E  r s k rsrL ( E LO(0d( L iE0O +)$IC  H S8 }q p h   j 8no CDLQ CFl M  LO Ri)Llk2'")*F }$F$F$F$F$ 5 )ШF/Șl]kpqС,LQ/A! Ti)Zlk@ ܬ/i)(")")k }$F$F$F 5$/L /lF@jj(LNkle$$%8(k()` R 8 ELO Ri)^>jf | NrC s } ) vw5g   enfo Glvw LQ@iLm>j FL ~Jjjjii p qEh }jlrs`LQ:$ȱ$@+[_#{ 8  Խut! ai 8   E I   ] C } H h    ˰ 8  N   Lm E  ,  [ `LQ ,/ 8 ~/  Ơ? ѩ}/  [ /Lj0?MoLn FjMqLp NklLOLQnLoMlNLO R"(+}ըHH`Q R!!  % !   / .   FȑF! /GF \H"+0+* }! F tLQnm: J~nTF1F  *n+)5! n (, n)1JJJn(n*o} I ,0  ci a oF? @ , 8,0 ʩ0H Eh   i}  D ]DmmFLQvtu`*&!*@h ] 0 ^0` c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  LQ0  /qnoHH 9 9 H H  I9  9 } Nd EH  Q8 o n  FnoL HII/ Ih8`h`Lnon`no`u F }E VEhLO/luF l0BF/lɜɛ׽hE N  b VFL FREE SECTORS C} H) *Fh ):FȽ F FC IH' 0 d  i:Fȩ/F.l`CD/08HDIC}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A \ Hȱ$*?ȝ 2. ? [_{ ,0}-:) 0$:>WI  IТ,LQH  0hLd ~ t u`C ?( 0(C.` E } R =! .ti S0N EE D XC )0')AY  )ע ? 0E088FG \o}n  (HhLcL3 iJ i Lqp 0=rspnqopqlk`jZj0  j FL`H}FhȑFȽlFi0 h FFLFpvqwgneofLF pq7  G0i 0 FJJh1FqȱFpȱFk`B!}08`hEE D 8. =D}tui( TʩL`b!)    cȌaȌd b`aab}H8 hdaHcd8 cH hHH  \h hc` =Hh I8ih( t  ( t(!` L\}CJfCJfCJfCDfC` a  HII  INdh  `h  `n)8jHniPoijIjFIjFIjh` a } I 38  8H0 I  ' H LQ8j Y  8j NdY  &I &I &IHeH.p!}Iiq  `!.莿 2Jjj }.m Ȉ!m FG` ɩLQ z "} e Hi04 \ Ȍ  8 i h !`I0 `C Y8.`DOS SYS#} I  ` ~ݩ.C/`ba.m۩mѤC9 `C L] H  ,- '0 l $}, BLVDE`D1:AUTORUN.SYS8hhJ ȱHȱIȱBȱDȱEeeHHLV)  %}1*  ,,p-  0 I &  '0   Lw)l, 0  I&LD1:MEM.SAV&}E:D1:DUP.SYSE:D1:DUP.SYSE:D1:DUP.}J)1CD2:DOS.SYS n  * \*`آ R'S )ɀ@  U))% BError lo(}ading MEM.SAV or memory!  0* b*c*d*e* R Hd*JSDd*J-=e* 0c*ʈд =}MYDOS 4)}.50 -- Copyright 1988,˛Disks 1D- 2S- D: = D1: ~= =1-8.Dir of D1:-D8: *. Dir of D:A. *}Disk Directory K. Save MemoryB. Run Cartridge L. Load MemoryC. Copy File(s) M. Run at AddressD. Delete File(s) N. L+}oad MEM.SAVE. Rename File(s) O. Change Config.F. Lock File(s) P. Set DensityG. Unlock File(s) Q. Make DirectoryH. Wr,}ite DOS Files R. Pick DirectoryI. Initialize Disk S. Set RAMdisk #J. Duplicate Disk V. Set Verify Flag  ?莼-}( 0  =Select Item ( for menu):@  =ɛL)1L,*L,:W@ ,,L=No such item!.}L*, -L*, BNeed new file name! BNo drive or director0}ies allowed in new name!Lock Unlock Delete Lock which file?â-#Unlock which file?ɢ-$((H @ AQ/wDel1}ete what file?Ѣ-!((H @ ANJ =Answer 'Y' or 'N'h `B L?;(( ~=( ~= =? =Y ?Lj.H @ AhR ?2}R)L*,LM/L-Lz-File to rename, new name? @ A(9', ȱ:>0{ ПFull directory name?Z"L.Dire3}ctory to be used as 'D:'? @ A(5)L.(I: ȱޝL*, BInvalid directory!L?( 4}(0Li-File source, destination? '( @C۩2ڭ82ܭC B9'0 @(ߍeލd(DЍ( ? 9'5} A rBȱޙ':>Ȍ(C0J* .B :'ȱ/.* #,ɛȝ:' ߰ A L?,(0L*, '6}ut(:'3?&' .'Ƚ:'?&'  .ى'Q?''(#( ~= =-->' ~=7}Q =YR_o (J(  0?B݌''BK)`''utz0( >(L0L*,L?nDisk to FORMAT:8} YA B(UTލ1 =(Press for Enhanced Dns)Type to Format Drive 0: =AIYZNj[R VL9}?L*,D2:DUP.SYSDrive to write DOS files to? YAH1:*K)2J) Z wB hpJ) 2<2U:}TC٩1ة۩کL;Source, Destination (Sectors)? YA)((9'( SA)((((( @(0% =Inser;}t both disks, type = A( A((/( B(( BDrives not compatible!J(j(9'Hi''<}h(ɛy BInvalid options! @-&& @)׍&&(&&&۩ک&&&&8* <4&&&& <4=}8*8(ܭ(ݥ2C, BNot enough memory! ک&&`(Mh  & =L?&i &>}&&&mm   =  &((&թԥԍ(Ս(((( ( ((C2((?}ՠԍ((,(0"( (( =m(m( & &("L*,  ( AL4,(, =Insert DES@}TINATION disk, press =Nͼ J) b( 0K) ?((ԭ(խ( ( (((L4Drive, new density:A} YA9'ɛ BDrive unchanged.(ު90٨Ȍ(SD  ABL)xԌҭHӭ@ @ ʎӆ@B}ӭ@@ :  $ӹ @hөԥX` Aˠ =RAM disk present? =NL#8 =xlC}on or E type RAMdisk? =Aό  L   M A, A6: ' =No extra memory available!L#8L7 & & D}& =Use default config for 0)ȩ ~= =K? =NL7 =Size(K)? ? @FjFjFjFj: =Page seqE}uence? ? @o* =RAM disk drive no? = 09) `8 -8**H***) 9 Ȋ)h9 @@ʊ F}H'h(#''/'(ɛ ? @(@: 3 ʽ' L7 =Duplicated sequence number!L7 =Wrong numbG}er of entries!L7K큅쀄 =Verify WRITEs? ; =NumberH} of File Buffers? ? @  6 Lw),R( ';L*,Drive number or : =ɛLC99L60Ȍ( =Remove I}drive? =Y =Is drive configurable? =YЂ =High capacity drive? =Yy =Is drive double sided? =Y ; =TracksJ}/side? ? @#0M P( ; =Step rate? =4/ ; ';L*, =Drive size (in sectors)? ? @H(K}h *;L*,RAM disk drive no? 8L*,Verify WRITEs? ;L*, =WNPy`(`(  LABSAVE:filename,start,end(,init(L},run)) @TUH @Cp` 2< @؆8օڊ BInvalid START-END range!۩ @  @M} hԄՠAμȌZ wB04*  0$ڍXۍY֍T׍U,0LBLB #CL?ֆ׌`Load MEM.SAV from whaN}t file? 0#L*,L?Load from what file?) @TU&̩Z wB &0&-&а&𨭼INIZ'O}RV0II BNO CARTRIDGE!Ԇխ  )L?Run from what address? ?ɛ @P} BAddress must be 1-4 hex digits! BHILV n=`hh =HH` =0{a Hɛ n= n=h` nQ}=L*, = = pHH =hh`K: p `(((( i ɀ((L?(`(B'(0!HH''^R}>I^>(`^>DH(`(HI`(o5 ~= =( B( >@A (J wB0x((HHIIDDES}E B ?(CɈK(٢A ~= =( BL>(B^>((ڤ ܝHݝI VL_>L?(" B !B J) T} B(L& R XY( ?&:0H&((& ( .( & ( .(ʩ(U}`ލD&ߍEBIʎH( V0`ԩ ؠ@ȱ@ȱ)@ BError -- 000&`$8f 3AԄձG/ V}$<68i/(Ԧ`H&եԦ&&eԅheԅԊe(iL*@&&&&ԅL*@B ? 3A?*(ɛ:W}./2SX(0ȱ/.ɛ(ލ9'ި0#:Ȱ :ފ :ȱ: : CAD CAޥX}`(eޅީe߅`(` @L\A @TUȪ: BFile name not allowed!: )  i( =0+L Y}TUD BNot a disk file!(0` =Insert SOURCE disk, press =,(pӮ(A(O  1B AB1BZ} ` % 1(L/ b(de BJKO L?O` B((*(([}(`ȱޙ((:>Ȍ(`D:`OS.SYS,DOS.SYShh =L*,  VLJ C C,pLiLF#Խ٩Յ׆ \} LB`((:>Ȍ(`D:`OS.SYS,DOS.SYShh =L*,  VLJ C C,pLiLF#Խ٩Յ׆  H EI4AMYDOS 3.X16/RDOS 1.3 RAMDISK AUTORUN.SYS FILEAX;(6X;MYDOS 3.X16/RDOS 1.3 RAMDISK INSTALLATION PROGRAM2X^};<X; LOCAL ZERO PAGE RAMFX;P IOCBZ Zd PTRn NAMPTRx CLSFLG BOTHOK SVIOCBX;X; S_}YSTEM EQUATESX; HATAB ICMDB ISTATC IBUFD ILENH IAUXJX;X; MYDOS SYSTEM DEFINITI`}ONSX;RAMDKU  STATE "RDTEST0, CTEST66X;@&X; HARDWARE AND OS ROM DEFINITIONSJX;TPAGE40@^a} PORTBh AXLONr CIOVV|X; X; MISCELLANEOUS DEFINITIONSX;!IOCB ;;FREE IOCB FOR MY USE8X;b}-X; ROUTINES TO SAVE AND RESTORE CIO STATE"X; (ALLOWING NESTED CIO CALLS)X;SAVSTA$>SAVIOCBQIOCBZ9 PSVIOc}CB90 ISAVIOCB:X;RSTSTA$>&RESIOCBQSVIOCB90 PIOCBZ9:0D IRESIOCBN:XX;bX; CLOSE ANY IOCBlX;vd}CLOSEQ> ;;CLOSE ANY IOCB PICMD9 !CIOVX;X; OPEN FILEX;X; CALLING SEQUENCE:X; JSR SOPENX; .BYTE e}AUXX; .BYTE CMDX; .WORD BUFFER ADDRESSX; SOPEN; ;;LDA #IMM OPCODEX; &X; DO A READ/WRITE TYPE I/O REQUEf}STX; X; CALLING SEQUENCE:*X; JSR DOIO4X; .BYTE IOCBNO>X; .WORD BUFFER LENGTHHX; .BYTE CMDRX; .WORD BUFFg}ER ADDRESS\X;f DOIO,p7zPPTR7 PPTR%> Q@PTR7 DDOIO1 PIAUX9 EXTRCB DOIO1>3 Q@PTR7 h}PILEN93 Q@PTR7 PILEN9 XTRCB3 Q@PTR7$ PICMD9.38 Q@PTR7B PIBUF9L3V Q@PTR7` PIBUF9jCt,~i}OPTR?Q> OPTR5C5 CIOV;;DO I/O REQUESTINOIOER;;NO ERROR?)>FNOIOER;;MAYBE EOF?7&7j};;NO, DISCARD RETURN ADDR AND EXITC  NOIOER:X;>X; CHECK FOR 130XE, RETURNS Z FLAG IF 130XE MEMORY MAPPING(X;2k}CHKMAP%>< $PAGE40F$QPORTB;;SAVE CURRENT B-REG VALUEPN>Z 'PAGE40d3n!PPORTB;;TOGGLE MAP ENABLE BITxN> 'Pl}AGE40 PPORTB1 )PAGE40 &PAGE40 FRETRAMX;AX; CHECK FOR AXLON, RETURNS Z FLAG IF RAM DISK MEMORY MAPPINGm}X;Q> A PNAMEDKQ> XPNAMEDKQ> LPNAMEDKQ> O"PNAMEDK,Q> N6PNAMEDK@Q>J PAXLONTNn}>^ $PAGE40h%>r 'PAGE40|3!PAXLON;;TOGGLE MAP ENABLE BIT 'PAGE40N> PAXLON1 )PAGE40 &PAGE40o} RETRAM:X;"X; MAIN INITIALIZATION PROGRAMX;1ENTRY CHKMAP;;CHECK FOR 130XE MEMORY MAPPING#FGOTRAM;;IF SO, INSp}TALL RAMDISK"'RAMDKU;;ELSE, DISABLE RAMDISK:;;AND RETURNX;&GOTRAM SAVSTA0%>:'IAUXIOCBD%'CLSFLG;;ASq}SUME E: NOT THE SCREENNQ> EXFNDEDVRHATAB8b FGOTEDVl3v33)> DFNDEDV ESKIPBANX;GOTEDVQHATABr}8 HSKIPBANQHATAB8R> HSKIPBAN PCLSFLGX; DOIO   LEN1   MSG1*X;4%SKIPBANQ>;;MAs}KE D8: THE RAMDISK> PRAMDKUHX;R%X; FORMAT THE RAMDISK (DRIVE D8:)\X;f $>IOCBp SOPENz   DRIVE8 GBt}ADIOX;#X; COPY DUP.SYS FROM D1: TO D8:X; $>IOCB QCTESTR> C HOPEN1 SOPEN   NDCSYS !Ru}EADIT X;$ %OPEN1 SOPEN;;OPEN DUP.SYS ON D1:.  8  B NDUPSYSL X;V #READIT DOIO;;READ DUP.SYS FILE` IOCBj  v}t  ~  BSS X; QISTATIOCB "R>;;CONTINUE ONLY IF EOF HERE HBADIO QILENIOCB PFILELEN QILENw}IOCB "PFILELEN;;SAVE SIZE OF DUP.SYS $>IOCB  CLOSE;;CLOSE FILE X; &$>IOCB;;OPEN IOCB #2 TO D8:DUP.SYS QCTEST x}R> C HWRTRAM SOPEN(  2  < NDUP8CF !DOWRITP X;Z WRTRAM SOPENd  n  x NDUP8 X; )DOWRIT DOIOy};;AND WRITE COPY FROM D1: IOCB FILELEN     BSS BADIO$>IOCB;;CLOSE IOCB 2  CLOSE;;AND EXIT QRDTEST z}R>L &HNOTRD;;IF NOT RDOS, MUST BE MYDOS QRDTEST R> D &HNOTRD;;JMP AND 'DOS.SYS' PRESENT? TSTATE ;" !WSTAT{}E;;SAY MEM.SAV IS ACTIVE, !CHGNAM6 X;@ NOTRD$>J CKMDS2T FCHGNAM;;JUST TO BE SAFE!^ Q>0h R9r HCKMDS| Q>|} R9 HCKMDS Q>. R9 HCKMDS Q>` R9 (HMAY42;;NOT <4.2, MAYBE 4.2 OR LATER Q> 2 R9 HCKMD}}S 2 R9 HCKMDS FNOT42& MAY42R90 HCKMDS: .NOT42T9;;SAY MEM.SAV IS ACTIVE TO MYDOSD ;N W9X X;b C~}HGNAMQ>l PBOTHOKv Q> PNAMPTR Q> PNAMPTR QCTEST R> C HSCANFD Q> PNAMPTR 2SCANFDQ> D;;F}IND DUP.SYS AND MEM.SAV FILENAMES %> R@NAMPTR7 FGOTD NOTDRV#NAMPTR HSCANFD #NAMPTR QNAMPTR R>}8* FCLOSER4 CKD0R>> HSCANFDH &CLOSERQCLSFLG;;IF STANDARD SCREENR FEXIT\ DOIOf  p LEN2z   MSG2 X}; EXIT!RSTSTA X; GOTD3;;Y=1 Q> 1 R@NAMPTR7 HNOTDRV 3;;Y=2 Q> : R@NAMPTR7 HNOTDRV 3;;Y=3 Q@NAM}PTR7 3;;Y=4R> M$ FCKMEM.R> D8 HNOTDRVBQ> UL R@NAMPTR7V HNOTDRV` 3;;Y=5jQ> Pt R@NAMPTR7~ HNOTDRV QC}TEST$>R> C HSET83 R@NAMPTR7 HNOTDRV SET83Q> . R@NAMPTR7 HNOTDRV3Q> S  R@NAMPTR7 HN}OTDRVA( LBOTHOK2 PBOTHOK<%>FQ> 8P P@NAMPTR7Z *BOTHOKd INOTDRVn JNOTDRVx KCLOSERX; CKMEMQ> E R@}NAMPTR7 HNOTDRV3$>@Q> M R@NAMPTR7 FSET8 !NOTDRVX;MSG1 }====== A Setting U}p ANAMEDK A130XE Ram DiskA= ===== A A" AA,LEN1 MSG16X;@ MSG2 }}JLEN2 MSG2TX;^DRIVE8 AD8:A=hX;rNDUP8 AD8:DUP.SYSA=|X;NDUPSYS AD1:DUP.SYSA=X;NDUP8C AD8}:DUPC.SYSA=X;NDCSYS AD1:DUPC.SYSA=X; BSS  ENTRYNDUPSYS AD1:DUP.SYSA=X;NDUP8C AD8M8: `ڕ ` BLV8hhՠԐJ ȱԝHȱԝIȱԝBȱԝDȱԝEeԨeHH Vhh`@I@ȍ }I@ӈ@@;A:X:L:O:N:I@@ȍό@Iψ@@` h8 ` 8kةE  } 8E o:  8:0^ 6C 8:L*9 8: 8 :cɈ4ij9hi9 8 6C 8:Le9 8: 8 : }80L3D  8n L980݂݀.݃`݄݄݆݇8~٩֩׭6CשD ץ }8 8 :L 8ȩ1ȩ:ȱM@DƩUȩPй6CЫȩ.ФȩSНم٠8$PpEЄȢ@M }L9} Setting Up 130XE Ram Disk }D8:D8:DUP.SYSD1:DUP.SYSD8:DUPC.SYSD1:DUPC.SYS } EI)AMYDOS 4.3 RAMDISK AUTORUN.SYS FILEAX;(-X; MYDOS 4.3 RAMDISK INSTALLATION PROGRAM2X;<X; LOCAL ZERO P}AGE RAMFX;P IOCBZ Zd PTRn NAMPTRx CLSFLG BOTHOK SVIOCBX;X; SYSTEM EQUATESX;}MEMTOP HATAB ICMDB ISTATC IBUFD ILENH IAUXJX;X; MYDOS SYSTEM DEFINITIONS}X;RAMDKU " STATE ,RDTEST06 CTEST6@X;J&X; HARDWARE AND OS ROM DEFINITIONSTX;^PAGE40@h POR}TBr AXLON| CIOVVX; X; MISCELLANEOUS DEFINITIONSX;!IOCB ;;FREE IOCB FOR MY USE0X;X; C}LOSE ANY IOCBX;CLOSEQ> ;;CLOSE ANY IOCB PICMD9 !CIOVX;X; OPEN FILEX;X; CALLING SEQUENCE:X; JS}R SOPEN&X; .BYTE AUX0X; .BYTE CMD:X; .WORD BUFFER ADDRESSDX;N SOPEN;X ;;LDA #IMM OPCODEbX;l&X; DO A READ/}WRITE TYPE I/O REQUESTvX;X; CALLING SEQUENCE:X; JSR DOIOX; .BYTE IOCBNOX; .WORD BUFFER LENGTHX; .BYTE }CMDX; .WORD BUFFER ADDRESSX; DOIO,7PPTR7 PPTR%> Q@PTR7  DDOIO1 PIAUX9  EXTRCB* DOI}O1>43> Q@PTR7H PILEN9R3\ Q@PTR7f PILEN9p XTRCB3z Q@PTR7 PICMD93 Q@PTR7 PIBUF93 Q@PTR7 }PIBUF9C,OPTR?Q> OPTR5C5$ CIOV;;DO I/O REQUEST.INOIOER;;NO ERROR?8)>BFNOIOER};;MAYBE EOF?L7V&7;;NO, DISCARD RETURN ADDR AND EXIT`Cj NOIOER:tX;~>X; CHECK FOR 130XE, RETURNS Z FLAG IF 130XE MEM}ORY MAPPINGX;CHKMAP%> $PAGE40$QPORTB;;SAVE CURRENT B-REG VALUEN> 'PAGE403!PPORTB;;TOGGLE MAP ENA}BLE BITN> 'PAGE40 PPORTB1 )PAGE40  &PAGE40 FRETRAMX;(AX; CHECK FOR AXLON, RETURNS Z FLAG IF RAM DI}SK MEMORY MAPPING2X;<Q> AF PNAMEDKPQ> XZPNAMEDKdQ> LnPNAMEDKxQ> OPNAMEDKQ> NPNAMEDK}Q> PAXLONN> $PAGE40%> 'PAGE403!PAXLON;;TOGGLE MAP ENABLE BIT 'PAGE40N> PAXLON1 )}PAGE40" &PAGE40, RETRAM:6X;@ X; GET THE NEXT FILE TO COPYJX;TNEXTFQ>UFILE^ PIBUF0hQ>UFILErPIB}UF0|Q> PICMD0Q> PILEN0Q>PILEN0$>0 CIOV; GNEXTFX QUFILER> 0 ENEXT}FX$>%>CPL1QUFILE8R> 0& DDOEXT0 PRFNAME9:2D3N)> X DCPL1bDOEXTQUFILE lR> ;;spacev FEX}TEXQ> . PRFNAME92%> CPL2QUFILE8R> 0 DEXTEX PRFNAME923)>  DCPL2 EXTEXQ> PRFNAM}E9 X;$> CPL3QRFNAME9*PNDUP894 FCPXIT>2H HCPL3RX;\CPXITQ>RDDIRf PIBUFpQ>RDDIRzP}IBUFQ>NDUP8 PIBUF Q>NDUP8PIBUF , NEXTFX:X;;X; COPY A SINGLE FILE FROM D1:RAMDI}SK:** TO THE RAMDISKX; COPY$>Q> PIAUX9Q> PICMD9 CIOV GCLOSIT$ $> . Q>8 PIAUX9B Q>L }PIAUX9V Q>` PICMD9j CIOVt GCLOSIT~ QIBUF PBFSAV QIBUF PBFSAV COPYL$> Q> PICM}D9 Q>BSS PIBUF9 Q>BSS PIBUF9 QBUFLEN PILEN9 QBUFLEN PILEN9 CIOV ICOPYFL( )>}2 HCANTCP< COPYFL$> F QILEN9P PILEN9Z QILEN9d PILEN9n QIBUF9x PIBUF9 QIBUF9 PIBUF}9 Q> PICMD9 CIOV GCANTCP QISTAT R> HCOPYL CLOSIT$> Q> PICMD9 CIOV $>  Q> } PICMD9" CIOV, :6 X;@ CANTCP CLOSITJ QBFSAVT PIBUF ^ QBFSAVh PIBUF r Q>!| PICMD $> ;;DELE}TE COPY IF ERROR! CIOV : X; "X; MAIN INITIALIZATION PROGRAM X; ENTRY$> SAVSTAQIOCBZ9 PIOCBSAV9 0 }ISAVSTA + CHKMAP;;CHECK FOR 130XE MEMORY MAPPING #FGOTRAM;;IF SO, INSTALL RAMDISK "'RAMDKU;;ELSE, DISABLE RAMDISK :;};AND RETURN X;& GOTRAM%>0 'IAUXIOCB: %'CLSFLG;;ASSUME E: NOT THE SCREEND Q> EN FNDEDVRHATAB8X FGOTEDVb 3}l 3v 3 )> DFNDEDV ESKIPBAN X; GOTEDVQHATAB8 HSKIPBAN QHATAB8 R> HSKIPBAN PCLSFLG X;} DOIO   LEN1    MSG1 X;* 0SKIPBANQRAMDKU;;MAKE D8:?? POINT TO RAMDISK4 L> 0> PDRIVE8H PNDUP8}R PNDUP8C\ PLABEL8f X;p %X; FORMAT THE RAMDISK (DRIVE D8:)z X; $>IOCB SOPEN     DRIVE8 IC}OPIES !EXIT X; #X; COPY DUP.SYS FROM D1: TO D8: X; COPIES$>0 Q> PICMD9 CIOV CLOSIT;$ QMEMTOP}. S>BSS8 PBUFLENBQMEMTOPL S>BSSV PBUFLEN` QCTESTjR> Ct HOPEN1~Q>NDCSYS PIBUFQ>NDCS}YSPIBUFQ>NDUP8C PIBUF Q>NDUP8CPIBUF  !CPYDUPX;OPEN1Q>NDUPSYS PIBU}FQ>NDUPSYSPIBUF Q>NDUP8 PIBUF Q>NDUP8(PIBUF 2CPYDUP COPY<X;F)X; COPY }CONTENTS OF RAMDISK DIRECTORYPX;ZQ>RDDIRd PIBUF0nQ>RDDIRxPIBUF0Q>PIAUX0Q> PI}AUX0Q> PICMD0$>0 CIOV GCPYXITX;CPYTO8 NEXTF ECPYXIT COPY !CPYTO8X;,X; RESET LO}CATION OF DUP.SYS AND MEM.SAV"X;,CPYXITQRDTEST6R>L@&HNOTRD;;IF NOT RDOS, MUST BE MYDOSJQRDTESTTR> D^&HNO}TRD;;JMP AND 'DOS.SYS' PRESENT?h TSTATEr;|!WSTATE;;SAY MEM.SAV IS ACTIVE !CHGNAMX; NOTRD$> CKMDS2FCHG}NAM;;JUST TO BE SAFE!Q>0R9 HCKMDSQ>R9 HCKMDSQ>.R9 HCKMDSQ>`R9&(HMAY42;;NO}T <4.2, MAYBE 4.2 OR LATER0Q>:2DR9N HCKMDSX2bR9l HCKMDSv FNOT42MAY42R9 HCKMDS.NOT42T9};;SAY MEM.SAV IS ACTIVE TO MYDOS;W9X;CHGNAMQ> PBOTHOKQ> PNAMPTRQ>PNAMPTR QCTEST}R> C  HSCANFDQ> PNAMPTR*2SCANFDQ> D;;FIND DUP.SYS AND MEM.SAV FILENAMES4%>> R@NAMPTR7H FGOTDRNOTDR}V#NAMPTR\ HSCANFDf#NAMPTRpQNAMPTRzR>8 FCLOSER CKD0R>И HSCANFD&CLOSERQCLSFLG;;IF STANDARD SCRE}EN FEXIT DOIO  LEN2   MSG2X; EXIT$>RSTSTAQIOCBSAV9 PIOCBZ90 IRSTSTA$:.!@ :}8X;BGOTD3;;Y=1LQ> 1V R@NAMPTR7` HNOTDRVj 3;;Y=2tQ> :~ R@NAMPTR7 HNOTDRV 3;;Y=3 Q@NAMPTR7 3;;Y=4R}> M FCKMEMR> D HNOTDRVQ> U R@NAMPTR7 HNOTDRV 3;;Y=5Q> P  R@NAMPTR7 HNOTDRV QCTEST($>2R> }C< HSET8F3P R@NAMPTR7Z HNOTDRVd SET83nQ> .x R@NAMPTR7 HNOTDRV3Q> S R@NAMPTR7 HNOTDRVA LBOT}HOK PBOTHOK%>LABEL8Q> 8 P@NAMPTR7 *BOTHOK INOTDRV JNOTDRV KCLOSERX;" CKMEMQ> E, R@NAMPTR76} HNOTDRV2@3J$>@TQ> M^ R@NAMPTR7h FSET8rNOTDRV2!NOTDRV|X;MSG1 }====== A Setting Up} ANAMEDK A130XE Ram DiskA= ===== A A AALEN1 MSG1X; MSG2 }}LEN2 MSG2X; BFSAV  BUFLEN X;DRIVE8 AD8:A=&X;0NDUP8 AD8:DUP.SYSA=:X;DNDUPSYS AD1:DU}P.SYSA=NX;XNDUP8C AD8:DUPC.SYSA=bX;lNDCSYS AD1:DUPC.SYSA=vX;RDDIR AD1:RAMDISK:ARFNAME A**A A} AFILE A AUFILE A AX;IOCBSAV X; BSS  ENTRYAME A**A Ao8 Setting Up 130XE Ram Disk }D8:D8:DUP.SYSD1:DUP.SYSD8:DUPC.SYSD1:DUPC.SYS 0w4 BLV8hhՠԐJ ȱԝHȱԝIȱԝBȱԝDȱԝEeԨeHH Vhh`@I@ȍI@ӈ@@;}A3X3L3O3N3I@@ȍό@Iψ@@`lt4urxy0 V80al40Zl40 T4 w4 }.T4 l40 T4 T4T44IT4Ud4e`JB V0s JKB V0]d4e4B}D4E4H4I V@ 8H9I4D5E B V0SɈЯ B V B V` 14d4d!b V` x}4 T0 `kةE  0E 3  044243 04LW30 B V 18阍4446C}=T4U1d4eL2&T4Ud4e 51It4u{zr0 V0 0 51L20L3D  8n L380݀}݂.݃`݄݄݆݇8~٩֩׭6CשD+ץ8 0 4x4 `l }ȩ1ȩ:ȱM@DлUеȩPЮ6CРȩ.ЙȩSВم٠8$PpE Ȣ@ML:3} Setting }Up 130XE Ram Disk }D8:D8:DUP.SYSD1:DUP.SYSD8:DUPC.SYSD1:DUPC.SYSD1:RAMDISK:** } 1 }D8:D8:DUP.SYSD1:DUP.SYSD8:DUPC.SYSD1:DUPC.SYSD1:RAMDISK:** These are the files for MYDOS 4.50:MYDOS.DCM - The Diskcommed disk containing the new bootable DOS, along with the RA}Mdisk utilities and source code.MAIN.DOC - The main documentation for MYDOS 4.50. Use your DOS to copy this file }78 8 8 8 Y0  Y0 Lc8 BED8EHI V`ERROR - CAN'T LOAD 850 DRIVER 8} 8C8 De i L8P?@ ` L7=`9gC cd)0 )Cɛ 8`0d  )0 }`Cd)C JCI fCd  ddCddx,d0 } cX` cdddȌdCd)  )ECI  ddCFCd)0C ) 0 }0d`,d0,d; Aa0P }HJJJ0++h0 ) dd`8dd8dd)֩ 8c0d c :cR@  } LYd0`d* @d`,dpdix aXdd`4өddddd <`") J }jdHidH``,d`p` Aa0d-` 8c0dQddy cLbdsxddddҩxҭd)dҍҹdҍҩҍ }ҍҍҠ drd dZdcd)d) cXLb*d+dLb*d+dd*`,dp*)Js  }Q*Jj cU*J)P %*I cLbd *d 8c0dW" ea0G S ȌȌZLY,ldHH } a@ ddGؘHdd ) c1 d ҌdI%) %ҥ c,hh@ؘH chh@ Ҭddҍ I) d }dd dd`Ҍd`,d0,d0Pd0d,,hh` a0` e R`Rd8]d`ua }a~`_`aabbbactctch>!Ӄ2.PPpQ >Q>QP2 LE=. oGnV( } } }U c8ԩ`բfeօ֐א8ԑȱՑۢgֽ,gg׽,g }8ԑرՑץ (d )d' d ح٩֩`ע֑L*d  %+  '    }       0     ;&Ga&bbc0dVdufIa(bbc+dQdqfe p`9gC cd)0 )Cɛ 8`0d  )0 }`Cd)C JCI fCd  ddCddx,d0$} cX` cdddȌdCd)  )ECI  ddCFCd)0C ) 0 }0d`,d0,d; Aa0P$}HJJJ0++h0 ) dd`8dd8dd)֩ 8c0d c :cR@ $} LYd0`d* @d`,dpdix aXdd`4өddddd <`") J $}jdHidH``,d`p` Aa0d-` 8c0dQddy cLbdsxddddҩxҭd)dҍҹdҍҩҍ$}ҍҍҠ drd dZdcd)d) cXLb*d+dLb*d+dd*`,dp*)Js $}Q*Jj cU*J)P %*I cLbd *d 8c0dW" ea0G֌ S ȌȌZLY,ldHH$} a@ ddGؘHdd ) c1 d ҌdI%) %ҥ c,hh@ؘH chh@ Ҭddҍ I) d$}dd dd`Ҍd`,d0,d0Pd0d,,hh` a0` e R`Rd8]d`ua$}a~`_`aabbbactctch>!Ӄ2.PPpQ >Q>QP2 LE=. oGnV($}$}$}U c8ԩ`բfeօ֐א8ԑȱՑۢgֽ,gg׽,g$}8ԑرՑץ (d )d' d ح٩֩`ע֑L*d  %+  '   $}       0     ;&Ga&bbc0dVdufIa(bbc+dQdqfe$po}L {LSu > (}l) ~/srڏqj ii #y$Ң0P@ꠢ!pQi 6!pQ #62(} +!8iPXxxVrq"/MWq ``s6@#( Hh +iĠ `DKEKꢘRPQs>xBaV_8ɠxxz{_O+ +.#/?](}m sv cf/Rv3N;BCr= Tp%+RDETOTN:3YF STOD Z 7  Gv(} cS]"  GF I<d  d]f6SUDINF ]:6SnwFK:6ST TW(}EFK:'ZFESSC @:; LSSONTSD Q::STSC K?+RO FSSF RYRD_(}E7HCTRDL TS\#DS RSR lf ơ!pQNbI/(Vt-P& 9 +b`!pQ! (}Ï͎ D #yK[ݯrpL#L(ڕ mnmo(}:H-/"pQ 6 "pQ!"pQt[AvnGFJqv h4 ip%>CqYLq9HW D ^~ޏ#sIG(}+ * #^~AC"pQMq9iij$Yj$YjJfUr ^+6&[͔ݣOҪqj(}JfUpVn^ͳŸ).^’@ 7 ?6>{%*Jf*묻%.`jV5*`0)! #j)}r8*B鍏TV!pQVWHaȡ!Ha) K pqyI Oܗ' 6O5~"pQ*)}6 )JJHdUUKl9\+(&[ikt qjcJJ_61C"pQ26"pQ-(6Ѣ"pQ)}*loöqh2Ѷi 8 6JfUy)HdKn|'((6 R'pQM'pQ!詅JfU} )}ikt qjcJJ_61C\^&pQM§'pQM-KH SB NC Ep"SΛ6Rv cISG Jp"S)}U%EOTAAN Wv |?"STOE ^~ 򀢽8(2*$]LŌIL(꥽8>W)}#pQ!GL )mnDo3茉鍈)pQ!+5+>+5+>+5+>+5+>+5+>+5+>+5+> ; 鍆c cͧ *.8R쵶) }haY\\茎鍉r]V)JfUyVn^+68#ͧ ).8R쵶I$b J$b J$b  i]Kg)HY\\]VJfUy)HdKn) }~\^'66(&=@*rͧ ).8RI$b J$b J$b  i]Kg)HY` "   "')}      )}~         G(    )}?.   oooooͭoomooo)}mooϱEϑ% iːe˅ː̱molol|(g MYDOS Version 4 Technical User Guide Revision 4.50 for Atari Home Computers Copyright (C) 1988 by WORDMARK Systems and t-}he authors: Charles Marslett 2705 Pinewood Dr. Garland, TX 75042 CIS: 73317,3662 UseNet: CHASM@KILLER.DALLAS.TX.US an-}d Robert Puff Suite 222 2117 Buffalo Rd. Rochester, NY 14624 GEnie: BOB.PUFF This software may be freely used and dis-}tributed provided that this copyright notice is left intact, and provided that: (1) The source code in machine readable for-}m is provided with any binary distribution, or made available at no additional cost to the recipients of the binary distribut-}ion. (2) A binary version of a derivative work may be sold for a reasonable distribution charge (less than $50), and the so-}urce code in machine readable format must be available. (3) A derivative work may not impose and restriction on the free di-}stribution of the source code. MYDOS Technical Manual page 1 Version 4.50 IV. THE MENU COMMANDS: The MEM.SAV feature Wh-}enever the DOS menu is entered, MYDOS will load DUP.SYS from drive 1. If DUP.SYS cannot be found on drive 1, it will look for-} it on drive 2, 3, etc... until it finds it. Loading DUP.SYS will overwrite a good chunk of lower memory, and will wipe out-} the data in most languages. Here's where MEM.SAV comes into play. When this feature is enabled (by going to the menu and pre-}ssing "N" and [RETURN], then "B" to exit back), the memory that DUP.SYS would overwrite is saved to the file "MEM.SAV" on dri-}ve 1 (may be drive 8 if you use one of the RAMBOOT programs on the disk). It then loads the DUP.SYS. When you press "B" to re-}turn, or if you use the "N" command of the menu, MYDOS will load back in the MEM.SAV, thus restoring the overwritten memory. - }The result is your program remains intact. V. FILE MANAGER FUNCTIONS PROVIDED THROUGH CIO MYDOS supports all CIO calls su-!}pported by ATARI DOS 2, with the following modifications to the OPEN (Function code 3) and the FORMAT (Function code 254) fun-"}ctions. Three additional CIO functions have been added: MAKE DIRECTORY (Function code 34 & 42), SET DIRECTORY (Function code -#}41) and LOAD MEMORY (Function code 39 & 40). The OPEN function in ATARI DOS 2 does not use the data provided in the AUX2 by-$}te, but in MYDOS when the AUX1 byte is 8 (the file is opened for creation or replacement), the AUX2 byte contains two flags t-%}hat control the file format, and whether it will be created locked or not. If AUX2 bit 2 is set, the file will be written i-&}n MYDOS 4 format, and may contain sectors beyond absolute sector 1023. Such a file may not (easily) be read by DOSes other th-'}an MYDOS. This is the only format used with high capacity disks. If AUX2 bit 5 is set, the file will be written with the "LOC-(}KED" bit in the directory set initially. This is provided for use by multi-tasking functions (such as a print spooler, sequen-)}tial file pre-reading function or other enhancements one might want to make to the standard OS or DOS provided functions). -*}The FORMAT function in ATARI DOS 2 does not provide for any variations to the standard disk usage: in MYDOS the contents of t-+}he AUX1 and AUX2 bytes are used to specify the number of sectors on the disk being formatted, and whether the disk needs to b-,}e formatted by the controller as well as needing directory initialization. Bit 7 of AUX1 is set to skip the physical formatti--}ng of the entire disk surface when it is not required, and bits 6-0 of AUX1 and all of AUX2 are used to specify the number of-.} sectors on the disk being created (if all 15 bits are zero, the disk is assumed to be the size defined by the drive configur-/}ation). This permits formatting a single sided diskette on double sided drives, for example. Be careful when using this featu-0}re. MYDOS Technical Manual page 2 Version 4.50 To load (and possibly execute) a program file, MYDOS provides the CIO fun-1}ction 39 call. CIO function 40 will do the same; it was included for compatibility with programs written for SpartaDOS. From -2}BASIC you can load and execute a program by executing the line: XIO 39, #3, 4, 0, "D:MYPROG.OBJ". Any inactive IOCB can be us-3}ed, and if AUX1=4 both the INIT and the RUN entries will be executed. If AUX1=5, the RUN entry will be executed; if AUX1=6, t-4}he INIT entry will be executed; and if AUX1=7, the file will be loaded without executing either entry point. Any other values-5} of AUX1 will return an error code and do nothing. Another XIO call, XIO 34, has been added to create a directory. CIO func-6}tion 42 performs exactly the same thing, and has been provided for compatibility with programs written for SpartaDOS. When a -7}directory is created, the name used must not match any existing file or directory in its parent (for example if the directory-8} to be created is named "D1:TEST>BUGS", there can be no other directory in the main directory named "TEST" nor a file named "-9}TEST" there. From BASIC, the XIO 34 call is "XIO 34, #iocb, 8, 0, dirname", where "iocb" is any available unit number, and -:}"dirname" is the name of the new directory (it does not end with a trailing ":" or ">"). The final function added to those -;}provided by ATARI DOS 2 is XIO 41, to define the default directory. The default directory is that which will be searched for -<}a file if the file name begins with "D:". In ATARI DOS 2 this default directory is always "D1:" but in MYDOS, the default dir-=}ectory can be any root or subdirectory on any disk in the system. The buffer address passed to CIO in the XIO 41 call is the ->}address of a string that contains the default directory name, terminated with either an end of line ($9B) or a null byte ($00-?}). The directory will be accessed before returning to the calling program so that an error in specifying the directory will b-@}e reported as early as possible. VI. CIO FUNCTION CODES PROVIDED BY MYDOS 4.50 Function code 3, OPEN The open function -A}uses the buffer address to point to an ATASCII string terminated with a non-alphanumeric character or wildcard. This string i-B}s the name of the file to be accessed or created. A good terminator for this string is either a null ($00) or an end of line -C}($9B). The AUX1 byte defines the usage of the file: 4 for input, 6 for directory data reading, 8 for creating/replacing out-D}put, 9 for creating/appending output and 12 for input/update (without extension). The AUX2 byte is used when a file is replac-E}ed or created, and contains two significant bits: bit 2 set causes the MYDOS format to be used even if the diskette is a 40 t-F}rack single sided diskette; and bit 6 set results in the file being LOCKed initially without and additional CIO call. For inp-G}ut, update or directory access AUX2 is ignored, and the length is always ignored. In normal use, AUX2 is set to zero emulatin-H}g ATARI DOS 2 usage. MYDOS Technical Manual page 3 Version 4.50 MYDOS does not leave partially full sectors when appendin-I}g to a file. This has two positive effects on programs which open files in append mode: the open will fail if the file cannot-J} be appended to rather than the close (in ATARI DOS), and the file size will not change if a file appended to is copied to an-K}other disk (in ATARI DOS it may grow smaller). Function code 5, GET RECORD The get record function reads a line of data i-L}nto a buffer, the buffer being defined by its starting address and length. The line is defined as the data bytes in the file -M}up to an end of line character ($9B) or until the buffer is full, whichever occurs first. The line is also terminated if the -N}end of the file is read. All record I/O is buffered in MYDOS, so record transfers are necessarily slower than unbuffered I/O.-O} No other fields of the IOCB are referenced or needed. Note that the ATARI ROM OS supports single byte I/O through the accu-P}mulator if the buffer length is set to 0. In this case, GET RECORD and GET CHARACTERS function exactly the same way. Functi-Q}on code 7, GET CHARACTERS The get characters function reads a fixed number of bytes from a file into a buffer, the buffer b-R}eing defined by its address and length (two 16-bit numbers in the IOCB). The only cases where the buffer is not always filled-S} is if the end of the file is read, or the file cannot be read withut error. As is the case with get record calls, a single b-T}yte may be read into the accumulator by setting the length field to zero. A get character CIO call will perform unbuffered I/-U}O if the buffer is longer than 256 bytes (ATARI DOS 2 sets a similar threshold at 128 bytes). For this reason a single long i-V}nput is considerably faster than several short ones. Only the buffer address and length in the IOCB are used by the get cha-W}racters function. Function code 9, PUT RECORD The put record command will write a single line to an output file: the line-X} defined by the starting address of the buffer and either the length of the buffer if no end of line ($9B) bytes are encounte-Y}red, or the first end-of-line byte. Only the buffer address and length in the IOCB are used in this command. MYDOS Technica-Z}l Manual page 4 Version 4.50 Function code 11, PUT CHARACTERS The put characters command will write the contents of a buf-[}fer defined by its address and length (in the IOCB) to a file opened for output. Unless an error occurs, the entire buffer is-\} always written to the file unless the write is to an output/update file and the end of the file is reached or the write is t-]}o an output/append or create file and the disk has filled. Only the buffer address and length fields in the IOCB are used whe-^}n the put character function is used. The single byte put character (using the A register as data) is supported by setting th-_}e length bytes to 0. Function code 12, CLOSE A FILE To terminate use of a file (and for an output file, to write the inco-`}mplete buffer to the disk) the IOCB used to access the file should be closed. This is done by setting the function code in th-a}e IOCB to 12 and calling CIO. The close function does not use any of the data in the IOCB for any purpose whatsoever. Funct-b}ion code 13, READ STATUS The read status command is issued to an unopened IOCB, with the buffer address that of a file name-c} string. If the file is not present, that error condition is returned, if it is locked, that error condition is returned; oth-d}erwise, a normal completion code is returned. Only the function code and the buffer address in the IOCB are needed. Functio-e}n code 32, RENAME A FILE The rename function is passed a character string (pointed to by the buffer address in the IOCB), t-f}he first part of the string being a file name identifying the file or files to be renamed. Following a single invalid charact-g}er (one invalid in the file name, that is) a simple file name must also be present: this second file name cannot include any -q}.B#DOS SYSB6'DUP SYSB,]RAMBOOT M65BAUTORUN SYSB9RAMBOOT3M65B RAMBOOT3AUTBREAD ME BATARI850AUTBATR232 AUTBATR232HDAUTBVTOCFIX COMBDTECH DOCB>_VTOCFIX DOCdrive or directory names. An example, using a comma as the invalid character, is "D2:TEST>PGMS>A.OUT,ZCPY" which will change -r}the string needed to access the file "D2:TEST>PGMS>A.OUT" to "D2:TEST>PGMS>ZCPY" -- Note that only the last file name (if sub-s}directories are used) can be changed; to change "PGMS" to "MLPROGS", the buffer must contain "D2:TEST>PGMS,MLPROGS". Wild c-t}ard characters should appear only in the part of the file name following the last ":" or ">", and their effect is best descri-u}bed by an example. The string "D2:TEST:*.*,*.XYZ" will rename all the files in the TEST directory, making each extension ".XY-v}Z". If the directory had the files "ATEST.BAS", "LOG", and "REPORT.XYZ" in it, the result would be a directory with "ATEST.XY-w}Z", "LOG.XYZ" and "REPORT.XYZ" in it. MYDOS Technical Manual page 5 Version 4.50 Function code 33, DELETE A FILE The de-x}lete function removes any files that match the file name string pointed to by the buffer address in the IOCB. Files locked wi-y}ll not be deleted, so must be unlocked before being removed, and subdirectories that are not empty (that have a file in them)-z} cannot be deleted. If either case is attempted, the corresponding error code is returned. Otherwise, the files are removed a-{}nd their data areas are returned to the free space on the disk. Files that have been deleted may be "undeleted" by various ut-|}ility programs ONLY if the data has not been overwritten. If you write to the disk after you have just deleted a file on that-}} disk, chances are that you will not be able to recover the file. Function code 34, MAKE DIRECTORY The make directory fun-~}ction will create a new subdirectory on a disk (it is not used to create the first directory, that is the "root directory" id-}entified by the drive specification "D1:", for example). It is called through CIO by storing the address of the new directory-}'s name in the IOCB buffer address and setting up AUX1 and AUX2 as for an open call (see Function code 3), normally AUX1=8 an-}d AUX2=0. This function has no effect on the current default directory; and if it is desired to make the newly created direct-}ory the default one, the program must make a set directory call (Function code 41) following the make directory call (the ord-}er is very important, because the default directory cannot be set to a nonexistent directory). CIO function code 42 may also -}be used to access this function; the parameters are the same. Function code 35, LOCK FILE A file can be "locked" so that -}it may not be modified or deleted inadvertently, by calling CIO with the lock function. The buffer address is used to point t-}o a file name string that identifies the files on the disk to be locked. The only file modification that can be performed on -}a locked file is to unlock it. The lock function can be requested for a file already locked, and it will return no error (unl-}ike other file modification calls to CIO), but the status of the file will not have been changed. Function code 36, UNLOCK -}FILE The unlock function is identical to the lock function except that is re-enables the modification or deletion of an unl-}ocked file. A file that is not locked can be unlocked with no error returned and no change in the file's status. MYDOS Tech-}nical Manual page 6 Version 4.50 Function code 37, POINT TO POSITION IN FILE The point function is passed the 3-byte disk-} address to be positioned to in the twelfth through fourteenth bytes of the IOCB. On return, the next byte read from that IOC-}B will be the one that was read or written next after the corresponding note function was executed. A point call to CIO can o-}nly be made if the file can be used for input: that is, if it is opened for input or update processing. The first two bytes o-}f the disk address are a sector number (in low byte / high byte format) and the third is the byte (offset) within the sector.-} If a file is being appended to (opened with AUX1=9), a point function call made before closing the file may return an unex-}pected error (this cannot happen with the note function, however). A problem can occur if the file being pointed to is in t-}he last half of a 16 Megabyte disk: Atari BASICs do not allow sector numberto be greater than 32767. A solution is to use t-}he following BASICsubstitute for the POINT statement (with attention paid to the factthe the two AUX bytes must match the-} two used to open the file):OPEN #K,AUX1,AUX2,"D5:BIGFILE"NOTE #K,SECTOR,BYTEPOKE 844+16*K,ASC(CHR$(SECTOR)):POKE 845+1-}6*K,INT(SECTOR/256)POKE 846+16*K,BYTE: XIO 37,#K,AUX1,AUX2,"D:" Function code 38, NOTE POSITION IN FILE The note functi-}on returns in the twelfth through fourteenth bytes of the IOCB a 3-byte disk address that may be used at a later time to repo-}sition the file using the point function. The note function can be used on files open for input, output, update or appending.-} The three bytes returned are the low byte of the sector address, the high byte of the sector address, and the byte (offset) -}within the sector, in that order. Function code 39, LOAD MEMORY The load memory function takes a file formatted in the AT-}ARI DOS 2 executable program format (generated by the "K" command, by the assembler/editor cartridge, by AMAC or MAC65, or by-} any of several compilers for the ATARI computers), and loads its contents into memory as specified in the file. No offset co-}ntrol is provided and no part of memory is protected from the loading process. The initialization and execution addresses (if-} any) can be individually enabled and disabled, to permit loading and patching a program then writing it back to the disk for-} normal use. To load a program into memory, the address of the file name string is stored into the buffer address, and a va-}lue of 4, 5, 6 or 7 MYDOS Technical Manual page 7 Version 4.50 is stored into the AUX1 field. If AUX1 is 4, both the init-}ialization routines and the run address are executed after closing the IOCB, but before returning to the calling program. If -}AUX1 is 5, the initialization routines are disabled, but the program will be run. If AUX1 is 6, the initialization routines w-}ill be run, but the program execute address will be loaded and ignored. If AUX1 is 7, the text of the program will be loaded -}into memory, but no other activity will be performed. CIO function code 40 performs the exact same function as this (39). F-}unction code 41, SET DEFAULT DIRECTORY The set directory command will use the contents of the buffer as a file name and ope-}n the specified file, determining if that file is a valid directory. If so, it will become the new default directory. File na-}mes of the form "D:..." will be assumed to be in the default directory (which may be on any disk in the system and may be eit-}her the root directory of that disk or a subdirectory). Only the buffer address and the function code are significant when -}setting the default directory. Function code 254, FORMAT A DISKETTE The format function uses the contents of the buffer p-}ointed to by the buffer address to identify the drive containing the diskette to be formatted. If both AUX1 and AUX2 are zero-}, the disk is formatted according to the capacity data in the system control table defined using the "O" command. If AUX2 bit-} 7 is set to 1, the format operation is skipped and an empty file system is written to the diskette. (This assumes the disk i-}s preformatted.) The remaining 15 bits of AUX1 and AUX2 are used as a 15 bit number to specify the number of sectors availabl-}e on the disk (permitting the use of the last few sectors of a disk outside the file system if desired). You may format a dis-}k in enhanced density (MYDOS compatible - not DOS 2.5 type format) by setting AUX1 to 1, and AUX2 to 0. VII. DISK STRUCTURE-}S SUPPORTING MYDOS 4.50 MYDOS uses the first three sectors of a disk to hold some disk information and the initial boot pro-}gram if the drive contains DOS.SYS and DUP.SYS. Sector $168 (and sectors $167, $166, $165, etc., if the disk is formatted as -}a higher capacity disk not compatible with ATARI DOS 2) is used to hold a bit map of available sectors and several flag byte -}identifying the default format of files on the disk. Sectors $169 through $170 contain main disk directory data, identifying -}the files on the disk, their sizes and their starting sector number. Note that this usage, when the diskette is a 719 secto-}r volume declared to be DOS 2 compatible, is in fact exactly the same as ATARI MYDOS Technical Manual page 8 Version 4.50-} DOS 2 would make of the disk. The default single sided format differs only in that sector 720 is not left out of the file sy-}stem in MYDOS but is used to provide 708 free sectors on an empty diskette rather than 707. The only significant change made -}when the high capacity format is chosen are that enough sectors before sector $168 are allocated to assign a bit for each sec-}tor that may be allocated for a file or for use by the system (VTOC sectors). The high capacity disk directory may be read by-} ATARI DOS 2, but the data in the files can only be accessed if it falls in the first 1023 sectors of the disk and then only -}if the file number checking code in DOS 2 is disabled. This format allows MYDOS to support accessing disks of up to 65,535 se-}ctors of 256 bytes each (approximately 16 Mbytes). Compatibility with DOS 2.0 is further reduced if subdirectories are used-}: to ATARI DOS, the subdirectories will appear to be simple files with unreadable contents. The subdirectory's files will not-} be accessible and the subdirectory can be damaged if it is written to (even by appending). For this reason disks sold to the-} general public, exchanged with friends, and so forth, should not contain subdirectories unless there is reason to require th-}at the disk be used with MYDOS. A further problem with exchanging diskettes is that there are many different formats are used-} by vendors of double sided disk systems for the ATARI. For this reason, double sided disks not only require both computers u-}se MYDOS, but also require that they use the same disk system (PERCOM, SWP, Astra, Supra or whatever). VIII. MYDOS 4 MEMORY-} MAP The MYDOS 4.50 disk operating system occupies the area from $0700 to $1EE9 at all times, and when the menu is active, -}it also occupies the area from $294A to $4331. In addition, the first 16 bytes of the floating point workspace ($D4 - $E3) ar-}e used by MYDOS at that time. Unlike ATARI DOS 2, MYDOS utility program (DUP.SYS) also calls the floating point ROM entry poi-}nts. The nonresident part of MYDOS 4.50 starts loading at $294A, reserving the area from $1EE9 to $2949 for disk buffers and -}drivers. Allocating three disk buffers leaves approximately 2500 bytes for resident drivers that will not be overwritten by t-}he nonresident portion of DOS (contained in DUP.SYS). IX. CUSTOMIZING A SYSTEM DISK RAMdisk Configurations The RAMdisk -}driver included in MYDOS 4.50 is already configured for the Atari 130XE computer and uses its banked 64K bank of memory for t-}he RAMdisk providing 499 free (single density, 128 byte) sectors. The "O" command provides an easy way to alter the operation-} of the RAMdisk driver for other common banked memory systems. Most memory upgrades for the 800XL and 130XE use the same mapp-}ing address (the PORTB pins of the PIA chip in the computer). A 128K RAMdisk can be used in an Atari 130XE using the last unu-}sed pin of that port with no tradeoff (selecting the 64K bank is done with bit 6 of PORTB). If MYDOS Technical Manual page -}9 Version 4.50 you have such a system, enter a "2" for the page sequence, or just use the default sequence (answer "Y" to t-}he question "Use default page sequence..."). If, instead of adding one or two rows of 64K memory chips, the enhancement rep-}laces the entire memory of the computer with a single bank of 256K memory chips, then the banked memory is a total of 192K an-}d 4 bits of the port must be used to select the memory bank. Often the bits used are bits 0 and 1 (as in the 130XE) along wit-}h bit 6 (as in the expansion above) and bit 5 (used in the 130XE to control banking screen memory). Programs that bank screen-} memory (a very odd proposition because of the difficulty of obtaining a useful sharing of the banked memory page bits betwee-}n the screen memory and the program) will not work with this enhancement. This is the approach used in the Newell Industries -}256K upgrade for the Atari 800XL. If the enhancement is done externally or to an Atari 800 (with its internal expansion slo-}ts), a new dedicated register may be used to map the 16K pages. The Axlon RAMPOWER 128 card for the Atari 800 works this way.-} In such a system, the pages are selected by writing a page number to the mapping address and no sharing of the 8 bit byte is-} necessary. The address of the mapping register is entered explicitly and page sequence "5" is the proper sequence. The pag-}e sequence table coded into MYDOS is actually one 32 byte sequence table of numbers to be stored in the mapping register. MYD-}OS 4.50 has a feature that allows you to skip all this configuration stuff, if the upgrade is XE compatible. In the configura-}tion, MYDOS will create a custom page sequence for your memory upgrade, and update its pointers. If you choose to enter our o-}wn page sequence, the number of 16K pages determines the number of bytes to be used. You may use one of the four built-in pag-}e sequences by entering a single sequence number:Seq. No.Page ValuesOR -}Value0E3, E7, EB, EF, C3, C7, CB, CF, 83, 87, 8B, 8F, A3, A7, AB, AF001C3, C7, CB, CF, 83, 87, 8B, 8F-}, E3, E7, EB, EF, A3, A7, AB, AF002A3, A7, AB, AF, C3, C7, CB, CF, E3, E7, EB, EF, 83, 87, 8B, 8F005-}00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, 0FFF As an example, if you want to use BASIC/XE i-}n extended mode (or use a program that uses the standard XE banks: pages E3, E7, EB, and EF), and you have a RAMBO XL upgrade-}, set your memory size to 128K, and use the page sequence of: 1 or C3,C7,CB,CF,83,87,8B,8F,00 This will configure the RAMdisk-} to use only that part of the banked memory not used by BASIC/XE. MYDOS Technical Manual page 10 Version 4.50 The f-}ile RAMBOOT.M65, the MAC/65 assembler source code for which is in the file RAMBOOT.AUT, is an AUTORUN.SYS file that simulates-} the operation of Atari DOS 2.5 and its RAMdisk. It "formats" the RAMdisk and copies DUP.SYS to it, as well as setting the RA-}Mdisk unit number and the unit used to access the DUP.SYS and MEM.SAV files to 8. By modifying the code in the source file -}and creating a modified AUTORUN.SYS file, the drive used to save MEM.SAV and fetch DUP.SYS can be modified, other files than -}just DUP.SYS can be copied to the RAMdisk when the system is booted, or any other operation could be performed that you find -}useful. Number of Files Open at Once The number of files that may be simultaneously open is set with the same byte as in -}ATARI DOS 2: location $0709 (decimal 1801). This byte contains a number from 1 to 16 setting the number of disk files that ma-}y be open at the same time. Normally it is set to 3, the smallest number that supports all the functions in the MYDOS menu. S-}pecifically, a copy from one disk file to another requires three open disk files. The value in the distributed version of MYD-}OS 4.50 is three. To permit more or fewer files open, use the "O" command followed by a RETURN. To permanently change the max-}imum number of files, use the "H" command to write a modified MYDOS system to a disk. Each file that may be open at one time -}requires the allocation of a 256 byte buffer so setting this value to 7 (instead of 3) will cause MYDOS to be 1024 bytes long-}er than before and the programs loaded must begin no lower than $22E9 (instead of $1EE9). In corresponding fashion, by settin-}g the value to 1, a BBS program can be loaded in with 512 bytes of additional memory if only one disk file is ever open at on-}e time (commonly true of bulletin board programs). Controlling the Disk Drives Accessed by MYDOS Like ATARI DOS 2, MYDOS -}automatically identifies the disk drives that are present when booted up initially and any time it is reinitialized (some pro-}grams do this on exiting to the DOS, and it is always done if the RESET key is pressed). MYDOS 4.50 is distributed with drive-}s 1 and 2 configured, all others are omitted in order to speed up the booting process. To modify the maximum configuration MY-}DOS will use, invoke the "O" command for each drive to be added to (or removed from) the system. Pressing the RESET key will -}then use this value to redefine the system to configure the drive(s). To permanently change the maximum drive configuration, -}use the "H" command, writing a new copy of MYDOS back to the system disk. Selecting or Disabling Write-with-Verify MYDOS -}4.50 is distributed with the write-with-verify disabled. Most drives are very reliable, and will never give you a problem. If-} MYDOS Technical Manual page 11 Version 4.50 however, something happens (such as dust, a scratch in the oxide coating, or-} some other problem that may have arisen since the diskette was formatted), the error might not be detected. In short, if you-} are working with something that you want to be absolutely positive that is perfectly saved, enable the verify. This will cau-}se the drive to read back each sector after it has been written, taking about three times the time normally taken on a write -}without verify. The byte at location $0779 (1913 decimal) controls all write operations to the disk. If the value "poked" i-}nto it is $57 (87 decimal), then all writes will be read back to verify the action was successful. If the value "poked" into -}$0779 is $50 (80 decimal) then writes will be assumed successful, and will be performed in about one third the usual time. No.}te that this address is not the same as in MYDOS 4.0 and 4.1 (where it was $0770 or 1904 decimal). This byte is defined, alon.}g with the count of the number of buffers to be allocated when the file manager is initialized, whenever the "O" command is i.}nvoked with no drive specified (only a RETURN is entered in response to the drive number query). To permanently alter it, rew.}rite MYDOS back to the disk using the "H" command after changing it. X. DISK DRIVE INTERFACE (via SIO) The physical disk .}drives and diskettes are external to the ATARI home computers and the ones supported by MYDOS 4 are normally attached to the .}"serial interface connector" on the right side or back of the computer. High capacity or "hard" disks may also be connected t.}o the parallel port of 800XL and 130XE computers. The software in the operating system (OS ROMs) to access the devices attach.}ed to either connector is call the "serial I/O driver" or SIO for short. The MYDOS disk operating system uses this lower leve.}l driver to pass all commands and information to and from the physical disk drive. Several commands were defined by ATARI to . }communicate with the 810 disk drive and most vendors of high performance disk systems for the Atari have adopted a slightly e. }xtended version of this set of commands. MYDOS will operate with any disk system that supports the original 810 set, but the . }full set of commands is required to support all the functions. An additional function necessary to perform automatic density . }selection is that the drive should automatically identify the density of a diskette inserted in it if the first operation is . }a read of sector 1 (this is necessary if the drive is to boot either a double or single density diskette). The minimum set .}of disk drive functions to support MYDOS (or ATARI DOS 2 for that matter) are:DeviceUnitCommandDirectionByt.}eCt.AuxBytesFunction $31Drive#$21FromDrive128/2560FORMATDISK $31Drive#$50.}ToDrive128/2561to720WRITE(novfy) $31Drive#$52FromDrive128/2561to720READ $31.}Drive#$53FromDrive40READSTATUS $31Drive#$57ToDrive128/2561to720.}WRITE(verify) MYDOS Technical Manual page 12 Version 4.50Anadditionalcommandtoformatadiskinenhanceddensityis:.} $31Drive#$22FromDrive1280FORMATDISK The byte count is always 128 for a single.} density drive, and is 128 for the first three sectors (1, 2, and 3) of a double density drive. All other sectors on a double.} density drive are 256 bytes long. The FORMAT function is always called with a sector number in the range of 4 to 720. It e.}xpects 128 bytes from a single density drive and 256 bytes from a double density drive. The first byte returned by the READ.} STATUS command is expected to indicate the sector size -- if bit 5 is a 1 (bit 7 is the sign bit) then the sectors are large.} (256 bytes), otherwise, they are small (128 bytes). The auxiliary bytes are treated as an address to a sector on the diske.}tte, and range from 1 to 720 (when in DOS 2 compatible mode) or from 1 to 65,535 (when accessing large capacity disk drives)..} The additional functions used to configure disk drives dynamically are:DeviceUnitCommandDirectionByteCt.}.AuxBytesFunction$31Drive#$4EFromDrive121to720READCFG. $31Drive#$4F.}To Drive121 to 720WRITE CFG. These commands are used to configure the drives identified as configurable whe.}n the computer is booted: if there is a possibility that a drive does not support these functions, it should be defined as no.}t configurable (such as the Atari 810). These commands are used by the "P" command, permitting reconfiguration of a disk driv.}e on demand - to format a diskette, for example. (To format a disk on an Indus drive, issue the "P" command to manually chang. }e the density on the drive, then issue the "I" command). The individual bytes transferred by these commands are defined as .!}follows: byte 0: Tracks per side (40 for a standard disk drive) byte 1: Disk Drive Step Rate (as defined by Western Digital) ."}byte 2: Sectors/Track -- high byte (usually 0) byte 3: Sectors/Track -- low byte(18 for standard diskettes) byte 4: Side Code.#} (0=single sided, 1=double sided) byte 5: Disk Type Code -- bit 2: 0=single density, 1=double density bit 1: 0=5 1/4 inch dis.$}kette, 1=8 inch diskette drive byte 6: High byte of Bytes/Sector (0 for single density) byte 7: Low byte of Bytes/Sector (128.%} for single density) byte 8: Translation control bit 7: 1=40 trk. disk I/O on an 80 trk. drive MYDOS Technical Manual page .&}13 Version 4.50 bit 6: Always 1 (to indicate drive present) bit 1: 1=Handle sectors 1, 2, and 3 as full size sectors bit 0:.'} 1=Sectors number 0-17 (for example), not 1-18 bytes 9-11 are not used by MYDOS (see the drive documentation as to how they a.(}re to be set -- usually zeroes) MYDOS 4.50 (unlike version 3 of MYDOS) always issues a read configuration command before wr.)}iting the configuration to the drive and the contents of bytes 9-11 are written exactly as they were previously read (so they.*} will be unchanged). An additional change in the usage of this command occurs when a high capacity drive (hard disk) is con.+}figured. The configuration data for such a drive is very complex and is usually built into the drive controller or written to.,} a "magic" location on the disk. To support partitioning of very large drives (larger than 16 Megabytes), MYDOS issues a writ.-}e configuration command with the number of sectors per track set to number of sectors on the disk (as defined in the "O" comm..}and) and the number of tracks set to 1. All high capacity disks are large sector drives (using 256 byte sectors). XI. RAMDI./}SK INTERFACE The driver built into MYDOS is intended to eliminate the need for a "driver" to use common RAMdisks. The requi.0}red characteristics of the hardware can be most easily described by explaining what is done to access a "sector" of informati.1}on in the extended RAM. (1) The sector number is divided by 128, and the remainder is then multiplied by 128 and added to 1.2}6384 to get the starting address of the sector in memory (it will be between $4000 and $7F00). (2) The quotient is used to in.3}dex into a page table with one entry for each 16K that can be mapped into the memory area from $4000 to $7FFF. (3) The value .4}from the page table is "AND"ed with the contents of the mapping register, and rewritten to the mapping register. (4) The data.5} is moved to(from) the area addressed above from(to) the sector buffers at the high end of MYDOS. (5) The mapping register is.6} restored to its non-mapping state by "OR"ing the restore value with the mapping register and rewriting the result to the map.7}ping register. Note that this design forces the RAMdisk to be single density and no larger than 4 megabytes (256 pages of 1.8}6384 bytes each). Out of that, MYDOS can only accommodate 1 megabyte, because its table is only 64 bytes long. As you can s.9}ee, the parameters are the mapping register address ($CFFF for Axlon boards and $D301 for the Atari 130XE), the value "OR"ed .:}into the register to reset the system back to normal ($FF for MYDOS Technical Manual page 14 Version 4.50 the Axlon and $.;}00 for the Atari 130XE types), and the actual map values. These values are determined by first identifying the bits in the ma.<}pping register to be left unchanged and setting them to "1" in each of the register values. Second, the remaining bits are fi.=}lled in with all the legal combinations of mapping bits. The values for the Newell Industries 256K upgrade (which uses the 13.>}0XE mapping, more or less) are given here as an example -- future versions of this board and other memory expansion products .?}are not necessarily going to use the same design. Bits:76543210 1xxxxx11.@}First,setbits7,1&0 inallthemappingvalues 1000001.A}1Thesearethe12(of32) 10000111 10001011 100.B}01111 11000011 11000111 1100101.C}1 11001111 11100011 11100111 .D}11101011 11101111 Lastly, since the mapping register at $D301 can be read as we.E}ll as written, it can be left exactly as it was before we used it by "OR"ing the initial value with zero (leaving it unchange.F}d). The sequence is then: 83, 87, 8B, 8F, C3, C7, CB, CF, E3, E7, EB, EF, 0. MYDOS Technical Manual page 15 Version 4.50 .G}XIII. ERROR CODES AND THEIR SOURCES 3 Last byte of file read, next read will return EOF (MYDOS)128 Break Abort (OS RO.H}Ms)129 IOCB already open (OS ROMs)130 No such device defined in the system (OS ROMs)131 Write-only IOCB, cannot read .I} (OS ROMs)132 Invalid command (OS ROMs)133 Device or File not open (OS ROMs)134 Invalid IOCB reference (OS ROMs)135 Rea.J}d-only IOCB, cannot write (OS ROMs)136 Attempt to read past end of file (MYDOS)137 Truncated record (OS ROMs)138 D.K}evice Timeout (OS ROMs)139 Device NAK (serial bus failure (OS ROMs)141 Cursor out of range for graphics mode (OS RO.L}Ms)142 Data frame overrun (serial bus failure, OS ROMs)143 Data frame checksum error (serial bus failure, OS ROMs).M}144 Device I/O error (in peripheral hardware, OS ROMs)146 Function not provided by handler (OS ROMs)147 Insufficien.N}t RAM for graphics mode selected (OS ROMs)160 Invalid Unit/Drive Number, zero or greater than 7 (both MYDOS and .O}OS ROMs)161 No sector buffer available, too many open files (MYDOS)162 Disk full, cannot allocate space for output .P}file (MYDOS)163*Write protected or system error disk is not readable (MYDOS)164 File number in link does not match .Q}the file's directory location (MYDOS)165 Invalid file name (MYDOS)166 Byte not within file, invalid POINT request (.R}MYDOS)167 File locked, cannot be altered (MYDOS)168 Invalid IOCB (MYDOS and OS ROMs)169 Directory full, cannot create .S}a 65th entry in a directory -- entries may be used for "lost" as well as real files (MYDOS)170 File not in direc.T}tory, cannot be opened for input (MYDOS)171 IOCB not open (MYDOS and OS ROMs)172*File or directory of same name alr.U}eady exists in parent directory, cannot create (MYDOS)173 Bad diskette or drive, cannot format diskette (MYDOS)174*.V}Directory not in parent directory (MYDOS)175*Directory not empty, cannot delete (MYDOS) 180* Not a binary file181*I.W}nvalid address range for loading a binary file, END