[ 53280,0:53281,0:646,(162):"":" USE LYNX TO DISSOLVE THIS FILE":10 6 *LYNX BY CBMCONVERT 2.0* 32 EYOARD 9 P 21 COPE͠ 52 P 162 DITOR 59 P 248 RANSEXT 15 P 30 OPEANUAL 136 P 161 ET_͠ 5 P 254 EADE.Ҡ 7 P 190 CRIPT.VLIR 7 P 56 YSTEM 25 P 162 51 15 P 183 ٠ 11 P 70 Ġ 4 P 132 Π 4 P 178 Ӡ 4 P 41 Š 4 P 118 Ġ 5 P 196 Ԡ 4 P 120 Š 4 P 84 Š 4 P 122 EADE.Ѡ 5 P 71 AMPLENIT 8 P 134 AMPLEAIN 20 P 19 EROAGE 6 P 65 OUTINES 17 P 156 LICK N E 9 P 70 2Š 5 P 149 _Ԡ 4 P 63 _Π 17 P 58 _Ġ 17 P 160 _٠ 15 P 46 _Ӡ 3 P 227 _͠ 28 P 19 KeyBoardX PRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V1.1 K. 9* t9```8Fe 897 E* H E8Xp   @Keyboard shortcuts for geoCOPE's Editor @C= L Load a file @C= S Save a file @C= Q Quit editor @C= X Cut selected range from text to TextScrap @C= C Copy selected range to TextScrap @C= T Insert TextScrap at TextPrompt @C= F Find text in document @C= R Replace text in document with new text. @C= RETURN Split line at TextPrompt @DEL Delete character to the LEFT of the TextPrompt Also deletes selected range. @<-(LeftArrow) Delete character to the RIGHT of the TextPrompt@  @INST Insert a single space character at TextPrompt @C= + Go to next page. (VLIR file only). @C= <- Go to previous page. (VLIR only). @C= G Input page to go to. (VLIR only). @RUN/STOP Toggle range selection On/Off @Cursor Control Keys @F1 Move cursor to the front of the line @F3 Move cursor to the end of the line @F2  Move cursor to the top of the screen @F4 Move cursor to the bottom of the screen @F5 Page-Up one screen @F7 Page-Down one screen @F6 GoTo Top of Document @F8 GoTo Bottom of Document copeASMX 23PRG formatted GEOS file V1.0>|"D"D"D>|I>w">"">COPE Asm. V1.3BSC TechUnit .Segment,0k 17,0 ',0,0,0,00,0,0800eded',0eded',0U  M ;¢ t© ¢ 0 wL&COPE Asm. V1.3 ON OFF`&&.7r{  .?0; ª r` ª {` ª ` ª X` *I` L,  % a % j  LD `w{ &vz  @0 LL |#Pȭ#$ #P``" x E   ֭Z& l& $L  Lj ?XZ\WY[rs""^C*Y`vx@wy `  &`I ` c Š c Š ` )­FFc t­ Š w `xzy{` y wLOcxy Š `z{z u  `ȹ w`vȘevvwiw`ȱv ; ȱvw` ?c H# HȄ `/ Pass:   PAUSE`m V¥L.`(D  zExit the Assembler?  H  h`YOU HAVE EXPERIENCED DISK ERROR #: Disk errors stop the assembly process.  &`` V W X Y iV  V V V V W ` i` ` V i % !V & 뮑 V ~W  `V ɠV iV i PV `^ `_ ^ ^ ɠ?i_ ^ h`Outstanding forward branch limit exceeded_ i^  ^ ^ ^ ^ _ ` a _ i_ `Here it is V i . *^ / 뮑 ^ ~_ ` |a } `^ ɠحV iV i P ^ ɠ i` K h _ ` `Branch Labels not found' ^LNot a valid PSEUDO-OP command.`[A Ȣ a ݽȹ a ٮ ҭ  LBytWorPcIncStaIniAutNamTypIcoBloHexDecSonSofSegNewpcDnamMacDri?M[` ȹL ȹB '="9 {  m ,L,LL Ȍ Ȍ'Lbhh   "Ljhh` "ȹ ȹ  {=>ȹ),ȹ "' {"Pȹ"= > 8==>>PL  rL  {L 2ȹ ȹ {PȌ^ `L ȹ ȹ {L L& %ȹ ȹ { L L `  `譽)j 9ȭ)jȭ)j`hJi`LDALDYJSRRTSBCSBEQBCCCMPBNELDXJMPSTASTYSTXINYDEYDEXDECINXINCCPYCPXSBCSECADCCLCTAXTAYTXATYAPHAPLABRKBMIBPLANDORAEORBITBVCBVSROLRORLSRCLDCLIASLPHPPLPRTISEDSEITSXTXSCLVNOP    `ТLȈ8aHh0!A Pp"bBX(@xh  x A ` `1ȹ" @% {ii @!' P `Ȍ W ~PŬ P8L:0L4@`@`ȹ #($ LLL5' P`ȹ0'" ȹP< {P> {` {Phiii`U' P` {li`iL {& P`ȹ, )&ޢd' P`A< yY.`-X x  ,`' P`& P` {+ ,ȸPȹ\ y9Y5xXн莜`筽iɢ)ɂ%բέiɂɢL,& P`ũ& P`0NThO ;͸ȹ0-+͜h+ ' }& P`LLL iiiL}h  i8ih  iii`&%)%)%&%2IJIJI2I&III&ICOPE ASSM V1.1BSC TechUnit +-*/=|&^LL38 T018=+R&ʭ8:`Hello their4051Rʽ:9 Uʽ:3ʽ:2RUTD243506179+-*/&^|`LLLMLLvLLLRʽ:1ʽ:0R Rʽ:9 Uʽ:ʽ:R`RiRL4m645m75CSL8464575CSL4-645-75L4 645 75L4M645M75LKLnLnKn7n64mKK5mLLܭK LCS6071LKL6 78>.4.5.K.L8K6L7KL.4.5K LCSL`R0:1:8:R`V^`.)mm`....A8)mm`JJJJ)JJJJ)`0123456789ABCDEF...mm)mmп`....8 ..i0  Ш` h`itiuȌt֬ȱt> )6,2$1%0A+.-**&/"=&L|^LLYLLLLP k Lȩ k +Lȩ k L kۆ~  Q!" 0 hL lL= l`LLLL t +-*/=),&|^H0h0: )A GЪ v hhh`h0:L W hhh`h02L 9 hhh`L hL`ȱt) ,=`SYNTAX ERROR FOR BINARY VALUESYNTAX ERROR FOR DECIMAL VALUESYNTAX ERROR FOR HEX VALUEUNABLE TO FIND LABELEMPTY EXPRESSION i ` i  ` i   `  l "`K# Lv  ɂ   "K`x `~  ` oL   `  n`  ɁHHH Ehhh`i ɾ @8L ? `-``2B EB``HH hhLh ~  Z  V `"?  PAUSE kSoft Errors:  E iHard Errors:  E` (Size: {8@z )Pos: qq!Avw8@ Eq q` ` ` B B ^  i *`) B  H  t­ ©& w­h `ȹ "e W  PU a F~iiV ^ _ ` a @ |P!' PP  '!`L l@uȹ= " $$l&`8~  Q!"0 '!` ^`DUPLICATED LABEL '!=` ! '!`?! h`"  x`NOT A VALID LABELW[X\b!8[[\\"[ ![08[[\\P`!!0 ~[L[!!~ ) , =L[![ȱ["`\Z [Y``"""Ȍ"8Y"YZZZv$ TYu$M>" Vhhhhhhhh` N" *a"Label array full.Quitting assembly...YȽ Y载 ="YL"载= "ȥYȥY`载 " {"ȑYȭY""`c#$ʽc #0 c#v#ȥw#ȭ#ȭ#ȭ#Ȍ#$ȹ ȹ c蹽,Hchȹ {@ xvyw`#$E####w#v#0c舸P#$)cc  `l& m& m&m&C~*~>m&Ƚm& $l&~u$v$` $~0 ~ $LL$ $e~~i`L,%l&Z&Z& % V&rW&sPvrwsu$pv$qrȽ rȱr errsisZ&  l&  p? %L?%ɀ@ pV&qW&ȘeppqiqL% Kw '&`Z&[& &L;%ȱp80X&ȘHY&X&Y&r:; h`r :Y&L%[&r\&ȥs\&ȥp\&ȥq\&Ȍ[&`[&\&q\&p\&s\&r[&`)$x ~ Z8  ` / 9 ?r Z {$ ?/../ SCREEN  START`8(`(( (`͉H  &h ` ( & ' )`ظP'  V¥`D '  PLEASE ENTER FILENAME:Label Size : Label Count : File Size : Label Free : H L6' H8WYXZ n  LE' H"" n  LT' H8` n  Lc' H8Yu$Zv$ n h` Š $( y(``H( V¥`` (D ](  m(FILENAME EXISTSREPLACE IT?  8` 8 `   i  ن( V¥` ` (DINSUFFICIENT DISK SPACEL) q'^_``]abab  GKHLȥIJIJ `_`8abcd )~) z) w©` t` }) ) 8`` w` &&轤&&L&'R'''\((((?M[ )>)ȹH ȹ> = ȹ- {8ee L ȹ' ȹ {L ȹ ȹ {LL ȹ ȹ  yyL eȹ& ȹ '_"[ eeLȹ< '7"3[( {[(em ,PLL T(ȹe蹽'L-( ȹ ȹ {L(ȹ? ȹ5  {(Ȍ(?6m ,L(    x.ЩL L L ȹ ȹ  L D)L7*载2 0 P x $$u$pv$ql&+) h7*PDuplicated MACRO label +*ȹ .5 +* +*eppqiq   L) m¹ nй dа +*ȩ +*ȩl& +* `H7*hp`h`ADDRESS VALUE NOT ZERO-PAGEINCORRECT ADDRESSING MODEINDEX IS NOT A VALID CHARACTERINDEX MISSING AFTER COMMA X INDEX ADDRESSING MODE INCORRECTBRANCH OUT OF RANGEUNABLE TO EVALUATE ADDRESS-MODENAKED MNEMONICERROR IN INDIRECT ADDRESSING MODE Y INDEX REGISTER NOT DECLAREDc T'L&Y'T'͉Y'   ɠ''i9'@'c  ' V¥` L& ]'L&c `) ' ';'M|' V¥ `` 'D(Insert disk into disk driveL''COPE SDrive: A<ff~`f<EditorX3:PRG formatted GEOS file V1.0  &@ f@Ā1q0X9 6f 1`c،l7COPE Editor V1.3BSC TechUnit Use the editor to write source code.,0,0,0,00,0,0,0,03,$80,2moved.',0',0z ?  ­#$Ć ;¢$ t© ¢ M w   Z Q    `# e`&i@ \FileEditSearchToolboxH# < L&UV-%71AGfQDLoad@LSave@SPrintQuit@QSave As...G)iwn#n#%n#CutSXCopySCPasteSTClearUDEL9?V~Find...xFReplace...xRGoto Page...xG+c AutoSaveBookMarkM&  xv???@@z@yw{)|}  ` 8 # <L, 4` F -- DK (<geoCOPECopyright 1987, 1988by Bill Sharp ComputingVersion 1.3A  V`8zxc{yd File Size: cd E E Bytes Free: 8c d E E`mi 8 `)P A  Š` 7  Š 7` B )@` L,  V`< FY u ( < F PR Z ;n }   c$ USER-SUPPORTED SOFTWAREIf you are using this program and finding it of value,your contribution ($15 suggested) will be appreciated.You are encouraged to copy and share this programwith other users, on the conditions that the prorgram is notdistributed in modified form, that no fee or considerationis charged, and that this notice is not bypassed or removed.Copyright (c) 1988 Bill Sharp ComputingBill Sharp ComputingP.O. Box 7533Waco, TX 76714CLICK to continuea \b a  c `a  a `, v w  E!  | ȱ|  @" ?  ¬ E ֩ E8i @  ? $`   ` m ! '`,Ev w 0H  c h΀ LD H  c h LD c ` \ ` ;L `;  L` / ??/ B/   . m i ު Ȋ dَ 8/   i i 8 n n m m  ݆  H  # Page: L E` SEQ` L z){*' !  "`/ 9 ?`= ` `m i ͪ  ͩ  Ls ͬ  ͫ  L  M  E` E`  ¨`?  ¨`? ¨`@`   0  C  Ȍ Lv +" f"))** "΁"Lv   0?̀= ͂΁L ΁0͂L LH c h`?<+8    i 0 '' |~ȱ|Ȍ~. mi ۭmi`;:`` ͬ  ͫ ```)B8 H# <$ t­ ¢݆& w­8h <`  `vv` @/`02= R`$ ª *v~w~ p` L4`0HWH  ª *` )~ȹ)` "~e~~iy`x~`~. mi`  ~)*L-`  8  b `I `å0s ªI `nvHP ªI `dlHPҢ I `ZbHP IL@  Z IL@  d I*+L'@*+ @ n`   &C`   *C`   &o o`  &`hhL   (`   4  &`/ 9 (H 9 @ '` $  &'L h(    ( `   '`   &` 8; 41 o L |  Bo `  `  "   V¥` 7L| ?L|` 68L;968#͉;9   ɠi9`)  ;M^ V¥ `` kD(Insert disk into driveL·COPE SDrive: A<ff~`f<   '`8`9 V¥8` (D X j (u 4CURRENT REVISIONNOT SAVED.DO YOU WISHTO SAVE IT?8-(  VPChecking text for changes...xy8zx{y ¥  ` V`D ! 6This Version cannotbe edited.  ¢ )­ 'o" 0Н,P LFL^o,oLLLL  L  t­L Š w­L`p V¥P  w­L`EE & ,Next page is blank.Do you wish to edit it? & w­LL y w­LLu xy ¥z{z uC  K%,0C  `!"xvywx)y* ` \ e `)*vw \ ! v~w~ u~. mi~ uP~ <" e @` ?~{%,~ u ~)ȥ)' L\~zא` ~)ȥ)'L\Z2 \1` COPE Source V1.1COPE Editor V1.3Untitled @@@@@@@@@@@@@@@@@@456`?? 轰 \L?0 ]L \M!r!!}O"" 7S B3U(4ilr%xyRv    T,P K%H h ?? @?L\ @ 456`L! S?L!`?. mi <"?v  c ` ? ?v c `&%vpwqzr{s%t&u $ %ezz&e{{`rettseuupqpq%e&e8rpsq ~`ȑr`vw`zȑz` i|et|ȱ|eu| ` |~ȱ|~~`  ? iȱ|M|~F~pqzr{s%t&u $  %ezz&e{{ |vȱ|wL |vȱ|w m  <" 5 `|| ' ?~i|iȑ||zȱ|{ ~|ȥ|  8 `b M`%&vvww{ vzL b vpwq%t&u  6 `zr{s8ztz{u{ `H h`v u`pettqeuutpusuq`pettqeuutptupqustrtȑt`? vH?vhȑvb 6 `L>L o (``LL @o (` s#` s#` Y` I` s#`%&b 8vpwqp. 8L %t&u  6 <"v u` ~vw <" 5 `vevvwiw   <" 5 ` )v*w <" 5 `' f"J!  )vȹ)w <" 5 `,09P K%H h v w v w  EX`hh@  L/ `( C OL!8  c   )vȹ)w 8 v y 5 e`*y)x` m )ș) ~)*`vA. ~mi"! vwLy 8~` ` e` c '`I!J!K!I! <  J! <  ii@L!0I!J!J!K!`I!J!J!K!`v. mi  <" 5 `v uv!. 8 <" 5 ` ` ?~{  ~zL5"'BL!))** \8i  c ΀ 8  )vȹ)w m v y 5 `!" e` "' f"L")~*~{  ~z``))**J"" \" f"J""!  )vȹ)wv y e "`)~*` 'a#"*y)x a#'` ~)*a#ש \" )vȹ)wv y e "` @ f&`H h$  $$ ?% $$ H 0#*ͪ W ) *L#)ͩ >*ͬ 4 ) * ~)*L#)ͫ ئx)y* f& K% \h" " `0  8  LY$  8  pqtui`i``%m`%`%m`%$` ~ X%` `$ `3%@``` P5PـS!\Ynffl8Text Scrap V1.1Text Scrap3% 8` `z%I ~%`V%`m`W%~~~~W% ~V%` 3%` Š` X%`8B&`C&cmB&$dmC&$  $ x&LD&B&C&&%vpwqzr{s%t&u %ezz&e{{v@&wA& ` f& K%Hb 6 h ` ` S?`& V`E & 0:& 00&BUFFER SIZE EXCEEDED!TextScrap cannot be addedto this text file.  ' +) o( ) ` `   ` '  8'9' V¥ ` 7L)' ?L)'`L'E ' ( '$( 0T' 0J'  3!Save as VLIR file.Save as Seq. FilePLEASE ENTER FILENAMEnv`h0' ª I $(`dl ª䭕 IC(D(L@(@C(D(  d Ih(i(Le(@h(i( @ n`  Š55( )®MNF ( )`(``( V¥`` ` (D (  )FILENAME EXISTSREPLACE IT?  8` 8zx {y Ȅ  i  ~) V¥` ` )D(INSUFFICIENT DISK SPACEL*(LI* *xyz{O  L`O *~H* zH* w©LLI* *L Š LLQ*L0$L 8zx{yxy w *MN MN L)  t` L &`vw)*L` ='MH n* '5~)*   ! " eP }' F(`ۆ  Q' V` D $p'ER T$) J)Find What:  xPSearch Complete.  ` `~- I ~ 'L'~{ ~zhh`Ƚ~ I ~ 'L'~vw~ u~ 0(~ uP~`. m i ` Y( ` `ټ7yݶ31߶1۶w 1ٶ61ٶ631ټ71hh^^^ ^w^v^*^)^  X`Confirm All Changes? XjSearch from Top of file XtMatch Upper/Lowercase  D5Replace Text: )ۆ 8 ` DD With Text: ) 8 ` M"HC n* '8 & *" *v~w~~ L) }'^)ʽ^*ʽ^vʽ^w ^ ʽ^ʽ^^ `v~wx~y`& M ?" "v " &`* V` I*+=Replace this word?:`'('&' &''(' ' VLN(E r''' 0:C' 00X' 0&,'print entire VLIR filePrint Selected RangePrint the loaded documentSELECT PRINTING MODE:T\`h0' ª @: '`JR ª : '`BH ª٩: '`: I''L'@''  J,:P I!("(L(@!("( @ T,: IG(H(LD(@G(H( @ @`H# < d*;  ;Š;LK*;y ŠLK*/x~yzr{s,:p08L) 0 ~  r sL) ~  r sL)vw)*LC <L  ¢ )­F]  t­L Š wLY)* w­HL h f&h </` *x~yzr{sL): y)) * )  mv)< *L) y M~s  ~rL7*) *L) y))` y y) )`xp~ e ȱ Ȋ` y: LC <L<)h < x /`  HH~VIWIW QRCANCEL P0Please wait... Printing Text.` y w­Lz{z uxvywx)y*`](] ( ' V¥' @'` O&   ' ,4'EPlease enter page numberto move to:]~('h(i(ȱ~) % '' (i(h( @'`'  KFSyntax error for decimal value. KZUnable to change page number.    `~  0:](\(](`'L(h(.i(h(i(h(.i(h(.i(mh(h(mi(i(]()mh(h(mi(i(\(п`& V`E ?']'' 0:' 00!'ON: Save file automatically.OFF: Prompt for saving file.SELECT AUTOSAVE MODE:T\`h0W' ª I '`JR ª I''L'@''  J I''L'@'' @ T`' V`E ?(](( &:' &0"(ON: Marks current cursor position.OFF: Ignore cursor position.SELECT BOOKMARK MODE:T\X`0W( ª I@ (`JR ª I((L(@((  J I((L(@(( @ T`Ԇ' ;©8 i +'  ` i*&'h <%'`*Q^'h''u''u''u'(u'(u')(u':(u'K(u'COPE infoRegistrationHH # <h8 eiԅi'   h <H h Q  0 `TransTextX5PRG formatted GEOS file V1.03J$B$3$ $J3! @@ 3!J%B$[$J$J$3TransText V1.1BSC TechUnit Convert source code into the geoCOPE format.',0y',00,0080,2    Z xy`L&n|  | q- q-o L,    kSELECT RESET 26LOAD 6SAVE ` #UFileSize: FUh \f#s jt#s؅r& H &dFilename:` lSelect Conversion Form p t H` * #     %  S?` L`؆  V¥ `D  0 PLEASE ENTER FILENAME؆ Š  N  ` `q V¥ `` ` (D   FILENAME EXISTSREPLACE IT?   8¢؆ Y`KAB. 8zx {y Ȅ  i  S V¥ ` ` x L `D(INSUFFICIENT DISK SPACE V¥ ` ` D(Insert disk into disk drive؎; < = >  ؆ t©~ z  w`  0 ~  `v &~ R\5 ~ L[\`~yy ~ L  L~`vw`{wzv```  ~ 8~`` z¥vxwyy[\~``COPE Source V1.1COPE Editor V1.1Convert Sequential files to geoWrite format!  1 `Form: ASCII c   & J 0 w 1`  t` ©r`s  © ` \ LJ `ȱr ; ` ` ` L\ ȱr L errsis` )   `ersi  ȱY U Q $5;EAA=L!  L ]   L ȩ ]  L  `L L ; =H h0:A G hh`h0:L hh` `  .  .  .  . A8)m m `  .  .  . m m )m m п`    y ` x `  `COPE Source x `؆   y ҭע؆ Š ` ȱ xvyw Q 8zx{yz  V 0  ` ` V¥ ` (D   The file had to be truncated.Not enought room to fit in memory 9 ? 9 ~` ' x v ' x ' 9 -(Source File (geoCOPE File FConvert and Save Q the current file \ as a geoCOPE gCOPE Source V1.1 r file. ` 9 ? 9 ? 9 TransText`CopeManualZ9PRG formatted GEOS file V1.0AWrite Image V2.0geoWrite V1.1 K. 9* t9```8Fe 897 E* H E8  # 4 k S/  0(0000000@ Please note: This manual is setup using the LW_Roma font. If you do not have this font, you can find it on quantumlink. geoCOPE is being distributed as a user-supported software package. Registration fee is $15.00. For a copy on disk of all the files uploaded to quantumlink in this set, send an additional $5.00 ($20.00 total). geoCOPE is (c)copyrighted 1988 by Bill Sharp Computing P.O. Box 7533 Waco, TX 76714 (@ geoCOPE  User's Manual Version 1.3 Copyright (C) 1988 By Bill Sharp Computing All Rights Reserved Bill Sharp Computing P.O. Box 7533 Waco, TX 76714 (817)776-2958 Q-Link: Bill BSC (h0 Table of Contents Section 1: Using the Editor Typing for the assembler 1 Inserting text 1 Deleting 1 Menu Selections: File Menu Load 1 Save 1 Print 1 Quit 1 Save as... 1 Edit Menu Cut 2 Copy 2 Paste 2 Clear 2 Search Menu Find 2 Replace 2 GoTo... 2 Clear 2 ToolBox Menu AutoSave 3 BookMark 3 Using TextScrap 3 Section 2: Coding for COPE Requirements 4 Instruction format 4 Mnemonics 4 Labels 4 Constants 5 Pseudo Operators 6 Arithmetic Operations 10 Hierarchy of equations 10 Section 3: Using the Assembler Startup 11 Quit Icon 11 Screen Icon 11 Start Icon 11 Size and Position 11 Filename 11 Error indicator 11 Pass Indicator 11 Pause Icon 11 Savefile DB 11 FileSize 11 LabelArray Size 11 Error Messages 12-13 (Section 1: Using the Editor page 1  Typing for the Assembler Since the assembler requires each line to hold only one mnemonic, word wrap is not supported. Each line is considered to have a carrage return at it's end. Therefore pressing the RETURN key does not insert a carriage return, it takes you to the next line. If you wish to split a line, hold down the C= (commodore) key and then press the RETURN key. This will split the line. @Simple Inserting To insert a single space use the insert key. Press the INST key while holding down the shift key. @Simple Deleting To delete the character you've just.typed, press the DEL key. To 'suck' in characters from the right, press the BackSpace (@<-) key. . The character will be deleted. This is how you can join together two separate lines. Go to the end of the line and press the BackSpace key. The next line will be append to the present one. The DEL key will also delete the currently active range, if their is one. @Menu Selections Now lets cover the menu selections. @C= Under the Commodore logo menu will be the information and deskAccessories selections. If you have no deskAccessories on the current disk then only the information menu is available. @FILE @Load: This is the menu selection to load a file. If you haven't created a file yet then this will be blank. The load routine first checks to see if the current file had been saved. If the AutoSave function is on, the file will be updated automatically. If not, then you are asked if you would like to save the file. @Save: This will save your current file. Everytime a file is saved copeEditor saves the current file status to ensure you don't quit with a changed file. This takes a few seconds depending on file size. @Print: This loads the print driver current on the disk and prints the file in ASCII, not graphics mode. Of course, if their is no print driver on the disk or the printer is turned off this routine will not work. Print uses the first print driver found on the disk. @Quit: Exit this program and return to the deskTop. First the file is checked for any new changes and you are allowed to save the file if it has been changed. @Save As...: Allows you to change the name before the file is saved. You can select it if you wish this file to be a Seq. file or a VLIR file. VLIR files allow multiple 'pages' to be kept under the same name. Also can be used to append the currently loaded document to the first blank page of a VLIR file. Select "Save As" and enter in the filename you wish to append to. ( page 2 @EDIT The edit menu allows you to work with characters, words, and lines all at one time. The editing functions are performed on ranges that you selected. You can select ranges with the mouse or from the keyboard using the RUN/STOP key. Pressing RUN (do not press shift)will start the range selection process. Pressing RUN again marks the end of the range. Notice, the reminder 'EX' at the bottom of the screen to show that range extension is on. When selecting a range with the RUN key, all the movement keys are active in selecting the range. See the Keyboard shortcuts list for these keys. @Cut: This selection removes the selected text from the text file and places it on the disk as a Text Scrap file. @Copy: This selection does not remove the selected text, it copies it to the TextScrap file. @Paste: Paste does not work with ranges, it takes the current Text Scrap file and inserts it at the location pointed to by the TextPrompt. @Clear: This is an absolute erase. It delete text from the file but does NOT save the text to the TextScrap. @SEARCH One of the most useful time-savers of any text editor is the ability to search through an entire document and pick out each occurrence of a word, code or label than needs to be changed. The Search menu gives you two options: Find, and Replace. @Find: Goes through and finds up to 32 characters of text. You have the options of starting at the top of the document or from the current cursor position. You can match the Case of the phrase exactly or ignore capatalization. Each time the search process locates the word or text you entered, it stop and displays that line at the top of the screen. To continue the search, click the FINDNEXT button at the top of the screen. Keep clicking the FINDNEXT button until you see an dialogBox that announces, Search Complete. @Replace:  When you want to change or replace a word the command to use is Replace. Just as with Find, you start by entering the text you want to find and the text you want to replace it with. You have the same options as starting at the top of the document and matching the Case of the Find text. You can also select if you want to be prompted for each change. If you do, you can select a YES,NO, or CANCEL during the Replace function. @GOTO: GoTo allows moving quickly to a new page within a VLIR file. ( page 3 @TOOLBOX AutoSave: geoCOPE gives you the option of having it automatically save your files for you or allowing you to make that choice yourself. Change the option here. Please note, this option is stored with the file. The current status of AutoSave for each file may be different. @BookMark: BookMark gives you the capability or returning to the last place you left the file your editing. If BookMark is on, then you can return to the same location your currently at. If BookMark is off, you start at the beginning of the file. BookMark is updated everytime you save the file. This option is also stored with the file. @Using the Text Scrap file The TextScrap file keeps all your most recently edited text scrap. If you start using the text manager desk accessory, you can accumulate frequently used routines and insert then into your new program as you need them. The GEOS user's guide explains the use of the text manager in more detail.  (Section 2: Coding for COPE page 4 This section will show you the various formats and commands you can use within geoCOPE @Requirements:  Programming in Assembly Language requires learning the instruction set (opcodes) of the computer, using the Assembler to create the program, and the specific requirements of the operating system. If you haven't done so, I suggest purchasing 'The Offical GEOS Programming Reference Guide' from your local bookstore. @Instruction formats: A line of Assembly Language code looks like this: (label) opcode (operand) (comments) The fields that are bracketed are considered optional depending on the opcode used. @Mnemonics: Each machine instruction has a symbol name referred to as an operation code(opcode), also called a mnemonic. Their are 56 such mnemonics in the 6510 instruction set. A typical mnemonic look like this: RTS Note that this mnemonic does not have a label or use a operand. geoCOPE is not case sensitive about mnemonics. Use can use upper or lowercase letters in describing the mnemonics. RTS, rts, Rts are all considered the same. Some Assemblers have a special operand for certain mnemonics. For example: The MADS assembler uses the letter A as a operand for the following four instructins: ASL, LSR, ROL, and ROR. copeAsm does not require this. @Labels: Their are two main types of labels, reference to a memory address and numeric labels. A reference label is placed next to certain code that you might want to call, where a numeric label is normally assigned a value. Label1 LDA #1 ; this is a address label Label2 = 50 ; this is a numeric label. Their are a few special notes to remember about labels. 1. Labels are Case sensitive. The words 'Label' and 'label' are not the same to the Assembler. 2. Labels must start with an ASCII character, they cannot start with a number. They can have a number included within the label itself such as 'Move2there'. Labels are limited to 32 characters. 3. Do not accidently include any math operators. (see Arithmetic Operations) 4. All numeric labels with the value of less that 256 ($FF) must be assigned their value before their used. This can normally be done in a 'equates' file. ( Page 5 Labels with a value of less than 256 have to be declared before use for the following reason. The Assembler is a two pass Assembler. Memory is divided up into ZeroPage and Absolute. ZeroPage is treated differently by the assembler and processor for optimization of program code. Many instructions have a different meaning when the operand is a ZeroPage value. If you reference a label before it's declared then it is assumed to be a Absolute label and you program code will be wrong and possibly not work. @Local or Branch labels Branch labels consist of a commercial-at-sign (@) followed by a sequence of characters. The branch label allows alphanumeric characters and have unlimited length. Only the first four characters will be used to define the label. It is called a branch label because of the way it is used. You can only use a branch label as the destination of a branch instruction. A branch label is not added to the label as other labels are. A branch label can only be used within the same file. You cannot use a branch label that jumps across a "INCLUDE" directive. Example: CodeHere LDA #$40 STA $4000 LDA StatusFlag BNE @StatusOn BEQ @0001 @StatusOn ; notice that only the first four characters will be 'seen' by the assembler. They are ; 'Stat'. @0001 ; '0001' is different that '001' and '01'. the label is read as a character string. You can have up to 32 branch labels outstanding. A outstanding branch label is where you branch forward in the file to a spot lower in the file. The above examples are forward branches. @Constants: You can use constants from the following number systems; binary, hexadecimal, decimal. Decimal is the default number system and a prefix character can be used to declare the others. $ (dollar sign) Hexadecimal % (Percent sign) Binary ' (Apostrophe) ASCII literal character " (Quote) ASCII literal character LDA $4000 ;load accumulator from address $4000 (16384) LDA #%00100011 ; load accumulator from the binary representation of 35. LDA #"G ; load the ASCII value of the character G into the accumulator Binary Constants: These are the numbers 0-1. Decimal Constants: These are the numbers 0-9 Hexadecimal Constants: These are the numbers 0-9 and the characters A-F. ( page 6 @Pseudo Operators: Their are twenty one directives that you can use to give the assembler special instructions. This is where copeAsm will differ most with other assemblers so let's cover them in detail. 1: @= [EQUALS] The equal sign is used to assign a value to a label. It cannot be used to reserve memory locations or reset the program counter. It is used to create numeric labels. Label = 500 Label = 4*5+2-TWO The following pseudo-ops require a period before the command word. The first letter of these pseudo-ops should be a @UPPERCASE letter! If desired, all pseudo-ops which are preceded by the period may be abbreviated. The abbreviation follows the full word in the examples below. 2:@ .BYTE [Byt] Is used to reserved one byte of memory. Multiple operands may be used if separated by a comma. ASCII text strings can be generated by enclosing them in quotes. (Single or double quotes). Tables .Byte 5 , 5 , 5 .Byte 128+2 .Byte 'This string includes the double quote (") within it ' .Byte "This string includes the single quote (') within it " Note that the strings use the opposite quote to contain the quote character needed for the string. .Byte 5000 ; this outputs only the lower byte (136) 3:@ .WORD  [Wor] Is used to output two bytes of data at a time. Addressed are stored in low-byte, high-byte order. Tables .Word $4F00 This would be stored with 00 bytes first followed by $4F. The most common use for Word is to generate address with a label, such as. .Word MenuText 4: @ .PC  [PC] PC is short for Program Counter. It can be used in a similar fashion as an Asterisk in some Assemblers. It is generally used to change the program counter to a new value. LabelHere .PC = LabelHere + 25 In the above example, the PC command will take the Program counter, and add 25 + the value of LabelHere to it. Since the Pc command changes the Program counter, make only small changes to its value. ( page 7 5: @ .INCLUDE  [Inc] Include is used to include the source code from other files into the assembly process. When the assembler incounters this directive, it marks the current file and loads the new file and starts assembling the source code there. When it's through with that file, it reloads the original file and resumes with it. You would normally place Include statements at the beginning of your source file to include suce things as ZeroPageEquates, Constants, and Library files. Do not enclose filenames with quotes. Place a CarriageReturn immediately after the filename. This prevents you from accidentally including spaces with the filename. Include will automatically search both drives in a two drive system. .Include Equates .Include Routines The filename given can be a Seq. file or a VLIR file. If a VLIR filename is given, the entire VLIR file is included. If you wish to only include one 'page' from a VLIR file, then follow the name with a comma and the record number of the page. @WARNING! The record number is always one LESS that the page number. .Include TestFile,1; includes the 2nd page of TestFile. 6: .@START  [@Sta] @Start describes to the assembler where in memory the program will start at. This is the value stored in the File Header for this file and is the load address for the file. This directive should be the first directive for your source file. It is only used once and is optional. If left out, the default starting position is at $0400. @Start also updates the Initialization address to the same as the @Start address. This can be changed with the Initprog command below. .START $800 7: @ .INITPROG  [Ini] @Initprog can be used to change the initialization address that is normally the same as the start address. If you store data as the front of your file this can come in handy. It has several methods of use. DATA DATA DATA .Initprog ; use by it self it will take the current Program counter value. or... .Initprog Initroutine ; use it with a label pointing to the initialization routines DATA DATA Initroutine or... LDA #0 .Initprog $600 ; or use it with a direct value. 8: @ .AUTHOR [Aut] Allows setting the Authors name in the fileheader. Do not use quotes. Place a CarriageReturn immediately after the filename. This prevents you from accidentally including spaces with the filename. .Author Bill Sharp BSC ( page 8 9: @ .NAME  [Nam] Allows setting the permanent name in the fileheader. Do not use quotes. Place a CarriageReturn immediately after the filename. This prevents you from accidentally including spaces with the filename. .Name COPE Source V1.0 .Name "COPE Source V1.0",0,0,0,0 ; use this form to pad out all twenty bytes. This is useful if you need to set the 40/80 column flag for GEOS128. 10: @.TYPE [Typ] Allows setting the file type for this file, the default is a APPLICATION file .Type 6 11. @ .Icon  [Ico] ICON is used to define the Icon for this file. This requires 63 bytes of data to described the Icon. This data is not stored in the final program. .Icon $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 .Byte $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 .Byte $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 .Byte $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 . .Byte $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 .Byte $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 .Byte $FF , $FF , $FF, $80, 0, $01, $99, $26, $25 12. @ .BLOCK  [Blo] The block command is the most convient way of reserving a range in memory. The command syntax follows: .Block Length [,Value] Length is the number of bytes to output, Value (which is optional, zero is the default) is the byte value to use. Block can be used in the following ways. .Block 20,0 ;outputs 20 zeros .Block 10,5 ; outputs 10 fives .Block 20 ; outputs 20 zeros .Block 20,'A ; outputs 20 "A's" (value 65) 13: @ .HEX  [Hex] Change screen listing to hexadecimal 14: @ .DEC [Dec] Change screen listing to decimal format 15: @ .SON [Son] short for ScreenON Turns the screen listing feature on. 16:@ .SOFF [Sof] short for ScreenOFF Turns the screen listing feature off. ( page 9  17. @.DNAME [Dnam] Dname is short for diskname. This is the actual name that is shown from the DeskTop. This command is optional. If you use a name that is found on the disk you are asked if you wish to replace it. 18. @.NEWPC [Newpc] Newpc allows changing the actual assembly address without changing the way code is stored in geoCOPE's internal bufffer. This is a convient command for setting up sections of code that is assembled at the same address. This will usually be done when working with VLIR records. 19. @.SEGMENT [Seg] Segment is used to describe the layout of a VLIR file. As the assembly process continues, code is stored in geoCOPE's internal buffer. When a segment command is encountered the internal buffer is stored to the disk. The buffer is cleared and is ready for new code. The record number is optional. For the first segment used, if a record number is not given then the default will be zero. For every segment afterwards that does not have a record number after it, the current record number will be incremented by one. 20. @.MAC [Mac] @.MND Mac is short for macros. This is where you start defining your macros. MND is short for MacroEnd. The code included between the macros is simply assembly source code. Parameters can be passed to the macro. When you envoke the macro (by using it's name) include the parameters you wish to send it after the name. Separate the parameters with a colon. The macro can have up to 9 parameters passed to it. To declare a macro: .Mac loadw lda #?1 sta ?2+1 .MND To execute the macro: @ loadw R0:FileName This macro load the position of the first parameter and stores it in the second parameter. R0 is now pointing at FileName. Macros can be nested up to 4 levels. Parameters cannot be passed to a nested macro. 21. @.DRIVE [Dri] .Drive [Drive #] Drive can be used to change the current drive. When used with no value, it switches drives. You can include a drive number if you wish. ( page 10 @Arithmetic Operations@  the four basic arithmetic operations and three logic operations are denoted: * Multiplication / Division + Addition - Subtraction & Logical AND ^ Logical EOR (Exclusive OR) (press the up-arrow key for this symbol). | Logical OR (press the C= key and the up-arrow key for this symbol). Currently geoCOPE does not allow parenthesis in it's equations. Parenthesis would be confused when dealing with addressing modes. @ Hierarchy of arithmetic and logical operations: Highest * / Multiplication and Division + - Addition and Subtraction & Logical AND ^ Logical XOR | Logical OR Lowest Any equation using labels, constants, and the above arithmetic operators can be used in place of an operand. Equations can be used in the Pseudo-Ops that expect a math value for a answer. Lets see some examples: .Byte 5 , 5 ; typical byte statement. .Byte 2*14+1 ; this will give 29 as a value. LDA #25 ; typical load Accumulator statement LDA #25*4+3 ; loads the accumulator with 103. Labels can be used also. Be careful using address labels. LDA #LeftMargin +5 ;If LeftMargin = 20, then this loads 25 into the accumulator. .Byte MenuBottom+4*14+1 ;This add 57 to MenuBottom. When describing menus in GEOS, your first byte is .Byte 128 | 5 a 128 OR'ed with the count of menu Items. And #%0110010 Logically AND a value with the binary value 50. ( page 11  Section 3: Using the Assembler  Using copeAssembler is relative easy. The hard work is coding the programs. @On Startup The startup screen only had three Icons active. The Screen listing Icon, The Start icon, and the Quit icon. @Quit Icon: The quit icon allows you to get back to the deskTop. If you press this icon during the Assembly process you are asked if you want to quit. If you answer yes then you will return to the DeskTop. @Screen Icon: By pressing the @on and @off switches, you can control the listing of the assembly process to the screen. You can even do this during an assembly. Listing is only active during the second pass. @Start Icon: The Start Icon brings up a dialogbox so you can select the file you wish to assembly. Select the file and the assembly process begins. Once the assembly process is under way, their are several other status indicators and another icon to watch. @Pos: and Size.  this display the current filesize and the position the assembler is within this file. The position is updated at every ten lines of source code. Printing to the screen during an assembly is time consuming! @Filename box: this box shows the current file being assembled. @Soft and Hard Errors: A soft error only occurs when their is a pseudo-op that the assembler does not understand. It is up to you to determine if the error is fatal to the program. Hard errors are almost always fatal to the program being assembled. You might want to continue to see if you can find any more errors. At each error the assembler pauses. Pressing the joystick button signals the assembler to continue. @Pass Indicator: This shows you which pass your on. @Pause Icon: This icon allows you to stop the assembly process to take a look at your code. If you turn the screen function on then the assembler will display to the screen. Sometimes this is too fast to read and you will need to pause the screen. To restart, press the pause icon again. @saveFile dialogBox When the assembly process is finished, you are required to give a name to the file before it is saved to the disk . This may be done with the Dname pseudo. geoCOPE also displays some vital statistics about the file it's saving. @FileSize: this is the actual size of the file. Currently, this has a maxium of 8K (8,192 bytes). Each record of a VLIR file may be 8K in size. Do not over extend the internal buffer. @LabelSize: This is the size of the label array built in memory during the assembly process. This is limited to 5000 bytes currently. @LabelCount: This is for your information. Their is no limit on the count of labels. (0 page 12 @copeAssembler Error Messages  Without error messages, it's hard to figure out what's wrong with your program. Here are the explanations of the error messages. @Error Messages: @NOT A VALID COMMAND This is the error message you get when copeAssembler does not understand the directive or pseudo-op. All pseudo-ops begin with a period. Check for mispelling of the pseudo-op. Check that the first character is a Capital letter. @DUPLICATED LABEL This label has been used twice in your source code. Either you have used it as a numeric label twice or as a address label twice. Or once each. @NOT A VALID LABEL The first character of this label is invalid. The first character must be alphabetic. @UNABLE TO FIND LABEL VALUE  When a label is used in an expression (an operand), The label value could not be found in the label array. Check spelling and syntax of label. @INCORRECT CHARACTER FOR HEX VALUE  A non hexadecimal character has been found while trying to interept a hexadecimal ($) number. Hexadecimal only allows 0-9,A-F. A-F must be in @CAPS. @INCORRECT CHARACTER FOR DECIMAL VALUE A non decimal character has been found while trying to interept a decimal number. Decimal only allows 0-9. @INCORRECT CHARACTER FOR BINARY VALUE A non binary character has been found while trying to interept a binary number. Binary only allows 0-1. @ADDRESS VALUE NOT ZERO PAGE The operand value is greater that 255 ($FF). Some opcodes do not allow this depending on the addressing mode. Example: LDA (misc),Y @misc cannot be greater that 255. @ INCORRECT ADDRESSING MODE The expression (operand) is invalid for this opcode. Check to make sure you can use this addressing mode. Check the placement of the comma. @ INDEX IS NOT A VALID CHARACTER  This message is given when you try to use the X register with the LDX and STX commands. (_@INDEX MISSING AFTER COMMA page 13@ In an indirect addressing mode, could not find a index (X or Y) after the comma. @ X INDEX ADDRESSING MODE INCORRECT  In Pre-Indexed indirect addressing, the X index is misplaced or missing. @ BRANCH OUT OF RANGE All of the branch instructions are assembler into two bytes of code. The first byte is the opcode and the other byte is the position relative to the next byte to branch from. A branch forward is limited to 0-127 bytes. A branch backwards is limited to 0-128 bytes. If your branch is out of range, their is too much code between the branch instruction and the destination. @ UNABLE TO EVALUATE ADDRESS-MODE The operand start with a value of less than 36 and cannot be evaluated. @ NAKED MNEMONIC  The opcode should have an operand following it. When no operand is found and the opcode expects one, you get this error. @ ERROR IN INDIRECT ADDRESSING MODE  The opening parenthesis was found for the operand, but no comma or closing parenthesis could be found. The operand type could not be evaluated. @ Y INDEX REGISTER NOT DECLARED A Post-Indexed Indirect addressing mode is missing the following Y register character. @INSUFFICIENT DISK SPACE While trying to save a file, it is found that the disk in the drive does not have enough room to hold the entire file. Change disks with the @DISK icon. @YOU HAVE EXPERIENCED DISK ERROR # Their is a problem with the disk drive. Check the corresponding number to the disk error numbers below. These numbers correspond to the disk error chart in the 'Programmers Reference Guide'. The most common disk error found will be the 'FILE_NOT_FOUND' error. This will happen when you INCLUDE a file and the file is either missing or the spelling of the filename is wrong. Disk Error #: Description 1 NOT_ENOUGHT _BLOCKS 2 INVALID_TRACK 3 INSUFFICIENT_SPACE 4 FULL_DIRECTORY 5 FILE_NOT_FOUND 6 BAD_BAM 13 DEVICE_NOT_FOUND $73 DOS_MISMATCH All other errors are problems with the disk. Check the disk for sector errors. PetASCII_FORMV PRG formatted GEOS file V1.0COPE Source V1.1COPE Editor V1.1UntitledForm: PetASCII AAAAAAAAAAAAAAAAA@%; This file is used to convert PETASCII text; into a geoCOPE text file;; convertsion for lowercase letters65=9766=9867=9968=10069=10170=10271=10372=10473=10574=10675=10776=10877=10978=11079=11180=11281=11382=11483=11584=11685=11786=11887=11988=12089=12190=122;; conversion for Uppercase letters97=6598=6699=67100=68101=69102=70103=71104=72105=73106=74107=75108=76109=77110=78111=79112=80113=81114=82115=83116=84117=85118=86119=87120=88121=89122=90ReadMe.VLIRX PRG formatted GEOS file V1.0@DCOPE Source V1.1geoCOPE V1.2COPE Editor V1.2D\C UntitledeReadMe.VLIR  \C]CCCCCCD0DTDuDDDDDD@@Information for ReadMe.VLIR The sample VLIR program included istaken directly from the geoCOPE editor.The routines have been taken out, but themenu structure and method of loading inpages from the disk is left intact. This sample program will give you anidea on how to code your own programsusing the VLIR paging concepts unique toGEOS.Here is a general description of these files: Script.vlir I like to use a script file toshow how the entire program is setup.This file includes all the pseudops that effectthe file header, all the include files, and howthe pages are setup in relationship to eachother. System: The system file includes all of theconstants, equates, routines, and macros usedin this file.MC51: MC stands for MainCode. This is where theinitialization routines are placed.UTILITY: general utility routines.TABLES: data tables used for this fileLOAD & EDITFUN: these are dummy routinesthat show a DialogBox when activated.SAVE, FIND, PRINT, PAGEMOVE, and AUTOSAVE: These are the routines that are paged in asthey are needed. The code in theseroutines print a DialogBox also.=================================================Bill SharpScript.vlirV  PRG formatted GEOS file V1.0@/DCOPE Source V1.1DISK ACOPE Editor V1.1CCUntitled%Script.vlir PCCCCCCDD&D-D-D-D-D-D-D-D@@/.START $400.INIT CodeHere.TYPE 6.NAME COPE_VLIR.Dname copeVLIR.Author BSC TechUnit;---------.Icon 0,$20,$F0.Byte 0,$F8,$F0,1,$8D,$20,3,7.Byte $E0,6,$26,$40,$C,$66,$40,$18,$C4,$80,$31,$8C,$E0,$71,$19,$30.Byte $58,$39,$18,$EC,$12,$0C,$36,$1E,$66,$1B,$1C,$C3,$D,$99,$81,6.Byte $D3,$31,3,$60,$63,1,$B0,$C6,0,$D8,$8C,0,$6C,$18,0,$37.Byte $F0,0,$1F,$E0;=====; equates for pages to be loaded in.SAPAGENO = 1FINDPAGE = 2PRINTPAGE = 3PageMove = 4ASAVE = 5;----.Include System; holds equates, constants, routines, and macros.CodeHere.Include MC51.Include UTILITY.Include LOAD.Include EDITFUN.Include TABLES.Segment; end of the resident section.; Address to start paging of programsPageAddress; location to load in all the remainding pages.;---.Newpc PageAddress.Include SAVE.Segment SAPAGENO;-----.Newpc PageAddress.Include FIND.Segment FINDPAGE;----.Newpc PageAddress.Include PRINT.Segment PRINTPAGE;------.Newpc PageAddress.Include PAGEMOVE.Segment PageMove;-----.Newpc PageAddress.Include AUTOSAVE.Segment ASAVE;------SystemXPRG formatted GEOS file V1.0COPE Source V1.1COPE Editor V1.1@@Equates, constants, and routines. @@4@R@d@t@@@@@@@@@@@@@/l; *****************; * EQUATES FOR GEOS EDITOR; * BY BILL SHARP; ***************curDevice = $BASTPAT = $C139ILRECT = $C19FHORLIN = $C118DISBUF = $002FR0 = $02R1 = $04R1L = $04R1H = $05R2 = $06R3 = $08R4 = $0AR5 = $0CR6 = $0ER7 = $10R8 = $12R9 = $14R10 = $16R11 = $18R12 = $1AR13 = $1CKEYVEC = $84A3STFVEC = $84ABKEYDTA = $8504PUTCHR = $C145ENTDSK = $C22CBOLD = 24PLAIN = 27HORIZ = 0VERT = 128MACT = 0MANTOP = 0MANBOT = 14MANLFT = 0A0 = $FBA1 = $FDMANRT = 142A2 = $70A3 = $72A4 = $74A5 = $76A6 = $78A7 = $7AA8 = $7CA9 = $7ESTART1 = A2END = A3DIST = A4CBP = A5SOB = A6EOB = A7LINEL1 = A8MISC = A9STRINX = $84BESTRINY = $84C0CRMODE = $2EMEMTOP = $57MEMBOT = $59CURPOS = $5BPC = A0PCRAM = A1X_Can = 72Y_Can = 72LineCount = 15 ;number of lines on the screenmouseXPos = $3AmouseYPos = $3C; CONSTANTScurDrive = $8489curRecord = $8496dirEntryBuf = $8400FileHeader = $8100CURDHD = $8200numDrives = $848DsysDBData = $851D;----; NOTE:; The more labels you have the slower the Assembler; will run. Place a semi-colon in front of the routines; you will not be using.;;MISC;BootGEOS = $C000;ResetHandle = $C003;InterruptMain = $C100;; PROCESSES;;InitProcesses = $C103;RestartProcess = $C106;EnableProcess = $C109;BlockProcess = $C10C;UnblockProcess = $C10F;FreezeProcess = $C112;UnfreezeProcess = $C115;; GRAPHICS; HorizontalLine = $C118 InvertLine = $C11B RecoverLine = $C11E VerticalLine = $C121 Rectangle = $C124 FrameRectangle = $C127 InvertRectangle = $C12A RecoverRectangle = $C12D DrawLine = $C130 DrawPoint = $C133 GraphicsString = $C136 SetPattern =$C139 GetScanLine = $C13C TestPoint = $C13F;; BACKGROUND GENERATION; BitmapUp = $C142;; CHARACTER MANIPULATION; PutChar = $C145 PutString = $C148 UseSystemFont = $C14B;; MOUSE & MENUS; StartMouseMode = $C14E RecoverMenu = $C154 RecoverAllMenus = $C157 DoIcons = $C15A;; UTILITIES;;DShiftLeft = $C15D;BBMult = $C160;BMult = $C163;DMult = $C166;Ddiv = $C169;DSdiv = $C16C;Dabs = $C16F;Dnegate = $C172;Ddec = $C175;ClearRam = $C178;FillRam = $C17B;MoveData = $C17E;InitRam = $C181;PutDecimal = $C184;GetRandom = $C187;; MISC MOUSE, MENU, GRAPHICS, SLEEP; MouseUp = $C18A MouseOff = $C18D DoPreviousMenu = $C190 ReDoMenu = $C193 GetSerialNumber = $C196 Sleep = $C199 ClearMouseMode = $C19C i_Rectangle = $C19F i_FrameRectangle = $C1A2 i_RecoverRectangle = $C1A5 i_GraphicsString = $C1A8 ; BACKGROUND GENERATION; i_BitmapUp = $C1AB ; CHARACTER MANIPULATIION i_PutString = $C1AE GetRealSize = $C1B1; MOUSE & MENUS;; UTILITIES;i_FillRam = $C1B4;i_MoveData = $C1B7;; ROUTINES ADDED LATER;GetString = $C1BA GotoFirstMenu = $C1BD;InitTextPrompt = $C1C0;MainLoop = $C1C3;DrawSprite = $C1C6;GetCharWidth = $C1C9;LoadCharSet = $C1CC;PosSprite = $C1CF;EnablSprite = $C1D2;DisablSprite = $C1D5;CallRoutine = $C1D8;CalcBlksFree = $C1DB;ChkDkGEOS = $C1DE NewDisk = $C1E1 GetBlock = $C1E4 PutBlock = $C1E7;SetGEOSDisk = $C1EA SaveFile = $C1ED;SetGDirEntry = $C1F0;BldGDirEntry = $C1F3;GetFreeDirBlk = $C1F6 WriteFile = $C1F9;BlkAlloc = $C1FC ReadFile = $C1FF;SmallPutChar = $C202;FollowChain = $C205 GetFile = $C208 FindFile = $C20B;CRC = $C20E LdFile = $C211;EnterTurbo = $C214;LdDeskAcc = $C217 ReadBlock = $C21A;LdApplic = $C21D;WriteBlock = $C220;VerWriteBlock = $C223;FreeFile = $C226 GetFHdrInfo = $C229 EnterDeskTop = $C22C;StartAppl = $C22F;ExitTurbo = $C232;PurgeTurbo = $C235 DeleteFile = $C238 FindFTypes = $C23B;RstrAppl = $C23E;ToBasic = $C241;FastDelFile = C244;GetDirHead = $C247;PutDirhead = $C24A;NxtBlkAlloc = $C24D;ImprintRectangle = $C250;i_ImprintRectangle = $C253 DoDlgBox = $C256;RenameFile = $C259;InitForIO = $C25C;DoneWithIO = $C25F;DShiftRight = $C262;CopyString = $C265;CopyFString = $C268;CmpString = $C26B;CmpFString = $C26E;FirstInit = $C271 OpenRecordFile = $C274 CloseRecordFile = $C277 NextRecord = $C27A PreviousRecord = $C27D PointRecord = $C280 DeleteRecord = $C283 InsertRecord = $C286 AppendRecord = $C289 ReadRecord = $C28C WriteRecord = $C28F;SetNextFree = $C292;UpdateRecordFile = $C295 GetPtrCurDkNm = $C298;PromptOn = $C29B;PromptOff = $C29E OpenDisk = $C2A1;DoInlineReturn = $C2A4;GetNextChar = $C2A7;BitmapClip = $C2AA;FindBAMBit = $C2AD SetDevice = $C2B0 IsMseInRegion = $C2B3;ReadByte = $C2B6;FreeBlock = $C2B9;ChangeDiskDevice = $C2BC;RstrFrmDialog = $C2BF;Panic = $C2C2;BitOtherClip = $C2C5;StashRAM = $C2C8;FetchRAM = $C2CB;SwapRAM = $C2CE;VerifyRAM = $C2D1;DoRAMOp = $C2D4;MAcros for Assembler;------; MACROS.MAC loadw; examp.le load R0:memusldx #?2stx ?1+1.MND;----; this macro sets up the menu structure.MAC menu.Word ?1.Byte ?2.Word ?3.MND;-----.MAC movew ldx ?1 stx ?2 ldx ?1+1 stx ?2+1.MND;----.MAC addwclclda ?1adc ?2sta ?2lda ?1+1adc ?2+1sta ?2+1.MND;----.MAC addyclctyaadc ?1sta ?1lda ?1+1adc #0sta ?1+1.MND;----;-----MC51V PRG formatted GEOS file V1.0@LCOPE Source V1.1DISK ACOPE Editor V1.1JAJUntitled,4MC51AVEq dAJPJWJaJnJzJJJJJJJJJJJ@@/; ===; EDITER FOR GEOS ASSEMBLER; BY BILL SHARP;===START JSR OpenDisk; ; load the disk name into buffer TFName; This is necessary because the user may change the; filename. We cannot assume what it is.; loadw R6:TFName lda #6 sta R7 lda #1 sta R7+1 loadw R10:LkFr jsr FindFTypes;;------ JSR $C18A; mouseup JSR Clr_Screen JSR VECTORloadw R0:ICONS JSR $C15A; do ICONSloadw R0:MENUS LDA #1 JSR $C151; DoMenu RTSLkFr .Byte 'COPE_VLIR'TFName .Block 20.Byte 'ABCDEF',0;===; ICON ROUTINEICONS.BYTE 1 ; 1 ICON.WORD 160.BYTE 0.WORD Icdt.BYTE 38,0,2,15.WORD QUIT2 ; CODEIcdt.BYTE 158.BYTE 255,255,0,0,255,255,128,01,128,1,128,1.BYTE 135,225,135,225,135,225.BYTE 128,01,128,01,128,01.BYTE 255,255.BYTE 0,0.BYTE 255,255;===MENUS.BYTE MANTOP.BYTE MANBOT.WORD MANLFT.WORD MANRT.BYTE HORIZ | 5.WORD MTX1.BYTE $80.WORD MSB1.WORD MTX2.BYTE $80.WORD MSB2.WORD MTX3.BYTE $80 .WORD MSB3.WORD MTX4.BYTE $80 ; SUB-MENU.WORD MSB4.WORD MTX5.BYTE $80.WORD MSB5MTX1 .BYTE PLAIN,128,0MTX2 .BYTE 'File',0MTX3 .BYTE 'Edit',0MTX4 .BYTE 'Search',0MTX5 .BYTE 'Toolbox',0;== START OF SUB-MENUSMSB1.BYTE MANBOT.BYTE MANBOT+1*14+1.WORD MANLFT.WORD MANLFT+30.BYTE VERT | 1.WORD Sx11.BYTE 0.WORD NOCODESx11 .BYTE 'COPE Info',0;-----MSB2.BYTE MANBOT.BYTE MANBOT+5*14+1.WORD MANLFT+20.WORD MANLFT+86.BYTE VERT | 5.WORD Su21.BYTE 0.WORD LOAD.WORD Su22.BYTE 0.WORD SAVE.WORD Su23.BYTE 0.WORD PRINT.WORD Su24.BYTE 0 .WORD QUIT.WORD Su25.BYTE 0.WORD SaveAs1Su21 .BYTE 'Load',20,64,0,128,'L',0Su22 .BYTE 'Save',20,64,0,128,'S',0Su23 .BYTE 'Print',0Su24 .BYTE 'Quit',20,64,0,128,'Q',0Su25 .BYTE 'Save As...',0; END SuENU 2; START SuENU 3MSB3.BYTE MANBOT.BYTE MANBOT+4*14+1.WORD MANLFT+41.WORD MANLFT+105.BYTE VERT+4.WORD Su31.BYTE 0.WORD CUT.WORD Su32.BYTE 0.WORD COPY.WORD Su33.BYTE 0.WORD PASTE .WORD Su34.BYTE 0.WORD CLEARSu31 .BYTE 'Cut',20,83,0,128,'X',0Su32 .BYTE 'Copy',20,83,0,128,'C',0Su33 .BYTE 'Paste',20,83,0,128,'T',0Su34 .BYTE 'Clear',20,85,0,'DEL',0MSB4.BYTE MANBOT.BYTE MANBOT+43.WORD MANLFT+63.WORD MANLFT+142.BYTE VERT+3.WORD Su41.BYTE 0.WORD FIND.WORD Su42.BYTE 0.WORD RPTSTR.WORD Su44.BYTE 0.WORD PageGO; GoMenu; changed to delete function key displaySu41 .BYTE 'Find...',20,120,0,128,'F',0Su42 .BYTE 'Replace...',20,120,0,128,'R',0Su44 .BYTE 'Goto Page...',20,120,0,128,'G',0MSB5.BYTE MANBOT.BYTE MANBOT+29.WORD MANLFT+99.WORD MANLFT+155.BYTE VERT+2.WORD Su52.BYTE 0 .WORD Asave.Word Su53.Byte 0.Word BMarkSu52 .Byte 'AutoSave',0Su53 .Byte 'BookMark',0;== END OF MENU TABLES; VECTOR TABLEVECTORJSR $C1B7.WORD TMPNME.WORD FNAME.BYTE 17,0VECTOR1LDX #0INXRTS;==QUITJSR $C1BDQUIT2JMP ENTDSK;====; DIALOG BOXESDB1 .BYTE 128+2.BYTE 11,70,30.WORD Wa.BYTE 11,45,45.WORD Wa2.Byte 11,68,75.Word Wa3.Byte 11,40,60.Word Wa4.BYTE 14,0Wa .BYTE BOLD,'geoCOPE',PLAIN,0Wa2 .BYTE 'Copyright 1987, 1988',0Wa4 .Byte 'by Bill Sharp Computing',0Wa3 .Byte 'Version 1.1',0;===;APPLICATION CODE/MENUS AND ICONS.NOCODEJSR $C1BD ;GOTO FIRST MENUloadw R0:DB1JSR $C256; DO DIALOG BOXRTSNoCHARJSR $C1BD ;GOTO FIRST MENUloadw R0:DB1JSR $C256; DO DIALOG BOXRTS;====UTILITYV   PRG formatted GEOS file V1.0COPE Source V1.1COPE Editor V1.1@AAUntitledb$UTILITY @ @3@@@M@T@r@@@@@@@@@@@@/UF; -------Clr_Screen LDA #192 STA DISBUF LDA #0 JSR STPAT JSR ILRECT .Byte 0,199 .Word 0,319 RTS;-----LoadPage and #$7F; clear hi-byte of accum. cmp pagenum beq LPex sta pagenum loadw R0:TFName jsr OpenRecordFile lda pagenum jsr PointRecord loadw R2:$1000 loadw R7:PageAddress jsr ReadRecord jsr CloseRecordFileLPex RTSpagenum .Byte $FF;-----SchLp ldx #255SchLp1 lda (CBP),Y ; waste time lda (CBP),Y ; waste time dex bne SchLp1 dey bne SchLpRTS;----Rst_Scn jsr $C1A5 .Byte 32,127+8 .Word 64,255+8 lda #192 STA DISBUF RTS;;-----;----;----;===SAVE JSR $C1BDSAVE2 lda #SAPAGENO jsr LoadPage jsr SAVE3 RTS;-----SaveAs1 JSR $C1BD lda #SAPAGENO jsr LoadPage jsr SAVE2 RTS;-----FIND; called from menuJSR $C1BDFIND3; called from keypress (OGS)lda #FINDPAGE jsr LoadPage jsr FIND3b RTSrptstr1 pla plajmp rpts2 RPTSTR; replace string routine JSR $C1BDrpts2 lda #FINDPAGE jsr LoadPage jsr RP1a RTS;-----PRINT JSR $C1BD PRINTa; if a file is a VLIR file, and then entire doc is; selected to print. then the page in memory; will be flushed. Make sure this page is saved.PtOk lda #PRINTPAGE jsr LoadPage jsr PRINT2Xd1 RTS;-----Do_DB_Box lda #128 sta DISBUF lda #2 jsr $C139 ;SetPatten jsr $C19F .Byte 32+8,127+8 .Word 64+8,255+8 lda #0 jsr $C139 jsr $C19F .Byte 32,127 .Word 64,255 lda #255 jsr $C127RTS;-----PageGOjsr $C1BDPageGO1 lda #PageMove jsr LoadPage jsr PageGoSkpg RTS;-----BMark; called from menuJSR $C1BD lda #ASAVE jsr LoadPage jsr BookMark RTS;-----Asave; called from menuJSR $C1BD lda #ASAVE jsr LoadPage jsr AutoSave RTS;----;---LOADV PRG formatted GEOS file V1.0@ACOPE Source V1.1DISK ACOPE Editor V1.1pA@ Untitled4>LOADYir  @@@@@@@@&AMApAyAAAAA@@/; LOAD ROUTINELOAD JSR $C1BD ; GOTO FIRST MENULOAD2LOAD3 loadw R0:VNDB11 JSR $C256 RTS;---;- DIALOG BOX FOR PROMPTVNDB11.BYTE 128+2.Byte 2,17,77-8.BYTE 11,8,24.WORD Xj1.BYTE 11,8,36.WORD Xj2.BYTE 11,8,48.WORD Xj3;.Byte 14.Byte 0Xj1 .BYTE 'You have selected a resident',0Xj2 .BYTE 'routine. No disk access',0Xj3 .BYTE 'is necessary to run.',0;=======;-----EDITFUNV PRG formatted GEOS file V1.0@ACOPE Source V1.1DISK ACOPE Editor V1.1A@UntitledeEDITFUNir Z@@@@AAAA$APAwAAAAAA@@/; The name of this file is EDITFUNCTIONCUT COPY CLEAR PASTE PHA JSR $C1BD PLACUT1X COPY1X PASTE1X loadw R0:VNDB8 JSR $C256 RTS;---;- DIALOG BOX FOR PROMPTVNDB8.BYTE 128+2.Byte 2,17,77-8.BYTE 11,8,24.WORD Xd11.BYTE 11,8,36.WORD Xd2.BYTE 11,8,48.WORD Xd3;.Byte 14.Byte 0Xd11 .BYTE 'You have selected a resident',0Xd2 .BYTE 'routine. No disk access',0Xd3 .BYTE 'is necessary to run.',0;=======;=========TABLESV  2PRG formatted GEOS file V1.0@&ACOPE Source V1.1DISK ACOPE Editor V1.1 @@UntitledTABLESq 2@@ @@C@T@c@u@@@@@@@@@@@/;----;---;============TMPNME .BYTE 'Untitled',0,0,0,0,0,0,0,0,0CRCDTA .BYTE 0,0diskfg .BYTE 0FNAME .Block 17,0CLN .BYTE 0,0FLP .BYTE 30LINES .BYTE 10STRX .BYTE 0,0STRY .BYTE 30MAXX .BYTE 0,0TXPTHT .BYTE 8LOS .BYTE 0VALONE .BYTE 1,0LINECT .BYTE LineCount.BYTE 0;.Byte 0,0,0,0SAVEV  ;PRG formatted GEOS file V1.0@sACOPE Source V1.1DISK ACOPE Editor V1.1JA@UntitledSAVEAVEq d@@@@@@AJAhAqAqAqAqAqAqAqA@@/; THIS IS THE UPPER LEVEL OF THE; SAVE ROUTINES.SAVE3 loadw R0:VNDB JSR $C256 RTS;---;- DIALOG BOX FOR PROMPTVNDB.BYTE 128+2.Byte 2,17,77-8.BYTE 11,8,24.WORD Xf1.BYTE 11,8,36.WORD Xf2.BYTE 11,8,48.WORD Xf3;.Byte 14.Byte 0Xf1 .BYTE 'You have loaded Record #1',0Xf2 .BYTE 'This is where the save routines',0Xf3 .BYTE 'Are located at.',0;=======FINDV  ;PRG formatted GEOS file V1.0@BCOPE Source V1.1DISK ACOPE Editor V1.1BAUntitledDFINDOVEq AAAAAABB B*B,B5B=BeBBB@@/; routines to find a text string.FIND3b loadw R0:VNDB1 JSR $C256 RTS;---;- DIALOG BOX FOR PROMPTVNDB1.BYTE 128+2.Byte 2,17,77-8.BYTE 11,8,24.WORD Xh1.BYTE 11,8,36.WORD Xh2.BYTE 11,8,48.WORD Xh3;.Byte 14.Byte 0Xh1 .BYTE 'You have loaded Record #2',0Xh2 .BYTE 'This is where the FIND routines',0Xh3 .BYTE 'Are located at.',0;=======;RP1a; replace string routine loadw R0:VNDB2 JSR $C256 RTS;---;- DIALOG BOX FOR PROMPTVNDB2.BYTE 128+2.Byte 2,17,77-8.BYTE 11,8,24.WORD XI1.BYTE 11,8,36.WORD XI2.BYTE 11,8,48.WORD XI3;.Byte 14.Byte 0XI1 .BYTE 'You have loaded Record #2',0XI2 .BYTE 'This is where the replace routines',0XI3 .BYTE 'Are located at.',0;=======PRINTV PRG formatted GEOS file V1.0@uACOPE Source V1.1DISK ACOPE Editor V1.1HA@UntitledfpPRINTVEq d@@@@@@AHAfAoAsAsAsAsAsAsA@@/;Routines for the printer;Print selection DBPRINT2 loadw R0:VNDB4 JSR $C256 RTS;---;- DIALOG BOX FOR PROMPTVNDB4.BYTE 128+2.Byte 2,17,77-8.BYTE 11,8,24.WORD Xc1.BYTE 11,8,36.WORD Xc2.BYTE 11,8,48.WORD Xc3;.Byte 14.Byte 0Xc1 .BYTE 'You have loaded Record #3',0Xc2 .BYTE 'This is where the PRINT routines',0Xc3 .BYTE 'Are located at.',0;=======;---PAGEMOVEV  9PRG formatted GEOS file V1.0@QACOPE Source V1.1DISK ACOPE Editor V1.1@@Untitled[PAGEMOVEq 2@@@@@AICONSSTX R0+1JSR DoIcons ; SETUP ICONSLDX #MENUSSTX R0+1LDA #1 ; MENU POS/MOUSEJSR DoMenuRTS; ==; ICON EXECUTION ROUTINEICONS.BYTE 1 ; one Icon.WORD 160 ; X position to place mouse.BYTE 0 ; Y position to place mous.WORD IconData ; pointer to icon BitMap.BYTE 38 ; X position in bytes to place Icon.BYTE 0 ; Y position in scanlines to place Icon.BYTE 2,15 ; Width in bytes, Height in pixels.WORD QUIT2 ; Code to call;; the icon data is stored in BitMapUp formatIconData.BYTE 158.BYTE 255,255,0,0,255,255,128,01,128,1,128,1.BYTE 135,225,135,225,135,225.BYTE 128,01,128,01,128,01.BYTE 255,255.BYTE 0,0.BYTE 255,255;===MENUS.BYTE MenuTopPos.BYTE MenuBotPos.WORD MenuLeft.WORD MenuRight.BYTE HORIZ | 5 ; Horizontal OR'ed with 5 (for 5 items).WORD MEMTX1 ; Pointer to Text for first menu position.BYTE $80 ; SUB-MENU structure.WORD MEMSB1 ; Pointer to Sub-Menu; The pattern for menus are the same below.WORD MEMTX2.BYTE $80.WORD MEMSB2.WORD MEMTX3.BYTE $80 ; SUB-MENU.WORD MEMSB3 ; SUB-MEM.WORD MEMTX4.BYTE $80 ; SUB-MENU.WORD MEMSB4.WORD MEMTX5.BYTE $80.WORD MEMSB5MEMTX1 .BYTE PLAIN,128,0MEMTX2 .BYTE 'File',0MEMTX3 .BYTE 'Edit',0MEMTX4 .BYTE 'Search',0MEMTX5 .BYTE 'Toolbox',0;== END OF MAIN MENU STRUCTURE;== START OF SUB-MENUSMEMSB1;----- MEMSB1X.BYTE MenuBotPos.BYTE MenuBotPos+15.WORD MenuLeft.WORD MenuLeft+81.BYTE VERT+1 .WORD SUBM1 .BYTE 0 .WORD NOCODE ; Perform this routine when menu is selected;-----SUBM1 .BYTE 'COPE info',0;END SUBMENU1;START SUBMENU2MEMSB2.BYTE MenuBotPos.BYTE MenuBotPos+5*14+1.WORD MenuLeft+20.WORD MenuLeft+86.BYTE VERT | 5.WORD SUBM21.BYTE 0.WORD LOAD .WORD SUBM22.BYTE 0.WORD SAVE .WORD SUBM23.BYTE 0.WORD PRINT.WORD SUBM24.BYTE 0 .WORD QUIT.WORD SUBM25.BYTE 0.WORD SaveAsSUBM21 .BYTE 'Load',20,64,0,128,'L',0SUBM22 .BYTE 'Save',20,64,0,128,'S',0SUBM23 .BYTE 'Print',0SUBM24 .BYTE 'Quit',20,64,0,128,'Q',0SUBM25 .BYTE 'Save As...',0; END SUBMENU 2; START SUBMENU 3MEMSB3.BYTE MenuBotPos.BYTE MenuBotPos+4*14+1.WORD MenuLeft+41.WORD MenuLeft+105.BYTE VERT+4.WORD SUBM31.BYTE 0.WORD CUT.WORD SUBM32.BYTE 0.WORD COPY.WORD SUBM33.BYTE 0.WORD PASTE .WORD SUBM34.BYTE 0.WORD CLEARSUBM31 .BYTE 'Cut',20,83,0,128,'X',0SUBM32 .BYTE 'Copy',20,83,0,128,'C',0SUBM33 .BYTE 'Paste',20,83,0,128,'T',0SUBM34 .BYTE 'Clear',0MEMSB4.BYTE MenuBotPos.BYTE MenuBotPos+43.WORD MenuLeft+63.WORD MenuLeft+132.BYTE VERT+3.WORD SUBM41.BYTE 0.WORD FIND.WORD SUBM42.BYTE 0.WORD RPTSTR.WORD SUBM44.BYTE $80.WORD GoMenu SUBM41 .BYTE 'Find...',20,110,0,128,'F',0SUBM42 .BYTE 'Replace...',20,110,0,128,'R',0SUBM44 .BYTE 'Go To...',0MEMSB5.BYTE MenuBotPos.BYTE MenuBotPos+15.WORD MenuLeft+99.WORD MenuLeft+142.BYTE VERT+1.WORD SUBM51.BYTE 0 .WORD IMPORTSUBM51 .BYTE 'Import',0GoMenu.Byte MenuBotPos.BYte MenuBotPos+4*14+1.Word MenuLeft+133.Word MenuLeft+214.Byte VERT | 4.Word GOM11 .Byte 0.Word DOPGUP.Word GOM12.Byte 0.Word DOPGDOWN.Word GOM13.Byte 0.Word DOTOP.Word GOM14.Byte 0.Word DOBOTTOMGOM11 .Byte 'Page-Up',20,198,0,BOLD,'F5',PLAIN,0GOM12 .Byte 'Page-Down',20,198,0,BOLD,'F7',PLAIN,0GOM13 .Byte 'Top',20,198,0,BOLD,'F6',PLAIN,0GOM14 .Byte 'Bottom',20,198,0,BOLD,'F8',PLAIN,0;== END OF MENU TABLES;==QUITJSR GotoFirstMenuQUIT2JMP EnterDeskTop;====; DIALOG BOXESDB1 .BYTE 128+2.BYTE 11.BYTE 10.BYTE 30.WORD NCSTR.BYTE 11,10,50.WORD NCSTR2.Byte 11,10,70.Word NCSTR3.BYTE 14.BYTE 0NCSTR .BYTE 'This is a sample program to',0NCSTR2 .BYTE 'demonstrate the coding methods to use',0NCSTR3 .Byte 'in writing programs with geoCOPE',0;===;APPLICATION CODE/MENUS AND ICONS.;; Currently, all of the routines in the MenuSystem points;to the NOCODE routine below.; See how all the Lables are currently using the same routine.;;LOAD SAVE PRINT SaveAs CUT COPY PASTE CLEAR FIND REPLACEIMPORT RPTSTR DOPGUP DOPGDOWN DOTOP DOBOTTOMNOCODEJSR $C1BD ;GOTO FIRST MENULDX #DB1STX R0+1JSR $C256; DO DIALOG BOXRTS;------clrScreen LDA #0 JSR SetPattern jsr i_Rectangle .Byte 0 .Byte 199 .Word 0 .Word 319 RTSZeroPageV  PRG formatted GEOS file V1.0@:CCOPE Source V1.1geoCOPE V1.00COPE Editor V1.1@@UntitledZeroPagen @@8@o@@@@@@@@@A AAA@@/; *****************; * Equates for GEOS SampleProg; * This file incluedes the ZeroPage Memory Lables; * and constants need for the program; * BY BILL SHARP; ***************R0 = $02R1 = $04R1L = $04R1H = $05R2 = $06R3 = $08R4 = $0AR5 = $0CR6 = $0ER7 = $10R8 = $12R9 = $14R10 = $16R11 = $18R12 = $1AR13 = $1CBOLD = 24PLAIN = 27HORIZ = 0VERT = 128MACT = 0MenuTopPos = 0MenuBotPos = 14MenuLeft = 0A0 = $FBA1 = $FDMenuRight = 142A2 = $70A3 = $72A4 = $74A5 = $76A6 = $78A7 = $7AA8 = $7CA9 = $7ECRMODE = $2E;********; GEOS FILE TYPES;;---------BASIC = 1ASSEMBLY = 2DATA = 3SYSTEM = 4DESK_ACC = 5APPLICATION = 6APPL_DATA = 7FONT = 8PRINTER = 9INPUT_DEVICE = 10DISK_DEVICE = 11SYSTEM_BOOT = 12TEMPORARY = 13AUTO_EXEC = 14RoutinesV  PRG formatted GEOS file V1.0@NCOPE Source V1.1geoCOPE V1.00COPE Editor V1.1@@UntitledłRoutinesn @@ @?@y@@@@@@@@@@ A&A@@/;; NOTE:; The more labels you have the slower the Assembler; will run. Place a semi-colon in front of the routines; you will not be using.;;MISC BootGEOS = $C000 ResetHandle = $C003 InterruptMain = $C100;; PROCESSES; InitProcesses = $C103 RestartProcess = $C106 EnableProcess = $C109 BlockProcess = $C10C UnblockProcess = $C10F FreezeProcess = $C112 UnfreezeProcess = $C115;; GRAPHICS; HorizontalLine = $C118 InvertLine = $C11B RecoverLine = $C11E VerticalLine = $C121 Rectangle = $C124 FrameRectangle = $C127 InvertRectangle = $C12A RecoverRectangle = $C12D DrawLine = $C130 DrawPoint = $C133 GraphicsString = $C136 SetPattern =$C139 GetScanLine = $C13C TestPoint = $C13F;; BACKGROUND GENERATION; BitmapUp = $C142;; CHARACTER MANIPULATION; PutChar = $C145 PutString = $C148 UseSystemFont = $C14B;; MOUSE & MENUS; StartMouseMode = $C14E DoMenu = $C151 RecoverMenu = $C154 RecoverAllMenus = $C157 DoIcons = $C15A;; UTILITIES; DShiftLeft = $C15D BBMult = $C160 BMult = $C163 DMult = $C166 Ddiv = $C169 DSdiv = $C16C Dabs = $C16F Dnegate = $C172 Ddec = $C175 ClearRam = $C178 FillRam = $C17B MoveData = $C17E InitRam = $C181 PutDecimal = $C184 GetRandom = $C187;; MISC MOUSE, MENU, GRAPHICS, SLEEP; MouseUp = $C18A MouseOff = $C18D DoPreviousMenu = $C190 ReDoMenu = $C193 GetSerialNumber = $C196 Sleep = $C199 ClearMouseMode = $C19C i_Rectangle = $C19F i_FrameRectangle = $C1A2 i_RecoverRectangle = $C1A5 i_GraphicsString = $C1A8;; BACKGROUND GENERATION; i_BitmapUp = $C1AB;; CHARACTER MANIPULATIION; i_PutString = $C1AE GetRealSize = $C1B1; MOUSE & MENUS;; UTILITIES i_FillRam = $C1B4 i_MoveData = $C1B7;; ROUTINES ADDED LATER GetString = $C1BA GotoFirstMenu = $C1BD InitTextPrompt = $C1C0 MainLoop = $C1C3 DrawSprite = $C1C6 GetCharWidth = $C1C9 LoadCharSet = $C1CC PosSprite = $C1CF EnablSprite = $C1D2 DisablSprite = $C1D5 CallRoutine = $C1D8 CalcBlksFree = $C1DB ChkDkGEOS = $C1DE NewDisk = $C1E1 GetBlock = $C1E4 PutBlock = $C1E7 SetGEOSDisk = $C1EA SaveFile = $C1ED SetGDirEntry = $C1F0 BldGDirEntry = $C1F3 GetFreeDirBlk = $C1F6 WriteFile = $C1F9 BlkAlloc = $C1FC ReadFile = $C1FF SmallPutChar = $C202 FollowChain = $C205 GetFile = $C208 FindFile = $C20B CRC = $C20E LdFile = $C211 EnterTurbo = $C214 LdDeskAcc = $C217 ReadBlock = $C21A LdApplic = $C21D WriteBlock = $C220 VerWriteBlock = $C223 FreeFile = $C226 GetFHdrInfo = $C229 EnterDeskTop = $C22C StartAppl = $C22F ExitTurbo = $C232 PurgeTurbo = $C235 DeleteFile = $C238 FindFTypes = $C23B RstrAppl = $C23E ToBasic = $C241 FastDelFile = C244 GetDirHead = $C247 PutDirhead = $C24A NxtBlkAlloc = $C24D ImprintRectangle = $C250 i_ImprintRectangle = $C253 DoDlgBox = $C256 RenameFile = $C259 InitForIO = $C25C DoneWithIO = $C25F DShiftRight = $C262 CopyString = $C265 CopyFString = $C268 CmpString = $C26B CmpFString = $C26E FirstInit = $C271 OpenRecordFile = $C274 CloseRecordFile = $C277 NextRecord = $C27A PreviousRecord = $C27D PointRecord = $C280 DeleteRecord = $C283 InsertRecord = $C286 AppendRecord = $C289 ReadRecord = $C28C WriteRecord = $C28F SetNextFree = $C292 UpdateRecordFile = $C295 GetPtrCurDkNm = $C298 PromptOn = $C29B PromptOff = $C29E OpenDisk = $C2A1 DoInlineReturn = $C2A4 GetNextChar = $C2A7 BitmapClip = $C2AA FindBAMBit = $C2AD SetDevice = $C2B0 IsMseInRegion = $C2B3 ReadByte = $C2B6 FreeBlock = $C2B9 ChangeDiskDevice = $C2BC RstrFrmDialog = $C2BF Panic = $C2C2 BitOtherClip = $C2C5 StashRAM = $C2C8 FetchRAM = $C2CB SwapRAM = $C2CE VerifyRAM = $C2D1 DoRAMOp = $C2D4Click On MeX PRG formatted GEOS file V1.0@9FCOPE Source V1.1share1COPE Editor V1.3*FaEUntitled~Click On Me PaEEEFF*F7F7F7F7F7F7F7F7F7F7F@@4Here are some of the changes to bring you up to date on Version 1.3 Local labels (temporary labels). You can define a label as local. These labels are designed to be used with branchinstructions. They are not added to the label array. Youcan use the same label name in separate files withoutgetting a duplicate label error. Then are mainly used for a faster assembly process and writing cleaner code. Branch label names are identified with the'@' character. The first four characters are usedto identify the branch name. Actual label names canbe any length and contain any character.Source code for 'QuickView' is included to show howto use branch labels. Both programs will search both drives for a filename, startingwith the default drive. DRIVE directive. You can change the current drive with thisdirective. Like this: .Drive 8; drive 8 becomes the currentdrive. Screen Scroling The screen update routines are faster. Scrolling up/downis handled differently for faster speed. Name directive. To insure compatability with the C128 80 columnmode, you have to be able to set the 40/80 columnflag in the header block. The 'Name' directive now allowsyou to do this. Old way: .Name Quickview V1.0 This is still acceptable but will leave the 40/80 column flag as zero. New way: .Name "Quickview V1.0',0,0,0,0 Single or double quotes can be used. The Name directivefunctions similarly to the Byte directive when used in thismanner. Be sure you have all 20 bytes defined properly. Thanks for your time, Bill SharpLADS2COPEV  4PRG formatted GEOS file V1.0@BCOPE Source V1.1ed880128aCOPE Editor V1.1B@Information on converting Lads files into geoCOPE files.@ AA4AMANAAAAAAAB7BnBBB@/Method of converting LADS BASIC text format into a geoCOPE format.LADS saves it's file as a BASIC program. This firstneeds to be converted into a sequential text file before it can be imported into geoCOPE. Followingare the steps necessary for the conversion. 1. Load the textfile into memory. LOAD 'FILENAME',8 2. Open a sequential file to the disk and save a 'listing' of the program. OPEN 2,8,2,'SEQFILENAME,S,W':CMD2:LIST 3. Close the file. PRINT #2:CLOSE2Now you will have a sequential file of your program onthe disk. Use TransText to convert it into a geoCOPE text file. Use the ASCII FORM.QV_SCRIPTX #PRG formatted GEOS file V1.0@ 199) stx DEST sta SOURCE STY LENGTH@BLP3 ldx DEST jsr GetScanLine movew R5:Dest ldx SOURCE jsr GetScanLine movew R5:Source ldy #0@BLP1 lda (Source),Y sta (Dest),Y tya clc adc #8 tay bne @BLP1 inc Source+1 inc Dest+1@BLP2 lda (Source),Y sta (Dest),Y tya clc adc #8 tay cpy #64 bcc @BLP2 INC DEST INC SOURCE lda SOURCE cmp LENGTH bcc @BLP3 beq @BLP3RTSDEST .Byte 0SOURCE .Byte 0LENGTH .Byte 0;===QV_TABLESV  PRG formatted GEOS file V1.0@@COPE Source V1.1QuickViewCOPE Editor V1.25@@UntitledvzTABLEST 2@#@5@D@Q@b@g@y@@@@@@@@@@@;-----see DRIVE switching routineshomeDrive .Byte 8drive .Byte 18disk .Byte 6NoRecord .Byte 0;---CurRecord .Byte 0CancelFlag .Byte 0;===========; FILE HEADER BLOCK;===========FNAME .Block 17,0CLN .BYTE 0,0;=====QV_SYSTEMZPRG formatted GEOS file V1.0COPE SOURCE V1.1COPE Editor V1.2@@UntitledEditSource @@7@U@g@w@@@@@@@@@@A@ 5 V(.-; *****************; * EQUATES FOR GEOS QuickView Program; * BY BILL SHARP; ***************R0 = $02R1 = $04R2 = $06R3 = $08R4 = $0AR5 = $0CR6 = $0ER7 = $10R8 = $12R9 = $14R10 = $16R11 = $18R12 = $1AR13 = $1CA0 = $FBA1 = $FDA2 = $70A3 = $72A4 = $74A5 = $76A6 = $78A7 = $7AA8 = $7CA9 = $7E;-----; CONSTANTSTabs = $4004curDrive = $8489curRecord = $8496dirEntryBuf = $8400FileHeader = $8100CURDHD = $8200numDrives = $848DsysDBData = $851D;----; NOTE:; The more labels you have the slower the Assembler; will run. Place a semi-colon in front of the routines; you will not be using.;;MISC;BootGEOS = $C000;ResetHandle = $C003;InterruptMain = $C100;; PROCESSES;;InitProcesses = $C103;RestartProcess = $C106;EnableProcess = $C109;BlockProcess = $C10C;UnblockProcess = $C10F;FreezeProcess = $C112;UnfreezeProcess = $C115;; GRAPHICS;;HorizontalLine = $C118;InvertLine = $C11B;RecoverLine = $C11E;VerticalLine = $C121 Rectangle = $C124;FrameRectangle = $C127 InvertRectangle = $C12A;RecoverRectangle = $C12D;DrawLine = $C130;DrawPoint = $C133;GraphicsString = $C136 SetPattern =$C139 GetScanLine = $C13C;TestPoint = $C13F;; BACKGROUND GENERATION;;BitmapUp = $C142;; CHARACTER MANIPULATION; PutChar = $C145 PutString = $C148;UseSystemFont = $C14B;; MOUSE & MENUS;;StartMouseMode = $C14E;RecoverMenu = $C154;RecoverAllMenus = $C157 DoIcons = $C15A;; UTILITIES;;DShiftLeft = $C15D;BBMult = $C160;BMult = $C163;DMult = $C166;Ddiv = $C169;DSdiv = $C16C;Dabs = $C16F;Dnegate = $C172;Ddec = $C175;ClearRam = $C178;FillRam = $C17B MoveData = $C17E;InitRam = $C181;PutDecimal = $C184;GetRandom = $C187;; MISC MOUSE, MENU, GRAPHICS, SLEEP;;MouseUp = $C18A;MouseOff = $C18D;DoPreviousMenu = $C190;ReDoMenu = $C193;GetSerialNumber = $C196;Sleep = $C199;ClearMouseMode = $C19C i_Rectangle = $C19F;i_FrameRectangle = $C1A2;i_RecoverRectangle = $C1A5;i_GraphicsString = $C1A8;; BACKGROUND GENERATION;;i_BitmapUp = $C1AB;; CHARACTER MANIPULATIION; i_PutString = $C1AE;GetRealSize = $C1B1; MOUSE & MENUS;; UTILITIES;i_FillRam = $C1B4 i_MoveData = $C1B7;; ROUTINES ADDED LATER;GetString = $C1BA;GotoFirstMenu = $C1BD;InitTextPrompt = $C1C0;MainLoop = $C1C3;DrawSprite = $C1C6;GetCharWidth = $C1C9;LoadCharSet = $C1CC;PosSprite = $C1CF;EnablSprite = $C1D2;DisablSprite = $C1D5;CallRoutine = $C1D8;CalcBlksFree = $C1DB;ChkDkGEOS = $C1DE NewDisk = $C1E1;GetBlock = $C1E4;PutBlock = $C1E7;SetGEOSDisk = $C1EA SaveFile = $C1ED;SetGDirEntry = $C1F0;BldGDirEntry = $C1F3;GetFreeDirBlk = $C1F6 WriteFile = $C1F9;BlkAlloc = $C1FC ReadFile = $C1FF SmallPutChar = $C202;FollowChain = $C205 GetFile = $C208 FindFile = $C20B;CRC = $C20E LdFile = $C211;EnterTurbo = $C214;LdDeskAcc = $C217;ReadBlock = $C21A;LdApplic = $C21D;WriteBlock = $C220;VerWriteBlock = $C223;FreeFile = $C226 GetFHdrInfo = $C229 EnterDeskTop = $C22C;StartAppl = $C22F;ExitTurbo = $C232;PurgeTurbo = $C235 DeleteFile = $C238 FindFTypes = $C23B;RstrAppl = $C23E;ToBasic = $C241;FastDelFile = C244;GetDirHead = $C247;PutDirhead = $C24A;NxtBlkAlloc = $C24D;ImprintRectangle = $C250 i_ImprintRectangle = $C253;DoDlgBox = $C256;RenameFile = $C259;InitForIO = $C25C;DoneWithIO = $C25F;DShiftRight = $C262;CopyString = $C265;CopyFString = $C268;CmpString = $C26B;CmpFString = $C26E;FirstInit = $C271 OpenRecordFile = $C274 CloseRecordFile = $C277 NextRecord = $C27A PreviousRecord = $C27D PointRecord = $C280;DeleteRecord = $C283;InsertRecord = $C286 AppendRecord = $C289 ReadRecord = $C28C WriteRecord = $C28F;SetNextFree = $C292;UpdateRecordFile = $C295 GetPtrCurDkNm = $C298;PromptOn = $C29B;PromptOff = $C29E OpenDisk = $C2A1;DoInlineReturn = $C2A4;GetNextChar = $C2A7;BitmapClip = $C2AA;FindBAMBit = $C2AD SetDevice = $C2B0 IsMseInRegion = $C2B3;ReadByte = $C2B6;FreeBlock = $C2B9;ChangeDiskDevice = $C2BC;RstrFrmDialog = $C2BF;Panic = $C2C2;BitOtherClip = $C2C5;StashRAM = $C2C8;FetchRAM = $C2CB;SwapRAM = $C2CE;VerifyRAM = $C2D1;DoRAMOp = $C2D4;MAcros for Assembler;------; MACROS.MAC loadw; examp.le load R0:memusldx #?2stx ?1+1.MND;----; this macro sets up the menu structure.MAC menu.Word ?1.Byte ?2.Word ?3.MND;-----.MAC movew ldx ?1 stx ?2 ldx ?1+1 stx ?2+1.MND;----.MAC addwclclda ?1adc ?2sta ?2lda ?1+1adc ?2+1sta ?2+1.MND;----.MAC addyclctyaadc ?1sta ?1lda ?1+1adc #0sta ?1+1.MND;----.MAC brajmp ?1.MND;-----.MAC subw SEC LDA ?1 SBC ?2 STA ?3 lda ?1+1 sbc ?2+1 sta ?3+1.MND;-----.MAC branchclvbvc ?1.MND;=====;This is page 4; it is not blank anymore.This is page 5.aThis is page 10