IMD 1.16: 31/05/2007 20:41:39 FOGCPM.149 --FOGCPM149BARG COM -09-00 86 BARG DOCBARG PAS:CALC COM  CALC DOC!CALC Z80\"#$%&'()*+,-GRAPH-DRDOCs./0123456789:;<GRAPH-DRBASR=>?@ABCDEFGG-CHANGEBASHIJKGR-DR-3DBASLMNGR-DUMP BASOGR-DUMP1BASPGR-PRCNTBASQRSGR-PRINTBASTUVWMENU BAS XYMENU-2 BASZRANDOM DTA[REVERS-PBAS!\]^_`SOLITAIRBAS(abcdeSQUABBLEBAScfghijklmnopqrSUBSERCHBASstuvAUTOST COMwCUBIST BASxGR-MENU DOC yzLEMANS BAS+{|}~GRAPHIC2COMOGRAPHIC2DOC GRAPHIC2PASOZ1MEM COMOZ1MEM DOCOZ1MEM AZM%TEACH3 COMTEACH3 DOCTEACH3 ASMXTEACH DOC-CPM149 DOC This is the disk name. ͫCopyright (C) 1984 BORLAND IncA Osborne 1al selected)(= ERT()~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!͍!@Ͳâ@}2R!*R&5z- "Z!*W&*Z!Rͽ*Z#!*W&!!5zʳ "b!(!Ŕ-Span too narrow-!b!2B!(!Ŕ b!2B*b#E !Ŕ Graph title:b!q+4.b!!r!f͡ŔValue/block is now: !r!!@́ New value:b!d+ ._b!d !r!Z͝*Z!a!d \}o!r!sXQ͸}oE!!f!r͡ŔPlease re-enter!b !*W&!ͽ!ŔDefine the minimum scale value:b!d+ ._b!d !l!Z͝*Z!a!d \}oEʄ"ŔPlease re-enter!b!!*W&!ͽ!!ŔLow--high bars ? Y/N :b!8!Sb*S&(Q!Na!YaEʯ"*S&(}2SR*S&!b!Ŕ Name of bar #*\!!:b!*W&R!<b!*W&!*\+)))+ .b*S&!YNEʫ$!ŔLowest value of !*\+))) !q́ :b!d+ ._b!d !*\+)]T)!Z͝*Z!a!d \}o!*\+)]T)!P͸}o!*\+)]T)!PCͥ}oEʖ$!"*W&!ŔPlease re-enter!bm#!*W&!ͽ!(*W&ͽ*S&!YNE$ŔHigh bŔValue of this bar:b!d+ ._b!d !x*\+)]T)!Z͝*Z!a!d \}o!x*\+)]T)!PCͥ}o!x*\+)]T)!P͸}o*S&!YN!x*\+)]T)!*\+)]T)͸}o}oE&!(*W&!ŔPlease re-enter!bͬ$!*W&!ͽ*T&(!Ca*T&(!Ia}o*\!ͯ}oEʰ&Ŕ More? Y/N :b!8!Ub*U&(}2U*U&Q!Na!YaEx&!P*\+)]T)!x*\+)]T)͡*S&!YNE,'!x*\+)]T)!P*\+)]T)!*\+)]T)ͼ ͡!2B!$!Z͡!$t!`͡!*\5za("b*S&!NN!x*b+)]T)!`͸}oEʹ'!x*b+)]T)!`͡*S&!YN!*b+)]T)!`͸}oE (!*b+)]T)!`͡!P*b+)]T)!ZͥEK(!P*b+)]T)!Z͡!`!f͡*b#^'!`!ͥ*S&!NN}oEʛ(!!`͡!`!͸!Z!ͥ}o*S&!YN}oE(!4}2V(!:}2V!Z!͸*S&!NN}oEE)!`˸*V& !r͡v)!Z!`ͼ ˸*V& !r͡!r!͑Eʞ)!!$͡!r!͑E)!!$͡!r!͑E)!!$͡!r!͑E*!!$͡!r!d͑E>*!d!$͡!r!2͑Ef*!2!$͡!r!͑Eʎ*!!$͡!r! ͑Eʶ*! !$͡!r!͑E*!!$͡!r!͑E+!!$͡!r!͑E.+!!$͡!r!͑E\+!!$͡!r!~L͑Eʊ+!~L!$͡!r!}L͑Eʸ+!}L!$͡!r!|L͑E+!|L!$͡!r!{p= #͑E,!{p= #!$͡!r!zp= #͑EB,!zp= #!$͡!r!yp= #͑Ep,!yp= #!$͡!r!xn͑Eʞ,!xn!$͡!r!wn͑E,!wn!$͡!r!vn͑E,!vn!$͡!r!tXQ͑E(-!tXQ!$͡!$˸!r͡!Z!r ! ͙! "b*b! R"b!`*b!r !w -!r ͼ }Ek-*b!r !l͡!ŔFor changes, press:͐bŔA1: title, 2: scale factor, 3: min scale, 4: bar change, else b!8!Ub*U&Q!1!4k! aEP.!2B*U&1Rš.ʹ 02R±.! 03R.!!04R0!*\"^!"\Ŕ6Enter number of bar to be changed or added, else :b!d+ ._b!d !\!X͞*\!t*\!͇}o*X!N}oE/"m#ͬ$*\*^͇Eʕ/*^"\3'*S&!YN!r!tXQ!Z ͸}oE/: -/R!b*\*^͇*\!͛}oE0*^"\cŔ !q !q͐b*&!NEZ0R͐b!r!}L͸Eʁ0!"XÇ0!"XŔ b!!5z0"`!l*`!r !  ͳ R! *X@b*`#â0R͐bŔJ |+++++++++|+++++++++|+++++++++|+++++++++|+++++++++|++++++++͐b!*\5z8"`!*`+))) m}2*&!NE4*S&!YNE2!x*`+)]T)˸!r ͙!"!*`+)]T)!lͼ !r ͙"*S&!NNE3!l!}!x*`+)]T)!}}oEʻ2!x*`+)]T)!r !l!r ͼ ͙!"!"!l!͸!x*`+)]T)!}}oEK3!x*`+)]T)!r ͙!"!lxG!r ͙"!l!͑!x*`+)]T)!͸}oE3!x*`+)]T)˸!r !ͳ ͙"*}/o|/g#!l!r ͼ ͙!"*`R!́ !*`+))) *&qb!! *&R5zb4"R! b*#D4R!|b!*5zʗ4"R! b*#y4R!b!*5z4"R!Ib*#î4R͐b8*S&!YNEʂ5!x*`+)]T)˸!r ! ͙"!*`+)]T)!r !l!r ͼ ! ͙!"*S&!NNE7!l!}!x*`+)]T)!}}oE46!x*`+)]T)!r !l!r ͼ ! ͙"!"!l!͸!x*`+)]T)!}}oE6!x*`+)]T)!r ! ͙"!!l!r ! ͙R"!l!͑!x*`+)]T)!͸}oE7!x*`+)]T)˸!r ! ͙"!!lxG!r !x*`+)]T)!r ͳ ! ͙"**!!"**!!"Ŕ !*`+))) *&qb!! *&R5zS8"R! b*#58ŔbŔK**b!*5zʠ8"R!b*#Â8R!b!*!R5z8"R!b*#8Ŕ@͐b*`#d1ŔJ  |+++++++++|+++++++++|+++++++++|+++++++++|+++++++++|++++++++͐b!}2!ŔEnter number of bar to delete:b!d+ .b!d !`!Z͞*Z!N*`*\͇}o*`!͛}o!d o}oEt;*`*\!R5z:"b!*b+)))!*b!+)))  !*b+)]T)!*b!+)]T)͡!x*b+)]T)!x*b!+)]T)͡!P*b+)]T)!P*b!+)]T)͡*b#9*\!R"\*\!!5z^;"b!*b+))) !*b+)]T)!͡!x*b+)]T)!͡!P*b+)]T)!͡*b#:*\!͛Eq;3'À;R!b!*\!ͯE@=ŔEnter number of bar to insert:b!d+ .b!d !`!Z͞*\!"b*Z!N*`*\͇}o*`!͛}o!d o}oE1=*b*`͛E=*b!R"b!*b!+)))!*b+)))  !*b!+)]T)!*b+)]T)͡!x*b!+)]T)!x*b+)]T)͡!P*b!+)]T)!P*b+)]T)͡,<*\!"\*\"^*`"\"m#ͬ$*^"\3'==R!bL=R!b*T&!RNE2?c!!5z="\!*\+))) !x*\+)]T)!͡!*\+)]T)!͡!P*\+)]T)!͡*\#m=Ŕ!-Graph Program- Max no of bars: !!́ --Use ^H as delete key--b!}2Wʹ !!Ŕ--Start entering bar data--͐b!}2W!"\!Y}2U*U&!YN*\!ͯ}oE>*\!"\*\!NE>ͅ""m#ͬ$Ï>3'*S&!YN!r!tXQ!Z ͸}oE/?: -! }2T3'0!"X!Ŕ;(P)rint--Ready printer (D)elete bar (I)nsert bar (R)e-do͐bŔ6(C)hanges-- or add bar (A)utoscale (S)top ?b!8!Tb*T&(Q!Aa!Ca!Da!Ia!Pa!Ra!SaE?*T&(}2T*T&SR:@!BÛ@PRN@!}2Û@RR^@M=Û@CRn@-Û@AR~@3'Û@DRŽ@V9Û@IR›@́;0M=!R}2TM=B,@PRP!}2B@RRRM=V@CRC-f@ARA3'v@ Instructions for using BARG graph program Thi progra i writte i TurbPasca an i supplie i bot compile an sourc cod versions I wil plo simpl ba graph wit typed-i inputs Th maximu numbe o bar i arbitraril se a 18--i orde t b abl t vie th complet grap o scree withou scrolling. Some of the features of this program are: 1 Auto-scaling th parameter o whic ma late b change b the user. A 1-2-5 sequence is used. 2 Yo hav th abilit t chang al input an t delete insert and add bars. 3) Accepts plus & minus, single value or min-max type inputs. 4 Print grap usin th graphi capabilitie o a Epson-typ printer (Th printe grap ha time th resolutio o th scree graph). 5) Protection from most input errors--not guaranteed! 6) One-key menu selections. 7) Bars are numbered on the screen as an aid in making changes. Specifications: 1) Maximum number of bars.................18 2) Input limit............................50000 3) Bar label length.......................9 characters 4) Printer port...........................Parallel 5) Title length...........................52 characters 6) Screen width...........................80 characters (Will operate with 52--with scrolling) Usin th program: Fo th compile version a A> ente BARG Yo wil b aske fo th title T omit hi RET Next selec Min-Ma typ bar --Y/N I `Y i selected tw value fo eac ba mus b entered Ente dat fo eac ba i th graph answerin `Y t More unti finished I th answe i `N' th grap wil b plotte o th screen men o choice i the presente o th screen: (A)utoscale..I yo goo u th scal manually Aut wil brin it back to the original settings. (C)hanges....Another menu is shown: 1:title 2:scale factor 3:min scale 4:change (or add) a bar. (D)elete.....delete a bar. (I)nsert.....insert a bar into the present graph. (P)rint......print the graph on an Epson style printer. (R)e-do......start over. (S)top.......stop the program and return to the system. Some limitations: 1) Narrow spans relative to values are rejected (min-max type) 2) Auto-scaling may not be optimum--change manually to suit. 3) Minimum scale for all + inputs is 0. For +/- and min-max bars, minimum scale adjusts for best fit. Any of the above may be adjusted manually before printing. Other comments: Fo seria printers chang IObyt fro t i th appropriate places. Fo non-graphi printers delet graphi printin section o procedur `Print' an us th scree prin section Har cop wil the resembl th scree graph. suggestio fo Pasca programmers--ad a Includ modul fo savin grap parameter t dis file Th progra woul the be useful for tracking stock prices. The hard copy bars are hollow. To change to solid bars, change #129 to #255 in the print procedure. apologiz fo th packe code bu i jus take to lon t print a listing otherwise. E Buttenhof | Computer Osborn 1 DD 80-104 col. 807 7th St NW | 1.43 ROM Gran Rapids M 5574 | Printer Epso MX80F 218-326-2619 FOG #8115 | Lang. : TurboPascal 2 her comments: Fo seria printers chang IObyt fro t i th appropriate places. Fo non-graphi printers delet graphi printin section o procedur `Print' an us th scree prin section Har cop wil the resembl th scree graph. suggestio fo Pasca programmers--ad a Includ modul fo savin grap parameter t dis file Th progra woul the be useful for tracking stock prices. The hard copy bars are hollow. To change to solid bars, change #129 to #2Program Barg; {12/11/1984 Ewb} Const Prmpt='Please re-enter';Grid= ' |+++++++++|+++++++++|+++++++++|+++++++++|+++++++++|++++++++'; F=18; {Max bars} Type N=string[9]; Var Vh,Mn,V:array[1..F]of real; {Bar vals} VB,M,L,Le,Mo:real; {Value/block, Min scale and Min-Max of inputs} na:array[1..F]of N; {Bar names} T:string[52]; {Title} Amt:string[12];{Holds inputs until checked} I,J,D,A,B,E:Integer;G,Y:Byte; ch,ca,Cha:char; {Char inputs} IObyte:Byte absolute $0003; {Lst device} Procedure Blk(X:Byte); begin For B:=1 to X do begin GotoXY(1,G+B-1);ClrEOL;end;GotoXY(1,G); end; Procedure Msg; begin For I:=1 to 6 do begin GotoXY(40,24);Write('-Span too narrow-',^G);Delay(50); GotoXY(40,24);Write(' ');Delay(50);end; end; Procedure Title; begin Blk(2);Write('Graph title:');Read(T); end; Procedure Scale; begin Blk(1);L:=Vb;Write('Value/block is now: ',Vb:8:4,' New value:'); Readln(Amt);Val(Amt,Vb,B);If (b<>0)or(Amt='')or(Vb<0.0001) then begin VB:=L;write(Prmpt,^G);Scale;end;GotoXY(1,G+1);ClrEOL; end; Procedure Min; {Minimum scale} begin Blk(1);Write('Define the minimum scale value:'); Readln(Amt);Val(Amt,M,B);If (B<>0)or(Amt='')then begin write(Prmpt,^G);Min;GotoXY(1,G+1);ClrEOL;end; end; Procedure LHbar; begin GotoXY(20,17);Write('Low--high bars ? Y/N :'); Repeat Read(kbd,Cha);until Upcase(Cha)in['N','Y'];Cha:=Upcase(Cha); Write(chr(ord(Cha)+128)); end; Procedure Nam; begin Blk(2);write('Name of bar #',A:2,':'); GotoXY(26,G);Write('<');GotoXY(17,G);Read(na[A]); end; Procedure Minb; begin If cha='Y'then begin Blk(1);Write('Lowest value of ',Na[A],' :');Readln(amt); Val(Amt,Mn[a],B);If(B<>0)or(Amt='')or(Mn[a]<-5E4)or(Mn[A]>5E4)then begin GotoXY(34,G+1);Write(prmpt,^G);Minb;end;GotoXY(1,G+1);ClrEOL;end; end; Procedure Value; begin GotoXY(40,G);ClrEOL;If cha='Y'then write('High '); Write('Value of this bar:');Readln(amt);Val(Amt,v[a],B); If(B<>0)or(Amt='')or(V[a]>5E4)or(V[a]<-5E4)or((Cha='Y')and (V[a]'C')and (Upcase(ca)<>'I')and(AMo then Mo:=Vh[I];L:=Le;end;If(Le>0)and(Cha='N')then Le:=0;If(Le<0) and(Mo>0)or(Cha='Y')then Y:=52 else Y:=58; If(Mo<0)and(Cha='N')then Vb:=Abs(Le)/Y else Vb:=(Abs(Mo-Le))/Y; If Vb<=2000 then Vc:=2000; If Vb<=1000 then Vc:=1000; If Vb<=500 then Vc:=500; If Vb<=200 then VC:=200; If Vb<=100 then Vc:=100; If Vb<=50 then Vc:=50; If Vb<=20 then Vc:=20; If Vb<=10 then Vc:=10; If Vb<=5 then Vc:=5; If Vb<=2 then Vc:=2; If Vb<=1  then Vc:=1; If Vb<=0.5 then Vc:=0.5; If Vb<=0.2 then Vc:=0.2; If Vb<=0.1 then Vc:=0.1; If Vb<=0.05 then Vc:=0.05; If Vb<=0.02 then Vc:=0.02; If Vb<=0.01 then Vc:=0.01; If Vb<=0.005 then Vc:=0.005; If Vb<=0.002 then Vc:=0.002; If Vb<=0.001 then Vc:=0.001; If Vb<=0.0005 then Vc:=0.0005; If Vb<=0.0002 then Vc:=0.0002;Vb:=Abs(Vc); I:=Round(Mo/VB/8)*10;Repeat I:=I-10;until Le>=I*Vb-0.0011*Vb;M:=I*Vb; end; Procedure Corr; begin Blk(2);Writeln('For changes, press:'); Write('1: title, 2: scale factor, 3: min scale, 4: bar change, else '); Repeat Read(Kbd,ch);Until ch in['1'..'4',#13];Delay(50);case ch of '1': Title;'2':begin Blk(2);Scale;end;'3':begin Blk(2);Min;end;'4':begin Blk(2); D:=A;A:=0;Write('Enter number of bar to be changed or added, else :'); Readln(Amt);Val(amt,A,E);If(A >=1)and(A<=F)and(E=0)then begin Nam;Minb; Value;If A<=D then A:=D;Auto;If(Cha='Y')and(Vb<0.0002*Mo)then begin Msg; Corr;end;end else Write(^G);If(A<=D)or(A>F)then A:=D;end;end; end; Procedure Print; Var C,L,R,R1,R2,S:Integer;K:Byte; begin Clrscr;Writeln(' ',T);If IObyte=2 then Writeln; If Vb<0.1 then E:=2 else E:=0; Write(' ');For J:=0 to 5 do write(M+J*VB*10:10:E);Writeln;Writeln(Grid); For J:=1 to A do begin {Plot `A' no. of bars}K:=Length(Na[J]); If IObyte=128 then begin {Plot screen bar} If Cha='Y'then begin {Calc min-max bar} R:=Round(Abs(V[J])/Vb)+1;S:=Round((Mn[J]-M)/Vb);end; If cha='N'then begin If(M>=0)and(V[J]>=0)then begin R:=Round(V[J]/Vb-M/Vb)+1;S:=0;end; If(M<0)and(V[J]>=0) then begin R:=Round(V[J]/Vb)+1;S:=Round(-M/Vb);end; If(M<=0)and(V[J]<0) then begin R:=Round(Abs(V[J])/Vb+1); S:=Round(-R-M/Vb)+1;end;end; write(J:2,' ',na[J]:K);For L:=1 to 10-K do Write(' ');Write('|'); For c:=1 to S do Write(' ');Write(#8);for c:=1 to R do write('I');Writeln; end else begin {Plot bar with printer graphics} If cha='Y'then begin R:=Round((Abs(V[J])/Vb)*6);S:=Round((Mn[J]/Vb-M/Vb)*6)+2;end; If cha='N'then begin If(M>=0)and(V[J]>=0)then begin R:=Round((V[J]/Vb-M/Vb)*6);S:=2;end; If(M<0)and(V[J]>=0) then begin R:=Round((V[J]/Vb)*6);S:=2-Round(M/Vb*6);end; If(M<=0)and(V[J]<0) then begin R:=Round((Abs(V[J])/Vb)*6); S:=2+Round((-M/Vb+(V[J]/Vb))*6);end;end; R1:=(R+S+1)mod 256;R2:=(R+S+1)div 256; Write(' ',na[J]:K);For L:=1 to 10-K do Write(' ');Write(#156#8); Write(#27#75,char(R1),char(R2));For c:=1 to S do Write(char(0));Write(#255); For c:=1 to R-1 do Write(#129);Writeln(#255#27#64);end;end;{End Epson G} Writeln(Grid);IObyte:=128; end; Procedure Del; begin Blk(2);Write('Enter number of bar to delete:');Read(Amt);Val(Amt,J,B); If(B=0)and(J<=A)and(J>0)and(Amt<>'')then begin For I:=J to A-1 do begin Na[I]:=Na[I+1];Mn[I]:=Mn[I+1];V[I]:=V[I+1];Vh[I]:=Vh[I+1];end;A:=A-1; For I:=A+1 to F do begin Na[I]:='';Mn[I]:=0;V[I]:=0;Vh[I]:=0;end; If A>0 then Auto;end else Write(^G); end; Procedure Insert; begin Blk(2);If A0) and(Amt<>'')then begin While I>J do begin I:=I-1;Na[I+1]:=Na[I]; Mn[I+1]:=Mn[I];V[I+1]:=V[I];Vh[I+1]:=Vh[I];end;A:=A+1;D:=A;A:=J;Nam; Minb;Value;A:=D;Auto;end else Write(^G);end else Write(^G); end; Procedure Pm; {Program manager} begin If ca='R'then begin clrscr;For A:=1 to F do begin Na[A]:='';V[A]:=0;Mn[A]:=0;Vh[A]:=0;end; Write('-Graph Program- Max no of bars: ',F,' --Use ^H as delete key--'); G:=4;Title;GotoXY(17,15);Writeln('--Start entering bar data--');G:=23; A:=0;Ch:='Y';While(ch='Y')and(A2"S!W! W>22:*~ (O! '#0!4 : G:x *wX! :+g!5(*#"*#"!5 !T]# +6: H!/[ !Wð(too big) 0!+T]+!6! "'Sw#.&)#"!#(2!*+"|H*2![K>2'#:=2 8!4*[S":o#2:!! '#P!+(08 !,:2!!!'#!<PL>0# 6 [!<~ 60!+~ 60#~0 +~0# ++>.~ (>,:(>-*|0$"F> !(= > (w#F2O+w" b: >>;-($+(/(* 22>+22 2<2;b".:0B08>(hy. :<2]y.>,>~} wx +(p-(l*(h/(dx 3[:  00O- >00~ - ~,(.-~. 33O[,6,,Â2!W*6-\ð*6 \*[(0w+6T] {->R$ INPUT BALANCE (ESC exit ^R restart ^C clear ^E erase line) !T]# +6: H!/[ !Wð(too big) 0!+T]+!6! "'Sw#.&)#"!#(2!*+"|H*2![K>2'#:=2 8!4*[S":o#2:!! '#P!+(08 !,:2!!!'#!<PL>0# 6 [!<~ 60!+~ 60#~0 +~0# ++>.~ (>,:(>-*|0$"F> !(= > (w#F2O+w" b: >>;-($+(/(* 22>+22 2<2;b".:0B08>(hy. :<2]y.>,>~} wx +(p-(l*(h/(dx 3[:  00O- >00~ - ~,(.-~. 33O[, For the Osborne 1 & Vixen only, due to the use of their memory-mapped video capability. A simple calculator program that can add, subtract, multiply, and divide (to 2 decimal places). Ten lines are displayed before scrolling begins. Type in a number and then press one of the following: + - * / (or any other key). If you press any other key, then at the '>' on the next line, press one of the above symbols (or any other key) and the next number. If you pressed any other key at the '>', a '+' will be entered. Press ESC to exit Press CTRL-R to restart Press CTRL-C to clear screen & restart Press CTRL-E to erase current line For use in the Public Domain, not to be used for profit. written in Z80, July, 1986, by Doug Cox 140 Monroe Dr Palo Alto, Ca. 94306 (415) 949-0624 , not to be used for profit. written in Z80, July, 1986, by Doug Cox;CALC.Z80 by Doug Cox, July 1986 ;A calculator program for the Osborne 1 & Vixen. It adds, subtracts, ;multiplies, or divides 2 numbers by putting them in 2 arrays in reverse ;order as hex numbers (2 numbers in each hex number) and operating on them ;in that format. The result is then changed back to a decimal number and ;displayed. ORG 100H LD (CPMSTK),SP LD SP,STACK JR START2 LENGTH EQU 7 ;length of hex number array LENGTH2 EQU LENGTH*2 ;length of decimal number array BDOS EQU 5 SPACE EQU 20H CLSCR: LD E,1AH LD C,2 CALL BDOS ;clear screen RET START: POP BC ;RET address from CALL INIT START2: CALL CLSCR LD DE,MOVCUR LD C,9 ;print string CALL BDOS ;move cursor off the screen LD DE,0F000H ;top left of Osborne 1 screen in memory LD HL,BANNER ;' Input Balance etc LD BC,80 LDIR XOR A ;zero A LD (NSIGN),A ;initialize next sign LD DE,0F100H ;first line for input LD (LINE),DE ;for incrementing line LD HL,ARRAY2 ;HL ends up at ARRAY1 af ter initialization CALL INIT ;read keyboard & put input in (DE) & (HL) LD A,(SIGN) LD (RESIGN),A ;initialize result (& initial input) sign LD DE,0F200H LD (LINE),DE ;for incrementing line NEXT: LD HL,LINE ;HL ends up at ARRAY2 after init CALL INIT LD BC,LENGTH2 LD HL,TSTOR ;initialize temp storage location LD (HL),SPACE CALL CLRBUF LD DE,(LINE) LD A,(DE) CP '*' JR Z,MULT CP '/' JP Z,DIV JP ADD ;MULTIPLICATION from Levanthal's "Z80 A/L Subroutines", p.254 MULT: LD HL,ARRAY1 LD A,LENGTH LD (LPCNT),A LD (MCADR),HL LD DE,MCAND LD (NBYTE),DE LD BC,LENGTH LDIR LD HL,ARRAY1 CALL ZEROBUF LD HL,PROD CALL ZEROBUF LOOP: LD A,1 LD (DCNT),A DLOOP: SUB A LD (OVRFLW),A LD A,(DCNT) OR A LD HL,(NBYTE) LD A,(HL) JR NZ,DLOOP1 RRCA RRCA RRCA RRCA DLOOP1: AND 0FH JR Z,SDIGIT LD C,A ADDLP: LD HL,ARRAY2 LD DE,PROD LD B,LENGTH OR A INNER: LD A,(DE) ADC A,(HL) DAA LD (DE),A INC HL INC DE DJNZ INNER JR NC,DECND LD HL,OVRFLW INC (HL) DECND: DEC C JR NZ,ADDLP SDIGIT: LD A,(PROD) AND 0FH LD B,A LD A,(DCNT) OR A LD A,B JR NZ,SD1 RRCA RRCA RRCA RRCA SD1: LD HL,(MCADR) OR (HL) LD (HL),A LD B,LENGTH LD E,B LD D,0 LD HL,PROD ADD HL,DE LD A,(OVRFLW) SHFTLP: DEC HL RRD DJNZ SHFTLP LD HL,DCNT DEC (HL) JR Z,DLOOP LD HL,(NBYTE) INC HL LD (NBYTE),HL LD HL,(MCADR) INC HL LD (MCADR),HL LD HL,LPCNT DEC (HL) JR NZ,LOOP LD HL,ARRAY1 LD D,H LD E,L INC HL LD BC,LENGTH DEC C LDIR ;move it over 1 to keep 2 decimal places DEC HL LD (HL),0 LD A,(PROD) ;check for number too large to fit OR A JP Z,STORE ;it's okay LD HL,TOOBIG LD DE,(LINE) LD E,0FH LD BC,12 LDIR EREXIT: LD HL,ARRAY1 CALL ZEROBUF JP NEXLIN TOOBIG: DB '(too big) 0' ;DIVISION from Levanthal's Z80 A/L Routines, p. 260 DIV: LD HL,ARRAY2 ;I had to add this part DEC HL ;to the end of ARRAY1 LD D,H LD E,L DEC HL LD BC,LENGTH-1 LDDR ;move hex number over 1 space in array LD HL,ARRAY1 LD (HL),0 ;add a 0 at the small end of the hex number LD HL,HIDE1 ;see Levanthal for comments LD (HDEPTR),HL LD DE,HIDE2 LD (ODEPTR),DE XOR A LD B,LENGTH INITLP: LD (HL),A LD (DE),A INC HL INC DE DJNZ INITLP LD L,LENGTH LD H,0 ADD HL,HL INC HL LD (COUNT),HL LD HL,ARRAY2 LD B,LENGTH XOR A DV01: OR (HL) INC HL DJNZ DV01 OR A JR Z,EREXIT XOR A LD (NDIGIT),A DVLOOP: LD HL,ARRAY1 CALL RLARY LD HL,(COUNT) DEC HL LD (COUNT),HL LD A,H OR L JP Z,STORE LD HL,(HDEPTR) CALL RLARY XOR A LD (NDIGIT),A SUBLP: LD HL,ARRAY2 LD DE,(HDEPTR) LD BC,(ODEPTR) LD A,LENGTH LD (CNT),A OR A INNER2: LD A,(DE) SBC A,(HL) DAA LD (BC),A INC HL INC DE INC BC LD A,(CNT) DEC A LD (CNT),A JR NZ,INNER2 JR C,DVLOOP LD HL,NDIGIT INC (HL) LD HL,(HDEPTR) LD DE,(ODEPTR) LD (HDEPTR),DE LD (ODEPTR),HL JR SUBLP RLARY: LD B,LENGTH LD A,(NDIGIT) SHIFT: RLD INC HL DJNZ SHIFT  LD (NDIGIT),A RET ;from Levanthal ADD: LD DE,ARRAY1 ;previous (or original) number LD B,LENGTH ;length of ARRAY1 & ARRAY2 for DJNZ LD A,(RESIGN) LD HL,SIGN CP (HL) LD HL,ARRAY2 ;current input number JR NZ,SUBTR ;input & previous result have dissimilar signs ADDLOP: LD A,(DE) ADC A,(HL) DAA LD (DE),A ;result in ARRAY1 INC HL INC DE DJNZ ADDLOP JR STORE ;before subtracting, check to see if negative number will result SUBTR: LD DE,ARRAY1+LENGTH LD HL,ARRAY2+LENGTH SUBCHK: DEC DE DEC HL LD A,(DE) CP (HL) JR Z,SUBCONT ;(DE) = (HL) JR NC,SUBSKP ;(DE) > (HL) JR C,EXCH ;(DE) < (HL) SUBCONT:DJNZ SUBCHK SUBSKP: LD DE,ARRAY1 LD HL,ARRAY2 JR SUBSK2 ;exchange numbers in arrays before subtracting EXCH: LD A,(RESIGN) XOR 1 LD (RESIGN),A ;negative result flag EXCH2: LD HL,ARRAY2 LD DE,TEMP LD BC,LENGTH LDIR ;put (ARRAY2) in (TEMP) LD HL,ARRAY1 LD DE,ARRAY2 LD BC,LENGTH LDIR ;put (ARRAY1) in (ARRAY2) LD DE,ARRAY1 LD HL,TEMP LD BC,LENGTH LDIR ;put (TEMP) in (ARRAY1) XOR A ;clear carry JR SUBSKP ;subtract from Levanthal SUBSK2: LD B,LENGTH SUBTLP: LD A,(DE) SBC A,(HL) DAA LD (DE),A INC HL INC DE DJNZ SUBTLP ;put in temp storage while converting hex numbers to ascii numbers ; & replacing leading 0's with spaces STORE: LD DE,ARRAY1 ;hex numbers in ARRAY1 are reversed LD B,LENGTH LD HL,TSTORE ;end of temp storage loc LOOP2: LD A,(DE) CALL HEX2 LD A,(DE) CALL HEX1 INC DE DJNZ LOOP2 LD A,'0' LOOP3: INC HL CP (HL) JR NZ,DISPLAY LD (HL),SPACE ;replace leading 0's with spaces JR LOOP3 DISPLAY:LD DE,(LINE) LD E,1AH ;column for right side of balance LD HL,TSTORE ;right side of stored balance LD A,(HL) CP SPACE ;see if number was 0 JR NZ,DIS2 LD (HL),'0' JR SCRNLP DIS2: DEC HL ;check for number less than .1 LD A,(HL) CP SPACE JR NZ,DIS3 LD (HL),'0' ;make it '.0x' DIS3: INC HL ;back to first digit LD A,(HL) CP '0' JR NZ,DECIN ;2 decimals places used DEC  HL LD A,(HL) CP '0' INC HL ;to put 2 decimal places in if 1 used JR NZ,DECIN ;1 decimal place used DEC HL DEC HL JR SCRNLP DECIN: LD C,2 ;for LDDR (B is 0) LDDR LD A,'.' LD (DE),A DEC DE SCRNLP: LD C,3 ;(B is 0) LDDR ;put balance on the screen LD A,(HL) CP SPACE JR Z,NEGATE ;exit subroutine LD A,',' LD (DE),A DEC DE JR SCRNLP NEGATE: LD A,(RESIGN) OR A JR Z,NEXLIN ;result is positive LD A,'-' LD (DE),A NEXLIN: LD HL,(LINE) LD A,H CP 0FBH ;bottom line is at 0FB00H JR NC,SCROLL ;scroll screen if at bottom INC H LD (LINE),HL EX DE,HL JP NEXT ;scroll screen up 1 input line if at bottom SCROLL: PUSH HL ;(LINE) PUSH HL LD A,10 LD HL,0F200H LD DE,0F100H SCRLOP: PUSH HL ;beginning of line to move up LD BC,40 LDIR LD DE,100H-40 ADD HL,DE POP DE ;now it's beginning of line to overwrite DEC A JR NZ,SCRLOP LD A,SPACE LD B,40 POP HL ;(LINE) CLRBOT: LD (HL),A INC HL DJNZ CLRBOT POP DE ;(LINE) JP NEXT INIT: XOR A LD (DECPL),A ;decimal places LD C,A ;initialize decimal flag LD B,LENGTH INILP: DEC HL LD (HL),A DJNZ INILP ;initialize ARRAY1 or ARRAY2 LD (ARRAY),HL ;save HL (it's either ARRAY1 or ARRAY2) LD B,0AH ;column no. & counter LD H,D ;first part of (LINE) LD A,(NSIGN) OR A JR NZ,SKP2 LD A,'>' LD (DE),A CALL READKBD SKP2: CP '-' JR Z,SKP1 CP '+' JR Z,SKP0 CP '/' JR Z,SKP0 CP '*' JR NZ,SKP3 SKP0: LD (DE),A XOR A LD (NSIGN),A LD (SIGN),A JR KBD SKP3: EX AF,AF' LD A,'+' LD (DE),A XOR A LD (NSIGN),A LD (SIGN),A EX AF,AF' JR KBD2 SKP1: LD (DE),A XOR A LD (NSIGN),A INC A LD (SIGN),A KBD: CALL READKBD KBD2: CP 03H ;^C JP Z,START CP 1BH ;ESC JP Z,EXIT ;to CP/M CP 05H ;^E JP Z,ERASE ;erase line CP 12H ;^R JP Z,RESTART CP '.' JP Z,DECIMAL CP ':' JR NC,ENDL ;exit if not a number CP '0' JR C,ENDL ;ditto INC B DEC B JR Z,KBD ;wait for ___ if B=0 ;move previous input to left & add commas & put new input at 0BH ;0 1 2 3 4 5 6 7 8 9 A B ;+ _ _ , _ _ _ , _ _ _ KBDCONT:EX AF,AF' LD L,B ;0AH initially LD A,C CP '.' JR NZ,KBDMOV LD A,(DECPL) CP 3 JP Z,TWODEC INC A LD (DECPL),A KBDMOV: LD E,L ;E is thus incremented in loop LD A,C CP '.' JP Z,ISDEC LD A,4 CP L JP Z,COMMA INC L LD A,8 CP L JP Z,COMMA2 COMRET: LD A,(HL) LD (DE),A LD A,L CP 0BH JR NZ,KBDMOV ;move numbers left until at 0BH EX AF,AF' LD (HL),A ;now display input & save it in array LD A,B CP 4 JR NZ,COMSKP DEC B DEC B COMSKP: DEC B ;decrement count & left-most column until 0 JR KBD ENDL: CP '+' JR Z,LDSIGN CP '-' JR Z,LDSIGN CP '*' JR Z,LDSIGN CP '/' JR Z,LDSIGN ENDL2: LD A,B CP 0AH JP Z,KBD LD DE,(ARRAY) ;ARRAY1 the first time, then ARRAY2 LD A,(DECPL) CP 2 ;a . and only 1 decimal entry JR NZ,ENDL1 LD C,0 ;enter 0 as second decimal entry JR ENDL3 ENDL1: JR NC,ENDL4 ;A was 3, so don't do anything XOR A LD (DE),A ;A was 0 or 1 so put an extra pair of 0's at end INC DE ENDL4: CALL ENDO ;LD A,(HL) & check for , & . ENDLP: SUB '0' ;make it binary LD C,A ;save low half of number pair DEC L ENDL3: CALL ENDO CP SPACE JR NZ,ENDSK LD A,'0' ;to add 0 to second half ENDSK: SUB '0' ;make it binary RRCA ;move it to upper 4 bits RRCA RRCA RRCA OR C ;combine low half LD (DE),A LD A,(HL) CP SPACE ;check same number again RET Z INC DE ;entered into array in pairs, ENDSK2: DEC L ; starting from right side of input CALL ENDO CP SPACE JR NZ,ENDLP RET ENDO: LD A,(HL) CP ',' JR Z,ENDO2 CP '.' RET NZ ENDO2: DEC L LD A,(HL) RET TWODEC: EX AF,AF' LD L,0BH JP KBD DECIMAL:CP C JP Z,KBD ;decimal previously entered LD C,A ;as a flag JP KBDCONT ISDEC: INC L JP COMRET COMMA: DEC E COMMA2: LD (HL),',' INC L JP COMRET LDSIGN: LD (NSIGN),A JR ENDL2 RESTART:LD HL,ARRAY1 CALL ZEROBUF LD HL,(LINE) LD (HL),'-' LD BC,1AH CALL CLRBUF JP NEXLIN ERASE: LD HL,(LINE) LD (HL),SPACE LD BC,1AH CALL CLRBUF LD HL,(ARRAY) LD DE,LENGTH ADD HL,DE LD DE,(LINE) JP INIT READKBD:PUSH HL PUSH DE PUSH BC KBDLP: LD C,6 LD E,0FFH CALL BDOS ;read keyboard OR A JR Z,KBDLP POP BC POP DE POP HL RET ;convert binary number to hex number for display HEX1: RRA ;put left 4 bits on right RRA RRA RRA HEX2: AND 0FH ;mask off left 4 bits ADD A,30H ;move hex numbers up to decimal range LD (HL),A ;put it in header DEC HL RET ZEROBUF:LD BC,LENGTH-1 LD (HL),0 CLRBUF: LD D,H LD E,L INC DE LDIR RET EXIT: POP BC ;RET address EXIT2: CALL CLSCR LD SP,(CPMSTK) RET ;to CP/M or calling routine MOVCUR: DB 1BH,'-',31+31,31+51,'$' BANNER: DB 0A0H,0ABH,0ADH,0AAH,0AFH,0A0H,' INPUT BALANCE' DB ' (ESC exit ^R restart ^C clear ^E erase line)' CPMSTK: DS 2 DS 36 STACK: DS 0 SIGN: DS 1 RESIGN: DS 1 ;result sign NSIGN: DS 1 ;next sign ARRAY1: DS LENGTH ARRAY2: DS LE NGTH ;this must follow ARRAY1 LINE: DS 2 ;this must follow ARRAY2 TEMP: DS LENGTH ;for exchanging arrays ARRAY: DS 2 ;address of relevant array DECPL: DS 1 ;decimal places DCNT: DS 1 LPCNT: DS 1 OVRFLW: DS 1 MCADR: DS 2 NBYTE: DS 2 PROD: DS LENGTH MCAND: DS LENGTH NDIGIT: DS 1 CNT: DS 1 HDEPTR: DS 2 ODEPTR: DS 2 COUNT: DS 2 HIDE1: DS LENGTH HIDE2: DS LENGTH TSTOR: DS LENGTH2 ;temp storage for ARRAY1 TSTORE: DS 0 END DEPTR: DS 2 COUNT: DS 2 HIDE1: DS LENGTH HIDE2: DS LENGTH header DEC HL RET ZEROBUF:LD BC,LENGTH-1 LD (HL),0 CLRBUF: LD D,H LD E,L INC DE LDIR RET EXIT: POP BC ;RET address EXIT2: CALL CLSCR LD SP,(CPMSTK) RET ;to CP/M or calling routine MOVCUR: DB 1BH,'-',31+31,31+51,'$' BANNER: DB 0A0H,0ABH,0ADH,0AAH,0AFH,0A0H,' INPUT BALANCE' DB ' (ESC exit ^R restart ^C clear ^E erase line)' CPMSTK: DS 2 DS 36 STACK: DS 0 SIGN: DS 1 RESIGN: DS 1 ;result sign NSIGN: DS 1 ;next sign ARRAY1: DS LENGTH ARRAY2: DS LE.OP Welcom t th worl o GRAPHICS/DRAW th progra guarantee t unloc th suppose mystiqu o Osborn graphics T gai th ful benefi o thi progra yo shoul hav a Epso w/Graftrax 8 column Th printin i centere t thi printer' pag width. T begi yo mus firs PI t thi dis th followin programs:MBASIC WORDSTAR WSMSGS.OVR an WSOVLY1.OVR Yo mus als SYSGE th disk I yo hav no use tha utilit before rea th DISK.DOà fil firs. Onc堠 thi ha bee accomplished- th fu begins Alway plac formatte dis i driv (thi wil becom you file disk Th GRAPH/DRA progra dis remain i th drive. Eve i yo d no inten t sav t dis o prin you firs momentou effort yo mus choos fil nam fo it Yo neve know you firs effor ma b fantasti an yo wil los th opportunity Filenam mus b letter o les i capita letters. Fo th purpos o thi instruction whateve need t b entere b th use wil appea i singl quote (Al inpu mus b i capita letters. I doubl quote nee t b entered yo wil see 'LOA "GRAPH/DR"' Th compute instruction wil appea i capital withou quotations. T BEGIN: Afte yo hav PIPpe th file t thi disk hi th rese butto an plac thi dis i th driv an th formatte dis i th   drive Hi retur an th AUTOS progra wil loa MBASI an th MENU Yo no hav you options desig th screen chang previousl save scree design prin th desig (i i ha bee save an yo ar no read t prin it) mak ba graph o ba grap i percent I yo choos optio one yo ar the show th possibl graphic element wit thei ASCI number below Thes ar th number yo mus us t answe th promp - PLEAS ENTE YOU CHOIC O DRAWIN ELEMENT- a awaro th horribl listin o graphic elemens i th manual s yo migh ge cop o (o borro friend's "Osborn User Guide b Conrad Zimmerman Goldstein Pag 16 give a excellen printing t scale Thi progra wil prin ASCI t 12 a define i th manual a wel a th fil character #127 hav foun i usefu t cop o grap pape th entir listin o ASCI numbers Tak car t not th one tha ar right left an cente printe a wel a th tw set o corners Whe yo joi wit horizonta o vertica character yo wan t matc wher the join Th bes wa t se thi i t tr ou differen combinations Whe bega workin wit graphic mad mysel se o tiles no unlik th SCRABBL tiles t pla wha wanted. I yo hav no use MBASI graphic befor b awar tha wha i brigh wil b wha print black wha i blac o you monito wil bth colo o you pape yo prin o. If you choose the inverse image when printing, you will get a print as it appears on the screen. Ente th numbe o you choice Yo migh tr #2 t begi with. INPU FILENAME 1- CAPITA LETTERS nex appears Her i wher yo mus ente th aforementione filename I yo wish jus hi th RETUR ke an th compute wil ente th filenam TES fo you Jus b carefu no t d tha agai o you secon TES wil overwrit th firs i yo decid t sav it. D YO WAN DIRECTION the appears I yo ente '"Y" the th following: THIӠ PROGRA LET YO CHOOS TH DRAWIN ELEMENT HI 'C FO CHANG O ELEMENT Wheneve yo wis t chang yo hav th opportunit t d so. NUMBERE ROW AN COLUMN AR LISTE T FACILITAT THŠ PLACEMEN O GRAPHI AN KEYBOAR CHARACTERS YOՠ AR ASKE WHER YO WAN T STAR - GIVŠ TH LINŠ NUMBE FIRS - COMM - COLUMΠ NUMBER Th number begi wit and a th top ru t  51 A th lef sid th number ru t 20 Yo wil ge use t th fac tha th ten number ar missing bu i the wer include ther woul b anothe lin los an opte no t d tha - jus b carefu an coun th zeroes I yo answe '1,1 yo wil begi a th to lef corner. YOՠ NOנ USŠ TH NUMERICA KEYPAĠ TϠ MOVŠ TH CURSE I AN O DIRECTIONS: # I UP # I LEFT # I RIGHT # I DOW # I UP-LEFT # I UP-RIGHT # I DOWN-LEFT # I DOWN-RIGHT Fo example i yo hav chose characte #2 (th soli block) chose 1, a th startin point an hel dow numerica keypa # yo woul no b printin t scree lon ba acros th scree a th top D no worr abou goin pas th boundaries th progra wil no allo yo t d that Th curse wil jus si ther unti yo ge th hint Hi # an yo wil continu dow th righ sid o th screen Hi # whe a th botto an th botto o th fram wil appear Hi # an continu u th scree completin th frame O cours yo ca hi th ke onc an plac on soli characte wher yo wan o th screen. AԠ AN TIM YO MAY HI 'M T STO AN MOV T ANOTHEҠ SPOT HIԠ 'K TϠ PLACŠ KEYBOAR CHARACTE STRING HI 'B T BLAN MISTAKE HI 'P T PRINT HI 'C T CHANG ELEMENT HI 'S T SAV YOU DRAWIN T DISK On a time 'M - optio allow yo t continu wit th drawin elemen yo ar no usin an mov t anothe spo i you drawing I yo wan t chang th elemen an the mov t anothe spot us th 'C'optio first the th 'M option 'K - optio allow yo t ente tex a an spot Whe yo hi thi th progra wil as you WHER D YO WANԠ T PRINT Inpu #, a yo di before WHA DϠ YO WAN T PRINT ente you message I yo di no figur th placemen correctly ente 'N whe yo ar aske D YO WAN T PRIN AGAIN hi 'C an ente '32 fo th blankin character hi 'D t draw an ente th plac t begi you blanking 'B optio allow yo t blan singl cell Yo wil agai ente #, t stat wher yo wan t blank I yo hav mor tha on cel t blan i i faste t ente 'C chang th elemen t 3 th blank an us th numerica keypa t mov aroun an eras wha yo will 'P wil ente th prin mode MAKŠ SURŠ TH PRINTEҠ I O WHE YO D THIS!!! Otherwis yo wil los you masterpiece Jus si bac an wai unti th progra read th scree the read th scree t th printe - thi al take bi mor tim tha W itself Th printin print t squar characte an produce 1/ ؠ 1/ prin size Yo als mus answe norma o invers print before printing commences. 'S sav t disk MAK SUR YO HAV DIS IΠ THŠ B:DRIVE!! I no yo hav los you masterpiec fo good Th savin ca b don befor yo ar finishe (telephon call supper? an yo ca cal u th fil late an complet i o prin i i tha ha no bee done Mak sur yo SAV befor yo PRIN i yo wan t us th desig again I th fil wa save t dis an yo no wan t print ente # choic fro th menu Th progra ask fo th fil nam an ente wit capita letters, n quotation n driv ar used) th progra enter the fo you Th progra wil prin t scree th fil tha yo calle an the wil sen th fil t th printer I yo hav no finishe wit desig whe workin wit th dra program an wan t edi th design ente # choic a th menu Yo wil b aske wha characte yo wan t begi with an th progra wil continu a before Yo agai hav th optio t sav t disk i yo stil ar no finishe o wan t prin a late date o yo ca prin th fil i yo ar finished I yo wan t integrat thi progra int W documen yo can! TO BEGIN WITH: Sinc thi dis i se t autoboo th men progra fo graphic design whe yo ar read t prin you desig i WORDSTA document hi # a th men prompt Thi wil plac yo a th MBASIC O prompt The typ 'SYSTEM an yo wil breturne t th A promp o CP/M No ente WS(o whateve you WORDSTA filenam is)Lo ont th driv an typ you documen a befor i th "D mode Whe yo com t th plac wher yo wan t inser th graphic file leav 1 blan line an continu unti th pag brea o pag #1.(o whateve pag yo inten t inser th graphics A thi poin retur t th poin o th documen afte th graphic insertio (th 1 lines) Us contro "KB t se th堠 Bloc Beginnin marker.(remembe thi marke i se a th lef margin W won' los you firs tw letter o th firs word! G t th en o th fil wher th pag brea appeare (a th firs blan colum o th las line D no hi return!)an us contro "KK t mar th Bloc End Us contro "KW fo Bloc Writ an choos fil name (sam a before letter o less No us Bloc Erase.(^KY)(Thi separate you pag int thre parts 1 th initia paragraph befor yo wan th graphic fil t appea whic ha th origina filenam o th pag 2 th 1 line o graphic (save i th graphic progra wit th filenam堠 yo entere a th outse o栠 th program) 3 an th botto sectio o th firs page Thi ha th filenam yo entere whe yo use th bloc commands Now retur t th beginnin o th document(par #1) us ^ thre time t allo fo th do commands G t th en o thi firs par an us ^O t ge th lin lengt (ad t thi count) ^O agai t chec i th pag brea i i th righ place Th  ^O whe yo ar sur i i se righ wil giv yo th pag length G t fil beginning firs do comman i ".pl## (whateve yo found) th secon do comman i ".mb0" an th las ".OP". Double check the page length just in case! Th orde fo do command shoul be:.pl## .mb0 and .op. Save this file on the line of the last word d no hi retur befor th save!!! Yo no hav complete al th necessar change t part#1. No ope i documen mode th fil yo "KW Thi i par #3 G t th en an d a before us ^O t ge lin length Ad line a th beginnin fo th do commands .mt0 .pl## an finall .op Sav thi file Al preliminarie ar no complete. Yo shoul hav liste o pape th thre files # th initia one th to sectio o th WORDSTA documen page (remembe tha i wil b preceede b B whe yo print) # th MBASI fil堠 yo name whe usin砠 th堠 GRAPH/DRA  progra (thi wil no hav th堠 b driv indicator) par # th botto sectio o th page and it will also have the B: drive indicator) Yo ar no i th no-fil menu Lo ont th drive Hi "P an remembe t ad th "B: t th fil (th beginnin section tha yo ar goin t print A th completio o th printin th printe wil sto a th las word (I no yo di no sav immediatel afte th las wor an save a ne line). Enter "R an th promp"COMMAND appears Typ 'MBASIC and th Oˠ wil appear Typ 'RU "GR/DUMP (capital an doubl quote aroun GR/DUMP) Yo ar aske WHA FIL YOՠ WANԠ T PRINT Typ 'FILENAME (no B: the program assumes that the graphics file is on drive B and adds the B: for you). 'FILENAME' (NO QUOTES) i th nam o the fil yo name a th beginnin o th graph o graphic program.(Par #2 You masterpiec wil appea o th scree an afte brie wai th printin wil commence Afte th printin i complete yo ar returne t th MENՠ program Hit 0 and th O promp wil appear Typ 'SYSTEM an yo ar prompte t hi an ke t retur t Wordstar A th mai men hi "P an prin th fina section th origina "KW file.(Par #3 DON'Ԡ FORGEԠ T AD TH "B: T YOU FILENAMŠ - AL̠ THREŠ FILEӠ ARŠ O THŠ   DRIVŠ BUԠ TH GRAPHIC PROGRA ADD TH B FO YOU YO MUS AD I FO TH W FILES I ther i anothe pag t th repor i mus b save t thir WӠ fil becaus th .mt o th secon W fil wil remai fo subsequen page an canno b changed. Th BA GRAP progra ha maximu o 13 vertica bars A th outse yo ar aske fo th titl o th graph Thi i no the filenam bu wha wil appea a th to o th graph Yo ar the aske fo th numbe o observation covered(max-13) thi i th numbe o bars Th las preliminar questio i wha i th highes paramete o data Whateve i th highes numbe i you dat lis i wha yo wil ente here Th progra use thi numbe t arriv a th valu fo eac sectio o the bar graph. Yo mus no ente fo eac o th observation th followin information nam o observatio - thes ar th label t g unde th bars Whateve yo ente th progra cut of al bu th firs tw letters an yo als ente th dat numbe fo each Th progra wil ente i horizonta line betwee th bars I al i correct ente filenam fo thi progra an i wil b save t disk Yo ca no cal thi wheneve yo want Ente th men progra an typ i th numbe fo print Thi ca b integrate wit W fil a wa explaine before. Th fina progra use heigh o 1 lines fo eac 25 s thi i th progra yo woul us i yo wis t expres yo dat i percents Bot program inden th margi i yo hav les tha observations. I yo fin thes program t b o goo us t yo woul appreciat hearin fro you. Lois J. Callaghan PO Box 104 Little York,New Jersey 08834 (201)996-2336ve yo ente th progra cut of al bu th firs tw letters an yo als ente th dat numbe fo each Th progra wil ente i horizonta line betwee th bars I al i correct ente filenam fo thi progra an i wil b save t disk Yo ca no cal thi wheneve yo want Ente th men progra an typ i th numbe fo print Thi ca b integrate wit W fil a wa explaine before. Th fina progra use heigh o 1 lines fo eac 25 s thi i th progra yo woul us i yo wis t expres yo dat i percents Bot program inden th$4[hҀ\D gkg#}j^\LBܸ)-pfR8,?xMm{ "N?I\=muN/Er{Wr"qJhh|Jq|kqOIO)ͱ稬D>YA^1Py;W}dBŝ/  [ݍ':жT]nbn&&$ Wn5ndQD1"VnJi0h - hiI$ 4bHbHAd2nJ&¿LGln9 WTIQ}d|эU0 ^TnUꌔC>M7mf{j @'Mn~5wpxa?Vmϫ,H)orˇ-O\eʙtw#iZtNJkZEP?KfF}j jf5iCۢ6U*fMĢ1)%Y3H>w"0RV먺䏎(68Oãpe֤|*S۴ּdaD\H9 qHp0f{6JV; Y!o0;ĕ,_* }# 8wCd-z>'SV-F zx;$\3iJڿџȸJ=UM'?X\EZђrZ`h,Rd#a c}4 {rKzbRP(!GJ-k.ydO=v3"L&O-YPDfJja]K6v-'/8?d\IDHO`Tvz>ЁDr{7z4K 됦( j<_5BMCۤĂ6ݠ Q!9Q-^7+l65&-gɢغ8^ 镉h>K(e 8. ~XHZMOYR3@V}M qi 8RKs 0_4ſ"]Udd8'9D8wN1&Z׌<?Vq*| \2VBܯl vHmkPᙝ<ϗeŝg_%,6xm}vI"-ꫯ6hvפ@7[%)㹗r.ZFr]펂{7ȧ"z*| IDr뱤B4HҼЙ}09L;+~ᐴ#K2 Kݵ̕}*̊#>o'h5 &1/`o]}tUZ=WweJxZ'[>MxyyO`E'$ RۋhA_H#ڟ  s}=}}`m+ġ+m0 q[%$0.f2tdi==I]5 zтV h{afJja]]K$3-'/8?d\ID]O`3z>ЁDr{+$Zj^Kc&O!5FeV ǵ[@ZX=V&v5tDL|D3$NvOj^})Q%PsT6-| aUq &8Y!ʒxWĎ6kfRE0f,Hpfev> K&-# 0UZtN+$ZԀrw;hxD%&g&Awj^6N6\) F:ϞeY_HCnEg.27D9ԑ8!,KYI΀ݎ{K $PtnGOu;CF +p wLQXҺU!T1uЁcS}{w&=$ϋA_Wȩ>n>HC` pUZb8f0ޟPy.#&Z }=AZD;C%g&/=Vh~ f$+O; UuQTxcWB"ECd~e8'[@#`T&G bUqFԢغ8D Uyhf '$+ͱۅHO!|,ڟ t5aIJ,|z{p웻Y)[ɬ۰xϖfMÌҙnهB68X(;DzQ9^(R  wke1+_l3# Y]I.l;p"hCp:$'&LJR%#4zExn|lq_. %hE\|iJć4˜ibwf=c MbYsF!iLH5젴#G=&xѮv-;-E %Bpw5z xn|lq_. {)qG艥|F"g&Fw$ wQ311Tܹ%ZKbT>7j6JG<@7k]֣vv lb7PJB 3us{J 6v ob'>! qiT\d!s,Rl5sYwBm;%1 [&Uqf$m'VmX C#|ȳ%_#Ldw +*K.=T\ 7R8шiY fR'AXfsю뫋W[~¤kc̃dByJKP(s.K[F*FTdEJo`nA?BɸFxn'٭UQWC}%t!\8R;ҭ߫=V5OcB 7y-K_e!~}`Rn'e|wm iVlZ1fЁ0>HjǸ'LmaJi [N:d>wΩmvi<'[)Y>B$q ;ίU1Hk# f8 tـ#e*aPYA2yjY9|)O } 6{#^6d?Z--u!y{ 춈h~ KhS$OV>I$Fpmg)PRdB4D%aȤk뛿px}j ,Zm/ ר^Y Z&},IH}DV=V&H'%N#K^4 v%eBeDixwVI!sٴ&ɢ (LeO/xyl@*^aAC+  D;i!+jm%"k%ݒ"HJB7@T<iY$gi8 ĩ8k$b@\*vfF 4ƹs@.u-kVP%ZKg%7T,ٵpIq%ΟkKjv#3PA;w>w*n֑tiy+nE]X-;#jHpkѕ ⤪[@0p^\kEc&T/pfR8h(AU& EtX:أ=U#'Χ]тd#F}%BX# g#9Џ \Z<{$VA`}lU{تHJu4$i럹pn}"JP4~L*lQj/7g_<#Si!Hv z{PNzfԋR Q+$Zsvw;hRӜFsg#5t}j w!LLq$+udna`aǝ+nW}uJ=;U\鬒3\^%u!5 6ٟ#~#XP-'/ `w. 驦Hu0ѥk$ľsw#&rQZhHL7x ,K*YWWxݱn˲*nY{EH$4,&6IUR^ w_hGϟݝnQt&添 ]A* bwid Ju4fc,m wnOgJ 4[ y(NnÊx32YUtCtIxLd#cOA3>sCZgŭp+!Jou 5]qKV2ʩ#E&j[mc< =rks+ڻIᐪջrbxw/Ů0r&$d /mMdTP]1͊Ua;;r z!Š aJɬXUR2@ʩD|sp{F@7V-m^)}fx.Dd2.i^6#n7}r }HCt-Taxe_n ңNixV>$H Bޮ zHFh#:k@.w,mlXJʠFymTF8jYD=aߐ=U#'Q_QL}WYe:FϿ'J?,X o,A+*H.UOjy^w.jfrQ #['8_%-:*R\ˬče\ ФLUZ|!r$DKA}̙`\b%-tVBǼ;w 28WJ8(wyMf/ݝŪ[~OBB_o̶ Oo nOȄRVӇw W4 :n;?@BXGFϲ }ʼ ݉25 ^a#*OB+SCgcj4몟sQ #0< ł%o;r\aӘ+n#0R߭d,Z<'ԭOBE48G5{;3B&O?+䏵+_o̶ Oå9n>0R߭ܦBǿ ^28WJ@0Y+xV;r ]Ma= Yۃ6.JGs̶ O߇Vi{ NǦm} -9H흇:nl;?@BXGFϲ!3iON)dhRӘR}i!{p&,[O̪^-]#\[i;U6䚯U i'haI[{rWI@{Zdxɨxn|lxN-]685[jN5n)dhRӘR}i!{p&,[O̪^-]#\[i;U6䚯U i'haI[{rl4[hҀ\DϩWk]Vr٥>+c<3Kp()ҸA<)D6U/pZNy;v,eg7 iV.00 iL8Z_4"ss0HwwXp"iB]plqU5؀F/~ϲ+mOXg =-6vW57\Ws&G7w$V?'쭦~kKT2U'$t/s,ݼH#OSY)R^s,,#𴚺 sݔ,Y2xj֏5k%/քW=B/Q1(qJy͹`_&g']¸='NUb|?. },ea ZJn VhJ 0 <1 $c.Jlb$$H*d*$3rS2.scp{'M[8XdI0#*AƥZIӰwepvΟ o*= f٢Ob1=p+ z2Dlc]3MqjM@A3_Ah #\b8#GΌ7Zq*Eº#J;DDRXHd!k1˜ `}4 {rK2K_]Fk5k }-.=ܛoIUvWp3Q x;X!Mi06U 0a|UKX-]68_ jۋ BHO`eҲz>ЁD`NA2s,[0օʝ$gfs-{JmdK=U'K^"%G:4q.fPO։wnM{k!'1ZoJ};Y8Z_4Z,Wh.RNkܾp,m;xջiH,1}_#h!* txUd' 7$qoGw)qO& 4n2wu/i!fkHCrFO}GX,9̇ XwXYeM+%,pzijOTpm!TЁD`NA2s<\70z$gfs-{Ccg=MǮ+P%3D6ۊ1WCZkYd?[ůwwg#8!rT^@,%NXDa6m$!Kl(6%-NR㪱w 0!&#ui3jMe'kf2&¢]}l  HJ{4Hml<@zwReqG ZAsj6JG 4@*d'KbnH0 =rxWv:߆]q$6 AdLFR~)9-RXZא*`է,%Nn{vOG܊3MqjM@A3_B%tw#gRLȍҴ@ק!-'/},2\wTOs~ P+N Y}{UK*O'ԛF-^H=\cn<,?֣pjZ]8Z:NKZ-q)cig8`&&me_VN\-g -3 dYW}'&eR^>Jd+mZY:fޥT 0#7q5<2bɪU?/ʛIxp3$nO/imq ʝeoGҍ䰬gPpGa E UZ_DkQkۏ'RN+N Ys{M:ZBĂ11}7nF$5E6nݟx'G3Hwi%Ubzo[@yhO1Uk~a\h"\e,O dn">jRfއy7*mvś},K*YWro?JQe#MlWߟ!M#'T@ihӬt]Z+ᛙ~esKS?UXJ5waHOYϥqaw_u{r:mK F%^%eE'An %ci'ҮWg#G^d IzkЌ]HW%#ܡ㟸쉜- UCWJˠ{}=,H0,aJ?/&YZD\58pZ[8Y:]*J.+j(ܡףԥVJmp/H,D!cGiF ?bӇ )5} a-[)\<x -Z r&t=DpHI} Tq8?WWwbˀPh'i+xU'_\L˱\aHWC^(REcjJ-XiPZ: s-^x'Ge}ꞯo"`=M%ke#E |=Yw\LɞR2k/jX&' 4v$Os/Gd!XiPZ: s-^x'Ge}ꞯo"`=M%ke#E |=Yw\LɞR2k/jX&' 4v$Os/Gd[@yhO1Uk~a\h"\e,O dn">jRfއy7*mvś},K*YWro?JQe#MlWߟ!M#'T@ihӬt]Z+ᛙ~esKS?UXJ5waHOYϥqaw_u{r:mK F%^%eE%4[hҀ\D 𿀀s.9&` 4C+?2T]nbnYÿ<ܚ%꼧IPN]a@pV;YP|=pRz#i]O\0#*Aƥ,mH 2ۋ! pfpyw; -<6x#jh\ɛlS Mo{ E`㒤EMrW+*x.͆-q&%zvgPߡef3I!HB *) 2o,r nO>Glg#0dq4t\';a󂰾YF)Dtэ(ǭ-G6 :^߷^Z7l* X&+gO˒ԕ"40Oɽ?5ڒ ooڳ\s<42andz>2W}T` )^:jFPuE"A$VIzNX 7qtb^oJY26:Yզϐѣū'095:uW\I9,݈͆!!Jҁ\gp̂XtXTn"WTܰ] [I'pmqf5o6)F6;MAa>+*O?G3D薗JW0^¥bhB)!p/CGmUXuϘT}{>!s `SOOUk; iVplqUfaFaIUfmDjTEAvA1fq^d s2yvWZ6G=\j휯mD%ݨ ]b?WOOy^yҠs5J!ㄽô&CiHfNaDkQJ/Ġwg^)tr ^WKg%B#7A.{7pD U3AK]]2"V~Wtʒ.WzupxiU 5OSďZ }= Zڀ vHia( aP܅De;{YP+g / u_çT 3JtCKn8:%1+\gS\w6 0alxa̾_#:R: Xw$pY؋oFOo%:IJB lPD_+rm;ĊAByLO m . I^F+1})w^UOy7vU8M8Ǖkf_, s'1XH,fev| FhREw:Wɼ"Փiq21}cǝ$fN׾< ꔮva"N/q;Vh 앍iZl>K!$+Rǘ\h ;ίJ1-e&H/cP-ůaw; mT־"DNB7N"VCDP c'?wE4¥bXd\IrL7:8O!p&O!5F$1 <0٩/Nŝ33^ɦnO }p-]8 #V ]A\:~$I6;zv#`m=F#(阪noهB+b4-Ԝ_-ҲvHJ,#p`L9xm+ :/aF7n2DYHM$4,&02`n]6;#YC ];>?vM nM b4-Ԝ_-ҲvHJ,#p`L9xm+ :/aF7n2DYHM$4,&02`n]6;#YC n EJifݕAndN1(jX egq8ьܭ",:XG*}ҧ!k/aǹf  CpEt8i ba ()aESC$()a AT$(I,J)ESC$"="(I )(J )6b AT$(,)"WHAT IS NAME OF FILE YOU WANT TO PRINT?": FL$Qb FL$" " FL$"TEST"bbFL$"B:"FL$ob ()~b R(,3)bL$" "b "I", #, FL$b( X b2 Y 3b< #,R(X,Y)bF YbP XbZbdLpcn X cx Y 3&c L,R(X,Y)0cLL:c YGc LLMOc Xcc AT$(,)" "c (): AT$(,)"DO YOU WANT REVERSE PRINT?";: ANS$c AT$(,)" "d ANS$"Y" "REVERS/P"d "GR/PRINT">";: ANS$c ATl4[hҀ\DϩWk]Vr٥>+c<3Kp()ҸA<)D6U/pZNy;v,eg7 iV.00 iL8Z_4"ss0HwwXp"iB]plqU5؀F/~ϲ+mOXg =-6vW57\Ws&G7w$V?'쭦~kKT2U'$t/s,ݼH#OSY)R^s,,#𴚺 sݔ,Y2xj֏5k%/քW=B/Q1(qJy͹`_&g']¸='NUb|?. },eag,#𴚺 sݔ,Y2xj֏5k%/քW=B/Q1(qJy͹%4[hҀ\D 𿀀s.9&` 4C+?2T]nbnYÿ<ܚ%꼧IPN]a@pV;YP|=pRz#i]O\0#*Aƥ,mH 2ۋ! pfpyw; -<6x#jh\ɛlS Mo{ E`㒤EMrW+*x.͆-q&%zvgPߡef3I!HB *) 2o,r nO>Glg#0dq4t\';a󂰾YF)Dtэ(ǭ-G6 :^߷^Z7l* X&+gO˒ԕ"40Oɽ?5ڒ ooڳ\s<42andz>2W}T` )^:jFPuE"A$VIzNX 7qtb^oJY26:Yզϐѣū'095:uW\I9,݈͆!!Jҁ\gp̂XtXTn"WTܰ] [I'pmqf5o6)F6;MAa>+*O?G3D薗JW0^¥bhB)!p/CGmUXuϘT}{>!s `SOOUk; iVplqUfaFaIUfmDjTEAvA1fq^d s2yvWZ6G!Uô: W-z(ݼiڀ v'\T+9̃0MgJe;{Pͬ ^M_3 j"9.uR}F"nN/ r8%0Z]"3jM$k!Y(B Zp8\p]B$sr s `UH@4c۩2 2o/}|#5of5nDIe=dZJ'K}`d &oq0x cOhZ+l6\ih. K'ZZ)};M`8ђҮw!ad/'Wy$r%s"iC!TK%=;<@oPe}_a_ CۤtG`yr7h(h;fXe5=r% Q]Aq~CC`Ew\@24JaòM;J =aHe3}F#O賨)І}ύ]_ dt' 7__f(mWtϜ ։ڙK/!+ U.o L_0#O LWR81Cg;w)RC+ ק]2 DTϠg)MQ:h&p}?8#BI]5 z}f/ nW6,pAM~7kf4kE;)Ot%W[\isr8 Hp.k*JO?/s'YfOu0@ΟuFip (T=F']OKoIzkЌ]H2z?[o߆b #BD ۺ^"7H\SЙ}19MLxWTp+akж<_eIfor&ui=G'GT!ؠ+"rAG fq4rR͚jߊ.nQE'$:I,ݼ~7D#Ÿe^HKlwa+4m8Sj[SW0L-IfrPU6ky'/ `mq\c&w(ɪi͉`/#b+)}k=C:B釚H\F}JxfR5р#k1EADL[BƷЁVNexe#M=/?vn'P7NTByfYw\e&=w从٫F2h@'M |.W+ZōAj%;33Ӛȝ1-c$U|=DFI]Rr;7%ȳGPlf`# Q]Aq7K!z *=& T4q dY݁fs[ Rdb \4}4 {r:f7x] [ Aq}AUn5%EnߟqF(v|rG\c~R'Z~?Z۳xf !R4\XHY jVmkP>"grJqzp5);%+=mLtȥ9د0d: ^ 5);%|"&v1l 6 쭦~kKs޼|UD'B GNdbH AYと ja:5<- {8,XY1UM%C[tӸW =iW+58^VdQ' ה#aT.5qfgleJ :YÆ W5haܵއ;.~CH,{\Yw['vo@VasGp[dB@dz_!wW G^6wEƼ9- %q-Y@\$˭ΏɌMRk9~*'F=.R\tآ[v0˿ն͵WfuȈ"11:tO,yovqbRhZ Rx׎ IhKz0]TjٺF_/::_wDD]ϐALB9`"1Ihy:).7,f-/@eاRu'دεVnA<%n+0?jM 4x1k$H~Cܑ~xז"'.0VTkA<;4L'[.2 Z=q f F=*p!gCy֎Wtvٺ׾][Ep+8ݎ7jE0O|&c|x{| xx׊Sŋ rKz0QTh52{+gvI=fۓ2X @ִ ]y$>#-3-k!ۜ0[~+ݲξK$#O6!8ܟ?hEYxȭaӷ|x{g?؍u^N#货M iGvFR^M% 5_~AD`ϗ*L;`9`"5Ie>װl5:% iKqrҋR~,z .mZelVu4!:lgXQ ,vqg?V/E~vߖ!..^Rh8;{:9Izе'S 6 >6)0 .7+f cK}&[&ԿݻۊW_vV2BX;tY6luʻ|pө񌹂~ٌ "H rN:R^;;1HwMDRϐ,}]1> Y%>Q;mHl}ҋS(ӳݻn^D48ܓ?i\9HŌW'x|~C䈂xߎ`W9nCz-VT@6[ аwCDZϙ>L!K_ IZ#6 Bed_iKlyץWz0ֳ eY_rS.8ܖ?[iAHqƵt|~fD߉~wԎ;@:wz/YS32{A4c0PxlZϐ+S.0ݯ:).7+n iKqr֎Qvr1ݻۊU_yT/ <2pmӶtr{{ ᖂij04G rN~:Q\<fЖ&L9tކb=f 9*,70r#: 6g0˿ԲÛY n88hE2jvȥ$Oz@܍|ߒ Jَ.]TjB<};%*}H\ԓ2[!0Cav%>#0?2r#|726g*ԹݻۊY_yU{!yC47tP,xpqrP~ڌ HrN}:_R69_rP*j~A 0ռηZRtK~5;tO,lpx8>UHq~wҌ"h-ŮA6|=1ev$S00A:#C7*q G PjW~,nq]Hi[lS:+4 4 jmȻ|sc~ ⑲uQ UjC}:QTpj{;=_yAD]׋&}OT06IZ%a/>#*qg]xtڦ[v06"ۊ]eKu7+<2poȵ|s~iT&M rGvBW<2~:>cv$S26d#J'9#0:*p i8~)ھY ]n!88jE ,HMN(x|bAv~ؒ,u]^Gv0Y^l<@{+,opvIH]Ջ@SU= @ִ h!4)F3qc40YGxt܎Sv*˽ dY_wU8/)pqv|ezd| GrM~/F2{71erCHx  .4ݤC: F=*q#K&&ռҾU_xP$14?iQ1pb$Oz xuӊ ,v0]^Gv:`P<@{+Up-vIHZϏ2Sּ?`":IfNM7B7*n iKlt*|R,ٺ׾Kc-#O6+8ݎ)puӷ|x{zc&Rӏ T eGv1^YpϏ2Sּ?`":IfNM7B7*n iKlt*|R,ٺ׾Kc-#O6+8ݎ)puӷ|ռηZRtK~5;tO,lpx8>UHq~wҌ"h-ŮA6|=1ev$S00A:#C7*q G PjW~,nq]Hi[lS:+4 4 jmȻ|sc~ ⑲uQ UjC}:QTpj{;=_yAD]׋&}OT06IZ%a/>#*qg]xtڦ[v06"ۊ]eKu7+<2poȵ|s~iT&M rGvBW<2~:>cv$Sl4[hҀ\DϩWk]Vr٥>+c<3Kp()ҸA<)AD6٥kjŒJ_%l4wx!UJ Zn5caBl-UԎF*iFH20æFΊ*+N ~K2a5݀FXj-IOgnA?BKIERZ-dHBy_c6&Ř !nkهBAuprݼAHn'"Vw*^! i |plZAl?+_ց-=^ٱ'dh[Ӓe@[pŬXq[I֓ϟ lj hn>2&܌d `cI\묇}H32&܌d `cI\묇}H3+c<3Kp()ҸA<)AD6٥kjŒJ_%l4wx!UJ Zn5caBl-UԎF*iFH20æFΊ*+N ~K2a5݀FXj-IOgnA?BKIERZ-dHBy_c6&Ř !nkهBAuprݼGHn'"Vqfh{,L+e*T.uҦsMNJp˾; R} 5At߄I2p%st^ҩqn٠Ktiȉ3K:%:by3;-\ 54?@ABCDEFGG/CHANGEBASHIJKGR/DR/3DBASLMNGR/DUMP BASOGR/DUMP1BASPGR/PRCNTBASQRSGR/PRINTBASTUVWMENU BAS XYMENU/2 BASZRANDOM $$$4LU3R^8t,z؍* m8ĊA^CJUN%xF E"fCI6ӭ93-pV>|"&v1l 6 쭦~kKs޼|UD'B GNdbH AYと ja:5<- {8,XY1UM%C[tӸW =iW+58^VdQ' ה#aT.5qfgleJ :YÆ W5haܵއ;.~CH,{\Yw['vo@VasGp[dB@dz_!wW G^6wEƼ9- %q-Y@\$˭ΏɌMRk9~**q"bKr֎U~*ZڢA]iwV28?jN%ȭaȶ|v{C܍xx׊ "T#ZYP5;6(0*}GfД2X5 16$)%> F?,k!d_xs٣֨ҴݼҊV_yR:Vaf j\1ppƺ|o{{Pe&Rۊ M mSg/rdHxtء[u#龙ۊWgxKy::.gXO,movs~~Dyw Ah@ThRCTTjB;[;r жI?fА2M /ⴠb=hx9#-7+q f/iw+ֺ]iuRcF'1:mE5yuʺ|vbgOe&Rُ #GrN}0RTj_/;:H{I=fєAZ E7cmfIh4#C7-m ݓ@eاR)غUd*D 8:E9tuɶ>4w~ڕ UhR{0R d<;:HrC=\Ԕ2X=Q9`"1Ihz1-7,mŝ@eاR'س]iuRAF'18E1uu̶|vcNWe&Rُ 'GrN}:`[N 3H{DD^ы,O5{ Yz%>F=5r#mAo|&T&˿ԯ”WgKy: :rugXO,kovtd~]ϕAS54d$'5+7,q KquߎVVۯ]jvR:+5Z ;2pmӶqm{gDvy Ĵh@ThPv/V]9D1srO]ϕAS!.1ݤ4#0@*pf_yפRu'zҵZflU~8+5>mE\lӵuq{{ }~ً 'e>J1YSkB2|A6d{H$dzM1>b"|λ=1r# mHtҋV'մ eWfuK~:-6tP w0=ɺu|~eD~wُ Uمf.__g5;|61HH}$dzM 9:b {λ=1rfHxt׋[0'V_yT~8-6tP 0=ɺu|~~*C>-qfHxtۣ-֨ҴݻΊV_yVt8/ m 5mpyu~~ }r04"T kRv.YS@2rdFO;fЕ?L346.ʮ)%>)/@,m$bBxr&h &˾غURlUx1Bﮧ=m\,movt~~9& " eC|E^\m5 0i%e|BDZڋ,LHJY%9#-<0q b*8Uu'غ͵WflUzmvж$?~N 2jpɺy|gϢ& # kC{1^Tj`/;:HyIGYϐ,SEHJY 4#0:*p"gDpϿ}R*մԺҵVflUz83z@c j\2ppӵys{{ y?04"T rM|:_S<<x\{DD\ڋ,L1 16)%>F=-r# mHxsۧ֨ҴݼԊX_vVx75 ;ɽ 5jhƵq|~{D~x֏ A3 }kC{E^Xn6;t;:H0Yl\Ԕ2S. 1ݚCb4#0=*l"bBxsۧ[uP"鼐ҊU_vUy3 8u *yuӵto{| ⇃~ُ4 kRv0YS+r# mArrҤU'65"͵WisKy:6=jZoBHoyvg~>zyߋ#@Jc.0RTjA#|41dwO@x .-Ih5Kg= p"gBy؋T)ۯ ׃hUz8+8?jO21Hvbg<ݍx{؊ T kLnT<694_rO=fѕ+}S5-b$6*+:q.YAҤU)ӲݼҊZjn 5=jY 4jjƮy:Iqw{ߌ kC|-__gp$_!j}61exB?Yך2M EFq)fIhz5F=1r#S16gu0ۯšWhKy}8;tQ ,l1i$H~E~ߎ [ϐ6 }nCz.]TpM!j{=1cvIHx  .:Df U:#B7V{E5wq~֎O%ص׶^ ,l1i$H~E~ߎ [ϐ6 }nCz.]TpM!j{=1cvIHx  .:Df U:#B7{DD\ڋ,L1 16)%>F=-r# mHxsۧ֨ҴݼԊX_vVx75 ;ɽ 5jhƵq|~{D~x֏ A3 }kC{E^Xn6;t;:H0Yl\Ԕ2S. 1ݚCb4#0=*l"bBxsۧ[uP"鼐ҊU_vUy3 8u *yuӵto{| ⇃~ُ4 kRv0YS+r# mArrҤU'65"͵WisKy:6=jZoBHoyvg~>zyߋ#@Jc.0RTjA#|41dwO@x .-Ih5Kg= p"gBy؋T)ۯ ׃hUz8+8?jO21Hvbg<ݍx{؊ T kLnT<694_rO=fѕ+}S5-b$6*+:q.YAҤU)ӲݼҊZjn 5=jY 4jjƮy:Iqw{ߌ kC|-__gp$_!j}61exB?Yך2M EFq)fIhz5F=1r#S16gu0ۯšWhKy}8;tQ ,l1i$H~E~ߎ [ϐ6 }nCz.]TpM!j{=1cvIHx  .:Df U:#B74[hҀ\D 𿀀 @8^8zT 4C+]Pwm,!_Q*Z- 9)^t5ndDN1RZ-dPcpmh;DրRaAxOWDž (\ (e wepvΟ? ȯ0`wdZL A,x#5ր+ Mo{ %KiT͡AC/AKy?Kl8ԢĒ9P-'/8 2fT _2aJ# K~&nDo 흇:n;?@BXGFϲ3iO"DB凜,(уFJy;9Yex(ڙK(OR+X?,\Hn'& ]顚EWE9Vum;s ǠJu)fD͔øR-M{58b 7ted;w0-g>WzCixn|lsGe$ɠGX M ߶/02:/S6 `MKُ;\+c o0#;g+_C'c Y&vj3AK[&C_PcƇ5ˌjwƺ]%vH+⟘t*JFL ۩2S 7u0vv$B8C׃4bdB7N"V@CPb|Z3ۨᕙZ[f]-'/8 iP}][IvL+ v +⟘nMgs-oZ*Te\HGn 6dO=v3"@O xp X!>gHыҴ@ev!uVC/Zqq"\2KCnAY ^|5q넫*rls SeqV w+[-p+ux/5}HY B6moT"&eűP ОUj;1ό {K!K5VY/|FW̱1lM<h P-ů|#)s+P X+tJQb2Y-U FKaDmL);gf|mHjy%A_vh Zn㟿왌OR!jr%$\ZCGt(a1;gZ6u K 58`Td#;%6|Kqn ?aF7n˲zo@m,6wGF|j6x!(eO˄n1Ktiȉ3K,P* (q:|xOuMH iq`gɉ^6YqH*YWUoI @n  F6jMr1) 7Y q}y93T0ŸݰƲ~~5wpq?Umq5TTRέiDwCFJ#Dk"uTest[lE}pg! rϲ$Uom3!3_&H*n+ZFc&ƧןOZdO\sqW(eA뫋N{Yg+W}N1s#!0*1U,7x$5E2g㟤t=U/ @7a%^;wceDrI a nKviZtO>$"MH a9Rvs!ɡ9wi^rcK+lyi"arE"?EXſ'o#["&2wgjJ:j˻r]扫is\C FܲfaHOrR<觅MiJ$z{@[xafjˇCnKO Xh\9awQHJR5` K9Y`mH|B%Шn#svפoy6d'oB #x{4Y\mJx&z-n'E8-r;UoHq/O5О}9yDamH.\QTxŪ0<*„-=Wż8^˱nP\vn6=waYxb!26RCz;W·H]%"`NO9ks2K2 S["kھ;UOl9c~ Z'n<뱧Hb0K:,:J ]p`dXBnw$D +⟘nHF"|Hujf F[ƯND?EzN]D .;%`PTagZjź ƴ~kOQEFp OXB懳Hnr; R&И}9Y5Y~3K\ sh/&lhʵVVi'TS' E^E"р!J0ƹkʢ3w$AHF kTMܻB:sI)a#[gf5nD E6ꃡIˁ?HdxRϔ08 Ži; f]yHĉ1ZW;Ah1fHn #HR<"`,~i"^}LoTsD\,+luu/̙`\b2D@l ߮v,;-F}%jT!Aj7G?) ZsA_.daD\Z2 ggn #*ew[xE+ )]Q9R:ָ'ILn~5wpx[?yAǣAXdaD\G2 qH5bt^0L?/sܴ+*vR)[Xx`q).Y%,bX5ŭP73]S.HŽ7< POZ%: Xw$LN1R5m} #vRB6T/'YPsH 0P\1)maʛ!dUQ7gVF %0eMvLi 5G^ҡ㟽xbfV{:'Kգ y%;E{H/2Rkc ;U=O2ms2YPs˟oVj֨~-.=%Mȷ r_" qLFҢ Sq@{ɧ\,9 G߹AdS辗sr 9KO#/)AMhv5tDL|3[Uqz϶5P& <)w^9U/>]/p*nMA[GqHnĒW_K!rWôCGn8)dhRӘH}G󁹙g&A=Vh| f ٜEhəV ыDQWl7֒2ޖo ~k>+ r?UZbg֕܌5B )$&" ϘT|`s,s$p̅d9bkeW;x3[aUq}϶56zmUg]lv%)dDUow\c5wO(bf>I):FYXjNp5bS+keW;x3[aUq}϶56zmUg]lv%)dDUow\c5wO(bf>I)l4[hҀ\Ḏcqaw_ɽr'o SMZBFnÊ"}8$~-g6dƭd7 #cO=۩de|nKikhO|ZfZ X;L_HOJ/\Y^9Baeh+v[ِgL\ T_I)a5<"C ք=vWM@3_&H*nZbegRֺ鎭뎫gEr!ksIH= \aHHOJ/RR^r,mZY:~KqK %sРF}j 04p&2ǓxU' 7#^%;Yw\c&$vGgkhO'$ X;"O[\isrA Km5@}9^wJmT`[F'۱I)aK8oܼvԟrGj]E* @8Nn%&+gOݞ੟뎫ikhO'$ sJ" ύ|W^s%RR5@}9^wJ iT BplZ#1߯H}j5<"C 6LDF%3;Yw\egRֺ鎟 矉 hn>+ X; \aHHOJ// +⟘nMns mTK %sРFU._ց  /ք=vU' 7#^%=G3?wFҌK&O6R6380Z%Fsn ƓC@@=,qa--WTL_m"ۧ3>M+Yj0`[MSVlAnaDMUL 1q^UOKK^fM 2k)S ZƙVg3=:䬰]龨2Hcԗ?eqRIED楫0_g! Ϲ5}D hA TðvEtxz}nh+a;+w 9zRixnt_RNpup$ 0CeĴ\HBA9/|8RÙPJ =aHK+/ y?{)_֑MlQvVv9pIܮ9˷;zv#`mqPpբ%4~o$ϫ;ta6AQ$i(R ; Jvm; ["+|qDZwOdc=NǮKx7@V*^4-W!:;OhY!}}BOأF.jD_}Dj@ U3F>+bYŎ気BeJuLR 6 a1qKiPB U>N28JL ''V+zF܀bf\,+.mg/gIGLϖ2S '.`Iha#h7* KqyT yغ]hl6:OWtPz,mt|~\~ߋ >rNv:Y-<2AG_rODf׋ULi͒/q>6K@)v> F]-rm#xt[0˽әnFaDn:@*tPj,܉pv|~,~ߋi@:w-JGdO\%aN&=Kr,aAJSR՚C@|lwL+*Ta.NϞ$\I(5"VCG sywkWv:߆]q\I̴'aʩH,J ߜ<7=1VLR6EN 9{> iPlZ1f6 W-uZKnC~vtEhp]2Y04ne օƺPy0?oƷ'eN/Jd. 1#2ULR6PѽLD *cvIn i\`Yq(ւ5'wܡKD-q4Uq^RɹϚֻikhO'$ X; \aHHOJ/RR5@};<82ms2 %sРF}j5<"C ք=vU' 7#^%;YqvnM5G^ҡ㟽xbnsǰl[֣wFs3:A3gg뛹i,"^k"|}\(YTsF&iNUn頵h" VΑ?[N:WHwΩmvnY5<'L~^~+# [sg ;ίм2B۸mXk6fKr,B.:`7bḰ@* 꼒Fv7*P.)]_庱נ>?>\EH,DEs!rfw | [N#ٸA2B2Q rOGqӇ=v7lr }/=R%;Yw\C6͖ 뎫ikχn>ׇ@µFXtWdXB٥Ds ;gi@cv(L41 K %sY͌?;b"FբZ%&q?yl&xRƋϟ~5<OYĹŻ$Z#~D8 龶w\ب"ůmۍj \Zڂd,K*YWrnSG+nݔ;=lFӎQB7N"V8.HryzgRֺi0aqU#;lOdXB${"KpjiɽrNaTHL|?])[˯<:2SY"^K?Bt5`n$$"xkq~y%5_ƁÞ iPpes`N">8Fh1AO5PI%NE(RN5nHYwJsXE^\Q.hb] !QC K;8yQKL -wdţ局RLΝyaCqNzɳ'SF1vR6 辨@Y5&\ .AIF6fC `C|;;B<.\{_魯 R$'ɥoJU'ҭalS= moIzkЌ]!"Xv:߆|`q\>SFptJFAM21J#kRZ a@}ZmTa^y vРaF7n˶2D| OEքPN7J rGԪoIzkFREˈi<7\-ߐ ,u dY[Lvm~aKp И3M_;i~X/F}%j7ſ"{CdRf'o ~k>+ r{'`muֺy| ݈h?%S' EKE.)dXfev>"~",zY$;?6mvdu,K*YWrolQenVz]lvhƨ%~S= mWZ?FZ-6oHS+K?,*&Xs(.(DwY#Heßjw)j ^m+ b&R0AH0ޗ&$=MQ+%MI;&P.?GqHÆݎikhOG߮I$FprsYg42>U~aKx51҉OJ =aHe X%CǙk/A.p'L ԥkI#,4|ZN"VDGGqg4Ϟຯ~gk]|潹G;uW\I:,s~ڬHs,s5@.^(e;fzӊXO+>x g+>#(j!UnBtEN`vΰ!ˁ?HjxVLRָ'n~5wpxX:rZtឲlTeAPrZð~VRdEa 1}CpEt89c&',\R]PwFdɍ`M004p&2ڻ?vU'֙N/K*nZbeg1iUv:߆]q\I'$ X; \aHHOJ/RR5@}9^wJÍ,*~,+O_ʯH}j5<"C ք=vU' 7#^%;Yw\egRzy`nxn|lu'$ X; \aHHOJ/RR5@}9^wJmzpZ[ɳЮPwFdɍ4. v-w(ݬKO`ϋ|  9xbqL@- \8l +]Pw fUmlgI!OZ] &vdUNRZ-dPcgRֺ鎭뎫ikhO'$ X; \aHHQ(M *4 }wY,biX~2+|ж$!YT7 ,N_Y%st ^r{ߟjwƺʉ]s\VX/1'3`7Rר/(J#a߭3bY 1v fZ^O}v2(Ƌ%N<6~Qm#%SqC0Yhxv2/~Jן z+Z Sbip 2J+e ~S@zq+*rhd+)l*T6.N0n՚9"!7hA1HF#IKCwi[SV~$<|6Zo7o;OR,$S~a^lY7ǧRMCY X ZIYFϲ}]0,8v6Kޭ░0;Z]Kym!enNݗᇸ>:XLW1bMkHN> 9mβXO*l>JCgo ˱'f^-|lxU!lǼ?Gz~AѮ|WDQ 0R wfYqMp T_ݙ,5JoV"n$gkC ,|8I#$3NGŴze4czSpN|-5;#*3`R-#%a߭}b)Y 6 ~,+O1z؍x롞 !]e UlI[M*(*O?۠8UekX~ 6n]|Rj#<.a*ՌӘR)HVN?`]r9^6Yqgq`!ެ\$8p#E{m;+bd+Z7'r81GP\0Z0g4냯{_Kq8['+(Ȭ^%\M\>e[Rg!#R#>կBTi_f*T o.Ue gdҬ-!+mف?j}βU*0bW K3v UhĬ}v2wj#N<nj6pSR#%q]A 0YhxvC{4/~ן Q+ -)NTpK2~bJ+eZ eS@zqB(rhB+2nː 2S+-̹y٧fN+( 2DU`+U>%ΫlxVZ줃'<ݝ i͞hS;:dždu u/2,м?HK&Yy(`d5Q1^,T:mPF-g's)SI)卋k-Fd2 rȳb(HΨ: Iɞ ?bd4ojD8UUE3/Y{YϲqaCnDů<}[uAlD'#L|@i~5N× W=Q8FKƼ &oq}xVۓL't]KO60?OFbO]/GᣒMpLTmhyG?B$ć_y붹Z-(.9=Kfܶvކ1k^7UMKK^&~gcMRD k{B?dHN)~L^>z)Z3¼;,nٳGԥɠĤM%q(rn!x 9K5_>a19a6@#9`oܱgNi"mLK\U1A$&%tr]3\a=\|\AZqbR)EjJ@*OyTedDK>Ӧlӏx롋 !\`\ U}I[M(m*O@5Seka~ 6{k]|S<T*գӘS֍FVN>`j9s:sIǖAj01}nՊq@"!7͸Q*BCFRFwi=[C[~s4Ed|Zjjo;PR%TC~a^|ǧRCYH] &ZsYFhϲ}rR0,86[[ޭ*-ʷ;zv#`mxoqqjs"b_8 ζ D-ugWQz/^~ 46G5 }5cv$i\™tBPVq#}=M^v'>dc>'SV/F%FŻnewcz$pNvF|5;)#3` V\ #]߭fEbU ޔv pf# Ѯ}v-2yӽ)VW=Q=WKV)Fmf,&y R鞰˚nuD|i\aRUM0g,SOBS|L?Y~ 7_r9 .#SBTiGbIdT oU-4xWz+mwy4=ʲU*Cgo'}f^4lx!8˴CGf,5LHK &YIdd5Qސ2Nw:mPo$|"s)8I).R&-v rVLb$H~>qw~ b͞ 65i4onBM1UQE4,]{YƋpQ-^f⦆kdɴ!׬]%8p&E,;FbdmiZ7'r82GLl0Z% 4냯_Kf['+(!_ۯM\>eE[Om}:yN!&,wm^F2|yɡnNWC"1ŀg&jSde[PXHyN&,D^F|xfnNW%1Ȁa%jS=Yp)θ5!<)w ^O7kL\ZKqfq2b`28 gO D8)ugd]z/֪~ -) }5(v&ist{]'}'bv+>dF`F'sxH K <{-Mҩorb]K,OOy6* ?jOg_O\Z.*GEMoԈTmë}~G?B3ć_` 趹Z.;Fvs1il^7QKK_&gMy3¼8nإɠ+%$rn"xs 9_4$a19@6;zD# aXdgNDri~mDPK\>$ A$&#tr6"\a=`|\HBR-H'rQJ@*Te3DK>S{Ԧ Kx, ! UI]M (Ti*O=/ƇWek~~ 6vt0a|KK\)U{$j,wO2VS|LT~^=(^r9 #fVBTi]䜹gZ %]PwFM*n@n GpOMD=15m^ȱHyyDjvRɹϓݑȐJ25O/ ~ TAduδF0RbuBRJ =aHe S#]JsѕFTjG:;jޒ'!Dپ6Ģ1)%d. 92YpПM kf2&VdF`F'sxH K <{-Mҩorb]K,OOy6* ?jOg_O\Z.*GEMoԈTmë}~G?B3ć_` 趹Z.;Fvs1il^7QKK_&gMy3¼8nإɠ+%$rn"xs 9_4$a19@6;zD# aXdgNDri~mDPK\>$ A$&#tr6"\a=`|\HBR-H'rQJ@*Te3DK>S{Ԧ Kx, ! UI]M (Ti*O=/ƇWek~~ 6vt0a|KK\)U{$l4[hҀ\DݱWk]Vrx#hHe[F'rWMo}OfskC=V7 'dDO1n>K{1NOK9Ϝ2͢7jwƺK'cKQ'\xC6Z_2b#iF]c ft{Oa'6 s NXDaGK͓ r`dY8' 7$qs$GQX}R3jȺ9M7зkf_, ;7trc^1>Үgwڟa^s,5+^J0d <1 $c.UcDj_ )fIs67'MĢ1)%L.p|q Bзji !>JGdO\%MZH w;hRӘV}Q|bew#2N? )Ǘ03sǕT +_{ E_^TdNNF'W h;mfc{J;p3B!˟ t޳n=K'q|ZXko,r nO> 38`beJ:_D[F'۰I!lf L݁);=v'ƍсDPj2fˊ;ҢݕG@~:lpV' 7-OzBY^|5q넫*rksR"牧=y8 Oh5֑+ZX)yEʇd!/2Șio@X!^,,ÍX\.:֖׌5k8O'B0x1;ҧ|`s} K~†*knDr)r;]tcd1!`|*?u՛=F/vA2RZ--HycFзj3ˎݍ7kf\h!ЀôCKE6)xJxhҤR +N|{{1RP(T]lޝ0cYǓF&(6M0N}A[[+%w8/5 ^rJH"eAp3 Uzm|?. }f(pYξ#vΟ_oU?w?Km+k/ u-|P$5_Eh䟤IN^׫? icktKRleu?yE(ᖤ o hn>s8¸Fqpݼ6Hn'[d 22bTq#+&v]I.n@zD dض>'SVH7%`~jw 3qP ,7 hn>6FCGx, HƋ+fev8 K&-#(2ZtNތ8VC aH5d$URg</FJ<u4rhJZZ%zKs܊H#i!OZ^ 6M ^*_`i+eqK $OsLI$FprY[HvL`(R t 2J=B$!m %&ƟF&/BC*pJbٛpxuXN/M.W@ FPA޴CB cI!|5ĴCG{-)|HJ{4si @.9b sުx=f FAil#L?Yس=UmِEP tVM\z6ҙB 3݈6ylf#ljŹ~^Ɂ (e1ce[NW(RN5n-aGϢ1L|٢O _ݲɦӊRL}_܈,F/v6֑#%Jy;9Y?eZl pތ8VC aH5d$URg</FJ<u4rhJZZ%zKs܊H#i!OZ^ 6M ^*_`i+eqK $OsLI$FprY[HvL`(R t 2J=B$!m %&ƟF&/BC**.|g"CU>E *C.3*C.>w*C.|w*Cw# x3  MBASIC MENU LOADING MBASIC & MENU $BARG PAS:CALC COM  CALC DOC!CALC Z80\"#$%&'()*+,-GRAPH/DRDOCs./0123456789:;<GRAPH/DRBASR=>?@ABCDEFGG/CHANGEBASHIJKGR/DR/3DBASLMNGR/DUMP BASOGR/DUMP1BASPGR/PRCNTBASQRSGR/PRINTBASTUVWMENU BAS XYMENU/2 BASZRANDOM DTA[REVERS/PBAS!\]^_`SOLITAIRBAS(abcdeSQUABBLEBAScfghijklmnopqrSUBSERCHBASstuvAUTOST $$$BARG PAS:CALC COM  CALC DOC!CALC Z80\"#$%&'()*+,-GRAPH/DRDOCs./0123456789:;<GRAPH/DRBASR=>?@ABCDEFGG/CHANGEBASHIJKGR/DR/3DBASLMNGR/DUMP BASOGR/DUMP1BASPGR/PRCNTBASQRSGR/PRINTBASTUVWMENU BAS XYMENU/2 BASZRANDOM DTA[REVERS/PBAS!\]^_`SOLITAIRBAS(abcdeSQUABBLEBAScfghijklmnopqrSUBSERCHBASstuvAUTOST COMwCUBIST $$$Thi dis contain tw separat sections Firs ther i th se o program whic mak u th GRAPH/DRAנ program Secon ther i se o MBASI games Eac sectio ha it ow DO file I yo ar intereste i th MBASI game continu wit this DOC file, otherwise see the DOC file, GRAPH/DR. MBASIC GAMES for OSBORNE 1 by Lois J. Callaghan PO Box 104 Little York, New Jersey 08834 (201)996-2336 THESE GAMES RUN ON A 52 COLUMN DOUBLE DENSITY OZ. T us thi dis MBASI mus b PIPpe t it Plac CP͠ dis i driv A an thi dis i driv B A th A promp type PIP A th promp tak ou th CP dis an replac i wit th MBASI dis an type B:=A:MBASIC.CO Hi retur afte MBASI ha bee PIPpe ove an yo hav th prompt Tak bot disk ou o th drive an hi th rese button Plac thi gam dis bac i driv B Plac you CP bac i driv an hi return A th A promp typ SYSGE an yo wil b aske th dis t rea FROM answe A The yo wil b aske th destination answe B Whe rea successfull hi return Tak bot disk ou o th drives pu thi gam dis i driv an boo th disk Wit col boo th dis wil autostar t th Menu The games each have their own instructions. Th DOà fil fo th GRAPH/D progra ha it ow instruction i whic yo onl delet th PIPpin o MBASIà whic yo woul hav don if thi fil wa read first.ac CP͠ dis i driv A an thi dis i driv B A th A promp type PIP A th promp tak ou th CP dis an replac i wit th MBASI dis an type B:=A:MBASIC.CO Hi retur afte MBASI ha bee PIPpe ove an yo hav th prompt Tak bot disk ou o th drive an hi th rese button Plac thi gam dis bac i driv B Pl4[hҀ\DݱWk]Vrx#hHe[F'rWMo}OfskC=V7 'dDO1n>K{1NOK9Ϝ2͢7jwƺK'cKQ'\xC6Z_2b#iF]c ft{Oa'6 s NXDaGK͓ r`dR.' Bđy3TaxeF#Oࠟ8VcqfABל X},:ڪdad|/bͤf`@dFqii apV K1sQih=Uf5qE,ֽU>pV=YtVJ(MӱJZd$BcAIPRdQ "vURYR9"+N(|u{]XM+dO0̙`\b2쵘+rD&#eDfM iY3I䣵lɁ (e1KQgH]<glP/_*XUkW+:TKZ]nkkS Hg*n, R[7#?rGw_hGϝݝn5هB >?d\IݼHnRR*B+NJ&*TM+j0 gR乨H$2>DAUr zсhDnG^ NqFf`cz<ę~-!6Uq~K9;I_轅Ok!2kЛO` :bsSKZ spF&_~Y51"EC]&ۧGCq ^dX^we盗i3jZOk6[ih- QUq~L;JBUђwUn7:P@V}#%@O>+K_%=w[}IO!%Ū!хp &vn]|sꕰS=B;VY0_igfTB&' LxęhOҋO A_\:avSHJ҄k IR}DwXYG pl;%AZ}IDǏ%KF"$Q'P}sSK{`˵Y\ KpKR;&~ XEhfn^ X.\].CRN,8"^^`m+š+KSb݀%j$5knꊮvhvv׏響l% Jxv"Tf5=<?C** Qer;ϯ܇\12 Ejs:5_n ̳cs%:sgDOaMil#CۤtG}o #xy*Y\Mfc zo~k.8]h y`6 HHnk!-;ɠa^L*X3^JxDspFT5^gtyC%T%=PDؓ٩#=+;VY)gShRjˬ'xęqhO'$,݋}Ag4bY?\|5q넫Fk!&Z <1 $AK=J!\€W"2,ԟrGjMDz63_&yPc~RhǟqQB_--'/8XFX1LHk,pev|, qaw_9wXi ꚢZAK\@UqATom5A4p&l>t:I|\#,;#`TyG> i/xOyz[ŗA1$:K]Eڱ\XHf[K,WpE9ȍ9wlOJp-msg"xenI<@D&`G]!Ǖc^ԬXqΩtLZ([l@X9(((Y%^ KM %ӛ,izL 0ޗq&$=$QjCvs%1gt^UOOy^#G ŽP> !$Ptm=D ҬO/eĘRl$ {#wِTq1 ]#,Fkxj#erjn5?(EneDdUB#%!=1۠-YI8$ Q]AqfK!z ŴCGt,zge!J~gY=>Uav5XwY7%jT.%Tжaj2IԏdNܴ3MqjMAO#G%#T\q:vpF7G^ҡ㟹ubfcU~Zɺ\X1YxnOk# ̔ TnD}xmvp^z0wxj[E'mߕAnf6≂NJ;;#\7vo2 r{eɧ"$H 5S dYӘJ}Ql2˹igĺ.;7Ncpr2i'0}bS104p&->Ի v' :.a&ԻvCyǵ m_#zjGQwFĞiD)U M.3 :6}]2|̤J F~3@V}񥾗ef8_,+o̙`\b - W=qMd"q1C74|F 3r4nUVvHgµ.~MH<&Y|Abd5,`*D۩2VHWrn"S#ghf5nD26؄;C}w 1qLŦ[e93[0Mbkf trj0g(3~9Fnz>D`N YqN,,K*YWUAj*04p&;>$jMAKgX eKK_&ށ6“ݝ ۙ hn>=?G"B߰\a4{YYקqaGnD`N|~{pX+myրkӆn+s:"A$V 7m6חs%8Gy+ օƧןTdOXB?,Ҽ 1pHIR ěfy*PCD|jvmT "\rn"xr{@n *.=u0bdyUβ"q~-C4GqHnĒe_Kq!w[ǴCGf,3YӘR}>CyO } wG+Tez,K*YW(rnò˲nY;8ꝼ ,| d"N/R*nq[ILM;|Ⱥ>Kr}e" Ϙ]|\F ~a /Ҙ6 } *~,+O_ݵəV {ϲ _]v?ZNJvRMBl>O}%stVxÞnI|inL4qBF7y-OX܋S{Yr൰n -cd)[ݟUcx͑C@n -.=u0bd0tϲ"q&C3^F |=d4ndUR|?. },k̎W|\H sqa-D`N YqNs7DK `\Gu# S;Y38 ,bn"1!*O?0Y|˟*["VCGgNtZH;DϚM kf64.&;F\OLx۷kby#$ӱZtN28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!͍!(Ͳñ ! GRAPHICS.DTA<b!5!N}2*&Eʰ Ŕgb!͝}oEʛ !8!!!_b***&Rb!*+))))*+*&s, ŔGb!bcŔgbŔ5u h j y v q a z x w e d c g t f r b n m ` k i | { p !́ o ~ lbŔG͐bŔ" to run the program. If you have saved a previous graphics display, it will be displayed, otherwise the screen will be ready for new graphics input. To move the cursor without writing a character, set up the ARROW KEYS to the WordStar configuration (^S, ^E, ^X, and ^D) and use them for single-space movement, or the RETURN key for vertical column movement, or Ctrl-A to move 10 spaces to the left, or Ctrl-F to move 10 spaces to the right, or Ctrl-R to move 5 spaces up, or Ctrl-C to move 5 spaces down, or Ctrl-H to erase backwards, or the SPACE BAR to erase forward.  To erase a whole line/row, press ESC. Type "/Q" to quit. Type "/S" to save and quit. A file called "Graphics.Dta" will be saved with the x and y coordinates of each respective character. Copyright (c) by Doug Cox Nov '84 & May/June '85 for non-commercial use in the Public Domain.n the lower center. Type "Graphics" after the "A>" to run the program. If you have saved a previous graphics display, it will be displayed, otherwise the screen will be ready for new graphics input. To move the cursor without writing a character, set up the ARROW KEYS to the WordStar configuration (^S, ^E, ^X, and ^D) and use them for single-space movement, or the RETURN key for vertical column movement, or Ctrl-A to move 10 spaces to the left, or Ctrl-F to move 10 spaces to the right, or Ctrl-R to move 5 spaces up, or Ctrl-C to move 5 spaces down, or Ctrl-H to erase backwards, or the SPACE BAR to erase forward. program GRAPHICS; (* by Doug Cox for an Osborne *) label A, B; (* const ScreenTop: Integer= $F000; type Row= 1..24; Col= 1..128; PointerType= ^ScreenPointer; ScreenPointer= Array[Row, Col] of Byte; *) var (* p : PointerType ABSOLUTE ScreenTop; *) square : Array[1..80,1..23] of Char; ch : Char; x,y,z : Integer; fv : Text; ok : Boolean; procedure GetGraphics; begin Assign (fv, 'GRAPHICS.DTA'); {$I-} Reset (fv); {$I+} ok:= (IOresult= 0); if ok then begin write (#27#103); while not Eof (fv) do begin readln (fv, x, y, ch); GotoXY(x,y); write (ch); (* or p^[y,x]:= Ord(ch)-96; *) square[x,y]:= ch; end; write (#27#71); Close (fv); end; end; begin ClrScr; write (#27#103); (* start graphics *) write ('u h j y v q a z x w e d c g t f r b n m ` k i | { p ',^_,' o ~ l'); writeln (#27#71); (* end graphics *) write ('u h j y v q a z x w e d c g t f r b n m ` k i | { p ^_ o ~ l'); GotoXY(1,24); write (' /S to SAVE /Q to QUIT '); FillChar (square, SizeOf(square), ' '); GetGraphics; x:= 26; y:= 12; ch:= ' '; repeat A: GotoXY(28,24); ClrEol; write (' Char= ',ord(ch),' '); GotoXY(41,24); ClrEol; write (' X= ',x,' ','Y= ',y,' '); GotoXY(57,24); ClrEol; write (' ESC to Clear Line '); GotoXY(x,y); read (Kbd, ch); case ch of ^D : begin if x < 80 then x:= x+1 else x:=80; GotoXY(x,y); end; ^X : begin if y < 23 then y:= y+1 else y:= 23; GotoXY(x,y); end; ^S : begin if x > 1 then x:= x-1 else x:= 1; GotoXY(x,y); end; ^E : begin if y > 1 then y:= y-1 else y:= 1; GotoXY(x,y); end; ^F : begin if x < 70 then x:= x+10 else x:= 80; GotoXY(x,y); end; ^A : begin if x > 10 then x:= x-10 else x:= 1; GotoXY(x,y); end; ^R : begin if y > 5 then y:= y-5 else y:= 1; GotoXY(x,y); end; ^C : begin if y < 18 then y:= y+5 else y:= 23; GotoXY(x,y); end; ^M : begin if (x > 1) and (x < 80) then x:= x-1; if y < 23 then y:= y+1; GotoXY(x,y); end; ^[ : begin GotoXY(1,y); ClrEol; GotoXY(x,y); for z:= 1 to 80 do square[z,y]:= ' '; end; else if ch <> '/' then begin if ch= ^H then begin if x > 1 then x:= x-1 else x:= 1; GotoXY(x,y); write (' '); square[x,y]:= ' '; end else begin write (#27#103); write (ch); write (#27#71); square[x,y]:= ch; if x < 80 then x:= x+1; end; end; end; (* of Case *) until ch= '/'; GotoXY(28,24); ClrEol; write (ch); read (Kbd, ch); ch:= UpCase(ch); if ch= 'S' then begin B:write ('Saving "Graphics.Dta"...'); Assign (fv, 'GRAPHICS.DTA'); Rewrite (fv); for x:= 1 to 80 do for y:= 1 to 23 do if square[x,y] <> ' ' then writeln (fv, x,' ',y,' ',square[x,y]); Close (fv); end else if ch= 'Q' then begin write ('Quit without saving (Y/N)? '); repeat read (Kbd, ch); ch:= UpCase(ch); until (ch= 'N') or (ch='Y'); if UpCase(ch)= 'N' then Goto B; end else Goto A; ClrScr; end. [z,y]:= ' '; end; else if ch <> '/' then begin if ch= ^H then begin if x > 1 then x:= x-1 else x:= 1; GotoXY(x,y); write (' '); square[x,y]:= ' '; end else begin write (#27#103); write (ch); write (#27#71); square[x,y]:= ch; if x < 80 then x:= x+1; end; end; end; (* of Case *) until ch= '/'; GotoXY(28,24); ClrEol; write (ch); read (Kbd, ch); ch:= UpCase(ch); if ch= 'S' then begin B:write ('Saving "Graphics.Dta"...'); Assign (fv, 'GRAPHICS.DTA'); Rewrite (fv); for x:= 1 to 80 do for y:= 1 to 23 do if square[x,y] <> ' ' then writeln (fv, x,' ',y,' ',square[x,y]); Close (fv); end else if ch= 'Q' then begin write ('Quit with :  ,!#!!!Ͷ"P~ 88>.# ͭz8zz{{~)~ !(#(J(i5GLbPB8|BRW|!OB0A P R#{([O(a#R+{(e(f+R|!P * ,0PB*B!,|!0 ,z( R*P ,z(OR!PW[!SP> [0:8_ MEMORY LOCATION: CONTENTS:$SOLITAIRBAS(abcdeSQUABBLEBAScfghijklmnopqrSUBSERCHBASstuvAUTOST COMwCUBIST BASxGR/MENU DOC yzLEMANS BAS+{|}~GRAPHIC2COMOGRAPHIC2DOC GRAPHIC2PASOZ1MEM $$$OZ1MEM.CO writte b Dou Cox Sep 1985 i Z8 (assemble wit th Publi Domai Macr compile Z80MR.COM whic highl recommend). Thi progra display th memor o a Osborn o Vixe compute i a 8 colum b 2 ro format wit al norma ASCI character displayed an al other replace b dots Th hexadecima representatio o an characte unde th moveabl cursor alon wit it locatio i memory i show a th to o th screen. Th curso an scree ar move usin sub-se o WordSta command: ^K quit ^Q beginning of memory ^E cursor up ^X cursor down ^D cursor right ^S cursor left ^Z scroll screen down ^C next screen ^W scroll screen up ^R previous screen Th displa use th memory-mappe vide capabilit o th Osborn an Vixen an s wil onl wor o thos computers Fee fre t tampe wit th sourc code OZ1MEM.AZM. Doug Cox 140 Monroe Dr Palo Alto, Ca, 94306 (415)949-0624 ;MEM.AZM BDOS EQU 5 ORG 100H ;header LD E,1AH ;clear screen LD C,2 CALL BDOS LD A,(0F001H) ;check to see if this is an Osborne1 or Vixen CP 20H ; by seeing if an Osborne1 screen memory JP NZ,EXIT2 ; location = SPACE LD DE,BANNER LD C,9 ;print string CALL BDOS ;highlight or underline header LD B,2CH LD HL,0F000H TOPLP: SET 7,(HL) INC HL DJNZ TOPLP ;display mem LOOP1: LD HL,0 ;beginning of memory LD IX,0 ;initialize cursor pointer LD IY,0F080H ;initialize cursor location LOOP2 LD DE,0F080H ;beginning of screen memory location CALL CLRLIN ;clear first line and initialize (ROW) LD (TOPLEF),HL ;to hold memory location that goes into 0F080H LOOP3: LD B,80 LOOP4: LD A,(HL) CP 20H JR C,LPJP ;(HL) < SPACE CP 7FH JR C,LOOP5 ;(HL) < 'DEL' LPJP: LD A,2EH ;'.' LOOP5: LD (DE),A ;put char on screen INC DE INC HL DEC B JR NZ,LOOP4 ;put the next line on the screen NEXLIN: PUSH HL CALL NEWLIN POP HL LD A,D CP 0FCH ;25th line JR C,LOOP3 ;another line if A < 25th line ;if 23 lines have been displayed then... CURSOR: SET 7,(IY) ;highlight or underline cursor position PUSH IX POP DE LD BC,0F016H ;put memory location in header LD A,D CALL HEX1 LD A,D INC BC CALL HEX2 LD A,E INC BC CALL HEX1 LD A,E INC BC CALL HEX2 ; LD A,(IX) LD BC,0F029H ;put memory contents in header CALL HEX1 LD A,(IX) INC BC CALL HEX2 ; WAIT: PUSH HL LD C,6 ;wait for keypressed LD E,0FFH CALL BDOS POP HL CP 0BH ;^K JP Z,EXIT CP 11H ;^Q JP Z,LOOP1 CP 5 ;^E JR Z,CURUP CP 18H ;^X JR Z,CURDN CP 4 ;^D JR Z,CURRT CP 13H ;^S JP Z,CURLFT CP 1AH ;^Z JP Z,DOWN CP 12H ;^R JP Z,PREV CP 17H ;^W JP Z,UP CP 3 ;^C JP Z,NEXT JR WAIT ; CURUP: RES 7,(IY) PUSH HL ;save HL PUSH IX POP HL ;put cursor pointer in HL LD BC,80 SBC HL,BC JR C,CURUP1 ;if cursor at memory beginning PUSH HL POP IX ;put it back PUSH IY POP HL ;put cursor location in HL LD A,H CP 0F0H JP Z,CURSKP ;if cursor at top of screen LD BC,80H SBC HL,BC PUSH HL POP IY ;put it back CURUP1: POP HL ;get HL JP CURSOR ; CURSKP: POP HL ;get HL JP UPSKP ; CURDN: RES 7,(IY) LD A,H CP 0FFH ;see if at end of memory JP Z,LOOP1 PUSH HL ;save HL PUSH IY POP HL ;put cursor screen location in HL LD BC,0FB4FH SBC HL,BC ;see if at line 24 POP HL ;get HL JR NC,DOWNSK LD BC,80H ADD IY,BC LD BC,80 ADD IX,BC JP CURSOR ; CURRT: RES 7,(IY) INC IX PUSH IY POP DE ;put cursor location in DE LD A,E CP 0CFH ;right side of screen memory JR Z,LEFT1 CP 04FH ;also right side of screen memory JR Z,LEFT2 INC IY JP CURSOR ; CURLFT: RES 7,(IY) DEC IX PUSH IY POP DE ;put cursor location in DE LD A,E CP 0 ;left side of screen memory JR Z,RIGHT1 CP 80H ;also left side of screen memory JR Z,RIGHT2 DEC IY JP CURSOR ; DOWN: LD A,H CP 0FFH ;see if at end of memory JP Z,LOOP1 DOWNSK: LD BC,80 ADD IX,BC LD HL,(TOPLEF) ADD HL,BC JP LOOP2 ; PREV: LD BC,1840 JR !UP2 UP: LD BC,80 UP2: PUSH IX POP HL SBC HL,BC ;decrease cursor pointer by 80 PUSH HL POP IX UPSKP: LD HL,(TOPLEF) SBC HL,BC ;decrease HL by 80 JP C,LOOP1 ;if at beginning of memory JP LOOP2 ; NEXT: LD A,H CP 0FFH ;see if at end of memory JP Z,LOOP1 LD BC,1840 ;23*80 ADD IX,BC JP LOOP2 ;next page ; LEFT1: LD A,D CP 0FBH ;line 24 JR Z,LEFBOT INC D LD E,0 JR LEFTSK LEFT2: LD E,80H LEFTSK: PUSH DE POP IY JP CURSOR ; LEFBOT: LD E,80H PUSH DE POP IY ;put 0FB80H in IY LD HL,(TOPLEF) LD BC,80 ADD HL,BC JP LOOP2 ; RIGHT1: DEC D LD E,0CFH ;column 79 JR RIGHT3 RIGHT2: LD A,D CP 0F0H ;beginning of screen memory JR Z,RTTOP LD E,4FH ;also column 79 RIGHT3: PUSH DE POP IY JP CURSOR ; RTTOP: LD IY,0F0CFH ;top right of screen memory LD BC,80 JP UPSKP ;point to the next line on the screen and clear it NEWLIN: LD DE,(ROW) LD HL,80H ADD HL,DE EX DE,HL ;next line in DE CLRLIN: LD (ROW),DE LD B,80 LD A,20H ;space CLRLP: LD (DE),A ;clear line INC DE DJNZ CLRLP ;dec B & jump NZ LD DE,(ROW) RET ; HEX1: RRA ;put left 4 bits on right RRA RRA RRA HEX2: AND 0FH ;mask off left 4 bits ADD A,30H ;move hex numbers up to decimal range CP 3AH ;greater than '9'? JR C,NUM ;jump if not ADD A,7 ;convert to A,B,C, etc NUM: OR 80H ;highlight or underline it LD (BC),A ;put it in header RET ; EXIT: LD C,6 ;direct console output LD E,A CALL BDOS LD C,2 LD E,1AH ;clear screen CALL BDOS EXIT2: RET ;to CP/M ; BANNER: DB ' MEMORY LOCATION: CONTENTS:$' ROW: DS 2 TOPLEF: DS 2 END n CALL BDOS EXIT2: RET ;to CP/M ; CP 0F0H ;beginning of screen memory JR Z,RTTOP LD E,4FH ;also column 79 RIGHT3: PUSH DE POP IY JP CURSOR ; RTTOP: LD IY,0F0CFH ;top right of screen memory LD BC,80 JP UPSKP ;point to the next line on the screen and clear it NEWLIN: LD DE,(ROW) LD HL,80H ADD HL,DE EX DE,HL ;next line in DE CLRLIN: LD (ROW),DE LD B,80 LD A,20H ;space CLRLP: LD (DE),-@!~)43!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7-@!~)43}|xhpHP`<(0  @2VΔ%Q7ZG098O1JPWLRAM6BXDYCKN23FU45VHSITE?.,/13 =>2UeʜS%eS ʃ!T Osx!Fͫw!TN; ;syʎÆ!(6- 6L!">2!4"!~7?W#~wz+:`w_%z/W*N -FC!+Fx7?GPf@PsZ>=u s:, 2,>}=@>}=@ @:,2,ɀ!65 ; D!5ʲ:Fͫw!:FͫwL F:ͫw*>f -!>( 4*Ͳ!TN; bk~;*!sS}òY]*q*### TEACH3.ASM is a version of TEACH2.ASM modified to relocate the BEEP routine above 4000h while leav- ing the rest of the program in low memory like a normal CP/M program. This results in a COM. file that is only 1k in size rather than the 17k required by the original version. TEACH3 is set up for the double density machines but could easily be modified for single density versions by changing the "shadow mode" routines. The new version relocates the code for the BEEP routine to the protected area above 4000h when the program first starts. The method used is not the most elegant but it works. The beginning and of BEEP are labeled and the length is computed by the assembler. When the program is invoked a small sec- tion of code takes this information and relocates BEEP by the Z80 LDIR instruction. The LDIR instruc- tion is obtained by the use of 8080 DB's so ASM is usable. Since There is only one call to BEEP it is replaced by a fixed CALL 4000h. A label might be more elegant but there is no real need for the routine to be moving around. The labels within BEEP have offsets in the source code that are computed by the assembler. This alows BEEP to be modified easi- ly if so desired. By only relocating the one rou- tine affected by the I/O process the modification was kept very simple. I also added some punctuation to the program. I would like to add the common procedure signals but I don't know of a standard single character repre- sentation. The RSGB handbook gives some equivilenc- es but I'm not sure if they are standard. This could be a simple modification for someone. Richard Hall WB4OEM 5 December, 1984 uroked a small sec- tion of code takes this information and relocates BEEP by the Z80 LDIR instruction. The LDIR instruc- tion is obtained by the use of 8080 DB's so ASM is usable. Since There is only one call to BEEP it is replace" ;TEACH MORSE CODE ; ; ; ; REVISION HISTORY ; ; 10/02/76 INITIAL VERSION ADAPTED FROM 6800 ; 10/07/76 DOUBLE WEIGHT IF AVERAGE > 90 PCT. ADDED. ; 10/07/76 LETTER PROBABILITY NEVER ZERO ADDED. ; 12/06/76 REVISED RANDOM AND REMOVED PUNCTUATION ; TO SAVE SPACE IN 512 BYTE ROM. ; 03/23/77 CORRECT TYPO IN DOUBLE WEIGHT PROBABILITY. ; 06/03/77 ADDED SWITCHES FOR CPM, MORORW, IMSAI, AND HAL ; 09/08/78 ADDED SWITCH FOR SHERWOOD ASSEMBLY ; 04/18/82 ADDED SWITCHES AND BEEP CONTROL FOR OSBORNE ; 05/01/82 CHANGED EXIT TO WARM START ON ^C FOR CP/M ; 03/06/83 Revised Osborne shadow mode control /jw ; 12/05/84 Added some punctuation and changed the program to relocate ; the beep routine only above 4000H. This allows the program ; to be contained in only 1k of disk space. /rlh ; ; ASSEMBLY CONSTANTS ; FREQ EQU 4000 ;MACHINE CYCLES PER MSEC WPM EQU 15 ;SEND SPEED=15 MINIMUM, OR OVRFLO IN SEND SUBROUTINE IDLE EQU 3*50 ;IDLE RESPONSE WAIT MAXNUM EQU 26+14 ;MAXIMUM NUMBER OF CHARACTERS (LET+FIG) PPIM EQU 0FH ;8255 MODE SELECT ; FALSE EQU 0 TRUE EQU NOT FALSE ; IMSAI EQU FALSE ;USES PORT 255 HAL EQU FALSE ;ORIGINAL VERSION CPM EQU TRUE ;USE BDOS I/0 MOROWS EQU FALSE ;USE EI/DI INSTEAD OF I/O PORT SHERWOOD EQU FALSE ;USE SONALERT FOR TONE ON PORT 203 OSBORNE EQU TRUE ;USE SONALERT FOR TONE ON 2C02H, BIT 5 (LSB=BIT 0) ; IF NOT OSBORNE LINE EQU 62 ;TERMINAL LINE LENGTH ENDIF ; IF OSBORNE LINE EQU 51 ;TERMINAL LINE LENGTH ENDIF ; ; MONITOR SUBROUTINE ENTRIES ; IF HAL CO EQU 8009H ;COMMAND OUTPUT CI EQU 8003H ;COMMAND INPUT CSTS EQU 8012H ;COMMAND INPUT STATUS ; ORG 40H ;RAM ENDIF ; IF CPM ORG 100H ENDIF ; IF OSBORNE LXI B,ENDBP-BEEP LXI D,4000H LXI H,BEEP DB 0EDH ;Z80 CODE FOR LDIR TO RELOCATE DB 0B0H ;BEEP ABOVE SHADOW ROM SPACE ENDIF ; IF NOT HAL JMP BEGIN ENDIF ; ; ; GLOBAL DATA ; SEED DW 1234H ;RANDOM NUMBER (MUST BE NON-ZERO) NUM DW ERROR+4 ;SIZE OF CURRENT ALPHABET GIVE DB IDLE ;RESPONSE WAIT TIME IS SEC/50 TOLD DB 0 ;255 IF STUDENT WAS TOLD LETTER, 0 OTHERWISE COLUMN DB LINE ;PRINT POSITION REMAINING ON LINE ; ; OBJECT TIME STACK ; DS 30 STACK DS 0 ; ; ERROR RATE FUNCTION ; ; IF HAL ORG 100H ;MUST ORG AT A MULTIPLE OF 100H ENDIF ; IF NOT HAL ;ORG TO NEXT MULTIPLE OF 100H ORG ($ OR 255) + 1 ENDIF ; ERROR DB 255 ;TOTAL ERROR RATE DS MAXNUM ; ; ENTRY POINT (FWA ROM) ; ; IF HAL ORG 200H ENDIF ; BEGIN JMP TEACH ; ; CHARACTER CODE TABLES ; MORSE EQU $-1 DB 11011000B,11000100B,11001000B,11010000B DB 11111100B,11110100B,11100100B,11110000B DB 01111100B,01111000B,01101000B,01110000B DB 01001000B,01010000B,01100000B,11100000B DB 10000100B,10001000B,10011000B,10010000B DB 10111000B,10101000B,10110000B,10100000B DB 00111100B,00011100B,00101000B,00110000B DB 00001100B,00000100B,00011000B,00001000B DB 00010000B,00100000B,11000000B,01000000B DB 00110010B,01010110B,11001110B,10010100B ; ASCII DB 25H ;OVERALL PERCENTAGE DB 'Q7ZG' DB '098O' DB '1JPW' DB 'LRAM'  DB '6BXD' DB 'YCKN' DB '23FU' DB '45VH' DB 'SITE' DB '?.,/' ; ; MAIN PROGRAM TEACH ; ; ENTRY VIA JUMP. STACK POINTER IS REINITIALIZED. ; INTERUPTS ARE NOT USED. ; TEACH: LXI SP,STACK CALL PRESET TEA1: CALL GRAPH TEA2: CALL SELECT MVI A,0 STA TOLD ;CLEAR STUDENT TOLD FLAG TEA3: CALL SEND PUSH D CALL CSTS ;LOOK FOR ENTRY WHILE SENDING ANA A JZ TEA4 CALL CI ;DISCARD CHARACTER TEA4: MVI B,0 ;CLEAR RESPONSE TIME COUNTER MVI C,0 ;CLEAR CORRECT RESPONSE FLAG TEA5: PUSH B CALL RANDOM ;MIX UP NUMBERS CALL CSTS ANA A JZ TEA6 ;IF NO RESPONSE YET CALL CI ;GET CHARACTER POP B POP D CPI 0DH ;CARRIAGE RETURN JZ TEA1 ;GIVE STUDENT A GRAPH LXI H,ASCII-ERROR DAD D CMP M PUSH D JNZ TEA5 ;IF WRONG GUESS MOV C,A ;SET CORRECT RESPONSE FLAG JMP TEA7 TEA6: MVI C,20 CALL WAIT ;KILL SOME TIME POP B MOV A,B INR A ;GAD***** IS THIS SILLY MOV B,A ;WHY NOT INR B ********* LDA GIVE CMP B JNZ TEA5 ;IF SOME TIME LEFT LXI H,TOLD MVI M,255 ;RECORD TIMEOUT TEA7: MOV A,B ;COMPUTE NEW SPEED POP D STC CMC RAL ;RESPONSE TIME * 2 JNC TEA8 MVI A,255 ;SET TO MAXIMUM ON OVERFLOW TEA8: LXI H,GIVE MOV B,M CALL WEIGHT ;ADJUST SPEED MOV M,A LXI H,ASCII-ERROR DAD D PUSH B ;SAVE ANSWER MOV C,M CALL PRINT ;OUTPUT CORRECT ANSWER MVI C,' ' CALL PRINT ;DOUBLE SPACE MVI C,250 CALL WAIT POP B MOV A,C ANA A JZ TEA3 ;IF INCORRECT TRY IT OVER CALL GRADE JMP TEA2 ; ; SUBROUTINE PRESET ; ; INITIALIZE I/O AND GLOBAL VARIABLES ; PRESET: LXI H,ERROR+MAXNUM PRE1: MVI M,255 ;SET ERRORS TO MAXIMUM DCR L JNZ PRE1 MVI M,256*30/100 ;GUESS AVERAGE OF 70 PERCENT LXI H,ERROR+4 SHLD NUM ;MINIMUM ALPHABET MVI A,IDLE STA GIVE ;AVERAGE SPEED LXI H,1234H SHLD SEED ;NON-ZERO RANDOM SEED ; IF HAL MVI A,0A6H OUT PPIM ;PROGRAM MODE 1 OUTPUT ENDIF ; IF SHERWOOD XRA A ;INIT FRONT PANEL PIA OUT 200 OUT 202 CMA OUT 201 OUT 203 MVI A,4 OUT 200 OUT 202 MVI A,10H OUT 203 ;INITIALLY TURN OFF TONE #ENDIF ; RET ; ; ; SUBROUTINE RANDOM ; ; TAUSWORTH GENERATOR USING PRIMITAVE TRINOMIAL ; X**15 + X + 1 WITH PERIOD 2**15-1. ; RETURNS 0 < (D,E) < 2**15. ; RANDOM: LXI H,SEED MOV A,M STC CMC RAL ;HE SHOULD HAVE USED ORA A !!!!!! MOV D,A INX H MOV A,M RAR XRA M MOV M,A MOV A,D DCX H XRA M JNC RAN1 XRI 60H RAN1: MOV M,A MOV E,A RET ; ; ; SUBROUTINE SELECT ; ; ON EXIT (D,E) CONTAINS A POINTER TO THE SELECTED ; CHARACTER IN THE ERROR TABLE. PRESERVES NO REGISTERS. ; SELECT: CALL RANDOM MOV A,D CMA ;MAKE RANDOM NUMBER NEGATIVE MOV D,A SEL1: LHLD NUM ;BEGIN SCAN SEL2: MOV C,M ;GET ERROR RATE MVI B,0 INX B ;INSURE PROBABILITY IS NEVER ZERO XCHG DAD B ;ADD ERROR TO RANDOM NUMBER RC ;STOP LOOP ON CARRY OUT XCHG DCR L JNZ SEL2 ;SCAN REMAINDER OF TABLE JMP SEL1 ;START SCAN OVER ; ; ; SUBROUTINE SEND ; ; THE CHARACTER REFERENCED BY (D,E) IS SENT AS MORSE CODE. ; ON EXIT D,E ARE PRESERVED. ; SEND: LXI H,MORSE-ERROR DAD D MOV B,M ;GET MORSE LETTER SEN1: MOV A,B STC ;HE SHOULD HAVE USED ORA A !!!!!!*** CMC RAL ;GET NEXT ELEMENT IN CARRY MOV B,A MVI C,1200/WPM ;ONE DIT TIME IN MSEC JNC SEN2 MVI C,3*1200/WPM ;ONE DAH TIME SEN2: ANA A RZ ;IF LAST BIT WAS STOP BIT CALL 4000H ;BEEP RELOCATED MVI C,1200/WPM ;INTER ELEMENT SPACE CALL WAIT JMP SEN1 ;LOOP FOR REMAINING BITS ; ; ; SUBROUTINE WAIT ; ; DELAY C MSEC. ON EXIT A AND C ARE ZERO. ; ALL OTHER REGS ARE PRESERVED. ; WAIT: MVI A,FREQ/16 WAI1: DCR A JNZ WAI1 ;LOOP FOR A MSEC DCR C JNZ WAIT ;IF MORE MSEC TO GO RET ; ; ; SUBROUTINE BEEP ; ; DELAY C MSEC WHILE GENERATING A 1000HZ SIDETONE. ; OUTPUT IS ON 8255 PORT PC4. ; ENTRY/EXIT SAME AS WAIT (SEE ABOVE). ; ; THIS MODULE HAS BEEN MADE RELOCATABLE BY SIMPLY CHANGING THE JUMP ; DESTINATIONS BY THE FIXED AMOUNT TO GET THEM ABOVE 4000H. THE ELEGANT ; METHOD MIGHT HAVE BEEN TO MAKE USE OF ASM'S ABILITY TO USE LABELS THAT ; CAN VARY AT ASSEMBLY TIME ALA MDOEM7XX OVERLAYS BUT THIS WORKS AND THE ; OSBORNE1 IS PROBABLY THE ONLY COMMON COMPUTER THAT USES THIS SORT OF ; VOODOO I/O. BEEP: IF OSBORNE di ;enter shadow mode out 0 LDA 2C02H ;GET PIA STATUS ORI 20H ;SET BIT 5 STA 2C02H ;BELL ON out 1 ei ;leave shadow mode ENDIF ; IF SHERWOOD MVI A,20H OUT 203 ;TONE ON ENDIF ; BEE9: MVI A,FREQ/16/2 BEE1: DCR A ; IF OSBORNE JNZ BEE1+4000H-BEEP ;LOOP FOR 1/2 MSEC ;LABEL CHANGED FOR RELOCATION ENDIF ; IF NOT OSBORNE JNZ BEE1 ENDIF ; IF HAL MVI A,1001B ;SET PC4 OUT PPIM ;LO TO HIGH ON OUTPUT ENDIF ; IF MOROWS EI ENDIF ; IF IMSAI MVI A,1000$0000B OUT 0FFH ENDIF ; BEE2: MVI A,FREQ/16/2 BEE3: DCR A ; IF OSBORNE JNZ BEE3+4000H-BEEP ;LOOP FOR SECOND 1/2 MSEC ;LABEL CHANGED FOR RELOCATION ENDIF ; IF NOT OSBORNE JNZ BEE3 ENDIF ; IF HAL MVI A,1000B ;CLEAR PC4 OUT PPIM ;HIGH TO LO ON OUTPUT ENDIF ; IF MOROWS DI ENDIF ; IF IMSAI MVI A,0000$0000B OUT 0FFH ENDIF ; DCR C ; IF OSBORNE  JNZ BEE9+4000H-BEEP ;IF MORE MSECS TO GO ;LABEL CHANGED FOR RELOCATION ENDIF ; IF NOT OSBORNE JNZ BEE9 ENDIF ; IF OSBORNE di ;enter shadow mode out 0 LDA 2C02H ;GET PIA STATUS ANI 0DFH ;RESET BIT 5 STA 2C02H ;BELL OFF out 1 ei ;leave shadow mode ENDIF ; IF SHERWOOD MVI A,255 OUT 203 ENDIF ; RET ENDBP EQU $ ;END RELOCATION MODULE ; ; ; SUBROUTINE WEIGHT ; ; COMPUTES A WEIGHTED MOVING AVERAGE ; AS FOLLOWS, A = .875 * B + .125 * A ; ALL OTHER REGS ARE PRESERVED. ; WEIGHT: ADD B RAR ;(A+B)/2 ADD B RAR ;((A+B)/2+B)/2 ADD B RAR ;(((A+B)/2+B)/2+B)/2 RET ; ; ; SUBROUTINES RETURN, PRINT ; ; OUTPUT CR/LF OR CHARACTER IN C. ; ON EXIT D,E AND A ARE PRESERVED. ; RETURN: LXI H,COLUMN MVI M,LINE+2 MVI C,0DH ;CR CALL PRINT MVI C,0AH ;LF FALL THROUGH TO PRINT PRINT: PUSH D PUSH PSW CALL CO POP PSW POP D LXI H,COLUMN DCR M JZ RETURN ;LOCAL CR/LF RET ; ; ; SUBROUTINE GRADE ; ; INDIVIDUAL AND TOTAL ERROR RATES ARE ; COMPUTED. THE SIZE OF THE ALPHABET IS ; INCREASED IF PERFORMANCE IS ADAQUATE. ; ON ENTRY D,C POINTS TO CHARACTER ERROR TABLE ; ENTRY, (TOLD) IS 0 FOR CORRECT OR 255 FOR INCORRECT. ; GRADE: LDA TOLD XCHG MOV B,M CALL WEIGHT ;ADJUST INDIVIDUAL RATE MOV M,A XCHG LXI H,ERROR LDA TOLD MOV B,M CALL WEIGHT ;ADJUST AVERAGE RATE MOV M,A CPI 256*30/100 JNC GRA3 ;IF BAD AVERAGE CPI 256*10/100 JNC GRAD ;IF GOOD, BUT NOT GREAT XCHG MOV B,M LDA TOLD CALL WEIGHT ;COUNT SCORE TWICE IF HOT MOV M,A GRAD: LHLD NUM MVI A,256*40/100 GRA1: CMP M JC GRA3 ;IF BAD INDIVIDUAL RATE DCR L JNZ GRA1 GRA2: LXI H,NUM ;CHECK FOR COMPLETE ALPHABET MVI A,MAXNUM CMP M JZ GRA3 INR M ;ADD LETTER GRA3: RET ;GAD* THIS IS SILL, WHY JUMP TO A RETURN ; ; ; SUBROUTINE GRAPH ; ; THE PREDICTOR FUNCTION IS DISPLAYED. ; ALL THE REGISTERS ARE DESTROYED. ; GRAPH: LHLD NUM XCHG GPH1: CALL RETURN LXI H,ASCII-ERROR DAD D MOV C,M ;GET ASCII FOR CURRENT CHARACTER CALL PRINT MV$I C,' ' MOV H,D MOV L,E MOV A,M ;B IS ERROR RATE GPH2: CALL PRINT ;PRINT BAR GRAPH MVI C,'*' SUI 255/LINE+1 JNC GPH2 ;IF A IS STILL POSITIVE MVI C,250 ;SLOW DOWN FOR FAST DISPLAYS CALL WAIT DCR E JP GPH1 ;LOOP FOR ALL BARS CALL CI CPI 1BH ;ESC CHAR-WANT NEW RUN AT IT? JZ TEACH ;YUP-START OVER ; IF CPM CPI 3 ;IF CONTROL-C JZ 0 ;WARM START ENDIF ; IF NOT CPM CPI 1 ;JUMP TO MONITOR ON ^A JZ 0FC00H ;YUP GOTO ODT ENDIF ; JMP RETURN ; ; ; ADDED I/O DRIVERS ; IF CPM CO: PUSH H! PUSH D! PUSH B PUSH PSW MOV E,C MVI C,2 CALL BDOS POP PSW POP B! POP D! POP H RET ; BDOS EQU 5H ; CI: PUSH H! PUSH D! PUSH B CALL CICPM POP B! POP D! POP H RET ; CICPM: LHLD 1 ;POINTER TO BIOS WARM START LXI D,6 DAD D ;POINT TO CONSOLE INPUT ROUTINE PCHL ;JUMP TO CONSOLE INPUT ROUTINE ; CSTS: PUSH H! PUSH D! PUSH B CALL CSTSCP ANI 1 POP B! POP D! POP H RET ; CSTSCP: LHLD 1 INX H! INX H! INX H PCHL ENDIF ; END TEACH  LEARN MORSE CODE ON YOUR OSBORNE ! Submitte b Bo Briggs Th progra TEAC fro th CP/ User' librar ha bee modifie t wor o th OSBORN an i no i th FO library Thi progra wil teac yo mors cod usin th OSBORN beeper Ther ar tw programs TEACH.AS an TEACH.COM Al yo nee i TEACH.CO͠ unles yo wan t modif th program i whic cas yo wil nee TEACH.ASM T ru TEACH.COM ge th CP/ promp A o B> dependin o whic dis contain th program an the typ TEACH Th scree wil sho colum o letter alon th lef margin eac followe b ro o asterisks Typ an ke t begin Yo wil hea th mors cod fo th lette (da da dit an yo shoul typ th lette befor th answer whic i G appear o th screen I yo hi th correc ke th answe wil immediatel b show an th nex lette sent I yo hi th wron key afte shor dela th answe wil b show an th lette repeated. Afte yo hav responde correctl t th lette fe times th progra wil sen yo ne letter Th mor correc answers th mor ne letters. Yo ca chec you progres b holdin dow th RETUR ke unti th scree show th row o asterisk again Th mor correc response yo hav give fo particula letter th les asterisk o th ro fo tha letter Th botto ro o asterisks adjacen t th sign give a average indicatio o you recen progress. A thi poin yo ca continu b hittin an key o yo ca star ove b hittin ESC o yo ca exi wit CONTROL-C. Th spee i se prett slow Yo ca var th spee b modifyin th progra a follows. 1 Loa th TEACH.AS fil wit Wordsta usin th command D NO us th command. 2 O th lin FRE EQ 400 chang th numbe 400 t sui you fancy ɠ hav trie 4000 3000 an 200 s yo ca b confiden th progra wil wor fo these Th smalle th number th faste th speed. 3 Sav th modifie progra wit th ^K comman t dis wit abou 30 o mor fre spac remaining. 4 Remov th Wordsta disk inser th CP/ Utilitie dis i driv A pres RESET the pres RETURN. 5 Plac th dis containin TEACH.AS i driv B. 6 Typ AS B:TEACH.BBZ Se OSBORN User' Guid pag 6- (loose lea version i yo wan differen options. 7 Typ LOA B:TEAC an wait. 8 Typ B:TEAC t ru th revise program. 9 Yo ca eras th TEACH.HE fil afte th LOAĠ comman ha finished.  i se prett slow Yo ca var th spee b modifyin th progra a follows. 1 Loa th TEACH.AS fil wit Wordsta usin th command D NO us th command. 2 O th lin FRE EQ 400 chang th numbe 400 t sui y This is the release date of the disk. RANDOM DTA [REVERS-PBAS \SOLITAIRBAS aSQUABBLEBAS f1SUBSERCHBAS sAUTOST COM wCUBIST BAS xGR-MENU DOC yLEMANS BAS {GRAPHIC2COM 'GRAPHIC2DOC GRAPHIC2PAS OZ1MEM COM OZ1MEM DOC GR/DR/3D.BAS B3 E9 2944 23 GR/DUMP .BAS BD B1 640 5 GR/DUMP1.BAS 93 72 512 4 GR/PRCNT.BAS D2 83 3072 24 GR/PRINT.BAS 97 0E 3712 29 MENU .BAS 26 4A 1152 9 MENU/2 .BAS E9 C6 1024 8 RANDOM .DTA C1 04 128 1 REVERS/P.BAS 22 5B 4224 33 SOLITAIR.BAS E7 EE 5120 40 SQUABBLE.BAS 8F 80 12672 99 SUBSERCH.BAS A2 A8 3840 30 AUTOST % Fog Library Disk FOG-CPM.149 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Osborne 1 Programs. Filename Description -09-00 .86 This is the release date of the disk. -CPM149 .DOC This is the description of the disk contents. BARG .COM 37C7 16K [BAR GRAPH 1 of 3] A bar-graph program that uses typed in figures. BARG .DOC 9E9A 4K [BAR GRAPH 2 of 3] BARG .PAS 73B5 8K [BAR GRAPH 3 of 3] CALC .COM B7A8 2K [CALCULATOR 1 of 3] A simple four-function, two-decimal calculator with Pascal source code. This works on the Osborne Vixen as well. CALC .DOC 6EA5 1K [CALCULATOR 2 of 3] CALC .Z80 8441 12K [CALCULATOR 3 of 3] GRAPH-DR.DOC 83E7 15K [Graph-Draw 1 of 8] A graphics program that allows you to deign on the O1 screen and print the results. GRAPH-DR.BAS 174E 11K [Graph-Draw 2 of 8] G-CHANGE.BAS BEA1 4K [Graph-Draw 3 of 8] GR-DR-3D.BAS B3E9 3K [Graph-Draw 4 of 8] GR-DUMP .BAS BDB1 1K [Graph-Draw 5 of 8] GR-DUMP1.BAS 9372 1K [Graph-Draw 6 of 8] GR-PRCNT.BAS D283 3K [Graph-Draw 7 of 8] GR-PRINT.BAS 970E 4K [Graph-Draw 8 of 8] MENU .BAS 264A 2K [Graph-Dr & Games 1 of 11] This menu starts the Graph-Draw program or a set of Basic games. An Auto Start Program is included so the disk can jump right to the MENU. MENU-2 .BAS E9C6 1K [Graph-Dr & Games 2 of 11] RANDOM .DTA C104 1K [Graph-Dr & Games 3 of 11] REVERS-P.BAS 225B 5K [Graph-Dr & Games 4 of 11] SOLITAIR.BAS E7EE 5K [Graph-Dr & Games 5 of 11] SQUABBLE.BAS 8F80 13K [Graph-Dr & Games 6 of 11] SUBSERCH.BAS A2A8 4K [Graph-Dr & Games 7 of 11] AUTOST .COM 428D 1K [Graph-Dr & Games 8 of 11] CUBIST .BAS 595E 1K [Graph-Dr & Games 9 of 11] GR-MENU .DOC 9B0F 2K [Graph-Dr & Games 10 of 11] LEMANS .BAS ADC6 6K [Graph-Dr & Games 11 of 11] GRAPHIC2.COM 91FE 10K ver. 2 [Graphics 1 of 3] Allows you to type graphics characters on the screen & display X-Y coordinates. Turbo Pascal source code is included. This works on the Vixen also. GRAPHIC2.DOC 61A3 2K ver. 2 [Graphics 2 of 3] GRAPHIC2.PAS CF65 4K ver. 2 [Graphics 3 of 3] OZ1MEM .COM 3879 1K [OZ1MEM 1 of 3] Displays the memory contents on the screen. Assembler Source code is included. This works on the Vixen also. OZ1MEM .DOC 1399 1K [OZ1MEM 2 of 3] OZ1MEM .AZM 33A7 5K [OZ1MEM 3 of 3] TEACH3 .COM A096 1K ver. 3 [Teach 1 of 4] Learn morse code on the Osborne 1. This program will beep the beeper for the tones. TEACH3 .DOC EDCD 2K ver. 3 [Teach 2 of 4] TEACH3 .ASM D9E3 11K ver. 3 [Teach 3 of 4] TEACH .DOC A24F 3K ver. 3 [Teach 4 of 4] een. Assembler Source code is included. This&'