FORMAT (? !6DW1"|2!g•$$ *%.!~.1~.!~Ϳ g•$$ D>ڼ:2ͽ.5~h*.~y> =*.~ڛŒ:.*.wG,¤$wG,®•*.~*.~ʼ*.~¿:O!^#V~#@\XAUTO COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ý2˽ýýý߽ý !Ķ2:2a{_:ķʖ:ķ>Ľ˽ʖ:=2–!B!6#5ڽʖ:ķĽ!ͬ¾ʧݾÂݾ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ݾ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*ٿ6?ۿwȿ0߿#6 #6" #~?  xDIR ERA TYPESAVEREN USER"!yO#< Ty#O 321y_͸2y2ͽ:˜1͘оA͌>>͌9ؾо2^ :ķ¥.!_~#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!~Yøpsp2mÆÆf ͧÆFILE EXISTS _: É: :ķʉ=2)ͽÉ T!@нk!ؾ}|q=qf^!~2>`~2į2\!!B!~> >#0~O#Cx2͘վ1)ͽÂf zͧÆBAD LOADCOMf^: !Ķ Â$$$ SUB"řťūű"C{2!"E9"1ޯ22!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~+é7Ư2 H! >w_: ! Ⱦ5ͤNkͱ¦ͱxʊ#Nx: ȷ! Ȗ2 ͤ! 5™#wO~x½p Hy<< ӷʑ :!qMD#2E>jtئIYطغ%/f3! ^#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͌xʯ2͢*C ~<wʃG:Ҡ!Ҧʎì 4~ʶ¬:<ʶ$ʶïZͻɯx>2>2ͻ:!ҾZί2:Eȷẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C :ҷ:ddslO s#r:Eȷ͊:==»y==»*Ww#*"͸*:G#š"͸:!Ҿw4iw:Z!E~=26ɯ2*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 "ã:!BȾw!>2*C~=2u:B2~2wE:A*Cȶw>"!""ү2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*ҤW}_*"}o|g":ҷʑ*C6:ҷʑw:2E**E}DQ>2Àß Ù4 CMOS Cray Microcomputer Op. Sys. 56k TEI/Horizon vs 1.2 03-11-81 $1220X͡!"P1>!4Ÿ>!4Ÿ>*4Ÿ*͉>22!"!"!0~6!6̓:O:]Ԗ܀]Լܦ]](?O?(?(Q?y!پ2y:o&))))!}2<&i"y2`i"* n& W2(`կ2(y2) `շ!>կ2$! ͂!$5W! pWW*1#=~O*!#"!2#ݯ2'ɯ2$<2'!%~6ʐ!pˆ=ʈ|O~|ٹʥ:&ݷľ2&!͂:'ݷ:=o&)))))))***:(ݷ>2&͇:(=:)կ:&ݷþ֯2%2$2&!YY",".!""Ù͛w͛:O  yO*>239-͇yO!~k׹U#~2#^#V#^#V"1͛qͲ͂ s#ryO*\~N:!مo~]Il5ݐ{IݰI>:O _4:͞怱O:G:|W*y>zW>:!"yAw!͓  Mount disk A, then $23> !~=N׆Gy@O:3̓:bo=9>{:@:34yg> gy?Oڟ 22yo:-ªڼ:2@>"!+ ~Ydd*2~}OG<=Ͱ:5@G:*>2kwG#7wG# ,>!:G:>!Wr!0Oz/!:::::20:I~_G#~_G# 2X:48O=MͰ>=`:]z24###=É~#‰ٯ~$N# Ó!5>>ͿͿ)­6w#< %#H%!/=Kk}[2:͏ڜڜڬڜ:͏:͏:͏:͏ڼڴڼ:͏:͏گ_^#V>>>>>>yyy:2>>7>>7>>>>7>7>0>`> :HD~!"!" "!" ""* "* "* " >/ɯ ɯA !͉!"" " >22!"!"2OCONFIGWSMSGS OVR WS COM| WSMSGS OVRZ !"#$%&'()*+STAT COM)CMD MAC,-./:;?@ABCDEFGHMTSSV1 MAC.456789CMD COM0123WSOVLY1 OVRMNOPQRSTUVWXYZ[\WSOVLY1 OVR]^_`abcdefghijklWSOVLY1 OVR mnMTSEQU MAC <=MTSMAP MAC>CMD MACNIJKLopqrsCMD RELtuvwCMD BAKOIJKLoEDBACKUP$$$K COPYRIGHT(C) 1980 MICROPRO INTERNATIONAL, SAN RAFAEL, CALIFORNIA, USA. ALL RIGHTS RESERVED. WordStar 3.00 Message Texts "Rm )L hge!!"#$2.()<)&''n)*%+-../////>0l00001,/W00RmRmA$Rms"w$%"&23C333344444445Rm425555.6N6Rm$";QJN'igW]VURm1QRmRmRmRmRmRm8-Z6-C.+0Rm...6Rm6666666Rm67Rmg7q7777'8m8Q9l99Rm99Rm:1:\::::::::;2Rm;5;Rmb;Rm;RmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRmRm󭭭 | 堠 |  L Changed logged disk drive | | R Run a program  F File directory + | P  | X EXIT to system  H Set help level | |  孭 | E RENAME a file |  D Open a document file | O COPY a file | M Run MailMerge  N Open a non-document file | Y DELETE a file | S Run SpellStar  -,ó -  COPYRIGHT (C) 1981 MicroPro International Corporation  MicroPro WordStar release 3.00 serial # WH6454S1  Televideo 912/920 terminal  Backspacing TTY-like printer  No communications protocol  CP/M List Output driver (LST:) ">$2PP= )(qwC, @ CMD BAKOTRACE UTL abDTV PRNDTV HEX0kmnruzDTV COMwxDTV PRNDTV HEX'|~DTV BAK6DTV COM < < < N O - F I L E M E N U > > >  D Open Document File | Y DELETE a file | H Set HELP LEVEL  N Open Non-document File | E RENAME a file | L Change Drive  X EXIT to System | O COPY a file | R Run a program  F Directory + | P   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  M Run MailMerge S Run SpellStar < < < N O - F I L E M E N U > > >  For maximum help (full menu display),  select Help Level 3 by typing ^JH3.  This message will clear when a key is pressed.  TO HYPHENATE, PRESS -. Before pressing -, you may  move cursor: ^S=cursor left, ^D=cursor right.  If hyphenation not desired, type ^B.  < < < M A I N M E N U > > >  | | |  ^S char left ^D char right |^G char | ^I Tab ^B ReIxB@ @..Y[]{}AEIOU.:+-JP dccdxdBjKjPjVj0j1j2j3j4j5j6j7j8j9jkk  e>@ddvgggggBDDF-hCenk<Ie uh fie  Bj Kj 0!j 1"j 2#j 3$j 4%j 5&j 6'j 7(j 8)j 9*j     2 0.         i)       "$6& (*,.08:H4       (C))00n   Print a file РԠ Š *** FATAL ERR F25: NOT ENUF MEMORY $ File  not found. Menus &  messages will display as @@@@ only.  WAIT  PRINT\PAUSED merge-printing\ \editing\no\file\ ڽ ׽ *** Press ESCAPE Key *** INTERRUPTED***  E*** I***   F: G! e~x7*`;:Z;e*h;*\;R| !͎ "w;!"~;";#"|;Q MT] MBc HMi FMo CWu PC PO} PA CP PN OP HE FO !Z;>-w n!v;>< ![;-9 !_;T !g;T !c;T !k;T c >< !r;-\ !t;-Ғ \ -> V>2A;ͧ%ڼ ͑"K;uâ *; *;>oGw#%  % w#- 6> ͧ% !> ONOF͗%]% 4}ͧ% g%MCg ͆| !4sx:Ê͌>2B;!Q;~6͌ڥ:4!B;6>[:4!_; !;͵*;!|;͵!y;õ*<;*K;zĎ>2C;>*M;_:Z;<=*w;͎:4:4[}> [G!P;~6!4x!r;^Gz4x!0GO!P> W>~a>- S }!O;~<> STk ‹!"O;F F*Z;&*M;"M;*\;͎*M;|͑!"M;*K;#"K;2Q;u*Z;>*v;> :4*M;|:3;*\;‹͑> [*M;|ñ TW͔ J.S!O;~-5R;!G̞#~^T@!O;4!͌ڈ:4<:4/!4!D;6> ̜͜:C;7*K;*:;Î'ͪÜNħ >2D6ç ['ͧ ͪ¾Ņ ͪħ :4ͪ<:4;4::#4!;4x!::*;e";!;x *;*#;"#;*;*;͵";!";";";!;~6py_!";";͵";!;4~!!;4!;~::5*;"#;:;!;2;*;";*;|:#;*;)::G$%==xxy2&;>2'; :6;=|g}o|*#;&*6;**;R"*;";:ī͗ͻ͗͢Cs\ͫ -\ͫs\͢s\*;"0;:;UͫcͲ*;".;*;)*!;T]:: ڈ:ʐ*;Î*#;&*;*$;,;ͻͻ*!;(;*;&;*;R|";:6;w#~w+͎  ~# -__7777w nw?VWx2z7W:Go~~56   YZRCDTTVV2CCTTBT2STTTTTTTTTTCBTTTTVUUUVUUVVSSVUfVVTVVTUVVgVVUTVTVUTTTTTTSTTRRTRfTTTTSSSTTfTTTTVTVU 6NIQYdXfjly%27?QXivYN @@@@ on () off () INTERNAL ERRORFATAL NAME OF  TO FILEMERGE-~2y;#^#V## 2;~2y;+~2};##{l"z;R|";"z;O:Z;!<=O G q#s#r#ww#Gw!o;~#m #~ͪ*C6|/!N >2D6êo ͪ*C6|/ͧ ê*E;!9"E;Ê:B6C M ";ͧ 2 :C; x~>2 x:;*;";";ͼ*;͎. o ;2 "; ͧ !;w[wÎR R *@;W{k z!!4ʮ zy > W_ !Q;zV#>2@;{ ȯ2@;͌ x~ #à !9"G;! ]% >*G;:B6 "C:B6%C LH7 SRI UJ BPPL͆|*w;͋!g; )!y;͵3!|;͵> :7*;#~+:A;͑:o;G!t;z*K;|f} > :Ͷ42o;u"I;!Y; :+ <*I;"I;!R;~ :# <›Ì:i> :> ;#~+͑:o;G~4#~i\#~i.# *K;Ͷ .:K;#~i  +:!o:2;}X>:2;:o;c >!o;w:2;~q>n>[c o>^#~4> [Á*M;:3;ʠR|:Z;e͎:Q;Ì:3;N#{ ʘ> :> [> :+|#>Ø!".g|,->'Ng:;;!"B6"D6<=G:E67J*;~7Jp#~d_x2::;*:*:::g" ;yHG*:::g":::o&{2:y: ;ey_! ;*6;R:: ‚> ڲ!e::~œ=<<*6;-ʰҮ<>d lx_gQy2;:; !;4!;4x*;::e";͵";!͎O>G  %+~ !!x 6#.$%%$o>gAARDMxɅo|gg}o|g^#V#~#fo# ‚Gz—{xɾ~~/w~ͼ#ä   :.,;?!0?:ɷ @[A?a{['N#w@w#6:#6+Y T6.#Z6 dw# Ys0 {{:|sͥ_:§ {2b5_ͥ=!¼sü):OͥGHGxy"6|&*7"787ͼ):7_71*`5!~! 8~!:7!7~6_7''<>|&Ð!eɷ v&do>!#{ |<ʎs#rɯ7Ê>G!"{}O)|! !!~6w<x7z! q#~w['^#V#o ͸:ͳ *7+wF*|#6!26:?ͺÊ>X:VͽÊ>!*ey!5w+~#wz.!5"5"5P. G:a5Oxͱ:I x  yON#F ܔ ͱp+q ͔!o *7:IO&:H=! D3#:c5N%# H +9 .`ͫ" ? !!!!a5 È*`5>+,&í":`5 *`5-í">o͜:+A ]!form | (from Main only)  ^A word left ^F word right |DEL chr lf| ^V INSERT ON/OFF |^J Help ^K Block  ^E line up ^X line down |^T word rt|^L Find/Replce again|^Q Quick ^P Print  筭 |^Y line |RETURN End paragraph|^O Onscreen  ^Z line up ^W line down | | ^N Insert a RETURN |  ^C screen up ^R screen down| | ^U Stop a command | CURSOR: ^A=left word ^S=left char ^D=right char  ^F=right word ^Eo marker  SCROLL: Z=continuous up W=continuous down  DELETE TO END LINE: DEL = left Y = right  FIND, REPLACE: F=Find a string A=find And substitute  REPEAT NEXT COMMAND: Q=repeat until key pressed < < < Q U I C K M E N U > > >  | | |  S left side D right side |Y line rt|F Find text in file | (from Main only)  E topbandon  MARK BLOCK: B=Block start K=blocK end H=Hide/display  BLOCK OPERATIONS: V=moVe block C=Copy block Y=delete block  ADDITIONAL FILES R=Read file W=Write block J=delete file  & PRINTING: O=cOpy file E=rEname P=  DISK & DIRECTORY: L=Log disk F=File directory + MISC: 0-9 = set/hide place markers N=columN move * < < < B L O C K M E N U > > >  砠 | | 堠 | s^#V+ѷs~o #:7277>27!74!77!_8ͪͪ*7*͎l!7"J6:77͎?9͎({%}):7=!9=z27!97o >e!9e:͎ç!` .:7*7+##+6!.}1~6/ % ~6 %!!< nU6#~!͜>ͳ 1*5~*5~w#~<!5"5:c5/!Re:B6dbf:C6h:D6j͔$2'$Ù*6G*66*78ʙQc#^#VʏʔQln++O:d5Gyʱ¸:Þ¿>~͙܀ > :a5   >^@ :c5 ̎ !45 ͳ !a5 P H 4*7w#!6*7B +4:H=q :I*7e"7*7eB 5*7 *I&*7[gg> -¤ !!O: y#*`50> XO !X5 ws"g":[5!=up line ^X=down line  SCROLL: ^Z=up line ^W=down ^C=up screen ^R=down  DELETE: DEL=char left ^G=right ^T=word ^Y=line  OTHER: ^V=insert off/on ^I=tab RETURN=end para ^U=stop  ^N=insert a RETURN ^B=reform ^L=find/replace again  PREFIX KEYS ^Q ^J ^K ^O ^P display additional menus  ^Q PREFIX (to cancel prefix, press SPACE bar)  CURSOR: S=left Side E=top X=bottom D=right enD line  R=beginning file C=end file 0-9,B,K,V,P=t scrn X bottom scrn |DEL lin lf|A Find & Replace |^J Help ^K Block  R top file C end file |L Find Misspelling |^Q Quick ^P Print  B top block K end block |Q Repeat command or |^O Onscreen  0-9 marker Z up W down | key until space |Space Bar returns  P previous V last Find or Block | bar or other key |you to Main Menu.  ^K PREFIX (to cancel prefix, press SPACE bar)  END EDIT/SAVE: D=Done X=done,eXit S=Save,reedit Q=a  S Save & resume | B Begin K End | R Read P Print | (from Main only)  D Save--done | H Hide / Display | O Copy E Rename | ^J Help ^K Block  X Save & exit | C Copy Y Delete| J Delete | ^Q Quick ^P Print  Q Abandon file | V Move W Write | 렠 | ^O Onscreen  | N Column *|L Change logged disk| Space Bar returns  0-9 set/hide 0-9| |F Directory+| you to Main Menu. ^P PREFIX: Put Control Character in File  V=subscript T=superscript Y=ribbon color change  S=underScore B=Boldface D=Double strike  A=alternate pitch N=standard pitch X=strikeout begin/end  O=non-break space F=phantom space G=phantom rubout  C=pause H=overprint char RETURN=overprint line  Q,W,E,R=user printer controls SPACE=cancel prefix < < < P R I N T M E N U > > >  젠󠭭 | 砠 | ormatting commands  S=line Spacing C=Center cursor line F=margins/tabs from line  L=Left margin X=margin release E=soft Entry #  R=Right margin W=Word wrap   D=, ctrl dspy%  I=set tab stop J=Justify ! P=Page display (  N=clear tab V=Var tabs " T=ruler display&  G=para tab H=Hyphn-Help$ SPACE=cancel prefix < < < O N S C R E E N M E N U > > >  󠦠 | 堠 | 󭭠 | | |  H Display & set help level |S Status line | (from Main only)  B Paragraph reform (CTRL B)|R Ruler line |^J Help ^K Block  F Flags in rightmost column|M Margin & Tab |^Q Quick ^P Print  D Dot commands, print ctrls|P Place markers|^O Onscreen  |V Moving text |Space Bar returns  | |you to Main Menu. < < < H E L P M E N U > > > | you to Main Menu.  ^S=delete character ^Y=delete entry ^F=File directory  ^D=restore character ^R=Restore entry ^U=cancel command  TYPE ^KP TO CONTINUE PRINT  TO RETURN CURSOR TO POSITION BEFORE SAVE,  TYPE ^QP BEFORE TYPING ANYTHING ELSE.  TYPE 1-9 TO VARY SPEED, SPACE TO STOP *** WARNING:  WRONG VERSION OF WSMSGS.OVR --  SOME MESSAGES MAY BE INCORRECT. *** *** WARr enter one or more of:  number=repeat count, B=search Backwards, W=whole Words only, U=ignore case, N=replace w/o asking, G=replace in entire file. To search for misspelled words, enter one of the following - RETURN=search forward, B=search backward, G=from start of file:  F - Fix word D - Add to dictionary  B - Bypass word S - Add to supplemental dictionary I - Ignore word  HELP LEVELS  3 all menus  (begin and end) | (one time each) | A Alternate pitch | (from Main only)  B Bold D Double | H Overprint char | N Standard pitch |^J Help ^K Block  S Underscore | O Non-break space | C Printing pause |^Q Quick ^P Print  X Strikeout | F Phantom space | Y Other ribbon color|^O Onscreen  V Subscript | G Phantom rubout | 󭭠 |Space Bar returns  T Superscript | RET Overprint line | Q(1) W(2) E(3) R(4) |you to Main Menu. ^O PREFIX: on-screen f  L Set left margin |C Center text |J Justify !| (from Main only)  R Set right margin|S Set line spacing |V Vari-Tabs"|^J Help ^K Block  X Release margins | |H Hyph-help$|^Q Quick ^P Print  I Set N Clear tab| 󭭭 |E Soft hyph#|^O Onscreen  G Paragraph tab |W Wrd wrap |D Prnt disp%|Space Bar returns  F Ruler from line |T Rlr line&|P Pge break(|you to Main Menu. < < < H E L P M E N U > > >   | |  H Display & set the help level | S Status line | (from Main only)  B Paragraph reform (CONTROL-B) | R Ruler line | ^J Help ^K Block  F Flags in right-most column | M Margins & Tabs | ^Q Quick ^P Print  D Dot commands, print controls | P Place markers | ^O Onscreen  | V Moving text | Space Bar returns  | NING  SCREENS OVER 48 LINES HIGH OR 120 COLUMNS WIDE  HAVE NOT BEEN TESTED AND DEBUGGED. PROCEED WITH  CAUTION; REDUCE WIDTH IF BUGS ENCOUNTERED. *** WARNING: DISK FULL,  DELETING OLD .BAK FILE TO MAKE SPACE  (NORMALLY, THE PREVIOUS BACKUP FILE IS DELETED  ONLY AFTER EDIT IS SUCCESSFULLY COMPLETED).  CAN'T DISPLAY PAGE BREAKS IN A NON-DOCUMENT FILE *** WARNING: WORD TOO LONG TO FIT MARGINS  PUT AT FILE BEGINNING FOR CORRECT PAGE BREAK DISPLAY  Normally press RETURN only, oand explanations displayed  2 main editing menu (1-control-char commands) suppressed  1 prefix menus (2-character commands) also suppressed  0 command explanations (including this) also suppressed  CURRENT HELP LEVEL IS  ENTER Space OR NEW HELP LEVEL (0, 1, 2, OR 3):  The LOGGED DISK (or Current Disk or Default Disk) is the  disk drive used for files except those files for which  you enter a disk drive name as part of the file name.  WordStar displays the File Directory of the Logged Disk.  THE LOGGED DISK DRIVE IS NOW  NEW LOGGED DISK DRIVE (letter, colon, RETURN)?  Use this command to create and alter program source files  and other non-documents. Word wrap defaults off;  tabbing defaults to fixed (TAB chars in file; 8-col stops);  page breaks not shown; hi bit flags not used in file.  For normal word processing uses, use the "D" command instead.  Use this command to create a new document file,  or to initiate alteraY TO  PERMIT SIMULTANEOUS EDITING AND PRINTING.  CAN'T EDIT A FILE WHILE MERGE-PRINTING --  FINISH OR ABANDON MERGE-PRINT BEFORE EDITING  FINISHING PRINT BEFORE EXIT  (type ^U to cancel exit command) ... FINISHING PRINT OF SAME FILE BEFORE SAVING  (Type ^U to cancel Save command) ...  FINISHING PRINT OF .BAK FILE BEFORE SAVING  (Type ^U to cancel Save command) ...  ABANDONING UNCHANGED  ABANDON EDITED VERSION OF INVALID  NAME:    NOT FOUND 3 Copyright (c) 1979, Digital Research????????????CON:RDR:PUN:LST:DEV:VAL:USR:DSK:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:R/OR/WSYSDIRR/O R/W SYS DIR ** Aborted **Active User :Active Files: Drive Characteristics65536: 128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords/ ExtentRecords/ BlockSectors/ TrackReserved Tracks is Temp R/O Disk: d:=R/OSet Indicator: d:filename.typ $R/O $R/W $SYS $DIRDisk SL!*p+q*)O2'!,p+q*+O2'O2'O!.p+q*-LRRLR\LR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4>!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~ *} *M!+s#r#4 !s+p+q!6!66:!ڄ !6!6>!r *&**&Y i !6!4+4A :} :!4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2tion of an existing document file.  A file name is 1-8 letters/digits, a period,  and an optional 0-3 character type.  File name may be preceded by disk drive letter A-D  and colon, otherwise current logged disk is used.  WARNING: You are editing the same file as you are printing.  WordStar will not allow you to save the edited version  until the print has completed or has been abandoned.  ALLOW PRINT TO FINISH BEFORE EDITING A FILE.  YOUR SYSTEM DOES NOT HAVE ENOUGH MEMOR Now printing file  "Y" TO ABANDON PRINT, "N" TO RESUME, ^U TO HOLD: PRINT?  For default press RETURN for each question: START AT PAGE NUMBER (RETURN for beginning)?  STOP AFTER PAGE NUMBER (RETURN for end)?  NUMBER OF COPIES (RETURN for 1)?  DISK  OUTPUT (Y/N):  OUTPUT  NAME?  USE FORM FEEDS (Y/N):  SUPPRESS PAGE FORMATTING (Y/N):  PAUSE FOR PAPER CHANGE BETWEEN PAGES (Y/N):  Ready printer, press RETURN: WARNItatus : DSK: d:DSK:User Status : USR:Iobyte Assign: =Bad DelimiterInvalid AssignmentBad Delimiter: Bytes Remaining On R/, Space: Invalid File Indicator** Too Many Files **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!9"2!T OË!]6:\:] Hr3 Ë:\ʀË͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(&!gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠":2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DM =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐͠Q" 8AO͐jͱͷDM͏ m  Z"l"!6>ʥ *}҆ *M ͱ*}x O͐} W͐ͱ !+s#r!+s#r#4D ͠:\ʹ :\=Oͳͩ !6!)6l :) :)=2) :] & !"}2\!h6?!j6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) 2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r!)*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*)-:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#WNG: You are printing the same file as you are editing.  The last saved version will be printed, not reflecting un-  saved changes. Furthermore, WordStar will not allow you to  save the file being edited while the print is in progress.  END EDIT (^KD) BEFORE STARTING PRINT.  YOUR SYSTEM DOES NOT HAVE ENOUGH MEMORY TO  PERMIT SIMULTANEOUS EDITING AND PRINTING.  TOO LITTLE MEMORY FOR MERGE-PRINT  *** PRINT OUTPUT DISK IS FULL. PRINT PAUSED. *** THAT PLACE MARKER NOT SHORTAGE (MKSP)POINTER > 64K FROM CURSOR (PPTOAD)NOT ENOUGH MEMORY  OR YOUR OPERATING SYSTEM IS NOT  RELOCATED TO MAKE ALL RAM AVAILABLE DISKETTE DIRECTORY FULL CLOSE FAILURE -  SYSTEM FAILURE, OR YOU CHANGED DISKETTES RENAME FAILURE -  SYSTEM FAILURE, OR YOU CHANGED DISKETTES INVALID SCREEN HEIGHT OR WIDTH  MESSAGE  Can't edit a file of type .BAK or .$$$  -- rEname or cOpy before editing BAD OVLY #BAD OVERLAY FILE, OR  WRONG VERSION OVERLAY FILE Overlay file  Not Fou)6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%) *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!")!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V" w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W SPACE -TRAILING TYPE CR ELSE 2DROP THEN LOOP ?KEY IF LEAVE THEN THEN LOOP ; ETBLOCK BEGINNING NOT MARKED  (OR MARKER IS UNDISPLAYED)BLOCK END NOT MARKED  (OR MARKER IS UNDISPLAYED)BLOCK END MARKER BEFORE BEGINNING MARKERBLOCK TOO LONG -  MOVE OR DELETE IN TWO SMALLER BLOCKSCURSOR NOT IN RANGE FOR COLUMN MOVE/COPYCOLUMN READ / WRITE NOT ALLOWED THAT FILE EXISTS ON DESTINATION DISK.  DELETE EXISTING FILE FIRST,  OR USE A DIFFERENT DISKETTE.DISK FULLINVALID COPY LENGTHADDRESS IN "HOLE" (TSTADR)MEMORY FULL (MAK256)MEMORY Snd FILE  NOT FOUND  (The seperately sold file   is required for use of chosen function.) NOT FOUNDPROGRAM IS AN EMPTY FILE!?PROGRAM TOO BIG FOR  MEMORY AVAILABLE UNDER WordStar LET PRINT COMPLETE BEFORE RUNNING A PROGRAM  NOT ENOUGH MEMORY TO USE "RUN PROGRAM" COMMAND  File  Not Found --  Can't Run a program unless  is available.  For spelling check, enter name of file to be checked.  (^R for last file edited)  For dictionary maintenance, enter name of file  containing words to add to or delete from dictionary.  FILE  ALREADY EXISTS  FILE  NOT ON SAME DRIVE  TOO LITTLE MEMORY TO COPY WHILE  EDITING OR MERGE-PRINTING  FILE  EXISTS -- OVERWRITE? (Y/N): FILE  IN USE BY WordStar   P=   Press space bar after reading screen: *** Invalid Dot Command Ignored: *** File Not Found *** But found, and will use, *** Cannot change disk in drive , request ignored Insert diskette with see manual for more.  DOT COMMANDS are special lines beginning with a period and  a two-letter code. They control page breaks, headings,  page numbering, page layout, etc. Dot commands are  typed in like other text.  Space bar for DOT COMMAND SUMMARY, ^U to return to editing:  ***** Dot Commands *****  PUT EACH DOT COMMAND ON SEPARATE LINE, WITH . IN COL 1  .PA new PAge  .CP n new page if less than n lines left on this pa  .PL n Paper Length: total number of lines (default 66)  .MT n Margin at Top: # lines, top paper to text (3)  .MB n Margin at Bottom: # lines, end text to end paper (8)  # lines text on page is PL - MT - MB (defaults to 55)  .HM n Heading Margin: blank lines between head and text (2)  .FM n Footing Margin: blank lines, text to footing (2)  FOR PAGE BREAKS TO DISPLAY AS THEY WILL PRINT, USE  .PL,.MT,.MB, AND .LH (next frame) AT FILE BEGINNING ONLY.  Depress space b, e.g. for tabular material:  Put .UJ OFF before table, put .UJ ON after table.  Space for next frame, ^U to return to editing:  SPECIAL CHARACTERS in HEADINGS (.HE) and FOOTINGS (.FO):  # prints as current page number  \ do not interpret next character as a special character  ^K do not print following spaces if on even-numbered page  PAGE NUMBER POSITIONING: If a footing text is specified (.FO  dot command), the default bottom center page number is not  prlue. variable names are letter then 0-39 letters, digits, -'s. .FI filename Insert document File  .DM message Display Message  See manual for details and additional commands. Merge-Print  is an optional feature, operational only if MAILMRGE.OVR is  on your diskette. Press any key to return to editing:  ***** STATUS LINE (top line of screen) *****  ^JS at left end of line is command now executing  A:NAME.TYP is name of file you are now editing  P file then press RETURN: *** No .DF before .RV: *** WARNING: Overlong data value truncated *** Invalid variable name in .RV command ignored *** WARNING: Data exhausted, null value(s) used ***** Print Directives *****  PRINT CONTROL CHARACTERS may be entered anywhere in a line  to invoke underlining, boldface, subscripts, pauses, etc.  They are entered by typing ^P and a letter. A directory  of most print controls is given on the ^P PREFIX MENU;  ge  .OP Omit Page numbers when printing, starting this page  .PN print Page Numbers, starting this page (default)  .PN n set Page Number to n, print page numbers  .PC n Page number Column (default 33 (30 if 64-col screen))  .PO n Page Offset: extra indent when printed (default 8)  .. text comment, not printed  press space bar for next frame:  .HE text HEading used until next .HE (default blank)  .FO text FOooting (replaces page number) (blank)ar for next frame:  THE FOLLOWING WORK ONLY WITH INCREMENTAL PRINTERS:  .LH n Line Height in 48ths of an inch (default 8)  .CW n Character Width in 120ths of an inch, for standard or  alternate pitch, whichever is in use (see ^P menu).  (default 12 for standard, 10 for alternate)  .SR n Subscript / Superscript Roll in 48ths of an inch (3)  .UJ OFF/ON "MicroJustification" off/on (default ON)  Use insure that printed column alignment exactly  matches screeninted. Use a # in heading or footing to position page  number where desired. ^K followed by spaces followed by #  may be used to produce alternating left/right page numbers.  Space for next frame, ^U to return to editing:  ***** Merge-Print Dot Commands *****  .DF filename specify Data File for .RV  .RV name,name,name,... Read Variable values from data file  .AV "prompt",name Ask operator for Variable value  &name& anywhere in doc't prints as variable vaAGE n is page number of cursor (disregards .PN's)  LINE n is printout line on page of cursor position  COL n is printout column on line of cursor position  INSERT ON shows if character insertion is on (^V command)  MAR REL shows if margins are released (^OX command)  decimal shows during decimal tabbing  LINE SPACING n shows if line spacing is not 1 (^OS command)  PRINT PAUSE shows if printer is stopped (^KP to resume)  when WAIT appears, stop typing. Press space bar:  If page break display is OFF (^OP command) or edit  was started with N command, then Status Line shows  FC=nnnn FL=nnnn in place of PAGE n LINE n .   FC=nnnn cursor position in characters (bytes) from  beginning of file  FL=nnnn cursor position in file lines from beginning  of file, including dot command lines   space bar:  ***** FLAG CHARACTERS (rightmost column of screen) * after end of document press space bar:  COMMANDS TO -- ARE --  move cursor on main and ^Q menus  scroll file up or down on main menu; also find (^QF)  delete text on main and ^Q menus; also ^KY  move or copy text on ^K menu  end edit / save file ^KD; see ^K menu  print (while editing) ^KP  set tabs and margins on ^O menu  reformat text ^B; ^JB gives info  find a string; replace ^QF; ^QA; ^L repeats last n margins, tabs, table entry, outline entry. press space bar after reading:  ***** TO MOVE A BLOCK OF TEXT *****  1. Put cursor on first character, type ^KB to mark start.  2. Put cursor after last character, type ^KK to mark end  (for end line, use start next line to include RETURN).  3. Put cursor at destination, type ^KV to move the text,  or ^KC to make a duplicate copy.  To undisplay markers afterwards, use ^KH.  ^KB and ^KK may be enteredsired justification (^OJ) & line spacing  (^OS), place cursor at paragraph beginning, and type ^B.  To obtain WordStar's help in hyphenating long words, place  cursor at beginning of paragraph and type ^B.  press space bar for more:  ^B reforms lines to end of paragraph as indicated by "hard"  carriage return (< in rightmost column).  Thus, it is important not to use RETURN between lines  within a paragraph when entering text.  ^B may be used to form he  the cursor if desired to adjust the hyphen position,  then press "-" to hyphenate, or ^B to not hyphenate.  To turn off "hyphen-help", type ^OH.  press space bar:  ***** MARGINS *****  To set left margin: Type ^OL. WordStar will asks for column.  Type desired column number 1-240 and press RETURN.  Or, to use column of cursor in file, just press ESCAPE.  To set right margin: type ^OR, proceed as above.  To set both margins to match text ****  < line ends in "hard" carriage return, entered by user  space this line break arose from word wrap or paragraph  reform, and may moved on subsequent reform  + this line of document continues on next screen line  - next line will overprint this line  ? unrecognized or incomplete dot command  M Merge-Print (optional feature) dot command  P page break  : this screen line is before beginning of document  .  press space bar for "entering text":  ***** ENTERING TEXT *****  To enter text at cursor position, just type the text.  Use RETURN key for paragraph end or other fixed line break;  let word wrap form lines within paragraph.  Type ^V to turn insertion off (to overtype) or back on.  ^N may be used to create blank lines ahead of cursor,  as before inserting a paragraph.  Use ^B to realign margins after corrections.  ^JM shows info o in either order, with or without  other intervening commands.  All above commands are on ^K menu. press space bar:  ***** PARAGRAPH REFORM (^B) *****  To realign margins of a paragraph after corrections, place  cursor at beginning of paragraph and type ^B.  To change margins of paragraph already entered, set margins  (^OL, ^OR), place cursor at paragraph beginning, type ^B. To change between justified and ragged right, or change line  spacing, set deanging indents, change margins in  mid-paragraph, etc. The exact rule is:  "^B starts on the cursor line, at the left margin col-  umn, or at the cursor position, whichever is farther  left, and proceeds to the next 'hard' carriage return".  press space bar:  ***** Hyphen-Help *****  ^B will occasionally stop before the end of the paragraph  and ask you whether you wish a word hyphenated.  Following the instructions that appear on the screen, movin a line already entered:  place cursor in that line, type ^OF.  To temporarily set left margin to next tab stop: type ^OG.  Margins apply to text subsequently entered. To remarginate  text already entered: set margins and use ^B.  press space bar after reading:  ***** LINE SPACING AND JUSTIFICATION *****   To set line spacing: type ^OS. WordStar will ask for line  spacing. Enter a digit 1 thru 9.  To turn justification off (for ragged right format),  or to turn justification back on: type ^OJ.  Line spacing and justification settings apply to text  subsequently entered; they may be applied to previously  entered text with the paragraph reform command (^B).  press space bar for "Tab Stops":  ***** TAB STOPS *****   To set a tab: type ^OI. WordStar will ask for column number.  Type column number and press RETURN. Or, to use cursor  column, press the ESCs.  If not at end file, turn on insertion (^V),  or use ^N to make blank lines.  Tab (^I) after entering each table item. After last column  on a line, tabbing will move to first item on next line.  space bar:  OUTLINE FORMAT TEXT ENTRY -- We Suggest:  Set tab stops at desired indentations.  Set right margin as desired.  For each item:  Type ^OG's as required for item number indentation.  Type item number.  Type ^OG.  press space bar after reading:  ***** PLACE MARKERS *****   Up to 10 place markers, identified by numbers (n) 0-9,  may be set in a file while the file is being edited.  To set place marker n at the cursor position: type ^Kn.  will display to indicate the marker position.  To return the cursor to place marker n: type ^Qn any  time during the same edit.  To remove the from the display: type ^Kn when the  cursor is already at the source of text for last block move or copy.  press space bar:  IF THIS DISPLAYS YOU ARE USING WRONG VERSION OF WSMSGS.OVR ext for last block move or copy.  press space bar:  IF THIS DISPLAYS YOU ARE USING WRONG VERSION se markers can be moved (^KV), copied  (^KC), deleted (^KY), or written to a file (^KW).   ^QP moves cursor to its position before preceding command.   ^QV moves cursor to start of last find/replace, or to  TITLE MTSCMD SUBTTL 7-27-82 SUB-PROGRAM FOR IBIS/CRAY MTS ; ; HARDWARE ADDRESS MAP ; RDSTS EQU 0F001H ;READ CONTROLLER STATUS (DONE) CMDREG EQU 0F089H ;COMMAND REG RDMTCL EQU 0F000H ;READ DTC REG. LO BYTE RDMTCH EQU 0F001H ; " " " HI " WTMTCL EQU 0F080H ;WRITE DTC REG. LO BYTE WTMTCH EQU 0F081H ; " " " HI " WRSTS EQU 0F08AH ;WRITE STATUS REG. BUFLO EQU 0F08CH ;WRITE DTC BUFF ADDR REG BUFHI EQU 0F08DH DATBUF EQU 0F08EH ;WRITE DTC DATA BUFFER ; CNT0 EQU 0F0A4H ;8253 APE key. To set a decimal tab stop,  type "#" before typing column number or pressing ESCAPE.  To clear a tab stop or all tab stops: type ^ON.  To tab: type ^I, or press TAB key if present. Tabbing  inserts spaces to next tab stop if insertion (^V) is on.  Tabbing advances cursor over text if insertion is off.  press space bar:  ENTERING A COLUMNAR TABLE -- We Suggest:   Set a tab stop for each column of table.  Clear all other tab stop Type text of item, without using RETURN.  At end of item, press RETURN. Left margin resets.  Press RETURN again if blank line desired.  press space bar:  ***** RULER LINE *****   L----!----!----!----!----!----!----!----!---------R   L Left margin (set with ^OL)  R Right margin (set with ^OR)  ! regular tab stop (set with ^OI, clear with ^ON)  # decimal tab stop (set with ^OI, clear with ^ON)  - other positions between margins  marker position.  press space bar:  ***** OTHER MARKER & RELATED COMMANDS *****   The block beginning marker, ¾, and the block end marker,  ˾, are set and moved to in a similar manner; the  text between these markers can be moved (^KV), copied  (^KC), deleted (^KY), or written to a file (^KW).   ^QP moves cursor to its position before preceding command.   ^QV moves cursor to start of last find/replace, or to  HIS TEST IS FOR COUNTER 0, MODE 0 ONLY, AT LEAST FOR NOW ! ; LD A,40H ;TURN ON THE COUNTER 0 ENABE MASK LD (0F0A8H),A ;WRITE TO MASK REG. LD A,20H ;20 = 00 10 000 0 LD (0F0A7H),A ;WRITE TO CONTROL REG. LD A,0FFH ;MSB COUNT = FF LD (WKAREA),A ;SET WKAREA = FF LD (0F0A4H),A ;LOAD THE COUNTER EI ;ENABLE THE IRQ ET13A: LD A,(WKAREA) ;CHECK IF IRQ WORKS CP 1 JR NZ,ET13A ;WAIT DI ;DISABLE IRQ LD A,0 LD (0F0A8H),A ;DISABLE MASK BIT FOR COUNTER 0 LD DE,ENET13 ;ENDTIMER COUNTER 0 CNT1 EQU 0F0A5H ; " " " 1 CNT2 EQU 0F0A6H ; " " " 2 CNTMOD EQU 0F0A7H ; 2 " CONTROL MODE REG. MASK EQU 0F0A8H ;MASK REG. (WRITE ONLY) RAMLO EQU 0F0C0H ;BUFFER RAM ADDR LO RAMHI EQU 0F0C1H ; " " " HI RESET EQU 0F0E0H ;RESET COMMAND (WRITE ONLY) CMDMAX EQU 2DH ;MAX FUNCTION CODE = 2CH ; *EJECT 45 ASEG ORG 100H .Z80 START: DI ;DISABLE INTERRUPT LD SP,STACK ; IM 0 ;SET INTERRUPT MODE 0 (PART OF THE INIT) LD A,0C3H ;JUMP OPCODE LD (18H),A ;PUT IN RESTART 3 ADDR LD (20H),A ;PUT IN RESTART 4 ADDR LD (28H),A ;PUT IN RESTART 5 ADDR LD (30H),A ;PUT IN RESTART 6 ADDR LD HL,ICNT0 ;PUT COUNT 0 IRQ ADDR LD (31H),HL LD HL,ICNT1 ;PUT COUNT 1 IRQ ADDR LD (29H),HL ; LD HL,ICNT2 ;PUT COUNT 2 IRQ ADDR ; LD (21H),HL LD HL,IDONE ;PUT DONE IRQ ADDR LD (19H),HL ; CMDXX: LD DE,BANNER CALL DISPLY S1: LD DE,BANE ;ENTER FUNCTION CODE MSG CALL DISPLY LD DE,CMDIN LD C,LINEIN CALL BDOS ;GET INPUT S1L: LD HL,CMDTAB ;TABLE OF VALIDTHE FIRST ONE ? JR Z,S2 ;YES, GO EXECUTE IT LD C,A ;PUT THE INPUT COMMAND CODE # IN BC REG LD B,0 ADD HL,BC ;ADD OFFSET (BC) TO TABLE ADDR (HL) ADD HL,BC ;ADD TWICE - TWO BYTE FOR EACH ADDR. S2: LD E,(HL) ;PICK UP THE LO ADDR FROM TABLE INC HL ;NEXT BYTE IN TABLE LD D,(HL) ;PICK UP THE HI ADDR FROM TABLE RES 7,A ; 6-29-82 LD (NSRAM+1),A ; 6-29-82 RESET FLAG FOR LOOPING EX DE,HL ;RESET HL - POINTING TO THE ROUTINE ADDR. JP (HL) ;JUMP TO THE ADDR IN TABLE ; SUBTTL INDIVI TO F088 LD (CMDREG),A ;WRITE TO F089 ALSO CALL SET2 ;SET 2 SEC TIMER LD A,20H ;ENABLE COUNTER 1 MASK BIT LD (MASK),A EI CMD00A: LD A,(WKAREA) ;CHECK IRQ OCCURS CP 2 ;2 SEC TIME OUT INTERRUPT ? JP Z,CMD08E ;YES, ERROR LD A,(RDSTS) ;READ CONTROLLER STATUS REG BIT 7,A ;DONE BIT SET ? JR Z,CMD00A ;NO,WAIT DI LD A,0 ;DISABLE DONE BIT & COUNTER 1 MASK LD (MASK),A ; ; CHECK LOOPING FALG IF DISPLAY IS NEEDED ; LD A,(NSRAM+1) BIT 7,A JR NZ,CMDL0A ;LOOPING FLAG SET, GO CHEC1 F>22 2(20!"1!")!"[1 1  !2 : , 8-2 (O ^#V˿2 .A>! w#2222 22> 2: 5:(>2:  E 1:0>T:0>T:0 1  : L:2 s 1((: (( #(,(Ò 1,.A>Ò.A>Ò.A>Ò.A>Ò.A>Ò.A>Ò.4A>Ò.A> Ò.A> Ò.A>Ò.A>Ò)MA>22>2: 5 >2:  A>.sA> Ò 1  :  : 0 8 22.AY> Ò 1  : O $(9Q ͑82< 1  :   t8! 2 y( 82 8! 6 Y.fAY> Ò>62>P2>222 >P2>2 M>>A I p _1_A =   02y7?7! y(( p8  p!d = 8O |2 }7?0:AG2 G0 COMMANDS LD A,(CMDSZ) ;GET # OF INPUT CHAR. CP 2 ;ENTER 2 CHAR ? JP NZ,S1 ;NOT = 2, INPUT AGAIN $EJECT ; ; PICK THE ADDR. OF THE RIGHT ROUTINE & EXECUTE THAT ROUTINE ; LD DE,CMDCH ;GET THE INPUT COMMAND CALL ASCHEX ;CONVERT TO VALID HEX NUMBER JR C,S1 ;CARRY SET, INVALID HEX #, TRY AGAIN CP CMDMAX ;VALID HEX, CHECK IF OVER MAX VALUE JP P,START ;YES, ERROR, TRY AGAIN ; ; SAVE THE INPUT FUNCTION CODE FOR LOOPING LATER * 6-29-82 * ; LD (NSRAM),A ; 6-29-82 CP 0 ;DID HE CHOOSE DUAL COMMAND ROUTINES $EJECT ; CMD00: CALL DIS21 ;POSITION CURSOR TO LINE 21 LD DE,MSG00 ;MSG FOR CMD00 CALL DISLIN ; ; CLEAR JOHN'S & BOB'S RAMS ; LD A,00 ;COMMAND FOR CLR CONTROLLER LD HL,RAMLO ;F0C0 - START OF JOHN'S RAM LD B,32 CMD001: LD (HL),A INC HL DJNZ CMD001 ; LD (BUFLO),A ;SET BUFF ADDR REG = 0 LD (BUFHI),A LD BC,800H CMD002: LD (DATBUF),A LD (DATBUF+1),A DEC BC CP C JR NZ,CMD002 CP B JR NZ,CMD002 ; CMD00X: LD (CMDREG-1),A ;WRITE FUNCTION CODEK IF HE WANTS TO STOP ; CMD12: LD DE,MSGSTS ;LINE 22 FOR DISPLAYING STATUS CALL DISPLY LD A,(0F001H) AND 0E7H ;MASK OFF UNUSED BITS IN CONTROLLER CALL HX2DIS LD A,3 CALL SPACE LD A,(0F000H) CALL HX2DIS LD A,3 CALL SPACE LD A,(0F003H) CALL HX2DIS CMDLOP: LD DE,MSGLOP ;MSG FOR LOOPING ? CALL DISPLY LD DE,CMDIN LD C,LINEIN ;GET ANSWER IF LOOPING IS NEEDED ? CALL BDOS LD A,(CMDCH) CP 'L' ;CHECK IF HE ANSWER 'L' FOR LOOPING ? JP NZ,S1L ;NOT = 'L', FORGET LOOPING, BAC!! ^V1~0~0#### A(>2:  1) A>#) A>$) A>%) A>&) A>')/ A>()H A>))e A>*) A>+.A>Ò2  1  :  8g 8o": .4 A>) A>222 ! >2 : <2 ^V1  : `o: * 2  8g 8o: !": ͷ= ## A5," A(,> 2  : =2 .M A>.f A> .~ A>!$:AG2 7G> O؁ >0_ Q0_+= /AjDTC INSTRUCTION FUNCTION CODE (HEX)k=! 00 = CLEAR CONTROLLER=" 01 = SELECT PORT A=# 02 = SELECT PORT B=$ 03 = SELECT PORT A & B=% 04 = RELEASE PORT A=& 05 = RELEASE PORT B=' 06 = REL & SEL PORT A=( 07 = REL & SEL PORT B=) 08 = STATUS - GENERAL=* 09 = SEEK=+ 0A = HEAD SEEK=, 0B = CYL/OFFSET SEEK=- 0C = REZERO=. 0D = CLR FAULT=/ 0E = RESET=0 0F = FIRMWARE RELOAD=1 10 = READ + (BUSOUT)=2 12 = DISPLAY DTC STATUS=!H17 = STATUS-SEL+(BUSOUT)="H18 = WRITE + (BUSOUT)=#H1F = FORMAT +(BUSOUT)=$H20 = DIAG + (BUSOUT)=%H21 = ECHO + (BUSOUT)=&H22 = DISPLAY HOST RAM='H23 = DTC READ DISK ADR=(H24 = DTC READ BUSOUT REG=)H25 = DTC CYL REG=*H26 = DTC READ HEAD REG=+H27 = DTC READ SECTOR REG=,H28 = DTC READ ID GEN.=-H29 = DTC READ DATA BUFFER=.H2A = DTC READ STATUS RAM=/H2B = DTC READ DATA ERR WDS=0H2C = WRITE 16 WORDS TO DTC=1H2D ==2H2E =y=7 ENTER "L" FOR LOOPING OR=79TENTER FUNCTION COD, 14-, 15-, 16-  h4BP^lz H&&&&& &&&&&&LZhv &&&LZhv: T=34** ENTER CYL NUMBER (3 DECIMAL OR $HEX DIGITS): T=44** ENTER 4 BINARY BITS FOR OFFSET MODIFIER : T=7 Tj** LOOPING ** PRESS "ESC" KEY TO STOPk=7 T=5 01-, 02-, 03-, 04-, 05-, 06-, 07-, 08-=6 09-, 10-, 11-, 12-, 13-SUBTTL 6-29 INDIVUAL SERVO EXERCISER ROUTINES $EJECT SV1: CALL CRLFCT CALL CRLFCT LD DE,MSGSV1 ;MSG FOR SV1 - CONT. ALT. SEEK CALL DISPCR CALL SVCYL ;ROUTINE FOR ALT. SEEK CONT. JP CMDSVA ; SV2: CALL CRLFCT CALL CRLFCT LD DE,MSGSV2 ;MSG FOR SV2 - SEQ. FORWARD CALL DISPCR CALL SVFOR ;ROUTINE FOR SEEK FORWARD JP CMDSVA ; SV3: CALL CRLFCT CALL CRLFCT LD DE,MSGSV3 ;MSG FOR SV3 - SEQ. FORWARD/REVERSE CALL DISPCR CALL SVFOR ;ROUTINE FOR SEEK FORWARD/REVERSE JP CMDSVA ,A LDIR ;LOAD (DE) WITH (HL) UNTIL BC = 0, BLOCK TRANSFER ; LD DE,CMDCH LD A,(CMDSZ) LD C,A CALL ASCDEC ;CONVERT ASCII DECIMAL INPUT TO HEX JR C,SVCYL ;CARRY SET, ERROR LD (CYL1LO),A ;SAVE LOWER BYTE OF STARTING CYL LD (SCYL1L),A ;SAVE FOR INC & DEC REFERENCE LD A,(WKMTC) LD (CYL1HI),A ;SAVE HIGH BYTE OF STARTING CYL LD (SCYL1H),A SVCY02: LD DE,MCYL2 ;MSG FOR INPUT ENDING CYL CALL DISPLF LD DE,CMDIN ;INPUT FOR CYL # LD C,LINEIN CALL BDOS ; LD A,(CMDSZ) ;CHECK IF INPUTETWEEN SEEK ; ; HERE IS THE REAL SEEKING PART ; LD DE,MSGKEY ;MSG FOR SEEKING CALL DISPLF LD A,(SAVSV) ;CHECK SV OPTION FLAG CP 4 JR Z,SVCY05 ;OPTION 4 SELECTED SVCY04: CALL SEEK2 JR SVCY04 ; ; SVCY05: LD DE,(CYL2LO) LD A,(CYL1HI) CP D JP M,SVCY5B ;S < E INCREMENTING JR NZ,SVCY5C ;S > E DECREMENTING LD A,(CYL1LO) CP E JP M,SVCY5B ;S < E INC JR NZ,SVCY5C ;S > E DEC ; ; S = E, NO-MOTION SEEK ; SVCY5A: CALL SEEK1 JR SVCY5A ; ; S < E INCREMENTING CYL # ; SE (2 HEX DIGITS): =6 TnNO RESPONSE FROM THE DRIVE IN 2 SECo=4 ** =3 y** 16 WORDS FROM FUNCTION CODE: =3 y=5 XX01 XX00 XX03 FROM FUNCTION CODE: =6!y=4>** ENTER DATA FOR BUSOUT (4 HEX DIGITS): T=4>** ENTER 1 DIGIT HEAD NUMBER (0 THRU 7): T=34** ENTER CYL NUMBER (3 DECIMAL OR $HEX DIGITS): T=44** ENTER 4 BINARY BITS FOR OFFSET MODIFIER : T=7 Tj** LOOPING ** PRESS "ESC" KEY TO STOPk=7 T=5 01-, 02-, 03-, 04-, 05-, 06-, 07-, 08-=6 09-, 10-, 11-, 12-, 13-F HE WANTS TO STOP ; CMD12: LD DE,MSGSTS ;LINE 22 FOR DISPLAYING STATUS CALL DISPLY LD A,(0F001H) AND 0E7H ;MASK OFF UNUSED BITS IN CONTROLLER CALL HX2DIS LD A,3 CALL SPACE LD A,(0F000H) CALL HX2DIS LD A,3 CALL SPACE LD A,(0F003H) CALL HX2DIS CMDLOP: LD DE,MSGLOP ;MSG FOR LOOPING ? CALL DISPLY LD DE,CMDIN LD C,LINEIN ;GET ANSWER IF LOOPING IS NEEDED ? CALL BDOS LD A,(CMDCH) CP 'L' ;CHECK IF HE ANSWER 'L' FOR LOOPING ? JP NZ,S1L ;NOT = 'L', FORGET LOOPING, BACK T; SV4: CALL CRLFCT CALL CRLFCT LD DE,MSGSV4 ;MSG FOR SV4 - WALKING X-N CALL DISPCR CALL SVCYL ;ROUTINE FOR ALT. SEEK CONT. JP CMDSVA $EJECT ; SVCYL: LD DE,MCYL1 ;MSG FOR INPUT STARTING CYL # CALL DISPLF LD DE,CMDIN ;GET INPUT FOR CYL # LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;GET # OF CHAR INPUT CP 4 ;CHECK INPUT CHAR # < 3 ? JP P,SVCYL ;YES, ERROR CP 0 ;NO INPUT, JUST CR KEY ? JR Z,SVCYL ;YES, ERROR LD HL,CMDCH ;GET INPUT LD DE,SAVC1 LD B,0 ;PUT IN BC REG LD C 3 DIGITS OR LESS CP 4 JP P,SVCY02 ;NO,ERROR CP 0 JR Z,SVCY02 ;JUST CR KEY, ERROR LD C,A LD B,0 ;PUT SIZE IN BC REG. LD DE,SAVC2 LD HL,CMDCH LDIR ;LOAD (DE) WITH (HL) UNTILE BC = 0 ; LD A,(CMDSZ) LD C,A LD DE,CMDCH ;INPUT NUMBER CALL ASCDEC ;CONVERT ASCII INTO HEX JR C,SVCY02 ;CARRY SET, ERROR LD (CYL2LO),A ;SAVE ENDING CYL LO BYTE LD (SCYL2L),A ;SAVE FOR REFERRENCE LD A,(WKMTC) LD (CYL2HI),A ;SAVE ENDING CYL HI BYTE LD (SCYL2H),A CALL SVDELY ;GET DELAY TIME BVCY5B: CALL SEEK2 LD HL,(CYL1LO) INC HL ;INCREMENTING CYL # LD (CYL1LO),HL LD DE,(SCYL2L) LD A,H CP D JR NZ,SVCY5B ;NOT DONE YET LD A,L CP E JR NZ,SVCY5B ;NOT DONE YET ; ; S > E DECREMENTING CYL # ; SVCY5C: CALL SEEK2 LD HL,(CYL2LO) DEC HL ;DECREMENTING CYL # LD (CYL2LO),HL LD DE,(SCYL1L) LD A,H CP D JR NZ,SVCY5C ;NOT DONE YET LD A,L CP E JR NZ,SVCY5C ;NOT DONE YET JR SVCY5B ; SVDELY: LD DE,MCYL3 ;MSG FOR DELAY TIME IN XX M-SEC CALL DISPLF LD DE,CMDIN ;GET INPUT FOR DELAY TIME LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;INPUT 2 DIGITS OR LESS CP 3 JP P,SVDELY ;NO, ERROR LD DE,CMDCH LD C,A CALL ASCDEC ;CONVERT TO 1 BYTE HEX JR C,SVDELY ;CARRY SET,ERROR LD (SAVMS),A RET ; SEEK2: LD HL,(CYL1LO) ;GET STARTING CYL ADDR CALL CYLCMD ;SEEK TO THAT ADDR SEEK1: LD A,(SAVMS) CALL DELYMS ;DELAY REQUIRED TIME IN MS LD HL,(CYL2LO) ;GET ENDING CYL ADDR CALL CYLCMD ;SEEK TO THAT ADDR RET ; SVFOR: LD DE,MCYINT ;MSG FOR INPUT CY DE,MSGKEY ;MSG FOR SEEKING CALL DISPLF ; SVF00: LD HL,0 ;START FROM CYL 0 SVF01: LD (CYL2LO),HL ;SEEK TO THIS CYL CALL SEEK1 ADD HL,BC ;INCREMENT BY X INTERVAL LD A,H CP 3 ;CHECK IF OVER MAX CYL # JP M,SVF01 ;NO PROBLEM, CONTINUE JR NZ,SVF02 ;OVER, IT'S TIME TO TURN BACK LD A,L ; CYL 886 = 376 HEX CP 76H JP M,SVF01 ;< MAX, NO PROBLEM, CONTINUE SVF02: LD A,(SAVSV) ;GET SV OPTION SELECTION CP 3 JR Z,SVF00 ;OPTION 3 - START FROM CYL 0 AGAIN LD HL,375H ;READY TO SEHECK IF ANY KEY PRESSED ? AND 2 JR Z,CYLC1 ;NO IN A,(2) ;YES, CHECK IF ESC KEY ? AND 7FH CP 1BH JR NZ,CYLC1 ;NO, NOT ESC KEY STOPX: POP AF POP AF ;ADJUST THE STACK POINTER RET ;YES, STOP THE TEST ; DELYMS: CALL SET1MS ;SET 8253 COUNTER 0 FOR 1 M-SEC LD A,(SAVMS) LD (CNT1),A ;LOAD INTO COUNTER 1 LD A,20H ;ENABLE THE COUNTER 1 INTERRUPT LD (MASK),A EI DELYM1: LD A,(WKAREA) CP 2 JR Z,DELYM2 ;YES, TIME OUT IN A,(3) ;CHECK IF ANY KEY PRESSED AND 2 JR Z,DELYM1K TO START ; SET 7,A LD (NSRAM+1),A ;6-29-82 SET LOOPING FLAG LD DE,MSGKEY ;MSG FOR SPECIAL KEY TO STOP LOOPING CALL DISPLY CMDL0A: IN A,(3) ;CHECK IF ANY KEY PRESSED ? AND 2 JR Z,CMDL0B ;NO, KEEP LOOPING IN A,(2) ;YES, CHECK IF ESC KEY ? AND 7FH CP 1BH JR Z,CMDLX ;YES, STOP LOOPING & BACK TO START CMDL0B: LD A,(NSRAM) ;CHECK FUNCTION CODE IF INTERRUPT REQUIRED ? CP 8 JR Z,CMDL1 ;YES, WAIT FOR DONE INTERRUPT CP 17H JR Z,CMDL1 ;YES, WAIT FOR DONE INTERRUPT CP 23H JLECT PORT A & B CALL DISLIN LD A,03 ;COMMAND CODE - 03 JP CMD00X ; CMD04: CALL DIS21 LD DE,MSG04 ;MSG FOR CMD04 - RELEASE PORT A CALL DISLIN LD A,04 JP CMD00X ; CMD05: CALL DIS21 LD DE,MSG05 ;MSG FOR CMD05 - RELEASE PORT B CALL DISLIN LD A,05 JP CMD00X ; CMD06: CALL DIS21 LD DE,MSG06 ;MSG FOR CMD06 - REL & SEL PORT A CALL DISLIN LD A,06 JP CMD00X ; CMD07: CALL DIS21 LD DE,MSG07 ;MSG FOR CMD07 - REL & SEL PORT B CALL DISLIN LD A,07 JP CMD00X ; CMD0C: L INTERVAL CALL DISPLF LD DE,CMDIN ;GET INPUT FOR CYL INTERVAL LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;GET # OF CHAR INPUT CP 4 ;CHECK INPUT CHAR # < 3 ? JP P,SVFOR ;YES, ERROR CP 0 ;NO INPUT, JUST CR KEY ? JR Z,SVFOR ;YES, ERROR ; LD DE,CMDCH LD A,(CMDSZ) LD C,A CALL ASCDEC ;CONVERT ASCII DECIMAL INPUT TO HEX JR C,SVFOR ;CARRY SET, ERROR LD (SAVINT),A ;SAVE THE INPUT INTERVAL LD A,(WKMTC) LD (SAVINT+1),A LD BC,(SAVINT) CALL SVDELY ;GET DELAY TIME BETWEEN SEEK LDEK REVERSE FROM CYL 885 SVF03: LD (CYL2LO),HL ;SEEK TO THIS CYL CALL SEEK1 SCF CCF ;CLEAR CARRY FLAG SBC HL,BC ;DECREMENT BY X INTERVAL LD A,0 CP H ;CHECK IF REACH CYL 0 JP M,SVF03 ;NO, CONTINUE JR NZ,SVF00 ;IT'S TIME TO GO THE OTHER WAY CP L JP M,SVF03 ;NO PROBLEM, CONTINUE JR SVF00 ; CYLCMD: LD (0F082H),HL ;LOAD CYL ADDR LD A,0BH LD (0F088H),A ;ISSUE CYL SEEK COMMAND LD (0F089H),A CYLC1: LD A,(RDMTCH) ;CHECK DONE BIT BIT 7,A RET NZ ;DONE,EXIT IN A,(3) ;C ;NO IN A,(2) ;YES AND 7FH CP 1BH ;CHECK IF ESC KEY ? JR NZ,DELYM1 ;NO CALL DELYM2 ;DISABLE THE INTERRUPT JR STOPX ;STOP THE TEST DELYM2: DI LD A,0 LD (MASK),A ;DISABLE INTERRUPT RET ;  COUNTER 0 FOR 1 M-SEC LD A,(SAVMS) LD (CNT1),A ;LOAD INTO COUNTER 1 LD A,20H ;ENABLE THE COUNTER 1 INTERRUPT LD (MASK),A EI DELYM1: LD A,(WKAREA) CP 2 JR Z,DELYM2 ;YES, TIME OUT IN A,(3) ;CHECK IF ANY KEY PRESSED AND 2 JR Z,DELYM1P M,CMDL2 ;NO, JUST WAIT FOR DONE BIT CP 2CH JP P,CMDL2 ;NO, JUST WAIT FOR DONE BIT CMDL1: JP CMD08X CMDL2: JP CMD00X CMDLX: LD DE,MSGE23 ;ERASE LOOPING MSG ON LINE 23 CALL DISPLY JP S1 ; CMD01: CALL DIS21 LD DE,MSG01 ;MSG FOR CMD01 - SELECT PORT A CALL DISLIN LD A,01 ;COMMAND CODE - 01 JP CMD00X ; CMD02: CALL DIS21 LD DE,MSG02 ;MSG FOR CMD02 - SELECT PORT B CALL DISLIN LD A,02 ;COMMAND CODE - 02 JP CMD00X ; CMD03: CALL DIS21 LD DE,MSG03 ;MSG FOR CMD03 - SE CALL DIS21 LD DE,MSG0C ;MSG FOR CMD0C - REZERO CALL DISLIN LD A,0CH JP CMD00X ; CMD0D: CALL DIS21 LD DE,MSG0D ;MSG FOR CMD0D - CLR FAULT CALL DISLIN LD A,0DH JP CMD00X ; CMD0E: CALL DIS21 LD DE,MSG0E ;MSG FOR CMD0E - RESET CALL DISLIN LD A,0EH JP CMD00X ; CMD0F: CALL DIS21 LD DE,MSG0F ;MSG FOR CMD0F - FIRMWARE RELOAD CALL DISLIN LD A,0FH JP CMD00X ; ; ; THE FOLLOWING COMMANDS USE DONE INTERRUPT ; CMD08: CALL DIS20 LD DE,MSG08 ;MSG FOR CMD08 - STATUS (GESUBTTL CRT CODE EQUATES $EJECT ESC EQU 1BH ;ESCASE CHAR. CODE PLUS EQU 2BH ;PLUS SIGN + FOR CLEAR ALL EQUAL EQU 3DH ;EQUAL SIGN = FOR CURSOR ADDRESSING CRT EQU 20H ;CURSOR ADDRESSING OFFSET UCA EQU 41H ;UPPER CASE A FOR SELECTING ATTRIBUTE MODE UCT EQU 54H ;UPPER CASE A FOR ERASE TO END-OF-LINE LCY EQU 79H ;LOWER CASE Y FOR ERASE TO END OF PAGE LCL EQU 6CH ;LOWER CASE L FOR UNDERLINE ON LCM EQU 6DH ;LOWER CASE M FOR UNDERLINE OFF LCN EQU 6EH ;LOWER CASE N FOR BLINKING ON LCK EQU 6BH ;FOR MTC REG. WKAREA: DS 5 ;TEMP. WORK AREA SAVC1: DS 3 ;3 BYTES FOR SAVING STARTING CYL ADDR DB 0 SAVC2: DS 3 ;3 BYTES FOR SAVING ENDING CYL ADDR DB 0 SCYL1L: DS 1 SCYL1H: DS 1 SCYL2L: DS 1 SCYL2H: DS 1 CYL1LO: DS 1 CYL1HI: DS 1 CYL2LO: DS 1 CYL2HI: DS 1 MAXFLG: DS 1 ;FLAG FOR CHECKING MAX CYL # SAVINT: DS 2 ;SEEK CYL INTERVAL SAVSV: DS 1 ;FLAG FOR SV OPTION # SAVMS: DS 1 DB 0 CMDIN: DB 10 ;INPUT MAX. 3 CHAR. CMDSZ: DS 1 ;SIZE OF THE ACTUAL INPUT STRING CMDCH: DS 10 ;STORAGE; ; HARDWARE ADDRESS MAP ; RDMTCL EQU 0F0C0H ;READ MTC REG. LO BYTE RDMTCH EQU 0F001H ; " " " HI " WTMTCL EQU 0F080H ;WRITE MTC REG. LO BYTE WTMTCH EQU 0F081H ; " " " HI " CNT0 EQU 0F0A4H ;8253 TIMER COUNTER 0 CNT1 EQU 0F0A5H ; " " " 1 CNT2 EQU 0F0A6H ; " " " 2 CNTMOD EQU 0F0A7H ; 2 " CONTROL MODE REG. MASK EQU 0F0A8H ;MASK REG. (WRITE ONLY) RAMLO EQU 0F0C0H ;BUFFER RAM ADDR LO RAMHI EQU 0F0C1H ; " " " HI RESET EQU 0F0E0H ;RESET COMMAND (WRITE ONLY) NERAL) CALL DISLIN LD A,08 CMD08X: LD (CMDREG-1),A ;WRITE TO F088 LD (CMDREG),A ;SEND THE COMMAND CODE CALL SET2 ;SET 2 SEC TIMER LD A,0A0H ;ENABLE COUNTER 1 & DONE MASK BIT LD (MASK),A EI CMD08A: LD A,(WKAREA) ;CHECK IRQ OCCURS CP 2 ;2 SEC TIME OUT INTERRUPT ? JP Z,CMD08E ;YES, ERROR CP 8 ;DONE INTERRUPT ? JR NZ,CMD08A ;NO, WAIT A LITTLE LONGER DI LD A,0 ;DISABLE DONE BIT & COUNTER 1 MASK LD (MASK),A ; LD A,(NSRAM+1) ;CHECK LOOPING FLAG BIT 7,A JP NZ,CMDL0A ;FLEMENT WORD COUNT,CONTINUE IF NOT 0 ; DEC C ;DECREMENT LINE COUNT BIT 0,C JR Z,CMD08B ;1 MORE LINE TO DISPLAY JP CMDLOP ;ALL DONE WITH DISPLAY, GO CHECK LOOPING ; CMD08E: DI ;DISABLE IRQ LD A,0 ;DISABLE ALL MASK LD (MASK),A LD A,(NSRAM+1) ;CHECK LOOPING FLAG SET ? BIT 7,A JP NZ,CMDL0A ;YES, GO CHECK SPECIAL KEY TO STOP LD DE,TIMERR ;DISPLAY 2 SEC TIME OUT ERROR MSG CALL DISPLY JP CMDLOP ;NO, GO CHECK IF LOOPING NEEDED ; CMD23: CALL DIS20 LD DE,MSG23 ;MSG FOR CMD23 - LOWER CASE K FOR REVERSE OFF LCO EQU 6FH ;LOWER CASE O FOR BLINKING OFF LCJ EQU 6AH ;LOWER CASE J FOR REVERSE VIDEO ON LCA EQU 6AH ;LOWER CASE A FOR ATTRIBUTE MODE OFF CR EQU 0DH ;CARRIAGE RETURN KEY CODE LF EQU 0AH ;LINE FEED SPA EQU 20H ;SPACE BELL EQU 07 ;BELL FOR ERROR WARNING LINEIN EQU 10 ;READ LINE INPUT CRTIN EQU 01 ;CRT INPUT ROUTINE - CHAR. IN A REG. CRTOT EQU 02 ;CRT OUTPUT ROUTINE BDOS EQU 05 ;BDOS STARTING ADDRESS SUBTTL WORK STORAGE AREA $EJECT WKMTC: DS 5 ;WORK AREA FOR INPUT CHARACTERS DS 32 STACK: OR SAVING ENDING CYL ADDR DB 0 SCYL1L: DS 1 SCYL1H: DS 1 SCYL2L: DS 1 SCYL2H: DS 1 CYL1LO: DS 1 CYL1HI: DS 1 CYL2LO: DS 1 CYL2HI: DS 1 MAXFLG: DS 1 ;FLAG FOR CHECKING MAX CYL # SAVINT: DS 2 ;SEEK CYL INTERVAL SAVSV: DS 1 ;FLAG FOR SV OPTION # SAVMS: DS 1 DB 0 CMDIN: DB 10 ;INPUT MAX. 3 CHAR. CMDSZ: DS 1 ;SIZE OF THE ACTUAL INPUT STRING CMDCH: DS 10 ;STORAGEPMENT, PLEASE BE PATIENT !' DB ' TYPE "RETURN" KEY FOR NOW!',0 MSGET2: DB CR,LF,LF DB 'THIS TEST IS NOT AVAILABLE RIGHT NOW,TYPE "RETURN" KEY !' DB CR,LF,0 MINIT: DB ESC,PLUS MINITA: DB ESC,EQUAL,CRT,CRT,ESC,UCT,ESC,LCJ DB 'LINE 1..INITIALIZATION' DB CR,LF,ESC,UCT DB 'LINE 2..DATA WILL BE' DB CR,LF,ESC,UCT DB 'LINE 3..DISPLAYED HERE' DB CR,LF,ESC,LCK,0 BANNER: DB ESC,PLUS,ESC,EQUAL,CRT,CRT+25,ESC,UCA,ESC,LCJ DB 'CRAY MAINTENANCE TEST SYSTEM',EOL DB ESC,LCK,ESC,EQUAL,CRT+2,CRT DAG SET, GO CHECK IF HE WANTS TO STOP ; ; READY TO DISPLAY 16 WORDS OF JOHN'S RAM (F0C0 - F0DF) ; CMD22: LD IX,0F0C0H ;SET STARTING RAM ADDR. LD IY,WDTAB ;WORD # MSG TABLE LD C,1 ;DISPLAY BUFFER RAM IN 2 LINES CMD08B: LD B,8 ;DISPLAY 8 WORD IN 1 LINE ; CMD08C: LD E,(IY) ;PICK LO ADDR FOR WORD # MSG LD D,(IY+1) ;MSG FOR WORD # CALL DISPLY LD A,(IX+1) ;HI BYTE OF WORD # CALL HX2DIS LD A,(IX) ;LO BYTE OF WORD # CALL HX2DIS INC IX INC IX INC IY INC IY DJNZ CMD08C ;DECRMTC READ DISK ADDR CALL DISLIN LD A,23H JP CMD08X ; CMD24: CALL DIS20 LD DE,MSG24 ;MSG FOR CMD24 - MTC READ BUSOUT REG. CALL DISLIN LD A,24H JP CMD08X ; CMD25: CALL DIS20 LD DE,MSG25 ;MSG FOR CMD25 - MTC READ CYL REG. CALL DISLIN LD A,25H JP CMD08X ; CMD26: CALL DIS20 LD DE,MSG26 ;MSG FOR CMD26 - MTC READ HEAD REG CALL DISLIN LD A,26H JP CMD08X ; CMD27: CALL DIS20 LD DE,MSG27 ;MSG FOR CMD27 - MTC READ SECTOR REG CALL DISLIN LD A,27H JP CMD08X ; CMD28: CALL DIS20 LD DE,MSG28 ;MSG FOR CMD28 - MTC READ ID GEN. REG. CALL DISLIN LD A,28H JP CMD08X ; CMD29: CALL DIS20 LD DE,MSG29 ;MSG FOR CMD29 - MTC READ DATA BUFFER CALL DISLIN LD A,29H JP CMD08X ; CMD2A: CALL DIS20 LD DE,MSG2A ;MSG FOR CMD2A - MTC READ STATUS RAM CALL DISLIN LD A,2AH JP CMD08X ; CMD2B: CALL DIS20 LD DE,MSG2B ;MSG FOR CMD2B - MTC READ DATA ERR WORDS CALL DISLIN LD A,2BH JP CMD08X ; ; THE FOLLOWING COMMANDS REQUIRE BUSOUT REG. DATA ; CMD10: ;CONVERT TO VALID HEX NUMBER JR C,CMD10Y ;CARRY SET, INVALID HEX, INPUT AGAIN LD H,A ;SAVE THIS IN H REG. LD DE,CMDCH+2 ;GET THE 2 LOWER CHAR. CALL ASCHEX ;CONVERT TO PURE HEX NUMBER JR C,CMD10Y ;CARRY SET, INVALID HEX, INPUT AGAIN LD L,A ;SAVE THIS IN L REG. LD (WTMTCL),HL ;PUT DATA IN BUSOUT REG. LD A,(WKMTC) ;PICK UP FUNCTION CODE RET ; CMD18: CALL DIS21 LD DE,MSG18 ;MSG FOR CMD18 - WRITE + (BUSOUT) CALL DISLIN LD A,18H JP CMD10X ; ; 2C - WRITE 16 WORDS DATA BEFORE IS LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;CHECK IF INPUT ALL 4 CHAR. + (*) CP 4 JP P,CMD2C4 ;YES, CONTINUE CMD2C3: EXX ;NO, RESTORE DE REG. JR CMD2C2 ; CMD2C4: CP 5 JP M,CMD2C5 ;INPUT 4 HEX ONLY LD A,(CMDCH+4) ;MORE THAN 4, CHECK IF * IS ENTERED CP '*' JR NZ,CMD2C3 ;NO,ERROR - INPUT AGAIN LD (SAVET),A ;FLAG IT CMD2C5: LD DE,CMDCH ;GET THE INPUT DATA CALL ASCHEX ;CONVERT TO VALID HEX NUMBER JR C,CMD2C3 ;CARRY SET=INVALID HEX, INPUT AGAIN LD H,A ;TEMP. SAVE IN H REG. LD D7: LD B,8 CMD2C8: EXX ;SAVE REG. CMD2C9: LD (WRSTS),HL ;WRITE NEXT DATA EXX ;RESTORE REG. DJNZ CMD2C8 ;REPEAT 8 TIMES DEC C ; LINE COUNTER BIT 0,C JR Z,CMD2C7 ;1 MORE LINE TO DO JP S1 ; CMD2CY: EX AF,AF' LD A,9 LD (CURCNT),A CMD2CX: LD E,0CH ;CURSOR LEFT CHAR. LD C,CRTOT CALL BDOS LD A,(CURCNT) DEC A LD (CURCNT),A CP 0 JR NZ,CMD2CX EX AF,AF' RET ; CMD1F: CALL DIS21 LD DE,MSG1F ;MSG FOR CMD1F - FORMAT + (BUSOUT) CALL DISLIN LD A,1FH JP CMD1LINE 21 LD DE,MSG0A ;MSG FOR CMD0A - HEAD SEEK CALL DISLIN CALL CMD0A1 ;GET DATA FOR HEAD # LD A,0AH ;HEAD SEEK COMMAND JP CMD00X ; CMD0A1: LD DE,MSGHD ;MSG FOR INPUT HEAD # CALL DISPLY LD DE,CMDIN LD C,LINEIN ;GET INPUT CALL BDOS LD A,(CMDSZ) ;CHECK INPUT CHAR. SIZE CP 1 ;ONLY ALLOW 1 CHAR. INPUT JR NZ,CMD0A1 ;ERROR LD A,(CMDCH) ;CHECK THE INPUT CHAR. CP '0' ;LESS THAN 0 ? JP M,CMD0A ;INVALID, INPUT AGAIN CP '8' ;HEAD # = 0-7 ONLY JP P,CMD0A ;INPUT = OR GREATER CALL DIS21 ;POSITION CURSOR TO LINE 21 LD DE,MSG10 ;MSG FOR CMD10 - READ + (BUSOUT) CALL DISLIN LD A,10H ;FUNCTION CODE - 10 CMD10X: CALL CMD100 ;GET THE BUSOUT DATA JP CMD00X ; CMD100: LD (WKMTC),A ;TEMP. SAVE IT HERE CMD10Y: LD DE,MSGBUS ;MSG FOR BUSOUT DATA IN LINE 20 CALL DISPLY LD DE,CMDIN ;GET INPUT DATA IN ASCII HEX LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;CHECK # OF INPUT CHAR CP 4 JP M,CMD10Y ;LESS THAN 4, INPUT AGAIN LD DE,CMDCH ;GET THE INPUT CHAR. CALL ASCHEX SUE 18 (WRITE +BUSOUT) ; CMD2C: CALL DIS20 LD DE,MSG2C ;MSG FOR CMD2C - WRITE 16 WORDS DATA CALL DISLIN LD A,0 LD (BUFLO),A ;START FROM LOCATION 0 LD (BUFHI),A LD (SAVET),A ;CLEAR * FLAG LD IY,WDTAB ;WORD # MSG TABLE LD C,1 ; LINE 1 CMD2C1: LD B,8 ; 8 WORDS PER LINE LD A,0 LD (SPCNT),A ;INIT SPACE COUNTER CMD2C2: LD A,(SPCNT) INC A LD (SPCNT),A LD E,(IY+0) ;PICK LO ADDR FOR WORD # MSG LD D,(IY+1) CALL DISPLY EXX ;SAVE REG. LD DE,CMDIN ;GET INPUT DATA PATTERN E,CMDCH+2 ;GET THE 2 LOWER CHAR. CALL ASCHEX ;CONVERT TO HEX JR C,CMD2C3 ;CARRY SET=INVALID, INPUT AGAIN LD L,A LD A,(SAVET) ;CHECK * FLAG CP 0 JR NZ,CMD2C9 ;FLAG SET,NO MORE INPUT,REPEAT THE PATTERN LD (WRSTS),HL ;PUT IN STATUS REG. - F08A,F08B LD A,(SPCNT) CMD2C6: CALL CMD2CY ;SKIP 9 CHAR. DEC A CP 0 JR NZ,CMD2C6 EXX ;RESTORE REG. INC IY ;NEXT WORD ADDR. INC IY DJNZ CMD2C2 ;MORE TO DO DEC C ;LINE COUNTER BIT 0,C JP Z,CMD2C1 ;1 MORE LINE TO DO JP S1 ; CMD2C0X ; CMD20: CALL DIS21 LD DE,MSG20 ;MSG FOR CMD20 - DIAG + (BUSOUT) CALL DISLIN LD A,20H JP CMD10X ; CMD21: CALL DIS21 LD DE,MSG21 ;MSG FOR CMD21 - ECHO + (BUSOUT) CALL DISLIN LD A,21H JP CMD10X ; ; THIS ONE REQUIRES DATA FOR BUSOUT REG. & DONE INTERRUPT ; CMD17: CALL POS20 ;POSITION CURSOR TO LINE 20 LD DE,MSG17 ;MSG FOR CMD17 - STATUS-SEL + (BUSOUT) CALL DISLIN LD A,17H CALL CMD100 ;GET INPUT FOR BUSOUT DATA JP CMD08X ; CMD0A: CALL DIS21 ;POSITION CURSOR TO THAN 8, ERROR AND 0FH ;ASCII MASK OFF LD (0F084H),A ;PUT HEAD # IN HEAD ADDR REG. (LO) LD (0F085H),A RET ; CMD0B: CALL DIS21 ;POSITION CURSOR TO LINE 21 LD DE,MSG0B ;MSG FOR CMD0B - CYL/OFFSET SEEK CALL DISLIN CALL CMD0BX ;GET INPUT CYL # LD A,0BH ; SET COMMAND CODE FOR 0B (CYL CMD) JP CMD00X ; CMD0BX: LD DE,MSGCYL ;MSG FOR INPUT CYL # CALL DISPLY LD DE,CMDIN ;GET INPUT FOR CYL # LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;GET # OF CHAR INPUT LD C,A ;PUT IN C REG. LD DE,CMDCH ;GET INPUT LD A,(DE) ;CHECK IF FIRST CHAR = $ ? CP '$' JR Z,CMD0B2 ;YES,EXPECTING ASCII HEX VALUE BIT 2,C ;CHECK INPUT CHAR # = OR > 4 ? JR NZ,CMD0BX ;BIT 2 SET (= OR > 4), ERROR CALL ASCDEC ;CONVERT ASCII DECIMAL INPUT TO HEX JR C,CMD0BX ;CARRY SET, ERROR CMD0B1: LD (0F082H),A ;WRITE LOWER BYTE OF CYL CMD0BY: LD DE,MSGMOD ;MSG FOR INPUT MODIFIER BITS CALL DISPLY LD DE,CMDIN ;INPUT FOR MODIFIER BITS LD C,LINEIN CALL BDOS ; LD A,(CMDSZ) ;CHECK IF INPUT ALL 4 BITS C 3 ;EQUAL 3 ? JP M,CMD0B4 ;LESS THAN 3,MUST BE 2 OR 1 DIGITS INPUT JR NZ,CMD0BX ;NOT = 3, MUST BE GREATER THAN 3,ERROR LD A,(DE) ;YES, GET FIRST ASCII HEX DIGIT LD B,0 CALL ASCHX1 ;CONVERT TO HEX JR C,CMD0BX ;CARRY SET,INVALID HEX,INPUT AGAIN AND 3 ;MASK OFF THE HIGHER 6 BITS LD (WKMTC),A ;SAVE IT IN WORK AREA INC DE ;GET THE OTHER 2 ASCII HEX NUMBER CMD0B3: CALL ASCHEX ;CONVERT TO HEX JR C,CMD0BX ;CARRY SET, ERROR JR CMD0B1 ; CMD0B4: LD HL,WKMTC L (HL),0 ;HIGHE BITE REG. LD A,50H ;COUNTER 1,LSB,MODE 0 LD (CNTMOD),A LD A,0FFH ;SET MAX. COUNT FOR COUNTER 0 LD (CNT0),A ;LSB COUNT TO COUNT 0 LD (CNT0),A ;MSB COUNT TO COUNTER 0 LD (WKAREA),A LD A,80 ;THIS WILL MAKE IT ABOUT 2 SEC LD (CNT1),A ;LSB COUNT TO COUNTER 1 RET ; ICNT0: ;IRQ ROUTINE FOR COUNTER 0 EX AF,AF' ;SAVE A REG. LD A,1 INTX: LD (WKAREA),A ;CLEAR WKAREA EX AF,AF' ;RESTORE A REG. RETI ; ICNT1: EX AF,AF' ;SAVE A REG. LD A,2 ;SET IRQ FLAG IN WKAREA FOR COUNTER 1 IRDISLIN - DISPLAY MSG UNTIL ESC OR 0 DISLIN: LD A,(DE) CP 0 RET Z CP ESC ;CHECK IF ESC CHAR ? RET Z EXX ;SAVE BC,DE,HL REG LD E,A LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG INC DE JP DISLIN ; SPACE: PUSH AF ;SAVE A REG EXX ;SAVE BC,DE,HL REG. LD E,SPA ;SP=HEX 20 FOR SPACE LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG POP AF ;RESTORE SPACE COUNT DEC A JR NZ,SPACE ;MORE TO DO,LOOP RET ; CRLF: EXX ;SAVE BC,DE,HL REG LD E,CR ;OUTPUT CR ON CRT RY BYTE TO CONVERT DJNZ ASCB1 ;LOOP 4 TIMES ; LD A,C ;PUT THE RESULT IN A REG. SCF CCF ;CLEAR CARRY FLAG RET ; ASCBX: SCF ;SET CARRY FLAG RET ; ASCDEC: ;CONVERT ASCII DECIMAL NUMBER INTO HEX LD HL,WKMTC LD B,0 LD A,C ;CHECK SIZE OF THE INPUT CP 0 JR Z,ASCBX ;NO INPUT, ERROR CP 3 JR Z,ASCD2 ;3 DIGITS INPUT LD (HL),B ;2 OR 1 DIGIT INPUT, SET HIGHER BITS = 0 CP 2 JP Z,DEC1HX ;2 DIGITS INPUT,CONVERT TO HEX LD A,(DE) ;1 DIGIT ONLY JP ASCHX1 ;PROCEED TO CHEP 4 JR NZ,CMD0BY ;NO,ERROR LD DE,CMDCH ;INPUT NUMBER CALL ASCBIN ;CONVERT 4 BINARY ASCII BITS INTO HEX JR C,CMD0BY ;CARRY SET, ERROR RLC A ;ROTATE LEFT 4 TIMES RLC A RLC A RLC A LD HL,WKMTC OR (HL) ;PICK UP THE LOWEST 2 BIT (CYL) LD (0F083H),A ;WRITE THE CYL HI ADDR. RET ; CMD0B2: ;CONVERT ASCII HEX INPUT TO HEX DEC C ;DON'T COUNT THE ONE FOR '$' INC DE ;SKIP THE LOCATION WHERE $ IS STORED LD A,C ;CHECK # OF CHAR INPUT CP 0 ;ANY INPUT ? JR Z,CMD0BX ;NO,ERROR CP 0 CP 1 ;INPUT 1 CHAR ? JR NZ,CMD0B3 ;NO, MUST BE 2 DIGITS LD B,0 ;YES CALL ASCHX1 ;CONVERT 1 DIGIT INTO HEX JP C,CMD0BX ;CARRY SET,ERROR JR CMD0B1 ; CMD09: CALL DIS21 ;POSITION CURSOR TO LINE 21 LD DE,MSG09 ;MSG FOR CMD09 - SEEK CALL DISLIN CALL CMD0A1 ;GET INPUT FOR HEAD # CALL CMD0BX ;GET INPUT FOR CYL # LD A,09 ;SEEK COMMAND CODE JP CMD00X ; $EJECT SET2: ;SET 2 SEC IN 8253 COUNTER 0 & 1 LD A,36H ;COUNTER 0,LSB,MSB,MODE 3 LD (CNTMOD),A ;LOAD TO COUNTER MODQ JR INTX ; IDONE: EX AF,AF' ;SAVE A REG. LD A,8 ;SET BIT 3 ON FOR DONE IRQ FLAG JR INTX ; SUBTTL CRT OUTPUT ROUTINES $EJECT POS20: LD DE,CUR20 ;POSITION TO LINE 20 JR DISPLY ; DIS20: LD DE,LIN20 ;POSITION CURSOR TO LINE 20 JR DISPLY ; DIS21: LD DE,LIN21 ;POSITION CURSOR TO LINE 21 DISPLY: LD A,(DE) ;GET DISPLAY CHAR CP 0 ;END-OF-STRING ? RET Z ;YES,EXIT EXX ;SAVE BC,DE,HL REG. LD E,A LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG INC DE JP DISPLY ; ; LD C,CRTOT CALL BDOS DISLF: LD E,LF ;OUTPUT LD ON CRT LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG RET SUBTTL MATH CONVERTING ROUTINES $EJECT ASCBIN: ;CONVERT 4 ASCII BINARY BITS INTO HEX LD C,0 LD B,4 ASCB1: LD A,(DE) ;FIRST BINARY NUMBER CP '0' JP M,ASCBX ;LESS THAN 0, ERROR CP '2' ;VALID BINARY ? JP P,ASCBX ;GREATER 2, ERROR AND 0FH ;MASK OFF ASCII RRCA ;ROTATE RIGHT & OUT TO CARRY RL C ;PICK IT UP THE BIT IN CARRY & PUT IN C REG. INC DE ;NEXT BINACK & CONVERT TO HEX ; ASCD2: CALL ASCHX1 ;CONVERT THE FIRST DIGITS JR C,ASCBX ;INVALID, ERROR CP 9 ;CHECK IF VALID CYL *** JP P,ASCBX ;NO, ERROR CP 0 ;MAY BE THE INPUT DIGIT = 0 JR NZ,ASCD3 ;NO LD (HL),B ;YES,SET THE HIGHER CYL BITS =0 INC DE ;GO CONVERT NEXT 2 BITS JP DEC1HX ;INTO HEX ; ASCD3: LD HL,100 ;SET UP TO CONVERT ALL 3 DIGITS LD C,0 ASCD4: ADD HL,BC ;EACH DIGIT = 100 DEC A JR NZ,ASCD4 ;MORE TO ADD ; INC DE ;CONVERT THE NEXT 2 DIGITS CALL DEC1HX ;INTO HEX JR C,ASCBX ;CARRY SET, ERROR LD C,A ;PUT IN BC REG. LD B,0 ADD HL,BC LD A,H LD (WKMTC),A ;GOT THE HIGH CYL BITS LD A,L ;PUT THE LOW CYL BYTE IN A REG. SCF CCF ;CLEAR CARRY FLAG RET ; ; END OF Z80 CODES HERE ; .8080 ; ; 2 BYTES OF ASCII (32,33) CONVERT TO 1 BYTE (23) ; ASCHEX: LDAX D ;GET FIRST CHAR CPI '0' ;CHECK IF VALID HEX VALUE ? JM ASCH9 ;LESS THAN 0,ERROR CPI '9'+1 ;CHECK IF LESS THAN OR = 9 JM ASCH1 ;YES,VALID DATA 0-9 CPI 'A' ;LESS THAN ASF INTO HEX A-F ASCH2: ANI 0FH ;MASK OFF STA ETHEX2 ;SAVE IT FOR ET HEX INPUT NUMBER 2 ORA B RET ;EXIT ASCH9: STC ;SET CARRY TO INDICATE ERROR IN INPUT RET .Z80 ; ; 2 BYTES OF ASCII (32,33) CONVERT TO HEX (17) ; DEC1HX: LD B,0 CALL ASCHX1 ;CONVERT FIRST BYTE INTO DECIMAL RET C ;INVALID HEX, ERROR LD B,A ;CONVERT THIS BYTE INTO HEX LD A,0 DEC1H1: ADD A,10 DJNZ DEC1H1 LD C,A ;SAVE THE CONVERTED FIRST ONE IN C REG. ; LD B,0 INC DE ;READY TO CONVERT 2ND BYTE CA COPYRIGHT (C) 1981, MICROPRO INTERNATIONAL, SAN RAFAEL, CALIFORNIA, USA. ALL RIGHTS RESERVED. WordStar release 3.00 overlay file number 1. overlays for no-file commands and editing  NOSEY, AREN'T YOU?   Bý<>AE>x ʡ</{/:<><26;!:: *;<6#";=Ao!:ͥ>*:ͮ>9?F#>.?J=~ O#x͡?{?> ͡?":";{2:!:::;2;!2>!:ͥ>*:\A*:::_>G{ʛ?H>G>y”?ʕ? O>xF͡?w?*:\A2 ;WG ҙ@ʙ@ʙ@?2;:?:?:?q>2;@@@>@A?::=$@<<=͖B@9@¢2:>3@N@?::)>@!:1A#yHͿ@::x :=*6;>AͿ@î@Q::@:::=@@z@z ::: @::: ! ZtppýpÜshse !.; ?DELETE? RENAME? NEW NAME? COPY FROM? COPY TO ? jq p'$:Y5!88:Y508͹$02Y526$:Y5!88ͥ!6+͟$:626%8͹$!S5L#ͤVq@_#~:Oq#ͤ^qp&q>͍ͩs{é7!4k$%Ñq!p~Žq4w#…qp~#͹$O*+*`5"6?1"6*6~!͔$a#͟$~^ry:7ĥGrrrrr8y=qͩ$8îqyr̈́rCII A JM ASCH9 ;YES, ERROR CPI 'G' ;LESS THAN ASCII F JP ASCH9 ;NO,ERROR SUI 7 ;CHANGE ASCII A-F INTO HEX A-F ASCH1: ANI 0FH ;MASK OFF HIGH NIBBLE STA ETHEX1 ;USE AS INDEX TO ET TABLE LATER RLC ;ROTATE LEFT 4 TIMES RLC RLC RLC MOV B,A ;SAVE IT IN B REG. INX D ;SECOND CHAR ASCHX1: LDAX D CPI '0' JM ASCH9 ;ERROR, LESS THAN 0 CPI '9'+1 JM ASCH2 ;VALID 0-9 CPI 'A' JM ASCH9 ;LESS THAN A,ERROR CPI 'G' JP ASCH9 ;GREATER THAN F,ERROR SUI 7 ;CONVERT ASCII A-LL ASCHX1 ;CONVERT THIS BYTE INTO DECIMAL RET C ;CARRY SET, ERROR ADD A,C ;CONBINE TWO BYTES TOGETHER INTO HEX RET .8080 ; ; CONVERT 1 BYTE HEX DATA INTO 2 BYTE ASCII DATA FOR DISPLAY ; HX2DIS: PUSH PSW ANI 0F0H ;MASK TO GET HIGHER 4 BITS RLC ;ROTATE LEFT 4 TIMES RLC RLC RLC CPI 10 ;CHECK IF LOWER THAN 10 JM HX2D1 ;YES ADI 7 ;ADD HEX BIAS HX2D1: ADI 30H ;ADD ASCII OFFSET .Z80 EXX ;SAVE BC,DE,HL REG LD E,A LD C,CRTOT ;DISPLAY IT CALL BDOS POP PSW ;RESTYA A A AL>@ !> :=%>:=A6#J= J=~*:::O ~!:ͥ>!":*;ͮ>========!=F6#>=J=~6# Ox͡?ç=":!::!;".2;::?Y>͡2:2:AWo x4>!:~6)>::ͪA2E6W>2:2;:;!:’>*:*:R*:>*:>͎Ғ>2;?T?ͪo:J= > +~<>*;++~:>>>>>ġ?#BZBZBZB*;#";o*:&K>A~1APYÞ*A*:&:;HAK*:":*:":!*:REAK*:":*:*9<|R":::_jA*:|*9 –B>!,<*:-,=AҵBAÙB!";0qy(r!7r8îq(r8îqy\r̈́r®q\r8͹$2'!Ur#~®q͔$}!+y)8ͩ$8îq!M6r:7ʦr!:r!vr!87r:C6ʾr!;r:4!;r# ͂8þrկ rMss.r#s sͤ71s&s s1ss>  's~2pGOy*77sx2G6pvtLp::2J:v2:Z1$24: 7«p#8rs(%÷p%8xss2'vpp6sp87p2726:+2_5:^5y)[-'Cq:6 q\!s#.:*? пͤ#~+:1s~1s@##ͥ7$:C6 tKsͱ$8Zs:C6tmsͱ$8.͔ 2':C6]sͱ$.pxs.0p!4:4̎sù$~ʤs ʤs.#ʧsÑs6.#7 ʹsw# ¬s+~.s#6Ê*ps!s#~͹$2'*7*7R!)͎?!=8"J6!_7t!:; ͂7?v:6v> v&:>(r293r26p(%v!p :50q:+2^5:_5y)͉):C6Ărdr!8"J6:Y5=*J6!a!Z5r5!8"J6;!: ͂7?ɛu pcptp:*/Wͳṗp!vjvLzWvLPj!7I*7:*r̳G31!vPjnpͳpnp,p!vj͇p:*ʤp:Gv2Hvnp&q͆rv2'5k:*ƒqCÐpnp!vj!vj&q7p*7*7Rp!U*v͎> v&31AMG2'o ixg"6!7G*2Iv2DvLs:&vogss&"GvDsnrtst=s͈tt$s"EvLs*EvDs*Gv&[tvuʨutsTsvu[t}uqs33"Ev!sKât͚tځuŠsnr͚tڛuʕu*Gv"+v:&vg$o"Gv2Dv2Ivt*+v"Gv7t|Ҙs˜s:&vs+Lrs[t:Gvg:HvGu|sDM vuums"Ev:Gv&oA:HvtyGeu>2DvmsmsTs͈C8LyG;rQ8LQt;LNt͈Cs͈tt |t |t͈tGx*Bv}”t7+"BvẍCKt!Avtʾt t6 6Út6Gͭt>xɯx t#t+:Dv2IvGux *`5!5 .>2525:59q~!p!5 L#rqo?q(:5Rq:5kk*5"5>r2'!vͨjͤq{q*5|!p!pà&:5q*5|ʎq+"5:5[qg:5JÔJ?1 ͎rxͨsڼq͎rq͈C2'͗qҭq:5kk7!!:5:55r:5.rĨrr:5:5*7eÈCMh:5*7eC*7!5mrͮG:5:55ro /*7lÈC!n5x:5Srmrermr>+wy<<+w#y25~ʈrr>  > # pr+q#:5:5 r8LãrK?ÈC! p"60͍''/r@Yr>N!d5 7*7~ % *6~!%r͑!~!r2'4~6"qqv!Cë:!2p ë:'C!7:72:qv!7ëhq2'́qhqFq!7I*7yTJvM!7xVKJqJy£JqJ!"6!7xH*7͈C͟IҖqqJp:C6G-$ͱ$!8.͔ 2':D6:C6G-ôq8q8>25G*B6|!8s:C6s$:Y5r!8͔$:626n$:!4$r,p2JZ1%͹$*+?1*`5"6"6*6~!͔$a#+w#͟$~ʂrͨrږryrsږrGͤ–rxG8x͔$}!+y)8ͩ$8@rկ ®rsr.r#r rͤ7rr rrr>  r~r JpQpWp4EDBACKUP$$$BAKNEW FILE:/25bp͒p͡pOqZ1:4:b2f5>0q:2i52g5:I!ڈp~<2k5>24!vi.>2vC!p ̀ʾp!p ̀p!8"J6×-!v.!6.292F2I2[[-*7"v"7p*7*7R|<2 72 7|D!"7>2 7%q)"7,q2 7!5wȷ!  .>2%!:C6!4̗!:~ͣwv:Jtqw::ʀq>26_7 !p ~87!p  :4=q!CS!7v!4:8:6q6 #:v+!4v8!5~8:4=r!SC7*7w# q"7z̈CCp!"6Uq!vj:v>qnp>v&:*|t!Hv:Gv6q:*nq*"v|> v&}> v&:v>v&:v>v&͉qÐp*hv*7͎ҥr:u®qïq͎ҥrtWr|¦qqtqqq:IvLr={rڦqqLræq{ræq!Dv:Iv7ȷ:Iv=4rLr;r:Gvo&A> trr1ru(r;r>2IvxeÏq{rA%rQr*7#"7u>2Iv͈C>t:Iv={rLrnræqgo2Dv2Iv#C>2Dv>2Dv2Iv*Gv&"hv|2u͔ xr+!Dvf:Ivo=Lr{r}2Iv|2Dv"hv>2u*Gv|g*Gv͹R8L͉V*Gv"Gv2Av"Ev`i"Bv2?v2Dv7=|t>2Dv:Hv|t|t)u> t`ueu}JuWu# }eu Gx*EvóGóG͈C>kD> kD!Þu͈C8L͈C:&vus  ¶u vu:Hvu|s8uo|uu%uEuͳoÊeu8t çpôp2vþp>2v25Ok$%p͹$!n5L#25yp>,cp͹$!5L#25>)c͔$ͤr͡sys#?"sͩ$ 87B,s-2s>25G@s>2525NJs25WUs>25U`s>25> c"p$p͹$7~͡s#bk))ܝs0_ܝs"5|s!0?::5s!7s*7sÈC!7s*7ltüsIGyOxG7tt  t#s+at#ss#Ltt #0ttattѷt Btat# t~͡s>Ҳt~>ɛqpppp(p:pÈpÙpqKK7p+pCf+L;LMp@p#D*Pv:6O~`opyL`opop Zp~~wyL`…pDM2v6P[jKKDhËp:pv*g5iڳp*k5+++͓lڶp*i5"g52pv!vͭj1)*6"6!6Þ!dp!d"6>26!"6:6*v:vpvTJUMNF TAB AT COL CLEAR./; A for all)? ͱ$Bp1< 2)!6~6tq61)!5DpͶq2i52g5<<<2k5===!g5w!i5w̓s1)=xq*"v|}q>q<>!  r!!Þ!"Þ!#Þ!$Þ!%͞?1!&1)Þ:'!(r!I8"J6!*rHp!5͈s͹q_z#?rhrhr1)y!I4.ÊrJp!5A͊sDr͹q_{q!I4eڃr)))){/w!4+ʢr~ʑr¢r{2H41)tksr+C!vͭj@s*v*i5R*k5*v|r7_}r!vj> kD-r!vjtks24:C6:q!8"J6w-~͎!86q26̀1!|!. !!86q!~8!"|~2|!>"|:4=t!*pt%$p͔$!,uML#Ϳͤy6sq&p×q!y6C#6O#6Mq(p×qyͺr#yͺr23y4y~# qy͔$:42|!+~w26.wͅ"͗*y ?w-! !A4!~yR++R.!yyRR!yy[!Y|y[ͫst!~Y|[! Dկ r͎sr.r#r rͤ7 ss* s ``0   0m͛l?ace system disk (if removed), Hit any key to return to Operating System: ~$z%{|5x>4!|B|!}B|!}B|!}!}ͣ{ͣ{! }ͣ{{n1&r *;Gw#6*;w#62::Z;2::2:2v;*":!"K;:2A;>2@;Z;!fG#:IODrN +y=!7#͎+ir͠r͓rXr!7͎Ҋ;r++++lr!8d Hit any key to return to WordStar: Replace diskette with file , hit any key: *** file  still not found *** *** file  bad (too big ??!@&*) *** *** file  bad (too short) *** ***  found is bad or incompatible version *** iK2q!vj*vK2qqf!vv͉d>267ɯ2v{͹qq6q{͹q*q7?Cqͧq{xq͹qͶqʆqͧq>2v͹qͶqsqE7:v7͹qSʝqD q͹q-7+vM"v#{ʿq2'K? ܔ ڿq7*qɾ#45qs6RqhqwqÑq&rSrqqqqrrërrqq r9s{IQ0 ENTER space OR NEW LINE SPACING (1-9): LEFT MARGIN COLUMN NUMBERumn)? (ESCAPE for cursor col RIGHT For decimal tab stop enter "#" and decimal point column  SEs+͈C=s:v́q:v=͛q1)rK*sv"v͒kͭ7ͣks *v"svK*sv"v:sv_͒kͭͣkSsKs!:r#?r-frKsÊs%͔$L#Gy¸sͤ#ʶs!¸sW#ͤ7ssͤ{ŒsҌs~:0#bk))es*u(q5tSPELSTAROVR #1 COMMAND? WHAT???   NOT FOUND  Enter name of program you wish to Run,  optionally followed by appropriate arguments.  Example (shows disk space): STAT CHECK / ADD TO DICTIONARY? r ss>?ss> s s~+s#.: пկ  ps~ͅs#*?+sͤ#~+:¦s~Ҧs@##ͥ7~#fo"t#R"tstsottg*ts#zw+|s~w#+|s*tF#"txG s8$:Y5͢$:626n$%ͩ$"p>24,q$y!p \t>/v&!8t%!4,u%,p͔$:!,uL#Ϳͤy6sҠt&pqt±t(pqt#yͺrryͺr23y*** xm6lm6f161am1|*"|*"||͕{9|͘{y{ʊz|ʊzڊz!\!y͘{!4y͘{d{{:|{>1|*|"*|"!!|͐{!|͐{|{z!|ͣ{{! }ͣ{{-||9|3|$:|9|*|:|?|:| {!|ͣ{{! }ͣ{Gx{>2|1|Ïzyʈz 8{*|>2|2{2|͜|F{:|F{1|! }ͣ{Èz!y"*!a{͐{!!{͐{!|"Õ{H{:|x~# Ø{^#V+~#ʹ{{ê{!~ͪ{ê{O> {2|>*_y{{N#!{^C Cannot return to WordStar. Replace system disk (if removed), Hit any key to return to Operating System: WS.COM Hit any key to return to Operating System: s(pp:7:C6s6͇2>up:C6up!D6~6Cp:B6Z1 >2:$:7]p)8!5+8q>2:2D6/2:2B6:7ěsB!:.4!$;!5r'8:7Ēqp+~!8¼p"J64p~#p!5~pZ1!9"sͩ$-8:6<26 r:6r!͟$=r!18!4ͧq)qr;!+5$rA8p:*5q,qr!A5/88s":;q!G5?88s"<;q!M5C8:B68s">;q r38!4:̧q58#ͧq#:4/78̧qw98͹$2'!:; ͂7?$qqN!q#+qAxq#~xpÿ*sqq>;!q#~͹$72'?:62626:626n$>(r>%͹$O*+?1*`5"6*6~!͔$a#+w#͟$~|rͪrڐrrG8y=ʢrx͔$}!+y)8ͩ$8Frͩ$8Frկ °rsr.r#r rͤ7rr rrr>  r~  bDC HïC|ïC*7["7F`iDͼL W W OD WD ͋LbD;D͏GD G*7w#"7+ͰD`iDͰL8D͚DÃD*7"7ôD2vx0:*7R:'/̼ED|E E E#D*7+ [!"v"v"v͠Fx0 T%uEEx0  oE AE Ex0  Efg*v#"v*v#"v:'bE*v͎jE> ͧEE>ͧEEE:EE*v͙Es#r!"v*v#"v*v&)*vg:'2lv|bk+Ó_:v*v*v:'FͼE!EE!E]% FFLHTFPLiFMToFMBuFCP0FHIG>͕&>2 7!7jH*v*6͎-H"6!7jHYHR*7͎GH"7*7͎UH"7Ê*Z7*\RI`i)\wH!7#͎+ڐHHͺHH!7͎ҊH++++ÓH!7I ͺHҫH####7͎I++ws#r+##s#rÊ++Iw#r+s+r+sÊ!7w[?II>ܘIڊI: 7GO IvIڊBI!64F! 7ZI=O: 7=G͟IsI hIÉ*7+:Vv7!Wv~‹I6!v̭j͈C*7#zI*6*7R*7͎*v*6͎vIdIM*6#"6"7*7JI:\7WlzTJI*6vMtJmKx7*7ɯ2 v8M*7%L*7[>2 v*7"L+LxEL+~ ! v~6cL=2 v!7w[xvMJLx7LͰLͼL͊LL    7L?®L ®L ɯo>g>_v:~CW o g _ Wz}|{ L*7͎*7͎>͕&MLL1M*7!M*7}o|g_Pg!\*MLAM{yM>ĕ&zʘM*7*7R#͎+nM͔JSM*7>áM<>ĕ&*7*7R͎ҘMJM*7z7>2 vg:H!CڵM~=26=26M~26=26h``i"Rv "Tv͠F>27×-N*6<͎#N:6#N!M5kĈCj2g5:lv͔QòOL :6e``i"PvL͉V:%v26*&v" v""v:(v2v:6VP̀1 o :vL`o:Wv!vj2WvbP2$v!6~6/o ’P͑! ~!:6=ʡPͭPڨP7ԭP1)!65lԉl͹RͅR7ȷ$^PʹP:vL`P!6^͍QP>P:6e`2&w:vW!C?Q! 45QͯRP=6++++!CQEQ! ~QͯR!C?Q#Q#QbPLiUڂQ͉V͗LuQ_\_͏RPQzbg 整͏RͣRzWL_L:6=ÖQ>e`! ʬQ~wýQ ʷQ~½QQQͣRͅRQbPLͅR͉V ͣRͅRRzOR R R͗LiQ_ s#.:*? пͤ#~+:3s~3s@##ͥ7$*`5&~!bk͔$L#ͤvsͤjs68LʲCڵC*7["7`iͰLzL͚D*7[F*7"7"7zL͏GïC*7"7RDͼL D PAF% E> ͧE*v#"v% F>ͧEFEͧ%F% F*v*v#͎%FFͧ%FF%g}2 vÑF! vxF!vxF!vͧ%FF%ҊW{͘FͰF| FO: v> !f v*v*v* vR|F`h: v/<_F Fi`"vÊ 2vx%G  GG FJG`GF:'GJG`G3GF:vOqG*v+"v:XGJG>2v!v454T%*v+"v*v+"v͙E{"v*7RA|#O ʋG wGxMG:v1G*7NJ*7qG͋G0OG HGGºG ͐D  *7*7͎!7!7IxŠͣHz{*7͎J*7YH͎&J:kKJ*7YH͎87>JdKJM*7+"7J"7:G+~# `J> iJÊJͣH?IPK*7!7CKãJJqJ!7)K*7ͼJJڲJ2\7"7 ¦JsIg77797~J#J7>>:9!777:v7qJI!7,K*7gvsI"7 KsI?I*7ͣH͎UK*7)$$VKNKO>͕&xHͣH͎eK)|Lɯ2 v8M:WvK͈CŽK*72 v/2 v*7ژK*7[:WvʾK:v¾K*v|KPY͎ڽKDMɯ2WvI*72 vKxK~# ! v~6K2 v*7*7[x6~6N/ cN:6*6*67_N2626qN&* 3.GNy*N!ex *N*6"6"6"6y26x26:6!6nN26-vLvLíj:Y5ڸN͍'"%:6> 0026o $͖0o͢$:626ɯ2626:Y5o!ͩ$M88L K͈CKNNN!% O ܔ %7N!6~6ʦOʹPAO`i+~+++1O6! ^#V{rOV`?G1G:6[O>`Ox=e`ͣRckL7>~.`P͙QҲO*Rv~ʔO@_PÂOb` ʲOh_͍QÔOʹPAO͔QPPAO$PvP{2?v T ƒS> ]ShX:hvoSŸS:%-T͕SXS:!e5ªS͕S]S͔ SSҾS:%S>^XSSS@XSdV*hv#"hv*Ev+"Ev*hv+"hvS@]SS! T-T> gT>~!kvU: v7T: v7Tɯ2 v:Wvz2%v*hv:?vPT+"&v:kv2(v>2=v:>v•T:2VvL;LԒU2VvM+LͨUxU+~  •U#xU+~ # +ëU>;L#:hvG:?v!:vUS#~bV*0v}CV#6{=(V=2>v X )WX*hv*0v#R|}&X>=,XOyFX FXFX 3XxgðWWxGX'X*hv|}/<7:EvpX=sZ:Av:*2Ev.[:ͮXY:͙XY:;vʦX:2v 2jv͙X:\v2\v#́\X:͙X:"Y:͙XÝ\> )W]SͱX X:X:͙XKY YÝ\YY#:ͮX@+:@v[> O2?v:]v-TXv:\vMwO\GY͋\:*UY:AvzY:kvG_Yw#]Y:jvwo 2VvXvL:CvUY:2CvSZhX:Ev=W:kvGScYw#¸YpXïY:`v<2av=YYY*hvZ[j74ZMlT|\!"8vK"3v+"3v#*\Ê o  }!_vзG\z!avد2_vz2`v:/:]vF*0v}:^vT%vL;L? :'!(:'!D9"nvJ*7#~+T%ʸ\!(]]%\\Կ\*nvÊͧ%\*nv>?]͙X\`i{= ]~ ]#]w#\!kv!d5:ÙX\:':(7ĭ]8\LH]PL]MT]MB]HM\FM\PC\PO\SR\UJ\BP\CW\PA\CP\PN\OP\HE\FO\IG\PF ]OJ ]IJ ]LM ]LS ]RM ]CS ]DM ]SV ]AV ]RP ]DF ]RV ]FI ]!vL;LT%ʼ];Lw\]b`o ] ]ͣR!6]bP0]bP ~&w!C)`:Ch`!C/8`W:C&w_H` :`G1Ox1!6/<12vog))Bw DM!BwA 4_}:)ʑ`>!f5FO:6ʟ` *6|ʪ`:D6!6O!: #~ ` ½`:I'`V(!4(́\`͡(C*v#a(C*v#a(a͡(C:v_*vͰL aͲa(C*v#Ͳa(C*"v#$%>aA>-c(a:$vc(*6|ja>+0((*7*6Re."6:f5!6V(~ʁa>͡( C:pvʏa>͡($Cʛa>%͡("C:)a>0͡((C0c(;aHa+|axa`i;ac(iÎ :6:6W?ͭ+KͶd+Kd+2d:6!6did~‰dÌi*Pv~‰d͌iqd]ddid"PvKP>d*Pv####:6=L`1h``iÌi*RvÌi!"6:6/!+£)b` ‰dqd2d!65^:t!c5d>L`:6e` ]:+!6ª)*Rv++++~‰d:6!6>d$^e:{!c5b`]*Rv~1h_͔Q͉de!v~6.en1 K+!f5Þ:g5:v=f+g*7++͈C>2v2g5ڊe(͂N/*`52626(~! ҕef͡eMh!mv626-e!645enk!#45e>f!"45e#e:-fn ~:6/!mv!6qN<26á2;v!kv:22v[bV:=v2;v8VW*-vp#"-vw#>2@v[bV#54+U:ivbV*0v*hv͎UGxG"0v26=2/v*+v ÉV!"hv9"+v!Wv~ʠV6>2VvvLz2]v>2\v:22v!:v#:* 2jvW:Dv>NU:Fv:Bv4ZZ2`v2Fv=2Ev=2_v:]vZv !\zZ!_v4:*![ZZ:vZ>2kvÊ:]vv̗LfX?vԗL[[:*[:Gv<[:Hv<[2Avɯ:`v=ZZZ:Iv/!v!vZ*hvM|D!Gv~¯[][=2Dv>2kv:Cvh[ڞ[:Hvګ[ʣ[O:`vŠ[:_v=ګ[ʫ[y!Bvp!Ev2BvÊŠGy/^`:+^:6!6^:6^26ͳ)1)ͥ"> ͜ `'_'_!tÏ^:6W0#w 7_||g}o&wPY!x[!p0`i&wy_&wr_PY!x[!X_h_=‰_Mæ_DML_`0͹R`é_*w:CW __͗L___7 _::6h``)O*7:I=G:&b:+:e5\b:1vWb:0v0bIbrb{!g5zAb!e5w# Wbb6+db> ^bw#\b6 ͟,z26>26{!i5ڙbb kD> kDhfKK]gTg+ Hē_w#>gÈC͈Cͯ_.g:i5!g5w1)( Ͷg@_=gPe͉i1( Ͷg͇_͔Qb` ʌg@_P͉dágV`g?<:vf8L~cDg*Pv~~wJhK3eOGh!v~yg4 :pv!qv~ h5!vͭj!vj> kDͭj:vjK8LͶKcdfC[j*Pv:!vah: v ih~~w++++~~w>2mvf͠h:pv!"v$"v+L;Lښhͼh#vMiҶh!""vgz:f5hK*"v͓l҈CKh+h#!"vh͈Cͯ_> k:"> f*"v͓lhf> kDi*"v:"'i{_Iiz=iig 7 i{/ikii2pvG1fi*k5͓l/i*i5͓li 7ȷ{!I4e~io&" v*Pv~ʛi++++Îi~ld›i"PvDM#^#V###N#fiR>2VviKi2Wv2VvÈC!")v* v|i{K+zj#!)v#kD 7> ęԜkOG1!"vy͉lͮk>2mv2rv͟ltllͯ_tl*~v*k5R"v+|hlo:!nͯ_f"nͯ_>lg͈C26*"v*g5Ól*k5*"vÓlzʜl7?{tkK*sv͂lKͭ7l+́nl~w#ͣkål͈C*sv*g5"svRE̓oKgv>M!uv. ?ml> 2}v:yv:|vm!O8"J6?m!}v5 m*zv"~v*v"v*v"v|n͓n Qm3e7ͭ7_m>+w#_ͦmW*svͣk*k5*svm#͓lҟm:zvŸm"zv+v>M:zv{nʽmzn>m{m2|vz>Gg!uv~p#wzxmO#~q#wz2v*svm#"~v!yv4+xrpq|r!! ͎8p:71p̀1p!;8"J6!7Qr*7";";";";";";";";6#";";.6#";";";";"E; s#r":2;:4q::p>24;=/p22;23;>q:>q:>q/25;/!7̗q:4.q/2E6>':4! Wq:4;! 2C6:B6ʔ Z1 n1&r *;Gw#6*;w#62::%p͹$7>24>2v(r:Y51qS8͹$!"tPt:5Jq:5kk2'!vͨj͋qgq͛t!+p!)pà&26:5ĢrIrMh!!:5q!7q*7rÈC!7q*7lrqIGyOxr#*r r r# rr7 2r+ /r/r7͜r*7#C*7o /!'p"6͍'*6"ror!d5 *7~ % *r~!%‘r͑!~!or2'8LÈCKÈCg:5JÔJx ~#õr:Y52Y5k$2Y5%!~!tqܨr3ss-sPr26FsB"s2 ADD!"<2:oz=*;S<<6#";!&v >͗L>:*#ڤj=w<6Rj6#w#w#wR}))v~wXj~~wXjj͹jj>v&>?1WDM5kʊz2'͈C26k!vjK2'?1!]AM͈Cko L{lk{XkPk|gk!gkv>M=n: vL;Lw2 vgvL;LW4n6iK2|nSn͓nW:nͭ7+͈C:)=_g>kD> kD[n2'*g5"svE̓oK:rvMv͗L7Kʣnʣn+͈CKKnʪn̯_n3eên+nCKͼ zn+6 -:vvG:v!v64n!xv owOo!v4o<552vx!xv2vviKgKqo.og!vv5po:vSo!xv5bo!v5bo!v5bo=<.otoK.o:v͈C!vo~G~wogxړo>OxGͳGÆooÆo :$/!rv:vv!!vZ1 toK.o^tPC!vo~GZ;2::2:2v;*":!"K;:2A;>2@;Z;!fG#:IODrN +y=!7#͎+ir͠r͓rXr!7͎Ҋ;r++++lr!7r ͓r҄r####7͎r++ws#r+##s#rÊ++rw#r+s+r+sÊw[ɛuàpàpqïtqÛt&5>Rd ???Action(F/B/I/D/S)?Spelling Check Completed Add to Dictionary:  Add to Supplement: (Y/N)? >2vqr2525~!Q8͹$!5 L#pګpqͤp#Bp>25Gp>25> c#ptIsDsSsr͗s-sr͛t*7tͮG7>26*7tG2t+#tWs_>ʐs2t?s}s}s'Hs ʅs ʅs ʅs ʅsÐs2t?s:t2t?sx2t*t~!:tD­s-p÷sSs/p͹$:tc1p3p*`5"ror*t"`5͹$Yt!*;":#>2:2:B~5I= BWo xq=!:~6i=::B2E6W2::;G:;W*::5;==!}>>x=!:y=!:zU=2:)>}>>| >x= >y=z!:5 >z=I=|xOzO>2:2:K>:;?>ɷH>::33ɯ2:d>:;?>::2:z>C>:;z>:;!:4><2:͚>::::!:ڃ>!:.?ͪo:4;!:!; .:>; ͵< > :>?>?>?~>?>i?#::E=2:! >!:ͽ>*:>Y?F#>N?͌WG +@+@+@:”?qBBBB¿?C>i=%@!:ʰB#z=:4;<̉B::!:A@ ::O::U@W@>!:`@ H::̔@:4;::@x :=CB͔@|@@ ::=Q::@:4;::@:=CB@ë@¾@ ::=::zA: O::@: O::@ɷ@z @ :4;@A: B<26;!:: !8!:>!":*; >N=N=N=N=N=N=N=N=!N=F6##>G=ͨ<~6# Ox>=":!::!;".2;::;?ͷ=͡2:2:AWo x’=!:~6=::ͱA2E6W>2:2;:;!:=*:*:R*:>*:>͎=2;^>į>ͪ@?z@z ::: @::: ! úA::!:=@GW@z@!";o:oh@͠@W@:=(=LX:Ox 3 O[:%=7=Rd*;#Q@:=@͎@@!8;@6@6:8;͠@ê@@!9;4:=>29;͠@@~@5>E@͎@!8;~4:=:9;?A!@Ê*:&KaA~7APYÞ0A*:&!:0A A<=,@UA:;kAK*:":*:":!*:RhAK*:":::_ÍA >2:2:PAAPAADA ,@AA 82:!::|A,B!:~6B͜B͂s ÉpÿpXpB READ? WRITE MARKED TEXT ON? 1:v!v}pj!vj>v&>v&!vj!vjsqp!vPj2'7!:ڹpJO:ͳGڙp!vjrsqpͺr2'!AMv!͗Lp*778͈Cp*7:vTJ7Mr7!4~#k$%͹$O*+?1*`5"6"6*6~!͔$a#͟$~ʦq,rںqºq8y=qy¤qqBy! %A+A *A*A!:4x!:4::ͳA!:=AG]ÀA!";o:onAͩA]A:=(=LX:Ox 3 O[[:%=7=Rd*;#WA::=2:> ;AóA:=A͗AA!8;A6A6:8;ͩAAB!9;4:=>29;ͩAB~B5>KA͗A!8;~4:=:9;?8B!AÊ:4;BÊ:4;CB!:~5N*:!:+#{ 2:yhB!:{Bw::!:5*:!:::+ʞBҕB#<2:w":~ʰBPY͞J 6ͩBBͩB:5;=#B<=/ABo:ͨ< .> +~*;++~:>V>>V>>>#*:A! D>!:>*: >ʔ>F##>‰>͛{u>> >":";{2:!:::;2;!2D>!:>*:A*:::_7>G{>H7>G#>y>> O7>xF>>*:A2 ;WG ???!?2;:9?:9?:A?q>2;a?a?a?j?A;?PAz?;?::Ç=?!:7A#<€?x$AAA!::APY+:A@ 8::AÛ=yH?::x :=*6;aA??Q::@:::=B**:͵B":!:yw:ĩB!xhBB**:ͲB":!:~LBLBNPB!,B͜B!:~6pB!:x!mBPA!:xpx!hBʗBʗB,@PA!:yw:OPAy,@:O|8͎B!BRyKByOB#zxAɛ <<<"<5<ɯW  wr~͌r#.:*? пͤ#~+:µr~ҵr@##ͥ7r!vj:vrr>v&:*r!Hv:Gvr:v>v&:v>v&!vj:*> v&>V<<2E4!9"C4ͨ<=:l2J:] @:4-:5-*C4͢=!~!!S!Ϳ!%=#%=#%=#%=:`2Y5:c2+ͥ2b5~f!B6.:2c5K=~"=:b5é*͂="7:Il++"7"7="7+"7:Il++"7"7"7*:c5£=*HL&bj –=R+#"7"7*H-3#"7"7Q"7R"7:c5*HͿ-=|!]=>o&))))>=goR>.>O->26:H26=26=26S>:7*7>|& 7!!Y5~P>(P>6!"J6O-:H|>y|>6u>:I@|>|>~!8"J6>|&w- A4:c5:ª>®>:ʰ>>2d52e5>:2[5ͤ!ͮ!~"!N6 ! t6!q66.!66/:26ɛ!%=#%=#%=#%=:`2Y5:c2+ͥ2b5~f!B6.:2c5K=~"=:b5é*͂="7:Il++"7"7="7+"7:Il++"7"7"7*:c5£=*HL&bj –=R+#"7"7*H-3#"7"7Q"7R"7:c5*HͿ-=|!]=>o&))))>=goRORE HEX DATA BYTE .8080 ANI 0FH ;GET LOWER 4 BITS CPI 10 ;CHECK IF LOWER THAN 10 JM HX2D2 ADI 7 HX2D2: ADI 30H .Z80 LD E,A LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG. RET .8080 ; SUBTTL MSG & COMMAND TABLES $EJECT ; BANNER: DB ESC,PLUS,ESC,EQUAL,CRT,CRT+15,ESC,UCA,ESC,LCJ DB 'DTC INSTRUCTION FUNCTION CODE (HEX)' DB ESC,LCK,ESC,EQUAL,CRT+1,CRT MSG00: DB '00 = CLEAR CONTROLLER' DB ESC,EQUAL,CRT+2,CRT MSG01: DB '01 = SELECT PORT A' DB ESC,EQUAL,CRT+3,CRT MSG02: DG0B: DB '0B = CYL/OFFSET SEEK' DB ESC,EQUAL,CRT+13,CRT MSG0C: DB '0C = REZERO' DB ESC,EQUAL,CRT+14,CRT MSG0D: DB '0D = CLR FAULT' DB ESC,EQUAL,CRT+15,CRT MSG0E: DB '0E = RESET' DB ESC,EQUAL,CRT+16,CRT MSG0F: DB '0F = FIRMWARE RELOAD' DB ESC,EQUAL,CRT+17,CRT MSG10: DB '10 = READ + (BUSOUT)' DB ESC,EQUAL,CRT+18,CRT MSG12: DB '12 = DISPLAY DTC STATUS' DB ESC,EQUAL,CRT+1,CRT+40 MSG17: DB '17 = STATUS-SEL+(BUSOUT)' DB ESC,EQUAL,CRT+2,CRT+40 MSG18: DB '18 = WRITE + (BUSOUT)' DB ESC,EQUA MSG27: DB '27 = DTC READ SECTOR REG' DB ESC,EQUAL,CRT+12,CRT+40 MSG28: DB '28 = DTC READ ID GEN.' DB ESC,EQUAL,CRT+13,CRT+40 MSG29: DB '29 = DTC READ DATA BUFFER' DB ESC,EQUAL,CRT+14,CRT+40 MSG2A: DB '2A = DTC READ STATUS RAM' DB ESC,EQUAL,CRT+15,CRT+40 MSG2B: DB '2B = DTC READ DATA ERR WDS' DB ESC,EQUAL,CRT+16,CRT+40 MSG2C: DB '2C = WRITE 16 WORDS TO DTC' DB ESC,EQUAL,CRT+17,CRT+40 MSG2D: DB '2D =' DB ESC,EQUAL,CRT+18,CRT+40 MSG2E: DB '2E =',ESC,LCY,0 ; MSGLOP: DB ESC,EQUAL,CRT+23,: DB ESC,EQUAL,CRT+20,CRT+30 DB '** ENTER DATA FOR BUSOUT (4 HEX DIGITS): ',ESC,UCT,0 MSGHD: DB ESC,EQUAL,CRT+20,CRT+30 DB '** ENTER 1 DIGIT HEAD NUMBER (0 THRU 7): ',ESC,UCT,0 MSGCYL: DB ESC,EQUAL,CRT+19,CRT+20 DB '** ENTER CYL NUMBER (3 DECIMAL OR $HEX DIGITS): ',ESC,UCT,0 MSGMOD: DB ESC,EQUAL,CRT+20,CRT+20 DB '** ENTER 4 BINARY BITS FOR OFFSET MODIFIER : ',ESC,UCT,0 MSGKEY: DB ESC,EQUAL,CRT+23,CRT,ESC,UCT,ESC,LCJ DB '** LOOPING ** PRESS "ESC" KEY TO STOP',ESC,LCK,0 MSGE23: DB ESC,EQUAL, 7#~#foN#F+w#wxy+͌*"*++## ~O#^#V"#^#V"#yn2͜~ #eͲ*>#*|4A>22͜> :<32Ԍ> > : ھ͜<2> ͌0 "(RELCRFPRNB '02 = SELECT PORT B' DB ESC,EQUAL,CRT+4,CRT MSG03: DB '03 = SELECT PORT A & B' DB ESC,EQUAL,CRT+5,CRT MSG04: DB '04 = RELEASE PORT A' DB ESC,EQUAL,CRT+6,CRT MSG05: DB '05 = RELEASE PORT B' DB ESC,EQUAL,CRT+7,CRT MSG06: DB '06 = REL & SEL PORT A' DB ESC,EQUAL,CRT+8,CRT MSG07: DB '07 = REL & SEL PORT B' DB ESC,EQUAL,CRT+9,CRT MSG08: DB '08 = STATUS - GENERAL' DB ESC,EQUAL,CRT+10,CRT MSG09: DB '09 = SEEK' DB ESC,EQUAL,CRT+11,CRT MSG0A: DB '0A = HEAD SEEK' DB ESC,EQUAL,CRT+12,CRT MSL,CRT+3,CRT+40 MSG1F: DB '1F = FORMAT +(BUSOUT)' DB ESC,EQUAL,CRT+4,CRT+40 MSG20: DB '20 = DIAG + (BUSOUT)' DB ESC,EQUAL,CRT+5,CRT+40 MSG21: DB '21 = ECHO + (BUSOUT)' DB ESC,EQUAL,CRT+6,CRT+40 DB '22 = DISPLAY HOST RAM' DB ESC,EQUAL,CRT+7,CRT+40 MSG23: DB '23 = DTC READ DISK ADR' DB ESC,EQUAL,CRT+8,CRT+40 MSG24: DB '24 = DTC READ BUSOUT REG' DB ESC,EQUAL,CRT+9,CRT+40 MSG25: DB '25 = DTC CYL REG' DB ESC,EQUAL,CRT+10,CRT+40 MSG26: DB '26 = DTC READ HEAD REG' DB ESC,EQUAL,CRT+11,CRT+40CRT DB 'ENTER "L" FOR LOOPING OR' BANE: DB ESC,EQUAL,CRT+23,CRT+25,ESC,UCT DB 'ENTER FUNCTION CODE (2 HEX DIGITS): ',0 TIMERR: DB ESC,EQUAL,CRT+22,CRT,ESC,UCT,ESC,LCN DB 'NO RESPONSE FROM THE DRIVE IN 2 SEC' DB ESC,LCO,0 CUR20: DB ESC,EQUAL,CRT+20,CRT,'** ',0 LIN20: DB ESC,EQUAL,CRT+19,CRT,ESC,LCY DB '** 16 WORDS FROM FUNCTION CODE: ',0 LIN21: DB ESC,EQUAL,CRT+19,CRT,ESC,LCY,ESC,EQUAL,CRT+21,CRT DB 'XX01 XX00 XX03 FROM FUNCTION CODE: ',0 MSGSTS: DB ESC,EQUAL,CRT+22,CRT+1,ESC,LCY,0 MSGBUSCRT+23,CRT,ESC,UCT,0 ; MSGW01: DB ESC,EQUAL,CRT+21,CRT,' 01-',0 MSGW02: DB ', 02-',0 MSGW03: DB ', 03-',0 MSGW04: DB ', 04-',0 MSGW05: DB ', 05-',0 MSGW06: DB ', 06-',0 MSGW07: DB ', 07-',0 MSGW08: DB ', 08-',0 MSGW09: DB ESC,EQUAL,CRT+22,CRT,' 09-',0 MSGW10: DB ', 10-',0 MSGW11: DB ', 11-',0 MSGW12: DB ', 12-',0 MSGW13: DB ', 13-',0 MSGW14: DB ', 14-',0 MSGW15: DB ', 15-',0 MSGW16: DB ', 16-',0 ; WDTAB: DW MSGW01,MSGW02,MSGW03,MSGW04,MSGW05,MSGW06,MSGW07,MSGW08 DW MSGW09,MSGW10,MSGW11,MSGW12,MSGW13,MSGW14,MSGW15,MSGW16 ; CMDTAB: DW CMD00,CMD01,CMD02,CMD03,CMD04,CMD05,CMD06,CMD07,CMD08 DW CMD09,CMD0A,CMD0B,CMD0C,CMD0D,CMD0E,CMD0F DW CMD10,CMDXX,CMD12,CMDXX,CMDXX,CMDXX,CMDXX,CMD17,CMD18 DW CMDXX,CMDXX,CMDXX,CMDXX,CMDXX,CMDXX,CMD1F DW CMD20,CMD21,CMD22,CMD23,CMD24,CMD25,CMD26,CMD27,CMD28 DW CMD29,CMD2A,CMD2B,CMD2C DB 0,0 ; CURCNT: DS 1 ;SAVE CURSOR LINE COUNT SPCNT: DS 1 SAVET: DS 1 ETHEX1: DS 1 ETHEX2: DS 1 NSRAM: DS 32 ; SUBTTL CRT CODE EQUATES $EJECT ESC EQU 1UQ% v1`2B`@!B | " %;4bLш"L(B2 ,Wk\ 8o d)< K2-~2J]nh G٤0!`< #$k = \ˁdx /k > p CPe2T<I@k, "Sh :vh>Ja6iP :8E f@4 f@5La,( шs L ภ'(0 &HQ3 Xf8A,4.Wvi >0@h i٤0IY0Ef@# $f !A4.C`i >0@h 0IY0E:f@c $f`!A4.Wi ):GYp >/FOYdP@ȉl YPa $d4 #ђ8K4\A,|a@lp"fH aE` T!K4٭ f!A3CQ)Zh ^Ah:__t`8y`x!^ h B34i D f@4 f@4_CO r(LԈp 11Wp)@Ӡpe`vXa /LQ|43_ a],6k\ 8F4lD06 Pi.Li Y(IGa>( dx >( H |.i4> 0Aa@D 'Xid6K4 lc0id?l@R*A@0  dR`O)P  HL 2)0@P'lz) 耦T 1@G"" 06=@S"Ia@0 ADȤRXlz, B耆Y& b1LTȤRXlz- b耤E-JD\  R%RaP6=Q@R"ȥ@` R&%"(E&$@b HA"U)ʥAHlz2 FB耈I) ȀT! eB PS D$@=ʄT-)IAS'JDH\I*DU)ʥAHlz#$ H而O)H%APB*R6=C@D$HXPB*R6=C@E! XPB*R6=C!@D$ d@H'ʂ!z "bD %2XD)Ǣ@h BE cѰ6yǣAT "RA*DbyH@B*RP4G$ bЀ6TǣAT "Rb "H䒠E 4E)PR*Ѐ6Tǣ1T "RY& RiR b!I&IyH@$$K!$I*#l FAP@E'!@B$%"ȀI*byH@O#dRO"HĒ)H@ BPl* y@N#B@E)")L"ȥP ) ٬6=Z!hX  Š``4ZahX  Š``8cѰ@ E`b0Z#!hX Š`b4Z#ahT Z@1 f@1 tǠ1 @`4@"6@$@ qAR@,R@& W0LDBH ;ESCASE CHAR. CODE PLUS EQU 2BH ;PLUS SIGN + FOR CLEAR ALL EQUAL EQU 3DH ;EQUAL SIGN = FOR CURSOR ADDRESSING CRT EQU 20H ;CURSOR ADDRESSING OFFSET UCA EQU 41H ;UPPER CASE A FOR SELECTING ATTRIBUTE MODE UCT EQU 54H ;UPPER CASE A FOR ERASE TO END-OF-LINE LCY EQU 79H ;LOWER CASE Y FOR ERASE TO END OF PAGE LCL EQU 6CH ;LOWER CASE L FOR UNDERLINE ON LCM EQU 6DH ;LOWER CASE M FOR UNDERLINE OFF LCN EQU 6EH ;LOWER CASE N FOR BLINKING ON LCK EQU 6BH ;LOWER CASE K FOR REVERSE OFF LCO EQU 6FH >0@h f0IY0Df@@"^ װ|*27 @y%Ct  !`<4f@0OhDoFpYdCi:JYg ٣3 f@x%Al6 )Y i >0 &h rY0Jl0E f@3 f@)A6 )Ei >0 &h $0Rl0D f@S f@)Al6 .\i >3[`6H2YB*P[4bAS4 /#ָp3X k\ 8lHf dE` T)S4Hǀ$H #</` 4blWp)`6C o`@$5pk x|f@ zCp 6^#ɒA&hL(@`G'< aAy#vHf /G o358_<  2$z ~١8O'}!OpA};.kDpi0} _Ap; w0!:!*`5#!6~\!5*7~w27*`5ͫ":6o&{!͔!*`5͎ī"ͪ*6:6o*`5}ͧ!o!6:!<=:!g=!÷!÷!:c5~<=#~ͳ !!0:H=!:I"=O3#:c5T"~ &"# "ye +~ ," ~!!m~Į!S"A> ͳ J" 6 # Z"!!!~x"!ͮ!ͥ" *`5"~"!ͮ!ͧ*H-&"`53#!"7:[5{" ":Ͷ!:d#*^\:]"!J#!S#!X626r!$261$r!:1%:1%:1%:1%:GOͪO%:C6I% y̔ x4%ê!%2S%%_:S%W~ʑ%#ʂ%###r%~|%#^#VÓ%g% ʗ% ʗ%!͗%%%0% %T])))_%%%0% ڽ%|7%%x 7 7 77?}8}8}8}8}8U8W8Y8[8]8_8a8c8q8}8e8g8i8k8m8}8}8}8{8}8s8}8u8w8y8}8}8}8}8}8}88}88888888}888}8}8}8888}8}8!Ø&?'ͥ"K'oG-!?'?1͉-:626o!$K'>c31̓͹$26:626!&26%×-!6~6',0 MSGW05: DB ', 05-',0 MSGW06: DB ', 06-',0 MSGW07: DB ', 07-',0 MSGW08: DB ', 08-',0 MSGW09: DB ESC,EQUAL,CRT+22,CRT,'09-',0 MSGW10: DB ', 10-',0 MSGW11: DB ', 11-',0 MSGW12: DB ', 12-',0 MSGW13: DB ', 13-',0 MSGW14: DB ', 14-',0 MSGW15: DB ', 15-',0 MSGW16: DB ', 16-',0 ; WDTAB: DW MSGW01,MSGW02,MSGW03,MSGW04,MSGW05,MSGW06,MSGW07,MSGW08 DW MSGW09,MSGW10,MSGW11,MSGW12,MSGW13,MSGW14,MSGW15,MSGW16 ; CMDTAB: DW CMD00,CMD01,CMD02,CMD03,CMD04,CMD05,CMD06,CMD07,CMD08 DW CMD09,CMD0A,CMD0B,CROTECT MODE OFF LTPAR EQU 28H ;LEFT ( FOR WRITE PROTECT ON RTPAR EQU 29H ;RIGHT ) FOR WRITE PROTECT OFF PLUS EQU 2BH ;PLUS SIGN + FOR CLEAR ALL EQUAL EQU 3DH ;EQUAL SIGN = FOR CURSOR ADDRESSING CRT EQU 20H ;CURSOR ADDRESSING OFFSET EOL EQU 10H ;SPECIAL CODE FOR CRT LINE OUTPUT TERMINATOR UCA EQU 41H ;UPPER CASE A FOR SELECTING ATTRIBUTE MODE UCT EQU 54H ;UPPER CASE A FOR ERASE TO END-OF-LINE LCY EQU 79H ;LOWER CASE Y FOR ERASE TO END OF PAGE LCL EQU 6CH ;LOWER CASE L FOR UNDERLINE ON LCUTINE PSTRING EQU 09 ;PRINT STRING MSG TILL $ BDOS EQU 05 ;BDOS STARTING ADDRESS WKMTC: DS 5 ;WORK AREA FOR MTC REG. WKAREA: DS 5 ;TEMP. WORK AREA CMDIN: DB 10 ;INPUT MAX. 10 CHAR. CMDSZ: DS 1 ;SIZE OF THE ACTUAL INPUT STRING CMDCH: DS 10 ;STORAGE FOR INPUT CHARACTERS DS 32 STACK: END START ERROR WARNING LINEIN EQU 10 ;READ LINE INPUT CRTIN EQU 01 ;CRT INPUT ROUTINE - CHAR. IN A REG. CRTOT EQU 02 ;CRT OUTPUT RO!!:`G{ʳ  i#d*7*7[*7Ro&U\*7:IOD# C#*+a#}!+y)>26*`5"6 ]$ ]$]$2'!t#ʜ#ʜ#«#*6!ͫ"o#!####U$## #*`5%~!_! #$$#!#$$- $!#45 $>!w)#ʣ)#ʪ)!oy^>Iy <26+q#$:Y5:H$<26262626$_!>ä$o$â$%_!>!`5ͧ!01:6!6$~:`5!6!"6"626262*5~̓!66:7!'!!à&͏G!6~6̀1ͪ:6'o&)&^#Vo&Di:7/!F6ˆ'5:6͎ *`5! ~!~! Î *6|!F6£'o 02F6*7"6':D6ʽ'(:7':C6'V(:B6'((!5((ć`:IO>(!:6*6^(*6^(:6c(>>(:626*7"6'O'G:IPx=(V(*7*6R@(> c(}c(| s(>^c(@!d5\‚(> Ç( ʈ(#*7++*6w͎ڞ(#"6:D6¼(:)ʹ(:f5!6V(0(^#V#(~#c((:&!+!7(26.)!6N61q!6FwO1):6.):&><)26!6.)2626/262654>G1:k5!H4O)~o :7a:61Êͼ):+/y)>!+Fw>2626ó))26 :6Ÿ)26:6<ð):6=26!"626ó)g:7O/ G:+:6)o#}!6Ěx:+ʉ)o *:6=1Ê)!6͚G:6 *!6):6̐):6W:6)_:6!6<*:6´* + @+:6/<_y!6q*U*qy!6ڣ*<26͟,z<26o !6:7ʣ*:6ң*z26ñ*z±*!6U*26*7"6:6O:6G/!((ͥ*6+"6gx/+!(y+*>͡(:I>(:6->26!D6~/++! n1:7M*3.د27R1(:C6 .*7"73126|=Q3#.=b0.^#Vn126262626%>26/.3.26G:7l.x ʸ.?G~ʸ.|.o.#~ʼ.:7<#^#V++̂N26.}.26O~ʼ.###~ʸ.#ʡ.è.7#^#V|7!$/*`5o 0\/o .1/6/=r! 1 ` 1`:7133:6!6͚!6͚!6͚*7"7"7>26: /!6ɯ2L62r6~#26~26#"6Ñ1}26|26"6Ñ1~#26~#26"6:6=>$ԕ&ͽ11i`)2^#V*6 *6)))2N!6 :66i`)2^#V#^#V#͇2~#fo)DM!"q#p#N#F2 ~>)v& 2x2x2 2~>'v&#:6>,v&6 >*v&w!6Y2>+v&# N2^#V>(v&!6:6w>&v&͓2!$~v&><Cpy-M67-M6M6 M6M63M6M6#M6M6mM6t55???????????!ͱ6!Sͱ6ͩ6You are trying to run an uninstalled WORDSTAR.Please run INSTALL first.-ͩ6 ʹ6͢6~̢6 #ô6Wß,!6452626*7"6:6=+2626͒ͅ,+:626Ħ,Ê:IO *76 #=M+#m+ x GV+:6G*6+F+N <ʙ+"6gʹ++F+N 26Êʹ++++DM>26>.!m,### ʡ+#~¸+  +m,ʴ+26*7"6*76+r+s ͎,:6,,+~w͊,+*6 !i, ~d,#-, :,~Z,\,6.#w#w#> *6<BAINuHEvREwCOxOVy$$z26͌"6g>26j*7ó,#p+qg+F+N <,#Vp+^qBK,+V+^ oʬ,,, ,,,!91C4~!"%/=r!8Í'>260\/ ͑!~!:7Z/!/v~Z/.%Z/6`]͑! ~!)(:7v/1=!60:7]͍'o :6!6͚o:7š/:6o:6/!6ڱ/!6ڽ/o&͔!o !<Ý/Q):6!606}:7G:Y5O*J6|!6/6:6!6ᠡ/6o ‡0($:D6!8:G6!8:610268I0x/I0͖0F0͜!"6o͢$:626:6f0!6~6!8*J6|!"J6͢$:626‡0>26!G6~6ȯ26:IPڣ0!7:E4 ~"8126×-:7O!60w:70:6=0w~=!6)!61)M6M6{s6M6'M6-M6dM6!M6gM6|M6  w3Ô3>e A:)2323:>!+}ˆ3::> A8>V<<2E4!9"C4ͨ<=:l2J:] @:4-:5-*C4͢=!~!!S!Ϳ!%=#%=#%=#%=:`2Y5:c2+ͥ2b5~f!B6.:2c5K=~"=:b5é*͂="7:Il++"7"7="7+"7:Il++"7"7"7*:c5£=*HL&bj –=R+#"7"7*H-3#"7"7Q"7R"7:c5*HͿ-=|!]=>o&))))>=goR>.>O->26:H26=26=26S>:7*7>|& 7!!Y5~P>(P>6!"J6O-:H|>y|>6u>:I@|>|>~!8"J6>|&w- A4:c5:ª>®>:ʰ>>2d52e5>:2[5ͤ!ͮ!~"!N6 ! t6!q66.!66/:26ɛ;GET DATA FOR HEAD # LD A,0AH ;HEAD SEEK COMMAND JP CMD00X ; CMD0A1: LD DE,MSGHD ;MSG FOR INPUT HEAD # CALL DISPLY LD DE,CMDIN LD C,LINEIN ;GET INPUT CALL BDOS LD A,(CMDSZ) ;CHECK INPUT CHAR. SIZE CP 1 ;ONLY ALLOW 1 CHAR. INPUT JR NZ,CMD0A1 ;ERROR LD A,(CMDCH) ;CHECK THE INPUT CHAR. CP '0' ;LESS THAN 0 ? JP M,CMD0A ;INVALID, INPUT AGAIN CP '8' ;HEAD # = 0-7 ONLY JP P,CMD0A ;INPUT = OR GREATER THAN 8, ERROR AND 0FH ;ASCII MASK OFF LD (0F084H),A ;PUT HEAD # IN HEAD 0B2 ;YES,EXPECTING ASCII HEX VALUE BIT 2,C ;CHECK INPUT CHAR # = OR > 4 ? JR NZ,CMD0BX ;BIT 2 SET (= OR > 4), ERROR CALL ASCDEC ;CONVERT ASCII DECIMAL INPUT TO HEX JR C,CMD0BX ;CARRY SET, ERROR CMD0B1: LD (0F082H),A ;WRITE LOWER BYTE OF CYL CMD0BY: LD DE,MSGMOD ;MSG FOR INPUT MODIFIER BITS CALL DISPLY LD DE,CMDIN ;INPUT FOR MODIFIER BITS LD C,LINEIN CALL BDOS ; LD A,(CMDSZ) ;CHECK IF INPUT ALL 4 BITS CP 4 JR NZ,CMD0BY ;NO,ERROR LD DE,CMDCH ;INPUT NUMBER CALL ASCBIN ;CONVECMD0BX ;NOT = 3, MUST BE GREATER THAN 3,ERROR LD A,(DE) ;YES, GET FIRST ASCII HEX DIGIT LD B,0 CALL ASCHX1 ;CONVERT TO HEX JR C,CMD0BX ;CARRY SET,INVALID HEX,INPUT AGAIN AND 3 ;MASK OFF THE HIGHER 6 BITS LD (WKMTC),A ;SAVE IT IN WORK AREA INC DE ;GET THE OTHER 2 ASCII HEX NUMBER CMD0B3: CALL ASCHEX ;CONVERT TO HEX JR C,CMD0BX ;CARRY SET, ERROR JR CMD0B1 ; CMD0B4: LD HL,WKMTC L (HL),0 ;HIGHE BIT 0 CP 1 ;INPUT 1 CHAR ? JR NZ,CMD0B3 ;NO, MUST BE 2 DIGITS LD B,0 ;. COUNT FOR COUNTER 0 LD (CNT0),A ;LSB COUNT TO COUNT 0 LD (CNT0),A ;MSB COUNT TO COUNTER 0 LD (WKAREA),A LD A,80 ;THIS WILL MAKE IT ABOUT 2 SEC LD (CNT1),A ;LSB COUNT TO COUNTER 1 RET ; ICNT0: ;IRQ ROUTINE FOR COUNTER 0 EX AF,AF' ;SAVE A REG. LD A,1 INTX: LD (WKAREA),A ;CLEAR WKAREA EX AF,AF' ;RESTORE A REG. RETI ; ICNT1: EX AF,AF' ;SAVE A REG. LD A,2 ;SET IRQ FLAG IN WKAREA FOR COUNTER 1 IRQ JR INTX ; IDONE: EX AF,AF' ;SAVE A REG. LD A,8 ;SET BIT 3 ON FOR D 02C7' ASCH9 0285' ASCHEX 039E' BANNER 0005 BDOS 0007 BELL 015C' CMDCD 0826' CMDCH 015C' CMDDC 015C' CMDDI 015C' CMDDM 015C' CMDDS 015C' CMDDT 015C' CMDEA 015F' CMDET 01BA' CMDET0 01B7' CMDET1 01BA' CMDEX 01BA' CMDFD 01BA' CMDFF 01BA' CMDFM 01BA' CMDGO 0824' CMDIN 01BA' CADDR REG. (LO) LD (0F085H),A RET ; CMD0B: CALL DIS21 ;POSITION CURSOR TO LINE 21 LD DE,MSG0B ;MSG FOR CMD0B - CYL/OFFSET SEEK CALL DISLIN CALL CMD0BX ;GET INPUT CYL # LD A,0BH ; SET COMMAND CODE FOR 0B (CYL CMD) JP CMD00X ; CMD0BX: LD DE,MSGCYL ;MSG FOR INPUT CYL # CALL DISPLY LD DE,CMDIN ;GET INPUT FOR CYL # LD C,LINEIN CALL BDOS LD A,(CMDSZ) ;GET # OF CHAR INPUT LD C,A ;PUT IN C REG. LD DE,CMDCH ;GET INPUT LD A,(DE) ;CHECK IF FIRST CHAR = $ ? CP '$' JR Z,CMDRT 4 BINARY ASCII BITS INTO HEX JR C,CMD0BY ;CARRY SET, ERROR RLC A ;ROTATE LEFT 4 TIMES RLC A RLC A RLC A LD HL,WKMTC OR (HL) ;PICK UP THE LOWEST 2 BIT (CYL) LD (0F083H),A ;WRITE THE CYL HI ADDR. RET ; CMD0B2: ;CONVERT ASCII HEX INPUT TO HEX DEC C ;DON'T COUNT THE ONE FOR '$' INC DE ;SKIP THE LOCATION WHERE $ IS STORED LD A,C ;CHECK # OF CHAR INPUT CP 0 ;ANY INPUT ? JR Z,CMD0BX ;NO,ERROR CP 3 ;EQUAL 3 ? JP M,CMD0B4 ;LESS THAN 3,MUST BE 2 OR 1 DIGITS INPUT JR NZ,YES CALL ASCHX1 ;CONVERT 1 DIGIT INTO HEX JP C,CMD0BX ;CARRY SET,ERROR JR CMD0B1 ; CMD09: CALL DIS21 ;POSITION CURSOR TO LINE 21 LD DE,MSG09 ;MSG FOR CMD09 - SEEK CALL DISLIN CALL CMD0A1 ;GET INPUT FOR HEAD # CALL CMD0BX ;GET INPUT FOR CYL # LD A,09 ;SEEK COMMAND CODE JP CMD00X ; $EJECT SET2: ;SET 2 SEC IN 8253 COUNTER 0 & 1 LD A,36H ;COUNTER 0,LSB,MSB,MODE 3 LD (CNTMOD),A ;LOAD TO COUNTER MODE REG. LD A,50H ;COUNTER 1,LSB,MODE 0 LD (CNTMOD),A LD A,0FFH ;SET MAXONE IRQ FLAG JR INTX ; SUBTTL CRT OUTPUT ROUTINES $EJECT POS20: LD DE,CUR20 ;POSITION TO LINE 20 JR DISPLY ; DIS20: LD DE,LIN20 ;POSITION CURSOR TO LINE 20 JR DISPLY ; DIS21: LD DE,LIN21 ;POSITION CURSOR TO LINE 21 DISPLY: LD A,(DE) ;GET DISPLAY CHAR CP 0 ;END-OF-STRING ? RET Z ;YES,EXIT EXX ;SAVE BC,DE,HL REG. LD E,A LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG INC DE JP DISPLY ; ; DISLIN - DISPLAY MSG UNTIL ESC OR 0 DISLIN: LD A,(DE) CP 0 RET Z CP ESC ;CHECK IF ESC CHAR ? RET Z EXX ;SAVE BC,DE,HL REG LD E,A LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG INC DE JP DISLIN ; SPACE: PUSH AF ;SAVE A REG EXX ;SAVE BC,DE,HL REG. LD E,SPA ;SP=HEX 20 FOR SPACE LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG POP AF ;RESTORE SPACE COUNT DEC A JR NZ,SPACE ;MORE TO DO,LOOP RET ; CRLF: EXX ;SAVE BC,DE,HL REG LD E,CR ;OUTPUT CR ON CRT LD C,CRTOT CALL BDOS DISLF: LD E,LF ;OUTPUT LD ON CRT LD C,CRTOT C A REG. SCF CCF ;CLEAR CARRY FLAG RET ; ASCBX: SCF ;SET CARRY FLAG RET ; ASCDEC: ;CONVERT ASCII DECIMAL NUMBER INTO HEX LD HL,WKMTC LD B,0 LD A,C ;CHECK SIZE OF THE INPUT CP 0 JR Z,ASCBX ;NO INPUT, ERROR CP 3 JR Z,ASCD2 ;3 DIGITS INPUT LD (HL),B ;2 OR 1 DIGIT INPUT, SET HIGHER BITS = 0 CP 2 JP Z,DEC1HX ;2 DIGITS INPUT,CONVERT TO HEX LD A,(DE) ;1 DIGIT ONLY JP ASCHX1 ;PROCEED TO CHECK & CONVERT TO HEX ; ASCD2: CALL ASCHX1 ;CONVERT THE FIRST DIGITS JR CADD HL,BC LD A,H LD (WKMTC),A ;GOT THE HIGH CYL BITS LD A,L ;PUT THE LOW CYL BYTE IN A REG. SCF CCF ;CLEAR CARRY FLAG RET ; ; END OF Z80 CODES HERE ; .8080 ; ; 2 BYTES OF ASCII (32,33) CONVERT TO 1 BYTE (23) ; ASCHEX: LDAX D ;GET FIRST CHAR CPI '0' ;CHECK IF VALID HEX VALUE ? JM ASCH9 ;LESS THAN 0,ERROR CPI '9'+1 ;CHECK IF LESS THAN OR = 9 JM ASCH1 ;YES,VALID DATA 0-9 CPI 'A' ;LESS THAN ASCII A JM ASCH9 ;YES, ERROR CPI 'G' ;LESS THAN ASCII F JP ASCH9 ;NO,ERPUT NUMBER 2 ORA B RET ;EXIT ASCH9: STC ;SET CARRY TO INDICATE ERROR IN INPUT RET .Z80 ; ; 2 BYTES OF ASCII (32,33) CONVERT TO HEX (17) ; DEC1HX: LD B,0 CALL ASCHX1 ;CONVERT FIRST BYTE INTO DECIMAL RET C ;INVALID HEX, ERROR LD B,A ;CONVERT THIS BYTE INTO HEX LD A,0 DEC1H1: ADD A,10 DJNZ DEC1H1 LD C,A ;SAVE THE CONVERTED FIRST ONE IN C REG. ; LD B,0 INC DE ;READY TO CONVERT 2ND BYTE CALL ASCHX1 ;CONVERT THIS BYTE INTO DECIMAL RET C ;CARRY SET, ERROR ADD A,R THAN 10 JM HX2D2 ADI 7 HX2D2: ADI 30H .Z80 LD E,A LD C,CRTOT CALL BDOS EXX ;RESTORE BC,DE,HL REG. RET .8080 ; SUBTTL MSG & COMMAND TABLES $EJECT ; BANNER: DB ESC,PLUS,ESC,EQUAL,CRT,CRT+15,ESC,UCA,ESC,LCJ DB 'DTC INSTRUCTION FUNCTION CODE (HEX)' DB ESC,LCK,ESC,EQUAL,CRT+1,CRT MSG00: DB '00 = CLEAR CONTROLLER' DB ESC,EQUAL,CRT+2,CRT MSG01: DB '01 = SELECT PORT A' DB ESC,EQUAL,CRT+3,CRT MSG02: DB '02 = SELECT PORT B' DB ESC,EQUAL,CRT+4,CRT MSG03: DB '03 = SELECT PORT AALL BDOS EXX ;RESTORE BC,DE,HL REG RET SUBTTL MATH CONVERTING ROUTINES $EJECT ASCBIN: ;CONVERT 4 ASCII BINARY BITS INTO HEX LD C,0 LD B,4 ASCB1: LD A,(DE) ;FIRST BINARY NUMBER CP '0' JP M,ASCBX ;LESS THAN 0, ERROR CP '2' ;VALID BINARY ? JP P,ASCBX ;GREATER 2, ERROR AND 0FH ;MASK OFF ASCII RRCA ;ROTATE RIGHT & OUT TO CARRY RL C ;PICK IT UP THE BIT IN CARRY & PUT IN C REG. INC DE ;NEXT BINARY BYTE TO CONVERT DJNZ ASCB1 ;LOOP 4 TIMES ; LD A,C ;PUT THE RESULT IN,ASCBX ;INVALID, ERROR CP 9 ;CHECK IF VALID CYL *** JP P,ASCBX ;NO, ERROR CP 0 ;MAY BE THE INPUT DIGIT = 0 JR NZ,ASCD3 ;NO LD (HL),B ;YES,SET THE HIGHER CYL BITS =0 INC DE ;GO CONVERT NEXT 2 BITS JP DEC1HX ;INTO HEX ; ASCD3: LD HL,100 ;SET UP TO CONVERT ALL 3 DIGITS LD C,0 ASCD4: ADD HL,BC ;EACH DIGIT = 100 DEC A JR NZ,ASCD4 ;MORE TO ADD ; INC DE ;CONVERT THE NEXT 2 DIGITS CALL DEC1HX ;INTO HEX JR C,ASCBX ;CARRY SET, ERROR LD C,A ;PUT IN BC REG. LD B,0 ROR SUI 7 ;CHANGE ASCII A-F INTO HEX A-F ASCH1: ANI 0FH ;MASK OFF HIGH NIBBLE STA ETHEX1 ;USE AS INDEX TO ET TABLE LATER RLC ;ROTATE LEFT 4 TIMES RLC RLC RLC MOV B,A ;SAVE IT IN B REG. INX D ;SECOND CHAR ASCHX1: LDAX D CPI '0' JM ASCH9 ;ERROR, LESS THAN 0 CPI '9'+1 JM ASCH2 ;VALID 0-9 CPI 'A' JM ASCH9 ;LESS THAN A,ERROR CPI 'G' JP ASCH9 ;GREATER THAN F,ERROR SUI 7 ;CONVERT ASCII A-F INTO HEX A-F ASCH2: ANI 0FH ;MASK OFF STA ETHEX2 ;SAVE IT FOR ET HEX INC ;CONBINE TWO BYTES TOGETHER INTO HEX RET .8080 ; ; CONVERT 1 BYTE HEX DATA INTO 2 BYTE ASCII DATA FOR DISPLAY ; HX2DIS: PUSH PSW ANI 0F0H ;MASK TO GET HIGHER 4 BITS RLC ;ROTATE LEFT 4 TIMES RLC RLC RLC CPI 10 ;CHECK IF LOWER THAN 10 JM HX2D1 ;YES ADI 7 ;ADD HEX BIAS HX2D1: ADI 30H ;ADD ASCII OFFSET .Z80 EXX ;SAVE BC,DE,HL REG LD E,A LD C,CRTOT ;DISPLAY IT CALL BDOS POP PSW ;RESTORE HEX DATA BYTE .8080 ANI 0FH ;GET LOWER 4 BITS CPI 10 ;CHECK IF LOWE & B' DB ESC,EQUAL,CRT+5,CRT MSG04: DB '04 = RELEASE PORT A' DB ESC,EQUAL,CRT+6,CRT MSG05: DB '05 = RELEASE PORT B' DB ESC,EQUAL,CRT+7,CRT MSG06: DB '06 = REL & SEL PORT A' DB ESC,EQUAL,CRT+8,CRT MSG07: DB '07 = REL & SEL PORT B' DB ESC,EQUAL,CRT+9,CRT MSG08: DB '08 = STATUS - GENERAL' DB ESC,EQUAL,CRT+10,CRT MSG09: DB '09 = SEEK' DB ESC,EQUAL,CRT+11,CRT MSG0A: DB '0A = HEAD SEEK' DB ESC,EQUAL,CRT+12,CRT MSG0B: DB '0B = CYL/OFFSET SEEK' DB ESC,EQUAL,CRT+13,CRT MSG0C: DB '0C = REZERO' DB ESC,EQUAL,CRT+14,CRT MSG0D: DB '0D = CLR FAULT' DB ESC,EQUAL,CRT+15,CRT MSG0E: DB '0E = RESET' DB ESC,EQUAL,CRT+16,CRT MSG0F: DB '0F = FIRMWARE RELOAD' DB ESC,EQUAL,CRT+17,CRT MSG10: DB '10 = READ + (BUSOUT)' DB ESC,EQUAL,CRT+18,CRT MSG12: DB '12 = DISPLAY DTC STATUS' DB ESC,EQUAL,CRT+1,CRT+40 MSG17: DB '17 = STATUS-SEL+(BUSOUT)' DB ESC,EQUAL,CRT+2,CRT+40 MSG18: DB '18 = WRITE + (BUSOUT)' DB ESC,EQUAL,CRT+3,CRT+40 MSG1F: DB '1F = FORMAT +(BUSOUT)' DB ESC,EQUAL,CRT+4,CRT+40 '28 = DTC READ ID GEN.' DB ESC,EQUAL,CRT+13,CRT+40 MSG29: DB '29 = DTC READ DATA BUFFER' DB ESC,EQUAL,CRT+14,CRT+40 MSG2A: DB '2A = DTC READ STATUS RAM' DB ESC,EQUAL,CRT+15,CRT+40 MSG2B: DB '2B = DTC READ DATA ERR WDS' DB ESC,EQUAL,CRT+16,CRT+40 MSG2C: DB '2C = WRITE 16 WORDS DATA' DB ESC,EQUAL,CRT+17,CRT+40 MSG2D: DB '2D =' DB ESC,EQUAL,CRT+18,CRT+40 MSG2E: DB '2E =',ESC,LCY,0 ; MSGLOP: DB ESC,EQUAL,CRT+23,CRT,ESC,UCT DB 'ENTER "L" FOR LOOPING OR' BANE: DB ESC,EQUAL,CRT+23,CRT+26,ES): ',ESC,UCT,0 MSGHD: DB ESC,EQUAL,CRT+20,CRT+30 DB '** ENTER 1 DIGIT HEAD NUMBER (0 THRU 7): ',ESC,UCT,0 MSGCYL: DB ESC,EQUAL,CRT+19,CRT+20 DB '** ENTER CYL NUMBER (3 DECIMAL OR $HEX DIGITS): ',ESC,UCT,0 MSGMOD: DB ESC,EQUAL,CRT+20,CRT+20 DB '** ENTER 4 BINARY BITS FOR OFFSET MODIFIER : ',ESC,UCT,0 MSGKEY: DB ESC,EQUAL,CRT+23,CRT,ESC,UCT,ESC,LCJ DB '** LOOPING ** PRESS "ESC" KEY TO STOP',ESC,LCK,0 ; MSGW01: DB ESC,EQUAL,CRT+21,CRT,' 01-',0 MSGW02: DB ', 02-',0 MSGW03: DB ', 03-',0 MSGW9,CMD0A,CMD0B,CMD0C,CMD0D,CMD0E,CMD0F DW CMD10,CMDXX,CMD12,CMDXX,CMDXX,CMDXX,CMDXX,CMD17,CMD18 DW CMDXX,CMDXX,CMDXX,CMDXX,CMDXX,CMDXX,CMD1F DW CMD20,CMD21,CMD22,CMD23,CMD24,CMD25,CMD26,CMD27,CMD28 DW CMD29,CMD2A,CMD2B,CMD2C DB 0,0 ; CURCNT: DS 1 ;SAVE CURSOR LINE COUNT SPCNT: DS 1 SAVET: DS 1 ETHEX1: DS 1 ETHEX2: DS 1 NSRAM: DS 32 ; SUBTTL CRT CODE EQUATES $EJECT ESC EQU 1BH ;ESCASE CHAR. CODE SEMI EQU 3BH ;SEMI-COLON ; AMPSN EQU 26H ;AMPERSAND & FOR PROTECT MODE ON COMMA EQU 27H NDERLINE ON LCM EQU 6DH ;LOWER CASE M FOR UNDERLINE OFF LCN EQU 6EH ;LOWER CASE N FOR BLINKING ON LCK EQU 6BH ;LOWER CASE K FOR REVERSE OFF LCO EQU 6FH ;LOWER CASE O FOR BLINKING OFF LCJ EQU 6AH ;LOWER CASE J FOR REVERSE VIDEO ON LCA EQU 6AH ;LOWER CASE A FOR ATTRIBUTE MODE OFF CR EQU 0DH ;CARRIAGE RETURN KEY CODE LF EQU 0AH ;LINE FEED SPA EQU 20H ;SPACE BELL EQU 07 ;BELL FOR ERROR WARNING LINEIN EQU 10 ;READ LINE INPUT CRTIN EQU 01 ;CRT INPUT ROUTINE - CHAR. IN A REG. CRTOT EQU 02 MSG20: DB '20 = DIAG + (BUSOUT)' DB ESC,EQUAL,CRT+5,CRT+40 MSG21: DB '21 = ECHO + (BUSOUT)' DB ESC,EQUAL,CRT+6,CRT+40 DB '22 = DISPLAY HOST RAM' DB ESC,EQUAL,CRT+7,CRT+40 MSG23: DB '23 = DTC READ DISK ADR' DB ESC,EQUAL,CRT+8,CRT+40 MSG24: DB '24 = DTC READ BUSOUT REG' DB ESC,EQUAL,CRT+9,CRT+40 MSG25: DB '25 = DTC CYL REG' DB ESC,EQUAL,CRT+10,CRT+40 MSG26: DB '26 = DTC READ HEAD REG' DB ESC,EQUAL,CRT+11,CRT+40 MSG27: DB '27 = DTC READ SECTOR REG' DB ESC,EQUAL,CRT+12,CRT+40 MSG28: DBC,UCT DB 'ENTER FUNCTION CODE (2 HEX DIGITS): ',0 TIMERR: DB ESC,EQUAL,CRT+22,CRT,ESC,UCT,ESC,LCN DB ' NO RESPONSE FROM THE DRIVE IN 2 SEC' DB ESC,LCO,0 CUR20: DB ESC,EQUAL,CRT+20,CRT,'** ',0 LIN20: DB ESC,EQUAL,CRT+19,CRT,ESC,LCY DB '** 16 WORDS FOR FUNCTION CODE: ',0 LIN21: DB ESC,EQUAL,CRT+19,CRT,ESC,LCY,ESC,EQUAL,CRT+21,CRT DB 'XX01 XX00 XX03 FOR FUNCTION CODE: ',0 MSGSTS: DB ESC,EQUAL,CRT+22,CRT+1,ESC,LCY,0 MSGBUS: DB ESC,EQUAL,CRT+20,CRT+30 DB '** ENTER DATA FOR BUSOUT (4 HEX DIGITS04: DB ', 04-',0 MSGW05: DB ', 05-',0 MSGW06: DB ', 06-',0 MSGW07: DB ', 07-',0 MSGW08: DB ', 08-',0 MSGW09: DB ESC,EQUAL,CRT+22,CRT,' 09-',0 MSGW10: DB ', 10-',0 MSGW11: DB ', 11-',0 MSGW12: DB ', 12-',0 MSGW13: DB ', 13-',0 MSGW14: DB ', 14-',0 MSGW15: DB ', 15-',0 MSGW16: DB ', 16-',0 ; WDTAB: DW MSGW01,MSGW02,MSGW03,MSGW04,MSGW05,MSGW06,MSGW07,MSGW08 DW MSGW09,MSGW10,MSGW11,MSGW12,MSGW13,MSGW14,MSGW15,MSGW16 ; CMDTAB: DW CMD00,CMD01,CMD02,CMD03,CMD04,CMD05,CMD06,CMD07,CMD08 DW CMD0 ;COMMA , FOR PROTECT MODE OFF LTPAR EQU 28H ;LEFT ( FOR WRITE PROTECT ON RTPAR EQU 29H ;RIGHT ) FOR WRITE PROTECT OFF PLUS EQU 2BH ;PLUS SIGN + FOR CLEAR ALL EQUAL EQU 3DH ;EQUAL SIGN = FOR CURSOR ADDRESSING CRT EQU 20H ;CURSOR ADDRESSING OFFSET EOL EQU 10H ;SPECIAL CODE FOR CRT LINE OUTPUT TERMINATOR UCA EQU 41H ;UPPER CASE A FOR SELECTING ATTRIBUTE MODE UCT EQU 54H ;UPPER CASE A FOR ERASE TO END-OF-LINE LCY EQU 79H ;LOWER CASE Y FOR ERASE TO END OF PAGE LCL EQU 6CH ;LOWER CASE L FOR U ;CRT OUTPUT ROUTINE PSTRING EQU 09 ;PRINT STRING MSG TILL $ BDOS EQU 05 ;BDOS STARTING ADDRESS WKMTC: DS 5 ;WORK AREA FOR MTC REG. WKAREA: DS 5 ;TEMP. WORK AREA CMDIN: DB 10 ;INPUT MAX. 10 CHAR. CMDSZ: DS 1 ;SIZE OF THE ACTUAL INPUT STRING CMDCH: DS 10 ;STORAGE FOR INPUT CHARACTERS DS 32 STACK: END START  07 ;BELL FOR ERROR WARNING LINEIN EQU 10 ;READ LINE INPUT CRTIN EQU 01 ;CRT INPUT ROUTINE - CHAR. IN A REG. CRTOT EQU 02