0L0 MAE_95 ( _ 00 00-0`/}0|0 x0   Y  Ӣ8`ll1R@.n00)0.0-0 *I0  C0 10 u0 100 0q0 080H 0(0DhC 000CDDCL0CD-003.-0`00 G00m000m00C80CD0D.0̀0(0 )0  C0/(0/)0/ / Ȍ.0DЛ0C0. E0L1 BMAIN (DOS _  6MAE COM_ 9>MAEXEP80COM_wEMAE DOC_ 9;ASM .DOS _   Z2X32D DOS_  DOC_ 9" RDEBUG DOC_ 9,(NOTE64 DOC_ 9:1HISTORY DOC_ :fHYP DOC^ hHYP COM^ HYPS COM^ HYP ROM^ DEBUG80 _ : _!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^~S28$HHH өH*HHllhhh@HHLH|)ӝtI)MӍ|hh`HH||)thh(`44DEPH BLV `)`` '4 4 4Ȣ4 4LI4 4 w4 4x '4 44X 4) ~`8 '4 4 4L4L4Error: Not an XL/XE Computer.4.4t5} SpartaDOS Ver 3.2d 17-Feb-86 Copyright (C) 1986 by ICD, Inc. 4.4 4 4G)@}҅  EEF E x4 d5 d5" #   c5  M c5 , W5 4LL4 L LLHEi ȱEi `|40 `` 7 YL\ 2BHG H-G H ةHhJ \hBL\`@B 442@3Y45245324 `L1( (ҩmi:; < =x:23454 Μ ,  w ,P lνе X0`234 5` P21 ,350 2 9 4 2 9 LD1 9)ҢL1,350 &2 4 2 1`08` S< ACE,0ɋ8` `ύ&'0`e1i1`,07 ,ߍҩҭҍ )  `_ҩҩ,,,8`H)ҩh `#,ҍ ҩ(ҥA,ҩҩ`jj)?j)`Ң`H?ʎ @  0h ``@@B,~-32@3452453c24` ɔ FNot SpartaDOS disketteLɢ FDisk fullLɪ FFile not foundLɣ FIllegal wildcard in nameLɘ FNot binary fileLɤ FFile erase protectedLɕ FNot version II disketteLɩ FDisk write lockedLɖ FDirectory not foundLɀ FBreak AbortLɐ% FWrite protected or bad sectorLɥ FFile name errorLɨ FFunction not supportedLɧ FCan't delete fileLɗ FFile existsL` w  w(0   0a Y©ÍYh   N Y©  NΟ`L 8L`@D , ̍̍)̝BJJJJJ ̝D̝E0 KJ)̝JJJ)̝H̝I D@   Ϭ,0),~  FError -- L`(),! *+  -"#$./0_@ @CA똩)*K HJJJJ 9h) 0:iLhWhXWXͭ LNͭXHWH`, Nnn ͠H͎͌͢ͽ `Mܩ,0 N ͭO` P..*N  . 0PH0  ʩ `$%` Π vAG) ..ܭ` 7`  7`L @ ύ  ύ 乀` Ω* #* Z 0DLϠ ̠ ̭0L0f 0  LϮ Lϭ  /A ̠ LL~υCυD. yϠC  y 婛蝀`ȹ  ` ̢0 8̽ H̽I̠0 (ʢ 0L *)L* *M @ L ( `L(= # , 魗  筙`( L#() LLL I0   䍠 e , ʎi 0L CL] 0G   KQ;`) x뭤B L  ,  ,)ߍ "LLL  ,] 0 # K ح)  "L  밻) 멀 "L` ,L  Ld͙Lj魗  Lj$H0Ld88A e , s eECFD8  8  9L H ,C]Dah LꭖCD L譔  魙8L LL$H0 s ,LxECFD  鬙 9L謓CCC)` L_CC C`C`C`  EFL뭔 K`8mi` /L9 Z"C X `L ꭔ C8 CDC}TCȱC}UC`  eCCD`  _C``Ipi ͟? x0,)C) `II  08` CL # , 魗 `1@R H0>h0   * HH 0hh`hh,L L { P*)0 0*`*)& K9:*$+0;QG` {!*B sﭟͻͼ/ P {0*)((a,,,L ) *)  I0 , *)  I  0 I  K 䍝 ,) *I *c 0L U*) 0 @`L,0 K) MﭝI $ 0 zz  G L  Z v #(> sL L,0`H hɛ ,'L0,L P*H * {0h*L04*  0 )L Lq * { M {0Y) *LJ, -* { M {0 ,  ,) LkL, LLLL: * {, (] 0 # K M {0 LL8*  * 0I LL,H ) ") čɍҍ)*LB 0 ͠E 0)  0  63# ͌;QL   ͩ: ͭ ͩ: ͭ ͩa p ͩmLͭ ͩ- ͭ ͩ- ͭ L͢$ ` 6(ȭ(Ȣ(((ȭ(ȭ(` ȱCL,~LL # wL ʈ`1N@ 1!@1S@@8` v P  > Ȣ L >(ȩ(` (H(h `*$/ȱ$Aȩ *$$ `2Kd}j #H 0K 08}  )L ,08J mHh 8Jm , 3m L  8 L iL?EF,L譞)  #T 0N 0   Q 0` >$H s L)L  CȭC _ 1 /͓ hL\ s)H   EF 묓 hL\ KL\FА֐#eCCD$H0CELW `abcdefghijklmnopqrstuvwxyz{|}~EC$H _8m䍖L ``H譞=L `   hC̓ _`LK8EmEF8m䍚 W 0`8`8`CȱC`CȱC`  hCD ` / ?䭒,06/O)͒/?}` &O`)8O,0, } ,0} 8,0 8JHjmChmD`H)h)/ ?  &CD8 ` ` i͓ L?CC, CȭC CȭC _L 3 `),)   C&̓ͬ L,L   X,}T}U` .C   I1CC`   CC,0  L4L@ٯ` N j  ,0 z` _)8j`m K`, HJjhj`, H**hJ`_/]^/` 0 `y"U a ې;ݒ- ;m ; - ;  ]!K`Z6<` 2 @ ɛ  `  8)ɀɛ ȹ`COPLOASAVAPPENCWERASRENAMCREDIDELDICARUPRINTYPDIDIRMEPAUSVERIFBOOCHKDSPROTECUNPROTECLOCUNLOCXDIAINI?DIBASITIMDATTKE,,,,L̩` FFormat: Are you sure? )_H hY L W,P` 7l FNo cartridge` ̭8 F Volume:  ͭ   0ͩ   0 F͛Bytes/sector: 0 F͛ Total bytes:  l F͛ Bytes free:  lͭ ( F͛ Write lock: ,!0 FOFFL FONL  , ̠ 0  BLL `LX  ΍ 7 PL\l FPress any key to continue L FMemlo: $ 0ͭ 0 F Memhi: $ 0ͭ 0ͩL ̠ ̠L M)MӍӌj E L ̭O NF FParameter ErrorL` *L *L  FCurrent date is   F͛Enter new date: - 3_ɛX KJLL  FCurrent time is  F͛Enter new time: : 3 ɛ F`ɛ )_PAϩ, mJ  J JLO WMJ`:8`M {)pM mM iM {`ȹ 0:`8`L ` 7 VL\ 7 L\%H$H`LPLI L2 X  UD1:autorun.sysstartup.batQ*.*.COM.BATD1:Volume: Directory: FREE SECTORS LI z)͒}`Ld 'D1:*.*LʩLLLTLr`````l `HH ܩIHhDhE V'f ܩ)(ȄRɛa{I ݬ!8 r+e؅ٰؐ5,/,8ө ܩ HHh(`ӅޑޑƠӅޑ0ޑ8ްߥ8 ޑȱɛ SکȄ`٠8eتi ɛȘ٘` @ ܩ 0 @ D DcU DL@H@*hJL@L!@O\ lA\ I $@ DLI\< `00 @o<zyz i8ʈ eFІхֆעʎʎS i0 i0 " )#?%7! !6 ܑЍ$Rޢ@ߢӱޮӑd婚@L EL@@@L D AL@LIL=J*@0L}smrkosoadass 2aveabalueRef DirOUT OF MEMFind:Repl:Ln #Lbl:Times:ab-pc FD B A KBL@ F D Dۤ H A`,`ɂ JI@)@?LɚLCA|0?LɚyɄ,p` Aa{I `S[ ` yAȘH ©ܤm Фх܄h ȩ\ ȩ`ۅY CCA ũH \hɛ\Ċ AU\ I`U D E AHU ũ Dh1TKtUSH A  Ch U\LD @ |`i=LXC DLDRL FR iA 1 :L`IنK0ؘi2LTC A|x yAN>\ 6H0\'"h"h\0\ H ChȘ8ڄ Jک[2 ʩۤ㘤| KHKH|yU`0 \LD0 DL$BS[\U IS*8eUc Dc` CU\` DU I Dȹ\[S`SЩ` RDU(LVE DڤS\ж` D A J lD ITH lE DhTU VEBҦ҆Ӎ:@K@*@;@ Jҥ1T/ Deؐمآ۠)LʩT D, ʩ` lE ]D _E |D驝 D D)J |C)IJ<װǘHإ٤"8\ޅߘH Jh` C D,ޘH *D< FDTUTH I lDT$SP D _E} D D ]D DhTU DРT |DTTT ]D` ND8Hժh H ũ٥8֥ץԅޥՅ H 橥#T sDԦ D H J E`؅ԥم` E xE H Jօޥׅߥ؅م H LE ©M C ©\ ȩ Dܦ8ѐ аކߠ; ʩަ߅܆`\ lA%,ʽ U8`\:/ eHehڥЕ D۾*L@LD jFAچ0LJH㭻` jF$pڈ0 o "H Aۤ,LH)*@;@ĄLH Aؙ*@ٙ;@Ș)ꊙ*@;@,\ lAȹ\. 뎻 FD ũ ɛ0x ũ lA٬ ]Df-m _E\+-ȅ F FD)- ]D |DL H $D :@K@ D؅مT _E E ND` jF G ũ( AȄU> D D iANYA Ie؅ؐ٭8 J2 ʩ D D DmLJH؍:@ٍK@`8Hתh` yA,ULVEM `҅e窥Ӆe`؅م`H )Ih\ lA: `R @>Lʩi%LTiLD SI< @\ LD I IB} D0 V04 I $D$p  *D =JL"H \`@,0J lJH h jJ AɉL@ "HL@ I I$p FDҥ ئ٥ԅإՅي@8 J I jJL"H `I iAS $D |D2LB IѤ J1ЀHe؅ҽIeمӊH Jh BHHK+ PJ $D< FLIީ BHH8بLPHH B HɆ҅ӆ BK e*@e;@8H٪h ALʩ_Ii8ҥӥ؅eޥمeߠ BK *@;@8Hh *@;@`~ `}   ADLBPSTVX}hCCCCCCCHtBCHHD@@CCCCCBrDMDCDDGG1BxEwEEFFFFFFFHIG5GE EHFHFrDMD2J!HժAIRIժ`IJNIMIEDHF GGmG@III&@  @)@LLLLLLLLLSULUL_L ULRc L M [ȱ!. MV,`Hchc` LcBʆ\ VLL L膽 [LL$0XHH$P0Z*@ Z;@ƅ ^hb! ^ȹb AT #h Y ^8` Y M T vTDcL@L0ɗɈ IƩ`ح`\!. MPȹ[ɛ`P ȹ[ɛPP`Ȣ) ^()` ^ ^`NN N,ߥ\N`N[8eߪ٤`ԥNJ`\N]Nhh Ml243RAB(RAW'RBAMRBIeRBYSCLTDC]SDSSECaEJ RENTESaHEbIB.RINUIW-RLCRLL#RLO@RLSRMCSMDaMEYbMGROCRORSOSROU _PRQSBSVAQWOCR-9=MQUYiy}BCCBCSBEQBGEBLTBMI0BNEBPLBRABVCPBVSpADCANDASLBIT#CMP(COP7CPX8CPY;DEC>EORCINCRJMLYJMPWJSL[JSR]LDA_LDXnLDYsLSRxORA}PEAPEIREPROLRORSBCSEPSTASTXSTYSTZTRBTSBrqaseucim}ygwo21!3%5#)-=9'7/? $4,<:RQASEUCIM]YGWO_l|L\" FVN^J &6.>*fvn~j⒑dt    BRKCLCCLDCLIXCLVDEXDEYINXINYNOPPHAHPHBPHD PHKKPHPPHXPHYZPLAhPLBPLD+PLP(PLXPLYzRTI@RTLkRTS`SEC8SEDSEIxSTPTAXTAYTCD[TCSTDC{TSC;TSXTXATXSTXYTYATYXWAIWDMBXBAXCE%)]iy ^\"ȹ\P " ^L9V)? ^ ^ \ɛ[ \؈ ^L9V$P 膚膝膞Щ륛 _é,H )^hLNX )^L9VH) )^h`҅إӅ @ :_ @% / / /R /$ / / XT yY(70519&ʈeeȑ d_ئ h_ S v_0Hؐiޥiߐ / !YߥҥӐh؅ҥم ~T/ S M [H !Yh S S :_L9V S XT $P yYH WRh]L` S0 ^ 5T M<ʆޢ+ )^ MP$ Luu`"'Э)TP̹\'У 5TP)` @ eeL!Y\ `ҥӢAL $P vT Y L$pLV$0? -PASS-Q :_ T r^ b Y YL@ :_ rL9VLrucحc [ȱ2ȱ0:? b@Q b\@ \ Not FoundL@Ucحxc٥؍ucٍc ^ M : b _ɆΆφ­é҅Ӆ녚@I$p ,L`Z Z Y̅ʥͅ漥҅¥Ӆå…إÅ @ @…إÅ٢̆^hhHH…ҥÅ ~Tʅ̥˅͢B`hh٥H YhL\V Y rM͠ 8 [ٍ ZH؍ZH/  LɀLU\`Ɇ I ]\  M `L9V\@\ mZ M=.2 N L M WR\H) [h؅م kTЛ_x\B: M2 MNeH )^h !YH hE$h LLWh06\Y3)N MLW\)QʩNP N P !YL9VL_2JJcP00}NO !Y )^(wǽNXkYgc [K Lj MyXJ,PPP\?L#(ɢ< >!G [ ` XPHH !Yhh8L9V [A ]Ȣ ˢ [(L7X,b H )^h !Y88堅塅КЖD,T !Y )^H M )^ !YhLWi,؆JJ8 PHcP)PHyNh  LOH$P;09*" Y YL:Y ^ihH ^06h $h` ^Ħ뵠 ^-L^hY +_`0̦LYΦυH ]h` YH, ^h ^ ^L^HLZHLYH$Pp0njc^ Y ^ Y ^ة٢0Z/ H ^h ^ɛ ^hɆ`䥳 t[g [ [LZ t[ Y]^ [ȹ\?@ȹ\) 1^ _ L8` \ LȐ`mi8 ޅ߅ L8` _8H٪h # Zȹ! .)iج!}ScScvcؘ8؅م`\!]^`\.Ly[]^`]^`ȱ.!8ȱe؅ؐ`ȆPLL [8\ `\`ȹ\-#< >^7HȢ [h` [8*ȹ[܈ ]\ [ & ]\U\ o8`\' b@) b6 )eHeehJ&&& b2`$$%*1`&&) b`"$0\!. ?)iScؽvc٦\!.?Hh V V V V\ 1^Șʆज़ L`.ٽ! ! !.!𮥴Ъȱ)$0C [L]]$05ȱ! C^ P^. C^ a^äؙ8` YL^ [,` [LL. /]`8`ȱȱ`ȱŻȱż`ȱŹȱź` - Label File -Ucحxc٢ ^ȱL^ȱ0 ? [L^ Me= ^ M [ ^$Ű ^ ,H0 Ĭh`HJJJJ ^h) 0:iإ@ @  _L9V dYWM2.qHqh8ȑȑ@ B _ȑȥȥ` E ~T r dL@!Scvcȑ`@U )^$ ^ ^ ZL^_ `ʥB H) ]h LL9V\ C^  L`HH M1( M'\) H [hHȹhԢ Yh؍Zhٍ ZHH泥  LLLV`ߪ\`ߦ`0 Mhh8aH7aH`   #&),/258;>,X,X),S,S),Y]],Y.ME.MD.ENBRLPERMVPMVNIFEIFNIFPIFMSET***.ENXaaTXXXX\ahaqaxaaTaT aL9V a a0 a0愶 S`膸 [LS , L M=HH M Shh٤؈0!  L沥hhHȑ؈HL9VL`P\( LLab M4)0 [ mZȽ0 MLbй\PƳ0 ƹƺhhL9V LP \ L !Y M}LĬح8` b/L^ b AG6`ȹ\0:`!R!)2` 0 ,@ DEG\ ϭ  $`\ ϭ  0 0 Ĭ ᭢0 ũ$`,@ BHI '` ᬢ F0ܢ`,@  X S N `., , H h$ ()`()``H hLt   L"\ $ Ĭ HJJJJ +h) ii0Џ )y>yB  HJJJJ 5h 5 0АJK`:,`0 Hh`\\`' ERR- ZL¬hh ĬHH`+-* /&!`eeeLJ`%%%ۭ&+-&!** Fffeee&&ަLJ &&&&* ֤LJ` J \ȩ )\Lu 诊HH y\H& /.%g#s'M .&&)  \ o ,\hhh`  Lr&ff 10г )eHeeh ᬮ\\ " a{)ߐ ᬮ\\ɛ\Lڬ r,7H @h`V@.#X;*GPWVRO\AE?LSIDMUQ=$/:C-FHKT GsҶֵDZлhg>!CغspS]&VY+O򹱴!,h Ph+hh*D67+)? d4."0/-+ ) LyL*L *HDH >Xl Y+H-,.(`.-,`T ,A X Y NV-BDIZC SP ;*Hh0 H* Ĭ ߥ $L\R@PH #S S) h  D  J j Y0!mm   (`'(L᭢`*hihHiHL`ȱ` v ¬ v ' ѻ ";M ["í>! )0 ?;hhU ? Ĭ [X ¬* F0Š L ;9 E x ¬8 d Lƶ s!X k ¬  $O( kL *LN@'`( HL7l()K)F:(9h+hihiVHhȱLS bHH >LE Pة b0 dLS Ph+ة b*LL%ee`L 6!7 t tE 0һ1Ի` rRl # 0` '\ %\ș ș0%   A؅ |`\ \ɛ`   A | %`  %\\\ ,`*ޢ [=\, ` 8` AG6`0:` eHdH  |`L * H h6̬ ¬ <`   DLĬ$e`  e | :    ɛ $ {. Ĭ D67L( d S\* l= *Ϣ C W0- zL 10꘤\ /LSPYXA@ -` @ L\`"Н` -  ,H  h丅$&*i? Ĭ  ׸ Ĭݸ Ĭ`iee L J J") JJJJJ)ʸ)) JJJ Ȉ`H h8UL@E@ 0"E3@ @E3@ @E@ "D3ЌD"D3ЌD"D3@ "D3@ bx!YMJ,),#($YX$$#]#)i#$S#$S[[i$$)|mi)S4i#bZH&bTDThDt(ntJrtttrDh2"&&rr&HDDȢʎʎ "` 0[.\0 \]\ 'ESPͽݤU̸HPJJJJ PH) h hT̷ H hRSR̺H) ` RJJJJ p hS̿H) SJJJJ h`/ԽTURS` `MӢ8ӌӢ<`0Ld 'D1:*.*LʩLLLTLr`````l `HH ܩIHhDhE V'f ܩ)(ȄRɛa{I ݬ!8 r+e؅ٰؐ5,/,8ө ܩ HHh(`ӅޑޑƠӅޑ0ޑ8ްߥ8 ޑȱɛ SکȄ`٠8eتi ɛȘ٘` @ ܩ 0 @ D DcU DL@H@*hJL@L!@O\ lA\ I $@ DLI\< `00 @o<zyz i8ʈ eFІхֆעʎʎS i0 i0 " )#?%7! !6 ܑЍ$Rޢ@ߢӱޮӑd婚@L EL@@@L D AL@LIL=J*@0L}smrkosoadass 2aveabalueRef DirOUT OF MEMFind:Repl:Ln #Lbl:Times:ab-pc FD B A KBL@ F D Dۤ H A`,`ɂ JI@)@?LɚLCA|0?LɚyɄ,p` Aa{I `S[ ` yAȘH ©ܤm Фх܄h ȩ\ ȩ`ۅY CCA ũH \hɛ\Ċ AU\ I`U D E AHU ũ Dh1TKtUSH A  Ch U\LD @ |`i=LXC DLDRL FR iA 1 :L`IنK0ؘi2LTC A|x yAN>\ 6H0\'"h"h\0\ H ChȘ8ڄ Jک[2 ʩۤ㘤| KHKH|yU`0 \LD0 DL$BS[\U IS*8eUc Dc` CU\` DU I Dȹ\[S`SЩ` RDU(LVE DڤS\ж` D A J lD ITH lE DhTU VEBҦ҆Ӎ:@K@*@;@ Jҥ1T/ Deؐمآ۠)LʩT D, ʩ` lE ]D _E |D驝 D D)J |C)IJ<װǘHإ٤"8\ޅߘH Jh` C D,ޘH *D< FDTUTH I lDT$SP D _E} D D ]D DhTU DРT |DTTT ]D` ND8Hժh H ũ٥8֥ץԅޥՅ H 橥#T sDԦ D H J E`؅ԥم` E xE H Jօޥׅߥ؅م H LE ©M C ©\ ȩ Dܦ8ѐ аކߠ; ʩަ߅܆`\ lA%,ʽ U8`\:/ eHehڥЕ D۾*L@LD jFAچ0LJH㭻` jF$pڈ0 o "H Aۤ,LH)*@;@ĄLH Aؙ*@ٙ;@Ș)ꊙ*@;@,\ lAȹ\. 뎻 FD ũ ɛ0x ũ lA٬ ]Df-m _E\+-ȅ F FD)- ]D |DL H $D :@K@ D؅مT _E E ND` jF G ũ( AȄU> D D iANYA Ie؅ؐ٭8 J2 ʩ D D DmLJH؍:@ٍK@`8Hתh` yA,ULVEM `҅e窥Ӆe`؅م`H )Ih\ lA: `R @>Lʩi%LTiLD SI< @\ LD I IB} D0 V04 I $D$p  *D =JL"H \`@,0J lJH h jJ AɉL@ "HL@ I I$p FDҥ ئ٥ԅإՅي@8 J I jJL"H `I iAS $D |D2LB IѤ J1ЀHe؅ҽIeمӊH Jh BHHK+ PJ $D< FLIީ BHH8بLPHH B HɆ҅ӆ BK e*@e;@8H٪h ALʩ_Ii8ҥӥ؅eޥمeߠ BK *@;@8Hh *@;@`~ `}   ADLBPSTVX}hCCCCCCCHtBCHHD@@CCCCCBrDMDCDDGG1BxEwEEFFFFFFFHIG5GE EHFHFrDMD2J!HժAIRIժ`IJNIMIEDHF GGmG@III&@  @)@LLLLLLLLLSULUL_L ULRc L M [ȱ!. MV,`Hchc` LcBʆ\ VLL L膽 [LL$0XHH$P0Z*@ Z;@ƅ ^hb! ^ȹb AT #h Y ^8` Y M T vTDcL@L0ɗɈ IƩ`ح`\!. MPȹ[ɛ`P ȹ[ɛPP`Ȣ) ^()` ^ ^`NN N,ߥ\N`N[8eߪ٤`ԥNJ`\N]Nhh Ml243RAB(RAW'RBAMRBIeRBYSCLTDC]SDSSECaEJ RENTESaHEbIB.RINUIW-RLCRLL#RLO@RLSRMCSMDaMEYbMGROCRORSOSROU _PRQSBSVAQWOCR-9=MQUYiy}BCCBCSBEQBGEBLTBMI0BNEBPLBRABVCPBVSpADCANDASLBIT#CMP(COP7CPX8CPY;DEC>EORCINCRJMLYJMPWJSL[JSR]LDA_LDXnLDYsLSRxORA}PEAPEIREPROLRORSBCSEPSTASTXSTYSTZTRBTSBrqaseucim}ygwo21!3%5#)-=9'7/? $4,<:RQASEUCIM]YGWO_l|L\" FVN^J &6.>*fvn~j⒑dt    BRKCLCCLDCLIXCLVDEXDEYINXINYNOPPHAHPHBPHD PHKKPHPPHXPHYZPLAhPLBPLD+PLP(PLXPLYzRTI@RTLkRTS`SEC8SEDSEIxSTPTAXTAYTCD[TCSTDC{TSC;TSXTXATXSTXYTYATYXWAIWDMBXBAXCE%)]iy ^\"ȹ\P " ^L9V)? ^ ^ \ɛ[ \؈ ^L9V$P 膚膝膞Щ륛 _é,H )^hLNX )^L9VH) )^h`҅إӅ @ :_ @% / / /R /$ / / XT yY(70519&ʈeeȑ d_ئ h_ S v_0Hؐiޥiߐ / !YߥҥӐh؅ҥم ~T/ S M [H !Yh S S :_L9V S XT $P yYH WRh]L` S0 ^ 5T M<ʆޢ+ )^ MP$ Luu`"'Э)TP̹\'У 5TP)` @ eeL!Y\ `ҥӢAL $P vT Y L$pLV$0? -PASS-Q :_ T r^ b Y YL@ :_ rL9VLrucحc u789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst[ȱ2ȱ0:? b@Q b\@ \ Not FoundL@Ucحxc٥؍ucٍc ^ M : b _ɆΆφ­é҅Ӆ녚@I$p ,L`Z Z Y̅ʥͅ漥҅¥Ӆå…إÅ @ @…إÅ٢̆^hhHH…ҥÅ ~Tʅ̥˅͢B`hh٥H YhL\V Y rM͠ 8 [ٍ ZH؍ZH/  LɀLU\`Ɇ I ]\  M `L9V\@\ mZ M=.2 N L M WR\H) [h؅م kTЛ_x\B: M2 MNeH )^h !YH hE$h LLWh06\Y3)N MLW\)QʩNP N P !YL9VL_2JJcP00}NO !Y )^(wǽNXkYgc [K Lj MyXJ,PPP\?L#(ɢ< >!G [ ` XPHH !Yhh8L9V [A ]Ȣ ˢ [(L7X,b H )^h !Y88堅塅КЖD,T !Y )^H M )^ !YhLWi,؆JJ8 PHcP)PHyNh  LOH$P;09*" Y YL:Y ^ihH ^06h $h` ^Ħ뵠 ^-L^hY +_`0̦LYΦυH ]h` YH, ^h ^ ^L^HLZHLYH$Pp0njc^ Y ^ Y ^ة٢0Z/ H ^h ^ɛ ^hɆ`䥳 t[g [ [LZ t[ Y]^ [ȹ\?@ȹ\) 1^ _ L8` \ LȐ`mi8 ޅ߅ L8` _8H٪h # Zȹ! .)iج!}ScScvcؘ8؅م`\!]^`\.Ly[]^`]^`ȱ.!8ȱe؅ؐ`ȆPLL [8\ `\`ȹ\-#< >^7HȢ [h` [8*ȹ[܈ ]\ [ & ]\U\ o8`\' b@) b6 )eHeehJ&&& b2`$$%*1`&&) b`"$0\!. ?)iScؽvc٦\!.?Hh V V V V\ 1^Șʆज़ L`.ٽ! ! !.!𮥴Ъȱ)$0C [L]]$05ȱ! C^ P^. C^ a^äؙ8` YL^ [,` [LL. /]`8`ȱȱ`ȱŻȱż`ȱŹȱź` - Label File -Ucحxc٢ ^ȱL^ȱ0 ? [L^ Me= ^ M [ ^$Ű ^ ,H0 Ĭh`HJJJJ ^h) 0:iإ@ @  _L9V dYWM2.qHqh8ȑȑ@ B _ȑȥȥ` E ~T r dL@!Scvcȑ`@U )^$ ^ ^ ZL^_ `ʥB H) ]h LL9V\ C^  L`HH M1( M'\) H [hHȹhԢ Yh؍Zhٍ ZHH泥  LLLV`ߪ\`ߦ`0 Mhh8aH7aH`   #&),/258;>,X,X),S,S),Y]],Y.ME.MD.ENBRLPERMVPMVNIFEIFNIFPIFMSET***.ENXaaTXXXX\ahaqaxaaTaT aL9V a a0 a0愶 S`膸 [LS , L M=HH M Shh٤؈0!  L沥hhHȑ؈HL9VL`P\( LLab M4)0 [ mZȽ0 MLbй\PƳ0 ƹƺhhL9V LP \ L !Y M}LĬح8` b/L^ b AG6`ȹ\0:`!R!)2` 0 ,@ DEG\ ϭ  $`\ ϭ  0 0 Ĭ ᭢0 ũ$`,@ BHI '` ᬢ F0ܢ`,@  X S N `., , H h$ ()`()``H hLt   L"\ $ Ĭ HJJJJ +h) ii0Џ )y>yB  HJJJJ 5h 5 0АJK`:,`0 Hh`\\`' ERR- ZL¬hh ĬHH`+-* /&!`eeeLJ`%%%ۭ&+-&!** Fffeee&&ަLJ &&&&* ֤LJ` J \ȩ )\Lu 诊HH y\H& /.%g#s'M .&&)  \ o ,\hhh`  Lr&ff 10г )eHeeh ᬮ\\ " a{)ߐ ᬮ\\ɛ\Lڬ r,7H @h`V@.#X;*GPWVRO\AE?LSIDMUQ=$/:C-FHKT GsҶֵDZлhg>!CغspS]&VY+O򹱴!,h Ph+hh*D67+)? d4."0/-+ ) LyL*L *HDH >Xl Y+H-,.(`.-,`T ,A X Y NV-BDIZC SP ;*Hh0 H* Ĭ ߥ $L\R@PH #S S) h  D  J j Y0!mm   (`'(L᭢`*hihHiHL`ȱ` v ¬ v ' ѻ ";M ["í>! )0 ?;hhU ? Ĭ [X ¬* F0Š L ;9 E x ¬8 d Lƶ s!X k ¬  $O( kL *LN@'`( HL7l()K)F:(9h+hihiVHhȱLS bHH >LE Pة b0 dLS Ph+ة b*LL%ee`L 6!7 t tE 0һ1Ի` rRl # 0` '\ %\ș ș0%   A؅ |`\ \ɛ`   A | %`  %\\\ ,`*ޢ [=\, ` 8` AG6`0:` eHdH  |`L * H h6̬ ¬ <`   DLĬ$e`  e | :    ɛ $ {. Ĭ D67L( d S\* l= *Ϣ C W0- zL 10꘤\ /LSPYXA@ -` @ L\`"Н` -  ,H  h丅$&*i? Ĭ  ׸ Ĭݸ Ĭ`iee L J J") JJJJJ)ʸ)) JJJ Ȉ`H h8UL@E@ 0"E3@ @E3@ @E@ "D3ЌD"D3ЌD"D3@ "D3@ bx!YMJ,),#($YX$$#]#)i#$S#$S[[i$$)|mi)S4i#bZH&bTDThDt(ntJrtttrDh2"&&rr&HDDȢʎʎ "` 0[.\0 \]\ Page Down^, Start of line^. End of line^T Top of file^B Bottom of file^S Set mark at current location^M Go to Mark^G Goto line number. When entering the line number at the prompt, you can also enter a '+' or '-' as the first character to move a number of lines relative to the current location.- FIND & REPLACE -^F Find text -- not case sensitive. '?' can be used as a wildcard. There is currently no way to change the wildcard character from within the editor, however, the editor uses the same wildcard configuration as the debugger does. See the documentation for debugger commands to find out how to change the wildcard character.S^F Find by searching backwards towards the start of the file.^R Replace -- forward direction only. It will ask for a Find string and then a Replace string. For all matches of the find string, the editor will display an inverse '>' symbol in front of the occurrence. You may press Y to replace it, N to skip it, A to replace all occurrences to the end of the text, or Esc to abort. Max length for Find or Replace is 15 characters.^N Next. If the previous operation was a replace, then you will be in the prompted replace mode if the string is found. Otherwise, if the previous operation was a Find, then you will simply be taken to the next occurrence.^P Find Previous match, by searching backwards.^L Enter a label name, and the editor will jump to where the label is defined. (By searching from the first column only.)^J The editor's version of a JSR. It looks at the operand field of the current line, and jumps to where that label is defined. It also sets a mark at the current line so that you can return with a ^H. The use of this function is not limited to JSR instructions. JMPs, branches, even data variable locations can be traced with this command. Basically, for any line that contains an operand field, ^J will attempt to find the location where that label is defined.^H Return to previous position where a ^J command was entered. ^H is also used to jump to locations that gave assembly errors. During the assembly, up to 16 error positions will be remembered. All bookmarks, and marks set from the ^J and error position reporting, will auto-adjust to any changes in the source text, so that they will always point to the correct line in the source file.- BLOCK MOVES & COPIES -^Z Set block start.^X Cut from block start to current line, in a forwards direction only. If you find you want to mark a block backwards, the easiest way to do this, is to set the mark at the current line, then move backwards to the start of the block. Press ^Z, then press ^M to return to where you started, and give the ^X or ^C command. A clear to end of file operation can be done by pressing the keys, ^Z, ^B, ^X.^C Copy text from block start to current line, into the cut buffer. The text is left unchanged.^V Paste the cut buffer at current line.- KEY MACROS -^W (Write) Begin key macro recording. When done, press ^3. Up to 60 keystrokes can be recorded, including Esc-Menu commands.^E Execute Macro^K Prompts for a number, and then will repeat the next entered key that number of times. ^K cannot be used within a macro, but it can be used to execute ^E multiple times.- MISC OTHER STUFF -S^Del Delete to end of line^I Toggle Insert/Replace mode.^A Accept next keypress as literal ATASCII value. This lets you enter Control graphic or international characters that would otherwise be treated as editor commands.^D Duplicate line.^U Undo line deletes, or changed lines. Does not undo block operations. A handy way to move one or more lines from one place to another, is to delete the original lines, move to the destination, and then use the Undo operation.E      !"#$%&'()*+,-./0123456789:;<=>?@ABCD- ASSEMBLER SECTION -- EXPRESSIONS -Expressions can be made from decimal numbers, hex numbers by using "$",binary numbers by using "%", single ASCII characters with a "'" (singlequote), and label names.Any of these values can be mixed with math operators +-*/, ! (bitwiseOR), & (bitwise AND), and unary -. The | vertical bar can be used inplace of !.There are also special operators that refer to the low byte, high byte,and bank byte (24-bit highest byte) of the calculated expression. Theseoperators are <, >, and ^.There is no operator precedence. All math is evaluated left to right,with the exception of <, >, and ^, which are done after the rest of theexpression has been evaluated.Examples of valid expressions: LDA #'A-$20 ;= $21 LDA #-1 ;= $FF LDA #%101&3 ;= 1 LDA #>$1234+1 ;= $12 LDA #>$1234+256 ;= $13 LDA #^$123456 ;= $12 LDA #>$123456 ;= $34 (mid byte)All of these expression types can be used in .BY statements as well.Like:LOWS .BY LABEL1 >LABEL2 >LABEL3 .BY 15+3!%1000 etc...- LABELS -The first character of a label may be any letter, or the symbols @, \, _,or ?. All remaining characters may also include numbers plus the symbols., :, ;, <, =, >, and ^. Labels may be up to 15 characters long.Label names, and for that matter all text entered with the assembler, canbe entered in upper or lower case. Labels are not case-sensitive.When the first character of a label is '?', the label is a 'local label'.Locals are defined only in the source code segment between two global(i.e. non-local) labels. References to local labels cannot cross aglobal label definition.Internally, the assembler creates local labels by appending the local ontothe end of the previous global label. Thus in the following code segment:DELAY LDX #100?L DEX BNE ?L'?L' is a local label, and will be entered in the symbol table as DELAY?L.Knowing how the label is stored, allows you to access it from the debuggeror the Esc-V expression evaluator. You can also code a direct referenceto the label DELAY?L if you need to access the local from the other sideof the global label DELAY.Locals are not printed in X-reference or symbol table listings, whichmakes them very useful for simple loop and branch structures where youdon't want to think up unique label names for all occurrences.- ADDRESSING MODES -All 6502 and 65816 addressing modes are supported. Any addresses thatevaluate less than $100 will use zero page modes when possible. Thus,zero page labels must be defined before being used, or assembly errorswill result.There is also a way to force 8 bit, 16 bit, or 24 bit addresses using theoperators <, !, and >. (Yes, I know this is inconsistent with theimmediate operators for low, high and bank bytes -- I didn't write the65816 assembler specifications). This can be really useful for forcingabsolute 16 bit addressing on zero page labels, to add 1 cycle in timecritical applications. For the 65816, it can force direct page addressingfor non-ZP labels, (which of course requires you to move the direct pageregister to the proper page address). ALL 24-bit addresses must bepreceded by the > character.The operands for the 65816 MVP and MVN instructions should be simple bankbytes -- not full addresses. Ex: MVP $40 $80moves memory from bank $40 to bank $80, using the addresses in X and Y.Or: MVP ^SRC ^DESTUse the bank byte of the source and destination addresses.- PSEUDO-OPS -Note that only 2 letters are required, but if additional letters arepresent they will be truncated without assembly errors. For example, youmay use pseudo-ops like '.byte' and '.org'. Personally, I really likehaving the pseudo-ops the same width as all 6502 instructions, and onlyuse 2 letters. .24Sets the symbol table and program counter to use 24 bit addresses.This is only useful for 65816 programs, and may crash your machine if youtry to use it without having a 65816 CPU. .ABThe assembler will generate byte-sized values for accumulator-relatedimmediate constants. (Default) .AWThe assembler will generate word-sized values for accumulator-relatedimmediate constants. This is only useful for 65816 programs. .BA byteFor bank addressing, you can specify an operand to force assemblergenerated object code into bank select RAM. If the operand is >= $80,this value will be stored into location $D301 when storing bytes of objectcode into RAM. Operands less than $80 are placed in the X register, and aSTA $D580,X is performed. This can control certain bank select cartridgedevices. NOTE: For using the second method of bank addressing, theassembler needs to be able to return the bank select cartridge to normal.There is currently a 'STA $D5DC' for this purpose, but this may not be theright address for your cartridge setup. You should search the disk filefor this instruction, ($8D $DC $D5), and replace it with the appropriateaddress. .BI filenameIncludes the contents of a binary disk file into the assembly. If thisfile does not contain a DOS binary header, it will be assembled as in-linedata at the current PC. Otherwise, a file that contains a header will beloaded at its load address. .BY [+byte] bytes and/or ASCIIStore byte values in memory. ASCII strings can be specified by enclosingthe string in either single or double quotes.If the first character of the operand field is a '+', then the followingbyte will be used as a constant and added to all remaining bytes of theinstruction.Ex: .BY +$80 1 10 $10 'Hello' $9Bwill generate:81 8A 90 C8 E5 EC EC EF 1BValues in .BY statements may also be separated with commas forcompatibility with other assemblers. Spaces are allowed since they areeasier to type.See also .SB which creates ATASCII screen codes. .CLClose output object code file. When using the .OU pseudo-op to createobject code files on disk, the file will normally be closed at the end ofassembly. However, if you wish to close the file before that, it can beforced closed with the .CL pseudo-op. You may use this to create multipleoutput files in one assembly, or to place something in RAM in addition tothe disk file. .DC word byteDefine constant-filled block. This will fill an area of size 'word' withthe constant 'byte'. .DS wordDefine storage. This will reserve an area of storage equal to size'word'. .ECDo not display macro generated code in the assembly listing. Only themacro call itself will appear. .EJEject -- Send a form feed code to eject the page in an assembly listing. .ENMark End of assembly. This pseudo-op *must* be present to end theassembly, or an error will result. .ESDisplay the code resulting from Macro expansions. .HE hex bytesStore hex bytes in memory. This is a convenient method to enter stringsof hex bytes, since it does not require the use of the '$' character. Thebytes are still separated by spaces however, which I feel makes a muchmore readable layout than the 'all run together' form of hex statementthat some other assemblers use. Example: .HE 0 55 AA FF .IBThe assembler will generate byte-sized values for index register-relatedimmediate constants. (Default) .IWThe assembler will generate word-sized values for index register-relatedimmediate constants. This is only useful for 65816 programs. .IN filenameInclude additional files in the assembly. Only the main source file cancontain .IN pseudo-ops. You cannot nest them. Default drive processingworks the same here as it does when loading files from the editor, and soyou will usually not need any 'Dn:' types of filespecs. The file FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~nameonly should be sufficient. No quotes are needed either. .LCTurn off (clear) the display of the assembly listing. (Default) .LLDisplay the assembly listing on this line only, even if the full listingis turned off. This can be extremely handy to display the program countervalue at important positions in the source file. .LO longStores a longword, 3 byte value in memory. Only one operand is supported. .LSTurn on (set) the display of the assembly listing. .MC adrMove Code to a different address when storing object code in memory. Thisis in case the .OR assembly address conflicts with something already atthat location in memory. !!!name .MD ([label1] [label2]...)Begin macro definition. Described in a separate section. .MEEnd macro definition. .MGMark the current .IN include file as Macro Global. This keeps this filein memory throughout the assembly, which is required if the file containsmacros that are referenced in other included files. .OCTurn off (clear) the storing of object code in memory. .OR adrSets the origin address for the assembly.Note: If there is a label on this line, it will be given the value of thenew origin. This is not the same as in Mac/65 which could use its origindirective to reserve space (*= *+1). You should use the .DS pseudo-op forreserving space. .OSTurn on (set) the storing of object code in memory. (Default) .OU filenameCreate an output disk file for the object code. Regretfully, this file ismade up of individual 256 byte segments much like Mac/65 does. Iapologize for the laziness here on my part, but it really was a lot easierto do this way. You will need to run some type of strip program tode-segment the file. The .OU pseudo-op should be placed above the .ORpseudo-op. .PR "text"Print a text message to the screen on pass 1 of the assembly. This isgenerally used with the .VA pseudo-op when prompting for values to beentered from the keyboard. .SB [+byte] bytes and/or ASCIIThis is in the same format as the .BY pseudo-op, except that it willconvert all bytes into ATASCII screen codes before storing them. TheATASCII conversion is done before any constant is added with the '+'modifier.label .VAWill print a '?', and then accept input from the keyboard. You may enterany value, which will be given to the label in front of the .VA. .WO wordStores a word in memory. Only one operand is supported. SET label = expressionSet the specified label to a new value. This instruction allows a labelto be redefined with different values during the assembly. Any label canbe SET.- CONDITIONAL ASSEMBLY -There are four conditional instructions IFE, IFN, IFP, and IFM, thatrepresent conditional assembly if Equal, Not equal, Positive, and Minus.The operand of the IF instruction will be evaluated, and if the processorstatus codes match the type of IF statement, then the source codefollowing the IF will be assembled. Mark the end of the conditional blockof code with the pseudo-op '***'. (*** is like an ENDIF statement).There is no 'ELSE' instruction, and so you must use complementing IFstatements.Examples: IFN FLAG . ;This block of . ;code gets asm'ed . ;when FLAG <> 0 *** IFE FLAG . ;This block does . ;when FLAG=0 *** IFN FLAG1!FLAG2 . ;asm'ed if FLAG1 . ;or FLAG2 <> 0 IFE WIDTH-40 . ;This gets asm'ed . ;when width=40 *** IFM WIDTH-40 . ;asm'ed if WIDTH . ;less than 40 *** IFP WIDTH-40 . ;if WIDTH greater . ;or equal to 40- MACROS -Macros must be defined before they are used in your source. Thedefinition looks like this:!!!name .MD ([label1] [label2]...)Where 'name' is the name of the macro, and 'label1' etc. are itsparameters, separated by spaces. The three exclamation marks are aspecial macro identifier, and must precede the macro name. If the macrotakes no parameters, then omit the parenthesis after the ".MD". The bodyof the macro definition will follow, and should be ended with a .MEpseudo-op.The number of parameters used when calling the macro must always match thenumber of labels in the definition. When called, these parameters will beplaced into the label names, in order, where they can be used in the bodyof the macro. Parameters can only be expressions -- there is no methodfor passing arbitrary text strings. Labels used in the macro definitionare stored in the symbol table along with regular labels. Thus, theremust not be name conflicts between macro parameter labels and programlabels. I suggest you adopt a naming convention for macro labels, like always starting them with "Z" or something, to make it easier to avoidname conflicts.Macros can pass up to 8 parameters.Any labels defined within a macro must use a special form. Because macroscan be expanded multiple times, a special label type exists to avoiderrors from multiple label definitions. These label types start withthree periods, followed by any normal label name. These special macrolabels will be given unique numbers with each macro expansion to keep themseparate. You can consider them local labels to each macro expansion.Here's an example of a macro to increment a two byte value:!!!IND .MD (ZLOC) INC ZLOC BNE ...SKP INC ZLOC+1...SKP .METo call this macro, you would use: IND $80There are more macro examples in the supplied include file MACROS.- ERROR MESSAGES - These are the error messages that can be produced by the assembler. Errormessages are marked with an '!', and also include the source line numberthat they occurred on. If you are assembling a single file, or if theerrors occurs in your main file, you will be able to use the editor ^Hcommand to jump directly to the errors. For errors that occur in includedfiles, you will need to load in that file, and jump to those line numbersmanually using the ^G goto line number command. BRANCHBranch instruction out of range. OPCODEError in opcode field. This can be either a bad 65816 instruction, badpseudo-op, or an undefined macro. DUPDuplicate label definition. EOFEnd of File error. All assemblies must end with a .EN pseudo-op. Thisshould be in the main source file, not in any included files. This errorcan also occur if a conditional or macro definition is pending at the .EN. UNDEFUndefined label reference. NESTNested definition. Conditional IFs may not be nested. .MD macrodefinitions cannot contain additional definitions. OPERANDError in operand field. ADR MODEAddressing mode not supported. BAD LABELBad characters in label name. MACRO OVMacro overflow in either the number of expansions, or level of nestedexpansions. SYM OVSymbol table overflow. PARMSNumber of macro parameters in the call does not match the definition. LABEL MISSINGMissing label on either a SET pseudo-op or in an = equate definition.- DEBUGGER -- GENERAL INFORMATION -Note: 24 bit support, and the full 65816 instruction set are notcompleted yet. This is basically a 6502 debugger right now.Filenames default to the current drive number which can be changed.(input of 'FILE' = 'D1:FILE') A full filespec will override the default.Non destructive prompt character (.) for ease in full screen editing.Also, the prompt does not interfere with command decoding. If the cursoris moved up to redo a prior command, the '.' does not need to be deleted.Upper and Lower case accepted.The debugger is ZP clean, so all of ZP is available for the user.You can look at RAM under the OS, by resetting the bit in $D301, as longas you are using SpartaDOS or some method of handling interrupts whenthe OS is disabled.The debugger uses the E: handler, which can allow two screen debuggingwith some 80 column devices. (Your program is displayed through the Atari,while debugging output is on the 80 column device.) Currently, the XEP80does not work very well in this manner, because its screen drivers requirethe Atari DMA to be turned off. You can partially support this by addingan external user function to toggle DMA. More information about this willbe given in a later section. For machines without an 80 column device, thedebugger supports flipping between two display lists, one for the E:screen, and one for your program. In all cases, there can be potentialconflicts when trying to debug programs that use the E: handler themselves,as both the debugger and your program struggle for the same locations. Thedebugger's design is admittedly not ideal for use in this situation, but itworks out well for programs that create their own screen.Any continuous displays can be paused and stepped one line at a time withthe space bar. Press 'C' to return to continuous display. ESC, RETURN, orBREAK will stop the display. While the display is paused, the V commandfor switching view screens, and also the U user function, can both be used.ALL addresses and data bytes can be entered in HEX (default), in DECIMALwith # (#1234), in BINARY with % (%10011010), in ASCII with ' ('A) or as alabel currently defined in the MAE symbol table with . (.LABEL).Arithmetic operators +-*/&! can also be used, and will be performed leftto right. Any combination of these can be mixed at any time in acompletely free format scheme, with no limits on length.(Ex: 2000-#256+'W/100) Very little will be mentioned about this featurelater on, but ALL numbers for ALL commands accept this versatile entrysystem.All commands use spaces as delimiters. A '?' indicates a command error.Parameter uses for commands are abbreviated to:adr: a 16 bit address.by: an 8 bit byte. ('by' with numbers indicates a string of bytes.)bit: a 0 or a 1.char: an ASCII character.Quantities in [brackets] are optional parameters. Default values will beused if they are not entered. All non-bracketted values must be entered.Any other upper case characters or symbols should be entered as stated.'Current address' refers to the last displayed or changed address, (+$1),and is separate from the current program counter or PC.- COMMANDS - Display Memory. M [adr] [adr][/]Displays hex and ASCII. Displays 24 locations if only 1 parameter.Displays from current adr if no parms. '/' = to $FFFF. The '/' can beused on all other commands as well. Does not display ASCII controlcharacters when output is being sent to an external device. Peek Memory. P adr1 [adr2..] [*]Special memory display that allows multiple addresses to be entered, andonly prints one byte per address. * causes a continuous print of the listof addresses, and is really useful for finding keycodes from $D209, orexamining any locations that have changing data. Push Break to abort thecontinuous peek. Change Memory. :adr by1 [by2..by8]The change memory command ':' can be entered directly, or edited from thedisplay memory command. Only 8 data bytes will be changed. You cansubstitute the character = for the adr, which will then use the currentaddress. This allows you to enter successive lines of bytes withoutrequiring any other addresses. Ex::600 1 2 3 4 5 6 7 8:= 9 A B C D E F ASCII Mem Change C adr ASCII_STRINGStores ASCII string at adr. Disassemble D [adr]Disassembles memory starting at adr, or the current adr if not entered.The disassembly code, (the instructions -- not the hex bytes), can bemodified using normal screen editing. This gives you a single lineassembler process that is a direct link to the syntax processor in themain assembler section. Therefore, it uses the same format, and has allof the same features as any one line of code that you could enter in theassembler section. You can use labels, < and > operators, and evenpseudo-ops! You can enter branch instructions with an address like "*+8",which means the current PC +8. The only restriction is that you cannot usea macro call. You can enter 816-only instructions, because the assemblerunderstands them all. However, after you press return, the disassemblerwill not be able to properly display the code you just typed. So eventhough it will assemble the code correctly, you won't be able to see it inthe debugger. Another problem, is that the disassembler will not know howmany bytes were required by a line of 816 code. It will assume that allunknown instructions are one byte, so anytime you enter a multi-byte 816instruction, the address displayed for the next line will be incorrect. Itwill be one byte past the line you just entered, which will be in theoperand field of the last instruction. For now, it is up to the programmerto be aware of how long the 816 instructions really are, and ensure thatthe next line is typed at the proper address. Anytime you need to changethe address on a disassembly line, you need to move the cursor up and thenback down, to reset the Atari screen editor for accepting the entire lineof text.Single line assembly can be started from scratch, (as opposed to editingan existing disassembly), by typing, "-adr ." followed by an Assemblymnemonic. (The '.' is necessary). Such as:-600 .LDA #0Because the period is a marker for the beginning of the instruction field,entering a pseudo-op will require two periods. Such as:-600 ..HE 55 AA FFThis gives you additional methods for putting bytes into memory. Since theregular Change Memory command is limited to 8 bytes, you can use the above.HE format when you want to enter more bytes than that. Or use .BY whenyou want to enter mixed strings of ASCII, HEX, and DECIMAL. Maximum lineentry length is always limited to 80 characters though. Other pseudo-opsthat can be useful are, .DC for blocks of constant data, and .SB forATASCII screen code bytes. You can also enter the .24, .AB, .AW, .IB, and.IW pseudo-ops to control the size of the operands that you enter, just asyou would need to do in the assembler. None of the other pseudo-opsproduce useful results, and some can be hazardous to use.From within the single line assembler, you may enter '*' as the firstmnemonic character to continue disassembly from that address forward. Display Registers RDisplays 6502 registers in this form: ,A X Y NV-BDIZC SP ;AB 5D FA 10110001 FF 7014 LDA #$00 Change Registers ; register bytesSupports screen editing of R command. Status flags can be modified in bitform. When entering values directly, a comma will skip to the nextregister, and you don't need to enter all the values. EX: ';55' willchange the A register to 55. ';,,20' will change Y to 20. Goto G[S] [adr] [*brkpt] [C by] [r by] [Pf bit]Run program at adr, or PC if not entered. At any time during execution,the Break key will return to the debugger and display the currentregisters and PC. Use the 'S' option to run code that ends in an RTS.(Note: When using the S option, the PC adr in the register display onreturn is an internal address, not the address where the actual RTSoccurred.)A breakpoint will create a return point to the debugger whenever aparticular address or condition is reached. *brkpt will place a 00 (BRK)at the breakpoint address. For this reason, breakpoints can not be usedfor programs in ROM. A '?' will be printed in this case. The breakpointmust also be set at an opcode rather than an operand location so that itwill execute. The rest of the parameters add conditions to thebreakpoint.C + by Counts the number of times the breakpoint is reached. Executioncontinues until the BRK is passed the specified number of times.Breakpoints can also test for specific conditions by specifying (r) regname and (by) byte it must contain in order to BRK. Processor flags canalso be tested by 'P' + flag character + (bit) for condition. Use theflag characters as in the register display.The breakpoint will be skipped over until the specific condition isreached. When both count and condition options are used, the count willapply to the number of times the condition is met. Execution speed willbe slightly slower than real time in this mode. Actual speed will dependon how often the program is interrupted to check conditions.NOTE: A peculiar bug in the 6502 chip causes breakpoints to beintermittently skipped over. When the BRK interrupt occurs, the programcounter+2 is pushed on the stack, but instead of jumping through theinterrupt vector, the OS will occasionally just return to the program atPC+2. This is usually a very rare occurrence, but can happen more oftenwhen using conditional breakpoints on very small and quick loops, thus BRKinterrupts are occurring very rapidly. It took many years before I wasable to really understand what was going on, and be assured that theproblem was indeed in the 6502, and not a bug in the debugger.ADDITIONAL NOTE: This bug does not occur on the 65816 processor! Go command examples.G 2000 = Run program at $2000G 4000 *4124 = Run at $4000, and break at $4124G *3100 A'Q = Run at current PC and break at 3100 when A register equals ASCII 'Q'G *4200 C10 PZ1 = Run at PC and break at 4200 the 16th time the zero flag is set Remove Breakpt *Brkpts remove themselves, and replace what was there when the BRK isexecuted. However, in case the program stops at other than the brkpt, *will remove it. This can occur when the Break key is pressed, conditionalor count values are not reached, or when the BRK is set in an operandrather than an opcode. Setting a new brkpt with the G command will alsoremove an unused BRK. Exit to DOS X Return to Assembler A Fill Memory F adr1 adr2 [by1] [by2 by3...]Fill memory with 0 if no data bytes. Otherwise enter 1 byte, or a sequenceof any number of bytes to fill with. Transfer Mem T adr1 adr2 adr3Move memory from adr1 through adr2 to adr3. Handles overlapping moves. Hunt for chars H adr1 adr2 by1 [by2...][?] Hunt for String H adr1 adr2 'ASCII string [?]Hunt memory for ASCII string or string of hex bytes up to length of 30.Use '?' for a wildcard to match anything. Note that the default wildcard byte is also $3F hex, meaning that any searches with 3F in a hexstring will be treated as a wildcard as well. See the next command forchanging the wildcard character in cases of interference. Realize thenumber entry system will let you search for things like "A9 'A", (as inLDA #'A), but not the reverse of this. Entering "'A A9" will put the huntinto full ASCII form, and search for the literal string that you typed in.The second example can actually be entered in the form "? 'A A9", using awildcard to avoid the initial ' identifier. For one more example, let'ssay you wanted to search for a JSR to a MAE defined label. This can beentered as "20 .