8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL LCe! H$q!r! c&L*!M8tl # ) y!s!(&s!t! c&E )?  @ e!l!0 $l!0u!v! c&-) &ۍw!x! c&Эb)0I0 ( d!N)Gi/ h!4 qPRODOS.13 ܬPRODOS.14 ܬPRODOS.NOTESܬFILE.TYPES'qܬPRODOS.08 BܬPRODOS.08.FILESܬPRODOS.09V ܬPRODOS.108ܬPRODOS.11WܬPRODOS.12 ܬPRODOS.12.FILES ܬ ܬ MACHINE........aܬ ܬ TYPE...........b(ܬ ܬ PRODOS.05mi#ܬPRODOS.06o i#ܬPRODOS.06.FILESuܬPRODOS.07 i#ܬFREEWRITERES' &PRODOS<! ,BASIC.SYSTEM'(! STARTUP;FREEWARE?g!qCAT.SORTVmܬ9ͬ0GREAT.CIRCLE...[ >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LLnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNML' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8Rn!o!p! k! iL X%>!L;!ΠΠҠ`}!!!"!!!l4"# G$YO!-q(qR9B}PBiB  !"#$%@~@}J@` ߩ%S @ ~`EhhhѺ0 h ѐ# ѐ ѐ ѐ 0 HϭэLпllllhh8` QSTV'P،h@ihAiȱ@JJJJq@)@1vȱ@Hȱ@Ah@Q@c1e J) LxL LxJiB LxJ) <ҩxNhHHHHL(  аƠx@BEOD  а(`( C)CJJJlBJ,~آ <B*IBGF08Lé'+8H <(h`@؍L3<>=?<>CAB@?A` / L  <>` ڢF]PL8i m L   4< L  BLRAM' hLDLHB-4F 1"aɿ LL@ Nϰ H  @h( L Lh  @`bLJCAB@=?,<ʆ>*=?BC8 é&'112` ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <Lg& 'L&8ei` ,$`ee` `<( '<( '` ' ' '`hh8`8`=(>(F(`}N(`e`H)hJJ'0JJ)` (<  )1& ` (Xp< @1& )m1&1&.1&4& M1&i  ``rȱȱȱȱ0]cȱeem<(ȱ=(ȱ>(=(ȱF(=(ȱN( '<( z' #'Lg&`L' 'L& ' 8f ZHH)hh8JhJJJJJ '&H(&8H) 12 (j21 h!hH h %)Ђ12H)M0 h10200I20h2 9&`L#`)&!2"L  :8! ȱɈ 5   8 0 8 `0 / x X$$ $&$0`ŠӠ­ԠŠҬîʎ1DžϠ)&ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ YYZLYLYLY뿩 8@  *$ MNЩUM  LPN!-RB}PBiB ,m# m# J Qڨ)̰n]e мȱ ; ̀𩠙< iO P F V >Z SY ɘL` X _ [ V7 c L '0%O '8O JmO * 0ōҍJJJJ ɺi) ɺiL9Ҏ )?qr  Ұ Ӱ   |Ґ `l@Hȱ@IHXATjjȱH ɯȩj5H)/@a)_ .0 :A[8@`,j𪭄Б` Ґ L` א@>+)I38j%k&P'Q+)7+I0 ('*A ܰ7<=FG ݰ( ְLݩI* mIH` LI I%0(F)G ݰ ֬+H&F'G ݰ&FF@ 0 [ gLթK8` I8`FHGH ܪhGhF ݰբFF芝 ݰFG ݮI mIHHyHȘI ݰLԩ` ՠ @;@ C@Ю+)m+ʈ@i ]`^C8` @ x3N@) Wڎ ԭi`0 iڰ0GF ݰ#]0 ڰW,0 ] ۩.H hȑNWȮNW8`N΄0NN` װG8`h)N$%^vywz LL⭦ L x L ;ް  0pzJ{ )@~NJOK ;ްiKKzzww xxIJ{ y zJФ̭xJwjHFIH ~HIG~xKE а((H hH h8`8y@ȭz@L;ެ^8NvNO 8} |vJLy`zRzʱLN.MOwxMEKP/zMEKzLCL-}M| Owx,vpyeNNO(`JNKO^L ;ް/  0P L8 | Zߠ^J`L@yȱ@z^ LL`BLLТТТТТТТТТТТТТТТCOPR. APPLE,1983LM Mh@8nЍLЭ 0J @,,L:,LĠԠhhhhIL@Ae \{**ӂӹi|wWIJK,-NOPQRSuHUSTON!' @   !"#$Ԡ͠ˠ9X(K iXXK^ Ko`V8`no` 2 on iI9XX`)HJJJh`OeNeO࿰ i9XАO`@ȭ@` ON ONJKO`HHHHхFG ݐ ` }ͬ ݰFG ݐ` * }% L`FGLݮ 'ܰ8`FHGHi 'ܰihGhF`@Bɼ>K@J5 i`O WݰIha?+JJJJ+)+@` װ%I -I) 0@+`N8`  ) N^ȢV@vVv^@ʈL\ 簞KIJH^Ȣv^vvw)xJn 8 ΐ^ nH8^ ^i 8`L Ӑ L Ӱ )ܹ0 )p )@ )  ^$0&F'G ݰ ح()&'FG ׬^>?@ ; R+) R+ ְ^)%r ݰ`H@h`h`^ IhHIhH  i ` ܰ ii` )0CGHFHBFG ЪhFhG`@5^͔ M @B^i ׭` .^ @#^0 iڮ])`L@.^ 簪HIRH^  PLzEzʱNLMOwxMEKP%zMEKzL2 Owx,vy PveNNO \(` R  F .AxJRHISHI^ HIHI`  .` .A^ HR HS`@Nȱ@O^`^vY}RIR` tVYR t 3 tVR` ^` H  ^h)N@ N; L  ;ް$ )bJ`a f۰ ) H BhL ) . )xJwjISLLՐ`BLڑL COPYRIGHT APPLE, 1983 h@ 0J @L:HUSTONP8H  ): e: y8鰕:Jjjj<)yi8i;i(*=>hP8`;Zx3QTTSRWVUHEVhEhH)IWHPHHHAHHHLaVEWLӿ&()*+,-./0123456789:! !5).莀/ ! !!!!! !!$ ! "<" !!뭳!!!!ILYL 8!9!詍` ! !ՠî򠠠!STARTUP/p$# {  { / XXύX?klmnÍoL) !6L'!(0`670! = ***)<JJH !h穖tp% !Z/݀!!'  &@DEF   %LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'ĝL  LL L)'L L L'L  (L(L $ʩ $$ $L `ީ % XʩXύX X A %  % ɍNH hɛɘɉɈ $ Lc :Lcې)ɮ۰ɺ'Ɲ Lc  : X i % $ɛ$8V%&8V)HV)hH)hHIhդD?DRIDQD); ?JDQD]`MY pY)p  p`FGV 8``8L:HhHh VY>:Y)`;R?AJ;<ȰY)`Y?)`ȐҰ ;HhHh=`Hh `Hh`DEiȍ01ZsDE8T8Wpq 7I꽌ɪ꽌ɭ蠪:VE:8`]V]H)]V])]T])] >8hUD` Y`> Hh݌(`HCJJJJ)*h`0($ p,&"op8`kkV꽌ɪɖxl*k-kmMl 꽌ɪ`8` *L o % YZoY 3 NZ`rZLkZq8r7IZiZkk 8 s q | kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| . .V  JJJJH 8h Ei 8EX`'8`jWC)p> pCYY 轊( ( BV ( p0 \BkJ @i> i'j:ZH i@ioZZH h ȭnWǥBJ 8X>` +>ŠϠŠà͠ӠàԠŬ Gh  l( G쳼󩭙Llid l`H) ZhJJJJ ɺi`  ` .8 `O`S  [AI-Ly !B C ⟩VW 5L壥>  5e>>?́?`>ȥj>>m>` T`m8injkiljo풼i>?Ek?>Q>;>:8o>oȑ>ppȑ>> :op` {KpnͶ @p;=po:i>?Ek?!>Q>>>̀ `` > ̀ `e>>?́?>?Emn(>e>ȱ>e?>Q>ؠ> ie>>?`|;}=:<~:<=;`||m}K`JJJJ8`轚K)` 7#hhL"Jپھ pHJh` {!hgt}~p  `~t}p8n~ni}tpi~~tsLo8pinii>j?k̈́>~|ppn + {pnI:L ؅30,3L]8^933LAAJL ةޘг uv $ 8LЌ Le p>?@`>?@`BQ8`e 矮K ⟩ 䟢 춼LK  z KɍKL"?`  L@3 @LtJ)s@J % `͘?s?,E30ɍФ3 +E3HD F3 Ʉ%h3 M +E  LthɍLL3`3,A0s0% I`O>0O  矢POپھ p AH־Ǿh۰8L"־Jjjjɾ)Ⱦ8 + OL L$L>(F`־ؾپھ׾` Ʉ +KDEF L LK K% ʽ  ٚ,S` w $݅3`(l8L"3L>(Ƀ,`3,G0]ɾ ` w`پ_پ p _پ׾`>( p۾m׾) W)ʩ@`ɾ>(O puȾ ɾ-O c־Jjjj 왻ɠ, XLޭBDEF޾ p 7 ޾ p($ذ (0 U( L?ԦʚLeةީ s +  L ,FL,DLE,C0!3 > Ɉ 3ɾL(3ɾ;Ƀ UB94 H06172839h` 97L75v^͘ ?/( ?LKLLɍ$?`? ɍɥAH93827160hH46576879h`,C Lޛ $0. ɍ  ,S0 ?@ L L btR莪Ta 0a [HT ph(K,Lǧ/A5ʩJ _V zrTJ6LySLا [AJ w@V k38`J" zʩ @V zЧ z ( zЖabT)!J B8`@U)9VJ T)h*I/W) VV }>S ?@$I0 U)VJ *T)`l8`a HbIJhjǾȾɾ p٭b=aIe f`8` yP־ǾҾ,G0C =W)_``\"׾پӾؾھ pD`־ǾY׾ؾOW)ݩȾɾʾ pD`8`W)CB) ۵ 5W) )W)@! pZ}ȾȾ޾,N0MHhHh p' ,N HCNh`M`M N `޾Lp yh־Ҿ,G0^W)TP) ecfdپھ׾ؾӾ p$c d pccddީ 8`ȾɾʾNfne`_ 2Ͼ pH h8`jGMоM  G):_`蹀:`V)8`MN; ;`;C N8` G)̀#:蹀:`V)R y pH h8`Ͼо־ǾҾ_` EӾ pW) |LC`C N `9V) ß ` V) y޾ p` y (8` 8`8`(W)`_V)Ij!؍Í`_ jЭW)з#Ͼ p о־޾Ǿ` 8` 8`ɾ)ɾ̸ ɾɾ0miȾ p pY)ικ`lP y*,N!ǾȾɾʾ pǾ~H Uh8`8`,C U  8` 2ȾɾM$ mHݓǾ phϾ A ԟ ` ])Y 񩢍`Ⱦɾ0Ǿ p)莼 * 6 w= l& l8Hh l` 6Y׾ؾ+پھ p|پɾʾ`HV)jh츾$-ˌھپLp k V)@W0!XY aX6Y7` a YX`X:Y;τ<:: <`:8`'OV)Jj *f a  ԟ  ԟ ⟭ + +:ji  ԟɃ B , ԩ p`SW)0پȾھɾ p p 3LjÍ L I 9 1׾ؾ  p p 3 H h(`׾ؾ`  ߭׾t8퍼mؾŰ펼t폼 L8` `F`4W)ɐ/XYjV) *8` h e`l׾ XYW0V):W׾ؾ_`)0%I0)3]8X^YȰ8` 8` p Ⱦɾʾ8`پھW)@%ZȾ pSɐ"jÍgh I @8gȾhɾʾg׾hؾ  p hgͺ칾`L3V)jC mMjà Lp `VJJ°LyLp *)< LA * LAW)8VJưϥ3 ⟢BT eօ ܬ L s򩣍S3 Ly B# e $L? L Y kimljn`  pg׾mȾXhؾmɾYtѮȾɾ YX`8gM CgIY2m*b6>BSAVERIFYBLOADELETECATALOGOPENWRITEXECREATEFRESFREEWAREuHUSTON!g' '*FREEWRITERA*q! q?/FW.INSTRUCTIONS!?)THREE.DIM i#! ?&SURVEY Ki#! ?&SKETCH1 i-! ?'PRINTER160 130> D$(4):ES$(27):P$D$"PR#1":S$D$"PR#3"F P0g D(49040)((49040)32)32{ "Y((49041)2) ,M((49041)Y2)8((49040)32) 6MI(49042):H(49043) @MI$(MI):MI10MI$"0"MI$ JE0:C0:F0:S$: T:32:"Pr dSK$(100),DA$(100),SD$(10))n2601xSEDS(S2):".";QS0720_KES:J1gIJqLISSK$(I)SK$(L)230T$SK$(I):SK$(I)SK$(L):SK$(L)T$U$DA$(I):DA$(I)DA$(L):DA$(L)U$IISI1170JJ1 JKT,"& F9:"OR PRESS [ESC] TO END.", PN ZD$;"PREFIX /IAC.43/FREEWARE"\ dD$;"CAT"u nD$;"PREFIX /IAC.43"~ x260 (V) L$"" A(40)(41)256 X115 L$L$((AX)128) X (L$,1)" "220 VOV 130 OVR' PROGRAM ONTHIS DISK."~ :"AN ARTICLE ON PRODOS FROM THE WAUKEGAN APPLE USERS GROUP IS ALSO INCLUDED ON THIS DISK." 24:"HIT A KEY TO CONTINUE ";:A$: (: 22:"CHOOSE A PROGRAM WITH THE ARROW KEYS" <6:"THEN PRESS RETURN TO RUN I;P ::"THIS IS A PUBLIC DOMAIN WORD PROCESSOR":"AUTOBOOT DISK CREATED BY "w "LYNN NICHOLSON ON JUNE 30, 1986"D13000:(4);"-/FREEWRITER/FREEWARE/FREEWRITER"dL5LLL"L  KN)_ `@S8` ԠŬLL<[B?I>孓`仫6VtCicQĿUKqtVt Nʮq$6,⨁ K6, VtI=v!gNVt Vt  lg~TŠӠŠҠüϠž(+@ABCDEFGHIKLMNPSV     T[fouu~ՠٯ* PWN*]ĿNTz @n6VC/+A>@I5gN Oz @n[Dz @nd0,~z @`$仫@v$⩔,CTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPENDx{[{0ǭ0hЫ}wA Xw­孶׭fl@@ -!S    !C- !ABELSDFRV@@ !$(19@E i#! ?*CALCULATORwi#!?FW.INSTRUCTIONS ? JȌ `0- I))`Ȅ .! p8 ʠO$0' 6 , 68!79 E) , .! L) #L#Ư` !$0H q5h` #ȹ"J)$iL "L L! # !./A:0` 2,+`8宍,寍, h'$ ,LA, - N,,L,i,j,̢,,h,j,䌞,,,8,,,,, ˚,L(,L,,` ̾,,` , (,,,`,, ,,,, ,L(,ɥ"iLS# *$0 m#LS#+q 4 *? N6 4L+ `鹀+,+0ȹA./0": % , 2+L1 -Ȅť $;ȦŽ  )ߠ8Ū $ , 2 1L4ȹ ' r$ x $ !`L2)$ 2L{)@G )& % ]!L9[ %) )&GHGH`"i#LS#rIr` *L|! * q!? `= ưȹ, 􈈄ȩ` + " :Lq5 /)$)------")` ,` =)LL(`) dȐi iLQ)`8j) ` # #Ȅzxr` )  M% 2% 2wyq !$p 3 ! &L) )L)$p095$r0 )(L(`H '(hL)M6ƭ , , + ]!HH^I "$0  (LX(: " ( "Lk(# " q" "L ` %łŃ )` 2% `$w0 -#)Ȍ$)` (`$wL(潤$)$) J  e '` 'LD'$0H$PH 46 |!? N6L'` $0hh`ȹ ` +( 'F ' ' (',,,-` ($0 +ȹ0H$ 'L' q5L' |! 1J ,L)Hȹ 1 q5h`' , '`  , h` % Hh`HƇƆh`HƉƈh`HƁƀh` 3Hp'©8…8岐 8 Lu&ʐ 8ʰh , 4зeiL%Ƭ 1$L2 % )欘L2 #L2 % 8 "` &L( o5΢G 46 |! 1 $ $L %`ĩ $ $L$` #e慠` # ƇLP%e懠` % ƇƅLo% %L% % &uL$H8儥h``` %`````HƅƅL&$H -$h$`$0H䱰 ɍ 4hĠ$ q5`ń ŅL1))%H$ȱ)  %h % %` %L#$ {3 &Hh` %L#$ {3 %L$$PL&$ $PL&$ %$$$$L$ĩ $槥p榥#AƦ"H U#(&)'hi#"H U#T'(&$ܠ'U(&0Π # #(#)`l6"H U# #hi#LS#"LU## C"#p`((((PPPP #` L% #`aj),`$`$JTL*"U(I`@@((T`$HJhT(`U(`$JT(`U(`HJJJJ z"h) ii0 Hh,M6L $H45 "54Th` ɜɌLe#ɇL]! ɍ=ɓ9,0,ɈƧ Ʀ S#p` ɠ)%2 A"@BCDEFGHIJKLMNOPQRSTU~ S#pʩ_ "`H dȈ8h8` ," #P$ p LR!Jp 2 o5` d!,0`H 46hLt5HH !H)?h@hh``54)?@45`4545 !¤45T`L! "``,0 "L! !b .`--ȹ2 1/-LD-DS - --L - -8JjL.--)p - --- -)-Ƚ/ȹȌ`)`- ũ-L( ƶ-L( +(' , ' ('>),, ,---` -L(!/ ȄȄȄ`q 4Ą *鹀 1\? N6L!. L/#wȹ4A./0: -Hh ȹȹ 1!J J (Cģ (L/ $ 0t. If you make a mistake, press the Delete key. As you type, some of the words will move above the top of the display. You can bring these words into view by moving the cursor. To move the cursor, use the arrow keys. After you move the cursor, you may begi the File Beginning [E] = Jump to the File End [N] = Erase memory [Q] = Quit FreeWriter [V] = Accept commands as letters ESC = Change the page top line.%FreeWriter Typing: The white square is called the Cursor. When you type, the cursor moves to the righFreeWriter, press the control key and a letter key. Here is a list of control-letter keys and what they do: [T] = Show this Tutor [S] = Save from memory to diskette [L] = Load from diskette to memory [F] = Find words [W] = Choose page width [B] = Jump to9 9 8L8 +9HH +9 +9hehe`&`ȹ+- 0:- 8Hh`I0H 9 9 9eeheL99&` e#ԅ9 % " 9 H e#hL9`G 46L!FreeWriter Control: If you want to control  /)Hh`j8ȱJHHjJJJJ 7h) _8h _8 "j8j8j8ȱ 7: "j8L7H/ "hL7)|8ȱ "|8`I "`„ 8 0`&&*  `&&*ŀ`8 8凅8 e JJ * " k8 7! 8 " "ȱHh 7ƂL6,M60 ! "L[7L6 , ")86666 7I ",M60I "L|!M6L2 80Hh 8L7 8  "`ż H "hL7`i' `U+`ͪ `ip`;6<6:6 q5;6<6`M6 '#M6  &L6#:M6Ln6 6 , ė6L(  , - 666 - 8,M60 o5 k8 }8 " 7LL[7 􈈄ȩ`ȹ 1 ` - q5I 8 q5 Lq5$0Hn5m5 "n5m5h`L" ʩ q5 ! Z") i@ٝ  ]!H  W5h $0H #h q5  L5 ` *  09 6+ +I 46Lː䱐Tʥp$0ɠ)(ʈ0/Jɠ)(ʈʥpJʍUɠ)(ʈŋ S#L3TLS# "Lo4 !`8岅`  8H$JhU(`T(`@Ȫ`@Ȫ`=ư`  r3)   ʆť r3 )豮0 $L2`` JA$p {a L3[i (j`$ 2$` 4&peˠΩ" S#$ $2, 4$0! 4L4  ɍ$䲅 ) 󄮥宅寅`$p5 1ȽJ or <2>? <0> will END. ";NZ hN0ī560g mN1380t nN2380 rN1N2ĺ:"WRONG DRIVE, TRY AGAIN" vX1700:X w340 |:" Sort or No-sort? ";B$ B$"N"B$"n"B$"S" 600:>LNQRWӠ[F]ind:RETURN=Proceed / Y=Replace Press RETURN to ExitOne Moment - Adjusting Your File Blocks Remain Memory is Full (Press RETURN) Name No) ? Enter File Name : Enter Volume Name :Delete old $ (Yes/No) ?&'ɯϠ(+.@DEFGHIJne. (Press ESC to quit the tutor, or press RETURN for more) :[@][B][E][F]ind [H][J][K][L]oad(?=Catalog) [N]ew (Erase Memory) Yes/No ?[Q][S]ave(?=Catalog) [T] [U][V][W]idth &i%%/$$$ .1&+9$*5Quit FreeWriter (will lose memory contents) (Yes/40 are permitted, and horizontal scrolling keeps the cursor in view. The [Q]uit Command: Always save your typing before using [Q]uit. ESC: Press ESC while editing to show a position scale at the page top. Press ESCAPE again to remove the display top liif you want to replace 'thier' with 'their'. If you put an 'A' at the end of your entry: [F]ind :!thier!their!A the replacement will be automatic.%The [W]idth Command: To select display width, press Control and 'W', then enter a number. Widths from 1 to 2arch to the right and down the page for 'word'. Because the search moves to the right and down, jump to the beginning using [B] when you want a complete search. This example: [F]ind :!thier!their! will search for 'thier'. If it is found, you will be asked ing with '.'. If you place an 'a' at the end (example: [L]oad :MYFILE!The!.!A) you will get all segments of the file that have the markers.%The [F]ind Command: To Find some words in your typing, press Control and 'F'. This example: [F]ind :!word! will se) You now may enter a volume name or drive specifier. (Examples: '/MYDISK','.D1.S6') or just press RETURN for a catalog. Here is how to load part of a file: Example: [L]oad :MYFILE!The!.! This entry will load part of the file beginning with 'The' and endsed in [S]ave and other commands where entry separation is needed.%The [L]oad Command: To load a file into memory from disk, press Control and 'L'. Then type in a name. If you can't remember the name, type '?' and press RETURN (this works for [S]ave also. Place the cursor at the beginning of the part to be saved, then enter an ending mark along with the file name: [S]ave :MYFILE!endmark! NOTE: The '!' in the entry are called 'delimiters.' They separate the file name from the ending mark. Delimiters are usave some typing to disk, press Control and 'S'. Then type a file name. If that name has already been used, you will be asked whether you want to delete the old file. Enter 'Y' if you do.%The [S]ave command (continued) Here is how to save part of a file: 620. :" Screen or

Printer? ";A$J A$"P"A$"p"ė:450Y A$"P":P$u P0ĺ(27)"0"(15):P1~ 780 :L1$: L2$:L3$:730 C0510 ID1C 600:L1$L1$SD$(ID):620 :580:L1$:730: 580:(L5$,64);" FILES: "F A$"P"ĺS$8 :"MORE (Y,N) ? ";A$O A$"N"A$"n"560X &330s 0P1ĺP$:(27)"@":S$ ::" F i n i s ! ": DA$"P"ĺP$ N XD$"PREFIX,D"N bD$"PREFIX":L1$: lD$"OPEN "L1$",TDIR" vD$"READ "L1$ L1$:";I$;"' LAT."9" and ";D1;" DEGREES '";K$;"' LONG."C1010\:"SATELLITE: ";S2$"LOCATION: ";D1;" DEGREES '";K$;"' LONG.":"AZIMUTH from ";S1$;" to ";S2$;" is ";F;" DEGREES.X$"P"ĺ"AZIMUTH from ";S2$;" to ";S1$;" is ";G;" DEGRE0(N)))NpQQR3zO90Q:O((10O.5))10M"PRINTER, (Y/N) ";P$\P$"Y"Ċ1y:A$"GREAT CIRCLE":370:S1$;" at ";A1;" DEGREES '";H$;"' LAT."" and ";C1;" DEGREES '";J$;"' LONG."X$"S"990:S2$;" at ";B1;" DEGREES ' (DC)0F360F@GT(((A)(B)(E))((E)(B)))P GGR:EERg*(CD)0G360G}4F((10F.5))10>G((10G.5))10HL((111.1210E.5))10RM((69.0510E.5))10\E((6010E.5))10 fQ(3960(N)(26260396"ĺ:"SATELLITE and LOCATION"9 X$"S"ĺ:"SAT ";S2$M :"LONGITUDE:"W 1160j DW:D1D:DDR "East or West ";K$ I$"S"BB K$"E"DD ET((A)(B)(A)(B)(DC)) NE FT(((B)(A)(E))((E)(A)))FFR$"S"AA :"LONGITUDE:"* 1160= &CW:C1C:CCR[ 0"EAST or WEST (E/W) ";J$l :J$"E"CCt D: NX$"S"ī650 X"SITE 2 ";S2$ b:"LATITUDE:" l1160 vBW:B1B:BBR "North or South ";I$ X$"S"B0:B10 X$"S( " Type in 1st location name,"F " then press ."L _ "SITE 1 ";S1$ :" Inter Co-ordinates in DMS or DEG" " 30,29,60 or 30.5,0,0" :"LATITUDE:" 1160 AW:A1A:AAR "NORTH or SOUTH (N/S) ";H$ Hion and" ," distance."? 6:"[P] Point to Point (M/W)"` @"[S] SATELLITE { Az & El }"f J T"CHOOSE and Press ";X$ ^X$"S"X$"P"ī400 h160 r CENTER STRING A$ |B(20((A$)2)):B0B1 B:A$:  for GOTO Z0 for H-P 87"0 "VERSION 3.1 for APPLE //e"8 :V 2:A$"GREAT CIRCLE":370w 4:A$"By: RED DeGROAT":370 5:A$"13 JUN 82":370 7:A$"V.3.1 for APPLE //e":370 9:"M/W & SATELLITE ANTENNA positioning." ""Point to Point directdnP4(1)xP1P2*P22P6RP180TT(X)(X(XX1))P1i" GREAT CIRCLE"" M/W & SATELLITE ANTENNA""and NAVIGATION direction""By: RED DeGROAT, 13 JUN '82""VERSION 1.0 for SHARP PC-1211" "VERSION 2." (DIRECTORY EMPTY)"):A$"P"ĺS$/k 28:4:"DATE: ";M;"/";D;"/";Y;" TIME: ";H;":";MI$:dE0 L2$:L3$ L4$, L4$""710T EE1:SK$(E)(L4$,2,15):DA$(E)L4$ (L4$,18,3)"DIR"CC1:SD$(C)(L4$,2,15) 660 B$"S"ĺ"Now sorting "L1$".";:120 L5$::D$"CLOSE ": 580:FFE E0āI1E:DA$(I):E0ĺES."IX$"P"ĺ:"DISTANCE: ";M;" S.Mi. or ";L;" KM or ";E;" N.Mi."wX$"S"ĺ:"ELEVATION is ";O;" DEGREES.":$0."[1] ANOTHER? same SITE 1"8"[2] ANOTHER? All NEW"B"[3] BACK to MAIN MENU"L"[4] E N D" V"INPUT 1,2,3 or 4: ";Y$`Y$"1"ī580/jY$"2"ī160PtY$"3"ĺ(4);"RUN CALENDAR"V~~"INPUT DEGREES, Minutes, Seconds:"W1,W2,W3W0WW1W260W33600W10:W20:W30 NUMBER 7 6 5 4 3 2 1 0 +-----+-----+-----+-----+-----+-----+-----+-----+ | ,DR | ,SLOT | not used | +-----+-----+-----+-----+-----+-----+-----+-----+ NOTE: The UNIT_NUMBER that appears in - COMMAND: 0 = STATUS request 1 = READ request 2 = WRITE request 3 = FORMAT request NOTE: The FORMAT code in the driver need only lay down address marks if required... the calling routine should write the "virgin directory and bit map". $43 - UNIT (Must be on) Bit 0 = The device's status can be read (Must be on) $CnFF = The low-byte entry to the driver routines... ProDOS will replace $Cn + this byte in the global page. The locations where the call parameters are passed to the driver are: $42 the drive vector!) Bit 7 = Medium is removable. Bit 6 = Device is interruptable Bit 5-4 = Number of volumes on the device (0-3) Bit 3 = The device supports formatting Bit 2 = The device can be written to Bit 1 = The device can be read from for writing the disks's bit map and directory header after formatting. (If this location is $0000, it indicates that the number of blocks must be obtained by making a STATUS request.) $CnFE = The status byte (bit 0 and 1 must be set for ProDOS to install2 = $D0 Five S1,D1 = $10 S1,D2 = $90 Physical S6,D1 = $60 Slot S6,D2 = $E0 Six S2,D1 = $20 S2,D2 = $A0 The special locations in the ROM code are: $CnFC - $CnFD = The total number of blocks on the device. Used ed into slot 5 or 6 may be installed in slot 1 or 2 locations. There will be no conflict with character devices physically present in these lots. Device numbers for four drives in slot 5 or slot 6 are listed below: Physical S5,D1 = $50 Slot S5,Df blocks on the device in the X-register (low-byte) and Y-register (high-byte). If you wish to interface a disk controller card with more than two drives (or a device with more than two volumes), additional device driver vectors for disk controllers plugg READ or WRITE. If it is not, the carry should be set and the appropriate error code returned in the Accumulator. If the device is ready for a READ or WRITE, then the driver should clear the carry, place a zero in the Accumulator, and return the number o15:H2(H)::22:"HITS:";C:C25ıd::21:" ABCDEFGHIJKLMNOPQRSTUVWXYZ":Z12:21:29:"SCORE:"S:I19:AX(I):BY(I):T192A:K(16384):(B40NTKA0)2:BBN:15:A,B:0:A,BN:X(I)A:Y(I)B::Z1:& N1:0:A,B:A((1)26)1:CC(B40N):SS(TK):BN:H16336(TK):H1dQZ(64435)(64448)^nA$("c e-ENHe-OLDPLUS ",15((QZ229)(QZ239)(QZ240)),5)x" Machine is APPLE //";A$ the device list (DEVLST) in the system globals will include the high-nybble of the status byte ($CnFE) as an I.D. in its low-nybble. $44 - $45 - BUFFER POINTER: Indicates the start of a 512-byte memory buffer for data transfer. $46 - $47 - BLOCK NUMBER: Indicates the block on the disk for data transfer. The device should report errors by setting the carry flag and loading the error code into the Accumulator. The error codes that should be implemented are: $27 - I/O error $28 - No device connected $npplesoft. If you find regular need for an additional command, you can write your own command handler and attach it to BASIC.SYSTEM through the EXTRNCMD jump vector. Just install the address of your routine in EXTERNCMD+1 and +2 (low-byte first) and you'r PRODOS TECHNICAL NOTE #6 Attaching External Commands to BASIC.SYSTEM (Revised 19 September 1983) Whenever BASIC.SYSTEM receives a command, it first checks its command list, then sends it out to any external command handler and finally passes it on to APRODOS TECHNICAL NOTES #5 This technical note is not reprinted because it deals with the Disk Formatter and Builder programs, which are available only to licenced developers. all the addresses at their destination yourself. or COUT1 routine), and $BE32-$BE33 should contain the input address (normally $FD1B, the monitor KEYIN routine). By keeping these vectors in a global page, a special routine for moving the vectors is no longer needed, thus, no $3EA instruction. Just install. So what do you do? Just leave the ProDOS Basic Command Interpreter's intercept addresses installed in $36-$39 and install your I/O addresses in the global page at $BE30-$BE33. $BE30-$BE31 should contain the output address (normally $FDF0, the monitiall your I/O routine addresses in the character-out vector ($36-$37) and/or key-in vector ($38-$39), and notify DOS (JSR $3EA) to take your addresses and swaps its intercept routine addresses in. Under ProDOS, there is no instruction installed at $3EA at PRODOS TECHNICAL NOTE #4 Notes on Transporting DOS Assembly Language Programs to ProDOS (Redirecting I/O and Converting "JSR $3EA") (26 July 1983) When programming under DOS 3.3, if you wished to change the I/O hooks, all that was necessary was to inst29 - Write protected e linked in. There are essentially three functions that your routine must perform: 1) It must check for the presence of your command(s). 2) If it is your command, it must let BASIC.SYSTEM know. 3) It must execute the desired instructions expected of the vCNUM EQU $BE53 ;CI cmd no. (ex cmd = 0) PBITS EQU $BE54 ;Command parameter bits XRETURN EQU $BE9E ;Known RTS instruction MSB ON ;Set hi-bit on ASCII ; LDA #>BEEP ;Install the address of our STA EXTRNCMD+1 ; command handler in the LDA # back to CI INX ;Next character CPX #CMDLEN ;All characters yet? BNE NXTCHR ;No, re STA XCNUM ; zero (external) LDA #%00000100 ;Indicate drive and slot STA PBITS ; may be accepted. CLC ;Everything is OK RTS ;Return to BASIC.SYSTEM ; EXECUTE LDA VSLOT ;Get slot parameter AND #%00001111 ;Zero the high bits TAX ;Transfer to inde Modified Time Length YNA [ This Program is Freeware ] You are free to distribute copies but you may not sell them. The Freeware Project Walden Software, Inc. (C) P. Lutus 1984 FREEWRITER MEMORY ?% USED [T]UTORTCHR ;No, read next one. ; LDA #CMDLEN-1 ;Our cmd! Put cmd length STA XLEN ; -1 in CI global XLEN LDA #>EXECUTE ;Point XTRNADDR to our STA XTRNADDR ; command execution LDA # back to CI INX ;Next character CPX #CMDLEN ;All characters yet? BNE NX{CNUM EQU $BE53 ;CI cmd no. (ex cmd = 0) PBITS EQU $BE54 ;Command parameter bits VSLOT EQU $BE61 ;Verified slot parameter MSB ON ;Set hi-bit on ASCII ; LDA #>BEEPSLOT ;Install the address of our STA EXTRNCMD+1 ; command handler in the LDA #XRETURN ;Point XTRNADDR to a known STA XTRNADDR ; RTS since we'll handle LDA # Go on. DEY ;No-> try the next one. BPLenvironment. AND #%00110000 ;Mask to check for 128K. CMP #%00110000 ;Is it 128K? BNE DONE ;No-> There is no /RAM. * LDA $BF26 ;Compare Slot 3 Drive 2 and STA ADDRESS ; Drive 1 addresses. CMP $BF16 LDA $BF27 ;If same, then no /RAM is STA ADDRESS+1 * /RAM Disconnect Program * ProDOS TECHNICAL NOTES * (C) Apple Computer Inc. * DEVCNT EQU $BF31 ;Device count DEVLST EQU $BF32 ;Device list MACHID EQU $BF98 ;Machine ID byte. * ORG $2000 ;Program start at $2000 (for example) * CHECK LDA MACHID ;Check PRODOS.08.FILESuHUSTON!' 'RAM.DISC.SOURCEjRAM.DISCONNECTJQj RAM.CONN.SOURCEjRAM.CONNECT.OBJMjQ >o note that even though most of the parameter table is reserved for future use, it must all be present! It must consist of seven bytes... a $04 followed by six nulls ($00). 4 DFB 0 ;0 is the only quit type DW 0000 ;Pointer reserved for future use. DFB 0 ;Byte reserved for future use DW 0000 ;Pointer reserved for future use It is most important t. Execute a ProDOS system call number $65 as follows: EXIT JSR PRODOS ;Call the MLI ($BF00) DFB $65 ;CALL TYPE = QUIT DW PARMTABLE ;Pointer to parameter table PARMTABLE DFB 4 ;Number of parameters isNT ;Decrement the device count DONE EQU * )00H&? '@ 412)p00#2A 32&'1 to let you and the operating system know just what kind of information is stored within a file. Sometimes file types make important distinctions on how the data within them is to be treated and sometimes it is just for informational purposes. Both DOS 3A PRO LOOKS AT PRODOS Curt Rostenbach The WAUG - Waukegan Apple Users Group Vol 2 No 10 October 1984 This article will discuss some of the new commands in ProDOS and some of the tile types that these commands use. File types are codes used12)p0=? &@ '1112A 2)CBDE `l&<$9400 ; boundary. STA $45 ; ($9400 for example.) STA $C080 ;Toggle correct bank on JSR DRIVER ; and call the Driver STA $C081 ; and toggle bank back DONE1 RTS DRIVER JMP (RAMDRIVE) ;Jump to the driver ; done one. BNE LOOP1 LDA NUMBER ;Restore the device STA DEVLST ; number. AND #%11110000 ;Set up parameters for STA $43 ; a format request. LDA #3 ; (3=format) STA $42 LDA #>$9400 ;Need a 512 byte buffer STA $44 ; somewhere on a page LDA #* LDA ADDRESS ;Restore the driver STA RAMDRIVE ; address in the Slot LDA ADDRESS+1 ; 3 Drive 2 vector. STA RAMDRIVE+1 INC DEVCNT ;Increment the device count. LDY DEVCNT LOOP1 LDA DEVLST-1,Y ;Move all entries STA DEVLST,Y ; in the device list DEYm /RAM.DISCONNECT * ORG $2051 ;Start after /RAM.DISCONNECT * CHECK1 LDY DEVCNT ;First check to see if LOOP0 LDA DEVLST,Y ; Slot 3 has anything AND #%01110000 ; installed. CMP #$30 BEQ DONE1 ;If so, we're done. DEY BPL LOOP0 ;Else, continue search. * /RAM Connect Program - * ProDOS TECHNICAL NOTES * (C) Apple Computer Inc * RAMDRIVE EQU $BF26 ;/RAM Driver (May be elsewhere) DEVCNT EQU $BF31 ;Device count DEVLST EQU $BF32 ;Device list ADDRESS EQU $203F ;From /RAM.DISCONNECT NUMBER EQU $2041 ;Fro.3 and ProDOS use file type information in their catalogs and in handling the data within files. Under DOS 3.3, we have file types A, I, B, T, S and R. "A" is for Applesoft BASIC, "I" is for Integer BASIC, "B" is for Binary and "T" is for Text. "Rersa. ProDOS has an "intelligent" RUN command. Say you had a file on the disk called "GLOPS". To execute that file you could catalog the disk and see what thpe it is, so you can then type "EXEC GLOPS" or "RUN GLOPS" or "BRUN GLOPS". But to save a lot o course, the niftiest is "-", called "dash". This is one of the most important of the lot. Didn't you get tired of "FILE TYPE MISMATCH" under DOS 3.3? I did. I hated seeing that silly thing after I typed "RUN" for a file that had to be "BRUN" or vice v space is available and how much space is used in how many files. You can specify directories and subdirectories, or use the old drive selection paramters. To go with some of the new file types, there are now commands that create or use them. Ofives all the gruesome gory details of who, what, when, where and how big. [See the listings for the BASIC Programmers Disk from Apple Computer.] Both catalog commands can be stopped with CONTROL-C, and both give those nice to know statistics like how mucha random access file with the default record size being that which is listed. To see the files on a disk, you now have two catalog commands, 'CAT' and 'CATALOG'. 'CAT' produces a short form 40-column display, while 'CATALOG' is for 80-columns and gams vs. 'BIN' which is used for Binary data (but can still be used for programs). 'TXT' files have an extra attribute that gives the record size used to create the text file. If R=0 on a 'TXT' file, then the data is sequential. If R>0, then the file is ine your own file types for those special files that don't fit any of the established categories. For the files that have been pre-established, ProDOS tries to clear up many of the ambiguities of DOS 3.3 file types. 'SYS' files are for binary progrypes such as TXT and BIN. But ProDOS and SOS also have file types they do not share. they also have a great many file types that have been defined and not used, as well as file types that are reserved for future use. Both ProDOS and SOS allow you to defoes, 'INT' will be used like 'I'. ProDOS has several new file types: 'DIR for subdirectory information, 'SYS' for System files, and 'VAR' for Applesoft Variable files. Since ProDOS is a near relative of Apple SOS, they share many file types- file t SYS, REL, VAR and DIR. 'TXT' is for text, the same as DOS 3.3 'T' files. 'BIN' is for Binary, like 'B'. 'BAS' is for Applesoft BASIC, same as 'A'. 'REL' is 'R', the Relocatable binary files. ProDOS does not support Integer BASIC, but when and if it de?" ProDOS has many more file types and potential file types (up to 256!) Internally, ProDOS file types are numbers, but the catalog routine translates many of the numbers to three letter mnemonics. Under ProDOS, the major types are TXT, BIN, BAS,"B" and "T" files required a little knowledge on the user's side. "Is that 'B' file a program or a Hi-res picture?", or "Is that 'T' file to be EXECed, or is it data? And if it is data, is it random access? If it is random access, what is the record siz" and "B" file types; these were possibly for software protection but were never used (except by hackers to confuse people). File types "A" and "I" told DOS 3.3 which BASIC had to be operating in order for the program in the file to work properly. " is for Relocatable binary files, which were poorly supported. "S" was never officially used by Apple Computer, maybe it was supposed to be Source, but the pirates generally used it to contain broken program code segments. And there were also another "Af bother (and typing!), "- GLOPS" would leave it up to the operating system to decide which is appropriate. In fact, you have to use the "-" dash to get the SYS files to execute. I wish 'dash' was a little more intelligent so it could handle subdirectories as well, but there is another advantage of ProDOS over DOS 3.3 in that new commands can be added to the system- with the system's permission. DOS 3.3 had a 'CHAIN" command to allow parts of a program to be stored seperately on disk and linked togct 1 PRACTICE 10/01/83 00:00 10/01/83 00:00 512 *Direct 3 PROGRAMS 10/01/83 00:00 10/01/83 00:00 1536 *Direct 1 DATA 10/01/83 00:00 10/01/83 00:00 512 *Direct 1 EXTRAS 10/01/83 00:00 10/01/8EM 11/15/83 00:00 11/15/83 00:00 10240 *AsfBAS 7 STARTUP 10/01/83 00:00 10/01/83 00:00 2718 *Binary 5 HELP 10/01/83 00:00 10/01/83 00:00 1537 *Text 60 HELPSCREENS 10/01/83 00:00 10/01/83 00:00 358656 *Dire/01/83 00:00 512 33 Blocks Available of 280 Total EXAMPLES (00/00/00 00:00) V000 Type Blocks Name Created Time Modified Time Length *System 31 PRODOS 01/01/84 00:00 01/01/84 00:00 15360 *System 21 BASIC.SYST*Direct 3 PROGRAMS 10/01/83 00:00 10/01/83 00:00 1536 *Direct 1 DATA 10/01/83 00:00 10/01/83 00:00 512 *Direct 1 EXTRAS 10/01/83 00:00 10/01/83 00:00 512 *Direct 1 DIRECTORY 10/01/83 00:00 10UP 10/01/83 00:00 10/01/83 00:00 2718 *Binary 5 HELP 10/01/83 00:00 10/01/83 00:00 1537 *Text 60 HELPSCREENS 10/01/83 00:00 10/01/83 00:00 358656 *Direct 1 PRACTICE 10/01/83 00:00 10/01/83 00:00 512 MPLES (00/00/00 00:00) V000 Type Blocks Name Created Time Modified Time Length *System 31 PRODOS 01/01/84 00:00 01/01/84 00:00 15360 *System 21 BASIC.SYSTEM 11/15/83 00:00 11/15/83 00:00 10240 *AsfBAS 7 STARTefix by giving a root pathname, like "PREFIX /GAMES/ADVENTURE/ZORK.SERIES" and really save on the typing later. But, once again, remember that subdirectories are generally used only on hard disk drives and are not needed on floppy disks. EXAAnd, if you have subdirectories, when you give a partial pathname (ie. a name that does not begin with a "/"), it appends it to the current prefix. Thus, "PREFIX ADVENTURE" would return "/GAMES/ADVENTURE" as the prefix. Finally, you can set the entire prthe prefix to the root directory of the disk in that drive unit. For example, if "/GAMES" was in Drive 2, "PREFIX,D2" would set the prefix to "/GAMES". That way, to run Space Invaders you just type "-SPACE.INVADERS" instead of "-/GAMES/SPACE.INVADERS". elf will return the current prefix. If you have just booted or cataloged a disk, the prefix would be then name of the disk (ie. the "root directory"). If you used a drive specifier like "Dn" (for Drive number n), or "Sn" (for Slot number n), it will set prefix is a string of characters that is tacked onto the beginning of a pathname (if you didn't specify a root directory) to save you a lot of typing. "PREFIX" is another intelligent command; how you use it will determine what it will do. "PREFIX" by itsurrent state of the variables in an Applesoft BASIC program, you have to "STORE PATHNAME" and to return them with "RESTORE PATHNAME". "PREFIX" is used to determine the current pathname prefix, or to set the prefix to another pathname. The pathname ou can save your variable names AND their contents to a file, to be restored later or passed on to another program. Game programmers will make use of that feature a lot, or business programmers who want to have an "undo" option. If you want to save the cether for execution. Under ProDOS, it works for Applesoft BASIC. Applesoft BASIC programmers now have the ability to "snapshot" their variables in a program to or from a "VAR" file with the commands "STORE" and "RESTORE". What that means is that y3 00:00 512 *Direct 1 DIRECTORY 10/01/83 00:00 10/01/83 00:00 512 33 Blocks Available of 280 Total IAC.43 (00/00/00 00:00) V000 Type Blocks Name Created Time Modified Time Length *System 31 PRODOS 00/00/00 00:00 00/00/00 00:00 15360 *System 21 BASIC.SYSTEM 00/00/00 00:00 00/00/00 00:00 10240 AsfBAS 4 STARTUP 00/00/00 00:00 00/00/00 00:00 1335 *Direct 1 FREEWARE 03/07/00 00:00 00/00/00 00:00 512 *Text APHICS MODE :3 L04 READ IMAGE POINTB "DI%(L,0)N ,D1ı\ 6XI%(L,1)j @YI%(L,2)x JZI%(L,3) TTRANSFORM POINT ^I13 hT(I)(M(1,I)X)(M(2,I)Y)(M(3,I)Z) rI |Z(T(3)BZ300)13 XOX(T(1)BXZ) YOY(T(11)# "THE FREEWARE PROJECT"/ :(11)L "WALDEN SOFTWARE, INC."X :(12)r "(C) 1984, P. LUTUS" PAUSE02500: 770 THIS SECTION TRANSFORMS EACH 3D IMAGE POINT, THEN DRAWS THE LINES 490 SET UP GR (27);:(17):40 COL.% :> V1:40:V24:40:60\ ((V):(1):X139:"_";:b 2p <(5):(7) F"[ THIS PROGRAM IS FREEWARE ]" P::(4) Z"YOU ARE FREE TO DISTRIBUTE COPIES" d:(8) n"BUT YOU MAY NOT SELL THEM." x(18): WRITER II": 2"WILL HAVE NO DIFFICULTY LEARNING TO USE"::"FREEWRITER";::". IN ADDITION, A TUTORIAL IS ACCESSIBLE BY ENTERING THE [T] OR CTRL-TCOMMAND." <::"FREEWRITER";::" WORKS BEST WITH AN APPLE //E OR APPLE //C, MAKING USE OF THE SPECIA FREEWRITER INSTRUCTIONSI::9::"FREEWRITER INSTRUCTIONS":W34,3:: (:"FREEWRITER";::" IS A PRODOS-BASED WORD PRO- CESSING PROGRAM BY PAUL LUTUS (OF APPLE-WRITER FAME). BECAUSE OF ITS HERITAGE, ANY USER FAMILIAR WITH ";::"APPLEText 5 PRODOS.13 00/00/00 00:00 00/00/00 00:00 1546 *Text 7 PRODOS.14 00/00/00 00:00 00/00/00 00:00 2830 9 Blocks Available of 280 Total .10 00/00/00 00:00 00/00/00 00:00 1592 *Text 6 PRODOS.11 00/00/00 00:00 00/00/00 00:00 2135 *Text 7 PRODOS.12 00/00/00 00:00 00/00/00 00:00 2699 *Direct 1 PRODOS.12.FILES 07/03/00 00:00 11/11/84 00:00 512 *23:35 00/00/00 00:00 3501 *Text 10 PRODOS.08 00/00/00 00:00 00/00/00 00:00 4418 *Direct 1 PRODOS.08.FILES 06/10/00 00:00 00/00/00 00:00 512 *Text 7 PRODOS.09 00/00/00 00:00 00/00/00 00:00 2646 *Text 5 PRODOS 1074 *Text 1 PRODOS.05 11/09/84 23:35 00/00/00 00:00 177 *Text 7 PRODOS.06 11/09/84 23:35 00/00/00 00:00 2714 *Direct 1 PRODOS.06.FILES 05/21/00 00:00 00/00/00 00:00 512 *Text 8 PRODOS.07 11/09/84 4 PRODOS.01 11/09/84 23:35 00/00/00 00:00 1389 *Text 5 PRODOS.02 11/09/84 23:35 00/00/00 00:00 1653 *Text 10 PRODOS.03 11/09/84 23:35 00/00/00 00:00 4374 *Text 4 PRODOS.04 11/09/84 23:35 00/00/00 00:00(2)BYZ)2 DISPLAY LINE (OLD X,Y TO NEW X,Y)> D440M LX,LYX,Y[ LXX:LYYu REPEAT FOR NEXT LINE LL1 290 PRINT ERROR MESSAGE AND RETURN 1400 "IMAGE TOO LARGE (RETURN) :";L$ 910  THIS SECTION FILLS THE MATRIX WITH 7 THE TRIG VALUES FOR (AX,AY,AZ)= &] 0CONVERT DEGREES TO RADIANSy :AXDXF:AYDYF:AZDZF DGET TRIG VALUES FOR EACH ANGLE NSX(AX):CX(AX) XSY(AY):CY(AY) bSZ(AZ):CZ(AZ)lFILL MATRIX WITH TRIG VALUES):  "NE","SE","SW","NW"( TP16 ":(12);A ,420: 6"E)nter P)lot A)djust I)nsert D)elete C)hange N)ew L)oad S)ave Q)uit:"; @L$ J370 TL$ ^540 h290 rL$""ı |L(L$) L95LL32 L$(L)  TP144) "THE FREEWARE PROJECT"+ :(31)H "WALDEN SOFTWARE, INC."T :(32)n "(C) 1984, P. LUTUS" PAUSE02500: D$(4) HT1403 F57.29577951 D$;"PR#3" Q(40):D(40):M(40):S(40):L(40) Q$(4) X14 Q$(X D$(4):D$;"PR#3" 7 V1:40:V24:40:60U ((V):(1):X179:"_";:[ 2j <(5):(27) F"[ THIS PROGRAM IS FREEWARE ]" P::(24) Z"YOU ARE FREE TO DISTRIBUTE COPIES" d:(28) n"BUT YOU MAY NOT SELL THEM." x(18):(31J1,0,100,0%T1,100,-100,-100A^MARK LOWER RIGHT FRONTTh0,100,-100,80gr1,80,-100,100o|-1'FORMAT: (1=DRAW,0=MOVE),(X,Y,Z)EIN CARTESIAN COORDINATESZLAST ENTRY = -1p0,-100,-100,-1001,100,-100,-100 1,100,-100,1001,-100,-100,100 "1,-100,-100,-100,1,0,100,061,100,-100,100 @0,-100,-100,100 TER ";P$;" (NOW ";V;") (NO ENTRY=SAME):";6P"";L$JZL$""V(L$)PdonCLEAR TEXT PART OF SCREEN{x:(21)READ IMAGE TABLEL0I%(L,0)I%(L,0)1ıI%(L,1),I%(L,2),I%(L,3)LL1:1450IMAGE TABLESXBX:YBY:ZBZ 13103BXX:BYY:BZZ9USELECT ROTATION ANGLEShXDX:YDY:ZDZr1310DXX:DYY:DZZ CONSOLE INPUT PROCESSORP$"X":VX:1350:XV(P$"Y":VY:1350:YV2P$"Z":VZ:1350:ZV<+F"EN1120$L$"P"1160).L$"S"1210:8L$"A"1260cBL$"Q"ĉ::(4);"-/IAC.43/STARTUP"iLVFILL MATRIX & DRAW IMAGE`570j240t~SELECT SCREEN OFFSETSXOX:YOY:Z01310OXX:OYYSELECT IMAGE SCALE"[ FREEWARE 3D IMAGE PROGRAM (P. LUTUS) ]"\"[D]RAW,[P]OS,[S]CALE,[A]NGLE,[Q]UIT:";dL$sL$""910C(L$)C96CC32L$(C)L$EXECUTE COMMAND & RETURN1040910COMMAND DECODER 1400L$"D"& CONSTANTS "X0:Y0:Z0:D01 I%(100,3)=M(3,3)G T(3)Z*BX7:BY7:BZ7o4DX20:DY20:DZ0>OX140:OY70HF57.29577951R1400\GO READ IMAGE TABLEf1430pDRAW THE IMAGEz1120GET CONSOLE INPUT 1400/vM(1,1)CZCY M(2,1)SZ1M(3,1)SYCZKM(1,2)SXSYSZCXCY\M(2,2)CZCXwM(3,2)CYSXSYSZCXM(1,3)CXSYSZCYSXM(2,3)CZSXM(3,3)CYCXSXSZSYMAIN PROGRAM LINESET UP INITIAL VALUES 0 "(no survey entries)":U "# Quadrant Degrees Minutes Seconds Feet"[ i X1TP1q X; HT,4:Q$(Q(X)); HT,14:D(X); HT,23:M(X); HT,32:S(X); HT,41:L(X) : L$"A"PL0 &L$"E"660 0L$"I"1010 :L$"D"1150* DL$"C"1240; NL$"S"1290L XL$"L"1530] bL$"Q"1800n lL$"N"1870 vL$"P"1910 L$"A"2470  :420 PTP:700 VTPTP1:660  V0 DL770  "Entry ";P "QuMI)))60)P MI(MI)DZ Q(T)QI:D(T)DI:M(T)MI:S(T)SI:L(T)PMJd which line:";L$ L$""ı* T(L$)< T1TTP1ıN XVXV:YVYV] CR1:2000f CR0z QI1((PA90)) PA180PA360PA PA90PA180PA( PAPA1.38889E42 PM(((PM100).5))100< DI(PA):MI(PADI)60 F SI((MI((P1:2V XP140((XVXF)SC):YP80((YVYF)SC)?` SP2430Kj XP,YPQt Z~ SP0 XP3,YP3XP3,YP3XP3,YP3XP3,YP3XP3,YP3 XP,YP  :PL2500 "You must (P)lot before (A)djusting (press RETURN):";L$  "Adjust "Small Square = Beginning Point (Press RETURN):";L$?PXHXVXHXVaXLXVXLXVrYHYVYHYV YLYVYLYV  XF(XHXL)2:YF(YHYL)2$ XS(XH)(XL):YS(YH)(YL). SC150YS8 XS(YS1.75)SC270XSB :3L S(OAPA)F))2) ROAPA:OMPM*\CRı8fPFİ2280GpPFİ2390NzTXPFıd:(21)"Closure Error: X=";XV;" Y=";YVA(AR)BA43560A(((A100).5))100B(((B100).5))100"Area ";A;" Sq. Ft. ";B;" Acres."9Q(T)2RA180RA,Q(T)3RA180RABQ(T)4RA360RANRARAFpXL(T)((RA)):YL(T)((RA)) XVXVX:YVYVYPM((XVXV)(YVYV)) YV0YV1E30*PA((XVYV)F)4PA0PA180PA>XV0PA180PAHARAR((PMOM(/STARTUP",N:"Erase Entries (Y/N):";L$5X370FbL$"Y"TP1LlXvTP2ıaPL1yXL0:XH0:YL0:YH0PF1:19702330PF0XV0:YV0:PM0:OM0:PA0:OA0:AR0SPİ2390T1TP1RAD(T)(M(T)60)(S(T)3600)$ DL1P1700+V01770;PP1:1740ND$;"CLOSE";F$WDL0bTPP:z:"Quit (Y/N):";L$370L$"Y"ı&"Save Entries (Y/N):";L$0370:L$"N"ĉ::(4);"-/IAC.43/STARTUP" D1290:::(4);"-/PRODOS.2xisting Entries. OK (Y/N):";L$)3708"L$"Y"ı>,h6"Enter Load File Name (?=Catalog):";y@H(HT):F$;JHT,HT"";L$^L$""ıhL$"?"1680r|D$;"CATALOG"1590F$L$D$;"OPEN";F$D$;"READ";FL$""ıFL$"?"1390"P4ZD$;"CATALOG">d1300DnNxF$L$`D$;"OPEN";F$sD$;"WRITE";F$X1TP1Q$(Q(X))D(X)M(X)S(X)L(X):D$;"CLOSE";F$TP21590 "Erases EX1(Q(X)Q(Y):D(X)D(Y):M(X)M(Y)@S(X)S(Y):L(X)L(Y)P:TPTP1:i:"Change Line:";L$vL$""ıP(L$)P1P(TP1)ı720 TP2ı"Enter Save File Name (?=Catalog):";(H(HT):F$;:HT,H2"";L$ <)P1PTPı1090&$7003.V119098GB BUMP UPVLXTPP1`VYX1`Q(Y)Q(X):D(Y)D(X):M(Y)M(X)jS(Y)S(X):L(Y)L(X)t:TPTP1:~:"Delete Line:";L$L$""ıP(L$)P1P(TP1)ıXPTPYds:":QS(P):950!S(P)(L$)FQ$"Length in feet:":QL(P):950SL$""ıbL(P)(L$)lV1:xDL980Q$;:H(HT)Q;:HT,H"";L$(L$,1)" "L$(L$,((L$)1)):990:"Insert Line:";L$L$""ıP(L$adrant (NE,SE,SW,NW):";6H(HT):Q$(Q(P));:HT,H?980L L$""ıTX1f L$Q$(X)830y*XX1:X58004740>Q(P)XHQ$"Degrees:":QD(P):950RL$""ı\D(P)(L$)fQ$"Minutes:":QM(P):950pM(P)(L$)zQ$"Secon (27);:(17):40 COL.% :> V1:40:V24:40:60\ ((V):(1):X139:"_";:b 2p <(5):(7) F"[ THIS PROGRAM IS FREEWARE ]" P::(4) Z"YOU ARE FREE TO DISTRIBUTE COPIES" d:(8) n"BUT YOU MAY NOT SELL THEM." x(16): D$(4)* (27);:(17): 40 COL.2 :K (V1:50:V24:50:70i 2(V):(1):X139:"_";:o <} F(5):(7) P"[ THIS PROGRAM IS FREEWARE ]" Z::(4) d"YOU ARE FREE TO DISTRIBUTE COPIES" n:(8) x"BUT YOU MAY NOT SELL THEMXP,YP6QXXP:QYYP:X*@XPOX:YPOY0JL$""ıSA(L$)B"ENTER ARC LENGTH (360=FULL):";L$OL$""ı\SL(L$)z"(D)RAW OR (U)NDRAW:";L$C:L$"U"Ē0OXXP:OYYPXSA(SASL)5XP((XF)AR)OXYP((XF)AR)OY"STQXXP:QYYP:ST0,QX,QYILE TO DISK,(Q)UIT"; (1)%1:(21):(Q$;E2"";L$O<1220_F1390:1220ePtZDRAW ARCSzdn:(21)xF57.29577951ST1"ENTER ARC RADIUS:";L$L$""ıAR(L$)"ENTER ARC START ANGLE (0 = UP):";L$OYYP #PRINT MENU)/9(21)c"[ FREEWARE SKETCH PAD (P. LUTUS) ]"ID2ĺ"MOVE WITH ARROW KEYS,(-)STEP"ID2ĺ"(I)UP,(J)LEFT,(K)RIGHT,(M)DOWN,(-)STEP""(S)TART,(D)RAW,(U)NDRAW,(C)OLOR,(A)RC""(E)RASE,(F)UP/"C$"E"ı;Q$"ERASE SCREEN (YES/NO):":1310O(L$,1)"Y"ıZ:C:`$w.CHECK: ON SCREEN?}8BXP1XP1LXP279XP279VYP0YP0`YP159YP159jt~ DRAW/UNDRAW LINEOX,OYXP,YP:OXXP:"ENTER SAVE FILE NAME:":1310,L$""ıPD$;"BSAVE";L$;",A$2000,L$2000"V{Q$"ENTER LOAD FILE NAME:":1310L$""ıD$;"BLOAD";L$;",A$2000,L$2000"Q$"QUIT (YES/NO):":1310(L$,1)"Y"ı::(4);"-/IAC.43/START ARC 4 Q$"ENTER STEP SIZE (1-20):":1310@S(L$)R S1S20780X*z4Q$"ENTER COLOR (1-7):":1310>C(L$)HC0C7820R\Q$"(L)OAD OR (S)AVE IMAGE :":1310fC$(L$,1)pC$"S"910zC$"L"950Q$"J"XPXPS:1090. C$"K"XPXPS:1090C C$"D"ĒC:1170X C$"U"Ē0:1170y C$"S"OXXP:OYYP:C:1170 C$"-"780: STEP C$"C"820: COLOR C$"F"860: FILE C$"Q"990: QUIT C$"E"1030: ERASEC$"A"1350:E ARROWS IF AVAIL. . (C$)8C$"J"C (C$)21C$"K"X (C$)10C$"M"m &(C$)11C$"I"s 0 :REMOVE DOT D NA,(PT) X bCARRY OUT COMMAND l v640:360 C$"I"YPYPS:1090 C$"M"YPYPS:1090 C$,1090 6OXXP:OYYP# @1220) J@ TPUT DOT ON SCREENF ^M h0W r0,YPm |A(38)(39)256| AA(XP7) PT(A) 3 XP,YP  WAIT FOR KEYPRESS  K(49152):K127460 49168,0 C$(K128)  US(11)# "THE FREEWARE PROJECT"/ :(11)L "WALDEN SOFTWARE, INC."X :(12)r "(C) 1984, P. LUTUS" PAUSE02500: SET THINGS UP D$(4) ID(((49048)64)) C3 S10 XP1:YP0 "290 ." (18):(11)0 "THE FREEWARE PROJECT"< :(11)Y "WALDEN SOFTWARE, INC."e :(12) "(C) 1984, P. LUTUS" PAUSE02500: SET UP PRINTER PROGRAM M$(1,7) V(1,3) V(0,0)(48688):V(0,1)(48689) X (27);:(17): 40 COL.&:?V1:40:V24:40:60]((V):(1):X139:"_";:c2q<(5):(7)F"[ THIS PROGRAM IS FREEWARE ]"P::(4)Z"YOU ARE FREE TO DISTRIBUTE COPIES"d:(8)n"BUT YOU MAY NOT SELL THEM." x(18)) X$b"(Press Return) :";L$-l4003vDERASER CODEJk169,0,168,145,0,200,208,251230,1,165,1,197,2,208,240,96 )R32R131730%TLTL12BABATL8FQ01820](49152)1551820gLL1vLPL1570LPI1740PP11400Z0:1070&49168,00400:216,0D(7)N"Error trying to load ";(34);M$(1,0);(34C$"#"ĺC$;#C$"#"ĺP;*X2:<LL2F"1090R,TLLL1Z6X0h@Q(BAX)wJQ32TLXTQ0Q13TLX:1640^XX1:XLL1600hTL01720rX0TL1|C(BAX)(C);TLLL11720R(BATL Begin Printing :";L$%dZ1:1070-nP1<xSP01440JZ0:1070y(7):"Load paper then press Return :";L$Z1:1070L0M$(1,2)""1570L$M$(1,2)1090M((RMLM)((L$)))21110X1(L$)C$(L$,X,1)8500D$;"BLOAD";M$(1,0);",A";BA;",TTXT,D1";216,0OC$(M$(1,7),1)l SP1:C$"Y"C$"y"SP0~LM(M$(1,3))RM(M$(1,4))(PL(M$(1,5))2PI(M$(1,6))<LLRMLMFP"(Press 'ESC' to stop print)":Z"Press Return to BMLMLM0ı VX1M*`" ";2j:HtD$;"PR#";M$(1,1)N~rV(1,0)(48688):V(1,1)(48689)Z0:1070"Loading ";(34);M$(1,0);(34)BA(110)1:BABA2560,01,((110)1)2,((112)1)7681lp)","- # -"( "Left Margin","10" C "Right Margin","70" i "Number of Printed Lines","58"  "Page Length in Lines","66"  "Automatic Paper Feed","No"   THIS SECTION PRINTS$ .(48688),V(Z,0):(48689),V(Z,1)8 >36,HHYR#\C$""0fL$""ı?pC$(L$,1)KzC(C$)\C96CC32hC$(C)nu  THESE ARE THE DEFAULT VALUES  "File Name(?=Catalog,Q=Quit)",""  "Printer Slot (0=Screen)","1" "Top Line(?=Heeturn) :";L$440,M$(1,X)L$3X9\"Here are your Selections :";iX7:780q:"Are The Selections Okay (Yes/No) :";L$860C$"Y"4001140 Y0X: M$(0,Y);" :";*H(36)4M$(1,Y); of each page. If you include"L X"a '#' in your entry, the page number"u b"will be printed at that location." l"Example: 'Page #' will be printed as" v"'Page 1' on the first page, 'Page 2'" "on the second, and so forth.":"(Press R"";L$ X2490+ L$""L$M$(1,X)9 X0550J L$"?"540P f D$;"CAT,TTXT,D1"o 440 L$"Q"L$"q"ė:(4);"-/IAC.43/STARTUP" &X2680 0L$"?"680 : D"The (optional) Top Line entry is placed" N"at the top07 M$(0,X):M$(1,X)# X) "> , INSTALL ERASERD 6N @A768U JB^ TA,Bh ^AA1w hB96330~ r | TAKE USER'S INPUTS  (27);(17) X07  "*** Prepare for Printing ***"; 780 Q$M$(1,X) :(11)$ "THE FREEWARE PROJECT"0 :(11)M "WALDEN SOFTWARE, INC."Y :(12)s "(C) 1984, P. LUTUS" PAUSE02500: S(4):F57.29577951 R$"XYZT" C$"+ - * / E 1/XXY SINCOSTANATNLOGEXPSQR^ PI F ? " SV0ė:SV1 PRODOS TECHNICAL NOTE #11 The ProDOS Machine Identification Byte (5 October 1983) The Machine Identification byte (MACHID) in the ProDOS system global page has been redefined to permit identification of future products from Apple Computer Inc. that mayiliary memory that has not been reserved for use by the Apple, you must disconnect /RAM. To do this, there are three areas of the system global page of interest: $BF10-$BF2F contains the disk device driver addresses. $BF31 contains the number cks of /RAM physically reside in memory. Further, the logical blocks are not physically contiguous. There is no guaranteed way to protect any other fixed portions of auxiliary memory by the "dummy" file method. If you wish to protect all of the aux 8K file to /RAM, it will be saved at $4000 to $5FFF. This technique provides a mechanism for protecting the Hi-res pages in auxiliary memory while still maintaining /RAM as an online storage device. There is no formula for determining where the blolf from /RAM. If your use involves Hi-res graphics, you may protect those areas of auxiliary memory. If you save a "dummy" 8K file as the first entry in /RAM, it will always be saved at $2000 to $3FFF. If you then immediately save a second "dummy" of X" $"Square Root of X"?."Y Raised to the X Power"Q8"3.14159266"eB"Factors of X"vL"This list"ultiply X and Y"("Divide Y by X" I"Enter (make a copy of X)" Z"Invert X" s"Exchange X and Y" "Sine of X (Degrees)""Cosine of X""Tangent of X""Arctangent of X""Natural Logarithm of X" "Natural Exponent,X,3) (5)( X1180L$9 (8)A*L$G4P>670jHS(2)S(3):S(3)S(4):tRM$L$~\L$""fX1(M$)pQ((M$,X,1))zQ96QQ32L$L$(Q)"Add X and Y" "Subtract X from Y" "MS(1)3.1415926535898:$ l:SV09 vNS(1):X2(N)P QNX:Q(Q)660i N;" / ";X;" = ";NXo  :"(Return) :"; L$  :SV0 "Available Functions :" :"Numeric Entries 1E-38 TO 1E38"  X1(C$)3(C$X311 S(X1)S(X)::2 S(1)1S(1):P TS(1):S(1)S(2):S(2)T:e S(1)(S(1)F):z S(1)(S(1)F): S(1)(S(1)F): &S(1)(S(1))F: 0S(1)(S(1)): :S(1)(S(1)): DS(1)(S(1)): NS(1)S(2)S(1):840 X480 bC(C$)410 |480& S(1)(L$)/ 220= 420:220O C((C1)3)1 C440,450,460,470,480,500,510,520,530,540,550,560,570,580,590,600,620,690 S(1)S(2)S(1):840 S(1)S(2)S(1):840 S(1)S(2)S(1):840 S(1)S(2)S(1):840 (1):(1)- "FreeWare RPN Calculator":; X411Q (R$,X,1);" = ";m S(X);" "s y " ,"Enter (?=Help) :";L$ 6L$""220 @850 J(L$)3L$L$" ":330 TC1 ^L$(C$,C,3)370 hCC3:C(C$)350 r use the ProDOS operating system. The change does not impact any checking for existing systems that your application may now be doing. The new definition of MACHID at $BF98 is: Bits 7-6 (Unchanged) If bit 3 = 0 then the initial release of ProDOS, this first byte will be checked in future revisions to verify the validity of the interrupt handler. Good programming practice dictates that an interrupt handler should preserve the status register (PHP) and mask interrupts calls to ProDOS. Even though the vectors appear in the system global page, you must always use only the system calls... never change the global page entries yourself. All interrupt routines must commence with a CLD instruction. Although not checked in onform to one protocol which will be required in future revisions of ProDOS, nor does it incorporate some common examples of good programming practice. Vectors for interrupt handlers must be installed and removed with ALLOC_INTERRUPT and DEALLOC_INTERRUPTrrupts. This technical note includes a superior example of an interrupt handler for use with ProDOS. The example in the book works properly, however, it will always claim every interrupt whether it came from the clock or not. Additionally, it does not c PRODOS TECHNICAL NOTE #12 Interrupt Handling (1 December 1983) This technical note expands upon the information found in the ProDOS Technical Reference Manual. It is assumed that the reader has already read and understands the sections regarding inte 0). Reading from the right, Bit 0 = 0 (No clock card) Bit 1 = 1 (80-column card) Bit 2 = 0 (Reserved for future use) Bit 3 = 1 (This is future system ID) Bits 5-4 = 11 (128K RAM) Bits 7-6 = 10 (This is new ID1) and determining the value of $BF98 (BF98 ), a value of $BA is returned. You can determine the value for you own machine, and change it if desired. For example, the Apple //c's value of $BA, when expressed in 8-bit form, is 10111010 (Bits 7 tonchanged) 00 = No Thunderclock or equivalent 01 = Thunderclock or equivalent installed [EDITOR'S NOTE: This listing does not include the Apple //c, which was released after this Technical note was written. By entering the monitor (CALL-15its 7-6 Bit 2 (Unchanged) Reserved for future definition Bit 1 (Unchanged) 00 = No 80-column card 01 = 80-column card installed Bit 0 (U (Unchanged) 00 = unused 01 = 48K RAM 10 = 64K RAM 11 = 128K RAM Bit 3 (Changed) 00 = Normal system ID in bits 7-6 01 = Future system ID in b 00 = ][ 01 = ][ Plus 10 = //e 11 = /// (emulation mode) (Changed) If bit 3 = 1 then reserved for future system identification Bits 5-4(SEI). The code should restore the status register (PLP) before exit, and before setting or clearing the carry flag as required by ProDOS. If your application includes an interrupt handler, before you exit: (1) Turn off the interrupts... remember, an unclaimed interrupt will cause system death. (2) Make a DEALLOC_INTERRUPT call before exiting from your application. Don't leave a vector installed that will point to a routine that is gone. With your interrupt handler routines, you MUST leave ALL memas an 8K type $08 FOTOFILE and mark the graphics mode as zero (page 1) or four (page 2), (Apple /// 280 x 192 Black and White mode). End-of-File $3FFF |---------------------| | Main memory | = 1 5 560 x 192 Black and White = 2 6 140 x 192 Full Colour = 3 7 The normal Apple ][ hi-res 280 x 192 screen may be BSAVEd as usual. If you desire, for Apple /// SOS compatibility, you may also save these screens format of the file is as shown. The "graphics mode" is stored in the 121st byte of the file (Location $78 in the file). The modes for both 1st and 2nd page of double hi-res are: Page 1 Page 2 280 x 192 Limited Colour ictures with twice as many dot positions horizontally. Apple /// graphics has a similar mode and a FOTOFILE file type ($08) has been defined under SOS to contain the screen image. All 16K double hi-res files under ProDOS should be of this file type. The ProDOS TECHNICAL NOTES Double High Resolution Graphics Files (6 January 1984) The 128K Apple //e and Apple //c supports a graphics mode known as Double Hi- Res Graphics in which both main and auxiliary memory hi-res graphics pages are used to produce pPRODOS.12.FILESuHUSTON!' '/CLOCK.INTERRUPT qqCLOCK.BREAKqqCLOCK.SLOT.4qqCLOCK.SLOT.5qqCLOCK.SLOT.7qqa sample routine which will turn on interrupts on a ThuncerClock card and print the date and time to the upper right corner of the screen. your interrupt, the carry should be set (SEC) immediately before returning (RTS). Do not use a return from interrupt (RTI) to exit... the ProDOS interrupt receiver still has some housekeeping to perform before it issues the RTI instruction. Included is roDOS interrupt receiver assumes the environment is absolutely unaltered when your handler relinquished control. If your handler recognizes the interrupt and services it, the carry should be cleared (CLC) immediately before returning (RTS). If it was notory banks in the same configuration you found them. DON'T FORGET ANYTHING... main language card, main alternate $D000, main motherboard ROM... and on an Apple //e, auxiliary alternate $D000, alternate zero page and stack, etc... This is important! The P | portion of file | $2000 |_____________________| $1FFF | | | Auxiliary Memory | | portion of file | $0000 |---------------------| | Beginning of file | | | JMP CONT | $2000 - $2002 | $EE | $EE | $2003 - $2004 | $41 (eg.) | $2005 | $07 | $2006 | STARTUP | $2007 - $200D | : | | CONT: (eg.) | $2047 |_this feature will of course supply their own default string which may be a startup program or a flag of your own choice. For more information on Interpreter Conventions, please see ProDOS Technical Note #7. _____________ | 06 would be the normal ProDOS pathname or partial pathname starting with a length byte. The two $EE's serve as a marker to the selector program to let it know that this particular interpreter can run a startup program. The interpreters that will support gram will look at the first byte of the interpreter at $2000. If it is a JMP ($4C) instruction, and bytes $2003 and $2004 are both $EE's, then byte $2005 will be interpreted as a buffer sized indicator with the buffer starting at $2006. The string at $20 an area in the system file which will be overwritten by a selector program with the 'STARTUP' program name. The interpreter would then load and execute that specified program. The actual nuts and bolts of this procedure are as follows: The selector proeaving the pathname at $280 for the interpreter's own use, a method to enable a selector program to specify an accompanying 'STARTUP' program has been defined. Once active, an interpreter can immediately run that program. The procedure will be to reverse point: 1. Follow steps 2 - 4 above. 2. THE $D100 BYTE MUST BE A CLD ($D8) INSTRUCTION. This convention is established so programs will be able to tell whether it is selector code or the ProDOS dispatcher code that is resident. In addition to just l, stack, text and ProDOS Global pages. 5. Reads in the system file at $2000 and executes a JMP to $2000. If you wish, you can install your own QUIT code which may load in your own full blown selector program. If you choose to do this, you must at some name at $280 starting with a length byte. This is done so once the system program executes, it can find from where it was started and locate any files it could need for processing. 3. Closes any open files. 4. Clears the bit map and protects the zerotially resides in that area is our dispatcher code. The dispatcher once executed does the following: 1. Interactively allows you to enter a prefix and file name of the system program (interpreter) that you wish to execute. 2. Stores the system program ProDOS TECHNICAL NOTE #14 Selector/Dispatcher Conventions (Revised 09 March 1984) ProDOS MLI call $65, the QUIT call, moves addresses $D100 - $D3FF from the second 4K-byte bank of RAM of the language card to $1000 and executes a JMP to $1000. What ini____________| of devices minus one. $BF32-$BF3F contains the list of disk device numbers. Here are the steps to be followed to disconnect /RAM: 1) Check the MACHID byte at $BF96 to see if you are operating in a 128K environment. If not, there will be no PRODOS TECHNICAL NOTE #9 Buffer Management Using BASIC.SYSTEM (31 August 1983) BASIC.SYSTEM provides buffer management for file I/O. Those facilities can also be utilized from machine language modules operating in the ProDOS/Applesoft environmgarding their performance or suitability for any particular use. The above routines address the specific case of /RAM. However, with a little massaging, they can easily be adapted to install or remove any disk driver routines. The routines described in this document are examples only. No guarantee is made remeters for a format request and JSR to the device driver address you have re-installed. The /RAM driver will set up a "virgin" directory and bit map. The reinstallation code might look like the /RAM.CONNECT listing given in the accompanying file. sume that since it was the last thing installed, that it is still the last one on the list. Therefore, we recommend that you move all the entries in the list down one and re-install the /RAM device number as the first entry. d) Finally, set up the para b) Increment the device count (DEVCNT) c) Re-install the device number in the device list (DEVLST). NOTE: It may be best to re-install the device number as the first entry in the list. If the user has "manually" installed a disk driver, he may asould not begin by re-installing /RAM since this would preclude passing files from one application to the next in /RAM. Here is the way to reinstall /RAM: a) Re-install the device driver address you retrieved and saved as the Slot 3 Drive 2 vector.ike the listing called /RAM.DISC.SOURCE When execution of your program is complete, ensure that /RAM is reconnected and that it is available to the next application. Don't blindly reinstall /RAM... be sure that it is off-line first. Applications shon. d) Replicate the "NO DEVICE CONNECTED" vector in Slot 3 Drive 1 into Slot 2 Drive 2. e) Decrement the device count (DEVCNT) /RAM is now disconnected and you are free to use the unreserved areas of auxiliary memory. The routine might look ltry in the device list (DEVLST). a) Retrieve the Slot 3 device number you find in DEVLST and save it. b) Move any remaining device numbers forward in the device list. c) Retrieve the Slot 3 Drive 2 driver vector and save it for later re-installatietermined that /RAM is on line, we are ready to remove it. NOTE: If ProDOS has just been booted, /RAM is the last "disk" device installed. However, if the user has "manually" installed another device(s), the device number for /RAM will not be the last en /RAM to disconnect. 2) If it is a 128K system, the Slot 3 Drive 1 disk driver vector will point to the "NO DEVICE CONNECTED" routine. If the Slot 3 Drive 2 vector also points to the same address, then /RAM is already disconnected. 3) If we have dent to provide protected areas for code, data, etc. BASIC.SYSTEM resides from $9A00 upward with a general purpose buffer from $9600 (HIMEM) to $99FF. When a file is opened, BASIC.SYSTEM does garbage collection, if needed, moves the general purpose buffer down to $9200 and installs a file I/O buffer at $9600. When a second file is opened, the general purpose buffer is moved down to $8E00 and a second file I/O buffer is installed at $9200. If an EXEC file is opened, it is always installed at the highe address is preceeded with a $4C (JMP) if a Thunderclock card is found, or a $60 (RTS) it is was not. The Thunderclock card is identified by looking at the $Cn00 ROM for: $Cn00 = $08 $Cn02 = $28 $Cn04 = $58 $Cn06 = $70 e is to replace the Thunderclock routines located in ProDOS with your routines, if your code will fit. When the ProDOS system file is executed, it installs the address of the Thunderclock routines at $BF07-$BF08 whether a card is present or not. The PRODOS TECHNICAL NOTES # 10 Installing Clock Driver Routines (Revised 8 November 1983) If you wish to support clock cards other than the Thunderclock, there are a number of possible places to locate your code. The "cleanest" placn one buffer may be allocated by this call, they may not be selectively deallocated. s are not needed. To deallocate the buffers created by the above call, it is only necessary to JSR FREEBUFR ($BEF8) and all of the buffers will be deallocated and the file buffers will be moved back up. It is important to note that although more thaFF downward, regardless of the number and type of file I/O buffers that are open. If a second allocation is requested, it will be installed immediately below the first. Thus, it is possible to assemble code to run at known addresses... relocatable moduleaddress. If the carry flag returns set, an error has occurred and the Accumulator will return the error code. Note that the X- and Y-registers are not preserved. The first buffer is installed as the highest buffer, just below BASIC.SYSTEM, from $99not do it for you. To allocate a buffer, simply place the number of desired pages in the Accumulator and JSR GETBUFR ($BEF5). If the carry flag returns clear, the allocation was successful and the Accumulator will return the high byte of the buffer ap is not altered so that files may be BLOADed into the area without an error from the ProDOS kernel. If you subsequently alter the bit map to protect the area, it is your responsibility to mark the area as free when you are finished... BASIC.SYSTEM will poe buffer, are 1K (1024 bytes) and begin on a page boundary. BASIC.SYSTEM can be called from machine language to allocate any number of pages (256 bytes) as a buffer, located above HIMEM and protected from Applesoft BASIC programs. The ProDOS bit mst file I/O buffer at $9600, and all the other buffers are moved down. Additional regular file I/O buffers are installed by moving the general buffer down and installing it below the lowest file I/O buffer. All file I/O buffers, including the general pur If you look at $BF07-$BF08, you will find the location to put your code. There is room for 125 bytes. To install your code, simply write enable the "language card" area, and move your code. Don't forget that your relocation code must justify the absolute addresses as part of the relocation procedure. Finally, restore any soft switches you have changed. (There is no guarantee as to the absolute location of the clock driver code on future revisions of ProDOS, only that its location may be found byue by 2 if the clock is in Slot #7 instead of * Slot #5, to $47F and $7FF. Decrease by 3 if the clock * is in Slot #2 instead of Slot #5, to $47A and $7FA. * * The value in line 54 is in the form of $n0 where 'n' is * the slot number. For Slot #7, chand 13 are in the form of $Cn0B and $Cn08, * where 'n' is the slot number (use $C70B and $C708 for a * clock card in Slot #7. * * The values in lines 20 and 21 should be incremented or * decremented according to the slot number (eg. Increase * the valSlot 5) INTON2 EQU $7FD ;Leave interrupts on (Slot 5) * MLI EQU $BF00 ;Entry point to ProDOS MLI * ********************************************** * * NOTE: If the Clock card is in a slot other than #5, change * lines 12, 13, 20, 21 and 54. * * Lines 12  8 ;Clock read entry point (Slot 5) TCICR EQU $C080 ;Interrupt cont. register TCMR EQU $C088 ;RAM card read enable switch * IN EQU $200 ;Where the clock leaves the time * UPRIGHT EQU $412 ;The upper right of the screen INTON1 EQU $47D ;Leave interrupts on (******************************** * * PRODOS TECHNICAL NOTES * (C) APPLE COMPUTER INC. * PRODOS TECHNICAL NOTE #12 * INTERRUPT HANDLING * ******************************** * ORG $300 * WTTCP EQU $C50B ;Clock write entry point (Slot 5) RDTCP EQU $C50 for //c) Thus, the Apple //c is coded by Bit 3 = 1 and Bits 7-6 = 10. CRS ] Q(49152) Q128410* 49168,00 V  (2):L$; :' V90 OVV9 130B "410P ,(2):L$;_ 6Q141390p @Q139VV1 JQ138VV1 TQ136VV1 ^Q149VV1 cQ155Ģ23: hV24V24 rV1V1 |280 D$;"-/IAC.43/FREEWARE/";L$  from an application or as part of the STARTUP program. examining the global page, as mentioned above.) All that your code need is to get the time from the clock card, convert it to the ProDOS format and store it in the date and time locations in the global page. Your installation can be called up ange this to: LDY #$70. * ********************************************** * * CALLING INTERRUPTS * JSR ALLOC.INT ;Install interrupt routine RTS ;That's all folks * SHOWTIME EQU * CLD PHP SEI ;Disable interrupts LDY #$50 ;For Slot 5 LDA TCICR,Y ;Get interrupt control reg. value AND #$20 ;Bit 5 indicates INT is clock BEQ NOTCLK ; LDA TCMR,Y ;Clear mystery register LDA TCICR,Y DEC COUNTER ;Only print time every second BNE EXITCLK ;Not time to print yet. * LDX #39 ;Save the input buffer DOIN LDA& ::9:"PRODOS TECHNICAL NOTES":"THE PRODOS TECHNICAL NOTES INCLUDED ON THIS DISK ARE COPYRIGHT (C) 1983 & 1984 APPLE COMPUTER INC." :"PERMISSION TO INCLUDE THEM WAS GIVEN TO THE INTERNATIONAL APPLE CORE BY THE PCS DIVISION OF APPLE COMPMMAND."Q::"FREEWRITER";::" IS STORED IN THE 'FREEWARE' SUBDIRECTORY."r23:" -FREEWARE/FREEWRITER"22:34,0:24:"HIT THE ";::"SPACE BAR";::" TO CONTINUE ";:A$::LIRST START USING ";::"FREEWRITER";::","o"BE SURE TO READ THE TUTORIAL BY HITTING THE CONTROL-T KEY.":"REMEMBER THAT ";::"FREEWRITER";::" IS A 'SYSTEM' FILE AND CAN ONLY BE RUN USING THE" "SPECIAL PRODOS '-' (DASH OR SMART-RUN) CORWARD-SPACE (RIGHT ARROW) KEY."- 1000: :"FREEWRITER";::" USES THE UP AND DOWN ARROW KEYS ON AN APPLE //E OR //C. ON AN APPLE II PLUS, CONTROL-J IS THE SAME AS THE DOWN-ARROW, AND CONTROL-K ACTS LIKE THE UP-ARROW KEY."-:"WHEN YOU FTHE TEXT TO BE DELETED, AND PUSH DOWNTHE GAME PADDLE BUTTON AT THE SAME TIME AS THE BACKSPACE (LEFT ARROW) KEY IS USED. TEXT WHICH HAS BEEN DELETED IN"! "THIS FASHION CAN BE RETRIEVED BY HOLDINGTHE SAME GAME PADDLE BUTTON DOWN WHILE PUSHING THE FO"* d"OR RUB-OUT UNWANTED CHARACTERS." n:"BECAUSE THIS KEY IS NOT PRESENT ON AN APPLE II PLUS, DELETION OF UNWANTED TEXTIS ACCOMPLISHED BY THE BACK-SPACE KEY AND THE GAME PADDLE #0 PUSHBUTTON." x:"TO DO THIS, MOVE THE CURSOR TO THE RIGHTOF L APPLE FUNCTION KEYS." F:"HOWEVER, AN APPLE II PLUS EQUIPPED WITH A LOWER CASE DISPLAY CHIP AND A GAME PADDLE OR JOYSTICK WILL ALSO WORK WITH"::"FREEWRITER";::"." P1000 Z::"FREEWRITER";::" USES THE ";::"DELETE";::" KEY TO ERASE BRK ;Break on error. rclock STA INTON2 LDY #$20 STA TCICR,Y * LDA AIPARMS+1 ;Get INT_NUM STA DIPARMS+1 ; for deallocation. JSR MLI ;Call the MLI DFB $41 ; to deallocate the interrupt DW DIPARMS ; pointer to parameter list BNE OOPS2 ;Break on error RTS ;Done. * OOPS2 interrupts after reads. STA TCICR,Y LDA #1 ;Print time immediately STA COUNTER ;Once per second later CLI ;Allow the 6502 to see the RTS ; interrupts. * OOPS BRK ;Break on error. * DEALLOC.INT LDA #0 ;Disable interrupts STA INTON1 ; in the Thunde MLI DFB $40 ; to allocate the interrupt DW AIPARMS BNE OOPS ;Break on error. * LDY #$20 LDA #$AC ;Set 64Hz interrupt rate JSR WTTCP ; by writing a ',' to clock LDA #$40 ;Now enable the software STA INTON1 ; and tell it not to disable STA INTON2 ;SEC ;Tell the MLI it isn't ours. RTS * COUNTER DS 1,0 * AIPARMS DFB 2,0 ;Put allocate and deallocate DW SHOWTIME ; parameters here * DIPARMS DFB 1,0 ; so both routines can use them * INBUF DS 40,0 ;Save 40 bytes of IN here * ALLOC.INT JSR MLI ;Call theeen STA UPRIGHT,X ;Chars. 0-22 of input buffer DEX BPL GETNEXT * SETCNTR LDA #64 ;Set up counter for next time STA COUNTER * LDX #39 DOIN2 LDA INBUF,X STA IN,X DEX BPL DOIN2 * EXITCLK PLP ;Tell MLI we processed the interrupt CLC RTS NOTCLK PLP IN,X ;Since the clock writes over it STA INBUF,X ; when it is called. DEX BPL DOIN * LDA #$A5 ;Set A'soft string input mode JSR WTTCP ; and send it to the card JSR RDTCP ;Read time into input buffer. * LDX #21 GETNEXT LDA IN+1,X ;Print time to scrUTER. THEREFORE,"; ("THEY ARE FOR PERSONAL USE ONLY." 2:"THEY ASSUME SOME KNOWLEDGE OF THE MORE TECHNICAL ASPECTS OF PRODOS, AND BUILD UPON THE 'PRODOS TECHNICAL REFERENCE MANUAL'." <:"RELATED ASSEMBLER FILES ARE INCLUDED IN THE THREE 'P ~`x@)