TDM6bGJg  Kaypro II CP/M 2.2 SSDD ROM 81-282 Digital Research, Inc. C0< \X ©RIGHT (C) 1979, DIGITAL RESEARCH %_͌> ͒> Ò> Ò͘~#͌ì _2<2 凇!2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOO*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw*Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USERi!yO#< Ty#O 321y_͸2y2ͽ: <ì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E͊:==»y==»*Ww#*"͸*:G#š"͸:!w4!iw:Z!E~=262*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄvADCOMf^: !  $$$ SUB$i"C{2!"E9"1A22!ty)K!G_^#V*C~E ,&-AGMS!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :E B 2>: b# : y! 4 5~yy5 6y:*{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# 1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^: ! ~ 3#0 Wx x G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇҐ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN# x: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nx: ! 2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>:! ^#V w#P:BO|^#V#"##"##"##"! 8MOVCPM COML PIP COM:SUBMIT COM XSUB COMED COM4ASM COM@ !"#$%&'DDT COM&()*+,STAT COM)-./012SYSGEN COM3DUMP ASM!45678COPY COM9:FORMAT COM;BAUD COM<TERM COM=?SBASIC COM>?@ABCDEFGHIJKLMSBASIC COMLNOPQRSTUVW,COPYRIGHT (C) DIGITAL RESEARCH, 1980 1] ʑ?ʑ! __0 r))) O @|r}r.g))å{u INVALID MEMORY SIZE$!$ʡ~/w/wʔ|g*"z|?¸>@G!>0w#w!4~:60+4~u!N#F! x, # =!v"z!w6!u#+w+wz >ZxG}o|g"|! :m c p!"xp ~#c*|!:m ʅ xä SYNCRONIZATION ERROR$ {°~#o}oҼüÅ*zZ# :m m! ~ #* DM! x  w^uj&!!!!!!:4( !!s1{˿~#O!!D!9é:!B ۣOVERLAYBCOM6XYZ[\]^XBASICLIBREL_`abcdefghijklmnBASICLIBRELopqrstuvwxyz{|}~BASICLIBRELDUSERLIB RELFAC BAS3XAMN BASXAMN BASDPLAY BAS1CONFIG COMZLOAD COMDUMP COMSBIOS ASMEDISKDEF LIB1 B; $$$ ST $$$  ϩ#!N#F! D!_>0w#w1!`4~:60+4*"e@u READY FOR "SYSGEN" OR "SAVE 00 CPM00.COM"$*|  CONSTRUCTING 00k CP/M vers 2.2$i6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bw!>2*C~=2u:B2~2wE:A*Cw>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6) CLIENT BCN B $$$ V2:ʑw:2E**E}DQ>2'GÒ!>82y~ÃÈÍÒ×_ä  0123456789-, .t2:32 KAYPRO II 64k CP/M v 2.2 >!2"!2":Ot Warm Boot 1~̓!",͈͒ *"w >(½̓:!3ʩ!*éw!'̩:!6ʩ!-ͩ!5O ~:!9ʩ!Eé!6é!9é:!9ʩ!?ʩ!E@ʩ!9é:!Bʩ!<ʩ!0! +! J 2E > ! ^#V w#P :B O|^#V#"##"##"##"!O *!O *|!6ʝ 6>*w#w*w#w'û *! J * ""!N#F*^#V*~#foyx *{_zW+ * yx # *DM*s#r*s#ryOxG*0MD!!N: E G>O: \ S *C  :q n& ^#V> O^ "*}:*)= ":O:o"*C  *C !ͮ ~2~2ͦ :2ͮ : O:w:w |g}o *# + !2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" =qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !  $$$ SUB$i"C {2!"E 9" 1A 22!ty)K!G_^#V*C   ~E , &-AGMS  !!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$ :B A2 ! ~6 >ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q* 4 ) :B O! yoxg*:B O }!N#F "*#*s#r^  ~!J  ! J *:o$*C ~i 6i w**{#z r+s{ozg**͕ **  , w͜ ͸ Ͳ ! !N#F$**O !~#:A #~$=2E k͌ #~?  xDIR ERA TYPESAVEREN USERi!yO#< Ty#O 321y_͸2y2ͽ:˜1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^: ! ~ 3#0 Wx x   G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x -  O͐  : E  B 2 >: b # : y! 4 5~yy 5 6y Ґ ^H @Oy H  H : – ͬ   #H : !  H ù  H  H $O͐ : 2 *C N#  x : 2 p & x ~+é 7 2 H ! >w _ : ! 5ͤ N k ͱ ¦ ͱ xʊ #N x : ! 2 ͤ ! 5™ #wO ~x½  p H    y< < ʑ  : !qMD #@0< \X ©RIGHT (C) 1979, DIGITAL RESEARCH %x_͌> ͒> Ò> Ò͘~#͌ì _2<2K ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q : :/GyO>2!q*C " ͡  ʔ*J Ҕ^ :Oyʃ?|x | s-|N-# S:2E !~Яw > T   D ^ 6k -äPYy 5*{zBK5ڋ>*C w~#+w#w+ɯ2E 22 i  ^ *C :~w~͔͔# # @(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE) COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$Ƚ):B  " *)*)Q;*"E :;:A  2A QÓQÜQ*C }/_|/*W}_*"}o|g":ʑ*C 6:ʑw:2E* *E }DQ>2'9Â9("ty~ÃÈÍÒZß  o2:32 KAYPRO 64k CP/M vers 2.2 >!2"!2":Oo Warm Boot 1y~!",͍̓ *"g >(­~:!3ʤ!*äw!'̤:!6ʤ!-!֒ HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! :$I$I  I  A @H3007EFE20C28F05060B363F2305C288051E5D :1006900000D5CDE901CCEA04CA1B063AEE080F0FDB :1006A0000FE6604F3E0ACD4B0517DA0F06D17B1CD3  w ~>2!E 5T *C !"C  "C !w# F! w͌ x 2͢ *C  ~<wʃG:!ʎì 4~ʶ ¬:<ʶ$ ʶïZͻ   x >2>2ͻ :!Z2:E w ̈́ ͊ Ͳ  >2>2T *C G ͻ : w ̈́ n> 2;O ^ DM;}H> "*C  ::dd slO s#r:E ͊ :==»y==»*Ww# *" ͸ *:G#š" ͸ :!w4 i w: Z!E ~=26 ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 ͤ!5O ~:!9ʤ!Eä!6ä:0!9ʤ!Bä:!9ʤ!?ʤ!E@ʤ!Bä:!<ʤ!<ʤ!0! +!&!!!!!!:4( !!s1{˿~#O! 2*C !!~~#~O~G#n,-.‹! w! yG!x͢.:E <ʄ! q!pQ:E <. ʄ$.:E <ʄ i 6}2E x N! ~态O>G~G!~G} *C !r#r#r ^ ͥ_y#x#{s+p+q-*C  ͥ!!q#p#w*:B O Y G }*MD "ã:!B w!>2*C ~=2u:B 2~2wE:A *C w>" !""2B !" !r QQQâ~?ͦ ~?r Q *"C Q- Q͜QüQr Q$Q*n$@B B HH II$@DI ABI$"$H$H@$$I! H*  $H@@A I $D!!$I"BI"I"@$BIIH$$$$BBI$@BI!"$$A DI$@  A$@͒$$@H! "!$$" @B$!!!DH$$"H @@BHH  !$$A"D@ "A" "BHA " !$ D B I $ !$$ H@BD D$ h221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! Ͳ:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/> ÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !r+s+p+q*~$7*>*>H&>*#"*#"> 2:^R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\ "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  V*M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz!b~26!~6<+wé>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>HHͯ :!^w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q* w-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&6` :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ r!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 *g/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::^Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ %2*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H W Extended Submit Vers 2.0Xsub Already Present$Requires CP/M Version 2.0 or later$:y*###ƒ# yk   җ 4!~=ŐW!xʵ ~#èbx {~#o}où.xsubb!np+q*m2_!pp+q*o ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7***x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6=q-!6]:ͧz2~e:~2O! 6*~& 6$>!~_z*~& w!~5Bx:yͧ*v+"vv ~_{ozg 001 $$$$ SUB:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*  2% ͋*-"*$$$ SUBq:(=2(N *$*& w*$#"$*&#"&' !"N*M^7 !)6:!)ھ *N*DM͆ 2*ʭ :*ʗ ͯ *N"P*6:2)÷ *N"N!) $@BA$! A "!$""> copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Command Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q* ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨''ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z6ͭ:}"!}5́ͭ́3*yM"h:}^a A2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧ  COPYRIGHT (C) 1979, DIGITAL RESEARCH DISK OR DIRECTORY FULL$FILE EXISTS, ERASE IT$NEW FILE$** FILE IS READ/ONLY **$"SYSTEM" FILE NOT ACCESSIBLE$BAK$$$BAK$$$-(Y/N)?$NO MEMORY$BREAK "$" AT $1mM"m +!8s~1m!f66:0O  ú!p+q:/(*DMͩ:  : I N* *DM:aO>!Һ x!: ڦ> ʡ* +" >¡! 6: <2 =O! N͒:  O͒: ! 6:h!o$O* ͸ ! 6 !h6!: 2 3* & 6 : <2 =O! N͒*dM  :sGsu n>!6:<2=O! N͒!">!"͎/Ҵ*+">>!": *#"*""*!".+",*$"**o".!",!36:3{.T! 6:!B)! >w!"&*o"(R :!C:eR :!DKeX :!K\ͷX :!Lj^ :!Pš͎҇! 6F×͢җ:Ç :!T¨F :!U¾: 2 :!V͎"$DMͩ/ *oDMͩ : 2 :! (::H%^bF : ͎H :!Ay! 6*""&*o"(R͎an͢na! 6R :!F”͢ґ Ä :!J $:2$͢ :=2:<2!*& ~2!ü*""I*M*o/!:":7 e !p+q*DM  =? ) !p+q.*DMF -L *9"`!"b!h6!j6!|6.!=\ -x !e:dʥ *eM \R :xʥ @ *dM \, :x \͕ :x - V :e _ :f w : =e !e:d*eM =e : =e =͕ !]6:x>- !"!76!6!6!66*dM  *dM !6:8!*`*;DM \u 2xʻ>!xҨ- *`*;6:82*`"`:<2w!"`9`h*`*;~2*`#"` *M  *!M 1m! 6!6! 6: 2Ebͽ!e:d\::eH2 H҆ͽ:e2!:d2e:!2dû :!I¬!: :H2 ҮX:h2iҐ:!ʍ:!:!H:!H,!"! 6#~ F)ͷX:! X):i!h)9 e:!:h2jO>F L>!":i!jHҼ*"+M ~ ʼͲ!f6!h6!"! 6F!f6:h2k!iҠ:i2k:j2h:k!hҶ9 æ:h2j!!6:j2he:! >"Ͳ*"M ~2!O :! *+" *22*,**"0M ~ H3*0"**+"*+">23:2/k!36,*+s#rx:3x*0"*: “**"&*"+"(á*$#"&**#"(*"#""*$#"$*"+""*$+"$*#"!4qM*"*$: *(y"$DM}|C#~ *#"*&DMyxC 1*+":4?w+"$""ͷR: —*$"("҈!"&Ô""&*""&$mڸ*o"(**$"($"O26͛*"M :6w͢:6 u"&! 6R*I""ë :!M:H| ! 6>F ͛e: <2 O! Hqy d F : 2! 6*#s#r :!N ͢ *o/ Ҧ Ͷn! 6!"&R! 6o$ Î Ç :!S0 $͢- :2"+s#r!:* *& ~2!:<2 :!W> v :!X³ Z͎\ Ee ð :7/҃ E!76e ͕ :xƒ - ͷ*&"K(Kڰ *KM N͔*K"KҌ :!Z ͎  ͢ : :!  'v!gq:*eM !b+!s{!f!6:!b*b*^DM =ͅ N- *b"b:<2)f!"b!q9bڀ*b*^:w*b#"b!q:6ڶZͅ ʱ- !66*6& :w:6<26!J6*b}:J<2Jm=? :x- : ;*dM .=\ -=ͨ ;: *eM =ͨ .M= -C!q:Y*M !q:a/>z!/H!q*MaҎ:_:!q:ҥ*My:!p+q!'"!6>**ͪ{2**ͪ"*! ͪ":!!Y!!6e*!M͛ /$^L:!@OL:! 2͑e:b:! L:h<2hb:! b:hO>!hw:! pX:! …!!6  LÊ!!6ûô:!ʛ͑:! ҩ OҸû:!R†!6G>!!!6 :2.t -? >!!6!6s, !6:xB!6OU2!SB!G6:҃!6:G҃*G& ~2!:G<2G_ Qқ=e  b:!-®! 6:!#¿͇;J:!:!!6Lv:!:Jv: *#"͎t:f *g&!lq:l $ !h4:l 1 !h6*lM :hB     !h55!mq:m :hO>H2ny} !m6 !o6:n!oښ *mM !o4‚ !pq:p ڪ >:p :p H:p H!qq*qM͛  ^W :q@2q*qMW   !sp+q*r !up+q *tDM !wp+q*v !zp+q*y2x!|p+q*{2x!~p+q*}2x!p+q*!p+q*!p+q*!p+q*2x!p+q*!6   >>! q* &!p+q* 7!7q:*7M͒:7o$+͛ͪ*$M ~28Om:8 I͇͢u$oqo͛rP! 6!"&*$"(R͎ҔM͢ҡÔ($ҵ! 6R͇vͶ2!*!Mm$"*"M :!w͢:! e2!:! : /HH/Q:! @!!6 R!!6 :!KR$*& :!w:<2dn!:s+q*$";!>6:>/;oH*;#"(";:92=*=& *(M !::=2>/H:=<2=*(#"(æÀ:>*(+"(R:>!6$:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hHҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! 6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ڊ͛Íq!!6 !!6 !6*!Ma2D*!M͒2!:D/!+w!6e2!͢!Eq!E:!:H:H!Fq ag`!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ d11*" COPYRIGHT(C) 1978, DIGITAL RESEARCH M ! á 4êü /L9ASMPRNHEX 1~K*FM8 *FM   Oy2F :FY5>>:!02HO> /!";u*)))*) *H& "PҘ! 6+s#ré! 6"DM!>))덑o|g =±^#V) ^#V|g}o _{ozgi`N#Fogo&og_{_z#W H =+ LIB X$$$$$$$LIB. !)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1  :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6yj:|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSxS 1:  1"" ͦ 1 |͍ >O U!" 1 1!|_!^#fk $8AP`ixH ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1: :,; c*| } 8O8:  '<ͭ'<>V$>O$:Ğà\ÞØ`rÍÖ![w#w#b!"!F#v2[G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"*z'{ͅ>ɯo>g"k!m6ů{_zW5>)D*kOxGd !m?FDM!xGyOڂÃ)sn55)=â|g}o=î--#zg{ozg{ozg{oÓ:: ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :‰:̅ԅ!^#=ʅVq”*qͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅd:! G~#x=2> > ! >x6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 Y :7ʗ8 z !<ͼ CP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊ͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪ NĽ y0G G t :):,.>C :|: Jü;r :R: ʼʋ!ʼR!ʼʋ>SR{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"* "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >N ){zA"*![N![ N#Fr+sq#p/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~͎*_###s#r^#V`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACMCCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/Ͱ>2lyPLnR>UX:l̅2l͓*>ERʵ2C!" """ :ʼ:*1 |R|ͦ0FIL: R  R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#H vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 q@2 0 0:x0_<2! wI2 2> 2 >2ɯ22 !~@_6^4#: w~$w: 0 q: A: A͋q: a{_2  2 - !ɯ2I:  ;*:  ͭͷ ͭ͋>9q>9: '!2 >9 7:! 6 >2>2: 2 Qͭ:Ğ! :lj<͖<j<|<: OʊQ>ÖH >2 2 û: B­>ôD> ¸!52 !"!N#~#A07O! ~*!) " ?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!m#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8n!~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fk I =COPYRIGHT (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_!pp+q*oÃO$*sy͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͘=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷ |)*)þ))>+><7"9.Yͯ * M^2U :2:2ͳ:_³ͯ !6! @!!BH @@ABH B! "BHI$$BI$BI $ HI f D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I u$I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A" IO!b q!vz͒q.?*!9"8"͉Z*" +*'/7?v"*2:EI SPHLDI XCHGPCHLXTHLRET HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB ANA XRA ORA CMP INR DCR MVI LXI STAXINX DAD LDAXDCX RST PSW POP PUSHNZZ NCC POPEP M B C D E H L M A B D H SP PSW ??= M!Eâê ö  - Ð f  "J*"!"!"2O!" "]""!1!++""M>28!"9:] !í 1  ë «   Ͷ ͐ =« f xY |« }ҫ gA>S Ag}S S i |« }!w s#r:[ʔ _!~ʦ ![4ç \͢¦ 2[ 7 >?  e͢!g"c> _͢a_!f~> 5*c~#"c 0 7   > >  ͢| } @ >. *_}o| , 0 ë ^#V#!Y ))))o P q s#r#!V4 !V6# ,® >2Vñ m ͅ m ͅ m ͅ « Vʫ ! XN!~    y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P !ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷ͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# ԯ$$$I$$H!!! BH" !I B  $$!BD! $!BI D@"!$I$$H"!I$I$I$UUU$$A$ / ͓ !" >- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓͢ ҫ ͐ =« f " ͓ ҫ ͐ ʻf " =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *]"a. ~ #E }"]*a 6 *]}#|#*]E ͐ « f f f {zA|« W}d ͐ f f f DMʡڏ"=ʡͲ=ʡYPͲ1**!O~4#~#F#x~#s#r#w>͐ « f f  . ᯕo>g. ! _^! ^#V~ x+ >= = !~  . !   #x f L L ͓ͅ ҆ *" !6ï +"_*~ #E گ ʫ ^#V. ï ~ CZMEIABDHSP!"M"+"!91*~!O~6=G#^#V#~x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_ ^z8O!B N#N ¾SP.* |} !9":q!"2L͐ ! =« f }ʫ +"MD Å D  !  #  *3 Copyright (c) 1979, Digital Research??CON:RDR:PUN:LST:DEV:VAL:USR:DSK:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:R/OR/WSYSDIRR/O R/W SYS DIR ** Aborted **Active User :Active Files: Drive Characteristics65536: 128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords/ ExtentRecords/ BlockSectors/ TrackReserved Tracks is Temp R/O Disk: d:=R/OSet Indicator: d:filename.typ $R/O $R/W $SYS $DIRDisk S )*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*) !gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠" ͠Q" 8AO͐jͱͷDM͏ m  Z"l"!6>ʥ *}҆ *M ͱ*}x O͐} W͐ͱ !+s#r!+s#r#4D ͠:\ʹ :\=Oͳͩ !6!)6l :) :)=2) :] & !"}2\!h6?!j6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) 2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r! Otatus : DSK: d:DSK:User Status : USR:Iobyte Assign: =Bad DelimiterInvalid AssignmentBad Delimiter: Bytes Remaining On R/, Space: Invalid File Indicator** Too Many Files **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!9"2!T OË!]6:\:] Hr3 Ë:\ʀË͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(& w w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W >!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~ *} *M!+s#r#4 !s+p+q!6!66:!ڄ !6!6>!r *&**&Y i !6!4+4A :} :!4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2 )6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%) *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!")!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V" L!*p+q*)O2'!,p+q*+O2'O2'O!.p+q*-LRRLR\LR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4 *:2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DM =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐ [ T? -THAT A JMP TO 0000H REBOOTS) CALL CRLF LHLD OLDSP SPHL ; STACK POINTER CONTAINS CCP'S STACK LOCATION RET ;TO THE CCP ; ; ; SUBROUTINES ; BREAK: ;CHECK BREAK KEY (ACTUALLY ANY KEY WILL DO) PUSH H! PUSH D! PUSH B; ENVIRONMENT SAVED MVI C,BRKF CALL BDOS POP B! POP D! POP H; ENVIRONMENT RESTORED RET ; PCHAR: ;PRINT A CHARACTER PUSH H! PUSH D! PUSH B; SAVED MVI C,TYPEF MOV E,A CALL BDOS POP B! POP D! POP H; RESTORED RET ; CRLF: MVI A,CR CALL PCHAR MVI A,LF CALL PC {Az!iI )^!x6͵! n>z^!iKAYPRO SYSGEN VER 2.2SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETUsRN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETEG EA (RESTORED AT FINIS) LXI SP,STKTOP ; READ AND PRINT SUCCESSIVE BUFFERS CALL SETUP ;SET UP INPUT FILE CPI 255 ;255 IF FILE NOT PRESENT JNZ OPENOK ;SKIP IF OPEN IS OK ; ; FILE NOT THERE, GIVE ERROR MESSAGE AND RETURN LXI D,OPNMSG CALL ERR JMP FINIS ;TO RETURN ; OPENOK: ;OPEN OPERATION OK, SET BUFFER INDEX TO END MVI A,80H STA IBP ;SET BUFFER POINTER TO 80H ; HL CONTAINS NEXT ADDRESS TO PRINT LXI H,0 ;START WITH 0000 ; GLOOP: PUSH H ;SAVE LINE POSITION CALL GNB POP H ;RECALL  HAR RET ; ; PNIB: ;PRINT NIBBLE IN REG A ANI 0FH ;LOW 4 BITS CPI 10 JNC P10 ; LESS THAN OR EQUAL TO 9 ADI '0' JMP PRN ; ; GREATER OR EQUAL TO 10 P10: ADI 'A' - 10 PRN: CALL PCHAR RET ; PHEX: ;PRINT HEX CHAR IN REG A PUSH PSW RRC RRC RRC RRC CALL PNIB ;PRINT NIBBLE POP PSW CALL PNIB RET ; ERR: ;PRINT ERROR MESSAGE ; D,E ADDRESSES MESSAGE ENDING WITH "$" MVI C,PRINTF ;PRINT BUFFER FUNCTION CALL BDOS RET ; ; GNB: ;GET NEXT BYTE LDA IBP CPI 80H JNZ G0 4; FILE DUMP PROGRAM, READS AN INPUT FILE AND PRINTS IN HEX ; ; COPYRIGHT (C) 1975, 1976, 1977, 1978 ; DIGITAL RESEARCH ; BOX 579, PACIFIC GROVE ; CALIFORNIA, 93950 ; ORG 100H BDOS EQU 0005H ;DOS ENTRY POINT CONS EQU 1 ;READ CONSOLE TYPEF EQU 2 ;TYPE FUNCTION PRINTF EQU 9 ;BUFFER PRINT ENTRY BRKF EQU 11 ;BREAK KEY FUNCTION (TRUE IF CHAR READY) OPENF EQU 15 ;FILE OPEN READF EQU 20 ;READ FUNCTION ; FCB EQU 5CH ;FILE CONTROL BLOCK ADDRESS BUFF EQU 80H ;INPUT DISK BUFFER ADDRESS ; ; NON GRAPH  LINE POSITION JC FINIS ;CARRY SET BY GNB IF END FILE MOV B,A ; PRINT HEX VALUES ; CHECK FOR LINE FOLD MOV A,L ANI 0FH ;CHECK LOW 4 BITS JNZ NONUM ; PRINT LINE NUMBER CALL CRLF ; ; CHECK FOR BREAK KEY CALL BREAK ; ACCUM LSB = 1 IF CHARACTER READY RRC ;INTO CARRY JC FINIS ;DON'T PRINT ANY MORE ; MOV A,H CALL PHEX MOV A,L CALL PHEX NONUM: INX H ;TO NEXT LINE NUMBER MVI A,' ' CALL PCHAR MOV A,B CALL PHEX JMP GLOOP ; FINIS: ; END OF DUMP, RETURN TO CCP ; (NOTE g>COPYRIGHT (C) 1978, DIGITAL RESEARCH Portions (C) 1982, NLSo&)))))))a{__> W> W^~W#nO****!*$*'! "y2s2t>(2u>2s>2t>2u:sO̓:tO<2t͋*y"y͓2{:{!nI )^6<2{:x/ͣ2͛!u51!;n:] ʜ\Ͱ Diskette in drive B must have been formatted Fast copy------> Does not verify after copy Verify--.-> Verify disk B is the same as disk A Exit---> Exit to CP/M (before typing place system disk in A) (C)opy/verify (F)ast-copy (V)erify (E)xit Please enter 'C' or 'F' or 'V' or 'E' ==>$ $Track $ Sector $Drive A $D RSETUP: ;SET UP FILE ; OPEN THE FILE FOR INPUT XRA A ;ZERO TO ACCUM STA FCBCR ;CLEAR CURRENT RECORD ; LXI D,FCB MVI C,OPENF CALL BDOS ; 255 IN ACCUM IF OPEN ERROR RET ; DISKR: ;READ DISK FILE RECORD PUSH H! PUSH D! PUSH B LXI D,FCB MVI C,READF CALL BDOS POP B! POP D! POP H RET ; ; FIXED MESSAGE AREA SIGNON: DB 'FILE DUMP VERSION 1.4$' OPNMSG: DB CR,LF,'NO INPUT FILE PRESENT ON DISK$' ; VARIABLE AREA IBP: DS 2 ;INPUT BUFFER POINTER OLDSP: DS 2 ;ENTRY SP VALUE FROM CCP ; ˽:0GyOy0d8d{0(0 8:_>> y>cG f*! :f>2f>vz€2f KAYPRO II Double density diskette format program Version 2.1 !--G All activity will take place on drive B OPTIONS ------- Exit--X> exit this program and return to CP/M Format------> format the diskette in drive B  2(it will erase all information on it !) Single- b6H>2 ˯6CSF[VVE H* "Q " *Q" ͇͇H:  -˯ :f>2f  ͵2͇ H!"2X:< 8͏!"2Ė:< 8:<(ڧ2f :f>2f   O  ͵2͇ H!"2X:< 8͏!"2Ė:< 8͎:<(92fCS!"~GKC>*#"[S >2 KHK *~O rive B $ {BAD}$ $ DONE $ Please type any key to continue.$Verifying disk B to disk A *** NOTE: only one error per track is displayed (there may be more) ***$Drive B byte $ data is $ should be $ after copy Verify--.-> Verify disk B is the same as disk A Exit---> Exit to CP/M (before typing place system disk in A) (C)opy/verify (F)ast-copy (V)erify (E)xit Please enter 'C' or 'F' or 'V' or 'E' ==>$ $Track $ Sector $Drive A $D MB ; STACK AREA DS 64 ;RESERVE 32 LEVEL STACK STKTOP: ; END  [O Àt.*{(v7v=vGvM"ͭ-( *B>2>!}O ~  (=>:>vG >ͭ>ͭ˷2zy0d8d{0(!0 8:_yG y6x6 D7_0 K  >2H :tO  H   KAYPRO II Double density diskette copy/verify program Version 2.1 --- m ͔͌2( A0> >B >C >D >E > F > G >H(͇>>  KAYPRO Baud Rate Adjustment Program Enter a letter below to change the baud rate of your RS-232C serial port, or press to exit without changing anything. A = 110 baud B = 300 baud C = 600 baud D = 1200 baud E = 2400 baud F = 4800 baud G = 9600 baud H = 19.2 Kbaud Enter new baud rate : $:_  So be it 2&> ͽX>2e> ͽX>2l 5 5MYMYMYyMY2/)MY}MYH)͈)MY>2l 5 5MYMYMY"/)MY{MY2H)͈)MYMY[&b,ERROR *&*&:Y» MY!*&LR%YtY>MY>XXYͯ4s=b,OFFHS>é >2l 5MYMY}2I :Y2J   NS*&:J  MYMYX:I <2I XY:J  MY$ MYLR%YtY:J < MY&* `SX>XY*&LR%YtY*&:YK w RX>P X>XY>2MY/)**͈)>$2[*x2M L"P "N QS=%*P *:*N ">2:::M r&&b,=SMYͯ4=? acter. Press either to start using the terminal or press to return to CP/M: $ i Press and at the same time when done using TERM.COM and the program will exit to CP/M. $ D sent through the RS-232 connector to the modem (or other peripheral) and data from the modem is put on this video display. Technically, this program looks like a Lear-Siegler ADM-3A terminal and is set for full-duplex, no parity check and 8 bits/char +/FfGfHfIffff,*G' tm S-BASIC Compiler Version 5.4b Y'r&>22!9"\:j'&:w":8MY>XXYͯ4p=X:tXYX:uXY>2:Y2͇:Y:v;[Z:~ [:z[f:xb,$END.MODULExr&LXtYHҚ=o&)^#iVʠHSc K d HS w HSHSk!!!!)}$$HSHS$HSVHSHSHSR HSc,Aid5JX . $~2C serial port, or press to exit without changing anything. A = 110 baud B = 300 baud C = 600 baud D = 1200 baud E = 2400 baud F = 4800 baud G = 9600 baud H = 19.2 Kbaud Enter new baud rate : $:_  So be it 2M 2l 5TSͯ4C?MY222"b%"K "I X!I N):H *#">2MY/)**͈)>#2[*ͬM" " QS=%* *:* ">2::r&MY222"b%" " X! N): *#"!,QS>2 *| }~ " 3 >23 G2lx= 5-S * ~#9 MY%YtY: * |MYX* {XYzXY*MY!)ͯ4=>2 *}/_|/W*o" z MYX{XYzXY*MY!)ͯ4= :a ʊS/2a MY/)XtY& b," X>"XY͊(!_ OÙCopyright (c) 1980 By G.Ohnysty Structured BASIC (S-BASIC) Compiler All rights reservedie1:e_12!"*"Lʊ! OVERLAYBCOM n~#"_  CANNOT OPEN OVERLAYBcREAD ERROR OVERLAYBi:|=_} $$$ $0 q w  20 F 9~Nc7:8/28*&ͬ)MY!)MY&*&b,=S*&ͬ)!,R*L>2PS&ʓh,ON>ڗ/×:X/2Xr&>2&*&ͬ)"a*&:::=2?a!w#x6 #&L*r&!\>!͉K!\>͉K:!]~# a:, ʍ*t:X>2X&:OG'MODULE NOT FOUND2XØb,$MODULE|&:4!,|ʂ#nr&)r&2X"tͯ&>22ì\!\>ͫK!\>!ͫK͹&&h,ON>/:w/2wͯ4p=X>XYX>XYr&> To:G!(  (OT`G(_\(Oe>W(y x KAYPRO Terminal Emulator This program allows your KAYPRO computer to imitate a "dumb" terminal. What you type at the keyboard is sent through the RS-232 connector to the modem (or other peripheral) and data from the modem is put on this video display. Technically, this program looks like a Lear-Siegler ADM-3A terminal and is set for full-duplex, no parity check and 8 bits/char $F$ 6"#6!~ XXY# r&j'[&L6 XtY&[&b,DATAP ,>,22 XXYH)͈)&L*&ʃ (*҃ ͨ(&ä !,ͺRESy MY*)ä MY!)x³ ͯ4x?  ͯ4|?  ͯ4?  ͯ4?  ͯ4? Sͯ4?:y *`Sb &!-w# LRMY!%YtYͯ4s?DATA[&R>2l(*d 5MYMY"/)MYH)͈)MYMY*& 5>*&!ͺRESxSMY*)MY*&=l:*6SMYMYMYMYMYMY"/)MYMYH)͈)MYMYMYMYMYMY")MYMYMY")MYMYB!4ڇS*mw#"mH|HS*d9I#+#:##~7(#F#^*o*m~7#~^#"m:y͹&:s:sX>XYXXYXXY&(*S&!ͺRڿMY!)L*&(*ESͨ(MY&*`S>2l 5>2Q85&b,=S>2l 5ͯ4P>*&L*& (*v>2ͨ(x2l͝R*&b,=S:leͯ4C?yMY>XXYͯ4=ͯ4C?ͯ4>b,= !,ͺR ySx2l͝R:lyMY>XXYyMY*)MY!)ͯ4=:Yr&yMY*)MY!)lS:lͯ4>Q ͯ4>Q-ͯ4>Q:ͯ4>QGͯ4>QHSͯ4>MY/)**͈):l2l""""MY%Y!N)**X!N)ê*&>2ͯ4C?MY:YfS 5:Y  5mMY/)**͈)H):l!>*!>*!>* !>*HS!>GX~#XY,""X!N)MY!/)͈)MY>XXYͯ4=:l:>2H)**͈)ͯ&r&MY!%Y""!N)2¶ͯ4y=ͯ4=ͯ4=ͯ4=HSͯ4=:MY!)ͯ4+?&*&!ͺRES>āS*&b,=S*&h,VAR҆!ͺRES>ʛMY!)ygMY")MYMY>MYMY*)ͯ4=h,ARRAYҥ!]RESMY*)Vh,SPECҼ!]RESOh,FILEb,#`S*&ͬ)}!*e~cS#^#V!#S!&Ûh,FCBԄSb,#`S*&ͬ)}!*e~cS#^#VO:KS>2!,"m2w# E!,*&:YSb,,Nb,=}"*tNr&j'N*&%*oR,ʻ7&ڌb,:*&ͬ)"|'S:_!,"mSRxPSMY!*o###"o+)MY"7")MYMY")>2l 5*,MYMY; 5MY>MYMYͯ4?:WS>22&:RmSmDZS&Á:22:2b,R>2l 5:RʬMY!MYMYMYͯ4o?MY*oYڿ.1*o"o{XYzXYMY>MYMY!!5):MYXXYͯ4i?:< ]S!*e+r+s+:wMYͯ4=X:XYX:XYX:A>A>XY/Y{XYzXY:Ro!=6#4!=6#4Á!=6#4!=6#4:<2:y *Q"*`Sr&j'Q*&b,#`S>2l 5R"**`SMYͯ4=?>2l 5R*>2l 5ͯ4C?ͯ4=?MY]MY>MY 4>:/2ͯ4=?:l2b 5::b2l5ͯ4>@ͯ4>Kͯ4$>Vͯ4->aͯ41>*&MY>Xb,ON>z>XYMY2!>4*&MY>Xb,ON>ڟ>XYMY2!>4!!&ͬ)}~>24:!>MY>XXYͯ4>>2![&>2!b,USING2 ,>2l 5>2!MY>XXYͯ4>/!2l[&:YN N ,&! 5!:ld ͯ4i> q ͯ4m> ~ ͯ4q> ‹ ͯ4u> ˜ ͯ4x>ò S:ʭ ͯ4> ͯ4}>:! ͯ4> :! ͯ4>* >2!:!5 ͯ4>5 "* >2!5 : !oS͹&H)**͈)&:Y2&&:YrS2l 5&MY"T"R%Y!RN)2lH)*͈)* 5>2:YuS&MY/)**͈)[&œ,r&j'""""MY%Y!N)X!N)2l 5>2:YxS:lͯ4>0ͯ4>0 ͯ4>0ͯ4>0&ͯ4>0HSͯ4>MY/)**͈)&͢:Yʃ:y c[&:Yʀr&j'[&:Yʀ>2&2',MY/)**͈)&͢[&LҽX>XY%YtY&""X!N):KS>2>2*&:Y>2*&)XXYXXYX{=XYS:KS>2!,"m2w# B!,*&:YSb,,Kb,=z"*qKr&j'K*&%*qR,ʸ7&ډb,:Ҿ*&ͬ)"|'S:_þ!,"mSRxPS*q"qxX{>XYXXYS>2!,"m22w# -!,*&:YSb,,6b,=e"*\6r&j'6*&%Rxux2l&b,:Ң*&ͬ)"|'S:_&:2!,"mSRx¾PS*o"oxX{>XYXXYSXMY!!5)ͯ4i?ͯ4C?ͯ4=*&b,#`S>2l 5Rͯ4=*&b,ONPb,OFFHS>!>MY>XXYͯ4=>v[&b,#b >24*&b,#`S5$21Sʕ:y "*`S&;&"*ҵr&j'Û*`SÛL*[&(*,ͨ(!,ͺRSyMY*MY!)xMY>XXY:1R:4 ͯ4=ͯ4=+ͯ4=ͯ4=MYMY MYMYMY>2l 5ͯ4=>2l 5:YfS 5ͯ4=>2l 5ͯ4=>2l 5ͯ4=ɯ2l 5HS:Y$iS**͈)r&j'[&ʪ:Y ""X!N):lMY>XXYͯ4>:lMY>XXYͯ4> 5b,:%>2*&%Rx2`{2a&R:`x:Rh,:x*&ͬ)|3S}2a&Rxh,:h>2l 5&xMY!MYPMYMY:YS&R(*S>:>2l>2Q8!, ~#¨:`MYMYMY5HS!<:*!, w #HS&Rͬ)<&R*:*6S2bO:`G:aRN_:I{MYXXYMY!!5)MY>MYͯ4i?&x:`:MY*&!ͺRESy{Sx*&b,AT~S>2l 5´MY*)MY~MYMY")MYwMYMY")*&!]RESy{Sx*&b,AT~S>2l 5MYMY") _:Y!:y 9S>2!&!: :Y :!̀![&@!b!̀!,b,#b!,5$SY!"*`S:y {!:MYXXYMYͯ41?̀!:!ʞ!>2!MY>XXYͯ4>ͯ47?ͯ4?!!!>2.$24x2/$y20$:MYXXYMYͯ41?21$22$23$:.$]#&]#b,#^"b,"j"͊(23$L*#ͯ47?ͯ4\>:3$G!,xD"~XXY#-"XXYX:1$XY:2$!!5$"*`ST">24$L*[&(*ҍ"*&>24$2ͨ(Ù"!,ͺRS#:2$"/22$:/$ʹ"ͯ47?ͯ4c>:1$"xq#ʯ#ͯ47?MYyͯ4>:4$"ͯ4C? #y#MY*k,INITIALIZE>-k,INT>k,INSTR>k,INP>k,IMP>دɯɯk,LOCATE>&k,LOCATION>4k,LET>6k,LPRINTER>7k,LOG>k,LOG10>k,LEFT$>k,LEFT>k,LEN>دk,MID$>k,MID>دk,NEXT>k,NUM$>k,NOT>دk,OF>$k,OPEN>)k,ON>3k,OUT>=k,OR>دk,PRINT>k,PROCEDURE>!k,POKE>>k,POS>k,PEEK>دɯk,REM>k,REMARK>k,RETURN>k,RET>k,REPEAT>k,READ>+k,RENAME>/k,RESTOd 'ͯ4>'ͯ4>Sͯ4>:|!}0'> ͽX!x~> ͽX4<6'~#U'dG'> d> d> d> d:'w'/2'*t|0ͽX|0ͽX}0ͽX}0ͽX:>:´'>*ͽX:v0ͽX:v0ͽX> ͽXMY*MYMYMYMY!5)!"XXY>2N?2S?2X?2^?:W(/2W:X ( c +( '> RͽX!x4 B(2X(:X( Q(͘&j'> 2X(XXY*o#ʅ(=XXY#l("o! ("wy #y SÑ(")!,]RS>2l( 5=ù(>2Q8>2l5MY!)ͯ4%?:(ͯ4=?*)Y:W-/2W:X- c S͋,%--0-:-2X>2W/~Q-̀-2Y~ 2y z-e-ͽX!x4~`u- [u- w#;- 'e-~A-[-Ao&)-^#VM...v// 0000I1K1M1112L222L3364F4q4444k,$LINES>1k,$PAGE>2k,$TRACE>?k,$LOADPT>@k,$INCLUDE>Ak,$LIST>Bk,$CONSTANT>Ck,ABS>k,ATN>k,ASC>k,ASCII>k,AND>دk,BEGIN>k,BASE>%k,BASED>'دk,COM>k,COMMON>k,COMMENT>k,CASE>#k,CLOSE>*) #MY!)x#ͯ4?!)#ͯ4 ?!6#ͯ4 ?!C#ͯ4?!P#ͯ4?!Sͯ4?!:0$ͯ47?MYyͯ4?ͯ47?ͯ4 ?:4$ʑ#ͯ4C?MYw!y¥#MY*)MYw!MY2)!ͯ47?MYyͯ4>:4$#ͯ4C?ͯ4I?!y#MY*)ͯ4I?!MY!)ͯ4I?!&#$b,;>21$b,,$>21$:Y2.$>21$>2l 5ͯ41?:y >S*>S 5:yMY>XXYMY:4MY>XXYͯ4=>R>2r&ͯ&**o=%:>22b%"ͯ&r&j',ʯ$7&ڸ$:Y ²$͹&*&ͬ)}MYXXY*&*`S (2<%ͯ&ͯ4\> (G:< RE>9k,RECORD.SEQUENTIAL>Gk,RND>k,RIGHT>k,RIGHT$>دk,SUB>k,STOP>k,STEP> k,SGN>k,SIN>k,SQR>k,STRING$>k,STRING>k,SPC>k,SPACE$>k,STR$>k,SIZE>دk,TO>k,THEN>k,TEXT>k,TO>k,TAN>k,TAB>دk,UNTIL>دk,VAR>k,VARIABLE>k,VAL>دk,WHILE>k,WRITE>,دk,XLATE>k,XOR>دɯɯ"4"4^#V#6#4*4*44X>XY%Y~#4XY4XY6#%Y~#y9Y/Y/Y*){XYzXY5)%YK)%YXY|}XYu)X!XY~XY# V)~u)XXY:XY:ʀ)XYXY>|)!~0k,CHAIN>5k,CALL>:k,COS>k,CHR$>k,CHR>k,CONSOLE>Dk,CONTROL.C.TRAP>Fدk,DIM>k,DIMENSION>k,DO>k,DELETE>.k,DATA>8دk,END> k,ELSE>k,EXECUTE>;k,ECHO>Ek,EXP>k,EQV>دk,FOR>k,FUNCTION>"k,FILES>(k,FIX>k,FFIX>k,FINT>k,FCB>k,FCB$>k,FRE>دk,GOTO>k,GOSUB>k,GO>دk,HEX$>دk,INPUT> k,INPUT1> k,INPUT2> k,INPUT3>k,IF>%%xXXY$͹&XXY&>3%"*>3%*>`SXXY*j+*h+*f+*d+*b+*`+*j"%"%*j*`+%!`>%*j*b+%!b>%*j*d+%!d>%*j*f+%!f>%*j*h+%!h>%#6*%"j6*%^#V r+s##=%}/o|/g# |&~z &{&#&,7&&,I&&,R7&*&b, b, b, h, h, h, ,g&7&[&>2: :&&/2&:,:y ʕ&,&,*t2x2y}<'o|'g"t:v<'2v:v='2v:y &[&,r&j':l&ͯ4>&ͯ4>&ͯ4>E~)+#~+#F#N#^#V#x͝Ry:+<2++MY!)xE+ͯ4>W+MY>XXYͯ4=:+=2+)+ͯ4C?MY:ʕ+:*{+&b,=S&%ES!+^#p*+*+b!k,!,,~|,#m,/7#~#,/!,ʢ,#~ʞ,Ï,7;:[]<>{},()"=#-+/*%~^ '\  ,,,k,\,r&j',:,/2: bk2 +5XY4XY>2Q82>2 @!~7:7"525*5~a5|756y6 76 57S#~#"5Ҝ55!:l=*! *!R8~ʐS6#4ù5! *;ʱ5$Œ5>2Ì5:5BS<25#~ 725! ==*|;Ì5#~#"52l25#"5:5BS:l6ͯ45>6ͯ4:>6ͯ4?>$6ͯ4H>/6ͯ4L>>2l25#~#S6K6ͯ4=25ͯ4=25MYX~#XY~#"5XY*MY!)#^#V#!,w#‚6MY%YzY:5BS<25#~#"5 7*5~ 25#~25:l25ͯ4>25#^#V#~27#F#N###"5y6MY!)ͯ4e?:7G:5BS25![2B7B(*S!*K_:lW:CGN#ͷBy_E~#*B6#w#6"B2l>2C2@:* \E/E-S0S~*BOzjEy6#wW#6#s#6"Bx2C>2BBSz2l!E#O~y’E/0123456789.,'MY/):¿E͛)e)!w ("Ew#6E S!@! ~#EXyXY*͛)e)G !áCMY/)e)!@ëFMY/)e)!@:'hF:lFFFʨFhF*SF:'†F (o*&:'HS&ÎFͬ)|3S" H* HG!áCͬ)" H* HG!áC=G*HG!áC H*"HG!áC!"H)H*LTSLSGSEQSNEQSSUSADSDISMUSTDSPCSABSNESEXIIMIEQIXOIOIANINOABATCOEXFIINLOLOG1PRNSGSISQTAFFIFINASCICHRFRCVTFSIZCVT$CVT$STRINLEFRIGHMILEINSTSPACENUMVAXLATHEXIMPOTABB~SBB@>ͷB2@*B~1AB2@BA:C:Q8SD2@:B:YdA_A֖SÿAֿÿA:B˜Ab,NOT>ڿAb,%>ڿAb,+>ڿAb,->ڿA$SB!SʿAʿAʿAʿA ʿAʿAA2B2BG26BxG'BBA"A>A> A> A>7x!B :x<BG#B7<>=#-+/*~%+-^,7&'B>26B:6BKB26B2B: 2B,7&NB7777G*B~ҔBҙBҞBңBҨBҭBҲBx7x?x?x?x?x?x?x?*B#w"B@*B~+"B@*B6#w#6"BL*'B(*ҎC7B!,]R]8:5BSG:l%7x<7ͯ4>x<7:l<7ͯ4>O7:lO7ͯ4 >x!=e7=*=6#4:l==!*E=6#4#~#F#N#^#V#"5x-8y8x77x´7ͯ4=77ͯ4=7Sͯ4=)!8MY*)x7y7MY&MYMY!8MY>XXYMY*)ͯ4=x 7!5425yC8MY!)MY!8MY*)MY!8DGTDLTDLDGDEQDNEQDSUDADDDIDMUDTDDPCDABDNEDEPRGTRLTRLRGRE "HG!áCy-GXXY GH)͈)͛)> 2H>2H!Hw#MG!~ʈG0sGʌG*S*&!VG *SͼG!Hw#VGͼGͼG#~ʰG0*S *SG!HwÑG:HGðG!H~w#G ¾G!H53S:H!H~w#G G:Hg2H!H53S!"H)H:(HW:%H2%H" J3H*S!~+DH-DH+>+2J#"J>+2J~#ʓHESH&:,+pH-pH>+2JyH&!,~ʖH{_~I_#~H+6E:J+{ʡH/<2'J0Ix//2J!J9K:J+H:J2J:'JI!8JH/<2'J!*J"(J>͉K:'J= I2'J*(J>͉K?JPEERGHTFCBRSRBNRCIRCIRSRURRDRRDBRDRDRDRDLONERFORRFORRFORBFORFORCHAIFOPFCLOSREASWRITRREARWRITRSEASCIFDERENAFCREAMPUSMPOXPOXZPHRPHRPHBSPOSPUSCBNCWCSCLRCLRCLBCLCLCLCRDCRSCBNCICWCSSETMIPSTSTRPMPRMPPRPRPBPPCHPSAPSFMPNUPTATABSCLEADUBSTRPUCMPRCMPRCMPBCMPCMPSTTSTRTSTRTSTBTSTTSTTSTSTECHFCNTLIBU_:l:Q8>2Q8*B6#>w2l#6"BͷB{2@=@C*(C:*-SRBS:*0S*B6#2Q8kC"Cx*C2lw#6"B*B6#s#r#w#p#q#C!,ͺRyFx͝R*B:l¸C6#|2lw#6#q#p#q#s#r#"B6"DW2BzC(*S:lW:CGO2DͷB>2D*D*|AD}AD>2D*}/_|/W*o"D|AD*B6 #6#s#r#6"ByʐD*B6#w#6"B2l>2C*D:D:D2@2D2D"D:* ʍDID-S0S2D*BOzŸDy6#wO#6#s#r#:Dw#6#6"Bx2C>2BBSy2l:D2@*D|2@*B6 #:Dw#s#r#6"B2@\QRNEQRSURADRDIRMURTDRPCRABRNEREPBGTBLTBLBGBEQBNEQBSUBADBDIBMUBTDBPCBABBNEBEXIGTILTILIGIEQINEQISUIADIDIIMUITDIPCIABINEIEXWGTWLTWLWGWEQWNEQISUIADIDIIMUWTDWPCWABWNEIEXSGTSRETIRIRIBIIICHIIIWRARRABASESAVIGETISAVHGETHSMOERRERRSYSISYSOUMAREDIMPDSEDRDRDBDINDCHADSEXCYͫ???XCY!R8 ~?#X~XY#? ñ?!=ñ?!p=~@X#~XY?#?#@#?*j#6"B!6#:lw#6"B2B2B26B>2C7B@:YG@@à@*@"*@b,:@:'/F͋,ڌ@:͏E/FB҄@!,[QCS>2B2@(*A:*Ab,"ڭE*B~@DA>AYBҼ@ͷB2@BBà@@>2x@2l*B6 #6"BDA>AͷB2@* H!1J>͉K!J>͉K?J* J>ͫK* J^K* J~w2JG!J>6#=2JCI!JJ~#gI!JJI!JJI!JJI!JJII2J!J>6+= I!JJI:JʸI CI:JI*J!'JEI.I4I:JJ!JJIɯw+I0J >7ѯ7"J!J>ͫK!J>ͫK!J~_w!J~Ww"J:J2J!Jw#sJ0ÅJʠJJJ~J!JJ w+ ”J~J:JG:J2J K!J^K*J!J.K!J>͉K!!J ~w+ J!J͜Y͜YX͜Y͘YX͘Y͜YX͘Y͘YY͜Y͜YY͜Y͘YY͘Y͜YY͘Y͘YX~#XY͞Y:sY<mY2sYXY2sY!}Y!,~#~ʐYXY}YXY7ÞY7?:Z:[<ʴY2[2Zɯ2Z2[,c<2e:\Y:e Y:e2?aY@2?a>B2e:f ZZZ@2|Z>2zZ:e2|>A2f:g HZZ@ZXHZYPZ@2>a8Z:e2>a>S2gXZ>2{8Z>2|8Z>2}8Z!]~~#`Z!]Aa~#pZa:z‹ZiaaÞZ>2,cÞZ>2,c!d"-c!|:}·Z:{Z>2bZ>2bZ!d"bZ!d"bb͟a!Z~[#ͽXZ ****** End of pP:P:>O:P<2P=:PO(P ;P:MO:P/ERROR GOTO/GOSUB w+>gK~b*[OQc͏b:z:~Q[iCYCY>,c*:`}W[)|p[O2d[b:|2\:e=2eG'Compilation complete G'Compilation aborted ͉!"e):g:[MYɯ2!"\!e ~#^#V#!&R\!#S\!>g\[ͣ\:P1\=2P*\^#V#"\>g\\MY͛)e)ͣ\:!V#~zX/YXY#~#XY=D\ɷʓ\*oMY!)MY")*o#"oXXY*\s#r#"\!4*\6#6#"\!4P$Aw #Qp#:w#s#r#6 *j "j*j "jKQ wzFQ{FQ+ 6Q!9%DM*j|ҍS"Q*^"QʚQ}QʠQ#oQ}QʍQ=ˆQ"QgQ7*Q2Q<2Qo&#^#V++"Q!Q45QüQ:Q*Q*Q*Qx"WR*`"YRRQ!R#QQR= R"YRQ7*WR2UR2VRo&#^#V++"[R!VR45FR!>!>!>!>!sul One FILES statement allowe Must be random (R) or serial (S Over max coun A "," or ";" or "#" was expecte File not defined in files statemen TO expecte OF expecte ":" expected for CASE statemen No matching FO UNTIL expecte Must end with D Missing THEN of IF-THE Not based location typ AT expecte Wrong typ Location statement erro Sorry 255 max All DATA statements must be togethe ### OUT OF MEMORY ## Illegal function cal:XXb͜Y͘Y͘Y͜Y͜Y͘Y͜Y͘Y͘Y͘Y͜Y͘Y͘Y͘YX^!",2MM0M#MM)M=$MM7",!#9M:+<_###'Q*` "`*b "b*d "d*f "f*h "h*M "M!",~#ƒM!+~G#ʝM~ÒM*}|*M"PN*`!",MMM#öMMM=MóM7",!#M:+_###'Q*b "b*d "d*f "f*h "h*PN "PN!",~#*N!+~G#CN~8N*}|*PN"P,*bʩNsNʃN#`NsN _N:SHSS žN*P,!#±N'Q*d"d*f"f*h"h!,~#N2P|2P}2P(P}|">!>!>!> !> !> !> !> !>!>!>!>!>!>!>!>!>!>!>!>!>!>!>!>!>!>!> !>!!>"!>#!>$!>%!>&!>'!>(!>)!>*!>+!>,!>-!>.!>/!>0!>1!>2!>3!>4!>5!>6!W>2~:y >22̕&ʻS>$ͽXr&>$ͽX½S!TS#~SS#~ͽX~SSS*\> ͽX> ͽX Not valid label numbe GO is reserved word / TO or SUB expecte End of line unexpecte TYPE does not exis No vars give Error code 0 Missing = sign, = sign expecte Missing left bracke No names give Line too lon Un-defined operan ERROR CODE 1 Name D<"<;; !zw#+ͬڌڞ:k>2̓UN-DEFINED LINE NUMBER(S)!z~#|n> > ^#V*D} | ^#V{ z :!y#òï#7!z"~#B#6 *"#># 7ɯ###);;_W*F} | ;;_W*B} | *>p">*]* |z*_*r |zj &:o:_" *<*B*>*~ >#=#F#Nx> r+s##"a=_@a¥cG'ERROR IN EXTENDING PRN FILEcG'END OF DISK DATA FOR PRN FILEG'OUT OF DIR SPACE FOR PRN FILE\:?a=_\d>2\G'DISK READ ERROR:]Kd! 5d:|=_}†dG'ERROR IN EXTENDING OBJ FILE¯dG'END OF DISK DATA FOR OBJ FILEG'NO DIR SPACE FOR OBJ FILE__:eLe!le!yele!]_ yCopyright (C) 1979, By Topaz programming. All rights reserved. From here on protected by End User License.  B;<A}~#ʑÃ> > > > !ʻҵ)ì*>#">*<#"<*@#"@:x=##^#Vɯ2::y   > #= * +" |">*<*B"D*>"F> *Dt !t *]t *_t *F*@t t !t !t !t !x4>2w:2 *~ > #=• ! 5 :2 ~ > #=± ! 5© !j#~##š * := : Ú #~##¶ *: ö 2q "o *o #:q 6 =2q e #$ ~#~̓XREFF LIB TO LIB ERROR*o ~#U #e ## u} | !x4>2w!p~ #‘ !x4>2w#rͪ\° ; \ ̓I'M LOST.. . .ͪ! ͦͪ+| ͪͪø ͪ ͪ y>~ee#=e!ele:e&e0ee:e0ee:e<'2e> ee> ee> ee>2eee :e<92eد2e> _~ee#~me Program: Page: P[REAL.DOUBLEREALFLOAT.DOUBLEFLOATFIXEDINTEGERCHARSTRINGPBYTE/r2y:w< 2wɯ2w1@2~2}2\!e>$w#w#w:e22!]~#I4̓͆I>2w*a"B!;"6!wڐڥں&1HOSZ^djpsz~=  ()1>E^ery ; HHOOSSd  *w#*>s#r#"6#"6_W*@"@og|+ _W*  PRN :|=_}ʃa2!":`G'CANNOT CREAT OBJ FILE:>a=_@aa2`a!"a=_@a2`a!"a=_@aG'ERROR IN CLOSING PRN FILE:>a=_@a:?a=_\*w*~ G͂":p_͂"͂s:qҕ{=! ͦ*6"ygxͪGszxͪ2pxG ͪͪ y•ʦGszʦ2pxG *l6#ͪw#¸ͪ2oͪw#ͪw#"l"6#6*l6#w#2dow#w#"l6#6!c6 #!c4w#&w*c#>UX#G7#X##:E !.MAIN.\.PROG..DATA..BLNK.FORRD $\FORRS FORBN FORI mFORW -\REPX 1LOG DEPX CSW M\CWS SRD RDS RSRD .\RDRS .CBNI cBNRD 7RDBN \RDW CIRD QRDI NFINT 7U\FFIX &SADD bIEXP :EXP \RND fINT 6FIX hSGN C\ABS !$SQR "xATN # TAN $-v\COS %SIN &IMP ' FRE (^ \POS )$SETMID*RFCB$ +!TAB$ ,\HEX$ -EPEEK .ASCII /CHR$ 0 Y\STRING1$LEFT 2'RGHT$ 3YRIGHT 4>!; >ͳ!>c; C!>3!z; y=´ >!V; >! >ʹ ; C!>2Ͳ!>C; C!>!!>!; >! >!>͢; !>d!>0;# C!> >2! >;8 fͳͱD:=-!>ͼ;K ͳȱ*|@p;] !>`ͳ͒;n ȱ*!zLOG <= ; 0 OR A^X A<=; ; <цxAr; Rr, TSTRD TSTBN 'TSTI \TSTSTR%TSTW $PBN BDIV i\BMUT &BSUB BADD  DRD \DRS DBN DINT DCHAR \DST iDNUM SDSET IRS 2\RADD RSUB +RMUT KRDIV d|\RSNORMmIRD /DADD DSUB 3p\DMUT `DDIV yRDNORMlREDIM I<\BASET 0MAT ARRAY IBN -;\PCHR APST 1PST 9PI \\CI lCBN uICHR +IIN \IS ERR20 dMPY ]COVDECrp\GETVALIBUF STRPMT"PSTR 2\PRMPT OX;b!*>@!>D;ufͦC*>!;d͊PʐPh;X;D"G"ZD"k"iH"!"%;I"K"W*k*"*i/;+:l]2͋J@*!*;?i*k!**ka;U"!d͋:ʐ:J;i;D"""~wy%{o;!~w!~;*@; $"!>2! >; B:#2#B:2,2;* C!>3";< C!>!!>B;O dͲ! >3 0ͳ;` C!$>!!$>PD\MID 5?XLATE 6kINSTR 7iSPACE$8\LEN 9)VAL :KNUM$ ;BGTE <B\BLTE =BLT >BGT ?BEQU @k\BNEQU ABABS BBNEG C PNUM D\P$ EEXC FCHAIN GSIZE H\RENAM IXFCREATJFDEL K=FOPN L6\FCLOS MRSET NRREAD OGRWRITEP\SWRITEQ^SREAD RSETFCBSIIMP Tl\IEQV U IXOR V IOR W IAND X \INOT Y IGTE ZILTE [ILT \\IGT ]IEQU ^INEQU _IABS `\ISUB a IADD b IMUT cIDIV d)l\INEG e WGTE f WLTE gWLT h \ wX^; R]@; $"!>2! >; B:2B: 22 -;* C!>30=;; C!>!!>!;N >͸!>:';a $p!">2ô@!>;u d! >2)`͹!; >C!> !">; 3ͷ!!>!; >&":@!>o; f$"! >0; I*b͹: !>; 2!">! >h; dͺ*;  ;# "NERR FMT tSTRCLR\MPOP MPUSH 7ERR1 (LN p\ERR2 SAVHL GETHL SAVIO \GETIO TAB TAB1 RETN \IWRD 8DUBL =SCLEAN6STRPUT 9\SPUSH SPOP |SMOV %SCHNL17\SCHNL2FCNTLCECHO BASOUT\ASCIO iZP XP !PHRS <\PHRD PHBN ZPOP XPOP +\SYSIN SYSOUTf;D"f"!>@!> ;b">! >/;(dͷ*>2!> ;;C*>!:0͇;NHi*!>@!>G!(;s >!$ >!->"; ͱ!$>@!(>; f2B*|@!->; b*|g}o" !; >dͳ*| !'; >C! >0ͳ5; C! >&îͳ@:, ; !>!->`!l; >dʹ*";  A; $"!>0!H":V; $t:Ht!>`!;) >d͈[*#"E;= C!>!!>ʹn;P C!>$ *| ž!;d >C!>0͈;v HҞ*+"!WGT iWEQU j WNEQU kWABS l #\WNEG mDGTE nDLTE oDLT p\DGT qDEQU rDNEQU sDABS tA\DNEG u RGTE vRLTE wRLT x9\RGT yREQU zRNEQU {RABS |\RNEG } SGTE ~SLTE SLT \SGT SEQU SNEQU PRS Q\PRD qCMPSTR^CMPRD cCMPRS c\CMPEX CMPBN ICMPI CLS s\RSTR CLBN RBN #CLRD \RRD %CLRS RRS RI .\CLW RW CRSL CRDL \CBNL CIL CWL CSL \TSTRSQ;b`!C*> !>>;u3͸!*>!n;2͇QHQi4; V;D"f"!>@!>;b">! >7;(dͱ*>2!>;;C*>!:0͈;NHi*!>@!>;b`!C*> !>C;u3Ͳ!*>!y;2͈QHQi2;\;D"e"!>@!>;b">! >2;(dͧ*>2!>;;C*>":`͊;Nh*! >!> "d!p>!;7 $"h"f!"j!>v;L C!p>2͇@*f#";_ f!p>!>`;r Ⱥ!p>dD*f|; !p>!>``; ɇ*f+"f!p>V; C!>2͹!p>K; HÇ!p>d!>0@; d͇*h#"h!p >; C! >2͹!p>; H!p>d!>0; d͸!~>2!~>O; C!~>!!p>!;3 >!!"n>2l !p>L;G 2!~>! >+;[ d͹!~>2*n";n nUfͱ!_> ;5;$"P!_>2:bH2g:_;!S3 !_4#~w;*I%:_$!b:gG~";?w!_͵!!_>!;R!!c>*P;fx; 3"!!! >:!!; /:!#@>!>H2B!?;& >*!!;>`*;8 !2;!$"! >2:#2#g;!C! >!+;"!"h>2w!!k>!k;">!o >ȴ!s#;'">!k >!s>;:"ʹ!s>`ͱ!9;K"o>dʹ!w5Hg!s4<; D:>= 2>*<#"< ]!;! ?>@*,h;5  ;J   ;_ ""!>!;t >*|g}oH"Ҝo; C!>2͹*|ʺ; C!>!!>͹; C!>$y*; ; &"!6&`:ox; !; >;&" :`!^;&" `;![;$"$!'>2:*W2* ; z2-!' >!;);$"$!'>2:-W:*;;4&.wG# ;xR;H Ny22.; [`2!;z5!z8zW#;{_'`z@8q;)`iDM!;$"d!o>2!o>;C!s>!!o>!;'>ͱK>2"d;;C!s>!!o>!g;N>! >!w>͊;a!>d!>0;sC!g>!!k>!w;@{~#‹!w>;C!>2ͳ!w>;C!o>!!s>ͳ;C!o>!!g>!ok;>!>C!~>0͹; dͷ:l=I2lK!p >; $2l:l=I$2l!p >n; C!w>!!~>!O; >͹!~>!~; >! >*j|; +#e"jͺ; d͹!p>3ͷ !p>; 2!p>!w >~; d͇™!p>@*f|;1 FFC!>0͹Q;C dͷ*h|#` !>/;V 3͹2͸*d;h  r;}  C; ; I$I  ;_">,!;s"e;#$"!>2: 2:;#2!>@!>;(#f͈H]!>`! ;:#>dʹ!>0;L#C!>&cͲHc2;`#D"!>@!>b;t#d! >2!>;#C!>!!>!;#>>H2!>`;#ȳ!>fͳ`ͱ:;#=¡! >!a;#:!!>:-;#2!>!u;#;#":u;$$"&!)>2!& 2*!' >!k;);$"O!]>0!@:`t;R:`R:_;) R:_ R:^;>R:bNe!;RDM)) )O L;&"->2G!g ;w#L!0"ȶ!0;'>!;!"}>2ͅ!>;~% !#@x~;'f2,f!,:w!;8'>1:6| K/@;J$<2!>2: =n2;^!>ͥØV:6;q3:6!o;d;&"`D >!w> ;ʹ̳ͱ!g>;!g>d!k>0r; d͈[!w{ -#;:$=[2!g>͕;3!k>d!>0;EC!>2ͱ!>2;XHÃ!g>`!;l _; R;&"W͝HN!Z>`!;b>dͳ!^>0A;%dʹ!b>2!b>o;8C!b>3Ͳ !b>P;J2!b>!e; ]PT;3"P!_ >:b6;f !_>!2 >!;$; 88.; ؝I$I}; F; ; ]ݪrs;% >2>",![>!.;: >!$"<!T>0';M C!M>!!?>!?O;` >!F >!.5;s ~#u!.>*<:; 3͹!!.>!MR; >!T >ȹ!M; >![ >!.>͙; ͺ!M>`͹!; ?>dͷ!?>0; C!?>!!F>͇; I !.5#`|ʀ!;!;!"F|2Pe)};lg"N!I>6#=>/!Ie;*2wͻ:P$=:O 2O!;>I>!k;$">!G>2*H}lg:G; !B=A 5Gu;*|g}ox!5;3"! >:%; ! >2!1>;#fͧ! > Q;4;$"! >1! w#>\;w+>!h;&"_f2!` ;2!!;"f!`!~ 8# M)>;$d&!)>3%0ʹ;; %$!;%3"&~!& >̱&;&$"~!>2: 2;&2!>! >D;)&d͈M!>@!>I;<&fͲC!> !;N&>C!>0͈;`&Hҥ!>d!>0;s&d͈ڗ!>@!>;&fͲC!> å!;&>I!Ä:l;&B:2D:22';&C!>!!>ͳ ;&C!>!!>!;&>ͳ!>!b;&>! >!>͞;"+~#w+0!;jD1͋` >12͘B!];}DI"@*+"~ *#";^DHF**͋> $ :;rDʸ**+ȋҖ;D>* *$#"{**;D2͋Ҹ@:>$̐ :";D>*q;#2;3&"T` &"W2;3f!f!!(;$3#~${b2*W`:;73H>2Wo`e:W;K3@:W!!;4"";">f2`!͌;4!!>:N ;#40! ړ@2> :>T;64!!5;5""8"=&";`2!I;5!!:;r;$5O :=d:=!!;85;6&"df2!`;62!!;"6f!32! "g";36i*i~ʈ^#"iO0!;G6 ~5B*g[$B;DHm:„m>2͐**;D##"Ç**|;D*m:m>H2*;DB*##"$‡> 2;D2*Ç,%*|;DB*|m>22@Ç-;;'DHI*|B:>2HÇ:];=D!>2!+w *|\;RD!c>2 >+2Ç :;gDB>2>+2^¬i;|DD**|m*#~^Y;D*É>2~-@‡>;DH2Ç.H¿:ˆ/2;DBÇ#‡B::2;DHÇ*#"o!"";D ~ *!- *>X;D 2~.ʄ#F &!>d!>0;&C!>3ͳͲ !>3;1&3ͳ2Ͳ!>;C&fͳͲC!>0ͳY;T&dͲ!>3ͳ !>;f&2:!w@!>:;z&`!o;&]3;&|%;'{2_N;(}!9* |/g}/oF;(# |! <?;*(^#V"`i ;>(O! N# I\; S(+|F;)x!ZCe !{T;) y!{ NI;*&"Kf2!`;  :g:*2;D#*͋!> *#;DI":g:g:/;D:>$- : :;D !"":ʁ@**;DaH"*|H?*C;-D~#" D*+"Ð%*;BD|ʛ*1!͋>,;UD *>~ # =\";jD*a"*:;~DH?*|Dʛ+"*~#"8;D Á@:>.̐ *;D|*|*~#"';DH *+"*+" è*;D|+B">0 H:l;D*|C>E͐ :;D>+ >- *|;D1ew#"g`!4C;[6M5!;7&"ff2!`!;72!;"7f!K!:;47G:ʘa:Œ[v;H7T e#ʀH# ;]7 =!J;8#""}!6 #= M; 8l!;9&"&f2!`!;9!~# ;#9!;:&"=f2!`!;:!D"Ͷ!@;":H7:J g:G2G!D;7:>!8W;;!">2P̈́;;!;<3"A͊ # E#o;DH#*w#I"B*~;#D.*~ BHEH H*;8Dw#"͒J*(E¹;MD>+2*~-e @e+U;bDIk2*#~+~|>0*c;xD$+"2͉*~2:0o&;D! c:0o &b;D$":$-¹*`eL;DH"*6B*|@:;D*|**a ;DF*͋IR*\ *;De*a*͋l;DHR*eͦ͐*e;D#*͋$Ґ*"* ;0D#*"~w~:R;DD w!͋*;WD#**D"N"PF*P|€Jx<;&*J:OaJw#@;9*DJ J:N=2N0!B;N*;+&"!6S2;+> 2!;,&"!Z N{%; , O8!;-&":!z@=w#;-z=w#{̀=w#{ ;)-=w>f2!; ;-0:; .N*;/&"!6:_T;/!;0>A;1""""1"E:"0!Q;1 w#!;2""""%a!6:%;2f2!f! >AA ;=3"A͊ >AAA b;>3"A͊ >AA ;?3"A͊ >AA>@;?`A9;@3"A͊ >AA ;A&"͊>>!};A;B3"C! >: ;B`C1;C&"!>: 2y;C !>0!;D`:_!6>H22S;DI222$2222^;)DB2>02B2> 2!";?DI"""&"*o@"~R;SDHg:‰/2!ӐrN;gDHʀ~$\w*~H *;}DHQ*+"*#~͐1;DB*$!*| 0h" *! 0dW;%D}0 ! c@*-;9D`a}0H : :;MD>- H: "*;bD!* "*";vDF*a$"*@*;Da"*|#" *6;D0#"ÐH"**u;D" "*1a" *;DD*"**"*;D|*+~#w+"!>;Dȋ>0d2*#H"B;D@#.,-$*;D^+:O*;-D"#"*"#"* #"ɇ;BDD*#"D*#">% |;WD> *I"*"|>;lDBq:Ÿ:}Ÿ9;N!w#`3;N]:ʭ";N"_:ʿD*~#"~{o;N xs*5;Nw#"5 }耄;N]:"_:;N*~#"~{€!7;N@"5}$G:@8Ϳ;.N=’,ͅ+|;CND89 :~;XN_!_:ʐq*Z';mN #"Z{@ x&;NHK:8>*7};N`$9:ʭ;N!_:ʿ*Z #"Z{+;N$28!F&;N #"7>DHMSru;G>!$GO t͜;GO_O*t{€t<;$G>! Ow#=@,|;9G$FO+|=Ow#GG;OGy]! ~\;dGO@ ;yGPROGRAM CHAIN/E;GXECUTE ERROR$;HfK!@"2;H:@#=_2;'H! |A ;;Nb-~R- ";(Nw! |2@"3A;=ND""@"!$ 2;RN~#HU: @9;gN$:ʯI£ **6;|N6 #{|+6 +6 *3$/;N  w#—!6;NIʟ+rʹ+H;NIË >2 9;NË+BË:*;N *|}*KH!;Nd:I9=* "*L;N")>2>22H22;DI222 b;D ; D;Ed*o"~$:@·>;EL2!r"*~!L5:C;)E!/> !Ç/v *;>E#~/N"ʷ ?L"!;TE~h́# T Ç;iE> hÇ&˜:3;~E0O!>*~ !ʲ;E!/ʲ&ʲ#"G\@©F#;EB"x##"o:o;E0O!>!r"om;Ea:O;F0u}͸;F&}Ð?:3;)F }; շѯx|g}o;N>!) #=;N@)) #Ð!;Nd!2!];'NL!!3;:N \;ON G;dN 2;yN ;NR-TYPE REAE;NXTENDING FILEND OF ;NDISK DAT RANDOM RECO;NR R-TYPE FILE NOT OP;NE NO MORE DIR SPAC*q;NWRONG TYPE FIL;O1P=P*P 4;OP2!Pw#;#O&=!3*e;IfK!@G~# ;IfK!@7~#;&I` 7z;:I e; OI];JfK;J;KF;KD":"6!60S;&K`!>6#=+!;9K!m;L M>@~RʀSʧ;L&!(FILE OPE";)L!6"!6`ͬ;';&N"/2*IK7!0;:NH]*3$w#BDM*5;PN }2zW{_|;eNg}o\z1" "~";zNZ22\D:*;N|1}@1}O*3 ;N~@*3q*;N3! *3R;ND!9]!~w##;N$:!d:i2!\;N:*}2; N}2Y:] =_*M; N!"7!"5* !;5N}o":S ͅ¹;IN=‰Dͅ+|;^NHS:5Iͅa ;sNdÈ&2;?Ff2f!`!};OF0:O~Aa# T6x2;cF}}>E;wFf2GG$$$ SUB;F ;F;G0!6*%%L"S;GL* w#€~ ;(G@7=_*6 6;=G@* Q!0;QG@* 6*%{/_z/;fG W"!~_#Vʊ#N7;{G#F* r+so*"`;G$"W:@2f;bG *% w#z€*;G*%CHAIN/EXEC;GUTE OPEΪ F;G5;}L###6!S-TYPE FI;LLE NOT FOUN"L"!~;L6S:ʀ=_;L*`;L w# 6#6# ;L@*! ;L(6#>6#=6#6!;LR-TYPE FILE NOT;0L FOUN`;M }2M>ʀ~J;M!RʰS-&!")FILE;'M CLOS"%~~;QS-T;MYPE FILE CLOS >P0P,;4OaPkPw#=˜7P,;P"=ʪ!*~};P ~#k~}#=;,PH* w#4 ":;APO>~Rª ~;TP!$"@ ~#a ;iP=_!x~*;~PD͗*w"#"͗@*~#.;PD"*|"ʤ+" !;P!׀D;P READ/WRITE PAST EO;P+READ/WRITE SEQUENC;QF"+: O>@~`;Q S ~R>Ww";(Q@+~#-HI*+;>Q~͋~#@U=_!~*;SQ+~͋?;J7+;>2"82262<;C!?>":@ʠ@:E2;'72EC!?> >{;2͇\@!S>;OfͺD!647>0;aC!a>2͇ҁ@!S>f;tf͹D!65\:<šB;$/2<!h>3ͷ 7!;?>B!6~/< ; Ҵ^~w> 2>{2=!F;ą w#@+~0;مA:7> >-2:=;$1:==B26>2=> 2>;L!F:==2=~#-;  >.D:>X=@2>~;,#!$F:=/<6.#6;@0=>#`/ @~@T#; ;S_y{ʠ  >?w#ˆ;S/;TzW{_x/Wy/_;Ux/Wy/_; VzW{_`; WzW{__; XzW{_~; Yz/W{/_";Z3"_͋ >__ ;[3"_͋ >___ ;\3"_͋ >__ ;]3"_͋ >__>;]`_=;^3"_͋ >__ ;_&"͋>>!Y;8̃à ;3"͆ >ڃ ;3"͆ >ʃ><;`Ã;3"͆ >ʃ ;&"͆>>!A;~;>2P"022. 23!l;6>D:7ʘ:92/N;) 29!6 >>0X;2͈\@!@>;OfʹD!.47>0;aC!H>2͈ҁ@!@>;tfͳD!.5\:3šZ;$/23!L>3ͱ 7!;6>B!.~/<; Ҵ^~w>25{24!:;Ąw#@+~0;لA:/> >-2:4{#=U*;hQ+w#‰j͢!-0-;|QI*!"&*#$"(Ì@*&|z;QDs+"&*(w#"( :%!;Q::*¸/2**!;Q "@*#:-;Q =_;Q x!R;Q ;Q ;#Q S-FILE WRI;8QTWRITE ON UN-OPENEDD;MQ FIL,S TYPE FIL;RF"Z: O>@#~;R S# ~W#>Rw".;(R@0*~#-H^͞);>Rf2!͞w#=D;QRb!*Zd := G:>G#wN;V+~0ʄX.f#6:6m;k ʠ6E# +{/<-p#K;" ڈ 2p0O x2oQ;@ʜ0w#q#6!~·;60#6>2#~·i;3x2: :Ӏn>;Ѕ:O>3! *8;!?>!S>`k;ȹ!?>b2:@!?~.;H((=w@!E~w+ ;D::2:Ó!?ͻ ::c;20 ;Go;\Ѵ$5 `;&"3!6!6j;!~ʀKO;$D6_;`| /g}/o#;a}o|gɯ;b}o|g;c3"dd 0e;c`*d;d$"0"e!;d| |exŷe ;'d; e|/g}/o#;fy>k k X;gy>k k k I;hy>k k N;iy>k k >0k ;jy>k k \;ky>ƒ >͖;l{ /<_; m{/<_;n3"s͇ >ss ;o3"s͇ >sss k;p3"s͇ >ss ;q3"s͇ >ss>{;i;$1:4=B2.>24>25;L!::4=24~#L;  >.D:5X=@25~;,#!$::4/<6.#6;@0=>:4 G:5G#wN;V+~0ʄX.f#6:.v;k ʘ6E# +{/<-p#T;" ڈ:Oxʔ0w#q-;#6!~¯60#6>;d2ú#~¯x2:P;:n :O>;Єf!A*0!6 >;C!@>2ͳ!6>;$22!6~$  = w!9;; ~w+ ‘:222 ! ;!6͵:20;5 Cw=_!);eR~*Z̀w#=j*.;zR@0*w#ͳ!\;Rd*Q"V*S"X@*V|;RDʈ+"V*X~#"XH:U!jh;R2*Q "@*S=;R:0 =_0;RB x;RÄ*Q"4; R}>M6# ;!R!;5R `;JR RE;_RAD PAST EOREAD ON U;tRN-OPENED FIL,S TYPE *;RFIL;S@!> 6 # =!6k;S2!`::>@1~#;'Sq`s;r3"s͇ >ss ;s&"͇>>!L;s;t3"u! >: ;t`u;u&"!>: 24;u !>0!_;v3"{͈ >{{ ;w3"{͈ >{{{ B;x3"{͈ >{{ ;y3"{͈ >{{>Z;y`{;z3"{͈ >{{ ;{&"͈>>!A;{;|3"}! >:;|`};}&"!>:22;}!>0!];~3"͆ >҃ ;3"͆ > N2#! ~;9 1Oz„2#8À1 ;N"12M1l;&"`!>! >;!: &~n;$_:  !͉9;5F*`! `~w!;H @R@_#r; [ T!;&"`!>!>;! :&~v;$_:!͉9;5F*`!` ~w!;H @R@_#w; [ T!; Oy;?;&"F! >!> ;!: .~>*;( !;$"!>2!>;D::!~_;) w!~Ww":H2!;? w#BTʐo;THM!w+ ;iIcM:G:O2xc;~: x*!A;>:!>*{;D*;!::!>;!!>2*j;г ;!~w+ !;~w# D!7wy;B+ 0!~+~=w!;$~w+) 2;9zW~ww;$"!^>2!Z>@v#~##;a0v>6 #=h60##É=;v`:gw-ʀ6 #w +9;a:nʓ#6 #6>0 !+;0w:nʘ:O>0; *;aͧ2ͧͥ >2;y!#L !B;&#)&`!;:7>'# ?3;NLf! ȥ!y5:xʟ;a3z!2ͥ!y4>2x;uB6:y! 򧀟<C;'# \•HүE@Ë Z;F!`ͥxw`! ̈́;äɥÉ!:`2;ԤpCH 2;ҧ""">!>!;d*H!;M; 1ͮö; 1ͮð; 1ͮ; 1ͮȀ;3ͭ!~w;#3* ~;BP""'"+>,O#~ʚ;'33 #x2~);;AFy,E ##" !";O&!VOUT OF STRIN|;cG DAT;f* ~9~ " ; ",ʄ(+# ;( #" xf2!`" ;9L!?OUT OF NUMERI ;MC DAT;@" ~,#H" ;I")%7EE0 ~7l;9E+@9!;zz>7zR; {; }Í;$"!H!!; TrueFalse; }Ï;$"!H!>`!X;c; }Ñ;$"!H!>`!T;; }Ó;$"!H!>`!X; ;! !; }Ö;&.T .F;&"͝!!!;j;&"͞!!!;i;&"͟!! ;D:_:[!a~_;) w!]~Ww"b:ZH2V%;?U!YD: ʀH!]:;UH!a]+ˆ^?D;kH!a]+sD};D:^o:VgG2V| x;!x"*b!$>E;C!!>"*!Y7;!w+»$!W.!V4#>c;Ӵ w!V͵*b!Y :Wͮ;紐E!V>!!>i;*!<RS> D;IVISION BY ZER;#!_.@![~w# 1;9~w+@<zW~*;Nww-;c;~2@#~ Aw x*".;a!>!>`̀;̧*a!>*q; &! DIVISION; BY ZER :0:;1 !̥!;B(!7>Π;U'wG# QxK;aͧ2ͧ>H2ͽ8; > 2 $͗D@>;(3!0ͧD+~0§;9=&L!͘!;Ma:2]pw:5;aPڃ*&"!> ;tC!>2ͧ*0!;>*:u; G:<7C2!O=; ~-9!+Ͷ:1W@:.;$2.*)+w#  >; )Y;>ò{;>2/",!!7>!2x;>262;<@!2>;(`!;20!57wҦ+š;@:0G!5~w!2͵;A:325!5~_w!j;в:~W w:/W"0!2;@7NWG x 1;H4#~w€6;~/w+~w+~;$w!;h;&"͠!!!;g;&"͢!!!;f;&"͡!!!;e;>Þ; >"!:>; @/!;!"$>!!;# O~#>!; |>; "#{ʃâ!2;6*#:â;}T t Yʀ yY; >>2;""!>:2;C!>0:nʐ0!;(>ͧ!> 6#=5;:5Ƙh! 0R6;L #E.Ҹ!;¥~+ ~~$;ץ!~w# ; `ç~w+?;!! !f;§`!w# ;`ͧ~@>w`ç>; wç3;B >U>2n;8!@:@*pN;*w>*̀;>H!'w# Dù;S:>!HjC;i27>5;~'w## @v>Hj!;@ !ِ!;@OVERFLOW/UNDERFLOe;י~w> -+~=w;~w~w+ $;*6:@+~6# 8;?>w+>K;T~+2~;; #"> +2~#ʀ ʱ;P ʅ EG~+ʀj-;ej+>+2#~ʅ{;z_~_#Ap+6E:+{F;/<2́"x//2!dͻ: +ʿ:; 2 :!( /;Ͷ$<2!">@:= ;ᶒ2*>͹e;- ; #~:³: o;~0 B@!';wÞ:!(;~w#D !5:;(!'~w#@ J;:(gH2(!5;&H ; }2f2!6:n;:O>0?;#"/32!0;`:_!6!:/;# O>@*/;#"732!0;`:_!6:Ӏn;;#Ù1!:O>*7;5W;#"Z f0;& !6 :e+@%w#7;3B0Tʐo;TH M! w+ ;iIcM:G:O2xB;~: x*!;>O!>*6;D*!:O!>;!!>2*R;й _; ;! ~w+ !o;~w# D! 7w8;$B,+ `!~+~=w!;9 ~w+> .2;NzW~wwɨ;$"!p>2!i>;D:q:j!v~_N;) w!o~Ww"w:iH2b1;?0U!h"^#Vp;$D""++r+sK@*##-;9I"*$"ÐA*;N *|>@]}>Ҁb/2@;c#}o|g@"DM:#¨;y*  " |!9!!>͹O;a*>*ͻA*w;~w2 G!>;-6#=.A*~E#"Y;B.O>25 !;W ~#‰Y!  !;l  I!  ! ; $2!>6+=E;I’! $:@ʪ *;H5:‘*!Eʾ;.4$ü:H! ;ֶH ɯw+ ;0 >77a; ^0;1;*;>øo;>2/",!!:>!2l;> q&1wA%x;60#<2;;62:ӄnT!:_;N O>@*ZP;""Y!f|>+2e@}/&;o|/g#>-2e[N#F;* |7,+y/Ox/G ;?y0w#R@&V;T@*Y;i; "^>!a2`:f.; >+2g" >-2g!as;*~0@H~01;? #*X":`W /2`;T*^;ih.;1:#0*~#0!; 5,ƒ#5" ;' I;33 DF ʀH!oF;UH!vo+ˆ^?D;kH!vo+sDM;D:po:bgG2b| x;!x"*w!0>Q;C!*>"*!h7;!w+»$!c:!b4#>9;Ӻ w!bͻ!bͻA *w ;I!h:cQ!!b>!Fq;!!#>*! 0O;  DIVISION BY ZER;"R!q:;7@!j~w# =~w+;L HzW~ww?;a K;v;0~2@#~ -+~=w;~w~w+ ;*ZͿx*; !;"""##~2#~@2#~;@2#N#F# x~+y~W;+ :=ʀVN#F#0;?x~„Ny~ =;T5:OB:e0;h *N#F" :G: *v;}&!SUBSCRIPT OU;T OF BOUND';a">2͐,;L!,:w>!'`*{;$>> 2> 2!;7'w#L<!`2~;J+Y-†Z>2#~ʏ;_0rʄ#@Z 1;tBB„  !(; w#Z! $292AB@!2>;(`!;<$!2!:Q;QB*0|oD:0i!9,;fIo!A$!A9;{ +x*0}};H!9>H20!87w;+ :0G!8~>;&w!2ͻA:328!8V;θ~_w!@~W w:/;W"0!2@:NG ;;xH~<w#^; ~w ~/w+@*;"~w+~w )\;$"!>2!>;D::!~_v;) w!~Ww":H2!;?w#6:@+~6# 8;?>w+> JЋ;T~2Z;+7?{_zW!Z5ʀW5; ;* ;? ;T ;i ;~ ; l; W; B; -; ; ;; ; $ !Z 4 '=;6'!{ 4 '6y2X;,>F: 2Y;?^#V!P!Y> :XO;T@:YF-ASCII FILL;~#d#~#;y ;B21~!A20#~!;"!05!$ :10; ) y; L!ِ?; f2%"&ɧ;D2n"(&+H2q!q;d!r"o!q0:;'!*_o$~#.;<,-$*^+/;Q&!\€_#~`:OE;e0~#À.;y ; ; r; ]; ; O> >1 2c; >$^#V;>!!7:7`;(a:5 ;&":f:!`:; `:!0:;#f!a:90:; 4!!;&"2"!1O  ;3~2!0!0 ;%f2!dF; {;^#V#"~2#:[; !!; "zz@4OFx@Ky;A#6K#wKK;* #6ÁKO~Q F,;? #6#1y*z"x;Ta|eyOj;@xG#yO# xG/*[ DM; Uˀ/BK;02 +B->2N;`i"p! 8T])))֛;)0 ?F_:z;=|/g}/o# *pDM! ;RHȷ707 b?_"; g))))P;#"]:ON`*~a; #ʐN~,@h ;(Bh hE~C+h;>-h #"u ~,V ;T# >0u~,N C5;i _~,†u# "0y2S;|);O>O2!;c"2ar;' aʄw ʨq;; ); ; ; H; 3; ;  ;! ;6 ;K ;` ;N# 6~#@ ;6#;y/Ox/G*  " ~#; x6;* w# x" $!;9z! `! *** OUT;) OF MEMORY **%;^"!#:%0&;f:**&;';C2m~2 0#~2# :m!;؂nD`:O>[W`;u}eqØ6!};h3y2&*x@KF;z;0FO #6 w;@zʀ! ; ; ;* ;? ;T ;i ;~ ; m; X; C; .; ;;j w:[;P΃Z~~#€>;d`26:>E6;wx+ ~ x ;+ >>0 p;>Ba>#;f!>@>#1;fd:!;c:O2:TOO ;MANY CHARECTERS. MAX ;IS 252!"2;^#V"> !+P;#F**0*~ @N;6Fi#"a:2Q;HL!>"!\*0*;[0*6!"#";ma:2\>2\@;'>]> d:o=H2oD,;;>2oyz;N_":n/2n;c0€b8;^"$#&!͘:;` WARNING ONL:;)O͒!H͐`:;<!N͐@W ERRO IN ;Q LINE*|0;e|0}o;x0}0!5;>w~!4; !#Ð~;* s#r#" ;* +V+^" ; y2 #;`:Oz;> ;`!Z ~> ; <. W ;& ;; ;P ;e;~#^#V#0;"(^#=ʀV#=;&*(*(;^#V#N#F#N#FG;^#V#N#F#N#F#N#F#T;N;^#V#N#F#N#F#N#F;;~#^#V#0;"(__{ s{;+='"r+ ='s+=€!b;*;?}o bios dpb ; location of disk parameter block skew_table ; location of bios skew table (used by sectran) alv ; pointer to allocation table = integer based bsh ; block shift factor blm ; block mask exm ; extent mask alloc_byte ; used in searching allocation table = byte crt = 0 rem S-BASIC device # for con: list = 1 rem S-BASIC device # for lst: CR = 0DH BS = 8 ascii_mask = 007FH bit_0_mask = 1 true = -1 false = not true base wboot at 1 rem loca ;&_7:Q;<\!>2;QB:~p\;f!_<2~!;z~ɀ&INPUT FILE REA;ĥ;, $lines REM XAMN Disk track and sector editor. REM No warranty is made, expressed, or implied. var hl,de,bc,a_psw ; cpu registers dph ; location of disk parameter header block_size ; cp/m logical block size max_tracks ; number of tracks/disk seldsk ; bios select disk settrk ; bios set track routine setsec ; bios set sector routine setdma ; bios set dma address b_read ; bios read sector b_write ; bios write sector sectran ; bios sector skew disk_number ; dis tion of bios wboot entry seldsk = wboot + 0018H rem set up bios entry address settrk = wboot + 001BH setsec = wboot + 001EH setdma = wboot + 0021H b_read = wboot + 0024H b_write= wboot + 0027H sectran= wboot + 002DH rem dma buffer for read/write sector operations dim byte sector(128) var loc_sector = integer location array loc_sector = sector dim base char file_chars(11) fcb_name(11) byte_dm(15) dim base integer word_dm(7) based bios_return = byte rem high order byte of a_H Rem This function finds X! Function fac(i=real)=real If i=0 then i=1 else i=fac(i-1)*i End =i Var x=real 0Loop Input x Print fac(x) Goto 0Loop End ,k number to examine = integer var crt ; logical device list ; logical device CR ; ASCII CR BS ; ASCII BS ascii_mask ; ASCII mask bit_0_mask ; mask used to look at bit 0 true, false ; true/false logical flags = integer var menu_selection ; prompt return = char var r1, r2, r3, r4 ; Real number for computations = real based spt ; sectors/track dsm ; max data block number drm ; number of dir blocks off ; number of reserved tracks wboot ; entry t!.MAIN.\.PROG..DATA..BLNK.SYSIN \SYSOUTERR1 ERR2 ; f/};@M> !D ;&!%BAD CHANNEL ;)NUMBEw$//Ð;>Ió//$/4ÐnO;SI&//$//Ð//;hH//_@|Z;}@*:; ¢ʗ 2;@Ì!|;x:|;*7>|;  22;;È*|!w; "_ jjpsw only location var hl = a_psw base bios_return at hl+1 0seldsk input "Disk number (0,1,...,15) ";disk_number bc = disk_number call ( seldsk, dph, de, bc, a_psw ) if dph=0 then 0seldsk base skew_table at dph base dpb at dph+10 base alv at dph+14 bc = loc_sector+1 call ( setdma, hl, de, bc, a_psw ) base spt at dpb base bsh at dpb+2 base blm at dpb+3 base exm at dpb+4 base dsm at dpb+5 base drm at dpb+7 base off at dpb+13 block_size = 1024*(2^(bsh-3)) r1 = ((dsm+ctr); if sector[0]=1 then print #device; " {BAD}" else print #device display_sector device print end of dump_physical procedure dump_logical ( device = integer ) get_sector track, skew(sectr) print #device; "Track=";track; " Logical sector=";sectr, \ " Physical sector=";skew(sectr); if sector[0]=1 then print #device; " {BAD}" else print #device display_sector device print end of dump_logical function hex_byte ( c = char ) = char c = c-'0' gisplay_sector ( device = integer ) var x, j = integer for x=1 to 128 step 16 print hex$(x-1);" "; for j=0 to 15 if j=8 then print ' '; print #device; right$(hex$(sector[x+j]),2);' '; next hex byte for j=0 to 15 if j=8 then print ' '; print #device; ascii_character(sector[x+j]); next ascii byte print #device next line of sector display end of display sector 0menu print print print "Drive number ..!.";disk_number, "Current disk ";'k ...... 8 H Select disk  ... 9 I % input2 "Please enter selection ==>"; menu_selection var track, sectr =integer var letter = char function group ( trk, sec = integer ) = integer var sectrs, grp = real sectrs = ((trk-off)*spt)+sec-1 grp = sectrs/(block_size/128) end = grp procedure trk_sec ( grp = integer ) = integer var sectrs, sec, trk = real sectrs = grp*(block_size/128) trk = sectrs/spt track = trk + off sec = sectrs-((track-off)*spt)1)*(block_size/128))/spt max_tracks = r1 + off function physical_sec ( sectr = integer ) = integer if skew_table=0 then sectr=sectr-1 end = sectr function skew ( sectr = integer ) = integer if skew_table<>0 then begin bc = sectr - 1 de = skew_table call (sectran, hl, de, bc, a_psw) end else hl = sectr - 1 end = hl procedure get_sector( track, sec = integer ) var x = integer for x=1 to 128 sector[x] = 0 next x bc = track call ( settrk, hl, de  if c>9 then c=c-7 end = c procedure modify ( t, s = integer ) var c=char var x=integer repeat begin x=1 repeat begin print hex$(x-1) ;' '; right$(hex$(sector[x]),2) ;' ';\ ascii_character(sector[x]);' '; input3 c if c<>'.' and c<>CR and c<>BS then begin sector[x]=hex_byte(c) input3 c if c<>'.' and c<>CR and c<>BS then sector[x]=(sector[x]*16)+hex_byte(c) end if c='.' then x=128 if c=BS then begin x = x-2 if x<0 then x=0 e*A'+disk_number;':' print "Sectors/track ..0";spt, '['; hex$(spt) ;']' print "Tracks/Disk ..";max_tracks, '['; hex$(max_tracks) ;']',\ "XAMN Disk editor" print "Number of reserved tracks ..";off, '['; hex$(off) ;']',\ "Version 1.1" print "# of logical blocks ..u";dsm+1, '['; hex$(dsm+1) ;']' print "# of directory entries .....";drm+1, '['; hex$(drm) ;']' print "Block size ..N.";block_size, '['; hex$(block_size) ;']' print "128 byte sectors/block ....j sectr = sec + 1 end procedure bump ( amount = integer ) sectr = sectr + amount if sectr>spt then begin track = track +1 if track>=max_tracks then track=max_tracks-1 sectr = 1 end if sectr<1 then begin track = track -1 if track<0 then track=0 sectr = spt end end of bump procedure dump_physical ( device = integer ) get_sector track, physical_sec(sectr) print #device; "Track=";track; " Physical sector=";sectr, \ " Logical sector=";skew(seT, bc, a_psw ) bc = sec call ( setsec, hl, de, bc, a_psw ) call ( b_read, hl, de, bc, a_psw ) sector[0] = bios_return end of get_sector procedure put_sector( track, sec = integer ) bc = track call ( settrk, hl, de, bc, a_psw ) bc = sec call ( setsec, hl, de, bc, a_psw ) call ( b_write, hl, de, bc, a_psw ) sector[0] = bios_return end of put_sector function ascii_character ( x = integer ) = char x = x and ascii_mask if x<32 then x = 46 end = x procedure dJ.";block_size/128, '['; hex$(block_size/128) ;']' print "Disk size in K ..u.";(dsm+1)*(2^(bsh-3)), '['; hex$( (dsm+1)*(2^(bsh-3)) ) ;']' text 0,% Help Examin a sector (physical)..C. 1 A Examin a sector (logical skew)..... 2 B Move Sectors  ..! 3 C Produce a map of a file .. . 4 D Produce a map of disk ... 5 E Find bad sectors  ..P 6 F Compute Block from Trk & Sec ...... 7 G Compute Trk & Sec from Bloc Rnd if c=CR and x=128 then x=127 print x=x+1 end until x>128 print print t,s display_sector crt repeat begin print input "(W)rite to disk, (C)hange more bytes, (A)bort ";c if c='W' then begin print "Writing sector to disk..." put_sector t, s if sector[0]=1 then begin input2 "Write fault. to continue";c print display_sector crt c=' ' end else c='A' end of write end until c='A' or c='C' end until  for x=1 to 11 print #device; fcb_name[x]; next x print #device; ' '; if dsm>255 then for x=0 to 7 print #device; hex$(word_dm[x]); ' '; next x else for x=0 to 15 print #device; right$( hex$(byte_dm[x]),2 ); ' '; next x print #device end file_name = fcb$( file_name ) print "Search for file:";file_name for count = 1 to (drm+1)/4 get_sector track, skew(sectr) print "Searching Track:";track; " Sector:" -1 dump_logical crt end 'R': begin var s, c, device =integer input "Number of sectors to display";c device = crt for s=1 to c dump_logical device bump 1 next Sector end of 'R' 'C': modify track, skew(sectr) end of case end until letter='E' end of option #2 '3': begin var t = char repeat begin t = ' ' while t<>'L' and t<>'P' and t<>'E' do input "Move (L)logical sectors, (P)hysical sectors, (E)xit v<>0 then print " Fault" else print track = trk1 sectr = sec1 bump 1 trk1 = track sec1 = sectr track = trk2 sectr = sec2 bump 1 trk2 = track sec2 = sectr next sector end end end until t='E' end of option #3 '4': begin var count ; number of sectors to search = integer var file_name ; file name to search for = string:12 location var count=file_name locate file_chars at count track = off rem starting tracc='A' end of procedure modify $page case menu_selection of '1': begin input "Track, sectr"; track, sectr print dump_physical crt repeat begin input "(F)oward, (B)ackward, (R)ange, (C)hange, (E)xit ";letter case letter of 'F': begin bump 1 dump_physical crt end 'B': begin bump -1 dump_physical crt end 'R': begin var s, c, device =integer input "Number of sectors to display";c devic H;skew(sectr);" ";chr(0DH); locate fcb_name at loc_sector+1 locate byte_dm at loc_sector+17 locate word_dm at loc_sector+17 if match then dump_fcb crt locate fcb_name at loc_sector+33 locate byte_dm at loc_sector+49 locate word_dm at loc_sector+49 if match then dump_fcb crt locate fcb_name at loc_sector+65 locate byte_dm at loc_sector+81 locate word_dm at loc_sector+81 if match then dump_fcb crt locate fcb_name at loc_sector+97 locate";t if t<>'E' then begin var ok = char var trk1, trk2, sec1, sec2, cnt, x = integer ok = ' ' while ok<>'Y' and ok<>'A' do begin input "Source Track, Sector ";trk1, sec1 input "Dest. Track, Sector ";trk2, sec2 input "Number of sectors to move";cnt print print "Source Track, Sector = ";trk1, sec1 print "Dest. Track, Sector = ";trk2, sec2 print "Number of sectors to move ";cnt print input "Is the above correct (Y/N/(A)bort) ";ok end if 'k sectr = 1 rem starting sector input "File name ( only to skip) ";file_name if len(file_name)>0 then begin function match = integer var result, x = integer result = true if fcb_name[0]=0E5H then result=false else for x=1 to 11 if file_chars[x]<>(fcb_name[x]) and file_chars[x]<>'?' \ then result = false next x end = result procedure dump_fcb( device = integer ) var x = integer print #device; "Track";track; " Sector";sectr; ' '; e = crt for s=1 to c dump_physical device bump 1 next Sector end of 'R' 'C': modify track, physical_sec(sectr) end of case end until letter='E' end of option #1 '2': begin input "Track, sectr"; track, sectr print dump_logical crt repeat begin input "(F)oward, (B)ackward, (R)ange, (C)hange, (E)xit ";letter case letter of 'F': begin bump 1 dump_logical crt end 'B': begin bumpok<>'A' then begin for x=1 to cnt print "Reading track";trk1;" Sector";sec1; if t='L' then print " Physical #";skew(sec1); if t='P' then get_sector trk1, physical_sec(sec1) else get_sector trk1, skew(sec1) if sector[0]<>0 then print " Fault" else print print "Writing track";trk2;" Sector";sec2; if t='L' then print " Physical #";skew(sec2); if t='P' then put_sector trk2, physical_sec(sec2) else put_sector trk2, skew(sec2) if sector[0] x byte_dm at loc_sector+113 locate word_dm at loc_sector+113 if match then dump_fcb crt bump 1 next directory sector var x=char print input2 "Press to continue";x end end of option #4 '5': begin function bin( x = integer ) = string var bits = string:8 var y = integer bits = "" for y=1 to 8 if x and bit_0_mask then bits="1"+bits else bits="0"+bits x=x/2 next y end = bits bc = 14 de = disk_number call(5,hl,de,bc,a_G generating a map of the disk using another of XAMN's commands (Map  Fdisk, see also help 'E'). Second, exit XAMN and using your system  Fformat utility format ONLY the track with the bad sector. Re-enter  1XAMN. Third, move the data back onto the track.  ? This command will start by asking you if this is a physical  Fmove or a logical move (use logical if you want to move CP/M groups  Garound). You can exit at this point. Next, you will be asked for  print "Track:";track,"Sector:";sectr input "Press to cont.";x end of #8 end of function number menu selection if menu_selection = '9' then 0seldsk case menu_selection of 'A': begin text 0,%  ? To examine a physical sector use this command. Sectors are  Fnumbered from 1 to the end of the track. Tracks are numbered from 0  Fto the end of the disk. The physical sector number displayed is the  7sector number from 1 to end of track, the logical sect push back space, and  Fto exit push period. Upon exit you may re-edit, write the sector to  the disk, or abort leaving the sector on the disk un-changed. % input2 "Press to cont.";track end of 'A' 'B': begin text 0,%  ? Use this command to examine and edit logical sectors.  FLogical sectors are the sectors that the BDOS refers to, the  Fphysical sector number may be different. It is the physical sectors  that the BIOS access. "psw) rem bdos seldsk function var x, y = integer print for x = 0 to (dsm/8) step 8 print hex$(x*8);": "; for y = 0 to 7 if x+y<=(dsm/8) then begin base alloc_byte at alv+x+y print bin(alloc_byte);' '; end next y print next x print "Last block is";dsm+1,'[';hex$(dsm+1);']' input2 "Press return to cont.";x end of option #5 '6': begin var x = real var t1, t2 = integer input "Starting track, last track ";t1,t2 track = t1 sectr = 1 for 6M the starting track and sector number, the destination track and  +sector and the number of sectors to move.  ? BEFORE each sector is read or written you will be told of  Fit, if an error occurs you can see where it happens. AFTER the  Foperation the program will move on to the next sector if all is  well or print "Fault" to show a read or write error. % input2 "Press to cont.";track end of 'C' 'D': begin text 0,%   Thisor number is  ;the number your BIOS uses to access this physical sector.  ? When you type this command you will be asked for the track  Fand sector you wish to examine. After you respond the sector will  Fbe displayed. You will then be asked if you want to move forward or  Fbackward from your current position on the disk. You may, at this  Ftime, specify a range of sectors to be displayed from the current  'position on the disk. You may also edi#  q For more info see 'A' above. % input2 "Press to cont.";track end of 'B' 'C': begin text 0,%  ? This command is used to move sectors around on the disk. It  Fcan be used to move physical sectors or logical sectors around. The  Fmain purpose for moving sectors around is to allow re-formatting of  Fa track on the disk. First, move the data on the track you wish to  Mre-format to an unused area of the disk. This area can be found by  x = 1 to (t2-t1+1)*spt print "Track:";track; " Sector:";sectr; " "; get_sector track, physical_sec(sectr) if sector[0]<>0 then print "{BAD}" else print chr(0DH); bump 1 next x print input2 "Read complete, press to cont.";x end of option #6 '7': begin input "Track, Sector ";track,sectr print "Group #";group(track,sectr), hex$(group(track,sectr)) input "Press to cont. ";track end of #7 '8': begin var x = integer input "Group number";x trk_sec x nt the sector making changes  Fto it in an buffer internal to XAMN. And last but not least you can  Fexit to the main menu. Each option is selected by one key press.  $The letters are F, B, R, C, and E.  ? When changing a sector the sector address in hex will be  Fdisplayed along with the hex contents of the byte and the ASCII  Fcharacter it represents (Period if none). To enter a new value type  .it in, to move forward push return, backward  : command generates a map of a file showing all the CP/M  Fgroups assigned to that file. It also reports on the directory  Fsectors that contain that file's FCB. As each directory sector is  searched a report of that operation is made sector by sector. % input2 "Press to cont.";track end of 'D' 'E': begin text 0,%  ? This command generated a disk map showing allocated groups.  BA 0 is an empty group, un-used by any file. A 1 is a group in us n-----> format 1 track on the diskette in drive B Verify------> verify the diskette in drive B is readable  (this is a non destructive test) (E)xit (F)ormat (S)ingle (V)erify Please enter 'E' or 'F' or 'S' or 'V' ==>$ Insert diskette to format into drive B. Enter key to format, any other key to abort $ Format a single track of the diskette 3Enter track number ( key to abort) xx$ DONE > $ Formatting track:$ Enter to format, any other k cal groups start in  the directory, NOT in the reserved, or 'OFF' tracks. % input2 "Press to cont.";track end of 'G' 'H': begin text 0,%  ? Use this command to compute the track and LOGICAL sector  mnumber for a given group. % input2 "Press to cont.";track end of 'H' 'I': begin text 0,%  ? Use this command to select another disk. XAMN commands are  Nin reference to the current disk number (see the display above the  REM USED TO "PLAY" WITH RANDOM DISK FILES var x,y=integer var xdata=integer files r(256) if size("JUNK")=0 then create "JUNK" open #0;"JUNK" 0 input "SEQ ON=0 OFF=1";x if x=0 then record.sequential on if x=1 then record.sequential off input "0=READ 1=WRITE";x input "RECORD #";y if x=1 then begin input "DATA=";xdata write #0,y; xdata end if x=0 then begin read #0,y; xdata print "DATA=";xdata end goto 0  3e  Aby a file. WARNING: this command makes a BDOS disk select call.  ? At the end of the map a few groups that do not exist may be  Fdisplayed as empty. This is because the disk map is made up of  Fbytes where each bit in the byte is a group, the last byte in the  Fmap may not be fully used up. At the end of the map the last group  #number is given, use this number.  O This command can be used to find unused disk space. % input2 "Press 3ey to abort $ Sector $ $0:?* >2 :f>2f   E   S52   ͚ !" 2 ͺĪ: < 8: <(d2f:  # ˯  .* {vv" --( * B>!O ~  (=>: >vG >->-˷2z^y0d8d{0(0 8:_ K g>2     ͚ : Og   ͚ $Track $ Sector $Drive menu). % input2 "Press to cont.";track end of 'I' end of help case statement if menu_selection=03H then stop goto 0menu 8  : to cont.";track end of 'E' 'F': begin text 0,%  ? This command is used to find a bad sector. It will ask for  Fa starting track and an ending track. As it reads each track and  Fsector it will report its progress. Any bad sectors will be  ]reported. % input2 "Press to cont.";track end of 'F' 'G': begin text 0,%  ? Use this command to compute a group number from the  /LOGICAL track and sector. Remember that logi  !! A $Drive B $ {BAD}$ $ Format OK $ Please type any key to continue.$Verifying disk B to be readable *** NOTE: only one error per track is displayed (there may be more) ***$ !  (=>: >vG >->-˷2z^y0d8d{0(0 8:_ K g>2     ͚ : Og   ͚ $Track $ Sector $Drive!6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝҉* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!? q=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2!@tive now. 4800 7200 9600 19200 Type [ESC] key to return to the previous menu (no changes) (* NOTE: The baud rate will always default to 300 baud *) (* after the power is first turned on and when *) (* the RESET button is pressed. *) $ $ $ } _   1 2 <:<2͖ *>2:=_*yw( 08:8˯G0A8__0)( ( 08:8˯G0A8!$@ COPYRIGHT (C) 1978, DIGITAL RESEARCH ERROR: $, LOAD ADDRESS $DISK READ$INVERTED LOAD ADDRESS$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $HEXCANNOT OPEN SOURCE$COMNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$*!9"!e !" !" \!""͊: ƒde"\\\͊: ²d\͝: )d;! q* &f  ! q> ! : A O!,devices. The logical CP/M devices are: CON: LST: RDR: and PUN:. The physical devices for the KAYPRO computer are: CRT: Video and Keyboard TTY: Serial port LPT: Centronics port UL1: Serial port using CTS as busy (KAYPRO is a terminal) PTP: This is the same as UL1 above Possible logical to physical assignments are: CON: TTY: CRT: RDR: TTY: PUN: TTY: PTP: LST: TTY:, CRT, LPT, and UL1 This command writes the CURRENT configuration to the disk in drive B. BEFORE running this program set ! SA 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_{ozg^#V) _{ozgi`N#Fogo&og_{_z#W!p__0OO2 m m m m m m m m m m m m m m (< 4--- Move the cursor to the key you wish : : : : : : 7 : 8 : 9 : - : to change. Use the [LINE FEED] key. : : : : : : 37 : 38 : 39 : 2D : The default HEXADECIMAL code will be ;------;------;------;------: : !8: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B* DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! !&_>2>2   12t 3 4<5_  X 1$2ʐ_ >2 ((  :ҥ_:<2( " 50 75 110 Move the cursor to the baud rate which 134.5 150 you want to use by typing the [LINE FEED] key. 300 600 1200 When the cursor is at the rate you want 1800 2000 type the RETURN key and it will be set. 2400 3600 The new baud rate will be effec! : : : : the number which is flashing. : 4 : 5 : 6 : , : : : : : : : 34 : 35 : 36 : 2C : When you reach the key you wish to change. :------:------:------:------: : : : : : Type in the new HEXADECIMAL code. : 1 : 2 : 3 : : : : : : : : 31 : 32 : 33 : ENTER: (* NOTE: you must enter both digits *) :------:------:------: : : / : : 0D : (* to change the code. ""!9"1W͜Q>2!͢QG}DrYQ|͏}͏#> ex͏#r* _> e> e ҉0Ë7e}} :³ʳ7_<2!~ɯ2|\\FILE DUMP VERSION 1.4$ NO INPUT FILE PRESENT ON DISK$!Y , <    *$A!6 # T!w $r# *`: 0 *A*! ~ ʰxkb))))_y‘BK{ͅ*!66!"80*{#z+++ #"ess mov c,d ;get sector address to register c call setsec ;set sector address from register c pop b ;recall dma address to b,c push b ;replace on stack for later recall call setdma ;set dma address from b,c ; ; drive set to 0, track set, sector set, dma address set call read cpi 00h ;any errors? jnz wboot ;retry the entire boot if an error occurs ; ; no error, move to next sector pop h ;recall dma address lxi d,128 ;dma=dma+128 dad d ;new dma address is in h,l pop d ;recall secto"{rt sector count ; ; jump vector for individual subroutines jmp boot ;cold start wboote: jmp wboot ;warm start jmp const ;console status jmp conin ;console character in jmp conout ;console character out jmp list ;list character out jmp punch ;punch character out jmp reader ;reader character out jmp home ;move head to home position jmp seldsk ;select disk jmp settrk ;set track number jmp setsec ;set sector number jmp setdma ;set dma address jmp read ;read disk jmp "k size-1 dw 63 ;directory max db 192 ;alloc 0 db 0 ;alloc 1 dw 16 ;check size dw 2 ;track offset ; ; end of fixed tables ; ; individual subroutines to perform each function boot: ;simplest case is to just perform parameter initialization xra a ;zero in the accum sta iobyte ;clear the iobyte sta cdisk ;select disk zero jmp gocpm ;initialize and go to cp/m ; wboot: ;simplest case is to read the disk until all sectors loaded lxi sp,80h ;use space below buffer for stack mv"" r address pop b ;recall number of sectors remaining, and current trk dcr b ;sectors=sectors-1 jz gocpm ;transfer to cp/m if all have been loaded ; ; more sectors remain to load, check for track change inr d mov a,d ;sector=27?, if so, change tracks cpi 27 jc load1 ;carry generated if sector<27 ; ; end of current track, go to next track mvi d,1 ;begin with first sector of next track inr c ;track=track+1 ; ; save register state, and change tracks push b push d push h call settr"write ;write disk jmp listst ;return list status jmp sectran ;sector translate ; ; fixed data tables for four-drive standard ; IBM-compatible 8" disks ; disk parameter header for disk 00 dpbase: dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk00,all00 ; disk parameter header for disk 01 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk01,all01 ; disk parameter header for disk 02 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk02,all02 ; disk parameter header for "i c,0 ;select disk 0 call seldsk call home ;go to track 00 ; mvi b,nsects ;b counts # of sectors to load mvi c,0 ;c has the current track number mvi d,2 ;d has the next sector to read ; note that we begin by reading track 0, sector 2 since sector 1 ; contains the cold start loader, which is skipped in a warm start lxi h,ccp ;base of cp/m (initial load point) load1: ;load one more sector push b ;save sector count, current track push d ;save next sector to read push h ;save dma addr"A; Skeletal CBIOS for first level of CP/M 2.0 alteration ; msize equ 20 ;cp/m version memory size in kilobytes ; ; "bias" is address offset from 3400H for memory systems ; than 16K (referred to as "b" throughout the text). ; bias equ (msize-20)*1024 ccp equ 3400H+bias ;base of ccp bdos equ ccp+806h ;base of bdos bios equ ccp+1600h ;base of bios cdisk equ 0004H ;current disk number 0=A,...,15=P iobyte equ 0003h ;intel i/o byte ; org bios ;origin of this program nsects equ ($-ccp)/128 ;warm sta"udisk 03 dw trans,0000H dw 0000H,0000H dw dirbf,dpblk dw chk03,all03 ; ; sector translate vector trans: db 1,7,13,19 ;sectors 1,2,3,4 db 25,5,11,17 ;sectors 5,6,7,8 db 23,3,9,15 ;sectors 9,10,11,12 db 21,2,8,14 ;sectors 13,14,15,16 db 20,26,6,12 ;sectors 17,18,19,20 db 18,24,4,10 ;sectors 21,22,23,24 db 16,22 ;sectors 25,26 ; dpblk: ;disk parameter block, common to all disks dw 26 ;sectors per track db 3 ;block shift factor db 7 ;block mask db 0 ;null mask dw 242 ;dis ##k ;track address set from register c pop h pop d pop b jmp load1 ;for another sector ; ; end of load operation, set parameters and go to cp/m gocpm: mvi a,0c3h ;c3 is a jmp instruction sta 0 ;for jmp to wboot lxi h,wboote ;wboot entry point shld 1 ;set address field for jmp at 0 ; sta 5 ;for jmp to bdos lxi h,bdos ;bdos entry point shld 6 ;address field of jump at 5 to bdos ; lxi b,80h ;default dma address is 80h call setdma ; ei ;enable the interrupt system lda cdisk ;g#bytes for expansion dmaad: ds 2 ;direct memory address diskno: ds 1 ;disk number 0-15 ; ; scratch ram area for BDOS use begdat equ $ ;beginning of data area dirbf: ds 128 ;scratch directory area all00: ds 31 ;allocation vector 0 all01: ds 31 ;allocation vector 1 all02: ds 31 ;allocation vector 2 all03: ds 31 ;allocation vector 3 chk00: ds 16 ;check vector 0 chk01: ds 16 ;check vector 1 chk02: ds 16 ;check vector 2 chk03: ds 16 ;check vector 3 ; enddat equ $ ;end of data area datsiz equ $-be#.place later) ani 7fh ;remember to strip parity bit ret ; ; ; i/o drivers for the disk follow ; for now, we will simply store the parameters away for use ; in the read and write subroutines ; home: ;move to the track 00 position of current drive ; translate this call into a settrk call with parameter 00 mvi c,0 ;select track 0 call settrk ret ;we will move to 00 on first read/write ; seldsk: ;select disk given by register C lxi h,0000h ;error return code mov a,c sta diskno cpi 4 #n (usually this is similar to write ; so we will allow space to set up read command, then use ; common code in write) ds 10h ;set up read command jmp waitio ;to perform the actual i/o ; write: ;perform a write operation ds 10h ;set up write command ; waitio: ;enter here from read and write to perform the actual i/o ; operation. return a 00h in register a if the operation completes ; properly, and 01h if an error occurs during the read or write ; ; in this case, we have saved the disk numbe#.et current disk number mov c,a ;send to the ccp jmp ccp ;go to cp/m for further processing ; ; ; simple i/o handlers (must be filled in by user) ; in each case, the entry point is provided, with space reserved ; to insert your own code ; const: ;console status, return 0ffh if character ready, 00h if not ds 10h ;space for status subroutine mvi a,00h ret ; conin: ;console character into register a ds 10h ;space for input routine ani 7fh ;strip parity bit ret ; conout: ;console chara# )gdat;size of data area end 1#;must be between 0 and 3 rnc ;no carry if 4,5,... ; disk number is in the proper range ds 10 ;space for disk select ; compute proper disk parameter header address lda diskno mov l,a ;L=disk number 0,1,2,3 mvi h,0 ;high order zero dad h ;*2 dad h ;*4 dad h ;*8 dad h ;*16 (size of each header) lxi d,dpbase dad d ;HL=.dpbase(diskno*16) ret ; settrk: ;set track given by register c mov a,c sta track ds 10h ;space for track select ret ; setsec: ;set sector given by register #r in 'diskno' (0,1) ; the track number in 'track' (0-76) ; the sector number in 'sector' (1-26) ; the dma address in 'dmaad' (0-65535) ds 256 ;space reserved for I/O drivers mvi a,1 ;error condition ret ;replaced when filled-in ; ; the remainder of the CBIOS is reserved uninitialized ; data area, and does not need to be a part of the ; system memory image (the space must be available, ; however, between "begdat" and "enddat"). ; track: ds 2 ;two bytes for expansion sector: ds 2 ;two #cter output from register c mov a,c ;get to accumulator ds 10h ;space for output routine ret ; list: ;list character from register c mov a,c ;character to register a ret ;null subroutine ; listst: ;return list status (0 if not ready, 1 if ready) xra a ;0 is always ok to return ret ; punch: ;punch character from register c mov a,c ;character to register a ret ;null subroutine ; ; reader: ;read character into register a from reader device mvi a,1ah ;enter end of file for now (re#c mov a,c sta sector ds 10h ;space for sector select ret ; sectran: ;translate the sector given by BC using the ;translate table given by DE xchg ;HL=.trans dad b ;HL=.trans(sector) mov l,m ;L = trans(sector) mvi h,0 ;HL= trans(sector) ret ;with value in HL ; setdma: ;set dma address given by registers b and c mov l,c ;low order address mov h,b ;high order address shld dmaad ;save the address ds 10h ;space for setting the dma address ret ; read: ;perform read operatio $5$* *) : 0 : . : : : c : : : : 30 : 2E : : Type the [ESC] key to return to the previous menu --- $=3&=.#=.*=.1=)#=)*=)1=$#=$*=$1=$8=)8=08=31=3I { <   1ʩ 2L !M,"! "  >2[ m` me mj mo ( `   `  (    ---   $X& Please enter '1' or '2' or [ESC] key ==>$1 --*> Help (Write safe flag definitions) 2 --l> Change the write safe flag [ESC] key ----> Return to main menu Please enter '1' or '2' or [ESC] key ==>$1 --%> Help (Cursor key definitions) 2 --p> Change the Cursor key settings [ESC] key ----> Return to main menu Please enter '1' or '2' or [ESC] key ==>$1 --+> Help (Numerical keypad definitions) 2 --*> Change the Numerical keypad settings $Kmove the cursor to the mode which you wish to use and then type the [RETURN] key to enter your choice. **** PLEASE read the help file before you enable Write Safe. **** **** If you do not understand it ASK your dealer. **** $=# =% ='+   123 !K,"!">2͍͍͍͍( G( * :<2 >2:_!^#V[ˏ!^>2ˇˏ:<2˷!p˿˷$Qt write to your disk *** $ KAYPRO II CONFIGURATION PROGRAM 11 July 1982 --- CHOICES ------- $1 --!> I/O Byte cold boot defaults 2 --> Write Safe flag 3 --> Cursor Keys definitions 4 --"> Numerical keypad definitions 5 --> Baud rate [ESC] key ----> EXIT this program and return to CP/M (* NOTE: Anything not changed will contain its default value. *) Any changes that this program can make will only affect the d$$ : : : : :  #: ^ : : : <- : -> :  #: : : v : : :  #: : : : :  #: 0B : 0A : 08 : 0C :  --- Type the [ESC] key to return to the previous menu. Move the cursor to the key which you wish to change by pressing the [LINE FEED] key. The default HEXADECIMAL code will be the flashing number. Type the new HEXADECIMAL num$ OL[ESC] key ----> Return to main menu Please enter '1' or '2' or [ESC] key ==>$1 --$> Help (Baud rate definitions) 2 --f> Change the Baud rate [ESC] key ----> Return to main menu Please enter '1' or '2' or [ESC] key ==>$ Y--*> procede to update the disk in drive B N--> not ready, EXIT TO CP/M Please type (Y) or (N) ====>$ On the right hand side of your KAYPRO II keyboard there is a group of fourteen keys, labeled:  7 8 9 - 4 5 6$D J"  Default settings Posibile changes -- -- CON:=CRT: CON:=TTY: Type the [LINE FEED] key to LST:=LPT: LST:=TTY: move the cursor to the mode PUN:=TTY: - none - you wish to select. RDR:=TTY: - none - Then the RETURN key to enter your selection. Type the [ESC] key to return to the previous menu. * CON: If you chose CON:=TTY: then all input and output will be through the serial connector on the back of your KAYPRO II instea$isk in drive B. These changes will not be seen until you move the disk to drive A and push the RESET switch (Cold Boot) or turn the power off and on, EXCEPT selection '5' (Baud rate) which will have an immediate effect. Upon exiting this program you will be asked whether you want to apply the changes to the disk in drive B. Please enter '1' or '2' or '3' or '4' or '5' or [ESC] key ====>$1 --------> Help (I/O Byte definitions) 2 --------> Change the I/O Byte [ESC] key ----> Return to main menu $ber you wish to assign to the key. You must type both digits to effect the change. $='/='7='?='G=+2  2 12ʥ t  6( (t >2L,>2t ( (( >2L,2t (t í  $ t  Yes I want Write Safe enabeled. No do not enable Write Safe. This is the default mode on your KAYPRO II . Type the [ESC] key to return to the previous menu. Use the [LINE FEED] key to $d of through the keyboard and the CRT. * LST: This setting will decide wether the output directed at a printer will go through the LPT: (parallel connector) or to the TTY: (serial connector). $=%,=%D=&,=&D=*3:>24 ˯NY >24:_!,"CC>2!"KK$K!*(  >24*[":<2:=2; >24N $ DONE WITH CONFIGURATION $ Please type any key to continue$ *** I can' %%p , 1 2 3 enter 0 . These fourteen keys each produce a unique code when typed. In some situations it may be useful to have one or more keys provide a special function, such as in an application program requiring choices from a menu. This portion of the CONFIGURATION program allows you to set the codes which will be produced by these fourteen keys. $ Your KAYPRO II computer has a serial port with which you may communicate with the outside world. This serial port is most often%:!3ʩ!*éw!'̩:!6ʩ!-ͩ!5O ~:!9ʩ!Eé!6é!9é:!9ʩ!?ʩ!E@ʩ!9é:!Bʩ!<ʩ!0! +!&!!!!!!:4( !!s1{˿~#O!!D!9é:!Bcold boot (reset). $GÒ!>82y~ÃÈÍÒ×_ä  0123456789-, .t2:32 KAYPRO II 64k CP/M v 2.2 >!2"!2":Ot Warm Boot 1~̓!",͈͒ *"w >(½̓%9 CP/M devices are: CON: LST: RDR: and PUN:. The physical devices for the KAYPRO computer are: CRT: Video and Keyboard TTY: Serial port (note the connector must be wired as in the manual) LPT: Centronics port UL1: This is the same as TTY: above PTP: This is the same as TTY: above Possible logical to physical assignments are: CON: = TTY: or CRT: RDR: = TTY: PUN: = TTY: or CRT: or LPT: or UL1: BEFORE using this option try it with the STAT command in CP/M. $ Your KAYPRO computer c%not possible to make the following discription nontechnical. If you do not understand it please ask your dealer. Your KAYPRO II computer comes with four arrow keys, they are at the upper right of the main keyboard. They are usually referred to as CURSOR keys. They are used in programs such as SELECT to move the cursor. These keys produce codes that are recognized by applications programs. The codes that they produce may or may not be the codes that an application you supply wants. The codes sent by% referred to as RS-232. In using RS-232 both the computer and the external device must be set at the same baud rate (the speed at which data travels) Your KAYPRO II is capable of the following baud rates: 50 -not used very often 75 -not used very often 110 -used with slower printers 134.5 -used with some IBM printers 150 -not used very often 300 -very common (default on your KAYPRO II on reset) 600 -not used very often 1200 -used with many printers 1800 -not % %omes with a special "Write Safe" option that corrects a problem with CP/M when running with SOME application programs. It is not possible to make the following description nontechnical. If you do not under- stand it, ask your dealer. The wrong setting of the "Write Safe" flag may cause the IRREVOCABLE LOSS OF DATA AND OR PROGRAM(S). The KAYPRO computer uses deblocking. When a disk write operation is immediately followed by a warm boot, the deblocking buffer may not be written to the disk. This is no%w the keyboard are unique, MSB set. The BIOS translates the keyboard codes using a table in the BIOS. This option of the configure program allows you to change the values in this table and record it on the disk. The memory image is not changed until you cold boot (reset). $GÒ!>82y~ÃÈÍÒ×_ä  0123456789-, .t2:32 KAYPRO II 64k CP/M v 2.2 >!2"!2":Ot Warm Boot 1~̓!",͈͒ *"w >(½̓%used very often 2000 -not used very often 2400 -not used very often 3600 -not used very often 4800 -higher rate for faster printers 7200 -not used very often 9600 -highest rate normally used 19200 -very high rate (for special purposes) (* NOTE: the PRESENT baud rate remains in effect until the next RESET *)$ In order to understand this command you should read the CP/M manual "AN INTRODUCTION TO CP/M FEATURES AND FACILITIES", the STAT command logical and physical devices. The logical%8t a likely sequence of events. Most programs when finished writing to a file, will close it. ALL directory operations force the deblock buffer to disk on write. The "Write Safe" flag tells the BIOS that ALL disk operations are directory type. This forces the buffer to the disk. The price is performance, as "Write Safe" will slow the computer down from 2 to 4 times when writing to the disk. "Write Safe" is not a panacea for system or program problems. The chance you will need it is rare. $ It is &'&U; CP/M 2.0 disk re-definition library ; ; Copyright (c) 1979 ; Digital Research ; Box 579 ; Pacific Grove, CA ; 93950 ; ; CP/M logical disk drives are defined using the ; macros given below, where the sequence of calls ; is: ; ; disks n ; diskdef parameter-list-0 ; diskdef parameter-list-1 ; ... ; diskdef parameter-list-n ; endef ; ; where n is the number of logical disk drives attached ; to the CP/M system, and parameter-list-i defines the ; characteristics of the ith drive (i=0,1,...,& > 256 extmsk set (extmsk shr 1) endif ;; may be optional [0] in last position if not nul k16 extmsk set k16 endif ;; now generate directory reservation bit vector dirrem set dir ;;# remaining to process dirbks set bls/32 ;;number of entries per block dirblk set 0 ;;fill with 1's on each loop rept 16 if dirrem=0 exitm endif ;; not complete, iterate once again ;; shift right and add 1 high order bit dirblk set (dirblk shr 1) or 8000h if dirrem > dirbks dirrem set dirrem-dirbks el&s, ; while the value of "enddat" defines the next location ; following the end of the data area. the size of this ; area is given by the value of "datsiz" at the end of the ; assembly. note that the allocation vector will be quite ; large if a large disk size is defined with a small block ; size. ; dskhdr macro dn ;; define a single disk header list dpe&dn: dw xlt&dn,0000h ;translate table dw 0000h,0000h ;scratch area dw dirbuf,dpb&dn ;dir buff,parm block dw csv&dn,alv&dn ;check, alloc vec&u als&fsc ;same allocation vector size css&dn equ css&fsc ;same checksum vector size xlt&dn equ xlt&fsc ;same translate table else secmax set lsc-(fsc) ;;sectors 0...secmax sectors set secmax+1;;number of sectors als&dn set (dks)/8 ;;size of allocation vector if ((dks) mod 8) ne 0 als&dn set als&dn+1 endif css&dn set (cks)/4 ;;number of checksum elements ;; generate the block shift value blkval set bls/128 ;;number of sectors/block blkshf set 0 ;;counts right 0's in blkval blkmsk set 0 ;;fi&n-1) ; ; each parameter-list-i takes the form ; dn,fsc,lsc,[skf],bls,dks,dir,cks,ofs,[0] ; where ; dn is the disk number 0,1,...,n-1 ; fsc is the first sector number (usually 0 or 1) ; lsc is the last sector number on a track ; skf is optional "skew factor" for sector translate ; bls is the data block size (1024,2048,...,16384) ; dks is the disk size in bls increments (word) ; dir is the number of directory elements (word) ; cks is the number of dir elements to checksum ; ofs is the number of & ,se dirrem set 0 endif endm dpbhdr dn ;;generate equ $ ddw %sectors,<;sec per track> ddb %blkshf,<;block shift> ddb %blkmsk,<;block mask> ddb %extmsk,<;extnt mask> ddw %(dks)-1,<;disk size-1> ddw %(dir)-1,<;directory max> ddb %dirblk shr 8,<;alloc0> ddb %dirblk and 0ffh,<;alloc1> ddw %(cks)/4,<;check size> ddw %ofs,<;offset> ;; generate the translate table, if requested if nul skf xlt&dn equ 0 ;no xlate table else if skf = 0 xlt&dn equ 0 ;no xlate table else ;; genera&tors endm ; disks macro nd ;; define nd disks ndisks set nd ;;for later reference dpbase equ $ ;base of disk parameter blocks ;; generate the nd elements dsknxt set 0 rept nd dskhdr %dsknxt dsknxt set dsknxt+1 endm endm ; dpbhdr macro dn dpb&dn equ $ ;disk parm block endm ; ddb macro data,comment ;; define a db statement db data comment endm ; ddw macro data,comment ;; define a dw statement dw data comment endm ; gcd macro m,n ;; greatest common divisor of m,n ;; &lls with 1's from right rept 16 ;;once for each bit position if blkval=1 exitm endif ;; otherwise, high order 1 not found yet blkshf set blkshf+1 blkmsk set (blkmsk shl 1) or 1 blkval set blkval/2 endm ;; generate the extent mask byte blkval set bls/1024 ;;number of kilobytes/block extmsk set 0 ;;fill from right with 1's rept 16 if blkval=1 exitm endif ;; otherwise more to shift extmsk set (extmsk shl 1) or 1 blkval set blkval/2 endm ;; may be double byte allocation if (dks)&tracks to skip (word) ; [0] is an optional 0 which forces 16K/directory entry ; ; for convenience, the form ; dn,dm ; defines disk dn as having the same characteristics as ; a previously defined disk dm. ; ; a standard four drive CP/M system is defined by ; disks 4 ; diskdef 0,1,26,6,1024,243,64,64,2 ; dsk set 0 ; rept 3 ; dsk set dsk+1 ; diskdef %dsk,0 ; endm ; endef ; ; the value of "begdat" at the end of assembly defines the ; beginning of the uninitialize ram area above the bio&produces value gcdn as result ;; (used in sector translate table generation) gcdm set m ;;variable for m gcdn set n ;;variable for n gcdr set 0 ;;variable for r rept 65535 gcdx set gcdm/gcdn gcdr set gcdm - gcdx*gcdn if gcdr = 0 exitm endif gcdm set gcdn gcdn set gcdr endm endm ; diskdef macro dn,fsc,lsc,skf,bls,dks,dir,cks,ofs,k16 ;; generate the set statements for later tables if nul lsc ;; current disk dn same as previous fsc dpb&dn equ dpb&fsc ;equivalent parameters als&dn eq ''te the translate table nxtsec set 0 ;;next sector to fill nxtbas set 0 ;;moves by one on overflow gcd %sectors,skf ;; gcdn = gcd(sectors,skew) neltst set sectors/gcdn ;; neltst is number of elements to generate ;; before we overlap previous elements nelts set neltst ;;counter xlt&dn equ $ ;translate table rept sectors ;;once for each sector if sectors < 256 ddb %nxtsec+(fsc) else ddw %nxtsec+(fsc) endif nxtsec set nxtsec+(skf) if nxtsec >= sectors nxtsec set nxtsec-sectors endif'eTWORK ENROLLMENT APPLICATION ---- Page 1 Please complete the form below by [Field] Selection: (Press ENTER or RETURN after data is entered) [1] User Name - [ ..] [2] Company - [ ..] [3] Address 1 - [ ..] [4] Address 2 - [ ..] [5] City Name - [ ..(] [6] State - [..] [7] Zip Code - [.._.] Please select the [field] you wish to change: (Type N for No Change or X to Abort)-| ----''d. | Enter one of the following: N for Next page of the User Information Profile, OR X to exit profile editing Your choice- |Enter the J number where the printer is attached..(4 or 6) - | Please select the baud rate of the attached printer: 1 = 300 Baud 2 = 1200 Baud 3 = 2400 Baud Your choice- | Is the above information correct? - | Parallel printer attached | Serial printer attached |to connector J4 |to connector J6 | Printer speed is 300 Baud. | Printer'  nelts set nelts-1 if nelts = 0 nxtbas set nxtbas+1 nxtsec set nxtbas nelts set neltst endif endm endif ;;end of nul fac test endif ;;end of nul bls test endm ; defds macro lab,space lab: ds space endm ; lds macro lb,dn,val defds lb&dn,%val&dn endm ; endef macro ;; generate the necessary ram data areas begdat equ $ dirbuf: ds 128 ;directory access buffer dsknxt set 0 rept ndisks ;;once for each disk lds alv,%dsknxt,als lds csv,%dsknxt,css dsknxt set dsknxt+1 endm e' --- CITY/NETWORK ROUTING DATA ------- Page 2 The following fields will assist in the efficient routing of your calls. Please complete by [field] number as before: [1] Type of phone to be used: [.] (Tone or Rotary) [2] Second dial tone required? [.] X [3] Prefix for second dial tone: [.] (If [2] above is Yes) [4] Largest No-Toll City: [ ..-] [5] State [..] [6] Preferable Toll City: [ ..X] [7] State [..] [8] 1+ Dialing for L/D calls? [.] [9] Telephone Area Code: [...] Pl'VLͯ  *M !6q  !6q  !q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f N  :2!q: " *M nN :2!cVLͯ  *M !6q  !6q  !q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 :XH:XœB-!3C!cCi+B!C:O:AA:AO:AACNVLX <9A:' speed is 1200 Baud. | Printer speed is 2400 Baud. |2400 Baud Your choice- | Is the above information correct? - | Parallel printer attached | Serial printer attached |to connector J4 |to connector J6 | Printer speed is 300 Baud. | Printer speed is 1200 Baud. | Printer speed is 2400 Baud. |2400 Baud Your choice- | Is the above information correct? - | Parallel printer attached | Serial printer attached |to connector J4 |to connector J6 | Printer speed is 300 Baud. | ---- NE'Unddat equ $ datsiz equ $-begdat ;; db 0 at this point forces hex record endm ;  fac test endif ;;end of nul bls test endm ; defds macro lab,space lab: ds space endm ; lds macro lb,dn,val defds lb&dn,%val&dn endm ; endef macro ;; generate the necessary ram data areas begdat equ $ dirbuf: ds 128 ;directory access buffer dsknxt set 0 rept ndisks ;;once for each disk lds alv,%dsknxt,als lds csv,%dsknxt,css dsknxt set dsknxt+1 endm e'W2A:A2A*A:K$BNPBHB:@1HB!D$C4PB6HB<92B>P2ðA>S2!D$C1vB2{B3ʀB<9[B>ÙB>ÙB> ÙB !6  *&2A-!3C:SB!zE:K C:@1 C!E C!E:KB!E:ABB B!FC!EC!EC C!QEi+A>X2ðA!D!+!~ ------ PRINTER STATUS ------ Page 0 | Is a printer attached to your computer at this time? (Y/N)- | If you attach a printer later, this page of your User Information Profile must be re-edite'