IMD 1.16: 28/05/2007 16:27:44 -FOG/UTL010         -FOG/UTL010OTERM COMROTERM DOCX OTERM LTRUNSPOL30DOCFUNSPOL30ASM !"#CV ASM@$%&'UNSPOL30COM (CV COM)CV DOC*DISK DOC +gOTERM -- Terminal Emulator Copyright 1981, 1982 Michael M Rubenstein Version 2.20 11 Mar 82 {k:l2#:%2l:2$2!9[(RDM "="8 +"? "!? 2!2:2:2":/O.<*͸"ddd^:gm^ G?  (B D^ ?  (Q(%W(!C(D(E *="82:>2<ɗ2<Q2;C M^ ?  (C("F(L( M(W(X(B(D B2(F2&M2-X2)D l^ ?  (!B(4,C(/!L((,N(#P(#Q((S('T(#W(%X(!͵(802  7"3^22ɗT21W25F ,^ ?  (H(L(M L20ɗ2L =^ ?( (͵(80OxG+ x8>2l2%M*^ ?  (1(82(47(C8(?E(FN(FO(FR(KS(GL(RM(NF(G(H 2'/O:/O2/.<O:/:7!5N(G>2668͹ (!6:iw(7>>!N6my2h:͹*| :1( H͠Lͨ͠ :0 > >!+"!822}22.>. O_2:'G{m@ C:<[8*? :/R/O:/M2.Q7SW >42l ͸:'o F( =(# /:%o&͚ 9E:-' N:(' V:&' ^:)' hE:.'  t:/@z ͸  R0[=2:xS8:;,-%2:1H >ѷ{ :-  :&   :(  s:)(m*Z{ ( } \!,~s S:,!0"*C} >:,!87**|(0}(+G+~!8+#:lG((G^6 #ї2+!,s >7Oʹ  =( =(    :0'  :5( :4' :3' ͸:2(&o 0@g.^":1'  :70Oʹ42l *͸͸ ͸:%2l ͸ :* )Write file name? )Read file name (* to continue)? Log written ()Cannot openOTERM COMMANDS b -- log commands c -- console mode commands d -- delay mode commands f - :<' :;'  *?[=R#:: *8R͚͸͚  RuW(cZxm@  *͸Z *͸ *2*(!8}!"!}&88>2] *͸C *͸ *!A&8(1ͼ)8[=::([8!- file processing commands l -- set line size m -- transmit mode commands q -- return to CP/M r -- read file s -- display status w -- write log to disk z -- local clear screen ? -- display this message space to cancel. Any other charact(Oʹ0} *͸ *͸*?R0[=*8R:"O.<:#2l:$2Á!!~6 [.67._[.6 O82!{ :.(͙ :'F( @ K.::.> (> 5:2(0͹ :3(:'F:-:. :4er is transmitted. OTERM LOG COMMANDS c -- clear & enable log d -- disable log e -- enable log q -- no warn when log full w -- warn when log full space to cancel Any other character is ignored. OTERM CONSOLE MODE COMMANDS b -- no de  lete char on backspace c -- set clear on ff mode d -- delete char on backspace f -- reset clear on ff mode l -- auto lf after cr m -- no auto lf after cr w -- word wrap on x -- word wrap off space to cancel Any other character is ignored. RM STATUS full duplexhost modehalf duplexline sz: console --auto lf:bs del:ff clr:wordwrap:transmit --port:RS232modembits:parity:evenoddrate:3001200file --suppr lf:delay:line:char:ln prmpt: ^S/^Q:time: log:warn:using:  OTERM DELAY MODE COMMANDS b -- both char & line delay c -- char delay l -- line delay n -- no delay s -- remote handles ^S/^Q t -- remote does not handle ^S/^Q px -- set line prompt "x" q -- disable line prompt w -- delay unt of chartime: onoffnone4FV .;122B8' P!dil char x -- delay for time 0 -- infinite delay 1 - 9 -- short - long delay space to cancel. Any other character is ignored. OTERM FILE PROCESSING MODE COMMANDS h -- halt file read l -- process lf m -- suppress lf space to c OTERMKROi<NKM MGNLML=MZMUNM NO RKKKKKLPKLISKKdLKLKLOTWpLgNt2[6` ` QAQBQCQDQEQHQLQMbSPcPSWQIQR bBCbDEbHLbAFancel Any other character is ignored. OTERM LINE COMMAND Enter desired line size followed by return space to cancel Any other character is ignored. OTERM TRANSMIT MODE COMMANDS 1 -- 300 baud 2 -- 1200 baud 7 -- 7 bits 8 -- 8 bits e jIXDjIYdrNZqZrNCqPrPOrPE MOTERM REL--OTERM PRNOTERM MACL #$%&'()*+L TERM MACRELCRFPRN: j)ѐpj-- even parity f -- full duplex g -- host h -- half duplex l -- auto lf after cr m -- no auto lf after cr n -- no parity o -- odd parity r -- RS232 connector s -- modem connector space to cancel. Any other character is ignored. OTEIњP,jȓ@7ĉK1j\ih Heʨ)q |\ȉ)ʑ \誈qP\\ѐ l\: ђ\I 0\\i) *h)і0*dj*J   C2=2 T'!2 S*(|J*(q#p# "(#'+F+N## *(R|"(*("(!R9?8[(R>!J*ͬ2 = 2 =~D:=@2=!7=;Ey=7dEcon =!=E!D@==> =DE: =D: =logwrn: db 0 ;nz if warn wD: =2 = _2GͅG͛G*=##: =2=G= ~5E5Ew# +E #+E w#>7^#':)=xW!) ~怲w#'͸)`iR ʹ+|(͸ԭFx #'*E |x>}Ggh"E 2D ':D 6~yw66#T]$hen log full logenb: db 0ffh ;nz if logging enabled logbuf: dw 0 ;start of log buffer logend: dw 0 ;end of log buffer ; logout: dcb ;output dcb ; rdcnt: dw 0 ;count char read rdflag: db 0 ;nz if reading file flflag: db 0 ;nz if char from f~(w#i~% !f ($!G ~>7 /#~wC#~wD>*E !A[E "E s#r6 #'w=w>n7f8u;t< 'ADM!E ^#V|( B 6~>%6>>> > > > '6~ >7nCfD_~#foN=F>x >ile ; infile: dcb ;input dcb dcb BUF,inbuf dcb BUFLN,linbuf ; linbuf equ 2048 inbuf: ds linbuf ; wkst2: db 0,0,0 ;work len 2 str ; inlinl equ 32 inline: ds inlinl+3 ; end start P=B:OTERM n;f<~# q=p>u;t<.> 071. ( x >  (w@>  (w@Gx͓%iN9F: x>> Bu=t>͓%N=F>n9f:B>^=V>n;fu;t<O>0ix~# >~?6?݆@6@( 2fB?Command error?File not found?Can't enter file~NG#OC!CiC!-CiC!=COCCCOMSCNuC"=uCʿC:CG:CO*.µC# §CÿC µCÞC2uC*+++*=:=2=*=F:B(6n!3F  6i74f(ɗ7>76v>͓%p=p>CON$"LSTbPUNbRDRbDUMl MEM %+ + + 2 . 64~ͫ ! ɗ76v(:4">"۷3n3f( W3F  > W !> !  zɷ3F4f( ( > 6@  67ɷ ͫ ! (u (q B(  3B(!  7" ( >8+| x( 2n(x "-!   yW2V(W ( ( ( 0>^!@_z:4":w7w86^w9w:6$6  T]#6T] ( (Ͳ&: >!$&8QͲ&y>!'&8A. Ͳ&>!/&8./ &8w\ &8/w!8 R>7!8!' (ѷR$%Mɹ (  6 #=((A2 G^2^#'*5"S5">24" ! ,!d $~$ :A@G:%>p6F Ͱ$$w!w"w#>6F(4>2^ͅ$(2 ޗ2^ ~' (3F̌N=F>#>%$'% Ox ,=;*?[]7!L'0!A'!9~#foT'"5(#'_! (:)=8bk) ~W{7('&7((''#^#Vz'x( =(''('*5(''xy7'*3(|'}'0:8_('2N(6!%\$<(!%6%$!%?%!%6%$%#$ɗ76v͓%n9f:i >0%!͢#  6ѷRu=t>7ȗ4N(H!>w>#i`i|(&"͢#  B(0!% -  ***ERROR ERROR OCCURED AT WF$!(}((6:#}(6.#}( +6(!(6F!(6N!(!8w#  FCNOUTTQD (OUTPUT)(INPUT)(I/O)0:?͵(A[?a{?( )ŗ7 j0?j0| 0>7#$ͅ$(  ͅ$(%2Z%$!Z%Ͱ$Z%$ l$\ 2l\!E ~#foF(  $  ~2\! %>94060+!%] \8!] !' GOog<)J)_)o)))))))FILE NOT OPENBUFFER TOO SHORT -- WRITE ERROR -- CLOSE ERROR -- INSUF MEMFUNCTION NOT LOADED ZERO DIVIDEINVALID ARGUMENT: 2 TOO SHORT -- WRITE ERROR -- CLOSE ERROR -- I$$$$0000$$$BAKLFNAMEyQE LFEXT-MF(&F$FSETC(MDCBF(NF$CALLD(`*OPENE(CLOSEMD(x;""#I##'6~>7~7ݶ86^ N9F:x nCfD+F+Nx7q9p:68u7t86i%ɗ6~6f(n7f806  ..------!-!----------------------------------------- .he OTERM.DOC -- OTERM Terminal Simulator page # .op .po 0 Copyright 1981, 1982 Michael M Rubenstein Version 2.20 11 Mar 82 Abstract. OTER allow th use t communicat wit tim shar in services computerise bulleti boards an othe computers Specia feature o OTER include: - circula lo o th sessio i kept Thi lo i unde th contro o th user. - a optiona warnin i provide whe th lo i almos full I th remot devic support it transmissio wil b halte wit contro S I fil i bein sent th transmissio i interrupte (i  ca b restarted.) - file ma b sen t th remot computer. - an comman whic ca b entere fro th keyboar ma als b entere fro file Thi"allow automati settin o mode fo   transmissio o th file. - fil tranmissio ma b interrupte fro th keyboar o fro comman containe i th file Transmissio ma b re starte withou los o data. - fu ma b confusing Sinc ther i n checkin o data Programs particularl i no i sourc form whic ar transmitte shoul b checke carefully. OTER͠ ca handl onl asci data Bi o al character i se t zero B chal duplex hal duplex an hos mod (communicatio wit dum termina pro gra o anothe computer ar supported. - line ar wrappe t kee dat o th screen Optionall th displa lingin transmissio mode bi ma b use fo parity bu i canno b a informatio bit. .pa New features/corrections in version 2. File transmission has been implemented. Warning on buffer full has been implemented. Th proble wit losn lengt ma b se t an siz u t 12 characters. - optionall line ma b wrappe s a t kee word o singl lin (wor wrap) - for feed optionall clea th screen. -  character whe characte i sen whil th remot i als sendin ha bee reduce considerably. Selectio o th seria interfac characteristic ha bee implemented (2.10) Th siz o th lo ha bee increase t abou command t OTER ar entere a escap sequences Hel menu ar availabl usin th "? key. .pa Limitations of OTERM. OTERM will run only on an Osborne 1 computer. No printer support is provided. OTER͠ ca tak41,50 characters (2.10) Oter no work properl wit upgrade Osborn system (2.11). Word wrap is now implemented. (2.20) .pa Known deficiencies. Testin o hos mod ha bee limited Transmissio o file i hos mod ha no be advantag o th us o contro S/contro t hal outpu fro man tim sharin systems However n forma transmissio protoco i supported I shoul b possibl t transmi successfull i almos al cases bu th displae tested. Occasionall characte sen b th remot wil b los i characte i sen a th sam time. Testin o 120 bau operatio ha bee limited I i likel tha i wil b difficul i栠 no impossibl t maintai    coheren displa whe transmittin a 120 baud Us o characte o lin dela wil probabl mak th transmissio to slo t b economical. No testing of use of the modem port has been done. .pa Using OTERM (summary). Th mode sh esc bc -- clea lo an star logging esc bd -- suspen logging esc be -- resum logging esc bq -- n warnin o lo full esc bw -- war whe lo full Console handling commands: oul alway b i ful duple mod fo us wit OTERM Follo th mode manufacturer' an th Osborn instruction fo connectin th modem Not tha almos al modem' wil requir tha pi o th mode b connecte t pi o th comp esc cb -- rese delet o b mode esc cc -- set clear on ff mode esc cd -- set delete on bs mode esc cf -- reset clear on ff mode esc cl -- set console lf w/cr mode esc cm ute an pi o th mode b connecte t pi o th computer. O exitin OTER th RS23 interfac wil b rese t th sam option a a entry. A distributed o startu OTER i se t commun icat wit mos tim sharin service -- reset console lf w/cr mode esc cw -- set word wrap on esc cx -- set word wrap off Delay mode commands: esc db -- se bot lin cha dela mode esc dc -- ses Th defaul characteristic ma b change temporaril o OTER ca easil b modifie t star u wit differen characteristics. Establis communication followin th mode manu facturer' an th remot service' instructions. t char delay mode esc dl -- set line delay mode esc dn -- rese bot lin cha delay esc dpx -- set line prompt char to x esc dq -- clear line prompt char esc ds -- set remote ^S/^Command t OTER ar entere a escap sequences Th followin command ar recognized: Display command summary: ..------!-----------!---!--------------------------- esc ? -- display command summary Logging commands: Q esc dt -- reset remote ^S/^Q esc dw -- set delay until char esc dx -- set delay until time Input file mode commands: esc fh -- halt file read esc fl -- send lf from file    esc fm -- suppress lf from file Set line size: esc ln -- set line size nnn Transmission mode commands: esc m1 -- set 300 baud esc m2 -- set 1200 baud esc m7 -- set 7 bit transo th option availabl i displayed Th comman sequenc i no terminate an th desire optio characte ma no b entered. Th lo i alway cleare whe OTER i started. T modif OTER t us ne defaults simpl ente th desmission esc m8 -- set 8 bit transmission esc me -- set even parity esc mf -- set full duplex mode esc mg -- set host mode esc mh -- set half duplex mode esc ml -- setire commands exi wit th es command an sav th progra wit th CP/ command: save 41 oterm.com Th followin section describ i detai th us o thes commands. .pa Logging commands. lo o th sessio i kep i me xmit lf w/cr mode esc mm -- reset xmit lf w/cr mode esc mn -- set no parity esc mo -- set odd parity Quit OTERM: esc q -- return to CP/M Send a File: esc r -- read filemory A distri buted thi lo i enable a star up Th lo i circular tha is whe th lo i filled char acter a th beginnin ar delete a ne char acter ar added Th exac siz o th lo depend o th version  Display status: esc s -- display status Write log to disk: esc w -- write the log to disk Clear screen: esc z -- loca clea scree (nothin transmitted Command I curren version i i abou 41,50 characters. Becaus th Osborn seria interfac generate fals character i no connecte t liv device th lo wil star fillin a soo a OTER͠ i starte unles th mode i conn ar entere withou spaces spac ma b use t cance mos commands Al command ma b entere a uppe o lowe case. I "? i entere afte th firs lette o an comman whic require mor tha on character summar ecte an turne on I i no necessar t actuall connec t th telephon immediately I OTER i starte wit th mode off simpl typ es b t clea th log. I ful duple mode onl character receive fro th remot devi  c ar entere i th log I hal duple mod al character sen o receive ar entered I hos mod onl character sen ar entere i th log. Sinc OTER͠ doe no recogniz deletio o char acter o lines i usuall kee i finished typ es bd I mor dat yo wis t kee i abou t b received typ es b t star th lo again. Whe listin lon document on doe no wan t los th beginnin simpl becaus th lo i full T preve wil b necessar t edi th lo afte writin i t dis t eliminat errors Th lo ma b edite wit WordSta o ED Thi i als usefu fo eliminatin extraneou materia fro th lo (e.g command o message whe pron this typ th comman es bw Whe 25 character remai i th log yo wil b warne b serie o thre beeps I fil i bein trans mitted i wil b halted (I ca b continue withou los o data. Also i th remotgra sourc fil i liste an logged.) commo (an th simplest metho o usin th lo i t simpl ignor i unti somethin i receive whic on want t save Th lo i the save an late edite t eliminat unwante material.  devic respond t contro - contro fo stoppin an startin transmissio (se dela mod commands) contro wil b sent. T retur t simpl loggin withou warnin o lo overflow us th comman es bq. .pa Console handliI som cases however on ma wis t lo onl part o sessio o t kee dat whic migh overflo th log I thes case th loggin com mand ar used: esc bc -- clea lo an star logging esc bd ng commands. Th consol handlin command contro th displa o informatio sen o received The hav n effec o th lo o o th dat transmitted: esc cb -- rese delet o b mode esc cc -- set clear on ff-- suspen logging esc be -- resum logging esc bq -- n warnin o lo full esc bw -- war whe lo full Simpl typ es b th firs tim yo wis t kee th followin data Whe th dat yo wis t mode esc cd -- set delete on bs mode esc cf -- reset clear on ff mode esc cl -- set console lf w/cr mode esc cm -- reset console lf w/cr mode esc cw -- set word wrap mode   esc cx -- reset word wrap mode Man timesharin service us backspac (contro o lef cursor fo deletio o栠 characters Normally th Osborn simpl backspace bu doe no delet th character Thi i harmles bu mcin t th nex line T retur t norma handling n advanc a o teletypewriter us th comman es cm. .pa 14 Mos timesharin service forma th outpu fo 7 o 8 characte terminals Th lin siz ma b se t 5 character (a b confusin i severa character ar deleted T caus characte t b delete whe backspac i displayed ente th comman es cd T caus backspac t simpl mov th cursor us th comman es db. Som timesharin serse below) bu i word ar spli a th en o th line thi ma b confusing T hel kee coheren display wor wra ma b se (es cw) Thi wil kee word o lin i pos sible Fo th purpose o oterm wor i define vice an bulleti board sen for fee t signa en o page Normall thi move th curso righ on positio o th Osborn 1 T clea th scree whe for fee i dis playe us th comman es cc T retur t th no a an sequenc o character no includin space o contro characters Not tha th wor wrappin i base o th lin siz se fo oterm no o th physica dimension o th screen I orde fo thi t b ver useful th lin sirma Osborn handlin (necessar fo system whic us for fee fo curso positionin rathe tha ne page us th comman es cf. Mos timesharin service an bulleti board wil sen "free lin fee i respons t carriag returz mus b se n greate tha th physica scree size. T kee th displa lookin a norma a possible oter doe no displa space o tab a th begin nin o lin tha wa starte automaticall b wor wrap Sinc wor wra n Therefore normall th displa shoul no advanc lin whe carriag retur i displayed T handl th occasiona syste whic doe no pro vid lin feeds typ es cl Thi wil interpre carriag retur a o typewriter advani operativ o char acter yo enter i ma appea tha th remot servic i no responding I thi appear t b th case tr typin printin character com promis wa neede here sinc i i no possibl fo oter t   determin whethe characte receive fro ful duple syste i a ech o th char acte yo type o not. Wor wra ma caus problem whe transmittin fil (althoug thi shoul b ver rar unles yo ar usin 120 baud)set delay until char esc dx -- set delay until time OTER ma b se t dela afte eac characte (es dc) t dela afte eac lin (es dl) t dela afte eac characte an eac lin (es db o no t dela (es dn).  T tur of wor wrap us th comman es cx. .pa Delay mode commands. Whe sendin fil t remot computer i ma b necessar t giv th remot som tim t proces th data Thi i particularl importan whe accessin Th dela tim ma b se t an digi 1-9 I th dela tim i n ther wil b dela o approxi matel (n+1)/3 second Thi tim i double fo lin dela unles lin feed ar bein supplie o th scree (es cl o o th transm bulleti boards Mos timesharin service requir littl o n delay However sinc th remot ma b transmittin a th sam tim a OTERM som character ma b los fro th displa o th displa ma b garbled I man casissio (es ml). I th dela tim i 0 OTER wil dela unti characte i received. Usuall i wil b sufficien t dela onl unti characte i received T caus th dela t b terminate b character typ es dc Te th dela mode ma b use t generat coheren dis plays. esc db -- se bot lin cha dela mode esc dc -- set char delay mode esc dl -- set line delay mode  alway dela fo th specifie time us th comman es dx Thi ha n effec i th dela tim i -- i tha cas dela i alway unti characte i received. I som case i ma b possibl t simpl sen lin an the esc dn -- rese bot lin cha delay esc dpx -- set line prompt char to x esc dq -- clear line prompt char esc ds -- set remote ^S/^Q esc dt -- reset remote ^S/^Q esc dw --  wai fo promp befor sendin th nex line Thi i almos mandator whe sendin t hal duple systems T se OTER t wai afte lin unti specifie characte i received us th comman es dpx ma b an characte   in cludin space Th cas o i significant T clea th lin promp character us th comman es dq. Fo example man bulleti board wil alway promp wit questio mar whe inpu i desired es p wil preven ne li file esc fm -- suppress lf from file Th es f comman i useful onl i include i fil bein sent I suspend transmittin th fil an return contro t th keyboard Th fil ma b continue withou los o dat (n fro fil fro bein transmitte unti th questio mar i received. Th lin promp characte override an lin delay bu no th characte delay. Whe sendin file OTER mus periodicall rea fro th disk Thi ma tak se Rea File). Standar CP/ file contai lin fee afte eac carriag return Sinc mos timesharin service an bulleti board suppl lin feeds on usuall doe no wan t transmi them T ignor lin feed fro file ove second OTER wil dela befor readin th disk bu eve s som receive dat ma b lost I th remot devic respond t contro b haltin transmissio an respond t contro b restarting thi ca b prevente bbein sent us th comman es fm. Som timesharin service provid "tape mod i whic lin feed ar no provided Transmissio ma b mor satisfactor i file ar sen i thi mode T us suc mod o fo service whic d requir sendin contro befor readin th dis an contro whe read fo mor data T infor OTER tha thi i possible ente th com man es ds T infor OTER tha contro S/contro ma no b used ente th comman es dt. N lin feeds us th comman es fl. .pa Set line size: esc ln -- set line size n OTER͠ ca sen o receiv line o an length Usuall i wil b mor convenien i th dat al fit o th screen Therefor OTER OTE: th contro ma als b use t preven overrunnin th log N contro i sen automaticall i tha case. .pa Input file mode commands. esc fh -- halt file read esc fl -- send lf fromi distribute wit defaul lin siz o 5 characters A th en o line th displa wil ski t th begin nin o th nex line. T chang th lin size ente es . Linesiz wil b take mo 256 I   greate tha 128 12 wil b used I zero th lin siz wil no b changed. I questio mar i entere afte th l instruct ion wil b displayed An previou digit wil b ignored. NOTE: Th lin siz affect onl th dis seria젠 (modem connector Th dat rat mus matc tha o th remot device Se 30 bau (es m1 o 120 bau (es m2 a required. OTER͠ an th remot devic mus agre a t th numbe o bit t bplay Th lo an th transmissio ar no affected. NOTE: Th lin siz se i OTER i i effec onl i OTERM Whe OTER i ende th linesiz i restore t th valu tha wa se whe CP/͠ wa loade transmitte fo eac characte an th parit o eac character Selec bit (es m7 o bit (es m8 an parit eve (es me) parit od (es mo o n parit (es mn a required. Mos service wil accep 30 bau bit o whic wa las se b SETUP. .pa Transmission mode commands. Severa characteristic mus b se t matc thos o th remot device. esc m1 -- set 300 baud esc m2 -- set 1200 baud esc m7  an n parity 120 bau operation i available wil b faste an i man case mor economical. OTER support mode connecte t eithe th RS23 o th mode connecto o th fron o th Osborn 1 T us th RS23 connector u -- set 7 bit transmission esc m8 -- set 8 bit transmission esc me -- set even parity esc mf -- set full duplex mode esc mg -- set host mode esc mh -- set half duplex mode s th comman es mr T us th mode connector use th comman es ms. I ful duple mode character transmitte ar no automaticall displayed Thi mod i use t com municat wit mos timesharin service an bulleti board esc ml -- set xmit lf w/cr mode esc mm -- reset xmit lf w/cr mode esc mn -- set no parity esc mo -- set odd parity esc mr -- modem on rs232 connector esc ms -- mode o (thes service automaticall sen bac an character sent. T ente ful duple mode us th comman es mf. fe service us hal duple mode I thi mode th termina (OTERM i responsibl fo displayin th character i s  ends T ente hal duple mod us th comman es mh. T communicat wit termina o compute usin "dumb termina program us th comman es m t ente hos mode I thi mode character sen b OTER͠ ar displaye an cce Yo ar i hos mod an th remot assume yo ar i ful duple mode Ente es mf. Character sen ar no displayed Character receive ar displayed Yo ar i ful duple mod bu th remot aharacter receive ar echoe bac t th remot device. Man service offe choic betwee ful an hal duple mode Th mos commo proble i communi cation i nois o th phon line I yo us ful duplex correctl displayssume yo ar i hal duple mode Ente es mh. Th displa doubl o tripl space o doe no ski betwee lines Lin feed ma b sup plie o th scree onl b es cl ma b auto maticall transmitte b ese characte i evidenc tha th remot devic receive you transmissio properly Therefore ful duple i recommende wheneve possible. Full/half/hos ar se independentl o th handlin o lin feeds I hos mod i wil alm ml o ma b pro vide b th remot device I mor tha on sourc i providin lin feeds th displa wil multipl space I non is the line wil overwrite. Character receive ar no displaye o aros alway b necessar t sen lin fee afte eac carriag return T d thi us th comman es ml T sto automati sendin o lin feeds us th comman es mm. Th followin possibl problem ma b cause b imprope settin garbled Th dat rate numbe o bits o parit ar incorrect Chec wit th remot servic fo th correc settings I receive character ar no displayed i i possibl tha th mode i no connecte  o modes: Character sen ar displaye twice Character receive ar displaye once Yo ar i hal duple mod an th remot assume yo ar i ful duplex Ente es mf. Character sen o receive ar sen twia OTER expects Se OTER͠ t us th RS23 o mode connecto a required I thi happen occasionally you mode i no workin properl o ther i nois o th phon line. .pa Quit OTERM: esc q --    return to CP/M This command returns to CP/M. .pa Send File: esc r -- read file Thi comman send fil previousl prepare wit WordSta o ED Fo prope transmission dela mode o fil mode ma hav t b set.  d no wis t rea file simpl respon wit return. I yo wis t continu sendin fil whic wa halted respon "* return. .pa Display status: esc s -- display status Thi comman display th curren setti Th fil bein transmitte ma contai OTER͠ com mands Thes wil b processe a i entere a th keyboard I fac i yo ofte mus switc modes i ma b desirabl t creat file wit th mos commo combination o mode an n o al modes Th displa wit al mode se a originall distribute is: OTERM -- Terminal Emulator Copyright 1981, 1982 Michael M Rubenstein Version 2.20 11 Mar 82 OTERM STATUS full duplex line sz: 52 console -- auto lf:n dat t trans mit. I a OTER rea comman i encountere i file th ne fil wil b rea an transmitted A th en o th ne fil contro wil retur t th keyboard no t th previou file I othe words readin  off bs del: on ff clr: on wordwrap: on transmit -- auto lf: off port: RS232 bits: 8 parity: none rate: 300 file -- suppr lf: on delao file i chained no nested. T sto transmissio o file typ esc An othe ke i ignored. Afte enterin thi command OTER wil ask: Read file name (* to continue)? Ente lega CP/ fil nam (wit devic i no o y: char char: on line: off ln prmpt: none ^S/^Q: on time: 1 log: on warn: off using: 0 of 41500 .pa Write log to disk: esc w -- write the logth defaul disk followe b return I entere i lowe cas th fil nam wil b converte t uppe case. I th fil canno b found OTER wil displa th message: Cannot open and will ask for the file name again. I yo to disk Thi comman write th lo t disk Th lo fil ma the b edite wit WordSta o E o ma b printed. After entering this command, OTERM will ask: Write file name? Ente lega CP/ fil nam (wit devic i   th fil i no t b o th defaul CP/ disk followe b return I entere i lowe cas th fil nam wil b converte t uppe case. I th fil canno b created OTER wil displa th message: Cannot open and will ask for the file name again. I som case fil syste messag ma als b displayed Thes indicat dis ful o i/ errors. Th lo wil b writte t th disk I ther i a i/ erro o ther i no enoug roo fo th file  fil syste messag wil b displayed I thi case th fil ma hav bee partiall o completel written I ma appea o th dis wit th nam $$$$nnnn.$$ (nnn i number) Th safes cours i t chang disk an tr again. .pa Clear screen: esc z -- local clear screen(nothing transmitted Thi comman clear th screen Thi i loca operation Nothin i transmitte o logged. .pa End of Document The programs oterm disassem hanoi were written by Michael M Rubenstein 4503 Rena Rd #201 Forestville, MD 20746 They may be distributed freely provided no fee is charged.   UNSPOOL.ASM 81-11-21 for CP/M 2.0 and up. AUTHOR: Gary P. Novosielski Rutherford, NJ (201) 935-4087 INTRODUCTION: UNSPOOL (Ver 3.0) is a program to send a standard CP/M file such as a .PRN or .ASM file to the system's list or punch device, while still allowing other system operations to take place. The file is transferred during periods when console is waiting for input. SYNTAX: UNSPOOL [d:]filename.ext [dev] or UNSPOOL dummy OFF [square brackets denote optional parameters] Where d: is an optional drive spec such as A: or B:. If not entered, the current default drive is assumed. filename.ext is the name of the CP.M file to be printed/punched dev is the symbolic name of the  output device to be used. Valid devices are LST and PUN. Note that the colon (:) usually present in these names is NOT entered. If not specified, the LST: device is assumed. OFF If OFF is specified instead of a de  vice name, the operator will be offered the option of cancelling UNSPOOL if it is already running. dummy Because the word OFF is the second parameter, a filespec is still needed. A dummy name of "." will suffice as a plac entries. If an error is detected, the program will display an error message on the console and attempt to warm-boot CP/M. If found, the BIOS vector table is copied into the program segment which will remain active during unspooling so that subsequee holder. Examples: UNSPOOL TEST.PRN will send the file TEST.PRN from the current default drive to the current LST: device. UNSPOOL A:TEST.PRN LST is exactly equivalent to the above, assuming drive A is the default drive. Note that tnt application programs running concurrently with UNSPOOL will still have access to the BIOS. This table is modified to trap attempts to warm boot the system or perform direct console input. The address of the old BIOS vector table, the BDOS entry ahe device name has no trailing colon. UNSPOOL B:ZINGER.HEX PUN will send the file ZINGER.HEX from the B drive to the current PUN: device regardless of which drive is currently the default. Note that the device is "PUN" not "PUN:". UNSPOOL .ddress, and the CCP return address (from the top of the stack on entry) are saved in memory. The "dev" parameter from the command line is checked. If not valid, an error message is typed and control returns to the CCP. If the "dev" parameter is the  OFF UNSPOOL *.* OFF UNSPOOL OFF OFF all cause an operator prompt: "Do you want to cancel UNSPOOL?" A single "Y" or "N" (Yes or No) is accepted from the console as a response. Any other character is assumed to mean "No". UNSPOOL OFF causliteral OFF, the program executes a BDOS funcion 0 (System Reset) and terminates. The file named in the command line is opened for input. If not present, the command is echoed to the console followed by a "?" and control returns to CCP. If the drives the file "OFF. " to be sent to the list device. OPERATION: Upon loading, the program checks to see that the the BIOS vector table pointed to by the word at location 0001H is valid, i.e. is a table of JMP instructions containing at least 16e is not explicit, the current default drive number is recorded internally in case the default drive is changed while UNSPOOL is active. The current user number and IOBYTE values are checked and stored internally so that if the user number is changed,   UNSPOOL will still be able to read the input file. If the device is changed (using STAT LST:=TTY: for example) unspool will continue to use the physical device in effect at the time the program was initiated. Any application programs will, however,ce until the console becomes ready, i.e. a key is actually pressed. At that time the BDOS function or BIOS call is executed normally, and control returns to the application program. If a jump to BOOT is attempted, this is also intercepted by the UNS use the new values of the user number and the new physical device assignments. If no errors were detected, the active program segment which monitors all calls to BDOS is relocated into high memory just below the CCP. This reduces the available user POOL supervisor segment. The message "Unspooling in progress" is displayed on the console, and no actual boot takes place. Control is returned to the protected copy of the CCP instead. Before returning, a disk reset is performed and the default DMA program area by 3 K: 4 pages for the UNSPOOL supervisor segment, and 8 pages for the CCP which is commonly overwritten by user program buffers. The BOOT and BDOS jumps in low memory are modified to protect the CCP and UNSPOOL supervisor segment. Coaddress is reset to 0080H to simulate a true warm-boot as closely as possible. If warmboot is attempted using BDOS function 0, the program will prompt the operator with the option to cancel. If the response is "Y", warmboot is performed using BDOS funtrol is then returned to the console. Normal CP/M operation will then be possible. Characters will be sent from the input file to the output device whenever the console is idle. Whenever an application program or the CCP requests console input usnction 0 as requested. Otherwise the request is handled as with normal warmboot, above. When the input file is completely transferred, or a 1AH end-of-file character is detected, the supervisor becomes inactive, and passes on all previously interceing BDOS functions 1 or 10, or a direct call into the jump table at C(BOOT + 1) + 6, the supervisor segment intercepts these requests and checks to see if the console is idle. If it is, characters are transferred from the input file to the output devipted requests immediately, without checking console status. When the next warm-boot request is detected, the supervisor removes itself from memory by executing a true warm-boot, and informs the operator with the message "UNSPOOL completed.". NOTES:   While UNSPOOL makes every effort to restore the values of the DMA address, USER number, IOBYTE, and default disk drive before returning control to the program, a hardware reset may leave these values in an undetermined state if unspooling was actueed typing may cause one or more characters to be lost. This effect will vary depending upon the program being run, the types of input reqests (character or line) it uses, and the relative locations on disk of the spool file and any files in use by theally taking place at the time. When function 10, Read Console Buffer is used, UNSPOOL will transfer characters only until the first key is pressed. At that time, no characters will be transferred until the input line is completed by pressing a carriag program. As a result, heads-down typing is not reccommended while UNSPOOL is running. Some experience with UNSPOOL will teach the user when caution is required. INSTALLATION: The source file is written for assembly with the MAC assembler. Thee return. UNSPOOL requires that the List Status function in the BIOS was properly implemented at system installation time. UNSPOOL will not send characters to the LST: device unless it recieves a ready condition from the List Status routine. If the  .HEX file produced is LOADed to a .COM file and executed just as any normal program. Relocation is done at execution time as described above. If the assembly option EXPAND is set to TRUE, tab characters in the input file will be expanded to spaces wPUN: device is used, no status check is provided for by CP/M, so a not-ready condition on the punch may cause the system to hang up if PUN was specified on the command line. See the CP/M Alteration Guide for a discussion of the BIOS List Status routineith assumed tab stops at every eighth print position. This option should be set to FALSE if the printer driver or the printer itself can properly handle the tab character. If the option PHYSBS is set to TRUE, a backspace character will cause the tab. Although the console is polled frequently during the unspooling of the file, some of the diskette operations may take a second or two to complete, for example when a new extent is opened. Since the console is not polled during this period, high sp expansion algorithm to recognize backspace characters and decrement the column count when a backspace is encountered in the input file. This option should be set to FALSE if backspace characters are ignored by the printer. All other control codes ex  cept carriage return are assumed to be non- printing, and are ignored by the algorithm. If tab expansion is included, the version number in the signon message will be followed by "/T". Gary Novosielski  TITLE 'UNSPOOL Disk to device background process' ; VERSION EQU 3$0 ;Version number ; ;Author: ; Gary P. Novosielski ; ;NOTE: This source file requires MAC for assembly. ; Due to the complexity of operations performed by ; the macros which generate the relocation table, the ; assembly process will be significantly longer than ; normal for a program of this size. Be prepared for ; a long period of no disk activity on each pass before ; pressing the panic button. ; ;Revisions: (in LIFO order) ; ;3.0 81-11-12 ; New release. Relpaces 2.3. ;Version 3 ; Now continues to run during direct BIOS input. ; The device name "off" has been implemented as ; a method of cancelling an already running ; UNSPOOL. It causes a BDOS function 0 reset. ; Function 0 reset now trapped. Prompts operator ; with option to cancel. Optional tab expansion ; support at assembly time. Disk reset (login) ; occurs during simulated warm-boot. Various ; cosmetic and sowrce revisions. ;Version 2 ; Copy BIOS ta  ble so application programs will ; still have BIOS access by using word at BOOT+1. ; Preserve USER and IOBYTE values as of startup. ; ; BDOS Functions: ; @SYS SET 0 @KEY SET 1 @CON SET 2 @RDR SET 3 @PUN SET 4 @LST SET 5 @DIO SET 6 @RIO SET 7 op of the Transient Program Area, overlaying ;the Console Command Processor. ; SAVECCP SET TRUE ;MUST remain true for UNSPOOL OVERLAY SET FALSE ;(initially) ; Macro Definitions ; ; Perform a standard BIOS function: CPM MACRO FUNC,OPERAND IF NOT @SIO SET 8 @MSG SET 9 @INP SET 10 @RDY SET 11 @VER SET 12 @LOG SET 13 @DSK SET 14 @OPN SET 15 @CLS SET 16 @DIR SET 17 @NXT SET 18 @DEL SET 19 @FRD SET 20 @FWR SET 21 @MAK SET 22 @REN SET 23 @CUR SET 25 @DMA SET 26 @CHG SET 30 @USR SET 32NUL OPERAND LXI D,OPERAND ENDIF ;not nul operand IF NOT NUL FUNC MVI C,@&FUNC ENDIF ;not nul func CALL BDOS ENDM ; ; Generate a label of the form ??Rnn to tag an ; address requiring relocation: RTAG MACRO LBL,VAL ??R&LBL EQU VAL ENDM  @RRD SET 33 @RWR SET 34 @SIZ SET 35 @REC SET 36 ; ;System equates: CPMBASE EQU 0 BOOT SET CPMBASE BDOS SET BOOT+5 TFCB EQU BOOT+5CH TFCB1 EQU TFCB TFCB2 EQU TFCB+16 TBUFF EQU BOOT+80H TPA EQU BOOT+100H CTRL EQU ' '-1 ;CTRL CHAR MASK CR SE; ; Flag as a relocatable instruction ; is of the form: R MACRO INST @RLBL SET @RLBL+1 RTAG %@RLBL,%2+$-@BASE INST-@BASE ENDM ; ; During bit map construction, get the next R-tagged ; address value: NXTRLD MACRO NT CTRL AND 'M' LF SET CTRL AND 'J' TAB SET CTRL AND 'I' FF SET CTRL AND 'L' BS SET CTRL AND 'H' EOF SET CTRL AND 'Z' FALSE EQU 0 TRUE EQU NOT FALSE ? EQU -1 NVECTS EQU 16; ;Number of BIOS vectors FCBLEN EQU 33 ;Length of input FCB ; ; AssemblN @RLD SET ??R&NN @NXTRLD SET @NXTRLD + 1 ENDM ; ; ; Enter here from Console Command Processor (CCP) ; CCPIN ORG TPA JMP INTRO ; SIGNON: DB 'UNSPOOL',TAB,TAB,TAB DB 'Ver ' DB (VERSION/10)+'0' DB '.' DB (VERSION MOD 10)+'0' IF EXPANy options EXPAND SET TRUE ;True to expand tabs IF EXPAND PHYSBS SET TRUE ;True to recognize backspace ENDIF ;The flag SAVECCP should be made true if ;the program segment should load below the CCP. ;If false the segment will load in the extreme ;tD DB '/T' ENDIF ;expand DB '$' ; INTRO: CPM MSG,SIGNON CALL SETUP ;initialize. LXI H,BDOS+2 ;find top of memory MOV A,M ;page address ;Form destination... SUI PAGES+1 ;...address in MOV D,A ;DE pair. MVI E,0 PUSH D ;save o  n stack LXI H,@BASE ;source address LXI B,SEGLEN ; MOVLOOP: ;Move (HL) to (DE) for (BC) bytes MOV A,B ORA C ;test for (BC) = 0 JZ MOVDONE DCX B ;count down MOV A,M ;move a byte STAX D INX D ;bump the pointers INX H JMP MOVLOOP ;on 8-byte boundry? JNZ NEXTBIT ; NEXTBYT: ;Get another byte of relocation bits XTHL MOV A,M INX H XTHL MOV L,A ;save in register L ; NEXTBIT MOV A,L ;remaining bits from L RAL ;next bit to CARRY MOV L,A ;save the rest JNC NEXT ; MOVDONE: ;The segment is now moved to high memory, but not ;properly relocated. The bit table which specifies ;which addresses need to be adjusted is located ;just after the last byte of the source segment, ;so (HL) is now pointing at it. POP ADR ; ;CARRY was = 1. Fix this byte. LDAX D ADD H ;(H) is the page offset STAX D ; NEXTADR INX D JMP FIXLOOP ; FIXDONE: ;Finished. Jump to the first address in the new ;segment in high memory. ; ;First adjust the stack. One garbage woD ;beginning of newly moved code. LXI B,SEGLEN;length of segment PUSH H ;save pointer to reloc info MOV H,D ;offset page address ; FIXLOOP: ;Scan through the newly moved code, and adjust any ;page addresses by adding (H) to them. The word on ;trd was ;left by fixloop. INX SP INX SP ; ;(HL) still has the page address MOV L,A ;move zero to l PCHL ;Top-of-stack is CCP return SETUP: ;First, check environment to see if BIOS vectors ;are accessible. LDA BOOT ;Location BOOT should Cop of the stack points to the next byte of the ;relocation bit table. Each bit in the table ;corresponds to one byte in the destination code. ;A value of 1 indicates the byte is to be adjusted. ;A value of 0 indicates the byte is to be unchanged. ; PI ( JMP ) ;have a JMP instruction JNZ VECTERR LHLD BOOT+1 ;Location one points MVI C,NVECTS ;to the table of jumps ;which we move into ;the code. LXI D,BIOSV XCHG VLOOP: LDAX D CMP M ;another JMP? JNZ VECTERR INX D INX H;Thus one byte of relocation information serves to ;mark 8 bytes of object code. The bits which have ;not been used yet are saved in L until all 8 ;are used. ; MOV A,B ORA C ;test if finished JZ FIXDONE DCX B ;count down MOV A,E ANI 07H  LDAX D MOV M,A INX D INX H LDAX D MOV M,A INX H INX D DCR C JNZ VLOOP ; Save old vectors and CCP return address ;Patch up new vectors as required. LHLD BOOT+1 SHLD OLDBOOT; Save the BOOT vector ; LXI H,2; Retrieve the CCP D  AD SP; return address from MOV A,M; down the stack a ways. INX H MOV H,M MOV L,A SHLD CCPRET+1; Save the CCP re-entry ; point. ; LHLD BDOS+1 SHLD GOBDOS+1; Save the BDOS entry ; point. ; LHLD CONIN+1; Save the direct call SHLD user number in effect at time of entry CPM USR,? STA ENTUSR ; SETUPIOB: ; Save IOBYTE in effect at time of entry CPM RIO STA ENTIOB ; RET ; SCOMP: LDAX D CMP M RNZ INX D INX H DCR B JNZ SCOMP RET ; DEVERR: CPM MSG,DEVER REALCON+1; to console input. SETUPDEV: LXI D,TFCB2+1 LDAX D CPI ' ' JZ SETUPFIL ; LXI H,LSTLIT MVI B,4 CALL SCOMP JZ SETUPFIL; Use default ; LXI D,TFCB2+1 LXI H,PUNLIT MVI B,4 CALL SCOMP JNZ CKSYS MVI A,@PUN STA DEVICE JRMSG POP H; Adjust stack RET; Exit to CCP VECTERR: CPM MSG,VCTERRMSG JMP BOOT ;try re-booting. ; LSTLIT: DB 'LST ' ;Note trailing blank PUNLIT: DB 'PUN ' ;Note trailing blank OFFLIT: DB 'OFF ' ;Note trailing blank DEVERRMSG: DB CRMP SETUPFIL CKSYS: LXI D,TFCB2+1 LXI H,OFFLIT MVI B,4 CALL SCOMP JNZ DEVERR CPM SYS ;Request system reset SETUPFIL: LDA TFCB1 ORA A JNZ OPENIT ;The drive has been defaulted. Make it explicit ;in case the default drive is changed whi,LF,'Invalid device.$' VCTERRMSG: DB CR,LF,'Error in system table. ' DB 'Attempting re-boot.$' PAGE ;Align location counter to next page boundry @BASE ORG ($ + 0FFH) AND 0FF00H @RLBL SET 0 ; one label for relocating ; TRAPCON ; ; The segle the ;file is being unspooled. CPM CUR; Returns A: as 00 INR A; Open needs A: as 01 STA TFCB1 OPENIT: CPM OPN,TFCB1 INR A JNZ COPYFCB ;Error. Can't open input file. LXI H,TBUFF MOV A,M ADD L MOV L,A ADC H SUB L MOV H,A INXment to be relocated goes here. ; Any position dependent (3-byte) instructions ; are handled by the "R" macro. ; For readability, the macro name "R" is placed in ; column 2. The preceding blank must be present to ; distinguish it from a label. ;**** H MVI M,'?' INX H MVI M,'$' CPM CON,CR CPM CON,LF CPM MSG,TBUFF+1 POP H; Adjust stack RET; Exit to CCP ; COPYFCB: LXI H,TFCB1 LXI D,FCB MVI C,FCBLEN COPY1 MOV A,M STAX D INX H INX D DCR C JNZ COPY1 ; SETUPUSR: ; Save********************************************* BDOSV: ;During operation, this location will point ;to INTERCEPT and will be jumped to by BDOS. ;It must be at the lowest location ;in the protected segment of code. R ;complete installatio  n BIOSV: REPT NVECTS JMP ? ENDM CONSTAT EQU BIOSV +(1*3) CONIN EQU BIOSV + (2*3) LSTSTAT EQU BIOSV + (14*3) ; INTERCEPT: ;This routine intercepts all BDOS calls. MOV A,C; Get function CPI @SYS; Is it a system reset? R CPIng for a key ;to be input. We will use this opportunity to print ;some characters to the device until a key is ;actually pressed. R ;The A register tells type ; of input request. LXI H,0 DAD SP R PUSH H; Save  @KEY; Is it single key input? R CPI @INP; or buffered input? R WAITING: ;Wait for actual keypress before honoring input ;request. Unspool characters in the meantime. R ORA A; See if finished. R R PROC1: R ; Check for keypress. R R ;Check device being used CPI @LST R ;If itOCESS>; Note that A <> 0 R ; Honor the input request ; CKDMA CPI @DMA; If the DMA address is being ; changed, we have to know. R XCHG R XCHG ; GOBDOS JMP ?; Patched on entry ; points to "real" BD is LST: R ORA A R ;Loop if not ready ; PROC2: IF EXPAND R ; In a tab sequence? ORA A R ENDIF ;EXPAND ; R MOV A,M ORA A R R INR AOS routine. ; TRAPCON: ; The application has done a direct BIOS call for ;console input. We can be confident that this was not ;as a result of a BDOS operation, since BDOS knows ;nothing about our local jump table. Thus we will not ;need to be con MOV M,A MOV C,A MVI B,0 DAD B; Point to the buffered char. MOV A,M CPI EOF R IF EXPAND R ; Print head position. ; CPI TAB; Is this a tab? R ; Process it. ; IF PHYSBS CPI BS; Backspace? cerned with the non-reentrancy of BDOS. ; R ORA A; See if active. MVI A,0; Flag BIOS-type request. R ; Unspool a while if so. REALCON: JMP ?; Patched during setup. ; PROCESS: ;The application program is now waiti R DCR M; Back up 1 column R PROC3: ENDIF ;PHYSBS CPI CR; End of line? R MVI M,0; Reset column count. R PROC4: CPI ' '; Other ctrl char? R ; Dont change column. PROC5: IN  R M; Increase column. PROC9: ENDIF ;EXPAND MOV E,A PUSH D ;SAVE CHARACTER ;Set the IOBYTE as it was when UNSPOOL was ;started. R MOV E,A MVI C,@SIO R POP D ;RESTORE CHARACTER MVI C,@LST; Default DEVICE EQU R XCHG; Restore DMA address MVI C,@DMA; to old value. R R MOV E,A; Restore User number MVI C,@USR; to old value R POP PSW; Read return code POP H; Buffer pointer ORA A; How wen $-1; Device code patch R R ; Restore active IOBYTE MOV E,A MVI C,@SIO R R ; IF EXPAND HNDTAB: R ; Set the flag SPCOUT: MVI A,' ' R ; TABSEQ: R MVI A,7 ANA M; Check if more blanks needed R R ; Clear the flag R ENDIF ;EXPAND ENDFILE: ; An EOF has been reached on the input file. ;Mark this program as inactive, and de-install on ;the nexf via direct BIOS, a ;direct BIOS call is used. This distinction in made ;necessary by the one-character input buffer which ;BDOS may fill during console output. (Yes output.) ; R ; Type of input which ORA A; was requested. R ; PROCEXIT: POP D POP B POP H; Restore SP SPHL RET ; ; FILLBUFF: ;Fill the buffer from the file PUSH H INX H XCHG; Buffer address to DE MVI C,@DMA; Set DMA address R MVI E,? KEY0> MVI C,@RDY; Use BDOS if non-zero R ORA A RET CKKEY0: R ; Use BIOS otherwise ORA A RET ; SYSREQ: ;The application process has requested a warm-boot ;by invoking BDOS function 0. Inquire whether the ;sp MVI C,@USR R ; Get current user R ; Save it R ; Change to user at entry MOV E,A MVI C,@USR R R MVI C,@FRD; Read a sector R PUSH PSW; Save read return code ool writer should be terminated. If not, treat ;as a normal warm-boot request. ; LXI SP,CCPIN; Set up a valid stack R ; If not active ORA A; then don't ask. R R R MVI C,@MSG R ; CPM KEY ;Get reply ORI 'a'-'A' ;Force lower case CPI 'n' ;Note lower case n. JZ BOOT CPI 'y' ;Note lower case y. JNZ BOOT ;Default = No ; ; Do a real BDOS function 0 which will terminate ; the spool writer. R ' DB '$' CNCLMSG: DB CR,LF,'UNSPOOL Cancelled.' DB '$' OLDBOOT DW ? DMAHOLD DW TBUFF ACTIVE DB TRUE IF EXPAND TABFLAG DB FALSE LINEPOS DB 0 ENDIF ;EXPAND USRHOLD DB ? ENTUSR DBG> SYSRQ9: MVI C,@MSG ;Inform the operator R ; MVI C,@SYS R ;Reset system BOOTREQ: ;The application process has requested a reboot ;by jumping to location 0. If we are no longer ;active, we will honor the request ? IOBHOLD DB ? ENTIOB DB ? ITYPE DB ? FCB DS FCBLEN BUFFER DB ? ; ONESHOT: ; This one-shot code patches TRAPCON into the local ;jump table. It is then overlayed by the file buffer ;on the first read, so it takes up no extra memory. R ORA A R ;Jump to old boot address as read from memory ;word 1 before we chaRAPCON> R R ; Start the program. ; OVERLAY SET $ ;Bit table may start here ; Nothing past here but DS's. DS 128-$+BUFFER DS 32; LOCAL STACK AT LEAST 16 WORDS ; PLUS WHATEVER'S LEFT OVER LCLSTACK EQU ($+0FFH) ANDnged it. R MVI C,@MSG R R PCHL ; NOTYET LXI H,TBUFF R MVI C,@LOG R R MVI C,@MSG R R R R SHLD BDOS+1 R R R SHLD BOOT+1 CCPRET: JMP ?; Patched on startup ; ACTMSG: DB CR,LF DB 'Unspooling in progress.' DB '$' DONEMSG: DB CR,LF,'UNSPOOL Completed.' DB '$' CNCL?:  down into ;unused DS area: SEGLEN EQU OVERLAY-@BASE ORG @BASE+SEGLEN ELSE ;relocation bit map starts here: SEGLEN EQU $-@BASE ENDIF ;overlay PAGE ; Build the relocation information into a ; bit map following the code. ; @X SET 0 @BITCNT   SET 0 @RLD SET ??R1 @NXTRLD SET 2 RTAG %@RLBL+1,0FFFFH ;define one more symbol ; REPT SEGLEN+8 IF @BITCNT>@RLD NXTRLD %@NXTRLD ;;next value ENDIF IF @BITCNT=@RLD @X SET @X OR 1 ;;set low bit ENDIF @BITCNT SET @BITCNT + 1 IF @BITCNT MOD 8 = 0 DB @X ;;DEFINE THE BYTE @X SET 0 ;;clear hold variable for more ELSE @X SET @X SHL 1 ;;not 8 yet. move over. ENDIF ENDM ; END CCPIN ;CV.ASM - DUAL SCROLLING COMPARE ROUTINE FOR VDM ; ;05/06/79 BY WARD CHRISTENSEN ;07/09/79 MODIFY FOR VDM AT 0CC00H ;10/04/79 PUT IN CP/M DIRECT I/O ; ADD PRINTING HEX FOR NON-PRINTABLES ;09/04/82 Set VDM to 0F00H for Osborne ; by Jim Woolley, FOG Disk Librarian ; ;PROGRAM TO SCROLL 2 FILES AT ONCE, 1, 4, OR 7 ;LINES AT A TIME. ALSO CAN COMPARE THE FILES ;WITH CONTINUOUS SCROLLING UNTIL A DIFFERENCE ;IS FOUND ; ;COMMAND FORMAT: CV NAME1 NAME2 ; ;NAME1 WILL BE SCROLLED ON THE TOP HALF   OF THE VDM ;NAME2 WILL BE SCROLLED ON THE BOTTOM HALF OF THE VDM ; ; TOP CHAR BOT CHAR FUNCTION ; ; Y H CONTINUOUS SCROLL ; U J 1 LINE SCROLL ; I K 4 LINE SCROLL ; O L 7 LINE SCROLL ; ; C SCROLLS CONTINUOUSLY, COMPARING THE FILES ; STOPSSTART OF PROGRAM EXECUTION ; MOVE FCB2,MYFCB,12 ;SAVE FILENAME CPM OPEN,FCB INR A JZ OPENER1 CPM OPEN,MYFCB INR A JZ OPENER2 LXI H,VDM MVI B,4 ;# PAGES MVI A,' ' ;CLEAR CHR CLRLP MOV M,A INR L JNZ CLRLP INR H DCR B JNZ CLRLP ON A MIS-COMPARE. ; VDM EQU 0F000H ; MF SET 0 ;SHOW MOVE NOT REQUESTED ; ;(FROM EQU8.LIB...) ;DEFINE SOME MACROS TO MAKE THINGS EASIER ; ;DEFINE DATA MOVE MACRO: MOVE from,to,length ; from may be addr, or quoted string ; MOVE MACRO ?F,?T,?L  CALL TOP ;SHOW FIRST.. CALL BOT ;..TWO LINES ; LOOP CALL KEYIN ANI 5FH ;MAKE UPPER CASE CPI 'Y' JZ TOPCONT CPI 'H' JZ BOTCONT CPI 'U' JZ TOP1 CPI 'J' JZ BOT1 CPI 'I' JZ TOP4 CPI 'K' JZ BOT4 CPI 'O' JZ TOP7 CPI 'L' JIF NOT NUL ?F IRPC ?C,?F ?Q SET '&?C&?C' ;;TEST FOR QUOTE EXITM ENDM IF ?Q EQ '''' LOCAL ?B,?Z CALL ?Z ?B DB ?F ?Z POP H ;GET FROM LXI B,?Z-?B ;GET LEN ELSE LXI H,?F ENDIF ENDIF IF NOT NUL ?T LXI D,?T ENDIF IF NOT NUL ?L Z BOT7 CPI 'C' JZ COMPARE CPI 'Q' JZ EXIT JMP LOOP ; TOP CALL RDTOP PUSH PSW CALL SCRTOP POP PSW CPI 1AH RZ CPI 0AH JNZ TOP RET ; BOT CALL RDBOT PUSH PSW CALL SCRBOT POP PSW CPI 1AH RZ CPI 0AH JNZ BOT RET ; TLXI B,?L ENDIF CALL MOVER MF SET -1 ;;SHOW EXPANSION ENDM ; ;DEFINE CP/M MACRO - CPM FNC,PARM ; CPM MACRO ?F,?P PUSH B PUSH D PUSH H IF NOT NUL ?F MVI C,?F ENDIF IF NOT NUL ?P LXI D,?P ENDIF CALL BDOS POP H POP D POOP1 CALL TOP JMP LOOP ; BOT1 CALL BOT JMP LOOP ; TOP7 MVI B,7 JMP TOP4LP TOP4 MVI B,4 TOP4LP PUSH B CALL TOP POP B DCR B JNZ TOP4LP JMP LOOP ; BOT7 MVI B,7 JMP BOT4LP BOT4 MVI B,4 BOT4LP PUSH B CALL BOT POP B DCR B JNZ BP B ENDM ; ORG 100H CALL START DB 'CV.COM' DB ' AS OF 05/06/79' DB 0DH,0AH,'$' START POP D ;GET ID MVI C,PRINT CALL BDOS ;PRINT ID ; ;INIT LOCAL STACK ; LXI H,0 DAD SP SHLD STACK LXI SP,STACK CALL INIT ;GET CONST, CONIN ; ;OT4LP JMP LOOP ; TOPCONT CALL TOP CALL STAT JZ TOPCONT JMP LOOP ; BOTCONT CALL BOT CALL STAT JZ BOTCONT JMP LOOP ; ;COMPARE FILES, SCROLLING, STOP AT DIFFERENCE ; COMPARE CALL STAT JNZ LOOP CALL RDTOP ;GET TOP BYTE PUSH PSW CA!  LL SCRTOP ;SCROLL IT POP PSW CPI 1AH ;EOF? JZ LOOP PUSH PSW ;SAVE FOR COMPARE CALL RDBOT ;GET BOTTOM PUSH PSW CALL SCRBOT POP PSW POP B CPI 1AH JZ LOOP CMP B JZ COMPARE CALL PRTOP CALL PRBOT JMP LOOP ; ;READBYTE FOR TOP FIVI A,0DH CALL TYPE MVI A,0AH CALL TYPE RET ; ;TYPE ROUTINE. PRINTS [HEX] IF NOT PRINTABLE ; TYPE CPI 9 JZ TYPEIT CPI 0DH JZ TYPEIT CPI 0AH JZ TYPEIT CPI ' ' JC DOHEX CPI 7FH JC TYPEIT DOHEX PUSH PSW MVI A,'[' CALL TYPE LE ; RDTOP LXI H,TOPFCB CALL RDBYTE RET ; ;RDBYTE FROM BOTTOM FILE ; RDBOT LXI H,BOTFCB CALL RDBYTE RET ; OPENER1 CALL ERXIT DB '++CAN''T OPEN FILE 1++$' OPENER2 CALL ERXIT DB '++CAN''T OPEN FILE 2++$' ; ;SCROLL TOP HALF OF SCREEN ; POP PSW PUSH PSW CALL LNIB CALL TYPE POP PSW CALL RNIB CALL TYPE MVI A,']' CALL TYPE RET ; TYPEIT PUSH B PUSH D PUSH H MOV E,A MVI C,2 CALL BDOS POP H POP D POP B RET ; LNIB RAR RAR RAR RAR RNIB ANI 0FH SCRTOP PUSH H LHLD TOPLPTR MOV M,A INX H SHLD TOPLPTR LXI H,TOPLCT INR M POP H CPI 0AH JZ PRTOP LDA TOPLCT ORA A RP PRTOP PUSH H LDA TOPLCT MOV B,A INR B INR B INR B LXI H,TOPL CALL PRLINE LXI H,TOPLINE SHLD TOP ADI 90H DAA ACI 40H DAA RET ; ; FROM EQU8.LIB: ; ;RDBYTE, HL POINTS TO EXTENDED FCB: ; ; 2 BYTE BUFFER ADDR ; 2 BYTE "BYTES LEFT" (INIT TO 0) ; 1 BYTE BUFFER SIZE (IN PAGES) ; 2 BYTE FCB ADDRESS (33 BYTES) ; RDBYTE MOV E,M INX H MLPTR XRA A STA TOPLCT POP H RET ; ;SCROLL BOTTOM HALF OF SCREEN ; SCRBOT PUSH H LHLD BOTLPTR MOV M,A INX H SHLD BOTLPTR POP H CPI 0AH JZ PRBOT LDA BOTLCT INR A STA BOTLCT RP PRBOT PUSH H LDA BOTLCT MOV B,A INR B IOV D,M ;GET BUFFER ADDR INX H MOV C,M INX H MOV B,M ;BC = BYTES LEFT MOV A,B ;GET COUNT ORA C JNZ RDBNORD ;NO READ ; INX H ;TO BUFFER SIZE MOV A,M ;GET COUNT ADD A ;MULTIPLY BY 2 MOV B,A ;SECTOR COUNT IN B INX H ;TO FCB PUSH H ;SNR B INR B LXI H,BOTL CALL PRLINE LXI H,BOTLINE SHLD BOTLPTR XRA A STA BOTLCT POP H RET ; ;PRINT LINE POINTED TO BY HL, B=COUNT ; PRLINE MOV A,M CALL TYPE INX H DCR B JNZ PRLINE DCX H MOV A,M ;WAS IT LF? CPI 0AH RZ MAVE FCB POINTER MOV A,M ;GET.. INX H ;..FCB.. MOV H,M ;..ADDR.. MOV L,A ;..TO HL ; RDBLP MVI A,1AH ;GET EOF CHAR STAX D ;SAVE IN CASE EOF PUSH D ;SAVE DMA ADDR PUSH H ;SAVE FCB ADDR CPM STDMA ;SET DMA ADDR POP D ;GET FCB CPM READ OR"  A A POP H ;HL=DMA, DE=FCB JNZ RDBRET ;GOT EOF MOV A,L ADI 80H ;TO NEXT BUFF MOV L,A MOV A,H ACI 0 MOV H,A XCHG ;DMA TO DE, FCB TO HL DCR B ;MORE SECTORS? JNZ RDBLP ;YES, MORE RDBRET POP H ;GET FCB POINTER DCX H ;TO LENGTH MOV A,P D POP B RET ; ;FOLLOWING FROM 'EQU8.LIB'----> ; ;MOVE, COMPARE SUBROUTINES ; IF MF ;MACRO EXPANSION FLAG SET? MOVER MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ENDIF ; ;EXIT WITH ERROR MESSAGE MSGEXIT EQUM ;GET LENGTH DCX H ;TO COUNT MOV M,A ;SET PAGE COUNT DCX H ;TO LO COUNT DCX H ;TO HI FCB DCX H ;TO EFCB START JMP RDBYTE ;LOOP THRU AGAIN ; RDBNORD INX H ;TO LENGTH MOV A,M ;GET LENGTH (PAGES) XCHG ;BUFF TO HL ADD H MOV H,A ;HL = EN $ ;EXIT W/"INFORMATIONAL" MSG ERXIT POP D ;GET MSG MVI C,PRINT CALL BDOS ;EXIT, RESTORING STACK AND RETURN EXIT LHLD STACK SPHL RET ;TO CCP DS 40H ;STACK AREA STACK DS 2 ; TOPFCB DW TOPBUF ;BUFFER ADDR DW 0 ;CHARS IN BUFFER DB 16 ;BUFD OF BUFF MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A ;HL = DATA POINTER MOV A,M ;GET BYTE XCHG ;EFCB BACK TO HL CPI 1AH ;EOF? RZ ;YES, LEAVE POINTERS DCX B ;DECR COUNT DCX H ;BACK TO "BYTES LEFT" MOV M,B DCX H MOV M,C ;STORF SIZE IN SECTORS DW FCB ;FCB ADDR BOTFCB DW BOTBUF ;BUFFER ADDR DW 0 ;CHARS IN BUFFER DB 16 ;BUFF SIZE IN SECTORS DW MYFCB ;FCB ADDR ; MYFCB DB 0,'XXXXXXXXYYY',0 DS 19 DB 0 ; TOPLPTR DW TOPLINE BOTLPTR DW BOTLINE TOPLCT DB 0 BOTLCT DB E BACK COUNT RET ; ;----> INIT GETS CP/M CONSOLE STATUS AND CONSOLE ; OUT VECTORS ; INIT LHLD 1 ;GET WARM BOOT ADDR LXI D,3 ;LENGTH OF 1 "JMP" DAD D ;POINT TO CONS. STAT SHLD VSTAT+1 DAD D SHLD VKEYIN+1 RET ; ;CP/M CONSOLE STATUS VIA 0 TOPL DB '1: ' ;COLON TAB TOPLINE DS 128 BOTL DB '2: ' ;COLON TAB BOTLINE DS 128 TOPBUF DS 16*256 ;4K BUFFER BOTBUF DS 16*256 ;4K BUFFER ; ;BDOS/CBIOS EQUATES (VERSION 8) ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 CONST EQU 11 OPEN EQU 15 CLOSE DIRECT BIOS CALL ; STAT PUSH B PUSH D PUSH H VSTAT CALL $-$ ;ADDR MOD. BY "INIT" POP H POP D POP B ORA A RET ; ;CP/M CONSOLE INPUT VIA DIRECT BIOS CALL ; KEYIN PUSH B PUSH D PUSH H VKEYIN CALL $-$ ;ADDR MOD. BY "INIT" POP H POEQU 16 SRCHF EQU 17 SRCHN EQU 18 ERASE EQU 19 READ EQU 20 WRITE EQU 21 MAKE EQU 22 REN EQU 23 STDMA EQU 26 BDOS EQU 5 FCB EQU 5CH FCB2 EQU 6CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 #  UNSPOOL Ver 3.0/T$ g!~ W!xx? ~#2xbxc {V~#o}o_E33o:b*b#w#w# x*"A!9~#fo"*"X* "dm !mNm!qN>2m!uNX:\<2\\<*!~og#6?#6$   !\M!~# 2 2I2K#Ny  LST PUN OFF Invalid device.$ Error in system table. Attempting re-boot.$m!qN>2m!uNX:\<2\\<*oy[C M:EfWW"C:E>f2L!91W2JH:-{:F!n~  !G>2F{2E#W W2H:I_ WMW*CW:H_ W7:LV W1:Eʄ W ny, WW1:E¤ W*A!"C W W!3"!"!"!" Unspooling in progress.$ UNSPOOL Completed.CV.COM AS OF 05/06/79 $ !9"313͹!lC \ w,e$eͯ_YHUJIKOLCQuJ͊ ¯Qͼ ͯuuͯu$ Do you want to cancel UNSPOOL? {Y|N} ?>$ UNSPOOL Cancelled.$V W1:Eʄ !Z" Î $HD $"B@"A  "$B @"!! BBIIuͯuuuJ͊uQͼu͢u!5T!<T++CAN'T OPEN FILE 1++$++CAN'T OPEN FILE 2++$*dw#"d!h4 ʢ:h:hG!j!m"d2h*fw#"f :i<2i:iG!!"f2i~#+~ > $  >  : : : :>[GK>]_Ɛ'@'^#V#N#Fx£#~G#~#fo>˜}ƀo|gj+~+w+++T#~g}o|g~ +p+q*""~# x *3+~ > >  : : : :>[GK>p\pCXXXXXXXXYYY@'^#V#N#Fx£#~m1: ˜}ƀo|gj+~+w+++T#~g}o|g~ +p+q*""~# x 2: Documentation of various original programs written by Ward Christensen ----CV.ASM---- OVERVIEW: A split screen video compare program for use with the VDM or other memory mapped video boards. Consists of two hard-coded scroll routines, one for each half (top/bottom) of the VDM. Allows independently scrolling each half, or doing a "full speed" file-file compare. USAGE: CV fn1.ft1 fn2.ft2 Chars to press to run: TOP BOTT ----Function---- Y H CONTINUOUS SCROLL U J 1 LINE SCROLL  I K 4 LINE SCROLL O L 7 LINE SCROLL C SCROLLS CONTINUOUSLY, COMPARING THE FILES STOPS ON A MIS-COMPARE. Q QUITS (EXITS) THE PROGRAM. (MUST BE USED. CTL-Z IN THE FILE COULD BE AN ERROR, SO CV STOPS BUT YOU MUST EXPLICITLY Q) DEPENDENCIES: VDM or other memory mapped video board. "Could" be modified for 24x80. Works as is if you have a VDM at CC00H. %  les may be compared in detail with this utility. See CV.DOC for instructions. OTERM was received from the Osborne Users Group (OUG) of the Washington, D.C. area. It is another terminal emulator utility. (Also, see MODEM7 on -FOG/UTL.001.) I have not tested so cannot verify proper operation of this program. For information, see OTERM.DOC and OTERM.LTR. UNSPOL30, also from OUG, permits printing an ASCII file as a background activity while simultaneously performing other functions at the console. To print the file filename.typ inserted in drive d, place UNSPOL30.COM in drive A. At the A> prompt, type UNSPOL30 d:filename.typ Make sure the printer is turned on. Drive d must nov be opened before the file has been completely printed. Any other printing (e.g., ) initiated while UNSPOL30 is still working will result in mixed lines sent to the printer. For more detailed information, refer to UNSPOL30.DOC. Jim Woolley  DISK.DOC -FOG/UTL.010 First Osborne Group (FOG) Utilities Disk CV, from -CPMUG.040, permits simultaneously viewing and comparing two separate files. The files do not have to be ASCII, so .COM fi FOG Disk Librarian September, 1982 nt to the printer. For more detailed information, refer to UNSPOL30.DOC. Jim Woolley &  '