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(*+'CHECKIT 6/ ;CLOCKNUM$, `, GSTIME%525(GSTIME.S&15INPUT.ANYTHING*X4MAKE.TABLE+! ! MINI.DRAW,55MOIRE-]66,NAME.CHANGER.;P,NIBBLEWRITER=! 'NIBMENUO /6 /6 &NW.BINX 5$f5$(NW.BIN.S^-W' 5#&PRODOS }<)SPEEDDRAW" i@" +SPEEDDRAW.0 i@ -SPEEDDRAW.0.S#  .SPEEDDRAW.DEMO( ( -START.PGM.ASM h] ΰ--START.RAW.ASM$\ g9'STARTUP ®3s,.STARTUP.SCREEN®09`®4UNJUMBLERG6WHITESAUCEhp LG 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 !"#. ********** NIBBLE PRD DISK **********[ * CHECKIT * * COPYRIGHT 1988 BY MICROSPARC, INC.*( * CONCORD, MA 01742 *2 ************************************* <:::"CHECKIT":"COPYRIGHT 1988 BY MICROSPARC, INC."& F90R 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)4096/ n6:"ARE YOU ENTERING A HEXADECIMAL":"FILE?";:A$:16368,0:A$Z xA$"N"A$(110)İ370:34218,128:210v A$"Y"A$(121)110 768,1:10:958:"WHAT IS THE STARTING ADDRESS OF THE":"FILE (IN HEX)";:H$:290:AH( A736A39424ĺ:"INVALID ADDRESS. PLEASE DOUBLE-CHECK":"AND RE-ENTER":350:140r 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..."n 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:2508 (4);"IN#A$8500":250b (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"  O"H0:L(H$):L1L4300:I1L:D((H$,I,1)):HHH(LI)(D48(D58D47)55(D64D71)):U,j6 $1600 VERSION@I0377:ML:5632I,ML:I:C5632JI018:ML:CML,(CML)111:T^21:"PRESS RETURN TO CONTINUE ";:CH$:CH$:16368,0: h $8500 VERSION+rI0377:ML:34048I,ML:I1| 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,169U 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,1334 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,32e 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,16, 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 %3@LYfs$1-]XN??,h( ?^Xr-] _ 6-]XX`-M??? $$g]X?';.6M!$M6- $-] $@166.-] [(m@166- -% ?6](5X l݅HHH H0"8 4 `'() ì ͠Š Ӻ Ҡų ōҠĶà ǍҠųŹ ōҠ ōҠ ҍƠ ҍŠ ΍ؠű؍ԠǠōà ׍ ӍŠҠ͠ ̍ҠҠ ōҠҠ ǿҠ ҍ٠ҫˠ ˍ ̍ƍƍ̠à ōōР čؠ ԍؠư ΍̠ؠ ̍à ύŠ ōؠ ō Ơ Ӎ ƍ ƫҠҠ ōҠҠ ōӍˠ Ű`ɄL l݅Y ,թ ڢY` ** MAKE.TABLE/* BY JIM SAVAGEH(* COPYRIGHT(C) 1988`2* MICROSPARC, INC.y<* CONCORD, MA 01742F*PD$(4):P3.1416512ZD$"BLOAD SPEEDDRAW.0"dI0245:SN(IP)nSN((SN256).5):17267I,SNx D$"BSAVE SPEEDDRAW,A$4069,L$414":C:I039:0,39I:I:J01:I01:A$:A(A$):CC1(A67):CC16(C16):XX1(A75):XX1(A74):YY1(A77):YY1(A73):XX40(X40):YY40(Y40):XX40(X1):YY40(Y1):FF(FC)(A68):F D,E:FX,Y):DX:EY:C:X,Y:I1(A27A72A86A83):I:GX,0):GG(GC)(A86):K39(A86):G:0,KX:G0,Y):GG(GC)(A72):K39(A72):G:0,KY:J(A27A83):FC:J:A836[:Z16:C0191:(AZ)1:0,0279,C:AA::B27901:(AZ)1:0,0B,191:AA::/0123456789:;<P **********************=P * NAME.CHANGER *[P * BY KENN SCRIBNER *yP( * COPYRIGHT (C) 1988 *P2 * BY MICROSPARC, INC.*P< * CONCORD, MA 01742 *PF **********************PPPZ Qd(104)80Ĺ103,1:104,80:20480,0:(4);"RUN NAME.CHANGER"Qn(49149)0ė:(7):"YOU MUST RUN THIS PROGRAM ":"USING BASIC.SYSTEM VERSION 1.1 ":"OR GREATER.":RxDR$"1":DEVNUM(48944):DEVNUM128DEVNUMDEVNUM128:DR$"2": >>> DEVNUM, $BF30, IS SLOT/DRIVE OF LAST DISK ACCESS <<<'RSL$((DEVNUM16)):D$(4)=RD$;"PREFIX":VN$HR1180WRD$;"PR#3"R:17)"STARTUP NAME CHANGER (C)1988 MICROSPARC, INC.":I180:"-";:I:34,2S:::5);"THIS PROGRAM ENABLES YOU TO MODIFY BASIC.SYSTEM TO AUTOMATICALLY RUN A"S:"GREETING PROGRAM NAMED OTHER THAN 'STARTUP'. IT WILL WORK WITH A COPY OF"::"BASIC.SYSTEM USING EITHER THIS OR ANOTHER PREFIX. THE CURRENT PREFIX IS:"S:VN$;" , FOUND ON THE DISK RESIDING IN SLOT ";SL$;", DRIVE ";DR$;"."5T:5);"WOULD YOU LIKE TO MODIFY YOUR COPY OF BASIC.SYSTEM FROM:"T:25);"(T)HIS DISK AND PREFIX"::25);"(A)NOTHER DISK OR PREFIX"::25);"(Q)UIT PROGRAM"T:5);"YOUR CHOICE (T, A, OR Q)? ";T16368,0:A$TA$"T"A$"t"PN$"BASIC.SYSTEM":610UA$"Q"A$"q"ī990.UA$"A"A$"a"ī240U:::5)"YOU MAY SELECT THE LOCATION FROM WHERE BASIC.SYSTEM WILL BE LOADED"U":"AND MODIFIED BY PREFIX OR BY SLOT AND DRIVE..."!V,:25);"(N)EW PREFIX"::25);"(S)LOT AND DRIVE"::25);"(RETURN) ALONE TO EXIT TO PREVIOUS MENU"OV6:5);"YOUR CHOICE (N, S, OR RETURN)? ";aV@16368,0:A$tVJA$(13)ī180VTA$"N"A$"n"ī530V^A$"S"A$"s"ī3206Wh:::5);"PLEASE SELECT THE PROPER SLOT AND DRIVE FOR THE DISK CONTAINING"::"BASIC.SYSTEM (RETURN ALONE WILL EXIT TO PREVIOUS MENU)..."UWr:25);"SLOT (1 - 7)? ";gW|16368,0:A$zWA$(13)ī280WA$"1"A$"7"Ė(40):958:380WA$:SL$A$W:25);"DRIVE (1 OR 2)? ";W16368,0:A$WA$(13)ī280XA$"1"A$"2"Ė(42):958:430(XA$:DR$A$BXSD$",S"SL$",D"DR$MX1180bXD$;"PREFIX";SD$sXD$;"PREFIX"XVN$:PN$VN$"BASIC.SYSTEM"X600JY:::5);"PLEASE TYPE THE NEW, COMPLETE PREFIX WHERE THE COPY OF BASIC.SYSTEM CAN BE"::"FOUND. THE OLD PREFIX HAS BEEN DISPLAYED FOR REFERENCE AND/OR MODIFICATION."Y:"(RETURN ALONE EXITS TO PREVIOUS MENU)..."::" >";VN$;:(3):1000Y&TP$" "ī280Y0(TP$,1)"/"TP$"/"TP$Y:(TP$,1)"/"TP$TP$"/"ZDVN$TP$:PN$TP$"BASIC.SYSTEM"ZN1210(ZXD$;"VERIFY ";PN$^Zb:(12):(24):"LOADING BASIC.SYSTEM INTO MEMORY"ZlD$;"BLOAD ";PN$;",A$2000,TSYS"Zv(8192)76(8195)238(8196)238ī650h[:::5);"THE VERSION OF BASIC.SYSTEM YOU'RE USING DOESN'T ADHERE TO THE 'AUTO RUN'"::"PROTOCOL THIS PROGRAM IS DESIGNED TO MODIFY. PRESS RETURN TO EXIT...";:16368,0:A$:990[N1$"":N2$"":TP$""\:::"THE OLD GREETING PROGRAM NAME (";(8198);" CHAR'S, FOUND IN PREFIX ";VN$;"):":X81998199((8198)1):N1$N1$((X)):::" >";N1$\:5);"THE NEW GREETING PROGRAM'S NAME MUST BE LESS THAN 64 CHARACTERS LONG AND"::"CONFORM TO PRODOS NAMING CONVENTIONS. PLEASE TYPE IN THE NEW GREETING"]:"PROGRAM'S NAME (THE PREFIX SHOWN WILL BE APPENDED TO THE FILENAME FOR YOU,"H]:"AND RETURN ALONE EXITS TO THE INITIAL PROGRAM MENU)..."]::"THE NEW GREETING PROGRAM'S NAME?"::" >";VN$;:1000]TP$" "ī180](TP$,12)"BASIC.SYSTEM"ī760](TP$,6)"PRODOS"ī760](TP$,3)"P16"ī760 ^(TP$,2)"P8"ī780n^(7)::(21):(5)::"***ERROR***";::" YOU CAN'T NAME YOUR NEW GREETING PROGRAM ";TP$;"..."^:18);"PRESS RETURN TO RESUME PROGRAM OPERATION...";:16368,0:A$:650^ 1240^D$;"VERIFY ";N2$_ (N2$,((VN$)))VN$N2$VN$N2$K_*:::"NEW GREETING PROGRAM NAME (";(N2$);" CHAR'S):"::" >";N2$_4::5)"THIS WILL BE THE NEW GREETING PROGRAM'S NAME. IS THIS NAME CORRECT?"#`>:25);"(Y)ES, THE NAME IS CORRECT"::25);"(N)O, THE NAME IS NOT CORRECT"::25);"(RETURN) ALONE EXITS TO THE PREVIOUS MENU"S`H:5);"YOUR CHOICE (Y, N, OR RETURN)? ";e`R16368,0:A$x`\A$(13)ī650`fA$"N"A$"n"ī650`pA$"Y"A$"y"ī850`zL(N2$):X1L`A((N2$,X,1)):8198X,A::8198,LaX8199L8262:X,0:.a >>> NOW SAVE MODIFIED BASIC.SYSTEM <<<Ya:(12):(34):"NOW SAVING CHANGES..."da1250|a(4);"UNLOCK ";PN$a(4);"BSAVE ";PN$;",A$2000,L$2800,TSYS"a(4);"LOCK ";PN$b:(12):(17):"CHANGES SAVED TO DISK, PRESS RETURN TO EXIT...";:16368,0:A$$b34,0::23:>bCH3:CV(37):"";TP$b(TP$)64ī1120: >>> TEST INPUT STRING FOR PRODOS NAMING CONVENTIONS <<<bBL$"":N2$""bTP$""TP$" "::: >>>SPACE INDICATES RETURN ONLY SELECTED <<<bX1(TP$)c(TP$,X,1)"/"BL$"/":11509c$(TP$,X,1)"."BL$".":1150c.((TP$,X,1))97((TP$,X,1))122BL$(((TP$,X,1))32):1150c8((TP$,X,1))65((TP$,X,1))90BL$(TP$,X,1):1150cB((TP$,X,1))48((TP$,X,1))57ī1140XdL(7)::(21):(8)::"***ERROR***";::" INVALID PRODOS CHARACTERS INPUT, PLEASE RE-ENTER...":1130dV(7)::(21):(3)::"***ERROR***";::" FIRST CHARACTER OF NAME CAN'T BE A NUMBER, PLEASE RE-ENTER...":1130&e`(7)::(21):(13)::"***ERROR***";::" VOLUME NAME TOO LONG, PLEASE RE-ENTER..."ej:18);"PRESS RETURN TO RESUME PROGRAM OPERATION...";:16368,0:A$::21:958:(CV)::(CH):"";TP$:1010etBL$(TP$,X,1)e~N2$N2$BL$:e(N2$,1)"0"(N2$,1)"9"ī1110etf(222)3ĺ(7):(21):(1)::"***ERROR***";::" THERE'S NO DISK DRIVE CONNECTED TO THAT SLOT, PLEASE RE-ENTER...":1290:3288:360f(222)6ĺ(7):(21):(4)::"***ERROR***";::" BASIC.SYSTEM NOT FOUND WHERE SPECIFIED, PLEASE RE-ENTER...":1290:3288:180g(7):(21)::"***ERROR***";::" UNKNOWN PRODOS I/O ERROR, NUMBER ";((222));", PLEASE CORRECT AND RE-TRY...":1290:3288:360h(222)6ĺ(7):(21):(4)::"***ERROR***";::" BASIC.SYSTEM NOT FOUND WHERE SPECIFIED, PLEASE RE-ENTER...":1290:3288:180h(222)16ĺ(7):(21):(2)::"***ERROR***";::" FIRST CHARACTER AFTER '/' MUST BE A LETTER, PLEASE RE-ENTER...":3288:1130:550i(7):(21)::"***ERROR***";::" UNKNOWN PRODOS I/O ERROR, NUMBER ";((222));", PLEASE CORRECT AND RE-TRY...":1290:3288:530i(222)6Ģ(21):(13)::"***NOTE***";::" THAT FILE DOES NOT YET EXIST ON THAT DISK...":1290:3288:800 j(222)4ĺ(7):(21):(6)::"***ERROR***";::" DISK IS WRITE PROTECTED, PLEASE DE-PROTECT AND RE-TRY...":1290:3288:930kj(222)6ĺ(7):(21):(5)::"***ERROR***";::" PLEASE RE-INSERT ";VN$:1290:3288:930j(222)16ĺ(7):(21):(2)::"***ERROR***";::" FIRST CHARACTER AFTER '/' MUST BE A LETTER, PLEASE RE-ENTER...":3288:1130:710}k(7):(21)::"***ERROR***";::" UNKNOWN PRODOS I/O ERROR, NUMBER ";((222));", PLEASE CORRECT AND RE-TRY...":1290:3288:930k :18);"PRESS RETURN TO RESUME PROGRAM OPERATION...";:16368,0:A$::(21):958:>?@ABCDEFGHIJKLMN  *************************?* NIBBLEWRITER *^* ------------ *}* BY ROBERT T. YUILLE *(* COPYRIGHT (C) 1988 *2* BY MICROSPARC, INC. *<* CONCORD, MA 01742 *F************************* P:(21) Z SET HIMEMC dPRODOS(48896)76:PRODOSģ24832:170U n FOR PRODOSs x768,32:769,248:770,190 771,169:772,53:773,32 774,245:775,190:776,96 768 INITIALIZATION LM$"1.0":RM$"1.0":TM$"1.0":BM$"1.0" LM8:RM66:TM6:BM603 30,0:233,0: NEWF & PRNTFp D$(4):B$(7):E$(27):R$(13):PRODOSD$(13)(4) M1$"MARGIN VALUE EXCEEDS MAXIMUM" M2$"MARGIN VALUE IS LESS THAN MINIMUM" M3$"CHAR CANNOT BE USED IN THIS INPUT" FL$"WP.40.O"% FADDR26124: FILENAME ($660C)L ST6:DR1: DEFAULT SLOT AND DRIVEZ D$"PR#0"` :{ " LOAD WP OBJECT FILE ,: 6LK1:3130 @D$"BLOAD NW.BIN" J216,0: RESET ERROR FLAG T: ^ INITIALIZE & READ MENU DATA h:# rMITEMS:MENU$(9):J0MITEMS:MENU$(J):F |X$(1):X$(0)" ":X$(1)"-->"L :]  MAIN MENUc : ::3040:216,0:3130 PX38:SX4:SESE(SE0):MXMITEMS:2960:Z20ĺB$:420 SE480,560,670,890,940,990,1480,2750,1740 :  START NEW DOCUMENT :. (30)2İ2660:ESCF1420D 1830:ESCF1420N 30,0j 26112: ENTRY ($6600)s 420y :  LOAD NEW DOCUMENT &: 0(30)2İ2660:ESCF1420 :1830:ESCF1420 D1:20:"LOADING "FL$ NLK3:3130XD$"BLOAD "FL$",S"ST",D"DR!b216,0Fl30,1: SET NEWF FOR LOADED FILEOv510U:r SAVE CURRENT DOCUMENTx::(30)2Ģ5:"THERE IS NO CURRENT DOCUMENT":10:"PRESS RETURN FOR MAIN MENU: ";:A$:420EF(252)256(253): EFL($FC) & EFH($FD)LNEF28672"800BD$"VERIFY "FL$",S"ST",D"DRk:5:"FILE: '"FL$"' ALREADY EXISTS"13:"PRESS 'Y' TO REPLACE EXISTING FILE"::"PRESS 'N' TO RENAME FILE":10:"DO YOU WANT TO REPLACE":"THE EXISTING FILE? (Y/N) ";A$A$"N"A$"n"Ĺ216,0:8404A$"Y"A$"y"ī740O1:20:"DELETING "FL$_ LK2:3130D$"DELETE "FL$",S"ST",D"DR 1:21:"SAVING "FL$*LK2:31304D$"BSAVE "FL$",A$7000,L"LN",S"ST",D"DR>216,0:420H1830:ESCF1420R670 \:(f RENAME CURRENT DOCUMENT.p:Dz1830:ESCF1420M510S:y CONTINUE WITH CURRENT DOCUMENT:(30)2670510: PRINTER ROUTINE:(30)2670':2:"MARGIN VALUES ARE AS FOLLOWS:"::"LM= "LM$" RM= "RM$" TM= "TM$" BM= "BM$Y10:"DO YOU WANT TO CHANGE MARGINS (Y/N)? ";aA$yA$"Y"A$"y"1060A$"N"A$"n"10201370$M$"LM":MA$"7.0":MI$"0.5".2330:ESCF14208N(N$)BN7MSG$M1$:2250:1060LN.5MSG$M2$:2250:1060*VLMN1025`LM$N$UjM$"RM":MA$"7.0":MI$"0.5"kt2330:ESCF1420w~N(N$)N7MSG$M1$:2250:1130N.5MSG$M2$:2250:1130RM80(N104)LMRM0MSG$"LEFT MARGIN EXCEEDS RIGHT MARGIN":2250:RM66:990RM$N$9M$"TM":MA$"8.0":MI$"0.2"O2330:ESCF1420[N(N$)yN8MSG$M1$:2250:1210N.2MSG$M2$:2250:1210TM(6N.5)TM$N$M$"BM":MA$"8.0":MI$"0.2" 2330:ESCF1420N(N$)N8MSG$M1$:2250:12803(N.2MSG$M2$:2250:1280G2BM66(6N.5)<TMBMMSG$"TOP MARGIN EXCEEDS BOTTOM MARGIN":2250:1210FBM$N$P990Z26,TM:27,BM:28,LM:29,RM d:2:"BE SURE YOUR PRINTER IS READY":10:"PRESS RETURN TO CONTINUE: ";:A$:n:15:"PRESS ESCAPE TO CANCEL PRINTING."cx10:"PRESS SPACE BAR TO CONTINUE: "qD$"PR#1"(9)"80N":233,1:26112:233,0D$"PR#0"420: HELP SCREEN:::" HELP SCREEN": 13 SPACES :'" - MOVE CURSOR"-S" - RETURN TO MAIN MENU"Y" - DELETE CHAR LEFT OF CURSOR"""-D - DELETE CHAR UNDER CURSOR",6"-E - CHANGE INSERT/REPLACE CURSOR"@J"-Y - CLEAR FROM CURSOR TO EOL"#TO^"-Z - SHOW CR'S AS INV ASTERISK"Uhr" - MOVE CURSOR TO NEXT TAB POS"|"-F - MOVE TO FIRST LINE""-C - MOVE TO CENTER LINE""-L - MOVE TO LAST LINE";,1:24:"PRESS RETURN TO CONTINUE: ";:A$:4202:> QUITD:u:10:"DO YOU REALLY WANT TO QUIT (Y/N)? ";}A$A$"Y"A$"y"1790A$"N"A$"n"4201750:: FILENAME INPUT ROUTINE:&:N$"":ESCF0%02:"ENTER FILENAME FOR DOCUMENT"::H:"PRESS '?' TO CATALOG DISK":yD"ESCAPE ON 1ST CHAR RETURNS TO MAIN MENU":N"ESCAPE ON ANY OTHER CHARACTER":" CANCELS INPUT AND STARTS OVER":X"RETURN ACCEPTS INPUT"b1:15:"FILENAME: ";lC$vC$E$ESCF1:wC$"?"ĺD$("CATALOG",74PRODOS)",S"ST",D"DR:1:24:"PRESS RETURN TO CONTINUE: ";:A$:1830AN(C$)AN96AN123ANAN32AN65AN90MSG$"FIRST POSITION MUST BE A LETTER":2250:1830(AN)N$(AN)K1151:18:958(15:(11K)0C$HC$E$K15::1830fC$(8)K1K15::1830C$(8)KK1:(11K):" ":N$(N$,K):2000C$R$LCK:K15:2110 AN(C$)AN96AN123ANAN32: (AN65AN90)(AN48AN57)AN46MSG$"CHARACTER CANNOT BE USED IN FILENAME":2250:1990E*(AN)U4N$N$(AN)[>HC$R$MSG$"FILENAME TOO LONG, LIMIT - 15 CHARACTERS":2250:1830RFL$N$\I015fFADDRI,0pzK1(N$)FADDR1K,((N$,K,1))128FADDRLC,0 :6 ERROR MESSAGES<:DB$O1:18]MSG$::"PRESS RETURN AND TRY AGAIN: ";:16368,0:AA$: PRINTER MARGIN ROUTINE : :N$"":ESCF0$ 2:"ENTER VALUE FOR "M$:"MAXIMUM "MA$" - MINIMUM "MI$:C. "ESCAPE ON 1ST CHAR RETURNS TO MAIN MENU":8 "ESCAPE ON ANY OTHER CHARACTER":" CANCELS INPUT AND STARTS OVER":B "RETURN ACCEPTS INPUT"L :"RETURN ON 1ST CHAR ACCEPTS DEFAULT (1.0)"V 1:15:M$": 1.0"` 5:15 j C$ t C$E$ESCF1:. ~ C$R$N$"1.0":; AN(C$)a AN48AN57MSG$M3$:2250:2330p C$;:868z N$C$ K13 1:18:958 15:(5K) C$ C$E$K3::2330 C$(8)K1K3::2330! C$(8)KK1:(5K):" ":N$(N$,K):2500&! C$R$K3:26003! AN(C$)b! (AN48AN57)AN46MSG$M3$:2250:2490j! C$w! N$N$C$}!( !2 C$R$MSG$"INPUT TOO LONG, LIMIT - 3 CHARACTERS":2250:2330!< !F :!P ERASE CURRENT DOCUMENT?!Z :4"d :ESCF0:8:"YOU ARE ABOUT TO ERASE":"THE CURRENT DOCUMENT."f"n 12:"DO YOU REALLY WANT TO DO THIS? (Y/N) ";n"x A$" A$"N"A$"n"ESCF1:" A$"Y"A$"y"2680" " :" SELECT SLOT AND DRIVE" :# :1:"WHICH SLOT DO YOU WANT TO USE? (2-7) "; # A$># A$"2"A$(54PRODOS)ĺA$:ST(A$):2790H# 2760# 5:"WHICH DISK DRIVE":"DO YOU WANT TO USE? (1-2) ";# A$# A$"1"A$"2"ĺA$:DR(A$):2830# 2800# 216,0:2870:PRODOSĺD$"PREFIX,S";ST;",D";DR:# PRODOSī420!$" D$"VERIFY JUNK,S";ST;",D";DR*$, 420f$6 216,0:EN(222):EL(218)256(219):EL2850EN6420$@ 23:"DISK ERROR":"PRESS RETURN TO CONTINUE ";:16368,0:AA$:420$J :$T DATA FOR MAIN MENU$^ :k%h 9,MAIN MENU,START NEW DOCUMENT,LOAD DOCUMENT,SAVE DOCUMENT,RENAME DOCUMENT,CONTINUE WITH CURRENT DOCUMENT,PRINT DOCUMENT,HELP,SET SLOT/DRIVE,QUITq%r :%| MENU HANDLER% :% SLSE% NSL:OSSL:3000:Z0:24:PX:868:16368,0& 24:PX:SL;:16384,128:Z(16384)128:Z49ZMX48SLZ48:NOS:3000:2970& Z(Z21Z10)(Z8Z11)10(Z13)20(Z27):Z2980:SLSLZ(Z10):SLSLMX(SLMX)MX(SL1):NOS:3000:Z102970:SESL:16368,0:& 32N:SX:X$(SLOS);:& :& PRINT A MENU& ::' :TL$MENU$(0):1:"NIBBLEWRITER (C)1988 MICROSPARC,INC.":2:I140:"-";:S' 3:((40(TL$))2)\' TL$' I1MITEMS:32I:8:I". "MENU$(I):' 24:1:"USE ARROWS/NUMBERS & PRESS RETURN: ";' ' :'& DISK ERRORS'0 :': :10'D 216,0d(N (222)6(222)7MSG$"FILE ("FL$")"(13)"IS NOT ON THIS DISK.":(((218)256(219)320)1)3210,3230(X (222)13MSG$"FILE ("FL$")"(13)"IS NOT A BINARY FILE.":3210(b (222)9(222)17MSG$"DISK OR DIRECTORY IS FULL.":32104)l (222)10MSG$"EXISTING FILE ("FL$")"(13)"IS LOCKED.":3210a)v "SYSTEM ERROR #";(222);" HAS OCCURRED") "AT LINE #";(218)(219)256:MSG$"") 2250) 420) 24:"BINARY FILE NOT FOUND":PQRSTUVWNOV. 1988 DISK (VOL 9/NO 11) 8 NIBBLE WRITER SPEEDDRAW DISASSEMBLY LINES STARTUP NAME CHANGER GSTIME COMMAND RECALL ONE- AND TWO-LINERS CHECKIT 4 NIBBLE WRITER RUN NIBBLEWRITER SPEEDDRAW RUN SPEEDDRAW.DEMO STARTUP NAME CHANGER RUN NAME.CHANGER 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. @ You will not be able to delete the titles that we've placed in the catalog to separate files. However, these will not interfere with the operation of the programs. The screen displays that follow show the files needed to create working copies of each program. @ To create a work disk for NIBBLE WRITER, remove all but the following files from a copy of this disk: NIBBLEWRITER NW.BIN These programs are included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for SPEEDDRAW, remove all but the following files from a copy of this disk: SPEEDDRAW.DEMO SPEEDDRAW SPEEDDRAW.0 MAKE.TABLE CLOCKNUM These programs are included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for STARTUP NAME CHANGER, remove all but the following file from a copy of this disk: NAME.CHANGER This program is included only on the ProDOS side of this disk. @ To create a work disk for DISASSEMBLY LINES, remove all but the following files from a copy of this disk: START.PGM.ASM START.RAW.ASM These programs are included only on the ProDOS side of this disk. These programs are not included as an option in the program menu because they require special instructions. See the documentation for details. @ To create a work disk for GS-APPLESOFT CONNECTION, remove all but the following file from a copy of this disk: GSTIME This program is included on both the DOS 3.3 and ProDOS sides of this disk. This program 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 COMMAND RECALL, remove all but the following file from a copy of this disk: RECALL This program is included only on the DOS 3.3 side of this disk. This program is not included as an option in the program menu because it requires special instructions. See the documentation for details. @ In addition, we've placed a copy of the CHECKIT program on this disk. CHECKIT is a utility published in every issue of Nibble that aids in typing in programs from the magazine. See the Typing Tips in the latest issue of Nibble for details on using CHECKIT. We have also placed the ONE- and TWO-LINERS on the 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: NW.BIN.S (MSI) GS.TIME.S (MERLIN) T.RECALL (MERLIN) SPEEDDRAW.0.S (MERLIN) @ # YZ[\]LfźźŠ̥Ln X j X 6k kooLaf$ Ck koȌoo looLf lLf l loo jٛo ɠL#gLIi ooloIoo߅Luf Ck k k` l$Luf ,mC >g>$ gLf mLg(`$#Llg#8$ 8LVgi$Lufo k XLrfoJoLvgooLvg$( Ck$L'iLioIoLrf ,mL#g .l$ Kl l moLh m' Lmo$ 1mL#g Enoo m$ $ koLrf CkLi ,mL#g m$L#g 7m o l f ?`BC` ,`>B<>=?BCB>?>L l` &m k k k -F ************************************* FRSTLN LDA #1 STA FLN FST1 JSR SETFLN; SET MEM PTR TO FIRST LINE JSR HOME JMP NXTKEY ********************************* * MOVE TO CENTER OF DOC, -C ********************************* CNTRLN LDA LLN LSR STA FLN JMP FST1 ****************************** * MOVE TO END OF DOC, -L ****************************** LASTLN LDY LLN DEY STY FLN JMP FST1 ************** * -Y * CLEAR TO EOL ************** CLEAREOL LDY CH;-- LDA #0; FILL REST CLLP STA (CML),Y; OF MEMORY INY; FOR LINE CPY #40; WITH ZEROS BNE CLLP;-- JSR SAVALL LDA CH BNE CLR1 JMP BLANKLN; DELETE BLANK LINE CLR1 JMP WRAP1; WRAP UP ******************* * -Z - TOGGLE * DISPLAY OF CR'S ******************* SHOWCR LDA CRSF; TOGGLE EOR #$80; CR SHOW STA CRSF; FLAG JMP NXTKEY ***************** * CARRIAGE RETURN ***************** RTN JSR CKLMT; DOCUMENT FULL? BNE CR1; NO JMP BAD CR1 JSR CHECK1; FURTHER CHECKS LDY CH; BEGINNING OF LINE? BEQ CR2; YES JSR CHECK2; MORE CHECKS JSR CKELN; END OF LINE? BEQ CR3; YES CR2 JSR CKACSR; 0 AFTER CURSOR? BNE CR4; NO CR3 INC CRF JMP CR8 CR4 JSR GTWRDLN1; GET LENGTH TO EOL LDY #39 CRLP JSR CKCRM;-- BNE CR5; CARR RTN INC CRF; IN WORD CR5 DEY; TO BE CPY CH; MOVED? BNE CRLP;-- JSR CKFDOC; DOCUMENT FULL? BNE CR6; NO JMP BAD CR6 JSR MBLANKLN; MAKE A BLANK LINE LDA IMODE; INSERT MODE? BNE CR7; NO DEC WRDLEN; ONE LESS CHARACTER CR7 JSR MOVWRDN; MOVE WORD DOWN CR8 LDY CH; PUT LDA #$0D; CR IN STA (CML),Y; MEMORY, LDA #0; MOVE TO STA CH; BEG OF JSR SETNXTLN; NEXT LINE LDA CRF; CR MOVED? BEQ CR9; NO JMP NXTKEY CR9 JSR SAVALL JMP WRAP1; WRAP UP ****************** * DELETE CHARACTER ****************** DELETE JSR CKLMT BNE DEL1 JMP BAD DEL1 JSR CKLN1 BNE DEL2 LDY CH BNE DEL4 JMP BAD DEL2 JSR CKWINT BNE DEL3 DEC FLN; SCROLL JSR PRNTDOC; DOWN JSR LF DEL3 JSR CKWINB BNE DEL4 INC FLN; SCROLL JSR PRNTDOC; UP JSR UP DEL4 LDY KBD CPY #$04; -D? BEQ DEL6 LDY CH BNE DEL5 JSR SETPRELN; MOVE TO END LDA #39; OF PREVIOUS STA CH; LINE DELP1 JSR CKUCSR;-- BNE DEL7; MOVE TO DEC CH; CHARACTER JMP DELP1;-- DEL5 DEC CH DEL6 JSR CKUCSR; 0 UNDER CURSOR? BNE DEL7; NO JMP NXTKEY1 DEL7 JSR CKELN; END OF LINE? BEQ DEL8; YES CMP #$0D; CR UNDER CURSOR? BNE DELP2; NO DEL8 JSR STOR0M; PUT 0 IN MEM JSR SAVALL LDY CH BNE DEL9 JMP BLANKLN DEL9 JMP WRAP1 DELP2 INY;-- LDA (CML),Y; MOVE REST DEY; OF LINE TO STA (CML),Y; LEFT ONE CMP #$0D; POSITION & BNE DEL10; CHECK FOR INC STOPF; CR DEL10 INY; CPY #39; BNE DELP2;-- JSR STOR0M; PUT 0 AT EOL JSR CKLN1; LINE #1? BEQ WRAP; YES LDY #0;-- DELP3 LDA (CML),Y; GET WORD INY; LENGTH AT CMP #$0D; BEGINNING BEQ DEL11; OF LINE CMP #0; BEQ DEL11; CMP #$20; BNE DELP3; DEL11 STY WRDLEN;-- LDA CH; CURSOR IN CMP WRDLEN; FIRST WORD? BCS WRAP; NO JSR PRELN; CR IN JSR CHKCR; PREVIOUS LINE? LDA CRF; BEQ DEL12; NO LDA #0 STA CRF JSR NXTLN; MOVE TO NEXT LINE JMP WRAP; AND WRAP UP DEL12 JSR COUNT0; COUNT 0'S AT EOL JSR NXTLN LDA LEN0; WILL FIRST WORD FIT CMP WRDLEN; AT END OF PREVIOUS LINE? BCC WRAP; NO JSR SETPRELN;-- SEC; MOVE TO LDA #40; PREVIOUS LINE, SBC WRDLEN; CLC; ADC CH; STA CH; SET CH, LDA #0; RESET STA STOPF; FLAG, JSR SAVALL; AND JMP WRAP2; WRAP UP ************** * WRAP UP WORD ************** WRAP JSR SAVALL LDA STOPF; STOP FLAG SET? BNE DEND; YES WRAP1 JSR CKNXTLN0; 0 AT BEG OF NEXT LINE? BEQ DEND; YES JSR CHKWRD; ROOM FOR WORD AT LDA STOPF; END OF LINE? BNE DEND; NO WRAP2 JSR MOVWRDUP; MOVE WORD UP JSR NXTLN; FILL IN WHERE JSR MOVLNL; WORD MOVED LDA CRF; CR MOVED? BNE BLANKLN; YES LDA STOPF; CR ON LINE? BNE DEND; YES JMP WRAP1; CONTINUE TO WRAP UP * BLANKLN JSR CKLLN; LAST LINE? BEQ DEND; YES JSR CKNXTLN0 BEQ BLK1 JSR SETMMD;-- JSR SETMMS; SET MEMORY JSR FENDOC1; POINTERS AND JSR SETMME1; MOVE MEMORY JSR MOVDN;-- BLK1 DEC LLN; REMOVE LINE FROM END * DEND JSR RESALL JMP NXTKEY ****************** * NORMAL CHARACTER ****************** NORMAL JSR CKLMT BNE NR1 JMP BAD NR1 JSR CKELN BNE NR2 JSR CKFDOC BNE NR2 JMP BAD NR2 LDA IMODE; INSERT MODE? BEQ NR3; NO JSR CK0ELN; 0 AT EOL? BEQ NR3; YES JSR CKFDOC; DOCUMENT FULL? BNE NR3; NO JMP BAD NR3 JSR CHECK1 JSR CKUCSR; CR UNDER CMP #$0D; CURSOR? BNE NR4; NO JMP INSERT NR4 LDY CH BEQ NR8 JSR CHECK2 LDA TMP; CR TO LEFT OF CURSOR? BEQ NR6; NO JSR CKELN; END OF LINE? BNE NR5; NO JSR MBLANKLN; MAKE BLANK LINE & JSR BNXTLN; MOVE TO BEG OF BLANK LINE NR5 JSR STORENT;-- LDA #$0D; STORE ENTRY INY; & CR IN STA (CML),Y; MEMORY JMP NXTKEY;-- NR6 JSR CKELN BNE NR8 LDA IMODE BEQ NR7 JMP INSERT1 NR7 JSR CKSPCK; NEW CHAR A SPACE? BNE NR10; NO JSR STORENT JSR NXTLN JMP NXTKEY NR8 JSR CKACSR; 0 AFTER CURSOR? BEQ NR9; YES LDA IMODE BEQ NR9 JMP INSERT NR9 JSR STORENT JMP NXTKEY1 NR10 STA (CML),Y;-- JSR GETWRDLN; MOVE WORD JSR MBLANKLN; DOWN JSR MOVWRDN; WITH JSR SETNXTLN; CURSOR LDA WRDLEN; STA CH;-- JSR SAVALL JMP WRAP1 ****************** * INSERT CHARACTER ****************** INSERT JSR SAVALL JSR CK0ELN; 0 AT EOL? BNE INS1; NO JSR MOVLNR1; MAKE ROOM FOR JSR STORENT; NEW CHARACTER JMP NXTKEY INS1 JSR GETWRDLN JSR MBLANKLN SEC;-- LDA #39; CURSOR IN SBC WRDLEN; WORD TO STA TMP; BE MOVED? INC TMP; SBC CH;-- BCS INS5; NO JSR CKSPCK; NEW CHAR A SPACE? BNE INS2; NO JSR GTWRDLN1; GET REST OF WORD JSR MOVWRDN; MOVE IT DOWN LDY CH JSR STRSPCM; STORE SPACE JSR BNXTLN JSR SAVALL LDA CRF; CR MOVED? BNE INS3; YES JMP WRAP1 INS2 JSR MOVWRDN;-- SEC; MOVE WORD, LDA CH; SET CH, SBC TMP; STA CH; JSR SETNXTLN; MOVE TO NEXT LINE JSR MOVLNR1; MAKE ROOM JSR STORENT; FOR NEW CHARACTER JSR SAVALL;-- LDA CRF; CR MOVED? BEQ INS4; NO INS3 JMP DEND INS4 JMP WRAP1 INS5 JSR MOVWRDN JSR MOVLNR1 JSR STORENT JSR SAVALL LDA CRF BNE INS3 JSR SETNXTLN JMP WRAP1 * INSERT1 JSR CKUCSR; 0 UNDER CURSOR? BNE INS7; NO JSR CKSPCK; NEW CHAR A SPACE? BNE INS6; NO JSR STORENT JSR NXTLN JMP NXTKEY INS6 JSR SAVALL JMP INS1 INS7 JSR SAVALL JSR CKSPCK BEQ INS8 JMP INS1 INS8 JSR BNXTLN JMP INSERT ************** * GET KEYPRESS ************** KEYIN LDY CURSOR; LOAD CURSOR CHAR STY YSAV; SAVE IT LDY CH; GET CHAR UNDER LDA (BASL),Y; CURSOR ON SCREEN PHA; SAVE IT STA NXTCSR; SAVE FOR NEXT CURSOR LDY YSAV; GET BACK CURSOR CHAR TYA; AND LDY CH; PUT IT STA (BASL),Y; ON SCREEN PLA KYLP PHA INC TMP;-- BNE KYN1; TIMING LDA TMP1; FOR INC TMP1; CURSOR EOR TMP1; BLINK AND #$40; BEQ KYN1;-- LDY CH;-- LDA (BASL),Y; SWITCH LDY NXTCSR; CURSOR CHARACTER STA NXTCSR; AND TYA; CHARACTER LDY CH; ON SCREEN STA (BASL),Y;-- KYN1 PLA BIT KBD; KEY PRESSED? BPL KYLP; NO LDY CH; RESTORE ORIGINAL STA (BASL),Y; SCREEN CHARACTER LDA KBD; GET KEYPRESS AND STA STROBE; CLEAR KBD HIGH BIT RTS **************** * PREPARE SCREEN **************** PREP LDA #FILENAME;-- LDX #FILENAME/; PRINT JSR MESSAGE; FILENAME LDA #ESCMSG; AND ESCAPE LDX #ESCMSG/; MESSAGE JSR MESSAGE;-- LDA #1 JSR TABV LDY #0;-- LDA #$AD; "-" PELP1 STA (BASL),Y INY CPY #5 BNE PELP1 PELP2 LDA #$BA; ":" STA (BASL),Y INY LDX #0 PELP3 LDA #$AD; PRINT TOP STA (BASL),Y; AND BOTTOM INY; LINES INX CPX #4 BNE PELP3 CPY #40 BNE PELP2 LDY #0 LDA #22 JSR TABV LDA #$AD PELP4 STA (BASL),Y INY CPY #40 BNE PELP4;-- LDA #2;-- STA WINDT; SET LDA #22; WINDOWS STA WINDB;-- RTS ************************* * PRINT MESSAGE TO SCREEN ************************* MESSAGE STA TMP STX TMP1 LDY #0 LDA (TMP),Y STA CH INY LDA (TMP),Y JSR TABV MGLP INY LDA (TMP),Y BEQ MSG1 JSR COUT BNE MGLP MSG1 JSR CLREOL RTS ***************************** * SET MEMORY POINTER TO $7000 ***************************** SETCM LDA #0 STA CML LDA #$70 STA CMH LDA #1 STA LN RTS **************** * SAVE VARIABLES **************** SAVALL JSR SAVCSR LDA CML STA PTRSAV LDA CMH STA PTRSAV+1 LDA LN STA LNSAV RTS ******************* * RESTORE VARIABLES ******************* RESALL JSR RESCSR LDA PTRSAV STA CML LDA PTRSAV+1 STA CMH LDA LNSAV STA LN RTS ********************** * SAVE CURSOR SETTINGS ********************** SAVCSR LDA CH STA CHSAV LDA CV STA CVSAV RTS ************************* * RESTORE CURSOR SETTINGS ************************* RESCSR LDA CHSAV STA CH LDA CVSAV JSR TABV RTS ********************************** * MOVE MEMORY POINTER TO NEXT LINE ********************************** NXTLN CLC LDA CML ADC #40 BCC NXT1 INC CMH NXT1 STA CML INC LN RTS ************************************** * MOVE MEMORY POINTER TO PREVIOUS LINE ************************************** PRELN SEC LDA CML SBC #40 BCS PRE1 DEC CMH PRE1 STA CML DEC LN RTS *************************** * SET MEM & CV TO NEXT LINE *************************** SETNXTLN JSR LF JSR NXTLN RTS ******************************* * SET MEM & CV TO PREVIOUS LINE ******************************* SETPRELN JSR UP JSR PRELN RTS ****************************** * GO TO BEGINNING OF NEXT LINE ****************************** BNXTLN LDA #0 STA CH JSR SETNXTLN RTS ***************** * SET LINE TO FLN ***************** SETFLN JSR SETCM STLP LDA LN CMP FLN BEQ SFN1 JSR NXTLN JMP STLP SFN1 RTS *************** * MAKE NEW LINE *************** NEWLN LDA #0 LDY #40 NWLP STA (CML),Y DEY BPL NWLP INC LLN RTS ********************** * FIND END OF DOCUMENT ********************** FENDOC JSR SETCM FENDOC1 LDY #0 FELP LDA (CML),Y BEQ FED1 JSR NXTLN JMP FELP FED1 RTS ******************** * SET MEM MOVE START ******************** SETMMS JSR NXTLN LDA CML STA MMS LDA CMH STA MMS+1 RTS ****************** * SET MEM MOVE END ****************** SETMME JSR FENDOC SETMME1 JSR NXTLN LDA CML STA MME LDA CMH STA MME+1 RTS ************************** * SET MEM MOVE DESTINATION ************************** SETMMD LDA CML STA MMD LDA CMH STA MMD+1 RTS *************** * MOVE MEM DOWN *************** MOVDN LDY #0 JSR MOVE RTS ************* * MOVE MEM UP ************* MOVUP LDY #0 MMLP LDA (MME),Y STA (MMD),Y LDA MMS;-- CMP MME; REACHED START LDA MMS+1; OF MEMORY SBC MME+1; FOR MOVE? BCS MVP3; YES LDA MMD BNE MVP1 DEC MMD+1 MVP1 DEC MMD LDA MME BNE MVP2 DEC MME+1 MVP2 DEC MME JMP MMLP MVP3 RTS *********** * CHECKS #1 *********** CHECK1 JSR CKLLN; LAST LINE? BNE CK11; NO JSR NXTLN JSR NEWLN JSR PRELN CK11 JSR CKWINB BNE CK12 INC FLN; SCROLL JSR PRNTDOC; UP JSR UP CK12 RTS *********** * CHECKS #2 *********** CHECK2 LDA #0 STA TMP JSR CKBCSR; 0 BEFORE CURSOR? BEQ CK21; YES CMP #$0D; CR BEFORE CURSOR? BNE CK24; NO JMP CK23 CK21 LDY CH CKLP DEY;-- LDA (CML),Y; SWITCH BNE CK22; SPACES JSR STRSPCM; FOR 0'S CPY #0; BEFORE BEQ CK24; CURSOR JMP CKLP;-- CK22 CMP #$0D; CR BEFORE CURSOR? BNE CK24; NO CK23 INC TMP JSR STRSPCM; STORE SPACE IN MEM CK24 RTS ************* * STORE ENTRY ************* STORENT LDA KBD LDY CH STA (CML),Y ORA #$80 JSR COUT RTS ******************** * STORE SPACE IN MEM ******************** STRSPCM LDA #$20 STA (CML),Y RTS ******************* * STORE ZERO IN MEM ******************* STOR0M LDA #0 STA (CML),Y RTS *************************** * PRINT CHARACTER TO SCREEN *************************** PRCHAR LDA (CML),Y BEQ PRC1 CMP #$0D BNE PRC2 LDA CRSF BEQ PRC1 LDA #$2A; INVERSE ASTERISK JMP PRC3 PRC1 LDA #$20 PRC2 ORA #$80 PRC3 STA (BASL),Y RTS **************************** * PRINT 20 LINES OF DOCUMENT **************************** PRNTDOC JSR SAVALL PRNTDOC1 JSR SETFLN LDA #2 JSR TABV PDLP1 LDY #39;-- PDLP2 JSR PRCHAR; PRINT DEY; ONE BPL PDLP2; LINE LDA LN CMP LLN; LAST LINE? BEQ PD1; YES LDA CV CMP #21; OR BOTTOM OF WINDOW? BEQ PD1; YES JSR SETNXTLN; MOVE TO NEXT LINE JMP PDLP1; AND PRINT IT PD1 JSR RESALL RTS ********************** * PRINT LINE & COL #'S ********************** PRNTLC JSR SAVCSR LDA #MSGLC; PRINT LDX #MSGLC/; LINE/COLUMN JSR MESSAGE; MESSAGE LDA #5; STA CH; PRINT NEW LDA #0; LINE NUMBER LDX LN; MSB-ACC JSR OUTNUM; LSB-X LDA #17;-- STA CH; PRINT NEW LDA #0; COLUMN LDX CHSAV; NUMBER INX; JSR OUTNUM;-- JSR RESCSR RTS ************************ * VARIOUS CHECKS & TESTS ************************ CKELN LDY CH CPY #39 RTS * CK0BLN LDY #0 LDA (CML),Y RTS * CK0ELN LDY #39 LDA (CML),Y RTS * CKBCSR LDY CH DEY LDA (CML),Y RTS * CKUCSR LDY CH LDA (CML),Y RTS * CKACSR LDY CH INY LDA (CML),Y RTS * CKNXTLN0 LDY #40 LDA (CML),Y RTS * CKLN1 LDA LN CMP #1 RTS * CKFLN LDA LN CMP FLN RTS * CKLLN LDA LN CMP LLN RTS * CKLMT LDA LN CMP #241 RTS * CKFDOC LDA LLN CMP #241 RTS * CKWINT LDA CV CMP #2 RTS * CKWINB LDA CV CMP #21 RTS * CKSPCK LDA KBD CMP #$20 RTS * CKSPCM LDA (CML),Y CMP #$20 RTS * CKCRM LDA (CML),Y CMP #$0D RTS ***************************** * GET WORD LENGTH FOR WRAP UP ***************************** CHKWRD JSR COUNT0 JSR NXTLN LDY #0;-- LDX #0; LDA (CML),Y; CMP #$20; GET LENGTH BEQ CKW1; CMP #$0D; OF FIRST BEQ CKW1; CWLP1 INY; WORD LDA (CML),Y; BEQ CKW1; ON LINE CMP #$0D; BEQ CKW1; CMP #$20; BNE CWLP1; CKW1 INY; STY WRDLEN;-- SEC; COMPARE TO CPY LEN0; LENGTH OF 0'S BEQ CKW2; EQUAL INX DEY BCC CWLP1; SHORTER CPX #1; FIRST WORD? BNE CWLP2; NO INC STOPF BNE CKW2 CWLP2 DEY;-- JSR CKSPCM; STRIP OFF BNE CWLP2; A WORD INY; STY WRDLEN;-- CKW2 JSR PRELN RTS *********************************** * GET LENGTH OF WORD AT END OF LINE *********************************** GETWRDLN LDX #0 JSR CK0ELN CMP #$0D; CHECK FOR BNE GWLP1; CR IN INC CRF; WORD GWLP1 CPY #0 BEQ GTW1 DEY INX JSR CKSPCM BNE GWLP1 STX WRDLEN RTS GTW1 LDA #1 STA WRDLEN RTS ******************************** * GET LENGTH FROM CH TO END LINE ******************************** GTWRDLN1 SEC LDA #40 SBC CH STA WRDLEN RTS ************** * MOVE WORD UP ************** MOVWRDUP SEC LDA #40 STA YHI SBC LEN0 STA YLO LDX WRDLEN MULP LDY YHI LDA (CML),Y LDY YLO STA (CML),Y INC YLO INC YHI DEX BNE MULP RTS **************** * MOVE WORD DOWN **************** MOVWRDN SEC LDA #40 STA YHI SBC WRDLEN STA YLO MDLP1 LDY YLO LDA (CML),Y BEQ MWD1 LDY YHI STA (CML),Y INC YHI LDY YLO JSR STOR0M INY STY YLO CPY #40 BNE MDLP1 MWD1 RTS ******************* * MOVE LINE TO LEFT ******************* MOVLNL LDY WRDLEN STY YHI LDY #0 STY YLO LDY YHI LDA (CML),Y BNE MLLP1 INC CRF; IF CR IN WORD MOVED MLLP1 LDY YHI LDA (CML),Y LDY YLO STA (CML),Y CMP #$0D; CHECK FOR BNE MLL1; CR IN INC STOPF; LINE MLL1 INC YLO INC YHI LDY YHI CPY #40 BNE MLLP1 LDY YLO MLLP2 JSR STOR0M; FILL REST INY; OF LINE CPY #40; WITH 0'S BNE MLLP2 RTS ******************* * MOVE LINE RIGHT 1 ******************* MOVLNR1 LDY #39 MRLP DEY LDA (CML),Y INY STA (CML),Y DEY CPY CH BNE MRLP RTS ******************* * MAKE A BLANK LINE ******************* MBLANKLN JSR SAVALL JSR SETMMS;-- JSR SETMME; SET MEMORY JSR NXTLN; POINTERS AND JSR SETMMD; MOVE MEMORY JSR MOVUP;-- JSR RESALL JSR NXTLN; FILL NEW LINE JSR LINE0; WITH 0'S INC LLN JSR RESALL RTS ********************** * CHECK FOR CR ON LINE ********************** CHKCR LDY #0 CKRLP JSR CKCRM BNE CKR1 INC CRF CKR1 INY CPY #40 BNE CKRLP RTS ********************************** * GET LENGTH OF 0'S AT END OF LINE ********************************** COUNT0 LDY #40 LDX #$FF CTLP DEY INX LDA (CML),Y BEQ CTLP STX LEN0 RTS ******************** * FILL LINE WITH 0'S ******************** LINE0 LDY #39 L0LP JSR STOR0M DEY BPL L0LP RTS *************************** * PRINT DOCUMENT TO PRINTER *************************** PPRINT JSR SETCM LDA #0 STA STOPF JSR PAUSE LDA STOPF BEQ PPR1 JMP PRTN1 PPR1 JSR PRNTLM LDY #0 STY CRF STY PPOS DEY LDA STROBE NXTWRD LDA KBD;-- BPL PPR2; ESCAPE KEY CMP #$9B; PRESSED? BNE PPR2;-- JMP PRTN; YES PPR2 LDA STROBE LDX #0 PPLP1 INX PPLP2 INY CPY #40; END OF LINE? BNE PPR3; NO LDA (CML),Y; END OF DOCUMENT? BEQ PRTN; YES JSR NXTLN; MOVE MEM PTR DEC LN; RESET LINE LDY #0; RESET Y PPR3 LDA (CML),Y BEQ PPLP2; IF 0, MOVE ON INC PPOS LDA PPOS CMP RM; RIGHT MARGIN? BNE PPR4; NO INC CRF; SET CR FLAG PPR4 LDA (CML),Y CMP #$0D; CHARACTER CR? BEQ PPR5; YES CMP #$20; CHAR SPACE? BNE PPLP1; NO PPR5 STX WRDLEN LDA CRF; CR FLAG SET? BEQ PWRD; NO STY YSAV1 LDA #$0D JSR PGEND LDA STOPF BNE PRTN1 JSR PRNTLM; PRINT LEFT MARGIN LDY #0 STY CRF; RESET CR FLAG LDY WRDLEN; WRDLEN STY PPOS; & PPOS LDY YSAV1; RESTORE Y PWRD LDX #0 INY SEC; RESET Y TO TYA; SBC WRDLEN; START OF WORD TAY DEY PPLP3 INX INY LDA (CML),Y STY YSAV1 CMP #$0D; CR? BNE PPR6; NO JSR PGEND LDA STOPF BNE PRTN1 JSR PRNTLM LDY #0 STY PPOS; RESET PPOS JMP PPR7 PPR6 ORA #$80; PRINT CHARACTER JSR COUT PPR7 LDY YSAV1; RESTORE Y CPX WRDLEN; END OF WORD? BNE PPLP3; NO JMP NXTWRD; GET NEXT WORD PRTN LDA #$8C; FORM FEED JSR COUT PRTN1 RTS * END OF PAGE? PGEND ORA #$80; PRINT CR JSR COUT INC LN LDA LN CMP BM; BOTTOM MARGIN? BNE PGD1; NO LDA #$0C JSR COUT LDA #0 STA LN JSR PAUSE PGD1 RTS **************** * SET TOP MARGIN **************** SETTM LDA #$8D; CR JSR COUT INC LN LDA LN CMP TM BCC SETTM RTS ********************* * PAUSE TO LOAD PAPER ********************* PAUSE LDA #30 STA CH LDA #9 JSR TABV PAUSE1 JSR KEYIN CMP #$9B BNE PSE1 INC STOPF RTS PSE1 CMP #$A0 BNE PAUSE1 JSR SETTM RTS ******************* * PRINT LEFT MARGIN ******************* PRNTLM LDA #$A0 LDY LM LMLP JSR COUT DEY BNE LMLP RTS *************************** * COMMAND CODES & ADDRESSES *************************** CMDCODE DFC $85,$9B,$95,$88,$8A,$8B,$89 DFC $86,$83,$8C,$99,$9A,$8D,$84,$FF CMDADR DFC CHGCSR,CHGCSR/ DFC ESC,ESC/ DFC RARR,RARR/ DFC LARR,LARR/ DFC DNARR,DNARR/ DFC UPARR,UPARR/ DFC TAB,TAB/ DFC FRSTLN,FRSTLN/ DFC CNTRLN,CNTRLN/ DFC LASTLN,LASTLN/ DFC CLEAREOL,CLEAREOL/ DFC SHOWCR,SHOWCR/ DFC RTN,RTN/ DFC DELETE,DELETE/ DFC DELETE,DELETE/ *************************** * VARIOUS FLAGS & REGISTERS *************************** IMODE DFC 0 CRF DFC 0 CRSF DFC 0 STOPF DFC 0 LEN0 DFC 0 WRDLEN DFC 0 FLN DFC 1 LLN DFC 1 CHSAV DFC 0 CVSAV DFC 0 LNSAV DFC 0 YSAV DFC 0 YSAV1 DFC 0 PTRSAV DFS 2 **************** * ESCAPE MESSAGE **************** ESCMSG DFC 22,0 ASC "ESCAPE: MAIN MENU" DFC 0 ********************* * LINE/COLUMN MESSAGE ********************* MSGLC DFC 0,23 ASC "LINE COLUMN" DFC 0 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)I38Pghם`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&MIKE :;:A`AALL t8tp CA8AA;=:D?L, & iD0LHsDH湱: @C @C @C @C LC SCLSC AALPA B0LaAH PAh Bii Bii` \B B BLB \B A B B8H Bh00`8LWLB vA iqii iqii SC ALvA8i iii ii vA MB A MBLvA @C SC`) 8 N8H%h%`e)``0 A` B` B`) 88L CsC .e ) m`8` LC LC`i`iZ6*ZZ` !"$&')*,-/023578:;=>@ACDFGIJLMOPRSUVXY[\^_abcefhiklmoprsuvwyz{}~RDVMBCASLTO[lu :;:A`AALL t8tp CA8AA;=:D?L, & iD0LHsDH湱: @C @C @C @C LC SCLSC AALPA B0LaAH PAh Bii Bii` \B B BLB \B A B B8H Bh00`8LWLB vA iqii iqii SC ALvA8i iii ii vA MB A MBLvA @C SC`) 8 N8H%h%`e)``0 A` B` B`) 88L CsC .e ) m`8` LC LC`i`iZ6*ZZ`RDVMBCASLTO[lu 卪 卪 ì 㮍 򍪍 ŠՠȠՠƠ ̠ՠ ̠ՠÍ̠ՠō̠ՠĠՠƍ͠ՠҠՠƵӲՠƸà ŠՠŲÍƠՠƵǠ٠ҫ̍ҫ̫Р̩٠ РЬ٠ 獠Š̠ 썠٠ 占ŠР ˍӠ ̠ҫ ë 덠ҫ ë 䍠à ҍư РÍѠϠ ƍͫ Íà ͫ ī ŠӠ󍪍ϠҠƠ 򍪍Ӡ̫ 占ҫ ī 占ÍàР 占ōР ̫ ̫ ٠٠̠ ٠ҫ ٠̠ ٠̠ ٠Ġ٠͠øؠҠӲ ٠Ƞ 翍٠ 򿍠Šԍ̩٠ 占Р̠ 忍ɠԠ Рī 忍̠Ԡ ÍàŠ ̩٠ ԠٍÍà̠ ̍àōà̫Š٠̩٠ 占Šø ĭ̠ ōĭ̫РŠ 卪 卪DZՠıՠDzՠIJՠȠՠ̠ՠȠՠ̠ՠĠՠ ՠҠՠ¸ŠՠưĠՠƱԠՠƲԠՠƳĠՠƴԠՠƶ԰ՠƴР٠ؠ 占ҩ٠ Р 俍ѠĠ РР̬ؠ 荠ѠĠ䍠؍̠Р ɠÍĠàҠ 䍠ŠÍàҫàР ҍĠ 占̬ؠ 𢍪РàҠ占Šɲàҫɲҩ٠ 썠ѠӠ Р ŠР 獪Ӡؠ ٠ 占ҠŠ ҠŠ ҠŠ åҠŠ å٠ 占ҠŠ ҥؠ DZҠֹ ؠ DzРֹ 䍪٠ҠԍĠ 占ѠààĠ 占РٍΠ 荠ԍРҠԠ Ġ 占ѠààčРР􍪍Ҡč 占Ҡ٠ 占 čàҠ؍٠ å ©٠ ̍ԍ٠å 荠©٠ ȍҠٍ٠ å ©٠ ̍ԍٍ©٠å 荠ȍàӍà 荠ԍҠĠ РҠԍҠ̍ŠР РԠ 卪Š 占DZ Dz 䍠ı 荠IJ 󍪍àҠĠ РҠԍҠ̍ŠР 卪ԠҠٍÍР ٿӠӱ ٠Ԡ Šӱ 獠 占Ҡ؍ؠ ԰ ٭占٠Ԡ ԰ ɠӱ 䍠٠ 䍠ɠԠϮˮѠϠ ӱӠ 箍ϠÍؠ Ӡӱ ԠР԰ 塍αРΠ 卪Πàı Ҡà àı占àı 䍠Í٠©٠ ٠à©٠ ©٠ IJ 占٠©٠ ٠à©ٍ©٠ DzؠҠֹ àIJ 䍠ҠÍРà 􍪍ΠÍ٠©٠ ٠à©٠ ٠©٠ ٍ©٠ 占٠à©ٍ٠©ٍDZ Dz ıIJàı Ҡà Ҡ àIJ Ҡà Ҡ Рà 卪ؠ٠ҠŠ DZıؠҠֹàıӍĠIJĠ IJ佳 ļč ԠÍРčӠԠ 䍠̠ ҠĠ 䍠ŠԍàĠ ԠÍàĠ 占ĠDZDZ 占ĠDzDzӍ̠ÍčàDZ ㍠DZàˍàı ˠıĠ РIJ 俍Š DZРDz忍Ӡ ڭ 卪ԠԠ 忍ŠĠ 獠ԍӍĠР 忍ɠԠ ҠԠ ԠàԍӍ٠̠ ٭占ԍȠ ԍàı 占ҠĠ ٭占àı 占ӍؠȠ ؍ԍ̍ԍҠĠ 占Ӎ 󍪍ĠıĠ Ѡ΍DZѠŠ 影ÍàDZ 占ÍàΫΠDZ ÍРƶ 影àР ŠĠ čРӍР٠ 占̬٠ 塍ō čؠ Р̠̠Ġ 占̠Š àɠ 䍠Íàčàɍàčɠؠ ŠЍ̠ àӍàčӠıĠ 忍ŠԠԠ ÍàĠ 󩍠àԍàԍԠӍԠԠ ÍàĠ 󩍠ӠԍàԍӍŠҠŠ 占ҠŠ 占٠ ٠ ٠ ٠ 占٠ 占ӍŠ©٠ 占ؠ 占٠ؠ Ӎֹؠ ̠֠ 䍠Íà ؍֠٠ ٠؍٠ Р̠؍̠؍̠Р àǠàà؍ǠٍŠЍӠ 䍪̠Ӡƶ ƶ 卪̠àԧ̠ ٭έҭ íí ŭíԭ αέĠՠԠƍ** SPEEDDRAW.DEMO3* BY JIM SAVAGEL* COPYRIGHT(C) 1988d* MICROSPARC, INC.}* CONCORD, MA 01742*<A1%0:A2%0:XC%0:YC%0:R%0: PUT VARIABLES WHERE SPEEDDRAW LOOKS FOR THEMF10501 PAMP256(1015):(AMP7)38(AMP9)10FL$"SPEEDDRAW":(4);"BRUN";FL$< Z216,0B d:M n MENUg xNN:I1NN:MN$(I): 6,SPIRALS,LOOPS,POLYGONS,CLOCK,"PIE CHART",QUIT ::(21);:14:"SPEEDDRAW DEMO"::4:"COPYRIGHT(C) 1988 MICROSPARC, INC.":I140:"=";:::$ I1NN::14:I;" - ";MN$(I)* a 20:14:"CHOOSE 1-";NN;:A$:A(A$):A1ANN170~ :A220,340,450,550,920 :23: : SPIRALS A1%0:A2%45:XC%140:YC%95:R%4 3: I180:TURN:R%R%2: :XC%140:I125 R%I:A1%24I:MOVE- R%3.4I:CIRCLE:; :I140b "XC%140:YC%95:R%I:A1%24I:MOVEy ,R%3.4I:CIRCLE: 6140 @: J LOOPS TA1%180:A2%0:XC%0:YC%0:R%0 ^A2100(1)160 hA2%A2:A1%(180A2)2:XC%150:YC%26 r:3 |I124! R%130:A2%50:TURN8 R%16:A2%A2:TURN\ :(16384)127Ĺ16368,0:140e 340k :z  POLYGONS A1%0:A2%0:XC%40:YC%50:R%0:3 N38: NP360N:D0 R35755:R%R DD1:XC%110D:YC%30D A90450NP:A1%A:VECTR A,R,N! 140' :3  CLOCK] &A1%0:A2%0:XC%140:YC%95:R%80:PG1 0:4:"ENTER CORRECT TIME---"::" HOUR (1-12): ";A$:HR(A$):HR1HR12560 :8:" MINUTE (0-59): ";A$:MIN(A$):(MIN1A$"0")MIN59570EDSEC(1)60MIN3600HR:SEC(2)SEC(1)1:HR(1)SEC(1)3600:HR(2)SEC(2)3600jN:3:0:1:232,0:233,96:1050XFL$"CLOCKNUM"::(4);"BLOAD";FL$b216,0:840::840l3:780:230,32:780v TIME LOOPXC%140:YC%95:0:770:SEC(PG)SEC(PG)2:3:7707FLĒ0:780:HR(PG)SEC(PG)3600:3:780:670^0:790:MIN(PG)SEC(PG)60:3:790XC%140:YC%95:R13:R%R:CIRCLE:710:PG(PG1)1:16298PG,0:230,PG32:A(16336)(16336):PG1FLFL0I115::(16384)128640:16368,0:140 ALPHA>R%64:A112:A1%30A:XC%140:YC%95K0:SPOT\28,127:A:uR%34:A1%0:0:SPOT28,127:13: HANDSXC%140:YC%95:A1%(SEC(PG)3600(HR(PG)))6:R%70:RAY: A1%HR(PG)30:R%40:800:A1%MIN(PG)6:R%64:800:* XC%140:YC%95:VECTRD*A1%A1%160:R%5:RAYZ4A1%A1%40:RAY:e> FACEHXC%140:YC%95:R80791:R%R:CIRCLE:RA160:A1%6A\XC%140:YC%95fR175:A5(A5)R171pR%R1:MOVE:R%79R1:RAY:z: PIE CHARTEA1%0:A2%0:XC%140:YC%95:R%80:SUM0:3:A10::5:"ENTER NUMBER OF PIECES OF DATA (2-9) ";N$:N(N$):N2N9930:"ENTER THE DATA. PLACE AN 'S' AFTER ANY SEGMENT THAT SHOULD BE SEPARATED.":I1N-12I:"SEGMENT ";I;:" - ";DA$:DA(I)(DA$):DA(I)0950PFL(I)0:(DA$,1)"S"FL(I)14dSUMSUMDA(I):jI1N:XC%140:YC%75:R%FL(I):DD360DA(I)SUM:A1%A1DD2:MOVER%70:A1%A1:RAY:A2%A1DD:ARC:A1%A2%:RAYA1A1DD:,22::"PRESS RETURN TO CONTINUE ";:16368,0:A$:1402:K DISK ERROR HANDLERb216,0:ER(222):z$:10:"DISK ERROR".::ER6ĺ"FILE ";FL$;" MUST BE ON THIS DISK":(218)256(219)80Ā8ER8ĺ"CHECK DRIVE"B:"PRESS TO TRY AGAIN ";:A$::FL$"CLOCKNUM"140'L70*********************************** * * * */SYSTEM/START * * Program Code * * Interpreted by Sandy Mossberg * * * * Copyright (C) 1988 * * by MicroSPARC, Inc. * * Concord, MA 01742 * * * *********************************** ; Equate: PRODOS GEQU $E100A8 ;ProDOS 16 call Start_File START ; Equate data bank to program bank: Start_Body PHK PLB ; Calculate amount of usable RAM PHA ;reserve work area on PHA ; stack (4 bytes) JSL >GoGetRAM ;get size of usable RAM LDA $03,S ;result left on stack CMP #4 BCC AltQuit ;less than 256K found ; Primary QUIT command: JSL PRODOS ;used if >= 256K usable RAM DC I2'$29' ;QUIT command code MQParmPtr DC I4'MQuitParm' ;pointer to parmlist ; Alternate QUIT command: AltQuit JSL PRODOS ;used if < 256K usable RAM DC I2'$29' ;QUIT command code AQParmPtr DC I4'AQuitParm' ;pointer to parmlist ; Primary QUIT parameter list: MQuitParm DC I4'MQuitName' ;pointer to pathname DC I2'$00' ;return/restart flags ; Alternate QUIT parameter list: AQuitParm DC I4'AQuitName' ;pointer to pathname DC I2'$00' ;return/restart flags ; Pathname of primary START file: MQuitName DC I1'$0F' ;length byte DC C'*/SYSTEM/FINDER' ; Pathname of alternate START file: AQuitName DC I1'$11' ;length byte DC C'*/SYSTEM/LAUNCHER' ; Call subroutine to calculate usable RAM: ; ; EXIT: usable RAM on stack bytes 1-4 (L-ML-MH-H): GoGetRAM JSL >GetRAM ;get size of unpurgeable RAM RTL ; Subroutine to calculate usable RAM: ; ; EXIT: usable RAM on stack bytes 4-7 (L-ML-MH-H): ;--> Transform stack into work area for calculations: GetRAM PHD ;save entry direct page PHA ;save return address PHA ; on stack TSC ;equate stack and TCD ; direct page STZ $0D ;zero storage bytes for STZ $0F ; RAM calculations ;--> Point to Memory Manager's allocated block records: LDA $E11600 TAX LDA $E11602 GR1 STX $01 ;pointers to block records STA $03 ; at $00-$03 ;--> Test block attributes: LDY #4 LDA [$01],Y ;get attributes AND #$0300 ;isolate purge level BNE GR2 ;block purgeable so skip it ;--> Calculate total size of unpurgeable (unusable) RAM: LDY #8 ;block unpurgeable LDA [$01],Y ;get block size lo CLC ; and save it ADC $0D ; at $0C-$0D of STA $0D ; direct page (also stack) INY ;bump index to INY ; hi order byte LDA [$01],Y ;get block size hi ADC $0F ; and save it STA $0F ; at $0E-$0F of GR2 LDY #$10 ; direct page (also stack) LDA [$01],Y ;get link lo to next TAX ; block record INY ;bump index to INY ; hi order byte LDA [$01],Y ;get link to to next record BNE GR1 ;not at last record ;--> Subtract from $100000000 to get total usable RAM: LDA #0 ;all block records checked TAX ; so calculate complement SEC ; of total block sizes SBC $0D ; stored at $0C-$0F STA $0D TXA SBC $0F STA $0F PLA ;restore return address and PLA ; direct page to entry PLD ; values (former $0C-$0F at RTL ; $04-$07 after RTL) END *********************************** * * * */SYSTEM/START * * Raw Code * * Interpreted by Sandy Mossberg * * * * Copyright (C) 1988 * * by MicroSPARC, Inc. * * Concord, MA 01742 * * * *********************************** ; Equates: LCONST GEQU $F2 ;program code/data record cRELOC GEQU $F5 ;compressed reloc record SUPER GEQU $F7 ;super compressed reloc rec RELOC3 GEQU $01 ;relocate 3 bytes (SUPER) PRODOS GEQU $E100A8 ;ProDOS 16 call Start_File START ***************************************************************** * * Segment 1 Header: * Start_Head ANOP BYTECNT DC I4'$111' ;total size of segment= 273 RESSPC DC I4'$00' ;# zeros added at EOF= 0 LENGTH DC I4'$A6' ;size of loaded segment= 166 UNDEF1 DC I1'$FF' ;undefined LABLEN DC I1'$0A' ;maximum label length= 10 NUMLEN DC I1'$04' ;number length always= 4 VERSION DC I1'$02' ;OMF version= 2 BANKSIZE DC I4'$10000' ;maximum bank size= 65536 KIND DC I2'$00' ;type/attrib (static code) UNDEF2 DC I2'$00' ;undefined ORG DC I4'$00' ;load address (relocatable) ALIGN DC I4'$00' ;page alignment (unaligned) NUMSEX DC I1'$00' ;byte order (lo/hi) UNDEF3 DC I1'$00' ;undefined SEGNUM DC I2'$01' ;segment number= 1 ENTRY DC I4'$00' ;entry offset= 0 DISPNAME DC I2'$2C' ;offset of LOADNAME= 44 DISPDATA DC I2'$40' ;offset of segment body= 64 LOADNAME DC 10C' ' ;name of load segm (unused) SEGNAME DC 10C' ' ;name of this segm (unused) ***************************************************************** * * Segment 1 Body: * ;................................................................ ; ; Record 1 Operation Code and Data: ; DC I1'LCONST' ;operation code= LCONST DC I4'$A6' ;byte count= 166 ;................................................................ ; ; Record 1 Program Code: ; ; Equate data bank to program bank: Start_Body PHK PLB ; Calculate amount of usable RAM: PHA ;reserve work area on PHA ; stack (4 bytes) JSL >GoGetRAM-PO ;get size of usable RAM ; ;** relocated by SUPER LDA $03,S ;result left on stack CMP #4 BCC AltQuit ;less than 256K found ; Primary QUIT command: JSL PRODOS ;used if >= 256K usable RAM DC I2'$29' ;QUIT command code MQParmPtr DC I4'MQuitParm-PO' ;pointer to parmlist ; ;** relocated by cRELOC ; Alternate QUIT command: AltQuit JSL PRODOS ;used if < 256K usable RAM DC I2'$29' ;QUIT command code AQParmPtr DC I4'AQuitParm-PO' ;pointer to parmlist ; ;** relocated by cRELOC ; Primary QUIT parameter list: MQuitParm DC I4'MQuitName-PO' ;pointer to pathname ; ;** relocated by cRELOC DC I2'$00' ;return/restart flags ; Alternate QUIT parameter list: AQuitParm DC I4'AQuitName-PO' ;pointer to pathname ; ;** relocated by cRELOC DC I2'$00' ;return/restart flags ; Pathname of primary START file: MQuitName DC I1'$0F' ;length byte DC C'*/SYSTEM/FINDER' ; Pathname of alternate START file: AQuitName DC I1'$11' ;length byte DC C'*/SYSTEM/LAUNCHER' ; Call subroutine to calculate usable RAM: ; ; EXIT: usable RAM on stack bytes 1-4 (L-ML-MH-H): GoGetRAM JSL >GetRAM-PO ;get size of usable RAM ; ;** relocated by SUPER RTL ; Subroutine to calculate usable RAM: ; ; EXIT: usable RAM on stack bytes 4-7 (L-ML-MH-H): ;--> Transform stack into work area for calculations: GetRAM PHD ;save entry direct page PHA ;save return address PHA ; on stack TSC ;equate stack and TCD ; direct page STZ $0D ;zero storage bytes for STZ $0F ; RAM calculations ;--> Point to Memory Manager's allocated block records: LDA $E11600 TAX LDA $E11602 GR1 STX $01 ;pointers to block records STA $03 ; at $00-$03 ;--> Test block attributes: LDY #4 LDA [$01],Y ;get attributes AND #$0300 ;isolate purge level BNE GR2 ;block purgeable so skip it ;--> Calculate total size of unpurgeable (unusable) RAM: LDY #8 ;block unpurgeable LDA [$01],Y ;get block size lo CLC ; and save it ADC $0D ; at $0C-$0D of STA $0D ; direct page (also stack) INY ;bump index to INY ; hi order byte LDA [$01],Y ;get block size hi ADC $0F ; and save it STA $0F ; at $0E-$0F of GR2 LDY #$10 ; direct page (also stack) LDA [$01],Y ;get link lo to next TAX ; block record INY ;bump index to INY ; hi order byte LDA [$01],Y ;get link to to next record BNE GR1 ;not at last record ;--> Subtract from $100000000 to get total usable RAM: LDA #0 ;all block records checked TAX ; so calculate complement SEC ; of total block sizes SBC $0D ; stored at $0C-$0F STA $0D TXA SBC $0F STA $0F PLA ;restore return address and PLA ; direct page to entry PLD ; values (former $0C-$0F at RTL ; $04-$07 after RTL) PO EQU Start_Body-Start_Head ***************************************************************** * * Segment 1 Relocation Dictionary: * ;................................................................ ; ; Record 2 Operation Code and Data: ; DC I1'cRELOC' ;operation code= cRELOC DC I1'$04' ;# bytes to relocate= 4 DC I1'$00' ;bit-shift operator= none DC I2'MQParmPtr-PO' ;offset of code to reloc= 21 DC I2'MQuitParm-PO' ;offset to reloc addr= 35 ;................................................................ ; ; Record 3 Operation Code and Data: ; DC I1'cRELOC' ;operation code= cRELOC DC I1'$04' ;# bytes to relocate= 4 DC I1'$00' ;bit-shift operator= none DC I2'AQParmPtr-PO' ;offset of code to reloc= 31 DC I2'AQuitParm-PO' ;offset to reloc addr= 41 ;................................................................ ; ; Record 4 Operation Code and Data: ; DC I1'cRELOC' ;operation code= cRELOC DC I1'$04' ;# bytes to relocate= 4 DC I1'$00' ;bit-shift operator= none DC I2'MQuitParm-PO' ;offset of code to reloc= 35 DC I2'MQuitName-PO' ;offset to reloc addr= 47 ;................................................................ ; ; Record 5 Operation Code and Data: ; DC I1'cRELOC' ;operation code= cRELOC DC I1'$04' ;# bytes to relocate= 4 DC I1'$00' ;bit-shift operator= none DC I2'AQuitParm-PO' ;offset of code to reloc= 41 DC I2'AQuitName-PO' ;offset to reloc addr= 63 ;................................................................ ; ; Record 6 Operation Code and Data: ; DC I1'SUPER' ;operation code= SUPER DC I4'$04' ;# bytes left in record= 4 DC I1'RELOC3' ;type= RELOC3 DC I1'$01' ;# patches-1= 2 patches DC I1'$05' ;patch 1 offset= 5 DC I1'$52' ;patch 2 offset= 82 ;................................................................ ; ; Record 7 Operation Code: ; DC H'00' ;operation code= END END  ******* 8/08/86 *******;* ProDOS STARTUP *X* BY OWL *u(* COPYRIGHT (C) 1987 *2* BY MICROSPARC, INC. *<* CONCORD, MA 01742 *F***********************P16384Z::D$(4):(21)d9704 n ********** GET HI-RES SCREEN AND SET DISPLAY SWITCHESf x11:3:"MICROSPARC PRESENTS NIBBLE SOFTWARE" 15:13:"PLEASE WAIT..." D$"BRUN STARTUP.SCREEN" G(16297)(16300)(16301)(16304) ********** READ INFO FROM NIBMENU TEXTFILE 11203 P$(20): P$ = PROGRAM NAME a S$(300):S$ = LINES OF TEXT INSTRUCTIONS RC$(20): RC$ = COMMAND USED TO RUN PROGRAM MP$(20): MP$ = PROGRAM NAME TO APPEAR IN MENU D$;"OPEN NIBMENU" D$;"READ NIBMENU" A$: A$ = DISK NAME? NA$"NIBBLE "A$:22:20((NA$)2):NA$:1j 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$ 6I0 @II1:768,S$(I) J(S$(I),1,1)"#"350 T320# ^D$;"CLOSE"` h(1101)6İ1080: ********** UPPER/LOWER CASE ROUTINE r ********** FIRST TEXT SCREEN |::3 "Thank you for ordering the Nibble":A$;"!": "The programs on this disk are:": Z1NP:5:P$(Z):Z 1030:FLAG$"ESC"ī600O  ********** CYCLE THRU NIBMENU TEXT SCREENSW A1` :3 S$(A)"@"İ1030::3:((FLAG$"ESC"))490:600 S$(A)"#"510 S$(A) AA1:460  ********** LAST TEXT SCREEN BEFORE MENU :3!6:"Thanks again for your order !"+12:S6:"ALL PROGRAMS ON THIS DISK ARE"{&6:"COPYRIGHT (C) 1988 BY NIBBLE"06:"MICROSPARC, INC. CONCORD, MA"::17:5:"UNAUTHORIZED COPYING IS ILLEGAL"D1030N ********** SET UP MENU XMEMM2:X$(0)" ":X$(1)"-->":Vb1:1:"Selection: : Instructions"l3:"----------------------------------------";v5:20((A$)2):A$I1ME2:61I:8:I". "MP$(I):61(ME1):8:ME1". Catalog Disk"61ME:8:ME". Quit"B21:"----------------------------------------"23:1:"Type number or use arrows, then ";:PX10:SX4:SL1 ********** SELECT CHOICENSL:OSSL:780:Z0:24:868/1: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ī380SLSLZ(Z10):SLSLME(SLME)ME(SL1)NOS:780:Z10700800 ********** PRINT POINTER SUBROUTINE% 61N:SX:X$(SLOS);:H ********** SELECTION ROUTINEa SL(ME1)İ860:600*SLMEİ900:SL1:780:68042:1:" "::2:1:RC$(SL):> ********** EXECUTE A VALID MENU CHOICEH49168,0::1100:D$;RC$(SL)&R ********** CATALOG SELECTED C\:49168,0::D$;"CAT":mf24:7:"Press to continue";p49168,0:49152,128:z ********** QUIT SELECTED22::958:"Do you really want to quit? (Y/N)";:49168,049168,0:49152,1280(49152)249(49152)217Ĺ49168,0::1100:6j ********** SOUND BUZZER FOR WRONG KEYSTROKE EQ110:EY(16336)(16336):EQ: ********** ERROR HANDLING ROUTINE:(1101)6ė:D$"PR#A$300"5(222)6(222)8Ģ19:(7);"Disk Error. Please insert Nibble disk":1010g19:(7);"An error #"(222)" has occurred. "23:"Press to continue ";:958:49168,0:49152,128:600 ********** WAIT FOR KEYSTROKEFLAG$""623:" for next page or for menu";:49168,0:49152,128T(49152)155FLAG$"ESC"Z$. *********** ATTACH UPPER/LOWER CASE ROUTINE8I013:ML:768I,ML:I:D$"PR#A$300":B ********** DETACH UPPER/LOWER CASE HANDLER L(4);"PR#0":0V ********** INSTALL INPUT-ANYTHING ROUTINEK`X768839:A:X,A::xj ********** INPUT-ANYTHING ROUTINE DATAt 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,216Z 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 DATA 216,201,225,144,6,201,251,176,2,233,31,76,240,253,0  c` ` v`` ` v` `ݥ``8 ``+p|~p|*U*U*U*U*U*S( @?p~px|xժժժժժ pgBT* @?p~px|ЪժժժՊ @?~|>xaFaFF?p- U @?`p~?pxԊԪ"- U*U*U*uP*U*U*U*U*U }<_/" p@Pgp{?"dydw!<MժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U*S* @?p~px|ժժժժժ toBT* @?p~px|xժժժՂ `~}?~|C~axGFx- U @?`p~pp[(U*UA*U*uԪժժժժՊ @ [ժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U*S* @?p~px|ժժժժժ dOBT* @?p~Ap||xժժժՂ `|y #L ~`xCc- Uy(U*U P*U* > @p{?" NԪժժժժժ@ [ժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U* `AB@* @?p~px|ժժժժժ n_?BU* @?p~p|ժժժp}{  3 00C1c. Uz*U*U*U*U*U L @@ " NԪժժժժժtժժժժժժdpO|`*U*U*U*U*U*pp~p|(U*U*U*U*U* `AB@* @?p~px|ԪժժժժN?8` |1U* @?`p~p|ժժժpys # 3 00F1c- Uz*U*U*U*U*U 49N/ p<@Pg@ OorEc{yMԪժժժժժLժժժժժժf~p*U*U*U*U*U*@?@p~p||(U*U*U*U*U* pcBP* @?p~px|Ԫժժժժ_?<< p|G?1U* @?`p~p|ժժժx{w<|sxο+* Tw@*U*U*U*U*U QA"$"p E@_(@ "  Mժժժժժժtժժժժժժf~p*U*U*U*U*U*@?p~Ap||x U*U*U*U*U* pcBP* @?p~px|ԪժժժՊ?~x 0 FA F11U @?`p~p|ժժxsg