@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uGfABASIC&&&FRRRJ!@5666666667 7777T}BSCR_MEMNUMEGGBOYXBOYYPLAYLEVEL TOTAL_EGGS EGGS_AVAIBLELIVESEXTRA BONUS_LEVELDANCEDEADSCOREHI_SCOREMXMYBTNSU}TEADYOBJY TEMP_SCOREEXSPEEDXNUMEEGQWBOYSPLANE1PLANE2PLANE3PLANE4KOLSTATENO_EGG PLAYFIELDNO_TOKENTOKENTALKV}EGGXEGGYEGG_OFSSPEEDPALOBJEGGEGGTYPEREOPENOBJ_DATAEGG KOLOR_DATA IN_HI_SCOREASSIGN_OBJECTSNEW_EGG TALK_SCREENW}DO_COLORTALKSCREENSCOREHEALSMAINWALK EGG_CLEAREGG_DROP DIFFICULTYSTABBEDEXPLODE NEW_SCREENKILL_MANLEV1LEV2LEV3LX}EV4LEV5LEV6LEV7LEV8LEV9LEV10LEV11LEV12LEV13KNIFEGRENADEANGLEWIGGLEERR FIX_COLORS(----------------------------Y}-------- BARRAGE "By Steven Evermann & Paul Prat "(c)1988, Antic Publishing Inc.  c$ Ò FCHECK RESOLUTIZ}ON J)!6 | B A R R A G E | | REQUIRES LOW RESOLUTION!!SORRY!FqF! F!,E4  F Get address of screen mem[}ory J* !@@ !  !  !  !  F*  !pp FM$ F!FMF M\}F tEGFM F Initialize eggs NF MFOpening screen *E``FgInitialize boy's position ]}E&&FgEF"Key=&HFFFC02 pause removed MF&MF&EFEFEFEppF2 EF EF Score=0  E^}F ŦFFScore=Temp_score MFe EFEF EFFEMF=MF=M F= ŘFEF FEMFF2F ž_}FEF FE6!`!`!`Fo7R!M! HI_SCORE.EGGFuM!F8MFM$ FFqF4-----------------------`}-------------------------- + F-M F F- "!!F-M F Ɣ F-EFM FMF FM F ƶ F-a} EFMF  F(  F-For smooth movement -EF!! !FF z!!!F EF FE4F!TF!.F<-----b}---------------------------------------------------- + F-  F- ǒ FEF ǜFEF FE!c}! !F!! !FFEFz! !`!F- &F4{FSmooth movement so eggs drop at constant sped}ed  FF.FF8---------------------------------------------------- -+F-6!FEG@HF-!! !Fe}!! F{F!! !FY!@ "B` F { F ȈFF!! !F!! !F&Yf}# ! " F { F6!F.F!H=========================== EGG ROUTINES =================g}=========== + F=NThis routine draws # of eggs that are falling and checks each for collision EFStart with egg #0 Fh}E4 ! !!F Put blank space where egg was *0 ! F Move position of egg down e.  ! ! !`i}Fedraw egg F.0 ! FIf horizontal motion add that  :    @@j} F .check if boy is under egg. if so catch egg    F ! !!FgM FEgg caught 0!Dk}Fc(Level+1)*9.6 iM FD* F If boy caught a knife, kill him MFF F F (  ; F,Egg splat l}i ̚  F ! !!F `  F !=! !F ̂F! !=! !F F Mm} FM F F *MFF If grenade was dropped, kill boy  F F Z F Z F4FZ F.F<---------n}----------------------------------------------- + F-5F-&'z!!% FChange score 8 F Have enough eo}ggs fallen? If so add another ,EppFMore eggs fall each level $4Fp Make more eggs fall at once h M F < p}Fm If finished dropping 3 eggs at once inc level M F EFEFEF4FF$Y! "{Bravo}F q}J%;;  F44 F%If need life and have 12000 points since... c&4 F last extra life, give new life MF Mr}F $Y! "{EXTRA}FMF$Y! "{LIFE!}F F  ϾPFEFF0 !Ps}FTells user round 1 is 14,after finished all 13 levels o0!FMFF F  FMFF F.F6-------------------------t}------------------------- d+F-!! !F$ ! ! !`F-ЀEIFy!p!!! u} F XF {F y!!!FMF.F8---------------------------------------------------- a+F->EGv}F-6! V !V  !F$y!p!`!!@@F F {PF y!!!FY! "B` Fw}6!FMF.F@------------------------------------------------------------ e+F-5 F-M F-2 \ F- If gamx}e not over because lives left - ,F if not first level 5F FEFEppFiEF EFMF rFEy}F Game over o FE.FE>----------------------------------------------------------- +F-YFF-MF-'z!!z}% FEF   F# `!@!!F5FF .F8----------------------------------------------------{} -+F-!F(@!!!F-'Z!!F'.!! F-.F@-------------------------------|}------------------------------ + F-4EGF ! !!F- M F  F.F@--------------------------}}----------------------------------- + F-NThis routine sets up the properties a new egg,grenade,or knife will have... L~}until it hits the ground or is caught. These properties stored in arrays .. E@FhAlways set to top of screen eB} EV   F Set Random X start position i. EFBegin egg with no horiz. movement o*EV  F}Used to change settings e0 E FMake object egg then change at lev . routines, if needed. e> }E@F Set this egg to descend 6 pixels at a time. i,wL!!!!!!!!!!!!F  @F!MF}M F 0 !F F.F:------------------------------------------------------- +F-M F-.F :------------------------}------------------------------- +F-M!F-.F!:------------------------------------------------------- +F-M F-M!F-}.F!:------------------------------------------------------- +F- EV F.F:--------------------------------}----------------------- +F-M F- EV F.F:------------------------------------------------------- +F- } E#V  F- EV FM!FEM FE.F :------------------------------------------------------- }+F-M F-MF-.F:------------------------------------------------------- +F-M!F-MF-.F:---------------------}---------------------------------- +F-M F-MF-M!F-.F!:------------------------------------------------------- +}F- EV FMFE.F:------------------------------------------------------- +F-M F- EV FM}FE.F:------------------------------------------------------- +F-  E#V  F- EV FM}!FEM FEMFE.F:------------------------------------------------------- +F-  E FMFE.F<-----------------}--------------------------------------- .+F-  F-& E FObject is a knife - F.F:------------}------------------------------------------- + F- ܔ`F-" E FObject is a grenade - F.F:-------}------------------------------------------------ +!F- $@F-Egg offsets -$ EU33336FEEgg moves right - }LFU$ E#U33336 FEgg moves left  F.FF================== HOUSEKEEPING ROUTINES ====================== H---}------------------------------------------------------------------ +F-YF!F $!!!F # F-!F! !}FF-$!!!F #F!! !(FEFFE`!@!!F4F` `F!(!!!}`F*'p!!ROUND LEVEL SCOREFFGET COPY OF SCREEN MF.F:------------------------------------}------------------ 2+$# F Saves & restores your desktop colors. ߼EGpF- ߢ#F" E`!! } F- ߲F# 6! F F$ lF`.FJ----------------------------------------------------------------------- +}F-$Create the opening dialog screen -!FEG`Fd(!!!Fo*'`!! B A R R A} G EF LF$!!!F#F$ !,! !,F #F$ ! ! ! }F ( !!!FD'!D!.PRATT & EVERMANN (c)1988 ANTIC PUBLISHINGF%!!F$!6!H}! FN%!!F$ !.!L!FN$!"! !<FN$!"! }!<FN(`!!!@F"'D!@! HIGH SCOREF"'D!l! YOUR SCOREF%!!F$ ! }! !:FN$! ! !:FN(`!!!0F'!2!P L A YF'}!2!E X I TFFYF.F@------------------------------------------------------------ S+F-$Create the open}ing dialog window -  F "!!FpF!!F } FpEFE``Fp6!F(!!!`Fi6!FF,'} #6A%   !X!% F,' #6A%   !!% FF "!!FM}"F Print At(2,12);Mx,My JFi F;EF FEYFE2"$F;Boy falls to bottom of screen -!}! !F0!F!! !F{FF!E&&FY! "B` F6!F.F!F---------------------}---------------------------------------------- +"F-!! !F-FEV F-!! !FF{V} F!! !FF{V F.F&----------------------------------- +F-:Save the high score} to a file. Create a file if needed vL#Fh|FF7R!M! HI_SCORE.EGGF8:M!F if Hi_score file exists, open and get hi }score B` F8MF.F.------------------------------------------ t+#F-:uM!F- if no file, create new file with "0"} as hi score 8MFFF.FJ---------------------------------------------------------------------- +F-BThis procedure} physically pokes the objects into screen memory -8then uses the GET command to put them into an array. e!!p!p}! F!!p!`!F !!0!@!FEGpF:6!FBLACKOUT SCREEN SO SCRE}EN POKING IS HIDDEN FRFEGFEGpFUQ!! !!F"poke object into screen memory } !F !F ! F @!!F F put object into array }!!!p! Fy F !!0!@!FRFEFFEEFFEQ!! !!F"poke object} into screen memory  !F !F ! F @!!F4F}2F!!!`! Fy4F( FYF.F8-------------------------------------------}---------- +F-SET SCREEN COLORS -RFEGpFOQ"F6!"F FG.F|FF16,1792,1284,1312,7,116,5,}1365,546,102,68,1859,1911,1360,1586,1840 -2----------------------------------------------- |F- stand boy 8192,8192,0},8192 -12290,12290,0,12290 12294,12294,0,12294 12294,6,12288,6 29670,992,28678,28672 30263,2032,29127,455 29847,}1712,29543,29344 -30711,2032,28679,996 430711,1904,28679,6007 31183,992,31279,13280 14350,2032,14798,2046 14798,158}4,14798,4080 6604,1584,6604,5808 7148,1584,7148,1724 6152,2032,6152,6128 2920,1168,2056,2040 2920,1168,2056,4080 }2056,2032,2056,2040 2056,2032,2056,4080 0,4088,0,4088 0,4088,0,4088 0,3960,0,3960 0,3960,0,3960 0,3960,0,3960 0},3960,0,3960 0,3960,0,3960 0,3960,0,3960 3960,0,0,3960 3960,0,0,3960 1584,1584,0,1584 81584,1584,0,1584 8 * 1 }by 32 words leftboy 0,0,0,0 16384,16384,0,16384 24576,24576,0,24576 24580,24580,0,24580 24588,12,24576,12 593}40,1996,57344,57356 -60524,4064,58252,896 659694,3424,59086,58702 -61422,4064,57358,1984 61422,3808,57358,12008 -62}366,1984,62558,26560 -28700,4064,29596,4092 29596,3168,29596,8160 13208,3168,13208,11616 -14296,3168,14296,3448 123}04,4064,12304,12256 -5840,2336,4112,4080 5840,2336,4112,8160 4112,4064,4112,4080 4112,4064,4112,8160 16,8160,16,817}6 0,16368,0,16368 0,16120,0,16120 0,15480,0,15480 0,14396,0,14396 0,14396,0,14396 0,14366,0,14366 14350,0,0,143}50 14350,0,0,14350 12294,12294,0,12294 12294,12294,0,12294  * 1 by 32 words  rightboy 0,0,0,0 2,2,0,2 6,6,}0,6 8198,8198,0,8198 12294,12288,6,12288 13287,13280,7,12295 13879,2032,12743,448 629847,1712,29543,29351 -30711},2032,28679,992 130711,1904,28679,6004 31183,992,31279,998 14350,2032,14798,16368 -14798,1584,14798,2040 6604,1584,}6604,1716 7148,1584,7148,7856 2060,2032,2060,2036 2920,1168,2056,4080 2920,1168,2056,2040 2056,2032,2056,4080 205}6,2032,2056,2040 2048,2040,2048,4088 0,4092,0,4092 0,8060,0,8060 0,7740,0,7740 0,15388,0,15388 0,15388,0,15388 }0,30748,0,30748 28700,0,0,28700 28700,0,0,28700 24588,24588,0,24588 24588,24588,0,24588 |F8 0,0,0,0 128,256,0,3}84 448,512,0,960 256,512,192,960 0,512,448,960 0,512,448,960 320,512,128,960 128,256,0,384  splategg 8 0,0,0,}0 0,0,0,0 0,0,0,0 0,0,0,0 1792,1792,1792,1792 4064,4064,16352,16352 6072,6072,65532,65532 28,28,31,31 grena}de 896,0,896,896 1280,0,1280,1280 5896,128,512,512 1984,1600,0,0 1984,1152,0,0 1984,1024,0,0 1984,1344,0,0 89}6,640,0,0 knife 896,896,896,896 768,768,768,768 4032,4032,4032,4032 768,128,0,896 256,640,0,896 256,512,0,768} 256,512,0,768 256,0,0,256 }}&P̀xlfb}hL`ɨ8ҺhײZظ<ٌ2ڐ~V2&}}\`VRd` Efv*oM#P m HPHUBg?<JNA(m)m -:gS)@ -OK1 }PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdA }xr0XQ)K\NN &&&JrBjNuHz?<&NN\ }CAp$L Qp N߂BlJpNN߂pMN߂9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2 }A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 } @ e @}bA@p222Nr,Ҍ0<NBNu }  } }&8*:EENuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu  }0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuD }dBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8 }*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuNpNNuCDEJEg }JBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN? }<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр& }AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e }9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4< }/NJFkSFk&aQN`Ha"FFaQL8Nf6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb } BkH>aaNRFBdL8?Nf<JBga2SF Be BgQRB`ApdR e <rRF&0xaf }Ev+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNuaHQ` @gS@@CNu   } aH@@`"aH@@`a0) 4a3B HA2;i`0^ M / hawA~FNuAXr }%eee%NuA]NuA>A6HP 0 0 &0&?< NN\Hx?< NN\JfNu } BNN]N&(*N,SFSGFnHGnDDDk9DBlDEk9EBlFcllGcll0,lb 0,l }cNupmrtA)HA)HNpN<DbFEbGCHP@dʾAdBD2ƞE29|C???FF }22N23BRG0@\@N<"2)IN(* 9AJA)H@@[000][ˈN. Evz`* [g" ]g |g QSz` zQSp }Q][ɈN. Dvx`* [g" ]g |g QSx` xQSpQ]Bp4N߂HNu@9@JpNN߂r|<N. @xepw2A }$JBjDFHB t`0QBl9F)lVTAtp 9| N2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@ }Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f })I`LNuApNN$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0Nu _0HpN _0HpNp"_0HqN }E ұeHHQ0)N<$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%p }r Y2dP.gRG,D!p4Ae4v`VfANuNWHNuNVHNua NuN. IHPg"B  g &gN~JBjt }BNut`Rptr ae OgT Xgj HgSRB ae Fb$0k  c_  c b退`tSJBkNnRB0 } b b瀀`RB0 fрd`H&NրN鐶jNu2Nq Y Qf*d ЀЀ 2$4BBNudHRp` HRpJQfpN }tNq Y Qfd ЀЀNuN^Nd$_& Y Qf d փփABJk 0NNbN\$_& if"QdփփHRN~N }\Nb~,Nq8DRzXEEg"7PNqR$HBJBgpNJgJigp`eetЂ`"ЀeЁdp`ЀeЀe"Ѕe$W.H@@N }L"2` NqR YEjrd0` SjN YQf "_Nq*eNbN\*< NqbІSGfN~$_NЀЀЈN" KC`e N }`d \N l\Ӭ\ NupNd d3 d# d# # d# # # # d# # # # # # # # dB` # # # # # # # # # # # # # # } # # # # # # # # # # # # # # # # # # QNudd2d"d""d""""d""""""""dB` """"""""" }"""""""""""""""""""""""QNuPj0,lf$J,nk l*fp?Np N9|nN*A0,l2J,jk 0"fZR }AR@ 0"g 0 f` 0 g 0,f9@lTll`BllA"H"g"A4`Q"AA 0! NuS@R@ 0 g 0,f9@lRll`R@ 0 }fQj`Bll?<?<?<NM\NHQNH&g ! ge l*g l*gpNNu<,*?Hj\F FfN6`H FfN.`RGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa` }a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ }fza0 b @ Ee0Nu?<?<NMXNur9A(HNLNu0,^2,`NzEfpaRppaNAEg0PaľEfa4RE`p a2a* }Efp a(NldeS@f lbfSl`9Ab9FdNupapqr`p`C l ", Ⲭ dfѬ SA 0! Nup"NNNHJfNup#` }p`pNu)H9@Jp4N߂P'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ } gJl&f"Nu , 8g"P 8 @/, 8N  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNlHP?< NA\ }NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp , }BQjNup(N Division by zeroOverflowNumber not integer|-2147483648 .. 2147483647Number not byte|0 .. }255Number not word|0 .. 65535Square root only|for positive numbersLogarithm only for|numbers greater than zeroUndefin }ed error Out of memory Function or command|not yet implemented String too long|max. 32767 characters Not GfA-BASIC V1.0 }program Program too long|memory full|NEW Not GfA-BASIC program|file too short|NEWArray dimensioned twiceArray not dimen }sionedArray index too largeDim index too largeWrong number of indicesProcedure not foundLabel not foundOn Open on }ly|"I"nput "O"utput "R"andom|"A"ppend "U"pdate|allowedFile already openFile # wrongFile not openInput wrong|not nume }ricEnd of file reachedToo many points for|Polyline/Polyfill/Polymark|max. 128Array must have|one dimensionNumber of p }oints too|large for arrayMerge - Not an ASCII fileMerge - Line too long|aborted ==> Syntax error|program aborted!Undefi }ned label"Out of data#Data not numeric$Syntax error in data|unpaired quotes%Disk full&Command not allowed|in direct mode }'Program error|Gosub not possible(Clear not allowed in|For-Next-loops or|Procedures)Cont not possible*Parameter missing+ }Expression too complex,Undefined function-Too many parameters.Parameter wrong|must be a number/Parameter wrong|must be a }string0Open "R"|Record lenght wrong2Not an "R"-File3Only one Field per|Open "R" allowed4Fields larger|than record lenght }5Too many Fields (max. 19)6GET/PUT|Field string lenght changed7GET/PUT|Record number wrongMENU error?RESERVE error@Pointer (*x) errorZLOCAL error[FOR error\Resume (next) not possible|Fatal, For oder } Locald GFA BASIC V 2.0| Copyright 1986|GFA Systemtechnik GmbHf2 bombs - bus error|Peek or Poke possibly wrongg3 bom }bs - adress error|Odd word adress! Possibly at|Dpoke, Dpeek, Lpoke or Lpeekh4 bombs - illegal instruction|executed in machin !}e codei5 bombs - divide by zero|in 68000 Machine Codej6 bombs - CHK exeption|68000 interrupted by CHKk7 bombs - TRAPV exep "}tion|68000 interrupted by TRAPVl8 bombs - privilege violation|68000 interrupt by|execution of a|priviliged instructionm9 bo #}mbs - trace exeptionGeneral errorDrive not readyUnknown commandCRC error|disk check sum wrongBad requestSeek erro $}r|track not foundUnknown media|boot sector wrongSector not foundOut of paperWrite faultRead faultGeneral error 12 %}Write protectedMedia change detectedUnknown deviceBad sector (verify)Insert other disk|(request)Invalid function &}numberFile not foundPath not foundToo many open filesAccess deniedInvalid handleOut of memoryInvalid memory blo '}ck adressInvalid drive specificationNo more filesGEMDOS range error|seek wrong?GEMDOS internal errorInvalid executa (}ble file formatMemory block growth failure _b@gGHpp 0f NuGNp @"l`Yd&-KNN"l`YepN&#k" )}C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`pr`&AdRd QJBgRBBABJk *}"l` d&6&|0!NuN"l` epZN/&#k gH`X-KNu?<NNTJVHfN0HxNX6 | B A R R +} A G E | | REQUIRES LOW RESOLUTIONHPNdSORRYr"_ N2ANjNl <NNANjp CNpCNp CNp ,}CNp C Np CNp CNpCN <r$<HAJN pNAQN AR(N Bm <r$<A N -}>A NHACN N`NqNqAJN A `0A &0A 0AVN AMN Bm(BmBm.A0 .}p0A6 @0Bm@AB 0AN&<x*<NfN2tAHN BmLA 0BmRN\AAN A5 /}N A3 N AZNATNNTfN2fCTAZ 0AMN `hAZNATNNTfN2CTAZ 0pp@pW 0}Bg?<NN\pRNHPNX HI_SCORE.EGGr"_NLpNAZNNpNtHAJN NzNlNl <r$<HACN A 1}N&<x*<NfN4^NH A`Nj AfNj AlNjA4fN AlNzN} NrHPpCNr"_N8fN: A NCN0N?A NCN0N?Hmp _"NA NHACN N A NCN0HA NCN0&<x*<NL8NTfN;A NC @}NrHPpCNr"_N8fN;A NCN0N?A NCN0N?Hmp _"NA NC NrHPpCNr"_N.fN A};4A NCN0N??<pCNrHPp _"NN;dA NCN0N??<pCNrHPp _"NA NHAC B}N A;N N;A?N ANNJBgN;AHNJBgN;A NA*NA NNTgN NlA0Np"<N C}bATNNNNA0N&<x*<NTfN>A$N&<x*<NA0NA*NA*NHACN A*N D}&<x*<NNfN>ABxN AH 0Bm.CTA퀄 0A$NNA`NvNH <r$<L8NN/ E}p"NNp{Bravo}4NATN&<x*< NlNABNNlpJBgp/A6N&<x*<NTpJBgp$VHfN F}>4ABNA6NA5N AA8N NA`NvNH <r$<L8NN/p"NNp{EXTRA}4NA5N G}NA`NvNH <r$<L8NN/p"NNp{LIFE!}4NA$N&<x*<NNfN>Bm( <<Ѝ/ H} <r$< _N4 <Ѝ/ <r$< _N4AA8N AAN N NlAN?AN?AxNCNrHPp _"N I}A NCN0N?A NCN0N?pCNrHPp _"NA퀐 0tA퀐N>?<?<A퀐Nr _NJA퀐N&< J}x*<NNNN`NqNqp N?<Bgpr _NJA@N N NlBm <r$<A퀐N> <r$<NB&<x K}*<NN <r$<NBN@pWBg?<NN\?<?<A퀐Nr _NJA퀐N&<x*<NNNN`l L}NqpN?<Bgpr _NJNprNpNNN?<Bg?<NN\A@N N NlA6NABxN A6NzNlfNA,A M}$NzNNfN@A$NBm.A0 p0C퀄AT 0AN 0AA8N NA0Bm"N NlN,ANlAAN p"< N}NbATNNNNA퀐 0A6NA퀐NNrfNAA퀐N&<x*<N&<x*<NN??<H O}mp _"NA퀐N`N NlpNp NpNpNpNfprmNbA*N&<x*<NNNp"<NbA$N&< P}x*<NAA퀖NCN0N?A퀖NCN0N? Q}Hmp _"NA퀖NHACN N`NqNqN NlLA퀜N JA퀜N/ <r$<CNA퀜N/ <r$<N R}BvN&<x*<NCNA퀜N/tCN <r$<NB&<x*<NA퀢NA퀜N/pCNrC N S}A퀜N/ <r$<CNA$N~ N DDDDEEJEEFF6F~FGhAAN&<x*<NfNJA퀐N/?A퀐NNpNpNpBNfA퀐N&< b}x*<NN/A퀐N&<x*<NN"NbNd B A R R A G E4NN`NqNqpNTpNnprN~pNߴp+r Nbp c}+"<N?<A퀐N??<NN\N`NqNq)|C A퀮 0 <r$<A퀮N>Bm < {}r$<A퀐N>N4A퀴NN4A퀺NN4ANN4ANA퀐N&<x*<NANNN/A퀴N" A0 |}A퀐N&<x*<NANN&<x*<NN/A퀺N" A0A퀐N&<x*<NANN&<x*< }}NN/AN" A0A퀐N&<x*<NANN&<x*<NN/AN" A0N`NqBgBg?<?< ~}A퀮NCNr" NN`dNq?<?<?< ?< A" N)| A퀢 0BmN4A퀴NN4A퀺NN4AN }N4ANA퀐N&<x*<NANNN/A퀴N" A0A퀐N&<x*<NANN&<x*<N }N/A퀺N" A0A퀐N&<x*<NANN&<x*<NN/AN" A0A퀐N&<x*<NA }NN&<x*<NN/AN" A0A퀐NA퀐N&<x*<NgBgBg?<?<A퀢NCNr" NA }NA퀢N&<x*<Ng@N,N NlB Bm <r$<A퀐N>N4ANAN?A퀐N??<NN\N`Nq }NqN Nl161792128413127116513655461026818591911136015861840819281920819212290122900122901229412294 }0122941229461228862967099228678286723026320322912745529847171229543293443071120322867999630711190428 }67960073118399231279132801435020321479820461479815841479840806604158466045808714815847148172461522032 }6152612829201168205620402920116820564080205620322056204020562032205640800408804088040880408803960 }0396003960039600396003960039600396003960039600396003960396000396039600039601584158401584158 }4158401584000016384163840163842457624576024576245802458002458024588122457612593401996573445735660 }5244064582528965969434245908658702614224064573581984614223808573581200862366198462558265602870040642959 }640922959631682959681601320831681320811616142963168142963448123044064123041225658402336411240805840233 }641128160411240644112408041124064411281601681601681760163680163680161200161200154800154800143960 }14396014396014396014366014366143500014350143500014350122941229401229412294122940122940000220 }26606819881980819812294122886122881328713280712295138792032127434482984717122954329351307112032286 }79992307111904286796004311839923127999814350203214798163681479815841479820406604158466041716714815847 }1487856206020322060203629201168205640802920116820562040205620322056408020562032205620402048204020484 }088040920409208060080600774007740015388015388015388015388030748030748287000028700287000028700 }2458824588024588245882458802458800001282560384448512096025651219296005124489600512448960320 }51212896012825603840000000000000000179217921792179240644064163521635260726072655326553228 }283131896089689612800128012808961285125121984160000198411520019841024001984134400896640008 }9689689689676876876876840324032403240327681280896256640089625651207682565120768256002560 } 04 `$ $l(&, & &*L( J*d6B r<& VrF : NT" 2 P    H@ ..zF0VT8F,( }*r } R WELCOME TO THE ANTIC MONTHLY DISKMost of the pr}ograms on this side of the disk are for the ATARI 520 ST.We recommend you refer to thecorresponding issue of ANTIC forco}mprehensive documentation. If youwish to order a back issue, or needsubscription information, contact usat (415) 957-0886 }or, for credit cardorders, dial (800) 227-1617, Ex. 133.In California,(800) 722-3545, Ex. 133XXX *** BONUS FILES * BONUS} FILES ***Whenever there is sufficient room,we will be including TYPO-ST andLINKLINE on the monthly disks.Please see t}he HELP files on thisside of the disk for LINKLINEinstructions.XXXThe menu that appeared on the screenwhen you b}ooted the disk will onlyRUN programs with a .BAS extender.(NOTE: The menu WILL NOT RUN GFA or ST BASIC programs!)}If you try to run a program and theresponse is 'cannot run Filename',then check the file extender withthe following list:}XXX.SYS Reserved for DOS system files..DAT Data file. Usually accessed by another program..TXT Text file. }Usually accessed by another program..PI2 A Med.-resolution DEGAS picture file.XXX*** Files for the 520 }ST ***.C C Language source code. Must be ported to an ST disk. See the corresponding article for }complete details..BAS A GFA BASIC program. WILL NOT RUN on 8-bit computers!!! Must be ported to an S}T disk. See the corresponding article for complete details.XXX.PRG A compiled ST program which use}s GEM. Must be ported to an ST disk. See the corresponding article for complete details..PAS Persona}l Pascal source code. Must be ported to an ST disk. See the corresponding article for complete details.}.S 68000 Assembly language source code. Must be ported to an ST disk. See the corresponding articl}e for complete details.XXXAll programs from ANTIC issues datedprior to August 1984 were reproducedfrom ANTIC's A}rchive. We've updatedthem from our HELP columns andmost are compatible with the XL andXE machines. We have worked to insu}rethat our programs operate aspublished, but we consider all oursoftware listings to be works inprogress which we encoura}ge you topersonalize and enhance.Good luck, and ENJOY!-ANTIC ED}ANTIC ED<7LINEAFPPRxxy  11;A ,;@,;@,;@,G@}(}2( (1) HELP file5(GART ((2) How to 'port' files7( to an ST disk:(T(}(3) Instructions for&#( ENTREPRENEUR (8-bit)&(!:((4) Instructions for:( Pascal Towers (ST)(+ (}( SELECTION+6-2(((+41)42)43)44,@ <,6. D:DOC.TXT42,6. D:PORT.TXTF }436. D:ENTRE.TXTK 446. D:TOWER.TXTP6-@@2(Hard Copy (Y/N) N6Z(+4Y)4}N,@dW@@(}&@C@@K4YW6-@n A`AR@}x@vB:,!@-7@<@,4XXX0(3(E-@@"Y(ӠΠf@l(}}v A   3( A j@ B*-@@"R("ΠҠՠҠˠҠ_}@j%D:MENU D1:HELP.BAS} D1:HELP.BASY XLAPNB0A6@ ((<(d"(@D +26-?:C:}hhhԩ`,<A6,DAdAUuA@'A @9A@K@@]@}@7c(}uAR@++(# ++(# Antic Monthly Disk, May 1988 }++(#  ( | Side 'B' |++(#  @ }-@A $ GG;@@,;@ ,;@@,;A,;@,;@@, "D1:MENU" &&@}@D:*.* 6,6." 6 @0i6-%@(6.7@<@,A67@ }<@ ,..i67@<@,.7@<@,3 6.|67B:,%@,.367B:,%@,.G67@<}@,.(--@B:,:7<,4 G67<,..] 6.=:, @D67@<@,.7@<@,]6}7@<@,.0$@(''7@<@,4FREE@- @ .K'7@<@,4 HE}LP.....BASK67@<@,. Ю2() <@F''7@<@,4FREE@K @ }P(7@<@,)|U @0W'!-@6+'@,%@' |Z++(#| } |[ ( |  |\++(#  d**(" Select HELP.BAS for information.x}AR[@@9'-@@#C( FILE NUMBERM A0Q[ BP:,A}00"@&6.7@<@,0 AELB6.7+&@,$@%@<+&@,$@%@,L B}37@<@,4 36.7@<@,!7@<@,4DOS!.0 6.-@B:,07<,4} AH67B:,%@,.7<,   6.! 6.D1:!67B:,%@,.?AR@'-@@"?}  LOADING ? A@@91@@5%? B[-@@"-  CANNOT R}UN 7 @LF:A,"@![% D:HELP.BAS B A0D1:MENU.} B A0D1:MENU.6PP SY0u WȹY4ȹYʂ ȹ ZN#ȹY~}ȹY\ ȹYȹZy ȹ ZȹZȹZ R }R R  }RW R3456}7WPQȹZJ4ȹZJ5ȹZJ6ȹZJ7șJ3șJ3Zi iZ001}W/WR \ԩocЩyЩЩMЩЍ Ѝ Ѝ Щ0ԩU ЩЩ>/ЩЭ&WIW }RLQWiWQR)%YYY mRW RWJ }R R)%YYY mRW RWJ }R R)L}Q@LSWmW`hZWhZWhZW`ȽDZ`ȽDZ̃` ȽzZ``W?Z8}ZZi ZRSZZZZZ ̩MWWLb` V`BWED JK V/W/ SOUVT}`B V- SOUV-T`B V'WWWW SWWW.0W1W`UT` BWEDHI} V`/W/W0WST1W/@ԩ6ЩAЍWƍЩDFEЍ Ѝ ЩЩoDEFG}Щ>/ҩҩxҩp \ㅘW X7XaXXX߅X Y}W8iiTUWW $WW V V VWWWWWWW 8VW҅MW0SYҭW }UW UWԭɯWLW VWWWW WWWWW8WWW2WW CWW V CW VWWW}WWW 8V`WWW>WWUVW CWW VW CW VWWWWWW 8V`WWWWWWWW` } rAWЭ )WWWW8Ɏ))֩WWWWWW`W +8 kW} iWWWXi͐W mWVWlWiW[YWWNWWXiWWݩWQWL`kXȑXi}XȑXi͐`WҩFW`W) )魾WLT /W}Ѝ/LPS:CWWWWWWWWWX}}XY}!#%')+-pppB } A0!.4)#0resentsby"ob!yiYZk0resstobegin,eft3kill2ight3kill0lay-ode0re}ssanykeytochangescreencolor"abe#hild4een!dult3enior3pirit'ame0ractice}<~~<<~ZZ~<ppHHH pp r p ` 7pq }r 7p `WLjqWWLjqW r $rWWWW AW W q8񨅂ȭWWq}W W8WЭWWW FrW rWWW;ð@x3t qkpqWWI_WWWWWWWWW}WW:˰6 q-WI&WWWWWWWWWWWW rWWW0WɯWLWhhhLbłtiłm} lrȩWȍҩ-ҭW$WWWWWWWWW(WWWWWWqrWWWWWW``}00Ð`WWWWW`0W АWҩ+ҩW`8 +8 AW) W};YW WK}YWW#WI W}3YW W8CYWWWW W`W W`u(uHHZZZ ԍЍЍЍЍZhh@}PZZZ ԍЍЍЍЍZhh@WST LISTINGSON MONTHLY DISK...and how to get themby CHARLES JACKSONAntic Technical EditorFor those ST owners who do no!}t yetown a C compiler, but are eager totry out Antic's C language listings,we are now including the executableobject code!} on the Antic MonthlyDisk.XXXAll disk files with extendersof .PRG, .TOS, .TPP and .ACC arecompiled ST programs, ready !}to betransferred to an ST disk andexecuted. Given enough disk space,we will also include the sourcecode. 'C' source cod!}e files willhave a .C extender, assemblylanguage source code will havean .S extender.XXXPORTING FILESBefore using an !}ST program, you musttransfer it to an ST disk. Thisprocess of transferring filesbetween computers is called"porting."X!}XX To port a file from the AnticMonthly disk to an ST disk, you'llneed the Linkline programs fromthe August 1985 issue!}.(LINKLINE.PRG and LINKLINE.EXE are both included on this disk).XXXIf you don't have Linkline, youmay also use: !}- A telecommunications programfor the ST which supports XMODEMfile transfers.FLASH or PC/InterComm will work).XXX - !}A similar program for your8-bit Atari which supports XMODEMfile transfers, such as Chameleon orHomeTerm. Also, don't expe!}ct tosucceed at ST porting withany version of AMODEM.XXXA - 8-bit Atari computerB - An Atari 850 Interface Module !}with a modem cable (RS-232 to D-9.)C - Null modem connectorD - Gender changer (if required)E - Your ST  !}   | A |=>| B |=>| C |=>| D |=>| E |     Sample porting configurationX!}XX IMPORTANT: If you're not usingLinkline, both modem programsmust be configured similarly. Ifyour 8-bit software is !}set for 1200baud, your ST software also must beconfigured for 1200 baud. Additionally, BOTH programs mustbe set for 8-!}bit (binary) filetransfers.XXX Once both computers are linkedtogether you may begin the filetransfer. You can also !}reverse thisprocedure to transfer files from STdisks to your 8-bit machine.XXXWALK-THROUGH DEMO1) LINKLINE:Once both!} LINKLINE programs arerunning, place the monthly diskinto the 5-1/4" drive, and sitdown at the ST. Choose theLOAD A FILE!} option and type inthe name of the file you want totransfer. LINKLINE will pullthe file off of the monthly disk,and save!} it to an ST disk.That's it. You're done.XXXWALK-THROUGH DEMO2) MODEM PROGRAMSLet's walk-through a sample filetran!}sfer. We'll use BackTalk on an8-bit machine, and FLASH on the ST. Configure BackTalk for 1200 baud,with Full Duplex an!}d ASCIItranslation. Press [SELECT],choose the XSEND option, selectXMODEM protocol and enter the nameof the file you wis!}h to port.XXX From the ST desktop, double clickon FLASH.PRG. Make sure FLASH isrunning at 1200 baud. Type -Bt!}o change baud rates, if necessary. Now type -R (for RECEIVE).When the file selector box appears,press [ESCAPE] and t"}ype the name ofthe file to receive. Press [RETURN]or click on OK. To begin the transfer, press the[START] button on t"}he 8-bit Atari.XXX Occasionally some versions ofXMODEM will append extra "garbage"characters to your files. Textfil"}es, such as C listings, areparticularly susceptible to thisproblem. If your implementation ofXMODEM appends garbage chara"}cters toyour source code, you must removethose characters with a text editorbefore compiling the program."}e compiling the program. T0100 ; PRINTER SPOOLER0110 ; BY GLENN K. SMITH0120 ; (c)1988, ANTIC PUBLISHING0130 .OPT NO LIST0140 .OPT OBJ0150&} ;0160 DOSVEC = $0A ;DOS VECTOR0170 DOSINI = $0C ;DOS INIT0180 DEST = $CC ;DEST ADDRESS0190 SOURCE = $CE ;S&}OURCE ADDRESS0200 VVBLKD = $0224 ;VBI ADDRESS0210 DDEVIC = $0300 ;DEVICE ID0220 HATABS = $031A ;HANDLER TABLE0230 PRBU&}FF = $03C0 ;PRINTER BUFFER0240 MEMLO = $02E7 ;MEMLO POINTER0250 SMOVE = $44AE ;START OF MOVER0260 SPOOLER = $4500 ;SP& }OOLER ADDR0270 SPOOL1 = $4600 ;SPOOLER+$1000280 SPOOL2 = $4700 ;SPOOLER+$2000290 BUFEND = $66B0 ;END OF BUFFER0300 SIO& }V = $E459 ;SIOV VECTOR0310 SETVBV = $E45C ;VBV SET ROUTINE0320 XITVBV = $E4620330 ;0340 ; +--------------------------& }-+0350 ; | This is the relocator part|0360 ; | of PRINTER SPOOOLER. It |0370 ; | will move the program to |0380 ; | th& }e lowest point possible |0390 ; | in memory, then run the |0400 ; | PRINTER SPOOLER. |0410 ; +-----------------& }----------+0420 ;0430 *= SMOVE ;START PROGRAM0440 ;0450 BOOT0460 LDY MEMLO+1 ;GET NEW ADDRESS0470 INY &} ;MAKE NEXT EVEN NUMBER0480 STY DEST+1 ;SAVE IT0490 ;0500 LDY #$00 ;CLEAR LSB0510 STY DEST0520 &}STY SOURCE0530 ;0540 LDA # >OLDMEM ;START OF SPOOLER0550 STA SOURCE+10560 ;0570 RELOC0580 LDX MEMLO+1 ;USED&} TO FIGURE NEW ADDR0590 LDA (SOURCE),Y ;MOVE SPOOLER0600 CMP # >BUFEND ;BUFEND MSB0610 BEQ FIXEND ;YES, FIX I&}T0620 ;0630 CMP # >SPOOLER ;SPOOLER ADDRESS?0640 BEQ ZERO ;YES, IN FIRST 256 BYTES0650 ;0660 CMP # >SPOOL&}1 ;SPOOLER ADDRESS?0670 BEQ ONE ;YES, IN SECOND 256 BYTES0680 ;0690 CMP # >SPOOL2 ;SPOOLER ADDRESS?0700 B&}NE RELSTOR ;NO, SAVE AS IS0710 ;0720 FIXEND0730 TXA ;FIX MSB OF BUFEND0740 CLC 0750 ADC #$210760 &} BNE RELSTOR0770 ;0780 TWO0790 INX ;ADDR IS 512 BYTES FROM ORG0800 ONE0810 INX ;ADDR IS 256 BYT&}ES FROM ORG0820 ZERO0830 INX ;ADD 1 BECAUSE THE MSB OF MEMLO0840 TXA ;HAD 1 ADDED TO IT0850 ;086&}0 RELSTOR0870 STA (DEST),Y ;SAVE BYTE0880 INC DEST ;GET NEXT ADDRESS0890 INC SOURCE0900 BNE EXAMINE ;N&}OT ZERO0910 ;0920 INC DEST+1 ;INC MSB0930 INC SOURCE+10940 ;0950 EXAMINE0960 LDA SOURCE+1 ;ALL DONE?0970 &} CMP # >FINI0980 BNE RELOC ;NO GET MORE0990 ;1000 LDA SOURCE ;LSB THE SAME?1010 CMP # BUFEND1830&*} BNE EXITPUT ;NO1840 ;1850 LDA INPUT+1 ;MAYBE?1860 CMP # BUFFER1910 STA INPUT+11920 STX INPUT+21930 ;1940 EXI&,}TPUT1950 LDX IOCB ;RESTORE IOCB IF NEEDED1960 LDY #$01 ;PRINT WAS GOOD1970 STY PRIORITY ;PUT ROUTINE HAS&-} PRIORITY1980 RTS 1990 ;2000 ;+----------------------------+2010 ;| This is the PRINT routine |2020 ;|that is calle&.}d by the VVBLKD|2030 ;| every 1/60th of a second |2040 ;+----------------------------+2050 ;2060 ; +-------------------&/}--------+2070 ; | If the priority flag=1 |2080 ; | then the PUT CHAR routine |2090 ; | will have priority over |2100&0} ; | the print routine. If the |2110 ; | PUT CHAR is done, then the|2120 ; | VBI print routine has will|2130 ; | print a &1}character every |2140 ; | sixtieth of a second. |2150 ; +---------------------------+2160 ;2170 NEWVBI2180 LDA &2}PRIORITY ;OK TO RUN?2190 BEQ SEESTAT ;YES, ATTEMPT PRINT2200 ;2210 DEC PRIORITY ;SET TO VBI PRIORITY2220 JMP &3}XITVBV ;IF NO CHANGE, PRINT NEXT TIME2230 ;2240 SEESTAT2250 LDA STATUS ;PRINT OK?2260 BPL VBICALL ;YES, MOVE CH&4}ARS2270 ;2280 JMP PRINT ;NO, RE-TRY BUFFER2290 ;2300 VBICALL2310 LDA COUNT ;ANY CHARS TO BE PRINTED?2320 &5} ORA COUNT+12330 BNE ISCHARS ;YES2340 ;2350 JMP FINISHED ;NO, EXIT2360 ;2370 ISCHARS2380 LDX INDEX ;GET &6}BUFFER INDEX2390 OUTPUT2400 LDA BUFFER ;GET CHAR TO BE PRINTED2410 STA PRBUFF,X2420 TAY ;SAVE IT243&7}0 INC OUTPUT+1 ;MOVE OUTPUT POINTER TO2440 BNE CHECKOUT ;NEXT CHAR2450 INC OUTPUT+2 ;ADD CARRY TO MSB OF POINTE&8}R2460 ;2470 CHECKOUT2480 LDA OUTPUT+2 ;ROUND OUTPUT BUFFER?2490 CMP # >BUFEND2500 BNE SUBTRACT ;NO, NOT YET&9}2510 ;2520 LDA OUTPUT+1 ;MAYBE?2530 CMP # BUFFER2580 STA OUTPUT+12590 STX OUTPUT+22600 ;2610 SUBTRACT2620 &;} LDA COUNT ;COUNT DOWN THE CHAR COUNTER2630 BNE DECLSB ;LSB NOT TO ZERO2640 ;2650 DEC COUNT+1 ;DO THE MSB OF T&<}HE COUNTER TOO2660 DECLSB2670 DEC COUNT ;DO THE LSB OF THE COUNTER2680 INX ;MOVE PRINT BUFFER INDEX2690&=} STX INDEX ;SAVE IT2700 CPX #40 ;40 CHARS YET?2710 BEQ SETPRNT ;YES, FLUSH PRINT BUFFER2720 ;2730 C&>}PY #155 ;A EOL?2740 BNE FINISHED ;NO, GET MORE CHARS2750 ;2760 LDA #$20 ;PADD BUFFER IF EOL2770 FILL2780 &?} STA PRBUFF,X2790 INX ;ADD 1 TO THE COUNTER2800 CPX #40 ;40 CHARACTERS YET?2810 BNE FILL ;NO,&@} PADD MORE BLANKS2820 ;2830 ; +---------------------------+2840 ; | SETPRNT tells the VBI |2850 ; | routine that th&A}e last |2860 ; | was bad. This allows the |2870 ; | the computer to print |2880 ; | during the next interrupt |289&B}0 ; | instead of doing it all |2900 ; | during one interrupt. |2910 ; +---------------------------+2920 ;2930 ; I c&C}ould have used any number greater than2940 ; 127. I picked $92 because it was handy, and2950 ; had some meaning.2960 ;297&D}0 SETPRNT2980 LDY #$92 ;FUNCTION NOT IMPLEMENTED2990 JMP QUIT ;SAVE RESULT3000 ;3010 ; +-------------------&E}--------+3020 ; | This is the actual printer|3030 ; | part of PRINTER SPOOLER. |3040 ; | It will save the old SIO |3050&F} ; | DCB, print the buffer, and|3060 ; | restore the SIO DCB back. |3070 ; +---------------------------+3080 ;3090 PRINT&G}3100 LDX #$0B ;SAVE SIO DCB3110 SAVEDCB3120 LDA DDEVIC,X3130 STA OLDDCB,X3140 DEX ;ALL DONE YE&H}T?3150 BPL SAVEDCB ;NOPE, STILL SOME LEFT3160 ;3170 LDX #$0B ;SETUP SIO DCB3180 PMOVE3190 LDA SIODAT,X ;M&I}Y PRINT DATA3200 STA DDEVIC,X ;SAVE SO COMPUTER WILL KNOW3210 DEX ;ANY MORE TO MOVE?3220 BPL PMOVE ;&J}YES, SOME LEFT3230 ;3240 INX ;MAKE 03250 STX INDEX ;SAVE BUFFER OFFSET3260 JSR SIOV3270 ;3280 &K} LDX #$0B ;RESTORE SIO DCB3290 REPLACE3300 LDA OLDDCB,X ;GET THE OLD INFO3310 STA DDEVIC,X ;AND REPLACE IT. JUS&L}T IN CASE!3320 DEX ;ALL DONE WITH REPLACMENT?3330 BPL REPLACE ;NO, STILL A FEW TO REPLACE3340 .BYTE $2&M}C ;TRICK, SKIP NEXT INSTRUCTION3350 ;3360 FINISHED3370 LDY #$01 ;SAY PRINT WAS GOOD3380 QUIT3390 STY STATUS&N} ;PRINT STATUS3400 JMP XITVBV ;EXIT VVBLKD3410 ;3420 ; +---------------------------+3430 ; | This is the informati&O}on |3440 ; | that is needed by the SIO |3450 ; | to attempt a print. |3460 ; +---------------------------+3470 ;3&P}480 SIODAT3490 .BYTE $40 ;P:3500 .BYTE $01 ;#13510 .BYTE $57 ;WRITE3520 .BYTE $80 ;OUTPUT3530 &Q} .BYTE $C0 ;PRINT BUFFER LSB3540 .BYTE $03 ;PRINT BUFFER MSB3550 .BYTE $1E ;DEVICE TIMEOUT3560 .BYTE $0&R}0 ;NOT USED3570 .BYTE $28 ;40 CHARS3580 .BYTE $00 ;NOT USED3590 .BYTE $4E ;NORMAL MODE3600 .BYTE &S}$00 ;NOT USED3610 ;3620 ; +---------------------------+3630 ; | Temporary storage for the |3640 ; | SIO DCB. Contains&T} the |3650 ; | values before the print |3660 ; | was attempted. |3670 ; +---------------------------+3680 &U};3690 OLDDCB3700 .BYTE $00,$00,$00,$00,$00,$003710 .BYTE $00,$00,$00,$00,$00,$003720 ;3730 ; +------------------&V}---------+3740 ; | This the new DOS vector. |3750 ; | It will replace the old |3760 ; | values and disable the |377&W}0 ; | PRINT SPOOLER. All output|3780 ; | to the printer will stop. |3790 ; +---------------------------+3800 ;3810 NEWDO&X}S3820 LDA CALLDOS+1 ;REPLACE DOSVEC3830 LDX CALLDOS+23840 STA DOSVEC ;SAVE OLD VECTOR3850 STX DOSVEC+13&Y}860 ;3870 LDA RESET+1 ;REPLACE DOSINI3880 LDX RESET+23890 STA DOSINI ;SAVE OLD DOSINI3900 STX DOSINI+13&Z}910 ;3920 LDA OLDMEM ;REPLACE MEMLO3930 LDX OLDMEM+13940 STA MEMLO ;SAVE OLD MEMLO VALUE3950 STX MEMLO&[}+13960 ;3970 LDA OLDHAND ;REPLACE P: HANDLER3980 LDX OLDHAND+13990 STA HATABS+1 ;SAVEE THE OLD HANDLER4000 &\} STX HATABS+24010 ;4020 LDY OLDVVB ;REPLACE VVBLKD4030 LDX OLDVVB+14040 LDA #$074050 JSR SETVBV ;REM&]}OVE THE VVBLKD4060 ;4070 CALLDOS4080 JMP CALLDOS ;CALL OLD DOSVEC4090 ;4100 ; +---------------------------+4110 ; |&^} This is the RESET trap |4120 ; | routine. It will make sure|4130 ; | that the SPOOLER is ready |4140 ; | to handle dat&_}a when needed|4150 ; +---------------------------+4160 ;4170 RESET4180 JSR DOSINI ;INITIALIZE DOS4190 SETDOS4200 &`} LDA # NEWDOS4220 STA DOSVEC ;MAKE SURE DOSVECTOR IS SET4230 STX DOSVEC&a}+14240 ;4250 LDA # BUFFER4270 STA INPUT+1 ;INPUT BUFFER4280 &b} STX INPUT+24290 STA OUTPUT+1 ;OUTPUT BUFFER4300 STX OUTPUT+24310 ;4320 LDA # BUFEND4340 STA MEMLO ;TELL THE COMPUTER4350 STX MEMLO+14360 ;4370 LDA # OPEN4390 STA HATABS+1 ;STUFF IT IN THE HANDLER TABLE4400 STX HATABS+24410 ;4&e}420 LDY #$00 ;CLEAR COUNTER4430 STY COUNT ;CLEAR THE LSB4440 STY COUNT+1 ;CLEAR THE MSB4450 STY INDEX&f} ;CLEAR PRINT BUFFER INDEX4460 ;4470 INY ;SET TO 14480 STY STATUS ;SET PRINTER STATUS4490 ;4500 L&g}DY # NEWVBI4520 LDA #$074530 JMP SETVBV4540 ;4550 ; +------------&h}---------------+4560 ; | This will be the new P: |4570 ; | handler vector table. The |4580 ; | only change is in the way&i} |4590 ; | the P: device will print. |4600 ; +---------------------------+4610 ;4620 OPEN4630 .BYTE $00,$00 ;OPEN P:&j}4640 CLOSE4650 .BYTE $00,$00 ;CLOSE P:4660 GET4670 .BYTE $00,$00 ;GET P:4680 PUT4690 .WORD PUTCHAR-1 ;PUT P&k}:4700 STATS4710 .BYTE $00,$00 ;STATUS P:4720 SPECIAL4730 .BYTE $00,$00 ;WHATEVER4740 INIDEV4750 .BYTE $00,$&l}00,$00 ;INITIALIZE P:4760 ;4770 BUFFER4780 .BYTE $00 ;START OF BUFFER4790 ;4800 ; +---------------------------+48&m}10 ; | Locate the P: handler and |4820 ; | and copy the vectors to my|4830 ; | handler. Copy information,|4840 ; | address&n}es, and initialize |4850 ; | the PRINTER SPOOLER |4860 ; +---------------------------+4870 ;4880 START4890 LDA&o} HATABS+1 ;GET HANDLER ADDRESS4900 LDX HATABS+24910 STA DEST ;SAVE ADDRESS4920 STX DEST+14930 STA OLDH&p}AND ;KEEP A COPY FOR DOS CALL4940 STX OLDHAND+14950 ;4960 LDY #$00 ;MOVE HANDLER4970 MOVELO4980 LDA (DEST&q}),Y ;GET HANDLER DATA4990 STA OPEN,Y ;SAVE IT5000 INY 5010 CPY #$06 ;SKIP PUT ADDRESS5020 BNE MOVELO &r} ;YES5030 ;5040 LDY #$08 ;GET REST OF HANDLER5050 MOVEHI5060 LDA (DEST),Y ;GET SOME DATA5070 STA OPEN,Y &s};SAVE IT5080 INY 5090 CPY #$0F ;MOVE SOME MORE DATA?5100 BNE MOVEHI ;YEP, A FEW MORE BYTES5110 ;5120 &t} LDA DOSINI ;COPY DOSINI VECTOR5130 LDX DOSINI+15140 STA RESET+15150 STX RESET+25160 ;5170 LDA DOSVEC &u};COPY DOS VECTOR5180 LDX DOSVEC+15190 STA CALLDOS+15200 STX CALLDOS+25210 ;5220 LDA # RESET5240 STA DOSINI5250 STX DOSINI+15260 ;5270 LDA MEMLO ;SAVE OLD MEMLO VALUE5280 L&w}DX MEMLO+15290 STA OLDMEM5300 STX OLDMEM+15310 ;5320 LDA VVBLKD ;SAVE OLD VVBLKD5330 LDX VVBLKD+15340 &x} STA OLDVVB5350 STX OLDVVB+15360 ;5370 JMP SETDOS ;SETUP SPOOLER5380 ;5390 FINI5400 BRK ;FOR NO&y} REASON5410 ;5420 ; ADD RUN ADDRESS FOR DOS5430 ;5440 *= $02E05450 .WORD SMOVE5460 ;5470 ; END PROGRAM5480 ;&z}5490 .END 60 ;5470 ; END PROGRAM5480 ;$_DEȄ̄͠ΩEϮf EF G i!芑ϥGϥɮDLF E E E E6E͋E7*|}E͌EE EF E E6E7E7Ef6Eɰ F6E7E EE`EELbELE E ELFEFEEEf*}}Eɰ EFFEE E E EE(8 (LF F FE Y F,ELb@W(N*~}XFYF [F\F EEEEEE \LWF F F6E7EEEfF E EEȌE*}iEL\FG Ĕ͍EE̙F̙F [F\F XFYFZF EE$%EEL]F*}DFG Ĕ͍EE̙F̙F [F\F XFYFZF EE$%EEL]F(