@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  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLLI $j") $G% }H 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆  LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}})@}er OS  !!"#DOSDOS SYS }}}L}F,-}CDOS SYSb.2DOSXL SUPb;`DOSXL XL bMENU COMbCLRDSK COMb$CONFIG COMbKCOPY COMb:DO } COM}UQ   ]   TL ]L!T  ɐ    D!`T }S 0 c 0 c ( 0 c`! LD:STARTUP.EXCD:DOSXL.SYSD:AUTORUN.SYSD:MENU.COM7"!}  (`;LHLLLZLLD1:D:STARTUP.EXCF,D1:RUN@RUNDOS.SYSTORSӬ"}㮠 @E: K  u  lllll,hhr 'Il#} \LAlllShhLZ $ \LA E7:8 K ` HH` U0: $}@L* LA  Z[: ]08ʈ08a{)(` ]H\H`!L`7 %}Q:6,7 c  LAD7 18:LAMOC.REMCARENDSCRNOSRENPROUNPSAVLOARUNERADIRTYP) @15=&}w{ Y #$!  \LA   L 6: *79.8 L BUɛ   L'} LA  "0   "` L Bɛ ST LA  0' 78 9: l " 7 "0LA \LA  c(}LA 06 l 7S8T Ʌ Ɉ L \LA`  "08 797:8S} 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} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u 9 L 7 "H h``LȌ  H7"h"!)@ !LA!)L,! @" J "0T}a!) !)ύ! 2L % " H & " L2 h0,!p  "`!L!)  \!!)@LLU}CXE.JH hL"H hL! 0   "!LE L" B VCɀ` \LA5'6!78 897V}:8iL \LA56 5L 7ED`IH`U L `7 BW}Uɛ :VW 7U7 Q ` B8U0$  . Ԍ ` U UX}`ɛ, `ɦ!ɐɠi,ɰ)    L"DRIVE NUMBER ERRORNO BUFFERSDISK FULLI/O ERRORSYSTEM EY}RRORINVALID FILE NAMEFTe DOS XL - ATARI version 2.30 Copyright (C) 1994 by FTe FILE PROTECTEDWRITE PROTECTEDDZ}IRECTORY FULLFILE NOT FOUNDADR RANGE ERRORBREAK KEY ABORTINVALID DEVICENO CARTRIDGE'6FUdt[}}?}?v? @AB `  ` b?hh` ?? h?` BLV b? V? h? V? b?`8`I`xxխЍ(`]},??@B@L}6CD l0C)HCC WhL/h `CmCDiD`^}  R@P1&  Y&0@R !L(`) 4 F`_} 4 ˤ F` 4 7 F` 4 F` 4H"h H"h F` 4 # F` 4 ɧ F`HMxLOHxխЍh(` j `}`HxLHxխЍh(`;LHLL L L L D1:a}b} |Il j L jk hl hm n Ln m Hl H ` jL jLѲ j | ` | j`l | c}j`l | j`l$ C D 343 8PX6CS S) 48CPDX d}  @0 C`Dp  LCiCDiD`  DD˙` Je})Lϩ CD L(( Ψ ΥLL(,) Ψ (LLޮ( u,Lh)0p- *,+f}. ᬬ, ( (,C? (  ®L,L 䮩. `g} ,) 9`/A! 'ȹ߰")- " A$//G@LLLI $jh}7") Ц$G%H7 13S8`G0ȱG1ȱG2 0Gȭ1Gȭ2GG}GHiH8(()) ЦG$H%i} `%(0)8` )L۩ A 1LG/Ș LL C ΨLL )N>j}Q ͫ HH) Υ 1 ի,hyhyB L> L JJ. - ,Lk} *` B%'8  HH`S۩$LL: 4 CL Ψ ® @4 ֪ ®,Hh z,?l} ( SL C? u ® @ S L ᬬ, Ψ ΥL 1 LE`L⮩ 66 CL⮬,)m} 6 SL,) `L讽0AML ML 9 NLꮝLL஽NLMLn}HG!@%1F GȱGLܮLEEȩÑEȑEEȑE Ed E7EȩE o}- - @L6 C,0,60S6G/6ɛ 6L6 S CL EHEh y 6G 6Lp}LSROTCES EERF G,) *Gȩ GȽG GȌ6,d G6`5438354 q}06G643`DCEDC0X:Ȣ 3ȱC* ? ,0.. ,30%n3?A[ 0 : ,L媮(`Lr}  `,30``)-.p,.,i--H ,0)բ?ْ )-),*.s}+08(`0   0$L1 ("G GȽG 66L $`8Lt}`L8` $ 05G) ,G)ȱGȱGHh0})Hh` B! 8`8-iu}iiLͬE`E8FEh(% l0`ɃL L L8^~jj8jHi hEEEiEv}EiE` dTE3H8EEȱEEȩEh 4J3E83 3 .3m43i`L򮩟I('(!Pw}EXF8R%""1@L%J@舩A@`GpH`L@%JJA`Hx}GHh% l` z L   8 rii `%дCDy}CG W  C  L` Ϯ`DOS SYS IIIIIIIIIIIIIII(C'(/`0( z}ߩ0}z ɐ   ɜ jj D`h g m 0 {}  0 h g ` LD:STARTUP.EXCD:AUTORUN.SYSD:MENU.COMɛ  ۶(`k 岩 |}L ۶E: DK ` fk k L 0: @L* L |e  e]8ʈ}}e 08a{)(`e HH`h g g h Lo ` :糙  ۶j  LD 1~}:LMOC.REMCARENDSCRNOSRENPROUNPSAVLOARUNERADIRTYP) G26۴Ŵ:W#$!  L |  L@} |: *. L@i ɛ i | L@ L Z ݶ0 i Z ݶ` |Lq ɛ } L | 0'   ' ݶ ݶ0L L | Lj  06g ' q nɅ } ۶j L L` = ݶ0  P HLq  ݶH h``j L Ȍ |H}h)@ L)L絭 @ HJ ݶ0a) )ύ L % ݶ ӶH & ݶ }L ۶h0,p Z ݶ`L)  )@LLѶCXE.JH DhLݶH |hL 0 P H ݶ}L ZLݶ B VCɀ` L'! H8iLR L PĩLH P}ED`IH` HLPe e ۶e ` ɛ :  `e f} 80$  e .f e e Ԍe f ` `ɛ, `ɦɐɠi,ɰ) [\ H} P LݶDRIVE NUMBER ERRORNO BUFFERSDISK FULLI/O ERRORSYSTEM ERRORINVALID FILE NAMEFTe DOS XL - ATARI version 2.30C} Copyright (C) 1994 by FTe FILE PROTECTEDWRITE PROTECTEDDIRECTORY FULLFILE NOT FOUNDADR RANGE ERRORBREAK KEY A}BORTINVALID DEVICENO CARTRIDGEK^is}/}?NEDDIRECTORY FULLFILE NOT FOUNDADR RANGE ERRORBREAK KEY AA?? ? ?I ?(  B V` @  ?E ?D ? ??D }E ??S` ? ?hh`l )` ```L L L  % ?#?@p }E@L }6CD l0C)HCC WhL/h `CmCDiD`  R@P }1&  Y&0@R !L(`) 4 B` 4 B` 4 7 } B` 4 B` 4H"h H"h B` 4 # B` 4 B`HӍK)h`HKh` } } j ~ `HӍ } )L H H h`ɐ  `;LHLL L L L D1: } } v Il j L j r hs ht u Lu t Hs H ~ ` j L j L j W ~ ` v j `l v j }`l v j `l DRIVE NUMBER ERRORNO BUFFERSDISK FULLI/O ERRORSYSTEM ERRORINVALID FILE NAMEFTe DOS XL - ATARI version } 2.30X Copyright (C) 1994 by FTe FILE PROTECTEDWRITE PROTECTEDDIRECTORY FULLFILE NOT FOUNDADR RANGE ERRORBREAK } KEY ABORTINVALID DEVICENO CARTRIDGE * VL5 * YL5 H HHH h`H)h`e * f g H]Hlf }5 e h@I_ } } C D 343 8PX6CS S) 48CPDX  } @0 C`Dp CDLCiCDiD` DD˙` J) }L CD L(( LL(,L) (LL( u,Lh)0p- *,+. }, Q( (,POCLNM?Q (  L,L . ` , }L)OP 9`/A! 'ȹ߰")-ݞ " A$//G@LLLI $j7") } $G%H7 13S8`G0ȱG1ȱG2 0Gȭ1Gȭ2GG}GHiH8(()) 琡G$H%  }`%(0)8` )L꽟ݞ A 1LG/Ș ݞLL C LL )N>Q }HH) 1 ,hyMMhyNNBL L> L轙JJ. - ,L*` } B%'8  HH`S$LL: 4 CL  @4 ,PHOh z,?Q ( } S쐸L C? u  @ S L , 驀L L 1 LE`L 66 CL,L) 6L } SL,L) `L}0AMݢLݡ ML 9 NݞLLL⦅NLMLH }G!@%1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE L }- - @L6 C,0,60S6G/6ɛ 6L6 S CL EHEh y 6G 6LLSROT }CES EERF G,L) *Gȩ GȽQG GȌ6,MNd G6`5438354 06G }643`DCEDC0X:Ȣ 3ȱC* ? ,0.. ,30%n3?A[ 0 : ,L(`L  }`,30``)-.p,.,i--H ,L0)բ?Q )-),*.+L0 }8(`0  0$L1 ("GGȽG 66L $`8L」 }`L콣8` $ 05G)ݙ,G)ȱGȱGHh0})Hh` B! 8`8L-iiiL }E`E8FEh(% l0`ɃL L L8^~jj8jHi hEEEiEȱEiE` } dTE3H8EEȱEEȩEh 4J3E83 3 .3m43i`L著I('(!PEX }F8R%""1@L%J@舩A𩀙@𘝠`GpH`L@@%JJA`HGH }h% l` z L   8 rii `%дCDCG } W  C  L` `DOS SYS IIIIIIIIIIIIIII(C'(/`0( ߩ }0} } } } } } } D `o n H  0 ( 0 o n `  L D:STARTUP.EXCD:DOSXL.SYSD:AUTORUN.SYSD:ME }NU.COM[ ɛ r (`r L E : K r` Ar r L 0:  }@L* L Wl  @]8ʈl 08a{)(`l HH`o n n  o Lv ` }:    q  LD 1 : LMOC.REMCARENDSCRNOSRENPROUNPSAVLOARUNERADIRTYP) Z" } 2#$!  L W  wL W : * .  rLp ɛ p W rL }L 5 0 p 5 ` WLL ɛ L W r0'  0L L W L }q  r06n  L IɅ Ɉ q L L`  0   + } #LL  H h``q L Ȍ WH hm  )@ L )L @ #J 0a } ) )ύ   L % H & L  h0, p 5 ` L )  )@LLC }XE.JH hLH WhLw  0 + # L 5L B VCɀ` L ' ! #8 } iL- L  +˩ L# +ͩ ED`IH` #L+l l l `  }ɛ :    `l m 8 0$  l .m l l Ԍ l m `  }`ɛ, `ɦ ɐɠi,ɰ) &' # + L  * 7 I *  + q } } !PY iP`p S S T nRLP6G 6LLSROTCES EERF G,L) *Gȩ GȽQG 8fP g}P dP ȱ ePP bP cP P LP PY`lbP?hPaP P`PHPH`FTCDEIPURSLGXQPQQCQ{QiQQQQQR'RDiDDCD 0D BD``DDDDD wDDДDL&EmEDCDmFDDD L 6/22/94 Do you remember the first timethat you saw Star Wars? Well it's1994, and I think }that I feel the sameway that I did back in 1977. I justloaded the PC Xformer 2.0 on my 486notebook, and I just can't get}enough of it! The 6502 community hasbeen begging for a portable computerfor years. Commodore made an attemptwith the SX-}64, and Atari talked aboutone as well. Apple released the IIcand had an optional LCD screen for it,but nobody quite seeme}d to really getit right... Until now.The PC Xformer 2.0 has been releasedby Branch Always Software to be used"freely". } It is an Atari 8-BitEmulator that runs in the IBM (orcompatible) environment. This letteris being written on a Toshiba 4}700CTnotebook using PaperClip 1.2 !!Can you imagine playing Zork, editinga letter with PaperClip, or creating6502 assemb}ly language code at Dennys?Pretty cool stuff if you ask me. Darek Mihocka has really goneto great lengths to s}upport the Atari6502 and 68000 machines. Xformer 2.0does have it's limitations, but showsgreat promise for the future. T}heamount of time that has been spent todevelop this emulator is absolutelymind-boggling. I hope that everyonegets a chan}ce to really sit down anduse it, as I couldn't do without it.(and I've only had it for one day!)It's one of those program}s that reallychange the way that we use computers.I hope that everyone writes to Darekand let's him know what a great job}he's done, what you would like to seein Ver 3.0, and that you will SUPPORTit when he does release it.With the same spirit} of keeping theAtari 8-Bits alive and well, FTe hasdecided to release the DISK-BASEDversion of MAC/65 (ver 4.20) to beuse}d exclusively with the PC Xformeras SHAREWARE. The only fee that werequest is to purchase the commercialversion of PC Xfo}rmer 3.0 when it'sreleased, and to write to us (or callthe BBS), and let us know how you areusing the Atari Emulator. (esp}ecially"what works" or "what doesn't")Yes, 1994 has been an interesting yearfor us 8-Bitters... I can visualizeall of m}y friends who SOLD their Ataricomputers to buy IBM's, calling me upnow for a few of the "old" programs... Fine Too}ned Engineering PO Box 66109 Scotts Valley, CA 95067 BBS/Fax # (4}08)438-6775 Thanks for your support! MikeP.S. Don't forget to support other SHARE}WARE authors, such as Nick Kennedy, Bob Puff, Ronnie Riche, Tom Hunt, Alfred, etc. etc.pport other SHAREfXi \Wȩ\ȭ[ȩ ^`ee`L+X`8Ƹȥ`ȱi}`Ȧ````8`ƶ`l8嶅`ȱ` fX` fXȥ`}`EE`%%`8(` YƵ` YƵ` >X Y0Ƶ` Y0Ƶ` YƵ` Y0Ƶ`Ŷŵ}(` >X*ff` >X&`8嵅嶅`II` YLXj )Xff`&&`$ 8}嵅嶅$8峅崅 @&&&8嵨嶐泅$p8峅崅LXZ8居岅$㥴`}`0LyZee`ee`ȱl fXLX fXLXq @BEDȱ},R LZW LZA LZD LZJ V :[0LX B V`HHJJJJZhh(` B V :[`} z[ V :[LXBHI` z[ z[ V :[0L[LX [Ɉ`JJJJZ` [`}ȱ` V :[LXL[}L\ i\ i\ \ \} \ 0! :8`ȱ >#<-R+R0 :[L~]`L][\ȱ A%[! i? <>Ș8?0 L\ }[H hA [[0 :[L\[ \i6\i\\!\ 0 ! 6\06\莻\[L\ pZ Z OX Z OX X X X} X X XL-^ Z X OX iZ fX (YL^ Z OX iZ X Z X OX [ pZL] pZ` Z X OX ] pZ iZ Y OX }[ pZ` Z X OX0 iZ fX OY OX Z X OX9 iZ fX EY fX YL^ iZ` iZ` pZ pZ }Z OX iZ X Z X OX iZ fX WYL_ Z X OX De pZ OX iZ fX )X X OX iZ fX WYL|_^ OX }Z X 9X fX )X OX OX iZ fX )X X XL_^ OX Z X 9X fX )X OX^ OX iZ 9X fX )X X X Z OX X X }X XL^ Z OX iZ X Z OX iZ X Z X OX Z X fX WYLb Z OX Z X OX Z X 9X fX )X X X Z OX} Z X OX iZ fX )X X Z X OX iZ fX )X X OX Z^ pZL` Z OX Z X OX iZ fX )X X OX iZ fX Y XL` }Z OX iZ X Z X OX iZ fX )X X OXS iZ fX (YLa Z OX iZ XLa Z X OX iZ fX )X X OXD iZ fX (YL}a Z OX X Z X OX iZ fX )X X OXD iZ fX (YLa Z OX X X X XLa Z X OX iZ fX )X XL}a Z OX iZ XLa Z OX iZ X Z X OX iZ fX (YLbg OX 3^ pZ^ OX Z X 9X fX )X X OX iZ} fX 8YLtb^ OX Z X 9X fX )X OX Z X X Z OX X X X XL_\ OXN iZ OXA iZ fX Y fX )X X OX  }iZ fX (YLbh OX ] pZ9h OX ] pZ Z OX iZ X Z X OX iZ fX WYL;e Z OX^ OX  }Z X 9X fX )X X X Z X OX iZ fX OYLzc Z X OX e pZ\ OXN iZ OXA iZ fX Y fX )X X OX iZ fX (Y }L$eZh OX ] pZ0 iZ OX Z X fX )X OX [ pZ]h OX ] pZ Z X OX iZ fX WYLld Z X OXu iZ  }Y fX (YLVdgh OX ] pZLid{h OX ] pZL$e Z X OX iZ fX (YLdh OX ] pZL$e Z X OX } fX (YLdh OX ] pZL$e Z X OX fX (YLeh OX ] pZL$e˅h OX 3^ pZ Z} OX X X X XLb  pZ` OX iZ fX )X OXN iZ X OX iZ fX )X OX@ iZ X Z X OX @g pZ` Z X OX }De pZ OX iZ fX )X X OX iZ fX WYLe煵h OX 3^ pZ^ OX iZ 9X fX )X OX^ OX Z X 9X }fX )X X X^ OX Z X 9X fX )X XL}f^ OX iZ 9X fX )X OX iZ XLf^ OX iZ 9X fX )X OX} Y X OX iZ fX )X OXO iZ X OX iZ fX )X OX iZ X Z X OX @g pZ OX iZ fX )X X OX iZ} fX WYL?gi OX 3^ pZ` OX iZ fX )X OX1 iZ X OX iZ fX )X OX Z X X OX iZ 9X f}X )X OX^ X OX iZ 9X fX )X OX iZ X OX iZ 9X fX )X OX iZ X Y`configure: bad parameter list}drive no. sides density------------------------------- can't configure non-existent drive 1 } single 1 double 2 doubleconfigure: fatal I/O errorconfigure: fatal I/O errorconfigure: fat}al I/O error 1 double 2 doubleconfigure: fatal I/O errorconfigure: fatal I/O errorconfigure: fat@(@)@? D?UC?C?V? Y`*@Cee`&``8Ƹȥ`ȱ}i`Ȧ````8`ƶ`l8嶅`ȱ` g@` g@ȥ`}`EE`%%` BƵ` BƵ` ?@ BƵ` B0Ƶ` BƵ` B0Ƶ`Ŷŵ(` HAƵ` HAƵ` }?@ HAƵ` HAƵ` ?@*ff` ?@&`8嵅嶅`II` AL@$ 8嵅嶅$8峅崅 @}&&&8嵨嶐泅$p8峅崅L6B8居岅$㥴`HI B V`H}IB VL@``0LBee`ee`ȱl g@L@ g@L@ꥴ0008嵅}(`) eeFf&⥱`L+CUU`**`8履`} DdL D iD iD D D D 0! :8`ȱ >#<-R+R}0 :UCLD`LsDUCfCȱ A%[! i? <>Ș8?0 L'D UCH hA ['C0 :RCL'DUC  }DiVCiCWC!D 0 ! C0CDUCL'D B P@ @ @ @ @ P@ B P@ @ @ @ @ @ @LKELE` B !}B P@ B @ B P@ @ @ @ @ @LE B P@ @ @ @ @LaE B @ B` B @ P@ Vc B` B @ P@ Vc B B"} A P@ ]c B` B6 B @ P@6 B @ P@6 B @ P@ B P@ :F B2 B @ P@ B P@ L B2 B` B P@ @ @ @ @ #}@ P@: B g@ ALkFL:F B P@ @ @ @ @ P@ B P@ @ @ @ @ @ @ P@: B g@ ALFLkF B @ @L`G$} B @ @ P@? B g@ ALG B @ P@ B @ @ @L!G B @ P@ B @ @ @ B P@ @ @ @ @ B P@ @ @ @ @%} B P@ @ @ @ @LF B @ P@ B @` B B P@ @ @ @ @ P@ B P@ @ @ @ @ @ @ P@: B g@ ALGLyG&} B P@ B @ B P@ B @ B @ P@ B g@ @AL6H B @ P@ B P@ @ @ @ @ g@ *@ P@ B @LG B P@ B'} @ B @ P@ B @ g@ *@ @ P@* B g@ A P@ B @ P@ B @ g@ *@ @ P@. B g@ A g@ A P@ B @ P@ B @ g@ *@ (}@ P@ B g@ A g@ AL5I B @ P@ B P@ @ @ @ @ g@ *@ P@ B @ P@ B P@ @ @ @ @ g@ *@ @ @LFH B @)} P@ B @ g@ *@ @ P@* B g@ ALI B @ P@ B g@ @ALI B @ P@ B P@ @ @ @ @ g@ *@ P@? B @LhI*} B @ P@ B @ g@ *@ @ P@. B g@ A P@ B @ P@ B @ g@ *@ @ P@ B g@ A g@ AL7J B P@ @ @ @ @LI+} B @ P@ B @ g@ *@ @LK B P@ B @ B P@ @ @ @ @ B @ P@ B @ g@ *@ @ P@ B g@ A P@ B ,}@ P@ B g@ @A g@ A P@ B @ P@ B @ g@ *@ @ P@* B g@ A g@ AL[K B @ P@ B P@ @ @ @ @ g@ *@ P@ -}B @ P@ B P@ @ @ @ @ g@ *@ @ @LJ B @ P@ B @ g@ *@ @ P@* B g@ ALK B @ P@ B g@ @ALK.} B @ P@ B P@ @ @ @ @ g@ *@ P@? B @LK B @ P@ B @ g@ *@ P@ B @ B` B @ P@d P@ L B /}B @ P@e- P@ L B 9O P@ B g@ ALLd P@ E BN P@ E BLLCh P@V B P@A B g@ A 0}g@ *@ @LLd P@ E BÅN P@ E B` B B P@ @ @ @ @ P@ B P@ @ @ @ @ @ @ P@: B g@ A1}L0MLL B P@ B @ B @ P@ B @ g@ *@ @ P@ B g@ A P@ B @ P@ B g@ @A g@ ALM B P@ @ @ 2}@ @ P@ B @ P@ B P@ @ @ @ @ g@ *@ @ @L@M B P@ B @ B P@ @ @ @ @ P@. B @ B @ P@ B @ g@ *@3} @ P@ B g@ A P@ B @ P@ B g@ @A g@ ALN B P@ @ @ @ @ P@ B @ P@ B P@ @ @ @ @ g@ *@ @ @L4}N B @ P@ B @ B` not copied copied B B P@ cB @ B @ P@ B g@ ALO B B` cB P@ B5} g@ AL+OLO B @ B` B BCh P@Q B P@A B g@ A g@ *@ @L$PޅV P@ E Bd P@ E6} B䅵V P@ E Be- P@ E B녵V P@ E B B P@ N @ P@Y B g@ A P@ B @ P@y B g@ A g@ A7}L$P B A B` B P@ B @ B P@ B @ B @ P@ B g@ ALV B @ P@ B g@ A P@_e`e g@ @8}LNQ B P@d P@텵V P@ a B @ P@ B g@ @ALQV P@ E Bd P@ E BW P@ E 9}B B A B` B @ P@ B g@ ALNQ B @ P@ W B B P@ B @ P@ X B @ P@ B g@ @ALQW:} P@ E Bd P@ E B$W P@ E B B P@ B @ P@ b B @_e`eL)R B @ P@ #X B B ;}@ P@ ib B&W P@ E B NCh P@F B P@A B g@ A g@ *@ @ P@ B g@ A P@ B @ P@ B g@ A g@ AL<}Te- P@ B g@ *@ @ P@D B g@ A P@e- P@ B g@ *@ @ P@A B g@ A g@ @LT B P@e- P@FW=} P@ a B @ P@ B g@ 8ALTe- P@ E BHW P@ E B B @ P@ ib BCh P@Q B P@A B g@ A >}g@ *@ @ P@ B g@ ALAT\W P@ E B B P@ N @ B @ P@Y B g@ A P@ B @ P@y B g@ A g@ AL>?}T_e`e P@ B g@ AL0T B @ P@ ib B B A B`LT_e`e P@ B g@ ALuT B @ P@ ib B @}B A B` B @ P@ B g@ A P@Ch P@A B P@A B g@ A g@ *@ @ P@ B g@ A g@ AL U B P@e- P@qA}W P@ a B @LU_e`e P@Ch P@A B P@A B g@ A g@ *@ @ P@ B g@ A g@ @LU B P@e- P@sB}W P@ a B @ B @ P@ B g@ @ALUuW P@ E Be- P@ E BW P@ E B B A B` C}B @ P@ B @ P@ 4Y B P@ B g@ @ALZVW P@ E Be- P@ E BW P@ E B_e`eLD}V B @ P@ ib BW P@ E B N B P@ @ @ @ @LDP B @ P@ ib B B @ P@ ib B B B`Copy toE} ?Rcopy: can't open: copy: read error on file Insert 'to' disk and hit returnR already exists OK to oF}verwrite? WACan't open: copy: write error on file Insert 'from' disk and hit return B @ P@aebe P@G}cede P@ d B P@ B g@ @AL"X`Y P@ E B` B @ P@ B P@ c Bbeae P@ B g@ @ALrXH}wY P@ E B B @ P@ B P@ c Bdece P@ B g@ @ALXY P@ E B` B B P@ P@I}eefe g@ A P@ A g@ A @ B @ P@eefe P@ B @ P@ mc B B` B @ P@eefe P@ B @ P@ cJ} B`copy: fatal i/o errorcopy: fatal i/o errorcopy: fatal i/o error B B B B @ P@ B g@ @A P@ B @K} P@ B g@ #A g@ @LZEd P@ E BCh P@S B P@A B g@ A g@ *@ @`e_e B @ P@ B :@ g@ *@ @L} P@ B P@ E B B @ P@ B g@ ALZ B`e_e B P@f B P@ E BLZ B @ P@ B :@ g@ *@ @ P@fM} B P@ E B B P@ B P@ LE B P@ B g@ A g@ *@ @ P@: B g@ ALY[dd P@ B P@ B P@ LE B g@ *@N} P@ E Bd B P@f B P@ LE B P@ B g@ A g@ *@ @ P@: B g@ AL[id P@f B P@h B P@ LE B g@ *@ P@O} E B B P@ t^ B P@ B g@ A P@f B P@ t^ B P@ B g@ A g@ AL\ B P@ B g@ *@ @ P@D B g@ A P@P} B P@ B g@ *@ @ P@A B g@ A g@ @L\nd P@ E BCh P@W B P@A B g@ A g@ *@ @L\dQ} P@ E Bd P@ E B N B P@eg P@ B P@ ^ B @ P@ B A g@ AL:]Ņd P@ E B B @R} P@ B g@ ALl]ᅵd P@ E B B P@4 B P@ tG Bd B P@ B P@ tG Beg P@ B @ P@ B P@ BS} g@ *@ g@ B g@ *@feee B P@ B @ B @ P@ B @ g@ @ALl^2 B P@ B P@eg P@ B P@ B g@ *@ T}P@ B P@ @ @ @ @ g@ B g@ *@ P@ E BL]̠ B` B @ @L^ B @ @ P@? B g@ AL^ B` B P@ U}@ @ @ @ @ P@* B g@ AL^ B`Lt^ B` B B: B @ P@ B g@ *@ @ P@D B g@ A P@< B @ P@ B g@ *V}@ @ P@A B g@ A g@ AL_: B @ P@> B @ P@ E B B: B`6 B P@< B @ P@d P@ a B @ P@ B gW}@ @AL_ B A: B`8 B P@ B @ B P@2 B P@: B @ P@ b B P@ B g@ ALa4 B P@ B P@ B g@X} *@ @ @4 B @ P@ B g@ A P@6 B @ P@* B g@ A g@ AL`6 B @ P@ ib B8 B @: B` B P@ B P@ BY} g@ *@ g@ *@ P@ B @2 B P@ B @< B @ P@4 B @ g@ *@ P@< B @ P@6 B P@ @ @ @ @ g@ *@ @ @ P@: B g@ AZ}L5aL` B P@ B g@ *@ P@> B @ P@6 B @ g@ *@ P@ E B8 B P@ @ @ @ @< B P@> B @ P@ B g@ *@ P@ [}B g@ *@ @L_6 B @ P@ ib B B A: B`o @B` aEDȱ$R W \}A DJ V Yb0L@ B V`Hƶh(` B V0 Yb`BHI` bɈ`]}C`HȱILbHIDȱEB V Yb0/D}HE}I涩DE``^}DȱE BI IL 7 then a memory location1X; is assumed to=} contain the channel number.X; @CH   Q T?T?T?T?>  $> (X;2X;<X; MAC=}RO: @CVFX;P:X; Loads Constant or Value into accumultor (A-register)ZX;d+X; If value of parameter 1 is 0-255, @CVn+X; =}assumes it's an (immediate) constant.xX;'X; Otherwise the value is assumed to+X; be a memory location (non-zero page).=}X;X;X; @CV   Q> Q X;X;X;X;"X; MACRO: @FL,X;65X; @FL is used to e=}stablish a filespec (file name)@X;J-X; If a literal string is passed, @FL willT'X; generate the string in line, jump^&X;=} around it, and place its addressh/X; in the IOCB pointed to by the X-register.rX;|(X; If a non-zero page label is passed=}*X; the MACRO assumes it to be the label.X; of a valid filespec and uses it instead.X;X;X; @FL   =} !   @F = Q>4@F PICBADR9 Q>5@FPICBADR9 Q>4  PICBADR9& Q>5 0PICBADR9:D=}NA XIO macroAXX;bX; MACRO: XIOlX;v/X; FORM: XIO cmd,ch[,aux1,aux2][,filespec]X;%X; ch is given as in the=} @CH macro3X; cmd, aux1, aux2 are given as in the @CV macro+X; filespec is given as in the @FL macroX;5X; performs f=}amiliar XIO operations with/for OS/A+X;/X; If aux1 is given, aux2 must also be given8X; If aux1 and aux2 are omitted, =}they are set to zero1X; If the filespec is omitted, "S:" is assumedX; XIO  3 % AXIO: wrong number o=}f argumentsA  @CH   @CV *PICCOM9;; COMMAND4  > @CV H PICAUX19R @CV \ PICAUX29fp=}Q>z PICAUX19 PICAUX29 3 @FL AS:A @@IO @FL @@@IO: CIOA =} OPEN macroAX; X; MACRO: OPEN X; (X; FORM: OPEN ch,aux1,aux2,filespec$ X;. %X; ch is given as in the @CH macro8 1=}X; aux1 and aux2 are given as in the @CV macroB +X; filespec is given as in the @FL macroL X;V 1X; will attempt to open the =}given file name on` /X; the given channel, using the open "modes"j X; specified by aux1 and aux2t X;~ OPEN   &=} AOPEN: wrong number of argumentsA    XIO COPN= = = =   XIO COPN= = = =    =} A BGET and BPUT macrosA X; X; MACROS: BGET and BPUT X; X; FORM: BGET ch,buf,len X; BPUT ch,buf,le=}n( X;2 %X; ch is given as in the @CH macro< .X; len is ALWAYS assumed to be an immediateF 1X; and actual value...never a m=}emory addressP /X; buf must be the address of an appropriateZ X; buffer in memoryd X;n +X; puts or gets length bytes to/f=}rom thex 0X; specified buffer, uses binary read/write X; X; X; first: a common macro X; @GP @CH  Q> =} PICCOM9 Q>4  PICBADR9 Q>5  PICBADR9 Q>4  PICBLEN9 Q>5  PICBLEN9"  CIO, 6 X;@ B=}GET J  T ' ABGET: wrong number of parametersA^ h @GP = = =CGBINRr |  X; BPUT   ' AB=}PUT: wrong number of parametersA  @GP = = =CPBINR   X; A PRINT macroA X; X; MACRO: PRINT =}X; (X; FORM: PRINT ch[,buffer[,length]] X; !X; ch is as given in @CH macro& (X; if no buffer, prints just a RETURN0 %X;=} if no length given, 255 assumed: X;D 8X; used to print text. To print text without RETURN,N -X; length must be given. See=} OS/A+ manualX X;b 2X; EXCEPTION: second parameter may be a literall .X; string (e.g., PRINT 0,"test"), in whichv -X; case=} the length (if given) is ignored. X; PRINT  3  ( APRINT: wrong number of parametersA    =}  !   @IO = @GP =@IO= =CPTXTR    @GP = ==CPTXTR  @GP = =}= =CPTXTR  * 4 ! > @IO H @GP =@IO==CPTXTRR \ f p X;z A INPUT macroA X; X; MACRO:=} INPUT X; X; FORM: INPUT ch,buf,len X; %X; ch is given as in the @CH macro )X; buf MUST be a proper buffer address=} 6X; len may be omitted, in which case 255 is assumed X; ,X; gets a line of text input to the given 'X; buffer, maximu=}m of length bytes X; INPUT  3 ( AINPUT: wrong number of parametersA$  .@GP = ===}CGTXTR8B@GP = = =CGTXTRLV`jA CLOSE macroAtX;~X; MACRO: CLOSEX;X; FORM: CLOSE ch=}X;%X; ch is given as in the @CH macroX;X; closes channel chX; CLOSE   ( ACLOSE: wrong number of par=}ametersA @CH  Q>CCLOSE  PICCOM9 CIO(2X;<-X;;;;;;;;;;; END OF IOMAC.LIB ;;;;;;;;;;;;FX; of par<v@@`yyW @CH  Q>CCLOSE  PICCOM9 CIO(2X;<-X;;;;;;;;;;; END OF IOMAC.LIB ;;;;;;;;;;;;FX; of par@ 1000 .PAGE "FTe SYSTEM EQUATES FOR ATARI"1010 ;1020 ; FILE = #DN:SYSEQU.ASM1030 ;1040 ;1050 ; I/O CONTROL BLOCK EQUATEE}S1060 ;1065 SAVEPC = * ; SAVE CURRENT ORG1067 ;1070 *= $0340 ;START OF SYSTEM IOCBS1075 IOCB1080 ;1090 ICHID *= *+1 E};DEVICE HANDLER IS (SET BY OS)1100 ICDNO *= *+1 ;DEVICE NUMBER (SET BY OS)1110 ICCOM *= *+1 ;I/O COMMAND1120 ICSTA *= *+1 E};I/O STATUS1130 ICBADR *= *+2 ;BUFFER ADDRESS1140 ICPUT *= *+2 ;DH PUT ROUTINE (ADR-1)1150 ICBLEN *= *+2 ;BUFFER LENGTH11E}60 ICAUX1 *= *+1 ;AUX 11170 ICAUX2 *= *+1 ;AUX 21180 ICAUX3 *= *+1 ;AUX 31190 ICAUX4 *= *+1 ;AUX 41200 ICAUX5 *= *+1 ;AUXE} 51210 ICAUX6 *= *+1 ;AUX 61220 ;1230 IOCBLEN = *-IOCB ;LENGTH OF ONE IOCB1240 ;1250 ; IOCB COMMAND VALUE EQUATES1260 ;E}1270 COPN = 3 ;OPEN1280 CGBINR = 7 ;GET BINARY RECORD1290 CGTXTR = 5 ;GET TEXT RECORD1300 CPBINR = 11 ;PUT BINARY RECORDE}1310 CPTXTR = 9 ;PUT TEXT RECORD1320 CCLOSE = 12 ;CLOSE 1330 CSTAT = 13 ;GET STATUS1340 ;1350 ; DEVICE DEPENDENT COMMAND E}EQUATES FOR FILE MANAGER1360 ;1370 CREN = 32 ;RENAME1380 CERA = 33 ;ERASE1390 CPRO = 35 ;PROTECT1400 CUNP = 36 ;UNPROTECE}T1410 CPOINT = 37 ;POINT1420 CNOTE = 38 ;NOTE1430 ;1440 ; AUX1 VALUES REQD FOR OPEN1450 ;1460 OPIN = 4 ;OPEN INPUT1470E} OPOUT = 8 ;OPEN OUTPUT1480 OPUPD = 12 ;OPEN UPDATE1490 OPAPND = 9 ;OPEN APPEND1500 OPDIR = 6 ;OPEN DIRECTORY1510 ;1520 E} .PAGE1530 ;1540 ; EXECUTE FLAG DEFINES1550 ;1560 EXCYES = $80 ; EXECUTE IN PROGRESS1570 EXCSCR = $40 ; ECHO EXCUTE IE}NPUT TO SCREEN1580 EXCNEW = $10 ; EXECUTE START UP MODE1590 EXCSUP = $20 ; COLD START EXEC FLAG1600 ;1610 ; MISC ADDRESS E}EQUATES1620 ;1630 CPALOC = $0A ; POINTER TO CP/A1640 WARMST = $08 ; WAR, START (0=COLD)1650 MEMLO = $2E7 ; AVAIL MEM (LOWE}) PTR1660 MEMTOP = $2E5 ; AVAIL MEM (HIGH) PTR1670 APPMHI = $0E ; UPPER LIMIT OF APPLICATION MEMORY1680 INITADR = $2E2 ; AE}TARI LOAD/INIT ADR1690 GOADR = $2E0 ; ATARI LOAD/GO ADR1700 CARTLOC = $BFFA ; CARTRIDGE RUN LOCATION1710 CIO = $E456 ;CIO E}ENTRY ADR1720 EOL = $9B ; END OF LINE CHAR1730 ;1740 ; CP/A FUNCTION AND VALUE DISPLACEMSNT1750 ; (INDIRECT THROUGH E}CPALOC)1760 ; IE. (CPALOC),Y1770 ;1780 CPGNFN = 3 ; GET NEXT FILE NAME1790 CPDFDV = $07 ; DEFAULT DRIVE (3 BYTEE}S)1800 CPBUFP = $0A ; CMD BUFF NEXT CHAR POINTR (1 BYTE)1810 CPEXFL = $0B ; EXECUTE FLAG1820 CPEXFN = $0C ; EXECUTE FILE NE}AME (16 BYTES)1830 CPEXNP = $1C ; EXECUTE NOTE/POINT VALUES1840 CPFNAM = $21 ; FILENAME BUFFER1850 RUNLOC = $3D ; CP/A LOAE}D/RUN ADR1860 CPCMDB = $3F ; COMMAND BUFFER (60 BYTES)1870 CPCMDGO = -6 ; CP SUBROUTINE VECTOR1880 ;1890 *= SAVEPC ; RESE}TORE PC1900 ;CPCMDB = $3F ; COMMAND BUFFER (60 BYTES)1870 CPCMDGO = -6 ; CP SUBROUTINE VECTOR1880 ;1890 *= SAVEPC ; RESD10 .OPT NOLIST0980 .OPT NOEJECT0990 .TITLE "A sample device driver for Atari's OS"1000 .PAGE "--- general remarks -I}--"1010 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1020 ;1030 ; The "M:" driver --1040 ; Using memory as a device1050 ;1060 ; InI}cludes installation program1070 ;1080 ; Written by Bill Wilkinson1090 ; for January, 1982, COMPUTE!1100 ;1110 ;;;;;;;;I};;;;;;;;;;;;;;;;;;;;;;;1120 ;1130 ; EQUATES INTO ATARI'S OS, ETC.1140 ;1150 ICAUX1 = $34A ; The AUX1 byte of IOCB1160 ;I}1170 OPOUT = 8 ; Mode 8 is OPEN for OUTPUT1180 ;1190 MEMLO = $2E7 ; pointer to bottom of free RAM1200 MEMTOP = $2E5 ; poinI}ter to top of free RAM1210 ;1220 FR1 = $E0 ; Fltg Pt Register 1, scratch1230 ;1240 STATUSOK = 1 ; I/O was good1250 STATUI}SEOF = $88 ; reached an end-of-file1260 ;1270 HATABS = $31A1280 ;1290 HIGH = $100 ; divisor for high byte1300 LOW = $FF I}; mask for low byte1310 ;1320 .PAGE "The installation routine"1330 ;====== CHANGE NEXT LINE TO SUIT YOUR MEMORY ======13I}40 *= $30001350 ; This first routine is simply1360 ; used to connect the driver1370 ; to Atari's handler address1380 ; I}table.1390 ;1400 LOADANDGO1410 LDX #0 ; We begin at start of table1420 SEARCHING1430 LDA HATABS,X ; Check device nameI}1440 BEQ EMPTYFOUND ; Found last one1450 CMP #'M' ; Already have M: ?1460 BEQ MINSTALLED ; Yes, don't reinstall1470 INI}X1480 INX1490 INX ; Point to next entry1500 BNE SEARCHING ; and keep looking1510 RTS ; Huh? Impossible!!!1520 ;1530I} ; We found the current end of the1540 ; table...so extend it.1550 ;1560 EMPTYFOUND1570 LDA #'M' ; Our device name, "M:"I}1580 STA HATABS,X ; is first byte of entry1590 LDA #MDRIVER&LOW1600 STA HATABS+1,X ; LSB of driver addr1610 LDA #MDRII}VER/HIGH1620 STA HATABS+2,X ; and MSB of addr1630 LDA #01640 STA HATABS+3,X ; A new end for the table1650 ;1660 ; nowI} change LOMEM so BASIC won't1670 ; overwrite us.1680 ;1690 MINSTALLED1700 LDA #DRIVERTOP&LOW1710 STA MEMLO ; LSB of toI}p addr1720 LDA #DRIVERTOP/HIGH1730 STA MEMLO+1 ; and MSB therof1740 ;1750 ; and that's all we have to do!1760 ;1770 I}RTS1780 ;1790 ;1800 ;;;;;;;;;;;;;;;;;;;;;;;;;;;1810 ;1820 ; This entry point is provided1830 ; so that BASIC can reconnI}ect1840 ; the driver via a USR(RECONNECT)1850 ;1860 RECONNECT1870 PLA1880 BEQ LOADANDGO ; No parameters, I hope1890 I}TAY1900 PULLTHEM1910 PLA1920 PLA ; get rid of a parameter1930 DEY1940 BNE PULLTHEM ; and pull another1950 BEQ LOADI}ANDGO ; go reconnect1960 ;1970 .PAGE "The driver itself"1980 ;1990 ; Recall that all drivers must2000 ; be connected toI} OS through2010 ; a driver routines address table.2020 ;2030 MDRIVER2040 .WORD MOPEN-1 ; The addresses must2050 .WORD I}MCLOSE-1 ; ...be given in this2060 .WORD MGETB-1 ; ...order and must2070 .WORD MPUTB-1 ; ...be one (1) less2080 .WORD MI}STATUS-1 ; ...than the actual2090 .WORD MXIO-1 ; ...address2100 JMP MINIT ; This is for safety only2110 ;2120 ; For manI}y drivers, some of these2130 ; routines are not needed, and2140 ; can effectively be null routines2150 ;2160 ; A null rouI}tine should return2170 ; a one (1) in the Y-register2180 ; to indicate success.2190 ;2200 MXIO2210 MINIT2220 LDY #1 ; I}success2230 RTS2240 ;2250 ; If a routine is omitted because2260 ; it is illegal (reading from a2270 ; printer, etc.), sI}imply pointing2280 ; to an RTS is adequate, since2290 ; Atari OS preloads Y with a2300 ; 'Function Not Implemented' errorI}2310 ; return code.2320 ;2330 .PAGE "The driver function routines"2340 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2350 ;2360 ; NowJ} we begin the code for the2370 ; routines that do the actual2380 ; work2390 ;2400 MOPEN2410 LDA ICAUX1,X ; Check type oJ}f open2420 AND #OPOUT ; Open for output?2430 BEQ OPENFORREAD ; No...assume for input2440 LDA MEMTOP2450 STA MSTART ; J}We start storing2460 LDY MEMTOP+1 ; ...the bytes2470 DEY ; ...one page below2480 STY MSTART+1 ; the supposed top of memJ}2490 ;2500 ; now we join up with mode 4 open2510 ;2520 OPENFORREAD2530 LDA MSTART ; simply move the2540 STA MCURRENT J}; ...start pointer2550 LDA MSTART+1 ; ...to the current2560 STA MCURRENT+1 ; ...pointer, both bytes2570 ;2580 LDY #STAJ}TUSOK2590 RTS ; we don't acknowledge failure2600 ;2610 ;2620 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2630 ;2640 ; the routine J}for CLOSE of M:2650 ;2660 MCLOSE2670 LDA ICAUX1,X ; check mode of open2680 AND #OPOUT ; was for output?2690 BEQ MCLREJ}AD ; no...close input 'file'2700 ;2710 LDA MCURRENT ; we establish our2720 STA MSTOP ; ...limit so that2730 LDA MCURREJ}NT+1 ; ...next use can't2740 STA MSTOP+1 ; ...go too far2750 ;2760 MCLREAD2770 LDY #STATUSOK2780 RTS ; and guaranteedJ } to be ok2790 ;2800 ;2810 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2820 ;2830 ; This routine puts one byte2840 ; to the memory forJ } later2850 ; retrieval.2860 ;2870 MPUTB2880 PHA ; save the byte to be PUT2890 JSR MOVECURRENT ; get ptr to zero page2J }900 PLA ; the byte again2910 LDY #02920 STA (FR1),Y ; put the byte, indirectly2930 JSR DECCURRENT ; point to nxt byteJ }2940 RTS ; that's all2950 ;2960 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2970 ;2980 ; routine to get a byte put2990 ; in memory befJ }ore.3000 ;3010 MGETB3020 JSR MSTATUS ; any more bytes?3030 BCS MGETRTS ; no...error3040 LDY #03050 LDA (FR1),Y ; yeJ}s...get a byte3060 JSR DECCURRENT ; and point to next byte3070 MGETRTS3080 RTS3090 ;3100 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;J};;3110 ;3120 ; check the status of the driver3130 ;3140 ; this routine is only valid3150 ; when READing the 'file'...31J}60 ; "M:" never gets errors when3170 ; writing.3180 ;3190 MSTATUS3200 JSR MOVECURRENT ; current ptr to zero page3210 CJ}MP MSTOP ; any more bytes to get?3220 BNE MSTOK ; yes3230 CPY MSTOP+1 ; double chk3240 BNE MSTOK ; yes, again3250 LDYJ} #STATUSEOF ; oops...3260 SEC ; no more bytes3270 RTS3280 ;3290 MSTOK3300 LDY #STATUSOK ; all is okay3310 CLC ; flaJ}g for MGETB3320 RTS3330 .PAGE "Miscellaneous subroutines"3340 ;3350 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360 ;3370 ; finalJ}ly, we have a couple of3380 ; short and simple routines to3390 ; manipulate MCURRENT, the ptr3400 ; to the currently accesJ}sed byte3410 ;3420 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3430 ;3440 ; MOVECURRENT simply moves3450 ; MCURRENT to the floatingJ}3460 ; point register, FR1, in3470 ; zero page. FR1 is always3480 ; safe to use except in the3490 ; middle of an exprJ}ession.3500 ;3510 MOVECURRENT3520 LDA MCURRENT3530 STA FR1 ; notice that we use3540 LDY MCURRENT+1 ; both the A and3J}550 STY FR1+1 ; Y registers...this3560 RTS ; is for MSTATUS use3570 ;3580 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3590 ;3600 ;J} DECCURRENT simply does a two3610 ; byte decrement of the MCURRENT3620 ; pointer and returns with the3630 ; Y register J}indicating OK status.3640 ; NOTE that the A register is3650 ; left undisturbed.3660 ;3670 DECCURRENT3680 LDY MCURRENT J}; check LSB's value3690 BNE DECLOW ; if non-zero, MSB is ok3700 DEC MCURRENT+1 ; if zero, need to bump MSB3710 DECLOW37J}20 DEC MCURRENT ; now bump the LSB3730 LDY #STATUSOK ; as promised3740 RTS3750 .PAGE "RAM usage and clean up"3760 ;3J}770 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3780 ;3790 ; END OF CODE3800 ;3810 ;3820 ; Now we define our storage3830 ; locations.J}3840 ;3850 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3860 ;3870 ;3880 ; MCURRENT holds the pointer to3890 ; the next byte to be PUTJ} or GET3900 MCURRENT .WORD 03910 ;3920 ; MSTOP is set by CLOSE to point3930 ; to the last byte PUT, so GET3940 ; won't tJ }ry to go past the end3950 ; of data.3960 MSTOP .WORD 03970 ;3980 ; MSTART is derived from MEMTOP3990 ; and points to theJ!} first byte4000 ; stored. The bytes are stored4010 ; in descending addresses until4020 ; MSTOP is set by CLOSE.4030 MSTAJ"}RT .WORD 04040 ;4050 ; DRIVERTOP becomes the new4060 ; contents of MEMLO4070 DRIVERTOP = *+$FF&$FF004080 ; (sets to nextJ#} page boundary)4090 ;4100 ;4110 ; The following is how you make4120 ; a LOAD-AND-GO file under4130 ; Atari's DOS 24140 J$};4150 *= $2E04160 .WORD LOADANDGO4170 ;4180 ;4190 .END4120 ; a LOAD-AND-GO file under4130 ; Atari's DOS 24140 HB? } %`ee`L`8Ƹȥ`ȱi`ȦN&}````8`ƶ`l8嶅`ȱ` M` Mȥ``EE`%N'}%`8(` Ƶ` Ƶ` % 0Ƶ` 0Ƶ` Ƶ` 0Ƶ`Ŷŵ(` FƵ` FƵ` %N(} FƵ` FƵ` %*ff` %&`8嵅嶅`II` Lj ff`&&N)}`$ Ȃ8嵅嶅$8峅崅 @&&&8嵨嶐泅$p8峅崅Ld8居岅$N*}㥴` L L`0Lee`ee`ȱl MLÀ MLɂN+}v$Lw ix iy z w z !! :8`ȱ -0.:*ɂ`|ȱ A N,}[|숭|L!ɂ {iʂi˂{ 0 ! 0{ɂL%  6ɂ M >LGN-}چن߂ 6 M L섭܂ L 6 K L 6 K ʅ 6 M  N.} 6 K 6 K L&ą 6 K ʅ 6 M  6 K!  6ɂ M >L1N/}ʅ 6 K ʅ 6 M  6 K  6ɂ M >L1ͅ 6 K ʅ 6 N0} M  6 K  6ɂ M >L1Ѕ 6 K ʅ 6 ؆ M  6 K Ӆ N1}6 K ۆ ` Lنچ چن 6 6 À LKنچ 6 `ENTER #N2}LOAD #ASM ASM #,#,#,#DOSۆ䝇!"``!"ffLL}FTN3}e MAC/65 Disk-Based ver 4.20 (C) 1994 by FTe .I.ELS.ENDI.MACR.END.TITLŠ.PAG.WOR.ERRO.BYT.SBYT.DBYT.EN4}N.OP.TA.INCLUD .FLOA.CBYTŻ.LOCA.SE*.JSJMDEINLDLDSTSTCPCPBIBRCLCLCLCLDEDEINN5}INNOPHPHPLPLRTRTSESESETATATSTXTXTYBCBCBEBMBNBPBVBVORANEOADSTLDCMSBASROLSRO% <>N6}.DEƽ<><.O.AN.NOԡ.RE .REF.DEF.NOT .AND .OR ,X),,,ةNNOOBEREJECLISXN7}REMLISCLISNUؐҐҐɐҐ3''3ϐꐰ'ϐϐĐPKrrurSSTWT~x(æKN8}J3bǧrnhw ^~7*C25  榤 XʈHh(@`8x0Pp!AaN9}&Ff Ɍ T :X  ,  C uLЋ - ۢ N:}-Hȱ h L(EDIWHATTEXTMODũ5 L(Ҍ` HH`ɛ ۱Lɛ N;}L^LH Ɛ ݟ 8 zH %h  c $p əLHL ݟ H %h N<}@ ؐ`H h ٰ եԄL Q Ɉ򅗅 `  CN=}Ȋ L0ߩ` 04C L؍l !L؍N>}L;8eHeHL H H`L0󆞥hhL;`ʆL; 0 N?}  L L; `` 񒦞` ) %H$H`͒I9Ɛ Ɛ`L ĭs N@}i ů8` @`` ۢB `хѦ򤟱")Q ȱ8e`8`LISԠNEבDE̘FINA}NIJASSAVLOAENTEBLOABSAVNUPRINRE΢REРSIZLOME͠BYŠCРDO TEX ۄ ذ ِЄNB}L ۱$  @L8 @ @ @` ۄЩ Əe Ə  ZڰեLo800  NC}8` ۹ɛg+< ۩, @`0" `Ѫ$ɛ @$P `ND}8`ɛ @`0 g8`0 45` ۄ, = @`8`U; =ZZZfZnNE}nZ& /# 1D EFGJHIMKL=>A Aλ߻A A @:NF}=>@>>8?8679<;ޑ<<;C;?<;7;;<;<><;N;?>;<<;<;;B<<>< 0 4 5 # 1u NH} $%! 3" 2=_  W @=:q:ߌћݝOƞd6ޕÛipMM/,[]+NI}-*/!&^"   ۱Ò ɛ;ė(` -Є 5ɛș IX; @򹋻 @ɛ`旤NJ};*,0ҪH  h`L ۄЄ  @)++D LT hh ` ۤЄѱ NK}>  &𥐪 @ @񊨱ɁȱAх`? [``.8` i L@0:`󙋻ə a з` g S /    "Ll` L  QڥNQ}< g Qڠȱ)Ȅ汥 )   UX `Xd ĵB  ] Ķ m NR} ` 9;!  ݩLVԩ <0 ̎ H Nԅh ܗL'ՅԅՅօנ&uԕNS} JJJJ ϗ) ϗ(L' 0 `$  ꗥHJJJJ h))`Lį`s8 քՊօNT}0ȱ8eԐհֱ֤֠H h`J (L ` ) ` ``͌ƵƵƶƶ`mi͝LNU}H 0+ hȄ H Qڭim hLhH hL˜ H  hH hɛ` SNV}Ʈ` S  g LݟƐƐLݟ@  SƐ  SAR NW}{Ɛ 00 N g 0ͥeLyԦH gh g S) S N g$PI LNX} Įɛʆ N g䮐)`  Lai@( `ș`@  SE*JFH hGNY}*I%L˚ SJ FH ޚh* S=Lܢ`8qiHH hihi`NZ}H饦 ޚL  LEH h HLܢ WHVH`ajllvp)`8`LLܢ g.N[};* S  Q ؐ! gͭLv ] ]ҩ; S>+ 8吪8吅膐 LWƐ ]N\} 8 " ,p   "L`- ? Qک Q L(Y ɛL08҅8HŲN]}&eҪȹɛʈıh8宅汥豂Ʈ򅗅 -L^ BL& c 򈄲N^}Ʊ洤́汤IJ ـ褳Ȅ` , g S?莁` S)e` m } m } N_}mL= SB  JLH$ h L L g SN 匥 eLH LH g Z ZL Z N`}Ze樥e͙ ̘Ѧ o  碈  з` Z7 Z0 Z ZLF Z Z 9Na} ZL|L ȟ 8儅充 k  ӍLӷ ȟ ( 8慜煝 kNb}Lʼnň` š Š``  `ŝ Ŝ` ԥ ݟ $p L( N [бNc})ȩ Ȅe8Ш ˶ LQڥЯ ˶ L ޶Lԟ搠 ޶  ն L ř Ř Nd} ř Ř` "L` e` }  } g    š ĠNe}`Ʈ0ii`   g; L L L` g]; X _ &  gD S;Nf} g+ S; ȟ g / ~ G P n !@ ^ L+ S<`Ng}& { з ޶ii  j H L(  G P:ӄ7 Nh}X҄ۺ;hd~ Ni}` <& S] ߭р SXILLy,PLޚ$0c ^ m )$0O J = ե m $01 Nj}, L۸$ 8 MLL θ)` Ƹ  Ĺ  -(`$0 ` L S i U8`0 Nk} "Ȅ<$0)Hh`H 8嬨孪8h g g0  0 LNl}v" mHlH`+LD gLv)ㅪ) S?>  @Ɛ eɂ ɀ Nm}  g g g  Lv  (L9@ L 9L < S ` S 9) -Nn} ܢLLܢ LФȥ LL ư  LܢLФ` L S )No} Lܢ@𥆝i ܢ 0$0 `i e/Np}ȑȥȥȄ g>;:=A /L*Ɛ HhȥȥȄiL⥥`L S  Ǭ搦ʩ`Nq}G!@` ܢ`Le H h g g gLv@L搩l S Nr}@)8 <L S`L*) ܢ < ܢ S`8Ns} E( Ǭ$0). ȥՑL) ȱՆL ) LHH hh` էLNt}ܢ է Lܢ SA`/0 S)QP S) `    cLܢ Z Z Z Z`LNu} $LHH ޚ hhLL$ 8`$p/+ߤėLѤė ՚ ƸNv} ਩8 LШL۸ Ĺ  sƗƮ`_<+ 2ԅդ6e Nw}$Hՙ+ȥԙ+ȄhԅL83+`ų* {LdHH`+L8 L搥 ƐԥNx}ȥ`刾++`(Xȉ9܂e( S0' J搱`LS 1Ny}`ei` )ȱ` ` S@` 劤шܦ eȪHȱȱ)h`6`Nz}0``Յԩ` ©eԅԘeՅ`8ԅԩՅ` ©8ԅԘՅ`օנ` © FfffԈ0?uؕԅՅN{} ©Ն &&&8થ׆Ԉ` ©%ՅՊ%ԅ`$p$0)  몥 Ն` 몥N|})Iڤhh+Lshhզ uՆL8 ©ՅՊԅ` ©EՅՊEԅ` ©Ր` ><7 23 +)* ©! N}}  LL    )N~}䯐` ?i??[Z 07ee YzȱĘL8匝N}卝ei͙ ̘L8匑ȥ卑ȪȑȑȩȽ䯐`$P<@4N}!18匝9卝808899莚(` Lӭ )H0 L )ёё hH  h$N}$0 ,P {`? ?ԩL*** ERROR -MEMORY FULBAD DEBRANCH RANGNOT Z PAGE/IMUNDEFINED LABN}EEXP TOO COMPLEDUP LABEO'FLO IF/ENDIF NESTIN VAL >25 IF/ENDIF STAC NESTED MACRO DE PHASE ERRO*= EXP UNDESYNTAXN} O'FLODUP MACRO NAMLINE # >6553MISSING .ENDNO *NUM/REN O'FLONESTED INCLUDLIST O'FLONOT SAVE FILLOAD TOO BIN}NOT BINARY FILINVALID .SETOO MANY X-REFTOO MANY LOCAL FIELDUNDEFINED MACRMACRO NESTIN BAD PARAMETE!NOT F.P. NON} DEV HANDLE҉TRUNCATED REÊTIMEOUԋNAːWRITE PROTECTEĒBAD DEV CMĠDRIVE TOO MANY OPEN FILEӢDISK FUL̥FILE NAMŧLOCKEĪFILN}E NOT FN(SEE MANUAL$`݆   װLH`H H hh 鸩 R ƥ0CN}6ȐH J, h⩮^+ȱ8e;LLa L ͹0L` GAN}) 8动勢  * ɇ * *LɆɅɄ $p 6LN`ۺȄ@ J @[N}L 0 0 Ĺ `0עਈɛO(K֠)- Hȱh ץ8 0LN}q JL >L(@[` 0 0i~iنؠ0 >օנ֐ֈƮ ȱ֐+Į!N}䪱ؑHر֑hֈ֥ЦքׄИ}e`q䨊e`8包卅  0PH N}hšĠ答 $0 (,  J8  鸩 Ĺ Lqɇ'IimiLv  LvɆN} LֳɅ LvɄ#Lv`` Z渦 6LN ) `Ԣ儐N}`Z8圅坅 o   L8HI 8`N}LKȅ k L搥3 财 Qڠ Ÿh _ &Lܢ LܢɛN}򈱑 `濥ɀ`8~H m~  h`$0 8 xIiH {h {LN} { {ȹ8 {9 {̚ȱ`& Ͷ LMLN= Ȋ ``l 搤搱` Ͷ 0`LN}ө ϶HI` `H ҶhH hLJ*K+GHFH`H ƶhL `H ն N} նhJ S)` 0`ɀ/ L˷)Lʎ JLڱ)⭆Ŧ  L( N} `Ɉ"% ͶNLM 0L4 ӷ 财@` 緥Ɉ` ն 0` նN}C` ӷΆ`~IHEDBKLV`ՆԈ gȱ80 LQՆ gФб$0N} (` LH shHJJJJ ~h)L0123456789ABCDEF s )LL mL殤 (` L0) ``N}) Lװ`͟?)4 Ƹ/HH L ^ hhԩ` է Ƹ ܢ J`L 鸭N}` { Ĺ  J }L Ĺ۠ 8 XhLL` N}Ĺ  J }8厪 J"LPAGESYMBOL*** ASSEMBLY ERRORS: BYTES FRE ?=?%?=?ۺ;N}N}N}DOSN}LU#AFTe SYSTEM EQUATES FOR ATARIAX;X; FILE = #DN:SYSEQU.ASMX;X;X; I/O CONTROL BLOCK EQUATES$X;)SAVR}EPC ;; SAVE CURRENT ORG+X;.@;;START OF SYSTEM IOCBS3IOCB8X;B-ICHID ;;DEVICE HANDLER IS (SET BY OS)L)ICDNR}O ;;DEVICE NUMBER (SET BY OS)VICCOM ;;I/O COMMAND`ICSTA ;;I/O STATUSjICBADR ;;BUFFER ADDRESSt&ICPUR}T ;;DH PUT ROUTINE (ADR-1)~ICBLEN ;;BUFFER LENGTHICAUX1 ;;AUX 1ICAUX2 ;;AUX 2ICAUX3 ;;AUX R}3ICAUX4 ;;AUX 4ICAUX5 ;;AUX 5ICAUX6 ;;AUX 6X;'IOCBLEN IOCB;;LENGTH OF ONE IOCBX; X; IOCR}B COMMAND VALUE EQUATESX;COPN;;OPEN CGBINR;;GET BINARY RECORD CGTXTR;;GET TEXT RECORD CPBINR ;;PUTR} BINARY RECORDCPTXTR ;;PUT TEXT RECORD(CCLOSE ;;CLOSE 2CSTAT ;;GET STATUS<X;F7X; DEVICE DEPENDENT COMMAND R}EQUATES FOR FILE MANAGERPX;ZCREN ;;RENAMEdCERA!;;ERASEnCPRO#;;PROTECTxCUNP$;;UNPROTECTCPOINT%;;POR}INTCNOTE&;;NOTEX;X; AUX1 VALUES REQD FOR OPENX;OPIN;;OPEN INPUTOPOUT;;OPEN OUTPUTOPUPD ;;OR}PEN UPDATEOPAPND ;;OPEN APPENDOPDIR;;OPEN DIRECTORYX;X;X; EXECUTE FLAG DEFINESX;#EXCYESR};; EXECUTE IN PROGRESS"+EXCSCR@;; ECHO EXCUTE INPUT TO SCREEN,%EXCNEW;; EXECUTE START UP MODE6$EXCSUP ;; COLD STR}ART EXEC FLAG@X;JX; MISC ADDRESS EQUATESTX;^CPALOC ;; POINTER TO CP/Ah#WARMST;; WAR, START (0=COLD)r#MEMLOR};; AVAIL MEM (LOW) PTR|%MEMTOP;; AVAIL MEM (HIGH) PTR1APPMHI;; UPPER LIMIT OF APPLICATION MEMORY%INITADRR};; ATARI LOAD/INIT ADR!GOADR;; ATARI LOAD/GO ADR(CARTLOC;; CARTRIDGE RUN LOCATIONCIOV;;CIO ENTRY ADRR}EOL;; END OF LINE CHARX;+X; CP/A FUNCTION AND VALUE DISPLACEMSNT#X; (INDIRECT THROUGH CPALOC)X; R}IE. (CPALOC),YX;"CPGNFN;; GET NEXT FILE NAME'CPDFDV;; DEFAULT DRIVE (3 BYTES)2CPBUFP ;; CMD BUFF NEXT CHAR}R POINTR (1 BYTE)CPEXFL ;; EXECUTE FLAG,CPEXFN ;; EXECUTE FILE NAME (16 BYTES)&)CPEXNP;; EXECUTE NOTE/POINT VR}ALUES0CPFNAM!;; FILENAME BUFFER:!RUNLOC=;; CP/A LOAD/RUN ADRD)CPCMDB?;; COMMAND BUFFER (60 BYTES)NCPCMDGOXR}X;bSAVEPC;; RESTORE PClX;FER:!RUNLOC=;; CP/A LOAD/RUN ADRD)CPCMDB?;; COMMAND BUFFER (60 BYTES)NCPCMDGOXP!'AA SAMPLE PROGRAM USING IOMAC.LIBAEI>D:SYSEQU.M65>D:IOMAC.LIBI5A [end of equates and librariV}es...begin code]A$EK.p;; an arbitrary location8X;B SAMPLEL !AROUND;; skip buffers, etc.VX;`BUFFER jV}X;tWMESSAGE1 =A This is a test of the sample program  Type your name here -> A~ A AM1LENGTH MESSAGE1V}MESSAGE2 AHi there, AM2LENGTH MESSAGE2X;X; BEGIN ACTUAL CODEX; AROUNDOPEN ===AP:A BPUT V}=MESSAGE1=M1LENGTHINPUT =BUFFER PRINT  BPUT =MESSAGE2=M2LENGTHPRINT =BUFFER 3PRINT =AAlV}so, we send it to the printer...A BPUT =MESSAGE2=M2LENGTHPRINT =BUFFER(!PRINT =AThat's all folksA2 CV}LOSE <:FEIP printer...A BPUT =MESSAGE2=M2LENGTHPRINT =BUFFER(!PRINT =AThat's all folksA2 CTppLQqqq堭 Hi there, 0BJKLhqP:eDqE Z}V BDqEDHI VBDpEHI VLq BDqEHI V BGDqE HI VZ} BDpqrEHI VL5rAlso, we send it to the printer...0 BDrE#HI V0 BGDqE HZ}I V0 BDpEHI VLrThat's all folks BDrEHI V0 B V` V0 BGDqE HXc0