IMD 1.18: 7/12/2016 20:51:29 objects  UUUUUU@@@@UUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUU +(C)ZILOG,INC.1981MCZ-2 CP/M BOOTSTRAP 820951  !96 !ut!ut!ut  u t !6u t6!ut!ut!Ou t\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ܯ2 ݇!2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "޷"͌#>?͌͘ =_.:;<> Oޅo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USERO !yO#< Ty#O 3߯21y_͸2y2ͽ:ܷ˜1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^: ! ~ 3#0 Wx x ހ ނ G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUBO "C{2!"E9"1A22!ty)K!G_^#V*C~E ,&-AGMS!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :E B 2>: b# : y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN# x: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nx: ! 2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*#  ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E͊:==»y==»*Ww#*"͸*:G#š"͸:!w4!iw:Z!E~=262*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bw!>2*C~=2u:B2~2wE:A*Cw>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2*>Oa"'.3o?QüM222FFFWWWWi22FWQ MCZ-2 CP/M BIOS 82161 (C) ZILOG, INC. 19811!%2>211!: .!">2!"2!":O2222!C%!B:! >!J2(U!RW(y!Z(!yFˆ(  N(> ˎۆG(ۄ ۆG(ۄ ۆW(yӄ!b/w>ۆ>W !j0!r>!":2!y :>(o2))))?CCC> 2:?8[!ͷ>2>22>2:?8*ͷy2 >2:2*"K?":(I=2:! <*KB 0K?KB !hB *#" C22<22>*(<="!~6((:! *KB *KB($:!:2*"*":2*}o|g)[: (>2::2!:> >2:?ͷ:! ! 2"*"*!2*K "**:2*K!> >2*K! 2{ i` n`!!z~O< w! ~s1!U˿w{Ms1!4 T#4V(Nw++><4 D6+4 =6+4> 46+4F+~ +~#> < O !Q ~# 6+4> 6+4{M:@ (O ~#fo))MD))]T n f s#r~OW#!f""""!"t!k8!n8!]8!g8j͞yͼ(yͼ @!R(S/2:>2!  62! Fx/wp˗:2:W:! >>>>>>2!>2!2s_!qOyy( (q#p+ s#r<2 !5" ! !" : 2 :((: : O! ~( :(>7>~ G !"r>>կ2"> O(:(6 I>s1>2{MN#F#r(rH0X:rEhnEratr      ()23<=FGPQZ[de$%./89BCLMVW`a  !*+45>?HIRS\]fg &'01:;DENOXYbc"#,-67@AJKTU^_*+TU@A,-VWBC./XYDE01Z[FG 23\]HI 45^_ !JK 67`a"#LM89bc$%NO:;de&'PQ<=fg()RS>??h h @9& Zilog MCZ-2 CP/M Version 2.0 64k CP/M vers 2.2 Boot Error.     LGp,,<*7 ͣ,=-G~# "- *-͗,-x͗,G‰,&‰, "7͝ V- V- \-͗,C-d 1-k-d 1-͗,e-͝ ;ʍ--]5͗, >5͝ -]5]5 ʐ- ʐ-̈́5"9>5 >5> 4>5:9-*94.*9~-G+-~/_-~ .=G+~ ..-+<= .+.~>...?*9O #*96 2."9+D`E` Z.b8.,. .@@$@B B HH II$@DI ABI$"$H$H@$$I! H*  $H@@A I $D!!$I"BI"I"@$BIIH$$$$BBI$@BI!"$$A DI$@ A$@$$@H! "!$$" @B$!!!DH$$"H @@BHH  !$$A"D@ "A" "BHA " !$ D B I $ !$$ H@BD D$ HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! $I$I$UUUUUUUP$I@@ II$ ! A D! DI"I I@$@"! D@DI"$@ @ !"  H I$$ H!@@ H $$  @@$@ @01AB7C8FE20DA0903C8FE3DC8FE5FC8FE31 :100440002EC8FE3AC8FE3BC8FE3CC8FE3EC8C91ACC :10045000B7C8FE20C013C34F03856FD024C93E0028 : >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUB"C {2!"E 9" 1A 22!ty)K!G_^#V*C   ~E , &-AGMS  !!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$ :B A2 ! ~6  O͐  : E  B 2 >: b # : y! 4 5~yy 5 6y Ґ ^H @Oy H  H : – ͬ   #H : !  H ù  H  H $O͐ : 2 *C N#  x : 2 p & x ~+é 7 2  H ! >w _ : ! 5ͤ N k ͱ ¦ ͱ xʊ #N x : ! 2 ͤ ! 5™ #wO ~x½  p H    y< < ʑ  : !qMD # 2E > ! ^#V w#P :B O|^#V#"##"##"##"!O *!O *|!6ʝ 6>*w#w*w#w'û *! J * ""!N#F*^#V*~#foyx *{_zW+ * yx # *DM*s#r*s#ryOxG*0MD!!N: E G>O: \ S *C  :q n& ^#V> O^ "*}:*)= ":O:o"*C  *C !ͮ ~2~2ͦ :2ͮ : O:w:w |g}o *# ) :B O! yoxg*:B O }!N#F "*#*s#r^  ~!J  ! J *:o$*C ~i 6i w**{#z r+s{ozg**͕ **  , w͜ ͸ Ͳ ! !N#F$**O !~#:A #~$=2E k͌ : :/GyO>2!q*C " ͡  -'   -@ ͦ ~^ *C  O x ! N!Fwyxʋ>ڋ>*C w~#+w#w+ɯ2E 22 i  ^ *C :~w~͔͔# #  w ~>2!E 5T *C !"C  "C !w# F! w͌ x 2͢ *C  ~<wʃG:!ʎì 4~ʶ ¬:<ʶ$ ʶïZͻ   x >2>2ͻ :!Z2:E w ̈́ ͊ Ͳ  >2>2T *C G ͻ : w ̈́ n> 2;O ^ DM;}H> "*C  ::dd slO s#r:E ͊ :==»y==»*Ww# *" ͸ *:G#š" ͸ :!w4!i w: Z!E ~=26 2*C !!~~#~O~G#n,-.‹! w! yG!x͢.:E <ʄ! q!pQ:E <. ʄ$.:E <ʄ i 6}2E x N! ~态O>G~G!~G} *C !r#r#r ^ ͥ_y#x#{s+p+q-*C  ͥ!!q#p#w*:B O Y G } SYS COM G COME COM8Q COM Q COM)EE A31;Y Y p !"#$%&SCREEN͸ !"c!"{K{[v:x*t!c*.>Z ## # ]++3 >\:(>\!+| !N#T] w ( S >2N 2 (>.~ (# ps/DO Csmm~O#!ͱ("bk"{c( ͢"͢'S' NOT FOUND d+Fi{t5.;KPGWSBMOCLDFQTNJE|:&f3468271 _ K*B (+~# (#KB 8`i+"6+6 *+6 :+®  (yͧ> :6G:7:U:QO˹x ŁG x :S( :R(  :T~ #!0!UT] ~ #= (ͩ > >2CAN'T DO CMD !=(!$ *m :G: ͥͶ2Sy2  b *:G'A >&8~O# w!H [ "2O:G(2J !" `i:G;2(+> * *" *| >( C '()*+,-.C /0123456C T789:;<BASICIO C J=>?@AYLINK MBCDEFX COMGEECONFIG !HIJECONFIG +KLM 'SCREEN' NOT FOUND ERROR  :! !)!????098(w#098(w!ͮGr͚z/IMAGE SYS.COM !{S >2N 2 (>.~ (# ps/DO Csmm~O#!ͱ("bk"{c( ͢"͢'S' NOT FOUND w # +R(+ NOT ASCII FILE TOO BIG NAME? ERROR ERRORO!7y͗> O͗!>~>Iͧy͗͠bk> :5GyͧRy ! :<G yP0 x  G:;(yO:;0 GP  ~#yP O!5~ !Tb *|!oB !wNF^V~ͪ nf~ G[:Ox 0ͱ O:G(2@ `i:G(2(:*A `i:G2 *| b :G2 b G!=T]ͩ   *:"2*B 0DM!!"ZOOMSYS DOCNOPQRSTUZOOMSYS DOC=VWXYE DOC`Z[\]^_S ^`abcdeSPLIT COM fCOMPARE gHOJOB M hHOJOB 2ijkl~ <54x ÈG~( ؿ yPx NO ROOMHIT KEYNO CHG ENTER INSERT REPLACE ??? TAG 1 TAG 2 !'!5!.>I>Aͧ~ #͠!S6:S!'~m5EOFO2:(8r!:(6,:5= ͠w[0S0>25*~:524G2Q 2*B 0DM[!!oR !!w"qp*:utw*ut:w!~(6ɯ2o >::*|}:: :*|} :*|}ͮ ] G: o >::[QYAaiͮ [:O "2ɹR*HOJOB C 8mnopEECONFIGS 1qrstEEE ;uvwxPIP COM:yz{|EE SAV;z{|}EE COM:~EE ;]!v")]Gr> []e^e]Wr*)]e][]e]N#[]́]͘]e]>0{S+][)]S)][+]ͯyo]*+]w#"+]o]og}(%#o]oo]gXxe] ~ N#y( >+>0y${[]ɯ2.]e]>!8{!( (,(( GH L( []:.]=>Qͧ!~:5O͠ɯAͧ y>  F#fhg_!U>?|!U"=t!0!0*=~ #; "=2?J{ 0*=+"=6 ͕ zU̖yͧy>_ > ͠7(4i z +:?M8!*=sT]S=25~>_ y=̪͈͠_ ( *=6  "*B":O! 6:O! 6ɯO! (wA<8x o >ͳ ͛ ͮ `iB8(́ >ͳ ͊ ͮ   DḾ Ͳ ͊ ͩ yx(ͳ ͛ `iB0 DM  B8 (   DMo >ͳ yx( >Z  R ":!> Z O:o yͳ xͳ ͮ ͙  ͩ B(((ͩ ((Ͳ >ɯɯ>2@i#~: +~@##+x8( ~9j #x 2jx8(> >2@i~.  EX AF,AF'9]DEFB 0?^o] ͔ao] 9]DEC (9]INC  o] ͂_o] o_o] /]C/]Bo] /]E/]Do] ͢_o] /]L/]Ho] /]A9](HL)o] /]E/]Do] _o] /]L/]Ho] /]A9](HOx <  +<OO eNy͖F#~*R8*R0*RB DM (* O͛* ͛(  ͛ͩfo] /](7^D^/])(o] 9]JP (7^/])o]6 9]LD (h!vzqv~qV2.07. tdd disassemblerWrrdi {i Ói pj j j j" 7k 6 w * KDDDS $OeKKG]G;D DSKD(*** l:KK CLL3HfW""+L $O"  KL)@o]  e͉` o] _o] ͹_o] /]C/]B o] o]  _( 9]EX DE,HLo] 9]IN A,(ͱa/])f  ͊:_͊!J$=(xͬ͊0xͬ! >xͬ! ͊>O͊0#͊!! :_!$=(x 0x ͋ >Z x ͋ >Z O0#!!z w#w#w(>V#N#~$#~+: ~@##> ~. #> >  >Gx( ~ #x (@8Z80(.`8}8&($1* O9* 9(  9Gwk~kBinfF n:_n!J$=(x͐n0x͐ >x͐ n>On0#n!!w#w#w(>V#N#~w#w#w(>V#N#~$#~+: ~@##>c~. #>c>u >Gx( ~́ #x (@8Z80(.`8}8&($/898(!8)8(+( -(\(^ xͬ((#͊!!OW_}T]Oů)lau!t"w#/898(!8)8(+( -(\(^ x ((#!!z OW_}T]Oů)lau!t"w#͞ x( >!͹   ͞ x( >"͹   S)lgx !!GH 4 # (  >>KBo] $#~+: ~@##>G~. #>G>Y >Gx( ~e #x (@8Z80(.`8}8&($/898(!8)8(+( -(\(^ x͐((#n!!OW_}T]Oů)lau!t"w#x( >!3  d4x( >!O  ̀4x( >"O  ̀SH)lgxͬ!!G͊H͊ 4 # (  >>KHB~0 #~/ >:w>A+w͐( >Ƿ ͐(>>;Ϳ~I #~ ( ͜~# (X>g(ok > k}͈(ɯ21:((Ì *."i!N#T]> wh  ͪ !+~|  DM*` "W ( ! >2( ͧ:*=H ̓,̆> <2+( ͽ *d~#bk̓{8>(O ! x( >"3  dSH)lgx͐!!GnHn 4 # (  >>KHB`!PO>(G (+| |ʣ>}aiaiQY{Gz(<= B0 KB! DM#| >>2]!v")]Gr> []e^e]Wr*)]e][]e]N#[]́]͘]e]>0{S+][)]S)][+]ͯyo]*+]w#"+]o]og}(%#o]oo]gXxe] ~ N#y( >+>0y${[]ɯ2.]e]>!8{!( (,(( GH L( []:.]=>(>3>3*.>Z##{:(+:!b ͏  S D  ͫ :(( :3   & ́ b͕͠L ɯ!w#4#(!4#(͙ ͦ !͙ Gͦ x+| !@́ (+| >Gͦ xZ8000 SYS NOT READY 2222!! 7 ( !E yK *BR0 !" PYl (E ( ~ +> +R8!R !7 (Wy(KB͖(ͽ `il (W!ͽ bk ` RDMeW!R ! WF  W B>^w#>w#zw#>w#xw#yw#zbk`iG | ! T]xoyG>O!P>y +| ʣy>g( ͣ:gͣSYS: Z8000 NOT READY FOR BOOT !ͮ{y~͸#~ (>syhS͸K{[q:s!!c:(( $ QH2@o\E U9]+0e]${[]o] `o]v  _@o] 9]LD B_/],`o] _o] co] a o] Ϳeo] o]EIRX468271 _ - ]]d+Fw#!"">2!w#ͩ ͨ(͙ >ͳ ͮ  ! !6b͙ 2O: Ͳ y ͼ ((   (>>2 ?R 2222`h"`h"22`h"`h"ͩ ɷ <8>G>(?2 ѷRͅ 6 ͽ  6#, 06 #6#K B  w#, 0! [K E!f ͏ HIT KEY TO REENTER:!R !7 (5E*",".R"QU N [,*.R #*".!l (*".! *.~( ˿#".!+~=w*,"2.]-^x( }O(###T]#+#[]D^e]>I:-]e]-^"o]o]( 9]-0D9]+0e]${[]o] `o]v  _@o] 9]LD B_/],`o] _o] co] a o] Ϳeo] o] 9]JR ( 9]DJNZ G]o] 9]s(  s!s]> 1p*n|(~svW1QD COM,YZ,,QD M DEASM S IQRSII( 8 >#dmbk͍s 6 (A  y  R >͓s> ͓s>͓sy R8*K "K*M "M*@ "@*@x|27[M:J= *K 18'40#1O!K ^#V*R8*R8dE ':J !͂ ~ S227:526ͪ*E :J(T B lʹ:6262527GOz( ~(> !BDMeͭ:J(͂ BD(**B*KQ.HfWEU۵w&wwwU~]$wk~kBinfFN~h #x ^VBi~kBi~kfnͦiѷbk# w>2@i#~: +~@##+x8( ~9j #x 2jx8(> >2@i~.( ɯ2*>T !Uw#6 ͈_:J̗:SĪ{!0@:*([0>!5w:6( |4:7O͖S2B+> ##( A  >O0Ax iyMO oOG*2R O  yP8O>[0S0ʹx<26:62:| ! EX AF,AF'9]DEFB 0?^o] ͔ao] 9]DEC (9]INC  o] ͂_o] o_o] /]C/]Bo] /]E/]Do] ͢_o] /]L/]Ho] /]A9](HL)o] /]E/]Do] _o] /]L/]Ho] /]A9](H+>w#͓s "o t:_ t!$s$=(xBt t0xBtͷt >͆txBtͷt  t>͆tO t0# t!!ͦtw#w#w(>V#N#~$#~+: ~@##>t~. #>t> u >Gx( ~' (KK*MT]BDMe*0R0"[2*MR0 B"2 *KR0"23[MR8B"0*2B"2*K"0DM*2R0C2 "2( (,l[0|( (+B(> ~( oɯͧ rͧA(2j#x8( ~9j #xh> km2i(̀ xk#v@@@@@lmkj0000NH28707H20!+h$=(x͆jkj0x͆jj >jx͆jj kj>jOkj0#kj!!jw#w#w(>~W#~O#~:4> yOB[2ʹ:625o>26=25*R(S2ʹ :50:5G:62625o xB*B"R#DMx*R#DM"#[*RB0w~G( (#w S=qt!ͬt!Ͳ~  (@8Z80(.`8}8&($/898(!8)8(+( -(\(^ xBt((# t!!ͦtOW_}T]Oů)lau!t"w#ux( >!u  vux( >"u  vS"s)lgxBt!!G tH t 4 #([0|(+>2627lS0[0|(+)[0*R( |( +oB_͗!B>E|>2S(*(* ++|(2RS+:R  ( :J!_~!'=(!fz4r͈Omy2RUS=T>~ 2<> 2<2;bk##w#~: +~@##+*t*tssB B RmB B $*t*tisHs""mkuu55w]ylȑRP=27͠ɯ27͠:4!6 N:QB[0:5!62T!T~(5!45ͧ> 25U|~ͪ4͠:6= [*0R!=!6~=5͠ɯ27<26͠ɯ27:426͠:7O]AND o] 9]CP 9]OR  o] Xa/]Ro] /]R(/]L o](/]C/]Ao] o] 9]CCF(9]SCFo] 9]CPL9]DAAo]  a9]LD B_ /],/]0?^ ,o]("@o]( o] 9] ...'u]/]'o] 9]ADD HL,b (  >>K"sB@8Z80(.`8}8&($/898(!8)8(+( >>2f!v"g>!v!= qy×zP{íïvïv+"dv!9"fvcrr1kk!N#T]> w~qkGTtѯ: p  !vv2;U*!*4h N 4:J(ͧP(͠ 21:1A YA *T]~ # ͖* ~# >  !V  J͗ͬ}2,ͬ}2>Jo::O  2!5y(&:=(bk#~ ( (> 125 ORG DEASM /DO DEASM.S ORG 0100 /?"/IMAGE QD.COM ",begin LD BC,0B0E end,^Q-R.BC," 0",@2(TABBSE->R.BC)F / 40 EDNN / EDBY;; &ED427A := (08 .O("ADC HL,") / .O("SBC HL,")) SS45;; &ED437B := .O("LD ") 08 SS45 .O(",(") NN .O(")") / ED437BP2;~ &ED437BP2 := yP8 O:4G!6~4y27͠:7 !6~=5>P=27͠:J[*Rw>E28!C~By27( (;͠>*2 +6 ͪ=>I!J>R!Q28:J~B ͗*y27͠:8I [2> _*2 ͈_(:PG{( t 2 :8E '~ ( (:8I >9]LD b /],͏]/]0?^ ?^o] yd o] ~g9]CALL o] $b9]CALL Je /],o] o]  _(͉` ͱao] Ibo] 9]PUSH 4co] 9]DEC (9]INC  o] o] 9]SP(9]HLo] 9]DE9]Ͳr:oWKj*j6 # x +6 Cj!h"j`i:vGͱu:v̯pMwpWRITE:vv>2vSv>iw!oUw*vGrtSw$*v:vGct :p > >!v~=wmypOPEN!v~׀!  yO0y    ( !5  (y > !: 2 ͌ͧ͘!!H SCREEN EDITOR - 11/22/82 Gr͚z /IMAGE E.COM !{͚z !+{Wrx*?j" j:Aj2"jky*?j"#j:Aj .O("(") NN .O("),") .DO(DEC DE;DEC DE) SS45 .DO(INC DE;INC DE) ; patch ^Deasm,Do_it() Here2: ORG EndCC ...free area *?" DEASM from ",^Do_it," to ",^Here2 UCC: DEFM 'USERCC ' *begin ...reset USERCC Lkup(^UCC); LD BC,UCCADR; LD (H)+R.BC-1 R.DE->@2IY:9(w:8R( ~ # ~ ( #e29͗>*KBOB0 DM!96x 4~6T] x((F~ :8ET]R ~#~( (x(bk#   ȯ!6:7O7+~ :8E:6="2ʹ!6:7 5y27:8R ͠[2~25Ͳ BCo] o] B`(Fco] ͓c9]POP o]00 9]AF o] o]  _(9] EX (SP),HLo] 9]OUT (ͱa9]),A9]JP b o] "o] 9]LD SP,HL( 9]JP (HL)o] 9]EXX9]RETo] ͯb9]LD  o] $d(o]kcq:v:Cj(Gr͚z ERROR TOTAL=${Wr!v~v5~(my!%jO ^Vn f~x:v *Mj|(:v(S!m Rny x xR8 $ DM!mB*#j" j:%j2"jx DMbk> ny>-v2CjkqSGjSej2Aj"?jxx*?j" j:Aj2"jky*?j"#j:Aj(4) ORG DEASM /DO DEASM.S ORG 0100 /?"/IMAGE QD.COM ",begin LD BC,0B0E end,^Q-R.BC," 0",@2(TABBSE->R.BC)F / 40 EDNN / EDBY;; &ED427A := (08 .O("ADC HL,") / .O("SBC HL,")) SS45;; &ED437B := .O("LD ") 08 SS45 .O(",(") NN .O(")") / ED437BP2;~ &ED437BP2 :=̀!9~5m:7O{ O  :6GyP8:6!6F4!7Nw#"2+{ xFs!5w 4(!B0>@ͭͲx :8RH>!: ( >P0WzyFͧ>  ͠1ʚ2ʿ3[[)27OB[2ʹy27o> + 9]A,(b/])(/](b 9]),Ao] !o] 9]A,((9]HL,(b/])o] /](b9]),A/](b 9]),HL o] >Y2-](>X2-]*+]ͥd "+] _o] !fo] /](7^D^/])(o] 9]JP (7^/])o]6 9]LD (7^D^9])2%jmO:vGUu:vG!͘u"?j2AjNyy z`8>:vG͘u ͜p:Bjo !k"Gj6 pREAD:o ^#V#N#F#x>iw!kuybk*wMw͗zQ VERS !h@{~N#F+ws#r+q#p+>> 2cvɿN#( ASej#([ejH  .O("(") NN .O("),") .DO(DEC DE;DEC DE) SS45 .DO(INC DE;INC DE) ; patch ^Deasm,Do_it() Here2: ORG EndCC ...free area *?" DEASM from ",^Do_it," to ",^Here2 UCC: DEFM 'USERCC ' *begin ...reset USERCC Lkup(^UCC); LD BC,UCCADR; LD (H [!6~0(4:J*B**e::25H*!~G># 6 S2(y27͠Oʥ:J*t*!Ͳ*# "BͲ &n >N2E*(N !ͬ h!2E"@!Dw: wB(| !<zɯ2F2I<25,ͱae^ ]o] jbo] co] 9]JP Je/],b9]RET  o] ͋eo] o] /]C(9]NCo] /]Z9]NZo] o] /]M(/]Po] 9]PE9]PO9]JR e /],G]o] o] /]C(9]NCo] /]Z:;<=>?@ [\]^ ` {|}~Ao>ZSejy08&o 09(SejdzAG8ag8 o g|(=8{N#ͬz*ej:gjO͕'("O"PzpTOO LONGSej ("z:ejG:gj~ {kk(+H_O>cv!v~v5͏p:oW( vwMw2okk͚z***** > *Gjv> }=O!kj"ij*ejq͚z ERROR ${*ej*B~!02HK*BDM~!N~ ({: N~ :D*( :G(~#(:H/o8%#R0w!"@*B~(G#~:EN S2!"@2D>2G2F~!G~(5:E* or(>2I*@+"@|#(~'RDMe:F:E* !5:I 9]NZo] kf@o] ͝f o] ͧfo] o] 9]RR (9]RL o] 9]RRC 9]RLC @o] 9]SET ͈f9]RES o]e]${>,[]9]BIT /]So] /]R(/]L o] /]L(/]A/] @o](o] >g o] Fo] O#~ {#A8|${}${͗zH}-{'@Sgjkk> ͨrJ{|${:o_(or>;v> !kk~#= Kgj>!Kij#ȔDKB[Qj͙{SQj[gj"  ' ~͸y#B C >͸yA\|~1#(TKKjx(~A8 m} u8sr}( ͸y͸y~͸y#~͸y8qʹpN#ʹpcrkk!Cj4*Sj{pշB8(!kB0bk+>?crp*Qj"Sj:v( *Gj> 1kk*Mj|(ijqUxa1kk͕ (;(k͚z/DO ~; > # ͳqkxvpv|v͏pyv( > v y v>  ( 8 >#vbk5NN :Fhͪ:J=* *K R* #oe R8 *0R8 "0ͪSOd ͖"M! !J4ѯ--From here: --To here^ :J* ͖"K! !J4:J=**KR*e!6~04ͪͭBSO2!J~ *5B>g(o] 9]CP(9]LDo] /]D(/]Io] /]R9]DEFW 0?^ 9]EDo] >go] o] g(͛go] f@o] Tgo] 9]ADC HL,( 9]SBC HL, b9]LD o] b9],(b/])/](b 9]),b]v +s#rp MIXED REFr} N#F0v(r+s*o `iF} s#røyp NOT DEFINEDB #øyH ~ z͸yO ~ (zGxøyV m}8 ~͸yD ͱyYP L*or}8 }w#w+|N#Fr+svx  4`i|ͱyͻlU]!v")]Gr> []e^e]Wr*)]e][]e]N#[]́]͘]e]>0{S+][)]S)][+]ͯyo]*+]w#"+]o]og}(%#o]oo]gXxe] ~ N#y( >+>0y${[]ɯ2.]e]>!8{!( (,(( GH L( []:.]=>q 6 (A  y  R >q> q>qy +>w#q "ejkkcr> :oWĨr!kkR0~q#v?( q͜r?( ͏pp:oW(!kkRDM*jB0Kj"j*j w 0w"j* Os* I *B([KSM!J5(5I *MB"M[K [M͗ͪ*0R8(B"0*2R8B0bk"2 e̓t!#w  (;( q:J*͂ ' ̪'"@lS2*MBDM*KR0*MR8 :J=(*͖*K^Jh!vzqv~qV2.07. tdd disassemblerWr]&T {i Ói pj j j j" 7k 6 w * KDD@hDS $OeKKG]G;D DSKD(*** l:KK CLL3HfW""+L $O"  K y:oGkk D pREDEFINED LABEL`iF}ͱyͶyyy( #KoB7R}$ }% }p OUT OF RANGE>2pT]> +ͼ}N#F+ѷRs#rx(`iRDMqp=~(#<_* p{GNͨ}^Vz(Cy x ( #f͝óCLEAR̤~DIAG !oaLOAD >;DO 2pSv͎ͻåw!"o+"op̟(2o̟(:o 2o͕R=ͧ "o, ͧ"oͲALL K͏ ^ >!o2pgo"Ij͕E= ͧ"$hRL=80 !"h!"h͕R  }/o|/g#"ѩ <(ë- ѩ =(ëǦ & ë( | ë( .XOR. ë *2 /2?͕-> ˨ͳ ë( ͽ ë ͕R.͕O42nr+ - )Ǧ ٣*2 )/2<͕ѩ #֩ p<>Ͷyͯy!&p####~#  x:p#~(=a>2p+N:pa2pa##Fw+Nw+~`iO y̶y!'p###~#~#  z( x <+++Gr!'p###~##(/ cr8{F+~+ng{ Uy=ĸWr*p"bpa ~XE%ͯy2"sÝ{ٜ,[͕( ٜ ëO03nr͕+( ͉ ë O7rO06͊r͕ft,08{7Ы͒ , DNZ ëZ ëNC ëC ëPO ëPE ëP ëMëC, ëNC, ë(:p n K^(]?Y:p R* p^#V+H ["p7R0?q!Ͳ~~ͨ}̓}:p w#w:p(>w>2ppTOO MANY SYMBOLS* pN#F+ DMB * pBp#w#* pRs#r@* p#ͫ~ ͓~0A~O^ f :p ~(n hͧͧέ͕...̎Fz !8{ͤz;: (͕MEL7Ͳ(EQU9D>WORD ͜ >( E>ͬ(BYTE ͜ >( E>(PROC ͜ >(E> ͕; DEFL \9>͕at F~*pI{I ##R. ͕ O09n(ͫo0$͕ѩ +֩ ++R. ͕ O42n(ͫ/o8%#͕c 0BC ( DE ( ٜ w̓( HLd wR. A (? O47ru2ì͕R. *DE T]( BC DM(HL( ٜ [bpa≯y*|:X!"*p/͓͆͡~( #~,8 9(80^#~ #~# ##/~((( ( ##~(~" ####> *wp#+ ~ *yp *{p~(~(( #~#fo###:qpG~8 p(8 p 0 @(Z, ëNZ,ëFz A1ͤz$;(*Qj+"Qj͕A,+ O807r ͊OC6r0*Qj+"QjFz y "oͬ *oI{͑*FzA2ͤzП̬2** ͵Z( - ͵g}į('   o&' I{U~ͨ}̓}Ͳ~ѯŷ 2Dj* p##*EjN#F+ "Ejx :Dj 0<2Dj !kk"o:oA(* pB ͓~0fm N !"o m[o!kkRcr͚z Rem Space=͓~*"pBͬ( *o I{ĝD7ͭwD1. (2. >( s. : p /G:p̃0 D?>2pnf"pFz!p~/w[x2p*͕at9D>+Fz*ej}͕*Qj"cjܔ͕; ܔ(ןן;*$p͐z;Ͳn -DE s#r+(BC }| ( v utra"ìġ^͔>E()*&p͐zĂ ͪ(+Īq(: p=/   (  ( () [dz302o]012tz ɯO~w~( @ P(( P 0 x(8 x(~~0 :qpG:tpO~8#(,0 @($8 @  p(( p   (~( Ny(# #~~8og~( #~M(E( +~ *}p~#fo#*p a~ȯͿ[}p Ϳ( #ͯy= 0[$Ko*cj I{͵;U(I{ FzM|+ ͵-͵& ͵* ͵2/͵0 ͛dzí͕dz ͖͛H }͎͂value(*cjmCcj) ͎Fz[͕͠Ġwpatch #!owr 4ͧ{cr͏ [o?0 PY?8DM>Co!B ,! +8~G#   ^#V*o{͸ ~͵ N#!jk R8͸R0!kR0crkkSo${> !B($!p~(#pTOO DEEP>6${>#H!p Kʇ™͙LD ͕͋JP 0͕ OC2r͝(U Ԝ[(͝JR ͕ O20r(CP ë=EX 5͕DE,HL ( AF,AF' ((SP), HLٜOR ë=RL ë( RR ë -EI DI8{ͤzͭ͸m}~#fo*ejͼ}( ͐8G  Fz,Fz:#͐8 ~#fo(>>͐ [ej͐*ej>2pü}ت++x(.ͱyYP## x(ͻyت+x(ͯy_# x({Ͷy"Qj*Qj++ñyت"Qj++ͯy#ઁOͯyG3ઑOͯ*}pRد*ip|:hpX!"ipϊ(ш###"fp( *fpͯy2hp "ipsdpÉ8!dvͱyCp!fvͱyC}pL[p*ipR  {dp*R*kp|(ba +~(5~(1jÉ#~͸yb>l͇>̶y!98 !90:p(1kk*qp*wp"o>2o͵,Ustop ?C WSbgnI, I(C WSend͕͠ C HLout͕ C Outhex" xbegin͉endȔ̞( ͧ ( ͻ*Qj"Sjgx!ovĔif $ġ^thenzܔźOendifwhile )ġ^ˎ~ {OG!p ˆ{!kk#Ó{{O[ij(SijDKK"ij*ij+NGB77PY##7bkz${*Qj+~+~ "Qj x <! =(G #7R(ٯQU  hRK ͕,bjR?؆DK Ϸ IN >͕A,( C) x( l [(8 O40r,(C)RET ͕͒ OC0rGPOP ëINC ë( DEC ë ͕SUB ë( AND ë( XOR ë =ADD $͕Ԝ ,O09n(ë@ADC ë 7(yG'ડOͯyG_ͯygkPYz(R0+yYP+ͱy!xPyPͻyѯ)0!x) !Bͯy<Ͷy+xͶy+++yͶyتXQͻyѯ!tz {O)))) !)DM)) O dz(8{~#${*Qj+"Qjͯy8 pBIT>7G+ͯyͶy͕*Kj|q= ш>l͇!`p5 {}p*}pϊ ?08K}pB:`p8%]*p x CGrU NWr1ш[}pR01j:ap( y(a [paшi:p *p*wp!:p(!jvͻy*p*wpó:p :pay͏p1kksMj >*dozܔA1U7Orepeat ͉͕kendrcaseܔzofendLU7until 3zͨ A17(ġ^A2U7D7DEC B ͕ѣ͕; Ϳ8{7DA1?*!A2ͽz% ͕; [bNQ &6SQ &6GU >2apJC ͧ"p>2apBỦBC ͧŇXUXC ͧETQ /6HQ &ͯUK :[ͻLC Eͧ(*op#,>H!kkw#tz w#tzw#("gj1*Qj "QjP{*Qj}́} |} ë@SBC ë7(ë@BIT ëbSET ëbRES ëbLDI LDD CPI CPD ORG xت`iRLA RRA RLD oRRD gDAA 'CPL /NEG DCCF ?SCF 7*Qj"Kj*Oj"Qj!"Mj*Kj|"Qjgo"Kj:o:o= *Qj+ͯyO>Ͷyy( <]}++Ͷy2o*QjȔ*o[Qj:oG:o̯y̸y#>͸yͻy##"Qj>͸yͻyѯ8{[Gj (H*p:p *Sj:oO(Ko [GjFz "Ij{KIj x(B| }(͸}${2pp(NKSj7*QjBx2ap/ V("pO  :ap(!x*Kj"Qj"pȔΌ !ȁb gZw͔  p ̈́< E>[ FzC Latchͬ]UͲ[/ (A1ͽLͽ%(ݿ͔ H13m8{z͔ (else zܔzGLͽ,w(ëD A1ͽ͕:ܔGLͽt͠ z£z۟z͂ͧ(elsez͔ܔzA1ͽO8{ͽ[and ͡[(ͫor &8{D78{U͚zA1?#^ͫ(ҿ8{ͽПȯͧ(  (,*p, > < >2`p!ap' W,WC ߸"mpO  Gr*mp"op{͸ky"mp~${#~͵#>|~0 0>.#>|Wr !RDM 5~#foR0&B8!~_ o g(:p  DMOUT /͕UC), 8O41r(l ),ARLC ë( RRC ë( SLA ë( SRA ë( SRL ë -EXXPUSH ëWORD̬BYTECALL ͕ OC4r(͝LDIR LDDR DJNZ ͕CP8B!kkG~ x <#R 6 #<@86[#!kR8`iͯy${*QjB >]@{:p(:pay*KjDM|*Qj"Kj^Ȕ^<^͠K"QjCKjͥѿ*p*op>*p2p:p :p yaB#*h!oq#p#*h s#r#q#p#q#p#yhB m z.OUT( ͪ.LABEL( LԎ.SAV( ([C SavR{ Ͳ}E$ Lͽb(A1ͽ?b" z ͋(͔ M={##P{[(ͪ([( , ͪp ̈́C OutsL?= Ͳ<>|<=C>=q< a>Ct>2oH380028H380220>2oH38H30a8{UͲt (Dѣnot ͕ͤtcarryaѣH28H20 ٣ѣÓzero͕0 |R.DE RR.BC>y/Ox/G| <!.}GU͸ 'x #y N> 0O( O>+y${j>q>GrOA(*p{I ͯy${UU:rpG:p I(x2p͚z A=${N:qpG:p I(x2p͚z F=${NAx y ( P(WrBCDIR CPDR DEFS ͤت*Kj DEFT ͱz̈́DEFM ͱz͋RLCA RRCA RETI MHALT vOTIR OUTI DEFBDEFW͕ ̛Ĩ(WRITE%GLOBAL͕Fz(͕l ̺([0"h [Gj͕R[Gjb';u2QO2hQGjLASTCRQjNCODEejLASTDEgjNEXTDEoQOPTSoOFFSET pI_SW pTABBSE$pEXTADR$pEXTEND&pUSERCCqpR_AFpet͕" z >͋x* C Copyin#1 C GenRFzC ͤz.DO(͕; (["zzC Copy'z'ͤz"Htzz{o),͗zHF#~${#P{(ڍ 2 ((% A1ͽ8{7(Lͽ͆B ͕̩ ë͕c ٜ ̓( ͙dR. ?O807rfOC6Ur8{7@R.@2h|ٜ~U l[ͫӦ(dx(c &BC  ( DE |( HLd ~R. A (? O787B. %EHLIXIYSP!p ^#V!sp F#fhR O(}|͸! >={N͸>.͸bqby *mp2`pkkOUHY;q ( (͞O> v_ xy  Y>vR x{ (h /y ktz*fpw!pV {*op:`p(x Iˉ ]+ O04r7O347Ê(HL) ëͲ =B ëC ëD ëE ëH ëL ëAëԜ !,( *ͤ[( , !ͤq O02n,AA, ԛ+ 8,+ O407r( O46r͊(QuitzCopy${OuthexpErrmqErrcrOutmsg{HLoutDELqGet1vPut1GrWSbgnWrWSendorPutconyTestP{OutOutNgxGetrecxGetcon@{OutpywRDaHLyWRaHLFzIddzDigittzHexdzLatc= &E:=(/  (G;* (/ O(Ȕ VmMAP A 2oK͝ZAP ͕͎(͕Fz 3(PACK ͕ALL >(2pK;~LIST :͕OFF !o˶(ON̴( ͟pEND(ʹX [ejZw͖y͎BANKyIF u :ͬ- !} }Do>{P{( ͫ D0 ̩( U ͕[f>8{7R. ͙( ٜ (^ '͉(p C ͽ̈́LͽēW. %( Fz *ͬē,l *ͬU ͠[n -DE ^#V+( v ɯ2p!qpY;x_A WͯyͶy2p y YRv#+3;CKO#(-27ͱy##=  O06rlU L ",+ O707͊( 6͊l("X *ejͩ,Ͱͤ[SP, Ԝ (ë͉͕,͉U O4Bnͤ[O01nͤԜ "A 2͕O43nq O0An+ O787U  ~h8{OutsetzCopyinzSrzSr1zCountȔINSTLISTDIgm}lLkupnlr}LkupGenZpSav7Re?PpUXcEff1ODbug+JASMSTOCOMMAND7LABELCOLܔhINSTן*XINSTlCBNbBITOP2WN x2 pTHENELSE ! p>wENDIF 2 pBRKS-> Q y( P yRESET +͕EXTEND!p~6*ejͼ}$pq#p62pIMAGE <͕Sv ( w!"$h!"h!8h"hÒ(!DMӭ̀y/ ͜pyͬy* EOFxSTART ͜p*Qjnfr(͙d ~#fo# ͉ē,P. Fzϯ(FzkC ͤzU Ȕ[Ͽ8{7W. FzFz>sB. FzFz>sFz!ì!õHLDE bkBC`i+carry+-carry-= ::͕-> jͳ ë( ͽ ë + L>l8"wps}p"p*wpLj!Ppqp!qpPp!9qp !9!qpPY͸y![p-ySQjK͞+>bѯ*}pͱy`ib##= a("a ͯy(#s#r#wa+wѯ:p:( :ͤ [>l͕͊( ٜ ëOC0n7͕HL, ͕O40n7DFzdzy$͵i(BC) ë(DE)ëAF ëBC ëDE ëHL ëSPëIX(IY ëÕHLIX IYO86rU ( }NumHNumXCOMM"OptmhQBEG]dNEWQBEG]GDEASM%SCRATCH[Deasm{g_ 01#g 00#XName&p+Re?PpUXcEff1ODbug+JASMSTOCOMMAND7LABELCOLܔhINSTן*XINSTlCBNbBITOP2WN+L;`8n:3` ;DJ `:J8h:n ;F`;L:j:`n;YLNapKLL;j>I!0R!7n1!AP.80 .80.80a!AQ8 Q0!ͽP!@ m8ԡ9"! !ν!Bء1 > MaСe!B *`'"_ LXpJ q**13LW_ V0LW_ LN!E_ ,! LN!L_ $(0_ _ܠ_  dW!\poB~ x TTn @_ L@ n ?_ L? x UU_ pph-_  NNh-LN(`.__a6ֈ Jߠ ֗  Lݐ`>J.` .n >'{)҂!` 8J .LVh8ҏкґݞ __a4o4L9as`9.=7 h9!p t ɀȀW[  Lp x  `xw`>  x 11D 226 33'anaL;n x OO)Ӭa6cn ;ә`. !: 8J.aP"aP"q }R_}Z (}R_}Z.(}R_}Z!! }R_}Z/!}R_}Z!`_}Z!1 y0^8rpo^816~o0038'008 :;<=>?@ [\]^ ` {|}~n8LV x  nVҲ!S!V` 9J  ҷxt!30 w!\`!\oBs%߈p!^$!$(aB 8  0 ;;oBnAy aB0oB 5 w!\zy_ $ " ZZP<^ ^ ^ ^h^ OE \(0ՒLN qXp qp`>Jn9թݞs! 10 8 5 p!Zo6ӓRCn ;_ x OOILNԸ!,0oF3p x nnNnI ** NNp!Ԣ1nIoD!H.8 x AA ZZ o!Y`p x 00 8 x 00 99 op  AA FF aa ffS""$%B *WS"'߉%W!!3 >CY- 901p00-aa11p x    p x     w>`AaB.?7poBL9f_1 _$J#   aB 5 \  `` 904!^    XX!$!>)CLNa 00oBa00ӬRa+̞6 {p {u  ! `.kw*PPw*Y VERS 1.00 -* `P5`n LP`P5 jP5 a `P4!P7r{Y5 LP4ALP4!_Z*****  `̈́.8F q3!"mLJLML9aF 8BnLaCsӞ! 9 8  ILLH**LK 80.xp!q-` LSsַMDaF 80 8.xpLINNo6MDLHnKnJ 8.xL x '' ""p q""p"PTOO LONGo x  p xaC.{p 8   ,, 80 80 AA#8 uHHp00 99.xp(00 99.xp..xp+;,<>=* !! ~~ ! TE x  p x     ;;C x   ,,   ;;Cp00 99ݞ x 00 99 p 0 Ҟ 4ϗEsބ03s߁3 9 .xpa!v 41a11pCMP_v 00oP$a-_Z ERROR _Z -NOT FOUNDa- H 901pR !hP3aP&LP!o .[[ !s09p?.xp-[aP$oP&LPФLP5a! tEIRX468271 _ -  ***00@.;KPGWSBMOCLDFQTNJJ|p,pHtJz z468271 _ ԽPFILE TOO BIG NOT ASCIKjKLI** ԱaLMp0kD 11q7$LJ!"`I ** !9LM*0 9 NNLJԞ--From here: --To here^ LNԆaP a`0ނ^D AA^^Z 80 11% 334 LLL 44.1a߰SsTS ލ0߲1s]sqJ aɡS0mS҅ ߻p3K6 x  ` /  ҩpB`a4o4"n:`9`:n>[p q ph> t Ѝa6D`:n9|`.n:n9K po6Y`9(`:B9n:n9О !4Ps  x  psL NP0.80Z  Ԟ .xp!s 8j0@ ??  L ??   ѐP^ݞfP4E!ss1aPaPoPaPs1dL-RF GType 'X' to reenter\nT0}2?}:NU40140aK`[ PKaPo.[ n[aP .[ `:`;``!4MZ!ֽ֜LN _םשoDo6aR1KPKRLNړ KPaPoPaRoRaDoDaD1pL;aRLNЋaP< y 11 44 11aPasass5 x EELN{կ_lo6\ aۡSsހSڽ01s0ҧґpwTޘDC@SB޻ _QP MIXED REFe] HHѓю OO ќї֞ WW Ѩѣѥs֩q RR& 80ў01s 11N^] 440^]s 339^^ao1q1psa1qsos9p0aCC qp x  0.8poB.9Ѧ1tѫ! 4Cs 1a0 xp p 00`x4 x󠁩pp x 80p s!oPfP4!CPMP!oPa`LLP4_QWRITE`LdP4n߼!6` "(`P5c!!!Bء7 ^VcD4!u߽0 1`MZ DMZaZ 8iZ `` Vt5 sl0sSF;GLDDS  K_QPREDEFINED LABELsǭs}z^`*s߸s0}`;J!: 8J8(0n;ս`;!: 8*0`n;ΞL;`8J:)LVqa4 G`9B:nYELY jYj8`. L9!\r$4h:L:a4Kpыo4L9L>ӯ` >n :L:j:$L;L:P54jP5_QOPENaF !1p.{ {p {u5  ;,<>=* !! ~~ !U2TEU 8  0P` P5 ^dhP5!ҁpT /g7bДD]LP3L aPNҷ !q^TL!5U 1 1&70P!P!@ 0 26c+7"aCs!YcACcaq!BؓcA W !duuaK!zCs ް !! !`B%C8o6o6^_ Ğֶa43 q0Vޗu_ _ Ğ 4 1!7_ __2!__ _ _ߒ_ Ğ x AAa43 0`.n:L; o4_ )a430֚_ _ L!<`}` v0t1wqt1awDB_QP OUT OF RANGE9_QP ODD DISP. 008820s``??`n`ao`R׽Rg100 ȋca8 x  %aL aP&a_YoS_[aL  U_[_[L_P,aP&KP$&! Q Pu u p @@ u[[p | _X_[0KP$].xpp_[7&11$.}2oѪ W4D05уO!_efo. W0C05 ь- ҄ 2,Ҍn -W4C05*ѫ#2.В 2_ef_e_etKOC069H1LfBD7L.pLNqvۮCZ]E=aP orN;o/oravorsvT=Ncr_rBvUݐFރ _Zppލޒ_Shw2  ިEQUݳޕw b޲WORDx eu< ?wBYTEߍ ܣߊ\ _aw:3Vaw:gw>aw8_Y1_YXjر Y W `waw0Q ߥߩߙXٲawgw>Tw1_Ygw> 1_YٲAwQ`oTc     E_QP NOT DEFINEDLP 8 AAa!PJoMU QP7 x   ,,p ߗ!1שs7/7qo 808aPFsQP6Xu5 :43=?}:5LPaP$` PaP$oLPaP$LPLPaoP$Հha!uƕoP$n PaP"5/]}2LP?oaPKa7]oaov}2?}:5Dya]v_\3}2?}:1^S^-t[f]5SnjΞn_e[zvڞ6z_e̞+ LL^R BB^љ܅/ܡW܋܊܍܈ܟ܈H BB^Ѳܞ3yя W4000ܪܯܮܱܬܬܽL7ȞD])҂ߌLONGߢߍWߚPROC߰ߤߝߧADDR!۬ ߴinŤn! $n( ۠?1 /aP ' Lo>Aat).IARRAYLP2aP$E1gw>1_Y1_Y}}}$}55(}X gw>_YnSaw>Tw@]w&!0bq_Yow  ]wow^LawTwb!_Y*Tw aw Mw Tw@ &s!u X Оaw}Kө9gQp6~gg aPF==שxsSKPHnapppԡC\ӒoCӗ_QPTOO MANY SYMBOLSaPF!11aPF!B/11.80aPF7/7n!@aPF=;( `g ߼L$ @QS_QD_Fԑ$+ReޤRu_ԻFC PCN4ԴvwaLHߍ BB^: LL^RX_et ҇מW0001 W4001 E_et ґӇ1 ӎݤp҃0W,6W!3>W"9 BB^ӚlѮ#YW4000CBGBYBu00oP$1]D_[ZaP aP$]_Yas݀ߑ#!݋3ߝ\,ݖ9ߩV8ߛORG߈ߟІߋ_oP$*KP *oP"oP ߻DEFSߩi߬۞DEFT_Z߷DEFM_X??  OTw8gw>bswE _Tw81357 }6377 1 vJ! w 1v>?# p !.}2?}:Tw@Pw^aw00 b2 8*0 8!^B2!1b_Y*bx _nD .xp.xp=_[Fg`ө8Юл-ޡ9naPF1a!1o`  C naPF3=3aaP(IGP*KP.KP,;MLAAa PF BН )ߥ`Mc߳a _SbԣafGߑLwiJߣߊ]w@LwiBߣB߳ߚߋvX߱QXߨJL'߰Tw03,!_Z$_[d_Z$ _[d.=0̞n N߿ 5S 5 pw,  qp ypC֞Z #! BB^0y>4kҎpҏv3ҋUK݂ҥ݇ҦݍJҾ_etݢݶZݹEQݬNZNEݷCULTNCUGE̞PL ӞMZ'_[.'۩pwAP$oP$gP$zero^YJ^Z^Z^Z^Z^[^\^\^e:^eD^d^e$^Ql0_Zj_Z _ZBCF_Y6A27.XB,.ԉ)HH_[@_YQALR Ҷnaw>\ w^z_nDTw@_[Ԇa_[fjwh^^!`wi ^Tw@ҽTw@]aw>oTw8]\ w^v7u3u}B?1u# p !.O}JaT^o}2oaw8?K aw:  @?!@SSP" Rem Space=пaPH6_Sb!cC ө8a1o cE x 80p q 1 10p x 8 a`s A_SbMgYZԇ\aԋ`ө81p!sk7 Mp_Sbpo e!3Tw]Ӱ x   ,,Tw@ q,,p"nwh!wi]wՁTw]w_[‘ߨ!P!a_Y6]w 80_[ 80_[_[ |.xp 8   ..xp0 |.xp_[>&!A_cuC IڞOVPENOVPO GE  LTGT LE  UGT 'ULE~O! '<W4000$'*%<%ƞ>Զ  dqKwmIbnbh2** ei^cx- tx~rߧpЌ$T}Ж' x  p q''pwЏޗЫ$TޛLе(߿Ск)Фо@ ^Ъ}/aP"_Y޹()6a}:a^vZLP@oP$_r q _Qn! }2oLPE`P_VLwi q//p_g$,SP$0w.9Lwi!,oP$o_gb=H@!nN!}: -DW*-*AKW8000543JTWBD00>=R>?BaOF0LP6 4 0_QP OVER NESTED 5!e!Ը#.xp8bP6e` 堉bP6!^\Ԯq1aP1p.xpoP1poPCaP0 9,/^\ !7qsG3  a _`QM@Eqqo_[.ө8` 1p+.xp_[ Tw@_[%_[ߚө _[ߥީ _[R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10R11R12R13R14R15 N4 FC_[DwD!BUԷ mW0D09YVkT_etӖמL W4000iliniހi~ӪӠ(P+P$< BB^x LL^ ޚ_e* ޤ_e4ޮ_e(> c BB^ LL^1"޿F+W0200~ӞЉu q^^_Y^anЯ sy x ++ -- && ||pw#9 x ** //pw LթվO^$I_LPߢWߧB߬L߱Q)ߺ'#+ LP4 LP<٤Cap x00  p x00 pLP1 qRR_m _m 6 qRRpJqs 8 KK1p? ^^11// ~~0 &$ ++B --B &&SB ||SB **@ //@K.xp0贫p {p sp zp rp.rp.zp.sp.{pjЮ^\ߧߟߦ_gb߭w!S#/CCBz  @1p=.xp_[   _[..xp_[ Tw!Oߚߨ_R     _Rܗ ߹_Rܫps   '  ݄_e.H_[dŞ0O؞_X5anj'y_p$W1C09 * $W5C09 ! K0W1C01- ;W5C01#8 #՗Lմ^:ҵ<TfB3D BB^ LL^տ.xpM^te^_YDpC _YLsmf_Z p_Zjфvalue( QݎU q))pw|вR_Z$p_Zj Х Pђҥ/򂪞/aP"^c&ejoߔ q paP$oP&g_t _`8  p x LLF ﲨ HH P 蘒B RR\L QQfQ oW.W,7O_e%4>O*_e;_fHR.xp_[CLLLLWWLLLLS x ߵE։+Y^Uf( _k)U#_[v=#-_e}܁܄;[܉;?ܐ~n P2ܔܗ:_ܛܞ;_ܦ/ܩ*s q شsܶDO LܽLOAD LēڻW_UpPACK ALLTws_Yx_Y s xp_R$).38<!|,s ?!ssG4B(X ppSC _[ "CALL 9_[ž_Y_[_[1 !aȗ}} C X_.տb h BB^0ԁm߄W8000lol߃ԋ| Ԩߐ> BB^zߛ߫Wߏߒߕߨߨ ߥߧ߽O_eߩ߬߻d BB^߾)WٞՁ _VZfP4waPL_Zդߕ$_Qn[!]տLP0 q//E q p K H_[H_[,֍ ֑ *L֖%,#(8;...2>J081:>5:LW.cRB.iXBB LLpm`s#_n{#_n 3o_e8_rdڂڊڊڒ$ڒښڮ#"_n4_rd>_rdF_rdK_rdQ ɞ@6ɞΞңҤIMAGE" xp    p_S!oorMtޯޱ05AW_Wnm EOF_USTART e_X>BRKS-> !Y_Xt'P-RESET03EXTEND ӯ;CLEARCSEGLPKNONSEGLPTMAP x0h$ h㠉q&nb03}} Tw8_Yaw@1 &߹!߾s_Y/qs1o6З2.8!_Y*_Y !v5!0 &354 5a0B!_Y*!vh 7 BB^ٞ5 ^YJ^Z^Z^Z^Z^[^\^\^e:^eD^d^e$^Ql^ed^e^e^e^e^r BB^ LL^ߓHp 1_rdߘߡ Y|1!_rd+ BB^ LL^߽$rլJ!_rdD.n q EuabWWageaP$aP TP"B_Yb_Y*qQ boP$!^_Y*1LPA_Y*1Q_Y*1aP"O@aP OAS0at.M@.E@.K@.C L itIP/A(/@@DԞ, Pif$([_etqH_e@д_e-)0]8(;[є'@)C]-6ѻ_n|LPR|_faP _pG_f3K񠓣?_rd AApnuҰbZAP d;gגچUqLISTtwOFFbP4~ON?_P݆END GS_T\݅_XְۆݖIF ٠ݜTHEN݈n P0ݤELSEBP0nP0ݰENDIFLP0ݹWRITE 6ݿ,:ݻߞGLOBALDIAGJ83359!v!0 _[52_[y5_[<=>?z|} {{ { { 96.,(*   &$":;0123457pqrstuwTw@_Y a ֞X   d  6Մմ\!_rdV BB^@ LL^6pP՘vЋHoІ ЄВЗ МG BB^СЪйOХ_eШз#c BB =֙; <֦:͞a_ae_`ߨ e q..ECa_Y q::p_`_` _`        x [[ (((_`._`  _`_`a_a<׮_a_`G׳_a!_i|SX_o_ra _f/aP _rdn_rp_YۊALۋۂ۔<<_pۂۛ>>ۆ_f?]ۥWۍیۋۢ۬W3000Uۙۘ۫۔T LL^ BB^иۮ۰3۸њ۸"/ї W0D05۾n۾˞5dP4*_P^/_XZMP,MP.TMPS@UNDEFo0s!oP(=oP*R=܅oP,,܌oP.aP,oP.޿ 2ALLL͞ { 00 zz odP4LMJX ovܯ)ܲ>a`!~8!4VP {ߒ!~J!4P?? ^ g!~^4 99. P!~f4 ' PP??!~k49S!~q4GSP!~}!4VP P ֨աȞֈ BB^C?ָ;Mޞ"h>ɞ:r$ֶ;_e* 0_eI:.W+׆6W2 BBS/ז1_eM9 BQW7D00;<;P^FLAGSpLN @/Ԯ_dwڲ[ڷ@ڿ_< [!_d [҈_rd_eW@ڞՓb()&Lv_o_n_fۃ ^_`_rdխ(W81D0%ъ_n!;":JP1ӭDsave=2MrestoreG<Wsetseg O}3} gresseg_-} sreturn y(_gb~)hӵՃcalx Ն_Ys~ՋALՌՇՕpatch$c՛r__qՎ0$ժ[ _Z ՗՞շ]աՔգ_ss?L?LpL?L?L?`p`@  LpJ@CL@L@L@`pLF`pLFn!L> ЃLPd adE7Tв3 q00p_Z$qCL@(MM_\(a%wKR)<2\Q_gbU_,߾p> ps->eݠ߽gege_iQ_gdAU_ӈ.Л_8A_R0_rdЧ_!ЫӂckFLAGSW`e4wNSP {OFFlsLPEыSEGv134_._oW_YѡA.ypѣњgP$_QP ODD BOUNDARY x CC ZZ SS PP VVpw_r q E_laPJ_Z_m 08-6D_[_nDL6?6_tKH_[C>W(C\)F`- нLDLAL@MBMHJ!JaHaFʡ4u'\!SӋC!SS߀QZ߇!0!>1P_!>!PД!!fAQ aH JQ'\!!S4` A`BJ@ bAaBߡ5(CS9!S.C!S߮gEe_\_reA2_epл̞g_ лdA_ i_ _@Q U__wa_gag0_rT_lMxL~axo|"->axoz 3_Y""={ ?_B   0 0 BB LLWӞ ^ ^ ^ ^ ^R BBn ^8 ^ ^ ^ BB LLn ^ ^ ^ОJJR LԨLOE09H>3YJPL]ԹդJdEI1V,_nҩҔ2@ۻ_`_rdҴ Þ=ȞDDϞKM'~ߞӓ_rd_eaCձpaaȀf qaaputchar!Egetchar!D%close!A_rd(0read!B8write!C ۪_rd$R ' EU.! @ CǩAQ Cݩ@P !S3[NIP!O3j 绕_2_@_D_H^YJ^Z^Z^ZQC!SQ9CaS`AbA>nACoFQyQk+]q-cw|i }&o܃.XOR.wt܎<-> ,܁n[_et߂܄ܜܟ*ܑ ܥ/ܗܫ%ܝܚ}x^Z^[^\^\^e:^eD^d^e$^Ql_ZCTest_n&<k+>/[_Y1CLatch._n_r?])C(G)1_rN/MJ06_epJ_r_qE]CErr0Y_qk.OUT(ߪYs.SAV(_q( nȗ_[u~CSavBz ߊ #WaHQҋuoHs1aH11poH}aH1oH!3KBdAaH0 JQ'\1!S<ЌaH JQ'\ S1RaH11 oHnonpnq`o``_e 8nr HH0_[rotns_e~_[J_eaAAќѻg_rDaP _[a_[_epJ08ΞaP$oMa_@Ma_@aAAAa۲bP1MP,MP.MP(MP*_sa_a^_ax ; o=ix`~_`_`a BB LL% LWW__mdGRET EOPOP LDMLDA _n_֛"DIV+LDK -__J_9BIT& ?SET$ERES"_6PANDVXOR_GaINC(gD՘ߓaD_rdӨ`Cܺש @ܿaBםȀɞKaaרȀԞ8.߱.C߹_etstkȓ flag!} ג! ޗW_[ stk- +ՏePFߎVfԞ~8 0߽ӐՉՌFxЈCSavЄБ){fЗ{PЛ}ЅУ$ТLДНАГШJ06ЛФЛФж?ПТЭ_YоCой| COutN×H_[_[11p)p"ўCOut),7_ZCIcopy__[J`oLrHHat_e~ 1HH0_[r`GJqE_e~$&񊘍ELqE֞'3`sȨ ȪLs..LsLs Ls Җ3 Lo VҤ?1󪀞ҹU_ x ::p qQQ%%o@!A|azC|ߝoߠo!AzaxCzaa!]Q_`_@@C_`@ @@@CCCo!a| !o!ooQa=o 8AA_Af!A|azC|cff!]Q_`EC*_)XrCLR xCOM~NEGrnӈADC4ӎSBC6_әOUTҰӆӠLDIӓӧLDD Ӛӝ_eӛӵCPIӨӼCPDӯӬRLCӹRRC (ӽTCC_6LWW_t_ > SFց5ߧ*LG֐ߘaFoFǞSF ֟Ֆ֦߬K×aF5ؗ SFaFLpLFdG׫݌ݛWC000݁ݘݘ!ݚX ȠݤȡݧݸWݜݡnCOutset"Ԟ*CCopyin"#1"CGenn0.DO( 3_7:;?))_[ACCopy=_nM"H_Z$_[p x )) ,,K eJ0EXamL_h__q x ;; // )) ::p x== p == >> <<dAPPCaLq--Lq>>_o_f_d_ xp ]]_et q((_t߾ ۽؈W0C01_؆opw ؈_etؓ|Ȁؖ{ بW0C04_ئ؏س҅C_0_`AaaM 3M5M1ܐ x )) ,,n Cp_begin_qendif_ then_q__q _rendif while_`_)do_q_.J08+"_r<repeaL_LDR-ޞADD __ SUB __ׄSLA SLL_(SRA .SRL_9SDA ?SDL_0JBYTE_m _mҪVWORD_m6^PUSHa MgPݠݵ} ߭߈ߴ ߉ߺX ߐ] !! ߸_et0ƞ  ߤ-՞͞ܞ_R _e8_OC03_ȗ __W2000_'W" _et_Ξ_etp ==,ю:=ђ/ч7эў;>N6z*LASTCRLASTDECNEXTDETP"NCDSEGKP$NCODEPFTABBSEPJEXTADRdPJEXTENDPLUSERCCv_o_et_fX_rdE x ++ -- || &&.XOR.<->М x ** // %%_rL_ep_YАӣ^  Ğ_rd  T 3 aP _et_rdaP _rp6["+t_`_q.E1Kcase aҭ_qTof?YendD^until$_qL__e_t_rTY_RBW___e_taP _rZm_lp_rӍelse߬_q_r_qӛJ08ӆ_epӉӚ_r_q%ӬӯorӯJ06ӢӫӶӢ_rӻOPLjVpLONG_mLxCALR{gr^ԄCALLԇy{wԑLDARԔ4Ԇ_nԃՔԅԟMULTԓYԏԩDIVLԝ[ԙԳIRETԪ{ԼDJNZ Կ_tԬնԮW_֞LDPS_W3900Ը _zW7900͞L_et_et_et_et_etANߔ@֘ ϞӞ  ! !! ֊קзV,  6ֿ֥_ސW`uތ_ޘWhރ~ޕ~U_ޣWs_etފޡ_{ޥާ_޸WޜޟPQuitN[OuthexQPErrmSbOutmsgLSjPutconTVZGetrecOVGetconЁYId&Z DigitZ$HexdhZBNumZjHNumFZR#Latch[.Cnt[dOutpetIgaLkupaLkupnlC]-ߚ߉Ӣߪ]-ߛߦް?<+ߪߵߠN߲ߴ45n[_`Sb_rdak^ _`q QKٓ]}نوٗW8100قٕמȀٙN!>1P!>0J0E_epӸ:ӰLӷӷ;end^ SF_fWF_qSF_WFMF_MF_aF___R_|_v else_r_q__q__ oF':-1_n"+ q;;1L-$8J$_DIRLDDR _eXCPIRCPDR (CPSICPSD X $OTIR+OTDR 6INIR=INDR2 .HTSET<֮8RTESTFָB\EXTSJӹePUSHLޞޣ޶֬8ֻ Џ޹0;_:)Н_ȀMSЫ_R_rd_rd _WB200ٞ_Z_b_ש__\__f_WB10A߂_2߇_@SFjGWFw  gepPpOfASMSTgCOMMANDfLABELCOLqXCOMM INSTYJ#TestZZ#DelZ~#IcopyZ#Copyin@Z#Copy[*#Outset\#Out\#OutNGe:#SaveD#SavBAd#Gene$#ZpQl$ӂ7yӆtC ܬ߃0ߺߡܹ==b͊0+h-j 6Wޗ_et_n _f?_etek _W4C08 ` k*W4C05(ߐbЖet_ep7_r_rNor NJ_et<;_epN'_rcand,}_q_q_f_n"_n_n"ԃnotԅ_eԎcarry߹_n"ԙ<>ԟ=ԓԕ_eԭ<=ΞԳ>=؞Թ>>=̞ԿhTnMULTLb ^xDBJNZ {_LhrjB_֞ՇCPSIR{ՏCPSDRՃՀ՚LDCTL`ՈգSETFLG՘լRESFLGայCOMFLGժռ)ըճ_   ^eD߈LF`G`GFдл ў  ֞ !!rо h_et2VA_etU׈Ξڞ_sW2000[Z[`_etu)+t_`q{`p~__rd߅_ߋ_ߑ__`aF SCQ0a a x ;;#Err0ed#ReEe|#Xc0e#WRe0Oe#WRe4e#WRe8afa3 5aa˩!71!11ߴMrߵߦMara;]/oMMM!! P! ]4!7ooߛO$ݩСݱ_o#ӊ,يPW6̀(_`oD WW BBԛԚԿdAfAdAoBoFeSnv߫ڮ_r-_r.,4Ȁڭ<<=Ξ>>Ϟ<<><̞_e ՞_e ޞ_e _e?' $CF\nT qaastop"printf(_Z''_[.) pP M8)"Dӯd $               LFLFfGfAEL>L>L>L>L>L>L?fGfGE3MBEaBKFE fCEL ,, .._r x _m F~7ppE (() [[] "" ''  p x  p x  ^YJ^Z^Z^Z^Z^[^\^\^e:^eD^d^e$^Ql^ed^e^e^e^e^r%(,3_rd$& (MF ddC VERS 1.00 -*~" `<`n L`< j< `;!7rލjD L;PL;!_ *****  .xpa!] ](_؞ V _8CODE: SEGMENT OVERFLOW ] V$_8DATA: SEGMENT OVERFLOW ]$aRVĞa ==* ##% << ss >> ss  [[ ss ]] ss ۠5&ý6 ý{>2.79SïI%  W/}`*L$ؠyi )1u6XY u5 :043=aw"}Kg gQp6~a g g 652 a>==SK@,napp.{pšCІoon n o ЛoCo 8_8TOO MANY SYMBOLSa>1_ _ _̠ %P_.Q_&B a_1 q__ؕREF_(B]16( 0 2(Bu16( 24(BՊ4v 41a11pC_J_JMa"00o"a-_  ERROR _ Pa- B 901pL!h:a*_ L!o .[V !s09p?.xp:V_ LНL<a! t!La߷RVT ]T ]T$ ] T$]MM"]@]Hҩ]@,]<ұ]<Ҷ]H0]Da@3'ayT RxM _8TOO MANY REGIONS ]xisT<]rСT@]raH3ayT$Rx M,]x$isT* 22 !4nwӈ !ӍӑݼL$WM uuZ1L$u_}6 2s!4s!2sO!4ݱӺL$ àá 2u !4sqΠ!4sˠmqѕ]$L$KK߆!11a>!B/11.80a>7/7!@a>=;$` g g `ݭ-㡷/na>1a!1o`  C na>3=3a,I G.M0M2'2 042"%US3 6"3ZS:H !r&Ht bHгփ7yБД12&HЁ bHs9з1U^Kn! }2?}:]      ;;ʽ x   ;;!  ! }2?}:]!_ /DO !oL<݅L=_JJL=M8M8 \4! ]4T4$"]4   騐  D]r]$TH]r LNdN]tfNߌd__fN_Ԟ!/PQMTt]fNeaT R]aT$R]$MLKٗ9TܜaL1o1TĬo k ddHL$၁L$▖ ddIL$ჃL$⒒ ddL,L$ዋL$␐L$KK 22T$ w 79éL$ჃëM[`$ 22`$L$KK ?aT$ 22iikL$ᅅL$ᇇL"cK2K0K&1a o <`E3o >a >aE g a K a>Bo @a @C ` Ӂg= o @`8  MLAAa > B Љw` M _2 ^10*H10q D o ``0 aa1 TT5 nn2 oo3 ]]74&H .1o1s&1b]Y 0!    #!4e2u!!B .xp!s 8C0 ??  % ??   ~;^Zݞf;E!ss1aa0oas1p s!of;!CMaL3o0PT]xiLaL"]\4%M8_8NO MEM. FOR RELOC. TABLE _8!LOST RELOC. INFO WHEN TMP. EXITEDS8Շk8%`  aaJ_$`  *0Aoa8oW89T0ܜ T2ĔV]$቉T$Љ`$L$KK?ԋ 22ԑ 22{ `$L$KK? ԡԣL$KKuT$`ߠԩ9Ԯ! 44ŕL$KKuT$ڍҀ2à27y8 ddJL$KKT$є֡ 22!4߆a cL Ҹ Rem Space=a@Is!Е a1o  E x 80p q 1 10p x 8 MACAu?UndstaRg?EXTLa?UL?MOS???SNmMOUUNmTypMOE??? ^fa ChShI LgFlDbStUn BFUSUIUL@!a(Jn !a!ф !!ѐÃH" !!!ѦΕ씄ѭ!іWIg458T*u\_!oa`ߕLL;_WRITE`Ld;n!/`"`<c!!!Bء7 ^cD$!u`<j<_OPENo!1. {p {9T0$ T2 V]!A7ooi2K)K!a!A_T4a_ 8L`  g a0  nT"a_]P!U`  複.xp!P_7g_ `mÙ ms!@1L$ ddKL$L$KKT$ч֡ 2s!4sqҺ!4m8Û3L$ -á?L 2u!4sq8k!4sq>!4sm 4s@]) 4u&BeL$!"! lOr!sL$ a`a!0! ! d9P.  sc BҶXSҗ`    ``EŤU.tp.|p.up! d `.{pap 1p!s7TRXT 顃H `$֔k R#!!!k<ޡL$KK !2s>!2sT$2D` $n $T$]$ڠ2L$++cW4 j0u5  ;,<>=*" !! ~~ !TEU 8  0P` < ^h<!ЁpT /g7bЊ]Lߊ!^`:!_ ERROR TOTAL=_ P=!< XҤ*PL Y !Ё!g5d]߸_   ec*#0!V7__֕V_ _ CODE:_2_ _ DATA:_2ٗ_ TĔ_ T_  AT _ T_2K_ T_ T$_2K_ LENGTH=_ T ]1 @ՀՄ!@ՅL$߶    ߠL$v k߯ kk`$$n$ߨ` c``$&0fMN֠;.k Mp]ob OVER NESTED!^ q1a1p.xpo1poCa0 9,/T^ ף WRONG TYPE p {p sp zp rp } aa p yp qp xp po D.}p.rp.zp.sp.{pӂN&hӇY+p0S¡Ё֡T$` $n $!2~k!2ڃ2L$++ܖ܊!2su!2sښ!!!!W зsŕ  m ǡ ǔԠkנos^!_9HxL<La^[L<%! q^ q^uss0!1Q0TҖ] `L`ѮL:!џoo !  ɞ _READ!71!11:!!xbcnY bMa!"/!/528a ̽  a gK"9Kʃ/31!o/o"73ooЕ[a֩7 ߼a ֡C llng5cn&T %sk LL  8_>_@_BD_A._>.14mӌqӐuSa.{p%p {n CI` C߂a Dn֡*o HWޡ(a Do F` C ??d$ma Ha FM ff ff aa aaІ KKԼ( KK”*` C#. aana H( aaa F*` C߾ aa3 0!ߔ à Ò벱"ý벱 (Ã벱. 59!:<9á Ô 벱SKvXQa ` Tg3 ! !  ! *WM8 M8RELOC. TABLE FULLT4A 8ߙߝqߡi8XKa }T!@} N(fYT!@}:N0fE]da!YfbTPP!1pa }R_}Z (}R_}Z nũђ" AA DDЩѽ EE 0ݩR \o ! K c` llA 5g@ŒBA52c7cg> AA;A̡;g35gaA5 JJ'1ǀ CC18M1.M12a10K12a12o1. M1.a10 M12o121 1!14o10a12o1.)a123 II UU XX .. JJ RR EE1a12o12a1.0 1@a Fߋa H aaa FKna aaЏЮ !!$1"K nn fff0  ~~0  ++B6 --B1 **@, //' %%@ &&SB ^^SB ||SB {{' }}R'D !5 !0 13 ! !. / !7 !2 3YњѲѴ|!4\5q*` $ ` $γ94q?6` $9eR.(}R_}Z!! }R_}Z/!}R_}Z!`_}Z!PM HIJKL!1 y0^8rpo^816~o0038'008b- 901p00-aa11p x    p x   T DD g1Ǡ1 n! T K ^:` ll A gSpx;A ̔ހ7¡1? EE  Tg AwߡߚB5uJAq w=s1T]!14K100 [ S67Wpgs" .89*80.9 1 1 89JM6nogr_ z0A65(ߩ`ci: uu ```߶(`kc!6LЃ: bb/ % %@ ==B' ##B <<B >>B [[B ]]B ++դf, --ըf& **լf //հf == ## << >> [[ ]]ėD_KѦ!! PPм!4^М5qj!ў o n ]С5qЋЯ6` $-9eО¡5qЬf 22 ssR9S³chV`cq W OO LONGaC.{p 0 AA0 8 AA063b$&+00 99.xp#_ 8(00 99.xp..xp u pL BL BL Bo! .xp2ҽ0! (s1 gݜġs wݓsg4ߋge^T $߫T] M_8FWD REF WITH DISP1L_ ,g5e" AA'7:56Hc4a<Tr*bYd p `_`(``c Х1  LL` KK` 11 442_ &C VV 0 nn 11 44 ss*ܡ1  LL` gg ff rr ` 11 44 bbC8])0)%194!Vp6eVfCcpVc g6SuVeQ!Wg/W5S335SVpTtBw0&7ETdB0&$BcBVH_8MEMORY POOL USED UP`8  a3_11 r ss ssñÂҋ 44k҅ ss ss! Ãҡқ dd Ҭ! 22ÍܠүÒkÒ벱kܫÔk͗ dd ʲÍ 22Í먿Å 11Ä 22!YXL B f;_;Ӂ u !_2(an ]Tc _8 NOT DEFINEDL 8 AAQP7 x   ,,p Ηa :i :!1שs7/7qo 808a>s! ! !A!@QPU@@B(TҔ$]ҐS V]Ҟ([5ԫ&gd9Ga ֫` ll"A̋< 8 bb kk`;tC9m8 0v9 JJ` TT FF ` FFL_,a*K"&! Q Pu u p @@ u[[p | __ P0K"].xpp_ ؞______ 71(1.}2?}:5|a"oL߁La a_dL_Ca!JdT 5/]EF >1 LINE`c3o7\p ))o\ x  Ep "" ''ɞ (( { ))p // { **pƞ x  "" {  { ""p { ''p x  Ep \\ { E_K_K_Kp x ** `{ //  E$a2&ЯT$V]$Ԡ&"a2$a2&ӡ8롅a2$ǠL$a2&РT$V]$ԡ`2"L$$` 2"_@a1n[2 dd dd 4u 4u 44 44 2u 2u!2sS+-*/%&|^{}!@T  !0 _ ͓52_ *ђ5_ <=>?z|} {{ { { 96.,(*   &$":;0123457pqrstuwTM_ a ֞X   d `!U!4VP {n:n ==# ##= <<] >>[ [[><0p0д0Ї0K8 80 IIߙc UU^^ LLY llKT dd O ZZJ SS[E FFt@ BB]; CCޕ6 JJ1 ssެ, rrޔ' EEW" XXR DD}2?oaKa7]oaoK }2?}:5ya]K@3}2?}:1^!!!_$/ߣ/x _V._\_\Ȟ_(a !tpo x AApq:a \!\ 9 3 00/ 99, 00K\ _8UNMATCHED MACRO ARGS 3a4\@3a5\L\a\T K@ޚ!\ޠo \20s``??`n`ao4 22 00 pp ss4 bb2 pp!4u ffd(_A.p5i1M1_a1n>2̠렸M1a10`;2  M1 a1`92    aߒ!U*!4P?? ^ g!U>4 99. P!UF4 ' PP??!UK49S!UQ4GSP!U]!4VP PaM3VaMgMaMw RRq ..ߩ uug bb  kk,8 pp_ :_ 7_  Au_%    _ :63_ :7 _ :7_ JbT _!,_r_ __8M1 F GACCLVL FIXED\nM1 >0_ : ZZ __p { 00 99 p 00  { AA FF p 77 x    p //`x **p x  bp ** { //p  a\3u \\ a\ `{ pЅŞoO (XJЃ˞a 8_a 8_`oTc     E_QP NOT DEFINEDLP 8 AAa!PJoMU QP7 x   ,,M_GJdefine U_K_Gjߖz]9._GJundefg_K_Gjޣ_GJincludeu_GJ<_1 `2   `2d2_&JK1 `2n2_&JK1 `2  Ca1 f24a1`;2 a1n[2_&Va10`62 m  ` Ӡ_&~k1_1_Xjر Y W `MaM0Q ߥߩߙXٲaMgMTM1_gM 1_ٲAMQE1gM1_15S_ 7 BBezT$_5t7rgts_ CCT ] lu_ DDeyexerT _7rcs8_ :_ 93_ :_ 8aEog l_eeC̽ g5_c57c5_ :_ 1ga 85_З_ ,T T _T$_]Tw_ _ z_ p_ QGJ"_Gj_F_GjR߇_GJifdefߎ_K_Gjޮ_GJifndefߜ_K_Gj޵_GJif҃_Gj޹_GJendifދ_Gj_GJelseޡ_Gj_fa_ _ a_6c !a_ LaMa~`~o a_GJ(_Gj_GJ,_Gj_GJ)_Gj_-i1a1`20`;2n20n828 n 2 n2 gg cc_ :o2L2KK_ & "L2cc_ ]2L2ss_ ]2L2bb_ :n2 n 2! 80n2" ;n 2# 80n2$ ;n 2% 80n2& ;n 2'` $n $T$]$ڗ`$ **_.6 _}}}$}55(}X gM_nX3aMTM]M&!0bq_oM~ ]MzoM^Z$aMTMb!_TMz aM~MM|TM &s!u X ОX??  OTMgMee >0 AA 60_ :7 AA TT FFc_6Nm9ݏ^ FF= TT#sq_&ơ_ 5J__ :6ۨCeŽ4_r 80n2 80n2 cc_ :o27s_ (us_ :_ 7u_ e}L2cc _&a2_ 5C_Uَ_ȞDa?FRgއRw/gFC mPCsN4hvMa.HߎY0GߒLMJߤ߅Ӄ]MLMBߤמBߴߕӓ߃?ӖX߲XߣӡL&߫TM03ӿ,ӱMMd gӹK_Gj x    pLa a a~!a~a [Puo a~ha _8 LINE TOO LONG.a a~!a~ x  [ ""!p x ""   \\ `{ p_K4p "";p6 \\ `{  Gp_K( //`{ ** Uq //_/ 0 %%_/* ++_-# --_- ||_- &&_- ^^_- {{_.< }}_.z` $n $T$]$ڠ_-8L$::m` $Ҡ_+BdިDO ުޞHN_2܆޵IMAGE __#ޱ#_ORIGIN bswE _TM1357}6377 1 j! M 1^?# p !.}2?}:TMPMz^XjaMx00 b2 8*0 8!^Z2!1b_bx _G^ .xp.xp@_ _ ҶaM\ M^Za1`;2_>._(_&_&` 2ܟ g_ :_ 5E_C8_ *_ :9_ :_ 8_"(*g5_#e7ceT _$^_"_ra1`>2Qqܽ_&~Z7s`2`2 iin   aM.[iMaMn ݼN߶ 5S߽ 5 pw,  qp ypC_}_3TM]_ڞ x   ,,TM q,,p"(nM!M݋7R5 /]M?TM_K_Kc 00ga [Pmu {psv  _r5 Pa a _ !`~Jaa I Y@Pu K K@C =e _ a_6a_ ӋC _ڜ$%_CODE=޳_*AT޸_: DATA= _D_TEND SECTION_REGIONS_ EOF_START A __>BRKS-> %C_x+P_ 2PACKߑ_ ;CLEAR_JJCMAP x AApy_G^TM_ ԟc_ ~jM^Z!`M ^Y֪TMҹTM]aMoTM]\ M^K73}B?1:# p !.O}JaT^Zo}2oaM?K aM  @?!@SS a}:a^J_JL_J~a @_d$ pp ssڠ{頾{ T2 KK_&0 rr_'n* ff pp ss_(\_(p ii pp ss_(_( pp ss_'_' bba2_ 5DT2_` 2 !2u_)L2!` 2!5_)130g`2`2]M_ ߝ!P!a_]M 80_ P 80_ P_ |.xp 8   ..xp0 |.xp_ >&!_ h;a  _ _ y䡍 Eqqn_ 9` a\  _8#if's OVERNESTED UQf\n[\Po\a\P`[\ M\Ek\L\nߨ_RLIST UXOFFb;_ON߉_gEND ߑ_2f__ xWRITE ߈}߀,ߎtޞ߉DIAGd;_z^Zߘ/_\__|(_  ߧߪUNDEF ߱UNREFߦߩ ߾R=ߣ_o0N_GN q _V! }2oLE`_TLM q// p_D$0֫+8LM!Z_GN q _J~a"o_DSG!ZF_K$Z!Z}: - uHHp00 99.xp(00 99.xp..xp+ iiܞ܀Чn $ܷ{݊}_@T2 rr_) [ ff ss bb xT2_(\ ss߶ߟ_)2B ii ss bb ݑT2_( ss߸_)L) ss ssݧT2_(_)t ss bbݸT2_'_)О ss bba1`62a11p+.xp_ PTM_ &_ ߚө _ ߥީ _ R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10R11R12R13R14R15 N4 FC_ DM!BUM!S#/CCBQB  @1p=.xp_    _ ..xp߫_o2a0o2d;LME=_F=S_.)_Ҟ^ J^ ^ ^ ^ ^ ^ ^^Tg_ڞlߣpg^J&ki/$Lb47+:-381>ݔ2<_,_,= u po! .xp(PONеH!100 80<fP4^;ԧ u ! 80 ==a xpaPۂ_gbrqTP" '' 8̩0oP$0 80oP$!1L\L\L\%L\" x ##0`>2֠_&~{mT2_%yza1`62n$a10`;22_@L2!72_&~` 2!н5_)` 2 !2uQ_)2_(ӡ5` 2 @ 2!ڗ5` 2 5{_)}2Ƞ_)LΕ 8a1`>2  x a1n[2_&~_  TM!Oߗߥ_     _ ߶_ps   *  ڄ߽.H AATMs_̆x_ؗ s xp_LeMe B_T_,_,_ G q pa"o*_f;I q p" oK_iy.ߎ~..ߔ { DDp x      pCL_M0M2M,M. !o,=o.! _ړ_ڠ/P_TW_L\ ## pL\݀ݼL\_KL\_H_2_Ga\UP`[\ CM\[L\L\h\L\ _8MACROS OVERNESTEDb\a\o\f\L\![o\`\L\L\ x  ,"_K xp "" 9`{ \\d\ '' ;ވ@n 2M1 ?ݺn_&~M1 _8 COMPILER ERR _>.k17 ~ps[qsVa2"ޝo2"a2$ޢo2$a2"a2$_>` 2" nn_*6 ~~_*a1n62V dd dd_) dd 44!4s_)Ҡm_@ dd!4_@$).38<!Rs ?!ssG4 00 99  AA FFC?(X ppSC _ P  CALL P_ __ _ 1 ! ta}} C0h$ h㠉q&naen[e2435 > = ?6789aeUoSe0aeUoSeae3a3e9aeUoSeMeMeċ!ڞ! ޞ96_r8/d_5!0ae3a3eaeUaUeP8Ya e½ 0 0 a e_ _ _ڡ4! 80.xpC_6_ _  q..ECaa_ Ԟ_,_ ԗ_,_ ؗ _,_ Ηa x  $aL a*aoS_ aL  U_ _ P1 // { **pd\f\s0a\0o\a_ _ &_ CaL\ !\a\AqIPWpo\f\a\o\Ho\L\a\a\1AS \ݵAPo\` { (("fog\p x ,, )) _8MACRO Rm_@L$KKL$8 n$ҡ©ݽݸL$KKO_ & Da10`>2_ ]$ ++ --"L2"ppa2&L2$ppa2$_%lhL2$pp L2&ppa2"_%Ya2"Go2"a2$Lo2$a2&Qo2&k߆%a2"롅a2$О {{ }}!2sLb03}} TM_aM 1 &߹!߾s_/qs1o6З2.8!__ !MF5!0 &354 5a0B!_!MLh 7 J83359ֽ!ML  aЩ ˡ0/ӡao eo 0 _ A e o e  4  > 7]eaeoeaeoeae`;en eae  ae, oe߾ߪߒ|M|M|_H._K (M|M|M|_H._ KK_|_o|a|os_ _|f_M|_K { ..p { EE p { ++ --pL}M}_G^_ơS_a}_asҎas_vġqaw_6wk}V(ZC:Ӻ_M2_=_Һ_vĕ_ &L}o }5aa_~̞_ڔ*_a|0  0_|a | 0aa|_|8_ol V| a|o}` |n }_~̕_a|0__M4 Ve]eҕ_GRIp_,_,_Gb6WLfN4yߓMfP0_ KK_|` fN3EfPofP` fNn fN  afPRnLfNMfP2߻8ߧaeځUaUeҎ8_ KK$ _8 UNION INIT<>0Qߖaeځ3A0f&aeځ3a1f: a3 P_ol9P_ol070XFHVӇѨ_GRD_,_Gb_GRR_GbԳԵa|a |Ԡ_|  _K3 8a|aɕ`|   r i_8 NOT LVAL _GRSF_8!INCOMPATIBLE SYMBOL REDECLARATIONRe e c LeLee ` en aeoaeo` en Te7`e       _Ip_I\`  Le LeaeNj`  `e   Ɣ_` }.{p_Gf_I>a 8c5 8`    L}ao}  _|n}M}5aaG_ڔ L}M}a|PU1 ع_t_ڡ8_hl9_ z:l(ؽL}o }!2|p {p s_G^_,p|a|a|5T|a|_8Y0   0_|8a_ol1_ &aa!5_ __I>`   a0  ИC_I>`   a0 0ЮC_I>a0  ` J_I>a0  0aeځ3o0f:aeځ3o0f&aeځUASeaeځUoSe5Te֔]e֒$E5TeReҡ8桃  ҿŞ!$_ڽQ6``0Q(Z_ Ve]eҔ_GRI_Gb 00.}p 11_ p 22_  44_GbagagՒ1a|a|Юa|a|Єa|a|խ_<|ְ+-*/%{}<> [ ] =#&^|n } ` } 9_G^_,`{_ _t ++ --ҡ ** // %% && || ^^ {{ }}ߙ   5Pe LeLeaaKeȞ6f f`caf_6ffac_6` eJ Ce Ќe _G^`91p_Gf_I>` c aaeUoSeaaeUoSe_]e` e neM {n |2]|o|o|o|_ 0 0  a| p!a| s f d  b _|P_ol02N`|  T|_M(K@7+I T|_M2a|_MgPpR5a|a|_k(1  ߯L(  ߚU` ^_ aa R(a_J-=_27Q*=_60X/=_:)_%=_>"f>>=_Fm<<=_BtLe` en[g`eae0   _|n eՂ q  ae9  _in eaeae1agaeˋog!_i` eГLeВ"]eMe$MeLe_in eОՖ{n e`eLe"]eMeMe_ia| aa|a_6a|_vėa 8a3%i} M} _ h} _ za} UoS}_ za} UoS}.i}VM}V__ za} UoS}a} 03a3}.a} UoS}.Ma}VUoS}Xa} 3a3}bk} a} 3a3}.lj} M} _8 NOT IN LOOPa} 3a3}fRa 8aofaoen eieMe _aen[eaeKeaeae`]eSkekeދaeګ03a1e!3aeځ3a3e/. LfOLfO_H"ӞMe IߋaeaeKe neae`;eਰaeoeޞLfOLfO Jh,_Gb_GRb_,_,_Gba|0 "a|a|_ol _M2a|0 ХЦ4ڽ4P a|Яаa|a|a|a|_ol _M2a|a|a|Sa|0 _|M}L}a|a|j`|   a|  _8CAN'T POINT T&=_b {^=_fЂ|=_j__reЀ_#;U{ߕߥ߶г?EМЪօ_,м:а_t֮_t֥_tЬк֕_||b=>&&jBIZ_j_rH_^_f_` en[gneЗ88x_ z9լ8Q Ve]e֜$¡_ hg `  e aa_k(SeSeSeēʞWeWeWeaeogaeog Mgagā3o0gigċagag֬_H(Mg agā3a3g_k(kъL} a} 3a3}.ѕM} L} M}V_ zo}Ta}TћM}Na}R_vċa 8ao}Pa`o}N a}P_{o}R_nh_a|a}Naa|a}N7a}Na}P_~M}Na}P!3 _M2"_M2׽a}R_MgsѦ_=_V 1<_J7>_N_r߇2_D<<_BK>>_F_rߖG_[+_.a-_2_rߥ\_\q*_gM|M|M|M|o_KH (_KM|M|_H._L  (MP_~_a|Ɨ8_|~/Pa|ؗ0О=i00     0Q00S0S8Y0  6 w/_:}%_>_r߻x_ڊмеЭЦЕxgXѷ&߳_++߼_0--_6-_*~'_P******************************/ static char _BUF[144]; /*BUFLEN=144*/ static int _BUFIDX; static int _RDCNT=0; getchar() { /* assumes 1st reg. var (buf)->RR6, 2nd (rdcnt)->R8 */ register char *buf; register int rdcnt; buf=_BUF; if ((rdcnt=_RDCNT)cp++ = *--ncp; } while (ncp != locbuf); return (cp - buf); } /************************************************************************/ length(cp) register char *cp; { register int len; for (len = 0; *cp++ != '\0'; ) if (++len > 256) break; _uf_u^}_n _{ : ;;_g׵_gҭפ_gҵ״_gҸ"$_g__p@_*S5 ߹2G,=N;BR;__hH_KX]V_hPQf( _ߓm)a_hd /* check for possible width specifier */ if (c < 'A') { cnt = atoi(--frmt, ++len, &fwidth); frmt += cnt; len -= cnt; /* check for precision specifier */ if (len == 0) break; if (*frmt == '.') { frmt++; len--; if !/_t_8_Ğ++_b--_h*X_x'_~_~ ).'4(_{_~.0ӵ'5D)8߳_^__@U(K_j_c)Rg[ _nQ_n]b_Ft==0) { hexcode{BD309464210100907F42A138} /* get line of input */ /* {R3:=0; LDL RR4,buf; R1:=144; SC 042; rdcnt:=R3} */ if (rdcnt<=0) {_RDCNT=0; return(-1);} _RDCNT=rdcnt; _BUFIDX=0; } _RDCNT-=1; return(buf[_BUFIDX++]); } /***************return (len); } /************************************************************************/ /* atoi.c ascii to integer conversion routine */ static atoi(cp, len, ip) register char *cp; int len; int *ip; { register int l, i; int sign; char c; v*l_h\~(&toׄ)x5y׎=_p"׆_pH_p_q~_qץ{ _pם_q׮}ע_uץ׺,ԋ&׳_K׼_׿_K___w(,_K_w._yX(len == 0) break; cnt = atoi(frmt, len, &precision); len -= cnt; frmt += cnt; } /* pick up true format char */ if (len == 0) break; len--; c = *frmt++; } base = 10; switch (c) { case 'o': base = 8; got-> d_Km_xp_~_҈. w_KҀ_x҃_~_Ӌҋߕ_|_ __ ҟ_~`ұ._KҨ_~fҺ0 ҽxX_}_~ Һ_}Ll_}h .Ee_<_~f'ԯ'ޞ"Բ"**************************************************/ errno=0; /* open-write below assume 1st reg. var (errno_)->R6, 2nd (retval)->R7 */ open(name) char *name; { /* assumes 1st reg. var (errno_)->R6, 2nd (retval)->R7 */ register int errno_,retval;  /* check for negative */ sign = 0; if ((l = len) && *cp == '-') { len--; cp++; sign = 1; } for (i = 0; l; l--) { if ((c = *cp++) < '0' || c > '9') break; i = i * 10 + (c - '0'); } *ip = sign ? -i : i; return (len - l); } /******_w_y___g__gӞ_gӝB/g7bЊ]Lߊ!^`:!_ ERROR TOTAL=_ P=!< XҤ*PL Y !Ё!g5d]߸_o unsigncase; case 'x': base = 16; /* goto unsigncase; */ case 'u': unsigncase: value = *((unsigned *) argv); argv += sizeof(unsigned); /* *((int *) &value) = 0; */ goto numeric; case 'X': base = 16; case 'D': ,_2_>_J_|hs)_||_h_| *_h\} *)_hPݹ_f_~LΊߺߴ߭ߧߖ{jL`m?4cjadhexcode{35C20008BD507F40A0DEC600A137} /* LDL RR2,RR12[8]; R5:=0; SC 040; RL6:=RL5; RH6:=0; R7:=R3 */ errno=errno_; return(retval); } creat(name) char *name; { register int errno_,retval; hexcode{35C20008BD507F40A0DEC600A137} /* LDL RR2,RR1******************************************************************/ /* scanf.c - C implementation of Unix */ /* formatted I/O routine */ /************************************************************************/ static double ascflt(buf) /* entervalue = *((long *) argv); argv += sizeof(long); goto numeric; case 'd': value = *((int *) argv); argv += sizeof(int); numeric: cp = buf; cnt = cnvt(cp, base, value); break; case 'f': cp = buf; getfltsr(*((double *) aejw:k>mtknoz?_ xӆ|~I~_GԞӒ^ӓ^ӋPӋ_GԞӟ&ӗVӗ_GԞӫ==ӭ=ӥӳ!=ӵ#ӭgӮ_GԞ<=[Ӿ>=] <>Є_GԞ<<{>>}Г2[8]; R5:=0; SC 040; RL6:=RL5; RH6:=0; R7:=R3 */ errno=errno_; return(retval); } close(fd) { register int errno_,retval; hexcode{31C300087F41A0DEC600A137} /* R3:=@RR12[8]; SC 041; RL6:=RL5; RH6:=0; R7:=R3 */ errno=errno_; return(retval); }  with ascii string representing floating pt. number in buf */ /* calc. & ret. floating pt. value (makes ZOOMSYS call) */ char *buf; { register char *buf2; buf2=buf; /* RR6=fval */ hexcode {94627F50} /* LDL RR2,RR6; SC 050 */ /* ret. RR2 */ } rgv), cp); argv += sizeof(double); cnt = length(cp); break; case 's': cp = *((char **)argv); argv += sizeof(char *); cnt = length(cp); break; case 'c': cnt = 1; cp = (char *) argv; argv += sizeof(int); /*# ifdef Z8_GԞ+-Н_GԞ */%  _GԞ-n $~'!"' !(!"_ )ѡ9(/>)2l_g2_g_gD&GޘL_g_g_gܞ_g   read(fd,addr,len) char *addr; { /* assumes 1st reg. var (errno_)->R6, 2nd (retval)->R7 */ register int errno_,retval; hexcode{31C3000835C4000A31C1000E7F42A0DEC600A137} /* R3:=@RR12[8]; LDL RR4,RR12[10]; R1:=@RR12[14]; SC 042 RL6:=RL5; RH6:/************************************************************************/ scanf(frmt, i) char *frmt; char *i; { register char **argv; register int in_c, count; register char *varp; int len,base,maxcnt; long value; char buf[25]; /* bufsiz=000 */ cp++; /* byte passed in odd address on Z8000 */ /*# endif */ break; default: putchar(c); continue; } /* output 'cp' according to fwidth & precision */ /* limit field width */ if (precision && cnt > precision) cnt = pre_gdX_gk*f_g߾__h]_hD_gCԇT_h R_hՃ_g_hԚՒjԠ՘_gՑ_h_g.Զu_h6՘_hՕ_h_K _l_l`_l{ _l=0; R7:=R3 */ errno=errno_; return(retval); } write(fd,addr,len) char *addr; { register int errno_,retval; hexcode{31C3000835C4000A31C1000E7F43A0DEC600A137} /* R3:=@RR12[8]; LDL RR4,RR12[10]; R1:=@RR12[14]; SC 043 RL6:=RL5; RH6:=0; R7:=25 */ argv = &i; len = length(frmt); count = 0; in_c = 0; while (len--) { if (*frmt++ != '%') continue; /* format specification */ /* pick up type */ if (len == 0) break; /* end of string */ --len; base = 10; varp = *argv; maxcnt=cision; while (cnt < fwidth) { fwidth--; putchar(' '); } while (cnt--) putchar(*cp++); } } /************************************************************************/ static getfltsr(fval, buf) /* turn floating pt. value into ascii st_m6}Њ ,;߻ _h_m_m_mܞ&:_m2,(:;_p 0E,;L;@_w~_hF[*Q_h\_K^c\_hP l(b]r)fR3 */ errno=errno_; return(retval); } lseek(fd,offset,type) long offset; { /* assumes 1st reg. var (errno_)->R6, 2nd (retval)->RR8 */ register int errno_; register long retval; hexcode{30CB000935C4000A31C1000E7F05A0DEC6009428} /* RL3:=@RR121000; switch (*frmt++) { case 'X': base = 16; case 'D': if ((in_c=inputnum(base,&value)) == -1) break; *(long *)varp = value; break; case 'x': base = 16; case 'h': /**** must change if short<>int ****/ case 'd': ring (makes ZOOMSYS call) */ double fval; char *buf; { /* assumes 1st reg. var. (fval2) ->RR6, 2nd (buf2) ->RR8 */ register double fval2; register char *buf2; fval2=fval; buf2=buf; /* RR6=fval, RR8=buf */ hexcode {946294847F51} /* LDL RRdy(h})q_hd_hyՎ[`_H"Օ]ՉմՇ_KՋՠ{ՔՖՑզ,՜խ}ա_g_K ծճլեպ=ծҌհ_kĞ հ,ջ;|_z=ճ_&{_zѢ__z }([9]; LDL RR4,RR12[10]; R1:=@RR12[14]; SC 5 RL6:=RL5; RH6:=0; LDL RR8,RR2 */ errno=errno_; return(retval); } /**********************************************************************/ /* printf.c - C implementation of Unix */ /* formatted I/ if ((in_c=inputnum(base,&value)) == -1) break; *(int *)varp=(int)value; break; case 'f': if ((in_c=inputsr(buf,24)) == -1) /* 24=bufsiz-1 */ break; *(double *)varp=ascflt(buf); break; case 'c': maxcnt=1; case 's': i2,RR6; LDL RR4,RR8; SC 051 */ } /************************************************************************/ static cnvt(buf, base, value) char *buf; int base; long value; { register char *ncp, *cp; unsigned long val; char locbuf[14]; cp = buf)_|ʞ#V_ Y__t_6_6;V_,_2_'__t__6_s_,_:-_*x2P4__3H;<_֓=_,>S(G@DY;M_C_ '9') *ncp += 'A' - ':'; ncp++; } while ((val /= base) != 0); /* copy back */ do { *t` __t_6j)stЃv___6__RСօ__И֋__6__ t֘_ ֪֕:֞Э֠ _^ֶ֦֡:֪й֬_֬;ֵ _ֵ;־@ ֵ_V;_T_K_{_;ݞ{_ len = length(frmt); while (len--) { if ((c = *frmt++) != '%') { putchar(c); continue; } /* format specification */ /* pick up type */ if (len == 0) break; /* end of string */ len--; c = *frmt++; fwidth = precision = 0;   tic inputsr(strp,maxcnt) /* input string to @strp, dest. has space maxcnt+1 */ /* special case: if maxcnt=1, don't add \0 */ /* ret. last char. input */ register char *strp; register maxcnt; { register in_c,maxcnt0; maxcnt0=maxcnt; do in_c=ge ...RH0=seg., R1=offset, RL0=type R6:=0 while R6ADRLO[R6] if R3:=R1+@R7[SGSZ]>ADRHI[R6] then R3:->ADRHI[R6] JR FSCTB2 end R6-4] R1:+6->UTABPTR2 R0==R0; RET end R1:+6 end ...Z=0 since past UTABPTR R1:->UTABPTR2 RET CVTSVSYM~ ...convert symbol @R3 to Y format & .SAV it R4:=R3 RL0:=@R4 if BITB RL0,7 not zero then begin RL0:&07F; R4:+1 end else RL0:=SHORTNMYPE=0 =>undefined, 1=>absolute, 2=>proc, 3=>init'd data, ... 4=uninit'd data ... if name length>SHORTNM, 1st byte=length|080, name follows, 0 padded ... to whole entry ... repeat entries until SYMTABSZ L0~ ORG 0F980 ...Y goes to F940 ...Symboldo begin if R8:=(IN_RL/RELOENTSZ*RELOENTSZ)>R9 then R8:=R9 R9:-R8 R7:=^DATA1 READ(R7,R8) ...reloc data while R8>>0 do begin R6:=@R7[RELOTYP] if BIT R6,15 zero then begin ...if local symbol XLATADR(LDL RR2,@R7; R5:=0); LDL RR10,tchar(); while (in_c == ' ' || in_c == '\t'); while (in_c != ' ' && in_c != '\t' && in_c != '\n' && in_c != -1) { if (maxcnt != 0) { --maxcnt; *strp++ = in_c; } in_c=getchar(); } if (maxcnt0>1) *strp='\0'; return(in_c); } static inputnum(base,:+1 end if NSECS>=MAXNSECS then OVFLERR() RH0:->SEG0[R6]; RL0:->SECTYP[R6] R1:->ADRLO[R6]; R1+@R7[SGSZ]->ADRHI[R6] NSECS:+1 FSCTB2~ R7:+SGENTSZ end restore R6,R7 RET OVFLERR~ Errm(); DEFT 'SEGMENT OVERFLOW ' ALOSECS~ ...allocate secti RH0:=0 Outset() if RL3:=@R4='_' then begin R4:+1; R0:-1 if RL3:=@R4=0 or RL3='_' then RL3:='L' endif end RL3:&05F->@R7'; R4:+1; R0:-1 while R0>>0 and TESTB @R4 not zero do LDIB @R7,@R4,R0 Sav(); RET LABLRe~ := .DO(PUSH R6; PUSH R13) .OUT("s from Y: IN_RL~ EQU 0200 DATA1~ ADDR 0F000 DATA2~ ADDR 0F000+IN_RL LINKAD~ WORD at EXTADR+4 RUNSEG~ WORD at NCDSEG-2 SYMENTSZ~ EQU 14 ...len. of symtab entry SHORTNM~ EQU 9 SYMVAL~ EQU 0 SYMTYP~ EQU 4 SYMNAME~ EQU 5 SGENTSZ~ EQU 8 ...12 SGADDR~ EQU 0 SRR2 RDADR() ...read addr to be relocated ->RR2 XLATADR(R5:=R6) R2:+YOFFSET ...further correct segment no. WRADR(LDL RR4,RR10) end else begin ...if external symbol XLATADR(LDL RR2,@R7; R5:=0) ...->RR2 PUTUTAB(R5:=R6&0FFF) end valp) /* input number of base base to @valp */ /* ret. last char. input */ long *valp; { register in_c,sign; register long value; value=0; sign=0; do in_c=getchar(); while (in_c == ' ' || in_c == '\t'); while (in_c != ' ' && in_c != '\t' && in_ons in memory save R6,R7 R6:=0 while R6FREEHI[R1] then begin repeat if R1:+1>=NSEGS then OVFLERR() until R3:=FREEHI[R1]-FREEL"Re) .DO(POP R13; POP R6) ; OUTLREF~ := .DO(PUSH R6; PUSH R13) .OUT("AL"Pp) .DO(POP R13; POP R6) ; READ~ R2:=0FFFF READA~ ...come here with RR2=addr, R5=len R1:=R5 RH0:=LU; RL0:=2 SC 0; RL0==080; RET Z PUSH R7; R7:=^ERRMCD; Outhex(); POP R7 Errm();GSZ~ EQU 4 SGTYP~ EQU 6 ...8 RELOENTSZ~ EQU 6 RELOTYP~ EQU 4 HDRSZ~ EQU 24 HEADER~ DEFS HDRSZ MAGIC~ WORD at HEADER CODESZ~ LONG at HEADER+2 BSSSZ~ WORD at HEADER+6 SEGTBSZ~ WORD at HEADER+10 HDRFLG~ WORD at HEADER+16 RELOCSZ~ WORD at HEADER+18 SYMSZ~ WOR8:-RELOENTSZ; R7:+RELOENTSZ end end restore R6..R11 RET SYMBFSZ~ EQU IN_RL/SYMENTSZ*SYMENTSZ DOSYMTAB~ ...go thru symbol table: save R6,R7 SYMCNT:=0 R3:=^DATA1->SYMPTR->ENDDAT while GETNXTSYM() do begin R7:=SYMPTR RL6:=@R7[SYMTYP] CVTc != '\n' && in_c != -1) { if (in_c == '-') sign=1; else { if (in_c>='a') in_c &= 0xDF; if (in_c != 'X') { if ((in_c -= '0') > 10) in_c -= 7; value=value*base+in_c; } } in_c=getchar(); } if (sign != 0) value = -vaLO[R1] >zero and R3>R7; ...">R7" above since may need to add 1 to FREELO end RL1:->NEWSEG[R6] R8:=FREELO[R1] if ADRLO[R6]&1 not zero then R8:+1 ...lo-add of section must be same even/odd R8-ADRLO[R6]->SECOFF[R6] R7:+R8+1&0FFFE->FREELO DEFT 'LINK: READ ERR ' ORG $-2 ERRMCD~ DEFS 2 RDADR~ ...read long word @RR2->RR2 R0:=flag; SET R0,15; R0:->flag /SEG LDL RR2,@RR2; JR RWX /NONSEG ... WRADR~ ...write long word RR2->@RR4 R0:=flag; SET R0,15; R0:->flag /SEG LDL @RR4,RR2 RWX~ RES R0,RD at HEADER+20 SEGTAB~ ADDR DATA1 UTAB~ ADDR DATA2 UTABPTR~ WORD 0 ...^ next UTAB entry, then marks end of table UTABPTR2~ WORD 0 LU~ BYTE 0 BYTE 0 ...section (allocation) table: ...each entry is for all code/data (separate) in 1 Z8000 seg. MAXNSECSSVSYM(R7+SYMNAME) if RL6=0 then begin ...if undef'd FNDSYMI(); R6:=SYMCNT/SYMENTSZ XXX: while FNDSYM(R6) do begin ...RR2=addr in UTAB entry PUTNCD() ...^ref OUTLREF() ... .OUT("AL"Pp) end Ig() end else begin lue; *valp=value; return(in_c); } /*********************************************************************/ /END SECTION /* get rid of static symbols */  hexcode{31C300087F45} /* {R3:=@RR12[8]; SC 045} */ } /***********************************[R1] RH1:=RL1; RL1:=0; SET R1,15 if R1>=HIESTSEG then begin R1:->HIESTSEG; R7:->HIOFF ...get highest addr for new NCODE end R6:+1 end restore R6,R7 RET LOADIMG~ ...load image save R6..R9 R9:=^SEGTAB while R9<^SEGTAB+SEGTBSZ do begi15; R0:->flag /NONSEG RET /^LINK->LINKAD ...link in ORG L0 .../ZAPALL TMPS /SEG  : bit 12=1 =>init'n ref ... ... RR2,@RR2; JR RWX /NONSEG ... WRADR~ ...write long word RR2->@RR4 R0:=flag; SET R0,15; R0:->flag /SEG LDL @RR4,RR2 RWX~ RES R0,~ EQU 6 NSECS~ WORD 0 SEG0~ BYTE ARRAY 0[MAXNSECS] ...orig. seg. of section SECTYP~ BYTE ARRAY 0[MAXNSECS] ADRLO~ WORD ARRAY 0[MAXNSECS] ADRHI~ WORD ARRAY 0[MAXNSECS] NEWSEG~ BYTE ARRAY 0[MAXNSECS] ...new seg. (ncode) of section SECOFF~ WORD ARRAY 0[MAXNLDL RR2,R7[SYMVAL] if RL6<>1 then begin ...symtyp 1=abs. (not now used) R5:=0; if RL6=4 then R5:=1 ...symtyp 4=bss (2=proc, 3=idata) XLATADR() end PUTNCD() LABLRe() ... .OUT("L"Re) end SYMCNT:+NXTSYMP-SYMPTR; SYMPT  n if @R9[SGTYP]=0 then begin LDL RR6,R9[SGADDR] ...addr RESB RH6,7 R8:=-1 repeat R8:+1 until RH6=SEG0[R8] and SECTYP[R8]=0; RH6:=NEWSEG[R8]; RL6:=0 R7:+SECOFF[R8] READA(LDL RR2,RR6; R5:=@R9[SGSZ]) end R9:+SSECS] ...offset from orig. to new addr in seg. NSEGS~ EQU 4 ...no. segments on Z8000 SYSSEG~ EQU 0 ...seg. with system BUFSEG~ EQU 3 ...seg. with buffer pool FREELO~ WORD ARRAY 0[NSEGS] ...lowest addr free in seg. FREEHI~ WORD ARRAY 0[NSEGS] ...highR:=NXTSYMP end restore R6,R7 RET GETNXTSYM~ ...have SYMPTR @sym_entry or ENDDAT, ENDDAT=end of data, ... SYMCNT=bytes of symtab to here, SYMSZ=total symtab size ...ret. SYMPTR at full entry, NXTSYMP after; poss. update ENDDAT PUSHL RR6 R1:=SYMPTR GENTSZ end restore R6..R9 RET XLATADR~ ...enter with RR2=orig. addr, R5=region; xlate to new pos. (->RR2) save R6,R7 LDL RR0,RR2; RL7:=RL5; RH7:=RH0; RESB RH7,7 R6:=0 while R6ENDDAT then begin R5:=GETRDLEN() R5==SYMENTSZ; JR ULT,GETNSX READSYM(^DATA1,R5) R1:=^DATA1->SYMPTR end RL0:=@R1[SYMNAME] R6:=SYMENTSZ if BITB RL0,7 not zero then begin RL6:=RL0&07F+(SYMNAME+1); RH6:=0 R6:=(R6+(SYMENTSZ-:=NEWSEG[R6]; RL2:=0; SET R2,15 R3:=R1+SECOFF[R6] JR XLX end R6:+1 end LDL RR2,RR0 ...orig. (shouldn't come here) XLX~ restore R6,R7 RET UTABI~ UTABPTR:=^UTAB ...use DATA2 buffer for table of undef. symbols RET ... (save addr + symty space already used in FREELO[SEG],FREEHI[SEG] ...configuration dep. save R6,R7 R3:=flag; SET R3,15; R3:->flag /SEG LDAR RR6,$ R3:=flag; RES R3,15; R3:->flag /NONSEG RL6:=RH6; R6:&07F ...Y seg. R7:=NCDSEG; RL7:=RH7; R7:&07F R1:=0 repeat 0->FR1))/SYMENTSZ*SYMENTSZ end ...R6=size of next entry R7:=ENDDAT-R1 if R6>R7 then begin GETRDLEN()->R0 R0==R6; JR ULT,GETNSX R0:-R7 R3:=^DATA1; R5:=SYMPTR; R3:->SYMPTR; LDIRB @R3,@R5,R7 READSYM(R3,R0) end R6:+SYMPTR->NXTSYMP R0==R0 GETNS...format of object file: ...HEADER: word MAGIC=0E007; long IMGSZ,BSSSZ; word SEGTABSZ; long ENTRY_PT ... word HDRFLG,RELOCSZ,SYMTABSZ,UNUSED ...SEGTAB: long START_ADDR; word LENGTH,TYPE ...TYPE=0 =>code, 1 =>data ... repeat entries until SEGTABSZ .ab ordinal) PUTUTAB~ ...enter with RR2=addr, R5=symtab ordinal to store in UTAB if R1:=UTABPTR>(^DATA2+IN_RL-6) then begin Errm(); DEFT 'LINK SYMTAB FULL ' end LDL @R1,RR2; R5:->@R1[4] UTABPTR:+6 RET PUTNCD~ ...enter with RR2=addr for NCDSEG, alsEELO[R1]; 0FFFF->FREEHI[R1] if R1FREELO[R1]; 0->FREEHI[R1] end until R1:+1=NSEGS; R3:=05000->FREELO[SYSSEG] ...system below 0.5000 R3:->FREEHI[R6] ...Y above YSEG.5000 if R3:=NCODE>FREELO[R7] then R3:+1&0X~ POPL RR6; RET GETRDLEN~ ...get len for read when doing symtab ->R3; have SYMSZ,SYMCNT R3:=SYMBFSZ; if R0:=SYMSZ-SYMCNTENDDAT READ(R3,R5) RET FNDSYMI~ UTABPTR..IMAGE: <-------------------> (length IMGSZ=total of code lengths in SECTAB) ...HDRFLG: bit 0=1 =>reloc. info + symtab stripped (execution addr fixed) ... bit 1=1 =>stripped plus may run in any segment ...RELOC: long ADDR; word FLAG ... ...bit FLAo set RUNSEG LDL NCDSEG,RR2; R2:+YOFFSET->RUNSEG RET LINK~ PROC ...enter with DATA1,2 free, RL3=LU; ret. Z=0 iff invalid type RL3:->LU READ(^MAGIC,HDRSZ) ...header MAGIC==0E007; RET NZ ...invalid file BIT HDRFLG,0; RET NZ ...no reloc. info YOFFFFFE->FREELO[R7] ...below NCODE in same seg. assumed used restore R6,R7 RET FILSECTAB~ ...fill section table save R6,R7 NSECS:=0; R7:=^SEGTAB while R7<^SEGTAB+SEGTBSZ do begin LDL RR0,R7[SGADDR] ...addr RESB RH0,7; R3:=@R7[SGTYP]; RL0:=RL3 2:=^UTAB+4; RET FNDSYM~ ...find next UTAB entry of symbol# R3 ...have UTABPTR2 @sym_index of next entry with UTABPTR at end of table ...ret. RR2=addr of ref., Z=0 iff none R1:=UTABPTR2 while R1local symbol: bit 0=0 =>code ref, 1=>data ref ... ... =1 =>external symbol: bit 12=1 =>init'n ref ... ... bits 0-11 = symtab ordinal ... repeat entries until RELOCSZ ...SYMTAB: long ADDR; byte TYPE; byte NAME[SHORTNM] ... TSET:=RUNSEG-NCDSEG MRKUSDSP() READ(^SEGTAB,SEGTBSZ) ...segment table FILSECTAB() ALOSECS() LOADIMG() DORELOC() DOSYMTAB() PUTNCD(LDL RR2,HIESTSEG) ...HIESTSEG set in ALOSECS R0==R0; RET DORELOC~ save R6..R11 UTABI() R9:=RELOCSZ while R9<>0    '6' (cursor right)" ?" '8' (cursor up)" ?" '2' (cursor down)" ?" '7' (cursor to top left corner)" ?" '1' (cursor to bottom left corner)" ?" tab (cursor tab)" ?" '_' (cursor back-tab)" ? ?"In the following, enter the ascii value iracter:\nF G clear screen: [0C]\nҹn F G clear line: [0B]\nn F G0 insert line (enter 0 if don't have): [00]\nn F G position cursor: [17]\nn F GE enter offset for X & Y positioning characters p.B=col. of prev. char. repeat Echo(8); Echo(' '); Echo(8) until R.C=R.B; DEC HL POP DE; 8->R.A end else begin R.A->@HL; PUSH AF Echo(R.A) if R.L-R.E<10 then INC HL ...$$$ POP AF end until R.A=0D; RET GETCON: ...put out prompt R.n hex of the key you want" ?"to change to or 0 if no change is desired; end with :" ?"(the standard value for each case is shown in square brackets)" ? ?"(Avoid changing to keys that have other functions; also note that" ?"with cursor movementlus set high bit\nF GB if order is to be XY (column first, then row) rather than YX\nF G (row first, then column):\nF GF Example: 'A0' means if the 2 chars. sent are '20' then '21', the\nF G< column will be set to 0 &A; get line of input & pt. DE at Put1(R.A); GetN(LD DE,CONBUF); RET Getnum: PROC Put1(' '); Put1(' '); Put1(' '); Put1(' ') GETCON('>') DEL() if Hexd() not then begin ?" Enter number in hex"; JR Getnum end DEC DE; HNum(); R.L->R.A RET Getnum2:  keys, small letters (or any ascii values>=060)" ?"are equivalent to capital)" ?" '4' (cursor left) [34] ->" if B.Getnum2()<>0 then R.A->CRSLT ?" '6' (cursor right) [36] ->" if B.Getnum2()<>0 then R.A->CRSRT ?" '8' (cursor up) [38] ->" i the row will be set to 1\nF G [A0]\nӻn F G\nF G9Do you want to change any key functions? (enter Y or N)\nF G DEF G\n YY^ d a!1pF GDThe following cursor movement keys (as well as the DEPROC if B.Getnum()&07F>=060 then RES 5,A RET ECONFIG: PROC ?"Program to configure E editor for different terminals." ?"Both screen function codes and keys for cursor movement (+delete key)" ?"may be changed." ? ?"Do you want to changf B.Getnum2()<>0 then R.A->CRSUP ?" '2' (cursor down) [32] ->" if B.Getnum2()<>0 then R.A->CRSDN ?" '7' (cursor to top left corner) [37] ->" if B.Getnum2()<>0 then R.A->CRSHM ?" '1' (cursor to bottom left corner) [31] ->" if B.Getnum2()<>Lete key used\nF G-in INSERT or REPLACE modes) may be changed:\nF G '4' (cursor left)\nF G '6' (cursor right)\nF G '8' (cursor up)\nF G '2' (cursor down)\nF G% '7' (cursor to top left corner)\nF G( e screen function codes? (enter Y or N)" Put1(' '); Put1(' '); Put1(' '); Put1(' '); Get1(); Put1(); ? if R.A&0DF<>'Y' then JP EC2 SET 0,FLAG ?"The following screen functions are used:" ?" clear screen" ?" clear line (either all or past c*740}2?}:}2?}:59P!@8 % F G%s NOT FOUND\nF GOPEN (of EE) ERROR %B\nC!! !B F GREAD (of EE) ERROR %B\nAC0 then R.A->CRSBTL ?" tab (cursor tab) [09] ->" if B.Getnum2()<>0 then R.A->CRSTAB ?" '_' (cursor back-tab) [5F] ->" if B.Getnum2()<>0 then R.A->CRSBTB ?" DEL (delete in INSERT/REPLACE mode) [7F] ->" if B.Getnum()&07F<>0 then R.A->RUBOUT  '1' (cursor to bottom left corner)\nF G tab (cursor tab)\nF G '_' (cursor back-tab)\nF G\nF GDIn the following, enter the ascii value in hex of the key you want\nF G?to change to or 0 if no change is desired; end withursor)" ?" position cursor" ?"Codes for screen functions may be either characters or characters" ?"preceded by a lead-in character (such as escape)" ?"(`pos. cursor' will then have 2 more chars. for the X & Y positions)" ? ?"Below, enter all valueAQ!@8 F GCREATE (of EEE) ERROR %B\nC!a!CKF GWRITE (of EEE) ERROR %B\nACA!!A gAohAoA oF G >E2!!B!!s  p_Z$F G E  EC3: if FLAG=0 then JP EC4 ?"Do you want to write out new E with changes? (enter Y or N)" ?" (for now, writes out to EE.COM (rename to E.COM))" Put1(' '); Put1(' '); Put1(' '); Put1(' '); Get1(); Put1(); ? if R.A&0DF='Y' then begin if BIT 0,FLAG :\nF G@(the standard value for each case is shown in square brackets)\nF G\nF GC(Avoid changing to keys that have other functions; also note that\nF GEwith cursor movement keys, small letters (or any ascii values>=060)\nF s in hex followed by a :" ?"(in each case, an example value valid for an Infoton 200 terminal is" ?"shown in square brackets)" ? ?"If any function requires a lead-in, enter lead-in character, else 0:" ?" Example: if lead-in character=escapenter number in hex\nӫp_Zj2  ``EE!XL F G9Program to configure EE editor for different terminals.\nF GGBoth screen function codes and keys for cursor movement (+delete key)\nF Gmay be changed.\nF G\nF  not zero then begin SCRVECP->R.DE; ^POSOFF->R.HL; LD BC,5; LDIR end if BIT 1,FLAG not zero then begin KEYVECP->R.DE; ^CRSLT->R.HL; LD BC,9; LDIR end SET 7,FLAG end EC4: RET /ECONFIG() /IF BIT 7,FLAG not zero THEN *IMAGE EE.COMGare equivalent to capital)\nF G '4' (cursor left) [34] ->\n՘n F G! '6' (cursor right) [36] ->\nղn F G '8' (cursor up) [38] ->\n˄n F G '2' (cursor down) [32] ->\n儻n F G. '7', enter 1B" ?" [00]" B.Getnum()->LEADIN ?"In the following, give code for the function plus set high bit (bit 7)" ?"if it needs a lead-in character:" ?" clear screen: [0C]" B.Getnum()->CLRSCR ?" clear line: [0B]" B.Getnum()->CLRLIN ?" G=Do you want to change screen function codes? (enter Y or N)\nF G DEF G\n YY^ d F G*The following screen functions are used:\nF G clear screen\nF G, clear line (either all or past cursor)\nF G!  ORG 03000 /LOAD E.COM SCRVECP: WORD at 0206 ...points to screen vector KEYVECP: WORD at 0208 ...points to key vector FLAG: BYTE 0 POSOFF: BYTE 0 LEADIN: BYTE 0 CLRSCR: BYTE 0 CLRLIN: BYTE 0 POSCRS: BYTE 0 CRSLT: BYTE 0 CRSRT: BYTE 0 CRSUP: BYTE 0 CR 100 1DFF /ENDIF //  *IMAGE EE.COM 100 1DFF /ENDIF // C4: RET /ECONFIG() /IF BIT 7,FLAG not zero THEN ...*?"For now,R.DE; ^CRSLT->R.HL; LD BC,9; LDIR end SET 7,FLAG end EC4: RET /ECONFIG() /IF BIT 7,FLAG not zero THEN *IMAGE EE.COM (cursor to top left corner) [37] ->\nn F G1 '1' (cursor to bottom left corner) [31] ->\n(n F G tab (cursor tab) [09] ->\nAn F G$ '_' (cursor back-tab) [5F] ->\n]n F G2 DEL (delete in INSE position cursor: [17]" B.Getnum()->POSCRS ?" enter offset for X & Y positioning characters plus set high bit" ?" if order is to be XY (column first, then row) rather than YX" ?" (row first, then column):" ?" Example: 'A0' means if the 2 insert line (not necessary)\nF G position cursor\nF GCCodes for screen functions may be either characters or characters\nF G2preceded by a lead-in character (such as escape)\nF GF(`pos. cursor' will then have 2 more chars. for tSDN: BYTE 0 CRSHM: BYTE 0 CRSBTL: BYTE 0 CRSTAB: BYTE 0 CRSBTB: BYTE 0 RUBOUT: BYTE 0 CONBUF: BYTE 0[20] Echo: ...echo char. & keep track of col. in R.C if R.A=9 then begin repeat Put1(' '); INC C until R.C&7 zero; RET end if R.A=0D then begin LD C,0; RT/REPLACE mode) [7F] ->\nֱ n L ^F G>Do you want to write out new EE with changes? (enter Y or N)\nF G. (for now, writes out to EEE (rename to EE))\nF G DEF G\n YYf a;1pf a!1 chars. sent are '20' then '21', the" ?" column will be set to 0 & the row will be set to 1" ?" [A0]" B.Getnum()->POSOFF EC2: ? ?"Do you want to change any key functions? (enter Y or N)" Put1(' '); Put1(' '); Put1(' '); Put1(' '); he X & Y positions)\nF G\nF G8Below, enter all values in hex followed by a :\nF GF(in each case, an example value valid for an Infoton 200 terminal is\nF Gshown in square brackets)\nF G\nF GFIf any function reqPut1(R.A); 0A end else begin DEC C if R.A<>8 then begin INC C; INC C; if R.A<' ' or R.A=07F then '#' end end Put1(); RET GetN: PROC ... gets to CR, echoing, backspacing, storing @DE (saves DE) ...limits to 10 chars. in buffer R.DE->R.HL; LD C,pEEE!ׂot necessary)\nF G position cursor\nF GCCodes for screen functions may be either characters or chG. (for now, writes out to EEE (rename to EE))\nF G DEF G\n YYf a;1pf a!1Get1(); Put1(); ? if R.A&0DF<>'Y' then JP EC3 SET 1,FLAG KEYVECP->R.HL; LD DE,CRSLT; LD BC,9; LDIR ?"The following cursor movement keys (as well as the DELete key used" ?"in INSERT or REPLACE modes) may be changed:" ?" '4' (cursor left)" ?" uires a lead-in, enter lead-in character, else 0:\nF G4 Example: if lead-in character=escape, enter 1B\nF G [00]\nfn F GHIn the following, give code for the function plus set high bit (bit 7)\nF G"if it needs a lead-in cha0 ...C=col. repeat B.Get1() ...get byte if R.A=8 then begin ...if backspace INC C; DEC C; JR Z,GetN PUSH DE; LD C,0 repeat LD B,C if @DE=9 then begin repeat INC C until R.C&7 zero; DEC C end INC DE; INC C until R.HL=R.DE; ...get R  Using ZOOMSYS To start, hit Reset or power up. When CPM's (or RIO's) prompt (on the Z80) appears, do the following: (On RIO, substitute % for A> below.) A>SYS (on RIO, this can and is recommended to be in OS.INIT, in which case it would not be doned as a convention for error or other special i-o for which it is desired always to be connected to the console. To cause a program to start up with either the standard input or standard output or both redirected to a file or another device, the following functions described below (System Calls 040-047) may be used instead of this system call and are generally easier to use. I-O Completion Codes: (bit 6 set implies an error) 0: no character ready on console read with request length 0 080: not generally needed) 3. In order for a file to be loadable and runable on the Z8000, it must be an object file in the format described below, with header and segment table sections at the beginning. (The relocation information and symbol table sectioO - (System Call 0) ------------------------------------------------------------------------- Call with registers set as follows: RL0: =command 0=OPEN 1=CLOSE 2=READ 3=WRITE RH0: =open type if OPEN 0=input (i.e. file must exist) 1=output e here) -- This downloads the Z8000 system. A>G -- Starts up and transfers control to the Z8000 system. : -- (Prompt on Z8000) At this point, any filename that is typed will be loaded and run (if it is of appropriate format), the same as on the Z syntax is used on the command line: :PROGNAME ARG1 ARG2 ..ARGN FILEOUT This opens FILEIN for input, first closing logical unit 0. Since logical unit 0 is then free, FILEIN gets logical unit 0 and becomes the standard input. In the same way, FIsuccessful operation 0C0: general (unspecified) error 0C1: invalid request 0C2: device not ready 0C7: file not found 0C9: end of file reached before requested length was satisfied 0CB: file not open 0CF: too many files open (maxns are not needed.) The segment table specifies where the file is to be loaded; the entry_pt is specified in the header. Exception: if the file is marked as runnable in any Z8000 segment, the segment number given in the entry_pt is used for loading the f(i.e. create file) Else it is the logical unit number (returned by OPEN) R1: =length of data to be transferred (may be adjusted; see below) RR2: =pointer to memory where data is to be transferred (if R2=0FFFF, segment of caller will be used) R80. In addition, multiple names may be separated by ";"s or ","s (in the latter case, the preceding file is only loaded, not run). In addition, typing "X" causes the last loaded file to be executed, and "X n.nnnn" (where "n.nnnn" is an address in hexLEOUT is opened for output after closing logical unit 1 and thus gets logical unit 1 and becomes the standard output. In the above syntax example, the arguments ARG1..ARGN are of course optional; the spaces before '<' and '>' are also optional. If it is imum 16 logical units; this also includes those set to the console or other devices) 0D2: wrong file type or format In addition, there may be other codes returned from the drivers or operating system on the Z80. -------------------------ile. Programs are called as subroutines from the system, and are started up in segmented mode, with register RR12 and also the stack above the return address containing a pointer to the rest of the command line (after the filename) which invoked the pR4: =On OPEN, points to a string containing a DEFT 'FILENAME' (possibly qualified with the drive number); else not used (if R4=0FFFF, segment of caller will be used) Notes: String may also be in form 'string'+0 DEFT 'string' means a length byte (, the first "n" being the segment number) causes execution to begin at that address. There can also be input-output redirection (see below) and disk initialization (by typing "I"). :EE FILE1 -- Example of loading editor to edit FILE1. :Y FILE2 -- desired to only redirect standard input, '>FILEOUT' would be left off (and vice versa). 6. When a filename has been entered, without a drive qualification, on the command line for the system to load, the system looks for it first on drive A (or 0), the---------------------------------------------------- Set Periodic Interrupts - (System Call 1) ----------------------------------------------------------------------------- Can vary rate of periodic interrupts of Z8000 and in addition set up for a specrogram. This can contain arguments to be passed to the program and is terminated by a carriage return (hex 0D). (If additional commands follow on the command line, a carriage return is inserted at the end of the first program's argument list.) As nonot counting itself) comes first On return: RL0: =a completion code (=080 if successful, bit 6 set =>error (see list of error codes below)) RH0: after OPEN, =logical unit number to use for subsequent operations R1: on READ or WRITE, =length read Example of loading Y and having it compile FILE2. :// -- Return to Z80. >A (The Z8000 may be reentered by typing "G" again.) **************************************************************************** Miscellaneous 1. Hitting 'ctl-C' can on the currently-set default drive. ----------------------------------------------------------------------------- Object file format HEADER: word MAGICNO=0E007; long IMGSZ,UDATASZ; word SEGTABSZ; long ENTRY_PT word HDRFLG,RELOCSZ,SYMTABSZ,UNUSED ified routine to be called on every interrupt. Call with registers set as follows: RL0 =1 to 5 - set rate of periodic interrupts to approximately default*(2**n-1) where n=RL0 RL0 =0 - set rate of periodic interrupts to default and disable cated above, programs which are started up by the system must begin in segmented mode. If they are to run nonsegmented at any time, they must first set up a stack in the segment they are running in, possibly saving the original stack pointer to switch back  or written (may be less than requested amount if end-of-file reached, disk full, error, etc; can also be different for console read, as noted below) Registers >=R6 are preserved. Notes: Special Cases on READ from console: if uses a break on the Z8000. Hitting 'ctl-S' stops console output; it can be started up again by hitting any key. 2. If no other break handler is present, the system has a small monitor which is entered upon a break. This monitor has the following comma  where MAGICNO=magic number IMGSZ=image size UDATASZ=size of uninitialized data SEGTABSZ=size of following SEGTAB (segment table) ENTRY_PT=entry point HDRFLG=flag: bit 0=1 =>reloc. info + symtab stripped (execution addr fixed) bit 1=1 =>strills to interrupt routine RR2 =address of interrupt routine (if R2=0FFFF, caller's segment used) if R3 is odd, then no interrupt routine is to be called Registers >=R6 are preserved. The interrupt routine should be written in segmented mode, preservto before returning (also done in segmented mode). As an alternative to ending with a RET, the program may execute an EXIT system call (see below) or jump to the system reentry point at 0.800. 4. A 'shell script' file can also be executed. This type orequested length=0, console status will be tested. If a character is ready, RL0 will be set to 080 and the character will be read in (note that you must have a space for it); otherwise, RL0 will be set to 0. if requested length=1, 1 character wnds: (Below, "n.nnnn" refers to an address in hex. The "n." is the segment number; if left off, it defaults to the segment of the PC prior to the break. Also, the commands may be typed in either capital or small letters.) D n.nnnn,mm ... display mm linpped plus may run in any Z8000 segment (uses segment of ENTRY_PT) RELOCSZ=size of relocation information SYMTABSZ=size of symbol table SEGTAB: ...segment table ...each entry=description of 1 code or uninit'd data region long START_ADDR; word LENGTHe all registers, and end with an IRET. (The default rate for periodic interrupts is on the order of 50/second but depends on the particular hardware and system software. It may also vary somewhat during i-o. See the Get Interrupt Count system call belowf file contains a list of commands that would otherwise be typed in from the console. Up to 9 arguments provided upon invocation of the shell script can be referenced inside (referenced by '$n', n=1..9). There can also be comments (indicated by '#' at thill be returned as soon as available. if requested length n>1, a maximum of n characters or up to a carriage return will be returned, with input editing done on the line entered; also a control-D will terminate input at any point. On WRITes of memory starting at address n.nnnn . ",mm" may be left off, with mm defaulting to 1. If mm=0 or there is a "," with nothing following, one line of memory is displayed which may then be changed a word at a time by typing in the new value for ,TYPE ...TYPE=0 =>code, 1 =>uninit'd data repeat entries until SEGTABSZ (max 12 entries) IMAGE: <-------------------> (length=IMGSZ=total of code lengths in SEGTAB) RELOC: ...relocation information long ADDR; word FLAG bit FLAG,15=0 =>local s.) ------------------------------------------------------------------------------ Activate/Deactivate Device (System Call 2) ------------------------------------------------------------------------------ (Devices must be able to handle OPEN, CLOSE, REe beginning of a line, and continuing to the end of the line). NOTE: There MUST be a comment (or a single '#') on the first line of the file. The system uses this to recognize the file as a shell script. See this example: CMDFILE contains: # COPY $1.SE to console, currently CR's are echoed as CR/LF and LF's are ignored. Devices may also be opened and closed, although this is not usually necessary since logical units 0, 1, and 2 are always pre-opened when a program is started up, usuallsuccessive words in hex, each value separated by a space from the preceding one, and hitting return when finished. R ............. display memory where the registers prior to the break have been saved. The format is R0..R7 on line 1, R8..R15 on linymbol: bit 0=0 =>code ref, 1=>udata ref =1 =>external symbol: bit 12=1 =>initialization ref bits 0-11 = SYMTAB ordinal repeat entries until RELOCSZ SYMTAB: ...symbol table long ADDR; byte TYPE; byte NAME[9] TYPE=0 =>undefined, AD, and WRITE as described above under the General I-O System Call (except OPEN is passed the logical unit number). Exact registers passed at present slightly different: i.e., RR2=addr, R13=length, RL1=command, RH1=logical unit.) Call with registers set  $2; EE $2 #this is a comment Y $2 Now, if the following is typed: :CMDFILE ABC XYZ the following sequence of commands will be executed: COPY ABC.S XYZ; EE XYZ; Y XYZ 5. Input-Output Redirection: Whenever a program is started up by ZOOMSYS, 3 logical y set to the console. To open a device, give its name which must be a name the system knows about. (The name of the console is "CON".) Example -- The following sequence will open a file, read it into a buffer, and close the file: LDL RR4,#0FFFe 2, and N4, FC, and PC on line 3. G ............. resume execution where left off (or at current value of the stored PC) J n.nnnn ...... jump to address n.nnnn and resume execution SH ............ restart system and reenter shell, first closing fil1=>absolute, 2=>proc, 3=>init'd data, 4=uninit'd data if name length>9, 1st byte=length|080, name follows, 0 padded to whole entry repeat entries until SYMTABSZ **************************************************************************** ZOOas follows: RL0: =0FF if want to deactivate device; anything else if activate RR2: =entry address of device driver RR4: =pointer to DEFT 'DEVICE_NAME' or 'DEVICE_NAME'+0 (device name limited to <=11 characters) If R2 or R4=0FFFF, segment of cunits are pre-opened and normally set to the console. Logical unit 0 is considered standard input, and logical unit 1 is considered standard output. These may both be redirected to/from files or other devices instead of the console. Logical unit 2 is usF,FILNAM ...FILNAM = address where have drive/filename R1:=0; RH0:=0; RL0:=0; SC 0 ...open for input LDL RR2,#0FFFF,BUFF R1:=BUFLEN; RL0:=2; SC 0 ...read max. of BUFLEN bytes into BUFF R1:=0; RL0:=1; SC 0 ...close Further note: The library i-oes. This is a good way to get back to normal command mode after breaking (with cntl-C) from a program. PR ............ quit to Z80 (closes files and shuts off timer) and jump to boot prom in preparation for reloading SYS (Z8000 system) from Z80 (MSYS System Calls (Note: The following is valid for ZOOMSYS Version 1.00 of 11/17/82.) Unless otherwise stated, registers >=R6 are preserved through a system call. ------------------------------------------------------------------------- General I/ aller will be used. Returns: RL0=080 if succeed; =0C0 if not found/no room. ------------------------------------------------------------------------------ Seek (System Call 5) ------------------------------------------------------------------------ high address of the new buffer pool area will be modified to go on mod-16 boundaries within the region specified by RR2 and R5; also, if the specified region sits over top of part of the system, the low address will be moved up so it doesn't. In additiond to the power RR4) p(RR2) (e raised to a power) SC 058 = POWER: RR2:=RR2**RR4 (RR2 raised to the power RR4) = LOG: RR2:=log(RR2) (base e) SC 057 = EXP: RR2:=exp(RR2) (e raised to a power) SC 058 = POWER: RR2:=RR2**RR4 (RR2 raise------------------------------------------------------- Return control to Z80, first closing files and shutting off timer. Then go to either bootstrap in prom or infinite loop to await reactivation by Z80. If called with RL0=0, go to bootstrap to await  ...puts out string; in string: "\n"=CR, "\t"=tab, ...if "%" in string, next character says format for next argument in ... list of arguments (use "%%" for "%"): "%w": put out word in hex "%b": put out byte in hex "%c": put out ascii character ------ This call sets the read/write pointer (position for next read or write) for a file. Call with registers set as follows: RL3: =logical unit number of file (as returned from OPEN) RR4: =position or relative position in file (depending on R1) t, it is required that the buffer pool be of a certain minimum size, around 1K bytes. Returns: RR2=address of new buffer pool (current one if initial R5=0) or R3=-1 if specified and (possibly) adjusted region too small R5 =size of new buffer poolsystem reboot. If RL0=1, go to infinite loop to await startup interrupt. This call doesn't return. ----------------------------------------------------------------------------- Request Memory (System Call 010) ------------------------------------ "%s": put out ascii string (DEFT pointed to) "%d": put out word in decimal "%f": put out floating-point number (uses 2 arguments=high and low words of 32-bit floating-point number) (above small letters may be capital) Specific example: pro set read/write pointer to R1: if =0, RR4=absolute position in file (in bytes) if =1, RR4=relative offset to be added to current position if =2, RR4=offset relative to end of file Returns: RR2=updated value of read/write pointer or -1 i (current one if initial R5=0) Note that system disk i-o performance will degrade fairly significantly if the buffer pool size is made too small. ----------------------------------------------------------------------------- Library Functions (System CFULL SCREEN EDITOR Note: The Z80 version of the editor is named "E"; the Z8000 version "EE". Call by typing E FILENAME (or E FILENAME,CMDFILENAME if want to edit from a command file--see below for a description of this case). If the file does not previo----------------------------------------- Request a memory buffer. Call with R3=number of bytes requesting. Returns with RR2 at start of buffer, or R3=-1 if one big enough not available. -----------------------------------------------------------------intf("2+2=%w\n",2+2) Note: floating-point format=ffffffee where ffffff=fraction part with high-order bit=sign (1=neg) and ee=exponent (excess 128); 0=all 0 Code generated for printf: SC 046 ...saves registers expression to load arg1 PUSH argf error (logical unit not open; RL5=code) ------------------------------------------------------------------------------ File Statistics (System Call 7) ------------------------------------------------------------------------------ Get filalls 040-058) ----------------------------------------------------------------------------- SC 040 = OPEN: On entry: R3=pointer to DEFT 'FILENAME' (i.e. length byte first) or 'FILENAME'+0 (currently assumes in caller's segment), R5=open type usly exist, it will be created (when written out). To exit the editor, type either "QU" to write out the file, or "QU N" if it is desired not to write out the file. (This also avoids creating the file if the name was misspelled, for instance.) Commands:------------ Release Memory (System Call 011) ----------------------------------------------------------------------------- Release a memory buffer. Call with RR2 pointing to start of buffer to be released (as returned from Request Memory system c1 expression to load arg2 PUSH arg2 ...etc PUSH size of above pushes SC 047 ...does printing and restores registers DEFT "string" ...at return address of SC 047 ............................................................................... e statistics of an open file, currently: file type=regular file/device file length Call with registers set as follows: RL3: =logical unit number of file (as returned from OPEN) RR4: =address of where to put the following 6-byte structure (if R4=(0=file must exist, 1=create file) Returns: R3=logical unit number for subsequent calls; if error, R3=-1, RL5=error code Preserves registers>=R6. SC 041 = CLOSE: On entry: R3=logical unit Returns: R3=0 if successful, else R3=-1, RL5=error code  Command mode is the normal mode. The commands are: Single character cursor commands: 6 or sp ..... move cursor right (with wrap-around) 4 or bksp ... move cursor left (with wrap-around) 2 or LF ..... move cursor down if at bottom row causes scroall). ----------------------------------------------------------------------------- Read Break Routine (System Call 012) ----------------------------------------------------------------------------- If R5=0, returns address of current break-handle SCs 048-058 are floating point functions: Argument(s) are in RR2 and RR4 (if 2 arguments), results are returned in RR2. Registers R6 and above are preserved. Floating-point format=ffffffee where ffffff=fraction part with high-order bit=sign (1=neg0FFFF, segment of caller is used): word FTYPE ...0=file, 1=device long FLEN ...file length in bytes Returns: R3=0 if all okay or -1 if error (logical unit not open; RL5=code) -------------------------------------------------------------------- Preserves registers>=R6. SC 042 = READ: On entry: R3=logical unit, RR4=data transfer address (if R4=0FFFF, segment of caller is used (currently also if called from nonsegmented mode)), R1=transfer length Returns: R3=length read; if end-of-file,lling 8 or - ...... move cursor up if at top row causes "scrolling" down (may actually be screen reprinted from one line back) CR or ctl-R . move cursor to beginning of next row (scroll if at bottom) 7 ........... move cursor home (actually to ber in RR2 (will be odd if system is taking breaks). If R5=4, returns address of current handler of system calls of value >=080 (odd if none). ----------------------------------------------------------------------------- Write Break Routine (System ) and ee=exponent (excess 128); 0=all 0 SC 048 = Floating ADD: RR2:=RR2+RR4 SC 049 = Floating SUBTRACT: RR2:=RR2-RR4 SC 04A = Floating MULTIPLY: RR2:=RR2+RR4 SC 04B = Floating DIVIDE: RR2:=RR2*RR4 SC 04C = Floating COMPARE: if RR2=R6. Also note special cases when reading from console: if request length 0, a character is returned if and only if one ready (the returned length indicates whether one was or not); ginning of 1st printed row) 1 ........... move cursor to bottom left corner of screen tab ......... move cursor right to next tab position _ (underline) . move cursor left to next tab position Single character mode changing commands: R ...........Call 013) ----------------------------------------------------------------------------- If R5=0, the address in RR2 will be made the destination for breaks (if odd, system will again handle breaks). If R5=4, the address in RR2 will be made the handler off RR2=RR4, RR2:=0 if RR2>RR4, RR2:=1 SC 04D = FLOAT: Entered with RR2=integer; return RR2=equivalent floating-point number. SC 04E = FIX: Entered with RR2=floating-point number; return RR2=integer (truncated). SC 04F = SQUARE ROOT: RR2:=Sqrt(RR2) Ssibly with calibration) or random numbers. (Note that the exact interval of periodic interrupts may vary somewhat during i-o.) ------------------------------------------------------------------------------ Exit (System Call 0D) -------------------- if request length 1, 1 character is returned as soon as available; if request a length n>1, a maximum of n characters or up to a carriage return is returned, with input editing being done on the line entered; also a control-D will terminate  enter Replace mode (see below) I ........... enter Insert mode (see below) E ........... enter Enter mode (see below) Commands which must be followed by a carriage return: As they are typed in, these commands appear on the command line at the top o system calls of value >=080 (if odd, then none). ----------------------------------------------------------------------------- Change Buffer Pool Location (System Call 016) ----------------------------------------------------------------------------- C 050 = Ascii string-to-float conversion: Enter with RR2 pointing to ascii string (either in DEFT (length byte first) form or in form "string"+0), e.g. "2.36E-4" (if R2=0FFFF, uses segment of caller) Returns RR2=number in floating-point form SC 05---------------------------------------------------------- Closes all open files and does system reentry, restoring default standard i-o definitions. May be called to exit a program without restoring original stack pointer and segmentation mode. This cainput at any point (the control-D is not passed on); in any case, the actual number of characters read is returned SC 043 = WRITE: On entry: R3=logical unit, RR4=data transfer address (if R4=0FFFF, segment of caller is used (currently also f the screen. (Backspace may be used to back up.) Multiple commands may be typed separated by ";"s. The commands on the command line all execute at once (left to right) upon reception of the carriage return. After execution, the commands stay on the co Change location in Z8000 memory of system buffer pool (used with the Request Memory and Release Memory System Calls above, as well as for system i-o functions). The change takes effect upon the next system restart (either by being started up by the Z80 o1 = Float-to-ascii string conversion: Enter with RR2=floating-point number, RR4 pointing to buffer to put string (necessary length=14) (R4=0FFFF implies use caller's segment) Puts ascii string representing number in buffer in form "string"+0 SC 05ll doesn't return. ------------------------------------------------------------------------------ Restart (System Call 0E) ------------------------------------------------------------------------------ Closes all open files, shuts off timer, and doesif called from nonsegmented mode)), R1=transfer length Returns: R3=length written; if error, R3=-1, RL5=error code Preserves registers>=R6. SC 044 = GETCHAR: Returns: R3=next character from standard input (-1 if end-of-file) Preserves other regimmand line and may be executed again by doing the "X" command (see below). T ........... top: print 1st page of file B ........... bottom: print last page of file N n ......... next: go forward n pages in file and print screen if not given, n defar by the Restart System Call). Call with registers set as follows: RR2: =address of new buffer pool location R5: =size of new buffer pool, or, if =0, says want location and size of current buffer pool returned instead Actually, the low address and2 = SIN: RR2:=sin(RR2) SC 053 = COS: RR2:=cos(RR2) SC 054 = TAN: RR2:=tan(RR2) SC 055 = ARCTAN: RR2:=arctan(RR2) SC 056 = LOG: RR2:=log(RR2) (base e) SC 057 = EXP: RR2:=exp(RR2) (e raised to a power) SC 058 = POWER: RR2:=RR2**RR4 (RR2 raise system restart, simulating startup from Z80. (This includes reinitializing a number of things.) This call doesn't return. ------------------------------------------------------------------------------ Quit (System Call 0F) -----------------------sters. SC 045 = PUTCHAR: On entry: RL3=a character which will be printed on standard output Preserves all registers. SC 046 & 047 = PRINTF: Formatted printing which preserves all registers. (Used by "Y") Example: printf("string",arg1,arg2,etc.)  ults to 1 P n ......... previous: go back n pages in file and print screen if not given, n defaults to 1 QU .......... quit, writing out the modified file QU N ........ quit, but without writing out the file (leaving it unchanged) F/STRING .... snsert: inserts the typed character in front of the character at the cursor position, shifting over the rest of the line and advancing the cursor. Back- space deletes the previous character (except a CR) and moves the cursor back. Del (or rubout) deletes   !7.X3.XC: : :::13L8g7Q7^5f8~b8~{?P   g7 7Q7A  < -7 X2 c- lete current line tags are removed CO .......... copy text between or at tag(s), without deleting, to right above current line tag(s) (which must be present) are kept in place after the copy CO filename . copy text between or at tag(s), without d. This may be used, for instance, to leave the command line without executing it. 10. After quitting from the editor ("QU" or "QU N"), the editor may be reentered at its entry point with everything intact (type "X" from RIO or ZOOMSYS or execute X.COM frtarting on the next line (if at EOF, start at top), go forward until STRING found at the beginning of a line (after CR) print screen from that point (Note: do "F/STRING/" if more commands follow on command line) F n ......... go forward n lines frothe current character unless it is a CR, shifting back the rest of the line. To exit Insert mode, type CR or escape. Enter: upon entering, inserts a CR to move rest of line (from cursor on) down, leaving cursor in place with opened-up space following.A( #   ^hB⠉o  f8^ ~b8{^ :{Ѐ:: :4::~ ߼:::78 39  '2' ! 2::4:%1#2eleting, to the file (writes over or creates new file); tag(s) are kept in place MO .......... move text between or at tag(s) to right above current line; delete from original location, removing tags MO filename . move text between or at tag(s) to om CP/M). This could be used after an inadvertant "QU N" or after an error on writing the file out, for instance. Terminal and keyboard configuration: The screen function codes and keys for doing cursor movements (as well as the Delete key used in insem current top line and print screen if n not given, print so current line with cursor is at top if possible, cursor remains with the same line M ........... print screen so current line with cursor is in middle of screen cursor stays with line L/ (Exception: if cursor is at the end of a line, but not in the first column, then no CR is inserted.) Backspace will delete any character, including a carriage return. Also, typing a carriage return will enter a new line. To exit Enter mode, type escape103$j8&2$#j8:ȃ:!1!:B !<$G<%<-<#<+5+1+7+3+!!1!: @5+7+M8L8/L85`L8<T@:J2L8Lthe file, deleting text and removing the tags (writes over or creates new file) GE filename . get the file and insert above current line G1 .......... go to position of current or last tag 1 (if off screen, screen printed so in middle) G2 .......rt mode) may be changed. (At the present, the usual initial set-up is with support for the Infoton 200 and Visual 200 terminals.) See the program ECONFIG. Extensions: Provision is made to incorporate extensions into the editor to handle writer- defineSTRING .... locate: starting at the next character (if at EOF start at top), search for STRING cursor moves to beginning of STRING (or to EOF if not found) if off screen, screen printed so in middle (Note: do "L/STRING/" if more commands follow on . Editing using a command file: The option exists to take all the edit commands from a command file instead of from the console. Starting from the beginning of the file, each succeeding byte is equivalent to the next keystroke in normal editing, up th81+!.(o8K83+L80 8!8ĞjL8< 4 B:@_`TR7 …U7)x 7)p 4)p  ߲Ȁ($ O  pp ... go to position of current or last tag 2 G3 .......... go to position where tag 3 was last set (note: position of tags may change if file is changed) S ........... print current page showing position of each carriage return with a "~" ST .....d searching and changing operations. If any extensions are defined, they are called after a "." is encountered at the beginning of a command. At this point, a supplied routine to parse the command is called. If the parsing returns true, another suppliedcommand line) C/STR1/STR2/nm .. change STR1 to STR2, starting search for STR1 at cursor n and m have the following meanings: if n='N', change next occurrence of STR1 (and ignore m) if n is a number, do changes on next n lines, starting current ifrough a "quit" command (only exception: the escape to end an "X*" command must come from the console). If the command file happens to end before a "quit" command is given, an automatic "QU N" will be executed. Note: on the Z8000, input from a command fi OAȀ  H  4*m! H.(0P4*P.I驓 I PNE4(p 7CU5)a8x5'  B!B>S T4   K8r!7)5o8x5)v7..... print current page showing position of each tab with a "~" K ........... compare text starting at beginning of line with cursor to text beginning after tag 1 (tag 1 must be set but not tag 2). When a difference is found, the cursor is moved to routine is called which executes the command. Note: Special extension files may be made which the Z8000 (and RIO Z80) versions of the editor can load in using the "GE" command. Extensions defined in them are then available for use. See separate docume n='*', then do all lines (the lines with changes will be printed out; continue same as with "W" below) if n not given, only do current line m: if m='*', change all occurences of STR1 on each line done; if m other than '*' or not given, only make 1 le is enabled by redirecting input when the editor is loaded. This is done by typing EE FILENAME ^ ~11 '@ ; O6 $1  Ќ, 2' 3" в .  Г d line as the second or later command (after a ";"), or else they may follow an initial ";" beginning a command line. (The exceptions are CR and backspace, for which "control-R" and "4", respectively, may be used instead.) In the case of mode-enter commathe CP/M Z80 editor is ".A" to add line feeds after all the carriage returns in the file. e after the last one to be copied. Outhex: Converts RL0. to the equieady be a tag) T2 .......... tag 2: marks line above current line as last line of tagged region (tag 1 must be present, but not tag 2 yet) Note: if only one tag is present, the tagged region is assumed to consist of only the one line T3 .........re the first delimiter. 5. With commands followed by a number, spaces are optional before the number. 6. In the Locate command, "control-R"s may be used to represent carriage returns in the string. 7. In the Change command, if the first string is null,  Г Л Ё ŕ{ 1 1 {   ߨ Ѡ3a;!  &ˍCwa{! &554 $&  nds, command line execution continues after return from the mode; if escape was typed to return, execution of the commnd line is halted. Desciption of Replace, Insert, and Enter modes: Replace: replaces the character at the cursor position with the tIV1.00 4!}:o*oo o ],!V]! p] ]!}x>q>y>r>z>s>{>v>~>t>|>u>}>v>~ĕb8~L8~?yped char- acter, advancing the cursor. Backspace backs the cursor up one character but doesn't delete it. Del (or rubout) deletes the current character unless it is a CR, shifting back the rest of the line. To exit Replace mode, type CR or escape. I78 88&848B8P8^4.x!p4.nT $G7B]4/!0:J70L84CON4-4!@B_5 潒baL8L8!o8r!! %UU !UU % !/!a` ^B!......... takes off 2nd tag only DE n ........ delete n lines starting at current line; if n not given, it defaults to 1 (tags must not be present) DET ......... if tags present, delete lines between tags; if only one tag, delete that line; else de), or "escape" into a file, this can be done by first typing "control-@" (when in one of the input modes) followed by the character. 9. Hitting "escape" will always cause a return to normal command mode (except in the case after a "control-@" noted above) b8L8>a8¡]4_`M8a8…U AȆ>H>M4:"@M8žW*w@L8=L84za8i  .`   .` po8…L8 L8i3Q@iL8s}a8#T#`#a# f#d!9f# q d!&`#Ԟ{Ԣ{@!] #n#o#  pԾT #`#a#w  !Ҟ{ X !h] #ޠ n #so#T #`#!$`(! `dO(qwhcvyps3c27p߲]dT`ic桢qTd@x]w   * wB1 .kp.k}} ]>! ? !  ! @- 90100-(00 99...800 99. !@ {p  먐    #K8 ! (o8ȀЏ  qȀ &/ .k !.kҡ=Ȁ  L8_`Ȁ M8ȀM8L8L8!8o8o8(<=]]J 3& ˡ Zy!Ղ] #ڠ n #so#@!չ] #n#o#T #`#a#@!հT#`#a#զ] #n#o#q] #n#o#jI!UM!T#`#a#@!T#`#a#X !//%w @߳ !      ++ -- 00 99߹ ..  00 99ʫ) EE ee1 --5Ƀx V2!C7 }3 813 257 ,\  AD@!@}Ѐ~ BREAK AT TAdzZ` -  GG JJ DD߷ RR SS PP!@!P9?`!@^aAd  RR  HH]Ad}} a ֊n  . ա      ި      ^  @@0ɗ ߾ f  ݯT#`#a#,ՠՂ{\U!] #n#o#o#wq] #o#n#EJ!3] #o#n#T #a#`#qIcߜ!u] #o#n#T#a#`#f] #o#n#T #a#`#T#a#`]}2?}:}2?}:T4z4     ,,     ,,.(0.(` ` ʄF GMUST GIVE 2 FILENAMES\nk!ߔ8!ߘ9  \MrLuf!z:++<Ёx!TP!  qr9諀  詀*" * p 00 99  ~w;P!  qr{諀 M詀  PX詀 vg A`}\A@yA`A@-͑1 ,,0& . .|.s   .. |.* }bғC5X bA}R_}Z (}R_}Z.(0_}ZX2 c- Kh8"Ѩ&Ȁ&0  S 0 &2$.&Ȁq&$5BB303%%5 5BɞB5%1% $\5 %0#֤T#a#`#xa# L(!֘ Zy!֣ k~e!֮a#YsS7{QB] #o#n#*]#o#n#ӹ]#wT #a#`#ѴT#a#`#c\# @!oT#!$;  =diLu2 nLu-ׅF GFiles are of different size\nMrF GFiles are identical\nAA6P!@ $ߡc߼  F G NOT FOUND\nFۓ G: OPEN ERROR %B\n   E++ E--P E..P *ު EEEP  E--P E++P E  00.IPn00.FP APbSE{m^P{xi[{уtf{юѠСc}߽)!c % 5 $P5 @B7 c1S9 05 `Ȁɞ0P!@!@ ߩ%l0|6ފވ '0a1111011'11Ȁ!T #a#`#O$@P]#] #o#n#q @!] #o#n#M# T#M]#(k#$] #o#n#qIT#M]# T#a#`#\k#k#M#-:JL>}2?}:a >J!6! !B ߡcF G: READ ERROR %B\n!8 E8J!!$OLuLvnHMrF G"File offset File 1: File 2:\nMrc0 "F G%wF G F G%w `k߿`{{*l{{ѣh{ѭя{ 1 (  0 !4ȅ!@ H4$уѼ{ 1 (0.HP{4|4v1ͺv|qvÀqV2.07. tdd disassemblerYrrdi {i Ói pj j j j" 7k 6 w * KDDDS $OeKKG]G;D DSKD(*** l:KK CLL3HfW""+L $O"  K}4!.'閭 213033'Ȁ''ɗ51@E B1@E B5364~ҿ'6 7 2c %333 ::CՕ ::5 & ''Ɋ'05 11@E %h !L>` -!?!l^M>Jߐ l ;;   // //[ ## ߡߓj8!   XXT - **K*  II o >JH !>Zo? o >h>] - ,, ޽o >J}F G\n۞  ?? D  ??  LuF GPROGRAM ABORTED\n0!t!B` tF G %b F G %cF G t msg. RL3:=GET1IF(); RET Z if RL3=0D or RL3='?' then begin Q|!҄mo# q @!Ҙ] #n#o#qҢ] #n#o#G!T#`#a#ҼC!] #n#o#T #`#a#dm'!j6T!T#`#a#a#   qT * O0* 0(  0>wk~kBinfFN~h #x ^VBi~ ͉:_͉!A$=(x͉ͫ0xͫ  >xͫ  ͉>O͉0#͉!!8'%ᢗ(ᦗ'ȀщО5 ‘%1% $P5 %6Е!  c % 5 $U3c % 5B c 09 }Н<3Ȁ  c % Ž@B5Bc}c}'c}+A5} ]莞        ;;   .  󡕃5  ;,<>=* !! ~~ !/hTEM>Jݣݼ F GFILE NOT FOUND\n F GWRONG FILE TYPE\n F G%B???\nF #`#a# T#`#a#҇a#/{qw   $GOD ҙq8Q|!?(Qo#{Q|!N7o#{ q @!da# c] #n#o#qx] #nw#w#w(>V#N#~$#~+: ~@##>b~. #>b>t >Gx( ~̀ #x (@8Z80(.`8}8&($/898(!8)8(+( -(\(^ xͫ((#͉!!OW_}T]Oů)lau!t"w# @B7 5B75 T%'13 ý %6` 11S06'`^^Ȁ###0#%##%Ȁ%Ȁ4@ :I '8RV"""""###,#T#%%v$'T)X+,v1?  "G???\na- .. /093 00 99 AA FF aa ff  AAߴys!>p!x!Bء8 !  M>psXsDB!>p L>p##L>s<ҍCЯ mk#o#C@0!ӭ] #n#o#T #`#a#X,!}ӡJQ!T#`#a#Ӳi!T#`#a#ӲT#`#a#Oq] #n#o#__!] #n#o#T #`#a#r|!3x( >!N  3x( >"N  S?)lgxͫ!!G͉H͉ 4 # (  >>K?BP!(!! " !"( (!&*B Ra"3!-{Д$1 ?1 0 !{B1 _1   !{!2/!{ }63 5.75*7{5! 00,$wU 8  0PV!>Nt1@.K! `x // ::!>L0.X/nXޞ   uު` >>a c e` >>aec  ;; << >>C6hL,!>N1.cAe!>N!@m!'T#`#a# __!8T#`#a# a#ӜӾ n #j !L#] #n#o# [MA=!T #`#a# T#a#`# @!VL#1T #`#a#@!ԡ  ( x x  ( x x [S> S2>S K! "K*B(~[9 >@<!(!3K*B[(!Bͽ*B 3K :*T]B 0!⚷RDM! B"! "*B ͽ~(#4 U %%4q  BBߨ% CC.kp WW߶ SS!u߬ DDߣ FF2q ߌ.hp \\  NN  TT .hp.hp 4Hq1ս}> {8ಁ00 99.hp (0 A7!>p!Aa ҋ!hs@5j af! >a3 5aa7̡6"0! JC']>]>a<_Cf}} $00(   % 0}} ]>!5   ;; <<] #n#o#T #`#a#ԒT#a#`#ԈL# T #`#a#] #n#o#qԴ] #n#o#T!T#`#a#eG!] #n#o#T #`#a#e2!eG!T#`#aUsage: SPLIT FILENAME OPEN ERROR READ ERROR CREATE ERROR WRITE ERROR !N#T]> w  !{͞bk ( {8>(O!!T]. H y( {8###T]>.S>0Irͥz/IMAGE SPLIT.COM !{PP!`'d  -.hp24!A/ 00 .hpQ P !`W5p w @qp  !b paq*;v  0b/* L >>    60/caqW  /iap s'Y2!B .80.8T>P>T>ߜj>a >}} H?!  / $$" 11 99 0K? 3a5>!U HPk.hp.hp  /DO BASICIO.C /*includes printf*/ /DO HOJOB.C #/LIST /WRITE "Type in:" /WRITE "/IMAGE HOJOB E=main"   %c %c %c %c %c 4;/֩3/3 ?/3 ۩Εa2 ran out of free space -- abort 4!va2YS&a25Po2b1/%b1 3%b5 pin remains. * * * * DIAGRAM * * 1 * * 2 3 * * 4 5 6 * * 7 8 9 10 * * 11 12 13 14 15 * * * * INPUT is a list of hole numbers that are to be empty. * * * * P[b$PF +3::383!3!#"71(!3"73(!#*71(475135763s47"57\3(5ɩ3W"7𔂩3(5٩3G137𔂩1(5pathlastchar bposprt printit Vnewmnode getnbrinstatedinitlistpath*dejavuwin,mainTED --- 4_ΠΕZlvh 7$bΕ36` 3  3=203 003 9 03  3&203 003 9c 0U0S6.20n cΕ! enter initial configuration as list of positions without Program Written By: Gil Berglass * * The MITRE Corporation * * McLean, Virginia 22102 * * (703) 827-6087 * * * ************************************************************************* */ /* the "connect" table shows $P77/i0 o怠 x^ u^ X悠 D恠 d愠 f枠 s泠 c澠ˠ13 11S1311S 15P3! /H15P335$P7 +3/]^Εpegs: 4֨16c c5PVv4eUSQ/%?oTО63c aT5PoTv4eUSU/%Ε!+o217s [s07vuYSD$36c Bc064u SeUS!#83+the connectivity of nodes 1-15. the order is ne,e,se,sw,w,nw. */ int connect[16][6] = { {0,0,0,0,0,0}, {0,0,3,2,0,0}, {1,3,5,4,0,0}, {0,0,6,5,2,1}, {2,5,8,7,0,0}, {3,6,9,8,4,2}, {0,0,10,9,5,3}, {4,8,12,11,0,0}, {5,9,13,12,75&5 (bQΕ5(571  5$PH!-.-5D$B74&b51 BB O @@0.-1  b +3 9b$ MUV.-b$PF51 DB"O 1@74ơ SeUS!#93vuYS/塅3vqD7h$$訠!Xn ܃3o36c c06vVeSU.-Ε16caS9c06c  =/_%d->%d 4,4}, {6,10,14,13,8,5}, {0,0,15,14,9,6}, {7,12,0,0,0,0}, {8,13,0,0,11,7}, {9,14,0,0,12,8}, {10,15,0,0,13,9}, {0,0,0,0,14,10} }; /* an MNODE describes a move. the "mto" field is the position moved to; the "mover" field is the p$PHdPF M.-b4B5SΕ5&38b$PF +3  08 Ε5&331 83b +3 - 1 5P3 b$PF13393'5PXb$PF +23 003 9 vVeS!#3vVeS1#3׷ʠ=/_Ε36?8  5PXc3v4!EUQSUS5S61eJE37c*6vVeS +u3S31 vVeS$ MqU.-3osition jumped over. */ typedef struct mnode { int mto; int mover; struct mnode *mnext; } MNODE; /* for each position (1-15), the list in the "move" table describes all legal moves. */ MNODE *move[16]; /* MNODEs are allocated from "m 0U0S9ܠ51URSS5/%1 SΕ5&bPΕ04 &5Ш3393815P33^ 5$P7 +3 %^ 1 ^ 103:3b"*!35$P7 +3_ 18 ^ 5PXv4US!# ^zvYS"&b(^zb5"&v4d1EUS!# ^tv4d!EUS!# {v4d1EUSv4/A/!v4d!EUSQ/%Dž3v4d1EUSv4nspace". "mnavail" is the index of the next free mnode cell */ # define MNSIZE 300 MNODE mnspace[MNSIZE]; int mnavail; /* the "state" vector describes the current state of the game. a 1 in a position indicates the presence of a peg; a zero indicate!31/47 8 w5$p!31/47)8 [5/%V4!3߇8 G4Ц$$;1313ߤ8-?+ X枠 D杠 x氠 h毠 d檠 f湠 c/A/!v4d!EUSU/%AaT5PoTa5PovVaSd1E3%vVaSd!E3%vVaS/%aT 1Z^^>^a 3Iv4vVa1EUSv4vVa!!/A/!s the absence of a peg. "count" is the number of 1's. */ int state[16]; int count; /* the "history" table indicates positions already seen. the state is treated as a 15 bit number; the "history" table is treated as a 32768 entry bit vector (4096 8- s͠ՠ ! b3&09  ^h  !ԏ8Ε5&1 8:ԧ9           08b$PF.-ҡ9 bU.-Εv4vVa1EUSU/%a5PoaT5PoT^ΕgaT ,\43` --- ALL SOLUTIONS HAVE BEEN PRINTED --- 4_ΠΕZlvhbit characters). */ char history[4096]; /* the "path" vector describes the current path as a sequence of positions. "ppath" is the index of the current position. */ struct { int jfrom; int jto; int jover; } path[16]; int ppath; char lastch"(376c  c  c  7c  3c  /c +c -17c acߡ6c Xc06  c661J@eJB(16Ǡs D$B(5 $cΕ,1EΕv&18 0d!B8 33!33o103baQoS +3Ε5P@7c3sΕ5P@7c3s x  h b     ~ 6@Ft@JjZ"8Ndar; /* the last character read */ char posprt(p) int p; { /* return "*" is position p (1-15) contains a peg; "-" otherwise. */ return( state[p] ? '*' : '-' ); } printit() { /* prints the current position at the terminal (centered on an              v41US!#3!*!-Ε %c 41/.3 # /* ************************************************************************* * * * This program finds solutions to the following game: * * * * A triangular board has 15 holes, as shown in the diagram. * * Some holes have pegs in them, anΕ1A7c3sΕ15 1B7c3^sΕ15 1C7c3.sΕ0 5 1(c3Ε65&4 (bש;5P[3^Ȕb$PF +3j06JP`pv|4putchargetchar 80 character line). a pin is indicated by an "*"; an empty position is indicated by a "-" */ printf(" %c\n",posprt(1)); printf(" %c %c\n",posprt(2),posprt(3)); printf(" %c %c %c\n",po %c %c 42/L33/S3<  %c %c %c 44/r35/y36/Ѐ3i  %c %c %c %c 47/Р38/Ч39/Ю3:/е3 ՞d some are empty. A move * * consists of jumping with one peg over a second peg to an * * empty hole. The peg jumped over is removed. Moves are * * permitted in any direction parallel to a side of the triangle. * * A solution results when exactly one: %/^¡ ^ȡ5P[b$PF +3:333 Abb0&⡳0;3473b1S&1S; ^Ȕb +3 .'b$PF5P[ ^ȫb⡳347.31S;b1S& ^ȡ5errnoopencreatcloseread8writehlseekprintf length>scanf connectmovemnspace2mnavail4stateTcountVhistoryVpathp sprt(4),posprt(5),posprt(6)); printf(" %c %c %c %c\n",posprt(7),posprt(8),posprt(9), posprt(10)); printf(" %c %c %c %c %c\n\n",posprt(11),posprt(12),posprt(13), posprt(14),posprt(15)); } MNODE * nable size SCRVCP: EQU 8 ...offset in EE of ptr. to SCRVEC KEYVCP: EQU 0A ...offset in EE of ptr. to KEYVEC LSCRVEC: EQU 6 LKEYVEC: EQU 9 BEG: SAVSP: LONG 0 SCRVECP: WORD 0 ...points to screen vector KEYVECP: WORD 0 ...points to key vector EESIZ: WORDE with changes? (enter Y or N)" ?" (for now, writes out to EEE (rename to EE))" printf(" "); getchar(); putchar(); ? if RL3&0DF='Y' then begin if BITB FLAG,0 not zero then begin R7:=SCRVECP; R3:=^POSOFF; R1:=LSCRVEC; LDIRB @R7,@R3,R1 native. If no alternatives remain, we return 0 (failure). */ register MNODE * c; register int peg; next_step: for( peg = 1; peg <= 15; peg++ ) { if( state[peg] == 0 ) continue; for( c = move[peg]; c; c = c->mnext ) { if( (state[c->moverrackets)" ? ?"If any function requires a lead-in, enter lead-in character, else 0:" ?" Example: if lead-in character=escape, enter 1B" ?" [00]" B.Getnum()->LEADIN ?"In the following, give code for the function plus set high bit (bit 7)" ?"if iewmnode(pto,pover,pnext) int pto, pover; MNODE *pnext; { /* create a new MNODE, and initialize it */ register MNODE *p; if( mnavail < 0 ) { printf("ran out of free space -- abort\n"); return; } p = &mnspace[mnavail]; mnavail--; p->mt 0 ...size of EE incl. header FLAG: BYTE 0 POSOFF: BYTE 0 LEADIN: BYTE 0 CLRSCR: BYTE 0 CLRLIN: BYTE 0 POSCRS: BYTE 0 INSLIN: BYTE 0 CRSLT: BYTE 0 CRSRT: BYTE 0 CRSUP: BYTE 0 CRSDN: BYTE 0 CRSHM: BYTE 0 CRSBTL: BYTE 0 CRSTAB: BYTE 0 CRSBTB: BYTE 0 RUBO end if BITB FLAG,1 not zero then begin R7:=KEYVECP; R3:=^CRSLT; R1:=LKEYVEC; LDIRB @R7,@R3,R1 end SAVE("EEE") end EC4: RET END: BUFF: DEFS 02000 DEFS 0100 MYSP: /MAP UNDEF /WRITE "Type in:" /WRITE "/IMAGE EECONFIG ",BEG," ",END," E] != 0) && (state[c->mto] == 0) ) { state[c->mover] = state[peg] = 0; state[c->mto] = 1; if( dejavu() ) { state[c->mover] = state[peg] = 1; state[c->mto] = 0; continue; } count--; ppath++; path[ppath].jovert needs a lead-in character:" ?" clear screen: [0C]" B.Getnum()->CLRSCR ?" clear line: [0B]" B.Getnum()->CLRLIN ?" insert line (enter 0 if don't have): [00]" B.Getnum()->INSLIN ?" position cursor: [17]" B.Getnum()->POSCRS ?" ento = pto; p->mover = pover; p->mnext = pnext; return( p ); } int getnbr() { /* find, and then convert the next digit string; return the value, or zero on newline. */ register char c; register int v; v = 0; if( lastchar == '\n' ) retuUT: BYTE 0 LCONBUF: EQU 16 CONBUF: BYTE 0[LCONBUF] /SEG START: LDRL SAVSP,RR14; LDAR RR14,MYSP R3:=flag; RES R3,15; R3:->flag /NONSEG EECONFIG() R3:=flag; SET R3,15; R3:->flag /SEG LDRL RR14,SAVSP; RET /NONSEG LOAD: PROC ...load in filename @R3 ("E=",START  configure EE screen editor (Z8000) for different terminals FNFERR: EQU 0C7 ...error code for file not found HDRSnd EC4: RET END: BUFF: DEFS 02000 DEFS 0100 MYSP: /MAP UNDEF /WRITE "Type in:" /WRITE "/IMAGE EECONFIG ",BEG," ",END," E = c->mover; path[ppath].jto = c->mto; path[ppath].jfrom = peg; if( count == 1 ) return( 1 ); goto next_step; } } } if( ppath == 0 ) return( 0 ); state[path[ppath].jover] = state[path[ppath].jfrom] = 1; state[path[ppather offset for X & Y positioning characters plus set high bit" ?" if order is to be XY (column first, then row) rather than YX" ?" (row first, then column):" ?" Example: 'A0' means if the 2 chars. sent are '20' then '21', the" ?" column rn( 0 ); c = getchar(); while( (c < '0') || (c > '9') ) { if( c == '\n' ) return( 0 ); c = getchar(); } while( (c >= '0') && (c <= '9') ) { v = 10*v + (c - '0'); c = getchar(); } lastchar = c; return( v ); } instate() { /* asE") R9:=R3 if R8:=open(R3,0,->RL5)=-1 then begin if RL5=0C7 then printf("%s NOT FOUND\n",R9) else ?"OPEN (of EE) ERROR ",RL5: RESFLG Z; RET end if read(R8,^BUFF,02000,->RL5)=-1 then begin ?"READ (of EE) ERROR ",RL5: close(R8) RESFLG Z].jto] = 0; ppath--; count++; goto next_step; } main() { again: init(); if( count == 15 ) return; printit(); while( win() ) { printit(); listpath(); } printf("\n --- ALL SOLUTIONS HAVE BEEN PRINTED ---\n"); goto again; } ); whiwill be set to 0 & the row will be set to 1" ?" [A0]" B.Getnum()->POSOFF EC2: ? ?"Do you want to change any key functions? (enter Y or N)" printf(" "); getchar(); putchar(); ? if RL3&0DF<>'Y' then JP EC3 SETB FLAG,1 KEYVECP->R3; Rk the user to list those positions containing pegs. return a state descriptor bit mask */ register int bit; printf("\nenter initial configuration as list of positions without pegs:\n"); for( bit = 1; bit <= 15; bit++ ) state[bit] = 1; count = 15;; RET end close(R8) R0==R0; RET SAVE: PROC ...save image to filename @R3 (EEE) if R8:=open(R3,1,->RL5)=-1 then begin ?"CREATE (of EEE) ERROR ",RL5: RESFLG Z; RET end if write(R8,^BUFF,EESIZ,->RL5)<SCRVECP; addr of KEYVEC->KEYVECP; ... size of EE file->EESIZ (includes header) R8:=^BUFF; R6:=HDRSZ+@R8[SEGTBSZ]; R7:=R6+@R8[IMGSZ+2]->EESIZ R8:+R6 down)" ?" '7' (cursor to top left corner)" ?" '1' (cursor to bottom left corner)" ?" tab (cursor tab)" ?" '_' (cursor back-tab)" ? ?"In the following, enter the ascii value in hex of the key you want" ?"to change to or 0 if no change is  mnavail = MNSIZE - 1; for( m = 1; m < 16; ++m ) { move[m] = 0; for( i = 0; i < 6; ++i ) { if( p = connect[m][i] ) { if( q = connect[p][i] ) move[m] = newmnode(q,p,move[m]); } } } lastchar = 'X'; instate(); ppath = 0; for( i R8+@R8[SCRVCP]->SCRVECP; R8+@R8[KEYVCP]->KEYVECP RET Getnum: PROC printf(" ") putchar(B.'>'); read(2,^CONBUF,10); R7:=^CONBUF while @R7=' ' do R7:+1 if Hexd() not then begin ?" Enter number in hex"; JR Getnum end R7:-1; HNum()->RL3 RET Getnudesired; end with :" ?"(the standard value for each case is shown in square brackets)" ? ?"(Avoid changing to keys that have other functions; also note that" ?"with cursor movement keys, small letters (or any ascii values>=060)" ?"are equivale= 0; i < 4096; ++i ) history[i] = 0; } listpath() { /* list the jumps as a->b involved in the solution */ register int i; for( i = 1; i <= ppath; ++i ) { if( i == 10 ) putchar('\n'); printf("%d->%d ",path[i].jfrom,path[i].jto); m2: PROC if B.Getnum()&07F>=060 then RESB RL3,5 RET EECONFIG: PROC LOAD("EE"); RET NZ ...load in EE GETVECAD() ...get addr of SCRVEC,KEYVEC; also EE size FLAG:=0 ... ?"Program to configure EE editor for different terminals." ?"Both screen nt to capital)" ?" '4' (cursor left) [34] ->" if B.Getnum2()<>0 then RL3->CRSLT ?" '6' (cursor right) [36] ->" if B.Getnum2()<>0 then RL3->CRSRT ?" '8' (cursor up) [38] ->" if B.Getnum2()<>0 then RL3->CRSUP ?" '2' (cursor down) [32]  } putchar('\n'); } int dejavu() { /* examine the current state. if we've seen it before, return 1. otherwise, return 0--but remember this state for another time. */ register int box, bit; register int i; box = 0; for( i = 15; i > 0; i--function codes and keys for cursor movement (+delete key)" ?"may be changed." ? ?"Do you want to change screen function codes? (enter Y or N)" printf(" "); getchar(); putchar(); ? if RL3&0DF<>'Y' then JP EC2 SETB FLAG,0 ?"The follo->" if B.Getnum2()<>0 then RL3->CRSDN ?" '7' (cursor to top left corner) [37] ->" if B.Getnum2()<>0 then RL3->CRSHM ?" '1' (cursor to bottom left corner) [31] ->" if B.Getnum2()<>0 then RL3->CRSBTL ?" tab (cursor tab) [09] ->" if B.Getnu ) box = 2*box + (state[i]?1:0); bit = 1 << (box % 8); box /= 8; /* for( i = 15; i > 0; i-- ) box = box+box + (state[i]?1:0); bit = 1 << (box & 7); box >>= 3; */ if( history[box] & bit ) return( 1 ); history[box] |= bit; return( 0 ); } win() wing screen functions are used:" ?" clear screen" ?" clear line (either all or past cursor)" ?" insert line (not necessary)" ?" position cursor" ?"Codes for screen functions may be either characters or characters" ?"preceded by a lead-in ...program to configure EE screen editor (Z8000) for different terminals FNFERR: EQU 0C7 ...error code for file not found HDRSZ: EQU 018 ...header size IMGSZ: EQU 2 ...offset into header of image size SEGTBSZ: EQU 0A ...offset into header of segment tm2()<>0 then RL3->CRSTAB ?" '_' (cursor back-tab) [5F] ->" if B.Getnum2()<>0 then RL3->CRSBTB ?" DEL (delete in INSERT/REPLACE mode) [7F] ->" if B.Getnum()&07F<>0 then RL3->RUBOUT EC3: if FLAG=0 then JP EC4 ?"Do you want to write out new E { /* if only one peg remains, we have "won" (i.e. found a solution), and we return a 1. Otherwise we attempt a move from the current position. If we find a move we make it and adjust the state. If not, we undo the most recent move and try an altercharacter (such as escape)" ?"(`pos. cursor' will then have 2 more chars. for the X & Y positions)" ? ?"Below, enter all values in hex followed by a :" ?"(in each case, an example value valid for an Infoton 200 terminal is" ?"shown in square b ZZP<^ ^ ^ ^h^ OE \(0ՒLN qXp qp`>Jn9թݞs! 10 8 5 p!Zo6ӓRCn ;_ x OOILNԸ!,0oF3p x nnNnI ** NNp!Ԣ1nIoD!H.8 "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M  w>`AaB.?7poBL9f_1 _$J#   aB 5 \  `` 904!^    XX!$!>)CLNa 00oBa00ӬRa+̞6 {p {u  ! `.k(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)`̈́.8F q3!"mLJLML9aF 8BnLaCsӞ! 9 8  ILLH**LK 80.xp!q-` LSsַMDaF 80 8.xpLINNo6MDLHnKnJ 8.xL! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  ;,<>=* !! ~~ ! TE x  p x     ;;C x   ,,   ;;Cp00 99ݞ x 00 99 p 0 Ҟ 4ϗEsބ03s߁3 9 COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$EIRX468271 _ -  ***00@.;KPGWSBMOCLDFQTNJJ|p,pHtJz z468271 _ ԽPFILE TOO BIG NOT ASCIKjKLI** ԱaLMp0kD 11q7$LJ!"`I ** !9LM*0 9 NNLJԞ--From here: --To here^ LNԆaP!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]01p3K KQas1L-T:!\.80 5 R-LNLX_$!$їѐL-a4!9.8`: 8 q(0` ;o6p |q xp    ߥJ / x    ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILEI NAME? ERROR ERROR NOTFOUND QU N NO ROOMHIT KEYNO CHG ENTER INSERT REPLACE ??? TAG 1 TAG 2 EOF! \!q . ;;   .0 ! $}2?}:]0_   q &! zޡ5aoL+hNaR@LNooP!bq0hNaP LNKP/!: 8J.(0 DqoT`N q22 jNՄUaP q oR!N*0*0aRoRaP aRױFa4so4a6ssso6X:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z! ߻p3K6 x  ` /  ҩpB`a4o4"n:`9`:n>[p q ph> t Ѝa6D`:n9|`.n:n9K po6Y`9(`:B9n:n9О $DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 dL-RF GType 'X' to reenter\nT0}2?}:NU40140aK`[ PKaPo.[ n[aP .[ `:`;``!4MZ!ֽ֜LN _םשoDo6aR1KPKRLNړ KPaPoPaRoRaDoDaD1pL;aRLNЋaP< y 11 44 11aPasass5 x EELN{կ_lo6/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mao1q1psa1qsos9p0aCC qp x  0.8poB.9Ѧ1tѫ! 4Cs 1a0 xp p 00`x4 x󠁩pp x 80221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! MZ DMZaZ 8iZ ``ͯ :i:2:d*M:[ `;J!: 8J8(0n;ս`;!: 8*0`n;ΞL;`8J:)LVqa4 G`9B:nYELY jYj8`. L9!\r$4h:L:a4Kpыo4L9L>ӯ` >n :L:j:$L;L::$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>!5U 1 1&70P!P!@ 0 26c+7"aCs!YcACcaq!BؓcA W !duuaK!zCs ް !! !`B%C8o6o6^_ Ğֶa43 q0Vޗu_ _ Ğ 4 1!7_ __2!__ _ _ߒ_ Ğ x AAa43 0`.n:L; o4_ )a430֚_ _ L!<`}`*M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!+L;`8n:3` ;DJ `:J8h:n ;F`;L:j:`n;YLNapKLL;j>I!0R!7n!ͽQ!@ء9 s1!C֡sۡA h >1!AP.80 .80.80a!AQ8 Q0!ͽP!@ m8ԡ9"! !ν!Bء1 > MaСe!B *`'"_ LXpJ q**13LW_ V0LW_ LN!E_ ,! LN!L_ $(0_ _ܠ_  dW!\poB~ x TTn @_ L@ n ?_ L? x UU_ pph-_  NNh-LN(`.__> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>a6ֈ Jߠ ֗  Lͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*De6e!Bء7 pcugq1ܠ A¡ACs ts`9ݗsѕ xp  `@J     `?J /`   ~#J ` 9J . LYC2L,L,__!:_` n .` n /!!)1P SCREEN EDITOR - 11/22/82 dW!\poB~ x TTn @_ L@ n ?_ L? x UU_ pph-_  NNh-LN(`.__*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g 40 8  s01p x xp   x` ;!0 8  L >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:jYh9p譠 ~~  J 0! !!``Q 8E0[!X 5LX! #*0`>ݐ`>J.` .n >'{)҂!` 8J .LVh8ҏкґݞ __a4o4L9as`9:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ .=7 h9!p t ɀȀW[  Lp x  `xw`>  x 11D 226 33'anaL;n x OO)Ӭa6cn ;ә`. !: 8J.͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 *n8LV x  nVҲ!S!V` 9J  ҷxt!30 w!\`!\oBs%߈p!^$!$(aB 8  0 ;;oBnAy aB0oB 5 w!\zy_ $ "  ÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !( $ QH2@o\E U9]+0e]${[]o] `o]v  _@o] 9]LD B_/],`o] _o] co] a o] Ϳeo] o]EIRX468271 _ - ]]d+FI *B([KSM!J5(5I *MB"M[K [M͗ͪ*0R8(B"0*2R8B0bk"2 e̓t!#w  (;( q:J*͂ ' ̪'"@lS2*MBDM*KR0*MR8 :J=(*͖*KKjKLI** ԱaLMp0kD 11q7$LJ!"`I ** !9LM*0 9 NNLJԞ--From here: --To here^ LNԆaP*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\d+Fi{t5.;KPGWSBMOCLDFQTNJE|:&f3468271 _ ԽK*B (+~# (#KB 8`i+"6+6 *+6 :+®  (yͧ> :6G:7:U:QO˹x ŁG x :S( :R(  :T~ #!0!UT] R8*K "K*M "M*@ "@*@x|27[M:J= *K 18'40#1O!K ^#V*R8*R8dE ':J !͂ ~ S227:526ͪ*E :J(T B lʹ:6262527GOz( ~(> !BDMeͭ:J(͂ BhNaR@LNooP!bq0hNaP LNKP/!: 8J.(0 DqoT`N q22 jNՄUaP q oR!N*0*0aRoRaP aRױFa4so4a6ssso6X( ɯ2*>T !Uw#6 ͈_:J̗:SĪ{!0@:*([0>!5w:6( |4:7O͖S2B+> ##( A  >O0Ax iyMO oOG*2R O  yP8O>[0S0ʹx<26:62:| !-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!w # +R(+ NOT ASCII FILE TOO BIG NAME? ERROR ERRORO!7y͗> O͗!>~>Iͧy͗͠bk> :5GyͧRy ! :<G yP0 x  G:;(yO:;0 GP  ~#yP O!5~ !T' (KK*MT]BDMe*0R0"[2*MR0 B"2 *KR0"23[MR8B"0*2B"2*K"0DM*2R0C2 "2( (,l[0|( (+B(> ~( oɯͧ rͧA!ֽ֜LN _םשoDo6aR1KPKRLNړ KPaPoPaRoRaDoDaD1pL;aRLNЋaP< y 11 44 11aPasass5 x EELN{կ_lo6:4> yOB[2ʹ:625o>26=25*R(S2ʹ :50:5G:62625o xB*B"R#DMx*R#DM"#[*RB0w~G( (#w S=qt!ͬt!Ͳ~ I>Aͧ~ #͠!S6:S!'~m5EOFO2:(8r!:(6,:5= ͠w[0S0>25*~:524G2Q 2([0|(+>2627lS0[0|(+)[0*R( |( +oB_͗!B>E|>2S(*(* ++|(2RS+:R  ( :J!_~!'=(!fz4r͈Omy2RUS=T>~ 2<> 2<2;L;` 9n :_ B x EEpLN x TT\О^H`:n:n9L;w 1p 4s_ LNև|_иaRqCPٗa4KPa6KRo6aPso6aRs o4a6o6aPo4a6s#(=(G #=:7

P=27͠ɯ27͠:4!6 N:QB[0:5!62T!T~(5!45ͧ> 25U|~ͪ4͠:6= [*0R!=!6~=5͠ɯ27<26͠ɯ27:426͠:7O2*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'Qͧ!~:5O͠ɯAͧ y>  F#fhg_!U>?|!U"=t!0!0*=~ #; "=2?J{ 0*=+"=6 ͕ zU̖yͧy>_ > ͠7(4i z +:?M8!*=sT]S=25~>_ y=̪͈͠_ ( *=6 2;U*!*4h N 4:J(ͧP(͠ 21:1A YA *T]~ # ͖* ~# >  !V  J͗ͬ}2,ͬ}2>Jo::O  2!5y(&:=(bk#~ ( (> o6o6^_ Ğֶa43 q0Vޗu_ _ Ğ 4 1!7_ __2!__ _ _ߒ_ Ğ x AAa43 0`.n:L; o4_ )a430֚_ _ L!<`}` yP8 O:4G!6~4y27͠:7 !6~=5>P=27͠:J[*Rw>E28!C~By27( (;͠>*2 +6 ͪ=>I!J>R!Q28:J~B ͗*y27͠:8I [2> _*2 ͈_(:PG{( t 2 :8E '~ ( (:8I >!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H ͕{`8˯N#! ( X(!!Xz:J * |(gS= B*|gW<([d  (h (; ɿ , (; ͠'@ 09(ͬAF(!)DM)) O ͬ(!A8O)))) ͸(<~ >!  yO0y    ( !5  (y > !: 2 ͌ͧ͘!!H SCREEN EDITOR - 11/22/82 Gr͚z /IMAGE E.COM !{͚z !+{Wrx*?j" j:Aj2"jky*?j"#j:Aj_ LXpJ q**13LW_ V0LW_ LN!E_ ,! LN!L_ $(0_ _ܠ_  dW!\poB~ x TTn @_ L@ n ?_ L? x UU_ pph-_  NNh-LN(`.__:9(w:8R( ~ # ~ ( #e29͗>*KBOB0 DM!96x 4~6T] x((F~ :8ET]R ~#~( (x(bk#   ȯ!6:7O7+~ :8E:6="2ʹ!6:7 5y27:8R ͠[2~25Ͳ:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!Ox <  +<OO eNy͖F#~*R8*R0*RB DM (* O͛* ͛(  ͛ͩfo] /](7^D^/])(o] 9]JP (7^/])o]6 9]LD (2%jmO:vGUu:vG!͘u"?j2AjNyy z`8>:vG͘u ͜p:Bjo !k"Gj6 pREAD:o ^#V#N#F#x>iw!kuybk*wMw͗zQ VERS !h@{~N#F+ws#r+q#p+>> 2cvɿN#( ASej#([ejH 2L,L,__!:_` n .` n /!!)1P SCREEN EDITOR - 11/22/82 ʞdW!\poB~ x TTn @_ L@ n ?_ L? x UU_ pph-_  NNh-LN(`.__̀!9~5m:7O{ O  :6GyP8:6!6F4!7Nw#"2+{ xFs!5w 4(!B0>@ͭͲx :8RH>!: ( >P0WzyFͧ>  ͠1ʚ2ʿ3[[)27OB[2ʹy27o> +' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈* :_!$=(x 0x ͋ >Z x ͋ >Z O0#!!z w#w#w(>V#N#~$#~+: ~@##> ~. #> >  >Gx( ~ #x (@8Z80(.`8}8&($!6~0(4:J*B**e::25H*!~G># 6 S2(y27͠Oʥ:J*t*!Ͳ*# "BͲ &n >N2E*(N !ͬ h!2E"@!Dw: wB(| !<zɯ2F2I<25DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨/898(!8)8(+( -(\(^ x ((#!!z OW_}T]Oů)lau!t"w#͞ x( >!͹   ͞ x( >"͹   S)lgx !!GH 4 # (  >>KBo] *B~!02HK*BDM~!N~ ({: N~ :D*( :G(~#(:H/o8%#R0w!"@*B~(G#~:EN S2!"@2D>2G2F~!G~(5:E* or(>2I*@+"@|#(~'RDMe:F:E* !5:I (0ՒLN qXp qp`>Jn9թݞs! 10 8 5 p!Zo6ӓRCn ;_ x OOILNԸ!,0oF3p x nnNnI ** NNp!Ԣ1nIoD!H.8>g(ok > k}͈(ɯ21:((Ì *."i!N#T]> wh  ͪ !+~|  DM*` "W ( ! >2( ͧ:*=H ̓,̆> <2+( ͽ *d~#bk̓{8>(O ! ]!v")]Gr> []e^e]Wr*)]e][]e]N#[]́]͘]e]>0{S+][)]S)][+]ͯyo]*+]w#"+]o]og}(%#o]oo]gXxe] ~ N#y( >+>0y${[]ɯ2.]e]>!8{!( (,(( GH L( []:.]=>5NN :Fhͪ:J=* *K R* #oe R8 *0R8 "0ͪSOd ͖"M! !J4ѯ--From here: --To here^ :J* ͖"K! !J4:J=**KR*e!6~04ͪͭBSO2!J~ *5B`̈́.8F q3!"mLJLML9aF 8BnLaCsӞ! 9 8  ILLH**LK 80.xp!q-` LSsַMDaF 80 8.xpLINNo6MDLHnKnJ 8.xL! 7 ( !E yK *BR0 !" PYl (E ( ~ +> +R8!R !7 (Wy(KB͖(ͽ `il (W!ͽ bk ` RDMeW!R ! WF   ZZP<^ ^ ^ ^h^ OE \(0ՒLN qXp qp`>Jn9թݞs! 10 8 5 p!Zo6ӓRCn ;_ x OOILNԸ!,0oF3p x nnNnI ** NNp!Ԣ1nIoD!H.8  w>`AaB.?7poBL9f_1 _$J#   aB 5 \  `` 904!^    XX!$!>)CLNa 00oBa00ӬRa+̞6 {p {u  ! `.k`̈́.8F q3!"mLJLML9aF 8BnLaCsӞ! 9 8  ILLH**LK 80.xp!q-` LSsַMDaF 80 8.xpLINNo6MDLHnKnJ 8.xL;,<>=* !! ~~ ! TE x  p x     ;;C x   ,,   ;;Cp00 99ݞ x 00 99 p 0 Ҟ 4ϗEsބ03s߁3 9EIRX468271 _ -  ***00@.;KPGWSBMOCLDFQTNJJ|p,pHtJz z468271 _ ԽPFILE TOO BIG NOT ASCIKjKLI** ԱaLMp0kD 11q7$LJ!"`I ** !9LM*0 9 NNLJԞ--From here: --To here^ LNԆaP[p q ph> t Ѝa6D`:n9|`.n:n9K po6Y`9(`:B9n:n9О dL-RF GType 'X' to reenter\nT0}2?}:NU40140aK`[ PKaPo.[ n[aP .[ `:`;``!4MZ!ֽ֜LN _םשoDo6aR1KPKRLNړ KPaPoPaRoRaDoDaD1pL;aRLNЋaP< y 11 44 11aPasass5 x EELN{կ_lo6ao1q1psa1qsos9p0aCC qp x  0.8poB.9Ѧ1tѫ! 4Cs 1a0 xp p 00`x4 x󠁩pp x 80MZ DMZaZ 8iZ ``ӯ` >n :L:j:$L;L:!5U 1 1&70P!P!@ 0 26c+7"aCs!YcACcaq!BؓcA W !duuaK!zCs ް !! !`B%C8o6o6^_ Ğֶa43 q0Vޗu_ _ Ğ 4 1!7_ __2!__ _ _ߒ_ Ğ x AAa43 0`.n:L; o4_ )a430֚_ _ L!<`}`+L;`8n:3` ;DJ `:J8h:n ;F`;L:j:`n;YLNapKLL;j>I!0R!7n1!AP.80 .80.80a!AQ8 Q0!ͽP!@ m8ԡ9"! !ν!Bء1 > MaСe!B *`'"_ LXpJ q**13LW_ V0LW_ LN!E_ ,! LN!L_ $(0_ _ܠ_  dW!\poB~ x TTn @_ L@ n ?_ L? x UU_ pph-_  NNh-LN(`.__a6ֈ Jߠ ֗  Lݐ`>J.` .n >'{)҂!` 8J .LVh8ҏкґݞ __a4o4L9as`9.=7 h9!p t ɀȀW[  Lp x  `xw`>  x 11D 226 33'anaL;n x OO)Ӭa6cn ;ә`. !: 8J.n8LV x  nVҲ!S!V` 9J  ҷxt!30 w!\`!\oBs%߈p!^$!$(aB 8  0 ;;oBnAy aB0oB 5 w!\zy_ $ "                       ! ! " " # # $ $ % % & & ' ' ( ( ) ) * * + + , , - - . . / / 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < = = > > ? ? @ @ A A B B C @@@@@@@@@@@@@@@@@@@@@@@@@@C @@@@@@@@@@@@@@@@@@@@@@@@@@D @@@@@@@@@@@@@@@@@@@@@@@@@@D @@@@@@@@@@@@@@@@@@@@@@@@@@E @@@@@@@@@@@@@@@@@@@@@@@@@@E @@@@@@@@@@@@@@@@@@@@@@@@@@F @@@@@@@@@@@@@@@@@@@@@@@@@@F @@@@@@@@@@@@@@@@@@@@@@@@@@G @@@@@@@@@@@@@@@@@@@@@@@@@@G @@@@@@@@@@@@@@@@@@@@@@@@@@H @@@@@@@@@@@@@@@@@@@@@@@@@@H @@@@@@@@@@@@@@@@@@@@@@@@@@I @@@@@@@@@@@@@@@@@@@@@@@@@@I @@@@@@@@@@@@@@@@@@@@@@@@@@J @@@@@@@@@@@@@@@@@@@@@@@@@@J @@@@@@@@@@@@@@@@@@@@@@@@@@K @@@@@@@@@@@@@@@@@@@@@@@@@@K @@@@@@@@@@@@@@@@@@@@@@@@@@L @@@@@@@@@@@@@@@@@@@@@@@@@@L @@@@@@@@@@@@@@@@@@@@@@@@@@