IMD 1.16: 29/05/2007 12:46:50 FOGCPM.049 --FOGCPM049MM300MODDOCK B3MM300 COM B3MM300 TXTVIRT ASMMD19200 COM;MD19200 PASPBOOT COMH !"#PBOOT2 PAS6$%&'()*MDBITS COME+,-./0123MDBITS PAS45MDSET COM6MDSET DOC7MDPRT ASM.89:;<=PATCH-ITCOM>?@PATCH-ITDOCABCDEFGHIJKLMNOPPATCH-ITDOCQRST-06-00 86 PATCH-ITAQMnUVWXYZ[\]^_`abNORMAL COMcREVERSE COMdREV-NORMDOCeWSKEYS ASM2fghijklDOUBLE1 COMmDOUBLE2 COMnDOUBLIT DOCopqPATCH1 SUBrPATCH2 SUBsDRAW COMktuvwxyz{|}~DRAW DOC3SAMPLE DATDRAW PQSJZCPR2 MMD ZCPR2-MDFIXZ2PATMD ASM Z2PATMD HEXZCPR2 HEX,ZCPRHDR LIBw-CPM049 DOC#This is the disk name.  ==================================== DOCUMENTATION FOR MORROW MM300 MODEM MANUFACTURED BY CTS CORP. (300 BAUD) ==================================== Information supplied by: Ken Cummings .PA LOCAL (OFFLINE) COMMANDS: COMMANDS FUNCTION ------------------------------------------------------------------------- CTL Q TURNS THE MODEM ON AND ENTERS THE LOCAL COMMAND STATE. BAUD RATE, CHARACTER LENGTH, AND PARITY ARE AUTOMATICALLY DETECTED. B FROM THE LOCAL COMMAND STATE, THIS COMMAND IS USED TO RESET THE MODEM INTERFACE CONTROL SOFTWARE TO THE POWER ON INITIALIZATION POINT. A CTL Q CR MUST BE USED FROM THIS POINT TO RE-INITIALIZE THE MODEM. THIS COMMAND IS USED TO CHANGE THE MODEM BAUD RATE. R  FROM THE LOCAL COMMAND STATE, THIS COMMAND RESETS ALL CONFIGURATION PARAMETERS TO THEIR POWER-ON DEFAULT CONDITION EXCEPT BITS/CHARACTER. A FROM THE LOCAL COMMAND STATE, THE MODEM IS PLACED ON-LINE IN THE ANSWER MODE. AUTOMATIC DISCONNECT IS NOT SUPPORTED IN THIS MODE. O FROM THE LOCAL COMMAND STATE, THE MODEM IS PLACED ON-LINE IN THE ORIGINATE MODE. AUTOMATIC DISCONNECT IS NOT SUPPORTED IN THIS MODE. D FROM THE LOCAL COMMAND STATE, THIS COMMAND IS USED TO INTERROGATE THE PRESENCE OF A DAIL TONE ON THE TELEPHONE LINE. TN FROM THE LOCAL COMMAND STATE, THE MODEM WILL TONE DAIL PHONE NUMBER N. T FROM THE LOCAL COMMAND STATE, THE MODEM WILL TONE DAIL THE PREVIOUSLY STORED NUMBER. PN FROM THE LOCAL COMMAND STATE, THE MODEM WILL PULSE DAIL THE PHONE NUMBER N. P FROM THE LOCAL COMMAND STATE, THE MODEM WILL PULSE DAIL THE PREVIOUSLY STORED NUMBER. ADDITIONAL DAIL PARAMETERS. A) THE PHONE CAN BE UP TO 40 CHARACTERS. B) THE PHONE NUMBER IS AUTOMATICALLY STORED AS LONG AS THE MODEM POWER HAS NOT BEEN SWITCHED OFF. EXECUTING DAIL COMMAND WITHOUT A PHONE NUMBER IN THE COMMAND STRING WILL INVOKE THE STORED PHONE NUMBER. C) "BLANK", "DASH", AND "SLASH" CHARACTERS BETWEEN PHONE NUMBER DIGITS ARE IGNORED. D) A COMMA CAN BE ENTERED TO CREATE A FOUR SECOND PAUSE BETWEEN DAILING DIGITS. E) A "W" CHARACTER CAN BE IMBEDDED IN THE PHONE NUMBER TO INSTRUCT THE MODEM DAILER TO WAIT FOR AN INTERMEDIATE DAIL TONE. F) A "T" OR "P" IMBEDDED IN THE DAIL STRING WILL INSTRUCT THE MODEM TO EITHER TONE OR PULSE DAIL THE DIGITS IN THE STRING. G) ANY CHARACTER ENTRY AFTER CR AND BEFORE THE REMOTE MODEM HAS ANSWERED WILL HANG UP THE MODEM AND RETURN TO THE LOCAL COMMAND STATE. H) 12 DTMF SIGNALS ARE SUPPORTED BY THE MODEM. THEY ARE 0 TO 9,#,*. .PA CN=X FROM THE LOCAL COMMAND MODE, THIS SEQUENCE CAN BE USED TO RECONFIGURE VARIOUS CONTROL OPTIONS. N FUNCTION ------------------------------------------------------ 1 NUMBER OF RINGBACKS BEFORE THE LINE IS DISCON- NECTED. VALUES FOR X RANGE FROM 4 TO F HEX.  2 SEND SPACE DISCONNECT OPTION. WITH THIS OPTION ON, A SPACE TRANSMIT SEQUENCE IS INITIATED UPON DISCONNECT. THE SPACE SIGNAL TRANSMITS FOR 3.95 SECONDS AND THEN RETURNS TO THE LOCAL COMMAND STATE. X=0, THE SPACE OPTION IS OFF. X=1, THE SEND SPACE OPTION IS ON. 3 9/10 BITS PER CHARACTER LENGTH OPTION. THIS OPTION IS EFFECTIVE IN BOTH SPEED MODES. 9 BPC SELECTION WILL ACCEPT START-STOP CHARACTER WITH ONE START BIT, ONE STOP BIT, AND SEVEN DATA BITS. (IN THE AUTOMATIC INITIALIZATION MODE, AN ASCII CHARACTER FROM THE INTERFACE WITH NO PARITY OR MARK PARITY WILL ENABLE 9 BPC.) 10 BPC SELECTION WILL ACCEPT START-STOP CHARACTER WITH ONE START BIT, ONE STOP BIT, AND EIGHT DATA BITS. (IN THE AUTOMATIC INITIALIZATION MODE, AND ASCII CHARACTER FROM THE INTERFACE WITH EVEN, ODD, OR SPACE PARITY WILL ENABLE 10 BPC.) X=0, 9 BPC IS SELECTED. X=1,10 BPC IS SELECTED. 4 AUTO ANSWER RING COUNTER. IF X=0, THE AUTO ANSWER MODE IS DISABLED. IF X=1 TO F HEX, THE MODEM WILL COUNT THE INCOMMING RING SIGNALS AND ANSWER THE PHONE AFTER THE SPECIFIED NUMBER OF RINGS 5 BREAK SEQUENCE TIME INTERAVAL PROGRAMMING. THE TIME INTERVAL IS 200 MS TIMES THE VALUE X. X HAS A RANGE OF 1 TO F HEX. L FROM THE LOCAL COMMAND STATE, THE MODEM CAN BE PLACED IN THE ORIGINATE ANALOG LOOPBACK MODE. ESSENTIALLY, THE MODEM IS IN A NORMAL COMMUNICATION MODE DURING ANALOG LOOPBACK, EXCEPT IT IS NOT CONNECTED TO THE TELEPHONE LINE. ALL ON-LINE COMMAND SEQUENCES ARE SUPPORTED DURING THE MODE. THE ON-LINE "E" COMMAND SHOULD BE USED TO EXIT FROM THIS MODE. .PA ON-LINE COMMANDS: THE ON-LINE COMMAND STATE PROVIDES A MECHANISM WHERE THE CONTROL PARAMETERS OF THE MODEM CAN BE CHANGED WHILE THE PHONE LINE IS STILL CONNECTED TO THE REMOTE MODEM. ONLY A LIMITED NUMBER ARE SUPPORTED IN THIS MODE. WHILE THE MODEM IS IN THE ON-LINE COMMAND STATE, DATA RECIEVED FROM THE REMOTE MODEM IS LOST. COMMANDS SENT TO THE MODEM WHILE IN THIS STATE ARE TRANSPARENT TO THE REMOTE MODEM. TO ENTER THE ON-LINE COMMAND STATE THE INTERFACE MUST ISSUE THE FOLLOWING SEQUENCE: CTL T@@@ AFTER ISSUING THE CTL T@@@ SEQUENCE, THE MODEM WILL SEND THE PROMPT "8". A 50 MS MINIMUM DELAY MUST BE INCORPORATED BETWEEN THE LAST @ CHARACTER AND THE COMMAND CHARACTER. AFTER EXECUTING ANY ON-LINE COMMAND, THE MODEM WILL RETURN TO THE COMMUNICATION MODE. IF THE MODEM DETECTS A COMMAND ERROR SEQUENCE, THE MODEM WILL ISSUE THE PROMPT "E" AND RETURN TO THE COMMUNICATION MODE. AS AN ADDITIONAL NOTE, THE CTL T@@@ SEQUENCE IS PASSED THROUGH THE MODEM TO THE REMOTE STATION. HOWEVER, THE COMMAND CHARACTER AND CARRIAGE RETURN SEQUENCE IS TRANSPARENT TO THE REMOTE STATION. THE FOLLOWING IS A LIST OF ON-LINE CONTROL COMMANDS. COMMAND FUNCTION ------------------------------------------------------------------------- B FROM THE ON-LINE COMMAND STATE, THE MODEM WILL SEND A SPACE INTERVAL WHICH IS 200MS TIMES THE VALUE STORED IN THE CONFIGURATION COMMAND (C6). O FROM THE ON-LINE COMMAND STATE, THE CURRENT PROTOCOL MODE IS SET TO ORIGINATE.  A FROM THE ON-LINE COMMAND STATE, THE CURRENT PROTOCOL MODE IS SET TO ANSWER. H FROM THE ON-LINE COMMAND STATE, THE MODEM WILL DISCONNECT FROM THE PHONE LINE AND RETURN TO LOCAL COMMAND STATE. .PA RETURN STATUS CODES: CODE SEQUENCE FUNCTION ------------------------------------------------------------------------- 0 MODEM READY - LOCAL COMMAND STATE 1 DISCONNECT FROM PHONE LINE 2 ON-LINE ORIGINATE 3 NO ANSWER FROM REMOTE MODEM 4 BUSY SIGNAL DETECTED 5 NO CARRIER TONES 6 DIAL TONE DETECTED 7 NO DIAL TONE DETECTED 8 MODEM READY - ON-LINE COMMAND STATE E COMMAND ERROR C RETURN TO COMMUNICATIONS MODE FROM ON-LINE COMMAND L LOW SPEED (300 BAUD) POWER ON-PARAMETER DEFAULTS N CODE X VALUE FUNCTION ------------------------------------------------------------------------- 1 8 NUMBER OF RING BACKS 2 0 SEND SPACE DISCONNECT OPTION IS OFF 3 AUTO 9/10 BITS/CHARACTER 4 0 AUTO ANSWER FUNCTION IS OFF 5 5 BREAK SEQUENCE TIME INTERVAL ----------------- 0 MODEM READY - LOCAL COMMAND STATE 1 DISCONNECT FROM PHONE LINE 2 ON-LINE ORIGINATE 3 NO ANSWER FROM REMOTE MODEM 4 BUSY SIGNAL DETECTED 5 NO CARRIER TONES 6 DIAL TONE DETECTED 7 NO DIAL TONE DETECTED 8 MODEM READY - ON-LINE COMMAND STATE E COMMAND ERROR C RETURN TO COMMUNICATIONS MODE FROM ON-LINE COMMAND L LOW SPEED (300 BAUD) POWER ON-PARAMETER DEFAULTS N CODE X VALUE FUNCTION 1W*###  ͉"}!"5!+#{zڑcC_R3#3Y #{#z3+~#~3+~w#~w3|/g}/o#**}"#s#r#!"*12:&.6>XvYhKI:+x$I) BYE>>͕ͪɪɯ>G͕>O͕>͕>G͕>N͕>͕@@@$H $ $C4=2 $ !!ɯ>@>O>7!!^~#$_{*"J2Wb !]~/t#~2 AʫCʫRWt t! ͚+{1Y 2_> 2  ͷ>2s̆W«ØH3g>2<^^ڐ ͥ ͥgʲͥ ͥ~>2<^gʲd>2<gʲd >2<gʲd1>2<gʲdB>2<gʲ{ñ!"~21Y ! ͚1Y {2{nʥʜq! ͚> !* ͚> :>ʯ2>  ́  A x+>2>>2?>2=W&W& Wx&=7G:=2=:<2?:!R:2! ͚:!vv:2! ͚+~G͉xƐ'@'_Nͮ#~›HO ! " 2 ! / 7>*!{zq A* x> : C 6#/<  :\ H:2 !" :Z”* +" |e: =Z! ͚\µ^:>> H:ZRʻya :Gͮ ~#HZJITî^ * " ^!  p ! y|T\>!~#!" *+++T ^! ) * sʑ2 TRʪr ] >2<2?>2=2=2>2!͚TOͮy0:02! ͚! \  \ 2]: AC’! ͚ͷ300 baud test $1200 baud test $2400 baud test $ BYE3 v2.6 - 06/26/84 $ Nulls, if needed, (0-9)?  Good-bye, call again... Type "R" to resume, anything else to warm boot: $ Resuming... $ Number of logons: $ Loading system... ++ Invalid drive, returning to A: ++++ Invalid user number, returning to 0 ++ [Carrier lost] [Input timed out] Message from Sysop: System is going down.... please type BYE to log-off, thank you ++ Program area too small ++$ ++ Cannot find COM file ++$ [COM file loaded] $WELCOME RBBS COMrning to 0 ++ [Ca 2|2\  !]w# ʫ .&  0 6 #& .K !e K w# ʫ : U 6 #K 6AW w#] !e~H#~E#~X*}|́ "!́ ͐ !ʬ =« f kʫ j \͢F w# ͋ t ʫ : W& _& & O { `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #N  *. *.  NEXT PC͐ =« f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å D  !  # B3MM300.COM Modified By Roger Christenson B3MD-1.ASM and BYE3-2.6.ASM were modified to work with the Morrow modem MM300 (300 baud model), manufactured by CTS CORP. This Bye program is for the Morrow Micro Decision computer. Ken Cummings  org 100H ; ; inserts a patch to set the max drive in seldsk to avoid problems ; with the Morrow virtual drive concept... ; can be inserted in BYE/MBYE, finds SELDSK address through the ; vector jump table. ; ; prevents a remote user from hanging the system by requesting a drive ; that doesn't exist... ; ; Gary Breuckman, Computer Services, P.O. Box 1648, Milwaukee WI 53201 ; start: lhld 1 ;warm boot jump lxi d,9*3 ;add seldsk 3x dad d ;(each entry in jump table is 3 bytes) dcx h mov d,m dcx h mov e,m xchg ;addr of seldsk to hl inx h ;byte to patch mvi m,1 ; ;note, the '1' in the above line is ; ;the number of drives less 1, ; ;ie, 1 means allow two drives (A and B). ; ;standard seldsk has '4', drives through ; ;'E' are allowed. ; ret end start 1 means allow two drives (A and B). ; ;standard seldsk has '4', drives through ; ;v4Copyright (C) 1983 BORLAND IncWyse WY-100/200/300= ()TERP<~7#~= o&ͦoͦc|ͣ}!!" ~#(}:8= +ͥ*!v-!pͥ*|!!:(=2!-: <2!~!!Y:jO:l:kO:m!ͥ*n! !i45(!+/ 0y0( d!9-!I-[[o&  :(y ͠|( r*"x2y( >28!"9!!>2 0&+!0 [ (!ePWA8Q0G: x@!\w# (   L). )!h6# (*(.(!8}(*(Ww#>?> w#a{ |e}nƐ'@'ý7||}>"C ""*B"[R*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#EMw}8"RB0 >RRR!+k = R!+k = !+k = !+k = !#k = !+k = T]KB!z> S>))0 = |  DMgo>jB0 7?= H<͡z5)<z {0Gɯgo|| }||/g}/o#}o&K[xAJSJDM!b"!6J"DM'oodo o} $yWj _}8(8J`9{T]=o`9y $͙ >" 8# }>(́ x }} ˸T}ٕ(0D= ,= (  0% , 7 R ?(88 x  - 8˸x   ͠ ,-xG} }م 9 .>#n0  = - nx  ,-(-˸G,- }ٕ? 9.>R 88 ?= u+-(> 08  8R ?x  , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨u xx( ?}ٽR }ց <( 7 = |٤g{٣_z٢Wy١Ox٠G 8͉ }x>"8}ƀ/ƀó ͙ - }0- ,}l˸k 8 ́ # x(͙ -k 8 -k 8, }l8;*!# ! >8# # 8---͙ ,,,-xGg?+2n*8t z~,->"x"$}.́  ,͙ ́ ! >,.-͙ o&0%͔,# ͙ }g }؉}颋.:}8c~I$I~L*.ٷx˸́ }0G,\<}͔,-(- ! >0 $# o8 Á >"m.`1pF,t6|!wS<.z}[|%FXc~ur1}ٯx(<˸k 8́ !~Jk 0ͺO!Z>k 8 =  ͙ # ͙ ́ ͺ͙ 0 - OT0 j oD,:j !I}袋.}8c~I$I~L!>8# # ͙ # = Ù nf^VNF!DLT\I!!53!r1!!> x #-= o˸x(-͙ }(x>8( , `i!>"| | >)=|(DMbo˸y88yx(0 8> x(>-q{(ay(oe z(>.q (o =e{>Eq>+|(|Dg>-q|/ 0:p# ~# +>0w#,-  60# ˸}րogM͇| .( = ~> x0w#xG% % ZJDM% = _~65(+~hìx-Sx9?+{Η@}|  gZJDM0 ,7}o˸ #yO!@9i&  #w#/w#w#!9! E9!!9~(+FM!"9!(#>2*u"|>":( E *6#w*6#6 !\$!u[ (W( #:~CONTRMKBDLSTAUXUSR>2ͭ*#~ u*:> >w###6Õ  #6++p>2Su:*6###ww#w$w#w: ͳ##N#F*B>w#w#[s#rò>2u*6 #-Nw#Fwq#p#6#w#w#w͞* :( Q: *^ F* < >26"~^*-w#ww#Ͳ^"~ <@*u!\  >2*|>! * \$\<(!: [1Á\!(f"́> 2:!"F( #~#6$>!"N>!~8>O6*"w (=(&("( :( 8y(~#ͽ7+ (6*#~́*#~ *~(h#"b=  8ͽ ̶J= B== ͯ}8= ͵}/l !*###~-_~(46*>2>*##w:>*##~*#~(E͋ ( ( ( ͕!] ( ( ((w#(͕́̕6!]~-#8~>7́ Õ͕>O*{͍̈́s #r*{/͍ d͋ ͕ (( #w(͕́̕q*#~ʶ (͕́ ͕ Õ*##~6[O*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46`>*:4^q}Q*|(|( 6-#Sy[R8 (G> QC~Q#*ͳyC!' !+TRUEFALSEy!9^#~#(G~Q#> Q> Q "F!(#R0ͳ*4#4>R *4 #4(Ͳ>>2*V(/˖:(#~+ x y!t( =( X:(R*:(###~-_-K< =>:("^"*^˞*V˖0 SѷR8A* N#F#s#r 0})jS\*###w* N#FB ^r+s>!T]>)j)0 0= R!#*^#V#N#F#^#V>">!2DM"~ʲx(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>>SѷR* s#r$ s#r*"[R0s#r>"[^#VS!9[R8[R>O"w2x2!"" ͵*>2"!"""!\u*: ͭ!~6go(\R*s#r_2x( s x(T]DMR0 -a%Ù}Wo*!~6o&͠|ͣ}^C User break1: I/O Run-time error e, PC=[R"` Program aborted*1!`!/ͅô!ͱ!*ͱ!M}2*&!}2͔@%Printer/Modem Port set to 19200 Baud.O*&!i*&!@i*&ͧi*&!i*&Mh}2r&!}2͔@%Printer/Modem Port set to 19200 Baud.O*&!i*& SѷR8A* N#F#s#r 0})jS\*###w* N#FB ^r+s>!T]>)j)0 0= R!#*^#V#N#F#^#V>">!2DM"~ʲx(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>>SѷR* s#r$ s#r*"[R0s#r>"[^#VS!9[R8[R>O"w2x2!"" ͵*>2"!"""!\u*: ͭ!~6go(\R*s#r_2x( s x(T]DMR0 -a%Ù}Wo*!~6o&͠|ͣ}^CProgram MD19200; Var portnum: byte; procedure clrscr; { Clear the screen } Begin Write(^[,'*'); { ESC * } End; Function Portspeed: byte; begin portspeed := $4D; {Default to 19200 BPS} end; begin portnum := $FF; clrscr; writeln ('Printer/Modem Port set to 19200 Baud.'); port[portnum] := $87; port[portnum] := $40; port[portnum] := portspeed; port[portnum] := $17; portnum := port[portnum]; end. v4Copyright (C) 1983 BORLAND IncLiberty Freedom 50= ()TERP<~7#~= o&ͦoͦc|ͣ}!!" ~#(}:8= +ͥ*!v-!pͥ*|!!:(=2!-: <2!~!!Y:jO:l:kO:m!ͥ*n! !i45(!+/ 0y0( d!9-!I-[[o&  :(y ͠|( r*"x2y( >28!"9!!>2 0&+!0 [ (!ePWA8Q0G: x@!\w# (   L). )!h6# (*(.(!8}(*(Ww#>?> w#a{ |e}nƐ'@'ý7||}>"C ""*B"[R*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#EMw}8"RB0 >RRR!+k = R!+k = !+k = !+k = !#k = !+k = T]KB!z> S>))0 = |  DMgo>jB0 7?= H<͡z5)<z {0Gɯgo|| }||/g}/o#}o&K[xAJSJDM!b"!6J"DM'oodo o} $yWj _}8(8J`9{T]=o`9y $͙ >" 8# }>(́ x }} ˸T}ٕ(0D= ,= (  0% , 7 R ?(88 x  - 8˸x   ͠ ,-xG} }م 9 .>#n0  = - nx  ,-(-˸G,- }ٕ? 9.>R 88 ?= u+-(> 08  8R ?x  , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨u xx( ?}ٽR }ց <( 7 = |٤g{٣_z٢Wy١Ox٠G 8͉ }x>"8}ƀ/ƀó ͙ - }0- ,}l˸k 8 ́ # x(͙ -k 8 -k 8, }l8;*!# ! >8# # 8---͙ ,,,-xGg?+2n*8t z~,->"x"$}.́  ,͙ ́ ! >,.-͙  o&0%͔,# ͙ }g }؉}颋.:}8c~I$I~L*.ٷx˸́ }0G,\<}͔,-(- ! >0 $# o8 Á >"m.`1pF,t6|!wS<.z}[|%FXc~ur1}ٯx(<˸k 8́ !~Jk 0ͺO!Z>k 8 =  ͙ # ͙ ́ ͺ͙ 0 - OT0 j oD,:j !I}袋.}8c~I$I~L!>8# # ͙ # = Ù nf^VNF!DLT\I!!53!r1!!> x #-= o˸x(-͙ }(x>8( , `i!>"| | >)=|(DMbo˸y88yx(0 8> x(>-q{(ay(oe z(>.q (o =e{>Eq>+|(|Dg>-q|/ 0:p# ~# +>0w#,-  60# ˸}րogM͇| .( = ~> x0w#xG% % ZJDM% = _~65(+~hìx-Sx9?+{Η@}|  gZJDM0 ,7}o˸ #yO!@9i&  #w#/w#w#!9! E9!!9~(+FM!"9!(#>2*u"|>":( E *6#w*6#6 !\$!u[ (W( #:~CONTRMKBDLSTAUXUSR>2ͭ*#~ u*:> >w###6Õ  #6++p>2Su:*6###ww#w$w#w: ͳ##N#F*B>w#w#[s#rò>2u*6 #-Nw#Fwq#p#6#w#w#w͞* :( Q: *^ F* < >26"~^*-w#ww#Ͳ^"~ <@*u!\  >2*|>! * \$\<(!: [1Á\!(f"́> 2:!"F( #~#6$>!"N>!~8>O6*"w (=(&("( :( 8y(~#ͽ7+ (6*#~́*#~ *~(h#"b=  8ͽ ̶J= B== ͯ}8= ͵}/l !*###~-_~(46*>2>*##w:>*##~*#~(E͋ ( ( ( ͕!] ( ( ((w#(͕́̕6!]~-#8~>7́ Õ͕>O*{͍̈́s #r*{/͍ d͋ ͕ (( #w(͕́̕q*#~ʶ (͕́ ͕ Õ*##~6[O*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46`>*:4^q}Q*|(|( 6-#Sy[R8 (G> QC~Q#*ͳyC!' !+TRUEFALSEy!9^#~#(G~Q#> Q> Q "F!(#R0ͳ*4#4>R *4 #4(Ͳ>>2*V(/˖:(#~+ x y!t( =( X:(R*:(###~-_-K< =>:("^"*^˞*V˖0 SѷR8A* N#F#s#r 0})jS\*###w* N#FB ^r+s>!T]>)j)0 0= R!#*^#V#N#F#^#V>">!2DM"~ʲx(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>>SѷR* s#r$ s#r*"[R0s#r>"[^#VS!9[R8[R>O"w2x2!"" ͵*>2"!"""!\u*: ͭ!~6go(\R*s#r_2x( s x(T]DMR0 -a%Ù}Wo*!~6o&͠|ͣ}^C User break1: I/O Run-time error e, PC=[R"` Program aborted*1!`!$ͅõ#  }2}2*&*&|g}o}2!}2*&!E!}2*&*&Mh}2*&*&ͣ}2*&*&Mh}2 * &*&ͣ}2*&" *&Mh}2*&* s"E^*7}2Ew*&*&i"!!o&}2*&*s"*0"*!E!*z"****n&s*#!u!!!9!}2*&EV!*&}2*&!u!!!8!u!!z"!*+!*n&s*#ß!!!&@GD Now in terminal mode G0OO!͎*&!$E *&!$!$*&$EP u *&n*&}oEu *&ͱ*& R« *&n*&}oEʨ *&ͱ R *&}o}2E !7*&ͱ*&!$*&$E * &}2A@%GDEnter NAME of file to recieve:G0 !!ʹ!!n&!! .E}!!u!0!^Eʤ!!!Ru!@#GD++ Return to Terminal mode ++G0OOí#!RE,"@GD++ file G6!R!0@GD exists ++G0O!!Re*&n!!}zʭ#"*&ͱ@Awaiting record number: G4 *!͵@ G0!"!u!V*&*&E"*&n*&ͱ!ð#!V!V*&*&!$E#! "!!z\#"!V**&"!*&e.!u*##!V*!|g}o"**&$Eʒ#*&nÒ"!͈*&n*#I"ô#í#6@Vf< PBOOT Commands: ^E - RECEIVE FILE | ^D - TOGGLE DUPLEX | ESC - QUIT PROGRAM > gO!}2@: G4 P B O O T file transfer program G0OO*A&*&Eʛ$@hOr!@ G6++ Transfer Completed ++G0 Or$ransfer program G0OO*A&*&program pboot; {modem downloader} {by Phillip Hansford, July 1984} {Modified for MORROW DESIGNS MICRO DECISION with FREEDOM 50/100 TERMINALS by Robert L. Parker, Jr., July 30, 1984.} {When compiled into a .COM file this program takes 10k Disk space. While it does NOT provide for pre-prepared text file upload or ASCII capture capability, It DOES provide for recieving files via the XMODEM program on RCP/M systems and simple terminal mode operation.} {When used with the MORROW MICRO DECISION computer, the SETBAUD.COM program may be used to select 300 or 1200 baud operation.} {Turbo Pascal version based on 'BMODEM.BAS' by author unknown. Configured for US Robotics S-100 modem, but should work with 'Password' and other Hayes-like smart modems; perhaps others. You may need to change I/O ports and routines for your system. Initialization of the modem is not included, but could be easily added as inline machine code. All control codes are passed to the modem during terminal mode except ^D, ^E, and ESC which are used by the program. ^D toggles duplex, ^E starts block transfer, ESC quits the program. The keyboard is locked out during transfer. As with BMODEM, the program begins in terminal mode and returns there after a transfer. It will run at 1200 baud.} {$C-} {$U-} type fName = string[14]; data = string[24]; datab = string[128]; ldata = string[255]; var I,J,K,checksum : integer; OK, duplex : boolean; initalize,temp1,temp2,temp3: data; sourceName,destinatioName : fName; settings,X: char; filvar,sourceFile,destinationFile : file; cmd: string[2]; line: ldata; fileName: fName; block_string : datab; {Port assignments selected } Const Status_Reg: byte= $FF; Modem_Reg: byte = $FE; In_Mask: byte = 2; Out_Mask: byte = 1; CR: char = ^M; LF: char = ^J; ESC: char= ^[; BELL: char= ^G; SOH: char= ^A; EOT: char= ^D; ACK: char= ^F; NAK: char= ^U; CRLF: string[2] = ^M^J; Function Tstbit(local, local1 : byte): boolean; {Return TRUE if the bit is set} begin local:= local and local1; tstbit:= true; if local = 0 then tstbit:= false; end; {tstbit} Function Modem_In_Status : boolean; {Return TRUE if modem character ready} var status : byte; begin status:= port[Status_Reg]; Modem_In_Status:= tstbit(status, In_Mask); end; {Modem_In_Status} Function Modem_Out_Status : boolean; {Return TRUE if modem ready to send} var status : byte; begin status:= port[Status_Reg]; Modem_Out_Status:= tstbit(status, Out_Mask); end; {Modem_Out_Status} Procedure GetMod(var In_Char: char); {Read the modem input port, assume char ready} var temp : byte; begin temp:= port[Modem_Reg]; In_Char:= chr(temp); end; {GetMod} Procedure Modem_In(var In_Char: char); {Read the modem input port} begin repeat until modem_in_status; GetMod(In_Char); end; {Modem_In} Procedure Modem_Out(OutChar: char); {Output a character to the modem} begin repeat until modem_out_status; port[Modem_Reg]:= Ord(OutChar); end; {Modem_Out} procedure sinp(var x: char); {direct I/O from keyboard} var temp: byte; begin temp:= bdos(6,$FF); X:= chr(temp); end; {sinp} procedure upper(var temp1:data); {convert string to upper case} label endProc; var local,local1: integer; begin local := length(temp1); if local=0 then goto endProc; for local1 := 1 to local do begin temp1[local1]:= (upCase(temp1[local1])); end; endProc: end; {upper} function findfile(name: fname): boolean; {look for file, return TRUE if found} var found: boolean; f: file; begin assign(f,name); {$I-} reset(f) {$I+}; found:= (IOresult= 0); if found then close(f); findfile:= found end;{findfile} procedure openFile(sourceName: fname); begin assign(sourceFile,sourceName); rewrite(sourceFile); end; {openFile} procedure saveblock(block_string: datab); const BufSize = 128; var buffer: array[1..BufSize] of byte; begin   for K:= 1 to 128 do buffer[K]:= ord(block_string[K]); blockWrite(SourceFile,buffer,1); end; {saveblock} procedure terminal_mode; var local, local1: char; begin writeln(^['GD Now in terminal mode '^['G0'); writeln; repeat sinp(local); if local <> ^@ then begin {if keypressed} if local in [^E, ^D, ESC] then else begin; modem_out(local); if not duplex then write(local); {half-duplex} end; case local of ^M: begin {ie. CR} modem_out(LF); if not duplex then write(LF); end; ^D: duplex:= not duplex; end; end; if Modem_In_Status then begin getMod(local1); write(local1); end; until local in [^E, ESC]; X:= local; end; {terminal_mode} procedure receive_a_file; label re_nameit, loop1, loop2; var local, local1 : char; begin re_nameit: write(^['GDEnter NAME of file to recieve:'^['G0 '); readln(temp1); upper(temp1); if temp1[1] in [^@..' '] then temp1:= '';  if length(temp1)>0 then sourceName:= temp1 else begin writeln(^['GD++ Return to Terminal mode ++'^['G0'); writeln; goto loop2; end; if findfile(sourceName) then begin writeln(^['GD++ file '^['G6', sourceName,^['GD exists ++'^['G0'); goto re_nameit; end; openFile(sourceName); modem_out(NAK); {now do block} for I:= 1 to 32000 do begin write(CR,'Awaiting record number: '^['G4 ',I,' '^['G0'); LOOP1: checksum:= 0; block_string:= ''; modem_in(local); {should be SOH} if local = EOT then begin modem_out(ACK); write(BELL); close(sourceFile); goto loop2; {completed} end; {get block number} modem_in(local); modem_in(local1); if ord(local) + ord(local1) <> 255 then checksum:= 13; {get block} for J:= 1 to 128 do begin modem_in(local); checksum:= checksum + ord(local); block_string:= block_string + local; end; modem_in(local); checksum:= checksum and 255; if checksum <> ord(local) then begin modem_out(NAK); goto loop1; end; saveBlock(block_string); {save block to disk} modem_out(ACK); end; {do next block} LOOP2: end; {recieve_a_file} {********** program starts here **********} label LOOP; begin clrScr; writeln(^['f< PBOOT Commands: ^E - RECEIVE FILE | ^D - TOGGLE DUPLEX | ESC - QUIT PROGRAM >'^M^[^O^['g'); duplex:= true; writeln(' '^['G4 P B O O T file transfer program '^['G0'); writeln; LOOP: terminal_mode; if X = ESC then begin writeln(^['h'); halt; end; receive_a_file; writeln(' '^['G6++ Transfer Completed ++'^['G0 '); goto loop; end. {program} cal1) <> 255 then checksum:= 13; {get block} for J:= 1 to 128 do begin modem_in(local); checksum:= checksum + ord(local); block_string:= block_string + local; end; modem_in(local); checksum:= checksum and 25v4Copyright (C) 1983 BORLAND IncZenith00Cur[, Morrow Y0 E(pEqKLMP<~7#~= o&ͦoͦc|ͣ}!!" ~#(}:8= +ͥ*!v-!pͥ*|!!:(=2!-: <2!~!!Y:jO:l:kO:m!ͥ*n! !i45(!+/ 0y0( d!9-!I-[[o&  :(y ͠|( r*"x2y( >28!"9!!>2 0&+!0 [ (!ePWA8Q0G: x@!\w# (   L). )!h6# (*(.(!8}(*(Ww#>?> w#a{ |e}nƐ'@'ý7||}>"C ""*B"[R*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#EMw}8"RB0 >RRR!+k = R!+k = !+k = !+k = !#k = !+k = T]KB!z> S>))0 = |  DMgo>jB0 7?= H<͡z5)<z {0Gɯgo|| }||/g}/o#}o&K[xAJSJDM!b"!6J"DM'oodo o} $yWj _}8(8J`9{T]=o`9y $͙ >" 8# }>(́ x }} ˸T}ٕ(0D= ,= (  0% , 7 R ?(88 x  - 8˸x   ͠ ,-xG} }م 9 .>#n0  = - nx  ,-(-˸G,- }ٕ? 9.>R 88 ?= u+-(> 08  8R ?x  , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨u xx( ?}ٽR }ց <( 7 = |٤g{٣_z٢Wy١Ox٠G 8͉ }x>"8}ƀ/ƀó ͙ - }0- ,}l˸k 8 ́ # x(͙ -k 8 -k 8, }l8;*!# ! >8# # 8---͙ ,,,-xGg?+2n*8t z~,->"x"$}.́  ,͙ ́ ! >,.-͙ o&0%͔,# ͙ }g }؉}颋.:}8c~I$I~L*.ٷx˸́ }0G,\<}͔,-(- ! >0 $# o8 Á >"m.`1pF,t6|!wS<.z}[|%FXc~ur1}ٯx(<˸k 8́ !~Jk 0ͺO!Z>k 8 =  ͙ # ͙ ́ ͺ͙ 0 - OT0 j oD,:j !I}袋.}8c~I$I~L!>8# # ͙ # = Ù nf^VNF!DLT\I!!53!r1!!> x #-= o˸x(-͙ }(x>8( , `i!>"| | >)=|(DMbo˸y88yx(0 8> x(>-q{(ay(oe z(>.q (o =e{>Eq>+|(|Dg>-q|/ 0:p# ~# +>0w#,-  60# ˸}րogM͇| .( = ~> x0w#xG% % ZJDM% = _~65(+~hìx-Sx9?+{Η@}|  gZJDM0 ,7}o˸ #yO!@9i&  #w#/w#w#!9! E9!!9~(+FM!"9!(#>2*u"|>":( E *6#w*6#6 !\$!u[ (W( #:~CONTRMKBDLSTAUXUSR>2ͭ*#~ u*:> >w###6Õ  #6++p>2Su:*6###ww#w$w#w: ͳ##N#F*B>w#w#[s#rò>2u*6 #-Nw#Fwq#p#6#w#w#w͞* :( Q: *^ F* < >26"~^*-w#ww#Ͳ^"~ <@*u!\  >2*|>! * \$\<(!: [1Á\!(f"́> 2:!"F( #~#6$>!"N>!~8>O6*"w (=(&("( :( 8y(~#ͽ7+ (6*#~́*#~ *~(h#"b=  8ͽ ̶J= B== ͯ}8= ͵}/l !*###~-_~(46*>2>*##w:>*##~*#~(E͋ ( ( ( ͕!] ( ( ((w#(͕́̕6!]~-#8~>7́ Õ͕>O*{͍̈́s #r*{/͍ d͋ ͕ (( #w(͕́̕q*#~ʶ (͕́ ͕ Õ*##~6[O*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46`>*:4^q}Q*|(|( 6-#Sy[R8 (G> QC~Q#*ͳyC!' !+TRUEFALSEy!9^#~#(G~Q#> Q> Q "F!(#R0ͳ*4#4>R *4 #4(Ͳ>>2*V(/˖:(#~+ x y!t( =( X:(R*:(###~-_-K< =>:("^"*^˞*V˖0 SѷR8A* N#F#s#r 0})jS\*###w* N#FB ^r+s>!T]>)j)0 0= R!#*^#V#N#F#^#V>">!2DM"~ʲx(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>>SѷR* s#r$ s#r*"[R0s#r>"[^#VS!9[R8[R>O"w2x2!"" ͵*>2"!"""!\u*: ͭ!~6go(\R*s#r_2x( s x(T]DMR0 -a%Ù}Wo*!~6o&͠|ͣ}^C  User break1: I/O Run-time error e, PC=[R"` Program aborted*1!`!#ͅø"O@- MDBITS Ver. 1.0OO@5 (c) 1984 by Compusurance, Inc.O@- POB 561952O@7 Miami, FL 33256-1952O@C CIS: 70665,225 Source: BBC390OO@MThis is a replacement for the Morrow Micro Decision SETBAUD program. SETBAUDO@His supplied for MD computers without parallel ports (Revision 1 boards).O@LYou must set the internal DIP switch on the Printer/Modem port for 1200 BPS.O@6You can then select 300, 1200, or 19200 BPS operation.OO@KThis program may be used and distributed on a non-commercial basis. ResaleO@Gof this program without the written permission of Compusurance, Inc. isO@Istrictly prohibited. Reasonable time, materials, and postage fees may beO@charged.OOO@' Select A for 300 BPSO@' B for 1200 BPSO@' C for 19200 BPSOO@ Selection: !͚*&ARe"aRo"!O}2ò"BRʃ"bR"!N}2ò"CRʡ"cR«"!M}2ò"!N}2*&!}2͔*&!i*&!@i*&n!i*&!i*&Mh}2rq!N}2Á"CRCcRq!M}2ß"!N}2*&!}2͔*&!i*&!@i*&n!i*&!i*&Mh}2Varallel ports (Revision 1 boards).O@LYou must set the internal DIP switch on the Printer/Modem port for 1200 BPS.O@6You can then select 300, 1200, or 19200 BPS operation.OO@KThis program may be used and distributed on a non-commercial basis. ResaleO@Gof this program without the written permission of Compusurance, Inc. isO@IProgra MDBITS; Va portnum: byte; Procedur Explain begin Writeln; Writeln('MDBITS Ver. 1.0'); Writeln; Writeln('(c)1984 by Compusurance, Inc.'); Writeln(' POB 61952'); Writeln(' Miami, FL 33256-1952'); Writeln('CIS: 70665,225 Source: BBC390'); Writeln; Writeln('This is a replacement for the'); Writeln('Morrow Micro Decision SETBAUD'); Writeln('program. SETBAUD is supplied'); Writeln('for MD computers without parallel'); Writeln('ports (Revision 1 boards). You'); Writeln('must set the internal DIP switch'); Writeln('on the Printer/Modem port for'); Writeln('1200 BPS. You can then select'); Writeln('300, 1200, or 19200 BPS operation.'); Writeln; Writeln('This program may be used and'); Writeln('distributed on a non-commercial'); Writeln('basis. Resale of this program'); Writeln('without the written permission'); Writeln('of Compusurance, Inc. is strictly'); Writeln('prohibited. Reasonable time,'); Writeln('materials, and postage fees may be'); Writeln('charged.'); Writeln; end; Functio Portspeed byte Var getspeed: char; begin Writeln; Writeln('Select A for 300 BPS'); Writeln(' B for 1200 BPS'); Writeln(' C for 19200 BPS'); Writeln; Write( 'Selection: '); Readln(getspeed); Case getspeed of 'A','a': portspeed := $4F; {Divide by 64} 'B','b': portspeed := $4E; {Divide by 16} 'C','c': portspeed := $4D; {Divide by 1} else portspeed := $4E; {Default to 1200 BPS} end; end; begi portnum := $FF; explain; port[portnum] := $87; port[portnum] := $40; port[portnum] := portspeed; port[portnum] := $17; portnum := port[portnum]; end is. Resale of this program'); Writeln('without the written permission'); Writeln('of Compusurance, Inc. is strictly')!9"1 ͟ Welcome to MDSET This program sets the speed of the printer/modem port on a Morrow Micro-Decision, Revision 1, and can be used in place of the SETBAUD program that came with the machine. This program works only on Revision 1 Morrows, the ones with no parallel printer port. The internal dipswitch for the printer/modem port must be set to 1200. A) 300 baud B) 1200 baud C) 19,200 baud Your choice: ͸_!A ͟Printer/modem port set to 300 baud.6OB?͟Printer/modem port set to 1200 baud.6NCt͟Printer/modem port set to 19,200 baud.6M͟ >>@:>7*㯆#ͫß_ MDSET is for Morrow Micro-Decisions, Revision 1 only (no parallel printer port). It is meant to replace the SETBAUD program that came with these machines, and it allows you to set the speed of the serial printer/modem port to 300, 1200, or 19,200 baud. ame with these machines, and it allows you to set the speed of the serial printer/modem port to 300, 1200, or 19,200MDSET $$$; This is a patch to Morrow MicroDecision 64K CP/M 2.2 - Rev 1.5 ; This patch redefines the LST: device as the auxilary port of the ; terminal attached to the system. This allows the otherwise ; impossible feat of getting a hardcopy of a communications ; session (at least for those with earlier MDs) and removes the need ; to swap cables everytime you want to switch to use your modem. ; ; This patch is written as a COM file that will overwrite the space ; used by the LSTOUT routine. ; ; The patch consists of altering three BIOS routines. ; 1- The CONOUT routine is intercepted. If the last use of the terminal ; was as the LST: device, an escape sequence is sent switching the output ; back to the screen. ; 2- The LSTOUT routine is replaced. If the last use of the terminal was ; as the CON: device, an escape sequence is sent switching the output ; to the auxilary port. ; 3- The LSTSTATUS routine is replaced by the CONSTATUS routine. ; ; It appears that the auxilary port speed must be higher than the main ; port speed for this to work. ; ; If the system is reset while the unit is printing, the terminal will think ; that everything coming down the line is still for the printer. You should ; either power the terminal down and up or write something to the LST: device ; to get the terminal in the proper mode. ; ; This patch should be easily alterable to work with the other terminals ; supplied with the MicroDecision. Replacing BUFON and BUFOFF with the ; appropriate sequences. (It is currently set up for the FREEDOM 100) ; ; This patch should be easily alterable to work with other versions and memory ; sizes of Morrow CP/M. The addresses JMPTBL,SCONOUT, and SLSTOUT should be ; the only things needing change. ; ; This patch was written by Curt Arnold on 12/31/83 and was placed in the ; public domain with the intent that it be freely distributed. ; ; The author realizes that this patch could be made prettier and smarter ; and encourages anyone who would like to to do so. The author can offer ; little support because he does not own a Morrow. (It was done as a ; favor for a friend) ; ; Hope you find this little patch useful and/or educational. ; ; By the way, this patch appears to be very tight. Only one or two ; bytes remain for modifications. ; ; Equates ESC EQU 1BH SCONOUT EQU 0F348H ;address of the original CONOUT routine. SLSTOUT EQU 0F442H ;address of the original LSTOUT routine. JUMPTB EQU 0F200H ;location of the BIOS jump table. ;OFFSET EQU 0000H ;you may want to test the routines before ;you put them over your BIOS. ORG 100H ; ; Routine to patch BIOS. ; ; Move code up to its new home. ; LXI B,ENDBYT-LSTOUT ;load BC with the # of bytes to move. LXI D,LSTOUT+OFFSET ;load DE with the destination (old LSTOUT) LXI H,LSTOUT ;load HL with the source DB 0EDH,0B0H ;LDIR (Overlay the old LSTOUT) ; Patch the jump table to use new code.  LXI H,CONOUT+OFFSET ;replace the jump to the old CONOUT with SHLD JUMPTB+0DH ;a jump to the new CONOUT. LXI H,LSTOUT+OFFSET ;replace the jump to the old LSTOUT with SHLD JUMPTB+10H ;a jump to the new LSTOUT. LHLD JUMPTB+07H ;Load HL with the address of CONSTATUS. SHLD JUMPTB+2EH ;Replace the jump to LSTSTATUS with a jump ;to CONSTATUS. ; Warm boot. JMP JUMPTB+03H ;WARM START ; ; PATCH TESTING ROUTINE ; LXI H,STRING FRED MOV A,M ORA A JZ ENDTST MOV C,A PUSH H CALL CONOUT CALL LSTOUT POP H INX H JMP FRED ENDTST JMP 0000H STRING DB 'THIS IS A TEST',0 ; ;New BIOS routines ; ; LSTOUT - New LSTOUT ; Check TOGGLE to see if last use of terminal was a LST: ; If TOGGLE is non-zero, send byte to original CONOUT. ; If TOGGLE is zero, set toggle non-zero, send sequence to turn Buffer ; print on and send byte to original CONOUT. LSTOUT LDA TOGGLE+OFFSET ;Check TOGGLE ORA A JNZ SCONOUT ;If TOGGLE is NZ, then jump to original CONOUT DCR A STA TOGGLE+OFFSET ;Set TOGGLE non zero. LXI H,BUFON+OFFSET ;address of buffer print on string. CALL SNDSEQ+OFFSET ;Send the sequence JMP SCONOUT ;send original byte to CONOUT ; ; CONOUT - New CONOUT, very similar to LSTOUT, but with polarity changed. ; CONOUT LDA TOGGLE+OFFSET ;Check toggle ORA A JZ SCONOUT ;If toggle is Z, then jump to original CONOUT XRA A STA TOGGLE+OFFSET ;set toggle zero LXI H,BUFOFF+OFFSET ;address of buffer print off string. CALL SNDSEQ+OFFSET ;send sequence JMP SCONOUT ;send original byte to CONOUT ; Send a sequence of bytes terminated with a ZERO to the original CONOUT SNDSEQ PUSH B ;routine needs to save C SNDLP MOV A,M ;load A with (HL) ORA A POP B ;pop BC just in case it returns RZ ;return if sequence finished PUSH B ;push BC to keep stack even MOV C,A ;move A to C PUSH H ;protect HL CALL SCONOUT ;call original CONOUT POP H ;get HL back INX H ;increment HL JMP SNDLP+OFFSET TOGGLE DB 00H ;BUFON DB '<',0 These are nice for testing. ;BUFOFF DB '>',0 BUFON DB ESC,'`',0 ;buffer print on (you may want to enable handshaking) BUFOFF DB ESC,'a',0 ;buffer print off (and disable it here) ENDBYT DB 00H OFFSET EQU SLSTOUT-LSTOUT f buffer print off string. CALL SNDSEQ+OFFSET ;send sequence JMP SCONOUT ;send original byte to CONOUT ; Send a sequence of bytes terminated with a ZERO to the original CONOUT SNDSEQ PUSH B ;routine needs to save!9"1 1 :20  ! z *.:0 2̈́ Please Choose One of the Following: 1. Morrow MD2 - (Single-Sided Disk Drives) 2. Morrow MD3 - (Double-Sided Disk Drives) Enter "1" or "2": _ 12 !!z 2 ̈́ ** Morrow MD2 Selected 2 ̈́ ** Morrow MD3 Selected !̈́ -- Reading & Revising WS.COM :@!:w!>ͪ_!̈́ -- Reading & Revising WSOVLY1.OVR  !A1͡ !L2͡!ͪ!̈́ -- Reading & Revising WSMSGS.OVR !Wd͡!W͡:i!Bw!ͪ%!F̈́ -- Reading & Revising CORRECT.COM !j ͡?!m ͡ !*͡: 2ʒ !.͡ !?͡:!9Mw!gFͪ!̈́ -- Reading & Revising FIXUP.COM ! ͡! ͡! ͡: 2 !U^͡ !_͡!ͪ̈́ -- Patching Completed CORRECT COMCORRECT? C Run Correct-It !y~!#yw!!y\!!y !+u~# Correct-ItC:AUXDICT.TXTC:FIXUP.COM!!\~# Morrow Designs Correct-It(tm) C:DICT.BINC:DINDEX.BINWS COMWS $$$WS $$$WS COMWSOVLY1 OVRWSOVLY1 $$$WSOVLY1 $$$WSOVLY1 OVRWSMSGS OVRWSMSGS $$$WSMSGS $$$WSMSGS OVRCORRECT COMCORRECT $$$CORRECT $$$CORRECT COMFIXUP COMFIXUP $$$FIXUP $$$FIXUP COM!\͡\! " ‰̈́ -- Unable to Locate ͐ ̈́  -- Program Aborting -- See .DOC file For More Information !2 2 * \ʱB: <2 * " :=̈́ -- Out of MemoryB: <2 >V !\͡! " : 2 :\/ Ý 2|!"h"j\<\\O/ Ý* * " \u Ý: =2 O: ʒ=2 >2 OV \V ~# ¡<̈́ -- Delete File Error !<̈́ -- Rename File Error !̈́ -- Permanent Read Error ̈́ -- Permanent Write Error ̈́ -- Unable to Open File For Write _~m #z 㯆#m Ä !\~@@ª Am >:m # !e~ >.m  ~ m # PATCH-IT.COM - Vers. 1.0 - 03/22/84 ====================================== - Unable to Open File For Write _~m #z 㯆#m Ä !\~@@ª Am >:m # !e~ >.m  P COM!\͡\! " ‰̈́ -- Unable to Locate ͐ ̈́  -- Program Aborting -- See .DOC file For More Information !2 2 * \ʱB: <2 * " :=̈́ -- Out of MemoryB: <2 >V !\͡! " : 2 :\/ Ý 2|!"h"j\<\\O/ Ý* * " \u Ý: =2 O: ʒ=2 >2 OV \V ~# ¡<̈́ -- Delete File Error !<̈́ -- Rename File Error !̈́ -- Permanen***************************************************************** ** ** ** DOCUMENTATION FOR PATCH-IT.ASM - VERS. 1.0 - 03/22/84 ** ** ========================================================= ** ** ** ***************************************************************** ** ** ** PATCH-IT.AS͠ i intende fo us b Morro ** ** Micro-Decisio Owner wit WordStar Versio 3. an ** ** Correct-It Versio 1.0 I it distribute for ** ** thi progra wil NO wor wit othe version o ** ** thes programs. ** ** Thi progra "patches th progra file fo ** ** WordStar Correct-It s tha th堠 Correct-It ** ** spellin checke ma b ru fro th No-Fil Men i ** ** essentially th sam manne a SpellStar woul i ** ** i wer availabl o th WordStar diskette. ** ** ** ** *(Registere Trademar o MicroPr International) ** ** ** ***************************************************************** ** ** ** WARNING! ** ** THIS PROGRAM IS ** ** ** ** * * * D E V E L O P M E N T A L * * * ** ** ** ** AND ** ** ** ** * * * E X P E R I M E N T A L * * * ** ** ** **  Th Autho place thi progra i th publi ** ** domai wit th stipulatio an understandin tha ** ** th use accept al responsibilit fo it us an ** ** an consequence thereof D NO us thi progra ** ** t mak permanen change t th file o you ** ** distributio diskettes! ** ** NOTE Thes patche wil NO b supporte b ** ** eithe MicroPr Internationa (WordStar o b Aspe ** ** Softwar (Correct-It) The hav bee teste unde ** ** variet o condition an n problem wer ** ** apparen a th tim o distribution However thi ** ** progra i distribute䠠 wit蠠 absolutel n ** ** guarantees implie o otherwise. ** ** Thi sourc listing th assemble .CO͠ file ** ** an䠠 th堠 accompanyin砠 documentatio ma b ** ** duplicate o reproduce b whateve mean fo non- ** ** commercia purpose only. ** ** Fo additiona information pleas write to the ** ** address provided below. ** ** ** ** US THI PROGRA A YOU OW RISK!!! ** ** ** ***************************************************************** ================================================================= ** ** ** * * * NOTE * * * ** ** ** ** I have used a version of Wordstar patched with this ** ** progra fo almos yea no o m MD-2 Despit ** ** Robert Throckmorton's copious warnings, I have ** ** experienced absolutely no problems, glitches or ** ** bugs whatsoever. I highly recommend this program ** ** to all Wordstar/Correct-It users. ** ** --Marc Norton, 02/20/85 ** ** ** ================================================================= ***************************************************************** ** ** ** PATCH-IT.ASM - Vers. 1.0 - 03/22/84 ** ** ======================================= ** ** ** ** Written by: Robert Throckmorton ** ** 7945 Kingswood Drive #240 ** ** Citrus Heights, CA 95610 ** ** (916) 967-6117 ** **  ** ** Pleas addres al questions suggestions ** ** revision an othe suc nonsens t th abov ** ** address I yo write pleas provid Self- ** ** Addressed Stamped Envelope for your reply. ** ** I yo ar unabl t reac m a th abov ** ** address pleas writ t th CP/Morrow Compute ** ** Group in Sacramento, CA. ** ** You comment wil b genuinel appreciated. ** ** ** ***************************************************************** Portion o thi documentatio appeare previousl i th Ma 198 editio o th Sacrament CP/Morrow Compute Grou Newsletter. PATCH-IT.DOC by Robert Throckmorton Man owner o Morro MD Computer hav alread discovere tha b movin thei Correct-I progra file t thei WordSta disk i i possibl t ru Correct-I fro th No-Fil Men usin th "R o "Ru Program option Thi i convenien fo severa reasons: 1. I i substantiall les time-consumin becaus th nee t exi WordStar an swa disk i completel eliminated. 2. Whe Correct-It i finishe workin throug you file contro automaticall return t WordStar an WordStar "remembers you previou setting (margins lin spacing, etc.). 3. I eliminate a additiona diskette (Note Fo everyda spellin correction th Correct-It file EMPTYDIC.BIN DICTEDIT.CO͠ an LOOKUP.CO͠ ar no required.) Still numerou user hav expresse dissatisfactio wit eve thi simpl arrangement The woul prefe t ru Correct- I fro WordStar' No-Fil Menu changin th "S o "Ru SpellStar comman t ru Correct-I instead A (foolishl self-appointe an somewha ingenuous WordSta "expert ɠ fel personall challenge b thi proble an recentl decide t mak seriou attemp t solv it. Th solution PATCH-IT i th resul o severa hour o lat night/earl mornin progra disassembly memor mapping an simpl experimentation Althoug canno guarante th progra o th patch m ow WordSta Correct-I progra file hav bee configure i thi manne fo som tim an ɠ hav encountere n problems. Befor w g an further le m includ brie not fo Morro MD owners Morro MD computer ad a additiona twis t th problem Thei single-side dis drive wil stor maximu o 186 o data ther i simpl no enoug spac fo bot th WordSta an Correct-I progra file o singl diskette. A wa writin PATCH-IT i occurre t m tha ther ha t b wa t solv thi problem MD owner currentl mus exi WordStar swa diskettes ru Correct-It swa diskettes an ru WordSta (assumin the wan t edi o prin th fil jus corrected) Thi ca b rea hassle especiall i on doe substantia amoun o wor processing Consequently spen extr tim lookin fo solutio fo th MD owner. Specia Instruction fo MD owner ar include nea th en o thi documentation Yo wil stil hav t swa diskette t ru Correct-It bu yo wil no hav "exit WordStar. OH, BOTHER! Initially m intentio wa t fin th solution the documen mean o implementin th patche usin DDT However a bega t writ th documentatio realize tha fe Morro Owner woul actuall bothe t mak them Th patche wer length an appeare rathe complicated neophyt woul surel b intimidated thought Henc electe t implemen th patche vi a assembl languag progra rathe tha providin instruction fo usin DDT. Still on questio remains i th chang wort making M opinio ma b worthless--a leas that' wha m wif i always telling me--but I think it is. Allow me to explain: On o th convenience o th "Ru SpellStar comman i th abilit t ente th nam o th las fil edite simpl b typin "^R a th th filenam prompt Afte typin carriag return th spellin chec begin immediately Ther i therefor substantia saving i th numbe o keystroke require t ge th spellin chec running Onc yo hav ru PATCH-I thi featur i enable wit Correct-It Fo example t sav fil an ru Correct-I type: ^KD C ^R whereas before it was necessary to type: ^KD R CORRECT B:FILENAME.TYP I fact th entir "^K ^ sequenc ca b type withou waiting--eve a th fil i bein saved WordStar wil remembe al o th keystroke i thei prope order Thus i yo hav SmartKey yo ca progra on o you functio key t sen "^KDC^R^M sequenc t th progra t sav you fil an initiat erro correction An i th meantim yo ca ru t th kitchen or the restroom. Th secon advantag i tha wheneve yo exi Correct-It (o FIXUP eithe b typin ^ o usin th "E optio a on o th menus WordSta wil automaticall resum contro AN pu yo bac I EDITIN MOD I TH FIL yo corrected bypassin th No- Fil Men completely Onc again WordSta wil remembe an change yo mad t th defaul settings (I yo don' wan t edi th file ^K wil enabl quic exit--withou losin an change Correct-I mad t th file). Yo wil stil b abl t invok "CORRECT.COM an "FIXUP.COM fro th CP/͠ promp (rathe tha jus fro WordStar' No-Fil Menu) Occasionall whil invokin Correct-I directl fro th CP/ promp yo ma ge "Ba Fil Name error (It' happene t m jus once) Recover i n problem however a Correct-I wil simpl as yo t reente th name Assumin you fil exist o th driv yo specify thi erro wil no occu twice. Two semi-important notes: 1. PATCH-IԠ wil chang th menu an message s the mak sens t anyon i you hom o offic wh doe no us WordSta frequently. 2. Thi progra wa writte fo WordSta Versio 3.0 I yo hav late versio o WordStar yo ca us th progra sourc listin a guide bu som adaptatio wil b necessary. FOR MORE INFORMATION . . . A ɠ hav state i m colum i th CP/Morrow Compute Grou Newsletter prefe t avoi technica discussion an concentrat o providin simpl "how-to advice However realiz ther ar som peopl wh wan th technica informatio s the ca understan wha i i they'r doin (an possibl improv o th method heck I' no prou o m programmin perfection!) Fo thi patch wil provid BRIE se o incomprehensibl technica note i yo sen m Self-Addresse Stampe Envelope (Havin sai that gues I' bette hurr u an writ them.) ɠ wil als tr (again n guarantees! t answe an question yo ma have Pleas writ legibl (fo gos sakes USŠ you wor processor! an b sur t describ堠 you hardware/softwar system. No tha I'v yappe while I'l explai ho t ru th program. RUNNING PATCH-IT.COM Prepare a freshly formatted diskette as follows: WS.COM WSMSGS.OVR WSOVLY1.OVR CORRECT.COM FIXUP.COM PATCH-IT.COM Place the CP/M system on the diskette with SYSGEN. *** W A R N I N G *** D NO ( REPEAT D NOT! us you Distributio o you Workin diskett t mak thi patch Follo th instruction belo carefully an TES you ne WordStar thoroughl BEFOR replacin thes file o you Workin diskette. Now rerea tha las paragrap on mor time an plac you NEנ diskett i th A driv an boo up A th CP/ prompt type: A> PATCH-IT or A> PATCH-IT YOU TURKEY! I doesn' reall mak an differenc t you compute whic lin yo choos t type However i yo shoul elec t typ th secon line pleas se you psychiatris promptly. PATCH-IT wil as yo whethe yo ar patchin you progra file fo Morro MD2 o MD3 I yo answe incorrectly punc th rese butto (yo kno wher THA is! an star over I shoul no b necessar t cop th WordStar file again However i th progra ra completel throug an patche th CORRECT.CO͠ an FIXUP.CO files yo wil nee t eras thos file an cop the agai fro you Workin o Distributio diskette. Afte yo hav mad th syste selection PATCH-IT wil wor throug th WordStar an Correct-It files makin th appropriat patches I a error occurs th progra wil briefl describ th erro an abort Reforma you diskett an star ove fro th beginning. OK, NOW WHAT? I no become necessar t divid th documentatio int tw distinc parts on fo th MD2 an on fo th MD3 I you'r no sur whic syste yo own sham o you Tur of you compute an g soa you head An the cal somebod wh DOE kno an ask. The MD3 - Double-Sided, Double Density Disk Drives Cop DICT.BIN DINDEX.BIΠ an an othe wor processin utilitie o file yo ma hav ont you ne diskette Th reaso fo thi i tha yo shoul tes you patche progra file thoroughl BEFOR copyin the t you Workin diskette. Generall speaking WordStar user shoul plac thei WordStar diskett i driv A: thei dat (o tex file diskett i driv B: the boo u an lo ont th B drive (Se m colum i th Apri 198 CP/Morrow Newslette o ho t patc WordStar t lo ont driv B automatically) Thi conventio i recommended bu no require, fo thi patc t operat correctly. Edi tes o temporar file sav i wit ^KD typ t "Ru Correct-It" the typ ^ an carriag return Ru throug th spellin chec an correctio severa times exitin at various points during the two program (CORRECT and FIXUP). Onc yo ar satisfie tha you program ar runnin correctly yo ma replac you Workin diskett wit you ne diskette. Th MD2 - Single-Sided Doubl Densit Dis Drives You will still need two diskettes, as follows: WordStar Diskette: WS.COM WSMSGS.COM WSOVLY1.COM CORRECT.COM Correct-It Diskette: FIXUP.COM AUXDICT.TXT DICT.BIN DINDEX.BIN O cours bot diskette ma hav an additiona progra file o utilitie yo desir place o them Generall speaking WordStar user shoul plac thei WordStar diskett i driv A: thei dat (o tex file diskett i driv B: the boo u an lo ont th B drive (Se m colum i th Apri 198 CP/Morrow Newslette o ho t patc WordStar t lo ont driv B automatically) Thi conventio i recommended bu no require fo thi patc t operat correctly I yo attemp t correc fil o th A drive however yo ma tir o havin t swa diskette durin FIXUP Edi tes o temporar file sav i wit ^KD typ t "Ru Correct-It" the typ ^ an carriag return Whe you lef han driv i reassigne a Driv C: inser you Correct-It diskette Whe you driv i reassigne a Driv A: inser you WordStar diskette I th fil yo ar correctin i o driv B: yo wil onl hav t swa diskette twice I yo exi Correct-It an inser th wron diskette yo wil b prompte t inser you W diskette. Ru throug th spellin chec an correctio severa times exitin a variou point durin th tw progra (CORRECԠ an FIXUP). Onc yo ar satisfie tha you program ar runnin correctly yo ma replac you Workin diskette wit you ne WordStar and Correct-It diskettes. NOTE MD owner ma als kee a "unpatched versio o CORRECT.CO͠ o thei Correct-I diskett fo time whe i i preferre t invok th spellin checke directl fro th CP/ prompt Durin FIXU yo wil ge driv reassignmen messages I you Correct-I diskett i i Driv A: yo ma ignor thos message an simpl hi return. INDEX AT YOUR OWN RISK........................ 1 Correct-It.............................. 1, 2, 3, 4, 5, 6, 7, 8 CP/Morrow............................... 2, 5, 7, 8 Distribution diskettes.................. 1 Errors.................................. 4, 6 Index................................... 9 Information............................. 1, 5 MD2..................................... 3, 6, 8 MD3..................................... 3, 6, 7 PATCH-IT................................ 1, 2, 3, 5, 6 Running PATCH-IT.COM ................... 6 SmartKey................................ 4 WordStar................................ 1, 2, 3, 4, 5, 6, 7 WordSta SpellSta ar Registere Trademark o Micropr International Correct-I i Registere Trademar o Aspe Softwar (License t Morro Designs). CP/M and DDT are Registered Trademarks of Digital Research. Micro-Decisio i Registere Trademar o Morrow-Designs Incorporated. SmartKe i Registere Trademar o FB Software. ...... 1 Errors.................................. 4, 6 Index................................... 9 Information............................. 1, 5 MD2..................................... 3, 6, 8 MD3..................................... 3, 6, 7 PATCH-IT................................ 1, 2, 3, 5, 6 Running PATCH-IT.COM ................... 6 SmartKey................................ 4 WordStar................................ 1, 2, 3, 4, 5, 6, 7 WordSta SpellSta ar Registere Trademark o Micropr International Correct-I i Regiv ZPATCH-IT.ASMv   !"#$%o&')(*,+.-/0213456798:;<=>?@BADCEFGHJIKMLNOPQRSTUVWXZY[\]^_ab`cdefhjilgmknpqorst u Qt_Wt <SW'W42+gg_7NtF tF{VŮY&/;MKg9:Xzt8XŴ71aTAc~~ǚ_}fvG_Nio_cpЎU+x?2_̜?/VÝF{5*?twYSR~rY|쏪r-io_c\\毽7β~hAwv\W=&UYF;,)t0F4SbڱjGUY]*\FvZ1@kgcڱJj=j~ѝj?*N~_L{#нץUY;ѱu7ǵS?ؔ?˿F{5_}A{ݸ:c#Wegi;|_^IZd9:?pGWwMk]?bRbט4]UM'.ڿرѝ:]~ѱw4vUW1@k K&נ@k̾{U}>Ҵ;C%k:ځGl] xo_{#}@+}o_{#н/'>7/mnފNCU{#н+F{￘ɯOzë@GF{7/ؿż~֯Ͽb޿@VeG)c~?tw|F{5&mtGgWe*?>6EWدcXvvWu4?{UVWio_cڏk;_M~|Ė=Sջʵ;/ѱ?6b51Vc_ڈ_k_a4tTGwtk;:Ʈձj򯎾*h_L{#нW~cJjժ&7\^G1gYMUjgOI|CUK{wŴ71*;9غ֥C, ?b3bYe;h2:c ^eA/,qijci/;]#F4?bua1E#vb㺃ƮUY;ڏX~_^==Gl{ZW;1@khAw1~_i~y8_YQ>J[R=io_ct쪦Oki?:*X_7β~GcǴO˫~@_^'kwp|$?b%@uii֥rtG?4]We!Ŵ71,)ڏj_}UV{]ZAa4?MK{Zʈ_7YmnފNC!w#7@+}o@h@C߿b\^1߿{#нJq+^jgi\W=&=kU~_L{#нs0x(ra^rg$Kyg<|M*+&?1@kLy,{ѡ:b{1Yl?{\Yݸ_L{#нy8ǵ_cu壔U-a1E#Sctio_c<(g-GڸA/f)wA;6sGcWe?~ <Ŵ71RR1:ɫet8hǪcA.W%@+*jOCu?ߏ??NXqo_{#+ P@+}o_`\ e+A. ~qA{#нJ0jUcǻȣv~=UPbŽȇ Jr֣Qړ\Y/z+[ŗIUibkF{Ţ'Q) ?J}4JWtJtr_v]Jʿɫ[.b8PW#\Ŵ71m\?buQUV;}-r:j:qF{5Fvr9FcYUMOtrFӴݿRXVŴ71!-Zڛq-{\-et\{5{v<.uUYXףa[1@k0{7c]/AW]?kJ{~gk)wv̯ji2xo_{#}@+}o_";P/o_{#}.{ LnZB<ǕoqBhup9TiA蒣*ziqSNU>אg|pDȻO--z MW@{7/\n!/_뿗G@+}o@ 5~q׀[F ^nMƩ|nT2wB3^n}MS-[m* 2+pg7ˬo|M^d&v֚^nHM?Zަ(g^nm* O>׀['|'ȟ\?oSMMZypx)Yj'WT2wBknW qɟd&fD^n}覌z7HM%s7!t*׀[wWO֟d&k 54)O֟d&6gT2wBgOMʷ8}Ÿʍ@aƯ?1uBGɹknW\b_5yM"O^n=[kO"O7KZ"pT/A_SUaFw׫vY^n40'W닛rt%Je>}{ u>4xkӟEBHkkYj5ӟEBH׀[H'uSkf"!YXz u>4x"U7H۔O "kY=iŸq"!tnkǙnc _S~v+"tBN̳Ms koEWh@ 5~ z`F -*p빛Ję+zW%b׀['D-N礪Y׀[wS8q[>3BKdkSqʷ8?U# }_{#нš r7k-e{#нJ+ 2z>O'kF@@ tF{5u[c?P{#нJ+ VUKj>O?[Q!o[Ԅz>̃zCS^I m,6"m,[ yK*wS߬M2B+D\4LMHA=<,J^MM nˬM2+?_W%(qsՐ- M 7 o~p˘_]R]\m]R]lvά5Dj+bwS^[jko\eQ+D4.]\'yPO"O.694<SVGɹMא5~@@Ι5/UUnܿ_/nyſ KP(z Swﻩ~ה/B=5?U#t JjGh"uBB»ףakrFKюU4(QSWF(69tMO]RmH]PPpxRcU-+J3BǕy>!xWt_ Gm0gMןEgj.A6VmMVT|ti~Gm\ #S\% uKP+#"&j<ʃσ*-6B.ٵm0gںeVCD0YDS"02r,u"&a"y6k zabad:DB.Q!o[døMȸdDjcFDjoEGMg|0.|2.DN1#t J~eH$Z yۂa\2&Z yӬ<8A6BT.N."@h5m qxjțwfYl.A]r!KƳH]Rm2B!o"\2EJ t J5YDh5MKƳH]Rt"X!Ր-j?@jcFDjoEGMg|0^QPZ2BIE$|@h5m >jțwfAF%BIE$|@h5m >jțwfJ86BT.Z S=B!o[4+9Κm]kZ yۢ6H]Rm2B!o"j?@jԉjț"y"t Ju\Ӊ`\AGmQb>@jcFDjoEGMg|_\dj(QS]R_$"<Z yۢĒpiV|N̳%(յK.{%ZQb, E%#&Yy9QfKPk\]'yH E%{"&Yy|o#t Ju  ]S=BދЩ} Hx"E%Bh5M;O86BT.N."@h5mKNjțwf=S l.A]r!"K,RVC޶piV|gеKv-ˠVC޶(1EGjZ yQb>@jԉjțY$O.Ak:Ր-N><@jcFDjoEGMg|͒):Ō%(N.Ր-N>Y VCD4+>'F%BIEÛjɇ7VC޶8f#&Yy9QfKPk\]'y@h5mo'B!o"y={KPk\Hܟ*X^N\R!t]DbFh5mo VCD4+j8>]R]B:ɻ=B!o[|xR!&YyT6BT.\RɇgںeVCD|x)%(dՐ7'ED긦 ã.A6VmDjoE[1Y?{ѝ)ZUK:::::Ōqe@+}o_l\'!?]|)E{#нJ+ 0L⨉Գݴv|FCyPF@ tF{c+b? 93K*߄KƿX7ødL5[\/6]r={qI囐q!8A6ød?j"Wi3K*߄KYl@+}o_h\'!?]|ȸdE{#нJ+ 0Lm&R{2:c ^}oӛY3!+|55rz^zyrN=91{mx=m]kN"6B!IxyNUB8+N.>a#Ixgr]R='JmFh5߶!սd#o"yFg6B91{]w5B4&ͧ᷍ФЩ'sF2B%zD깩w~bek"ηB.6B%{5| oڱjzB|SZ*2&B_L4|2'{nz:O/B.257)_KtDjo9 !%avӄKyqlKNuDjo9:fW{i"o^{T$Ē+=j"iL/ J%+ нJZ!IOÛ%S\W%@+}opJue.Oɇ7KC916ɇ7$.>a7]r=oLqs6B!={/fZ MkMo~pӟ.ɇ7 N)O>Yo\etkrnR'ެAGM#Km_|vj8>'ެTGM#'24qo^T6W@{7/x\O7KʕO?@ψY1W{,f1Yt_Wt￘ O֟O|Uega2|My!b#t Ju풫"&"Em!3vS/s79ČV5?1]'y54L䝵?]Aj8MX%b<ϟ:+'2 y~>!t Jjo&R{+*yLѾ:z5:j3BT۝S75c) aŸG]RmRJ(ԉDjoE[CEh"uBMVTѴ!:ɻOϦKϫ\Hϧ>0g%(յK.VC޶nYoK\M1#i 3B+:Rr75!>"nSFhw&$Z,R7UN_7KyMev1t<ϯ>( tg[h.AfDgMtrgZBny iA-'N.".r7]SzFy>LO%(qzCn'yPHmrH%vrqM*.VC޶HEZnyMD$؊Y$sM|\Eݦjț|r~ $"N>|"ަZ" txKdMy?+*@|=Щ}ur❵?Z?gDB!o"YnﻌY3BIEV^ݴXOZyyJnBj8`Q!o"Yn5}ψۺA]RXwɉgDׯ]z SV[D>G'"*%wnSlHMW)'MqAԓ϶nٳf{MO܇e{EV$t\{v1t@>ۺTMJ&|uwR!ɡ*%#tj=[Nu%("uKqb_?B!o"Y$(ʙf{M_3볽j!t JDAny X4.]\_'u@r_4LROܴnK}ywU5<:z{#нJ+ 4Bk j69 4MOöSO>vɅqe@+}o_Ldן\5Mg&sq+>Y1@+}o@:N.,jZ'KjyJnBj8|:N>X#4[QDKѪڟ0:xEBbFԵM + нJS\Sן\5Mg&sq+>Y1@+}otu]D\SWb_\Sן\?oSM]R-gOBg#t JjGh"h+J3B&nZt_Wt|\sSRaZf~˘_7B\u JjGh"-pGՏ.0:xEBbF2%X*>#~˘_UQT6z&R{+*wtl]}_~W()f+# P3"띵_12&#:k:jcFDjoE:)WGk?)ڟ3% ut_Wt￘2~Reg^c _S~v+@Epjț,$" É%(qt_Wt￘SdW|C %|?{#нJ+ ~-uSsW4m݌ݤnMg7+?oSM]R-g:L}8nZS{^ 嬶i\&>.=7yEЖ4B[j t_Wt￘b(yǥ&-[}qqj{#нJ+ w-uSsW4m݌F:ɻFqMR?oSM]d/iC %Bj8M-[k-gM2q+-g}KWF@ tF{LTz-ǧgsW|+F{7W@@(6]~_C+"C7{n>5BvϾi\w\!t Juqt)ݲu˟1"Biv7g^?a~7-N][FMD)1n,|^z)/ٽ&R/@+}o`zm3կw+􁐸gBa iQ+?UЛPʭ]D@HTi} 1"Biv7gff[L2&RO:싙ƕoqz~>qBRf=Rb(v^:umja"O܇e{E@+}o_LK?ZSׇ|֟՟c _SHxo_{#}cs:jfob1[fo1vo A4sW4_VBhf2 cSՐ-YnjlxM''B.A&iwSk?]=hiqSr}0sbVnjz~>Ygz>n?9^1,JnBhfN.T>b1_,TbϰypSy~nZ" 嬶: iqSr}0scQT`Sc;g{=ȓ $ Gnjll/N KPCh> a"oll?Z?z!t]8q!W4]RmsDh5mHٷ{Ͼz=O k j.o{:69a7lאgxRf7cYV!%(u#t]'BT볯}NkxԖ-q B[j-g5AhY-u#t\/f&q[}NG]dQwS!WDbyoPBG}1l3x z?Z KPK[l/vإb(y/6}:싙g{MX޸>(M_S2! {Ft;qY-@@ɬ7M򇉼t;XtF MLW:WdLH=wwJev׀[<ʽ a"oll?Z?z!t]8q!W4]RmsDh5mHٷ{Ͼz=O k j.o{:69a7lאgxRf7cYV!%(u#t]'BT볯}NkxԖ-q B[j-g5AhY-u#t\/f&q[}NG]d  *d*VIRT ASMMD19200 COM;MD19200 PASPBOOT COMH !"#PBOOT2 PAS6$%&'()*MDBITS COME+,-./0123MDBITS PAS45MDSET COM6MDSET DOC7MDPRT ASM.89:;<=PATCH-ITCOM>?@PATCH-ITDOCABCDEFGHIJKLMNOPPATCH-ITDOCQRSTPATCH-ITAQMnUVWXYZ[\]^_`abNORMAL $$$  *b*VIRT ASMMD19200 COM;MD19200 PASPBOOT COMH !"#PBOOT2 PAS6$%&'()*MDBITS COME+,-./0123MDBITS PAS45MDSET COM6MDSET DOC7MDPRT ASM.89:;<=PATCH-ITCOM>?@PATCH-ITDOCABCDEFGHIJKLMNOPPATCH-ITDOCQRSTPATCH-ITAQMnUVWXYZ[\]^_`abNORMAL COMcREVERSE $$$ DOCUMENTATION FOR: REVERSE.COM & NORMAL.COM by David Brown These two programs are for use with Morrow's Freedom 50 terminal ONLY. Although they may work on other terminals, they were written to take advantage of the attributes of this terminal. REVERSE.COM allows for dark characters on a bright green background. NORMAL.COM returns the terminal to its original mode. -- ie. bright green letters on a dark background. These programs may be run out of the un mode of WordStar if desired. Enjoy ; ; WSPATCH.ASM - Patch file to Customize WS.COM for Morrow MDT20 keyboard. ; This file can be adapted for patching Wordstar 3.0 to ; various keyboards. ; ; R. Cameron April 2, 1984. ; ;********************************************************** ; ; Key Definitions. ; ; This section contains one symbolic name for each unique key on the ; Morrow keyboard. ; ; Fixed Morrow Keys. ; CUPKEY EQU 0BH ; CTL-K CDOWNKEY EQU 0AH ; CTL-J (=LF) CLEFTKEY EQU 08 ; CTL-H (=BACKSP) CRIGHTKEY EQU 0CH ; CTL-L CINSKEY EQU 16H ; CTL-V CDELKEY EQU 7 ; CTL-G LINSKEY EQU 0EH ; CTL-N LDELKEY EQU 19H ; CTL-Y TABKEY EQU 09 ; CTL-I RETURNKEY EQU 0DH ; CTL-M DELKEY EQU 7FH F1KEY EQU 01 F2KEY EQU 02 F3KEY EQU 17H F4KEY EQU 04 F5KEY EQU 05 F6KEY EQU 18H F7KEY EQU 1AH HOMEKEY EQU 1EH ESCKEY EQU 1BH ; ; Available Control keys which do not conflict with above. ; NULLKEY EQU 00 ; CTL-@ CTLCKEY EQU 03 CTLFKEY EQU 06 CTLOKEY EQU 0FH CTLPKEY EQU 10H CTLQKEY EQU 11H CTLRKEY EQU 12H CTLSKEY EQU 13H CTLTKEY EQU 14H CTLUKEY EQU 15H CTLBKSL EQU 1CH ; CTL-\ CTLRBRK EQU 1DH ; CTL-] CTLUS EQU 1FH ; CTL-_ ; ;********************************************************** ; ; Logical key definitions. ; ; These are the logical key definitions to be used in Wordstar's ; "main menu" mode. ; SUPKEY EQU F1KEY SDWNKEY EQU F2KEY WLEFTKEY EQU F3KEY WRIGHTKEY EQU F4KEY WDELKEY EQU F5KEY AGAINKEY EQU F6KEY BLOCKKEY EQU F7KEY ; SCRUP1KEY EQU CTLRKEY SCRDN1KEY EQU CTLCKEY INTRPTKEY EQU CTLUKEY HELPKEY EQU CTLQKEY ONSCRKEY EQU CTLOKEY QUICKKEY EQU HOMEKEY REFORMKEY EQU CTLTKEY PRINTKEY EQU ESCKEY ; ;************************************* ; ; This is the table which maps keys to Wordstar functions. This ; table provides overlays for the key definitions; the spaces inbetween ; must remain free for the appropriate Wordstar vectors. ; ORG 481H VTAB DB QUICKKEY ORG 485H DB BLOCKKEY ORG 489H DB ONSCRKEY ORG 48DH DB HELPKEY ORG 491H DB HELPKEY ORG 495H DB CLEFTKEY ; Was CTL-T ORG 499H DB CLEFTKEY ; Was BACKSPACE ORG 49DH DB CRIGHTKEY ORG 4A1H DB WLEFTKEY ORG 4A5H DB WRIGHTKEY ORG 4A9H DB CDOWNKEY ORG 4ADH DB CUPKEY QUICKTAB ORG 4B1H DB QUICKKEY QLEFT DB CLEFTKEY DS 2 DB QUICKKEY QRIGHT DB CRIGHTKEY DS 2 DB QUICKKEY QSBOT DB 'Z'-40H DS 2 DB QUICKKEY QSTOP DB 'W'-40H DS 2 ; ORG 4C1H DB QUICKKEY QBLKTOP DB CUPKEY DS 2 DB QUICKKEY QBLKBOT DB CDOWNKEY DS 2 DB QUICKKEY QPREV1 DB 'P' ; Cursor to posn. before last command. DS 2 DB QUICKKEY QPREV2 DB 'V' ; Cursor to last find or block. DS 2 ; ORG 4D1H DB QUICKKEY DB '0' DS 2 DB QUICKKEY DB '1' DS 2 DB QUICKKEY DB '2' DS 2 DB QUICKKEY DB '3' DS 2 ; ORG 4E1H DB QUICKKEY DB '4' DS 2 DB QUICKKEY DB '5' DS 2 DB QUICKKEY DB '6' DS 2 DB QUICKKEY DB '7' DS 2 ; ORG 4F1H DB QUICKKEY DB '8' DS 2 DB QUICKKEY DB '9' DS 2 DB QUICKKEY QFILTOP DB SUPKEY DS 2 DB QUICKKEY QFILBOT DB SDWNKEY DS 2 ; ORG 501H  DB QUICKKEY QFIND DB 'F'-40H DS 2 DB QUICKKEY QFNDREP DB 'X'-40H DS 2 DB QUICKKEY QSPELL DB 'L'-40H+80H ; Spelling check (not working). DS 2 ; ORG 50DH DB AGAINKEY ; Find/replace again DS 3 DB QUICKKEY QSCRLUP DB SCRUP1KEY DS 2 DB QUICKKEY QSCRLDN DB SCRDN1KEY DS 2 ORG 519H DB SCRDN1KEY ORG 51DH DB SCRUP1KEY ORG 521H DB SUPKEY ORG 525H DB SDWNKEY DS 3 DB DELKEY DS 3 DB DELKEY ; Alternate delete 1 left key (was CTL-_). ORG 531H DB CDELKEY ORG 535H DB LDELKEY DS 3 DB QUICKKEY QDELLFT DB DELKEY DS 2 DB QUICKKEY DB DELKEY ; Alternate delete to left key (was CTL-_). DS 2 DB QUICKKEY QDELEOL DB 'Y'-40H ORG 545H DB WDELKEY ORG 549H DB CINSKEY ORG 54DH DB REFORMKEY DS 3 DB QUICKKEY QREPEAT DB QUICKKEY ; Repeat command key. ORG 555H DB LINSKEY ORG 559H DB TABKEY ORG 55DH DB RETURNKEY ORG 561H DB PRINTKEY ; BLKTAB ORG 565H DB BLOCKKEY BHIDE DB 'H'-40H DS 2 DB BLOCKKEY BMRKTOP DB CUPKEY DS 2 DB BLOCKKEY BMRKBOT DB CDOWNKEY DS 2 DB BLOCKKEY DB '0' DS 2 ; ORG 575H DB BLOCKKEY DB '1' DS 2 DB BLOCKKEY DB '2' DS 2 DB BLOCKKEY DB '3' DS 2 DB BLOCKKEY DB '4' DS 2 ; ORG 585H DB BLOCKKEY DB '5' DS 2 DB BLOCKKEY DB '6' DS 2 DB BLOCKKEY DB '7' DS 2 DB BLOCKKEY DB '8' DS 2 ; ORG 595H DB BLOCKKEY DB '9' DS 2 DB BLOCKKEY BMOVE DB 'M'-40H DS 2 DB BLOCKKEY BCOPY DB 'C'-40H DS 2 DB BLOCKKEY BDEL DB 'Y'-40H DS 2 ; ORG 5A5H DB BLOCKKEY BMODESW DB 'N'-40H ; Block mode toggle. DS 2 DB BLOCKKEY DB 'Z'-40H DS 2 DB INTRPTKEY DS 3 DB BLOCKKEY EXIT DB 'X'-40H DS 2 ; ORG 5B5H DB BLOCKKEY DONE DB 'D'-40H DS 2 DB BLOCKKEY SAVE DB 'S'-40H DS 2 DB BLOCKKEY QUIT DB 'Q'-40H DS 2 DB BLOCKKEY BLKREAD DB 'R'-40H DS 2 ; ORG 5C5H DB BLOCKKEY BWRITE DB 'W'-40H DS 2 DB BLOCKKEY FDEL DB 'U'-40H DS 2 DB BLOCKKEY TOGDIR DB 'F'-40H DS 2 DB BLOCKKEY FPRINT DB 'P'-40H DS 2 ; ORG 5D5H DB BLOCKKEY CHGLOG DB 'L'-40H DS 2 DB BLOCKKEY FCOPY DB 'O'-40H DS 2 DB BLOCKKEY FRENAME DB 'E'-40H DS 2 ; ORG 5E1H ONSCRTAB EQU $ DB ONSCRKEY DB 'L'-40H DS 2 DB ONSCRKEY DB 'R'-40H DS 2 DB ONSCRKEY DB 'I'-40H DS 2 DB ONSCRKEY DB 'N'-40H DS 2 ; ORG 5F1H DB ONSCRKEY DB 'F'-40H DS 2 DB ONSCRKEY DB 'W'-40H DS 2 DB ONSCRKEY DB 'J'-40H DS 2 DB ONSCRKEY DB 'V'-40H DS 2 ; ORG 601H DB ONSCRKEY DB 'D'-40H DS 2 DB ONSCRKEY DB 'T'-40H DS 2 DB ONSCRKEY DB 'P'-40H DS 2 DB ONSCRKEY DB 'E'-40H DS 2 ; ORG 611H DB ONSCRKEY DB 'H'-40H DS 2 DB ONSCRKEY DB 'G'-40H DS 2 DB ONSCRKEY DB 'X'-40H DS 2 DB ONSCRKEY DB 'C'-40H DS 2 ; ORG 621H DB ONSCRKEY DB 'S'-40H DS 2 ; ORG 625H HELPTAB DB HELPKEY HDOTCOM DB 'D'-40H DS 2 DB HELPKEY HSTATUS DB 'S'-40H DS 2 DB HELPKEY HFLAGS DB 'F'-40H DS 2 DB HELPKEY HPLMARK DB 'P'-40H DS 2 ; ORG 635H DB HELPKEY HREFORM DB 'T'-40H DS 2 DB HELPKEY HMARGS DB 'M'-40H DS 2 DB HELPKEY HINFO DB 'I'-40H DS 2 DB HELPKEY HMOVE DB 'V'-40H DS 2 ; ORG 645H DB HELPKEY HRULER DB 'R'-40H DS 2 END '-40H DS 2 ; ORG 5F1H DB ONSCRKEY DB 'F'-40H DS 2 DB ONSCRKEY DB 'W'-40H DS 2 DB ONSCRKEY DB 'J'-40H DS 2 DB ONSCRKEY DB 'V'-40H DS 2 ; ORG 601H DB ONSCRKEY DB 'D'-40H DS 2 DB ONSCRKEY DB 'T'-40H DS 2 DB ONSCRKEY DB 'P'-40H DS 2 DB ONSCRKEY DB 'E'-40H DS 2 ; ORG 611H DB ONSCRKEY DB 'H'-40H DS 2 DB ONSCRKEY DB 'G'-40H DS 2 DB ONSCRKEY DB 'X'-40H DS 2 DB ONSCRKEY DB 'C'-40H DS 2 ; ORG 621H DB ONSCRKEY DB 'S'-40H DS 2 ; ORG 625H HELPTAB DB HELPKEY HDOTCOM DB 'D'-40H DS 2 DB HELPKEY HSTATUS DB 'S'-40H DS 2 DB HELPKEY HFLAGS DB 'F'-40H DS 2 DB HELPKEY HPLMARK DB 'P'-40H DS 2 ; ORG 635H DB HELPKEY HREFORM DB 'T'-40H DS 2 DB HELPKEY HMARGS DB 'M'-40H Dl9 6*#6Y (C) 1980, DIGITAL RESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!ppJPBOOT2 PAS6$%&'()*MDBITS COME+,-./0123MDBITS PAS45MDSET COM6MDSET DOC7MDPRT ASM.89:;<=PATCH-ITCOM>?@PATCH-ITDOCABCDEFGHIJKLMNOPPATCH-ITDOCQRSTPATCH-ITAQMnUVWXYZ[\]^_`abNORMAL COMcREVERSE COMdREV/NORMDOCeWSKEYS ASM2fghijklDOUBLE1 $$$* 6*#6Y (C) 1980, DIGITAL RESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!ppJPBOOT2 PAS6$%&'()*MDBITS COME+,-./0123MDBITS PAS45MDSET COM6MDSET DOC7MDPRT ASM.89:;<=PATCH-ITCOM>?@PATCH-ITDOCABCDEFGHIJKLMNOPPATCH-ITDOCQRSTPATCH-ITAQMnUVWXYZ[\]^_`abNORMAL COMcREVERSE COMdREV/NORMDOCeWSKEYS ASM2fghijklDOUBLE1 COMmDOUBLE2 $$$ *** MORROW MD1 or 2-to-3 Double Sided Conversion Patch (release 2) *** *** For rev 1.x or 2.x BIOS (I really hope) *** Prim Needa Yo mus hav insalle double-side disk i bot drive fo thi to work! Files needed on A: DDT.COM \ FORMAT.COM > Supplied by Morrow SYSGEN.COM / EX.COM \ PATCHn.SUB > Supplied in this library (n is revision #) DOUBLEn.COM / Plus, a blank disk is needed for drive B: I Ne syste organization You ne setu wil b four-driv wit tw single- side drive (you ol ones a C an D an driv E a th virtua unles otherwis specified I yo wan t chang this edi th appropriat "PATCH fil (Patch1.su fo rev- an patch2.su fo rev-2) removin th semicolon wher i tell you. Thi patc als incorperate Bria Leyton' QUIETDIS patche automatically s ther i n nee t d tha afte completion. II T convert yo d th followin steps: 1) SYSGEN an image onto a file called "CPM64.COM" ** NOTE THI SHOUL NO B DON WIT ZCPR SYSTEM I YO AR INSTALLIN ZCPR3, THEN DO THE INSTALLATION AFTER DOUBLING THE SYSTEM! *** a>SYSGEN source drive (CR to skip)A source on a, etc.. destination drive (CR to reboot) <= a>SAVE 46 CPM64.COM 2 Ru th progra tha temporaril make you secon driv doubl side (o course a assumin yo d hav double- sided drive installed for both A and B). a>DOUBLE1 (if a revision 1 morrow) or A>DOUBLE2 (If a revision 2 Morrow) 3) Format a blank disk in drive B a>FoRMAT B: [a bunch of copyright blurbs] doubl side doubl densit forma <= th importan message (If it doesnt say that,  then it isnt working) 4) Patch the sysgened image "CPM64.COM" a>EX PATCH1 (or EX PATCH2 for rev-2 morrow) [th scree wil mov ver fas fo while Ignor an ?' that come up: they are normal] 5) Move the new image onto the second disk. a>SYSGEN source drive (CR to skip) destination drive (cr to reboot) B destination on B, etc. destination drive (cr to reboot) 6 That' all I ther wer n errors th ne dis shoul boo u wit 384K of space. I yo encounte an problems fee fre t leav m messag o th LAMU RCP/͠ o m syste a (818 348-3348 a no sur ho thi wil reac wit revision othe tha 2. o 1. (the wer th BIOS' modele thi patc using) s an feedbac woul b appreciated!! -Erik Olson ; patch for morrow rev-1 machines ; you should have already sysgen'd a file labeled CPM64.COM ; if not, this will not work!!! DDT CPM64.com S980 29 FC . S98E C2 . S990 BF . S992 E0 . S994 30 . S998 8F . S28B2 C2 . S28B4 BF . S28B6 E0 . S28B8 30 . S28C1 C2 . S28C3 BF . S28C5 E0 . S28C7 30 . S28EE C2 . S28F0 BF . S28F2 E0 . S28F4 30 . S2933 21 DC 7D 4 DF . S293E 7D 4 DF . ; remove the semicolons from the following lines if drive C: is virtual ;S2945 ;21 ;DC ;7D ;4 ;DF ;. ; remove the semicolons from the following lines if drive d: is virtual ;S294e ;21 ;DC ;7D ;4 ;DF ;. S2DA4 44 6F 75 62 . g0 ; type "SYSGEN", , dest on B DOUBLIT DOCopqPATCH1 $$$; patch for version 2.x morrows ; you should have already sysgen'd a file labeled CPM64.COM ; if not, this will not work!!! DDT CPM64.com S980 29 FC . S98E C2 . S990 BF . S992 E0 . S994 30 . S998 8F . S281E C2 . S2820 BF . S2822 E0 . S2824 30 . S282D C2 . S282F BF . S2831 E0 . S2833 30 . S2887 2 . S28A3 21 DC 7D 4 DF . S28AE 7D 4 DF . ; remove the semicolons from the following ; lines only if drive c: is virtual ;S28B5 ;21 ;DC ;7D ;4 ;DF ;. ; remove the semicolons from the following ; lines only is drive D: is virtual ;S28BE ;21 ;DC ;7D ;4 ;DF ;. S28C7 21 DC 7D 4 DF . S2DA4 44 6F 75 62 . g0 ; type "SYSGEN", , dest on B DOUBLIT DOCopqPATCH1 SUBrPATCH2 $$$ͫCopyright (C) 1984 BORLAND IncAMDT-20aMDT-20electedPH)H= ERT(p~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!͍!<6'Ͳñ3!(!+))))) DRAW'!(!+)))))&Screen Graphics Editor for the MDT-20a'!(!+)))))'copyright (c) 1984 studio700/D. Garland'!(!+)))))'2108-16th Ave. S., Minneapolis MN 55404'!!5z1!"&!!*&!(*&+))))) R!q͐b*&# !Bc"$!!5zʞ!"!!P5zʕ!"*$*+))))))*+! s*#b!*#N!!!*k&E$"ŔF1 select graphic}́)́ F2 repeat́(́2}F3 save}F4 load}F5 change screen}F6 clear}F7 quit͐bÆ"ŔF1 select graphic}́ F2 repeat́2}F3 save}F4 load}F5 change screen}F6 clear}F7 quit͐bŔ?Arrow keys control cursor, other keys enter a character. ́ Screen ́)*v!́(b!!ŔYbŔÝF́)qrpkXwxb}~vutseghf{|^]_Z\lno[Ymz`iadycjẂG͐bŔ3Move cursor to character, press F1 again to select.b*z!! }2q*q&!aE/$͠E,$!8!qb*q&R#*z!)ͯE#*z!"z"$R"$*z!͛E"$*z!R"z*z!ã#͟!)qrpkXwxb}~vutseghf{|^]_Z\lno[Ymz`iadycjW*z!5` }2p!}2n!}2l"Q! a!*a!<a!>a!.a!,a!;a!:a!=a!?a![a!]a !шQ!A!Ek!a!ek !!}2!!ŔÝEnter name of file: b*+._b* \E^%!}2oe%!}2o!:e.* |!NE%* !!5` ! -}oEʲ%!}2* !! 5!Ͳ%* !Ͳ!.e.! |"*!͛Eo&! m*R!͛E$&!}2! !*!R5 !Ͳ! ! *!!5!Ͳ}&!  !Ͳ! m!͛Eʚ&!}2!! m5z&"! *!5` !ш -E&!}2*#ë&*&E%'!}2o~R!́Illegal file name.b!BЁ!}2ǁc!!5z.("ȁ!*ȁ!!P5z%("ʁ*ǁ&Eʹ'!Ё*ȁ+))))))*ʁ+n&!ͯEʶ'ŔGb!}2ǁ'!Ё*ȁ+))))))*ʁ+n&!tE'ŔFb!}2ǁ!Ё*ȁ+))))))*ʁ+n&Rb*ʁ#f'*ȁ#H'ŔGb~R!́Aborted.b!B͟!!̉$*o&}oE)!ۉ!̉ <b!ۉb!!5z("!ۉ[!*v+))))))))))*+))))))P!q͐b*#Ù(!ۉb͟!);(!̉$*o&}oEP*!ۉ!̉ <b!ۉ5!NE*!"b!ۉ͝}oE)*b!"b!ۉ8!fP._b!!P5z)"d!*v+))))))))))*b+))))))*d+!f *d!5` s*d#À)F)!ۉb!*v+))))))))))&'͟!M*~R!́Could not read !̉ !qb!B͟!S*;("`*`^#V!͛Eʇ**`^#V!R*`s#r"Z*Z^#V!PͯEʸ**Z^#V!*Zs#r"T*T^#V!͛E**T^#V!R*Ts#r"N*N^#V!ͯE+*N^#V!*Ns#rÄ/ Viewing: Source screen:  Dest. screen: m!"/*5&}oEʭ,!!Ŕ@F1 change source}F2 change dest.}F3 copy}F4 overlay}F5 main menub!!*7&}oEM,Ŕ Viewing: ́)́Source screen: *v!́(́ ́Dest. screen: *D!bí,Ŕ Viewing: ́Source screen: *v!́ ́)́Dest. screen: *D!́(b*/!Ŕ shiftedb*>!ͯE,Ŕ left b,Ŕ right bR*>J!b*͇*@*<͇}o}oEM/*B*>R!P͇*@*R+n&sM/!*v+))))))))))*@*R+n&! aEM/!*D+))))))))))*@+))))))*B+!*v+))))))))))*@*R+n&s*B#z-*@#f-!*D+))))))))))&'*v"D*t":*r"8!">!"*8*rR" prompt or through the WordStar NO-FILE menu. The primary graphic unit with DRAW is the "screen", a display 80 characters wide and 22 lines deep. Up to three screens may be held in memory simultaneously and either created/edited individually or overlaid upon each other. The screens are numbered 1-3; the number of the screen being displayed appears in the lower right-hand corner of the main menu, and (highlighted) on the bottom line of the CHANGE SCREEN menu. Upon running DRAW, screen 1 first appears, accompanied by the main menu. Commands are entered with the function keys, which should be in WordStar mode. The commands are: F1 - SELECT GRAPHIC - switches to a graphic character selection menu. The graphic character selected will appear on the screen at the cursor position. F2 - REPEAT - toggles the "repeat" function. The next character entered AFTER "repeat" is turned on will be inserted at each position the cursor is moved to until either the character is changed (repeating will continue with the new character) or F2 is pressed again. The "F2-repeat" legend is highlighted when "repeat" is on. F3 - SAVE - save the current screen to a file. Prompt will follow for file name. NO check is made to see whether or not a file of that name already exists. F4 - LOAD - load screen from file, prompt for file name will follow. F5 - CHANGE SCREEN - shift to "change screen" menu (see below); used to switch the screen being edited to another or to copy from one screen to another. F6 - CLEAR - clears the screen being displayed. F7 - QUIT - exits the program. Other active keys in this mode are: Cursor arrow keys - move the cursor. Any other printing ASCII key - inserts that character at the cursor position. The \^_`{}~ characters cannot be displayed. CHANGE SCREEN commands F5 - CHANGE SCREEN - allows changing the screen being displayed and edited. Editing is always performed upon the "source" screen. Copying and overlaying are done from the source screen to the "destination" screen. The screen displayed (source or destination) is highlighted in the menu designation. "Copying" superimposes the source screen upon the destination screen. "Overlaying" also superimposes the source screen upon the destination screen, but only where the source screen contains characters. In other words, a copy covers everything underneath it, while an overlay permits the screen underneath to show through wherever there are spaces. Pressing F1 ("change source") or F2 ("change destination") serves two functions. The first is to switch the display to the appropriate screen, if it is not already being displayed. If the appropriate (source or destination) screen is being displayed, the F1/F2 key advances the display to the next screen. The cursor position on the destination screen is initially the same as that of the source screen. If the cursor is moved while displaying a destination screen, the copy/overlay will be shifted so that the original source screen cursor position is copied to the new destination screen cursor position. For example, if a copy is made with the source screen cursor at 1,1 (home) and the destination screen cursor at 10,10, the copy will be shifted 10 columns right and 10 columns down; material on the destination screen outside this area will be unaffected. The shift in position that will occur is shown along with the CHANGE SCREEN menu. The source and destination screen cursors are resynchronized by changing the source screen. It is even possible to copy or overlay material to another spot on the same screen, if source and destination are the same screen. This is a little tricky, but some experimentation will show how it works. Since the screen is copied left-to-right, top- to-bottom, copying may result in multiple copies. For example, if source line 1 is copied "down 2" (to line 3), source line 2 will copy to line 4, source line 3 (which now contains a copy of source line 1) will copy to line 5, etc. USING FILES WITH OTHER PROGRAMS Data is stored as text files with a line length of 80 characters followed by a CR-LF. Graphic characters are stored as the equivalent ASCII character ("W" through DEL; see the Software Techniques handbook) with the high bit set (i.e. in the 128-255 decimal or 80-FF hex range). Programs that will display these files as graphics should check the value of each character and turn the graphics mode on (send ESC-F to the terminal) before a high-bit character and off (ESC-G) after. MBASIC and Turbo Pascal can both detect these graphic characters (via the ASC function in MBASIC, the ORD function in Turbo). If the file is read into a 80x22 array, it can provide a map of the screen. Files created with DRAW can be edited with WordStar (in the "N" mode), but WordStar cannot insert most graphic characters properly; care should also be taken not to change line length. TECHNICAL The source code is written in Turbo Pascal. It was compiled with an ending address of A000 to prevent interference with other programs that may remain in high memory, like WordStar and some keyboard redefinition programs. It is relatively simple to make maze-type games using the screen- handling routines from DRAW and loading a data file (created with DRAW) for the maze. f each character and turn the graphics mode on (send ESC-F to the terminal) before a high-bit character and off (ESC-G) after. MBASIC and Turbo Pascal can both detect these graphic characters (via the ASC function in MBASIC, the ORD function in Turbo). If the file is read into a 80x22 array, it can provide a map of the screen. Files created with DRAW can be edited with WordStar (in the "N" mode), but WordStar cannot insert most graphic characters properly; care should also be taken not to change line length. TECHNICAL The source code is written in Turbo Pascal. It was compiled with an ending address of glish feudal law, the re- lands to the lord of the e failure of heirs capable ting under the original ersion of land to the he state in the United ailure of persons legally entitled to hold the same.   vDRAW.PASv o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu= WwcsdVWlb_^"uboO 'V_lͯ1Z!~iD0i|KxfxAN,%(=C4 c+x[g0%J SI&ˆd*.ĩVpLHݖ"l]Abq==BV9v%N0+,EJ_}^kг`R,XK#8yإ+0:sυƋ+;ʼV+ࠬ% F5^ҝVPsGl0h0$ Z\| F(ŧg/o)AuNwZsI@A+`1\Qo+ԩ[4c"ABvZӌIl< Zoscߴ\̌xI@냄 `r f.tpiD->? Kɥ 󒚄-UemB-LQ`I JSd^$z)ҌgβE V7iDrE4c"yg[=/UV@qJq1dӌ$}_"x,۠ nFg-RFA+ٕC4ά4c"i0|`XʉV#yA*UVҳmٕڈI+JlĮ 7wԓK r( C8m0I2TStH—*A+`1f ZkS/Z6|A+@XʉVKʍh̍Ww&A+`nn.k1fL$8dW&K#13Jϰ7 Zs#t+6ye1//:1'O|uCDždFt-&'+q3$8h<BbI@OL)Y<BB kJ+eF)$^+`I Z=fJSJ`+KʍhxыW#yAq ,s)ᑼ|áES]9T/7 ٕC]CvP9>GlV9`J+1؊ʡr|!r6A+3$hxv]9T9$mA+=It@xALiJN+$ |VթE嶄%`i\:#sIpZۡr]9T&!r7q 8dW kau嚂V$IJ}FḮCkSЉhkSЉQq3r)ͨAVQ%E宀5pK6)arW3.Vj)'IbC,1Di IjX+f:Q ޞCjH~Vco6t0b)'Z]2TfN+l)E,|r 'A%FdZL0i0ooII3i0 n`NLf`` h)w-ZL'7A x7#Ŀt-JW?>m9$mA+`h(鴙SNVK MA'nF`JMA'nFh1V$^zZX TgE銔VZYE$l̔x`J$I@҈I+J`c(N+$ vP1iE liD X4:dW8hEgL^z.Ւr#ZWT̍P X4zNEL-%q ­FGfFp)'IV$IJ}FḮKֱ֦VmU#rՒr#Zdצ7tf4Zxg [h,)7:MM.):n֦7q qG 6FkSOVKgdN9IH*Rҳ4u9HV= w䒵)(hyIVsܑKb2H ނ%I_۩e#9:7ӌIl h6XK9qjICkSЉhm :q3SBҳH q&O7kSЉ8h?GvfBŲ/Rl -7d_K؊$&H3&tֱVfL$mj&Y5'8nNhqF,A+੡őoN{i2JK%gL'Ҝr$ wlKL3&fNVj)'I6h1YoUNrBkh@V9 ~%p+ff$$h)'I.\SC #yLVrbb25g4c"0 ZsIR{4c"0 ZsI$h)'I. Li)9bߴM^YLVg7-&$h\!i1LV[ZS5KF,A%Fֱj|-]9Inќr}SN\,?)'I.ҏsIle 0%[ 5_-V$qxX0-XLޱ)wZKʍ / YͩgvZ!?>m9$mA+ќrd3Z!?>m9$]V{SBSC#[hx`ci4$p[s*͜rb\gli14oiY6sI r"k4c"k"%l,攓$SN\,̚-M3& fN9Ir6Z!|kNSN\d͑fL$[sZ@CGS5K)'IFbl,攓$8h' l,cPl,A+`zqw1tPPi&,ʔv`J$O`+,X}`cit5Z 6Ft8 A9 AZ"IVZ3Jj& _M3Oc _b1 ~6sZRnD+Un`=BBܗq۵XiD$BB<3%[F"3F+|hc؊D+ćht,ŇӌIl5ճd-a+)qڻ5M{Q [hs1iDҬZL3&̚-M3&f,Y5ϒZ!**R )1͘Hn3k4͘Hճd>Kn7L0HBiDrsIjnk1͘Hn3k4͘Hճd>Kn+vi2fL$7G~1<HVKʍ ӌd𳙓dp י5[fL$A+LjZ 5Z#k1|[7]'A+ Y!Z< ZC͗~K@עtEJ2/}bQ9ޱ/QPNg)i<58+R Z] &A+ѦSN̍fl,NA+s8KsIphj>Ee #yA+|W$^+`I Z=fJSJ`+KʍhxыW#yAq ,s)ᑼ|átN:O -7@%Fx`}לҌd+SBSC#[hצuf͖ɇ%O3&" ̚-M3&t-3k4͘HpYiD&hZ 5_]+vi2fL$7י5[fL$A+Wq SC#E銔V/+R Z!IB|:,)7 $Z#/H3&VLG" M#?͘H>,y1ViDőfL$VMEJ8ӌ]M 4cM3&#?͘HV?>98hꩡőGrMA+WC͗~K])$ Z!>\:,)7ǃ+XRkYe}iڻRt-,B|5|鷄xֵ(]R 4c Z!IB|~ tXRnWYvI#B|uڻ5M{QE銔V/Ϻ+R Z!|f,A+Ŀ"IVg$I@$ 2N+ij]Z?j>Z!%+t-Nhql$I@ZLiJN+$ |@-h1\gli1<KgdN9I.\E銔V!r]ZH)hEgLl$RA Z-)7`JQOΞ ZH "c6bׅѵ(]R \Jx$/h_jjNTZt[SiGC~93ye;\-ݙq q?Ԝ~t[܏A+Psz~KW~!q q pȮL62TPf+!Bܯ/tXRnyA*`ٝVM;SA 5V$Z!쩠kQ"%S'gO] 5_:#sI?$A+ MAAQvZ!/tXRnw J3V%kSP !r]])?f#v]kQ"?$A++ӌd𳙓$ <*'99 iD qM%FpiD P4;SZH)hC] &A+X 74͘HFӌ:fKӌ8hSN$ Z!׿!6bҊt-,{mN+$ ZqЊ$ Zifz9N+oh6bҊĿt-JW.\ZH)hQOΞ YעtEJA+pZL0 Z*Ljg] &A+:fKӌ]M j>Fۮ&h 5#mb+6yeVdG%NI,Cv4Ӳ7)Y8k,kKN+SN3k7'KfL$)GbqfL$iDr#A+ѦٌVZ3g)exi,*S[G|u6bҊ,*I3)%;%FBܛ/h)M)Hde_Pz;KʍhxыW#yAq ̔x$/h#l$*)lEfN)YϨHI+ć#yA+uxVA׃,)J`1z6bwZ!$IVg!r]" lI.X+O9P9nٕe9l,!gW&CV9ip1\gli14CPt-GNk;TߚƎ$Hɢ2X $ 񌊔B|hJ$IVg쩠E銔`+ϖ !r]])>f#v]kQ"IB<;G|4| 5V{$ $ Z=fJSJ,(=ÉN+$ |`͌`=K;JɎV$?Ւr#Z lE=~ Z$A+z%5.L^1;#rqjISfz9N+oh6bҊĿt-JW.\ZH)hQOΞ YעtEJA+pZL0 Z*Ljg] &A+:fKӌ]M j>Fۮ&h 5#mb+6yeVdG%NI,Cv4Ӳ7)Y8k,kKN+SN3k7'KfL$)GbqfL$iDr#A+ѦٌVZ3g)exi,*S[G|u6bҊ,*I3)%;%FBܛ/h)M)Hde_Pz;KʍhxыW#yAq ̔x$/h#l$*)lEfN)YϨHI+ć#yA+uxVA׃,)J`1z6bwZ!$IVg!r]" lI.X+O9P9nٕe9l,!gW&CV9ip1\gli14CPt-GNk;TߚƎ$Hɢ2X $ 񌊔B|hJ <-- Get OS from A B <-- Put OS on B ^C SAVE 46 CPM64.SYS DDT CPM64.SYS F980 117F 0 IZCPR2.HEX R2D80 IZ2PATMD.HEX R2D80 ^C SAVE 46 ZCPR64.SYS SYSGEN <-- No Source A <-- Destination is A B <-- Destination is B ... Unique addresses for MicroDecision version of ZCPR2: Multiple Command Line Buffer = FA00H External Path = 40H NO Memory-Based Named Dir NO Disk-Based Named Dir 2 Disks,! 31 User Areas Enjoy! Rick Conn 8 July 83 2 ZCPRHDR.LIB - Header for ZCPR2 UNIQUE to MicroDecision Z2PATMD.ASM - BIOS Patch (1.3 ROM) Z2PATMD.HEX - HEX file of BIOS Patch ZCPR2 must be installed on a 64K CP/M for the MicroDecision. Note that unused space in the BIOS is employed and no additional space is required for ZCPR2 buffers. Hence, the ZCPR2 is the SAME SIZE as a normal CP/M 2.2 system on the MicroDecision. The installation sequence is: SYSGEN A <-- Get OS from A B <-- Put OS on B ^C SAVE 46 CPM64.SYS DDT CPM64.SYS F980 117F 0 IZCPR2.HEX R2D80 IZ2PATMD.HEX R2D80 ^C SAVE 46 ZCPR64.SYS SYSGEN <-- No Source A <-- Destination is A B <-- Destination is B ... Unique addresses for MicroDecision version of ZCPR2: Multiple Command Line Buffer = FA00H External Path = 40H NO Memory-Based Named Dir NO Disk-Based Named Dir 2 Disks, Date: Wed, 27 Jul 83 23:05:07 EDT From: Rick Conn To: All Re: ZCPR2 on MicroDecision I just got back from going over the MD installation of ZCPR2 at a friend's house, and I discovered an error in the instructions. Very sorry about that. The Fill instruction after the DDT load should read FD00 1500 0 and the two Read instructions should read R3100 Everything else should be fine. Again, sorry for the mistakes. Would those users who contacted me about problems with the MD installation try it again with these changes and let me know (either way) of their success? Thanks. Rick  with the MD ; ; PATCH: Z2PATCH.ASM ; AUTHOR: Richard Conn ; NOTE: This is a Patch to the MicroDecision BIOS (Ver 1.3) ; which implements the following extended features of ; ZCPR2 on the MicroDecision -- ; External Paths for Command Search ; Multiple Command Line Buffer ; ZCPR2 External Stack ; ; ; ZCPR2 Equates ; zcpr2 equ 0dc00h ;Base Address of ZCPR2 Itself gocpm equ 0f2a0h ;GOCPM Entry Point in BIOS z2stack equ 0f9d0h ;Bottom of ZCPR2 External Stack z2tos equ z2stack+48 ;Top of ZCPR2 External Stack mclbuf equ z2tos ;Beginning of Multiple Command Line Buffer path equ 40h ;Base Address of External Path patch equ 0fca8h ;Patch Begins Here ; ; Patch -- ; org patch ; lxi h,clbase ;init command line lxi d,mclbuf ;copy into buffer mvi b,40 ;40 chars call move ; lxi h,pathbase ;init default path lxi d,path mvi b,10 ;10 bytes call move ; lxi h,zcpr2 ;set pointer jmp gocpm ; ; Move Routine ; move: mov a,m ;get stax d ;put inx h ;pt to next inx d dcr b ;count down jnz move ret ; ; Default Values ; clbase: dw mclbuf+4 ;pt to first char db 200 ;200 chars db 0 db 'STARTUP' ;default command db 0 pathbase: db 'A'-'@',0 ;goto A0 db 0 ; ; End of Patch ; end mmand Line Buffer ; ZCPR2 External Stack ; ; ; ZCPR2 Equates ; zcpr2 equ 0dc00h ;Base Address of ZCPR2 Itself gocpm equ 0f2a0h ;GOCPM Entry Point in BIOS z2stack equ 0f9d0h ;Bottom of ZCPR2 External Stack z2tos equ z2stack+48 ;Top of ZCPR2 External Stack mclbuf equ z2tos ;Beginning of Multiple Command Line Buffer path equ 40h ;Base Address of External Path patch equ 0fca8h ;Patch Begins Here ; ; Patch -- ; org patch ; lxi h,clbase ;init command line lxi d,mclbuf ;copy into buffer mvi b,40 ;40 chars call move ; lxi h,pathbase ;init default path lxi d,path mvi b,10 ;10 bytes call move ; lxi h,zcpr2 ;set pointer jmp gocpm ; ; Move Routine ; move: mov a,m ;get stax d ;put inx h ;pt to next inx d dc:10FCA80021CDFC1100FA0628CDC4FC21D9FC114055 :10FCB80000060ACDC4FC2100DCC3A0F27E12231387 :10FCC80005C2C4FCC904FAC80053544152545550E3 :04FCD8000001000027 :0000000000 ":10DC0000C382DCC382DC434F4D0124242420202026 :07DC100020205355420000E3 :10DC4B00164449522080E04C4953544DE1545950ED :10DC5B004551E1474F20208EE24552412015E153BB :10DC6B00415645C3E152454E2046E2474554203DBF :10DC7B00E34A554D5089E23100FAC5791F1F1F1F2A :10DC8B00E60F3293DFCD14DECDDCDD32ADDCC179B6 :10DC9B00E60F328EDFC4E1DDCD19DECDD5DD110906 :10DCAB00DC3E00B7C4FBDD32ADDC2A00FA7EFE039E :10DCBB002803B7203B3100FACD64DD3A8EDFC64135 :10DCCB00CD75DD3A93DFB72812FE0A3809D60AF56F :10DCDB003E31CD75DDF1C630CD75DD2104FA220064 :10DCEB00FA3600E5CD35DEE17EFE3B28C8B728C508 :10DCFB003100FA7EFE3B2004232200FA22FEE27E54 :10DD0B00CD2ADE7723B720F7CDA0DF2023112DDD21 :10DD1B00D53E00B7C293E2CD5AE0C293E27E2366B2 :10DD2B006FE9CD8DDFCDA0DF3A2BDCFE20CAB5DC51 :10DD3B00CD64DD2100007EFE213806CD75DD231874 :10DD4B00F5CDBDDDBFCD8DDFCD03DEC3C0DCCDBAE0 :10DD5B00DD4E6F2046696CE5C93E0DCD75DD3E0A83 :10DD6B0018080E01CD0500C32ADED90E025FCD05C2 :10DD7B0000D9C9F53E00B72806F1D90E0518EEF10A :10DD8B00F5CD75DDF1FE0AC0E5214BDC35201236F1 :10DD9B00163E00FE50280AC5CD09F2C1FE03CA2D5E :10DDAB00DDE1C9112ADC0E14C5CD0500C1B7C9CD03 :10DDBB0064DDE3CDC3DDE3C97E23B7C8F5E67FCDD4 :10DDCB0075DDF1F818F20E1918091180000E1A18EA :10DDDB00020E0DC305005F0E0E18F8AF324ADC11B0 :10DDEB002ADC0E0FCD05003CC90E1018F7112ADCEA :10DDFB000E1118F00E1218EC21ADDC7EB7C83600F0 :10DE0B001109DC0E1318CC3EFF5F0E2018C5CD1286 :10DE1B00DEE60F87878787218EDFB6320400C9E6DF :10DE2B007FFE61D8FE7BD0E65FC93AADDCB72845F3 :10DE3B001109DCD5CDEDDDD1283B3A18DC3D32297B :10DE4B00DCCDB1DD202F1103FA21800001C800EDDC :10DE5B00B02117DC360023351109DCCDF4DD281594 :10DE6B003E24CD75DD2104FACDC3DDCD9BDEC0CDC7 :10DE7B0003DEC3C0DCCD03DE3E3ECD75DD0E0A11E5 :10DE8B0002FACD05002103FA7E23CDE1DE3600C96F :10DE9B00D9CD06F2B7C409F2FE13CC09F2D9FE03B1 :10DEAB00C91AB7C8FE21381BFE3DC8FE5FC8FE2E3F :10DEBB00C8FE3AC8FE2CC8FE3BC8FE3CC8FE3EC896 :10DECB00FE3BC9AFC9ED5B00FA1AB7C8FE3BC8CD24 :10DEDB00ACDEC01318F3856FD024C9CDA0DF21357C :10DEEB00DC060B7E2BFE20200410F81804FE4828BD :10DEFB0035212BDC0100117EFE202822FE3A281E44 :10DF0B0023D630FE0A301957790738140738110712 :10DF1B00380E81380B8138088238054F10D979C9F2 :10DF2B00C33BDDCDA0DF212BDC110000060B7EFEF9 :10DF3B0020282DFE482829D63038E5FE0A3806D68B :10DF4B0007FE1030DB234F7A07070707E6F0577BF6 :10DF5B00070707075FE60FB2577BE6F0B15F10CEFE :10DF6B00EB7DC921800081CDE1DE7EC9AF322ADC99 :10DF7B003E00B720043A8EDF3C3DCDE1DD3E00C3D1 :10DF8B0014DE3E00CDE1DD3E00C314DECDA0DFF597 :10DF9B00CD77DFF1C9212ADCAF327CDF77321DDD93 :10DFAB003A93DF3289DFCDD0DEED533FDD060B2810 :10DFBB005ED5CDACDEFE413804FE513808FE30385C :10DFCB000AFE3A300613CDACDE18F2D1FE3A202908 :10DFDB00321DDD1AFE413811D640FE03D23BDD3235 :10DFEB007CDF77131AFE3A280FE5EBCDFFDEEBE172 :10DFFB00FE20D23BDD3289DF13AF3228E00608CD9D :10E00B002BE006031AFE2E200613CD2BE01803CDB2 :10E01B004CE00604AFCD4EE0ED5300FA3E00B7C91D :10E02B00CDACDE281C23FE2A2007363FCD53E0184B :10E03B00077713FE3FCC53E010E6CDACDEC81318C8 :10E04B00F93E20237710FCC9E52128E034E1C921F2 :10E05B004CDC0E0979B7281B112BDC06041ABE20E9 :10E06B000A132310F81AFE202004C92310FD2323C2 :10E07B000D20E50CC9CD97DF212BDC7EFE20CC0DCE :10E08B00E1CDD0DE0680280C0601FE412805FE53AB :10E09B0020020513ED5300FA78320BE11E00D5CDAB :10E0AB00F8DD2006CD59DDAFD1C9CDFCE0281ED15E :10E0BB007B1CD5E6032005CD64DD1808CDBDDD2026 :10E0CB00207C20A0060178CD6EDFCDE7E0CD9BDE76 :10E0DB002805CDFFDD20D3D13EFFB7C90608CDF310 :10E0EB00E03E2ECD75DD06037E23CD75DD0520F8D4 :10E0FB00C93D0F0F0FE6604F3E0ACD6EDFE680EE97 :10E10B0000C9060B363F2310FBC9CD97DFCDD0DE00 :10E11B00322CE1280113EB2200FA0601CDA3E0C853 :10E12B003E00FE562015CDBADD4F4B20746F2045B7 :10E13B0072617365BFCD6DDDFE59C0112ADCCD0E4A :10E14B00DEC93EFF1801AF3280DDCD97DFC23BDD6C :10E15B00CDD0DE329DDD280113ED5300FACDE6DD87 :10E16B00CA3BDDCD64DD3E17324BDC01800079FE0E :10E17B0080380EE5C5CDAEDDC1E120370E00218024 :10E18B00007EE67FFE1AC8FE0D280EFE0A280AFE48 :10E19B0009280DCD7EDD041812CD7EDD0600180B8F :10E1AB003E20CD7EDD0478E60720F50C23CD9BDEEB :10E1BB00C818BB3DC8C33BDDCDE6DE6F2600E5CD01 :10E1CB0015E20E16CDEFDDE1283AAF324ADCCDD0A9 :10E1DB00DE13FE5328021B29ED5300FA1100017CBC :10E1EB00B528182BE521800019E5CDD8DD112ADCE7 :10E1FB000E15CDB3DDD1E1200B18E4112ADCCDF4E3 :10E20B00DD3C2003CDEEE3C3D5DDCD97DFC23BDD97 :10E21B00CDF8DD112ADCC8D5CDBADD457261736549 :10E22B00A0212BDCCDE7E03E3FCD75DDCD6DDDD103 :10E23B00FE59C250DDD5CD0EDED1C9CD15E23A7CEB :10E24B00DFF5212ADC113ADC011000EDB0CDD0DE78 :10E25B002826ED5300FACDA0DF201DF147217CDFEE :10E26B007EB72803B8201170AF322ADC112ADC0EDE :10E27B0017CDEFDDC0CD59DDC33BDDC330DDCD2E7A :10E28B00DF184721000118423A2BDCFE2020203AF0 :10E29B001DDDB7C83A89DFFE10D23BDD3293DFCDEF :10E2AB0077DF3A7CDFB728043D328EDFC319DE11EE :10E2BB0033DC1AFE20C23BDD2106DC010300EDB08E :10E2CB00210001E53EFFCD49E3E12232E3CDA0DFA2 :10E2DB00217CDFE57E322ADC213ADCCDA3DFE17E37 :10E2EB00323ADCAF324ADC115C00212ADC0121001E :10E2FB00EDB02104FA7EB7280BFE3B2807FE202841 :10E30B00032318F106001181007E12B7280BFE3B88 :10E31B00280504231318F2AF122200FA783280007A :10E32B00CD64DDCDD5DDCD0001CDD5DDCD8DDFC30C :10E33B00B5DCCD2EDFE5CDA0DFE1C23BDDAF326436 :10E34B0#0E322CFE33E01320BE1CD77DFCDF8DD21C8 :10E35B00400020657EB720303E00B7CA3BDDE5AFFD :10E36B003264E32AFEE22B362022FEE22200FA215F :10E37B0087E3112ADC010C00EDB0183700434D4444 :10E38B0052554E2020434F4DFE2420043A8EDF3C45 :10E39B00327CDF3E01320BE1237E23E5E67FFE2458 :10E3AB0020033A93DF3289DF2FE6802003320BE123 :10E3BB00CD77DFCDF8DDE1289BE5CDFCE0E12894BE :10E3CB00CDE6DD2100013EDBBC3818E5EBCDD8DD19 :10E3DB00112ADCCDB1DDE120061180001918E73DD3 :10E3EB00CA8DDFCDBADD46756CECCD8DDFC3C0DCDD :0000000000 0203AF0 :10E29B001DDDB7C83A89DFFE10D23BDD3293DFCDEF :10E2AB0077DF3A7CDFB728043D328EDFC319DE11EE :10E2BB0033DC1AFE20C23BDD2106DC010300EDB08E :10E2CB00210001E53EFFCD49E3E12232E3CDA0DFA2 :10E2DB00217CDFE57E322ADC213ADCCDA3DFE17E37 :10E2EB00323ADCAF324ADC115C00212ADC0121001E :10E2FB00EDB02104FA7EB7280BFE3B2807FE202841 :10E30B00032318F106001181007E12B7280BFE3B88 :10E31B00280504231318F2AF122200FA783280007A :10E32B00CD64DDCDD5DDCD0001CDD5DDCD8DDFC30C :10E33B00B5DCCD2EDFE5CDA0DFE1C23BDDAF326436 :10E34B0 ************************************************************************* * * * Z C P R 2 -- Z80-Based Command Processor Replacement, Version 2.0 * * * * Copyright (c) 1982 by Richard Conn * * All Rights Reserved * * * * ZCPR2 is Copyright (c) 1982 by Richard Conn, who assumes no respons- * * ibility or liability for its use. ZCPR2 is released to the public * * domain for non-commercial use only. * * * * The public is encouraged to freely copy and use this program for * * non-commercial purposes. Any commercial use of ZCPR2 is prohibited * * unless approved by the author, Richard Conn, in writing. * * * * This is the RELEASE VERSION of ZCPR2. * * * ************************************************************************* ; ; Module: ZCPRHDR ; Author: Richard Conn ; Module Used By: ZCPR2 Version 2.x ; Note: ZCPRHDR contains the key customization equates for ZCPR2. These ; equates allow the user to select various ZCPR2 options and do an ; extensive amount of tailoring of ZCPR2 to the user's desires. ; Note: This is the RELEASE VERSION of ZCPR2 ; ; ; The following equates may be used to customize this CPR for the user's ; system and integration technique. The following constants are provided: ; ; REL - TRUE if integration is to be done via MOVCPM ; - FALSE if integration is to be done via DDT and SYSGEN ; ; BASE - Base Address of user's CP/M system (normally 0 for DR version) ; This equate allows easy modification by non-standard CP/M (eg,H89) ; ; CPRLOC - Base Page Address of CPR; this value can be obtained by running ; the BDOSLOC program on your system, or by setting the ; MSIZE and BIOSEX equates to the system memory size in ; K-bytes and the "extra" memory required by your BIOS ; in K-bytes. BIOSEX is zero if your BIOS is normal size, ; and can be negative if your BIOS is in PROM or in ; non-contiguous memory. ; REL EQU FALSE ;SET TO TRUE FOR MOVCPM INTEGRATION ; BASE EQU 0 ;BASE OF CP/M SYSTEM (SET FOR STANDARD CP/M) ; IF REL CPRLOC EQU 0 ;MOVCPM IMAGE ELSE ; ; If REL is FALSE, the value of CPRLOC may be set in one ; of two ways. The first way is to set MSIZE and BIOSEX ; as described above using the following three lines: ; ;MSIZE EQU 56 ;SIZE OF MEM IN K-BYTES ;BIOSEX EQU 0 ;EXTRA # K-BYTES IN BIOS ;CPRLOC EQU 3400H+(MSIZE-20-BIOSEX)*1024 ;CPR ORIGIN ; ; The second way is to obtain the origin of your current ; CPR using BDSLOC or its equivalent, then merely set CPRLOC ; to that value as as in the following line: ; CPRLOC EQU 0DC00H ;FILL IN WITH BDOSLOC SUPPLIED VALUE ; ; Note that you should only use one method or the other. ; Do NOT define CPRLOC twice! ; ; The following gives the required offset to load the CPR into the ; CP/M SYSGEN Image through DDT (the Roffset command); Note that this ; value conforms with the standard value presented in the CP/M reference ; manuals, but it may not necessarily conform with the location of the ; CPR in YOUR CP/M system; several systems (Morrow Designs, P&T, Heath ; Org-0 to name a few) have the CPR located at a non-standard address in ; the SYSGEN Image ; ;CPRR EQU 0980H-CPRLOC ;DDT LOAD OFFSET CPRR EQU 1100H-CPRLOC ;DDT LOAD OFFSET FOR MORROW DESIGNS ENDIF ; ; The following equate identifies the location of the BIOS. This equate ; (as provided in the release copy of ZCPR2HDR) assumes the standard sizes ; of 800H for ZCPR2 and 0E00H for BDOS and does not need to be modified if ; the user is running a standard CP/M configuration. ; BIOS EQU CPRLOC+800H+0E00H ;ADDRESS OF BIOS ; ; The following macros define the file types of the command object files ; (COM files under CP/M 2.2) to be loaded when a non-resident ZCPR2 command ; is given and of the indirect command files (SUB files under CP/M 2.2) to ; be used to extract commands from when the indirect command facility is ; invoked. ; COMTYP MACRO DB 'COM' ;FI$LE TYPE OF COMMAND FILE ENDM SUBTYP MACRO DB 'SUB' ;FILE TYPE OF INDIRECT COMMAND FILE ENDM ; ; The following flag enables or disables the ability of ZCPR2 to process ; SUBMIT files (command files of the form $$$.SUB). If SUBON is TRUE, then ; ZCPR2 will process such files like CP/M's CCP normally does; if SUBON is ; FALSE, ZCPR2 will not process such files (ignore them). In such a case, ; only indirect command file facilities like ZEX will work. ; SUBON EQU TRUE ;SET TO TRUE TO ENABLE PROCESSING OF $$$.SUB ; ; The following flag allows ZCPR2 to accept commands of the form "du:cmnd". ; If DRVPREFIX is TRUE, this form is accepted; if FALSE, this form is not ; accepted. This flag has the additional side effect of automatically ; selecting files in the current disk/current user if the command ; is of the form "cmnd". The DRVPFATT determines the attributes of the ; selected files if DRVPREFIX is TRUE. ; DRVPREFIX equ TRUE ;ENABLE PREFIX ; ; The following flag allows the user to select the attributes of the files ; in the current disk/current user to be examined if the DRVPREFIX flag ; is TRUE. The following values are defined: ; ; DRVPFATT Files Selected ; 0 System ; 80H Directory ; 1 Both System and Directory ; DRVPFATT equ 1 ;SELECT BOTH SYSTEM AND DIRECTORY ; ; The following flag enables or disables the ability to switch user areas. ; For a more secure system, it is recommended that this ability be disabled and ; the CD.COM facility be employed instead. ; USERON equ TRUE ;ENABLE USER SPECIFICATION ; ; The following flags enable or disable various ZCPR2-resident commands. ; The user may invoke these as desired, but should keep in mind the size ; of the resulting ZCPR2 and make sure it does not exceed the required ; limits. ; DIRON equ TRUE ;DIR LTON equ TRUE ;LIST, TYPE GOON equ TRUE ;GO ERAON equ TRUE ;ERA SAVEON equ TRUE ;SAVE RENON equ TRUE ;REN GETON equ TRUE ;GET JUMPON equ TRUE ;JUMP  ; ; The following equate specifies the address of the PATH to be followed ; for the PATH command-search if the PATH is to be initialized by the BIOS ; and set by the user via a PATH.COM program. The value of PATH should ; be the address of the PATH data area in memory. If the internal PATH ; provided by ZCPR2 is to be used, then INTPATH should be equated to TRUE, ; which selects the PATH located just after the MEMLOAD routine. If the ; external PATH is to be used, then INTPATH should be equated to FALSE and ; and equate for the address of the PATH should be provided. ; A PATH is a series of byte-pairs, terminated by a binary 0. The first ; byte of each pair is the disk number (1-16 for disks A-P), and the second ; byte of each pair is the user number (0-31). The special character '$' ; indicates the current user or current disk. For example, the path ; from current disk/current user to current disk/user 0 to disk A/user 0 ; is selected by the following sequence: ; DB '$$' ;current disk/user ; DB '$',0 ;current disk/user 0 ; DB 1,0 ;disk A/user 0 ; DB 0 ;end of path ; NOTE: If DRVPREFIX is TRUE, then current disk/user is automatically ; searched, and including it in the command search path causes it to be ; searched twice, wasting time (and space in the path). Since many environs ; will run with DRVPREFIX = TRUE, then a good command search path would not ; include the current disk/user. ; INTPATH equ FALSE ;EXTERNAL ZCPR2 PATH SELECTED IF NOT INTPATH ;External Path Selected ; ; This equate defines the base address of the external path ; PATH equ 40H ;External ZCPR2 PATH at CBIOS Buffer Area ELSE ;Internal Path Selected ; ; The following macro defines the n-element internal path ; IPATH MACRO db 'A'-'@',0 ;Disk A, User 0 db 0 ;End of Path -- MUST be here ENDM ; ENDIF ; ; The following equate causes ERA to confirm on the files to be erased ; before it goes ahead and erases them. If ERAOK is TRUE, then the user ; will be prompted each time; if it is FALSE, then the user will not be ; prompted. ; ERAOK equ TRUE ;SET TO TRUE FOR PROMPT ; ; If ERAOK is TRUE, the following equate adds a Verify option to the ; ERA command which causes the user to be prompted only if the Verify ; option letter, defined by ERDFLG, is given after the file name. If ; ERAV is TRUE, then the user will be asked to verify only when ERDFLG ; is contained in the command line; if ERAV is FALSE, the user will always ; be asked to verify. ; ERAV equ TRUE ;ENABLE VERIFY OPTION ERDFLG equ 'V' ;SET OPTION LETTER ; ; The following equate enables the appearance of the current disk/user ; in the ZCPR2 prompt. If set to FALSE, the prompt appears as '>' (assuming ; > is the current value of CPRMPT). If set to TRUE, the prompt appears ; as 'd>' or 'dn>'. ; DUPRMPT equ TRUE ;ENABLE D> OR DN> FORM ; ; The MULTCMD equate enables the feature of having more than ; one command on the same line, separated by a separation char ; which is %defined by the CMDSEP equate. If this feature is ; enabled, the command line buffer and buffer pointers are ; moved outside of ZCPR2 at the indicated address of CLBASE. ; MULTCMD equ TRUE ;Multiple Commands on one line permitted IF MULTCMD CMDSEP equ ';' ;Command Separator CLBASE equ 0FA00H ;Base address of buffer BUFLEN equ 200 ;200 Bytes in Input Buffer ENDIF ; ; The Wheel equate table enables the WHEEL facility of ZCPR2. With this ; facility, a WHEEL BYTE, which exists somewhere in memory, is examined ; before a set of installer-selected commands are executed. ; If this byte is not zero, then the command proceeds. If it is zero, ; then the command is not allowed to proceed and is exited with an error ; message. ; ; The following set of equates make each of the indicated commands ; selectable to respond to the Wheel Byte or not. For instance, if ; WERA=TRUE, then it responds to the Wheel Byte; if WERA=FALSE, it does not. ; WHLADR equ 3BH ;Address of Byte to Examine WERA equ FALSE ;Make ERA a Wheel-Oriented Command WREN equ FALSE ; " REN " " " " WLT equ FALSE ; " L/T " " " " (LIST/TYPE) WGO equ FALSE ; " GO " " " " WSAVE equ FALSE ; " SAVE " " " " WGET equ FALSE ; " GET " " " " WJUMP equ FALSE ; " JUMP " " " " WDU equ FALSE ; " DU: " " " " (DU Change) WHEEL equ WERA OR WREN OR WLT OR WGO OR WSAVE OR WGET OR WJUMP OR WDU ; ; The INTSTACK equate is used to specify if the stack is internal or ; external to ZCPR2. Naturally, quite a bit of space is saved if the ; stack is placed external to ZCPR2. If such is the case, the user ; should set the STKBASE equate to the beginning of the stack area ; (bottom of the stack). NOTE: THIS IS THE BOTTOM OF THE STACK, NOT THE ; TOP OF THE STACK. ; ; If INTSTACK is TRUE, the stack is internal to ZCPR2. If INTSTACK is ; FALSE, the stack is external to ZCPR2, and the base of the stack ; (bottom of the stack) is located at STKBASE. ; INTSTACK equ FALSE ;Enable or Disable Internal Stack IF NOT INTSTACK STKBASE equ 0F9D0H ;Address of Bottom of External Stack STACK equ STKBASE+48 ;Address of Top of Stack ;Stack Size should be at least 48 bytes ENDIF ;NOT INTSTACK ; ;*** TERMINAL AND 'TYPE' CUSTOMIZATION EQUATES ; NLINES EQU 24 ;NUMBER OF LINES ON CRT SCREEN WIDE EQU TRUE ;TRUE IF WIDE DIR DISPLAY FENCE EQU '|' ;SEP CHAR BETWEEN DIR FILES ; PGDFLT EQU TRUE ;SET TO FALSE TO DISABLE PAGING BY DEFAULT PGDFLG EQU 'P' ;FOR TYPE COMMAND: PAGE OR NOT (DEP ON PGDFLT) ; THIS FLAG REVERSES THE DEFAULT EFFECT ; ;*** MISCELLANEOUS EQUATES ; MAXUSR EQU 31 ;MAXIMUM USER NUMBER ACCESSABLE MAXDISK EQU 2 ;MAXIMUM NUMBER OF DISKS ACCESSABLE ; SYSFLG EQU 'A' ;FOR DIR COMMAND: LIST $SYS AND $DIR ; SOFLG EQU 'S' ;FOR DIR COMMAND: LIST $SYS FILES ONLY ; SUPRES EQU TRUE ;SUPRESSES USER # REPORT FOR USER 0 ; SPRMPT EQU '$' ;CPR PROMPT INDICATING SUBMIT COMMAND CPRMPT EQU '>' ;CPR PROMPT INDICATING USER COMMAND ;... THE MSB IS SET (+80H) FOR ZEX ; NUMBASE EQU 'H' ;CHARACTER USED TO SWITCH FROM DEFAULT ; NUMBER BASE ; SECTFLG EQU 'S' ;OPTION CHAR FOR SAVE COMMAND TO SAVE SECTORS ; CURIND EQU '$' ;SYMBOL FOR CURRENT DISK OR USER ; COMMENT EQU ';' ;LINES BEGINNING WITH THIS CHAR ARE COMMENTS ; ; CPR COMMAND NAME TABLE ; EACH TABLE ENTRY IS COMPOSED OF THE 4-BYTE COMMAND AND 2-BYTE ADDRESS ; NCHARS EQU 4 ;NUMBER OF CHARS/COMMAND CTABLE MACRO ; IF DIRON ; DB 'DIR ' DW DIR ;DIRECTORY DISPLAY COMMAND ; ENDIF IF LTON ; DB 'LIST' DW LIST ;LIST FILE ON PRINTER COMMAND DB 'TYPE' DW TYPE ;TYPE FILE ON CONSOLE COMMAND ; ENDIF IF GOON ; DB 'GO ' DW GO ;EXECUTE CURRENT TPA COMMAND ; ENDIF IF ERAON ; DB 'ERA ' DW ERA ;ERASE FILES COMMAND ; ENDIF IF SAVEON ; DB 'SAVE' DW SAVE ;SAVE TPA COMMAND ; ENDIF IF RENON ; DB 'REN ' DW REN ;RENAME FILES COMMAND ; ENDIF IF GETON ; DB 'GET ' DW GET ;LOAD FILE INTO TPA COMMAND ; ENDIF IF JUMPON ; DB 'JUMP' DW JUMP ;JUMP TO ANY MEMORY LOCATION COMMAND ; ENDIF ; ENDM ; ; This equate determines if the ZCPR2 FCB is located internal to or external ; to ZCPR2. If EXTFCB is TRUE, FCBADR defines where it is located. By ; placing the ZCPR2 FCB external to ZCPR2, more space is freed up for other ; uses within ZCPR2. ; EXTFCB equ FALSE ; Allow External FCB if EXTFCB FCBADR equ 0FFD0H ; Address of External FCB endif ; ; CMDRUN -- ZCPR2 Extended Command Processing Facility ; ; This equate enables the ZCPR2 CMDRUN facility. If CMDRUN is TRUE, then ; another stage of command processing is invoked should ZCPR2 fail to find ; a COM file when the user gives a command. This stage involves invoking ; the COM file specified by CMDFCB and giving it the current command line ; as an argument. In this way, if, say, M80 PROG2 fails as a command, ; a new command like LRUNZ M80 PROG2, SUB M80 &PROG2, or ZEX M80 PROG2 may ; be processed. If the new command fails, an appropriate error message is ; given. ; ; The ROOTONLY option causes ZCPR2 to only look at the Root (bottom of ; path) for the Extended Command Processor if it is set to TRUE. If it ; is set to FALSE, the path is searched for the Extended Command Processor. ; The tradeoff here is that ROOTONLY = TRUE is less flexible but somewhat ; faster than ROOTONLY = FALSE. ; CMDRUN equ TRUE ; Enable the Facility if CMDRUN ROOTONLY equ TRUE ; TRUE if look at Root Only for Extended ; Command Processor, FALSE if look along ; path CMDFCB MACRO db 0 db 'CMDRUN ' ;Name of Program db 'COM' ;File Type ENDM endif ;CMDRUN ; ; END OF CUSTOMIZATION SECTION ; d line ; as an argument. In this way, if, say, M80 PROG2 fails as a command, ; a new command like LRUNZ M80 PROG2, SUB M80  This is the release date of the disk. B3MM300 COM B3MM300 TXT VIRT ASM MD19200 COM MD19200 PAS PBOOT COM $PBOOT2 PAS $MDBITS COM +"MDBITS PAS 4MDSET COM 6MDSET DOC 7MDPRT ASM 8PATCH-ITCOM > PATCH-ITDOC AMMDBITS .PAS FF 2F 1920 15 MDSET .COM 25 AA 896 7 MDSET .DOC DC 07 384 3 MDPRT .ASM C3 BB 5888 46 PATCH-IT.COM 73 94 2560 20 PATCH-IT.DOC 2D E2 19840 155 PATCH-IT.AQM 40 18 14080 110 NORMAL .COM BD 78 128 1 REVERSE .COM 7E EE 128 1 REV/NORM.DOC D7 E4 768 6 WSKEYS .ASM A4 DC 6400 50 DOUBLE1 .COM 4A B0 256 2 DOUBLE2  Fog Library Disk FOG-CPM.049 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Morrow MicroDecision programs. Filename Description -06-00 .86 This is the release date of the disk. -CPM049 .DOC This is the description of the disk contents. MM300MOD.DOC 4F9C 10K Documentation for the Morrow Microdecision 300 baud modem. B3MM300 .COM A796 3K ver. 3 [BYE 1 of 2] Software to allow remote answering of the MM300 modem. First step to setting up a remote (BBS) system is to get the modem answering the phone. B3MM300 .TXT 4160 1K ver. 3 [BYE 2 of 2] VIRT .ASM 9EA4 1K Patch used in BYE to set MAXDRV correctly. MD19200 .COM BB80 8K [MD19200 1 of 2] Sets printer/modem port to 19,200 baud on Morrow MD systems. Turbo Pascal source is included. MD19200 .PAS 868D 1K [MD19200 2 of 2] PBOOT .COM 114A 9K ver. 2.0 [PBOOT 1 of 2] Simple XMODEM protocol file receive program for Morrow MD systems with Freedom 50 terminal. Pascal source included. PBOOT2 .PAS B398 7K ver. 2.0 [PBOOT 2 of 2] MDBITS .COM CBC9 9K [MDBITS 1 of 2] Replacement for the Morrow Microdecision SETBAUD program. Turbo Pascal source is included. MDBITS .PAS FF2F 2K [MDBITS 2 of 2] MDSET .COM 25AA 1K [MDSET 1 of 2] Sets serial port speed on the Morrow MD1 only. MDSET .DOC DC07 1K [MDSET 2 of 2] MDPRT .ASM C3BB 6K ASseMbler source for a program which redefines the LST: device as the AUX port of a Morrow MD terminal. PATCH-IT.COM 7394 3K [Patch-it 1 of 3] Patches Morrow-supplied WordStar 3.0 and Correct-It to work together from the "Editing no file" menu. ASseMbler source is included. PATCH-IT.DOC 2DE2 20K [Patch-it 2 of 3] PATCH-IT.AQM 4018 14K [Patch-it 3 of 3] REV-NORM.DOC D7E4 1K [Reverse/Normal 1 of 3] For the Freedom 50 terminal of a Morrow Microdecision. Set dark letters on bright background or bright let'ters on a dark background. REVERSE .COM 7EEE 1K [Reverse/Normal 2 of 3] NORMAL .COM BD78 1K [Reverse/Normal 3 of 3] WSKEYS .ASM A4DC 7K ASseMbler source for a patch to customize WordStar for the MDT20 (Morrow) keyboard. DOUBLIT .DOC 0A49 3K [MMD drive convert 1 of 5] Install double sided drives on either the MD1 or MD2. DOUBLE1 .COM 4AB0 1K [MMD drive convert 2 of 5] DOUBLE2 .COM F5BD 1K [MMD drive convert 3 of 5] PATCH1 .SUB 706A 1K [MMD drive convert 4 of 5] PATCH2 .SUB 390A 1K [MMD drive convert 5 of 5] DRAW .COM 3BE9 14K [Draw 1 of 4] Screen graphics program for the Morrow ADM-20 or upgraded MDT20. Turbo Pascal source is included. DRAW .DOC 987C 7K [Draw 2 of 4] SAMPLE .DAT 39D5 2K [Draw 3 of 4] DRAW .PQS 1B7B 10K [Draw 4 of 4] ZCPR2 .MMD 9D72 2K [ZCPR2 1 of 6] For the Morrow BIOS 1.3 (See also STARTUP on FOG-CPM.050). ZCPR2-MD.FIX C24D 1K [ZCPR2 2 of 6] Z2PATMD .ASM 5B97 2K [ZCPR2 3 of 6] Z2PATMD .HEX 0CC3 1K [ZCPR2 4 of 6] ZCPR2 .HEX 920C 6K [ZCPR2 5 of 6] ZCPRHDR .LIB 088A 15K [ZCPR2 6 of 6]  6K ASseMbler source for a program which redefines the LST: device as the AUX port of a Morrow MD terminal. PATCH-IT.COM 7394 3