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}' ,BASIC.SYSTEM( BLOCKoxx*BLOCK.DEMO$ 6 'BLOCK.S# xԴ%BRICKO*m m 'CHECKIT+ 6/ ϲ DUEL3m >+ INSTR45s*INSTR.DEMO5st/ 'INSTR.S8 5 s+LOG.PLOTTER@%+! @& 'NIBMENUWE   PARADE_Lm m PRINT.CHARM`}(`}(-PRINT.CHARM.Sa }%}%&PRODOSh"}@#('STARTUP z®3 .STARTUP.SCREEN . . *SUPERTRACEs( sSUPERTRACE.DEMO`| | ,SUPERTRACE.SF>s(5  LG ASTARTUP$#   / XXύX?klmnÍoL) "6L'?"(0`6708" = ***)<JJH !h穖tp% ;"Z/݀>">"' 1" 7"5).莀/ ;" " 6" >" 1"6"$ "g"" !"""""I򭭻LYL 8!9 詍` "  4"/pŠϠŠà͠ӠàԠŠH06172839h` v97L75v^a ?/( va?L5LLɍ$?`?a ɍɥAH93827160hH46576879h`,C bL ɍ b ,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 $݅3`(l8L3LX>(Ƀ,`3,G0]ɾ g` H`پ_پ p _پ׾`>( p۾m׾) W)ʩ@`ɾ>(O黩 puȾ ɾ-O c־Jjjj껝2뻝3 `O>0O v POپھ p +H־Ǿh۰8L־Jjjj2껽3뻭ɾ)Ⱦ8껰  OLӜ ΤLLX>(F﻽ﻝﻩ`ֻ־ؾپھ׾` bɄ KDEF vLl v lL5 bKɍKL?`  vLl@3 @LtJ)s@J b  l`a?sa?,E30ɍФ3 E3HD F3 Ʉ%h3 bM E  lLthɍLL3`3,A0s0% Ipn DpnI:L ؅3ݷ03LG8H933LΞAAJL ةޘг uv $ 8LƞaЌ>?@`>?@`B;8`W K  黐LK ҟ ҟ l KK`JJJJ8`轌K)` #hhLJپھ pHJh` D!hgtp `tp8nnitpiͱtso8pinii>j?kͷ>pIiͯͷ l - `>i>?Ek?!>Q>>>Ͳͳ `` \>Ͳ ͳ `e>>?ʹ?>?Emn(>e>ȱ>e?>Q>ؠ> ie>>?`;=:<:<=;`ͯm;>:8o>oȑ>ppȑ>> :op` DKpn͋ @p;틻=po:i>?Ek?>Q>> L> \/ e>>?ʹ?ޱ>ȥj>>m>` im8iŻnjƻkiljoŻS -޻.߻$I2 U)VJ T)`l޻8`a HbIJhjǾȾɾ p٭b=aIe f`8` cP־ǾҾ,G0C =W)_``\"׾پӾؾھ pD`־ǾY׾ؾOW)ݩȾɾʾ pD`8`W)CB) ŵ 춰5W) )W)@! pZ}ȾȾ󰹩 p` c־ǾҾ,G 8`׾ؾ  p ۥs׾tؾE` c ( |о(־Ǿ,G 8`_`W)H־Jjjjh2׻3ػ p̭ػ׻ L%Ǿ廎滠 ..8׻ػ 廍⻈ۭ (׻8廪ػ滨mȾȾmɾɾʾiʾ` Lpl8l:/,s̝sƬƀ#(ZZV4G_0=( A P FjL\5p-e9ABSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPENDbzDl e|Ŭ-⭚ݴgaB<{P~VM@@ -!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~T٩   LiLMTRLLLLL58ﻀۻ)Iۻ `2Eۻ8`ﻀ ԠŬLLN M O MN O   &e 'i   e e ` !"! *************************A * BLOCK.DEMO *a * BY DAVID HARRIS *( * COPYRIGHT(C) 1991 * 2 * MINDCRAFT PUBL. CORP. *< * CONCORD, MA 01742 *F ************************* P: Z: ** MAIN PROGRAM ** d: n200: INITIALIZEN x22:"SHOTS = ";NSHOTS;" HITS = ";HITSq T5(T5)İ360: MOVE PLAYER TS(TS)İ450: MOVE TARGET SHOTİ540: MOVE BULLET (16384)127İ620: HANDLE KEYPRESS TT1 120 : : ** INITIALIZE ** :C (768)165(769)255ĺ(4);"BLOAD BLOCK"K :U PX18_ TX35q S(8(1))5 SHOT0:NSHOTS0:HITS0 DIR0 "7,96:255,209: FOR BLOCK SHAPE ROUTINE ,LOOP159:X:24575LOOP,X:LOOP 616368,0N @24:" LEFT AND RIGHT ARROWS MOVE, SPACE BAR STOPS, RETURN FIRES, 'ESC' QUITS";W J5:] Tc ^:| h: ** MOVE PLAYER ** r: |6,0:251,4:252,10:254,150 DIR1PX0PXPX1 DIR1PX36PXPX1 253,PX 768  : : ** MOVE TARGET ** :4 6,44:251,3:252,5:254,0@ TXTX1{ TX0Ĺ253,1:255,81:768:255,209:TX36:S(8(1))5 253,TX 768  : : ** MOVE BULLET ** &: 06,40:251,1:252,4:253,SX:254,SY :768 DSYSY2B NSY5Ĺ255,81:768:255,209:SHOT0:SXTX1SXTX2İ820: HIT TARGETH XN b:k l: ** HANDLE KEYPRESS **q v: X(16384) X127XX128 16368,0 X8DIR1: LEFT X21DIR1: RIGHT X32DIR0: SPACE BAR = STOPX27ī740: ESC = QUITVX13SHOT0SXPX1:SY145:SHOT1:NSHOTNSHOT1: RETURN = SHOOT\b:t: ** QUIT **z::"#SHOTS FIRED = ";NSHOTS NSHOTS0ĺ"HIT PERCENTAGE = ";(HITSNSHOTS)100:"GOODBYE..." *: 4: ** HIT TARGET **>:#HHITSHITS1RR6,44:251,3:252,5:253,TX:254,0:255,81]\(7);lfLOOP111up768zDLAY180:DLAYLOOP:255,209TX36:S(8(1))5:: ** BLOCK SHAPE DATA **: PLAYERV 0,56,0,0,0,56,0,0,0,56,0,0,0,56,0,0,0,56,0,0,0,124,0,0,0,126,1,0,0,127,3,0,0,127,3,0,0,70,1,0c BULLETs 56,56,0,0 TARGET 112,1,0,120,3,0,124,7,0,102,12,0,99,24,0$%&'() ˮ é ̮ Ĭ Ԡՠ ōҠՠ čŠՠ ҍҠՠ  ­ ҍנՠĠ ҍΠՠ Ƞՠ  ōԠՠà ōԠՠĠ ōԠՠŠ ōŠՠƠ ōԠՠ ōΠՠƴ ōǠԍ 卪 卪 󩍪  卪 ҍ č ҍ 卪 Š ōРƠ ſѠō 卪 ũٍ įү ҩٍΫ ōōΫҍΫŠΠ Ӎ 卪 ҩٍ ũٍŠҍΫΫōΫΠԠ ōŠ ōԫ ӍūԠ ΍נ ōҠ ҍננ ōؠ ٠ ҠΠ ӍÍΠ ΍àԍҍΫàҫ٠ ź 卪 ҩ Πũ٠ ҍҩ٠ ҍҩ٠ ΍ٍ٠Ƞ ׿ŠΠ Ϻ ΍à ҍŠ ׍àȍōàūūàנ ׍àҍҍРԠ ſŠנ Ϻ ׍Ӎ21:"ARROWS - FAST , <-ROT-> . ":"I,J,K,M - SLOW ESC - END":"SPC - LAY BRICK GOTO1-RESUME":Q0āS010:A:S,A:230S,0::1,,3,,53,62,63,39,44,173,::3:0,0:62454:X16:Y153:5 RR64((R2)(R64))2((Q46)(Q44)):R:1XN,YN:Q$:Q(Q$):NQ32:N2:XX(Q75)(Q74)22((Q21)(Q8)):XX22((X15)(X264)):YY(Q77)(Q73)12((Q10)(Q11)):YY12((Y15)(Y154)):1:Q271 ,-./012. ********** 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 :15:I01:0,3939I:0,3939I:X(I),Y(I),C(I),V(I),E(I),W(I),S(I),N(I),A$(I)::V01:I01:C(I):X(I),Y(I)::K(49152)193:49168,0:I01:F(I)(KE(I))(KW(I)) G(I)(KS(I))(KN(I)):H(I)(H(I)F(I)H(I))G(I):V(I)(V(I)G(I)V(I))F(I):X(I)X(I)H(I):Y(I)Y(I)V(I)::V(X(0),Y(0))0)2(X(1),Y(1))0)::A$(V2):9,39,2,-1,18,0,25,22,BLUE,29,0,11,1,10,9,12,8,PINKdL 6  `H ߠ0ȱhʈ`LԠ `   ީ eH hLghL67' ******************************M * INSTR.DEMO *s * BY ROGER D. CLEMENTS *( * COPYRIGHT(C) 1991 *2 * MINDCRAFT PUBL. CORP. *< * CONCORD, MA 01742 * F ******************************! P(4)"BRUN INSTR"+ Z31,0S dB$"I AM READY FOR SUMMER TO COME."w n:"--PRESS CTRL-C TO EXIT--": x"CURRENT STRING: ";B$: "STRING TO SEARCH (RETURN FOR CURRENT): ";C$:(C$)0B$C$ "STRING TO LOOK FOR: ";A$ "STARTING POSITION: ";SP& X(SP)A$,B$:G X0ĺ"MATCH NOT FOUND":200g B$:X:I1(A$):"^";:: " X POSITION RETURNED IS ";X :"PRESS ANY KEY... ";:C$:1109:;<=>?00Ҡ0Ǡ0󠠠0쮠𮠠0䬠0򠭭0ҠՠР Рՠ#Ҡՠ'Ҡՠ».ԠՠŻ%ˠՠƻҠՠ»%ҠՠĴ/ˠՠŻᬠ(Ԡՠų#àՠų٭)ؠՠŶ»àح Ǡûý ҫ ԯ ҫӻ52//Ҡ2宠3àᠰ5Ҡ#ҠԻ٠ ҩٻ ɠҩ ̠٠󠲭Ҳҩ Ҭ٠ ŠҲӻ#Ҡؠ РϠ٠ҠᠰҠû堰ӻ5󠭭,ԠҠػح ؠԻҠһ"Ҡ˻ҠҠһ3箠 *һҠ%РԻ蠾#àϻ0 堼#һ)Ѡϻ砽 àԻ#Ӡϻ󠾠 Рһ&Ӡϻ!(àһ à à.Ԡ٠Ի&ؠһ/Ԡҫٻ&˻խ ٭ح٭%ҫٻ&˻խ Рл"Šλػﬠؠƻح'ѠԻٻح РԻ#Π٭$àԻԻ Р&Ѡϻ"ŠԻ嬠-!&Ԡٻ&РûàABCDEFGHIJKLMNOPQRSTUV @ *************************?@* LOG PLOTTER *^@* BY EDWARD MIENKO *}@(* COPYRIGHT(C) 1991 *@2* MINDCRAFT PUBL. CORP. *@<* CONCORD, MA 01742 *@F*************************AP(104)64Ĺ103,1:104,64:16384,0:(4);"RUN LOG.PLOTTER"/AZ(12);(21)::dAd10:14:"LOG PLOTTER":12:"BY EDWARD MIENKO":An3)"(C) 1991 MINDCRAFT PUBLISHING CORP.":Ax2690ACL%0:CT%0:CB%191:CR%279:S$"6":D1$"1":2530:1710A GET A KEYPRESS ROUTINEBA$:A$(96)A$((A$)32)BVB THIS LINE GETS ERASED BY THE LOAD A GRAPH ROUTINEB2690:CL%0:CT%0:CB%191:CR%279:16297,0:16304,0:16301,0BIT%1:S$((4135)):D1$((4136)):2530:Q%T%:870B >>> WARNING <<<C TYPE LINES 230 + 240 EXACTLY AS SHOWN9CBELOW LINES HAVE 200 *'S DY0: ********************************************************************************************************************************************************************************************************DZ0: ********************************************************************************************************************************************************************************************************DD:E"THE EQUATIONS ARE:"}E3:230:4:1:" ":20:1:" TO SEE 'Z' EQUATION":"

TO PLOT EQUATIONS":" FOR MAIN MENU ";:150E"A$(27)1710E,A$"P"360E62:958E@3:240:958:4:1:" ":20:1:" TO SEE 'Y' EQUATION"=FJ"

TO PLOT THE EQUATIONS":" FOR MAIN MENU ";:150:A$" "260PFTA$(27)1710aF^A$"P"320pFhTZ%0430{Fr::5G|"TYPE OF GRAPH = ";T$(T%):"LEFT EDGE = ";LZ:"RIGHT EDGE = ";RZ:"TOP EDGE = ";TZ:"BOTTOM EDGE = ";BZ: SPACES BEFORE EQUAL SIGNS 1,5,4,6,3XG18:1:"USE THESE VALUES FOR SCREEN (Y/N) ?";:150:A$jGA$(27)260GA$"Y"T%TZ%:XILZ:XFRZ:YITZ:YFBZ:660GA$"N"390G::5:"CHOOSE TYPE OF GRAPH: ": H:" 1) CARTESIAN":" 2) SEMI-LOG ":" 3) LOG-LOG ":GH" 4) RETURN TO MAIN MENU":" 5) SEE EQUATIONS AGAIN"zH14:" >";:Q$:Q$:Q%(Q$):Q$(27)Q%5260HQ%1Q%4460HQ%41710HT%Q%H16:1:958::16:1:"TYPE OF PLOT = ";T$(T%):I"INPUT THE EDGES OF THE GRAPH:":18:1:958@I18:1:"LEFT EDGE ";:T%1ĺ"(MUST BE >0) ";tI" =";:L15:2680:2710:(EQ$)0EQ$(27)430IXI(EQ$):T%1XI0Ğ:(7);"LEFT EDGE <0"::520I&19:1:958 J019:1:"RIGHT EDGE (MUST BE >";XI;" )=";:2710:(EQ$)0EQ$(27)500=J:XF(EQ$):XFXIĞ:(7);"RIGHT < LEFT"::560NJD20:1:958~JN20:"BOTTOM EDGE ";:T%3ĺ"(MUST BE >0)";JX" =";:2710:(EQ$)0EQ$(27)550JbYF(EQ$):T%3YF0::(7);"BOTTOM <=0"::590)Kl1:21:"TOP EDGE (MUST BE >";YF;") =";:2710:(EQ$)0EQ$(27)580]KvYI(EQ$):YIYFĞ:(7);"BOTTOM > TOP"::620K17:1:958:18:1:"LEFT EDGE = ";XI:"RIGHT EDGE = ";XF:"BOTTOM EDGE = ";YF:"TOP EDGE = ";YILTZ%T%:LZXI:RZXF:BZYF:TZYI::"O.K. TO GRAPH (Y/N) ?";:150:A$:A$"Y"500@LT%1XS(XFXI)CR%:YS(YIYF)CB%sLT%2XS((XFXI))(CR%(10)):YS(YIYF)CB%LT%3XS((XFXI))(CR%(10)):YS((YFYI))(CB%(10))L:16302,0:3LYI0YF0YCB%YFYS:CL%,YCR%,YMXI0XF0XCR%XFXS:X,CT%X,CB%,MXP%CL%:XXIXS=MIT%1:1660[M>>>MAIN PLOTTING LOOP<<<MXXXS:T%1XXI(10(XSXP%))M EVALUATE THE EQUATIONSM230M YYIYYF820MT%3YPCB%(YYF)YSM T%3YP(YYI)(YS(10))M*XP%,YPN4ZYIZYF860-N>T%3ZPCB%(ZYF)YSMNHT%3ZP(ZYI)(YS(10))YNRXP%,ZPuN\XP%CR%XP%XP%1:750Nf(7)Np216,0Nz CURSOR CONTROLLERN1:0:K%0:16301,0:XC%CR%2:YC%CB%2:1XC%,YC%:X9%XC%:Y9%YC%:1280:Z%10O>>>CURSOR LOOP HERE<<<.OT%3Y(CB%YC%)YSYFKOT%3YYI(10(YSYC%))_O22:13:Y;13)uOT%1XXC%XSXIOT%1XXI(10(XSXC%))O23:13:X;13);O1:1:150OA$" "1020OZ%1Z%10:980OZ%1:980PA$(27)ĉ::500PY9%YC%:X9%XC%3PA$"I"YC%YC%Z%:1150PPA$"M"YC%YC%Z%:1150mP$A$"J"XC%XC%Z%:1150P.A$"K"XC%XC%Z%:1150P8A$"V"İ1250PBA$"H"İ1220PLA$"D"İ1310PVA$"S"K%0Ĺ16302,0:K%1:A$""Q`A$"S"K%1Ĺ16301,0:K%0QjA$"Z"1350 Qt920/Q~1X9%,Y9%JQYC%CB%YC%CT%:1200eQYC%CT%YC%CB%:1200QXC%CR%XC%CL%:1200QXC%CL%XC%CR%Q1XC%,YC%:910Q HORIZONTAL LINE DRAWR1330:"HORIZONTAL LINE AT CURSOR ? (Y/N) ";:150:A$"Y"12809R1XC%,YC%:CL%,YC%CR%,YC%:1XC%,YC%:1280RR VERTICAL LINE DRAWR1330:"VERTICAL LINE AT CURSOR ? (Y/N) ";:150:A$"Y"1280R1XC%,YC%:XC%,CT%XC%,CB%:1XC%,YC%:1280R CURSOR SCREEN OUTPUTS::21:"(I,J,K,M,SPACE)(D,H,V)(S,Z)() "BS "Y POSITION = ":"X POSITION = ";::\S DRAW CURSOR ROUTINES1330:"DRAW A CURSOR ? (Y/N) ";:150:A$"Y"1280S(1XC%,YC%:1280S2K%0:16301,0::21:S< <> TF1330:"ZOOM MENU: (B,CNTL-Z)(S,)":1XC%,YC%:S%12:S%:2XC%,YC%=TP"SIZE FACTOR = ";S%;" "LTZ1:1:150TdA$(27)ĕ2XC%,YC%:1:0:1XC%,YC%:1280:920TnA$"B"1430Tx2XC%,YC%:S%S%1:S%1S%12TS%:2XC%,YC%T22:15:S%;" ":1370TA$(26)1480UA$"S"1370.UA$"S"K%0Ĺ16302,0:K%1:1370TUA$"S"K%1Ĺ16301,0:K%0:1370oU FIGURE CURSOR EDGES%U24:1:"ERASE GRAPH AND ZOOM IN ? (Y/N) ";:150:A$(27)A$"N"Ģ24:1:34);:1370UA$"Y"1480UY9%3S%1:X9%5S%1)VY1%YC%Y9%:Y2%YC%Y9%:X1%XC%X9%:X2%XC%X9%AVY1%CL%YYI:1550]VT%3Y(CB%Y1%)YSYFzVT%3YYI(10(YSY1%))VY2%CB%1580VT%3YF(CB%Y2%)YSYFV"T%3YFYI(10(YSY2%))V,X1%CL%XXI:1610V6T%1XX1%XSXIW@T%1XXI(10(XSX1%))$WJX2%CR%1640;WTT%1XFX2%XSXIYW^T%1XFXI(10(XSX2%))lWhXIX:YIY:660Wr MAIN PLOTTING LOOP ERRORW|S%(222):S%255870W:::(7);"ERROR IN MAIN PLOTTING LOOP"::"ERROR NUMBER = ";S% X"ERROR OCCURS WHEN X= ";XPX:"CONTINUE AT NEXT PIXEL ? (Y/N) ";:150:A$"Y"Ĺ16304,0:860gX MAIN MENU DRIVERX::3:8)">>> LOG PLOTTER <<<":12)"BY EDWARD MIENKO":8)"(C)1991 MINDCRAFT PUBL.":::14:"> MAIN MENU <":OY:" 1) SAVE GRAPH TO DISK":" 2) LOAD GRAPH":" 3) CATALOG":" 4) RETURN TO GRAPH":" 5) PLOT THE GRAPH"Y" 6) CHANGE EQUATIONS":" 7) CHANGE SLOT OR DRIVE":" 8) QUIT"Y18:1:">";:Q$:Q$:Q%(Q$):Q%1Q%81740YD$(4)YQ%4IT%0Ĺ16304,0:1XC%,YC%:900 ZQ%71870(Z CHANGE SLOT AND DRIVEwZ19:1:"ENTER SLOT NUMBER : ";::S$;::Q$:21:Q$:Q$(13)Q$S$:1820ZQ$(27)1710ZQ%(Q$):Q%48Q%56ĺ(7):1790[S$Q$:20:"ENTER DRIVE NUMBER : ";::D1$;:Q$:22::Q$:Q$(13)Q$D1$:1850&[&Q$(27)Ģ19:1:958:1790J[0Q%(Q$):Q%1Q%2ĺ(7):1820~[:D1$Q$:22:"O.K. ? (Y/N) ";:150:A$"Y"1790[D1710[NQ%22190[XQ%5260[bQ%31940[l CATALOG ROUTINE[v2510\:D$;("CATALOG",74((48896)76));",S";S$;",D";D1$:216,0:\:">>CATALOG OVER<<";:A$::}\Q%8Ģ20:1:"QUIT THE PROGRAM (Y/N) ? ";:150:A$;:A$"Y"Ā\Q%62320\Q%1T%01710\ SAVE GRAPH ROUTINE\:\:13:"SAVE THE GRAPH":13:"--------------"::15 -'S 9]5:"ENTER THE GRAPH NAME:":"";N$:NF1:(N$)01710Z]NC1(N$):NA((N$,NC,1))]NF((NA64NA91)(NA46)(NA47NA58NC1))NF1::(N$)11NF0(N$,1)"."ĺ"INVALID NAME":2000]:"INSERT DISK INTO SLOT ";S$;" ,DRIVE ";D1$:)^"O.K. TO SAVE ? (Y/N) ";:150:A$"Y"17108^1XC%,YC%L^ :BE$"TXT."N$W^2510|^ D$;"OPEN ";BE$;",S";S$;",D";D1$^*D$;"CLOSE ":D$;"DELETE ";BE$:D$;"OPEN ";BE$:D$;"WRITE ";BE$^4"DEL 230,240"'_>"170 XI=";XI;":XF = ";XF;":YI = ";YI;":YF = ";YF;":T%=";T%;":XS=";XS;":YS=";YS4_H230,240C_R"RUN 170"S_\D$;"CLOSE"|_fD$;"BSAVE GPH.";N$;",A$2000,L$2000"_p216,0_z1XC%,YC%:1710_ LOAD A GRAPH ROUTINE_::14:"LOAD A GRAPH":14:"------------"::13 -'S$`5:"INPUT THE GRAPH NAME, WITHOUT GPH OR TXT"B`"";N$:NF1:(N$)01710c`NC1(N$):NA((N$,NC,1))`NF((NA64NA91)(NA46)(NA47NA58NC1))NF1::(N$)11NF0(N$,1)"."ĺ"INVALID NAME":2210`:"INSERT DISK INTO SLOT ";S$;" DRIVE ";D1$3a:"O.K. TO LOAD ? (Y/N) ";:150::A$"Y"1710NaN$N$",S"S$",D"D1$Ya2510}a:16302,0:D$;"BLOAD GPH.";N$aD$;"EXEC TXT.";N$:216,0:16301,0a4135,(S$):4136,(D1$):a CHANGE FORMULA ROUTINEa :b :8);"CHANGE FORMULA ROUTINE";8):#b$ L180:2680 ȏ6 . ) ɟ"     Lb#b#ŠϠĠԠ  m# m# J Qڨ)̰}]! нȱ ̀𩠙 i  a Y n ɟg   VR6  .X ɛL " e ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`<YYZLYLYLY뿭` 8!@8` R%MNЩUMߩ  L 5   8 0 8  `0 / X?&G& e&&q&P&0`ŠӠֱ̭ԠŠҬî̠ӠĮʎ1&… )n&Dž )\%T&L()8= )J 81(&2(& m((ʎ1ζ&ζ&&3223 ')L&18&"m11 2H22h2舌&&12H)M0 h10200I20h2 C(`L%12 `_3("L  <8# ȱ)ɀ  );( ` (Xp< @;( )m;(;(.;(>( M;(i  ``) '(j21 & &!` )&&(i(&(( CBDFGE !)&$ m(,&& … m(ŅL7'JJJJ`Ϡ3(8`&h)hrȱȱȱȱ0]cȱeem+ȱ+ȱ++ȱ++ȱ+ )+ C* )L2)`Ly* U*L) ) L2) )L)8e` ,$`ee` `+ *+ *` * * *`hh8`8`+++`}+`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <x0HH1HH "hh+("i 0Ꮻ\Ꮸ0hh8(`hhh8k/<ʆ>-=?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@)@pvȱ@Hȱ@Ah@@cpe J) LL LJiB LJ) BxNhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJl`B f-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ( ߐ ߐ  0 HϭߍLпllllhh8` Q)T'P") ɺiL? )?      `l@Hȱ@IױHXATȱH ɯȩ׍̎5H)/@a)_ .0 :A[8@`,뎎׮Б` L ` @>O)I38 I`aם`K8`@Nȱ@O@ IiNȽבN)/ȩ/N`@[ WHJjjjhA C'KI؍0JHi 뎁`C8` @)0 3N0" K莭0 ⭪i` ]; 뮁ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNΨ0NN` G8`F@ 0 F LK8`6 7I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶67 8܅I m9IHHyHȘI Lܝ` @_@ g@Ю׍O)mיOʈ@mȱ@_ȱ@iklbJtKuO)5OI0ܢܽ eL'A* 7`aFG (CD Lz܅IN mAIH` pm mI0LM AOHJFKG 밳JK 밨C%܈@" T)Ii)܍N*܍A'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` AHO` 'Q'܅IHHOOЍO@`8 ` ͉% ΉQ8`܅I `L܍MN h8D`F` alH)HFȍJHGK $%܍&܍!ܢ8* J8` L ܝ:)I 'ܝ6`B8iNFLGM`B܅IH3H ( )ȱHΨ`Ί8AeHI SB60I ٙGٙEFJCʈ h猪`8m0`,0H hi PȽΨhٍ0GF8yאFG  $0 K01 E8`1ݺ00 ] 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`Ψ` W |G 4A)H ܝʈh٭0٭)ܝ٭*ܝ٥F٥G٭'ܝ٭(ܝ`)َ 8ʈ` 0ٝ)i `8`R ꍌvw zNمFمG < Ό0 FGL鮁0 ٭w٭vٽ8`H8`  ,v w 8` vw `ٽJJJJ`H͌hn)NjNjNjN. GH͌ z;٭ *Nۙ۰ڙک `Z8` G# ,`w .w .w .w8۰*Jv۩ ٰvw`JJJJ;i z묁͖ zٍ0  `H8` `ٍyٍiB0H0FG h0`FG `ϩBxED0C ް(`(8`ؑ@`M8`8@ؐʈI묂)v8vv L} LةC8`؍)@ i)v8vyJ ^ ؅F Ls) +%J(a ,FإGؐ.` ,JHIH IL3FHGI ҭJjHIHB>IؙJJ [: IL}HIHI`JKJK`FHIG ( Ȣ؝}؈JL)eKM`)` J vJ͛ $0 ΊJFȱJL8`GBJ R FإG`BH RFإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` zL)J  8"L zH  8 9ؙ` @ P8`K8`B8` H؈OJJJJحm) ) )Ю ЪG `F $ ᭔ع+ؠ 6H  Qh8` 䮁ٽ ٬ؠ@` ( H )8`)i п` H h)N$% LL L L 6 $pJ덟 )@።NJOK 6iKKΞΞ IJΟ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L6쬂8NNO 8 ؍JL`RΞʱLN1MOMEKP/MEKΞL9L-M O,p莝eNNO(`JNKOL 6/ $P L8 } [ؑJ`L@ȱ@ `@Nȱ@O`؝}}vIvؐ` hzؽ}؝v h ' h؝zv؈` ` H Rh)N@ 9; L  6$ )bJ ] ) H 6hL )  )حJjIwHIvH؊ PLKΞʱNLMO MЈMEKݸP%MEKΞL& O, PeNNO N(` C  7 2JvHIwHI؊ LI  ,` A Hv ع Hw ؙ؊ؠIhHIhH  iع `  عiعi` )؍0CGHFHBFGx ް(8hFhG`@4͔ L @Ai ׭2` . Q#ع؍0 ]讁)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝H0JK 방 LMJKFG 嬂؍b؍c؝d ؝_ vO) vO )حI͖ z`H@h`h``N8`  ) 9⬂Ȣ؝z@zݚ@ʈLN KIJHȢݚ h魚)Jn 8 δ ؍ ؍ `H8 ع)ꭱJJJJ Ȣ؝I؈ 6h(8H ; h(8Hh(`ؑ@`@ȱ@ ` B@8ZO h鮁ٍٍٍoHٍn8bhcOJJJJO)O@` %I -m) 0@O)N8` @LL =@ -ȹP8` i` ;ם0 -B ;)( ȹ`8m8m@8` G8`F Pm)@N8`O)@J -טyרםOO)׍O`a 밑 LȹL@ȅH@IL,0` G קּ= ]H.m)N 0 F`aO)@LP8` `  zHOCDC h`yٙ٭yٙ٩`H GB`FaG 3%&N    ܮ `J HH hh` 0 @ LJL t_̴Xܝ ݝ0̴ȩFG  0` ܅F݅G ` } tͬ 밽܅F݅G ` }) t$ L`L뮰HH hFhG܍ݍ 8 `FHGH  hGhF`ݹܙ݊`@Bɼ>K@J5 z9X(K zXXK تKo`V8`no` C on zI9XX`)HJJJh`OeNeO࿰ z9XАO`@ȭ@` ON `NJKO`HхhꭋILhH),ex8 (8` ԍ`@Ae Hk00YpmGIJK,-NOPQRSu' @   !"#$Ԡ͠(C)1983-89APPLELKL`BLL ެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LRP׽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ҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  ح o âXoύX1021ʆ ")i/ d+ M# L $0)0ei B = )n  Э` M )ЏL6  9 X [ ?  W" !# n. n'% n% n ɍ+Ɋɋɉɛݮʽ/ L6L[  Mȱ蝀` ̭  ( 9 X L $ ` & & & &e`{8i [`0{2H* Ah2  Mȱ  L `κºú` GAB0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKE ******* 8/08/86 *******;* ProDOS STARTUP *X* BY OWL *u(* COPYRIGHT (C) 1987 *2* BY MINDCRAFT PUBL. *<* CONCORD, MA 01742 *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:"52 DOMINO DR, CONCORD MA 01742"Y::17:5:"UNAUTHORIZED COPYING IS ILLEGAL"cD1030N ********** SET UP MENUXMEMM2:X$(0)" ":X$(1)"-->":b1:1:"Selection: : Instructions"l3:"----------------------------------------";)v5:20((A$)2):A$PI1ME2:61I:8:I". "MP$(I):y61(ME1):8:ME1". Catalog Disk"61ME:8:ME". Quit"21:"----------------------------------------"23:1:"Type number or use arrows, then ";:PX10:SX4:SL1/ ********** SELECT CHOICEQNSL: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ī380CSLSLZ(Z10):SLSLME(SLME)ME(SL1)[NOS:780:Z10700d800 ********** PRINT POINTER SUBROUTINE 61N:SX:X$(SLOS);: ********** SELECTION ROUTINE SL(ME1)İ860:600*SLMEİ900:SL1:780:680:42:1:" "::2:1:RC$(SL):g> ********** 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:-z ********** QUIT SELECTEDl22::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:C ********** ERROR HANDLING ROUTINEK:l(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. "A23:"Press to continue ";:958:49168,0:49152,128:600f ********** WAIT FOR KEYSTROKEsFLAG$""23:" for next page or for menu";:49168,0:49152,128(49152)155FLAG$"ESC"$. *********** ATTACH UPPER/LOWER CASE ROUTINE?8I013:ML:768I,ML:I:D$"PR#A$300":sB ********** DETACH UPPER/LOWER CASE HANDLER L(4);"PR#0":V ********** INSTALL INPUT-ANYTHING ROUTINE`X768839:A:X,A::j ********** INPUT-ANYTHING ROUTINE DATALt 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,0? ********** UPPER/LOWER CASE ROUTINE DATAy 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* 9 Xf :ۢ <=&>?BC , & o89L23 Lst L SUPER TRACE BY GARY ASH (C) 1991 MINDCRAFT PUBL. CORP. 3`ʐ0 ѐHАH` 89L Juv ?L'V 67 [$ B~ S {ݥq uيv_)!67 :۩= \ ک67   'VLH qL砐 :  :L&ɍ$L `  oL Lbst :L~f کܠ : ,խ{ Y0 SB~GȐϠA :L& : >?L& ڢ  $. \۩$ $ ڦ֩0 : >?>L& ڢ~ $. \۠$ S q ڦ۩0 : >?>~ : o) 9 Yՠ0L& : )` oL&>?B F(80!  Ae>e? A Ae>>e??8``>&?`BɍB`0 L]BC`B06 \Є8 ,0 W ,0 \ \ۤ W`L7`慱Ѕ`7kӎ ZCONDITION:TRAPPEDGOODBYELINE TO TRAP?VARIABLE NAME?VARIABLE (O)N OR O(F)F?TRAP TO REMOVE?TRAP BUFFERS FULL' ******************************M * SUPERTRACE.DEMO *u * COPYRIGHT(C) 1991 * ( * MINDCRAFT PUBL. CORP. *2 * CONCORD, MA 01742 *< ****************************** F:A0:A2$"This is a string." PAA1:A1$(A)A2$+ ZA10803 dB5P nBB5:I120::"B = "B_ xB100110 KEEP SUPERTRACE Name the binary file SYMBOL OFF Symbol listing off 65816 OFF Include these if using 65C02 OFF Orca/M-GS ORG $2000 MAIN START **************************************************************** * SUPERTRACE Source Code * by Gary Ash * Copyright 1991 by * MindCraft Publishing Corp. * Concord, MA 01742 * ORCA/M Macro Assembler **************************************************************** * TVAR GEQU $00 Trace variable flag TRAP GEQU $01 Trap number storage LASTLN GEQU $02 Last line exucuted CH GEQU $24 Cursor horizontal CV GEQU $25 Cursor vertical PROMPT GEQU $33 System's prompt char CSW GEQU $36 Char output vector KSW GEQU $38 Char input vector MOVST GEQU $3C Start of block MOVEND GEQU $3E End of block MOVDST GEQU $42 Destination HIMEM GEQU $73 Applesoft HIMEM CURLIN GEQU $75 Current line number FAC GEQU $9D Floating pnt accum DSCTMP GEQU $9D Keyword table pointer TXTPTR GEQU $B8 Program text pointer POINT GEQU $B1 CHRGET patch point REENTRY GEQU $B7 CHRGET re-entry point SPDBYTE GEQU $F1 Applesoft output speed STACKPTR GEQU $F8 Applesoft stack pointer TEMP GEQU $FA Temporary storage YREG GEQU $FF Save for (Y) INBUF GEQU $200 Keyboard input buffer WARMST GEQU $3D0 System warm start entry DOSHOOK GEQU $3EA Hookup DOS SOFTEV GEQU $3F2 Soft RESET vector VECTIN GEQU $BE32 BASIC.SYSTEM input vector GETBUF GEQU $BEF5 Allocate buffer space FREEBUF GEQU $BEF8 Free up buffer space INLIN GEQU $D52C Input a line of text FIXUP GEQU $D539 Fixup for tokenizer PARSE GEQU $D559 Tokenize input buffer KEYCHR GEQU $D72C Get a keyword char ADDON GEQU $D998 Add Y to text pointer PRINT GEQU $DAD5 PRINT command action CRDO GEQU $DAFB Print out a CR STROUT GEQU $DB3A Output a string OUTSP GEQU $DB57 Print out a space OUTDO GEQU $DB5C Print out a char FRMEVL GEQU $DD7B Evaluate expression INPRT GEQU $ED19 Print IN (current line) LINPRT GEQU $ED20 Print the line number PRDEC GEQU $ED24 Print a number X/A SETTXT GEQU $FB39 Set text screen mode TABV GEQU $FB5B Set a vertical tab SETPWRC GEQU $FB6F Set powerup checksum HOME GEQU $FC58 Clear the screen CLREOP GEQU $FC42 Clear to end of page WAIT GEQU $FCA8 Time delay routine RDKEY GEQU $FD0C Read a keypress KEYIN GEQU $FD1B Read the keyboard GETLIN GEQU $FD6F Get a line of text COUT1 GEQU $FDF0 Char output routine MOVE GEQU $FE2C Move a block of memory SETINV GEQU $FE80 Set INVERSE video SETNORM GEQU $FE84 Set NORMAL video mode SETKBD GEQU $FE89 Set normal KSW vector SETVID GEQU $FE93 Set 40-column video BELL GEQU $FF3A Sound the error bell RESTORE GEQU $FF3F Restore registers STORE GEQU $FF4A Store registers **************************************************************** * * Super TRACE installation routine * **************************************************************** * JSR SETTXT Set text screen JSR HOME Clear the screen LDA #CREDITS Setup so STROUT will LDY #>CREDITS JSR STROUT Print the credits LDX #SUPER Get the starting address LDA #>SUPER of the main program code STX MOVST Setup the start of block STA MOVST+1 to move parameter LDX #END Get the ending address LDA #>END of the main program STX MOVEND Setup the end of block STA MOVEND+1 to move parameter LDX #KBDIN Get the destination address LDA #>KBDIN of the main program code STX MOVDST Setup the destination STA MOVDST+1 address parameter LDY #$00 Zero Y for MOVE call JSR MOVE Move Super TRACE into place STY TVAR No trace variable JSR PATCH Patch CHRGET routine LDX #RESET Get the address of the LDA #>RESET Control RESET trap STX SOFTEV Setup the system STA SOFTEV+1 RESET vector JSR SETPWRC Validate the vector change LDX #KBDIN Get the address of the LDA #>KBDIN keyboard intecepter STX KSW Setup the zero page STA KSW+1 input vector address LDY $BF00 Check the DOS CPY #$4C $BF00=$4C if ProDOS BNE INSTALL1 No ProDOS, DOS 3.3 STX VECTIN Tell BASIC.SYSTEM where STA VECTIN+1 our input routine is JSR FREEBUF Freeup buffer space LDA #$0D Ask BASIC.SYSTEM for JSR GETBUF 13 memory pages JMP WARMST Exit to Applesoft INSTALL1 STX HIMEM Lower HIMEM to protect STA HIMEM+1 the program from BASIC JSR DOSHOOK Hookup DOS JMP WARMST CREDITS DC H'0D0A',C'SUPER TRACE BY GARY ASH',H'0D0A' DC C'(C) 1991 MINDCRAFT PUBL. CORP.',H'8D8A00' **************************************************************** * * SuperTRACE main program code * **************************************************************** * SUPER ANOP OBJ $8D00 Main program's origin **************************************************************** * * Keyboard intercepter routine * **************************************************************** * KBDIN ANOP STY TEMP Save Y register JSR KEYIN Read a keypress LDY PROMPT See if system is in CPY #']'+$80 Applesoft direct mode BEQ KBDIN2 Yep, check for command KBDIN1 LDY TEMP Restore Y register RTS Exit with keypress KBDIN2 LDY #$05 There are 6 commands KBDIN3 CMP CMDSTBL,Y This loop compares the BEQ KBDIN4 keypress against a table DEY of SUPERTRACE commands BPL KBDIN3 Check against whole table BMI KBDIN1 Keypress isn't a command KBDIN4 TYA This stuff computes the ASL A index into the command TAY handler address table LDA ADRTBL+1,Y Get the handler's address PHA and push it on the stack LDA ADRTBL,Y so we can use an RTS instr PHA to make the call (Fake a RTS return from subroutine) **************************************************************** * * Control RESET trapping routine * **************************************************************** * RESET ANOP JSR CRDO Makes screen prettier JSR PATCH Make sure CHRGET is patched LDX #KBDIN Get the address of the LDA #>KBDIN keyboard intercepter STX KSW Make sure we're hooked STA KSW+1 into the I/O loop JMP WARMST WARMST makes vector stick **************************************************************** * * Program execution monitor routine * **************************************************************** * MONIT JSR STORE Save the registers LDA TXTPTR+1 Is a program executing? CMP #$08 Yes, if TXTPTR=> then $08 BCS MONIT3 Program is running LDA CURLIN Update LASTLN variable STA LASTLN LDA CURLIN+1 STA LASTLN+1 MONIT1 INC TXTPTR Point TXTPTR to the BNE MONIT2 next program char INC TXTPTR+1 MONIT2 JSR RESTORE Restore entry registers JMP REENTRY Re-enter CHRGET code MONIT3 LDX #$00 Save the current MONIT4 LDA $00,X zero page values STA ZPAGE,X in their own buffer INX to prevent the BNE MONIT4 BASIC program from ! being bombed out LDY #39 Save bottom line of SAVLOOP LDA $7D0,Y the screen in a special STA LINEBUF,Y buffer DEY Screen column number-1 BPL SAVLOOP Done yet? No JSR UNPATCH Restore a normal CHRGET JSR SETNORM Set NORMAL screen mode LDA #$01 Applesoft outputing STA SPDBYTE at SPEED=255 LDA #COUT1 Disconnect DOS output STA CSW vector we can trace LDA #>COUT1 through a DOS command's STA CSW+1 execution LDA #23 Tab the cursor down JSR TABV down to line 23 LDA #$00 STA CH column 0 JSR CLREOP Clear the line ; ; Check conditional trap points ; CHKCON LDY #$05 Start with last trap CHKCON1 LDA CFLAG,Y Get trap's status flag BEQ CHKCON2 0=Trap not set, 1=Active trap STY TRAP Save trap number JSR CALCADR Calc. buffer address JSR FRMEVL Evaluate conditional LDA FAC And the results are... BNE CONTRAP the trap was sprung LDY TRAP False condition CHKCON2 DEY try next trap BPL CHKCON1 End of traps list? No ; ; Check unconditional trap points ; LDY #$05 Start with last trap CHKUNC LDA UNFLAG,Y Get trap's status BEQ CHKUNC1 Skip inactive traps LDA CURLIN Use a 16-bit comparison CMP TRAPLO,Y to see if we should be LDA CURLIN+1 stopping the program SBC TRAPHI,Y BEQ UNCTRAP Yes, trap this line CHKUNC1 DEY Trap number-1 BPL CHKUNC Done checking? No ; ; Check for a trace variable ; LDA TVAR Is there a variable? BEQ PRLINE No, check conditional LDA #CRSUP Install a CR suppressor STA CSW output intercept LDA #>CRSUP STA CSW+1 LDA #VARBUF Point AppleSoft's STA TXTPTR text pointer at LDY #>VARBUF variable storage STY TXTPTR+1 buffer JSR STROUT Print the name LDA #'=' Print an = JSR OUTDO JSR PRINT Print the value LDA #COUT1 Reconnect the COUT1 STA CSW output vector LDA #>COUT1 STA CSW+1 JSR INPRT Tell line number JSR PATCH Restore patch is CHRGET ; ; Print the line number ; PRLINE LDA TVAR Do we need to? BNE EXIT No, just exit JSR LINPRT Print the line # EXIT LDX #$12 Delay routine EXIT1 LDY #$FF EXIT2 DEY BNE EXIT2 DEX BPL EXIT1 LDY #39 Restore the bottom line RESLOOP LDA LINEBUF,Y STA $7D0,Y DEY Loop counter-1 BPL RESLOOP Done yet? No LDX #$00 Restore the zero EXIT4 LDA ZPAGE,X page values STA $00,X INX BNE EXIT4 JMP MONIT1 Exit the monitor ; ; Do a conditional trap ; CONTRAP JSR PRNTCON Print the condition JMP LEAVE and exit to AppleSoft ; ; Do an unconditional trap ; UNCTRAP LDA #TRAPPED Print out the LDY #>TRAPPED TRAPPED message JSR STROUT LEAVE JSR INPRT Tell line # of trap JSR BELL Sound the error tone JMP RESET Exit to Applesoft ; ; CR suppressor routine ; CRSUP CMP #$8D CR going out? BEQ CRSUP2 Yes STY YREG Save (Y) LDY CH Check cursor position CPY #30 Column 30 yet? BCS CRSUP1 Yes, truncate the output LDY YREG Restore (Y) JMP COUT1 Output anything but CR CRSUP1 LDY YREG JSR SETINV Set inverse video CRSUP2 RTS Igore the CR **************************************************************** * * Disconnect Super TRACE * **************************************************************** * DISCON JSR UNPATCH Restore CHRGET code JSR SETKBD Unhook input routine LDX WARMST+1 This stuff will LDA WARMST+2 disconnect the STX SOFTEV Control RESET STA SOFTEV+1 trap routine JSR SETPWRC Validate vector change LDA $BF00 Check for ProDOS again CMP #$4C (INSTALL has comments) BNE DISCON1 JSR FREEBUF Restore HIMEM JMP DISCON2 Go wave good-bye DISCON1 LDA #$00 Restore the normal STA HIMEM (boot up) HIMEM LDA #$96 address. (38400) STA HIMEM+1 DISCON2 LDA #BYE Setup to print out LDY #>BYE "GOODBYE" JSR STROUT Print it JMP WARMST Exit **************************************************************** * * Set a conditional trap point * **************************************************************** * SETCON LDY #$00 This loop will try to SETCON1 LDA CFLAG,Y find an open conditional BEQ SETCON2 trap buffer -- Found INY Check next trap CPY #$06 Checked all traps? BNE SETCON1 Nope, not yet BEQ FULL Yep, buffers are full SETCON2 STY TRAP Save the trap number SETCON3 JSR CRDO Neaten things up LDA #CONDIT Ask the user for the LDY #>CONDIT trap condition JSR STROUT Print the string JSR INLIN Get the input LDA INBUF Check for null input BEQ DONE JSR TXTBUF Position text pointer JSR PARSE Tokenize the input CPY #19+5 Condition too long? BCS SETCON3 Yep, re-prompt user LDY #$00 This loop check for STY TEMP TEMP is token flag SETCON4 LDA INBUF,Y validate condition BEQ SETCON6 entry. Invalidate BMI SETCON9 Token found SETCON5 INY Next char BNE SETCON4 Always taken SETCON6 LDA TEMP TEMP is token found flag BEQ SETCON3 Invalidate entry made JSR CALCADR Calc. buffer address LDY #$00 This loop stores the SETCON7 LDA INBUF,Y in its buffer area STA (MOVDST),Y BEQ SETCON8 $00 when done storing INY Kick up index BNE SETCON7 Always taken SETCON8 LDY TRAP Get trap number LDA #$01 Mark trap as "USED" STA CFLAG,Y BNE DONE We're all done SETCON9 CMP #$C2 FN token is valid BEQ SETCON10 Go set flag CMP #$C6 NOT token is valid BEQ SETCON10 Set the token flag CMP #$C8 This stuff will handle BCC SETCON3 a block of validate tokens SETCON10 LDA #$01 Set token flag STA TEMP BNE SETCON5 Continue checking entry **************************************************************** * * Set an unconditional trap point * **************************************************************** * SETUNC LDY #$00 This loop will try to SETUNC1 LDA UNFLAG,Y find an open unconditional BEQ SETUNC2 trap buffer -- Found INY Check next trap CPY #$06 Checked all traps? BNE SETUNC1 Nope, not yet FULL LDA #TBFULL Setup to print out LDY #>TBFULL "TRAP BUFFERS FULL" JSR STROUT Print the message JMP RESET Exit SETUNC2 STY TRAP Save the trap number SETUNC3 LDA #LINE Setup to print out LDY #>LINE "LINE TO TRAP?" JSR STROUT Print the prompt JSR CONVERT Get and convert input BCS SETUNC3 Carry set if input error LDY TRAP Restore trap number LDA MOVEND Save the line number STA TRAPLO,Y in the unconditional LDA MOVEND+1 trap buffer STA TRAPHI,Y LDA #$01 Mark trap as "USED" STA UNFLAG,Y DONE JMP RESET Exit via RESET handler **************************************************************** * * Remove unconditional trap * **************************************************************** * REMOVUN JSR CRDO Print a CR LDX #$00 This loop will print REMOVUN1 LDA UNFLAG,X out all the active BEQ REMOVUN2 traps. Skip--inactive STX TRAP Save trap number LDA #$00 Setup code -- PRDEC JSR PRDEC Print trap number LDA #'.' Print out a '.' JSR OUTDO LDA #$05 Set an HTAB of 6 STA CH LDY TRAP Get trap number LDX TRAPLO,Y Get trap value LDA TRAPHI,Y JSR PRDEC Print the trap value JSR CRDO Print a CR LDX TRAP Get trap number REMOVUN2 INX Bump it up CPX #$06 Done printing? BNE REMOVUN1 Branch if not REMOVUN3 LDA #REMOVE Ask the user for LDY #>REMOVE number of trap JSR STROUT to be removed JSR CONVERT Get/convert input BCS REMOVUN3 Conversion error LDA MOVEND Check for a validate CMP #$06 input range (0-6) LDA MOVEND+1 with a 16-bit compare SBC #$00 BCS REMOVUN3 Bad input made LDX MOVEND Clear the trap LDA #$00 $00 is UNFLAG means STA UNFLAG,X trap is inactive DONE2 JMP RESET Exit, we're done **************************************************************** * * Remove condional trap * **************************************************************** * REMOVCN JSR CRDO Print a CR LDX #$00 This loop will print REMOVCN1 LDA CFLAG,X out all the active BEQ REMOVCN2 traps. Skip--inactive STX TRAP Save trap number LDA #$00 Setup code -- PRDEC JSR PRDEC Print trap number LDA #'.' Print out a '.' JSR OUTDO LDY #$05 Set an HTAB of 6 STY CH JSR CALCADR Calc. buffer address JSR PRNTCON Print the condition JSR CRDO Print a CR LDX TRAP Get trap number REMOVCN2 INX Bump it up CPX #$06 Done printing? BNE REMOVCN1 Branch if not REMOVCN3 LDA #REMOVE Ask the user for LDY #>REMOVE number of trap JSR STROUT to be removed JSR CONVERT Get/convert input BCS REMOVCN3 Conversion error LDA MOVEND Check for a validate CMP #$06 input range (0-6) LDA MOVEND+1 with a 16-bit compare SBC #$00 BCS REMOVCN3 Bad input made LDX MOVEND Clear the trap LDA #$00 $00 is CFLAG means STA CFLAG,X trap is inactive BEQ DONE2 Exit, we're done **************************************************************** * * Enter a trace variable * **************************************************************** * TRACE LDA #VARNAM Ask for the trace LDY #>VARNAM variable name JSR STROUT Print the prompt JSR GETLIN Get the input CPX #$07 Is name too big? BCS TRACE Yep, re-prompt CPX #$00 Null entry made? BEQ TRACE6 Branch if yes JSR FIXUP Fixup for parser JSR TXTBUF Position text pointer JSR PARSE Parse the input LDY #$00 This loop checks to TRACE1 LDA INBUF,Y be sure the user BEQ TRACE2 didn't type in a BMI TRACE invalidate name INY Bump the index BNE TRACE1 Always taken TRACE2 LDY #$00 This loop copies TRACE3 LDA INBUF,Y the name into STA VARBUF,Y its buffer BEQ TRACE4 $00 when done INY Bump the index BNE TRACE3 Always taken TRACE4 LDA #$01 Trace variable on TRACE5 STA TVAR JMP RESET Exit TRACE6 LDA #ONOFFTXT Ask user: LDY #>ONOFFTXT "VARIABLE (O)N OR O(F)F?" JSR STROUT Print prompt JSR RDKEY Get input AND #$DF Adjust the case CMP #'O'+$80 'O' means on BEQ TRACE4 CMP #'F'+$80 'F' means oFf BNE TRACE6 Branch if bad input LDA #$00 Variable off BEQ TRACE5 **************************************************************** * * Subroutines begin here * **************************************************************** * ; ; Position text pointer to input buffer ; TXTBUF LDA #INBUF STA TXTPTR LDA #>INBUF STA TXTPTR+1 RTS ; ; Convert a decimal number ; ; This routine was based on ; DOS 3.3 base converison ; routine - Disassembled ; in Nibble vol 4/Num 5 ; CONVERT JSR GETLIN Get the input CPX #$00 Null input made? BNE CONVERT0 Nope, continue JMP RESET Exit via RESET CONVERT0 LDX #$00 (X) is now $00 STX MOVEND Clear the number hold STX MOVEND+1 STX MOVDST Clear INBUF index CONVERT1 JSR CONVERT5 Get a digit from INBUF BEQ CONVERT3 Exit if zero bit on SEC Do validity check SBC #$B0 ASCII to hex digit BMI CONVERT2 Error if digit<0 CMP #$0A Digit greater then 9? BCS CONVERT2 Branch if error JSR CONVERT4 Digit * 2 ADC MOVEND dd digit to MOVEND TAX X=MOVEND+1 + digit LDA #$00 Do high byte of addition ADC MOVEND+1 Handles any carries TAY Y=MOVEND+1 * 2 JSR CONVERT4 MOVEND+1 * 4 JSR CONVERT4 MOVEND+1 * 8 TXA ADC MOVEND Add up MOVEND * 2 + digit STA MOVEND TYA ADC MOVEND+1 Add MOVEND+1 * 2 STA MOVEND+1 BCC CONVERT1 Continue conversion CONVERT2 SEC Set carry flags an error RTS Exit if conversion error CONVERT3 CLC No error in conversion RTS Exit cleanly CONVERT4 ASL MOVEND MOVEND * 2 (16-bit) ROL MOVEND+1 RTS CONVERT5 LDX MOVDST Get input buffer index LDA INBUF,X Get a digit CMP #$8D Check for CR BEQ CONVERT3 Exit if CR INX Bump line index STX MOVDST Store the index RTS Exit CONVERT ; ; Calcualate the address of a ; conditional trap buffer ; CALCADR LDA #CONBUF Point the text pointer STA TXTPTR at the start of the LDA #>CONBUF conditional buffers STA TXTPTR+1 LDX TRAP Get trap number in X CALCADR1 DEX Trap number - 1 BMI CALCADR2 Branch when done LDY #20 Add 20 to address JSR ADDON (Stored in TXTPTR) JMP CALCADR1 Go to top of loop CALCADR2 LDA TXTPTR Save the address STA MOVDST also in MOVDST LDA TXTPTR+1 STA MOVDST+1 RTS ; ; Print a conditional ; ; Based on the Applesoft ; LIST command handler - ; Disassembled in Nibble ; vol 4/num 4 ; PRNTCON LDY #$00 Zero the data index PRNTCON1 LDA (MOVDST),Y Get byte from condition BMI PRNTCON3 Branch if a token value BEQ PRNTCON9 Exit on $00 byte JSR OUTDO Print ASCII char PRNTCON2 INY Bump the data index BNE PRNTCON1 Always taken PRNTCON3 STY TEMP Save Y's value LDY #$D0 Setup the keyword STY DSCTMP table pointer to DEY $CFD0. Y=$CF STY DSCTMP+1 LDY #$FF Set char index SEC Trim token to keyword SBC #$7F number (1=END...127=MID$) TAX Move number to X PRNTCON4 DEX Table number - 1 BEQ PRNTCON6 Branch when found PRNTCON5 JSR KEYCHR This loop will skip BPL PRNTCON5 the unwanted keywords BMI PRNTCON4 Last char of word is ASCII PRNTCON6 JSR OUTSP Print a leading space PRNTCON7 JSR KEYCHR Get keyword char BMI PRNTCON8 Branch if last letter JSR OUTDO Print non final letter BNE PRNTCON7 Continue printing word PRNTCON8 JSR OUTDO Print last letter LDY TEMP Restore index JSR OUTSP Print a trailing space BNE PRNTCON2 Continue with line PRNTCON9 RTS Exit ; ; Patch the CHRGET routine ; PATCH ENTRY Define the entry point LDA #$4C Put a JMP in the STA POINT CHRGET subroutine LDA #MONIT the execution monitor STA POINT+1 will be called by LDA #>MONIT Applesoft STA POINT+2 RTS ; ; Unpatch the CHRGET routine ; UNPATCH LDA #$E6 $E6 is INC opcode STA POINT Put it back in CHRGET LDA #TXTPTR Operand of INC opcode STA POINT+1 LDA #$D0 $D0 is BNE opcode STA POINT+2 RTS ; ; Program data storage area ; ; ; Super TRACE commands table ; ^D^O^N CMDSTBL DC H'848F8E' ; ^R^S^T DC H'929394' ; ; Command handler jump table ; ADRTBL DC A'DISCON-1' DC A'SETCON-1' DC A'SETUNC-1' DC A'REMOVUN-1' DC A'REMOVCN-1' DC A'TRACE-1' ; ; Program's textual data ; CONDIT DC C'CONDITION:',H'00' TRAPPED DC C'TRAPPED',H'00' BYE DC H'8D',C'GOODBYE',H'8D00' LINE DC H'8D',C'LINE TO TRAP?',H'00' VARNAM DC H'8D',C'VARIABLE NAME?',H'00' ONOFFTXT DC C'VARIABLE (O)N OR O(F)F?',H'00' REMOVE DC H'8D',C'TRAP TO REMOVE?',H'00' TBFULL DC H'8D',C'TRAP BUFFERS FULL',H'878D00' ; ; Program's data buffers ; ; LINEBUF DS 40 Screen line buffer CFLAG DS 6 Status of conditional traps UNFLAG DS 6 Status of unconditional traps TRAPLO DS 6 Trapped line number low byte TRAPHI DS 6 Trapped line number high byte VARBUF DS 9 Trace variable name storage CONBUF DS 20*6 Conditional trap buffer ZPAGE DS 256 Zero page storage buffer OBJEND End of main program END ANOP MAIN END End of source code