8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RNEW.DISK}' (AUTOSAVE. Ҷ*AUTOSAVE.S W.Ҷ AUX.COPY>88,BASIC.SYSTEM(*+BUTTON.USR1%55'CHECKIT2 -ϲ -CREATE.SAMPLE:  +FILE.SIFTER=)* * LANDER.SHAPESSLITTLE.DOGGYT:66,LUNAR.LANDERU 8'NIBMENU]a  &PRODOSd }<ͰͰ'SETPBUF+SETPBUF.ASM/"+ 1+SETPBUF.MAC # # 'STARTUP }-Ӷ).STARTUP.SCREEN - . ? ة L  ! /! #8!eȘe"Хʭ!!PBC#? ,`䡍حɍ8LRSTUPQ pi4`ǾȾɾ pN)/蝼 p0 P." oɍ Q@L PL"" %P P? H,0$ ['$$L!{ h!ɍɛ,L" [ ${L!, "tϾξ p,!㍣ " pL оǾ־޾Ⱦɾʾ pߥg׾hؾ8gپ8hھ p p " p " p `PPP`ҠźŠӺ  Ԯ é ® Ю Ĭ Ƞ ֠ ΠƠ ̠à ̠Š ̠ Ԡ ͠ ĠƠ Р Ҡ  Ơ Ơ ͠ Ƞ  Ġð Šð ĸ̠ðƠ ΠƸŠ ֠µ  Рñ ̠ùà αĶƠ ԠĸŠ ԠĠ ŠŲà Ơà ĠŰ ԠŰ ΠŹŠ ӍҠŵ Πŵ 譱͠ŵ Ӡŵ ͠ŷ Ӡ Ġ Ġ Ġ Ϡ´ ŠŠ ͠÷ ͠÷ ﮍҠø Ơø ƠŠ ɯ ͠İ ͠Ķ ķ ԠĹ ͠Š ҠƵ ͠ƹ ǠčĭԫҠҠ ͍àРԠ 򍺱Р ؠǬؠ 占ѠčҠԍ؍ŠĠԍҠ ԍҫР٠ҩ٠ 占ҠΠ 荠٠Π ٭獠٠ ŠĠ ㍠ҩ٠ РԠ àĠ Рī ӠĠ ؠÍàԠ ÍàР ҩ٠ ĠٍÍàҠ 占Ҡ àōàҫŠҫРĠ àЍҍРĠ àР ī ī 䍠īī͠ 占̠ ī 䍠Р ī̫Ԡ ̍ԍ̫Ġ 䍠̠ č̫٠ҠŠ ÍӠ ÍǠؠčà 䡢ĸİԠƍӠ܍Ԡ΍ԠčƠ РӢ 䍠ŠР󢠻 占ŠƫРčѠӍà ĠР ӠΠ 譱͠ 䍠Ӡ 獠ӫΠ Ҡ Ӎ΍ҫҠԍؠ÷ 䍠Ҡ͠ Ӡұ Ơ Š͠ ͠ ͠ Ơ 捠Ҡ 占Ơ ҫõ 䍠Ҡ͠ 占ӠұؠƠ 占Ġ ٠ ٭獠 荠ؠ؍Ƭؠ Ƭؠ ٠ ̠ ؠƠ 占ö 䍠Ҡ͠ ӍӠұ͠ҠԍҠЍ͠ Šִ ؠֱDZؠ Ѡֲ 占ҠԠ 占؍ŠֱֲҠα ؠƍ؍Ƭؠ РĠ Ѡֳ ɍͫؠ ؠ Š ұРԍֳؠ͠ 荠РΠ ִؠ 􍺱Dzؠ Ѡ 占Ҡԍ؍à֍Ѝؠ؍ͬؠ 占Ҡԍؠ͍à 占ҠԠ 덺Ġ ̠ Ԡĸ̠ 쿍ɠ ȍŠЍҠ֍ȍŠàȍРàȍҠ̠ 덠Р٢ ٿѠ Р Ѡ РĠ ҿѠ Р  Š ԠŠ 䍠РΠ ÍЍҠ֍ Ƞ Ƞ 占Рֲ 􍺹ԠōΠҠ͠ ƍͫ ƫ ɯ ƍø 䍠Ҡ͠ 占àƠ 䍠Р 䍠ѠŠ 占РŠҲ Šų 占Ӎà 占č 占čĠ ī Ҡ͍ð 䍠Ҡ͠ 占àΠ ҲРԍƠ͠ ͠ 捠͠ 占͠ Ơ ƫƫİ 䍠Ҡ͠ ƍӠҲŠԠ ԫ 퍠ÍĠ àԠ 捠Ԡ 퍠Íīàԫԫ  䍠Ҡ͠ 덠ӠҲŠà 䍠Ҡ͠ 占ӠҲΠҠ͍ 썠ύô 䍠Ҡ͠ ӠҲΠҠ͍ 썠ύ͠ Š 占ͫūó 䍠Ҡ͠ 占ӠҲҠԍΠÍӍ͠ؠ͠ 占Ơ ƍ؍ͬؠ 占Ƭؠ ƍؠ͍àӍĠDZà ź Dzà Ӻ ĠԠƍL` 8<= 5>? 5BC 8 ` gLR !"#$%&'()*+,-./0LG ASTARTUP$#   / XXύX?klmnÍoL) "6L'?"(0`6708" = ***)<JJH !h穖tp% ;"Z/݀>">"' 1" 7"5).莀/ ;" " 6" >" 1"6"$ "g"" !"""""IzLYL 8!9 詍` "  4"/pŠϠŠà͠ӠàԠŠH06172839h` v97L75v^a ?/( va?LLLɍ$?`?a ɍɥAH93827160hH46576879h`,C bL ɍ b w,S0 @ lLޭBDEF޾ p ޾ p($ذ v (0 ( L?ԦʚLeةީa s  lL b,FLg,DL,C0$3 >@ Ɉ 3ɾꩈL(3ɾ;Ƀ B94 l% bʽ  ՚,S` H E$݅3`(l8L3LX>(Ƀ,`3,G0]ɾ g` H`پ_پ p _پ׾`>( p۾m׾) W)ʩ@`ɾ>(O puȾ ɾ-O ]c־Jjjj `O>0O l POپھ p H־Ǿh۰8L־Jjjjɾ)Ⱦ8 ѱ OLӜ ĤLLX>(F`־ؾپھ׾` bɄ KDEF vLl v lL bKɍKL?` w  vLl@3 @LtJ)s@J b  l`a?sa?,E30ɍФ3 E3HD F3 Ʉ%h3 bM E  lLthɍLL3`3,A0s0% Ipn DpnI:L ؅303L8933LΞAAJL ةޘг uv $ 8LƞaЌ>?@`>?@`B8` K  춼LK ҟ ҟ ( KK`HJJJJ8`HK)` #hhLJپھ pHJh` D!hgt}~p `~t}p8n~ni}tpi~~tso8pinii>j?k̈́>~|p|Ii||̈́ l - `>i>?Ek?!>Q>>>̀ `` \> ̀ `e>>?́?>?Emn(>e>ȱ>e?>Q>ؠ> ie>>?`|;}=:<~:<=;`||m};>:8o>oȑ>ppȑ>> :op`G DKpnG @p;G=po:i>?Ek?>Q>> L> \/ e>>?́?ޱ>ȥj>>m>` _m8injkiljo풼S 鸍긍$I2 U)VJ зT)`l8`a HbIJhjǾȾɾ p٭b=aIe f`8` P־ǾҾ,G0C f=W)_``\"׾پӾؾھ pD`־ǾY׾ؾOW)ݩȾɾʾ pD`8`W)CB) 5W) =)W)@! pZ}ȾȾ󰹩 p` ־ǾҾ,G 8`׾ؾ f p vۥs׾tؾE`  ( 8о(־Ǿ,G 8`_`W)H־Jjjjh p̭ fLᶢǾ ת..8 ۭ (8mȾȾmɾɾʾiʾ` Lpl8l:/,s̝sƬƀ#(ZZV4G_0=( A P FjL\5p-e9ABSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND6D(!쫂8ֵ#ح#׮2}q :IC@@ -!S    !C- !ABELSDFRV@@ !$(19@EüϠž(+@ABCDEFGHIKLMNPSV     T[fouu~ՠٯ* PWN*]ĿNTz @n6VC/+A>@I5gN Oz @n[Dz @nd0,~z @`$仫@v$⩔,C[B?I>孓`仫6VtCicQĿUKqtVt Nʮq$6,⨁ K6, VtI=v!gNVt Vt  lg~TLLwLLL) `8` ԠŬLL  ` ᥡia,LL3456789. ********** NIBBLE PRD DISK **********[ * CHECKIT * * COPYRIGHT 1988 BY MINDCRAFT PUBL.CORP. *( * CONCORD, MA 01742 *2 *************************************' <:::"CHECKIT":"COPYRIGHT 1988 BY MINDCRAFT PUBL. CORP."0 F90\ PI0377:ML:CSCSML:::CS48127100 Z:"ERROR IN DATA STATEMENTS!":"PROBABLY LOCATED ON OR BEFORE LINE ";(123)(124)256: d216,0:768,0:H(3):H(0)1:H(1)16:H(2)256:H(3)40969 n6:"ARE YOU ENTERING A HEXADECIMAL":"FILE?";:A$:16368,0:A$d xA$"N"A$(110)İ370:34218,128:210 A$"Y"A$(121)110 768,1:10:958:"WHAT IS THE STARTING ADDRESS OF THE":"FILE (IN HEX)";:H$:290:AH2 A736A39424ĺ:"INVALID ADDRESS. PLEASE DOUBLE-CHECK":"AND RE-ENTER":350:140| 13:958:"WHAT IS THE LENGTH OF THE FILE":"(IN HEX)";:H$:290:BH B1B32000ĺ"INVALID LENGTH. PLEASE DOUBLE-CHECK":"AND RE-ENTER":350:160 :::34,1:2:"INSTALLING CHECKIT..."x A6144İ320:5799,(A256):5798,A256(5799):5801,(B256):5800,B256(5801):5802,0:230: ABOVE $1800 SOMEWHERE A6144İ370:34215,(A256):34214,A256(34215):34217,(B256):34216,B256(34217):34218,0:210: BELOW $1800 SOMEWHERE' (48896)76Ĺ56,0:57,133:1002:250B (4);"IN#A$8500":250l (48896)76Ĺ56,0:57,22:1002:250 (4)"IN#A$1600":250 :::34,1:2:"CHECKIT INSTALLED" (768)1ĺ:"ENTER THE MONITOR BY TYPING":" CALL -151"  Y"H0:L(H$):L1L4300:I1L:D((H$,I,1)):HHH(LI)(D48(D58D47)55(D64D71)):_,t6 $1600 VERSION@I0377:ML:5632I,ML:I:C5632JI018:ML:CML,(CML)111:T^21:"PRESS RETURN TO CONTINUE ";:CH$:CH$:16368,0:h $8500 VERSION5rI0377:ML:34048I,ML:I;| 216,32,27,253,201,154,240,31,201,141,208,26,134,224,32,178,133,32,251,218,32,128,254,56,165,8 229,9,32,218,253,32,132,254,166,224,169,141,96,32,106,134,44,170,133,16,43,169,1,133,6,169_ 8,133,7,160,0,177,6,133,251,200,177,6,133,252,240,63,200,177,6,32,79,134,200,177,6,32 79,134,165,251,133,6,165,252,133,7,208,221,173,167,133,133,7,173,166,133,133,6,160,0,177,6& 32,79,134,230,6,208,2,230,7,230,251,208,2,230,252,165,251,205,168,133,165,252,237,169,133,144 227,162,0,189,171,133,32,237,253,232,224,7,144,245,44,16,192,32,128,254,164,8,166,9,32,64 249,32,251,218,32,132,254,169,152,96,0,0,0,0,0,20,15,20,1,12,58,32,32,106,134,133> 6,169,2,133,7,160,0,177,6,201,176,144,73,201,186,176,69,177,6,44,170,133,16,53,201,210 208,4,166,251,240,61,201,162,208,8,72,169,1,69,251,133,251,104,201,160,208,6,166,251,208,25 240,26,201,191,208,19,132,226,160,0,185,117,134,32,79,134,200,192,5,144,245,164,226,176,3,32o 79,134,200,196,224,144,188,96,166,224,104,104,169,141,96,132,226,136,177,6,201,160,240,249,201,186 240,8,201,176,144,36,201,186,176,32,164,226,200,177,6,201,197,208,23,200,177,6,201,205,208,166 169,210,32,79,134,169,197,32,79,134,169,205,32,79,134,96,164,226,177,6,24,144,135,162,8,10 38,8,38,9,144,14,72,165,8,73,33,133,8,165,9,73,16,133,9,104,202,208,232,96,169,0 133,8,133,9,133,251,133,252,96,208,210,201,206,212 16,41,44,73,79,92,97,106,123,128,135,180,203,246,249,261,316,321,326 ;<  ************************? * CREATE.SAMPLE *^ * BY Charles T. Hill *} * Copyright 1991 by * * MindCraft Publ. Corp.* * Lincoln, MA 01773 * ************************ Make a sample text file for testing FILE.SIFTER( D$(4):P$"SAMPLE"Q "Where do you wish to save SAMPLE?"i ("Slot number: ";SN 2"Drive number: ";DN < Input is simple because program is run only once FD$;"prefix ,S";SN;",D";DN PD$"open";P$:D$"write";P$ Z5);"This is a sample text file"= d"for testing FILE.SIFTER."[ n"The next line is blank"a x "and so are the next two lines." : 5);"These two lines continue, but" "the next three lines are blank." :: 5);"The last line has"& "the control characters ";U (7);" and ";(8);".": CTRL-G and CTRL-Hh D$;"close";P$ "SAMPLE has been written" >?@ABCDEFGHIJKLMNOPQR! **************************A* FILE.SIFTER *a* by Charles T. Hill *(* Copyright(c) 1991 *2* Mindcraft Publ. Corp. *<* Lincoln, MA 01773 *F**************************P: ZINITIALIZE VARIABLES d3450; n(48640)76ĺ"PROGRAM REQUIRES PRODOS":Z xD$(4):D$;"PR#3":HT1403o FI$(20),W$(100)u : GREETING :::4 25);"FILE SIFTER" 25);"By Charles T. Hill" 25);"Copyright(c) 1991" 25);"Mindcraft Publ. Corp"$ 25);"Lincoln, MA 01773", :` 15);"A utility for removing carriage returns, 15);"control characters, and/or left margins" 15);"from TXT or AWP or other files."  15);"Use letters or up-down arrows to select lines,"8 15);"right-left arrows to see additional files,"m "15);"RETURN to select a file or subdirectory," ,15);"and ESC to back up or exit to Basic." 6 @: JINPUT PREFIX TLA$"":RESET LABELS TO INDICATE DIR NOT READ FOR RESTART ^:8);"PREFIX OR SLOT NUMBER: ";9 hIS1:1100:GET LINEc rGL$""GL$(27)1660:CHECK FOR ENDy |PS$GL$:SN(PS$) (SN1SN7)P$PS$:450:not a slot :16);"DRIVE NUMBER: "; IS0:1100:GET LINE GL$(27)1660:CHECK FOR END PD$GL$D P$",S"PS$",D"PD$:CONSTRUCT PATH USING SLOT,DRIVE d D$;"PREFIX";P$:ENTER PATH D$;"PREFIX":P$:RETRIEVE FULL PREFIX P$(P$,(P$)1):strip trailing slash : OPEN DIRECTORY23:HT,79::AVOID BLANK LINE ABOVEPG0:EOD0PX(0):CLEAR MEMORY OF OLD VALUES OF CHANGED STRINGS cD$;"CLOSE";P$~D$;"OPEN ";P$;",TDIR"&D$;"READ";P$0A$:LA$:A$:READ HEADER ::DREAD DIRECTORY FILESNEOD1ī700:NO MORE FILESXPGPG1$b23:HT,79::AVOID BLANK LINE ABOVE0lJ120KvFI$(J):READ FILEINFOzFI$(J)""Ą"";ST$:EOD1:660:END OF DIR NLJ1:NUMBER OF LINES READ OI1:RESET DISPLAY LINE:SELECT DIRECTORY FILE:P$:LA$:PRINT PATH & LABELS *I1NL:920::990:IOI:910DEOD1ĢNL3:NL20ĺTEOD1ĺST$~1:HT,68:"PAGE ";PG;:HT,77:"-->";EOD1Ģ1:HT,77:"<--";1030:GET KEY K13KI:1330:RETURN -- CHECK FILETYPE K8İ920:D$;"CLOSE":500:LEFTK11İ920:II1:UP= K21İ920:590:RIGHT Z*K10İ920:II1:DOWN y4K271470:ESC -- RESTART>K96K123KK32:SMALL LETTERSHK64K85İ920:IK64:LETTERS A-T RINLINL\I1I1fOIIp910:760z:DISPLAY DIRECTORY FILES%/VI2GV:HT,1:FI$(I);:U:VAI64jV:HT,0:(VA);r:x:DISPLAY PROGRAM TITLE23:HT,0::2);"FILE SIFTER ";:GET KEY FROM KEYBOARDK(49152):K1281030KK128:49168,0::'$CLEAR LINE>.24:HT,0:79);:D8:`BGET LINE FROM KEYBOARDsLV(37)1:H30~VGL$""`1030:GET KEYjK13ı:RETURNtLL(GL$)~K271280:ESC -- BACKUPK8K1271220:NOT LEFTLLLL1:LEFTLL0GL$(GL$,LL),LL0GL$""DV:HT,HLL1:" ";i1120:GET ANOTHER CHARACTER LL401120:LIMIT 40 CHARACTERS IS0K47K58GL$GL$(K):#IS1K31GL$GL$(K):STRINGV:HT,HLL1(GL$)LLĺ(K); 1120:GET NEXT CHARACTER ALL0ĢV:HT,H:LL1):1110O GL$(27)h:escape when blankn:(CHECK FILETYPE 2NM$(FI$(I),2,16):GET FILENAME <J115:TO STRIP TRAILING BLANKSF(NM$,1)" "NM$(NM$,(NM$)1)PJ'ZFT$(FI$(I),18,3):get file type XdFT$"DIR"P$P$"/"NM$:1630:READ NEW DIRnPI$P$"/"NM$:PATH FOR INPUT FILExFT$"TXT"FT$"AWP"1720:DISPLAY OPTIONS24:HT,0:"Filetype is not TXT or AWP. Proceed anyway? ";:1030:K89K1211720:YES /1070:760:NO5:BRESTARTXD$;"CLOSE":1070LA$""1660:DIRECTORY NOT READ FT$""FT$"DIR"1540:NO INPUT FILE YET24:HT,0:"SAME INPUT FILE? ";:1030:K78K110K27İ1070:15401720:DISPLAY OPTIONS-24:HT,0Y:"DISPLAY PREVIOUS DIRECTORY? ";:1030:K78K110K27İ1070:1660"V24:1070,NP$P$6NP$(NP$,(NP$)1):STRIP SUBDIRECTORY NAME@(NP$,1)"/"1590 J(NP$)11630:WAS ROOT DIRECTORY7TP$(NP$,(NP$)1):STRIP TRAILING SLASHK^3:HT,0:80);uh23:HT,0::"READING DIRECTORY ";P$;r:450:RESET PREFIX |HT,024::"RESTART? ";:1030:K78K110K27Ā160:GREETING:DISPLAY OPTIONS MENU2"PATHNAME OF INPUT FILE: ";PI$8["CONTROL CHARACTER OPTIONS: ""(1) delete all control characters""(2) convert to ^""(3) convert to [Letter]""(4) keep all (uses 2 for preview)""CHOICE? <1> "; 1030:get key%K271470:RESTART F&K13CC1::1860:return c0K49K531810:NOT 1-4u:(K):CCK48{DN"CARRIAGE RETURN OPTIONS: "X"(1) keep only before indented lines"b"(2) convert double carriage returns to single"l"(3) keep all blank lines"Av"(4) keep all carriage returns"V"CHOICE? <3> ";i1030:get keyK271720:DISPLAY OPTIONSK13CR3::1980:returnK49K531930:NOT 1-4(K):CRK48"LEFT MARGIN OPTION:""Maximum spaces to delete? <0> ";8IS0:1100:GET LINE]GL$(27)1720:display optionsxSP(GL$):GL$""SP0:: PREVIEW"PREVIEW EFFECTS OF OPTIONS? "; 1030:GET KEY*K31ĺ(K);4:PV1:DEFAULT >K78K110K27PV0CHPCCC:CC4PV1PC2:PREVIEW OPTION 4 AS 2jRPV1ĺ"PRESS ESC TO STOP PREVIEW"p\:fOPEN INPUT FILEpD$;"CLOSE":CLOSE DIRzX(0):CLEAR MEMORY OF OLD STRINGS J110:W$(J)"":J:J1:CLEAR OUTPUT LINES6EOF0:NC0:RC0:SC0:FL1:KP0:RESET COUNTS FOR FORMAT?TS0iB0:FT$"AWP"B300:SKIP AWP HEADERD$;"OPEN ";PI$;",T";FT$IF ERROR THEN GOTO RESTARTA0:INDEX FOR AWP FORMAT CODESPV12450:INPUT BUFFER: OUTPUT PATHNAME * "PATHNAME OF OUTPUT FILE: ";K IS1:1100:PW$GL$:GET LINEQ  v  GL$(27)1720:DISPLAY OPTIONS|  $ D$;"CREATE";PW$;",TTXT":2420 . IF ERROR <>19 THEN GOTO OPEN OUTPUT FILE 8 "FILE ALREADY EXISTS. DELETE IT? " !B 1030:GET KEY4!L K121K89ĺD$;"DELETE";PW$:2420^!V 2280:GET OUTPUT PATHNAME IF NOT YESd!` :z!j OPEN OUTPUT FILE!t D$;"OPEN";PW$!~ :! INPUT BUFFER! :;13);"READING BUFFER";2);:! FT$"AWP"FL1Ğ:"......";:" READ CHARACTER FROM INPUT BUFFER3" BCB50:BC(BC)Ğ:".";:V" B5122920:WRITE BUFFER |" AA1:KPK:K0:K(38400B):BB1" CHECK FOR END OF FILE" FT$"AWP"C(1)255K2552920:END OF AWP" IF ERROR=2 THEN SET EOF=1 AND GOTO FORMAT OUTPUT )# FT$"AWP"2840:PROCESS TXT CHARACTER/# :J# PROCESS AWP CHARACTERi# A5C(A)K:FORMAT CODES # C(1)-2 IS LINE LENGTH, C(2)=208 IS BLANK LINE, C(3) IS INDENTATION# A22480:CHECK NEXT CHARACTER $( C(2)0A0:RESET AFTER FORMAT CODES0$2 C(2)208W$(J)W$(J)(13):BLANK LINE `$< A52480:DON'T PRINT FIRST 4 CHARACTERS $F C(3)2552690:SKIP TAB RULER$P C(3)255C(3)127C(3)C(3)128$Z A5C(3)0āM1C(3):W$(J)W$(J)(32):M$d ABOVE INDENTS LINE C(3) SPACES !%n (K22K23)K32:TAB SPACES?%x 2740:CONVERT CHARACTER p% ((A4)(C(1)2))2480:CHECK LENGTH OF LINE% C(3)255A0:2480:END OF TAB RULER% W$(J)W$(J)(13):A0:2480:END OF LINE % :% CONVERT CHARACTER& PC1KP272810:SKIP PRINTER CODE AFTER ESC/& (W$(J))175JJ1J& K31W$(J)W$(J)(K)n& PC2K32W$(J)W$(J)(94):^& PC3K32W$(J)W$(J)(91)(K64)(93)& PC4K32W$(J)W$(J)(K)& 3340:E27ġ:3380:CHECK ESC & & : ' PROCESS TXT CHARACTER:' K0NCNC1:2480:COUNT NULL CHARACTERSm'" K0NC0NKK:2890:KNK:NC0:PROCESS NULLS', K13W$(J)W$(J)(13):2480:RETURN '6 K127KK128:STRIP ASCII HIGH BIT (@ 2740:2480:CONVERT CHARACTER THEN GET NEW CHARACTER +(J K0:I1NC:2740:I::FORMAT NULLS1(T :D(^ FORMAT OUTPUTe(h BC10XS10(BC)::XS):(r :;13);"WRITING BUFFER";13);:(| PV0ĺD$;"WRITE";PW$( J120:EOF13060( W$(J)""3270:PROCESS END OF BUFFER( I1(W$(J))) WC$(W$(J),I,1):GET CHARACTER?) RC0WC$(32)TSTS1:3230a) ABOVE PRINTS EMBEDDED SPACES) WC$(13)RCRC1:SC0:FL0:TS0:3230) SPACES BETWEEEN CARRIAGE RETURNS ARE IGNORED) (RC0FL1)WC$(32)SCSC1:3230"* COUNT RC AND SC UNTIL A DIFFERENT CHARACTER IS FOUNDD* TS0āM1TS:(32);:M:TS0f* CR4RC0āM1RC:(13);:M* ABOVE PRINTS ALL CARRIAGE RETURNS* CR3RC1āM1RC:(13);:M* ABOVE PRINTS ALL BLANK LINES+ HC(RC2):CONVERTS DOUBLE BLANK LINES TO SINGLE)+& CR2HC0āM1HC:(13);:Md+0 ABOVE PRINTS DOUBLE BLANK LINES AS SINGLE BLANK LINES+: CR1RC1SC0ĺ(13);+D CR4RC1SC0ĺ(13);+N ABOVE PRINTS RETURN BEFORE INDENTED LINES+X CR4RC1SC0ĺ(32);:SPACE,b CR2RC2SC0ĺ(32);:SPACE 6,l CR1RC1SC0ĺ(32);:SPACEW,v (FL1RC0)SCSPĺSCSP);z, EOF1ĺD$:3400:END OF FILE , WC$(4)ĺWC$;:PRINT NEXT CHARACTER, RC0:SC0:FL0:WC$(4)ĺ(94);, 3340:E273380, I, J- PROCESS END OF BUFFER3- D$:STOP PRINTING TO OUTPUT FILE c- J110:W$(J)"":J:J1:CLEAR OUTPUT LINES- D$;"READ";PI$;",B512":READ MORE INTO INPUT BUFFER- B0:RESET BUFFER CHARACTER COUNT- X(0):2450:INPUT BUFFER - :- CHECK FOR ESCAPE!. E(49152):EE128:49168,0:>. BRANCH AFTER ESC OR EOF`. D$;"CLOSE":CLOSE ALL FILESf.* .4 PV1PV0:PCCC:2160:OPEN INPUT FILE .> PV01470:RESTART .H :"";:.R .\ 3360.f :.p ERROR ROUTINE/z EN(222):GET ERROR NUMBER 8/ EL(219)256(218):GET LINE J/ 216,0:3288m/ 3450RESET ERROR TRAPPING / EN2EOF1:2940:RANGE ERROR / EN19ī2360:DUPLICATE FILENAME / EN255Ā:TRAPPED CTRL-C/ (4);"CLOSE":CLOSE ALL FILES0 23:HT,0+0 :"ERROR ";EN;" ON LINE ";EL;I0 EN2541470:TRAPPED ESCk0 EN4ĺ" -- WRITE PROTECTED";0 EN6ĺ" -- PATH NOT FOUND";0 EN8ĺ" -- I/O ERROR";0EN11EN16ĺ" -- SYNTAX ERROR";0" -- ";:01$"PRESS ANY KEY ";::" ";1.1030:GET KEY(181470:RESTART.1B:>1LBAS TO TXTb1V:"PATHNAME FOR TEXTFILE? ";F$1`(4);"CREATE";F$;",TTXT"1j(4);"OPEN";F$1t(4);"WRITE";F$:1~(4);"CLOSE":+@Tgk ?6v>-MI-?6?$ea$!' > k .6k ?6v.6--d$=?:?-L-L---.55-%-..77?>?<''/,,5-%%-%--%?'$l2:15:I1619:27,30I::31,3316:31,3319:17,33:20,33:14,1527:I2126:19,21I::23,2622:23,2623:8:22,2819:23,23:15:24,2616:9:21,228 I120:X49200:P(X):0:14,1527:15:24,2716:S150::0:24,2616:15:14,1527:S150::P(X)::L150:1:23,2425:P(X):0:23,2425: VWXYZ[\! *************************A * LUNAR LANDER *a * by Brent Iverson *( * Copyright (C) 1991 by *2 * MindCraft Publ. Corp. *< * Lincoln, MA 01773 *F *************************P---SET UP THE PROGRAM# Z(4);"BLOAD LANDER.SHAPES,A$1DFC"8 d232,252:233,29N n1190:1090:1250W x220q ---AUTOPILOT ROUTINE XV1XVXVG XV1XVXVG YV.9YVYVC X140XVXVG2 X139XVXVG2 ---MAIN LOOP ---READ THE KEYBOARD, I(16384):16368,0:I127II1G I1I:ZZ0:FU0I150p I155EF1FUFU50:EC20:EF0:I10 I201YVYVC:FUFUCH:ZZ1 I202XVXVG:FUFUCH:ZZ1 I204XVXVG:FUFUCH:ZZ1 I172YVYVC:FUFUCH:ZZ1 "I141İ140:FUFU(2CH):ZZ12 ,---INCREMENT VARIABLES> 6YVYVGZ @X1X:Y1Y:XXXV:YYYVt J---MAKE ENGINE SOUND TZZĹ6,50:7,20:768 ^---PRINT OUT STATUS h21:8:(152Y);" ";:33:YV;:868 r23:8:FU;" ";:33:(XV);:868! |---IS LANDER POSITION LEGAL?6 X5X5:XVXVO X274X274:XVXVd Y4Y4:YVYV| ---DRAW THE LANDER SHX1,Y1 I160İ960 SHX,Y ---DID LANDER DOCK OR LAND? X125X155Y9810 Y152ī840 ---MOVE THE ALIEN A1A:B1B. EC0ECEC1:570> AXAAACN AXAAAC^ YBBBACn &YBBBAC 0---DRAW THE ALIEN :2A1,B1 D2A,B N---IS ALIEN CLOSE TO LANDER? X(XARAXARA)(YBRAYBRA)640 b220 l---END OF MAIN LOOP,v---ROUTINE TO CRASH LANDER?SHX,Y:2A,BO6,255:7,5[ZZ18kYY04816sYY~6X,Y768:22:17:"YOU LOSE !":ZZ11000::930---ROUTINE FOR PLAYER WINNING7,30ZZ140 6,ZZ:768 3::22:17:"YOU WIN!"::930] ---ROUTINE TO CHECK IF PLAYER DOCKED*(YV1.5X137X143FLG0)6404750>---ROUTINE TO CHECK IF PLAYER LANDEDHYV1(XV)2SH1ī640FR22:10:"LANDING ACCOMPLISHED";:7,30:ZZ1602:6,ZZ:768:6,ZZ100:768::22:10:" ";O\XV0dfFLG1:YV4:SH3op1X,YzSHX,Y4:4X,Y1:YY4I201250---ROUTINE TO SEE IF PLAYER WANTS TO PLAY AGAIN24:5:"Would you like to play again?";:1030:I2061100:::216,0:16368,0:K---HYPERSPACE ROUTINEf(1).20ĕSHX,Y:640X(1)25010:Y(1)1401016368,07,20:ZZ4011:6,ZZ::768:FUFU50:I10---ROUTINE USED TO CHECK IF A KEY HAS BEEN PRESSED16368,0&I(16384)7I1271040=$C.W8--------TITLES|B::::4:14::"LUNAR LANDER"L:6:(12):"by Brent Iverson":10:9:"Copyright (C) 1990 by":11:9:"MindCraft Publ. Corp." V:20:6)"":`1030j)t16368,0]~:4:"DIFFICULTY LEVEL (1=EASY, 2=HARD): ";:A$}AC(A$)48:AC1AC21130---POKE IN SOUND ROUTINEZZ768781:YY:ZZ,YY: 166,7,164,6,173,48,192 136,208,253,202,208,245,96 C---SET UP HI-RES SCREEN, INITIALIZE VARIABLES, ETC.L:1qX140:Y11:A(1)279:B159:YV2XV0:YV00:1 C.5:G.25:RA10:FLG0:FU500:CH1:SH1:I10EF1:EC00,159279,159(ZZ1100:(1)7:(1)279,(1)159: 23%<X1X:Y1Y:SHX1,Y12F5140,0=P2A,BkZ21:1:"HEIGHT:";9);"VERTICAL VEL. :";d23:1:"FUEL :";9);"HORIZONTAL VEL.:";n16368,0x^_`abcOCTOBER 1991 DISK (VOL 12 /NO 10) 5 NIBBLE SIFTER BUILD A BIG PRINT BUFFER LUNAR LANDER AUTOSAVE CHECKIT 4 NIBBLE SIFTER RUN FILE.SIFTER LUNAR LANDER RUN LUNAR.LANDER AUTOSAVE BRUN AUTOSAVE CHECKIT RUN CHECKIT @ This disk is a double-sided disk. All of the programs that will run under ProDOS are on the ProDOS formatted front side of the disk, and all that will run under DOS 3.3 are on the back side of the disk. Some programs will run under both operating systems and are included on both sides of this disk. You're currently using the ProDOS side of the disk. @ Before using the programs on this disk, you should make a work disk for each program. This can be done by first making a complete copy of the disk with one of the following programs: * COPYA (DOS 3.3 System Master) * FILER (ProDOS Utilities Disk) * The Apple IIc or Apple IIGS Utilities Disk * Any Disk Copy Program Then boot the copied disk and delete all of the files that are not related to the program by using the DELETE command. The System Utilities program also has an option to DELETE files. @ The screen displays that follow show the files needed to create working copies of each program. @ To create a work disk for Nibble Sifter, remove all but the following files from a copy of this disk: FILE.SIFTER CREATE.SAMPLE These programs are included on the ProDOS side of this disk, only. @ To create a work disk for Build a Big Print Buffer, remove all but the following files from a copy of this disk: SETPBUF SETPBUF.ASM SETPBUF.MAC This program is included on the ProDOS side of this disk, only. It is not included as an option in the program menu, because it requires special instructions. See the documentation for details. @ To create a work disk for Lunar Lander, remove all but the following files from a copy of this disk: LUNAR.LANDER LUNAR.SHAPES This program is included on the ProDOS and DOS 3.3 sides of this disk. @ To create a work disk for AutoSave, remove all but the following files from a copy of this disk: AUTOSAVE AUTOSAVE.S This program is included on the ProDOS side of this disk, only. @ In addition, we've placed a copy of the CHECKIT program on this disk. CHECKIT is a utility published in Nibble that aids in typing in programs from the magazine. The One- and Two-Liners are also included on this disk. @ The source code files for the major assembly language programs have been included on this disk. These files are included expressly for experienced programmers. These files cannot be used unless you own the appropriate assembler. WARNING: Do NOT attempt to run the following source code files: SETPBUF.ASM SETPBUF.MAC AUTOSAVE.S @ # efghijklmnopqrstuvwxyz{|}~L !C_" %k"l" (#M8( % ) L*"m"n" (_7, )7(P0 ( @X p 8  u"!_"f"0 ~&f"0 %o"p" (,) &q"r" ( %L*")0I0hx H( + %Щ ߩu"L! )L! 8'  )ɀ)4,- U JNT) u"Ls"t" ( !` ^"M)Fi/ b"3 h"i"j" e" iL X>"L;"ίΠ`v""""""*$ Fk%YeQP!/RB}QBiBB}\ }FEL,#> ȏ6 . ) ɘ"    L:#:#ŠϠĠԠ  m# m# J Qڨ)̰}] нȱ ̀𩠙 i V N c ɘ\   VG+ #X ɛL ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`BYYZLYLYLY뿭` 8!@8` %MNЩUMߩ  L 5   8 0 8  `0 / X& & +&&7&P^&0`ŠӠֱέԠŠҬî̠ӠĮʎ1|&… (n}&Dž (\%Tz&Lc()8= (J 8'z&'{& 3((ʎ1|&|&|&3223 ')L&18|&"m11 2H22h2舌|&|&12H)M0 h10200I20h2 (`LE%12 `_'"L  <8# ȱ)ɀ  )( ` (Xp< @( )m((.(( M(i  ``) |'(j21 z& {&!` ({&z&(i({&(( CBDFGE (r&$ 3(,}&r& … 3(ŅL&JJJJ`Ϡ'8`r&h)hrȱȱȱȱ0]cȱeem*ȱ*ȱ**ȱ**ȱ* )* * )L(`L?* *Ll) ) L( )Ll)8e` ,$`ee` `* G** c*` v* G* c*`hh8`8`***`}*`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <.<ʆ>,=?BC8 é&'112`HB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLآ <B*IBGF08Lé'+8H <,``h(`@ڍL3hh@ihAiH(ؠȱ@JJJJq@)@vvȱ@Hȱ@Ah@@cve J) LL LJiB LJ) JxNhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJl`B l-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ(     0 HϭߍLпllllhh8` Qu")T'P() ɺiLG )?      `l@Hȱ@IױHXATȱH ɯȩ׍̕5H)/@a)_ .0 :A[8@`,뎕׮Б` L ` @>V)I38 Pghם`K8`@Nȱ@O@ IiNȽבN)/ȩ/N`@[ WHJjjjhA I'KI؍0JHi 뎈`C8` @ 3N@) S莴 ⭱i`0 e; 뮈ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNί0NN` G8`F@ 0 P LK8`= >I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶=> ?܅I m@IHHyHȘI Lܝ` @f@ n@Ю׍V)mיVʈ@tȱ@fȱ@prsiQ{R|V)5VI0ܢܽ lS'H* 7ghFG (JK L܅IU mHIH` wt tP0ST HVHQFRG 밳QR 밨J%܈G" T)Ii)܍U*܍H'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` HHV` /Q'܅IHHVVЍV@`8 ` ͐% ΐQ8`܅I `S܍TU p8D`F` ilH)HFȍQHGR $%܍&܍!ܢ8* J8` L ܝA)I 'ܝ=`I8iUFSGT`I܅IH3H ( )ȱHί`Α8HeHI SB=0P ٙNٙLFQJʈ p猱`8m0`,0H hi PȽίhٍ0GF8yאFG  $0 S01 E8`100 e 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`ί` W G IؙJJ c: QLHIHI`JKJK`FHIG ( Ȣ؝؈JL)eKM`)` J }J͢ $0 ΑJFJL8`JGBJ \ FإG`BH \FإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` L3J  B"L H  B 9ؙ` @ P8`K8`B8` O؈VJJJJحt) ) )Ю ЪGgF $ ᭔ع+ؠ >H  Wh8` 䮈ٽ ٬ؠ@` ( O )8`)i п`  H h)N$% LL L L >  .pJ덦 )@፩NJOK >iKKΥΥ IJΦ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L>쬉8NNO 8 ؍JL`RΥʱLN1MOMEKP/MEKΥLCL-M O,p莤eNNO(`JNKOL >/  .P L8 cؑJ`L@ȱ@ `@Nȱ@O`؝}}I}ؐ` rؽ؝} r 1 r؝}؈` ` H  \h)N@ C; L  >$ )bJ e ) H @hL ) # )حJjI~HI}H؊  PLKΥʱNLMO MЈMEKݸP%MEKΥL0 O, PeNNO O(` C  7 #2J}HI~HI؊ LQ  6` #A H} ع H~ ؙ؊ؠIhHIhH  iع `  عiعi` )؍0CGHFHBFGx ް(8hFhG`@4͔ L @Ai ׭2` . W#ع؍0 e讈)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝O0QR 방 STQRFG 嬉؍i؍j؝k ؝f }V) }V )حP͝ `H@h`h``N8`  ) C⬉Ȣ؝@ݡ@ʈLO KIJHȢݡ)Jn 8 λ ؍ ؍ aH8 ع)ꭸJJJJ Ȣ؝I؈ >h(8H E h(8Hh(`ؑ@`@ȱ@ ` B@8ZV p鮈ٍٍٍvHٍu8ihjVJJJJV)V@` %I -t) 0@V)N8` @LL =@ 4ȹP8` %i` Bם0 4B B)( ȹ`8m8m@8` G8`F Pt)@N8`V)@J 4טyרםVV)׍Vgh 밑 %LȹL@ȅH@IL,0` G פֿ= eH.t)N 0 PghV)@LP8` a᮷ &֩VJKJ L䬈yٙ٭yٙ٩`K OEgFhG 6%&N   & ܮ `J HH hh` 0 @ LLL w`̻Yܝ ݝ0̻ȩFG   0` ܅F݅G ` wͬ 밽܅F݅G ` * w% L`L뮷HH &hFhG܍ݍ 8 `FHGH & hGhF`ݹܙ݊`@Bɼ>K@J5 9X(K XXK تKo`V8`no` I on I9XX`) HJJJh`OeNeO࿰ 9XАO`@ȭ@` ON fNJKO`HхhꭋILhH),kx8 (8` ԍ`@Ae Or88`zw! NIJK,-NOPQRSu' @   !"#$Ԡ͠ˠ(C)1983-87APPLELKL`BL Lެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LZP׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿ`` ֽ ְ& .Vӈ  JJJJH 8h Ei 8EX`'8`jӍWӥC)p> pӥCYӍY 轊( ( ӈBV ( ӭp0 \BkJ ՠ@iӦ> Ӑi'j:ZH i@ioZZH h ѐȭnWǥBJ Ӱ8XӦ>` Ր+>*L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| 0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌18V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8``  / XʩXύX X %   % ɍRH hɛɘɉɈ $ Ld :Ldې)ɮ۰ɺ' Ld  : X ( % ɛ$ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'L  ġLL ̹L)'L ȳL O'F ʻ ̹(((L $ʩ $$ $L `ީ % K@D EFby LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKEL ,@ LK  J 0") "H"h"`"H""`rH "hh~    q0"&H$H"hh  HH"0H.H""HH "hh .8iD:FF <H"HH","`0 ; :8+H,   * :@ @ 0+kJ 0&8Wz}~&$0.9=X8_Dg:jFoFu<{H   ***@@@@@@************************************************** * * * SETPBUF.ASM Source Listing * * by Sandy Mossberg * * * * APW Assembler * * * * Application sets size of printer buffer used * * by serial port firmware. Set your values for * * MyPrtPort and MyBufSize. * * * * Copyright (C) 1991 * * by MindCraft Publ. Corp. * * Lincoln, MA 01773 * * * ************************************************** mcopy setpbuf.mac keep setpbuf BZHndl gequ $00 ;bank 0 handle BZPtr gequ $04 ;bank 0 ptr BufHndl gequ $08 ;buffer handle Emulstack gequ $010100 ;emulation stack ptr MyPrtPort gequ 1 ;printer slot=1 MyBufSize gequ $FFFF ;buffer size=64K ********************************************* * MainLoop start * * Main program loop: * ********************************************* using Globals phk plb jsr StartTools ;startup tools jsr SetBufData ;set print buffer jsr ShutTools ;shutdown tools _QuitGS QuitParm end ********************************************* * StartTools start * * Startup tools: * ********************************************* using Globals _TLStartUp pha result space _MMStartUp PullWord MasterID save master ID _MTStartUp rts end ********************************************* * ShutTools start * * Shutdown tools: * ********************************************* using Globals _MTShutDown PushWord MasterID ;master ID _MMShutDown _TLShutDown rts end ********************************************* * SetBufData start * * Set size of serial port printer buffer: * ********************************************* using Globals ; Reserve bank 0 space for serial port calls: PushLong #0 ;result space PushLong #BZEnd-BZStart ;size PushWord MasterID ;master ID PushWord #$C005 ;attributes PushLong #0 ;use bank 0 _NewHandle PullLong BZHndl ;save handle bcc GetBZPtr ;no error brl GoErrExit ;error ; Modify call addresses to bank 0 code: GetBZPtr lda [BZHndl] ;dereference handle sta BZPtr sta GoBZ1+1 ;MODIFY address sta GoBZ2+1 ;MODIFY address ldy #2 lda [BZHndl],y sta BZPtr+2 ; Modify code to reflect printer's slot ROM: shortm ;8-bit A/memory lda #MyPrtPort ;slot number asl a ;move slot to hi nibble asl a asl a asl a sta InitY+1 ;MODIFY address lda #$C0 ora #MyPrtPort ;slot ROM address sta InitX+1 ;MODIFY address sta GetInit+2 ;MODIFY address sta GetExtend+2 ;MODIFY address sta DoInit+2 ;MODIFY address sta DoGIB+2 ;MODIFY address sta DoGOB+2 ;MODIFY address sta DoSIB+2 ;MODIFY address sta DoSOB+2 ;MODIFY address ; Modify dispatch addresses (init=Cn0D, extended = Cn12): GetInit lda >$C00D ;MODIFIED sta DoInit+1 ;MODIFY address GetExtend lda >$C012 ;MODIFIED sta DoGIB+1 ;MODIFY address sta DoGOB+1 ;MODIFY address sta DoSIB+1 ;MODIFY address sta DoSOB+1 ;MODIFY address ; Copy image of bank 0 code to bank 0: ldy #BZEnd-BZStart-1 CopyLoop lda BZStart,y sta [BZPtr],y dey bpl CopyLoop ; Invoke serial port calls in bank 0 to get ; addresses of I/O buffers (pass 1): long ;16-bit regs GoBZ1 jsl $001000 ;MODIFIED ; Get attributes and ID of input buffer: PushLong #0 ;result space PushLong GIBBufAdr ;ptr to memory _FindHandle PullLong BufHndl ;inbuf handle ldy #4 lda [BufHndl],y sta FirmAttrib ;inbuf attributes ldy #6 lda [BufHndl],y sta FirmID ;inbuf ID ldy #6 ; Dispose of handle(s) to I/O buffer memory: PushLong BufHndl ;kill handle to inbuf _DisposeHandle PushLong #0 ;result space PushLong GOBBufAdr ;ptr to memory _FindHandle ;outbuf handle _DisposeHandle ;kill handle ; Allocate space for new I/O buffers: PushLong #0 ;result space PushLong #MyBufSize ;size PushWord FirmID ;firmware ID PushWord FirmAttrib ; and attributes PushLong #0 ;not used _NewHandle PullLong BufHndl ;save handle bcs GoErrExit ;error ; Set addresses in serial port command lists: lda [BufHndl] ;dereference handle sta SIBBufAdr ;inbuf lo clc ;offset to outbuf adc #$800 sta SOBBufAdr ;outbuf lo ldy #2 lda [BufHndl],y sta SIBBufAdr+2 ;inbuf hi sta SOBBufAdr+2 ;outbuf hi bcc SetBufLen inc SOBBufAdr+2 ;bump hi word ; Set sizes in serial port command lists: SetBufLen lda #800 ;2048 bytes sta SIBBufLen ;inbuf size lda #MyBufSize-$800 sta SOBBufLen ;outbuf size ; Invoke serial port calls in bank 0 to set ; addresses of I/O buffers (pass 2): GoBZ2 jsl $001000 ;MODIFIED bra Exit ; Set error flag and exit: GoErrExit lda #-1 sta ErrFlag Exit PushLong BZHndl ;kill handle to bank 0 _DisposeHandle lda ErrFlag beq Endit ;no error _SysBeep ;error beep Endit rts ;............................................ ; ; IMAGE OF BANK ZERO CODE: ; ; Save entry environment: BZStart long ;16-bit regs phd ;save entry direct page phb ;save entry data bank tsc ;get stack ptr into tax ; A,X-regs shortm ;8-bit A/memory xba dec a beq SaveSP ;stack ptr in page 1 lda #1 ;set stack ptr to pg 1 xba lda Emulstack ;set emulation mode tcs ; stack ptr SaveSP phx ;save entry stack ptr ; Set emulation mode and new environment: emulation ;emulation mode pea 0 pld ;direct page=page 0 lda #0 pha plb ;data bank=bank 0 ; Check whether to set buffer info: lda >BZFlag beq SetSIBAdr ;it's pass 2 ; Initialize serial port firmware on pass 1 (X=Cn, Y=n0): InitX ldx #$C0 ;MODIFIED InitY ldy #$00 ;MODIFIED DoInit jsr $C000 ;MODIFIED txa ;test X-reg beq GetGIBAdr ;no error dc h'00' ;crash ; Get buffer info on pass 1: GetGIBAdr lda #GIBCmdList ;point to command list ldx #>GIBCmdList ldy #^GIBCmdList DoGIB jsr $C000 ;MODIFIED bcc GetGOBAdr ;no error dc h'00' ;bomb GetGOBAdr lda #GOBCmdList ;point to command list ldx #>GOBCmdList ldy #^GOBCmdList DoGOB jsr $C000 ;MODIFIED lda >BZFlag ;flag pass 2 dec a sta >BZFlag bcc BZRestore ;no error dc h'00' ;to monitor ; Set buffer info on pass 2: SetSIBAdr lda #SOBCmdList ;point to command list ldx #>SOBCmdList ldy #^SOBCmdList DoSIB jsr $C000 ;MODIFIED bcc SetSOBAdr ;no error dc h'00' ;die hard SetSOBAdr lda #SOBCmdList ;point to command list ldx #>SOBCmdList ldy #^SOBCmdList DoSOB jsr $C000 ;MODIFIED bcc BZRestore ;no error dc h'00' ;arrrggh! ; Restore entry environment: BZRestore native long ;full native mode plx ;restore entry stack ptr txs plb ;restore entry data bank pld ;restore entry direct page rtl BZEnd anop end ********************************************* * Globals data * * Global data: * ********************************************* QuitParm dc i2'0' ;pCount = 0 MasterID ds 2 ;application ID FirmAttrib ds 2 ;firmware attributes FirmID ds 2 ;firmware ID ErrFlag dc i2'0' ;0=no error, -1=error BZFlag dc i1'1' ;1=pass 1=init/get info ; ;0=pass 2=set info GIBCmdList anop ;GetInBuffer command list dc h'04' ;pCount = 4 dc h'10' ;command code ds 2 ;return code GIBBufAdr ds 4 ;buffer address GIBBufLen ds 2 ;buffer length GOBCmdList anop ;GetOutBuffer command list dc h'04' ;pCount = 4 dc h'11' ;command code ds 2 ;return code GOBBufAdr ds 4 ;buffer address GOBBufLen ds 2 ;buffer length SIBCmdList anop ;SetInBuffer command list dc h'04' ;pCount = 4 dc h'12' ;command code ds 2 ;return code SIBBufAdr ds 4 ;buffer address SIBBufLen ds 4 ;buffer length SOBCmdList anop ;SetOutBuffer command list dc h'04' ;pCount = 4 dc h'13' ;command code ds 2 ;return code SOBBufAdr ds 4 ;buffer address SOBBufLen ds 4 ;buffer length end MACRO &lab _QuitGS ¶ms &lab jsl $E100A8 dc i2"$2029" dc i4"¶ms" MEND MACRO &lab _TLStartUp &lab ldx #$0201 jsl $E10000 MEND MACRO &lab _TLShutDown &lab ldx #$0301 jsl $E10000 MEND MACRO &lab _MMStartUp &lab ldx #$0202 jsl $E10000 MEND MACRO &lab _MMShutDown &lab ldx #$0302 jsl $E10000 MEND MACRO &lab _CompactMem &lab ldx #$1F02 jsl $E10000 MEND MACRO &lab _DisposeHandle &lab ldx #$1002 jsl $E10000 MEND MACRO &lab _FindHandle &lab ldx #$1A02 jsl $E10000 MEND MACRO &lab _HLock &lab ldx #$2002 jsl $E10000 MEND MACRO &lab _HUnlock &lab ldx #$2202 jsl $E10000 MEND MACRO &lab _NewHandle &lab ldx #$0902 jsl $E10000 MEND MACRO &lab _SetHandleSize &lab ldx #$1902 jsl $E10000 MEND MACRO &lab _MTStartUp &lab ldx #$0203 jsl $E10000 MEND MACRO &lab _MTShutDown &lab ldx #$0303 jsl $E10000 MEND MACRO &lab _SysBeep &lab ldx #$2C03 jsl $E10000 MEND MACRO &lab pulllong &addr1,&addr2 &lab ANOP AIF C:&addr1=0,.a AIF C:&addr2=0,.b LCLC &C &C AMID &addr1,1,1 AIF "&C"="[",.zeropage pullword &addr1 sta &addr2 pullword &addr1+2 sta &addr2+2 MEXIT .a pullword pullword MEXIT .b pullword &addr1 pullword &addr1+2 MEXIT .zeropage ldy #&addr2 pullword &addr1,y ldy #&addr2+2 pullword &addr1,y MEND MACRO &lab pullword &SYSOPR &lab ANOP pla AIF C:&SYSOPR=0,.end sta &SYSOPR .end MEND MACRO &lab pushlong &addr,&offset &lab ANOP LCLC &C LCLC &REST &C AMID &addr,1,1 AIF "&C"="#",.immediate AIF "&C"="[",.zeropage AIF C:&offset=0,.nooffset AIF "&offset"="s",.stack pushword &addr+2,&offset pushword &addr,&offset MEXIT .nooffset pushword &addr+2 pushword &addr MEXIT .immediate &REST AMID &addr,2,L:&addr-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .stack pushword &addr+2,s pushword &addr+2,s MEXIT .zeropage ldy #&offset+2 pushword &addr,y ldy #&offset pushword &addr,y MEND MACRO &lab pushword &SYSOPR &lab ANOP AIF C:&SYSOPR=0,.b LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.immediate lda &SYSOPR pha MEXIT .b pha MEXIT .immediate LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.a &BL SETA L:&SYSOPR+1 .a &REST AMID "&SYSOPR",2,&BL-2 dc I1'$F4',I2'&REST' MEND MACRO &lab native &mode &lab ANOP clc xce AIF C:&mode=0,.a &mode MEXIT .a long MEND MACRO &lab emulation &lab ANOP sec xce longa off longi off MEND MACRO &lab long &lab ANOP rep #%00110000 longa on longi on MEND MACRO &lab shortm &lab ANOP sep #%00100000 longa off MEND  ******* 8/08/86 *******;* ProDOS STARTUP *X* BY OWL *u(* COPYRIGHT (C) 1987 *2* BY MINDCRAFT PUBL. *<* LINCOLN, MA 01773 *F***********************& K THANKS TO RUSS HOUGHTON OF BALTIMORE, MD., FOR REVISING THE OPENING GRAPHIC (11-90).1 P16384H Z::D$(4):(21)R d970 n ********** GET HI-RES SCREEN AND SET DISPLAY SWITCHES x11:3:"MINDCRAFT PRESENTS NIBBLE SOFTWARE" 15:13:"PLEASE WAIT..." D$"BLOAD STARTUP.SCREEN") G(16297)(16300)(16301)(16304)Z ********** READ INFO FROM NIBMENU TEXTFILEd 1120 P$(20): P$ = PROGRAM NAME S$(300):S$ = LINES OF TEXT INSTRUCTIONS RC$(20): RC$ = COMMAND USED TO RUN PROGRAM" MP$(20): MP$ = PROGRAM NAME TO APPEAR IN MENU9 D$;"OPEN NIBMENU"P D$;"READ NIBMENU"i A$: A$ = DISK NAME NA$"NIBBLE "A$:22:20((NA$)2):NA$:1 NP: NP = NUMBER OF PROGRAMS ON DISK I1NP:P$(I):I MM: MM = NUMBER OF VALID MENU ENTRIES% "I1MM:MP$(I):RC$(I):I- ,S$5 6I0J @II1:768,S$(I)d J(S$(I),1,1)"#"350m T320} ^D$;"CLOSE" h(1101)6İ1080: ********** UPPER/LOWER CASE ROUTINE r ********** FIRST TEXT SCREEN |::3 "Thank you for ordering the Nibble":A$;"!":C "The programs on this disk are:":\ Z1NP:5:P$(Z):Zx 1030:FLAG$"ESC"ī600  ********** CYCLE THRU NIBMENU TEXT SCREENS A1 :3 S$(A)"@"İ1030::3:((FLAG$"ESC"))490:600S$(A)"#"510 S$(A)AA1:460J ********** LAST TEXT SCREEN BEFORE MENUS:3{6:"Thanks again for your order !"12:6:"ALL PROGRAMS ON THIS DISK ARE"&6:"COPYRIGHT (C) 1991 BY NIBBLE"06:"MINDCRAFT PUBLISHING CORP."*56:"P.O. BOX 256, LINCOLN, MA 01773"Z::17:5:"UNAUTHORIZED COPYING IS ILLEGAL"dD1030N ********** SET UP MENUXMEMM2:X$(0)" ":X$(1)"-->":b1:1:"Selection: : Instructions"l3:"----------------------------------------";*v5:20((A$)2):A$QI1ME2:61I:8:I". "MP$(I):z61(ME1):8:ME1". Catalog Disk"61ME:8:ME". Quit"21:"----------------------------------------"23:1:"Type number or use arrows, then ";:PX10:SX4:SL10 ********** SELECT CHOICERNSL:OSSL:780:Z0:24:8681:12:SL:49168,0:16384,128::Z$((16384)128):Z$"1"Z$(ME)SL(Z$):NOS:780:700Z(Z$(21)Z$(10))(Z$(8)Z$(11))10(Z$(13))20(Z$(27)):Z950Z20ī380DSLSLZ(Z10):SLSLME(SLME)ME(SL1)\NOS:780:Z10700e800 ********** PRINT POINTER SUBROUTINE 61N:SX:X$(SLOS);: ********** SELECTION ROUTINE SL(ME1)İ860:600*SLMEİ900:SL1:780:680;42:1:" "::2:1:RC$(SL):h> ********** EXECUTE A VALID MENU CHOICEH49168,0::1100::D$;RC$(SL)R ********** CATALOG SELECTED \:49168,0::D$;"CAT":f24:7:"Press to continue";p49168,0:49152,128:0z ********** QUIT SELECTEDo22::958:"Do you really want to quit? (Y/N)";:49168,049168,0:49152,128(49152)249(49152)217Ĺ49168,0::1100: ********** SOUND BUZZER FOR WRONG KEYSTROKE EQ110:EY(16336)(16336):EQ:F ********** ERROR HANDLING ROUTINEN:o(1101)6ė:D$"PR#A$300"(222)6(222)8Ģ19:(7);"Disk Error. Please insert Nibble disk":101019:(7);"An error #"(222)" has occurred. "D23:"Press to continue ";:958:49168,0:49152,128:600i ********** WAIT FOR KEYSTROKEvFLAG$""23:" for next page or for menu";:49168,0:49152,128(49152)155FLAG$"ESC"$. *********** ATTACH UPPER/LOWER CASE ROUTINEB8I013:ML:768I,ML:I:D$"PR#A$300":vB ********** DETACH UPPER/LOWER CASE HANDLER L(4);"PR#0":V ********** INSTALL INPUT-ANYTHING ROUTINE`X768839:A:X,A::j ********** INPUT-ANYTHING ROUTINE DATAOt 32,190,222,32,227,223,36,17,208,5,162,163,76,18,212,133,133,132,134,165~ 184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216 169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165 135,164,136,133,184,132,185,32,183,0,96,0B ********** UPPER/LOWER CASE ROUTINE DATA| 216,201,225,144,6,201,251,176,2,233,31,76,240,253,0p|~p|*U*U*U*U*U*(@?p~px|xժժժժժT*@?p~px|ЪժժժՊdO U @?`p~?pxԊԪ`|yg~0 cFc U*U*U*@@P*U*U*U*U*U c `Lgsc `0L| 0@ ժժժժժժ F`pO|`*U*U*U*U*U*0p|~p|(U*U*U*U*U**@?p~px|ժժժժժ`AT*@?p~px|xժժժՂn_? U@?`p~ppp}{c0 cFc(U*UA*U*ԪժժժժՊc|`LqFn|cx``G  pO?<ժժժժժժpaGo1G1v`cOFq3\qsqpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U**@?p~px|ժժժժժ`AT*@?p~Ap||xժժժՂN?p Upysc'C&0.cFc(U*U P*U*@c|@`?|1@?<Ԫժժժժժժժժժժժ3L;sL1 3N0fF3F0f`pO|`*U*U*U*U*U*@?~yg|sO?~yg|sO?~yg|sO?~ygp|~p|(U*U*U*U*U*@*@?p~px|ժժժժժpcU*@?p~p|ժժժ_?@>| Ux{w cY#8X03X0FC30*U*U*U*U*Uc ``c 3@ Ԫժժժժժ`ժժժժժժ0LsL1 ?pgF1Fq1fqappO|`*U*U*U*U*U*pp~p|(U*U*U*U*U*@*@?p~px|ԪժժժժpcU*@?`p~p|ժժժ?~ GC@F Uxsg`c00@` 80`gF1\y1\yax1~p*U*U*U*U*U*@?p~Ap||x U*U*U*U*U*P*@?p~px|ԪժժժՊpgU @?`p~p|ժժ@?~|sp#XqF1 ;FpC ;P*  U @?~yg|sO?~yg|sO?~yg|sO?~yg@*U*U*U*U*Uc `]gs`gL`0L3 ?|1@ ժժժժժժ@pO|`ժժժժժժ0p|~pp*U*U*U*U*U*@?p~px|x U*U*U*U*U*T*@?p~px|ЪժժժՊtoU @?`p~p|ժժ`~} CCk<F9 gfCgU*(U*P*U*U*U*U*U c `Lgs0c|`0L  0@ ժժժժժժ F0`pO|`ժժժժժժ0p?|~?px*U*U*U*U*U*