IMD 1.16: 1/06/2007 13:02:54 FOGCPM.178 --FOGCPM178EDCOM COMEDCOM DOC0 EDCOM ZQ0y EDCOM52 COMEDCOM52 DOC1 !"#$%&EDCOM52 ZQ0w'()*+,-./012345F41T COM678DRIVES DOCJ9:;<=>?@ABF41T MQC:CDEFGHIJF41T PQNKLMNOPQRSTUVWXYZF41T PQN[-06-00 87 -00-06 87 F41T REL\]^FINDMEM COM_FINDMEM DOC`abFINDMEM Z80>cdefghijFMT20 COMklmFMT20 DOC.nopqrsFMT20 SYMtO1DRAFT3COM uvO1DRAFT3DOCwO1GRAPH3COM xyO1GRAPH3DOC2z{|}~O1GRAPH3ZQ0KONSCR-ULASM#ONSCR-ULCOMONSCR-ULDOCSET4C AQMpSET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM -CPM178 DOC"This is the disk name. EDCOM52 COMEDCOM52 DOC1 !"#$%EDCOM52 ZQ0w&'()*+,-./01234F41T COM567DRIVES DOCJ89:;<=>?@AF41T MQC:BCDEFGHIF41T PQNJKLMNOPQRSTUVWXYF41T PQNZF41T REL[\]FINDMEM COM^FINDMEM DOC_`aFINDMEM Z80>bcdefghiFMT20 COMjklFMT20 DOC.mnopqrFMT20 SYMsO1DRAFT3COM tuO1DRAFT3DOCvO1GRAPH3COM wxO1GRAPH3DOC2yz{|}~O1GRAPH3ZQ0KONSCR-ULASM#ONSCR-ULCOMONSCR-ULDOCSET4C AQMpSET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM (c) 1986 by Doug Coxsi\<[#\K}!B` \!(+" #T]> 0:  G*}1! !" P~ 88>.#0 z8"  > Rzz {{  ҵ1B n 5 q .f F##(##^#V!E8/51%  Z  qA(H(!:$ !2$ +:$ !:$ !G:$ (~W WppØ>2!x! wO#08W:A8LG0H!!W#_Rڌ Z[ RzÖþ{$!{O!!$> w#G{$!!* O##x ~wx(r#>w (f'("(( 8Êw#>w (>'("((08:8 A8G0 wְ G xr2 * Ba{ a: =( G# O+zÖ RRPRҎ`iR!* þ8&!*  þ* K B0B0#PB<0 != * * Ö* zBÖ!B0`iBPBþ! K B* PB!OR8  ÖB* RPB R þ}þ }þͨþ ͨþ[ * P R|(R* Ö 0Bڌ R8* BRÖÌ0 K B* Öz(þ* P Öz( Oþ!* PBÖ[ Rx{ #(O(O## Rx{ +((++*" * +}~w*" (0:8>E!gFNy(&B0 ##&>B8 !'d !C8/5Q( S(Xͦ{iGͦ{O(! /Y{+!  >2h2j2k2|K} \! x \!}( P(> w#  ( (w#$(!A$  !++! k Type EDCOM FILENAME$File too big!$Ǡ Ǡ ߠĺӠ٠ ҠκӺ à=>R$ٯΩǮPress H now to EDIT HEXADECIMAL characters (the new character will be entered at the top line at CONTENTS:)Press A now to EDIT (typeable) ASCII characters (use H to change characters that are not in the 20 to 7F Hex range)Press ESC again for more helpOr press any other key now to TERMINATE EDIT mode^KQ Quit without saving^KS Save changes^KX Save changes & Exit to CP/MAFTER EXITING THIS MENU:^J Input memory location at CURSOR LOCATION: and Jump there^QF Search for ASCII and/or hexadecimal character(s) ^L Repeat searchUSING ^QF:Input a ' before any normal (typeable) ASCII character(s) to be foundInput a " before any underlined character(s) to be found (A0 to FF Hex)End the string with either a ' or " to add hexadecimal numbers e.g., FIND: 0D 0A'Hi, there'0D 0AUse ^X to erase input lineCursor movement:^S left^E up^X down^D right^F right 13 columns^A left 13 columns^C next screen^R previous screen^Z scroll screen up one line^W scroll screen down one line^QR beginnning of file^QC end of file^QE top left of screen^QX bottom left of screenPress any key...ine at CONTENTS:)Press A now to EDIT (typeable) ASCII characters (use H to change characters that are not in the 20 to 7F Hex range)Press ESC again for more helpOr press any other key now to TERMINATE EDIT mode^KQ Quit without saving^KS Save changes^KX Save changes & Exit to CP/MAFTER EXITING THIS MENU:^J Input memory location at CURSOR LOCATION: and Jump there^QF Search for ASCII and/or hexadecimal character(s) ^L Repeat searchUSING ^QF:Input a ' before any normal (typeable) ASCII character(s) to be foundInput a " before any underlined character(s) to be found (A0 to FF Hex)End the string with either a ' or " to add hexadecimal numbers e.g., FIND: 0D 0A'Hi, there'0D 0AUse ^X to erase input lineCursor movement:^S left^E up^X down^D right^F right 13 columns^A left 13 columns^C next screen^R previous screen^Z scroll screen up one line^W scroll screeEDCOM, written May, '86, in Z80 assembly language by Doug Cox This program enables users of Osborne 1's or Vixens to view and change the contents of any file that will fit into available memory. The file to be changed would normally be a .COM file, which can't be edited or viewed properly with WordStar or any editor. Since the program uses the memory-mapped video capabilities of the Osborne 1 and Vixen, it will only work on those computers. Type EDCOM FILENAME at the 'A>'. The file to be edited or viewed is displayed in an 80 column by 23 row format, displaying all typeable ASCII characters (in the 20 to 7F Hex range), as well as those in the A0 to FF Hex range with the underline or highlight removed. All other characters, which would appear as graphic characters, are replaced by dots. The hexadecimal value of the character under the cursor, and its location in memory, is shown at the top of the screen. Note that all programs are loaded by CP/M into memory beginning at 100H. The number of records in the file is displayed in decimal form at the top right of the screen. A record contains 128 bytes (or characters). Because CP/M stores programs onto disk a record at a time, you will probably see a few extraneous characters at the end of the file. Pressing ESC will display a help menu. To change any character by changing its hexadecimal representation, press ESC, and then press H. Any key pressed (if it's 0 thru 9 or A thru F) will be displayed in CONTENTS: on the top line. The bell will sound if the character entered is not within that range. After typing in the first character of a hexadecimal number, an underline will appear next to it, since 2 characters are required to make the proper hex number. To change any typeable ASCII character (in the 20 to 7F Hex range), press ESC, and then press A. If the cursor is over an ASCII character within that range, any entry will overwrite that character, and the cursor will move to the next character, otherwise the bell will sound. If the character looks normal and the bell sounds, it must be in the A0 to FF Hex range, and will have to be changed using the hexadecimal changing method. This is to prevent overwriting program code by mistake, although you must always be careful about making changes. If you have any doubt about any changes you made, just don't save the changed file; at least have a back-up copy of the program. To terminate the edit mode, press ESC and then any key other than A or H or ESC. Pressing ESC a second time will display another help menu. Exiting & saving changes: (^ means press CTRL while pressing the letter key) ^KQ Exit without saving any changes ^KS Save changes without exiting ^KX Save changes & Exit to CP/M The cursor and screen are moved using a sub-set of WordStar commands: ^S cursor left (or to end of previous line if at beginning of line) ^E cursor up ^X cursor down ^D cursor right (or to beginning of next line if at end of line) ^F cursor right 13 columns (until end of line is reached) ^A cursor left 13 columns (until beginning of line is reached) ^C next screen ^R previous screen ^Z scroll screen up one line ^W scroll screen down one line ^QR cursor to beginnning of file ^QC cursor to end of file ^QE cursor to top left of screen ^QX cursor to bottom left of screen (or to the end if it's the last line) ^J Enter a new memory location at LOCATION: and jump there ^QF Search for ASCII and/or hexadecimal character(s) from cursor location ^L Repeat search from cursor location Using ^J: When ^J is pressed, the current hex numbers at CURSOR LOCATION: (on the top line) change to 4 underlines. If 4 hex numbers are typed, they will be entered at the underlines, and the cursor will go to that memory location if it's within the program's boundaries. If it's not, the cursor will go to the beginning or end of the program. If other than four hex digits are entered, the bell will sound and the previous CURSOR LOCATION: numbers will return. Using ^QF: To search for a hexadecimal number, or series of hex numbers, type in the number(s) at the 'FIND:' prompt. Don't type $ before the number or H after it. Each number pair will be separated by a space. To erase all input, press ^X. To search for typeable ASCII characters, first input a ' (a single quote or apostrophe), and then the character(s) to be found. A ' is not necessary at the end unless you also want to include some hexadecimal number(s) after the ASCII character(s). The program will only accept hexadecimal characters if the ' is not entered first. To search for an ASCII character or string in the A0 to FF Hex range, input a " (normal quotation) before the character or string. This type of character will appear in this program as a normal ASCII character, but its hexadecimal representation on the top line will be 80H higher than its normal equivalent, and it will appear in the program being looked at as an underlined or highlighted character. You don't need to end this input string with a ". The search will begin from the cursor location to the end of the file. If the character or string is found, the line it's on will be moved to the top of the screen, with the cursor on the character or first character of a string. Continued searches can be made by pressing ^L. If you move the cursor down in memory, the repeated search will be made beginning at the cursor location. Three search input examples: 'LD'09'A,(HL) 0D 0A"Hi,there C3 06 D3 To change the cursor blink rate, use EDCOM on EDCOM.COM. The hex numbers at addresses 102H and 103H control the blink rate. They are currently 00 and 06 Hex (0600H in the usual Z80 reverse order). Changing 06 to 07 will slow the blink rate. For use in the Public Domain. Not to be used for sale or profit. Comments, suggestions, questions... Doug Cox 140 Monroe Dr Palo Alto, Ca, 94306 (415)949-0624 sed for sale or profit. Comments, suggvcEDCOM.Z80]  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQoRSTUVWXYZ[\UMt} |]B矄uQ|pTwI;>w7..`|="pg _XBG <]Tq u;G,lT9GFVCA?X!LM A #"mC pEVENu:~" TC?8H$k^1-٘dtj)c' ]`qYt} |6j0J#*_nV}˨Y*IocH?0T˕3s0L ]¨@'d߿$eZ5e6nr',\%.urtv_eН&,\OҸ0? Ci_ CiwIBAd cOeת@J{ TdЁL! *BP ocZ7+GcGGMN_(|*N~Ev2J֔e]GjrZ7+' a Tʷ;Q-: c( .sY퓰puiݬ5yEJC8vSp3BP~ äJTۘ5sHIJqBw/a( յ0|g aT)!t a0Raׁ0[TM$ =GVeY:H5Ձ)kM~5&\>ig WY~ nVIrO͚R5EЁUPU*aUպYhLnd/4 Fa( 0F0F050Eg t Q9>GPmLw}VMaR``jZ\Ѹ̜˅4R(gT˃[~OqBsԬ)>4#5#9]n) Ä@Ew/4:Ԭϩ,wtK2s.' fL@EdMӯiSo}Ԭ)Oba( "F s&UtniCΔL!Z?U O`0'M|^ůn//1m,HoPƇu;̓0L ]0R2&o_5tPVmϨe)s$tYgɞLƎfhh0R(6$ 1~Sj,~Ec/x_hݬ*va/Pݹ&ϛ5Fx,FXhoɛW-٘dt4y2a(9~rIFdM O(\**TqBdu' e7IN!q#5yPEϑЁ9CM@ɚe\N{OZ%>n\Xe~QHXeyUgaƗUо]5E0!NƮ,bՙLC@&sda*'Xu_:P aU(ԟ Tª,ß6P} Tۘ>$q9 t v2Jz7BeYXVM()>8sܨv U@5:t@mL:&'4 ?? #V#U@'IN]>?0F0L3N?Z5Ʈ,@I|pQL Ci\f.ó :>]7.s; W͚NinC;r6qW.k3ޯZ%>n~C$]ª44oFaBP, QumgQocڻ}2c#59\u0Llps+ 0RIdPa(Gid<V!vWJ2W]iNJRO!:V6Ёm c( :Fpx~UG*kF(gaa(n#~Vɲ$&.HI nn4RaR`0FaT)VJ#0Llps}rIFq9>]*I?/3PmVM(<V!urI& *:HcaB ajaBLƷSx?|ڠ|+gͯ.[5$CpX5X&U &a?U߹5-}5cNVc?C@U 0t-s0tg To7` |7- X׳0tS;a0Ǻ ܾ@6C9֪ ܦ^?@&a' To0u0t/>C1.ތ0L, ] *,P= C@p~Nޕճ0t[zK?]fa@? }JI@0z0( ] J-P턡?ੜKaj|HYXؤCAX `uiٯVM@Y Cibei|8}F;XTqB&&]tPe q,v2J8od7F;XTI|pftJ祐)>871Bd`0nzIU؅XukBM>v7INdJ>6b1oHXOJ#@ubՙF;X% Ū0[%]UgzHod7޾ }L U̵* *3J&U uj äJ̵2JqY;k~ }_S$ *0t ܞ,P2.ތ0< To0 PaL]0t0v!>,\q $ *wcĎ.o(sw/wI]aBƮwt< CiN@uʯtp{ڻ|+ *w T2|TqB&q{,Mwtc3:Z\QZ]PVyw% nu^i %Нz>ЁTXa(PT&vw?8Juo1nڻq0v!JU!viK;4N/+P-W讉 5k],Fn T鮉)Ұ:LۢZB`nYXviK;4N.*P-W讉)fMQָ~]jt151}Ұ7nvz", 榝uQocJ(>9-lEC FSa(_ݩ, 6w0v5^ n 5Y W. Bӫ3P5kJӶ^'1.H9 ÄYaBLAaB ajaB_AxҸ7g_Ci\Og_czM;m4R a(KE[{0F a( |EȢZ'̹x_(YSocaT)< n4.٧؅x*U~ fl`R`cjt55bC)(mF]TumRaԵIQ&0>Q IB0R(kZ&&wofaa 0P&b.ǢP5beH'HwV.]6e~t0!BA ÄX<-1_A(]wcN@'Lo]SS]ًp' w${U&Ʌʹ@iG]t{k4򪝂i! QYJ0U>[+ *:HcaR6>F;X% *:HcaR6|*:V CiFFY#PXu ]UYP:űFY#F :.Oe0ijd}tyL,S™U@e5#GjmL"v0kU000*ae 1T(90Rw@ui$U;c{J4.3raB OEeU_G"J0FäJ ]Ur<60R0V$ u(, a`P-:JO|ZCIBEj70R0V$ *`Pv6V(PVN0F05Q* ŪOehA]; -<%}H}! 0v5^)TIz,IN2:DCh'4RҸXupB L Տ ajajzSN0L T aj - t@7aj - ۍ0v5^SٵF5}S˄aB ajajЪU2V<(}rht151}ҸSa5#+v2Ё0ɠu2159]lp3ߝЦ'a?]; 2U؅I:x,Jb٧~A;X%XJ#QYa(Ug ?z*:HcaBZޔ T&q{,MaBXZcWէ*)P eR:Fa cW6UE'4Pt0mKC0!n-PcW?];iTcg1%ߺL&"ZcWBBլiƑC"ZÄXl0]XfM=˄N,P\l˖aB,҅0v5,t(a0v5& ]JX]Xeաy8CLIFU;jba(Ug6&$h\f"@z0LHu0UkUc faB <Fx,t 8XX% aIJ#_aRPrEBa*ae#,CFNvJaH[GqrO&wHv: r7VU_GaSNiBeTH#P5kry%(W/tK}CvO.]ga( n㻳O7E$eM; Oi;6PVKת`gT.RurE{# QaAaQHjr}F>^1Vc"5'j~>ur+ݹu9j'#8XFq IFd.IQj')m'n2DajleVU{# ߵn'Tۘ$kƑt @upPS*Iu Äm |cw~⃣u_ H UĴNUq }<4-}FIFv2a0@N2w1-m Cib, (kx>!fMIz$wtpP Ci>u2159RK$_}|jbZ";'0ݕ>6⃣}$ۑ]˸IQJCժ\QHu* *aBL;UHU^@bSP}_]F,S(sv #U@ncܾo˨IN2Zh;:a( * dO~jʒmNJCy#TkXu 8XX% ~mLM~u CMN'Z'-٘dVՃFY#PXuT 225]2TAwF@x0\(9P퍿e,]Ur7ƒrJǡ}ƮOe0[T͚e\NyӺYܕ>6 Ci|ϑhoe.Ctga(/?E@tF5_tq[؅P)YXǡ}@iX/]I4 /s; c( Fx,(}s{a5Ra U0@'<֫Aa*t &}e.Ctga,\}5Oe0 L}W2Oe0fM2s.fuZ+}l(jy賑]F&w¸)kO*p0FdUЃ)N~E&w#%kZl$q9 cWc2Te #VUЃi@ɚVӪɝ0[Tۘ&'Ci?Gℚ|cj? Ci|EQdQ}{ZuLɚe\.T2 ? o4 UН 2< ?O( kU00Fa|ϑEuq[ǔi\f0RwP_~ts$F*0IF UН 2< Woͱ>$ Qa( |E:䞲Sq9EeTCa`/0|ԙ(Y~O$]cxfMm6&1=%ks00FJ09(k |a !O@C'{ #<02UPϑ00*_a*aet`z JSNpAn02ia/PBw8ucHIF<0Fae.Ctga5Ra U00v!&? T͚.s;Sӝ{h4 UН4 #a5Ra U0U@uPݙt`ܕ^9ҰG](k JԌ~$>u]ɞVMa1,5%9%qiNX tmL'jrJJ09HU0U'je.Dw/Ycܴa*Ge,]UIXAx,ae~rIFI.&'QH1V#<V #,C7@C ݽs$]cܴpv#l6PVKת`gaFXЁ0*aBi;U>ur0Fas$F*0F?Y&>49=G CiX/s; Ci?GHU0(k  1!mga$ a0F0L,P^ua:5-٘d'P:ϑPXu 8XX% ~鴁Ұ_2TAwF5.*$,1 /0v5ta: WopXmFa*a(P9FY#PX #]UY@լ?S$8XX% _;a U^0>Gaet`} CiX/s; c( *eLw/t9Fx,.a|7j |a juN2j'Ci_V> c( FXJOe0iT͚rlWWst^JfWa*aeFJ* ϨIF UН 2<Up* F0L+,P0v5^ NZJ#0v5Tã sdUqЁ02DIa0@U3kƑY'*El0v!Tii 7P0`aePoc9~Ұ_2TAw(j |a! Tu0Sfni%{2RTX cBex';n- tjը';';6P0!.@u^4 UН4 #a5Ra U0@C UН#aB Olqho!Ёt &}FY#PXu : T͚ʑ˯EIaB@ui$U&ɩIP/aBDP1zCT͚j宴Β=+gaA{# "2y846WGɚe\N{Oajzt0Lsg_ e!:J4.3rڻ}cWիOըঝyx 70!"YaWa f znyv2h? faaXoFa*a(  c( :FxfM}Lw&Fx,O:H}! "H} ]իnCa ʭcdM2s.'ً0v5^}>V&sd_ ::J4.3rڻ}cW퓝OP|ªp"Fx YaWaV|$:>K~Ocܿtp}2Ɣ)>8T?z #<:Ұ_tΨIFm6&ݭ{Z&<&sa(9U…j Ubu:ga*a(+a5RaBLP(. 5=P¸)kF@L+wyL}ѝ鮉0ƥt0URspF'4}S|ptjil|)e… t*aT)AYPT@>vŇ>ϋ cWSNpa) Fů#+ u0Eg t 6U4yLm~uPS߭pa o7P7=zp1}ۯNJK{, zTO.U^b' -,{Ʈƫ/&-0]˘Y&՘/.Q{jdTa"Z*_'&F;7h'F*9{}S;qWϑ.Viq٧@5~E桉1Vհ~S70v5/CT\S RaBF$\=<Z*_'&F;@d a(_ڛ_ݞ47P70!n)>4#G~q"\LzEsd1hQPP}*v2Ё0U̻ Ղ0FaOPQpxi?(m 7ҰʛVaR`Z äJRB\]gWaT)VFrN,Pm]G' bu!]W@'x'd߿ xC]; ÄX, 1R{T͚rWʓoU&U C] T)5ZJcń,:TqB&;a!70R2I~äJZ0Ly.CaB< CXxH 6P:Q0Up#]>~:}! Q0nkaT)AU(t҈tgjh{e?:aO aIiu0R0V$ uѩPV!P-vzPP4R Ci\~zgre.}<ҸڳO*s6 4.?S2ɮ#59-Y7ca(c>6\SIv(|*\Fɚ2LHu$mkV, _;*p8X2L+-m #<:0~T&U .a( ?P:)aRPrFXЁ0U9HU^noP5t@w/YaeCH}!Ʈ?Ԫ,Ca5"ajLC20ިr:a( 0R(t9fa*NcĎnuO2s.Ӈz@iX.z0v5*Vب O(+a,Pe!:J4.3rajz2, յDި ? Ci~SCi\:Td`0v!*$lTY7V Ci?GVְFJ#aB|,P<0v5^}ZFexAx,6,R,v2Ё0L,Pܑ˯<0v5^Qe4.V}*v2JFe^XR L T{K*]W_V0`Pood76s@iX05D}tkЁ CiƟt[ fa!LM0l?"+lZ=n? 2,P= V_7[Xz*,\>x1ǬcSSӪɝ~7JC~.CNPVNƮS0IXt/~ 7P:Q + aPS0iQYJ0`ʮUJC~ ]~ \EЁw0`6PƇu;̓0L ]¨@'d߿6a~@8 Oݻ`6˽@u ]\ a]`5+Gq],95"a:0 t(`}d[uﭏҟ-P-x^:Lnt`}d>[g# + ] J##sk}[Gg#)nvzt0m n6"l}d~>ҟG&>2_0t(̳H?["Sd}t,E۹7 aN.HwG>ҝP-˟];v@d}d~>2l}TGidQ-va] ґ>Y{#(̭E`(>ci! ] 2(La}d~>?["+\QYG#}>ﭏLg}OGid}d鬏{#sk DtG&>*R4>J#4>J#4>J#+LS{#YH>2?XH>ﭏ( CX/X[6`}[Gid}d}t IF?/ D(gXuQ.p[X¿[_@'ti$dSy@{((GQpk}V@|> ~>[Ql}>J;#X?[i] J##Z韬G&"( ( Ղ&i!N= 8C6q?z?` O0sH# 7L.Ug2v}lV+seJ}LQӪ- ,L94":룮aƑRʓ'vKr;S:eqᣮtَ, -}hy~lg$0tES|pt(NKG}CY?G]g}uV"8R0&u>~ᣮeFGJ{By~NPۙ->:+ ]`n>6!46G]g ,o-}ƅ CX=hy7o()NȄQYu.H9)ivzٶ fᣮo;6ƴw${U&ɩ롬I&rBϯ)>-|uVkGIF`ږ$eW[>:+ ]`q޾v CX6ݹu9ʓlܻ߯nΔmi! ]`뗱.m~KQPבuߜ>:+ ]`W8krM|p//(hO''.W:o[6~EvqᣮDLJ=u7i҅?}~aOenO__Dtᣮ 56U/~7<6fIF[wyY0t@+>:+ ]`~ᣮo7tM> u.xӔ5xᣮoe!LV}>.|uV-[tjDž CX71̹|ᣮo5g&َ4.3򅏺 CXҸ̒Պe\N{JrG&w u.x@2KV+s9]9%U CX}=4y7%kZ7+QYa\~dMf>:+ ]`58[ǔi\f u.xzCwI'{ZuLɚe\QYuQYuQYu.37/{QYu_:+,<7snP'_\*2TApBw${U&)Yg4.3HqrO+V@8Z7+G.Rfnmp3mܢʷ;Qe#%-}6Rlyu cz U'6\S߹VM=e6nril|̅vp }Cv粑>)Nht}<:Ʉ2TpY8vavGQdLZ_M=e6nril|̅vp }Cv粑>)Nht}<:Ʉ2TpY8v?ƫ/&-0]˘Y&՘/.Q{jdTa"Z*_'&F;7h'F*9{}S;qW :Y;N2G}BU+- ,>뗱.m~KQPבuߜ>:+ ]`W8krM|p//(hO''.W:o[6~EvqᣮDLJ=u7i҅?}~aOenO__Dtᣮ 56U/~7<6fIF[wyY0t@+>:+ ]`~ᣮo7tM> u.xӔ5xᣮoe!LV}>.|uV-[tjDž CX71̹|ᣮo5g&َ4.3򅏺 CXҸ̒Պe\N{JrG&w u.x@2KV+s9]9%U CX}=4y7%kZ7+QYa\~dMf>:+ ]`58[ǔi\f u.xzCwI'{ZuLɚe\QYuQYuQYu.37/{QYu_:+,<7snP'_\*2TApBw${U&)Yg4.3HqrO+V@8Z7+G.Rfnmp3mܢʷ;Qe#%-}6Rlyu cz U'6\S߹VM=e6nril|̅vp }Cv粑>)Nht}<:Ʉ2TpY8vavGQdLZ_M=e6nril|̅vp }Cv粑>)Nht}<:Ʉ(Copyright(c) 1986 by Doug Cox)st\ 0":  R*}&1! !" 0~ 88>.#P z8" > Rzz{{ <My @ | 9q F##(##^#V!PC:@<    |A(H(!: !2 : !: !G: (~b bppã>2x!wO#08W:A8LG0H!!W#_Rږ Z[ Rͅà͆!͆Z !> w#R͆!! O##x ~wx(r#>w (f'("(( 8Õw#>w (>'("((08:8 A8G0 wְ R x}2 * Bl͆ l: =( G# Z+ͅà RR0Rҙ`iR!* 8&!*   * K BPB0#0B<0 != *  * à* ͅ Bà!B0`iB0B! K B* 0B!/R8  àB* R0B R ͈͈ͳͳ[ * 0 R|(R* à PBږ R8* BRàÖP K B* àz(* 0 àz( 1!* 0Bà[ Rx{ #(1(1## Rx{ +((++*" * +}~w*" (0:8>+!rFNy(&B0 ##1>B8 !'d !NC:@Q( S(Xͱ"{tRͱ͆Z!:Y͆!  >2h2j2k2|K} \! x \!}( 2(> w# ( (w#/ (!L  !! v Type EDCOM FILENAME$File too big!$Ǡ Ǡ ߠĺӠ٠ úԺ à=>O$ٯΩǮPress H now to EDIT HEXADECIMAL characters (the new character will be entered at CONT:)Press A now to EDIT (typeable) ASCII characters (use H if characters in A0 to FF Hex range)Press ESC again for more helpPress any other key now to TERMINATE EDIT mode^KQ Quit without saving^KS Save changes^KX Save & exit to CP/MAFTER EXITING THIS MENU:^J Input memory location at LOC: and Jump there^QF Search for ASCII and/or hex char(s)^L Repeat searchUSING ^QF:Input a ' before any typeable ASCII char(s)Input a " before any underlined char(s)End the string with a ' to add hex numbers e.g., FIND: 0D 0A'Hi, there'0D 0AUse ^X to erase input lineCursor movement:^S left^E up^X down^D right^F right 13 columns^A left 13 columns^C next screen^R previous screen^Z scroll screen up one line^W scroll screen down one line^QR beginnning of file^QC end of file^QE top left of screen^QX bottom left of screenPress any key...EDCOM52 written May,'86 in Z80 assembly language by Doug Cox This program enables users of Osborne 1's to view and change the contents of any file that will fit into available memory. The file to be changed would normally be a .COM file, which can't be edited or viewed properly with WordStar or any editor. Since the program uses the memory-mapped video capability of the Osborne 1, it will only work on that computer. Type EDCOM52 FILENAME at the 'A>'. The file to be edited or viewed is displayed in a 48 column by 23 row format, displaying all typeable ASCII characters (in the 20 to 7F Hex range), as well as those in the A0 to FF Hex range with the underline or highlight removed. All other characters, which would appear as graphic characters, are replaced by dots. The hexadecimal value of the character under the cursor, and its location in memory, is shown at the top of the screen. Note that all programs are loaded by CP/M into memory beginning at 100H. The number of records in the file is displayed in decimal form at the top right of the screen. A record contains 128 bytes (or characters). Because CP/M stores programs onto disk a record at a time, you will probably see a few extraneous characters at the end of the file. Pressing ESC will display a help menu. To change any character by changing its hexadecimal representation, press ESC, and then press H. Any key pressed (if it's 0 thru 9 or A thru F) will be displayed in CONT: on the top line. The bell will sound if the character entered is not within that range. After typing in the first character of a hexadecimal number, an underline will appear next to it, since 2 characters are required to make the proper hex number. To change any typeable ASCII character (in the 20 to 7F Hex range), press ESC, and then press A. If the cursor is over an ASCII character within that range, any entry will overwrite that character, and the cursor will move to the next character,  otherwise the bell will sound. If the character looks normal and the bell sounds, it must be in the A0 to FF Hex range, and will have to be changed using the hexadecimal changing method. This is to help prevent overwriting program code by mistake, although you must always be careful about making changes. If you have any doubt about any changes you made, just don't save the changed file; at least have a back-up copy of the program. To terminate the edit mode, press ESC and then any key other than A or H or ESC. Pressing ESC a second time will display another help menu. Exiting & saving changes: (^ means press CTRL while pressing the letter key) ^KQ Exit without saving any changes ^KS Save changes without exiting ^KX Save changes & Exit to CP/M The cursor and screen are moved using a sub-set of WordStar commands: ^S cursor left (or to end of previous line if at beginning of line) ^E cursor up ^X cursor down ^D cursor right (or to beginning of next line if a t end of line) ^F cursor right 13 columns (until end of line is reached) ^A cursor left 13 columns (until beginning of line is reached) ^C next screen ^R previous screen ^Z scroll screen up one line ^W scroll screen down one line ^QR cursor to beginnning of file ^QC cursor to end of file ^QE cursor to top left of screen ^QX cursor to bottom left of screen (or to the end if it's the last line) ^J Enter new memory location at LOC: and jump there ^QF Search for ASCII and/or hexadecimal character(s) (from cursor location) ^L Repeat search from cursor location Using ^J: When ^J is pressed, the current hex numbers at LOC: (on the top line) change to 4 underlines. If 4 hex numbers are typed, they will be entered at the underlines, and the cursor will go to that memory location if it's within the program's boundaries. If it's not, the cursor will go to the beginning or end of the program. If other than four hex digits are entered, the bell will sound and the previous LOC: numbers will return. Using ^QF: To search for a hexadecimal number, or series of hex numbers, type in the number(s) at the 'FIND:' prompt. Don't type $ before the number or H after it. Each number pair will be separated by a space. To erase all input, press ^X. To search for typeable ASCII characters, first input a ' (a single quote or apostrophe), and then the character(s) to be found. A ' is not necessary at the end unless you also want to include some hexadecimal number(s) after the ASCII character(s). The program will only accept hexadecimal characters if the ' is not entered first. To search for an ASCII character or string in the A0 to FF Hex range, input a " (normal quotation) before the character or string. This type of character will appear in this program as a normal ASCII character, but its hexadecimal representation on the top line will be 80H higher than its normal equivalent, and it will appear in the program being looked at as an underlined or highlighted character. You don't need to end this input string with a ". The search will begin from the cursor location to the end of the file. If the character or string is found, the line it's on will be moved to the top of the screen, with the cursor on the first character. Continued searches for the string can be made by pressing ^L. If you move the cursor down in memory, the repeated search will be made beginning at the cursor location. Three search input examples: 'LD'09'A,(HL) 0D 0A"Hi,there C3 06 D3 To change the cursor blink rate, use EDCOM52 on EDCOM52.COM. The hex numbers at addresses 0102 and 0103 control the blink rate. They are currently 00 and 06 Hex (0600H in the usual Z80 reverse order). Changing 06 to 07 will slow the blink rate. Change the name from EDCOM52 TO EDCOM, if you like. For use in the Public Domain. Not to be used for sale or profit. Comments, suggestions, questions... Doug Cox 140 Monroe Dr Palo Alto, Ca, 94306 (415)949-0624 sed for sale or profit. Comments, suggestions, questions... Doug Cox 140 Monroe Dr Palo Alto,he cursor location to the end of the file. If the character or string is found, the line it's on will be moved to the top of the screen, with the cursor on the first character. Continued searches for the string can be made by pressing ^L. If you move the cursor down in memory, the repeated search will be made beginning at the cursor location. Three search input examples: 'LD'09'A,(HL) 0D 0A"Hi,there C3 06 D3 To change the cursor blink rate, use EDCOM52 on EDCOM52.COM. The hex numbers at addresses 0102 and 0103 control the blink rate. They are currently 00 and 06 Hex (0600H in the usual Z80 reverse order). Changing 06 to 07 will slow the blink rate. Change the name from EDCOM52 TO EDCOM, if you like. For use in the Public Domain. Not to be used for sale or profit. Comments, suggestions, questions... Doug Cox 140 Monroe Dr Palo Alto,v{EDCOM52.Z80^  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]ouЦzqCN:>I>*(>94+ WQ_V7%Ghp #~=A 7! G~QGLبj =GVSC?Z)JL@}nd>ⶴ¦A\[P_qXaaT3n cנ LXIa 4S;*ڮV.sELm6ݭ[ CX%kOey۟=^HG2煰Qi6P&]qMͪ];:ٷ.vE4-i)>dwZk' ak7f4,3 aD)ф9:ND4^#e6n ',\Uvt)ƃvi\gnН,\nҸ}? Ci_Ea Ci{S $J$nfcϪSAJezƎV Ci{S $JqJۘVQ[w Ci_:NqMp2JWe]j Zk' axxÝ(]QivQ5H1VcyUݳp}iծEEJC_{Y7DBa( 㧹~OaPjmL= 1z0}R a|Ci{S $J$0U!HU^aXtBF U &tCJ˵cj=>kgf:M]QB\X:X% q;fF73J^5 셾(1a Ci4?E P>F73AJ4s?=PkmLwcQƘma`dSZݘѰ̜+4U]n)WDkGjW4T wiV8a9W셄ф9f@Mt9mZЯh~hcjWT0LfР^̆~;S0~zA%Lܵ [Z~ǭ_e!_K|r@m6 ̹Ƙ }ܞ4n6aPjI”|?"n6nu' a|u=ܹenfׁ.,=IQ߮MY&Q Ѧ`ViFE+2ͮ0i'C1=nS!P:{l-)]Ѱ̜+iBt9mZ>6P *HŪ0w86W DVƫ~Ug3MQb0L cxUUρbՙ~gZª7P ԋªo4.:}ۘ1a9W nf`0n UUga~S|rTbZhXf³p:xzqd@mL:P[UP0a/ P)=nf[aHDp50^UUc'Ѻ-+Jϴ1>Ѻ-0enUtV^ݧ+v\e^E*ga]m:8sk;ܯw z|u6-״L *SDɢFTEAJ#PyE}iB˴]tre0RVJ#0Rf/nfPa(In>)vWJ3W]iNJRO!pU@} 4t{aT aLU^amLVQ[t)/T{׌~EynPy-mLwHZ1nӂڂNnLJ#Z&Q 6 Ci$^ $J0F0LlH|I 7{a0-ِfkso1^S7KepftjO*h͆4IBTjaS ],:΅?%|A&|/Wg^ݘѶlҌNi>baD)d %np2JWLci1*]/m( ]П{KoA̱9F%n,PC96z& ]3PiaO0Ǧ C0 P C96\I̱Q\mbUti& ]vo C'aO8F%>C,̅K'aO7\ρf. ]aOxW\Dn,P)aOHn& ]"L+ =̎%Ny%]OI766Vu--)Kq[8a(_:u=ܹ-CZ tufVuR~I&Tm`"\: X%]W\}QcJqJ7Y Xi|rٗvpNoi)>9*1R*a&T cb)geܦ:@&i1?W(/V~Ū3Y%nf`07[%]Ug~L㔆ot߾=̎( 7kaD)yaЄDH&Q f(4n{ ԇ[Gwm<Џ~Mѯ(II ]Ga{ o0'nK|*̴0t-Cdy C}@v# ij. ]@ CBʹ0v>%\av@idާgaD)٧f_6vtpŖ~M{K* !LFWO{W:=\I{}jExT}ui&Kq[8f&B^Z~{.«7\L#׽˖a",0v ^}ҫga ƮzH%^=OgaT N˾ڍ5ݵ a*zQ/.a2J3:y!&s7P{<}" Ci~]}Qq[< 脱\*pҫ F/Ay: #i䷿]zvcFwmLQ¨mzp1ݵ1PVtEݼ=S2[c L榛 ^=o4 WYLK˵3kcʩ]baT n_D=ژҰm Eݼ= 7 atsaazfۘ2OcA8[4fp7 Fa(_tpw0v ^ 7 Y# .w0vfŚ]Q2z|"ip0F/Y&w.2h/ a`|BҸt7g_ Ci\ξ.96\X؆nH|{ ԋ.4.yڳO4_ CiX>-UѰ̜+6Isp# qn>.sCX9m$JczpbSQQB)R/10$hiL" a|6F73J&Q MHSa`ÍO¨^pЯ saan}DX a_ DXlE0=y*6^ 4R=ܹLL#׽c wr0LEƮe0LB3"a"'Oe78eZ|㲘ژb^84Ni; i!\ͫ >G+ aW,LP񟅡tCiX>0RhBJ- (0FJCD*aD)4!OIsp# |"pUP:<¨$˜JE0^UUt+ /00m`A?Wa]U1@}ZS #:NVUT_-1tP:Kߩ0gaT aLU^aDU03 3- Q $JAwu66Ҍmh)N)]Ѱ̜+* !DDUu4^2h0~/ w0R(u5 cAUͅ<70R0QLJCg+ QYJ*5aP/&L%)|]# (&$eb60R0QL&Q a>"a"|JQf(셡4y~PaUE(Ugтn7f4 X% ¨FU00߾n70RU$w3$JFu3a(4ty~e\At9mZ*~'a( |t7G -tKPVoz\.0fS4str?P?QQ2iᾛim`T=Pgnҷ.+]JuV0~kZƌڂ0$C68[t+JWt;a4I4&FӘDJGm, (R*h_\iy3aT P/][8S[oAJ'@=8jcj 껙ffV X%nf0A ԫ4e-bj p3;4_ DP4=*gtr?P=ܹlƮLH¶KTd7P?VlNTd p"7P>H|) a0v ^f=P4=*h#-Oc6X% <ɭ0ŪOYm`ЄD?Z&ikM5 Dgz!]W50{ ƮTjank꟫iC)4mquٺ-0ŪO~SSZP|r4,3 aLy[^_>V&m.&a]ѵ}lcaLuc saRAm'#:N:#:NV Ci;aD)zQ-UFTEAQ4Ex*pt Ly0~(NiNs¦7Vu4^aS FKaT a"21O@ݮHqB 4X-Y"v4.6̎go.iF˴b;KwNn@iX/}LQJV #:Nݍ0*Bi J#A˵3ZY"4ʗFƗyu1ڵ#W\έQ73ˆEi' zfLE2aD)ըn&<'LEP^"v0*U@CinmL' q5s@mA:Ci$O*SZ鷴J3akVQ;P[,3wpE4bQ|rj0vʗyڣ.ҘV鶸 #:NVaxi(ͨ\&8YWiFnpߺ"e-ba(_l F Ʈ7izP+J AJ PҌ鶈-"acÓ6f:uR~~b{HE0LUgat3k0{sTHc0˓0n cÓ} L|^EˆFTEJ:X% Qޢ[ŔhXf0REPU텅k~^YEw/cn4ll\ƔW*KdҌUBKa}At,FTEnp_Ft,aQ Ciu@]F TXu;c[ 4T{OEm[a( mnkZ,bHЗO?$ADcqi"B_N/ƴELwNSi`-ܕⓣ}Ӧہ]˸M~IJC[^+]>?Q5Hu *0vf{UEHU^~t1ݍo)N)s-.Upan mL;mqu@4Ұ*Kx,mᄡ47HU^aD*aDU+ƔW/4}E46LQ*~t1u7¨$˜J@o(s-._e^E*ga4a.\}'̫h}>[a(_UB.L5 o_O)&Q >Mݫ0v LߢnW4,3 *ҘVzOjNJ}Pݍ̫H, Q0u6614*.L5 4u( T0Fie^E*gaT aLU4ˆUP?}~F TXKqJ˓[~K1^hUKߩ0g ]UBFF 3IOS*\``fsfz]Ѱ̜+hծJ_Dv턡4J??4fݻmqS5H+UUSi`/0AqJ.85 hy҂e\!]ϕHְʗ]LkW<'JWmn 1YEmA:Ci?b+by{PڭbJW4,3 JU~ a$ZʗFW\*ڣS:8꾢ka9W#W^Szt1u_*w*YJSaϕ U2"0vTUE{a*~a 3}(aoQߥqhV1+s0Lt0Fi~¨$˜J|izftW Yp l1 :NWˆҰ}uS>bJW4,3 :Cjc* uRo텱k03큺]r iFcLqzO銆e\!, a}) (ȭ00*_aD*aDU+PݽCn'FQ*a(¨$˜J|i' UPwCw/A2l.\}>FDɢJQAc@iXcԻ])Ni2QQ3W0Fie^E*gaT aLU40vfJ9P+̫HLcLw-xҰ_UB( A"4ʗFq /*R?]>? CiXVUDSi`uv+J3cZߺ+ݥqhNu4 #@oPoc꾢 4Jr+DkXK#8YX%}m1u_ =VnATE .*R? cAUU>Fe5 :Nݍ0*U@}i͆4-bQ[U¨$˜J|i' UPwCw/A(tsF=@iX/}L'FQAaLU^a"OI7vEcLvWa(¨$˜J|i`sf}iS[ZltEvWa$Znf 8Yt_ #"X% aoQ5H1Vy03^Wf{҂8Nn G/m|ЯYXJ4!HF/ Pw3CWtB.L5 oZf(}ԫ4Vڂ960RhcAUͅ^o4J ^} L96л+ޫU$]Uj6&aslT?@i>UHHmAc# (ͱ.L5 o{(?W߫hICfxW^2l.\ l 3}Ұ_UB( DkXK#A"4 ]n.8Yt_ #"X% x+ !s ԫ4Waz]}#튖lH3c{a( Cn1Vy' Uui@iX/*R? #VcAUUէ1 ݍ/0v ti o'FQ*a(ǟ>?jc* .񪪢[nWП)Ft,^Si`AGM~zFTEnZC ݽ\J*W YSi`/ P`2"3ݽ\qJGM~zBݮϔ c* :c OOc/`0vTUE{a OODU*ߌ,70R0i^`sfuOcAzM2sFt,aDU4J DkXK#8YXUQ73Jݍ0FiT00*_aDU03 3]QPwC_JwKZ\iծ*8YX%CiX/p33Ue^E*ga"@]b vx- !K p,]WB_Vsat3- ^*IX~@i*i8Y }%Pnœ5s@,=Ifn0vTe*e5@iˆˆW@})ˇR[P0U2"0Fia$Z*_aDUu4^ZeL5ssl* 7ݳn>/o-P/PЏ5hg;ng;o4a"}n=EhXftp4{Ʈo*RZo?6ˆWˆ:u4.ZeL~n0vTe|^EDU s @&QT?7FJ}^ZqzOYx)]Ѱ̜+i" a̫H, QAUDSi`/ P`2"3ݽa" d#"X% 3}F TXuFxvEcLvWaDɢJQAƴfC:]q0FKa0F0v fOOvEqvWZeޫ0Aw# !/o-Pg):JW4,3 :Ccիoa"R>bګtE2s;ً0v ^ |/]fnp3 Lh0[+&*nf7p7fWh\XXssl6Ew#`0<¨$˜Jh@ݮh=EˆE0*P/a"P5zϧH:t70@v(]Ѱ̜+i"]Wtv~+ aoz\)*:JW4,3 :Cc7ݳkM7V|z60h0VMU:t7ªt t0Fu|rtx!_:!bJW 7!OD*aDɢ4ˆPVK*h͆4u[|Kt[K! q1&JTiacY:X% x%A"]٫/izF caK5{4: jpw%ez_+bd LwmL Ci\>Ұ_dΨ㔆xbOm--m_/߸LTiq1&J&Q MHt7Ʈ/U7{mk[B@wFTEAQ4ˆV sa&$o40Fy[aD):s㕾u/w]Q5HфpLo\][ Ý(N~b{sҌp_mݠi6[x}-~0v ߁=+*XHw@Lo\SRKo9ZCL0(//r+]٫/V^U% qat34M035 0Fiυt sa6'n_yoVX8t UI&Q f(aD)4!*̍WֽܥcvI7(^ݘۓ0F{ ԇ[G{- DX|Ʈ́:N)s6+(ND5xS}7Yca+UEO.H3z{!W.sWaD)LAc7$J4PS/&zOga4aS2߅nI”|?"aD)LA&Q F5 $J9U$]JU}~s+ a76'ԋi4nW(0aD)4!*F2uo0~h{88ahW"aQ $JFu3a( |VJ*?%wgԋ)=O a([a(5Pυ4.?gre"Ҹ $J$&qJ&ާz^xֿi@X_mw;f{Bx^i@XQt>/ i' p.'[͇ya}`B8d2]%rl}n~f}?[Y`}n%$>7|XYYszt7fϔLAp.gs3ss.'y>7?Z}n}ϭEwgf!Y6%r[\纷oDžpt7@ȓsLϓܢ^Lo&LDss>7?Zsa}֢^DM&Jf_Sj! ]"7\<ɭMi}n~>?>VLflKIn}n͇yX'y['y[a?u<ɭϓ|XsLϓ<ɭ0t ay]"O͏|X'yy-%LViF'?/K<ɭÃy<>>O~fKܖ/~~qYu66ҌmL銾/.pk}?>OzsϓYDZ[Y`K;$X'< InzAM[9*Zl\./zMw\]iT0tEa )ܻnΔLhyqlX0te;8Ԯhyql$8'~l,y>{+ ]ben(LDZ-hftH3G'_0tEax4>u/T_(Nin^"{%oO_6/m|J1 7my[aGX{+ ]b񶣮tp4{u6-hIUfCcqpOen%o_41[hfLh,O3:hyp^0tśݻ1y[a͞~y[a4￳~Awnf{7ޭ%:Z2>{+ ]bۘFZݹU9W]iyp^0tE( qO4￳~AqJJ'݈ CXw3\S,;\~\S,|V88z8%ƴn y[]oߧDVl!~7 .xhV}oK,m>{+ ]bvCKy[a7MYx>{+ ]bS>bea%o *Z>{+ ]bfp?4,3犅 CX5tot;а̜+>{+ ]bJ2Kksm)--|V ,]iXftMm>{+ ]buCw--)]Ѫ] CX}mWJWjn%o_{ZUL銆e\y[ao.@k)]Ѱ̜+>{>{>{%Q憁ⅾu/?"{ ͼ6q;i^E**R@Oأ>C:]qhy3csb8[}Lo'Qڵ#W\i^37 6̎ e~b{s@iFӘ 41[hf$󰁞G4ih2WTlw.u[|KY-Z"_ ᾛn@p粁Ҍ1(Nipc<*̈́UzA<_a=G7ynfZ_m-e=+*XHw@Lo\SRKo{+ ]bۘFZ!o6!' 6W M^ MM~J) W M| MM~YJZ~yJZ~N(~n(WW M MM~ J!& wM~ !& ~~/z~:rV0u$~/z~:rV0G!& ~~/z~:rV0Ou!o6~M6afM6a!oq~)r!owiM6a!' 6!o~!o6~M6afM6a!o6>M<!d@ m0!d m0!d m0!d m0!d m0MY!' ~~J!o~~(J Mqu[ MquO! e^Ma#^Mq!^N#F!a^!@e]a]w]6] ]w]6] ]w]6] ]w]6] ]w]6Ea)) eQ!@s#r@9M6aINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNuuu~wNNNNNNNNNNNNNNNNNNNNNNuuu{eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeew0001020304050607080910111213141516171819202122232425262728293031323334353637383940F41T.COM Version 1.0 by Romanus Wille, 6-5-86 enables the Osborne 1 to Format 41 Tracks (double density) on drive B:$ Format all tracks (Y/N)? $ Select track number (0-40) $ Now formatting track: $$ Insert disk in drive B: hit any key to start or ESCape for exit.$!o6W MC0) $ Now formatting track: $$ Insert disk in drive B: hiteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeew0001020304050607080910111213141516171819202122232425262728293031323334353637383940F41T.COM Version 1.0 by Romanus Wille, 6-5-86 enables the Osborne 1 to Format 41 Tracks (double density) on drive B:$ Format all tracks (Y/N)? $ Select track number (0-40) $ Now formatting track: $$ Insert disk in drive B: hitDRIVES.DOC July 7,1986 Increase Your Disk Capacity by Romanus Wille Many letters and articles have been dealing with the problem, how to increase the disk capacity. Here are two new methods to increase the disk capacity, each one will give you a plus of 5k. The first method uses a normal Osborne DD disk. If you look at the disk using DU.COM you will see that there is no information except E5H between track 1 sector 24 and track 3 sector 1. This means that track 2 is completly empty ( 5k ). This room was left by Osborne Computer Corp. for future BIOS versions. I think you'll never find any future BIOS versions that use track 2 on a DD disk. This first method uses the empty track 2 for more space. How can you access this track? Normally CP/M is not able to access the tracks between track 0 and the directory. On an Osborne 1 disk you can find the directory on track 3. The only thing you have to do is to move the directory from track 3 to track 2. The best way to move the directory is to tell CP/M that the directory is to be built on track 2 and because CP/M asks the BIOS where to build the directory, you have to change the BIOS. Use DU.COM to change the BIOS on the disk. You'll find the disk parameter block for Osborne DD drives on track 1, sector 8: DU ( = carriage return ) T1;S8;D T=1, S=8, PS=7 00 00000000 00000000 00000000 00000000 *................* 10 00000000 00000000 00000000 00000C28 *...............(* 20 00030700 B8003F00 C0001000 03000514 *....8.?.@.......* 30 00040F01 2D003F00 80001000 03000112 *....-.?.........* 40 00030700 52001F00 80000800 03000820 *....R.......... * 50 00030700 9B003F00 C0001000 01000824 *......?.@......$* 60 00030700 AA003F00 C0001000 02000000 *....*.?.@.......* 70 00000000 00000000 00000000 00003A08 *..............:.* The information between location 1E and 2D is the disk parameter block of the Osborne DD drive. What does the code mean? 0C ----> 00001100 = double density, 1024 bytes / sector 28 ----> total number of 128-byte sectors per track 00 0028H = 40 decimal 03 ----> block shift 07 ----> block mask 00 ----> extent mask B8 ----> disk capacity - 1 ( max. allocation block # ) 00 00B8H = 184 decimal 3F ----> number of directory entries - 1 00 003FH = 63 decimal 10 ----> bit map for allocation blocks used for directory 00 1100000000000000B = 2 allocation blocks 03 ----> number of tracks before directory 00 What you have to do is: 1. change the disk capacity from 184 to 189 or 00B8H to 00BDH 2. change the number of tracks before the directory from 3 to 2. If you use DU please type in: T1;S8;D CH24,BD;CH2C,2;W;D X After rebooting your system you'll have now 190k of disk capacity. But there is only one problem. Your aren't able to access the data on the original Osborne DD disk. So before using the new system, you have to copy all programs and data to a single density disk (or to an other format provided by UNIFORM or MEDIA MASTER and one SD disk for reboot) and after reboot from the SD disk you have to copy all programs and data back. This will be a lot of work, if you have hundreds of disks (don't forget the backup's but don't change your original disks, these are the only way back to the old system) but the result is great and very inexpensive. The second method is a more strange one. You know that the Osborne drives are single sided drives with 40 tracks per drive. To avoid complaints the manufacturers of the drives produces drives that normally can easily address 41 tracks. How can you use track 41? You have to do two things: 1. alter your system 2. use a program that is able to format 41 tracks. To alter your system means to alter the BIOS. Use DU.COM to change the BIOS on the disk. Again you'll find the disk parameter block for Osborne DD drives on track 1, sector 8: DU ( = carriage return ) T1;S8;D T=1, S=8, PS=7 00 00000000 00000000 00000000 00000000 *................* 10 00000000 00000000 00000000 00000C28 *...............(* 20 00030700 B8003F00 C0001000 03000514 *....8.?.@.......* 30 00040F01 2D003F00 80001000 03000112 *....-.?.........* 40 00030700 52001F00 80000800 03000820 *....R.......... * 50 00030700 9B003F00 C0001000 01000824 *......?.@......$* 60 00030700 AA003F00 C0001000 02000000 *....*.?.@.......* 70 00000000 00000000 00000000 00003A08 *..............:.* The information between location 1E and 2D is the disk parameter block of the Osborne DD drive. As described in the first method you have to change the disk capacity, however it is not necessary to change the number of tracks before the directory. If you use DU please type in: T1;S8;D CH24,BD;W;D X There are two ways to get a program that formats 41 tracks. The first way is to write your own as I did. I named the program F41T.COM for Format 41 Tracks and I hope you'll find it in the library. I prefer F41T.COM because it allows you to format only one track. Therefore it is possible to format the new track while the rest of the disk remains unchanged. The second way is to patch the original COPY.COM which was delivered by OCC on the system disk. If you prefer to patch the COPY.COM, make a copy of DDT.COM and COPY.COM to a new formatted disk. Please type in: DDT COPY.COM for version 3.1 | for version 3.2 | response of DDT you type in | response of DDT you type in NEXT PC | NEXT PC 1200 0100 | 1200 0100 - S381 | - S383 0381 2A 2B | 0383 2A 2B 0382 CA . | 0384 CA . _ S392 | _ S394 0392 28 29 | 0394 28 29 0393 C2 . | 0395 C2 . - S3FD | - S3FF 03FD 28 29 | 03FF 28 29 03FE C8 . | 0400 C8 . - S44A | - S44C 044A 28 29 | 044C 28 29 044B C8 . | 044D C8 . - S524 | - S526 0524 27 28 | 0526 27 28 0525 32 . | 0527 32 . - S534 | - S536 0534 26 27 | 0536 26  27 0535 32 . | 0537 32 . - S545 | - S547 0545 25 26 | 0547 25 26 0546 32 . | 0548 32 . - S7AF | - S7B1 07AF 20 50 | 07B1 20 50 07B0 20 41 | 07B2 20 41 07B1 20 54 | 07B3 20 54 07B2 20 43 | 07B4 20 43 07B3 20 48 | 07B5 20 48 07B4 20 | 07B6 20 07B5 20 34 | 07B7 20 34 07B6 20 31 | 07B8 20 31 07B7 20 | 07B9 20 07B8 52 54 | 07BA 52 54 07B9 65 52 | 07BB 65 52 07BA 76 41 | 07BC 76 41 07BB 20 43 | 07BD 20 43 07BC 33 4B | 07BE 33 4B 07BD 2E 53 | 07BF 2E 53 07BE 31 20 | 07C0 31 20 07BF 20 . | 07C1 20 . - ^C | - ^C Now save the patch: A>SAVE 20 COPY41T.COM Finally, you are able to combine both methods and get the greatest result. As described before, you have to change the BIOS. If you use DU please type in: T1;S8;D CH24,C2;CH2C,2;W;D X Ok, this is my first note for increasing drive capacities. Some special hardware solutions may follow. If you have any problems with these patches, don't worry about it, drop me a line. Romanus Wille E.-Mueller-Weg 15 D-2081 Prisdorf West Germany  07BC 33 4B | 07BE 33 4B 07BD 2E 53 | 07BF 2E 53 07BE 31 20 | 07C0 31 20 07BF 20 . | 07C1 20 . - ^C | - ^C Now save the patch: A>SAVE 20 COPY41T.COM Finally, you are able to combine both methods and get the greatest result. As described before, you have to change the BIOS. If you use DU please type in: T1;S8;D CH24,C2;CH2C,2;W;D X Ok, this is my first note for increasing drive capacities. Some special hardware solutions may follow. If you have any problems with these patches, dvoF41T.MACZ  !"o#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYV?/'z~о;i?~_?n㛏/ǿm'm}l>o^\Nɛ|an'w^?u.\N߻1>嗟~e퇹rI[2ӘtE.p8ޝn <&;'T}Z%91n沌pޝv4q^ޝv4~IxwNnM ΉUi.n-ne.ÔxJik2LwRJp\N]»s_*% whu:GJp\)9+.-S6N4,uzxNpRtlcKiz\0%;'H*z\00z\p4ᰴ/rWwׄwDܿRWk6 w-i8Z. *z»s".oNiqm}:e~?NO Ή܇)y8SeDmgJcQ[=.ONhs%yǯ ΉT*m˩KIr%Խ੢zM~ ^kRp8=zMf.T;, sI8 1ͽK.T;,KzMqc.i{Ok\Ri6\6:,x*ꚾqne`>SwXzMqc.i{Ok\N^S,4iޞ?zMqc.i{Ok\N^m8m=uXrI5^]7{%m״>ꚾ{.iaKz5o<Kڮi>jJx8 jJ)k^eKZ%S.T;,tv6NS.״y<撶aK5mކKZ%8-cGrI5mSJiޞ|br`hpW8zM^%ԟ=zMp<䒶aIt\(Lh 0n\vM۔Kz57>t[(m۹q8zM^HtF,c Sۆi6|)kKڮi}J&#\ҫk3^ǔN탡Cá撶k?S:u,KC{%8t: n m5״>6c8nŔKKz5x\N^cڮi}J&#\ҫk3^ǔN탡Cá撶k?S:u,KC{%8t: n m5״>kZ=zM^%f??璶k~ 11ap`hpNFsIj8)CC%-5%͵sJ%6Ϲ4{N].i5͞S:}\\kt=sIsiK)xkRRS4kzP}.k^\65SǶcQ\Rp.t|>c6NԘK4ܽrI&u/qzjr%]k/vWt5^\RI~rIgϹ^S)ͽi{uw%=0NO^ӃsI&u/qz%f??^M1S.sפti.v].TN퇹m=MݫkJ:ߣmA6/r9g^SN]:m}l 6m1ͽi{uwmzM^n?%ԟ\N^lRC!2Za9_PuuZ', \Nk8SK50zM^ϗ %80}ZerI\RIu8_)kZ7P/iΗa%zrI&u|\Ri݌C ӧu8_)q%]erIu32L|\R)kRwΗa%80}ZerI\Nm=^\NekRp8=zMԟsI5^]7ƋK5{ߏS.4A9]ӎW8撎-͹^Ӄ\6/qz%R_qz2kR\RAܔiknyh8~K50,1kzP6C)⻇݊ `iiWLm)t#iޞ|bjC[폹^ųv^ŏ^>>/~}aph>#l0nԎ`ݷ۟sIsn%/=[%/~/i6S{nt|uk7zMϞۭzM?z`m\\k:rIgVsI|.l0]Z׭ݐK5=_<{nK5=_#l0h\Nu.t6mu>n?%]ϋҺtZݶ`u>n\u&N\\kRzJlrIsI)krIsI{n咮EIݔKTҩ}Ӽ=!S9ڂm]1qva.פ|`j9kzP6ڭ撎-rIgv^Ӻy=_.mn_zM0ۜK4ܽ[n_&6r0,15Tt8߭pi qviޞrY-oS]IRJ8Lm9~\>TDR&cՆKۂmv sŔK?ck"t<Ct`w+\<S]IOO}886qv8߭rY]15I*tk,m8L:#C.u8_15q;A2wd s;A2wd\R]wd s;A2wd s;A%5q;A2wd s;A2wd\R]wd s;A2wd s;A%5q;A2wd s;A2wd\R]wd s;A2wd s;A%5q;A2ILR&)I$e2ILR&\R]/!2/!LR&eg2wd s;A& s;A2wd s;A2wLR&2ILR&)I$e2IKȼKȼ%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5r^1k.\q^S]Ӟ{|os_g{{~={_l{￿%/_v{_~{_~[sIuM{߾{oc/޿lo޿rò15 w|'_߰ݦO~W}wOoꚶ~W;hu'ozۇ/>u'smo֝/Ey~/>퓯|m}>;,ckuM~q_/_>y?l;7'_xCk?reyꚶ~q__^/?l?i_?~=[>;,T״M'o>ϿSǿckg\,Toe~+i/W_~a_}U\R]6_/_ۇ/>͇7 _~g\=S]p8==&*u˻q|L&u/x蹤^ӃsI aYK5m^i8m=uXrIe1C߷?ŏ^>>!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5!!!!!!!!!!!!!!!\R]222222222222222%5r^1k.\q^S]Ӟ{|os_g{{~={_l{￿%/_v{_~{_~[sIuM{߾{oc/޿lo޿rò15 w|'_߰ݦO~W}wOoꚶ~W;hu'ozۇ/>u'smo֝/Ey~/>퓯|m}>;,ckuM~q_/_>y?l;7'_xCk?reyꚶ~q__^/?l?i_?~=[>;,T״MviF41T.PRN_ o  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^R޶&4MxSy~dj68^?x_o?7oO/68^pϿ x;>vKmp?j#?;~uwٮ_E 4p8?<=h I#Rע1k$|W" I?]K_6@=mWע ?h I=k_ n۶Zע{Zעir=׷Rzyz j4?\oq~+ktBq\ϯ6`tׯE(/ez:3ϼn_k8G緟ޞ Zi>Fy=P~z}{ \ϯ6i᎟{ Z4Gy)w>~&nr\"&Rv+ʻ {4?Ow ZӴFy)wpa3/W _kxv\ׯE< (ERIw^}}s}m&n>B#CkXI W;x|)>\?h GHeߗ Ф M+3xwM?}_yw_/tw ^~_v6@4»in=eߗƻ; 4{!.6@Ӵ»CI/m/|WiMeߗCO;drw;]h'xwؠ^~z.~}KZi4Ak߷/eߗƻ;hWx'BeߗC]KmzH2{9l}x 44A/7Meqnw6@xw"tP}9z~h'xw!eןj6@<;ʾ/<j4Gxw!eןj4D=C9_X9qݯx дn%Se˯Vi1'x1 ܽʣk4nXʾ/j4n/>_X~w+ʾ/[~M7xw"C9TYcmKmm ŻM|& j4 V˾/= j4fxwi>as)/bwpaxvGx7Mt<˾/=z~[yO/3. дw#\o?=Cmލx ^}}m\W/v'xwlM1?sMޝFhO9ӥ6@8eߗ6@5r twM{{gޑk4Ѓ|öߗM'~\eߗM#4?}_[Nލx ^}}m\k4+[ T}khona???]j6@SqO /eߗ]txW|& j4'x7Mд^}w_W#;4z~ ;ykmpM4x7Mt<˾/=z~[yO/3. ;4z~j4q _. D» 5RR$x7CeKh:C|˗rrw9|(r=.ەʻ;KmpvO.KmqFK?M& /ߏN;x 6˾/C?| t"cʾh8A#{%ٟ_OkmFN4l}_vC:_?ZQGx;?}t Ш'h/>| Ш eߗ!П׏th{Pӵ6@$x7N^}}Zq&h/ɇt~ϯ6@twCO ލ4r}_bthvN4l}_vC:_?Zq"cʾKmQCaUIyǛ0P4}Mye8V[mphgx7NwKsmV?}_oޝM\=;l$˟'xhndKnr\qhnáľ6@» 5RQqw T% Gh(|p9_q_a8`ghnáľ6@ûMeߗgp( hwʾ/_c-5D)/z/ w<\W<_z^k4<=Jk4 ##Ck쿥c?3~u}xxx}Z ލ3Syz8h#XKC?3~u}.o;^vw{R/ޝ /.v hxw7hމ=CwRNCaˮ?h<4?sN3;ze;h<n[}_zމ=CwRx=$]mޝ&|~.۩6@㱇w'*ϯwQSmph<V}r x<;!?}_vS[muw7}_bomWq5x{}}#?׻( иT}a~ މP}9p~h\7xw!eןj4=T%W»q*O ʾ/̯V۟p=  E>TYCmh މP}9p~hCaˮ?h;MO\Smph8AcO{%v[m=T}9ogp(Gm G.[)/ {>x Or6@ 9˾/Who_a>l.gt!6\3^vyxrhʾ/} cmލi}_bӉ׿6@l}_b= xw4z% x»'|~.O? a<p9Wק rOrbﱮX}÷}m{Gh&R}ߏr*/O?|.O\Blrm+p|/7 иﱮX}÷}m]c>B#4—ק~cyrbO{x=C<{+$?}_>-7x_q#{GhfR}ߏr./w<\W6@nw}?;Yq7ǺBcrw+{GhR}ߏr(/w<\W 6@n([ߗrw6@㮇w}uDzקk4!/eߗO?-p9_a68^V/Żö? qnK6@aw*ϯwQvR^vxKk4 q*R^Gx7?K3_k4Vx7?K3_k4nNOeJyT_'|~.=Ky鉿>cχ/Z/ᎇzg^qn xq ^}}^O'^[m:?}_[h<8?C=a3 h7xw*W^x p{|)HێWOrW\sm$Hw<=HIQJyrY' ?=ǗHIQJyS Op|6@#$W×(޽χt~_].Ć;.+^vh$WKwER^vy:?rƯOb>mkmFNpvR]))J)/[_yw w<\W_j4w11hx71KwE#50R#50RRHI"%EJ))RRHI6@pw$HKm$H &x'A hޝ 'p"|)d:YN#%EJHiiH H H l7x'A&h/N+b —G_j4x71KwE#50R#50R#50R#50R#50R#50R#50R#%Em @ @Rxw11h^b B/I A/I"%EJ))RRHI"%Ed:YN.j47x'A h^N '/ow'p6@mw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@mw4@ h 4@/o'xG 4Km@ 4R]-RH"E-RH"E-RH"E-RH"E+h6@@ 4Rh| мhhE)ZhE)ZhE)ZhE)ZhVxG 4Kmmh| м 4@/w3h"ZhE)ZhE)ZhE)ZhEw+h6@nh| м;;h_j7ahǛ#X[m3h"ZhE)ZhE)ZhE)ZhE+h6@ah| |8;h_j43h"ZhE)ZhE)ZhE)ZhE@ 4R;h_j4'xG 4KmfhhE)ZhE)ZhE)ZhE)Zh h| h6@3Ohͧ@ 4R]-RH"E-RH"E-RH"E-RH"Eͧ@ 4Rw4@ h> 4@/4;h_J+E)ZhE)ZhE)ZhE)ZhQA+h6@vh :;h_j4L3h"ZhE)ZhE)ZhE)ZhE@ 4Ra;h_j4L'xG 4Kmqw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@ø;h_j4;xG 4Kmh| 0hhE)ZhE)ZhE)ZhE)ZhWxG 4Kmyh| 0 4@/@ 4R]-RH"E-RH"E-RH"E-RH"E h| 0 4@/h6@hhE)ZhE)ZhE)ZhE)Zh@ 4Rvh vw4@ h8hhE)ZhE)ZhE)ZhE)Zh8h h6@h| аhhE)ZhE)ZhE)ZhE)ZhXWxG 4Kmuh| а 4@/n3h"ZhE)ZhE)ZhE)ZhEn+h6@mh| p;;h_j4hhE)ZhE)ZhE)ZhE)Zh_ 4@/wh 'xG 4KmR޶&4MxSy~d>Va 4@/"E-RH"E-RH"E-RH"E-R аh @ 4Ra;;h_j4fxG 4KwEH"E-RH"E-RH"E-RH"E-j4VxG 4Km@ 4Raww4@ h8hhE)ZhE)ZhE)ZhE)Zh8h h6@h| hhE)ZhE)ZhE)ZhE)ZhWxG 4Km~h| П 4@/8;h_J+E)ZhE)ZhE)ZhE)ZhQ+h6@wh <;h_j4fxG 4KwEH"E-RH"E-RH"E-RH"E-j4VxG 4Km@ 4Rtw4@ 4;h_J+E)ZhE)ZhE)ZhE)ZhQ h| ih| h| M3h"ZhE)ZhE)ZhE)ZhEiw4@ Ȧh6@6 4@/qw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@6hٸw4@ h6@6hhE)ZhE)ZhE)ZhE)Z@ 4R wh|w4@ Ȇ@ 4R]-RH"E-RH"E-RH"E-RH"Eٰ;h_jd@ 4R NhhhE)ZhE)ZhE)ZhE)Zlw4@ lh| @ 4R ;hhE)ZhE)ZhE)ZhE)ZȎ+h6@v;h_jdh6@hhE)ZhE)ZhE)ZhE)Z@ 4R [whzw4@ 'm;\oGC7G㭶jd@ 4R]-RH"E-RH"E-RH"E-RH"Emw4@ n;xG 4Kmvw4@ gxG 4KwEH"E-RH"E-RH"E-RH"E-jd+h6@vw4@ Oh6;h_J+E)ZhE)ZhE)ZhE)ZhQ VxG 4Kml;h_jd @ 4R hhE)ZhE)ZhE)ZhE)Zv+h6@;h_jdh6@v 4@/"E-RH"E-RH"E-RH"E-R VxG 4Km찃w4@ 'xG 4Km 4@/"E-RH"E-RH"E-RH"E-R +h6@ 4@/h| qw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@@ 4R @ 4R @ 4R ;hhE)ZhE)ZhE)ZhE)ZN+h6@v;h_jdh6@GhhE)ZhE)ZhE)ZhE)Z@ 4Rvhuw4@ 8hhE)ZhE)ZhE)ZhE)Z8hh6@h| q 4@/"E-RH"E-RH"E-RH"E-R q\ 4@/:;xG 4Km @ 4R<;h_J+E)ZhE)ZhE)ZhE)ZhQ;h_jtwhh6@aw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@aw4@ 8 4@/:'xG 4Km6;h_J+E)ZhE)ZhE)ZhE)ZhQhmh| NhmMh(>2}3h"ZhE)ZhE)ZhE)ZhE:WxG 4Kmh6@ @ 4R:;h_J+E)ZhE)ZhE)ZhE)ZhQ;h_jt\whh6@ h|))ZhE)ZhE)ZhE)ZhEm@ 4Rmh| vw4@ x?;h_J+E)ZhE)ZhE)ZhE)ZhQ h| ~h| h| q 4@/"E-RH"E-RH"E-RH"E-R q[ 4@/:n;xG 4Km @ 4Rnw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@ h| qw4@ ;;h_jt<hhE)ZhE)ZhE)ZhE)ZxX 4@/:vh'xG 4Km h|))ZhE)ZhE)ZhE)ZhEm h| б;h_jtOh9;h_J+E)ZhE)ZhE)ZhE)ZhQ#WxG 4Km;h_jt @ 4Riw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@ h| w4@ x:;h_jjw4@ ~WD-RH"E-RH"E-RH"E-RHѢ6@VxG 4KmV 4@/Zuw4@ hfxG 4KwEH"E-RH"E-RH"E-RH"E-jN+h6@봃w4@ hNh h|))ZhE)ZhE)ZhE)ZhEmqw4@ hwh @ 4Ru 4@/"E-RH"E-RH"E-RH"E-R :h@ 4Ru>;h_j7ahǛ#qRmhfxG 4KwEH"E-RH"E-RH"E-RH"E-j+h6@밃w4@ hNh6;h_J+E)ZhE)ZhE)ZhE)ZhQVxG 4KmV;h_j @ 4R8;h_J+E)ZhE)ZhE)ZhE)ZhQ;h_jwhh6@:;h_J+E)ZhE)ZhE)ZhE)ZhQu] 4@/Zh6@zw4@ h?~WtZ6@mw|1uk,#faKm[fa0 YWR,7|_jûy,;x7O'~W1111'{1|X y< a0Kmmwy>x{1g=hn1ϘG| к[>>|{1=h=n1Ϙg| zylgGRpwyhw0c8 =FaF((/Z»QQ_jrFaFa| QQ6@iw0 0 h=n숣aKmޭ38p$| z:Q',Rfx7 0 KmnZ((/iFaFa| M'x7 =FmMh(>2}j mᝍ8pqKmn jXg/M;xg+8p<ݦ;Fa>—ލ=fcGSmІSO/~?1cp|1""ǟc~w?|o}; | m;6@ywQN6@6ݑ8FaKmn('/ QQ6@Fpu/ xwq_jt3݄݀QR nqpq0 Kmnvw0 0KmnG 8—ݎ;p4q/oh8=| xw=FV Gb| m:xaļaKmnީ6h6ƻ SO?׿=~LJo nw0qcmn6،x/m;3Kmn ޭ qQ8vwG:—vY{R0c| mww0CA|yrSOO??w?=v@OXW/xuı/6xwXKmn»#q\1 _jtGx8N88KmnFaF ލSmn0|[nXxڠ Kwp)ܟrǧ?ӿ?;v_ktaǑXgRhXGFmMh(>2}j Ѝ;8cqHx7 {Q6@{GRQF| ;m8Kwp)|{/_ ~3?cmn'»=pKm5»#c;R{Ѱc^;0 u/q:b0 ~u( _jt?f'/6xw4 ~"[GѰKmq/N~6@ $/_J+ݏ7x'?68^jt?ûqO K%y=n>BCkTn_eߗƻ;~?}_yw_/gxw!eןjt?a˯.R}mR޶&4MxSy~d~_j_opsP4ʶM;E ]d(Ӊ2HB9 p~8^ERҿm[-M(R4Fz:_F|-Zo xM2HPws8ΨmvP4R(˯C ww*ZwwSm=7ݍEێ(onwwVtwϗߡ<]]z3.OEmEyrh{r\4gG9?r\t?(~}ݏz~;E|r=h:Q緟ޞ r¢_.υPυiEyQx{?;stG#?_EӶC4q_)V˹C8P.HGl"W9ƞWwz)j7_?jJ~=E#Ƈt?<]&T$m(hgԶj{() 4@/:vh'xG 4Km h|))ZhE)ZhE)ZF41T REL[\]FINDMEM COM^FINDMEM DOC_`aFINDMEM Z80>bcdefghiFMT20 COMjklFMT20 DOC.mnopqrFMT20 SYMsO1DRAFT3COM tuO1DRAFT3DOCvO1GRAPH3COM wxO1GRAPH3DOC2yz{|}~O1GRAPH3ZQ0KONSCR-ULASM#ONSCR-ULCOMONSCR-ULDOCSET4C AQMpSET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM  U%@M^6D`0"W,P("^,P(f@`[(R 5@``K4 `K4 Y Px2Jm_GSh~' Ocp kZ`pp%Sp%,P(| e@"0$n3@ p4@ 'gp=t?O (,0za{h @P X`G 'gp=t?O (,0CPht j! ;F@ xM8B&` 4la]op%dB.s8DRf "8$l]g`@`Bw !p6pL@hYB! ;F@p<\ P+ P+ P+ P+ P+id!OO` ( ]ggp!lS0g4c``6Dc` l 10F6;FGFKT">,P(bu6A`K4 x=P``.#0 z8z͵z͹{͵{͹ ͵͹ͭʹ5GLb(, (d$ !ͭ(,!$> w#$!!*'O#'##>wͭ( (F'( w#>ww#>wͭ( (!'(08:8 A8G0wְ x2!R:=( G# :_RPRҤ!R'PB8|BJW|OB0A P J#{([O(a#J+{(e(f+J|P * '0PB*B'|0 'z( J*P 'z(OJ!PW0:8ɠĺӠ٠٠٠κӺ$ONSCR-ULASM#ONSCR-ULCOMONSCR-ULDOCSET4C AQMpSET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM FINDMEM, written May, '86, in Z80 assembly language This program displays the memory of an Osborne 1 or Vixen computer in an 80 column by 23 row format, with all normal ASCII characters displayed, and all others replaced by dots. The hexadecimal value of any character under the moveable cursor, and its location in memory, is shown at the top of the screen. The cursor and screen are moved using a sub-set of WordStar commands: ESC to quit ^Q to beginning of memory ^E cursor up ^X cursor down ^D cursor right ^S cursor left ^C next screen ^R previous screen ^Z scroll screen up ^W scroll screen down ^F search for a string of ASCII and/or hexadecimal characters ^L repeat search (actually, the CTRL key doesn't have to be pressed) After pressing ^F: To input normal ASCII characters at the "FIND: " prompt at the top of the screen, first input a ' (a single quote or apostrophe), and then the character(s) to be found. A ' is not necessary at the end unless you also want to include a hexadecimal number or numbers after the ASCII character(s). Hexadecimal numbers don't need the '. The program will only accept hexadecimal characters if the ' is not entered first. Three input examples: 'LD'09'A,(HL) 0D0A'Hi,there C306D3 The search for the string to be found will begin from the cursor location. If the string is found, the line it is on will be moved to the top of the screen, with the cursor on the first character. Repeated searches for the string can be made by pressing ^L. If you move the cursor down in memory, the repeated search will be made beginning at the cursor location. The program FINDMEM itself will be loaded into memory from 100H to 3FFH, although address 400H is used by the program to store the length of any string to be found, and space beginning at 401H is used to store that string. When the cursor is at a location less than 401H in memory, and you enter a string to be found, that string will always be found at 401H. The address 3FEH is used by the program to store the second half of the address of the top left character on the screen, and 3FFH is used to store the first half. Initially they're 0000, but you'll see them change when you use ^W or ^Z to move the screen. The display uses the memory-mapped video capability of the Osborne 1 and Vixen, so it is extremely fast, but it will only work on those computers. For use in the Public Domain. Not to be used for sale or profit. Comments, suggestions, questions... Doug Cox 140 Monroe Dr Palo Alto, Ca, 94306 (415)949-0624 used for sale or profit. Comments, suggestions, questi The program FINDMEM itself will be loaded into memory from 100H to 3FFH, although address 400H is used by the program to store the length of any string to be found, and space beginning at 401H is used to store that string. When the cursor is at a location less than 401H in memory, and you enter a string to be found, that string will always be found at 401H. The ad;FINDMEM.Z80 Doug Cox May '86 ;for the Osborne 1 and Vixen BDOS EQU 5 ORG 100H JP BEGIN EXIT: LD E,1AH ;end-of-file marker if looking at this .COM file LD C,2 ;clear screen CALL BDOS RET ;to CP/M or calling routine BEGIN: CALL EXIT ;to clear screen LD A,(0F001H) ;check to see if this is an Osborne 1 or Vixen CP 20H ; by seeing if an Osborne 1 screen memory RET NZ ; location = SPACE & exit if not LD DE,BANNER ;' MEMORY LOCATION: CONTENTS: $' LD C,9 ;print string CALL BDOS ;display mem LOOP1: LD HL,0 ;beginning of memory LD IX,0 ;initialize cursor pointer LD IY,0F080H ;initialize cursor location LOOP2: LD DE,0F080H ;beginning of screen memory location LD (TOPLEF),HL ;to hold memory location that goes into 0F080H LOOP3: LD B,80 LOOP4: LD A,(HL) CP 20H JR C,LPJP ;(HL) < SPACE CP 80H JR C,LOOP5 ;(HL) =< 'DEL' LPJP: LD A,2EH ;'.' LOOP5: LD (DE),A ;put char on screen INC DE INC HL DJNZ LOOP4 ;put the next line on the screen NEXLIN: EX DE,HL LD BC,48 ADD HL,BC EX DE,HL LD A,D CP 0FCH ;25th line JR C,LOOP3 ;another line if A < 25th line ;if 23 lines have been displayed then... CURSOR: SET 7,(IY) ;highlight or underline cursor position PUSH IX POP DE LD BC,0F011H ;put memory location in header CURSR2: LD A,D CALL HEX1 LD A,D INC BC CALL HEX2 LD A,E INC BC CALL HEX1 LD A,E INC BC CALL HEX2 LD A,(DE) LD BC,0F020H ;put memory contents in header CALL HEX1 LD A,(DE) INC BC CALL HEX2 WAIT: PUSH HL ;future (TOPLEF) CALL READKBD WAIT2: POP HL AND 1FH ;make bits 5, 6,& 7 = 0 CP 11H ;^Q JP Z,LOOP1 CP 5 ;^E JP Z,CURUP CP 18H ;^X JP Z,CURDN CP 4 ;^D JP Z,CURRT CP 13H ;^S JP Z,CURLFT CP 1AH ;^Z JP Z,DOWN CP 12H ;^R JP Z,PREV CP 17H ;^W JP Z,UP CP 3 ;^C JP Z,NEXT CP 1BH ;ESC JP Z,EXIT CP 6 ;^F JR Z,FIND CP 0CH ;^L JR Z,AGAIN JR WAIT AGAIN: PUSH HL JP AGAIN3 BACK2: LD DE,0F024H LD BC,13 LD HL,PRESS ;'PRESS ANY KEY' LDIR BACK3: CALL READKBD OR A JR Z,BACK3 BACK: CALL CLRLIN JR WAIT2 CLRLIN: LD B,44 LD HL,0F024H LD A,20H CLRLOP: LD (HL),A ;erase ' FIND: ' INC HL DJNZ CLRLOP RET FIND: PUSH HL ;possible future (TOPLEF) LD BC,7 LD DE,0F024H ;screen location for... LD HL,FINDIT ;' FIND: ' LDIR ;B = 0 LD HL,0F02AH LD DE,HEXLOC ;to store hex nos. FINDLP: CALL KBD2 ;read keyboard (BC,DE,HL saved & char in A) RRCA ;move it to left half RRCA RRCA RRCA LD C,A ;store it INC HL CALL KBD2 ;for 2nd char OR C LD (DE),A ;save it in HEXLOC INC HL INC HL LD A,0A0H ;cursor LD (HL),A INC DE INC B ;for count in (HEXNUM) JR FINDLP ALPHLP: PUSH BC PUSH DE PUSH HL CALL READKBD OR A POP HL POP DE POP BC JR Z,ALPHLP CP 0DH JR Z,KBDXIT CP 27H ;' JR Z,PREKBD LD (DE),A OR 80H INC DE INC B ALPHA: LD (HL),A INC HL LD A,0A0H LD (HL),A JR ALPHLP PREKBD: LD (HL),A INC HL KBD2: LD A,0A0H LD (HL),A KBD: PUSH BC PUSH DE PUSH HL KBDLOP: CALL READKBD OR A JR Z,KBDLOP POP HL POP DE POP BC CP 0DH ;CR JR Z,KBDXIT CP 27H ;' JR Z,ALPHA CP '0' JR C,KBD ;if less than '0' CP ':' JR C,KBDSKP ;if a number AND 0DFH ;make letters uppercase CP 'A' JR C,KBD CP 'G' JR NC,KBD KBDSKP: OR 80H ;highlight or underline it LD (HL),A ;put it on the screen SUB 0B0H ;'0'+80H CP 10 RET C ;if digit SUB 7 ;if letter RET KBDXIT: POP HL ;RET address CONT: LD A,B OR A JP Z,BACK ;if no entry LD (HEXNUM),A AGAIN3: LD HL,0FFFFH ;end of memory PUSH IX ;cursor location in memory POP DE INC DE OR A ;clear carry SBC HL,DE PUSH HL ;for BC counter PUSH DE ;IX CALL CLRLIN AGAIN2: POP HL ;IX POP BC ;counter LD DE,HEXLOC ;put hex storage address in DE LD A,(DE) ;hex num to look for CPIRLP: CPIR ;HL is incremented after the find JP PO,BACK2 ;not found PUSH BC ;for subsequent count PUSH HL LD A,(HEXNUM) DEC A OR A JR Z,CONT2 ;if only one hex num LD B,A ;for count CHEKLP: INC DE ;to check next hex num LD A,(DE) CP (HL) INC HL JR NZ,AGAIN2 ;not a match DJNZ CHEKLP CONT2: LD A,(HEXNUM) LD E,A LD D,0 OR A ;clear carry SBC HL,DE ;to get found hex num start address POP BC ;pushed HL POP BC ;pushed BC POP BC ;old HL (TOPLEF) PUSH HL POP IX ;put HL in IX PUSH HL ;save HL ;Divide HL by 50H & subtract remainder from HL for TOPLEF LD DE,50H OR A ;clear carry DIV: SBC HL,DE JP NC,DIV ADD HL,DE ;Get remainder EX DE,HL ;Put remainder in DE LD HL,0F080H ADD HL,DE PUSH HL POP IY ;Put remainder + 0F080H in IY for cursor POP HL ;Memory location of found char OR A SBC HL,DE ;Char location - remainder for TOPLEF JP LOOP2 CURUP: RES 7,(IY) PUSH HL ;save HL PUSH IX POP HL ;put cursor pointer in HL LD BC,80 SBC HL,BC JR C,CURUP1 ;if cursor at memory beginning PUSH HL POP IX ;put it back PUSH IY POP HL ;put cursor location in HL LD A,H CP 0F0H JP Z,CURSKP ;if cursor at top of screen LD BC,80H SBC HL,BC PUSH HL POP IY ;put it back CURUP1: POP HL ;get HL JP CURSOR CURSKP: POP HL ;get HL JP UPSKP CURDN: RES 7,(IY) LD A,H CP 0FFH ;see if at end of memory JP Z,LOOP1 PUSH HL ;save HL PUSH IY POP HL ;put cursor screen location in HL LD BC,0FB4FH SBC HL,BC ;see if at line 24 POP HL ;get HL JR NC,DOWNSK LD BC,80H ADD IY,BC LD BC,80 ADD IX,BC JP CURSOR CURRT: RES 7,(IY) INC IX PUSH IY POP DE ;put cursor location in DE LD A,E CP 0CFH ;right side of screen memory JR Z,LEFT1 CP 04FH ;also right side of screen memory JR Z,LEFT2 INC IY JP CURSOR CURLFT: RES 7,(IY) DEC IX PUSH IY POP DE ;put cursor location in DE LD A,E CP 0 ;left side of screen memory JR Z,RIGHT1 CP 80H ;also left side of screen memory JR Z,RIGHT2 DEC IY JP CURSOR DOWN: LD A,H CP 0FFH ;see if at end of memory JP Z,LOOP1 DOWNSK: LD BC,80 ADD IX,BC LD HL,(TOPLEF) ADD HL,BC JP LOOP2 PREV: LD BC,1840 ;23*80 JR UP2 UP: LD BC,80 UP2: PUSH IX POP HL SBC HL,BC ;decrease cursor pointer by 80 PUSH HL POP IX UPSKP: LD HL,(TOPLEF) SBC HL,BC ;decrease HL by 80 JP C,LOOP1 ;if at beginning of memory JP LOOP2 NEXT: LD A,H CP 0FFH ;see if at end of memory JP Z,LOOP1 LD BC,1840 ;23*80 ADD IX,BC JP LOOP2 ;next page LEFT1: LD A,D CP 0FBH ;line 24 JR Z,LEFBOT INC D LD E,0 JR LEFTSK LEFT2: LD E,80H LEFTSK: PUSH DE POP IY JP CURSOR LEFBOT: LD E,80H PUSH DE POP IY ;put 0FB80H in IY LD HL,(TOPLEF) LD BC,80 ADD HL,BC JP LOOP2 RIGHT1: DEC D LD E,0CFH ;column 79 JR RIGHT3 RIGHT2: LD A,D CP 0F0H ;beginning of screen memory JR Z,RTTOP LD E,4FH ;also column 79 RIGHT3: PUSH DE POP IY JP CURSOR RTTOP: LD IY,0F0CFH ;top right of screen memory LD BC,80 JP UPSKP READKBD:LD C,6 LD E,0FFH CALL BDOS RET HEX1: RRA ;put left 4 bits on right RRA RRA RRA HEX2: AND 0FH ;mask off left 4 bits ADD A,30H ;move hex numbers up to decimal range CP 3AH ;greater than '9'? JR C,NUM ;jump if not ADD A,7 ;convert to A,B,C, etc NUM: OR 80H ;highlight or underline it LD (BC),A ;put it in header RET ;see calling routines for what these bytes put on the screen FINDIT: DB 0A0H,0C6H,0C9H,0CEH,0C4H,0BAH,0A0H PRESS: DB 0D0H,0D2H,0C5H,0D3H,0D3H,0A0H,0C1H,0CEH,0D9H DB 0A0H,0CBH,0C5H,0D9H BANNER: DB 0A0H,0CDH,0C5H,0CDH,0CFH,0D2H,0D9H,0A0H,0CCH,0CFH,0C3H,0C1H DB 0D4H,0C9H,0CFH,0CEH,0BAH,0A0H,0A0H,0A0H,0A0H,0A0H,0A0H DB 0C3H,0CFH,0CEH,0D4H,0C5H,0CEH,0D4H,0D3H,0BAH,0A0H,0A0H,24H TOPLEF: DS 2 ;memory location of char at screen's top left HEXNUM: DS 1 ;number of hex numbers to search for HEXLOC: EQU $ ;hex numbers or characters to search for END n's top left RSOR RTTOP: LD IY,0F0CFH ;top right of screen memory LD BC,80 JP UPSKP READKBD:LD C,6 LD E,0FFH CALL BDOS RET HEX1: RRA ;put left 4 bits on right RRA RRA RRA HEX2: AND 0FH ;mask off left 4 bits ADD A,30H ;move hex numbers â*.60  ' * 9  ~ r l Y > q> _ͭچ ͭz~s_#~rW#6~{0q~w#~w#~w**DM V:b:pG:q"ͼ*DMM*pDMJS*#*aR5*p#"p:<24-: -H e>2>*q!"N:d2>Eqÿ exyj!`~#:g#*R:g~#*:d<_"*#"*q#:gp#":2:~o&)))))@r! JM>2>2!@"#!`":eJ!yl)=g:cGq}2*RDMګxʠ`iͫ"Áͫ"!:<22~|ڿ|.:22~}2:G*!w#:gw# Ɛ'@'q}/o|/g#ɷ|g}o!`@RDM! #^*`RDM!#^!@"@P@+^2{ @! >2} y! !U %! ><“<u 2ee:__ :^OG2e@)2^ 2_:25>:  e>2]23:]<2]!/>E5>*q>2]:<(jQ L*"H"K"N"Q"T "W:_:OG^#V#"!~#foa:jJ:kJi&":2r_  í*n|}T e!"p#"ª[n*pRo e;">*q*+PYR  e/ e*K;|*fPYR5j*|ɯ2<25!@">2=2yȐ0AO:`(#  ":<3 e>1 e>2´V:]e: 2>2`Ove:2>2`Oe9( 'Q4j> q *|(!~+e e:ʺe:J>qYʺʺjå>2=2y[BAD] EC` FMT V2.0 for Osborne 1 DD )(c) 1986, by Brent B. Powers( $ System successfully transferred. $ Unreadable system, sysgen cancelled. $ Cannot write system, sysgen cancelled. $ Reading system tracksT$ Writing system tracks$ Insert new disk, and press any key (ESC to stop).$Single Density Disk Found. Cannot be used as double density.  $ Formatting: T$ System tracks skipped: $ Testing data groups: T$ T$ Testing system tracks :T$ Testing directory area :T$ Bad block: $No$ bad blocks found $ +++ Warning...system tracks bad +++ $ Bad directory area, try reformatting $ NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNsferred. $ Unreadable system, sysgen cancelled. $ Cannot write system, sysgen cancelled. $ Reading system tracksT$ Writing system tracks$ Insert new disk, and press any key (ESC to stop).$Single Density Disk Found. Cannot be used as double density. ************************************************** * * * FMT V2.0 for Osborne 1 Double Density * * * * A disk formatting utility * * Format, Version 2.0 * * * * Brent B. Powers * * * * Copyright (c), 1986 * * * * November, 1986 * * * ************************************************** A program to format disk for divers machines, as long as they be the first child of Adam Osborne, with density doubled. My frustration with the inability of the Osborne COPY.COM program to accept input from SUB led to the development of this program. Simply put, this program automatically formats, checks the system tracks, and, if possible and desired, copies the system onto the newly formatted disk. It then checks the data area of the disk to ensure that it is readable; if not, the file [BAD].SEC is written. There are, of course, some caveats. The most obvious is that this will format only double density disks. Secondly, it will work only on an Osborne 1. In fact, I know for sure only that it will work on an Osborne 1 with ROM Version 1.44, although it is my suspicion that any ROM 1.4 or above will work, and I would appreciate hearing either confirmation or denial of this. Finally, those of you with hard disks and only one floppy will not be able to use the capability of the program to automatically sysgen your disks, although why you would really need to, I don't know. In any case, the program is patchable to work on any number of configurations, with some limitations. Additionally, I have included one more program which was of use to me when writing this beast. Feel free to do whatever you wish with UNFMT.COM, which actually destroys not only all data, but also the format of a disk in drive b. Actually, you could prevent unauthorized access to 'erased' files this way, if that should be of any interest. PATCHING In which we describe manifold ways of making the magic truly one's own The following patch points are active (All offsets are given in hex, base 100) Offset Name Default Usage ================================================== 0103 BADUSR 0 Destination User area. This byte is the number of the user area where the file [BAD].SEC will be written. 0104 BEEP 1 If CONTIN is set on, this byte should be 1 if you wish the program to beep when prompting for the next disk, and should be 0 if you enjoy silence. 0105 CONTIN 1 CONTINuous operation. This byte should be 1 if you want the program to prompt for the next disk and continue after a format/sysgen. It should be zero if you wish to have the program return to CP/M after one disk has been formatted. 0106 DDRIV 1 Destination DRIVe. This Drive is the one that will be formatted and sysgened. Note that this would be 0 for drive 'A', 1 for drive 'B'. 0107 DOSYS 1 DO SYStem. This byte should be 1 if you want an auto- matic sysgen, 0 otherwise. 0108 NRETRY 2 Number of RETRY's. This byte specifies the number of times to attempt to format a track, in the event that it does not format properly. It should probably be left at 2, except under unusual circumstances. 0109 REPORT 0 If you wish a report of the group number of each bad group found, this byte should be changed to 0. As it is, bad blocks will be indicated with an E, and good ones will be indicated with an asterisk. 010A SDRIV 0 Source DRIVe. This drive's first three tracks will be copied onto the first three tracks of the destination drive, if DOSYS (which see, below) is active. For the user's convenience, a Z8E-compatible symbol file, FMT20.SYM, has been included. The command Z8E (8) FMT20.COM FMT20.SYM will load things up properly. Precedence of Patch Points: As should be obvious, SDRIV will have no effect if DOSYS is set to off; also BEEP will have no effect if CONTIN is set to off. Patch examples: The Osborne 1 user with a standard system (i.e. no hard disk) will probably leave the patches as they are, although he/she may wish to turn off the beep or continuous operation. The user with a Hard disk will probably set DOSYS to off, as hard disk system tracks are most probably incompatible with floppy system tracks. Acknowledgements In which we pay tribute to hackers beyond our ken My heartfelt thanks to the authors of Z80MR, a wonderful, public domain, Z80 assembler, and Z8E, a fantastic interactive debugger, also public domain, of a quality unmatched even in the MSDOS sphere. Future Enhancements In which we explain that there are none No enhancements whatsoever are now planned. For those souls who are familiar with my travails with FMT10, I will say that I solved the problem of the file not closing by doing an extended bios sector write of the entire directory. Legal Nonsense (It seems to be obligatory) In which we hope to make threats sufficient to stay the dark forces of the world This program is herebye released by the author to the public domain, for non-profit use only. Inna Gadda Da Vida, et al, ex post facto. Copyright, (c) 1986 Brent B. Powers Oakland, CA 27 November, 1986 Available on: FOG #33, Oakland, CA (415) 655-1206 The MegaMonster, Berkeley, CA (415) 845-2164  Available oDOS sphere. Future Enhancements In which we explain that there are none No enhancements whatsoever are now planned. For those souls who are familiar with my travails with FMT10, I will say that I solved the problem of 0105 BADUSR 0109 BEEP 0108 CONTIN 0103 DDRIV 0106 DOSYS 0107 NRETRY 010A REPORT 0104 SDRIV MEM EDCOM52 COMEDCOM52 DOC1 !"#$%&EDCOM52 ZQ0w'()*+,-./012345F41T COM678DRIVES DOCJ9:;<=>?@ABF41T MQC:CDEFGHIJF41T PQNKLMNOPQRSTUVWXYZF41T PQN[F41T REL\]^FINDMEM COM_FINDMEM DOC`abFINDMEM Z80>cdefghijFMT20 COMklmFMT20 DOC.nopqrsFMT20 $$$O1DRAFT3COM tuO1DRAFT3DOCvO1GRAPH3COM wxO1GRAPH3DOC2yz{|}~O1GRAPH3ZQ0KONSCR-ULASM#ONSCR-ULCOMONSCR-ULDOCSET4C AQMpSET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM : g."BDM>> #0 :2( PBú0 !:}!!:}!-:}!1:}!D:}!H:}*:(>> 2͙a8!8  !P#nfzSEXD FARC  _e_!6!6:2  (!!ͤðͳ:: *v+"v*+" :=2> =2ͼ=ͤͳ:5: *v#"v*#"< :<22ͼ=ͤ!ͳ: :=2> =2ͼ:2!5*vR"v*R"=ͤhͳ:!:< :<22ͼ:2!4*v"v*"=!"6!".!"&!"!"!"!e"!_" '  1:G! "x x(T +~C!^#*xK^ 7# x (.  *x *[xRz( #~x 2 >2" ͙Q"\2h2k2|\!6:! DM~#"KB0*B}A|A*+B| w#E\#|\g!z\ a  ABORTING, disk is full...$00 0w>0  p À(:*:/w*:w:< :<22 Vert ' " Horiz ' " From RETURN: ' "=>R$PRINTING (if your printer is turned on)... (press any key to abort printing)$ O1DRAFT3GRFž Press "Q" to quit without saving, or any other key to save changes $K< :<22ͼ=ͤ!ͳ: :=2> =2ͼ:2!5*vR"v*R"=ͤhͳ:!:< :<22ͼ:2!4*v"v*"=!"6!".!"&!"!"!"!e"!_" '  1:G! "x x(T +~C!^#*xK^ 7# x (.  *x *[xRz( #~x 2 >2" ͙Q"\2h2k2|\!6:! DM~#"KB0*B}A| For use on an Osborne 1 or VIXEN, with an Epson- compatible printer. O1DRAFT3.COM can't load any files written with O1DRAFT2.COM or O1GRAPH2.COM, because it has different I/O subroutines (which substantially reduce the size of saved files). See O1GRAPH3.DOC. O1DRAFT3 differs from O1GRAPH3 in three ways: 1) Instead of showing the cursor line and column at the top of the screen, vertical and horizontal feet and inches are shown. 2) After you press RETURN, the distance the cursor has moved (in feet and inches) from where you pressed RETURN will be shown at the top right of the screen. 3) If you don't enter a filename after "O1DRAFT3" at the "A>", the default filename will be "O1DRAFT3.GRF". Copywrite November, 1986, by Doug Cox. For use in the Public Domain only; not to be used for sale or profit.DRAFT3.GRF". Copywrite November, 1986, by Doug Cox.SET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM : g."BDM>Ù> #0 :2( PBü0 !:a:2!!*:a:2.*:(>> 2}a8! !5#nfzSEXDFARC  @Fc@:2  (!A!8͈È͗:: 1**+"**+"1(=í>82:=2=͈͗:P: 8**#"**#"8(<>12:<2=͈͗:20:=(%2**R"**R">84:=2!=͈I͗:2x:1|:<2!=!"6!".!"&!"!"!"!F"!@"  ͠͠1͠:G! " x(T +~C!^͠#*K^͠ 7# x (. ͠ ͠* *[Rz( #~X ͠2͠ >2J }Q\2h2k2|\!6:! DM~#"KB0*B}%|%*+&ÿ| 6#)\#|\g!z\ E  ABORTING, disk is full...$00 0w>0  p d(:*:/w*:w Line ( ) Col ( )=>R$PRINTING (if your printer is turned on)... (press any key to abort printing)$O1GRAPH3GRFž Press "Q" to quit without saving, or any other key to save changes $ 11K:20:=(%2**R"**R">84:=2!=͈I͗:2x:1|:<2!=!"6!".!"&!"!"!"!F"!@"  ͠͠1͠:G! " x(T +~C!^͠#*K^͠ 7# x (. ͠ ͠* *[Rz( #~X ͠2͠ >2J }Q\2h2k2|\!6:! DM~#"KB0*B}%|%*+&ÿ| 6#)\ O1GRAPH3.COM allows you to fully utilize the graphic capability of your dot matrix printer, if it's compatible with an Epson. It will only work on an Osborne 1 or VIXEN, because it uses memory-mapped video (it would be extremely easy to make it work on an Osborne Executive). The reason it's printer-specific is that it uses the line spacing and graphic initialization codes of the Mannesmann Talley printer (an Epson- compatible printer). If you're familiar with Z80 assembly language, it would be simple to change these codes (see the P.S. at the end of these notes). O1GRAPH3.COM can't work with any files saved with O1GRAPH2.COM or O1DRAFT2.COM, because it uses different I/O subroutines (to substantially reduce the size of saved files). To run it, type O1GRAPH3 at the "A>" prompt. You will see an almost blank screen with "Line 1 (1) Col 1 (1)" at the top line, and a round cursor near the middle of the screen. The cursor is now at the top left of an area that corresponds to a sheet of paper 80 columns wide in you printer (line 1, column 1). The number "1" in parentheses after "Line 1" corresponds to the top hole in the needle tip ink sprayer of your dot matrix printer. This needle tip is aligned vertically, and may have more than 8 holes through which ink is sprayed onto your printer paper, but in the graphics mode only 8 holes are utilized. Initially, all holes are closed (turned off electronically); with this program you control whether or not each hole will be programmed open or closed. The "1" in parentheses after "Col 1" represents one of 8 horizontal dots per column that can be sprayed onto your printer paper to become part of a graphic character. In the graphic mode, there really aren't 80 columns, there are 640, which is 80 times 8, but 80 columns of 8 dots each is used in this program to provide a more normalized cursor location indication. The cursor is moved with the ARROW KEYS (either in CP/M or WordStar configuration), or with their corresponding control characters, and with CTRL-F, CTRL-A, CTRL-R, and CTRL-C (as in WordStar). The cursor isn't actually moved, the rest of the screen moves in relation to the cursor. Thus, pressing the right arrow key moves everything on the screen to the left. Of course the cursor/screen can't move if the cursor is at the edge of the corresponding printer paper's limits. (When you begin, the cursor can't be moved to the left or up, since it's already at the top left location.) To move the cursor one line or one column instead of one dot location, press one of the following control characters: CTRL-A = LEFT ONE COLUMN CTRL-R = UP ONE LINE CTRL-C = DOWN ONE LINE CTRL-F = RIGHT ONE COLUMN To imput a graphic dot in the desired location, press either "S", "E", "X", or "D". An underlined shaded box character will appear, and the screen will move as if an arrow key was also pressed. These letters correspond to the control characters that WordStar uses for arrow keys: S = LEFT E = UP X = DOWN D = RIGHT To input 8 graphic dots in a row, press either an "A", "R", "C", or "F": A = 8 LEFT R = 8 UP C = 8 DOWN F = 8 RIGHT To erase inputs, press the SPACE bar. "<>" will appear at the top left of the screen. Now with each use of an ARROW KEY, if a shaded box was under the cursor, it will be erased. And with each use of CTRL-A, CTRL-R, CTRL-C, or CTRL-A, 8 shaded boxes in a row can be erased. To get out of the erase mode, press the SPACE bar again. When you want to print the graphics you've created, turn your printer on, and press CTRL-P. To abort the printing at any time, press any key. To quit, press ESC. You'll see the prompt: "Press "Q" to quit without saving, or any other key to save changes" If you press any key other than "Q" (or "q"), the graphics you made will be saved in a file called O1GRAPH3.GRF, unless you named a file when you ran O1GRAPH3 (by typing O1GRAPH3 FILENAME at the "A>", in which case FILENAME will be saved). Previous files of the same name will be written over with the current graphic file. The length of the file is dependent on the size of memory in your computer. On my computer, it will only make about 75 compressed lines of graphics. If you want to make a graph at least as long as one page, just make two or more files and print them one after the other. There is one strange but harmless feature in this version... If any graphic characters were imput at the far right of the graphics area, and if the cursor is at far left of the graphics area, you'll see those characters to the left of column 1. Likewise, if the cursor is at the far right of the graphics area, you'll see any graphic characters that were input at the far left, to the right of column 80. It was just a little too difficult to blank those images out. Copyright November, 1986, by Doug Cox. For use in the Public Domain; not to be used for sale or profit. When used for your own purposes, feel free to change the name, these notes, or the source code (O1GRAPH3.Z80, which should assemble with the Public Domain program Z80MR. I used SLR's Z80ASM, which is a vastly superior assembler, but costs $50). If you have any questions or suggestions, please call or write or leave a message of FOG #1 BBS. Doug Cox 140 Monroe Dr Palo Alto, Ca 94306 (415) 949-0624 P.S. To print graphics, this program first changes the line spacing of your printer so that each graphic line will touch the preceding graphic line. This is done with the input of an Escape character (1B in hexadecimal), followed by the character "1" (31 in hex). After the grapic printing is completed, it re-initializes your printer with another Escape character, followed by the character "2". The graphics mode must be entered at the beginning of each line. This is done by imputting an Escape character, followed by the character "K" (4B in hex), followed by the number of graphic inputs to be made on that line. This number must be input in hexadecimal, with the largest part of it (the most significant digit) last instead of first (for example, 640 in hexadecimal is 0280. 02 is the most significant digit, and would be entered after 80 hexadecimal). t (for eions, please call or write or leave a message of FOG #1 BBS. Doug Cox 140 Monroe Dr Palo Alto, Ca 94306 (415) 949-0624 P.S. To print graphics, this program first changes the line spacing of your printer so that each graphic line will touch the preceding graphic line. This is done with the input of an Escape character (1B in hexadecimal), followed by the character "1" (31 in hex). After the grapic printing is completed, it re-initializes your printer with another Escape character, followed by the character "2". The graphics mode must be entered at the beginning of each line. This is done by imputting an Escape character, followed by the character "K" (4B in hex), followed by the number of graphic inputs to be made on that line. Thv@/O1GRAPH3.Z80Z  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYo9wϯ[xG6QM mN]Q_nK}l˔_ХH|0D8]7@yAQG폙pG)яݾn3%*Fvn3`]}(_drJGJ'L{v1^MpΔWFC)~v)?%Ƈq]MAS;yeIn-WS}:f{%`EJ} S2Ͽ_(_-#;=n2VJ0,2vU\aCw\WStw| %:d'Dxm W$Ln@$ IS1t}\WS(kDn0|& 7-)k}i l]|%SnhxC?"RX nS4q\*k\5qHɰO6>)$<)kd캫ƜJ:v%`]XӬ/DUcIDUc)c"[,}H6?l(RS(tFevVֈܼݷg:+m5c5tS}N2ðusLɬqhM6|}o%`κ'%`]J1vJm؈{`/>%%})];\5dcO4{ ,J`#fqRS7=zC?(cH XC^b|zΐ;S^&!=%j %@QF'WZ Ձ]}H4aݜ6bFGj5:7g(Ƒ%`uJ0JpٵcUZs CwE}IvӢ$#+%бEb̅2onLa( M=)m2vii.17DDurGCg5:~Wnֈ].J5s 0f t%-:%`m +MsRMIdGM %rOӮ0/Jp[;%Gm }XI3v5/֘uH "c% +mK%JuбX ",0@::еKO+ykMбh6}Gmm~%`͏QUij#6h~ʮj%`1*]\6SϮp`V$?N4?FeW }SO@s:!|M͢YU1E vcvuQQ7oJwCy 1]׻] m]+m ݗܿ(Q_j`κniΘMa%~W{9BroE ",0|CN!еKO+ykK`NIQʱDgɿ|MDiW@6}%g讨/7Ɏ@D?(ܘ{J<]3鲩(ܘ{=Md(vx'-LT ]aW֨݇JOWֈU/J`#ftUc 0P+}m ]'a|߂Q֘?T:qqF>T:َ(UFFo(_n"]CK]^7{?)k*F~~q%Cy ;S^Pix%`lxQֈU-vQј3^6ųPn@I LPֈܫ΀ʟLI9Qvb %MbV?o`mu i~')/쯘`M0X)(_ix%J'ʼ]uq uC⍒"& +s̉_Xno'Ce}=l1#/V[\6uv|||R} W)vd{ 6B}1ˏ>|mq(kP_ovfl~4?LvQ}[VJP5:V Lg}Vbۨc?f5sO{f܏3O2%7iOSDSJ%:ttNtg:ә~ʈ~%'Va}{xc>}O)s>fikQ]6SCl1=@x:{U:/i9k]VM~ZW5[W5W=~i\դ/##[U_&֍i*;uWU*ݸ8X Xz8{U:VV֛9QR_F6뺠KaɜiF88]07yA)bgM17N¤1i"%` No)ktyAT ܦxvqFH nSiiOF.N#`8q?qVQ"%H3j}oɟ_fFf;Uc)kvEJ>@qD*3,Q%J%UsU`#f+VUykDnG`hsJ)us. mQ e)k]h)-%gwU/%j%BJ%`\5:`L)mgwUc Ju_(_R%`&^\cFnnǒcH "cc%`KX X#c7۸i3^`L)AYdt1۸i3^\J;UٿOJ<5"7vQ[DJ|:5..R4n\XjyJs 0ؼ(.U-vQ1E: [%J4؈(Uz(=~i3wUD_X#rsWn#mBk^w7IQ2]Q_nOt1mo%eZ5cWM|p.ćlnQְJ`#ftz쁡,E5bgS%3ʴim mN"v7uAK` %`Ž'!7 ]S&KK'JF lČ2mZ)kpV1LfJj~Q\UJ;{cDI617;W2_@|W$Fg}zfJi]gi~<5")*mgWMۿ`VJc*-2VֈܜcH nK<2mڏy~zE~OƟ(_ixh_%ּ _JP5U֘m:9_rhwS.E67J52veZ5UIHM;CwE}IvF>CSwl(%eڴ`/JP^2VY%3ʴimXJP%2VX m2mOJ e@wE}Iv%j =]S(kd&~Y5:fEi()ӦֈݜU!c%( U1LfJu+'z1oy]`L)A9c6EʱLCR+vʼn9%@Uֈ\c )gWM˥%eڴӡKtV tl)mgU(AygFl6bF6͔5b{%3ʴimfQOє~&muڜL߹j%-QMDp{|NwE}IvO%eڴ}E XCnnwE ENJC.c`(&~Y(1L?QIJֈV1E)]9ibV9煡$;Ť:бTEJ3^`L)mg׿T%8/6yUh ܦh]6maj+MM](QRec'.?$۫95b7 ]S&KK؈eڴ6Sֈ6bF6͔F̰T XC.#J^ lČN=0EHF}1i" %!7 iǩqDWU{@9,0qKTiDZ\F̰T XCǮ>TuW1c e@}(6bF_:Q  /S(-q%ަ@SM̤D_Z)RGXCno;%` >fJ`#ftzA ("Ƽ~-.`Ea| k0>(k]CGJiX2Ƽf0cQ08)kma؈{`x2O6F X#c#%`9=DӮ P2Qa}j[ƔT{2$Ff_0׆ry&$LJ:v1A X#cg~L(1F2`x2Y 7lo5c%`/JOTEJ`K/Jp[.0pEk^)YWShwSJ5>g1pC{J<]ͯNɺ@ %( U講}E EƮJP%:),}!5 T2DJm)kd>g("Ru>@xm WdSI X#r1xq0@צē~FVm*kD.S֘uH lČ/iƩFnqƋ"c%`]cM]PixӬ~1D:V1KZܖ1JX:v+<\˔`L)mY#j:P/#%`9mal6T)P~$<)AXd),=JX6bƗjFohSOI0ԛIQбN Xúm6bF& 퓍Qb(SְI nKtznL]д+3qKsɖ{d:E񪭚7R$#]5TEJ˔`L)Axj%|%ћ J8U{@ygW}+kmaçL lČN=0>Qoz4>$F ʱKtV ܖh]˱Ps CiSaFN?FJƭ%_ҪBJU?J0 [<CՁ?Q~%_Ҫʫ>CJP^:cu?fJ`#ftzKC%(Ur,)"%M<;ݿC)d(kH ҸUD/+>KtҸt*5t쪶_uW{`̯I-DI+>@w;GݘU)d|w<+Q2m0ur:]r_o0LƇ:$9YOvQ2Z$a|e9:}]9M d,򻢾Oݟ]'%]ujx,%JpTHkD*k5"wޞ6E욱*ktLg%n`z_\ JI8OT/#S1O'%HVIW5Ky@aUc)mjx,(RS+vII_:}kngJ}6bF^ ܦxv~qD8J`qq("R4n<C)jp, <7mܴ/J.J`KVј3^nL]uU-6I)_)c%`9EJƭ%=52v6E X#rsW.]0%b%eڴ6;5Q nKtz쁡 و:=3qDoԷc}͟(HC3_xCL |CLY tg`(vb ו]aWRM|>@wx2w.Ӫi3JoK` J& ›~ΦJ;KajF_7 9yR$>$nYI;_]1!/ Ea|{sowuHrO!kCc:P/1kP9a4*YIFfnm폙mCcm8s.088+j4:@w8opVG݁\f?BN=&IM~ 4_'ΝM@w8S^P(7kCߙxV\5/Wi?ڜkC.>wtoө|%o~ IMC{%\5Ã;ÃtCRl9{_Ra/J~{p~8c<$Q]'r LIP2Q(W$(yʮj^/7@9ㅒMLMfN{v1^IW<tmKm]SXLyA{soJ4agr2E=& 7;S^}7>()ӪtrP$$&K` +MhNns<5&fQ2,J{z[bJYKѾS*ӪZ%6 >/MAJwE}IvBN"rO%\5q>/MAJě.E9QR$>B=U1kPb CPTM vSPҴ+J}t' q]MAƟч8t'%W#Pb~Lp?~i3w|d덡{sox>)hŔǧOo?midl-WL(Ah%{lnQְJ`#ftz쁡,C3_xCL |CLY tg`(vb ו]aWRM|>@wx2w.Ӫi3JoK` J& ›~ΦJ;KajF_7 9yR$>$nYI;_]1!/ Ea|{sowuHrO!kCc:P/1kP9a4*YIFfnm폙mCcm8s.088+j4:@w8opVG݁\f?BN=&IM~ 4_'ΝM@w8S^P(7kCߙxV\5/Wi?ڜkC.>wtoө|%o~ IMC{%\5Ã;ÃtCRl9{_Ra/J~{p~8c<$Q]'r LIP2Q(W$(yʮj^/7@9ㅒMLMfN{v1^IW<tmKm]SXLyA{soJ4agr2E=& 7;S^}7>()Ӫtfilename RD013086.ULA (was ONSCR-UL.ASM) ;****************************************** ; ; ONSCR-UL.ASM ; ; ON-SCREEN UNDERLINING ; ; see ONSCR-UL.DOC for operation ; ; Robert E. Daniels ; December 5, 1985 ; ;.......................................... ; ;EQUATES ; wboot equ 00h ;warm boot bdos equ 05h ;BDOS entry point conio equ 06h ;direct console input/output: input equ 0ffh ;input if 0ffh is loaded in reg. E ;output if anything else is in E bksp equ 08h ;backspace, i.e. "<-" left arrow key lf equ 0ah ;linefeed cr equ 0dh ;carriage return switch equ 13h ;^S, used as toggle switch for ;underlining ON/OFF zap equ 1ah ;^Z, used here as exit signal rubchr equ 1fh ;^- or destructive backspace in WS space equ 20h ;blank space character ;.......................................... ; org 100h ; ;SET UP LOCAL STACK ; lxi h,0 ;clear HL dad sp ;add stack pointer to HL shld oldsp ;save it to memory lxi sp,stktop ;set up new program stack ; ;CREATE TOGGLE, SET TO NO UNDERLINING ; ora a ;set carry flag to 0 ;the carry flag serves as toggle push psw ;save this value ; ;GET INPUT, TEST FOR SPECIAL CHARACTERS, ACT ON THEM ; start mvi e,input ;do input mvi c,conio ;using function #6 call bdos ;and get first/next character ;from keyboard ; test1 cpi 0 ;if no input, jz start ;start over ;this is necessary because once ;in underlining mode 0 is otherwise ;converted to 80h and printed ;with each cycle, filling screen ; test2 cpi zap ;is input ^Z jz alldone ;if so, bail out ; test3 cpi cr ;is input a carriage RETURN? jnz test4 ;if NOT, go to next test call print ;if so, send it to screen mvi a,lf ;along with a linefeed call print ;to screen jmp start ;get the next character ; test4 cpi rubchr ;is input ^-? jnz test5 ;if NOT, go to next test cz rubout ;else go to rubout subroutine jmp start ;get the next character ; test5 cpi bksp ;is input a backspace? jnz test6 ;if NOT, go to next test call print ;if so, send it to screen jmp start ;get the next character ; test6 cpi space ;is input a blank space? jnz test7 ;if NOT, go to next test call print ;if so, send it to screen jmp start ;get the next character ; ;CHECK FOR UNDERLINING ; test7 mov b,a ;first save character value to B ;because recalling the toggle ;flag in the Program Status Word ;will also step on register A cpi switch ;is the character ^S jnz same ;if NOT keep toggle unchanged ;otherwise: pop psw ;recall the toggle setting cmc ;flip the toggle push psw ;save the new toggle setting jmp start ;don't display the toggle command ;just get the next input character ; ;OPTION 1: DISPLAY WITHOUT UNDERLINING ; same pop psw ;recall the toggle setting jc under ;if the carry flag is 1, go to ;underlining mode of display ;otherwise: push psw ;save the current toggle setting ;(which is for nonunderlining) mov a,b ;put the current character in A call print ;display it (not underlined) jmp start ;get the next character ; ;OPTION 2: DISPLAY WITH UNDERLINING ; under push psw ;save the current toggle setting ;(which is for underlining) mov a,b ;put the current character in A adi 80h ;add 128 decimal to it to get the ;same character WITH underlining call print ;display it (underlined) jmp start ;get the next character ; ;RESTORE OLD STACK AND RETURN TO CP/M ; alldone lhld oldsp ;get old stack pointer from memory sphl ;make it the current stack pointer jmp wboot ;return to CP/M ; ;SUBROUTINES ; rubout push a ;save rubout character mvi a,bksp ; call print ;move cursor back one space mvi a,space ; call print ;blank out previously displayed character mvi a,bksp ; call print ;move cursor back one space pop a ;recall rubout character call print ;display it (effect ?) ret ; print mov e,a ;put value of current character in reg. A mvi c,conio ;use function #6 as display output push psw ;save program status word ;(value in A and toggle setting) call bdos ;display current character pop psw ;recall value in A ret ; ;PROGRAM STORAGE ; oldsp ds 2 ;memory space for old stack pointer ds 32 ;new stack space stktop: ;new stack starts here end 100h  start ;get the next character ; ;RESTORE OLD STACK AND RETURN TO CP/M ; alldone lhld oldsp ;get old stack pointer from memory sphl ;make it the current stack pointer jmp wboot ;return to CP/M ; ;SUBROUTINES ; rubout push a ;save rubout character mvi a,bksp ; call print ;move cursor back one space mvi a,space ; call print ;blank out previously displayed character mvi a,bksp ; call print ;move cursor back one space pop a ;recall rubout character call print ;display it (effect ?) ret ; print mov e,a ;put value of current character in reg. A mvi c,conio ;use function #6 as display output push psw ;!9"1 p -͌> ͌ 8w C͌  N͌ GZ? fx͌ xƀ͌ *>͌> ͌>͌͌_DRIVES DOCJ9:;<=>?@ABF41T MQC:CDEFGHIJF41T PQNKLMNOPQRSTUVWXYZF41T PQN[F41T REL\]^FINDMEM COM_FINDMEM DOC`abFINDMEM Z80>cdefghijFMT20 COMklmFMT20 DOC.nopqrsFMT20 SYMtO1DRAFT3COM uvO1DRAFT3DOCwO1GRAPH3COM xyO1GRAPH3DOC2z{|}~O1GRAPH3ZQ0KONSCR-ULASM#ONSCR-UL$$$ONSCR-ULDOCSET4C AQMpSET4C DOC SET4C-52OBJ SET4C-80OBJ UNFMT COM  filenam RD013086.UL (wa ONSCR-UL.DOC) ON-SCREE UNDERLININ VI ASSEMBL LANGUAGE b Rober E Daniels 12 Windso Circle Chape Hil N 2751 PURPOSE ONSCR-U (.AS an .COM i smal progra tha display keyboar inpu a bot norma tex an tru underlinin o th Osborn consol screen Thi progra wa writte a a exercis i figurin ou (o mor likel stimulatin rea programme t figur out ho t patc WordSta t tak advantag o th Osborne' abilit t displa underlining I someon know ho t pu th mai ide o thi littl progra int on o th unuse area i WS.CO an ho t intercep th keyboar input t jum t tha patch the w shoul hav tru on-scree underlinin i WordStar OPERATION ^ i th toggl t star o sto underlinin (NOTE a currentl writte that' ^ no ^P o ^P a entere whe i WordStar) Blan space betwee underline tex ar no underlined ^ exit th progra an return t CP/M I'v adde tw feature tha mimi WordSta i orde t mak keyboar inpu easier bu thes feature woul no b par o patc t pu scree underlinin i WordStar a Th lef arro work a i doe i WordSta wit INSER OFF i.e i move th curso bac unde characte an th nex entr overwrite tha character b ^- works a i WordStar a destructiv backspace Ther i n wordwra (I' no tryin t duplicat WordStar) Carriag return mus b entere t star ne line (a i usin typewriter) Currentl th progra onl doe scree display I shoul b relativel straightforwar t ad featur writin th inpu t dis fil wit th underlinin brackete b ^ character (13h a WordSta does. NOTE O DOCUMENTATION Th us o th direc consol input/outpu functio i fro Jo Lindsey' INTRODUCTIO T CP/ (p 33) foun th CM instructio discusse i Mitchel Wait Rober Lafore' SOU O CP/ (p 355) "CM complement th carr flag Tha is i change i fro i i wa 1 an vic versa. hav use CM her t creat toggl fo underlinin ON/OFF Th documentatio provide wit th sourc cod listin borrow heavil fro bot books. curso bac unde characte an th nex entr overwrite tha character b ^- works a i WordStar a destructiv backspace Ther i n wordwra (I' no tryin t duplicat WordStar) Carriag return mus b entere t star ne line (a i usin typewriter) Currentl th progra onl doe scree display I shoul b relativel straightforwar t ad featur writin th inpu t dis fil wit th underlinin brackete b ^ character (13h a WordSta does. NOTE O DOCUMENTATION Th us o th direc consol input/outpu functio i fro Jo Lindsey' INTRODUCTIv1SET4C.ASMj  !"#$%&'()*+o,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiD;:1+L=k:?ן>~k}>ݻ|ĚFt+>ޏ4kуsWtz[c)kB;S.JB*}f_X9W\[%uIj~T2"{4(ɚ7υGVƚ {M\{a5;q0XGW9s^A4^NNN`M<OoDk ֢|q\1o!UIbR( ^Xç0c~^1d5i=/~TFSV(d.5ꕯ+LXǧ秷x# 5찎j/J0-9cՀΩ 4w.)ŴWZ:>A\zOOo3"Oj18݁Kbk h E͜~5`M#{Oo=s*BNYX2%D-9[hg$q$U 4 ~kAa.B{eyqYV4fY޼_|,O_޾_kOˏOo qv~}xޚFiy / Ǚ/J0| ZrA4i_>??:=^,q$ޱU 7+]VޚfMhߝ`9Nj:j50.x=;|Ni[*Q uTO/|+hQ+IW8j`XEkN i* .h%x H.=a 55ΩXӬitsrѡ8PǙ5 :~ ujpA3'\i[G5%S:VE RpAK4E RpAKΰaW_G(ډFdlyiD{̾ThؚFcQE3ӎtL5fbk5 ?2B ?_cҲӾcՀO/|+c\fxtXYӰ*428Ct97'x=ǼsY)?|:nN?|zvSK¨gn/k5nN߿ ;$Q\fhvS昜9CF|z|^f. 4ZG5@ ]} >{tsxa &ckʚfM D8Pɥ'vQd׋׳{XC BT4k Z4:;w | 9F7eALPC&%a+JŴ5OH03NY1r^FȤ$sEtH0ƜbR1 _fM#ʣ/YAFfgXǜᧉ·aE-::*ݚF!a" shr4k NY( 3+fNP FѨMo #4 械9SwQKOXǪT /!$႖Xv4E8F'r_xoO!  k5M~dMYӰ7'8n~>y}×ׇw74kڇ5f1seYtaBIF[c 9M> )]DMˆ#ĉ+Q pA3'L>XC6qD~.qƚaoMa?Nɍ5͚ao5q 9M>X?2 ujƚuv!~.e jAr Xvf+υQ KOXǪȈN5khf})2QE RpAKΐd RƑ25_`/% H5֬] -]e–7fnPυQ[Ny w–7֬]u"~.t|;רNƚ<*B/Q[Nỵ–7ք2D-Le–7&L]E\h Q SAakԫsD-LU [XyTBہ#5̾,kBKeY~\kf_jQ}^1oefQ}^1|,O_޾_kXL\25:I&BoM^9cBKXrrrI| -Qsʧu5||\85VO>lt-H\@Ԯ%=]8ZCؚaoMa/?ӧǓLJk5kٗJ\h05 /Z(ϙ2Gυ>@^~x9?Us s }υ>v j( :^JR>-9c(FL8(?gf1)B M:&j31bA95/J\h㏿KkbA95e_+s7DLĤXת9Ą9sfk7VB nPĤXת9Ą9sfk7VB ~Zu–7$&V!&Q3[?Z@2 [`kZ5;0GqP~l5q\iuk%~.>D-H.=akbA95jiFpA3ki4kx~x;<_ޝgkkgM*kB?ց]*JsL1}P5sA3k r jpq]E͜&FH\QS~Nk%QpA3k Y&1a>0d3FAr .hd GߵQ4(5wlMYӰnpOniִ{XcYD?ZyQp#LcIAEIX (?ЛIQSQP Ifk*灨U|&HQ?q j1MEaҡF$5VNiB5tL;Ȉ0xbj`IN2[cMyЗ'jvΚ9#~.?<5Wf0Gqn;}[Ӭi9??ޚfMD,5t'rke ՙ׋׳{qv,GYkt,au8NYKqY˷rXFVxqL]˷rXuIj@V5Tg~t\ê To:<:ӆ~:.aaѥ|;,8XcS^+ >gP(ZsRD)ьP$U +x)gkh\В3BN4qbB{tQ5q\i >gr.Dͱ 9A .KOEs*pq]E͜&&tN劂ϙ;EaP $႖sY+vhIaB{P9Ӗ7"jaE(ZsRE;YG߹5i9S)[5' ujS#(.h4` 3uN7蜊5|c"j;VEwIN2a>lAT[Ȥ$hv zKOpAKP5Qsk iy j! ^cyjMifN%Q8bOP $A|ڱTH6 9M>XcMiD͜&K |Q#6p[%0_GuT >pq]E͜&0EZq j! ^cǯm9G$ݔSY!ذ_GuTӎ5sAttDͱ/J0} ZrFL8k@Lcٗ #&Q5sPM+hly(Κ8͜&` 3ɥ'X!H.=a(N5kh5ϙ:*2{ 4sO| LOXG߹5!uTW|4iv :b(Q4 >|@P9S\z"j+|F\z:V5`$O;_Ge 3uTD-d.h*:*(A5jiFpA3kh7[>i4qdz/Nniִ{ki4kۓs~||޿ï_>3twVxxs?:k~x 'dz{rvwps~xrܜ/aO=|dzûOx=;OóG;O~{95͚ao5hI]Hjk6IL J $႖1o#&Q5+5'_`/% 䌘0Gq֐SBуhhF(ZsRE RpAKđw.h4` 9InMԜgx)g%gS#(.h4` HjZM̾ThV!&Q5+5'ٗ #&Q5䔧PK%jNf5'ٗ [c !W*[Zڎ|($1)PS_ucPP&lyQKYCNy EoyCԜEkN e–7XCyȕ7Vc_f #t [`kk)ȯ:Q۱B(ZsRq7(lyQKYCNy EoyH)ьP椠nPk(RJvkdDu–7$&PS_ucPPe F-sg 9)ͷ7ԜEkN U [Xc !W[Zڎ|<*lyIbR. Dm hI! F-sg 9)ͷ/ԜEkN G-o#\iב:VR$&%KOXǪň sg u9%Dm hI!H.=a(rS(:HQsJ4#9)ɥ'cU5'ѻ 9%ֱ֜h$A|1:*k88fN֐fe &ckڇ=`Ma7'y}<9yߝ o}5 993twiִ{k#\irE:ҰZʾVjĤAr XՀy1a⬡~ɯֱۅA͜ #.KOhtNrJ}ZSF\z:V5@ (k(_GVh_+IbRP_`/% y1a⬡~ɯї2g ( :^J.h2BrJ}ZS/J0| ZrQ5P9sA |P+L*JҬTH6 9M>XcMYӰ7' ?=;ܼ>}nN_>׏/'x9O}Y>ﭱNSWz ES^+(v 2%DK>-9[c (Lї2D-:h%g8~t{I~p2D-ذm50ED_J"j%D-9CWk@'v-}I ႖Q6:YC:Ұ Dm H.=aP6:s~m@~pQ/#1WE%D-9o5~p2W# +?.Hm%D-9C;nD~p5I|iXuI&IA |QA4\В3$s~9VW#UGm%D-9#&tNב՗9VȜvjpJǴE pAKng pV˼ ԂT({ רJ9k!n;}[Ӭi'O~r~sGk5kfة+)=RS^+(v 2"9)̾Thk@a4RZtEkN /+ƗeyqYZYgY8bOրiXZtEkN /+Ͳ#n~r~sGk5kQUB[+5'P-o2}o50EZ2֜ʄ-o]5K ۵#jqĆnK5Ɩ7P"EPP&ly0րn/)lԉZa'(b #D 即w-H-oJ&Y'e}E:Ұ Dm DcI ;n [kv(WO-oX!–7A}o )ݠZtEkN :-o]5t.)lY8" nKhtvx8bBk-o`5P7P۱Bk-o*5HkWeZtEkN U [`-:Wk6]Rز&jqDܖ>A Xk qĆ; [Xc )ͷ/vZa"󨾷i2EP椐yTk)ZC–5Q# JZFgua}$1)(A(ډƖ7k)9ckO5քm)ͷ#+$Vq7ﭡ0E S׻A֜t [ L5t.)lY8" nKhtvx8bBk-o`5P7P۱Bk-o*5HaU։EPPe ԿZC–5Q# JZFgW#6)$Vk(WO-o}c [G5HaGEԢC(ZsR<*ly0meM$-}֢9ck|iXmS6IL JvC::;wlM:VW#U6IL JvCL蜊5#ͫ_DͱBSdS:dD(ډFw;ĄΩXCu-\2/ 1.5jt9ettNkHi4kx g}_|: >׏/'x9O}Y>ﭱ&sA3kdN])$5VPdD(ZsRKOXǪk):VEP$U 5K oZa'Xk@a{BњB\z:V5฼j 'jqĆnK50EZoBњB\z:V5%ۅv-}w-H uj@I$d H*;IbRP uj@I$[C}ce5aH*7Dm H.=aߠs~m(+k ua6IL J$U P;nDaX5քuaB&IA ֱJvAg ku꜂djĤAr XՀ9k(_GW_X!sک2)2"H.=a3h:yQ4~vAQ)s*XC5jiFpA3k`MYӰO/7??yњfMƚΩ\QTWS$1)(ATHa5i唦Vߠs*P9*kFA:0ctNk +o 9s^5%3WkHw߱5ޚfM{rן^gx={ws '?ᇇ?^ݜ}wbM}O'_ϭiִ{k 1]Q?VARZB$3bi$^-8XCLsg )B;Q454x0xQ#e$>(ذ0xb }ukF Iakkk)[CLsg50xMԜZA&%AS)q j5uE5ksTX SÁn/rc_`}9k` (L?^c5kXaB{ň Sրzn/ɱ [vP-o5q 9M>XCat9XCX5Q O;F\z:V5XéƑwm 4s|@d ^c䚨uTXG5 ӎ5րk+uTXG5 >Yc (_G+ֺIbRPZ4:;wl F I+4ݔQY >g8kHrD+5'_`/% l5HKGBњ/J0|5t{INQ#6p[%p $!ߵ8" |QA4$A4J&Y'kFA#5Ǚ/J0| Zr5t'cଡwltE4_ /%Qs9(x)g%gH*])OA4Q+S֜|QAt႖>QȬ5Q\ q*XXr}Dm hIaB{XCa4RZtEkN /+ƗeyqYZCfc%jqĆnKf_*Weyz~YiXZtEkN /+ͲA +ɥ'cUb5HXBԢC(ZsRKOXǪ]ZC'jqĆnKֱJp\[CG$A\z:V5 :Ii$D_J8sPE RpAKΐd ꔧP zEkN ( :^JpAKXC4_co9ֱ2kOX ƅ O# RƑA%DKI>-9C)OA4Q+S֜|QAt႖i$Zoj3 ujxXC}9V!HH~5q8sPE RpAKΐq?uS(zMTb5'_`/%e%gk~ɯֱqyOq$U 58V!HrS(:H&je^1BњB\zS#(.h4` |Dm Xk߱5O#դSڤcR >g8kH*H~<5 aJ<` AҒ!ؑ5q\iՓ iv֜|QA%\В5䔧P )踋gK%gk(WOwA2QX!9)ɥ'cU5䔧PtLԔ@t3ֱN5kh5YYk+ꪟFeX! ^C q0_G Ii֐S5Q|Q O;vXC5wlMYӰs<|7/^niִ{kW|E:Ұ}VjĤ/+Us sg )=RA!9)̾ThrJ}ZSKsg u9D)cB{EñKbbk(ɱ}DͱKbbk!kڇ5͚?ߜ#n?XӬiXv(RJv%x%AF [ &>eN;5@95P7DqP&ly_C4{k)޿ï_>wƚfMƚ8͜& KOW# uk6IL J$U 7(S(:H&j3 ujR_y$U P9ҬTH6 9M>XcMYӰ9n~9 ?=ɍ5͚ao5|Ha$IQԂ$'!EMEYC4BfZ5\ huTXCLsGԂsϙ(3\5bYc HaIbRP$,<(Sܭ@LsGԂsg &ckڇ5͚ޟO4kڇ5tNի+ԙBfa ՙ^qR~^Vª3nX hpGOz3~:.˷rX.SRq\Vѥ|;,k.TY[CuWy\qǕJ3<$:^J7AK·JRc_p \8X9]Q` ՙ^qǕJ3Vªƾ: GbVIj.p \iL` ՙ^qǕJ3^vGqJRc_p \tN+3~5Q)UWy\)?iL?~1)ևJRc_p \.p \kZ&to~sƚ8͜&:SЫZCuwÊ]XW_'Qa$x|ڱ;؅U5Tg zUW+3}bV5WuTXG5uibVIjP)UWy\qR~L3TyJ(2# W8wֺՙ^͜*-9[抪D)~ǐhI!DckBѳ/::5DCF5'ٗ [c j5? title 'SET4C - a SETUP.COM program for OSBORNE 01 with DRIVEC:' by TED SCHULZE 751 TENNIS LANE TRACY, CA 95376 Assemble: MAC.com date: 2/11/84 SET4C is for an OSBORNE 01 (1.44) with or with out the 80 COLUMN UPGRADE and with or without DRIVE C: ram disk add-on. SET4C-80 saves the current setting and then sets the screen to 80 column for the menu SET4C is used to select: 1) colmum width of screen if equiped with screenpac with auto override of auto horizonal scroll 2) auto horizonal scroll 3) cursor control keys 4) baud rate Use of the SETUP.COM program with DRIVE C: will require a manual reset and reinstall of DRIVE C:. This is because SETUP.COM bypasses CP/M's standard BDOS. Also, SETUP.COM cannot be run from WORDSTAR. SET4C does not require reset and reinstall of DRIVE C: and can be run with the run commmand in WORDSTAR. Notes: I have not used the 52 column version of SET4C.COM other then to test it. The error message ??????? will display in the option field if setting can not be verified. If option field is not filled by setting or ????? a default of ##### will appear. This was a check during writting program which is find no need to remove. The 80 column version will set the screen to 80 column for display of the menu but will save the orgional column width and auto horzional scroll setting for use if "EXIT WITH OUT CHANGE" is chossen.  3) cursor control keys 4) baud rate Use of the SETUP.COM program with DRIVE C: will require a manual reset and reinstall of DRIVE C:. This is because SETUP.COM bypasses CP/M's standard BDOS. Also, SETUP.COM cannot be run from WORDSTAR. SET4C does not require reset and reinstall of DRIVE C: and can be6 SET4C.COM for OSBORNE 01 by TDS v1.7 2/03/84 a͌ͱ6D:^9-!h~2!i~2*~2*~2*~2*~2:ʟʥ! è!è!:VUT!!!! : !-:::!-: : :! < >2<D2_:_AʀBʕCʴNX :ʍ>Ï>2:VʧUʬ>Vî>Uî>T2: > 2> 2> 2>2>2>2>2>2 >2>2!h:w!i:wO<*:w*:w*:w*:w lSetup for OSBORNE 1 with DRIVE C: v1.7m A )- Auto Horizonal Scroll( . . . . . !!! B )- Baud Rate( . . . . . . . !!!!!!!!!!! C )- Cursor Keys( . . . . . . . !!!!!!!!! N )- Exit w/o Changes( X )- Exit with Changes( Select option by letter to toggle choice - $  lNO SUCH OPTION, TRY AGAIN!m$ R$Off On. . 300/600. 1200/240019200/38400. . . . ??? WordStar. . CP$/M. . . ??????~2*~2:ʟʥ! è!è!:VUT!!!! : !-:::!-: : :! < >2<D2_:_AʀBʕCʴNX :ʍ>Ï>2:VʧUʬ>Vî>Uî>T2: > 2> 2> 2>2>2>2>2>2 >2>2!h:w!i:wO<*:w*:w*:w*:w lSetup for OSBORNE 1 with DRIVE C: v1.7m A )- Auto Horizonal Scroll( . . . . . !!! B )- Baud Rate( . . . . . . . !!!!!!!!!!! C )- Cursor Keys( . . . . . . . !!!!!!!!! N )- Exit w/o Changes( X )- Exit with Changes( Select option by letter to toggle choice - $  lNO SUCH OPTION, TRY AGAIN!m$ R$Off On. . 300/600. 1200/240019200/38400. . . . ??? WordStar. . CP6 SET4C.COM for OSBORNE 01 by TDS v1.7 2/03/84 sͫͻe͕ͣ:j<͚͚ͮ͢!h~22!i~2*~2*~2*~2*~2!~22!>w!h>w:!!!J:VUT!!!!w :# A!\:::!\: : :! :}ʃʉ!Ì!Ì!Ì! >2ʣ2_:_ABCSNNʂXʔi :>>2y:V U>V>U>T2y: 7> 2> 2> 2>2y>2>2>2>2y:eo>2>v>2>v>2>2 >2:2:2>2!h:w!i:wO<*:w*:w*:w*:w!:w lSetup for OSBORNE 1 with DRIVE C: v1.7m A )- Auto Horizonal Scroll( . . . . . !!! B )- Baud Rate( . . . . . . . !!!!!!!!!!! C )- Cursor Keys( . . . . . . . !!!!!!!!! S )- Screen Size( . . . . . . . . . . !!! N )- Exit w/o Changes( X )- Exit with Changes( Select option by letter to toggle choice - $  lNO SUCH OPTION, TRY AGAIN!m$ R$Off On. . 300/600. 1200/240019200/38400. . . . ??? WordStar. . CP/M. . . ??? 52 80104???!w :# A!\:::!\: : :! :}ʃʉ!Ì!Ì!Ì! >2ʣ2_:_ABCSNNʂXʔi :>>2y:V U>V>U>T2y: 7> 2> 2> 2>2y>2>2>2>2y:eo>2>v>2>v>2>2 >2:2:2>2!h:w!i:wO<*:w*:w*:w*:w!:w lSetup for OSBORNE 1 with DRIVE C: v1.7m A )- Auto Horizonal Scroll( . . . . . !!! B )- Baud Rate( . . . . . . . !!!!!!!!!!! C )- Cursor Keys( . . . . . . . !!!!!!!!! S )- Screen Size( . . . . . . . . . . !!! N )- Ex*.60='=*=9==~=r=l*o2&>2!<N>2>'2(:2>&2.ک4ک>%2.ڴ:ڴ:=ˆ:2# úLì:"O>AF2"1F2">2.> : ´>2:!<2!:<(úABSOLUTE FORMAT ERROR. DISK UNUSABLE. $SINGLE DENSITY DISK FOUND. CANNOT BE USED AS DOUBLE. $ NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN% This is the release date of the disk. 0,1""0,""0,""0,0""-1,01,0-1,01,00,10,00,'' ID;PDB3F;DG0G10B;Y;XC;Y;X;KF41T .PQN 4D 43 16768 131 F41T .REL 35 18 2432 19 FINDMEM .COM 63 C2 768 6 FINDMEM .DOC 3E 80 2688 21 FINDMEM .Z80 B9 E7 7936 62 FMT20 .COM 69 E5 2816 22 FMT20 .DOC 49 A9 5888 46 FMT20 .SYM C7 AF 128 1 O1DRAFT3.COM B4 94 1536 12 O1DRAFT3.DOC 0D 56 896 7 O1GRAPH3.COM 7D E1 1536 12 O1GRAPH3.DOC F8 C2 6400 50 O1GRAPH3 Fog Library Disk FOG-CPM.178 Copyright (1987) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. A collection of disk utilities for the Osborne 1 and Vixen. Source code is included for most of the programs so at least some of them could be modified for other computers. Filename Description -06-00 .87 This is the release date of the disk. -CPM178 .DOC This is the description of the disk contents. EDCOM .COM D645 4K [File Editor 1 of 6] View and edit files that fit in available memory. This gives a display of Hex and ASCII values. Two versions (80 column and 52 column display) plus Z80 source are included. EDCOM .DOC 511C 6K [File Editor 2 of 6] EDCOM .ZQ0 AD9B 16K [File Editor 3 of 6] EDCOM52 .COM 9E34 3K [File Editor 4 of 6] EDCOM52 .DOC F3CD 7K [File Editor 5 of 6] EDCOM52 .ZQ0 4B84 15K [File Editor 6 of 6] F41T .COM 7C5C 3K [Format 41 Tracks 1 of 5] Format Osborne 1 disks with an extra track -- store a little more on each disk. M80 source included. DRIVES .DOC F197 10K [Format 41 Tracks 2 of 5] F41T  .MQC 390D 8K [Format 41 Tracks 3 of 5] F41T .PQN 4D43 17K [Format 41 Tracks 4 of 5] F41T .REL 3518 3K [Format 41 Tracks 5 of 5] FINDMEM .COM 63C2 1K [Find Memory 1 of 3] Display the contents of memory on your Osborne 1 or Vixen screen. Z80 source included. FINDMEM .DOC 3E80 3K [Find Memory 2 of 3] FINDMEM .Z80 B9E7 8K [Find Memory 3 of 3] FMT20 .COM 69E5 3K [Fast Format 1 of 3] Fast format/verify program for Double Density Osborne 1 with 1.4 ROM. Includes Z8E compatible symbol file. FMT20 .DOC 49A9 6K [Fast Format 2 of 3] FMT20 .SYM C7AF 1K [Fast Format 3 of 3] O1DRAFT3.COM B494 2K [Osborne/Epson 1 of 5] Allows Osborne 1 or Vixen to access all of the features of an Epson or compatible printer. Addresses individual pins on the print head to produce dots and graphics. O1DRAFT3.DOC 0D56 1K [Osborne/Epson 2 of 5] O1GRAPH3.COM 7DE1 2K [Osborne/Epson 3 of 5] O1GRAPH3.DOC F8C2 7K [Osborne/Epson 4 of 5] O1GRAPH3.ZQ0 A5AE 10K [Osborne/Epson 5 of 5] ONSCR-UL.ASM 9093 5K [Onscreen Underline 1 of 3] Display keyboard input on screen in the underline mode. Written for Osborne 1 but includes ASM source so it can be modified for other systems. ONSCR-UL.COM EA8D 1K [Onscreen Underline 2 of 3] ONSCR-UL.DOC 4D27 3K [Onscreen Underline 3 of 3] SET4C .AQM F338 14K [Setup for DriveC 1 of 4] Setup program for Osborne 1 with DriveC that allows you to setup screen width, auto scroll, arrow keys, and baud rate. ASM source included. SET4C .DOC 230A 2K [Setup for DriveC 2 of 4] SET4C-52.OBJ 0312 2K [Setup for DriveC 3 of 4] SET4C-80.&OBJ 3A0A 2K [Setup for DriveC 4 of 4] UNFMT .COM B5B7 2K Destroys format and data information on the disk in drive B on an Osborne 1.  [File Editor 5 of 6] EDCOM52 .ZQ0 4B84 15K [File Editor 6 of 6] F41T .COM 7C5C 3K [Format 41 Tracks 1 of 5] Format Osborne 1 disks with an extra track -- store a little more on each disk. M80 source included. DRIVES .DOC F197 10K [Format 41 Tracks 2 of 5] F41T  This is the release date of the disk. FMT20 COM k FMT20 DOC nFMT20 SYM tO1DRAFT3COM uO1DRAFT3DOC wO1GRAPH3COM xO1GRAPH3DOC zO1GRAPH3ZQ0 %ONSCR-ULASM ONSCR-ULCOM ONSCR-ULDOC SET4C AQM 8SET4C DOC SET4C-52OBJ '