TD5+_ 33 (!4>4& \X ©RIGHT (C) 1979, DIGITAL RESEARCH %_͌> ͒> Ò> Ò͘~#͌ì _2<ԯ2 Շ!۶2:2a{_:۷ʖ:۷>Ľʖ:=2–!B!6#5ʖ:۷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$>!Y2*O"ʉ@G::wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USER6!yO#< Ty#O 3ׯ21y_͸2y2ͽ:ԷO*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:页o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A߾#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# P1͘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!~ڇ ٯw4!Y~ʆ͌†t=ʆf ^ T ٯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧÆFILE EXISTS _: É: :۷ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2ۯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOS: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:!ʎì 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<ʄADCOMf^: !۶  $$$ SUB$6ܙܥܫܱ"C{2!"E9"1A߯22!ty)K!G_^#V*Cސ~E ,&-AGMSߛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B 2>: ߷b# : ߷y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD #2E>:! ^#V w#P:BO|^#V#"##"##"##"!Mi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B߾w!>2*C~=2u:B2~2wE:A*C߶w>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C46:ʑw:2E**E}DQ>2'IY,%RE:Ym_ E $$E BbL /,nvx{78;khfsz45piyrw 12[.m bc0 outeq 'ljgda>-97532\=08641963.+-X ?,NVX}78:KHFSZ45PIYRW 12].M BC0 OUTEQ "LJGDA<_(&%#@|+)*^$!963.+-3       m x{mÒiy2x2>2!:ij!6#:w##F:PP w2#~q2yO:2#:O*| Nq͂!~6## ! ><2! {!6~&! #~m:=2O~#~yq#~ty  TDrive is not responding is write protected error detected. Please reinsert diskette, push any key to retry T!!5 !!>2x!}:AO != 0 _C]!͂t!f2>x!w!~w4!"!~ w4~w4ͩ!6~£>>^w2{_~2~@`i""^#V#"/:O:>> >P&>N&::P&PW!6#q#p#:w#zrPG6O>d2!N#{!6~[#~p!5G!6 ~u({{~)# {͚{!>6#= 6(Ҫ)w#ê> > > Ms1y2( 2(>)͚{MM!~5!~ 5 6d!~4~4!~0D D*+"|D:42!~P5Y!~w4:l:Pl>MD  9        Eagle CP/M version 2.2.C (Double sided version)1!6S!6> > > > > >> >>>>>>>p> 22!L!T!\:62 !(:Է!B:8̈́~y2-~O# 22> 21>,2Y!5v*"!4:=F6*#"F̈́:9!+:8O”"|""" >2!"2!"!":O>242>*:}|*@}|>>! ! !}|G^:966~#O !xf!f!f!>!:j!:j!:j!V:_^#Vɸ:3 R F!8ʸO>0y>>y>!<#> O>0y>>!y>[!B#4> 0 />!F~ʀy ] kÀ#4~#+€6À#V6#^+z ͌r-uD IuI DuD {bu{b D+uD+ (05@(05@G?L? D ),),9ϋnT:Fʌy 8ʌy> > 5>5_ʦ6`ҦO{_P!^#V ~Oʦa{5@y_O0>s1}:­yH\p ] U v |ʁʛʧ H:O͓}O[͈ͤ{ͺH.:jHͫHͳHͤH.H! ͓ͤ|†>2FH:g.ͫH2Ky=+*)%(-T4Y:Z:U=Uy P>Oo:gNy >G:<2>2K2Á>2U2UU:U.ͫ:2H2K!~K:7Kw!~@4wͩKIoHg|M}L0ʓ}1|2y3,}P.$|&-}P.O%|&:gͫ|2.K ͓ͤ}:2`i"`i"&iy2!y ;2@z;"2!~<2!~2#~2ɯ!o&))))rN#F+ ^#Vɯ2>22>22y2‹:2!:=2!{!4:=Һ6*#"22<2s12:O : 2!~6!{ :.:͎2!::ć:!o&)))))))9*:X>2::ss2͎:{#+PIP COM:STAT COM) DDT COM& SUBMIT COM XSUB COMSYSGEN COM ED COM4LOAD COMASM COM@MOVCPM COMLDUMP COMASSIGN COM0 !DISKUTILCOM,"#$DDISKUTLCOM,%&'ICPM60 ASM (KEBIOS ASM)BCDEFGHIJKLMNOPEBIOS ASM|QRSTUVWXYZ[\]^_`EAGLEII  CRUN2 COM *+,-./0123CBAS2 COM&3456789:;<=XREF COM8>?@AD COMbcHHHH_HD!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 * "}*}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  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  ;(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$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 $ :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!/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:[ v221@: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:> !/>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*^*M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`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>*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ͯ DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H: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͈*÷: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ͬ!\-:>>!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:ͯ !&6E3 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 Status : 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*(&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: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͈*i 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!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*͠"g)*)) *)) 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 *) >*) 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: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͐?"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) 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͠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!)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"<=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ͷ 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# ' ë «   Ͷ ͐ =« 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!~  ! _^! ^#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!"28!"9:] !í 1")*)þ))>+><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 $I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A"$$$I$$H!!! BH" !I B  $$!BD! $!BI D@"!$I$$H"!I$I$I$UUU$$A$ /x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_͓ !" >- Ͷ 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. 2|2\  !]w# ʫ .&  0 6 #& .K !e K w# ʫ : U 6 #K 6AW w#] !e~H#~E#~X*}|́ "!́ ͐ !ʬ =« f kʫ j \͢F w# ͋ t ʫ : W& _& & O { `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #N  *. *.  NEXT PC͐ =« f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å D  !  #{HW 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=2% ͋*-"*$$$ SUBq:(=2(N *$*& w*$#"$*&#"&' !"N*M^7 !)6:!)ھ *N*DM͆ 2*ʭ :*ʗ ͯ *N"P*6:2)÷ *N"N!) $@BA$! A "!$"" ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7***x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6= 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\:=ͧ!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>}|ͧH-!6]:ͧz2~e:~2O! 6*~& 6$>!~_z*~& w!~5Bx:yͧ*v+"vv ~_{ozg 001 $$$$ SUB ͊!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\:=ͧ!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) 1978, DIGITAL RESEARCH `  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_o&)))))))a{__> ͣ> ͣͪ~ͣ#úO****!*$*'! "=>2:!:4:(ʝN>2;:)!;4ʌ!;^!*FNy͊*=DM2?:?o!ͺ͕ ͪ"<2?:<ʂÅ"S:)͊*="= :<1`!ͺ:] \<! ͵2|\ ! DM\|!"͵!͵͕ |A*A2KA|$ ^#V2)! ~2(ͪ!Aͺ͕ͪ o2<!ͺ!_͵͕ Aڡ|A2A|ʛ ^#V2)! ~2(!͵͕ͪ |!<6!ͺ|>ͪ!͵SYSGEN VERSION 2.2.BSOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE s!!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: *#"͎! 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/!:"8A, B, ETC)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETE$VWXYZ[\]^_o&)))))))a{__> ͣ> ͣͪ~ͣ#úO****!*$*'! "=>2:!:4:(ʝN>2;:)!;4ʌ!;^!*FNy͊*=DM2?:?o!ͺ͕ ͪ"<2?:<ʂÅ"S:)͊*="= :<1`!ͺ:] \<! ͵2|\ ! DM\|!"͵!͵͕ |A*A2KA|$ ^#V2)! ~2(ͪ!Aͺ͕ͪ o2<!ͺ!_͵͕ Aڡ|A2A|ʛ ^#V2)! ~2(!͵͕ͪ |!<6!ͺ|>ͪ!͵SYSGEN VERSION 2.2.BSOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE "&! 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: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* 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!f6 *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 :! *+"  v: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*`#"`:*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**ͪ"*! ͪ":!! Q*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.$: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  6: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{.*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  H 5!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 9@ 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: 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 "= !   x6Y: !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+: Y2A 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+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= !  ak`!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ  11*" COPYRIGHT(C) 1978, DIGITAL RESEARCH M ! á 4êü /L9ASMPRNHEX 2  !)ͼ !ͼ :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:  :6y:! 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*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪ 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~ ͅͰ>2lyPLnR>UX:l̅2l͓*>E 2C!" """ :ʼ:*1 |R|ͦ0FIL: R  R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#H vÛc*| EH bͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2  4 @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$>O$:Ğà\ÞØ`rÍÖ![w#w#b!"!F#v2[G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"* :|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSxS 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ixH ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1: :,; c*| } 8OĽ 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/?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!o#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8n!~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fk ,COPYRIGHT (C) DIGITAL RESEARCH, 1979 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#!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$ #~?  xDIR ERA TYPESAVEREN USER6!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  ͢ØÆ^ 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  >ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q* {=qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !  $$$ SUB$6"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  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 # <@P1y{0!B0}y|zx0y0{00 \X ©RIGHT (C) 1979, DIGITAL RESEARCH %_͌> ͒> Ò> Ò͘~#͌ì _2<2 !2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ =_.:;<> Oo$>!Y2*O"ʉ@G:z:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  !   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 *# ) :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͌ 3MOͧ>~ͻ>2!"2!"28!"9:O R![?boot  ç!y2fyʒ>0G!h~ϰwi&))))3!jq!kq ~2koi`"l~Oj#!h~w !kw ?L:f>gn yxzӉxӊY?28L28L8 >:fIyۉ:fV{ۋ:fcxۈU @$@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$ +: :/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~͔͔# #  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 \֒ HI DIA!$$$ $" "$D ! $"  $AB " BDD $$D!"DI$!$BH!"IB I$"D HD" " $"! @H !BI " I  $I$I$DI$ !I$@"$"$! $I$I( 5  BIB@!  ! !! D *15D715E0AB :100A700015E615EC15F515FE1504160A1611162CBB :100A80000E17161D1626162D16411647164D160E54 :100A9000155316040C040C9B1 @$@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$  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*):B  " *)*)Q;*"E :;:A  2A QÓQÜQ*C }/_|/*W}_*"}o|g":ʑ*C 6:ʑw:2E* *E }DQ>2'óadjmrux}çìûpñns ns<nskLns{?      00k CP/M vers 2.2 1!21 ͻ}ͧͬ,I*lDMͻ:k:j<A!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+++ #PDT COMA#$%&'PFMT COM&()*TRKA0 COM+SEEK COM,TERMINALCOM-STEP COM. DUMP $$$ CPM60 COMZ?FGHIJHELLOSYSCOMZ@BCDELSYSMOV AM0;<=ASSIGN AMZAMNOPQWRHELLO AMR2DISKUTILBKQSTUVWXYZ[\]agiICPM AM KACHELLO COMjWRHELLO HX^#*v ~w<ʮ͆ͥʮAYBYC^DYXUZʮ)c>c>c2x !6>͍)!:x w!5îr<[͆ͥ[123 4 567 8[>>>2y !~6>͍rr!:y w!5rr!q~w͆wkͥ  NYʑw͆ͥYʶNʻ ʶÙ*v q:q@2q: ͆ͥYN%͆ L L> 2 ><2 >P2 : OL! 4~,6 ! 5 L L! 5 L__: MB S͆*v #~2} 2 !" " >2 J  ^#V2| O>-ڥÝ2 2 x2 2 :} OV b n z t* " ! 4:| 6* #" ·: 2 * " * " *h~ :} O~#} V b n :} ;͂ t* " ! 4:| `6* #" !} 5&:q2q ͆ ͆ _~_#Õ¥ʲa{_O > ( ͆y, ͆ͥ 7 0 H: 0OOͥ 7 0, :2  0y*** K *K *K *K *!*$*'E EEE"E4EEEhE4hE EEE"E4EEEhE4h  ! , 7 A K U _ 9600 Baud $7200 Baud w$4800 Baud $3600 Baud $2400 Baud $1800 Baud $1200 Baud $600 Baud $300 Baud $150 Baud $110 Baud $75 Baud $=kEE"E4$Sorry, this version of the program will not work properly with the current version of the operating system Program aborting $ $?$ Assign System Parameters - Version 1.07 $ Your options are: 1 - Select the line printer 2 - Select parameters for serial port A 3 - Select parameters for serial port B 4 - Save the current parameters 5 - Disable the beeper 6 - Test the currently assigned line printer 7 - End this program Which function would you like to perform? $Please select a baud rate for serial port . Valid baud rates are: A = 9600 B =1*> ~}"v 1!q~w*v ~!OO! O!*:q 2q"kyʦ*v "z F#N!  $x~##h^#V"m*z ~#!Tʣ!yʣ!"o1 ͆͆!L͕*k͆:q !Q͕H͆*m͆!V͕*o͆k ͆ͥ2H3[5ʓ1[4k67###:qO@?y?͆wk ͆>A2 :q2qn[>B2 :q2qv[>{> 2 *v "z  ͆ͥZUAڢMڨËO:q@2qyA_! *z wG#wO: xyxy ͆ͥZYNUZ*z 6#6P*z 6$# ͆ͥZL9HF!*z #6$P*z #6:q@2qA͆ͥA~BʌCʚa>A2 >ã>B2 >ã>ã!q/@w*v ~?w!~?w!q~w~n~v!  6:!)*v " *͆w͆ͥ  1J2P3V4\5m![_!__!c_!g ~ʏ#b !h ^#V#͆ʏ u* ! * ~: ͆ͥ[YʛNð* ~O#B : W͆ͥY3j 7200 C = 4800 D = 3600 E = 2400 F = 1800 G = 1200 H = 600 I = 300 J = 150 K = 110 L = 75 U = Use the current speed Which speed would you like to use? $ Would you like to check for a busy signal on this port ( Y, N, or U)?$ Is the port busy on a High or Low signal ( H or L )? $Which port do you want to use as the system line printer? Your options are: A = Serial port A B = Serial port B C = Parallel port B (Centronics) Which is your choice? $Would you like to disable the beeper ( Y or N )? $ Would you like to send special control characters to the line printer, i.e. condensed print - (Y or N)? $ What type of printer opertion would you like to perform? Your options are: 1 - Normal printing for a Centronics 737 or 739 2 - Condensed printing for a Centronics 737 or 739 3 - Normal printing for an Epson MX80 4 - Condensed printing for an Epson MX80 5 - Others Which is your choice? $You may enter up to seven characters. Please ente D D D D { x x U 1*.":5!   ͱ>42>>>!}|G^ ͱ͹1ʱ2ʿ3456789ʧʧʧg ͱ> ! >\ > >sh ! >* ! > !H >@ >` 2ͱ6ͱ!">2>2:@†:W:2;WXT7:w:2!q,́w TW:ʗ:2;ʗTw:ʷ:2!q,ʷTw: :2!q́*Tw: !q!q,K~W## xz 2=wJ7 ͱ:*:2,:2,aͱ͹Y9!:w!4~!ɯ*#*ڄ"ڄ*z}{ڄ>ɯ:2!q," ]”::ʪڸWx'Gzêx'-"!>2:-"ͱ/6!q,"*"*"!"*́*#"J ]  Tͱ6!q,"*"*": X;XXT>*jT>!q́| T>!q*K~W## xŠzʪ2=>J]*+"|>:'2!: ͱ!))h^#V#S^#V#ɯ2<2r the ASCII value of the character in decimal. If you want to erase a previously entered string, enter 0 for the first character Enter the 1st character (nn, or 00 to end) $ Enter the 2nd character (nn, or 00 to end) $ Enter the 3rd character (nn, or 00 to end) $ Enter the 4th character (nn, or 00 to end) $ Enter the 5th character (nn, or 00 to end) $ Enter the 6th character (nn, or 00 to end) $ Enter the 7th character (nn, or 00 to end) $The assigned line printer is not ready at this time. Would you like to try again (Y or N)? $Printer test in progress. Push ESC key to stop.$Some parallel line printers do not advance the paper to the top of form when a form feed character is transmitted to it. If you are using such a printer and you would like the operating system to generate a top of form, please push the 'Y' key. $Please wait while the parameters are written to disk$What kind of printer are you using: A) Diablo daisy wheel printer or equivalent B) Qume daisy wheel printer C) !~ ͦ~$ͦ> ͦ#Ɛ'@'$g o0. ͱ!~ ͦ~$ͦ__ͱ1ͱ͹a13ʀ2ʑe ͱ1>42a_ ¹a{_O >  ͱy ͱ× ͱ:G:O:_!:p#q#r#s#= >6#=$:2VͤG!6#6#: w#:OG:w#:w#:w#:w#>w*"!">i2V>26*2 ʝ2ͽ**#:2A*2+2**#:2!6#6 #:w#:OG:Vw2#:w:2#~q2#:w#:w#:w#:w#:wV!~##:¶ͭD͂! ><2!N# !6~! #~G:=2DO~=#~Dy1#~4y͂Dͤ͟D!5>!~w>2>2!~ w4>>~w4!6~|:O:>”>>Pڸ>Nø::ʸWʤ!6#q#p#:w#r>d2!N# !6~#~!5> 2:5NEC Spinwriter model 5510 or 5520 D) NEC Spinwriter model 5515 or 5525 X) Any other type of printer Z) Bypass this section Your choice please? $STR INLsing: A) DiabWhat kind of printer are you using: 1) Any non-precision printer 2) Diablo 16xx, 17xx series printers 3) Diablo 630 printers 4) Qume Sprint 5 or Sprint 9 5) NEC Spinwriter 5510 or 5520 6) NEC Spinwriter 5515, 5525, 7715 or 7725 7) C.Itoh Starwriter 8) Bypass this section Your choice please? $PRINTER V : Serial Port A.$PRINTER : Serial Port B.$PRINTER : Parallel Port C. $BAUD RATE: $  No Printer Busy Signal. $  Printer Busy High Signal. $ Printer Busy Low Signal. $Current System Parameter Assignments - $The assigned System Parameters have not been saved. Would you like to save them (Y or N)? $="H=#H=$H     SB INL Printer Busy H7(   ~)#  &  !>6#=, 6(6 )w#6 > > > M2( 2(b o >)& MM!~ʆ 5!~ʟ 5Ÿ !~4~4!~0 *+"| :24>M$ $?$Double$Eagle Single Sided Floppy Disk Utility Program - Version 1.05$ What operation would you like to perform? Your options are: 1) Copy from the top disk drive to the bottom disk drive. 2) Perform a read only test on the diskette in the top disk drive. 3) Perform a read only test on the diskette in the bottom disk drive. 4) Format the diskette in the bottom disk drive. 5) Copy the top disk drive to the bottom disk drive with formatting. 6) Format the diskette in the top disk drive. 7) Perform a single disk drive copy. 8) Perform a single disk drive copy with formatting. 9) End this program. Your choice please? $Format and read test on bottom disk drive is in progress$Format and read test on top disk drive is in progress$Copy and verify from the top disk drivCe Copy ---- This is pass of passes. $Please insert the source diskette (the diskette you want to copy from) into the top disk drive Are you ready to continue (Y or N)? $Remove the diskette in the top disk drive and insert the destination diskette (the diskette you want to copy to) into the top disk drive. Are you ready to continue (Y or N)? $zlP@Ov ),),ϋady t0Lto format in the top disk drive. Are you ready to continue (Y or N)? $   ** * WARNING  ** * @* * ANY INFORMATION NOW STORED ON THE DISKETTE * * %IN THE TOP DISK DRIVE WILL BE WRITTEN  * * $OVER AND DESTROYED BY THIS OPERATION * * * ** $---- Single Disk Drive to the bottom disk drive is in progress$Format, copy and verify operation is in progress$Read only test of top disk drive is in progress$Read only test of bottom disk drive is in progress$**** OPERATION ABORTED **** $ Operation was successful $ Read Error on top disk drive. Status = $ Read Error on bottom disk drive. Status = $ Format Error on top disk drive. Status = $ Format Error on bottom disk drive. Status = $ Write error on top disk drive. Status = $ Write error on bottom disk drive. Status = $ Data compare error. Status = $ What action would you like to take? Your options are: 1) Retry the operation that resulted in an error 2) Stop this operation and restart the program Your choice please? $   ** * WARNING  ** * n* * ANY INFORMATION NOW STORED ON THE DISKETTE * * IN THE BOTTOM DISK DRIVE WILL BE WRITTEN * * OVER AND DESTROYED BY THIS s D D D D { x x U 1*.":5!   ͱ>42>>>!}|G^ ͱ͹1ʱ2ʿ3456789ʧʧʧg ͱ> ! >\ > >sh ! >* ! > !H >@ >` 2ͱ6ͱ!">2>2:@†:W:2;WXT7:w:2!q,́w TW:ʗ:2;ʗTw:ʷ:2!q,ʷTw: :2!q́*Tw: !q!q,K~W## xz 2=wJ7 ͱ:*:2,:2,aͱ͹Y9!:w!4~!ɯ*#*ڄ"ڄ*z}{ڄ>ɯ:2!q," ]”::ʪڸWx'Gzêx'-"!>2:-"ͱ/6!q,"*"*"!"*́*#"J ]  Tͱ6!q,"*"*": X;XXT>*jT>!q́| T>!q*K~W## xŠzʪ2=>J]*+"|>:'2!: ͱ!))h^#V#S^#V#ɯ2<2  OPERATION * * * ** $Please put the source diskette (the diskette you want to copy from) into the top disk drive. Then put the backup diskette (the diskette you want to copy to) in the bottom disk drive B. Are you ready to continue ( Y or N )? $Please put the diskette you want to format in the bottom disk drive. Are you ready to continue (Y or N)? $Please put the diskette you want to format in the top disk drive. Are you ready to continue (Y or N)? $   ** * WARNING  ** * @* * ANY INFORMATION NOW STORED ON THE DISKETTE * * %IN THE TOP DISK DRIVE WILL BE WRITTEN  * * $OVER AND DESTROYED BY THIS OPERATION * * * ** $---- Single Disk DrivJ!~ ͦ~$ͦ> ͦ#Ɛ'@'$g o0. ͱ!~ ͦ~$ͦ__ͱ1ͱ͹a13ʀ2ʑe ͱ1>42a_ ¹a{_O >  ͱy ͱ× ͱ:G:O:_!:p#q#r#s#= >6#=$:2VͤG!6#6#: w#:OG:w#:w#:w#:w#>w*"!">i2V>26*2 ʝ2ͽ**#:2A*2+2**#:2!6#6 #:w#:OG:Vw2#:w:2#~q2#:w#:w#:w#:w#:wV!~##:¶ͭD͂! ><2!N# !6~! #~G:=2DO~=#~Dy1#~4y͂Dͤ͟D!5>!~w>2>2!~ w4>>~w4!6~|:O:>”>>Pڸ>Nø::ʸWʤ!6#q#p#:w#r>d2!N# !6~#~!5> 2:  OPERATION * * * ** $Please put the source diskette (the diskette you want to copy from) into the top disk drive. Then put the backup diskette (the diskette you want to copy to) in the bottom disk drive B. Are you ready to continue ( Y or N )? $Please put the diskette you want to format in the bottom disk drive. Are you ready to continue (Y or N)? $Please put the diskette you want to format in the top disk drive. Are you ready to continue (Y or N)? $   ** * WARNING  ** * @* * ANY INFORMATION NOW STORED ON THE DISKETTE * * %IN THE TOP DISK DRIVE WILL BE WRITTEN  * * $OVER AND DESTROYED BY THIS OPERATION * * * ** $---- Single Disk Driv(   ~)#  &  !>6#=, 6(6 )w#6 > > > M2( 2(b o >)& MM!~ʆ 5!~ʟ 5Ÿ !~4~4!~0 *+"| :24>M$ $?$Double$Eagle Single Sided Floppy Disk Utility Program - Version 1.05$ What operation would you like to perform? Your options are: 1) Copy from the top disk drive to the bottom disk drive. 2) Perform a read only test on the diskette in the top disk drive. 3) Perform a read only test on the diskette in the bottom disk drive. 4) Format the diskette in the bottom disk drive. 5) Copy the top disk drive to the bottom disk drive with formatting. 6) Format the diskette in the top disk drive. 7) Perform a single disk drive copy. 8) Perform a single disk drive copy with formatting. 9) End this program. Your choice please? $Format and read test on bottom disk drive is in progress$Format and read test on top disk drive is in progress$Copy and verify from the top disk drivCe Copy ---- This is pass of passes. $Please insert the source diskette (the diskette you want to copy from) into the top disk drive Are you ready to continue (Y or N)? $Remove the diskette in the top disk drive and insert the destination diskette (the diskette you want to copy to) into the top disk drive. Are you ready to continue (Y or N)? $zlP@Ov ),),ϋady t0Lto format in the top disk drive. Are you ready to continue (Y or N)? $   ** * WARNING  ** * @* * ANY INFORMATION NOW STORED ON THE DISKETTE * * %IN THE TOP DISK DRIVE WILL BE WRITTEN  * * $OVER AND DESTROYED BY THIS OPERATION * * * ** $---- Single Disk Drive to the bottom disk drive is in progress$Format, copy and verify operation is in progress$Read only test of top disk drive is in progress$Read only test of bottom disk drive is in progress$**** OPERATION ABORTED **** $ Operation was successful $ Read Error on top disk drive. Status = $ Read Error on bottom disk drive. Status = $ Format Error on top disk drive. Status = $ Format Error on bottom disk drive. Status = $ Write error on top disk drive. Status = $ Write error on bottom disk drive. Status = $ Data compare error. Status = $ What action would you like to take? Your options are: 1) Retry the operation that resulted in an error 2) Stop this operation and restart the program Your choice please? $   ** * WARNING  ** * n* * ANY INFORMATION NOW STORED ON THE DISKETTE * * IN THE BOTTOM DISK DRIVE WILL BE WRITTEN * * OVER AND DESTROYED BY THIS U; **'* ; ; MOVE CPM WHERE IT BELONGS ; ;** ; ; SET CONSTANTS FOR OUR CPM SIZE ; MSIZE EQU 60 ;MEMORY SIZE WE ARE USING BIAS EQU (MSIZE-20)*1024 BASE EQU 3400H ;BASE ADDRESS CCP EQU BASE+BIAS ;BASE OF CCP BDOS EQU CCP+806H ;BASE OF BDOS BIOS EQU CCP+1600H ;BASE OF BIOS LGNTH EQU 10*1024 ;LENGTH ; ; THE FOLLOWING INFORMATION IS USED BY THE BOOTSTRAP ; ORG BASE-80H ;THIS IS WERE IT WILL GO DW 10 ;TOTAL SECTORS TO LOAD DW BASE-80H ;ADDRESS TO LOAD DW MOVIT ;PLACE TO GO AT END OF BOOT DW 0 ;EXTRA DW 0,0 ; ; ; THE BOOTSTRAP SHOULD COME HERE WHEN IT IS COMPLETE. ; RELOCATE THE OPERATING SYSTEM, OVERLAYING THE ; BOOTSTRAP, THEN ENTER AT THE BOOT ENTRY IN THE BIOS ; MOVIT: DI ;DISABLE JUST IN CASE LXI D,CCP ;POINT TO OUR FINAL RESTING PLACE LXI B,LGNTH ;THIS cIS HOW LONG IT IS LXI H,BASE ;THIS IS WHERE IT IS NOW ; MOV1: MOV A,M ;GET A BYTE STAX D ;PUTO  * ;*** ; WRALL EQU 0 ;WRITE TO ALLOCATED WRDIR EQU 1 ;WRITE TO DIRECTORY WRUAL EQU 2 ;WRITE TO UNALLOCATED ; ; PORT ADDRESSES FOR THE EAGLE II ; CTC0 EQU 00H ;REAL TIME CLOCK CTC1 EQU 01H ;BAUD RATE CLOCK FOR SIO PORT A CTC2 EQU 02H ;SIO PORT B CLOCK AND MAG TAPE CLOCK CTC3 EQU 03H ;INTERRUPT DRIVER FOR DISK CONTROLLER ; PO1AD EQU 08H ;PIO #1 PORTS PO1AS EQU 0AH PO1BD EQU 09H PO1BS EQU 0BH ; PO2AD EQU 10H ;PIO #2 PORTS PO2AS EQU 12H PO2BD EQU 11H PO2BS EQU 13H ; SIOAD EQU 18H ;SIO PORTS SIOAS EQU 19H SIOBD EQU 1AH SIOBS EQU 1BH ; SIORB EQU 01H ;RECEIVE CHARACTER AVAILABLE SIOTB EQU 04H ;TRANSMIT CHARACTER AVAILABLE SIOCS EQU 20H ;CLEAR TO SEND ; DMAC EQU 20H ;DMA CONTROLLER DSKS EQU 28H ;DISK STATUS PORT DSKD EQU 29H ;DISK DATA PORT ; SYSCN EQU 34H ;SYSTEM CONTROL LATCH ; ; SPECIAL BIT VALUES FOR THE SYSCN LATCH ; MTRST EQU 01H ;MAG TAPE FIFO RESET MTRON EQU 10H ;MOTOR ON m IT WHERE IT BELONGS INX D ;BUMP THE POINTERS INX H ; DCX B ;COUNT DOWN MOV A,B ; ORA C ;ARE WE DONE? JNZ MOV1 ;CONTINUE UNTIL ALL OF IT HAS BEEN MOVED ; JMP BIOS ;GO TO THE BOOT ENTRY ZE-20)*1024 BASE EQU 3400H ;BASE ADDRESS CCP EQU BASE+BIAS ;BASE OF CCP BDOS EQU CCP+806H ;BASE OF BDOS BIOS EQU CCP+1600H ;BASE OF BIOS LGNTH EQU 10*1024 ;LENGTH ; ; THE FOLLOWING INFORMATION IS USED BY THE BOOTSTRAP ; ORG BASE-80H ;THIS IS WERE IT WILL GO DW 10 ;TOTAL SECTORS TO LOAD DW BASE-80H ;ADDRESS TO LOAD DW MOVIT ;PLACE TO GO AT END OF BOOT DW 0 ;EXTRA DW 0,0 ; ; ; THE BOOTSTRAP SHOULD COME HERE WHEN IT IS COMPLETE. ; RELOCATE THE OPERATING SYSTEM, OVERLAYING THE ; BOOTSTRAP, THEN ENTER AT THE BOOT ENTRY IN THE BIOS ; MOVIT: DI ;DISABLE JUST IN CASE LXI D,CCP ;POINT TO OUR FINAL RESTING PLACE LXI B,LGNTH ;THIS IS HOW LONG IT IS LXI H,BASE ;THIS IS WHERE IT IS NOW ; MOV1: MOV A,M ;GET A BYTE STAX D ;PUTYHt PCOPYRIGHT (C) 1978, 1979, 1980 COMPILER SYSTEMS INC xw #^        !q!q{`i!N#F+͸!!q#xw6 ɗyOxG~O#~G+ ~#q#0:?ɇ:=2:<2Я/2ɯ2!K +T]~ fG+~Qs+T] Gʌ#~w!~!BÓz/g{/o# |>|>!  + ! > W!z#?>!> ' P'> '!~ȯw+6>+6='$`i~G2x2#:W:_!ɯ' #b7>'w #n7>'w #Á>Ø2i2:W³1!:iw `I1!`!`:iw:`G2hxW!q`1r!q= :hG:8!aa!>q$ a3!aTmÓ:h2Ó"L:!A!:!AH2H!!"I>2K*L~#"L:*Ia4=³A*Ia=!K5*I#"Iá: 3W=; ;**3* ; ; BIOS FOR THE EAGLE FLOPPY DISK SYSTEM ; ;** ; VER EQU 2 ;VERSION NUMBER ; TRUE EQU 0FFFFH ;VALUE FOR A TRUE FALSE EQU NOT TRUE ; ; DOUBL EQU FALSE ;THIS IS A SINGLE SIDED VERSION DFVAL EQU DOUBL AND 1 ;DISK FLAG VALUE ; ; ; ; "BIAS" IS ADDRESS OFFSET FROM 3400H FOR MEMORY SYSTEMS ; OVER 20K ; ; MSIZE EQU 60 ; 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 ; ; SPECIAL ADDRESS FOR CP/M ; BDISK EQU 0004H ;CURRENT BOOT DISK IOBYTE EQU 0003H ;I/O BYTE ; ; RETRY EQU 14 ;RETRY COUNT CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED FF EQU 0CH ;FORM FEED CS EQU 1AH ;CLEAR SCREEN ESC EQU 1BH ;ESCAPE ; ;*** ;*  * ;* BDOS CONSTANTS ON ENTRY TO WRITE * ;* XV:!w#zW@13w`i#j͓ !z@3- W-_!~ȓ_Aw3o{3-z+w>2`i22?G!ҤmÒa!~w:=2K:!KÏ!qÏ!͓ ů28>@2>2 :=2~#ɯ : 2 :x{22 M+d-g>20dr.ʗEʥeʥG&:$o:/2o ʥG-_ʺx½GOxG{G!~+ 2!xw-͓ !"g|3|)}/o|/g#>2]^#V#}o|gB5*g&$"g{-Ó'd !} ~5*~ ~z+"~ 0:} ɷG>0͔x=È*p w#:{ :n :m ʿʿ6,#"p :> >-!"~ >2} `i"p :i g: 2m 2l 2n 2k 2o > ͔ > 2}  !i ~2k w͔:@2o !n OO6>2m > 2l 6!o pZ2m /<2l  I:O•2m 2o 8:| ʆ=2u :r > Ĕs :r ʢ͔:n !o 6 y@Gʺ/%͔2{ 2r 2s ffff?hfffffA>533333>=ii<0$;9"sU':9"sU'9BT8!%8hxVg 7"hC60wYEG417Gv@`v'b1AAPX#C`QI"U&Àe(HBCTbDvRWaGv"C%T$a'ÙH%Csrb"(HdA1AAXS&YA1AIy&cypt dYd?Sh&&iyv&3uF=84SY592xXT(E133@P5D @cbe@(u?Bp6W>W"f(@E3SxI͗I1͒NI~͗! DM=v ×xʯ ʯ< O*C4|ͅ"q**Cs#r#6LSaF#~ Oͅ*Cs#r~# **C {_zW*Cs#r#w#w#w*Cw#w#s#r!C^#V^#Vz###~X#{_zW{_zW+++++UMOax!R"&6 #x’+6{z+++Fr+Nsq#p#s#r#6`i##s#r*&^#VN#Fx###~p+q`is#rR*a+6++++^#Vz!~*tC~2C*tC#"tC]:E4 ] :vCFù:vC:wCTH:xCRHҳ!C6] ,}"C]*tC~,¡] }"Cð>CUB°ö]>2!C!C62:C2ACBC*CM*tC\!AC"tC:C=2C*tC#"tC!Cs+q!C 1 :| 2m Gy@w:r !s >0 >0 4!m 5<2u :m !l G:n I :o OxGxs W?< =V zz !~s g:u ¡ :s !r  :m :| >-͔ G:t OW*ʵ $µ $ :s !r  O z͔ y͔:i :|  :r : :m >0̔͂ !m ~ 5i͔ :m ͇2{ :i 2 !j ~ҕ 6>.͔:n V :o G:l N GO 2l x͇͂n !l ~n 5i͔V :l ͇:i • *p +~0Š 6 ~ .ʐ #6 "p :n >E͔!o :i ¬ 5~ /<-Gy͔x/ Gy͔x0͔:s ͔2s 2r :i > ͔:k 2i *p 2 2 `i#" " GOW~# < /: &: !: \< #< NUa# y2z z2y ! ~\ : w* b 5* ~#" 2 ɯ2j :z z NNa`i"p : # $Ÿ I $ >$͔:  *± I * >*Ö . I #>.– 2| 1 - I # .>-– >2r 2| O1 >2r \I ĔI  2t  > 2t  I # ,& >2{  !| q.B >2j I #B 6 !l q^U I H !n q-f >2s I *p DM*w #"w ~:v =2v >w > n Ô:y œ SNa`i"w xʧ 2v bk"p : / ! & \I ĔI ò ̓ I ʖ / ̓ I *p w  n ͔ `i"p :vC6:C2C*tC"C:C*tC:CH:CH\:vC V*tCNͺ:vC<2vCO!vC Hq:C*tC~ H|]!"C!C6:vC!C*C&vC >9~0Hү*C!CA*C&vC >_"C!C4ˆ*C:C2C*C"tC*C##~*CN#F!Cp+q>CUB>*C~!Cq:C_AO>/!Cq:C0O> /!Cp+q*C~2C:C=2Cd*C#"C*CNͺ*CwCu*C"C*C^#V"C ҏ*C"CÙ*C^#V"C*C~2C!C6:C!C*C*C >*C*C~>*C#"C*C#"C!C4¥>#HPMa*C>`B>*C~2C*C^#V"CDMͣ*C^#V"CDMͣHO>*C~2C2C!C6:C!Cڇ*C&*C~\€!C4!C5!C4^*C~2C!CҘ>:C=2C:C!CO:C:C<2CO:Cß>!Cq!C6+6:C!C&:C!C>:C/*C&*C~\H!C6)!C4>!C4>*C&*C~2C:Cw:C?I>:C#`*C&*CN&:C!w*C&*CN!C6*C&*C:C!Cq!"C:C* HҴSSa*C^#V"C*C*CN#Fq#p#SSa*CN#F!C`B*CN#FͣHi #e /e !e &e $* I $e >$͔ *< I *e >*$ -S I #e .e >-$ \I e ͔I  *p `i~AҜ 6G>Mw!:A<2 )T])i_: =2 :}/o|/g# WzQS͑1I1!~G w!o|g~x>II1N͗=FI W2z1͏ DT͒!2>]iI1ͺ 1|}!#:ēI:-3 2>Ae1FI2!>iI1!u>iNI:AO>y/G ͗m͗II1N :W z1͒/:ҵ͗:͗/͒!~w::INI>iI1͗Iä1!~>w2:AQIIfFI>͗I1>6i:!wI[07HWgtA1A@P\d5bEHyed"BA1PYTAE(('@ @@I@hf_*C>w#61*C*CN#F*C4B!CscBL:CE:C<*CwL*C:Cw:Ca*C^#V"CÎ:C*C:C͚A*C~>B"CÎ*CC͎A+"C*C>CUBN4"C>4B·DMͅ"C*CDM*C\*C*C w*C*Cs#r1*CN#F`id @PEv2(<PdxPRINTER BUSY?$ IN LINE $ERROR $WARNING $IMPROPER INPUT - REENTER $AT LINE $1AC;5%1ACͥ%"v!(Eq*(E& !)Eq:E!E6*C|E !*E6E :*E) !*E6  ý*)E& *C|:E/HE !E6!+Eq:E/*+EM͘:*+E&   !-Ep+q*,E~$f*,EN*,E#",EL!/Ep+q*.E)))!1Ep+q!2E6>!2E!3E60*2E&) 0EJBڼ*2E&) 0EJB+s#r!3E4Í*3EM!2E4!8Er+s+q+p+q*7E+"7E7B*4E:6Ew*4E#"4E!:Ep+q*9E|O*9E}O>!D`B,7F*DDMt;;!"E>!E`BH0:E] ͈ ͈`0!Ep+q:E2?E!E6;HF*=EDM:?E2E!@Eq*@EM:@E_:@E*C#"C*C"C>>B"C*C"C"C!BEp+q"E* EDM*E?*CDMIh4%:E/%F#4%*C6 "C7_*C"C"C*C"C+"D*C"C*C"C"C"C*C"C"C*C~%*C#*C w*C>?*C#w*C~%4*CN!3 ^#V*CDM1*CDM͗*CDMIh4*CDM1*CDM͒*CDMIh4*CDM1*CDM*CDMIh4S44l&*Ci*C6A&҇&҄&*C i&қ&EN͑*C>w*CDM*CDM1*CDM*CDMI*CDMth4*C*C͎As#r4*C*CJB+s#r44*C*C^#VN#FA+s#r:yE*'*C B#+s#r44I'ZD͑*Cq#p`'*C*CN#F^#VͿA+s#r:yEv'*C B#+s#r4Ҍ'*C>w#6'#ҟ'*C>w#6'*C^#V"|E!"zE*CzEHB'*C^#V*|EA+s#r*zE"zEү'4*CN#F+q#p4*C B+s#r4*C*CͲA+s#r4*C*CB+s#r44͉ ͠44ͭ4ͺ4͉ 4ͯO?4eO?4*C*C^#VN#FͧO?4*CA+s#r4*C#"C*C*CN#Fq#p*C#"C4*CDM *C^#V"~E*C*~EN#Fq#p4͠ 4*C*CCAEHB!DEp+q*CECJB3*CEN#Fg*C*CEq#p!GEr+s+q*C#~œ*FE^#V"FECXBi*FEDMg*C"FE*FE^#V"HEDMҜ*HE~!EEڜ*HE+"HE~œ*FE^#V!*CDM*Ci*CDM*Ci*CDMJEiͭ*CJEi*CDM *CN#F*Ci*C~*C~*C>`B*C>`B*C~*C~*C#~*C#~!REq*C##:REw!SEq*C:SE^*Cq#pg*C>w#6:҄FO͑*C i!6*CDM1ҝ͒ã͗ͺ *Cq#p*CDM1*CDM*C"TE!"VE*TE>`B *TE ~*TETEHB>>B*VE"VE*TE^#V"TE*VE*C~2aE!"XE*C"[E*C"]E!ZE6*C~!ZEc*CN#F*XEA+s#r"XE!ZE45*[E"C*]E"C*XE*aE&A*C~<_DMͅ"[E"_E*C*_E w#6!ZE6*C~!ZE*_E##"_E*C*_EN#Fq#p!ZE4¤*C*[Es#r*C~2fE*C^#V"bE>4B EAa*C^#V"gE*bEN#F!eEq+6:eE!dEN ̀ *C*bE^#VN#FA*gE "gE!dE4 ̀ *bEgEJBc BSa*bE##*gE*fE&A *Cq#p*bE##"bE*CDM *C^#V*CDMi*CDM 1*C^#V"iE*CJB6!*iEN#F *iEN#F `i"kE~=w *iEN#F*CN#F%!*CN#Fs#r*Cn&"C14*CN#Fͣ+)U)*CN#FͣD)ͺU)*C*C^#VN#Fͱ4*C#:C<2CO!C q#p*C^#V"C4*C&C) ^#V"C:C=2Cң)GRa4445#ڼ)F#$4v!DM"4Ͱ!DM":i )4*CN#FͲ7*CN#F7V"4*CN#FͲ7V"45#(*F#+*I4*C*C^N͏4!E6$4!E6z$4v!DM94Ͱ!DMͬ9:i z*4!E6:E<2EO!4 >`Bʠ*Å*ͬ5*CN#F*E&6*CN#F͘74*CN#F*Ci4*C+"D4*C>w45#+F#z$4*C^#V"EDM/>EUBH3+*EDM 4404:i ڟ+!E6:E<2EO! ^#V"E!EcBn+K+EMB…+*EMß+ EEHBҗ+0ß+*EDM!4^!4ҵ+^!ý+*C##"C4J!47!4ͅ4!E6*C"E"4!E6z$4!E6$484c":4*CN#F|:4*C>w4*CDM͏ 4͚*DM N*CDMI4c,*Cq#p,v,*C>w#6,*C>w#64*CDMͤ4*CDM4*CDM)4ͭ*CDM*CDMͤS44*CDM 4*C EJB>UBH,LTa*CEHB,:*Cp `i"kE~!!*kE#DM *CN#F `i"kE*kE4*CN#F*C\*CC͎A++s#r W!7!Z!*C^#V"CD *CDM1:i Қ!Di !D7B!Dsì!D!D7B!Ds!D:i !*CN#FD͏ !D7B!Ds!D!*C^#V!nEp+qmEEHB" *E#"E!!pEp+q*oEDMͣ"*oE~2qE!rE6:qE!rEU"*oE#"oE*oEN*E#"E EXBN"0!rE4#"*C"4*C"4!sEq:i ҡ"D !D7B!Ds:sEҐ"D9Ö"D"!i 6!tE6:tE<2tEO>"*tE&4) >`B"*tEM|:ç"͢": *C|# #*C#"C"D :D:DH##"!D"E*D& 6 *D&D EXB*E"C;QF}*D#"D!CcBs#DOa*D~*E#"E~:E¨#EMBҡ#ͦ8*ED wͦ8#:E´#x#:E#\#!"É#2uE ##:E#!D" E#:E#*E" E#*D" E:uE" $!vE6,'$!vE6":E!$* E#" É#2uE!vE:uE+~ HP$*E#"É#2uE'$:vE"v$́#2uE,:uE Hv$X$#>EUB•$*C>w#6$*EM*C4"wE>4B¸$*E#DMͅ"wE*wE#*EDM* E\*wE*Es*C*wEs#r1#>!E`B%>!E`B%!n6N#F!4*CDMt4"EͩADM *E|:-͗*CDMI4*C|r-#E *'E&.B*&E& >B"x-*C"4HҒ-NL͑Ú-*CDM4*C*Es#r4*CN͈*Cw#64*C^#V"EDMͣ-CAa*E#~2E*C:Ew#64ͅ"E*E6*C*E# w*C*Es#r14͎4*CN#F2E*E&*Cq#p4͎4͎4:i 2E!i 6v!!Es!D5#~ ƒ.:D=2DD É.D 1:E2i 4*CN#F*CN#F_?*CDMI4*C*C^#VN#F1;"E*C*Es#r4*CN#Fx;"E*C*Es#r4*C^#V"EN*Cq#p42E*C:Ew#64ͅ4*C~=w*C~=HU/IOa*C~4B™0!" E!E64l!I4*CN#F͗4*CN#Fͬ5*C*C^#VN#F6*CN#FL72E:E0}4*Wa͔5*4*4{_zW{z<05:9͞5=9͔5!7!4>w*4|WDa#"C*4"C*4"C6}*4|u9*4|REa+"4;7҄98*4"4:4¢9L8*4! N#F p+q*4q!4>w:i 9,!4~6]9"]99"]9:i 9,!4~6]9 `i#~ O]9=9x `i#N]9=:*4}_|W-:z-: ]9: ]9 ]96*4|FEa#"C*4"C*4"C*4!,! w#w*4+"4!4~w6}J64 ^w#Vwz•:UCa"4͔558͔55=54 w#wJ64 ^w#VwzUDa"4͔554 w#w=5*}o|gyx"485$ͅ"4ͣ(;b6 5OSa(5(;͞5=;*4DMͬ5*4"4b64<RFa"4b6424b6*4 6?4ʾ;`*4O ~O ×;=524NO INTERMEDIATE LANGUAGE FILE $CRUN VER 2.38 $COPYRIGHT 1981 COMPILER SYSTEMS INC. $ REQUIRES CP/M V2 OR MP/M$!E"E!\"E:Cڒ<;F;F "C}s<Ү<VIa ͼ@2E*=!E6ͼ@:E<2EO!E Hqy$<þ<*EE?:<CNa*EDMI*ģCN#Fͬ5*C*C^#VN#F6*CN#F̈́74*C^#V"E*C*E w4Dͺ8l!4*C^#V"E>4Bʠ1*E~2E!E6:E!Eڝ1*E&*EN͈!E4~1å1?͈ ͈4*C^#V"E>4B1!"E4*CN#F *CDMI4*CDM 4*CDM͏ *CDM1 *Cq#p4*CN#Fͣ72.2*CN#F 1*CN#F64XIa4 2E *E& 4*C*tCs#r14 Җ2*Cq#pß2*C>w#64 *Cw#64͢"!C6!\"4*CN#Fb6 *C"C"C7ͼ@*Ew>*E#"E=?:E,>ͪ@a@ͪ@?:E_>ͪ@*E"E*E6ͪ@ͼ@\>ͪ@*E~<*EwE>?:E~c?ͼ@~`?:C]?:ES?*E"E*E^#V"ECXBS?>EUB+s#r*E ~<*E w¿>*E 6:E=2ES?*E*E& "E*E^#V"E*E##"E!"EEEHBS?*E^#V"ECXB=?>EUB+s#r*E ~<*E w=?*E 6*E###"E*E"E>*E"Eg>?ͪ@:E6:E7H:E`H:EHұ?@*EC͎A+*Eq#p@?:E.?@*E^#V)))E*Eq#p@?:E?@@=:C@*A*EECHB *E 6I*E 6N*E 6T*E 6 *E 6*E V@:CM@  ;F *E *E#"E!E7Bک@!D"ED W@ʐ@*E6é@D W@ʩ@*E 6*E*E w*E#"Ea@*E~2Eͼ@*E#wͼ@*Ew*E##"Eͼ@O`i.Bͼ@_MNa j4!4#54444<ECa!44"44*4DM!"5>25zW{_!55}5*5e5 |g}o"5*5|g}o"5P5*5*5DM*4.͌5"485*4"485xʺ5>@>5NBa`i>)=5. DMͅ"45 *4 "4"4}246Ô54*4$$*4 DM!45J64~#FDa*4r+s"4:4=6|6!4~@w6`i"4)x\6>>FNax7*4#  *4G7ړ6:”6w#>266ڪ6 œ6.¨6266 ÷6:66.6# 67*6:4>*6>266?#`6{6_:7*7?7w#:47FIa>? 7*4*4}O|Gxr# 27*4*4#{z"4b6 5]7!7>=5*4)4w#w4^#VzEOa#"Cb655!7EMab6 5<ʊ7!7J64 s#rJ64 ^#VzUFa"4*4)4 ^#V"45*4"4!46Ô5!4~w8:4BR=aURax8RIa *4E5*4{o>g+{z_yW8!*4 s#r!4~w"46͔5*4!,! ~#~!4>w:428(5!7!85͞5o8;7Ҕ88͌5"4L8:4L8*4~::͂8 *4|ʦ8ERa`i6͂8 8Vʾ8rþ8 656*4|6͂8 86!4~ЇwRt*C"E>EUB)A*E 6*E^#V"EA*C"E*E^#V"E>4BʋA*E>`BPA*E ~*E ~H~A*E DMÈA*E^#V"E0Ai`N#Fog_og_{ozgi`N#FogDM!>))덑o|gA =A^#V))) DM!>))A =AYPz_>#Wi`/o/g_{ozgi`N#Fog^#V) .B_{ozgO{ozgi`N#Fogo&og_{_z#Wi`N#Fog}!#}4:L*pOMͦ:L!*pO&!rOp+q*qO~$B*qON*qO#"qO(!tOp+q!vO6+6>!uOڶ!wO60*uO&9) sOLLڑ*uO&9) sOLL+s#r!vO6#4_:uO/!vOҪ*wOMï !uO4Q:L2xO:L2yO!L6!L6 L"BO""*@O#"@ODMC!?O6   :xO2L:yO2L!{Oq:{O 6 :M<2M3A!M4*{OM:{O V!>O:?OVͷ  !L6!L6W: €"×: ‘"×" . *M -ª! N6 *M 6 *M 6*MN!L6#6!L6!L6"*M~*M>@O:!|O6>!|OE*|O&*M~ ;*|O&*MN:|O<2|O" :Lfͦ͐O:L/vM:L҇  :LN. *MDMO -£:Nʹ:N2OOOb!3O6!S"N. *MDMM -:N:N2M:L MM$b!;M6*MO>Eb: :LQ!S"O*N+*L!~Os+6:~O!}Oڣ*OMʏb*O"O:}O<2}Ol!L6#6!O6!O6!L6!L6!L6!Oq:L*N#"N!9LI!"N*N*N:Ow!Or+s+! N !iO6=% !iO6::L2LP 2L >! Nҙ : N=2 N.!"* N&L?M DM*M -` "* N&L?M ! ~2>M*ʉ v: N– !iO6: .*M6 !>M6L :L :L h !4O6*M<2>Ml !>M6*l >*>M&*ڬ *OM! ^#V!L6ì !L6!L6ì !L6H2 COPYRIGHT 1977,1981 COMPILER SYSTEMS, INC'd  END # ()*+, -/: ;<= > ^ASEQ GEGOGT IFLELTNEONORTOABSANDASCATNCOSDEFDIMENDEXPFORFREINPINTLENLETLOGNOTOUT POSREMbRNDSGNSINSQRSUB!TABTANVALXOR"BUFF(CALL#CHR$DATAcELSE$FEND%FILE&GOTO'INT%LINE)MID$NEXT*OPEN+PEEKPOKE,READ-RECL.RECS/SADDSIZESTEP0STOP1STR$THEN2WEND3%LIST%PAGECHAINICLOSE4FLOATGOSUB5INPUT6LEFT$LO###7MATCHPRINT8USING9WHILE:WIDTH;%CHAIN%EJECTCOMMONREMARKbRENAMERETURN?RIGHT$UCASE$VARPTR%NOLISTCONSOLEBRESTORECSAVEMEMD%INCLUDECOMMAND$CONCHAR%CONSTAT%LPRINTERGRANDOMIZEHINITIALIZEIJh}>ku  PAGE$OUT OF DISK SPACE$OUT OF DIRECTORY SPACE$DISK ERROR $BASNO SOURCE FILE: $.BAS$ERROR $ IN LINE$ AT POSITION$WARNING: INVALID CHARACTER IGNORED IN LINE$INCLUDE NESTING TO DEEP NEAR LINE$FILE: $!mOs+q+p+q:mO=2mOʏ*jO:lOw*jO#"jOrNO!O6!nOq*O&N :nOw:O<2O͐!oOq*oO&!pOq:L!L:L*pOM:pO !?O|sì !L6ì !L6ì !L6!L6*O& ~(l :O<2O!>O6:O<2OO! ~02OO> l :>O:>OH!O2>O9 ì !L6+6*O& ~(› :O<<2OO! >2Nì   o à :l2N͛!M6#6!;O6!4O6!"M6!iO6:!L6 x !L6!L6!L6#6:M/:;O2:O*1!Oҫ$!M6:O<2Oˆ:M!M!L6:M$p.:L=2L!L6:LN"L:M !L6:L !L60!L6#60#NB*8ODM*;O )͸LLf?:L$_!L6fw:L%r!L6fw!L6S/ҷ:LF:LNH:LHҫ!L6Mð!L6J#I:Lb:L ͦ ͯ & 2LÿI:Lc34:L *LM4& 22|P!}P4:|P?*O^*O*O ^"O*O"O^*O"O!~Pq:~PtPK!rPeLq!L6OT*w*O >*zP&O) ^#V"O>OWL*O~2P*xP͒!{P>*O#^#V"Oî>:P=O! *O*P&*xP ":P=2P>>*xP>2POD*tP"O*xP*O wo*xP#*O -S*O :{Pw*zP&O) *O#N#Fq#p*O 6*zP&O) *Os#r:PtPK+s#r*O~!Pq*O :P*O w*O ~*O ^#V!Pq*O :Pw*O ~2P!P6:P!PMo&O"P*POLL3*PN#F`i"P*O#*PN#Fq#p:P<2P2P!P6:P!PڜO!O *O#N#Fq#pO!O *Os#r:P<2PY!Rq:Lү*RM!"O}2O2O2Oo&"Oo&"Oo&"L2R2Ro&"O2O!O6!R6#!"Oͤ:L$͈!"xP!zP6#6%1͝$͝r!Rq:O/8*O#"O:L/G*RM!Rp+q*R|O%*R}O%!Rp+q!RLDMH:O/!L:O/Hҕ* !Rړ*RM!z ^#VÐÐP0*RMb1,OZLLDL,44*L+"LI:LMw*M# e:L::L*Mw:L==2LoLL ->!L!L6*L*M#L -!>M6͛: N<2 N͖!L6 x ͔ :L3!L6+6!L6:L2L:L2L:L2L͔ :L!L\ͷ͔ 2!>Os>@L!MҁuÄ͔ !O6:L :O<2OH2*O&L) q#p:Mu:L & 2LÌ͔ 6Nbu)ͦ ͯ ͖)-Sx :L!L6*4O&N 6?x :M/^:L<2LO!L :Lw:L!L?w:L^!M6-x -& 2L*L&L ~:L0O> /:La/>z!L/H:L.͇!Lҷ:L_2Lͤ:LAO>/͇H{͸H͛H{f͸:LAO>ͼ0)*ODMrͭ:O$*OM)1!iO6*͖ÐÐ͖Ð:OO!O6T!O6Ð!O6ÐÐ!O6Ð!O6Ð!O6Ð7:@W_bjr|/>+!Rڟ|/:R,O!". ^#V!O6|/|/ORJL:RH2%4|/:R*RDM_*R"ODM60|/ ͆0*RMb1OOJLH>/*ON#F_*ON#F60DAF0|/|/*RMO3|/ P0|/_P0|/|/ O3|/|/N2 % ͆0|/|/́2*RM%t0|/|/:Rʮ!R6́2|/́2|/:RFMͼ0*RM͆0*RMt0|/:R%:R 0%FMͼ0 ͆0*RMt0|/|/!R6́2|/́2|/|/ ́2|/:Ox:Rp*R&P) N#F_!O6Ø:R“*R&P) N#F1Ø%|/P0|/ P0|/ P0*RMt0|/:O*R&Q 6*RMb1P0*R&P) q#p*RM6 *RM6|/:L IF0r2*R"O* *RM!R: NS0DM1*RM͚3!%9L!Li SI0|/͆0*RMq1/ҍ ͭr͆0*ODM60|/r2|/ 9*R&-Q) *R&) N#Fq#p9|/9|/8|/ 98|/ P0*RMb13!OOJL!O !:LE !M6f:M<2M:L .x !M6!Oq*L#"L:LM*OM!"O!M6pH’!O6:L=!Oڎ*O))))3_"O:O<2Of*OpB!O6:L=!O*O)3_"O:O<2OŸ*O>!L~>3#HH!M6!!O6:L!O!*O)))*O) 3_"O:O<2O*O|/!M6*O*O&L ~2OAM:O 2O:O> !L_>!O6*L& ~2O:O!O/:O!O2O!O6*L&) :O=:Lñ*O&L :O=O*O ~%:O<2O,:O=2Oq>:L =x !L6:LHP_:L,:L Hq& 2LPNTI:L!:O*8O_DM 1.CONSTANT AREA: $CODE SIZE: $DATA STMT AREA: $VARIABLE AREA: $AQGFKLPBTNOCDEIJHXRrU[qZWpS\YVsvwxq     && PROD $FUNCTION REFERENCE BEFORE DEF: $PROGRAM CONTAINS $ UNMATCHED $ STATEMENTS$FOR$WHILE$DEF$NO$ ERROR$ DETECTED$:LO>@_e!V"tP*++"rP"O#6!|P6#6*O~=!}P *}P& *O:|PFRͼ00!*R&-Q) *Os#r*R&P) s#rOͪ0|!:Lv!!L6E"! S6:L! Sk!* S&L N: S<2 SJ!W!L6|!UFͼ0|/*L& Nb0:L*L& >HOP0*L& ~Oͪ0:L!!O6!:L#!!O6|/7|/L|7|/P0|/͆0|/P0|/͆0|/P0|/P0|/P0|/͆0|/P0|/:R=O!Q :R:RHV"EF0*rP ^#V"O:R/:RH҃".%H:Rҏ"%DM1:R§"%û":RҶ"%û" %:R"DM_%%:R #%_x:%_8%x:%_9%x:%7%*rPN#FH*rP##*Os#r|/*R&Q *R& w6%*rP##N#FH*rP *Os#r:R2ROt0t|/!L6>rPWL+s#r"O*O#>*O#wD:O<2O|/:Rµ#FMͼ0:R:RH#p%#:R:RH#:%͆0*RMt0|/:R:R=O!Q ~H*$p%P$:R:R=O!Q ~HP$:%:R=O!Q :Rw*rP ^#V"ODM_P0|/͝1|/͝1|/*R&Q ~¡$]%`%6DMH|/|/f6|/͝16%1|/:R$EI0:R$:%7%1|/*R"O:L%%*O&O) N#FH*O&O) ^#V"O>6L4-*ODMr:O=2O|/|/:RR-SMͼ0W-y%|/u%|/|/~%!O6|/:R‚-%Ç-%*RM6*O#"O|/*O#"O|/:R²-%÷-%*RM6*O#"O|/*O#"O|/:R-CS0-*R&P) ^#V"O:R.FSͼ0 .z%:O.DS0.!O6|/GJT\dgor"4ADQ l !!!!!!!""""&"."3#v##$}$$$$$$$$(%2%V%%& &&&&&"&T&Z&c&f&l&r&&.'I'L'W'b'v'''''''''''')(,(2(8(;(A(G(O(\(l(((((((())!),):)V)Y)\)_)b)h)n)q)w))))z+++++++++++++++++++,,,,&,.,1,<,D,u,,,>-A-Z-b-e-r-----*R&Q ~2R*R& ~2R*R& ~2R*R&Q ~2R*R& ~2R*R& ~2R*R&P) ^#V"R*R&P ~2R*R& ~2R*R& ~2R*R&Q) ^#V"R*R&) ^#V"R*R&) ^#V"R*R&Q ~2R*R& ~2R!Rp+q*R&P) *Rs#r!Rq*R&Q :Rw!Rq*R&Q :Rw!Rq*R&Q :Rw!Rq*R&Q :Rw!Rq*R&P :Rw!Rq*R&P :Rw!Rp+q*R*R&Q ^*RDM !Rp+q*R*RDM*R !Rp+q*R*RDM*G*RM:O/%%74%*R"R͝1|/*RMt0|/:LG%/1*Oq#p*O#"O!O6|/:Of%MPͼ0%6% P01*O"R*RMq12 S*RMt0*O"O*ODM60:L! SҬ%DFͼ0%:L%D*tP##"tP*O 6 ͭ*ODMr%OZL!L%DFͼ0%N|/D:|/P0|/P0|/D:|/|/|/|/͆0*RM6:R<&FI0*R&P) N#F1-%|//2|/_|/|/3|/3|/*R"O:O&:Rʒ&VC0!O6*R&P) nM:R¾&*R&P) n}%!L6|/m͕4!L6|/|/'%!L6|/h͕4|/:Rʩ'PI0n%͊4|/_n%͊4|/4|/4|/!L6|/|/?%!L6|/:R=O!Q ~!(SM:R=O!Q :R=O!Q ^N#F &(c%|/|/}8|/}8|/|/}8|/}8|/d%|/d%4%|/!L6/2&%|/!L6:R=O!Q ~¦(FM:R=O!Q :R=O!Q ^N#F :R=O!Q ~¼(]%%/2%%|/|/|/|/5%|/f6|/{5|/{5͝1:O(%|/R *O#"O!Rp+q!RLDMH!Rq*R&mQ n&-R!Rq*RM$1"xP*R&P ~2zP*R&Q ~2{P!Rq*RM91͝!Rq*RMb1҃1>%>!R"xP:R?2zP!{P6 !Rq:LҼ1*R"O:ROKDMr:R<2R1:R<2R͉1͝/1%*ODM60ͽ1DMH!R:R2MMͼ0>>:R2FM0>:R+2FMͼ0>1:R@2FM0M2:RM2]%:R_2FMͼ0l2:Rl2]%t0/2:R<2RO͆0!Rs+q+q ͆0!R:R3:R:RHһ2p%2:R:RH2%p%:R/2%!R6t02MMͼ03:R:RH3FM0:R03*RM%I3:RB3*RM%I3*RM%!R6!Sq ͆0:Rj3:%!R6:R‹3%:%%!R6t0 2ҙ3*SM%!Sq:S¯3_3:S3_3_2S!R:SH3NSͼ03*RM*RM͚3 %*RM%%!Sq:S!4%64:S14%64%:R:RHW4p%~4:R:RHw4:%~41~474*RM 4!L6;%!Sq:Rʧ4SMͼ0:R¿4*R&P) N#F_*SM%%!L6:R4*R&P) N#F_:L4"1'55:L G5|/ͽ1%DMHb%G5|/f6P0|/f6:R!Sچ**S&L) N#FH:S<2Sc**ODMH:OҞ**O"Ow+!L6:L2L:L2L͔ :O**O͎::O**O͎::O*͎:%%>!LbL+*LDMC+"">LWL%+S"!S6>!Sf+W*S&R) N#F"*S&L) N#FC:S<2S0+*DM_IO |//%|/M%|/j%|/|/j%|/|/:Rʮ+SM0|/N2|/_|/N2|/|/__|/N2|/N2|/k%|/|/k%|/|/N2e%|/N2e%|//2i%|/|/lO3|/f%|/|/N2o%|/g%|/:Ol,*O"Ot%*R"R͝1!O6r,DNͼ0|/:O<2O ڊ,NWͼ0í,*O&O) >w#6*O&O) *Os#rt|/:R,EWͼ0:R,:%7%1*O&O) *Os#r|/:O,UWͼ0;-65)*'55=<'5:R5:%*RM 4!Ss+q:R?5*SM%F5*SM%/2:R<2R)\5OOͼ0*R&R N_^%9%!O6!O6*R&R :Rw:O=2O¨5!O6UN056%*O N#FH!OL*Oq#p*O#>5*O"O5*R&Q 6*RMb1*O OLLH6͎56IN0P0*RMq1e6!O/!Le6:L M6*&?@XBCcdeeefghd(ijklmmmnopsxp{ppp~pppppppp !#%')+.147:>@BDFHJLNQTWZ\_behlorux{~<<r<<|DM_:R k9*R"O!Rc9:RH:RH]9*R&Q 6!R6p%c9PF0*RM 49!R9H9:R9Hҥ9:%9:R9H9p%9PF0:RO͘0:R=2RO͆0:R:R ::R9NF0%*R&-Q) ^#V"ODMH:R-:NF0:RO! ~2RO%:Lw:*R&Q 6*RM91%1DMr*RM:R?BCDEGHIJKM/E  J J  "2"'5 " "". "" " " """0"2""  EFJLM )J #%&'*+,-1345678:<=>?BCDGHIJKM( #&'*+,-134568:=>?BCDGHIJKM)J J  $   AE $ $J JEF9; $  $ """""""""0"""""""""/""  $ )J  $( )J     N%F  '(),./02679<E!&X   33446688: <<<AADFFSSTTUUVVWW Z[\]^^___``abcddeffgghiijkklmmnrrsttuuuvvwwxxx{{||}}}~~R                 k    &   $ -3;<@N[kvCBASIC COMPILER VER 2.08  $$\$COPYRIGHT 1981 COMPILER SYSTEMS INC. $1LrH"H"oKͷ!L6:L!LbK!L6!R6!"!%*+-FN3: ! #Wdd 8lhcdbaf$&cdba&cdba}>Dcdbaucd67[~@ p%'(,29:w:D/ ?CDyCD CD CDCD.Z\CDXCD]`CDCDCDCDCD0CD1CDCD&cdba*"#p%'(,2489::D)_p%'(,29::D+B!x egim kj--335;<=Y?@ACHHKIINJJOKKLLLMNQPRQSR[^_`bffhhiijjkllmmnn>uuvvvXwwyyzz{{||}}{q6     ^  sP!R6!R6!mQ6:L_K>!PbL4J͑K*R&P) *Ps#ryK"SͮK͆K*S+"S*S"SSSJL1J*S: :LJ*R&mQ :Rw!S6:L!SڝI*S&L NK!S4I*R&P :Lw*R&Q :Lw*R&Q) *8Os#r;K*R&Q w*R&P) *Ls#r*So=) ^#V"P!R6*S"S$JSSJL$JES;K*8O_DM *S"SSI\K!PeLJ͆K:R6L!Rs:R<2RPOLM͚:LJ:R2RyK"S*R&mQ ~2R*R&P) ^#V"S*S< n&"S}SSJLHJ*S#"SÓJ*SKA) ^#V"P>6LJ!L6\K>!PbLAKyK"SͮK*S; n&"S}!S:LbLH/K*S#"SJ*S?) ^#V"P\K͑K͆K*R&P) q#pyK"PIHoK!L6HvͱL Ͱ*PB) ^#V*PF n&:R<2R ­KOS*8ODM*:O :RҽK !R6:L!:O!Sq*R&-R :Sw:R<2RO>dKOV;K*8O_DM _qogDM!>))L = L_og^#V|g}o *L_{ozgO{ozgi`N#Fogo&og_{_z#W +CBASIC V2.08 COMPILATION OF $ SIZE DW LDIR ;PUT IT OVER ; CHKUNA: LDA UNACNT ;ANY UNALLOC REMAIN? ORA A JZ ALLOC ;SKIP IF NOT ; ; MORE UNALLOCATED RECORDS REMAIN ; DCR A ;UNACNT = UNACNT-1 STA UNACNT ; ; MAKE SURE LOGICAL DISK ADDRESS IS THE SAME ; LXI H,CDISK ;POINT AT BEGINNING OF LOGICAL LXI D,UDSK ;AND UNA LXI B,4 ;SET THE COUNT CALL MCMP ; JNZ ALLOC ;NOT THE SAME ; ; MATCH, MOVE TO NEXT SECTOR FOR FUTURE REF ; LXI H,USEC ; INR M ;UNASEC = UNASEC+1 LDA CPMSPT ;GET THE SIZE DCR A ; CMP M ;CHECK FOR END OF TRACK JNC NOOVF ;SKIP IF NO OVERFLOW ; ; OVERFLOW TO NEXT TRACK ; MVI M,0 ;UNASEC = 0 LHLD UTRK ;GET THE UNALLOC TRAK NUMBER INX H SHLD UTRK ;UPDATE IT ; ; MATCH FOUND, MARK AS UNNECESSARY READ ; NOOVF: XRA A ;0 TO ACCUMULATOR STA RSFLAG ;RSFLAG = 0 JMP RWOPER ;TO PERFORM THE WRITE ; ; NOT AN UNALLOCATED RECORD, REQUIRES PRE-READ ; ALLOC: XRA A ;0 TO ACCUM STA UNACNT ;UNACNT = 0 INR A ;1 TO ACCUM STA RSFLAG ;RSFLAG = 1 ;**U \ INT i LST@ $:!2 COPYRIGHT 1978,1979,1981 COMPILER SYSTEMS INCd  # ()*+, -/: ;<= > ^ASEQ GEGOGT IFLELTNEONORTOABSANDASCATNCOSDEFDIMENDEXPFORFREINPINTLENLETLOGNOTOUT POSREMbRNDSGNSINSQRSUB!TABTANVALXOR"BUFF(CALL#CHR$DATAcELSE$FEND%FILE&GOTO'INT%LINE)MID$NEXT*OPEN+PEEKPOKE,READ-RECL.RECS/SADDSIZESTEP0STOP1STR$THEN2WEND3CHAINCLOSE4FLOATGOSUB5INPUT6LEFT$L#CALaMATCHPRINT7USING8WHILE9WIDTH:COMMONCREATE;DELETE  DISK ERROR $BASXREF06: NO SOURCE FILE: $.BAS$XREF07: INVALID PAGE LENGTHXREF05: INCLUDE NESTING TO DEEP NEAR LINE$XREF03: OUT OF MEMORYXREF01: OUT BOF MEMORY$XREF04: TO MANY FUNCTIONSXREF02: OUT OF MEMORY $PAGE NO$  NAME 7 TYPE$.BASPARAMETER $ FUNCTION $ GLOBAL $XREF V2.08 $$E$COPYRIGHT 1981 COMPILER SYSTEMS INC.$1r  ͓Ϳ'#~#VZ{+_~#F!{w!rN,F!vq#p{,q#prYP͵7!rN,F!fwq#p7rYE!{~,FOx'T.6#6.N,F.O!{w#p.~}SOx.q#w.~,F.ޖ,OxҖS.N,F.q#p.6#6*{+{!{,_zS-N,F*{ ~!{w.N,F! "{ÝS!rN,F!vq#p!{N,F!vq#prYP!{N,F͵7!rN,F!fwq#p7ri^ v!s+p+q+p+q:=2C** w*#"*#"!s+q+p+q:=2n*:w*#"Qc!_6!q*_& :w:_<2_ڥo!q*&!q*& Ͷ Ͷ!q:*Mͦ:*Mͅ: !4!6 !4!p+q*~$**NͶ*#"j  v *DM !6 * 6 * 6*y *~ʜ*>@_:!6>!*&*~ *&*^!4¡  :ͅoc:;* c :a:a2ccc6+!6*2O>Z+:    !p+q!6+6>!!60*&=) .*&=) .+s#r!6#4Ö:/!*M !4ˆ:y2z͔2yc>!W!5"*& *DM! "*& ! ~2<Gv:T!6:`!6:yÐ:y w!`6*#":y „!y6 :y ʐ:y:<2ڰ!6<°>*&* ~ :yHü:y 2y:y\ͼ!6!D  !Dp+q* *Cs#r* >w* >">9q*~2E*:ctc>*#^#V"=>:E=O! **E&*: §:E=2E¤>t>*:>2FO*8"*:#* *:*w_ * 6*#q#p*<&) *s#r:F8+s#r!Gq* :Gw*~!Hq* :Hw* ~* ^#V!Iq* :Iw* ~\2L!M6:L!Mھͯo&"J*J.ʧ*JN#F`i"JË*#*JN#Fq#p!M4p: :rF27/!T!ͪ"DM *6* >w#6:T!4*M%!%@"*DM$ :rH²:sš*#">"^  ͪ"DM *6* >w#6!6*M%!T6*"7ү@"*DM$ :r !T!6*"*ML!T6 :r :T!T6!6: *"e!6:r2sÿ~*8"P"N!"R!s"8,}*N*s#r*N##"N*+%s  *RDMz *R#"R0*P++"P*R"U>!UDR!U+s#rR<"W!Y6:YO!Y6!"\W\,L*U*\"Z*\)*P*Z)*P^#VN#F[?*\f6:<2O! ~$*& ~'H!:H=  *& ~$f :<2O! ~2'!:Hf :A2O>c *M!S ^#V!6c !6c !6#6c !6!6P!6$!6c !6c *& ~( !4!6:<2O! ~02O>  ::H!2 :-   *& ~)@ !4c !6c !6c C K L !6+~! :<2O! ~':!/H#~!H *& *& w!4t :l2a5!6!y6 ͼ!{6!x6!r6!t6:y" !r6B" :y ͼ:y" 7H !r6A:y0C 2y2 |7S |:yH:yhHq ÿ :y :y+H:y-H EHҿ Ҵ ÿ :y ¿ ͼͫ T҃ j  :y$  :y% ͷ> :|F:}NH:{H& !r6H+ !r6F!{"::x2<ͫÀ :rb] :y Z 2yF À :rc| :y y 2ye À ͫ :y%:z Hҹ ͼ@:|I³ :y ʽ 2yì ͼ!{6:y :y.H:y H @  * 5::)*P^#V"^*Z)*P*\)*PN#Fq#p*Z)*P*^s#r!Y6*\"\óÌ*P##"P!cr+s+p+q*` *b ~z>*` *b ҏ>*` *b ~Ҥ>*` *b ҹ>*`*b *b~2f*`~2f!g6:g<2g!f>*g& *`*g& *b~ᖟ*`:g5*g& *`~2d:!d6 *b:gY*g& *b~2e^!e6 !e:d!h6!l6*~ʤ*>@:l<2lO! Hq:l<2lO! 6:!m6>!m*m&*~ *m&*:l<2lO! w!m4©h*l& DM :͞*P"N!"jRj,L*N^#V"!m6*~!mP:m=O! *N!m4**>!O~,klMÂ,|wMÂM@"!i6: >9 !m6*~!m:i, !i6:!^!:/!͞+~:m=O! *N#Fz!m4¥* ^#V"Ô^!:/!7͞*N##"N*j"j!op+q!p6*p&*n~$}*p&*nN!p4X!qq!r6:q!rڝ !r4‡ MM~M:+~7M:h<2hOz^^?M^^!6_ogDM <2  *DMz *:=o&" DM! :=o&" ! :w*# D:}:‚ :|*w~:{==2{_| >!{Ґ !{6|*# _DM !65!y6 ͼö  :y\  ͷ !r6ͼ :{<2{O!{ :yw:y!x?w ͼ 2y*{&{ ~:y0O> /:ya/>z!y/H:y.#!S:y_2y@:yAO>/#HTH7H҉|TҦ:yAO>ڢãç|:y ¶ͼ> !{>!6*{&_ ~2:!ڐ:!2!6*{&I) =:{*&{ :=O* ~҆:<2Í:=2>>@_D!s"8*++"!>6#6*~=!?*?& *:>2>!?4·:>?*^*"> 9+s#r!8G  #*!Ap+q:y 9*@+"@* >DZ* ^#V"9*~=O! *@. H҇*~ ¹* q#p* ^#V"6* >w#6*N! **@s#r*4*<&) ^#V!Bq:B8!G dP!>))  =^#V|g}o _{ozgi`N#Fogo&og_{_z#W'CBASIC XREF LISTING OF $ $ $\ INT  XRF ;:eM$$$I"I$! !$I@!B B"D$!D $I$aMP OK BIT MTIBT EQU 04H ;MT INPUT READY BIT NULBT EQU 02H ;NULLS BIT (FIFO1) ZROBT EQU 01H ;ZEROS BIT (FIFO0) ; ; ; VIDEO CONTROLLER PORTS ; ; VCBAS EQU 40H ;BASE ADDRESS FOR THE VIDEO CONTROLLER VCIR0 EQU VCBAS ;INIT REG 0 VCIR1 EQU VCIR0+1 ;INIT REG 1 VCIR2 EQU VCIR1+1 ;INTI REG 2 VCIR3 EQU VCIR2+1 ;INIT REG 3 VCIR4 EQU VCIR3+1 ;INIT REG 4 VCIR5 EQU VCIR4+1 ;INIT REG 5 VCIR6 EQU VCIR5+1 ;INIT REG 6 VCPSL EQU VCIR6+1 ;FORCE SELF LOAD (NOT USED) VCRCL EQU VCPSL+1 ;READ CURSOR LINE NUMBER VCRCC EQU VCRCL+1 ;READ CURSOR CHARACTER (COLUMN) NUMBER VCRST EQU VCRCC+1 ;RESET CONTROLLER TIMING CHAIN VCSCR EQU VCRST+1 ;SCROLL UP VCWCC EQU VCSCR+1 ;WRITE CURSOR CHARACTER (COLUMN) NUMBER VCWCL EQU VCWCC+1 ;WRITE CURSOR LINE NUMBER VCSTR EQU VCWCL+1 ;START VIDEO TIMING CHAIN VCSFL EQU VCSTR+1 ;SELF LOAD (NOT USED) ; ; Z80 OP CODES USED ; IM2 EQU 05EEDH LDIR EQU 0B0EDH OUTIR EQU 0B3EDH RETI EQU 04DEDH STAI EQU 047EDH LSPD EQU 07BEDH SSPD EQU 073EDH ; ;**B '. Please reinsert diskette,' DB ' push any key to retry' DB 0 MCAN: DB CR,ESC,'T',0 ; ; MEDIA ERROR ; MDERR: LXI H,MDKER JMP PRCER ; ; DRIVE NOT READY ; NTRDY: LXI H,TOTRY ; DCR M ; JNZ RWCMB ;NOT YET LXI H,MNRDY ;POINT AT THE NOT READY MESSAGE JMP PRCER ; ; ; DISKETTE IS WRITE PROTECTED ; WTPRT: LXI H,MWPRT ;POINT AT THE MESSAGEE JMP PRCER ; ; ; COMMON ERROR PROCESSING ; PRCER: PUSH H ;SAVE THE MESSAGE MVI A,RETRY ; STA RWTRY ;RESET THE RETRY COUNT CALL CLMTR ;CLEAR THE MOTOR LXI H,MDSK ;POINT AT IT CALL PRNMSG ; LDA PDSK ;GET THE DRIVE NUMBER WE ARE USING ADI 'A' ;ADJUST MOV C,A ;SAVE IT CALL CONO ;PRINT IT TOO POP H ; CALL PRNMSG ;PRINT THE MESSAGE LXI H,MQUE ;GET THE QUESTION CALL PRNMSG ;PRINT IT PRCR1: CALL CONS ; ORA A ; JZ PRCR2 ;WASTE ANY EXTRA CHARACTERS CALL CONI ; JMP PRCR1 ; PRCR2: CALL CONI ;GET REPLY CPI 03H ;CONTROL C? JZ WBOOT ; CPI ESC ;ESCAPE? JZ WBOOT ;ERROR ANI 5FH ;MAKE IT UPPER CASE CPI 'C' ;CONTINUE? *[**: ; ; THIS BEGINS THE LIST OF ABSOLUTE LOCATED CODE ; ;** ; ORG BIOS ;ORIGIN OF THIS PROGRAM ; NSECT EQU ($-CCP)/128 ;WARM START SECTOR COUNT ; ; JUMP VECTOR FOR INDIVIDUAL SUBROUTINES ; JMP BOOT ;COLD START WBOOTE: JMP WBOOT ;WARM START CONS: JMP CONIS ;CONSOLE STATUS CONI: JMP CONIN ;CONSOLE CHARACTER IN CONO: JMP CONOT ;CONSOLE CHARACTER OUT LPTO: JMP LSTOT ;LIST OUTPUT JMP PUNOT ;PUNCH OUT JMP RDRIN ;READER INPUT JMP SETHOM ;HOME THE TRACK NUMBER JMP SETDSK ;SELECT DISK JMP SETTRK ;SET TRACK NUMBER JMP SETSEC ;SET SECTOR NUMBER JMP SETDMA ;SET DMA ADDRESS JMP READ ;DISK READ JMP WRITE ;DISK WRITE LPTS: JMP LSTST ;LIST OUTPUT STATUS JMP SCTRN ;SECTOR TRANSLATION ROUTINE ;**l* ; ; THIS BEGINS THE SECTION OF USER MODIFIBLE VALUES ; THE ORDER OF LOCATIONS MUST REMAIN THE SAME ; ***BIT (HI = ON) ACTIV EQU 20H ;INTERNAL USE ONLY BEEPR EQU 40H ;BEEPER CONTROL (HI = ON) PROFF EQU 80H ;EPROM ON/OFF CONTROL (HI = OFF) ; ; VIDEO I/O PORTS ; VSTAT EQU 30H ;VIDEO LATCH STATUS VLRDY EQU 80H ;VIDEO LATCH READY BIT VMCHP EQU 31H ;VIDEO MEMORY CHARATER POSITION VMLIN EQU 32H ;VIDEO MEMORY LINE NUMBER VMDAT EQU 33H ;VIDEO MEMORY DATA VMWRD EQU 34H ;READ VIDEO MEMORY ; KYBDS EQU 35H ;READ KEYBOARD STATUS KYBDD EQU 36H ;READ KEYBOARD DATA (AND CLEAR) ; ; SPECIAL BIT VALUES ON THE KEYBOARD STATUS PORT ; KYRDY EQU 80H ;KEYBOARD CHARACTER READY BIT KYALP EQU 40H ;KEYBOARD ALPHA LOCK SENSE BIT ; ; MAG TAPE PORTS ; MTO1 EQU 35H ;MT OUTPUT #1 FIFO MTO2 EQU 36H ;MT OUTPUT #2 FIFO MTSIN EQU 37H ;OUTPUT CAUSES INPUT FIFO SHIFT IN MTIOS EQU 37H ;INPUT MAG TAPE STATUS ; ; BITS ON THE MAG TAPE STATUS ; RRMBT EQU 80H ;REMOTE CUE REVERSE (LOW TRUE) RMCBT EQU 40H ;REMOTE CUE FORWARD (LOW TRUE) MO2BT EQU 20H ;MT OUT #2 FIFO READY MO1BT EQU 10H ;MT OUT #1 FIFO READY AMPBT EQU 08H ;A&/*** ; ; MARK THE END OF THE JUMP TABLE ; DB 1 ;MARK THIS AS VERSION 1 ASSIGN PROGRAM DW IOSIZ ;SIZE OF SPECIAL I/O SECTION ; ; INITAL VALUE FOR IOBYTE ; IBYTE: DB 81H ;CONSOLE IS CRT:, LIST IS LPT: BPCNT: DB 0CH ;BEEPER CONTROL (0 = OFF) DSKFL: DB DFVAL ;0 = 410, 1 = 460 SYSFL: DB 0 ;SPECIAL SYSTEM FLAG ; ; SIO PORT A CONTROL VALUES ; SIOA: DB 45H ;CTC BYTE FOR SIO A - EXTRA PORT DB 13 ;CTC BYTE FOR SPEED - 9600 BAUD SAOMK: DB 04H ;XMIT MASK DB 04H ;XMIT READY VALUE DB 0 ; DB 0 ; ; ; SIO PORT B CONTROL VALUES ; SIOB: DB 45H ;CTC BYTE FOR SIO B - LINE PRINTER DB 13 ;9600 BAUD SBOMK: DB 04H ;XMIT MASK DB 04H ;XMIT READY VALUE DB 0 ; DB 0 ; ; ; PARALLEL PRINTER PORT CONTROL VALUES ; PIO1: DB 0 ;CONTROL FLAG DB 0 ;CURRENT LINE DB 66 ;TOTAL LINES DB 0 ; DB 0 ; DB 0 ; ; ; INITALIZATION STRINGS ; SAINT: DB 0,0,0,0 ; DB 0,0,0,0 ; SBINT: DB 0,0,0,0 DB 0,0,0,0 ; PPINT: DB 0,0,0,0 DB 0,0,0,0 ; ; EXPANSION AREA ; DB 0,0 ; y pad DB '+' ;54 - F1 key on the key pad DB 00H ;55 - not assigned DB 00H ;56 - not assigned DB 00H ;57 - not assigned DB '-' ;58 - F2 key on the key pad DB 00H ;59 - not assigned DB 00H ;5A - not assigned DB 00H ;5B - not assigned DB 00H ;5C - not assigned DB 00H ;5D - not assigned DB 00H ;5E - not assigned DB 00H ;5F - not assigned ; ; ; CTMAX EQU $-CRGTB ;MAX CHARACTER ; ;**( ; ; KEY WITH SHIFT, NO CONTROL KEY ;** ; CSHTB: DB 00H ;00 - NOT USED DB 0AH ;01 - LINE FEED (CUE) DB '?' ;02 DB ',' ;03 DB 'N' ;04 DB 'V' ;05 DB 'X' ;06 DB '}' ;07 DB '7' ;08 - 7 key on key pad DB '8' ;09 - 8 key on key pad DB 00H ;0A - not assigned DB 08H ;0B - BACKSPACE key DB ':' ;0C DB 'K' ;0D DB 'H' ;0E DB 'F' ;0F ; DB 'S' ;10 DB 'Z' ;11 DB '4' ;12 - 4 key on key pad DB '5' ;13 - 5 key on key pad DB 00H ;14 - not assigned DB 7FH ;15 -  DB 0, 0 ; DB 0, 0 ; DB 0,p0 ; ; ; ADDRESS TABLE FOR THE FOUR CHARACTER TABLES ; KYTBL: DW CRGTB DW CSHTB DW CCNTB DW CCSTB ; ;**) ; ; KEY WITHOUT CONTROL OR SHIFT ; ;** ; CRGTB: DB 00H ;00 - NOT USED DB 0AH ;01 - LINE FEED (CUE) DB '/' ;02 DB ',' ;03 DB 'n' ;04 DB 'v' ;05 DB 'x' ;06 DB '{' ;07 DB '7' ;08 - 7 key on key pad DB '8' ;09 - 8 key on key pad DB 00H ;0A - not assigned DB 08H ;0B - BACKSPACE key DB ';' ;0C DB 'k' ;0D DB 'h' ;0E DB 'f' ;0F ; DB 's' ;10 DB 'z' ;11 DB '4' ;12 - 4 key on key pad DB '5' ;13 - 5 key on key pad DB 00H ;14 - not assigned DB 7FH ;15 - DELETE KEY DB 'p' ;16 DB 'i' ;17 DB 'y' ;18 DB 'r' ;19 DB 'w' ;1A DB 09H ;1B DB '1' ;1C - 1 key on key pad DB '2' ;1D - 2 key on key pad DB '[' ;1E DB 00H ;1F ; DB '.' ;20 DB 'm' ;21 DB ' ' ;22 DB 'b' DELETE key DB 'P' ;16 DB 'I' ;17 DB 'Y' ;18 DB 'R' ;19 DB 'W' ;1A DB 09H ;1B DB '1' ;1C - 1 key on key pad DB '2' ;1D - 2 key on key pad DB ']' ;1E DB 00H ;1F ; DB '.' ;20 DB 'M' ;21 DB ' ' ;22 DB 'B' ;23 DB 'C' ;24 DB 1BH ;25 - ESCape key DB '0' ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0FH ;2A - INSERT DB 'O' ;2B DB 'U' ;2C DB 'T' ;2D DB 'E' ;2E DB 'Q' ;2F ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 22H ;34 - DOUBLE quote character DB 'L' ;35 DB 'J' ;36 DB 'G' ;37 DB 'D' ;38 DB 'A' ;39 DB 00H ;3A - not assigned DB 00H ;3B - not assigned DB 00H ;3C - not assigned DB '<' ;3D DB '_' ;3E DB '(' ;3F ; DB '&' ;40 DB '%' ;41 DB '#' ;42 DB '@' ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB '|' ;47 DB '+' ;48 DB ')' ;49 DB '*' ;4A DB '^' ;;23 DB 'c' ;24 DB 1BH ;25 - ESCape key DB '0' ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0FH ;2A - INSERT KEY DB 'o' ;2B DB 'u' ;2C DB 't' ;2D DB 'e' ;2E DB 'q' ;2F ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 27H ;34 - single quote character DB 'l' ;35 DB 'j' ;36 DB 'g' ;37 DB 'd' ;38 DB 'a' ;39 DB 00H ;3A - not assigned DB 00H ;3B - not assigned DB 00H ;3C - not assigned DB '>' ;3D DB '-' ;3E DB '9' ;3F ; DB '7' ;40 DB '5' ;41 DB '3' ;42 DB '2' ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB '\' ;47 DB '=' ;48 DB '0' ;49 DB '8' ;4A DB '6' ;4B DB '4' ;4C DB '1' ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB '9' ;50 - 9 key on the key pad DB '6' ;51 - 6 key on the key pad DB '3' ;52 - 3 key on the key pad DB '.' ;53 - . key on the ke;4B DB '$' ;4C DB '!' ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB '9' ;50 - 9 key on the key pad DB '6' ;51 - 6 key on the key pad DB '3' ;52 - 3 key on the key pad DB '.' ;53 - . key on the key pad DB '+' ;54 - F1 key on the key pad DB 00H ;55 - not assigned DB 00H ;56 - not assigned DB 00H ;57 - not assigned DB '-' ;58 - F2 key on the key pad DB 00H ;59 - not assigned DB 00H ;5A - not assigned DB 00H ;5B - not assigned DB 00H ;5C - not assigned DB 00HQ ;5D - not assigned DB 00H ;5E - not assigned DB 00H ;5F - not assigned ; ;**' ; ; KEY WITH CONTROL, NO SHIFT ; ;** ; CCNTB: DB 00H ;00 - NOT USED DB 0AH ;01 - LINE FEED (CUE) DB 00H ;02 DB 00H ;03 DB 0EH ;04 - N DB 16H ;05 - V DB 18H ;06 - X DB 00H ;07 DB 17H ;08 - 7 key on key pad DB 05H ;09 - 8 key on key pad DB 00H ;0A - not assigned DB 08H ;0B - BACKSPAC *** ; CCSTB: DB 00H ;00 - NOT USED DB 0AH ;01 - LINE FEED (CUE) DB 00H ;02 DB 00H ;03 DB 0EH ;04 - N DB 16H ;05 - V DB 18H ;06 - X DB 00H ;07 DB 17H ;08 - 7 key on key pad DB 05H ;09 - 8 key on key pad DB 00H ;0A - not assigned DB 08H ;0B - BACKSPACE key DB 00H ;0C DB 0BH ;0D - K DB 08H ;0E - H DB 06H ;0F - F ; DB 13H ;10 - S DB 1AH ;11 - Z DB 13H ;12 - 4 key on key pad DB 1EH ;13 - 5 key on key pad DB 00H ;14 - not assigned DB 7FH ;15 - DELETE key DB 10H ;16 - P DB 09H ;17 - I DB 19H ;18 - Y DB 12H ;19 - R DB 17H ;1A - W DB 09H ;1B DB 1AH ;1C - 1 key on key pad DB 18H ;1D - 2 key on key pad DB 00H ;1E DB 00H ;1F ; DB 00H ;20 DB 0DH ;21 - M DB 00H ;22 DB 02H ;23 - B DB 03H ;24 - C DB 1BH ;25 - ESCape key DB 1FH ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0FH ;2A - INSERT DB 0FH ;2B - O DB 15H ;2C - U DB 14H ;2D - T DB 05H ;2E - E E key DB 00H ;0C DB 0BH ;0D - K DB 08H ;0E - H DB 06H ;0F - F ; DB 13H ;10 - S DB 1AH ;11 - Z DB 13H ;12 - 4 key on key pad DB 1EH ;13 - 5 key on key pad DB 00H ;14 - not assigned DB 7FH ;15 - DELETE key DB 10H ;16 - P DB 09H ;17 - I DB 19H ;18 - Y DB 12H ;19 - R DB 17H ;1A - W DB 09H ;1B DB 1AH ;1C - 1 key on key pad DB 18H ;1D - 2 key on key pad DB 00H ;1E DB 00H ;1F ; DB 00H ;20 DB 0DH ;21 - M DB 00H ;22 DB 02H ;23 - B DB 03H ;24 - C DB 1BH ;25 - ESCape key DB 1FH ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0FH ;2A - INSERT DB 0FH ;2B - O DB 15H ;2C - U DB 14H ;2D - T DB 05H ;2E - E DB 11H ;2F - Q ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 00H ;34 - single quote character DB 0CH ;35 - L DB 0AH ;36 - J DB 07H ;37 - G DB 04H ;38 - D DB 01H ;39 - A DB 00H ;3A - not assigned DB 00H ;DB 11H ;2F - Q ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 00H ;34 - single quote character DB 0CH ;35 - L DB 0AH ;36 - J DB 07H ;37 - G DB 04H ;38 - D DB 01H ;39 - A DB 00H ;3A - not assigned DB 00H ;3B - not assigned DB 00H ;3C - not assigned DB 00H ;3D DB 00H ;3E DB 00H ;3F ; DB 00H ;40 DB 00H ;41 DB 00H ;42 DB 00H ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB 00H ;47 DB 00H ;48 DB 00H ;49 DB 00H ;4A DB 00H ;4B DB 00H ;4C DB 00H ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB 12H ;50 - 9 key on the key pad DB 04H ;51 - 6 key on the key pad DB 03H ;52 - 3 key on the key pad DB 1EH ;53 - . key on the key pad DB 1CH ;54 - F1 key on the key pad DB 00H ;55 - not assigned DB 00H ;56 - not assigned DB 00H ;57 - not assigned DB 1DH ;58 - F2 key on the key pad DB 00H ;59 - not assigned DB 00H ;5A - not assigned 3B - not assigned DB 00H ;3C - not assigned DB 00H ;3D DB 00H ;3E DB 00H ;3F ; DB 00H ;40 DB 00H ;41 DB 00H ;42 DB 00H ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB 00H ;47 DB 00H ;48 DB 00H ;49 DB 00H ;4A DB 00H ;4B DB 00H ;4C DB 00H ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB 12H ;50 - 9 key on the key pad DB 04H ;51 - 6 key on the key pad DB 03H ;52 - 3 key on the key pad DB 1EH ;53 - . key on the key pad DB 1CH ;54 - F1 key on the key pad DB 00H ;55 - not assigned DB 00H ;56 - not assigned DB 00H ;57 - not assigned DB 1DH ;58 - F2 key on the key pad DB 00H ;59 - not assigned DB 00H ;5A - not assigned DB 00H ;5B - not assigned DB p00H ;5C - not assigned DB 00H ;5D - not assigned DB 00H ;5E - not assigned DB 00H ;5F - not assigned ; ;**, ; ; KEY WITH SHIFT AND WITH CONTROL ; ;***4 DB 00H ;5B - not assigned DB 00H ;5C - not assigned DB 00H ;5D - not assigned DB 00H ;5E - not assigned DB 00H ;5F - not assigned ; ; IOSIZ EQU (($-BIOS)/80H)+1 ; ; ; DEFINE INTERRUPT VECTOR TABLE ; DS 8 - ( $ AND 7 ) ;EVEN BOUNDRY DMAIV: DW SRVDMA ;DMA VECTORS DW SRVDMA ; DW SRVDMA ; DW SRVDMA ; CTCIV: DW TIME ;REAL TIME CLOCK DW INTER ;NOT USED DW INTER ;NOT USED DW IDSK ;FLOPPY DISK INTERRUPT ; DW 0,0,0,0 ;ROOM FOR MORE ; ; SIGNON MESSAGE ; MSG: DB 'Eagle CP/M version 2.2.' DB VER + 'A' DB ' ' DB 0 ; MSG1: DB '(Double sided version)' DB 0 ; ; COLD BOOT ENTRY ; BOOT: DI ;JUST IN CASE LXI SP,100H ;USE CPM STACK AREA ; ; CLEAR OUR WORK AREA ; LXI H,BEGDAT ;POINT AT BEGINNING MVI M,0 ;CLEAR IT LXI D,BEGDAT+1 ;ONE MORE LXI B,DATSIZ ;GET THE SIZE DW LDIR ;CLEAR THE DATA AREA ; LXI H,0 ;CLEAR THE BOTTOM PART OF RAM LXI D,1 ; LXI B,0FFH ; MVI M,0 ; DW LDIR ; ; SETUP THE DEVICES ; CALL SETIV ;SET THE CTC AND INTERRUPTS ; MVI RESET THE DISK LXI SP,100H ;SET STACK CALL SETIV ;SET THE INTERRUPT VECTORS EI ; ; MVI C,0 ;SET TO WARM BOOT FROM DRIVE A: CALL SETDSK ;SET THE DISK DRIVE LXI B,0 ; CALL SETTRK ;SET THE TRACK ADDRESS LXI B,1 ; CALL SETSEC ;SET THE FIRST SECTOR NUMBER LXI B,CCP ;SET THE LOAD ADDRES CALL SETDMA ; MVI A,NSECT ;GET THE SIZE STA NBRSC ;SET THE NUMBER OF SECTORS ; WBOOT1: CALL READ ;DO A SECTOR READ ORA A ;DO A SECTOR READ JNZ WBOOT ;TRY AGAIN FROM THE TOP LXI H,NBRSC ;POINT AT OUR COUNT DCR M ;COUNT DOWN JZ GOCPM ;ALL DONE LXI D,80H ;SET THE SECTOR SIZE LHLD DMAAD ;GET THE CURRENT ADDRESS DAD D ;POINT TO NEXT SHLD DMAAD ;PUT IT BACK LXI H,SECTOR ;POINT AT SECTOR INR M ;BUMP IT LDA CPMSPT ;GET THE SECTORS PER TRACK DCR A ;ADJUST IT CMP M ;COMPARE JNC WBOOT1 ;CONTINUE MVI M,0 ;RESET TO ZERO LHLD TRACK ;GET THE TRACK INX H ;BUMP SHLD TRACK ;PUT IT BACK JMP WBOOT1 ;CONTINUE ; ; ALL DONE - SET TO GO TO CPM ; GOCPM: CALL SETCPM ;SET THE ENTRY POINA,0FH ; OUT PO1AS ;SET LINE PRINTER PORT AS OUTPUT MVI A,07H ; OUT PO1AS ; MVI A,0CFH ;SET PORT B AS A CONTROL PORT ; OUT PO1BS ; MVI A,0FDH ;SET THE DIRECTION OF THE LINES OUT PO1BS ; MVI A,07 OUT PO1BS ;NO INTERRUTS ; MVI A,00 ; OUT PO1AD ;CLEAR THE DATA LATCH MVI A,02 ; OUT PO1BD ;SET THE STROBE HIGH ; ; SETUP THE SECOND PARALELL I/O PORT FOR HARD DISK ; MVI A,0CFH ;PORT A OUT PO2AS ; MVI A,0FFH ; OUT PO2AS ; MVI A,07H ; OUT PO2AS ;NO INTERRUPTS ; MVI A,0CFH ;PORT B OUT PO2BS ; MVI A,0FH ;UPPER NIBBLE OUT, LOWER IN OUT PO2BS ; MVI A,07H ;NO INTERRUPTING OUT PO2BS ; MVI A,70H ; OUT PO2BD ;SET THE OUTPUT BITS ; MVI A,MXDSK ; STA CDISK ;RESET THE DRIVE STA LDSK ;RESET THE LAST DISK ; LXI H,SAINT ;GET THE INIT STRING FOR SIO A MVI C,01 ; CALL LINIT ;DO IT LXI H,SBINT ; MVI C,81H ; CALL LINIT ;DO IT LXI H,PPINT ; MVI C,0C1H ; CALL LINIT ; ; LDA IBYTE ; STA IOBYTE ;SET THE I/O BYTE ; MVI C,CS ; CALL CONO ;CLEAR THE <TS LDA SYSFL ;GET THE FLAG ANI 1 ;WHICH ENTRY POINT JZ CCP ; JMP CCP+3 ;USE THE CLEAR ENTRY POINT ; ; SET UP CP/M ENTRIES ; SETCPM: LXI H,DPBK1A;ASSUME SINGLE SIDED LXI D,DPBK1B LDA DSKFL ;GET THE DISK FLAG MOV C,A ;SAVE IT CPI 1 ; JNZ STCPM1 ;CONTINUE XCHG STCPM1: SHLD DPBA ;SET SHLD DPBB ; XCHG SHLD DPBI SHLD DPBJ ; MVI A,0C3H ;GET JUMP INSTRUCTION STA 0 ;STORE FOR WARM BOOT LXI H,WBOOTE;WARM BOOT ENTRY SHLD 1 ;FINISH JUMP INSTRUCTION STA 5 ;CP/M ENTRY JUMP LXI H,BDOS ;POINT AT BDOS ENTRY SHLD 6 ;FINISH JUMP INSTRUCTION LXI H,80H ;DEFAULT BUFFER ADDRESS SHLD DMAAD ;SET IT LDA BDISK ;GET THE CURRENT BOOT DISK MOV C,A ;LOG IN THE BOOT DISK RET ;ALL DONE ; ; SETUP THE INTERRUPT VECTORS FOR CTC ; SETIV: MVI A,PROFF ;SET THE PROM OFF STA MTRFL ;CLEAR THE MOTOR FLAG OUT SYSCN ;AND SET IT XRA A ; STA REVFL ;CLEAR ANY REVERSE VIDEO MVI A,03H ; OUT CTC0 ;RESET CLOCK 0 LHLD SIOA ;GET THE CONTROL FOR SIO PORT A MOV A,L ;GET THE CONTROL BYTSCREEN AND INIT VIDEO ; LXI H,MSG ;POINT AT THE SIGNON MESSAGE LDA CCP+7 ; ORA A ; JNZ BOOT1 ;AUTO BOOT - NO MESSAGE CALL PRNMSG ;PRINT THE SIGN ON MESSAGE LXI H,MSG1 ; LDA DSKFL ;GET THE SINGLE/DOUBLE FLAG ANI 1 ; CNZ PRNMSG ;PRINT THE DOUBLE SIDED MESSAGE BOOT1: CALL SETCPM ;SET THE CPM VECTORS ; JMP CCP ;CONTINUE ; ; SOME DEVICES REQUIRE AN INIT STRING ; LINIT: MOV A,M ;GET THE FIRST CHARACTER OF THE STRING ORA A ;IS IT ZERO? RZ ;YES MOV A,C ;GET THE IOBYTE VALUE STA IOBYTE ;AND SET IT PUSH H ;SAVE THE POINTER CALL LPTS ;CALL THE STATUS ROUTINE POP H ;GET IT BACK ORA A ;IS IT READY? RZ ;NO LINT1: MOV A,M ;GET THE CHARACTER ORA A ;IS IT THE END RZ ;YES MOV C,A ;NO, SET THE CHARACTER UP INX H ;BUMP PUSH H ;SAVE IT CALL LPTO ;DO IT POP H ;GET IT BACK JMP LINT1 ;CONTINUE ; ; WARM BOOT ENTRY ; WBOOT: DI ;DONT INTERRUPT XRA A ;0 TO ACCUMULATOR STA HSTACT ;HOST BUFFER INACTIVE STA HSTWRT ;CLEAR BUFFER WRITTEN MVI A,MXDSK ; STA LDSK ; ] E OUT CTC1 ;PUT IT OUT MOV A,H ;GET THE COUNTER OUT CTC1 ; LHLD SIOB ;GET THE CONTROL BYTES FOR PORT B MOV A,L ;GET THE CONTRL BYTE OUT CTC2 ;PUT IT OUT MOV A,H ;GET THE COUNTER BYTE OUT CTC2 ; MVI A,0D5H ;SET FOR INTERRUPT OUT CTC3 ; MVI A,1 ; OUT CTC3 ; ; LXI H,SIOCM ; MVI C,SIOAS ;SET THE SIO-A PORT ADDR MVI B,SIOLN ;SET THE LENGTH DW OUTIR ;SET THE SIO ; LXI H,SIOCM ; MVI C,SIOBS ;SET THE SIO-B PORT ADDR MVI B,SIOLN ;SET THE LENGTH DW OUTIR ;PUT IT OUT ; ; LXI H,CTCIV ;POINT AT THE VECTOR TABLE MOV A,L ;GET THE LOW ORDER OUT CTC0 ;SET THE VECTOR FOR THE CTC MOV A,H ;GET THE HIGH ORDER ADDR DW STAI ;SET THE I REG DW IM2 ;SET INTERRUPT MODE 2 ; LDA SYSFL ;GET THE SYSTEM FLAG ANI 2 ;CHECK IT RZ ;DONT WASTE IT ; IN KYBDD ;WASTE ANY CHARACTER STORED UP IN KYBDD ;JUST IN CASE ; RET ;NOW LEAVE ; ; PRINT MESSAGE UTILITY ; PRNMSG: MOV A,M ;GET IT ORA A ;IS IT THE END? RZ ;YES INX H ;BUMP MOV C,A ;SAVE IT PUSH H ;SAVE CALL CON VT ROUTINES ; COTBL: DW SAOUT ;0 - TTY: DW VIDEO ;1 - CRT: DW LSTOT ;2 - BAT DW SBOUT ;3 - UC1: ; ; READER INPUT ROUTINES ; RITBL: DW KYBIN ;0 - TTY: DW KYBIN ;1 - PTR: DW SAIN ;2 - UR1: DW SBIN ;3 - UR2: ; ; READ INPUT STATUS ROUTINES ; RSTBL: DW KYBST ;0 - TTY: DW KYBST ;1 - PTR: DW SAIST ;2 - UR1: DW SBIST ;3 - UR2: ; ; PUNCH OUTPUT ROUTINES ; PNTBL: DW SAOUT ;0 - TTY: DW SBOUT ;1 - PTP: DW SAOUT ;2 - UP1: DW SBOUT ;3 - UP2: ; ; LIST OUTPUT ROUTINES ; LOTBL: DW SAOUT ;0 - TTY: DW VIDEO ;1 - CRT: DW SBOUT ;2 - LPT: DW PRTOT ;3 - UL1: ; ; LIST OUTPUT STATUS ROUTINES ; LSTBL: DW SAOST ;0 - TTY: DW VDOST ;1 - CRT: DW SBOST ;2 - LPT: DW PRTST ;3 - UL1: ; ; INPUT FROM SIO, PORT A ; SAIN: CALL SAIST ;CHECK THE INPUT STATUS JZ SAIN ;NOT READY YET IN SIOAD ;GET DATA ANI 7FH ;MASK IT OFF MOV C,A ;SAVE IT MVI A,30H ;GET THE RESET ERRORS FLAG OUT SIOAS ;PUT IT OUT MOV A,C ;GET THE CHARACTER BACK IN CASE RET ;NOW LEAVE ; ; INPUT STATUS CHEC o;O ;OUTPUT POP H ;GET IT BACK JMP PRNMSG ;CONTINUE ; ;**.* ; ; CONSOLE AND LINE PRINTER DRIVERS ; ;** ; ; ; CONSOLE INPUT ; CONIN: PUSH H ;SAVE H-L LXI H,CITBL ;GET THE INPUT TABLE JMP CCOM ;JOIN COMMON CODE ; ; CONSOLE OUTPUT ROUTINE ; CONOT: PUSH H ;SAVE H-L REG LXI H,COTBL ;GET THE OUTPUT TABLE JMP CCOM ;JOIN COMMON CODE ; ; CONSOLE INPUT STATUS ROUTINE ; CONIS: PUSH H ;SAVE H-L LXI H,CSTBL ;GET THE TABLE JMP CCOM ;JOIN COMMON CODE ; ; READER STATUS ROUTINE ; RDRST: PUSH H ;SAVE H-L LXI H,RSTBL ;GET THE READER STATUS TABLE JMP DORDR ;CONTINUE ; ; READER INPUT ROUTINE ; RDRIN: PUSH H ;SAVE THE HL LXI H,RITBL ;GET THE CORRECT TABLE DORDR: LDA IOBYTE ;GET THE I/O BYTE RRC ;SHIFT IT OVER JMP DCOM ;CONTINUE ; ; PUNCH OUTPUT ROUTINE ; PUNOT: PUSH H ;SAVE H-L LXI H,PNTBL ;GET THE TABLE LDA IOBYTE ;GET THE $I/O BYTE RRC ;SHIFT IT OVER RRC K FOR SIO, PORT A ; SAIST: MVI A,10H ; OUT SIOAS ;RESET EXTERNAL CONDITIONS OUT SIOAS ; IN SIOAS ;GET THE STATUS ANI SIORB ;CHECK FOR A CHARACTER READY RZ ;NO READY YET - LEAVE MVI A,0FFH ;THERE IS A CHARCTER READY RET ; ; ; OUTPUT TO SIO PORT A ; SAOUT: CALL SAOST ;CHECK THE OUTPUT STATUS JZ SAOUT ;NOT READY, WAIT MOV A,C ;GET THE CHARACTER OUT SIOAD ;PUT THE CHARACTER OUT RET ;AND LEAVE ; ; OUTPUT STATUS FOR SIO PORT A ; SAOST: MVI A,10H ;GET THE CONDITION RESET OUT SIOAS ;RESET CONDITION OUT SIOAS ; IN SIOAS ;GET THE STATUS LXI H,SAOMK ;POINT AT THE MASK ANA M ;MASK OFF THE BITS INX H ;POINT TO VALUE CMP M ;IS IT THE SAME? JZ SAORD ;YES XRA A ;NO RET ; SAORD: MVI A,0FFH ;YES, SET ACC READY ORA A ; RET ;AND LEAVE ; ; INPUT FROM SIO PORT A ; SBIN: CALL SBIST ;IS THERE A CHARACTER THERE? JZ SBIN ;NOT READY YET IN SIOBD ;GET DATA ANI 7FH ;MASK IT OFF MOV C,A ;SAVE IT MVI A,30H ;GET THE RESET ERRORS FLAG OUT SIOBS ;PUT IT OUT MOV A,  RRC JMP DCOM ;CONTINUE ; ; LIST OUTPUT ROUTINE ; LSTOT: PUSH H ; LXI H,LOTBL ;GET THE CORRECT TABLE DOLST: LDA IOBYTE ;GET THE F/O BYTE RLC ;SHIFT IT INTO POSTION RLC ; RLC ; JMP DCOM ;CONTINUE ; ; LIST OUTPUT STATUS ROUTINE ; LSTST: PUSH H ;SAVE HL LXI H,LSTBL ;POINT AT THE LIST STATUS TABLE JMP DOLST ;CONTINUE ; ; COMMON CODE TO ROUTE TO ROUTINES ; CCOM: LDA IOBYTE ;GET THE I/O BYTE RLC ;SHIFT IT OVER DCOM: ANI 6 ;MASK IT OFF PUSH D ;SAVE IT MOV E,A ;SET IT MVI D,0 ;CLEAR HIGH ORDER DAD D ;POINT TO ROUTINE MOV E,M ;GET THE LOW BYTE OF ROUTINE INX H ;POINT TO NEXT MOV D,M ;GET IT XCHG ;PUT ROUTINE ADDR IN H-L POP D ;RESTORE XTHL ;RESTORE H-L PUT ADDR ON STACK RET ;GO TO THE ROUTINE ; ; CONSOLE INPUT ROUTINES ; CITBL: DW SAIN ;0 - TTY: DW KYBIN ;1 - CRT: DW RDRIN ;2 - BAT: DW SBIN ;3 - UC1: ; ; CONSOLE INPUT STATUS ROUTINES ; CSTBL: DW SAIST ;0 - TTY: DW KYBST ;1 - CRT: DW RDRST ;2 - BAT: DW SBIST ;3 - UC1: ; ; CONSOLE OUTPU!!C ;GET THE CHARACTER BACK IN CASE RET ;NOW LEAVE ; ; INPUT STATUS CHECK FOR SIO - PORT A ; SBIST: MVI A,10H ; OUT SIOBS ;EXTERNAL CONDITION RESET OUT SIOBS ; IN SIOBS ;GET THE STATUS ANI SIORB ;CHECK FOR A CHARACTER READY RZ ;NO READY YET - LEAVE MVI A,0FFH ;THERE IS A CHARCTER READY RET ; ; ; OUTPUT TO SIO PORT B ; SBOUT: CALL SBOST ;IS THE XMIT BUFFER EMPTY? JZ SBOUT ;NO, WAIT MOV A,C ;GET THE CHARACTER OUT SIOBD ;PUT THE CHARACTER OUT RET ;AND LEAVE ; ; OUTPUT STATUS FOR SIO PORT B ; SBOST: MVI A,10H ; OUT SIOBS ;RESET EXTERNAL CONDITION OUT SIOBS ; IN SIOBS ;GET THE STATUS LXI H,SBOMK ;POINT AT THE MASK ANA M ;MASK OFF THE WANTED BITS INX H ; CMP M ;CHECK TO SEE IF READY JZ SBORD ;YES XRA A ;SET NOT READY RET ;AND LEAVE SBORD: MVI A,0FFH ;SET READY ORA A ; RET ;AND LEAVE ; ; PARALELL PRINTER ROUTINES ; PRTST: IN PO1BD ;GET THE STATUS INFORMATION ANI 30H ;IS THERE A PRINTER THERE? RZ ;NO, JUST LEAVE IN PO1BD ;GET THE STATUS AGAIN!ITS ; C CONTAINS THE DATA (X-Y) BITS ; MOV A,E ; ANI 3 ;SAVE JUST THE SHFIT AND CONTROL BITS MOV E,A ; MVI B,0 ;CLEAR MOV D,B ;HIGH ORDER BYTES LXI H,KYTBL ;POINT AT THE TABLE DAD D ;POINT TO THE PROPER DAD D ;TABLE ADDRESS MOV E,M ;GET THE CORRECT TABLE ADDRESS INX H ; MOV D,M ; XCHG ; DAD B ;INDEX TO THE PROPER CHARACTER MOV A,M ;GET THE CHARACTER MOV C,A ;SAVE IT JUST IN CASE ORA A ;IS IT A NULL (UNDEFINED) JZ KYBIN ;NOT VALID - RESTART THE PROCESS ; ; CHECK FOR ALPHA LOCK PROCESSING ; CPI 'a' ;CHECK THE RANGE RC ;NO CPI 'z'+1 ; RNC ;NOT IN THE ALPHA RANGE IN KYBDS ;GET THE STATUS BACK ANI KYALP ;CHECK FOR ALPHA LOCK DOWN MOV A,C ;GET THE CHARACTER BACK RZ ;NO ALPHA LOCK - LEAVE ANI 5FH ;MAKE THIS UPPER CASE MOV C,A ;SAVE IT RET ;AND LEAVE ; ; VIDEO CONTROLLER STATUS CHECK ; VDOST: IN VSTAT ;GET THE VIDEO STATUS ANI VLRDY ;ARE WE READY FOR A CHARACTER? RZ ;NO MVI A,0FFH ;YES RET ; ; ; VIDEO CONTROLLER OUTPUT ROUTINE ; VIDEO!/ CMA ;MAKE THE SIGNAL A HI TRUE READY SIGNL ANI 04H ;IS IT READY FOR A CHARACTER? RZ ;NOT YET MVI A,0FFH ;YES, SET ALL BITS IN CASE RET ;AND LEAVE ; ; OUTPUT THE CHARACTER IN REG C TO THE PRT ; PRTOT: LXI H,PIO1 ;POINT AT THE CONTROL BLOCK MOV A,M ;GET THE CONTROL FLAG ANI 02 ;SOFTWARE FORM FEED? JZ PRTO10 ;NO MOV A,C ;YES, GET THE CHARACTER CPI LF ;IS IT A LINE FEED? JZ PRTF1 ;YES CPI FF ;IS IT A FORM FEED? JZ PRTF2 ; JMP PRTO10 ;NO, CONTINUE ; ; CHARACTER IS A LINE FEED ; PRTF1: INX H ;POINT AT CURRENT LINE INR M ;BUMP MOV A,M ;GET IT INX H ;POINT AT NEXT CMP M ;IS THIS THE END? DCX H ;BACKUP JNZ PRTO10 ;NO MVI M,0 ;RESET TO ZERO JMP PRTO10 ;CONTINUE ; ; PROCESS A FORM FEED ; PRTF2: INX H ;POINT AT CURRENT LINES MOV D,M ;GET THE CURRENT NUMBER OF LINES MVI M,0 ;CLEAR IT INX H ;POINT AT TOTAL MOV E,M ;GET THE TOTAL DCX H ;POINT BACK PRTF3: MOV A,D ;GET THE CURRENT CMP E ;ARE WE DONE YET? RZ ;YES PUSH D ;SAVE MVI C,LF ;OUTPUT A LI!: DI ; DW SSPD,SVDSTK ;SAVE THE OLD STACK LXI SP,VDSTK;GET OUR OWN PUSH H ; PUSH D ; PUSH B ; EI ;ENABLE CALL GTCUR ;GET THE CURSOR POSITION IN HL LDA ESCFL ;GET THE ESCAPE FLAG ORA A ;IS IT SET? JNZ ESCPR ;YES, PROCESS THE NEXT CHARACTER MOV A,C ;GET THE CHARACTER ANI 7FH ;PARITY BIT MUST NOT BE ON CPI 7FH ;CHECK FOR A RUBOUT JZ VRET ;RUBOUT IS A NO-OPERATION CPI 07H ;BELL? JZ BELL ; CPI 08H ;BACKSPACE? JZ VLEFT ;CURSOR LEFT CPI 0AH ;IS IT LINE FEED? JZ VDOWN ;LINE FEED - CURSOR DOWN CPI 0BH ;UP? JZ VUP ;CURSOR UP CPI 0CH ; JZ VRIGH ;CURSOR RIGHT CPI 0DH ; JZ VCR ;CARRIAGE RETURN CPI 1AH ; JZ VCLR ;CLEAR THE VIDEO CPI 1EH ; JZ VHOME ;HOME THE CURSOR CPI 01BH ; JZ VESC ;ESCAPE - BEGIN SPECIALS CPI ' ' ;IS IT A "NON PRINTING" CHARACTER? JC VRET ;YES, DONT PUT IT IN ; ; THIS IS NOT A SPECIAL CHARACTER ; VINSR: LDA REVFL ;GET THE REVERSE FLAG XRA C ;COMBINE THE CHARACTER MOV C,A ;PUT IT BACK CALL PTCHR ;PUT THE CHARACTER OUT MOV !jNE FEED CALL PROUT ;NO, PUT OUT A LINE FEED POP D ;GET IT BACK INR D ;BUMP THE COUNT JMP PRTF3 ;CONTINUE ; ; ACTUAL OUTPUT ROUTINE ; PRTO10: LDA PIO1 ;GET THE FLAGS ANI 1 ;FILTER LINE FEEDS JZ PROUT ;NO MOV A,C ;YES, GET THE CHARACTER CPI LF ;IS IT LINE FEED? RZ ;YES ; ; AT LAST, THE REAL OUTPUT ROUTINE ; PROUT: CALL PRTST ;CHECK THE STATUS JZ PROUT ;NOT YET MOV A,C ;PRINTER IT READY - GET THE CHARACTER OUT PO1AD ;PUT IT OUT MVI A,00 ;PROVIDE A STROBE OUT PO1BD ; MVI A,02H ; OUT PO1BD ;CLEAR THE STROBE RET ;AND LEAVE ; ; CHECK KEYBOARD INPUT STATUS ; KYBST: IN KYBDS ;GET THE STATUS ANI KYRDY ;CHECK FOR READY RZ ;NOT YET MVI A,0FFH ;SET FOR READY RET ;AND LEAVE ; ; INPUT FROM THE KEYBOARD ROUTINE ; KYBIN: IN KYBDS ; MOV E,A ;GET IT AND SAVE IT ANI KYRDY ;GET STATUS JZ KYBIN ;LOOP IN KYBDD ;GET THE DATA ANI 7FH ;MASK OFF THE UNWANTED BITS CPI CTMAX ;IS IT VALID? JNC KYBIN ;NO, TRY AGAIN MOV C,A ;SAVE IT ; ; E CONTAINS THE STATUS B"O"A,L ;GET THE CHARACTER POSITON CPI 79 ;ARE WE NEAR THE END OF THE LINE JNC VNWL ;NEW LINE ; ; ; UDRET: CALL INRCP ;BUMP THE CHARACTER POSITION ; ; COMMON RETURN POINT ; VRET: CALL PTCUR ;PUT THE CURSOR OUT VCRET: DI ; POP B ;RESTORE POP D ; POP H ; DW LSPD,SVDSTK ;RESTORE EI ; RET ;LEAVE THE SUBROUTINE ; ; MOVE THE CURSOR UP ONE LINE ; VUP: CALL DCRLN ;BACKUP ONE LINE JMP VRET ;AND LEAVE ; ; NEW LINE ; VNWL: MVI L,0 ; ; ; MOVE CURSOR DOWN ONE LINE ; VDOWN: LDA LSTLN ;GET THE LAST LINE DISPLAYED CMP H ;ARE WE ON THAT ONE? JNZ VDWN1 ;NO CALL SCROL ;YES, SCROLL IT JMP VRET ;AND LEAVE VDWN1: CALL INRLN ;BUMP THE LINE JMP VRET ;AND LEAVE ; ; CURSOR LEFT ONE CHARACTER POSITION ; VLEFT: CALL DCRCP ;BACK UP ONE CHARACTER POSITION JMP VRET ;AND LEAVE ; ; CURSOR RIGHT ONE CHARACTER POSITION ; VRIGH: CALL INRCP ; JMP VRET ; ; ; DO A CARRIAGE RETURN - RETURN THE CURSOR TO THE ; BEGINNING OF THE LINE - DO NOT CLEAR THE LINE ; VCR: MVI L,0 ;CLEAR THE CH"9ADD B ;COMBINE CPI 24 ;DID WE WRAP AROUND? JC YCOR3 ;NO SUI 24 ;YES YCOR3: STA YHOLD ;HOLD THIS VALUE MVI A,0FFH ;SET FOR NEXT TIME ; ; SET FLAG FOR SECONDARY ROUTING ; POSCR: STA ESCFL ;SET FOR X VALUE JMP VCRET ;AND RETRUN ; ; CLEAR THE SCREEN ; ESSCL: XRA A ; STA ESCFL ;CLEAR THE FLAG JMP VCLR ;CLEAR THE SCREEN ; ; SET REVERSE VIDEO ; STREV: MVI A,80H ; STA REVFL ; JMP ESCRT ;CLEAR AND RETURN ; ; CLEAR REVERSE VIDEO ; CLREV: XRA A ; STA REVFL ; JMP ESCRT ; ; ; ERASE TO END OF THE CURRENT LINE ; ESEOL: CALL VEOL ;CLEAR TO THE END OF THE LINE JMP ESCRT ;AND LEAVE ; ; ERASE TO END OF PAGE ; ESEOP: PUSH H ;SAVE CALL VEOL ; POP H ;GET IT BACK LDA LSTLN ;GET THE LAST LINE NUMBER CMP H ;HAVE WE DONE THE LAST LINE JZ ESCRT ;YES MVI L,0 ;NO, START AT THE BEGIN OF NEXT CALL INRLN ;BUMP THE LINE JMP ESEOP ;CONTINUE ; ; COMMON ESCAPE SEQUENCE EXIT ROUTINE ; ESCLR: XRA A ; STA ESCFL JMP VRET ;UPDATE CURSOR AND LEAVE ; ; COMMON ESCAPE SEQUENCE E"ARACTER POSITION JMP VRET ;AND LEAVE ; ; CLEAR EVERYTHING ; VCLR: LXI H,0 ;SET FOR THE TOP MVI C,' ' ;SET FOR A BLANK VCLR1: CALL PTCHR ;CLEAR THE LINE CALL INRCP ;BUMP THE LINE MOV A,H ;GET IT ORA L ; JNZ VCLR1 ;KEEP GOING MVI A,23 ; STA LSTLN ;RESET LAST LINE OUT VCIR6 ;MAKE SURE WE AGREE JMP VRET ;UPDATE AND LEAVE ; ; HOME THE CURSOR TO THE TOP OF THE DISPLAY ; VHOME: LDA LSTLN ;GET THE CURRENT LAST LINE MOV H,A ;SET THIS VALUE MVI L,0 ;ASSUME FIRST POSITION CALL INRLN ;POINT TO THE TOP LINE ON THE DISPLAY JMP VRET ;AND LEAVE ; ; CHARACTER WAS AN ESCAPE - BEGIN THE ESCAPE SEQUENCE ; VESC: STA ESCFL ;SET THE FLAG JMP VCRET ;AND JUST LEAVE ; ; THIS IS THE FIRST CHARACTER FOLLOWING AN ESCAPE ; THIS ROUTINE WILL ANSWER TO SEVERAL DIFFERENT ; ESCAPE CODE SEQUENCES ; ESCPR: CPI ESC ;IS THIS THE FIRST CHARACTER AFTER ESC JNZ ESCNX ;NO, POSITIONING SEQUENCE MOV A,C ;GET THE CHARACTER ANI 7FH ;JUST IN CASE CPI '=' ; JZ POSCR ;CURSOR POSITIONING COMMAND "BXIT - NO CURSOR UPDATE ; ESCRT: XRA A ; STA ESCFL ;CLEAR THE FLAG JMP VCRET ;AND LEAVE ; ; PROCESS A BELL CODE ; BELL: LXI H,BEEPC ;POINT AT THE BEEPER MOV A,M ;GET THE COUNT ORA A ;IS IT SET? JNZ VCRET ;YES, LEAVE LDA BPCNT ;GET THE BEEPER CONTROL ORA A ;SET IT SET? JZ VCRET ;NO, NO BEEPER DI ; MOV M,A ;SET THE BEEPER LXI H,MTRFL ;GET THE FLAG MOV A,M ;GET IT ORI BEEPR ;SET THE BIT OUT SYSCN ;SET CONTROL MOV M,A ;PUT IT BACK CALL STINT ;SET OUR INTERRUPTS EI ; JMP VCRET ;NOW LEAVE ; ; CONTROLLER UTILITIES ; GTCUR: IN VCRCC ;GET THE CHARACTER POSITION ANI 07FH ;MASK IT OFF MOV L,A ;SAVE IT IN VCRCL ;GET THE LINE POSITION ANI 1FH ;MASK IT MOV H,A ;SAVE IT RET ;AND LEAVE ; ; SET A NEW CURSOR POSITION ; PTCUR: MOV A,H ;DO LINE FIRST ANI 1FH ;MASK IT OUT VCWCL ;GIVE IT TO THE CONTROLLER MOV A,L ;GET THE CHARACTER POSITION ANI 07FH ;MASK IT OUT VCWCC ;PUT IT OUT RET ;AND LEAVE ; ; PUT THE CHARACTER IN C REG TO THE VIDEO MEMORY ; PTC"CPI '+' ; JZ ESSCL ;SCREEN CLEAR? CPI '*' ; JZ ESSCL ;SCREEN CLEAR? CPI ')' ; JZ STREV ;SET REVERSE? CPI '(' ; JZ CLREV ;CLEAR REVERSE? CPI 'T' ; JZ ESEOL ;ERASE TO END OF LINE? CPI 'Y' ; JZ ESEOP ;ERASE TO END OF PAGE? CPI 'Z' ; JZ ESEOP ;ERASE TO END OF PAGE? ; JMP ESCRT ;UNKNOWN SEQUENCE ; ; THIS IT THE SECOND LEVEL ROUTING ; ESCNX: CPI '=' ;IS THIS FOLLOWING A '=' JZ YCOR ;YES, PROCESS CPI 0FFH ;ARE WE WAITING FOR THE Y COR JNZ ESCRT ;NO ; ; THIS IS THE X-AXIS VALUE FOR CURSOR POSITION ; XCOR: MOV A,C ;GET THE VALUE SUI 20H ;ADJUST IT CPI 80 ; JC XCOR2 ;INVALID MVI A,79 ;RESET TO MAC XCOR2: MOV L,A ;SET IT LDA YHOLD ;GET THE Y VALUE MOV H,A ;SET IT JMP ESCLR ;CLEAR AND UPDATE CURSOR ; ; THIS IS THE Y-AXIS (LINE) VALUE FOR THE CURSOR POSITION ; YCOR: MOV A,C ;GET THE INPUT CHARACTER SUI 20H ;ADJUST THE VALUE CPI 24 ; JC YCOR2 ;INVALID MVI A,23 ;TEST YCOR2: MOV B,A ;SAVE IT LDA LSTLN ;GET THE ADJUSTMENT INR A ;MAKE IT THE TOP LINE ##HR: IN VSTAT ;GET THE MEMORY LATCH STATUS ANI VLRDY ;IS IT EMPTY? JZ PTCHR ;NO, WAIT MOV A,L ;GET THE CHARACTER POSITION OUT VMCHP ; MOV A,H ; OUT VMLIN ; MOV A,C ;GET THE CHARACTER OUT VMDAT ;WRITE THE CHARACTER RET ;NOW WE CAN LEAVE ; ; INCREMENT THE CHARACTER POINTER ; INRCP: INR L ;BUMP THE CHARACTER POSITION MOV A,L ;GET IT BACK CPI 80 ;ARE WE AT THE END? RC ;NO MVI L,0 ;CLEAR TO FIRST ; ; INCREMENT THE LINE NUMBER ; INRLN: INR H ;BUMP THE LINE NUMBER MOV A,H ;GET IT CPI 24 ;ARE WE AT THE END? RC ; MVI H,0 ;CLEAR THE FIRST RET ;AND LEAVE ; ; DECREMENT THE CHARACTER POSITION ; DCRCP: DCR L ;BACK UP MOV A,L ;GET IT CPI 80 ;DID WE WRAP AROUND? RC ;NO MVI L,79 ;YES, SET TO END OF LINE ; ; DECREMENT THE LINE NUMBER ; DCRLN: DCR H ;BACK UP MOV A,H ;GET IT CPI 24 ;DID WE WRAP AROUND? RC ;NO MVI H,23 ;YES, RESET RET ; ; SCROLL ; SCROL: LDA LSTLN ;GET THE LAST LINE MOV H,A ;PUT IT IN LINE NUMBER CALL INRLN ;POINT TO THE NEW TOP #eMK PARAMTER ADR DAD D ;POINT AT ADDR FOR PARAMETERS MOV E,M ;GET THE TABLE ADDRESS INX H ; MOV D,M ;GET IT POP H ; RET ; ;**'* ; ; LOGICAL DISK READ ROUTINE ; ;*** ; READ: XRA A STA UNACNT ;CLEAR THE UNALLOCATED COUNT MVI A,1 STA READOP ;READ OPERATION STA RSFLAG ;MUST READ DATA MVI A,WRUAL STA WRTYPE ;TREAT AS UNALLOC JMP RWOPER ;TO PERFORM THE READ ; ;**#* ; ; LOGICAL WRITE ROUTINE ; ;*** ; WRITE: XRA A ;0 TO ACCUMULATOR STA READOP ;NOT A READ OPERATION MOV A,C ;WRITE TYPE IN C STA WRTYPE CPI WRUAL ;WRITE UNALLOCATED? JNZ CHKUNA ;CHECK FOR UNALLOC ; ; THIS IS THE FIRST WRITE TO AN UNALLOCATED BLOCK. ; SET THE PARAMETERS ; LDA ALLSZ ;GET THE ALLOCATION SIZE STA UNACNT LXI D,UDSK ;POINT WHERE LXI H,CDISK ;POINT WHAT LXI B,4 ;SET THE SIZE DW LDIR ;PU# MOV A,H ;GET IT STA LSTLN ;AND SET PUSH H ;SAVE IT MVI L,0 ;START AT THE BEGINNING CALL VEOL ;ERASE TO END OF LINE IN VCSCR ;SCROLL POP H ;RESTORE HL RET ;AND LEAVE ; ; ERASE TO END OF LINE ; VEOL: MVI C,' ' ;ASSUME A BLANK VEOL1: CALL PTCHR ;PUT IT CALL INRCP ;BUMP IT MOV A,L ;GET THE NEW POSITION ORA A ;IS IT THERE? JNZ VEOL1 ;NO RET ;AND LEAVE ; ; SYSTEM LEVEL DISK OPERATIONS ; ; ; SET THE NEXT TRACK TO ZERO ; SETHOM: LXI B,0 ;SET TRACK FOR ZERO LDA HSTWRT ;CHECK FOR PENDING WRITE ORA A JNZ SETTRK ;WRITE IN PROGRESS STA HSTACT ;CLEAR HOST ACTIVE FLAG ; ; SET THE LOGICAL TRACK NUMBER ; SETTRK: MOV H,B ;SET THE HIGH ORDER MOV L,C ;SET THE LOW ORDER SHLD TRACK ;SET THE TRACK ADDRESS RET ; ; SET DMA ADDRESS ; SETDMA: MOV H,B ;ADDRESS TO HL MOV L,C SHLD DMAAD ;STORE ADDRESS RET ; ; DONT DO THE SECTOR TRANSLATION AT THIS LEVEL ; SCTRN: MVI H,0 ; MOV L,C ; RET ; ; ; SET THE LOGICAL SECTOR NUMBER ; SETSEC: MOV A,C ;SET LOW ORDER STA#T IT OVER ; CHKUNA: LDA UNACNT ;ANY UNALLOC REMAIN? ORA A JZ ALLOC ;SKIP IF NOT ; ; MORE UNALLOCATED RECORDS REMAIN ; DCR A ;UNACNT = UNACNT-1 STA UNACNT ; ; MAKE SURE LOGICAL DISK ADDRESS IS THE SAME ; LXI H,CDISK ;POINT AT BEGINNING OF LOGICAL LXI D,UDSK ;AND UNA LXI B,4 ;SET THE COUNT CALL MCMP ; JNZ ALLOC ;NOT THE SAME ; ; MATCH, MOVE TO NEXT SECTOR FOR FUTURE REF ; LXI H,USEC ; INR M ;UNASEC = UNASEC+1 LDA CPMSPT ;GET THE SIZE DCR A ; CMP M ;CHECK FOR END OF TRACK JNC NOOVF ;SKIP IF NO OVERFLOW ; ; OVERFLOW TO NEXT TRACK ; MVI M,0 ;UNASEC = 0 LHLD UTRK ;GET THE UNALLOC TRAK NUMBER INX H SHLD UTRK ;UPDATE IT ; ; MATCH FOUND, MARK AS UNNECESSARY READ ; NOOVF: XRA A ;0 TO ACCUMULATOR STA RSFLAG ;RSFLAG = 0 JMP RWOPER ;TO PERFORM THE WRITE ; ; NOT AN UNALLOCATED RECORD, REQUIRES PRE-READ ; ALLOC: XRA A ;0 TO ACCUM STA UNACNT ;UNACNT = 0 INR A ;1 TO ACCUM STA RSFLAG ;RSFLAG = 1 ;** * ;* #> SECTOR ;SET THE SECTOR ADDRESS RET ;THAT'S ALL PAGE ; ; SET LOGICAL DISK DRIVE ; SETDSK: LXI H,0 ;ASSUME BAD MOV A,C ;GET THE DRIVE NUMBER CPI MXDSK+1 ; JNC STDER STA CDISK ;SET IT CALL GTPNT ; MOV A,D ORA E JZ STDER SHLD DPPNT ;SET THE DISK POINTER PUSH H ;SAVE THIS LDAX D ;GET THE CPM VALUE OF SECTOR/TRAK STA CPMSPT ;SET IT LXI H,OALSZ ;GET THE OFFSET TO ALLOCATION SIZE DAD D ; MOV A,M ;GET IT INR A ;BUMP IT STA ALLSZ ;AND SET IT LXI H,OSCSM ;POINT AT SECTOR MASK DAD D ; MOV A,M ;GET IT STA SECMSK ;SET THE MASK INX H ; MOV A,M ; STA SECSHF ; POP H ;RESTORE POINT RET ;NOW LEAVE ; STDER: XRA A LXI H,0 RET ; ; GET POINTERS ; GTPNT: 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) PUSH H ;SAVE THIS MOV C,M ;GET THE TRANSLATE TABLE INX H ; MOV B,M ; DCX H ;POINT BACK AT TOP LXI D,10 ;GET THE OFFSET TO DIS$y$ޅ 9 * ;* COMMON CODE FOR READ AND WRITE FOLLOWS * ;*  * ;*** ; RWOPER: DI ; DW SSPD,SRWSTK LXI SP,RWSTK;USE OUR STACK EI ; XRA A ;ZERO TO ACCUM STA ERFLAG ;NO ERRORS (YET) LDA SECSHF ;GET THE SHIFT FACTOR MOV C,A ;SAVE IT INR C ;BUMP IT LDA SECTOR ;GET THE LOGICAL SECTOR RWOPS: DCR C ;COUNT DOWN JZ RWOPE ; ORA A ;CARRY = 0 RAR ;SHIFT RIGHT JMP RWOPS ;LOOP UNTIL DOWN RWOPE: STA REQSEC ;GET THE REQUIRED PHYSICAL SECTOR ; ; ACTIVE HOST SECTOR? ; LXI H,HSTACT ;HOST ACTIVE FLAG MOV A,M MVI M,1 ;ALWAYS BECOMES 1 ORA A ;WAS IT ALREADY? JZ FILHST ;FILL HOST IF NOT ; ; HOST BUFFER ACTIVE, SAME AS SEEK BUFFER? ; LXI H,PDSK ;POINT AT PHYSICAL DISK LXI D,CDISK ;POINT AT REQUEST LXI B,3 ;SET THE SIZE CALL MCMP ;TEST, LEAVING HL => PSEC JNZ NOMATC ;NOT THE SAME ; ; S1AME DISK, SAME TRACK, SAME SECTOR? ; LDA REQSE$VALUE JMP RWCOM ;COMMON ; ; WRITE A SECTOR ; DWRITE: MVI B,5 ;WRITE COMMAND MVI C,69H ; ; ; COMMON ROUTINE FOR READ AND WRITE ; RWCOM: MOV A,C ;GET THE DMA STA DMACM ;SET THE DMA COMMAND MOV A,B ;GET THE CONTROLLER WORD STA RWDCB ;SET IT MVI A,2 ; STA TOTRY ; LXI H,LDSK ;POINT AT THE LAST DISK WE PROCESSED LDA PDSK ;POINT AT THIS ONE CMP M ;IS IT THE SAME? CNZ SELDSK ;NO, SETUP THE PROPER JUNK LXI H,RWTRY ;POINT AT THE RETRY COUNT MVI M,RETRY ;SET IT INX H ;POINT AT THE COMMAND LDA RWDEN ;GET THE CURRENT DENSITY ORA M ;COMBINE IT WITH THE COMMAND MOV M,A ;SET THE COMMAND INX H ;POINT AT THE SELECT INX H ;POINT AT THE TRACK ; ; SET THE PHYSICAL TRACK NUMBER ; MOV B,M ;GET IT LDA PTRK ;GET THE TRACK NUMBER MVI C,0 ;ASSUME HEAD 0 CPI 80 ; JC DOTRK ;SIDE ZERO YET SUI 80 ;ADJUST IT INR C ; DOTRK: MOV M,A ;PUT IT IN SUB B ;TEST FOR A DIFFERENCE IN POSITION STA CHGTK ;SET THE FLAG INX H ;POINT AT THE HEAD BYTE ; ; PROCESS THE HEAD BIT ; MOV A$C ;POINT AT THE REQUESTED SECTOR CMP M JZ MATCH ;SKIP IF MATCH ; ; PROPER DISK, BUT NOT CORRECT SECTOR ; NOMATC: LDA HSTWRT ;HOST WRITTEN? ORA A JZ FILHST CALL DWRITE ;WRITE THE CURRENT BUFFER TO DISK XRA A STA HSTWRT ;CLEAR BUFFER WRITTEN FLAG ; ; MAY HAVE TO FILL THE HOST BUFFER ; FILHST: LXI D,PDSK ;POINT AT PHYSICAL DISK LXI H,CDISK ;POINT AT LOGICAL LXI B,3 ;SET THE SIZE DW LDIR ;MOVE IT OVER LDA REQSEC ;GET THE SECTOR STAX D ;PUT IT IN LDA RSFLAG ;NEED TO READ? ORA A CNZ DREAD ;YES, IF 1 ; ; COPY DATA TO OR FROM BUFFER ; MATCH: LDA SECTOR ;GET THE LOGICAL SECTOR NUMBER LXI H,SECMSK ;POINT AT MASK ANA M ;MASK IT OFF MOV L,A ;READY TO SHIFT MVI H,0 ;DOUBLE COUNT DAD H DAD H DAD H DAD H DAD H DAD H DAD H ; ; HL HAS RELATIVE HOST BUFFER ADDRESS ; LXI D,HSTBUF DAD D ;HL = HOST ADDRESS XCHG ;NOW IN DE LHLD DMAAD ;GET THE LOGICAL SECTOR LOCATION XCHG ; LXI B,128 ;SET THE LENGTH LDA READOP ;WHICH WAY? ORA A JNZ RWMOVE ;SKIP I$,M ;GET THE CURRENT HEAD MOV M,C ;SET THE HEAD BYTE SUB C ;FORM THE DIFFERENCE STA CHGHD ;SET THE HEAD CHANGED BYTE MOV A,C ;GET THE HEAD BIT BACK ADD A ; ADD A ; MOV C,A ; LDA RWSEL ;GET THE UNIT NUMBER ANI 03H ;MASK OFF ANY OLD HEAD VALUE ORA C ;SET THE HEAD SELECT BIT IN THIS BYTE STA RWSEL ;AND PUT IT BACK INX H ;POINT AT SECTOR BYTE ; ; TRANSLATE AND SET THE PHYISCAL SECTOR NUMBER ; PUSH H ;SAVE THE POINTER TO RWSEC LDA PSEC ;GET THE SECTOR MOV C,A ;SAVE IT MVI B,0 ;CLEAR HIGH ORDER INX B ;ASSUME WE HAVE NO TRANSLATION TABLE LHLD DXLTB ;GET THE TRANSLATE TABLE MOV A,H ;TEST FOR NO TRANSLATION ORA L ; JZ NOXLT ;CONTINUE DCX B ;NORMALIZE DAD B ;POINT AT THE ENTRY MOV C,M ;GET THE PROPER SECTOR NOXLT: POP H ;RESTORE POINTER MOV M,C ;PUT IN THE SECTOR ; ; CHECK MOTOR CONDITION ; CALL CKMTR ;CHECK THE MOTOR CONDITION ; ; CHECK FOR A REQUIRED SEEK ; LXI H,CHGTY ;POINT AT THE CHANGE FLAGS MOV A,M ;GET THE CHANGED DRIVE MVI M,0 ;CLEAR IT FOR N$dF READ ; ; WRITE OPERATION, MARK AND SWITCH DIRECTION ; MVI A,1 STA HSTWRT ;HSTWRT = 1 XCHG ;SOURCE/DEST SWAP ; ; BC INITIALLY 128, DE IS SOURCE, HL IS DEST ; RWMOVE: DW LDIR ;MOVE IT OVER ; ; DATA HAS BEEN MOVED TO/FROM HOST BUFFER ; LDA WRTYPE ;WRITE TYPE CPI WRDIR ;TO DIRECTORY? LDA ERFLAG ;IN CASE OF ERRORS JNZ RWRET ;ALL DONE ; ; CLEAR HOST BUFFER FOR DIRECTORY WRITE ; ORA A ;ERRORS? JNZ RWRET ;USE COMMON RETURN POINT XRA A ;0 TO ACCUM STA HSTWRT ;BUFFER WRITTEN CALL DWRITE ;WRITE THE BUFFER NOW LDA ERFLAG RWRET: DI ; DW LSPD,SRWSTK ; EI ;CONTINUE ORA A ;SET ZERO/NON ZERO FLAG RET ;AND LEAVE ; ; UTILITY COMPARE ROUTINE ; TEST FOR EQUALITY ONLY ; MCMP: LDAX D ;GET A BYTE CMP M ;COMPARE RNZ ;NOT EQUAL - JUST LEAVE INX H ;BUMP THE POINTERS INX D ; DCX B ;COUNT DOWN MOV A,B ;CHECK FOR ZERO ORA C ; JNZ MCMP ;NOT DONE YET RET ;ITS EQUAL ; ; READ A PHYSICAL SECTOR FROM DISK ; DREAD: MVI B,6 ;READ COMMAND MVI C,6DH ;SET THE DMA %%EXT TIME INX H ; ORA M ;GET THE CHANGED HEAD INX H ; ORA M ;GET THE CHANGED TRACK JZ RWCMB ;SEEK NOT REQUIRED ; ; DISK COMMAND BLOCK IS SET UP ; OUTPUT THE DMA CONTROL AND THEN THE DISK CONTROL ; RWCMA: CALL SEEK ;SEEK TO THE CORRECT TRACK JNZ MDERR ;ERROR ; RWCMB: DI ; LXI H,DMACB ;POINT AT THE CONTROL BLOCK MVI B,DMCSZ ;SET THE NUMBER OF BYTES MVI C,DMAC ;SET THE PORT ADDRESS DW OUTIR ;GIVE THE COMMAND TO THE DMA CONTROLLER MVI A,60 ;.6 SEC - 3 REVOLUTIONS STA TMOUT ;SET FOR A 1 SEC TIMEOUT LXI H,RWDCB ;POINT AT THE BLOCK MVI C,9 ;GET THE COMMAND SIZE CALL DSKOT ;PUT IT OUT LXI H,DINTR ;POINT AT THE FLAG MVI M,0 ;CLEAR IT EI ; RWCMC: MOV A,M ;GET INDICATOR ORA A ;IS IT DONE YET? JZ RWCMC ;NO XCHG ;YES, OPERATION COMPLETE LXI H,DMARS ;POINT AT THE RESET COMMAND MVI C,DMAC ;GET THE ADDRESS MVI B,DMRLN ;SET THE LENGTH DW OUTIR ;PUT THE RESET COMMAND OUT XCHG ;PUT THE STATUS BACK IN DE INX H ;POINT AT THE STATUS AREA MOV A,M ;GET THE FIRST BYTE%[XI H,MCAN ;CLEAR THE MESSAGE CALL PRNMSG ; CALL CKMTR ;TURN THE MOTOR BACK ON JMP RWCMH ;TRY AGAIN CNTER: LXI H,MCAN ;CLEAR THE MESSAGE CALL PRNMSG ; JMP IOERT ;HAVE TO LEAVE ; ; GIVE IT UP - ERROR ; IOERT: XRA A ; STA HSTACT MVI A,0FFH ;SET ACC TO NON ZERO ORA A ;SET THE ZERO FLAGS ; ; READ/WRITE OPERATION IS COMPLETE ; RWCMP: PUSH PSW ;SAVE THE RESULT CALL CLMTR ;TURN THE MOTOR OFF POP PSW ;GET THE RESULT BACK LXI H,ERFLAG ;POINT AT THE FLAG ORA M ;COMBINE MOV M,A ;AND PUT IT BACK RET ;NOW LEAVE ; ; CLEAR THE MOTOR ; CLMTR: LXI H,MTRFL ;POINT AT THE MOTOR FLAG MOV A,M ;GET IT ANI NOT ACTIV AND 0FFH ;CLEAR THE ACTIVE FLAG MOV M,A ;PUT IT BACK OUT SYSCN ;SET RET ; ; CHECK FOR A MOTOR ON AND SET FLAG ; CKMTR: LXI H,220 ;PICK THE RIGHT COUNT SHLD MTRCT ;SET THE TIMEOUT LXI H,MTRFL ;POINT AT THE MOTOR FLAG MOV A,M ;GET THE FLAG ORI ACTIV ;SET THE ACTIVE FLAG MOV M,A ;PUT IT BACK OUT SYSCN ;SET THE FLOP ANI MTRON ;CHECK FOR MOTOR ON RNZ ;IS % (ST0) ANI 0C0H ;WAS IT OK? JZ RWCMP ;ALL DONE ; ; ERROR HAS OCCURRED ; LDA RWTRY ;POINT AT THE RETRY COUNT DCR A ;COUNT DOWN STA RWTRY ;PUT IT BACK JZ MDERR ;ERROR MOV C,A ;SAVE THE RETRY COUNT ; MOV A,M ;DID THE DRIVE GO NOT READY? ANI 08H ; JNZ NTRDY ;YES INX H ;POINT AT ST1 WORD ; MOV A,M ;GET ST1 ANI 02 ;IS IT WRITE PROTECTED? JNZ WTPRT ;YES ; MOV A,C ;GET THE RETRY COUNT BACK CPI 4 ;ARE WE JUST ABOUT OUT? JZ RWCMK ;YES ; INX H ;POINT AT ST2 WORD MOV A,M ;GET ST2 ANI 10H ;WRONG CYLINDER? JNZ RWCMH ;YES, HOME THE DRIVE AND TRY AGAIN ; MOV A,C ;GET THE RETRY COUNT BACK ANI 03 ; JNZ RWCMB ; ; RWCMR: CALL ROCK ;SHIFT THE HEADS JNZ MDERR JMP RWCMA ;TRY AGAIN ; RWCMK: CALL KICK ;LAST ATTEMPT ; RWCMH: CALL HOME ;RECALIBRATE THE DRIVE JNZ MDERR ;ERROR OCCURRED JMP RWCMA ;TRY AGAIN ; MDSK: DB CR,ESC,'T','Drive ',0 MNRDY: DB ' is not responding',0 MWPRT: DB ' is write protected',0 MDKER: DB ' error detected',0 MQUE: DB '. Please reinse%ON MOV A,M ;GET THE CONTROL FLAG ORI MTRON ;SET THE MOTOR ON BIT MOV M,A ;PUT IT BACK OUT SYSCN ;AND SET THE LATCH CALL STINT ;SET THE CLOCK INTERRUPTING LXI H,CLOCK ;SET THE CLOCK FOR .20 MVI M,20 ; EI CKMTR1: MOV A,M ;GET IT ORA A ; JNZ CKMTR1 ;WAIT UNTIL ITS TIME RET ;AND LEAVE ; ; SET THE REAL TIME CLOCK INTERRUPTING ; STINT: DI ;DONT STOP US NOW MVI A,0A5H ; OUT CTC0 ;SET THE CLOCK JOB MVI A,156 ;APPROXIMATLY 1/100 OUT CTC0 ; RET ; ; SELECT THE DISK DRIVE ; SET TO PERFORM A SEEK EACH TIME WE CHANGE DRIVE TYPES ; SELDSK: MOV E,M ;GET THE LAST DISK/TYPE MOV M,A ;SET THE NEW DRIVE/TYPE ANI 1 ;MASK OFF THE PHYSICAL UNIT NUMBER STA RWSEL ;SET THE PROPER SELECT VALUE MOV A,E ;GET THE LAST TYPE USED ANI 0FEH ;STRIP OFF THE UNIT MOV E,A ;AND SAVE IT MOV A,M ;GET THE CURRENT TYPE ANI 0FEH ;DO THE SAME SUB E ;FORM THE TYPE DIFFERENCE STA CHGTY ;SAVE THE TYPE CHANGE FLAG RZ ;TYPE DID NOT CHANGE - JUST LEAVE ; MOV A,M ;GET THIS CURRENT DISK CALL%rt diskette,' DB ' push any key to retry' DB 0 MCAN: DB CR,ESC,'T',0 ; ; MEDIA ERROR ; MDERR: LXI H,MDKER JMP PRCER ; ; DRIVE NOT READY ; NTRDY: LXI H,TOTRY ; DCR M ; JNZ RWCMB ;NOT YET LXI H,MNRDY ;POINT AT THE NOT READY MESSAGE JMP PRCER ; ; ; DISKETTE IS WRITE PROTECTED ; WTPRT: LXI H,MWPRT ;POINT AT THE MESSAGEE JMP PRCER ; ; ; COMMON ERROR PROCESSING ; PRCER: PUSH H ;SAVE THE MESSAGE MVI A,RETRY ; STA RWTRY ;RESET THE RETRY COUNT CALL CLMTR ;CLEAR THE MOTOR LXI H,MDSK ;POINT AT IT CALL PRNMSG ; LDA PDSK ;GET THE DRIVE NUMBER WE ARE USING ADI 'A' ;ADJUST MOV C,A ;SAVE IT CALL CONO ;PRINT IT TOO POP H ; CALL PRNMSG ;PRINT THE MESSAGE LXI H,MQUE ;GET THE QUESTION CALL PRNMSG ;PRINT IT PRCR1: CALL CONS ; ORA A ; JZ PRCR2 ;WASTE ANY EXTRA CHARACTERS CALL CONI ; JMP PRCR1 ; PRCR2: CALL CONI ;GET REPLY CPI 03H ;CONTROL C? JZ WBOOT ; CPI ESC ;ESCAPE? JZ WBOOT ;ERROR ANI 5FH ;MAKE IT UPPER CASE CPI 'C' ;CONTINUE? JZ CNTER RTER: L&k&~ GTPNT ;GET THE CURRENT POINTERS MOV H,B ;GET THE TRANSLATE POINTERS MOV L,C ; SHLD DXLTB ;SET THE TABLE ADDRESS XCHG ; SHLD DVPNT ;GET THE DEVICE PARAMETER POINTER LXI D,OSCSZ ;POINT AT SECTOR SIZE DAD D ;POINT AT THEM MOV E,M ;GET THE SECTOR SIZE INX H ; MOV D,M ; INX H ; ; XCHG SHLD DMASZ ;SET THE SIZE XCHG ; LXI B,DSKPS ;SET THE SIZE LXI D,RWSIZ ;POINT WHERE IT GOES DW LDIR ;MOVE IT OVER RET ;NOW LEAVE ; ; HOME (RECALIBRATE) THE DISK DRIVE ; HOME: MVI B,07H ;SET THE COMMAND MVI C,02H ;SET THE SIZE MVI D,0 ;SET FOR TRACK ZERO JMP SEKCM ;CONTINUE ; ; ROCK THE DRIVE POSITION ; ROCK: LDA SKTRK ;GET THE LAST SEEK TRACK MOV C,A ;SAVE IT LDA RWTRY ;GET THE RETRY COUNT RAR ; RAR ; ANI 1 ;SET THE FLAGS MVI A,1 ;SET +1 JNZ ROCK1 ;ODD OR EVEN? MVI A,0FFH ;MAKE IT -1 ROCK1: ADD C ; JP ROCK2 ; MVI A,5 ;SET FOR TWO ROCK2: CPI 80 ;CHECK FOR MAX JC SEEK1 ;CONTINUE KICK: MVI A,78 ; JMP SEEK1 ;CONTINUE ; ; SEEK TO THE PROPER TRACK ; SEEK&d1: MVI M,0 ;CLEAR INX H ; DCR A ;COUNT DOWN JNZ DSKI1 ;CONTINUE POP H ;RESET TO THE TOP MVI M,80H ;SET FOR INVALID ERROR IN CASE DSKI2: IN DSKS ;GET THE STATUS ADD A ;TEST JNC DSKI2 ;NOT READY RP ;NOT IN INPUT - MUST BE DONE IN DSKD ;GET THE BYTE MOV M,A ;PUT IT IN INX H ;BUMP JMP DSKI2 ;TRY SOME MORE ; ; SERVICE DMA COMPLETE INTERRUPT ; SRVDMA: PUSH PSW ;SAVE IT MVI A,083H ;DISABLE DMA OUT DMAC ; MVI A,8BH ;RESET STATUS OUT DMAC ; MVI A,0A3H ;RESET INTERRUPT COMMAND OUT DMAC ; POP PSW ; EI ; DW RETI ; ; ; DISK CONTROLLER INTERRUPT ; IDSK: DW SSPD,SDKSTK ; LXI SP,DKSTK PUSH PSW ;SAVE PSW PUSH H ;SAVE HL XRA A ; STA TMOUT ;CLEAR THE OPERATION TIMEOUT EI ; IN DSKS ;GET THE CURRENT STATUS ORI 20H ; STA DINTR ; IDSK1: IN DSKS ;GET THE STATUS ADD A ;TEST JNC IDSK1 ;WAIT JM IDSK2 ;CONTINUE MVI A,08H ;GET THE SENSE INTERRUPT COMMAND OUT DSKD ;GIVE THE COMMAND IDSK2: CALL DSKIN ;GET THE CURRENT STATUS DI POP H ;RESTORE POP PSW &l: LDA RWSKP ;GET THE TRACK SKIP FLAG ORA A ;SET ZERO FLAG LDA PTRK ;GET THE TRACK JZ SEEK2 ;SKIP OR NOT ADD A ;IF FLAG IS SET, USE EVERY OTHER ONE SEEK2: CPI 80 ; JC SEEK1 ; SUI 80 ; SEEK1: MOV D,A ;SET THE TRACK TO SEEK ORA A ;IS IT ZERO JZ HOME ;YES - USE THE RECAL COMMAND MVI B,0FH ;SET THE COMMAND MVI C,03H ;AND THE SIZE ; ; COMMON CODE FOR SEEK AND RECALIBRATE ; SEKCM: LXI H,SKTRY ;POINT AT OUR CONTROL BLOCK MVI M,3 ;SET THE SEEK RETRY COUNT INX H ;POINT AT THE SIZE MOV M,C ;SET THE SIZE INX H ; MOV M,B ;SET THE COMMAND INX H ; LDA RWSEL ;GET THE SELECT MOV M,A ;SET IT IN INX H ;POINT AT THE NEXT MOV A,D ;GET THE TRACK MOV M,D ;SET THE TRACK TO SEEK CPI 80 ; JC SKCM1 ;OK MVI M,79 ;SET FOR MAX SKCM1: DI MVI A,100 ;SET FOR 1.0 SEC TIME OUT STA TMOUT ; LXI H,SKSIZ ;POINT AT THE SIZE MOV C,M ;GET IT INX H ;POINT AT THE CONTROL BLOCK CALL DSKOT ;PUT IT OUT LXI H,DINTR ;GET THE INDICATOR MVI M,0 ;CLEAR THE INTERRUPT INDICATOR EI ;ENABLE &E;RESTORE DW LSPD,SDKSTK ;RESTORE STACK EI ;ENABLE AGAIN DW RETI ;NOW LEAVE ; ; CTC INTERRUPT ERROR ; INTER: EI ; DW RETI ;NOW LEAVE ; ; TIMER ROUTINE ; TIME: PUSH PSW ;SAVE ACC PUSH H ;SAVE HL EI ;ENBABLE FOR HIGHER PRIORITY ; ; DO CLOCK ; LXI H,CLOCK ; MOV A,M ;GET IT ORA A ;IS IT ZERO? JZ TIME1 ;YES DCR M ;NO, COUNT DOWN ; ; DO OPERATION TIMEOUT ; TIME1: LXI H,TMOUT ; MOV A,M ;GET IT ORA A ; JZ TIME2 ;ALREADY ZERO DCR M ;COUNT DOWN JNZ TIME2 ;CONTINUE ; ; OPERATION HAS TIMED OUT ; MVI M,100 ;SET FOR ANOTHER SECOND LXI H,MTRFL ;POINT AT THE MOTOR FLAG MOV A,M ;GET THE FLAG ANI NOT MTRON AND 0FFH ;TURN OFF THE MOTOR BIT OUT SYSCN ;CLEAR THE CONTROL MOV A,M ;GET THE PROPER ONE BACK OUT SYSCN ;RESTORE THE PROPER BIT ; ; PROCESS THE MOTOR ON TIMER ; TIME2: LXI H,MTRFL ;POINT AT THE FLAG MOV A,M ;GET IT ANI ACTIV+MTRON ;DO WE NEED TO CHECK? JZ TIME3 ;NO ANI ACTIV ;ARE WE ACTIVE? JNZ TIME3 ;IN PROGRESS LHLD MTRCT ;GET THE COUNT DC&INTERRUPTS SKCM2: MOV A,M ;GET THE FLAG ORA A ;IS IT SET YET JZ SKCM2 ;CONTINUE TO LOOP INX H ;POINT AT THE STATUS WORD MOV A,M ;GET THE ST0 WORD ANI 0D0H ;CHECK FOR ERRORS JZ SKCMP ;YES, DONE LXI H,SKTRY ;ERRORS DCR M ;TRY AGAIN JNZ SKCM1 ; ORA A ;SET NON ZERO RET ;THATS ALL FOLKS ; ; SEEK IS COMPLETE ; SKCMP: LXI H,CLOCK ; MVI M,10 ;SET FOR AROUND A HALF REVOLUTION SKCMP1: MOV A,M ; ORA A ; JNZ SKCMP1 ;WAIT FOR THE HEADS TO SETTLE RET ; ; ; OUTPUT THE COMMAND TO THE FDC ; DSKOT: IN DSKS ;GET THE STATUS ADD A ; JNC DSKOT ;TRY AGAIN JM DSKO1 ;NOT READY FOR OUTPUT RAL ;SHIFT RAL ;CHECK BUSY JC DSKOT ;NOT YET MOV A,M ;GET THE BYTE OUT DSKD ;PUT IT OUT INX H ;BUMP FOR NEXT DCR C ;COUNT DOWN JNZ DSKOT ;NOT DONE YET RET ;ALL DONE DSKO1: PUSH H ;SAVE IT CALL DSKIN ;GET THE INPUT POP H ;GET IT BACK JMP DSKOT ;CONTINUE ; ; GET THE COMPLETED STATUS ; DSKIN: LXI H,WKST0 ;POINT AT THE HOLD AREA PUSH H ;SAVE IT MVI A,7 ;SET THE SIZE DSKI''X H ;COUNT DOWN SHLD MTRCT ;PUT THE COUNT BACK MOV A,H ;CHECK FOR ZERO ORA L ; JNZ TIME3 ;NOT AT ZERO YET LDA MTRFL ;GET THE MOTOR WORD BACK ANI NOT MTRON AND 0FFH ;CLEAR MOTOR ON OUT SYSCN ;TURN IT OFF STA MTRFL ;CLEAR THE MOTOR ON ; ; CHECK THE BEEPER ; TIME3: LXI H,BEEPC ;POINT AT THE COUNTER MOV A,M ;GET IT ORA A ;IS IT SET? JZ CLBEP ;NO DCR M ;COUNT DOWN JNZ TIMEC ;CONTINUE CLBEP: LXI H,MTRFL ;GET THE FLAG MOV A,M ;GET IT ANI NOT BEEPR AND 0FFH ;TURN IT OFF MOV M,A ;MOVE IT BACK OUT SYSCN ;TURN IF OFF NOW ; ; IF ALL TIMED JOBS ARE COMPLETE - TURN OFF THE CLOCK ; TIMEC: LDA CLOCK ;GET THE CLOCK ORA A ;IS IT ZERO? JNZ TIMEX ;NO LDA MTRFL ;GET THE CONTROL FLAG ANI BEEPR+MTRON JNZ TIMEX ;CONTINUE MVI A,3 ;ITS TIME OUT TIME OUT CTC0 ;TURN OFF THE TIMER TIMEX: DI ; POP H ;RESTORE POP PSW ; EI ;ENABLE DW RETI ;ALL DONE ; ;**& ; ; CPM DISK PARAMETER BLOCKS ; ; **'CK SIZE) DB 00 ;NULL MASK DW 394 ;DISK SIZE - 1 DW 191 ;DIRECTORY MAX DB 0E0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 48 ;CHECK SIZE DW 2 ;TRACK OFFSET ; DB 7 ;SECTOR MASK DB 3 ;SECTOR SHIFT FACTOR DW 3FFH ;SECTOR SIZE - 1 DB 3 ;N DB 5 ;EOT DB 35H ;GPL DB 0FFH ;DTL DB 40H ;DENSITY DB 0 ;SKIP FLAG ; XLTB1 EQU $ ;TRANSLATION VECTOR DB 1,3,5,2,4 ; ; DISK TYPE #2 - EAGLE I CPM AND PROCALL TYPE ; ; 128 BYTE SECTORS ; 18 SECTORS PER TRACK ; 35 TRACKS PER DISK ; SINGLE DENSITY ; DPBK EQU $ DPBK2: DW 18 ;SECTORS PER TRACK DB 3 ;BLOCK SHIFT FACTOR ALSZ: DB 7 ;BLOCK MASK DB 0 ;NULL MASK DW 71 ;DISK SIZE-1 DW 63 ;DIRECTORY MAX DB 0C0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 16 ;CHECK SIZE DW 3 ;TRACK OFFSET ; SCSM: DB 0 ;SECTOR MASK DB 0 ;SECTOR SHIFT FACTOR SCSZ: DW 7FH ;SECTOR SIZE - 1 DSKP: DB 0 ; N VALUE DB 18 ; EOT VALUE DB 7 ;GPL VALUE DB 80H ;DTL VALUE DB 0 ;DENSITY DB 1 ;TRACK SKIP FLAG DPBE EQU $ ;END OF DISK PARAMETER BLOCK ; XLTB2 EQU 0 ;NO TRANSL'** ; ; A: = DRIVE 0 - TYPE 1A ; DPBASE: DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBA: DW DPBK1A DW CHK00,ALL00 ; DPSIZ EQU $-DPBASE ;SET THE SIZE OF A BLOCK ; ; B: = DRIVE 1 - TYPE 1A ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBB: DW DPBK1A DW CHK01,ALL01 ; ; C: = DRIVE 0 - TYPE 2 ; DW XLTB2,0000H DW 0000H,0000H DW DIRBF,DPBK2 DW CHK00,ALL00 ; ; D: = DRIVE 1 - TYPE 2 ; DW XLTB2,0000H DW 0000H,0000H DW DIRBF,DPBK2 DW CHK01,ALL01 ; ; E: = DRIVE 0 - TYPE 1 - RESERVER FOR LATER ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF,DPBK1A DW CHK00,ALL00 ; ; F: = DRIVE 1 - TYPE 1 - RESERVED FOR LATER ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF,DPBK1A DW CHK01,ALL01 ; ; G: = DRIVE 0 - TYPE 3 ; DW XLTB3,0000H DW 0000H,0000H DW DIRBF,DPBK3 DW CHK00,ALL00 ; ; H: = DRIVE 1 - TYPE 3 ; DW XLTB3,0000H DW 0000H,0000H DW DIRBF,DPBK3 DW CHK01,ALL01 ; ; I: = DRIVE 0 - TYPE 1B ; DW XLTB1,0000H DW 0000H,0000H 'ATION TABLE ; ; DISK TYPE #3 ; ; 512 BYTE SECTORS ; 5 SECTORS PER TRACK ; 35 TRACKS PER DISK ; SINGLE DENSITY ; DPBK3: DW 20 ;SECTORS PER TRACK DB 3 ;SHIFT FACTOR DB 7 ;BLOCK MASK DB 0 ;NULL MASK DW 76 ;DISK SIZE - 1 DW 63 ;DIRECTORY MAX DB 80H ;ALLOC 0 DB 0 ;ALLOC 1 DW 16 ;CHECK SIZE DW 4 ;TRACK OFFSET ; DB 3 ;SECTOR MASK DB 2 ;SECTOR SHIFT FACTOR ; DW 1FFH ;SECTOR SIZE - 1 DB 2 ;N DB 5 ;EOT DB 10 ;GPL DB 0FFH ;DTL DB 0 ;DENSITY DB 1 ;SKIP FLAG ; XLTB3 EQU $ DB 1,3,5,2,4 ; ; SET OFFSET VALUES FOR ITEMS IN THE DISK ; PARAMETER BLOCK ; OSPT EQU DPBK-DPBK ; OALSZ EQU ALSZ-DPBK ;OFFSET TO ALLOCATION SIZE OSCSM EQU SCSM-DPBK ;OFFSET TO SECTOR MASK OSCSZ EQU SCSZ-DPBK ;OFFSET TO SECTOR SIZE ODSKP EQU DSKP-DPBK ;OFFSET TO DISK PARAMETERS DSKPS EQU DPBE-DPBK ;SIZE OF DISK PARAMETERS ; ; SIO INITALIZATION ; SIOCM: DB 04H ;REG 4 DB 44H ; DB 05H ;REG 5 DB 0EAH ; DB 03H ;REG 3 DB 0C1H ; DB 01H ;REG 1 DB 00H ;NO INTERRUPTS DB 10H ;'DW DIRBF DPBI: DW DPBK1B ;ASSUME 460 DW CHK00,ALL00 ; ; J: = DRIVE 1 - TYPE 1B ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBJ: DW DPBK1B ;ASSUME 460 DW CHK01,ALL01 ; ; SET THE NUMBER OF DISK DRIVES IN THE SYSTEM ; MXDSK EQU ($-DPBASE)/DPSIZ ; ; DISK TYPE #1A - AVL SA410 ; ; 1024 BYTES PER SECTOR ; 5 SECTORS PER TRACK ; 80 TRACKS PER DRIVE ; DOUBLE DENSITY ; DPBK1A: DW 40 ;SECTORS PER TRACK DB 4 ;SHIFT FACTOR DB 15 ;BLOCK MASK (2048 BLOCK SIZE) DB 01 ;NULL MASK DW 194 ;DISK SIZE - 1 DW 191 ;DIRECTORY MAX DB 0E0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 48 ;CHECK SIZE DW 2 ;TRACK OFFSET ; DB 7 ;SECTOR MASK DB 3 ;SECTOR SHIFT FACTOR DW 3FFH ;SECTOR SIZE - 1 DB 3 ;N DB 5 ;EOT DB 35H ;GPL DB 0FFH ;DTL DB 40H ;DENSITY DB 00H ;SKIP FLAG ; ; DISK TYPE #1B - AVL SA460 ; ; 1024 BYTES PER SECTOR ; 5 SECTORS PER TRACK ; 160 TRACKS PER DRIVE ; DOUBLE DENSITY ; DPBK1B: DW 40 ;SECTORS PER TRACK DB 4 ;SHIFT FACTOR DB 15 ;BLOCK MASK (2048 BLO((RESET ERRORS SIOLN EQU $-SIOCM ;LENGTH OF SIO COMMAND ; ; DMA CONTROLLER CONTROL BLOCK ; DMACB: ;DEFINE THE READ/WRITE SETUP COMMAND DMARS: ;DEFINE THE RESET COMMAND DB 83H ;DISABLE DMA DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; ; DMRLN EQU $-DMARS ;LENGTH OF THE RESET COMMAND ; DB 0DH ; DB DSKD ;SET PORT A AS SOURCE DB 2CH ; DB 0CFH ;FORCE A LOAD OF THE PORT ADDRESS ; DMACM: DB 0 ;CONTROL WORD DB DSKD ;DISK PORT NUMBER DMASZ: DW 0 ;SIZE - 1 DB 2CH ;1B BYTE DB 10H ;1B BYTE DB 80H ;2A BYTE - NO STOP ON MATCH DB 9DH ;2B BYTE DMADR: DW HSTBUF ;MEMORY ADDRESS DB 13H ;INTERRUPT CONTROL BYTE DB DMAIV AND 0FFH ;INTERRUPT VECTOR DB 8AH ;2C BYTE - READY IS ACTIVE HIGH DB 0CFH ;LOAD DB 08BH ;RESET STATUS DB 0ABH ;ENABLE INTERRUPT DB 87H ;ENABLE DMA DMCSZ EQU $-DMACB ;NUMBER OF BYTES TO SEND TO CONTROLLER BEGDAT EQU $ ;UNINITIALIZED DATA AREA BEGINS HERE ; ; DEVICE CONTROL BLOCKS ; RWTRY: DS 1 ;RETRY COUNT RWDCB: DS 1 ;REA(AAM AREA FOR BDOS USE ; DIRBF: DS 128 ;SCRATCH DIRECTORY AREA ; ALL00: DS 50 ;ALLOCATION VECTOR 0 ALL01: DS 50 ;ALLOCATION VECTOR 1 ; CHK00: DS 48 ;CHECK VECTOR 0 CHK01: DS 48 ;CHECK VECTOR 1 ; HSTBUF DS 1024 ;LEAVE ROOM FOR 1K SECTOR SIZE ; ; WORK STACK AREAS ; DS 40H DKSTK: DS 40H VDSTK: DS 40H ; RWSTK: ; ; MARK END OF DATA ; ENDDAT EQU $ ;END OF DATA AREA ; DATSIZ EQU $-BEGDAT;SIZE OF DATA AREA ; *K DRIVE PARAMETERS ; PDSK: DS 1 ;DISK NUMBER PTRK: DS 2 ;TRACK PSEC: DS 1 ;SECTOR LDSK: DS 1 ;LAST DRIVE ACCESSED REQSEC: DS 1 ;REQUEST PHYSICAL SECTOR NUMBER ; UDSK: DS 1 ;LAST UNALLOC DISK UTRK: DS 2 ;LAST UNALLOC TRACK USEC: DS 1 ;LAST UNALLOC SECTOR ; ERFLAG: DS 1 ;ERROR REPORTING RSFLAG: DS 1 ;READ SECTOR FLAG READOP: DS 1 ;1 IF READ OPERATION WRTYPE: DS 1 ;WRITE OPERATION TYPE HSTACT: DS 1 ;HOST ACTIVE FLAG HSTWRT: DS 1 ;HOST WRITTEN FLAG UNACNT: DS 1 ;UNALLOC REC CNT ; ; SCRATCH R(D/WRITE COMMAND RWSEL: DS 1 ;SELECT BYTE RWTRK: DS 1 ;TRACK NUMBER RWHDR: DS 1 ;HEAD NUMBER RWSEC: DS 1 ;SECTOR (R) RWSIZ: DS 1 ;SIZE (N) RWEOT: DS 1 ;S/TK (EOT) RWGPL: DS 1 ;GAP LENGTH RWDTL: DS 1 ;DATA LENGHT RWDEN: DS 1 ;DENSITY FLAG RWSKP: DS 1 ;TRACK SKIP FLAG ; CHGTY: DS 1 ;CHANGED DRIVE TYPE FLAG CHGHD: DS 1 ;CHANGED HEAD CHGTK: DS 1 ;CHANGED TRACK ; ; SEEK/RECAL CONTROL BLOCK ; SKTRY: DS 1 ;SEEK RETRY SKSIZ: DS 1 ;SIZE OF THE COMMAND SKDCB: DS 1 ;COMMAND SKSEL: DS 1 ;SELECT BYTE SKTRK: DS 1 ;SEEK TRACK NUMBER ; ; COMPLETE STATUS WORK AREA ; DINTR: DS 1 ;DISK INTERRUPT INDICATOR WKST0: DS 7 ;WORKING COPY OF DISK STATUS REGISTERS TMOUT: DS 1 ;TIMEOUT COUNTER CLOCK: DS 1 ;WAIT COUNTER BEEPC: DS 1 ;BEEPER TIME MTRFL: DS 1 ;MOTOR ON FLAG MTRCT: DS 2 ;MOTOR ON COUNTER CPMSPT: DS 1 ;CPM SECTORS PER TRACK ALLSZ: DS 1 ;CPM ALLOCATION SIZE SECSHF: DS 1 ;SECTOR SHIFT FACTOR SECMSK: DS 1 ;SECTOR MASK NBRSC: DS 1 ;NUMBER OF SECTORS TO LOAD SRWSTK: DS 2 ;DISK SAVE STACK SV(a!9"1)!\~=z_!]~ 4!] ?s# .>@2222!Is# J!"-!I":ҏ!"+ͣÇ7?OÀ:g.!{:pÜM?O.{:͐.'{*-*+~ʶr:=2#] ?r# ~B!"*I^#V|B*+# # )*"#8x~# --r-!4*-*!s#r*-"-*"*+ "+È|}͂§!~<w\!4\!"  $~#$_;ôͩ*I^#V|Pʹ + $*i^#V|4Pʹ + $*^#V|4Pʹ + $*^#V|4Pͬ*" ͂ ~;# R~G###~&oy#}o!ҍʹ $ä!ҝʹ $äʹ $*" ڻ |IJ{0_;ͲʹK$ʹTotal of $&:oͲʹ file(s) $:o&Ͳʹ directory entries and $o`~8D3#0j&ͲʹK bytes available on $A;ʹ:$ͩ*ʹ?Bad drive id$r:=&o)"!"!**|ʠ""""**͂**͂ð|g}o**(DSTK: DS 2 ;VIDEO SAVE STACK SDKSTK: DS 2 ;DISK INTERRUPT SAVE STACK TOTRY: DS 1 ;TIME OUT RETRY ESCFL: DS 1 ;ESCAPE SEQUENCE IN PROGRESS REVFL: DS 1 ;REVERSE VIDEO FLAG LSTLN: DS 1 ;LAST LINE DISPLAYED YHOLD: DS 1 ;Y VALUE HOLD ; ; CP/M INTERFACE PARAMETERS ; DMAAD: DS 2 ;DIRECT MEMORY ADDRESS DPPNT: DS 2 ;DISK PARAMETER POINTER DVPNT: DS 2 ;DEVICE PARAMETER POINTER DXLTB: DS 2 ;CURRENT TRANSLATE TABLE ; ; LOGICAL DISK DRIVE ; CDISK: DS 1 ; TRACK: DS 2 ; SECTOR: DS 1 ; ; ; PHYSICAL DISK DRIVE PARAMETERS ; PDSK: DS 1 ;DISK NUMBER PTRK: DS 2 ;TRACK PSEC: DS 1 ;SECTOR LDSK: DS 1 ;LAST DRIVE ACCESSED REQSEC: DS 1 ;REQUEST PHYSICAL SECTOR NUMBER ; UDSK: DS 1 ;LAST UNALLOC DISK UTRK: DS 2 ;LAST UNALLOC TRACK USEC: DS 1 ;LAST UNALLOC SECTOR ; ERFLAG: DS 1 ;ERROR REPORTING RSFLAG: DS 1 ;READ SECTOR FLAG READOP: DS 1 ;1 IF READ OPERATION WRTYPE: DS 1 ;WRITE OPERATION TYPE HSTACT: DS 1 ;HOST ACTIVE FLAG HSTWRT: DS 1 ;HOST WRITTEN FLAG UNACNT: DS 1 ;UNALLOC REC CNT ; ; SCRATCH R))}o"*I^#V"*I^#V* >*"*I^#V* c*">**͂*I^#V*I^#V*!Is#r*!Is#r&:oT))):_><ڷI2~22 $ $]|g}o**}o"*I^#V"*I^#V*     |}͂§!~<w\!4\!"  $~#$_;ôͩ*I^#V|Pʹ + $*i^#V|4Pʹ + $*^#V|4Pʹ + $*^#V|4Pͬ*" ͂ ~;# R~G###~&oy#}o!ҍʹ $ä!ҝʹ $äʹ $*" ڻ |IJ{0_;ͲʹK$ʹTotal of $&:oͲʹ file(s) $:o&Ͳʹ directory entries and $o`~8D3#0j&ͲʹK bytes available on $A;ʹ:$ͩ*ʹ?Bad drive id$r:=&o)"!"!**|ʠ""""**͂**͂ð|g}o**)*( * " 3*1 #" " " *5 " > # R : B * +" ! +s#r( ! 6: " * ~2 * #" * +" > ʶ : 2 Ғ * +" : <2 O>ҳ ! 6* #" * ~2 p K* DMf = * *% DMf = * *% DMf = *( #"( K*# DMf = * *% DMf = : AOK :K . g S -A >>!  ~?l W >#^ : /!:' —  ʑ #‹  W ʢ #™ i`N#FogDM!>))덑o|g =¼ DM!>)) = ^#V) ^#V|g}o _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) #   k)W  Hit SPACE"Name Ext Bytes UN At ! File(s), occupying K of K total capacity directory entries and K bytes remain on 1 !9" ! J> # ->! . *ͪe> # < * v K  K  K !B r+s+p+qA ?  p*A *? :]$Ž l]Q !]6 !E 6!C 6 :C *C &l ~2D U¼:E 2 :D S:E 2:D F:E 2:D V:E 2:D P:E 2 :D N2E !C 4Ø:!4:!5(  ! I3= : [= t:\a:\=_: :] t ?]\ : ҃! 6?Î : 2   ]Q  ?\\ : DM, Q ! "= *3 ##)*= "; */ &# "! *3 #"#  !! "% >!1 . 2' \: 2 : ʩ: ƀo&"* ~ʛ*# +"# ** DMY қ** DM  *; q#p* " . ** #DM*; -e**  *; w* #" )*= *; s#r*; "; : 2 !S 6!"V * "n >!S d*S &T ) ^#V"K O!l ^#V"M :S =2S M K  a*K "G *)iles westof the California coastline. Her name was Florence Chadwick, the first womanto successfuly conquer the English Channel in both directions. This particular morning the fog was thick and the water was cold, and asmillions watched on national television, Florence Chadwick bravely challengedthe open sea. Frequently sharks had to be driven away with rifles to protectthe lone figure in the water. Hours passed an Miss Chadwick began to feel thebone-chilling effects of the cold water and after 15 hours asked to be takenout. Her trainer and her mother, in the boat alongside, encouraged her to"stick it out", assuring her that "land was near". Nobody actually knew wherethey were because of the thick fog. Fifteen hours and fifty five minutes laterFlorence Chadwick insisted to be taken out of the water. It wasn't until hourslater that the shock of defeat overcame her. She had been pulled out of thewater only one half (1/2) mile from the shoreline. She said: "I'm not excusing myself, )fM "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*= ^#V"Q *I )*= *G )*= N#Fq#p*I )*= *Q s#r*G #"G *I +"I K I  G M   !M G  :S <2S O!T *G s#r*S &l ) *M s#r*I "M ^I K  X:S <2S O!T *K s#r*S &l ) *I s#r*G "K û!" "    #* #" )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*= ^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% DMf KK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! '= :/ = : = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !" (   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *&**but if only I could  have seen land." You see, it was not fatique or even the numbing cold that defeated MissChadwick, it was the fact that she lost sight of her goal. The fog alone haddefeated her because it had obscured her goal. It was the only time FlorenceChadwick had ever quit. Two months later she swam the same channel, and againthe fog obscured her view, but this time she swam by . She knew thatsomewhere behind that dense fog was land. She was not only the first woman toswim the channel but she also bAeat the mens record by two hours. Where does come from?  +So then cometh from hearing, hearing  from the word of Į  (Rom. 10: 17 King James Bible)  )Looking to the author and finisher  of our  .(Heb. 12: 2 King James Bible) .cPAGE 11 .e  *But the of the is  ,  * against such  there is no law*ved by all who knew him, lay dying in a hospital nearby. Oscar hadwritten many of Mary's musical scores and was noted throughout the world forhis great musical talent. Mary couldn't bring herself to go on that night andthe producer, director, and all those in charge were anxiously awaiting theoutcome of this ordeal. A messenger arrived with a letter for Mary from Oscar.In the letter was one of the most touching and heartwarming passages ofliterature that Oscar ever recorded: .cPAGE 12 .e  +A bell is not a bell, 'till you ring it...  +A song is not a song, 'till you sing it...  .Love in your heart, is not put there to stay,  Love is not Love, 'till you give it away. They say that Mary Martin gave the best performance of her career that night,and after the show reporters asked her what was the most contributing factorfor such a great performance? She said: "Tonight was thee first time in mycareer that I really and truely the audience...and I could feel themreturni*.  ?(Gal. 5: 22,23 King James Bible) Does every man have ?  )... dealt to every man measure of    (Rom. 12: 3 King James Bible) If this was not true...nobody could receive salvation. Salvation is receivedby Can our be increased?  .And the apostles said unto the , increase  /our And the said, if ye had  .as a grain of mustard seed, ye might say unto  .this sycamore tree, be thou plucked up by the  &root, and be thou planted in the sea.  !(Luke 17: 5,6 King James Bible)  .And beside this, giving all diligence, add to  .your virtue; and to virture knowledge;  0and to knowledge temperance; and to temperance  &patience; and to patience Ӯ  (2 Pet. 1: 5,6 Kings James Bible) Now that we know that is a gift from Ĭ given to all mankind in thesame measure, where do we go from here? What is the mysterious formula forincreasing this ener*ng my love. I think I've given you enough on faith, because if I try to explain it tofinely it will lose its purpose. I don't know exactly how an electronicwristwatch works, all I know is if I tear it all apart to find out...it won'twork anymore. ƭ Let's go back now to the subject of self-image. Here is where the foundationof personal growth begins. Again...: "Therefore if any man be in Ԭ he is a new  /creature: Old things all passed away; Behold,  .all things become new. And all things are of  0Ĭ who hath reconciled us to by  -Ԭ and hath given to us the ministry of  1reconciliation: To wit, that was in Ԭ  1reconciling the world unto , not imputing  /their trespasses unto them; and hath commited  0unto us the word of reconciliation. Now we are  3Ambassadors for , as though did beseech  /you by us: We pray you in stead, be ye  reconciled to Į *gy force called is a virtue... is like love; joy; peace; longsuffering; gentleness;goodness; meekness; and temperance. is a fruit of the spirit. Can youincrease it? Ů Sure you can. like love isfirst given away, or offered to someone by an act from the heart, believingthat it will be accepted. I don't have to ask my wife if she loves me...after26 years of giving and receiving love from one another, love became a naturalhabit, it became a fully developed virtue. is the same way. If you wantto increase your virtue you have to give what measure of dealtto you away. Giving is one of ' most powerful spiritual laws. I'mreminded of a true story that is an excellent example of giving. Mary Martin, one of our great stars of the theater, was opening one of hergreatest shows of her career on broadway and yet it was one of the saddest daysof her life. Oscar Hammerstein, a giant of a man in the show business worldand lo++ For hath made sin for  ,us, who knew no sin; that we might be made  righteousness to in ͮ  (II Cor. 5: 17-21 King James Bible) What is righteousness? Let's look at the translator - Old English - King JamesBible. Righteous, translated means "rights"; priviledges. If you are a citizen of the United States Of America, you would have certain"rights" (priviledges). If you are a "born-again Christian, you also have"rights" (priviledges). If you are a Christian you are a citizen of  Į  + said: "Fear not little flock, for it  +is your ҧ good pleasure to give you  the ͢  :(Luke 12: 32) .cPAGE 13 .e Henely wrote:  I am the master of my fate,  I am the captain of my ship. Attitude is the basic building block that molds the personality. It is yourattitude that either attracts people to you or repels people against you. Attitudes are a bi-product of how you think...therefore we c+oint the most difficultto teach. When this person is finally on the right track, he or she could become a great leader. A good analogy of a reformed "Restrictive Person" comesfrom the word "Gentleman". The word gentle comes from the method of training ahorse...or gentling a horse. This is done by disciplining the animal withoutdestroying its spirit. In the Old West the cowboys had a saying: "There wasnever a horse that couldn't be rode, and there was never a cowboy that couldn'tbe throwed." Cowboys would conquer the will of the horse without destroyingthe the horse's spirit. This is power under control. A gentleman is a highlyspirited, but disciplined person...POWER UNDER CONTROL. This attitude is undoubtably the most dangerous of all attitudes to be in andyet adapting to change is an asset in some cases. In defining an adaptiveattitude you must take into consideration that to totally surrender your willto another person or cause you must also surrender all your right+">an assume that theyare created in the workshop of the mind.  -"For as he thinketh in his heart, so is he."  (King Solomon) Bristol wrote:  .Success or failure in business is caused more  by mental attitude than by mental capacity. In the beggining of this text I referred to mans' inability to communicate withone another. In order to identify this problem I must first catagorize mentalattitudes. In these catagories lies the secret to yeither success or failure. All great leaders were at one time great followers. Everyone has to be taughtby someone.  'What a fool cannot learn he laughs at,  'thinking that by his laughter he shows  &superiority instead of latent idiocy.  (Marie Corelli, The Life Everlasting) (moving backwards) A retrogressive attitude directs a person to be constantly on the defensive. This person, usually because of an inferiority complex, is controlled primarilyby the five senses. This person can be i+qs andpriviledges that go with it. Many people are broken in spirit, rather thandisciplined such as "gentling a horse". Adaptive attitudes are generally theoffspring of either physical or mental abuse by other people. This is why itis very important to raise a child in the absense of FEAR. That's not to saythat you should not inform your child of the dangers around them...but don'tenfuse FEAR in them as a deterent. The adaptive person is tagged as a follower and is fair game for any cult orcause that might come along. The danger that lies in the adaptive personalitycan be related to the JIM JONES (Guyana) atrocity where 900 people adaptedthemselves to the rule and lifestyle that led them to the grave. When anotherperson is allowed to enter the privacy of your mind and maninpulate your willand you allow this without restriction, then you are in a very dangerousposition. (moving ahead) This person is by far the most teachable of all persons. He of she is anexcellent lis+0dentified by the following personalitytraits:  Moody  Cannot accept critisism  Talks without listening  $Blames others for their own failure  .Offers excuses for everything that goes wrong  Has periods of deep depression This person is not necessarily poverty stricken. This person could be aDoctor, Lawyer, Engineer or any person...educated or uneducated. To have aretrogressive attitude is a sign of insecurity. This does not mean that allpeople who are periodically moody are retrogressive...what it does mean is thatif that person continues in that state of attitude that it is dangereouslyretreating in the direction of severe retrogression. .cPAGE 14 .e This person is resistant to change. Although he or she may be educated in manyareas, this person feels a sense of superiority in all situations. An attitudeof: "I'll do it my way..". This person is usually tagged as a "REBEL"...a"KNOW IT ALL"...high spirited, emotional and at this p,1,<tener, researching all the information received. You'll find thatthis person hardly ever critisizes another person. This person sets a definitegoal in life and is willing to pay the price to achieve it. This person has awinning attitude, one that atxtracts others to them. This person is a fighterin all that he believe in. .cPAGE 15 .e The apostle Paul wrote:  -In a race, everyone runs but only one person  ,gets first prize. So run your race to ή  *To win the contest you must deny yourself  +many things that would keep you from doing  0your best. An athlete goes to all this trouble  /just to win a blue ribbon or a silver cup, but  *we do it for a heavenly reward that never  0disappears. So I run straight to the goal with  -purpose in every step. ή I'm  *not just shadow boxing or playing around.  sI Cor. 9:24-26 (The Living Bible) The secret is commitment... ή Paul was dedicated to hiscommitment,reaching his goal was his only thought. In a recenttelevision enterview, I heard him say: "I never intended to be as famous as Iam...I just wanted to be a great pianist." What about his sacrifices? Whatabout the long lonely and cold hours he spent at the train stations waiting forthe next night club stop? What about the meals he missed? Sacrifice alonedoes not make a person great, nor does it make a person unique in some specialway...what it does do, is cause a person to be aware of the power withinthemselves...a force so great that sometimes it takes a tragedy to surface thismagnifcent source of energy. Few people realize that this power is availableto every person. Great people have the quality that sets them aside from otherpeople. This quality is developed through personal sacrifice. .cPAGE 16 .e Ray Charles became a legend in his own time. The State of Georgia proclaimedthe song he made famous, "Georgia On My Mind", as their state anthem. Theyasked him to perform at the Capitol d,. His undying desire was to spred the gospel of Ԯ Hewould not settle for second best...He was running his race to ή I read a story in the newspaper on July 4, 1980 about a young 37 year oldphysical educational teacher from Tucker, Georgia named Stan Cottrell. StanCottrell had just completed a 3,103.5 mile trek on foot in 48 days. He ran allthe way from New York City to San Francisco to set a new all time record. Why?This is what Stan said: "It's the greatest thing in the world, I had to doit...I just had to." He also made a comment to the crowd that met him at thefinish line: "Don't be satisfied with being average." ή I heard a story of a young lad of only four years old, that in desperationtried to save his older brother from drowning in a small pool. He wasunsuccessful and the years of tragic events that followed were monumental. Atthe age of eight he developed a severe case of glucoma and began rapidly tolose his sight. He soon became permantly blind. At,uring the dedication ceremony and gave hima standing ovation as he was being led down the aisle. What if Ray Charles had not dad a dream? What if he had not set a goal forhimself? What if he had bathed himself in self pity? IN studying the success and failure of people, I've come to a monumentalconclusion that success or failure is caused more by mental attitude, than by mental capacity. "For as he thinketh in his heart, so is he." Prov. 23:7 It is also a well known fact that an individual comes, finally, to believewhatever that individual repeats to themself, whether the statement is true orfalse. In the ealier pages I explained how the sub-conscious brain cannot distinguishbetween true or false? Thoughts are a source of energy and thoughts which aremixed with any of the feelings of emotion constitute a magnetic force whichattracts other similar or related thoughts. Thoughts are what great empiresare built on. Look around you...everything in sight is a product of thought.,R the age of ten he lost hisfather. Left in the care of his impoverished mother and suffering also fromthe racial element of the deep south, this young black man battled the forcesof circumstances and set for himself a personal goal. He wanted to play thepiano and he wanted to play it well. He built inside of him a burning desireand each night as he laid his head on his pillow he would live, in his mind,the dream as if it were already a reality. His mother died when he was only fifteen, and he was forced to earn his ownkeep in a world that was full of prejudice, not only for the black but also forthe handicapped. He left the town he was raised in and headed north to Chicagowhere he would "set-in" and play with small bands in the getto districts. Hewould lie about his age so he could gain the experience in his strugglingcareer. Little is recorded about the long hours of practice and the deeppersonal tragedies he experienced. Failure must not have entered his mind,only the driving force of -- The building you're in - The telephone - The television - The automobile - Eventhe satilites in outer-space were once a mere thought (idea)...Even you, created you out of thought, and then spoke you into existance.  &If you think you are beaten, you are.  %If you think you darenot, you don't.  -If you like to win, but you think you can't,  it's almost certain you won't.  %If you think you'll lose, your lost.  For out of the world we find,  $success begins with a fellows will,  it's all in a state of mind.  *If you think you are outclassed, you are,  )you've got to be sure of yourself before  you can ever win the prize.  Life's battles don't always go  to the stonger or faster man,  &but sooner or later the man who wins,  Uis the man who he can. See if you can identify this person: .cPAGE 17 .e  He failed in business in '31  &He ran and lost for Legislator in '32  He failed ag-.Y 1 90 110 0 0 1 1 65 2 2 4 0 35 5 In the early 1500 century a swiss physician, Philippus Aureolus Paracelsus wasmurdered at the early age of 48 for his controversial stand on Spirit/Faithbelief. The following is an excerpt from his works: @ .cPAGE 9 .e "The human spirit is so great a thing that  )no man can express it; could we rightly  )comprehend the mind of man nothing would  'be impossible to us on earth. Through  (faith the imagination is ivigorated and  +completed, for it happens that every doubt  ,mars its perfection. Faith must strengthen  +the imagination, for faith establishes the  will." Yes, by faith, thought becomes literally the and if we drawupon all the intuitive powers that are ours to excersise, then nothing isimpossible for us to accomplish. On the subject of intuitive power (the quiet voice within), Ralph Waldo Emersonwrote:  (All true wisom of thought and of action  comes of diff-ain in business in '33  His sweetheart died in '35  "He had a nervous breakdown in '36  He ran for State Elector in '40  $He was defeated for Congress in '43  *He was defeated again for Congress in '48  &He was defeated for the Senate in '55  +He waas defeated for Vice President in '56  And yet in 1860 ABRAMAM LINCOLN became President of the United Statesof America. Most people fail in life because they carry with them the of failure. Ү(the adversary of faith) Dr. Robert Schuller says is:  alse  vidence  ppearing  eal Fear actually should be catagorized for the purpose of discussion, because inour modern-day society we identify fear in many ways:  Phobias, a psycological fear  $Fear of mental abuse (intimidation)  Fear of physical abuse  (Fear of authority (disciplined respect)  ]Fear of (reverence) All fears are real when you're looking through the mirror of your mi-erence to this ,  &() patience with its delays.  )To make a practical use of this  'in every part of life constitutes true  &wisdom, and we must form the habit of  +preferring in all cases its guidance which  is given as it is used. Let me say this, only gives you wisdom and guidance as you use it and ifyou don't use it, you lose it. Let's examine this force called faith - What is it? Where does it come from? Do only Christians have it? Do some peoplNe have more than others? Is it agift...? or does a person have to earn it?  +Now faith is the substance of things hoped  &for, the evidence of things not seen.  !(Heb. 11: 1,2 King James Bible)  -But without faith it is impossible to please  -ĺ For he that cometh to must believe  .that is, and that is a rewarder of them  that diligently seek ͮ  O(Heb. 11: 6 King James Bible) In The Living Bible translation it says: -nd. Whatever the mind of man can concieve, fostered with belief, whether real orsynthetic, man will ultimately achieve. If it is fear that he fosters, then itwill be fear that will conquer. Man only inherited two fears at birth: The fear of falling; and the fear ofloud noises. All other fears were creations of the mind. The fear of is not classified as an adversary fear, nor is the fear ofauthority. /8dversary of faith) Dr. Robert Schuller says is:  alse  vidence  ppearing  eal Fear actually should be catagorized for the purpose of discussion, because inour modern-day society we identify fear in many ways:  Phobias, a psycological fear  $Fear of mental abuse (intimidation)  Fear of physical abuse  (Fear of authority (disciplined respect)  ]Fear of (reverence) All fears are real when you're looking through the mirror of your mi.#.21 "What is faith? It is the confident assurance  /that something we want is going to happen. It  2is the certainty that what we hope for is waiting  for us, even though we cannot see it up ahead." .cPAGE 10 .e Does this mean that all we have to do is wish for something and will causeit to materialize? , of course not. Wishing for something to happen nevercauses anything to materialize. TVhere is absolutely no power in wishing. "Fool! When will you ever learn that  (believing is useless without doing what  * wants you to do? Faith that does not  )result in good deeds is not real faith."  (James 2: 20 The living Bible) Remember the "Power Twins"... and ? Here lies the power to putfaith into action. But first, what is faith? Faith is believing that willhelp you help yourself. I'm reminded of a story of a 34 year old wogman on the fourth of July, 1952. She dipped into the water off the east shores of Catalina Island 21 m..  ?(Gal. 5: 22,23 King James Bible) Does every man have ?  )... dealt to every man measure of    (Rom. 12: 3 King James Bible) If this was not true...nobody could receive salvation. Salvation is receivedby Can our be increased?  .And the apostles said unto the , increase  /our And the said, if ye had  .as a grain of mustard seed, ye might say unto  .this sycamore tree, be thou plucked up by the  &root, and be thou planted in the sea.  !(Luke 17: 5,6 King James Bible)  .And beside this, giving all diligence, add to  .your virtue; and to virture knowledge;  0and to knowledge temperance; and to temperance  &patience; and to patience Ӯ  (2 Pet. 1: 5,6 Kings James Bible) Now that we know that is a gift from Ĭ given to all mankind in thesame measure, where do we go from here? What is the mysterious formula forincreasing this ener.iles westof the California coastline. Her name was Florence Chadwick, the first womanto successfuly conquer the English Channel in both directions. This particular morning the fog was thick and the water was cold, and asmillions watched on national television, Florence Chadwick bravely challengedthe open sea. Frequently sharks had to be driven away with rifles to protectthe lone figure in the water. Hours passed an Miss Chadwick began to feel thebone-chilling effects of the cold water and after 15 hours asked to be takenout. Her trainer and her mother, in the boat alongside, encouraged her to"stick it out", assuring her that "land was near". Nobody actually knew wherethey were because of the thick fog. Fifteen hours and fifty five minutes laterFlorence Chadwick insisted to be taken out of the water. It wasn't until hourslater that the shock of defeat overcame her. She had been pulled out of thewater only one half (1/2) mile from the shoreline. She said: "I'm not excusing myself, .gy force called is a virtue... is like love; joy; peace; longsuffering; gentleness;goodness; meekness; and temperance. is a fruit of the spirit. Can youincrease it? Ů Sure you can. like love isfirst given away, or offered to someone by an act from the heart, believingthat it will be accepted. I don't have to ask my wife if she loves me...after26 years of giving and receiving love from one another, love became a naturalhabit, it became a fully developed virtue. is the same way. If you wantto increase your virtue you have to give what measure of dealtto you away. Giving is one of ' most powerful spiritual laws. I'mreminded of a true story that is an excellent example of giving. Mary Martin, one of our great stars of the theater, was opening one of hergreatest shows of her career on broadway and yet it was one of the saddest daysof her life. Oscar Hammerstein, a giant of a man in the show business worldand lo.but if only I could  have seen land." You see, it was not fatique or even the numbing cold that defeated MissChadwick, it was the fact that she lost sight of her goal. The fog alone haddefeated her because it had obscured her goal. It was the only time FlorenceChadwick had ever quit. Two months later she swam the same channel, and againthe fog obscured her view, but this time she swam by . She knew thatsomewhere behind that dense fog was land. She was not only the first woman toswim the channel but she also bAeat the mens record by two hours. Where does come from?  +So then cometh from hearing, hearing  from the word of Į  (Rom. 10: 17 King James Bible)  )Looking to the author and finisher  of our  .(Heb. 12: 2 King James Bible) .cPAGE 11 .e  *But the of the is  ,  * against such  there is no law//ved by all who knew him, lay dying in a hospital nearby. Oscar hadwritten many of Mary's musical scores and was noted throughout the world forhis great musical talent. Mary couldn't bring herself to go on that night andthe producer, director, and all those in charge were anxiously awaiting theoutcome of this ordeal. A messenger arrived with a letter for Mary from Oscar.In the letter was one of the most touching and heartwarming passages ofliterature that Oscar ever recorded: .cPAGE 12 .e  +A bell is not a bell, 'till you ring it...  +A song is not a song, 'till you sing it...  .Love in your heart, is not put there to stay,  Love is not Love, 'till you give it away. They say that Mary Martin gave the best performance of her career that night,and after the show reporters asked her what was the most contributing factorfor such a great performance? She said: "Tonight was thee first time in mycareer that I really and truely the audience...and I could feel themreturni/">an assume that theyare created in the workshop of the mind.  -"For as he thinketh in his heart, so is he."  (King Solomon) Bristol wrote:  .Success or failure in business is caused more  by mental attitude than by mental capacity. In the beggining of this text I referred to mans' inability to communicate withone another. In order to identify this problem I must first catagorize mentalattitudes. In these catagories lies the secret to yeither success or failure. All great leaders were at one time great followers. Everyone has to be taughtby someone.  'What a fool cannot learn he laughs at,  'thinking that by his laughter he shows  &superiority instead of latent idiocy.  (Marie Corelli, The Life Everlasting) (moving backwards) A retrogressive attitude directs a person to be constantly on the defensive. This person, usually because of an inferiority complex, is controlled primarilyby the five senses. This person can be i/ng my love. I think I've given you enough on faith, because if I try to explain it tofinely it will lose its purpose. I don't know exactly how an electronicwristwatch works, all I know is if I tear it all apart to find out...it won'twork anymore. ƭ Let's go back now to the subject of self-image. Here is where the foundationof personal growth begins. Again...: "Therefore if any man be in Ԭ he is a new  /creature: Old things all passed away; Behold,  .all things become new. And all things are of  0Ĭ who hath reconciled us to by  -Ԭ and hath given to us the ministry of  1reconciliation: To wit, that was in Ԭ  1reconciling the world unto , not imputing  /their trespasses unto them; and hath commited  0unto us the word of reconciliation. Now we are  3Ambassadors for , as though did beseech  /you by us: We pray you in stead, be ye  reconciled to Į /0dentified by the following personalitytraits:  Moody  Cannot accept critisism  Talks without listening  $Blames others for their own failure  .Offers excuses for everything that goes wrong  Has periods of deep depression This person is not necessarily poverty stricken. This person could be aDoctor, Lawyer, Engineer or any person...educated or uneducated. To have aretrogressive attitude is a sign of insecurity. This does not mean that allpeople who are periodically moody are retrogressive...what it does mean is thatif that person continues in that state of attitude that it is dangereouslyretreating in the direction of severe retrogression. .cPAGE 14 .e This person is resistant to change. Although he or she may be educated in manyareas, this person feels a sense of superiority in all situations. An attitudeof: "I'll do it my way..". This person is usually tagged as a "REBEL"...a"KNOW IT ALL"...high spirited, emotional and at this p/ For hath made sin for  ,us, who knew no sin; that we might be made  righteousness to in ͮ  (II Cor. 5: 17-21 King James Bible) What is righteousness? Let's look at the translator - Old English - King JamesBible. Righteous, translated means "rights"; priviledges. If you are a citizen of the United States Of America, you would have certain"rights" (priviledges). If you are a "born-again Christian, you also have"rights" (priviledges). If you are a Christian you are a citizen of  Į  + said: "Fear not little flock, for it  +is your ҧ good pleasure to give you  the ͢  :(Luke 12: 32) .cPAGE 13 .e Henely wrote:  I am the master of my fate,  I am the captain of my ship. Attitude is the basic building block that molds the personality. It is yourattitude that either attracts people to you or repels people against you. Attitudes are a bi-product of how you think...therefore we c0Z0oint the most difficultto teach. When this person is finally on the right track, he or she could become a great leader. A good analogy of a reformed "Restrictive Person" comesfrom the word "Gentleman". The word gentle comes from the method of training ahorse...or gentling a horse. This is done by disciplining the animal withoutdestroying its spirit. In the Old West the cowboys had a saying: "There wasnever a horse that couldn't be rode, and there was never a cowboy that couldn'tbe throwed." Cowboys would conquer the will of the horse without destroyingthe the horse's spirit. This is power under control. A gentleman is a highlyspirited, but disciplined person...POWER UNDER CONTROL. This attitude is undoubtably the most dangerous of all attitudes to be in andyet adapting to change is an asset in some cases. In defining an adaptiveattitude you must take into consideration that to totally surrender your willto another person or cause you must also surrender all your right0. His undying desire was to spred the gospel of Ԯ Hewould not settle for second best...He was running his race to ή I read a story in the newspaper on July 4, 1980 about a young 37 year oldphysical educational teacher from Tucker, Georgia named Stan Cottrell. StanCottrell had just completed a 3,103.5 mile trek on foot in 48 days. He ran allthe way from New York City to San Francisco to set a new all time record. Why?This is what Stan said: "It's the greatest thing in the world, I had to doit...I just had to." He also made a comment to the crowd that met him at thefinish line: "Don't be satisfied with being average." ή I heard a story of a young lad of only four years old, that in desperationtried to save his older brother from drowning in a small pool. He wasunsuccessful and the years of tragic events that followed were monumental. Atthe age of eight he developed a severe case of glucoma and began rapidly tolose his sight. He soon became permantly blind. At0qs andpriviledges that go with it. Many people are broken in spirit, rather thandisciplined such as "gentling a horse". Adaptive attitudes are generally theoffspring of either physical or mental abuse by other people. This is why itis very important to raise a child in the absense of FEAR. That's not to saythat you should not inform your child of the dangers around them...but don'tenfuse FEAR in them as a deterent. The adaptive person is tagged as a follower and is fair game for any cult orcause that might come along. The danger that lies in the adaptive personalitycan be related to the JIM JONES (Guyana) atrocity where 900 people adaptedthemselves to the rule and lifestyle that led them to the grave. When anotherperson is allowed to enter the privacy of your mind and maninpulate your willand you allow this without restriction, then you are in a very dangerousposition. (moving ahead) This person is by far the most teachable of all persons. He of she is anexcellent lis0R the age of ten he lost hisfather. Left in the care of his impoverished mother and suffering also fromthe racial element of the deep south, this young black man battled the forcesof circumstances and set for himself a personal goal. He wanted to play thepiano and he wanted to play it well. He built inside of him a burning desireand each night as he laid his head on his pillow he would live, in his mind,the dream as if it were already a reality. His mother died when he was only fifteen, and he was forced to earn his ownkeep in a world that was full of prejudice, not only for the black but also forthe handicapped. He left the town he was raised in and headed north to Chicagowhere he would "set-in" and play with small bands in the getto districts. Hewould lie about his age so he could gain the experience in his strugglingcareer. Little is recorded about the long hours of practice and the deeppersonal tragedies he experienced. Failure must not have entered his mind,only the driving force of 0<tener, researching all the information received. You'll find thatthis person hardly ever critisizes another person. This person sets a definitegoal in life and is willing to pay the price to achieve it. This person has awinning attitude, one that atxtracts others to them. This person is a fighterin all that he believe in. .cPAGE 15 .e The apostle Paul wrote:  -In a race, everyone runs but only one person  ,gets first prize. So run your race to ή  *To win the contest you must deny yourself  +many things that would keep you from doing  0your best. An athlete goes to all this trouble  /just to win a blue ribbon or a silver cup, but  *we do it for a heavenly reward that never  0disappears. So I run straight to the goal with  -purpose in every step. ή I'm  *not just shadow boxing or playing around.  sI Cor. 9:24-26 (The Living Bible) The secret is commitment... ή Paul was dedicated to hiscommitment11reaching his goal was his only thought. In a recenttelevision enterview, I heard him say: "I never intended to be as famous as Iam...I just wanted to be a great pianist." What about his sacrifices? Whatabout the long lonely and cold hours he spent at the train stations waiting forthe next night club stop? What about the meals he missed? Sacrifice alonedoes not make a person great, nor does it make a person unique in some specialway...what it does do, is cause a person to be aware of the power withinthemselves...a force so great that sometimes it takes a tragedy to surface thismagnifcent source of energy. .cPAGE 16 .e Few people realize that this power is available to every person. Great peoplehave the quality that sets them aside from other people. This quality isdeveloped through personal sacrifice. Ray Charles became a legend in his own time. The State of Georgia proclaimedthe song he made famous, "Georgia On My Mind", as their state anthem. Theyasked him to perform at the Capitol d1in in business in '33  His sweetheart died in '35  "He had a nervous breakdown in '36  He ran for State Elector in '40  $He was defeated for Congress in '43  *He was defeated again for Congress in '48  &He was defeated for the Senate in '55  +He waas defeated for Vice President in '56  And yet in 1860 ABRAMAM LINCOLN became President of the United Statesof America. Most people fail in life because they carry with them the of failure. Ү(the adversary of faith) Dr. Robert Schuller says is:  alse  vidence  ppearing  eal Fear actually should be catagorized for the purpose of discussion, because inour modern-day society we identify fear in many ways:  Phobias, a psycological fear  $Fear of mental abuse (intimidation)  Fear of physical abuse  (Fear of authority (disciplined respect)  ^Fear of (reverence) All fears are real when you're looking through the mirror of your min1uring the dedication ceremony and gave hima standing ovation as he was being led down the aisle. What if Ray Charles had not dad a dream? What if he had not set a goal forhimself? What if he had bathed himself in self pity? IN studying the success and failure of people, I've come to a monumentalconclusion that success or failure is caused more by mental attitude, than by mental capacity. "For as he thinketh in his heart, so is he." Prov. 23:7 It is also a well known fact that an individual comes, finally, to believewhatever that individual repeats to themself, whether the statement is true orfalse. In the ealier pages I explained how the sub-conscious brain cannot distinguishbetween true or false? Thoughts are a source of energy and thoughts which aremixed with any of the feelings of emotion constitute a magnetic force whichattracts other similar or related thoughts. Thoughts are what great empiresare built on. Look around you...everything in sight is a product of thought.1+d. Whatever the mind of man can concieve, fostered with belief, whether real orsynthetic, man will ultimately achieve. If it is fear that he fosters, then itwill be fear that will conquer. Man only inherited two fears at birth: The fear of falling; and the fear ofloud noises. All other fears were creations of the mind. The fear of is not classified as an adversary fear, nor is the fear ofauthority. It is the adversay fear that will destroy the mind of man and cause him to gothough life an hincomplete and frustrated person. So therefore it is this fearthat we must deal with. .cPAGE 18 .e  zly should be catagorized for the purpose of discussion, because inour modern-day society we identify fear in many ways:  Phobias, a psycological fear  $Fear of mental abuse (intimidation)  Fear of physical abuse  (Fear of authority (disciplined respect)  ^Fear of (reverence) All fears are real when you're looking through the mirror of your min1 The building you're in - The telephone - The television - The automobile - Eventhe satilites in outer-space were once a mere thought (idea)...Even you, created you out of thought, and then spoke you into existance.  &If you think you are beaten, you are.  %If you think you darenot, you don't.  -If you like to win, but you think you can't,  it's almost certain you won't.  %If you think you'll lose, your lost.  For out of the world we find,  $success begins with a fellows will,  it's all in a state of mind.  *If you think you are outclassed, you are,  )you've got to be sure of yourself before  you can ever win the prize.  Life's battles don't always go  to the stonger or faster man,  &but sooner or later the man who wins,  Tis the man who he can. .cPAGE 17 .e See if you can identify this person:  He failed in business in '31  &He ran and lost for Legislator in '32  He failed aga2H2.Y 1 80 110 2 0 1 0 65 2 2 4 0 35 5 ALLELUIAH ALL HE WANTS IS YOU AMAZING GRACE BE STILL AND KNOW/ IN THEE OH LORD BECAUSE HE LIVES BLESS THAT WONDERFUL NAME OF JESUS CAUSE ME TO COME EVERYBODY OUGHT TO KNOW EVERYBODY SING PRAISE TO THE LORD EVERYDAY WITH JESUS FAMILY OF GOD FATHER GLORIFY YOURSELF FILL MY CUP, LORD (G,EFLAT) FOR THOSE TEARS I DIED GENTLE SHEPHERD GIVE ME OIL IN MY LAMP, KEEP ME BURNING GOD IS MOVING, BY HIS SPIRIT GOD IS SO GOOD GOD IS WORHTY GOD'S WONDERFUL PEOPLE GREAT IS THE LORD AND GREATLY TO BE PRAISED HALLELUJAH HALLELUJAH, " ", " ", " " HALELU, HALLELU HEAVENLY FATHER, I APPRECIATE YOU HE'S ALL I NEED HE IS LORD HE'S THE LOVER/SAVIOUR OF MY SOUL HE TOUCHED ME HIS BANNER OVER ME IS LOVE HIS NAME IS JESUS HIS NAME IS WONDERFUL HOLY, HOLY, HOLY IS THE LORD AND MIGHTY IS HIS NAME HOW GREAT THOU ART I COME TO YOU RIGHT NOW I FEEL LIKE PRAISIN' HIS NAME I GET SO THRILLED WITH JESUS(F,G) I KEEP FALLING IN LOVE WITH HIM I WILL ENTER HIS GATES I WILL PRAISE HIM I WILL SING O2DW SBIN ;3 - UR2: ; ; READ INPUT STATUS ROUTINES ; RSTBL: DW KYBST ;0 - TTY: DW KYBST ;1 - PTR: DW SAIST ;2 - UR1: DW SBIST ;3 - UR2: ; ; PUNCH OUTPUT ROUTINES ; PNTBL: DW SAOUT ;0 - TTY: DW SBOUT ;1 - PTP: DW SAOUT ;2 - UP1: DW SBOUT ;3 - UP2: ; ; LIST OUTPUT ROUTINES ; LOTBL: DW SAOUT ;0 - TTY: DW VIDEO ;1 - CRT: DW SBOUT ;2 - LPT: DW PRTOT ;3 - UL1: ; ; LIST OUTPUT STATUS ROUTINES ; LSTBL: DW SAOST ;0 - TTY: DW VDOST ;1 - CRT: DW SBOST ;2 - LPT: DW PRTST ;3 - UL1: ; ; INPUT FROM SIO, PORT A ; SAIN: CALL SAIST ;CHECK THE INPUT STATUS JZ SAIN ;NOT READY YET IN SIOAD ;GET DATA ANI 7FH ;MASK IT OFF MOV C,A ;SAVE IT MVI A,30H ;GET THE RESET ERRORS FLAG OUT SIOAS ;PUT IT OUT MOV A,C ;GET THE CHARACTER BACK IN CASE RET ;NOW LEAVE ; ; INPUT STATUS CHECK FOR SIO, PORT A ; SAIST: MVI A,10H ; OUT SIOAS ;RESET EXTERNAL CONDITIONS OUT SIOAS ; IN SIOAS ;GET THE STATUS ANI SIORB ;CHECK FOR A CHARACTER READY RZ ;NO READY YET - LEAVE MVI A,0FFH ;2F THE MERCIES OF THE LORD FOREVER(EFLAT,F) IF YOU WANT JOY(F,G) I'M PRAISIN' THE LORD I'M REACHING OUT TO YOU,DEAR LORD I'M SO GLAD I'M SO HAPPY, HERE'S THE REASON WHY IN HIS PRESENCE, FULLNESS OF JOY IN MY LIFE LORD, BE GLORIFIED(EFLAT,F) ISN'T HE WONDERFUL ISN'T THE LOVE OF JESUS SOMETHING WONDERFUL IT IS A GOOD THING IT IS NO SECRET, WHAT GOD CAN DO I'VE GOT PEACE LIKE A RIVER JESUS IS EVERYTHING JESUS IS THE SWEETEST NAME I KNOW JESUS, NAME ABOVE ALL NAMES JESUS, THERE'S SOMETHING ABOUT THAT NAME JESUS, WE JUST WANT TO THANK YOU KNOW YE NOT, KNOW YE NOT, YOU'RE THE TEMPLE LET'S JUST PRAISE THE LORD/HE HAS DONE GREAT THINGS LORD, I BELIEVE MORE OF YOU NEVER FAILED ME YET OH COME LET US ADORE HIM OH HOW HE LOVES YOU AND ME OH HOW I LOVE JESUS OH I LOVE YOU IN THE LOVE OF THE LORD OH TO BE HIS HAND EXTENDED OUR GOD REIGNS PEACE, PEACE, WONDERFUL PEACE PRAISE HIM PRAISE THE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH REACH OUT AND TOUCH THE LORD REJOICE IN THE LORD ALWAYS SEEK YE FIRST T2J# 1. JESUS BREAKS EVERY FETTER 2. THOU ART WORTHY 3. MORE OF YOU 4. PRAISE THE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH 5. GOD IS WORTHY, HIS NAME BE PRAISED 6. TO GOD BE THE GLORY 7. HE'S ALL I NEED 8. ALL HE WANTS IS YOU 9. FILL MY CUP .LORD 10. ISN'T HE WONDERFUL 11. OUR GOD REIGNS   NAMES MMMERGE WPMNOFORMAT TBLPQH= HPCez|}H5 HEPBOILER LETTEST WPMTESTT WPM DATA $$$ SYS OLDATA 2TEMP L:;?F_`abcdASSIGN WPMSSB CMlfghijklmnopqrstMACROS RSTUVWXYZ[\]^uvwMACROS xyCAPLINE BAKeCAPLINE BAKzCAPLINE WPM{2HE KINGDOM OF GOD SOMETHING BEAUTIFUL SOMETHING GOOD IS GOING TO HAPPEN TO YOU SPIRIT OF THE LIVING GOD, FALL FRESH ON ME SURELY GOODNESS AND MERCY SWEET JESUS, SWEET JESUS, WHAT A WONDER YOU ARE THANK YOU LORD, FOR SAVING MY SOUL THE JOY OF THE LORD THE LORD LIVETH THERE IS A RIVER THEY THAT WAIT UPON THE LORD THIS IS THE DAY THOU ART WORTHY THY LOVINGKINDNESS TO BE LIKE JESUS TO BE USED OF GOD TO GOD BE THE GLORY UNTO THEE OH LORD, DO I LIFT UP MY SOUL WE EXALT THEE WE HAVE COME INTO HIS HOUSE(EFLAT,F) WE SING HOLY WE WORSHIP AND ADORE THEE WE'RE TOGETHER AGAIN WE'RE ON HOLY GROUND(G,AFLAT) WHERE THE SPIRIT OF THE LORD IS WHY DON'T YOU LIFT UP YOUR HANDS AND PRAISE THE LORD WITH HANDS LIFTED UP(EFLAT,F) WITHOUT HIM WORTHY IS THE LAMB YOU ARE THE SONG THAT I SING 7HE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH REACH OUT AND TOUCH THE LORD REJOICE IN THE LORD ALWAYS SEEK YE FIRST T33ORB ;CHECK FOR A CHARACTER READY RZ ;NO READY YET - LEAVE MVI A,0FFH ;THERE IS A CHARCTER READY RET ; ; ; OUTPUT TO SIO PORT B ; SBOUT: CALL SBOST ;IS THE XMIT BUFFER EMPTY? JZ SBOUT ;NO, WAIT MOV A,C ;GET THE CHARACTER OUT SIOBD ;PUT THE CHARACTER OUT RET ;AND LEAVE ; ; OUTPUT STATUS FOR SIO PORT B ; SBOST: MVI A,10H ; OUT SIOBS ;RESET EXTERNAL CONDITION OUT SIOBS ; IN SIOBS ;GET THE STATUS LXI H,SBOMK ;POINT AT THE MASK ANA M ;MASK OFF THE WANTED BITS INX H ; CMP M ;CHECK TO SEE IF READY JZ SBORD ;YES XRA A ;SET NOT READY RET ;AND LEAVE SBORD: MVI A,0FFH ;SET READY ORA A ; RET ;AND LEAVE ; ; PARALELL PRINTER ROUTINES ; PRTST: IN PO1BD ;GET THE STATUS INFORMATION ANI 30H ;IS THERE A PRINTER THERE? RZ ;NO, JUST LEAVE IN PO1BD ;GET THE STATUS AGAIN CMA ;MAKE THE SIGNAL A HI TRUE READY SIGNL ANI 04H ;IS IT READY FOR A CHARACTER? RZ ;NOT YET MVI A,0FFH ;YES, SET ALL BITS IN CASE RET ;AND LEAVE ; ; OUTPUT THE CHARACTER IN REG C TO THE P3disciples, I believe that one of primary concerns was that you and I wouldbe blessed with the power to take care of ourselves and to occupy this planetuntil return.  )I pray not that thou shouldest take them  *out of the world, but that thou shouldest  keep them from the evil.  ?John 17:15 (King James) The Living Bible translates it thus:  +I'm not asking you to take them out of the  *world, but to keep them safe from satan's  power. .e Socrates lived about 400 years before and was considered one of thegreatest of all the Greek philosphers. In a method of uncovering truth in anindividual, Socrates would pretend to know nothing of the subject underdicussion and by a series of carefully directed questions would make the otherperson find out the truth for himself. Thus, the Qoute: "One thing I know forsure, is that I know nothing." Mans' inability to communicate with one another is undoubtably his biggestliability and as proof of this3.Y 1 90 110 0 0 1 1 65 2 2 4 0 35 5 .c Ԣ On Sunday, March 28,1976, the world population reached 4 Billion people, twicethe number just 46 years earlier according to the Population Reference Bureau. The PRB reports that, at present, the world population now stands at over 4.5Billion and increasing at a rate of 250,000 a day. It took from the begining of time until 1850 for the human race to reach the 1Billion mark; 80 years later (1930) the population stood at 2 Billion; Only31 years after that (1961) we vaulted to 3 Billion; The growth from 1961 to1976 only took 16 years to reach a population of 4 Billion the PRB reported. As man explores the far bounderies of this world and reaches desparately toconquer the unknown wonders of outer-space, I'm concerned that the lack ofmeaningful purpose has excaped man in his quest for superiority over the forcesof the universe. made the world and all things therein, seeing that is of heaven and earth, dwelleth no3 it has been continually displayed by hisactions: Wars; Killings; lawsuits; Divorces; Etc., etc. I have tried to be careful not to give direction in any doctrinal theology, butonly bring to light spiritual truth. Therefore a person may examine themselfwithout influence or prejudice other than from the spirit within. In Ralph Waldo Emerson's essay on "Self Reliance", he writes: "Man is his own star, and the soul that can  "render an honest and perfect man,  ,command all light, all influence, all fate,  'nothing to him falls early or to late.  )Our acts our angels are, or good or ill,  our fatal shadows that walk by us still." To establish a good solid foundation of self-image, a person must first learnthat he or she is worthy of a healthy self-image. That is not to say you areperfect. That's not even to imply that you like everythsing about yourself. Ahealthy self-image will allow you to look at yourself and see a finishedproduct of what yo3t in temples made  =with hands; neither is worshiped with man's hands, as though  ? needed any thing, seeing giveth to all life, and breath,  >and all things; and hath made of one blood all nations of men  ?for to dwell on all the face of the earth, and hath determined  @the times before appointed, and the bounds of their habitation;  ?That they should seek the , if haply they might feel after  >ͬ and find , though be not far from every one of us.  Acts 17: 24-27 King James Bible If Ĭ with all wisdom, has determined our bounderies and if we, aschildren, are obedient and recognize wisdom and follow direction andaccept the fact that and alone is the source of all energy and all powerand dwells in us, who are children...Then we can search within ourselvesand discover the true power that lies hidden and untapped in the very depths ofour being. As ӧ was praying to the Ҭ (in John 17) for the welfare of 4~4'Du could become. "Therefore if any man be in Ԭ he is a  +new creature: Old things are passed away;  &Behold, all things are become new..."  x(II Cor. 5:17 King James Bible) The Living Bible translation says: "He has become a brand new person inside.  A new life has begun." I'm not going to elaborate on the subject of self-image at this time, but I'mgoing to be referring back to it throughout this entire text because I stronglybelieve that before any substantial growth can take place in a persons life,that he or she must have a healthy self-image. .cPAGE 2 .e ή Then said, "Let us make man...someone like ourselves, to be master of alllife upon the earth and in the skies and in the seas." (Gen. 2:26 The Living Bible) This is one of the most powerful verses regarding the creation of man in theentire bible. said: "...someone like ourselves...to be master of alllife..." ̮ We were created in the likness of - in spi4s disobedience all mankind was doomed to die. .cPAGE 3 .e Now whether knew that man would eat the forbidden fruit is again not asimportant as to the ҧ ultimate plan. The apostle Paul writes: "Long ago, even before made the world,  /chose us for very own, through what  -would do for us; decided then to make us  .holy in eyes, without a single fault - we  ,who stand before covered with love.  - unchanging plan has always been to adopt  /us into own family by sending  2to die for us. And did this because wanted  to."  (Eph. 1:4,5 The Living Bible) Now that we have established what happened; how it happened; and why ithappened...let's examine what we have to look forward to. First, in order to have any knowledge of who you are, you must know first, whoyou were. lThat is, where you came from. said: "...someone like ourselves..." is a spirit, without limitatio4rit - withvery few limitations - we had power over all living things - we were masters ofall things upon the earth, in the sky and in the seas. What an awesome amountof power and responsibility. loved the man created and planted agarden for him in with all sorts of fruit trees and made man the watchmanover . noticed that man was lonely so created a woman fron one ofman's ribs. From all the trees of the garden, said they could eat, except from the  which was in the center of with the warned: "You may eat any fruit in the garden except fruit  1from the for it's fruit will  .open your eyes to make you aware of right and  0wrong, good and bad. If you eat its fruit, you  will be doomed to die."  (Gen. 2:16,17 The living Bible) The word says that a serpent (satan) tricked woman into eating from the  and that the woman then enticed man into eating the fr4=n.Therefore if man was created like , then man was first created with adominate spirit. Now must have made man more limited than Ʈ formed a man's body from the dust of the  0ground and breathed into it the breath of life,  !and man became a living person."  (Gen. 2:7 The Living Bible) So man was basically "spirit with form". He must have been able to see, hear,taste, feel and smell. All the five basic senses. He also had a brain. Manalso had a mind, will and emotion that made up his soul. He also ma?de man andwoman reproductive (even before the disobedience).  .And blessed them and told them, "Multiply  &and fill the earth and subdue it;..."  (Gen. 2:28 The Living Bible) Many believe that man was a spirit exactly like and that man would liveforever or should I say..."would have lived forever". I don't want to get intoa theological discussion at this point because it's not that importa$nt...what'simportant is that man wa4}uit. The factthat they were tricked into eating the fruit is not as important as it is thatthey sacrificed all that priviledged power in an act of disobedience...therefor e with a sentence of death. Then the said: "Now that the man has become as we are, knowing  0good from bad, what if he eats the fruit of the  4 and lives forever?" (note: two trees -  2one opening your eyes to good and bad...the other  4giving you eternal life) "So the banished  2him forever from the garden of , and sent him  5out to farm the ground from which he had been taken.  3Thus expelled him, and placed mighty angels at  5the east of the garden of ά with a flaming sword  ,to guard the entrance to the 客  (Gen. 4:22-24 The Living Bible) Tragic. Man had the power to live a good and wholesome life in directcommunion and fellowship with his creator. truly loved him and richlyblessed him, but because of man'55s and still is a very complex person and must be dealtwith in that manner. .cPAGE 4 .e In the two illustrations I will attempt to identify man as he was before theact of disobedience and after the act. As you can see in the illustration, man has transformed into a dominatephysical person, whereas before man was a dominate spiritual person. The soulhas remained in its freedom area, an area which has never taken away fromman. Even after created man allowed him to make choices. Man namedall the animals and all the creatures...he even named woman.(Gen.2:23 TheLiving Bible) This meant that man had a free will, and still does. Let's examine what actually took place and also where we go from here. First, what Adam and Eve done is history...there's is no turning back. Solet's put that to bed. Next, let's consider what did for us. redeemed our lost soulsfrom the penlalty of death. (remember..."You will be doomed to die...") gave us 5Jally believe in myself? What causes one person to succeed inlife and another person to fail? Are all things ordained and preordained in mylife? Is it who causes all the hunger and poverty over the majority of theworld's population? Who decides who should die and who should live? Does ? None of these questions (and I'm sure you've asked many more) should beanswered by any other person other than yourself. I don't have the answers toyour questions any more than you have the answers to mine. Each person is anindividual in ħ eyes and deals with that person on a personal andindividual basis. What's good for me, could be bad for you. If the starvingpeople of Somalia are a burden on your heart...feed them. If you have a burdenfor people plagued with cancer...donate to the cause for a cure. If you don'tlike the way the government is run...cast your vote to change it. If you don'tunderstand ħ laws...read the Bible. Search out and find the answers. Don'tbe afraid to ask your 5 spirit which is unblemished and with spirit we have eternallife. Ůby faith you have received spirit, living within you,giving you the promise of eternal life. You are ή Now you have the samespirit control that Adam had. . cPAGE 5 .e  1But you are not in the flesh, but in the spirit,  .if so be that the dwell in you.  1Now if any man have not the Ԭ he  .is none of . And if be in you, the  0body is dead because of sin; but the is  life because of righteousness.  .But if the that raised up  .from the dead dwell in you, that raised up  - from the dead shall also quicken your  -mortal bodies by that dwelleth in  you.  (Rom. 8:9-11 King James Bible) With all the spirit control we now have it is still difficult for man toestablish his power over the forces of the material world. The old personalityor old nature of man5pastor. Renewing your mind can be a wonderfulexperience. .cPAGE 6 .e In the following pages I will endeavor to lead you and guide you through aseries of truths that will uncover some of the secrets on renewing your mind. Once you have dicovered how created your mind and how very powerful it is,you will be able to control the course of your destiny. The five senses of man are genetic organs that are developed and tuned to therequirements or needs and desires of each individual. Most people are bornwith all five senses in good working condition. However, some develop morequickly than others. It's been recently discovered that child prodigies arenot born with high I.Qs. (that is to say, they were not born geniuses). Theirsenses were developed much faster. It is a well known fact that a child, fromthe age of birth until the age of ten, will develop 80% of their learninghabits and character building attitudes and are more acutely tuned-in tosuggestions (direction) than a5ai is still an active force in our everyday lives. "And be not conformed to this world: But be ye  0transformed by the renewing of your mind. That  2ye may prove what is that good and acceptable and  perfect will of Į  (Rom. 12: 2 King James Bible) What the apostle Paul is saying here is that man, in order to please andhave the power that is rightly his, (being bought and paid for by the blood of ) he has to subject his mind to obedience by disciplining his mindthrough a renewing process. The Living Bible translates it like this: "Don't copy the behavior and customs of this  .world, but be a new and different person with  /a fresh newness in all you do and think. Then  ,you will learn from your own experience how  ways really satisfy you." How do you renew your mind? How do you get rid of bad habits? How do you burythe "Old Nature"? Why am I good sometime and rotten at other times? Why is ithard for me to re6l6Bt any other period of time in their entire life. As an example:  %A musician will develop his hearing;  $An engraver will develop his sight;  "A sculptor will develop his feel;  A chef will develop his taste;  A winemaker will develop his smell; In each case the five senses will respond to how they were developed, notaccording to what he was born with. In the makeup of the physical man, another organ plays a very important role. The brain. The brain is not to be confused with the mind. The brain is a verycomplex and sofisticated organ. This tiny grey matter houses over 100 billionmemory cells called "Neurons", with a vast network of channels that couldnumber as high as a quadrillion. The brain is basically a chemical organ andthe cells talk to each other through chemical messages known as"Neurotransmitters". It is believed that even if the total square footage ofthe Empire State Building was housed with a computer, it could not match thecapacity of the human b6~ghts on your mind. Whatever thought you feed the brain through your mind you'll enfuse into amemory cell that can respond upon impulse within 1/400 of a second. Not all conversation or knowledge given to a person is transported to the sub- conscious brzain to be stored. That's why we have a forebrain. If you areforced to listen to a conversation, what happens is this:  (The forebrain receives the information;  The mind evaluates the context;  .The mind makes a decision on the information;  The mind rejects or accepts the information. If the information received by the mind is on a questionable basis, the mindcan instruct the forebrain to tap into the subconscious brain for further datato evaluate the subject matter. This process allows the mind to be in completecontrol of all data fed to the brain. Within the very depths of man lies his/her spirit. Here a born-again Christiancomes into personal communion with his creator. When comes intoyour life filled 6rain. Every day more and more is being learned aboutthis tiny grey matter of total energy. The brain, in essense, is a verysofisticated computer. It stores information that is fed to it at speeds thatare unmeasurable by our standards. You are not born with a pre-programedbrain, it has to be developed. Some-what like the modern-day computer, thebrain has an operating program to start you off with, and as it is fedinformation it processes it and stores the information into the brain's memorycells. The brain is programed by the mind (soul). This is the free agent that isshown in the illustration. Within the brains chemical make-up is a substanceknown as "Opiate". "Opiate" is a narcotic manufactured by the brain and is 200times more powerful than morphine. When the brain is encouraged to perserve athought, it saturates that memory cell with "Opiate". This is a rewardingprocess and a very natural occurance. .cPAGE 7 .e The brain cannot tell the difference between right and wrong; real or6{that empty void, where the dead spirit was, with spirit. "And in the same way - by our faith - the  5helps us with our daily problems and in our praying.  4For we don't even know what we should pray for, nor  5how to pray as we should; But the prays  5for us with such feeling that it cannot be expressed  6in words. And who knows all hearts knows,  6of course, what the is saying as pleads for  5us in harmony with ħ own will. And we know that  5all that happens to us is working for our good if we  )love and are fitting into plan."  (Rom. 8: 26-28 The Living Bible) .cPAGE 8 .e Again, man is a very complex person. He has a definite battle going on insideof him. The flesh crying out for worldly desires; The spirit calmly andlovingly trying to win the soul; The soul being temptedd by the fleshly desiresof the world and at the same time being called to come under obedience to 6synthetic; good or evil; The brains only function is to store and retrieveinformation and to instruct the other organs to act on command. If the physical man is only controled and regemented by the brain, then who isthe programer? Unlike other animals or mammals in the animal world, man haswithin him a soul (mind). In the illustration it shows that the soul is made up of: It is here that decisions are made. Let's go back to the brain to illustrate asimple example of coordination between the brain and the mind. The brain hasbasically two departments: The forebrain or conscious brain and the sub- conscious brain. The forebrain is the program operator and the sub-consciousbrain is the computer or storehouse (filing cabinet). Now the forebrain is notthe programer, the mind is the programer, the forebrain is only the operator. The sub-conscious brain never sleeps, it is always alert and ready to perform. This is why it is not good to go to sleep with negative thou77>Į  does not tempt man nor does cause man's trials andtribulations...remember, the soul of man is a free agent that lives in the body(flesh) and the soul can either accept or reject the who hasgiven to each person the opportunity for eternal life through byfollowing ħ directions, or the soul can choose the desires of the world andbe doomed to death (with a dead spirit) and spend eternity in the darkness ofhell. Now that might sound a little "harsh", but let's not play games. Idon't think it would be fair to soft-pedal on an issue as important as eternallife in the presence of Įas opposed to eternal death in the darkness ofhell. does not send trials and tribulations, the devil does. Satan wants you tobelieve that it is coming from ...that way you can blame all your misfortuneon and not him. This is why you have control over your thoughts. What you think and what you say are important to how you will act. Words are apowerful source o7.Y 1 90 110 0 0 1 1 65 2 2 4 0 35 5 .c Ԣ On Sunday, March 28,1976, the world population reached 4 Billion people, twicethe number just 46 years earlier according to the Population Reference Bureau. The PRB reports that, at present, the world population now stands at over 4.5Billion and increasing at a rate of 250,000 a day. It took from the begining of time until 1850 for the human race to reach the 1Billion mark; 80 years later (1930) the population stood at 2 Billion; Only31 years after that (1961) we vaulted to 3 Billion; The growth from 1961 to1976 only took 16 years to reach a population of 4 Billion the PRB reported. As man explores the far bounderies of this world and reaches desparately toconquer the unknown wonders of outer-space, I'm concerned that the lack ofmeaningful purpose has excaped man in his quest for superiority over the forcesof the universe. made the world and all things therein, seeing that is of heaven and earth, dwelleth no7f energy and it is words that will free you or bind you. Wewill discuss this topic, in detail, later on. If the spirit and soul work in harmony with one another they can demand fromthe body organs (flesh) anything they desire. Knowing that the mind (soul) isnot organic, we must assume then that it is a form of high intelligence thatreceives information; reasons with it; calculates its valitiy; evaluates itslogic; and if accepted, transmits the information to the brain for action andfuture reference. Within the soul, two elements play a definite and important role in thebehavior habits of an individual. I call them the "Power Twins": ; and . Both are powerful forces and can easily change the direction of anychallenge brought before them. communicates with the mind on a purelyPlatonic level, that is to say, in a demonstrative or emotional atmosphere,whereas, the is a calculating and logical decision maker, weighing all thefacts of the information supplied and then7t in temples made  =with hands; neither is worshiped with man's hands, as though  ? needed any thing, seeing giveth to all life, and breath,  >and all things; and hath made of one blood all nations of men  ?for to dwell on all the face of the earth, and hath determined  @the times before appointed, and the bounds of their habitation;  ?That they should seek the , if haply they might feel after  >ͬ and find , though be not far from every one of us.  Acts 17: 24-27 King James Bible If Ĭ with all wisdom, has determined our bounderies and if we, aschildren, are obedient and recognize wisdom and follow direction andaccept the fact that and alone is the source of all energy and all powerand dwells in us, who are children...Then we can search within ourselvesand discover the true power that lies hidden and untapped in the very depths ofour being. As ӧ was praying for to the Ҭ (in John 17) for the welfare7 submitting the conclusion to the for evaluation. Neither can work effectively without the other. If youlet your rule, you will become a slave to any adverse force in theuniverse, and if, in retrospect, you let the dominate in a logCical manner,then it will reject any force of faith that you have. lculates its valitiy; evaluates itslogic; and if accepted, transmits the information to the brain for action andfuture reference. Within the soul, two elements play a definite and important role in thebehavior habits of an individual. I call them the "Power Twins": ; and . Both are powerful forces and can easily change the direction of anychallenge brought before them. communicates with the mind on a purelyPlatonic level, that is to say, in a demonstrative or emotional atmosphere,whereas, the is a calculating and logical decision maker, weighing all thefacts of the information supplied and then88: of disciples, I believe that one of primary concerns was that you and I wouldbe blessed with the power to take care of ourselves and to occupy this planetuntil return.  )I pray not that thou shouldest take them  *out of the world, but that thou shouldest  keep them from the evil.  ?John 17:15 (King James) The Living Bible translates it thus:  +I'm not asking you to take them out of the  *world, but to keep them safe from satan's  power. .e Socrates lived about 400 years before and was considered one of thegreatest of all the Greek philosphers. In a method of uncovering truth in anindividual, Socrates would pretend to know nothing of the subject underdicussion and by a series of carefully directed questions would make the otherperson find out the truth for himself. Thus, the Qoute: "One thing I know forsure, is that I know nothing." Mans' inability to communicate with one another is undoubtably his biggestliability and as proof of 8 spirit - withvery few limitations - we had power over all living things - we were masters ofall things upon the earth, in the sky and in the seas. What an awesome amountof power and responsibility. loved the man created and planted agarden for him in with all sorts of fruit trees and made man the watchmanover . noticed that man was lonely so created a woman fron one ofman's ribs. From all the trees of the garden, said they could eat, except from the  which was in the center of with the warned: "You may eat any fruit in the garden except fruit  1from the for it's fruit will  .open your eyes to make you aware of right and  0wrong, good and bad. If you eat its fruit, you  will be doomed to die."  (Gen. 2:16,17 The living Bible) The word says that a serpent (satan) tricked woman into eating from the  and that the woman then enticed man into eating th8this it has been continually displayed by hisactions: Wars; Killings; lawsuits; Divorces; Etc., etc. I have tried to be careful not to give direction in any doctrinal theology, butonly bring to light spiritual truth. Therefore a person may examine themselfwithout influence or prejudice other than from the spirit within. In Ralph Waldo Emerson's essay on "Self Reliance", he writes: "Man is his own star, and the soul that can  "render an honest and perfect man,  ,command all light, all influence, all fate,  'nothing to him falls early or to late.  )Our acts our angels are, or good or ill,  our fatal shadows that walk by us still." To establish a good solid foundation of self-image, a person must first learnthat he or she is worthy of a healthy self-image. That is not to say you areperfect. That's not even to imply that you like everythoing about yourself. Ahealthy self-image will allow you to look at yourself and see a finishedproduct of wha8ne fruit. The factthat they were tricked into eating the fruit is not as important as it is thatthey sacrificed all that priviledged power in an act of disobedience...therefor e with a sentence of death. Then the said: "Now that the man has become as we are, knowing  0good from bad, what if he eats the fruit of the  4 and lives forever?" (note: two trees -  2one opening your eyes to good and bad...the other  4giving you eternal life) "So the banished  2him forever from the garden of , and sent him  5out to farm the ground from which he had been taken.  3Thus expelled him, and placed mighty angels at  5the east of the garden of ά with a flaming sword  ,to guard the entrance to the 客  (Gen. 4:22-24 The Living Bible) Tragic. Man had the power to live a good and wholesome life in directcommunion and fellowship with his creator. truly loved him and richlyblessed him, but because of 8%Ht you could become. "Therefore if any man be in Ԭ he is a  +new creature: Old things are passed away;  &Behold, all things are become new..."  x(II Cor. 5:17 King James Bible) The Living Bible translation says: "He has become a brand new person inside.  A new life has begun." I'm not going to elaborate on the subject of self-image at this time, but I'mgoing to be referring back to it throughout this entire text because I stronglybelieve that before any substantial growth can take place in a persons life,that he or she must have a healthy self-image. .cPAGE 2 .e ή Then said, "Let us make man...someone like ourselves, to be master of alllife upon the earth and in the skies and in the seas." (Gen. 2:26 The Living Bible) This is one of the most powerful verses regarding the creation of man in theentire bible. said: "...someone like ourselves...to be master of alllife..." ̮ We were created in the likness of - in99man's disobedience all mankind was doomed to die. .cPAGE 3 .e Now whether knew that man would eat the forbidden fruit is again not asimportant as to the ҧ ultimate plan. The apostle Paul writes: "Long ago, even before made the wo rld,  /chose us for very own, through what  -would do for us; decided then to make us  .holy in eyes, without a single fault - we  ,who stand before covered with love.  - unchanging plan has always been to adopt  /us into own family by sending  2to die for us. And did this because wanted  to."  (Eph. 1:4,5 The Living Bible) Now that we have established what happened; how it happened; and why ithappened...let's examine what we have to look forward to. First, in order to have any knowledge of who you are, you must know first, whoyou were. hThat is, where you came from. said: "...someone like ourselves..." is a spirit, without limit9] us spirit which is unblemished and with spirit we have eternallife. Ůby faith you have received spirit, living within you,giving you the promise of eternal life. You are ή Now you have the samespirit control that Adam had. .cPAGE 5 .e  1But you are not in the flesh, but in the spirit,  .if so be that the dwell in you.  1Now if any man have not the Ԭ he  .is none of . And if be in you, the  0body is dead because of sin; but the is  life because of righteousness.  .But if the that raised up  .from the dead dwell in you, that raised up  - from the dead shall also quicken your  -mortal bodies by that dwelleth in  you.  (Rom. 8:9-11 King James Bible) With all the spirit control we now have it is still difficult for man toestablish his power over the forces of the material world. The old personalityor old nature of9ation.Therefore if man was created like , then man was first created with adominate spirit. Now must have made man more limited than Ʈ formed a man's body from the dust of the  0ground and breathed into it the breath of life,  !and man became a living person."  (Gen. 2:7 The Living Bible) So man was basically "spirit with form". He must have been able to see, hear,taste, feel and smell. All the five basic senses. He also had a brain. Manalso had a mind, will and emotion that made up his soul. He also ma?de man andwoman reproductive (even before the disobedience).  .And blessed them and told them, "Multiply  &and fill the earth and subdue it;..."  (Gen. 2:28 The Living Bible) Many believe that man was a spirit exactly like and that man would liveforever or should I say..."would have lived forever". I don't want to get intoa theological discussion at this point because it's not that importa nt...what'simportant is that ma9m man is still an active force in our everyday lives. "And be not conformed to this world: But be ye  0transformed by the renewing of your mind. That  2ye may prove what is that good and acceptable and  perfect will of Į  (Rom. 12: 2 King James Bible) What the apostle Paul is saying here is that man, in order to please andhave the power that is rightly his, (being bought and paid for by the blood of ) he has to subject his mind to obedience by disciplining his mindthrough a renewing process. The Living Bible translates it like this: "Don't copy the behavior and customs of this  .world, but be a new and different person with  /a fresh newness in all you do and think. Then  ,you will learn from your own experience how  ways really satisfy you." How do you renew your mind? How do you get rid of bad habits? How do you burythe "Old Nature"? Why am I good sometime and rotten at other times? Why is ithard for me t9Rn was and still is a very complex person and must be dealtwith in that manner. .cPAGE 4 .e In the two illustrations I will attempt to identify man as he was before theact of disobedience and after the act. As you can see in the illustration, man has transformed into a dominatephysical person, whereas before man was a dominate spiritual person. The soulhas remained in its freedom area, an area which has never taken away fromman. Even after created man allowed him to make choices. Man namedall the animals and all the creatures...he even named woman.(Gen.2:23 TheLiving Bible) This meant that man had a free will, and still does. Let's examine what actually took place and also where we go from here. First, what Adam and Eve done is history...there's is no turning back. Solet's put that to bed. Next, let's consider what did for us. redeemed our lost soulsfrom the penlalty of death. (remember..."You will be doomed to die...") gave::o really believe in myself? What causes one person to succeed inlife and another person to fail? Are all things ordained and preordained in mylife? Is it who causes all the hunger and poverty over the majority of theworld's population? Who decides who should die and who should live? Does ? None of these questions (and I'm sure you've asked many more) should beanswered by any other person other than yourself. I don't have the answers toyour questions any more than you have the answers to mine. Each person is anindividual in ħ eyes and deals with that person on a personal andindividual basis. What's good for me, could be bad for you. If the starvingpeople of Somalia are a burden on your heart...feed them. If you have a burdenfor people plagued with cancer...donate to the cause for a cure. If you don'tlike the way the government is run...cast your vote to change it. If you don'tunderstand ħ laws...read the Bible. Search out and find the answers. Don'tbe afraid to ask y:an brain. Every day more and more is being learned aboutthis tiny grey matter of total energy. The brain, in essense, is a verysofisticated computer. It stores information that is fed to it at speeds thatare unmeasurable by our standards. You are not born with a pre-programedbrain, it has to be developed. Some-what like the modern-day computer, thebrain has an operating program to start you off with, and as it is fedinformation it processes it and stores the information into the brain's memorycells. The brain is programed by the mind (soul). This is the free agent that isshown in the illustration. Within the brains chemical make-up is a substanceknown as "Opiate". "Opiate" is a narcotic manufactured by the brain and is 200times more powerful than morphine. When the brain is encouraged to perserve athought, it saturates that memory cell with "Opiate". This is a rewardingprocess and a very natural occurance. .cPAGE 7 .e The brain cannot tell the difference between right and wrong; real:our pastor. Renewing your mind can be a wonderfulexperience. .cPAGE 6 .e In the following pages I will endeavor to lead you and guide you through aseries of truths that will uncover some of the secrets on renewing your mind. Once you have dicovered how created your mind and how very powerful it is,you will be able to control the course of your destiny. The five senses of man are genetic organs that are developed and tuned to therequirements or needs and desires of each individual. Most people are bornwith all five senses in good working condition. However, some develop morequickly than others. It's been recently discovered that child prodigies arenot born with high I.Qs. (that is to say, they were not born geniuses). Theirsenses were developed much faster. It is a well known fact that a child, fromthe age of birth until the age of ten, will develop 80% of their learninghabits and character building attitudes and are more acutely tuned-in tosuggestions (direction) th: orsynthetic; good or evil; The brains only function is to store and retrieveinformation and to instruct the other organs to act on command. If the physical man is only controled and regemented by the brain, then who isthe programer? Unlike other animals or mammals in the animal world, man haswithin him a soul (mind). In the illustration it shows that the soul is made up of: It is here that decisions are made. Let's go back to the brain to illustrate asimple example of coordination between the brain and the mind. The brain hasbasically two departments: The forebrain or conscious brain and the sub- conscious brain. The forebrain is the program operator and the sub-consciousbrain is the computer or storehouse (filing cabinet). Now the forebrain is notthe programer, the mind is the programer, the forebrain is only the operator. The sub-conscious brain never sleeps, it is always alert and ready to perform. This is why it is not good to go to sleep with negative :vFan at any other period of time in their entire life. As an example:  %A musician will develop his hearing;  $An engraver will develop his sight;  "A sculptor will develop his feel;  A chef will develop his taste;  A winemaker will develop his smell; In each case the five senses will respond to how they were developed, notaccording to what he was born with. In the makeup of the physical man, another organ plays a very important role. The brain. The brain is not to be confused with the mind. The brain is a verycomplex and sofisticated organ. This tiny grey matter houses over 100 billionmemory cells called "Neurons", with a vast network of channels that couldnumber as high as a quadrillion. The brain is basically a chemical organ andthe cells talk to each other through chemical messages known as"Neurotransmitters". It is believed that even if the total square footage ofthe Empire State Building was housed with a computer, it could not match thecapacity of the hum;; thoughts on your mind. Whatever thought you feed the brain through your mind you'll enfuse into amemory cell that can respond upon impulse within 1/400 of a second. Not all conversation or knowledge given to a person is transported to the sub- consciou~s brain to be stored. That's why we have a forebrain. If you areforced to listen to a conversation, what happens is this:  (The forebrain receives the information;  The mind evaluates the context;  .The mind makes a decision on the information;  The mind rejects or accepts the information. If the information received by the mind is on a questionable basis, the mindcan instruct the forebrain to tap into the subconscious brain for further datato evaluate the subject matter. This process allows the mind to be in completecontrol of all data fed to the brain. Within the very depths of man lies his/her spirit. Here a born-again Christiancomes into personal communion with his creator. When comes intoyour life fil;ce of energy and it is words that will free you or bind you. Wewill discuss this topic, in detail, later on. If the spirit and soul work in harmony with one another they can demand fromthe body organs (flesh) anything they desire. Knowing that the mind (soul) isnot organic, we must assume then that it is a form of high intelligence thatreceives information; reasons with it; calculates its valitiy; evaluates itslogic; and if accepted, transmits the information to the brain for action andfuture reference. Within the soul, two elements play a definite and important role in thebehavior habits of an individual. I call them the "Power Twins": ; and . Both are powerful forces and can easily change the direction of anychallenge brought before them. communicates with the mind on a purelyPlatonic level, that is to say, in a demonstrative or emotional atmosphere,whereas, the is a calculating and logical decision maker, weighing all thefacts of the information supplied and ;"led that empty void, where the dead spirit was, with spirit. "And in the same way - by our faith - the  5helps us with our daily problems and in our praying.  4For we don't even know what we should pray for, nor  5how to pray as we should; But the prays  5for us with such feeling that it cannot be expressed  6in words. And who knows all hearts knows,  6of course, what the is saying as pleads for  5us in harmony with ħ own will. And we know that  5all that happens to us is working for our good if we  )love and are fitting into plan."  (Rom. 8: 26-28 The Living Bible) .cPAGE 8 .e Again, man is a very complex person. He has a definite battle going on insideof him. The flesh crying out for worldly desires; The spirit calmly andlovingly trying to win the soul; The soul being tempte`d by the fleshly desiresof the world and at the same time being called to come under obedience ;zthen submitting the conclusion to the for evaluation. Neither can work effectively without the other. If youlet your rule, you will become a slave to any adverse force in theuniverse, and if, in retrospect, you let the dominate in aG logical manner,then it will reject any force of faith that you have.  calculates its valitiy; evaluates itslogic; and if accepted, transmits the information to the brain for action andfuture reference. Within the soul, two elements play a definite and important role in thebehavior habits of an individual. I call them the "Power Twins": ; and . Both are powerful forces and can easily change the direction of anychallenge brought before them. communicates with the mind on a purelyPlatonic level, that is to say, in a demonstrative or emotional atmosphere,whereas, the is a calculating and logical decision maker, weighing all thefacts of the information supplied and ;to Į  does not tempt man nor does cause man's trials andtribulations...remember, the soul of man is a free agent that lives in the body(flesh) and the soul can either accept or reject the who hasgiven to each person the opportunity for eternal life through byfollowing ħ directions, or the soul can choose the desires of the world andbe doomed to death (with a dead spirit) and spend eternity in the darkness ofhell. Now that might sound a little "harsh", but let's not play games. Idon't think it would be fair to soft-pedal on an issue as important as eternallife in the presence of Įas opposed to eternal death in the darkness ofhell. does not send trials and tribulations, the devil does. Satan wants you tobelieve that it is coming from ...that way you can blame all your misfortuneon and not him. This is why you have control over your thoughts. What you think and what you say are important to how you will act. Words are apowerful sour<6<.Y 1 90 110 0 0 1 1 65 2 2 4 0 35 5 Many sermons have been preached on the misfortunes of JOB (old testament) andyet few fail to explain why JOB went through the trials and tribulations. Somepeople give the excuse that caused or allowed the trialsD and tribulationsof JOB. Maybe you can figure out what happened.  6For the thing which I greatly is come upon me,  -and that which I was of come unto me.  5I was not in safety, neither had I rest, neither was  I quiet: YET TROUBLE CAME.  7Job 3: 25-26 King James Bible The Living Bible says:  )What I always has happened to me.  +I was not fat and lazy, yet  * ή What/who causes trouble...Ү  ASSIGN WPMSSB CMlfghijklmnopqrstMACROS RSTUVWXYZ[\]^uvwMACROS xyCAPLINE BAKeCAPLINE BAKzCAPLINE WPM{<^ISE THE LORD I WANT JESUS, MORE THAN ANYTHING IN REMEMBRANCE ISAIAH 51:11 I FIND NO FAULT IN HIM I LIVE IT IS FINISHED IT IS WELL WITH MY SOUL JESUS SAVES JOY GREAT JOY JESUS JESUS IS EVERYTHING JOYOUSLY SINGING JOY IN THAT LAND KING JESUS KING JESUS WILL ROLL MY BURDENS AWAY KING OF KINGS LOVE DIVINE LISTEN TO THE SOUND LIVING BY FAITH LORD KEEP MY MIND STAYED ON THEE LET THY MANTLE FALL ON ME LET'S JUST PRAISE THE LORD LET ME TOUCH HIM LOVEST THOU ME? LOOKING THROUGH HIS EYES LEARNING TO LIVE LIKE A CHILD OF THE KING LOVE WAS WHEN MASTER THE TEMPEST IS RAGING MY FAITH STILL HOLDS MY TRIBUTE MORE THAN LIFE MAKE ME AN INSTRUMENT NEARING THE SHORE NOTHING BUT THE BLOOD NO ONE EVER CARED FOR ME LIKE JESUS NEW NO MOUNTAIN HIGH ENOUGH NO MAN CARETH FOR MY SOUL OH, I WANT TO SEE HIM ONWARD CHRISTIAN SOLDIERS OH HAPPY DAY PRAISE THE LORD REACH OUT TO JESUS REVIVE US AGAIN REACH OUT AND TOUCH RISE AND BE HEALED ROOM AT THE CROSS FOR YOU REDEMPTION DRAWETH NIGH SAVIOUR, LIKE A SHEPHERD LEAD US SWEET<H< JESUS SWEET, SWEET SPIRIT SEEK AND YE SHALL FIND SOON AND VERY SOON THIS WAS THE SON OF GOD THE BLOOD WILL NEVER LOSE IT'S POWER THE FAMILY OF GOD THE KING IS COMING THE LORD IS BLESSING ME THE LORD'S PRAYER THE CHURCH TRIUMPHANT THE HOLY CITY THE BATTLE HYMN OF THE REPUBLIC TELL IT TO JESUS THERE'S A QUIET UNDERSTANDING THE HAPPY JUBILEE TO BE USED OF GOD THE RESURRECTION MORN THE LORD OF MIRACLES THROUGH IT ALL THE BROKEN VESSEL THERE IS A RIVER UNTIL THEN UNTOLD MILLIONS VICTORY AHEAD VICTORY IN JESUS WALL OF FIRE WE'VE COME THIS FAR BY FAITH WE'VE GOT A GREAT BIG WONDERFUL GOD WHAT A PRECIOUS FRIEND IS HE WHEN WE ALL GET TOGETHER UP THERE WHY SHOULD I WORRY? WHAT A BLESSING IN JESUS I'VE FOUND WHEN I SURVEY THE WONDROUS CROSS WE SHALL BE CHA[NGED WORK FOR THE NIGHT IS COMING YOU CAN'T BEAT GOD GIVING YESTERDAY, TODAY, FOREVER EACH OUT AND TOUCH RISE AND BE HEALED ROOM AT THE CROSS FOR YOU REDEMPTION DRAWETH NIGH SAVIOUR, LIKE A SHEPHERD LEAD US SWEET<AMEN CHORUS ALL OF ME AFTER CALVARY A NEW DAY A CHRISTIAN HOME BETHESDA BLESSED ASSURANCE BECAUSE HE LIVES BY MY SPIRIT BLESS THE LORD BOW YOUR HEART BATTLE HYMN OF THE REPUBLIC COME AND DINE COME HOLY SPIRIT DO YOU KNOW HIM? FAMILY OF GOD MEDLEY GET ALL EXITED GOD IS STILL ON THE THRONE GLAD HAPPY DAY GOD IS SO GOOD GREATER IS HE THAT IS IN ME GOD IS WORTHY GRACE HALLELUJAH CHORUS HE KNOWS WHAT I NEED HE LOOKED BEYOND MY FAULTS HE'S THE LORD OF GLORY HIGHER GROUND HIGHWAY TO HEAVEN HIS EYE IS ON THE SPARROW HOW LONG HAS IT BEEN? HE TOUCHED ME HAVE YOU ANY ROOM FOR JESUS? HOLY SPIRIT FILL ME NOW HUMANITY TAKE IT TO JESUS HE DIED FOR US HE'S ALIVE IN HIS PRESENCE, FULLNESS OF JOY I MUST CHOOSE TO SURRENDER I BOWED ON MY KNEES I CAN CALL HIM I FELT THE SPIRIT IF YOU EVER NEEDED THE LORD BEFORE I FOUND THE ANSWER I KNOW PRAYER CHANGES THINGS I'LL NEVER BE LONELY AGAIN I'M TRAVELING ON IN THE GARDEN I SURE DO LOVE THE LORD I MUST TELL JESUS I KNOW, I KNOW I COULD NEVER OUTLOVE THE LORD I CAME TO PRA==9NSE BIT ; ; VIDEO CONTROLLER PORTS ; VCBAS EQU 40H ;BASE ADDRESS FOR THE VIDEO CONTROLLER VCIR0 EQU VCBAS ;INIT REG 0 VCIR1 EQU VCIR0+1 ;INIT REG 1 VCIR2 EQU VCIR1+1 ;INTI REG 2 VCIR3 EQU VCIR2+1 ;INIT REG 3 VCIR4 EQU VCIR3+1 ;INIT REG 4 VCIR5 EQU VCIR4+1 ;INIT REG 5 VCIR6 EQU VCIR5+1 ;INIT REG 6 VCPSL EQU VCIR6+1 ;FORCE SELF LOAD (NOT USED) VCRCL EQU VCPSL+1 ;READ CURSOR LINE NUMBER VCRCC EQU VCRCL+1 ;READ CURSOR CHARACTER (COLUMN) NUMBER VCRST EQU VCRCC+1 ;RESET CONTROLLER TIMING CHAIN VCSCR EQU VCRST+1 ;SCROLL UP VCWCC EQU VCSCR+1 ;WRITE CURSOR CHARACTER (COLUMN) NUMBER VCWCL EQU VCWCC+1 ;WRITE CURSOR LINE NUMBER VCSTR EQU VCWCL+1 ;START VIDEO TIMING CHAIN VCSFL EQU VCSTR+1 ;SELF LOAD (NOT USED) ; ; ;*** ;  ; ! BDOS CONSTANTS ON ENTRY TO WRITE  ;  ;**=HE KINGDOM OF GOD SOMETHING BEAUTIFUL SOMETHING GOOD IS GOING TO HAPPEN TO YOU SPIRIT OF THE LIVING GOD, FALL FRESH ON ME SURELY GOODNESS AND MERCY SWEET JESUS, SWEET JESUS, WHAT A WONDER YOU ARE THANK YOU LORD, FOR SAVING MY SOUL THE JOY OF THE LORD THE LORD LIVETH THERE IS A RIVER THEY THAT WAIT UPON THE LORD THIS IS THE DAY THOU ART WORTHY THY LOVINGKINDNESS TO BE LIKE JESUS TO BE USED OF GOD TO GOD BE THE GLORY UNTO THEE OH LORD, DO I LIFT UP MY SOUL WE EXALT THEE WE HAVE COME INTO HIS HOUSE(EFLAT,F) WE SING HOLY WE WORSHIP AND ADORE THEE WE'RE TOGETHER AGAIN WE'RE ON HOLY GROUND(G,AFLAT) WHERE THE SPIRIT OF THE LORD IS WHY DON'T YOU LIFT UP YOUR HANDS AND PRAISE THE LORD WITH HANDS LIFTED UP(EFLAT,F) WITHOUT HIM WORTHY IS THE LAMB YOU ARE THE SONG THAT I SING 7HE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH REACH OUT AND TOUCH THE LORD REJOICE IN THE LORD ALWAYS SEEK YE FIRST T=.Y 1 80 110 2 0 1 0 65 2 2 4 0 35 5 ALLELUIAH ALL HE WANTS IS YOU AMAZING GRACE BE STILL AND KNOW/ IN THEE OH LORD BECAUSE HE LIVES BLESS THAT WONDERFUL NAME OF JESUS CAUSE ME TO COME EVERYBODY OUGHT TO KNOW EVERYBODY SING PRAISE TO THE LORD EVERYDAY WITH JESUS FAMILY OF GOD FATHER GLORIFY YOURSELF FILL MY CUP, LORD (G,EFLAT) FOR THOSE TEARS I DIED GENTLE SHEPHERD GIVE ME OIL IN MY LAMP, KEEP ME BURNING GOD IS MOVING, BY HIS SPIRIT GOD IS SO GOOD GOD IS WORHTY GOD'S WONDERFUL PEOPLE GREAT IS THE LORD AND GREATLY TO BE PRAISED HALLELUJAH HALLELUJAH, " ", " ", " " HALELU, HALLELU HEAVENLY FATHER, I APPRECIATE YOU HE'S ALL I NEED HE IS LORD HE'S THE LOVER/SAVIOUR OF MY SOUL HE TOUCHED ME HIS BANNER OVER ME IS LOVE HIS NAME IS JESUS HIS NAME IS WONDERFUL HOLY, HOLY, HOLY IS THE LORD AND MIGHTY IS HIS NAME HOW GREAT THOU ART I COME TO YOU RIGHT NOW I FEEL LIKE PRAISIN' HIS NAME I GET SO THRILLED WITH JESUS(F,G) I KEEP FALLING IN LOVE WITH HIM I WILL ENTER HIS GATES I WILL PRAISE HIM I WILL SING O=]ey on key pad DB '[' ;1E DB 00H ;1F ; DB '.' ;20 DB 'm' ;21 DB ' ' ;22 DB 'b' ;23 DB 'c' ;24 DB 1BH ;25 - ESCape key DB '0' ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0FH ;2A - INSERT KEY DB 'o' ;2B DB 'u' ;2C DB 't' ;2D DB 'e' ;2E DB 'q' ;2F ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 27H ;34 - single quote character DB 'l' ;35 DB 'j' ;36 DB 'g' ;37 DB 'd' ;38 DB 'a' ;39 DB 00H ;3A - not assigned DB 00H ;3B - not assigned DB 00H ;3C - not assigned DB '>' ;3D DB '-' ;3E DB '9' ;3F ; DB '7' ;40 DB '5' ;41 DB '3' ;42 DB '2' ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB '\' ;47 DB '=' ;48 DB '0' ;49 DB '8' ;4A DB '6' ;4B DB '4' ;4C DB '1' ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB '9' ;50 - 9 key on the key pad DB '6' ;5=F THE MERCIES OF THE LORD FOREVER(EFLAT,F) IF YOU WANT JOY(F,G) I'M PRAISIN' THE LORD I'M REACHING OUT TO YOU,DEAR LORD I'M SO GLAD I'M SO HAPPY, HERE'S THE REASON WHY IN HIS PRESENCE, FULLNESS OF JOY IN MY LIFE LORD, BE GLORIFIED(EFLAT,F) ISN'T HE WONDERFUL ISN'T THE LOVE OF JESUS SOMETHING WONDERFUL IT IS A GOOD THING IT IS NO SECRET, WHAT GOD CAN DO I'VE GOT PEACE LIKE A RIVER JESUS IS EVERYTHING JESUS IS THE SWEETEST NAME I KNOW JESUS, NAME ABOVE ALL NAMES JESUS, THERE'S SOMETHING ABOUT THAT NAME JESUS, WE JUST WANT TO THANK YOU KNOW YE NOT, KNOW YE NOT, YOU'RE THE TEMPLE LET'S JUST PRAISE THE LORD/HE HAS DONE GREAT THINGS LORD, I BELIEVE MORE OF YOU NEVER FAILED ME YET OH COME LET US ADORE HIM OH HOW HE LOVES YOU AND ME OH HOW I LOVE JESUS OH I LOVE YOU IN THE LOVE OF THE LORD OH TO BE HIS HAND EXTENDED OUR GOD REIGNS PEACE, PEACE, WONDERFUL PEACE PRAISE HIM PRAISE THE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH REACH OUT AND TOUCH THE LORD REJOICE IN THE LORD ALWAYS SEEK YE FIRST T>$>.Y 1 80 110 2 0 1 0 65 2 2 4 0 35 5 ALLELUIAH ALL HE WANTS IS YOU AMAZING GRACE BE STILL AND KNOW/ IN THEE OH LORD BECAUSE HE LIVES BLESS THAT WONDERFUL NAME OF JESUS CAUSE ME TO COME EVERYBODY OUGHT TO KNOW EVERYBODY SING PRAISE TO THE LORD EVERYDAY WITH JESUS FAMILY OF GOD FATHER GLORIFY YOURSELF FILL MY CUP, LORD (G,EFLAT) FOR THOSE TEARS I DIED GENTLE SHEPHERD GIVE ME OIL IN MY LAMP, KEEP ME BURNING GOD IS MOVING, BY HIS SPIRIT GOD IS SO GOOD GOD IS WORHTY GOD'S WONDERFUL PEOPLE GREAT IS THE LORD AND GREATLY TO BE PRAISED HALLELUJAH HALLELUJAH, " ", " ", " " HALELU, HALLELU HEAVENLY FATHER, I APPRECIATE YOU HE'S ALL I NEED HE IS LORD HE'S THE LOVER/SAVIOUR OF MY SOUL HE TOUCHED ME HIS BANNER OVER ME IS LOVE HIS NAME IS JESUS HIS NAME IS WONDERFUL HOLY, HOLY, HOLY IS THE LORD AND MIGHTY IS HIS NAME HOW GREAT THOU ART I COME TO YOU RIGHT NOW I FEEL LIKE PRAISIN' HIS NAME I GET SO THRILLED WITH JESUS(F,G) I KEEP FALLING IN LOVE WITH HIM I WILL ENTER HIS GATES I WILL PRAISE HIM I WILL SING O>d DB 05H ;09 - 8 key on key pad DB 00H ;0A - not assigned DB 08H ;0B - BACKSPACE key DB 00H ;0C DB 0BH ;0D - K DB 08H ;0E - H DB 06H ;0F - F ; DB 13H ;10 - S DB 1AH ;11 - Z DB 13H ;12 - 4 key on key pad DB 1EH ;13 - 5 key on key pad DB 00H ;14 - not assigned DB 7FH ;15 - DELETE key DB 10H ;16 - P DB 09H ;17 - I DB 19H ;18 - Y DB 12H ;19 - R DB 17H ;1A - W DB 09H ;1B DB 1AH ;1C - 1 key on key pad DB 18H ;1D - 2 key on key pad DB 00H ;1E DB 00H ;1F ; DB 00H ;20 DB 0DH ;21 - M DB 00H ;22 DB 02H ;23 - B DB 03H ;24 - C DB 1BH ;25 - ESCape key DB 1FH ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0FH ;2A - INSERT DB 0FH ;2B - O DB 15H ;2C - U DB 14H ;2D - T DB 05H ;2E - E DB 11H ;2F - Q ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 00H ;34 - single quote character DB 0CH ;35 - L DB 0AH ;36 - J DB>F THE MERCIES OF THE LORD FOREVER(EFLAT,F) IF YOU WANT JOY(F,G) I'M PRAISIN' THE LORD I'M REACHING OUT TO YOU,DEAR LORD I'M SO GLAD I'M SO HAPPY, HERE'S THE REASON WHY IN HIS PRESENCE, FULLNESS OF JOY IN MY LIFE LORD, BE GLORIFIED(EFLAT,F) ISN'T HE WONDERFUL ISN'T THE LOVE OF JESUS SOMETHING WONDERFUL IT IS A GOOD THING IT IS NO SECRET, WHAT GOD CAN DO I'VE GOT PEACE LIKE A RIVER JESUS IS EVERYTHING JESUS IS THE SWEETEST NAME I KNOW JESUS, NAME ABOVE ALL NAMES JESUS, THERE'S SOMETHING ABOUT THAT NAME JESUS, WE JUST WANT TO THANK YOU KNOW YE NOT, KNOW YE NOT, YOU'RE THE TEMPLE LET'S JUST PRAISE THE LORD/HE HAS DONE GREAT THINGS LORD, I BELIEVE MORE OF YOU NEVER FAILED ME YET OH COME LET US ADORE HIM OH HOW HE LOVES YOU AND ME OH HOW I LOVE JESUS OH I LOVE YOU IN THE LOVE OF THE LORD OH TO BE HIS HAND EXTENDED OUR GOD REIGNS PEACE, PEACE, WONDERFUL PEACE PRAISE HIM PRAISE THE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH REACH OUT AND TOUCH THE LORD REJOICE IN THE LORD ALWAYS SEEK YE FIRST T> 07H ;37 - G DB 04H ;38 - D DB 01H ;39 - A DB 00H ;3A - not assigned DB 00H ;3B - not assigned DB 00H ;3C - not assigned DB 00H ;3D DB 00H ;3E DB 00H ;3F ; DB 00H ;40 DB 00H ;41 DB 00H ;42 DB 00H ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB 00H ;47 DB 00H ;48 DB 00H ;49 DB 00H ;4A DB 00H ;4B DB 00H ;4C DB 00H ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB 12H ;50 - 9 key on the key pad DB 04H ;51 - 6 key on the key pad DB 03H ;52 - 3 key on the key pad DB 1EH ;53 - . key on the key pad DB 1CH ;54 - F1 key on the key pad DB 00H ;55 - not assigned DB 00H ;56 - not assigned DB 00H ;57 - not assigned DB 1DH ;58 - F2 key on the key pad DB 00H ;59 - not assigned DB 00H ;5A - not assigned DB 00H ;5B - not assigned DB 00H ;5C - not assigned DB 00H ;5D - not assigned DB 00H ;5E - not assigned DB 00H ;5F - not assigned ; ;**>HE KINGDOM OF GOD SOMETHING BEAUTIFUL SOMETHING GOOD IS GOING TO HAPPEN TO YOU SPIRIT OF THE LIVING GOD, FALL FRESH ON ME SURELY GOODNESS AND MERCY SWEET JESUS, SWEET JESUS, WHAT A WONDER YOU ARE THANK YOU LORD, FOR SAVING MY SOUL THE JOY OF THE LORD THE LORD LIVETH THERE IS A RIVER THEY THAT WAIT UPON THE LORD THIS IS THE DAY THOU ART WORTHY THY LOVINGKINDNESS TO BE LIKE JESUS TO BE USED OF GOD TO GOD BE THE GLORY UNTO THEE OH LORD, DO I LIFT UP MY SOUL WE EXALT THEE WE HAVE COME INTO HIS HOUSE(EFLAT,F) WE SING HOLY WE WORSHIP AND ADORE THEE WE'RE TOGETHER AGAIN WE'RE ON HOLY GROUND(G,AFLAT) WHERE THE SPIRIT OF THE LORD IS WHY DON'T YOU LIFT UP YOUR HANDS AND PRAISE THE LORD WITH HANDS LIFTED UP(EFLAT,F) WITHOUT HIM WORTHY IS THE LAMB YOU ARE THE SONG THAT I SING 7HE LORD, PRAISE THE LORD, PRAISE THE LORD HALLELUJAH REACH OUT AND TOUCH THE LORD REJOICE IN THE LORD ALWAYS SEEK YE FIRST T??c, ; ; KEY WITH SHIFT AND WITH CONTROL ; ;** ; CCSTB: DB 00H ;00 - NOT USED DB 0AH ;01 - LINE FEED (CUE) DB 00H ;02 DB 00H ;03 DB 0EH ;04 - N DB 16H ;05 - V DB 18H ;06 - X DB 00H ;07 DB 17H ;08 - 7 key on key pad DB 05H ;09 - 8 key on key pad DB 00H ;0A - not assigned DB 08H ;0B - BACKSPACE key DB 00H ;0C DB 0BH ;0D - K DB 08H ;0E - H DB 06H ;0F - F ; DB 13H ;10 - S DB 1AH ;11 - Z DB 13H ;12 - 4 key on key pad DB 1EH ;13 - 5 key on key pad DB 00H ;14 - not assigned DB 7FH ;15 - DELETE key DB 10H ;16 - P DB 09H ;17 - I DB 19H ;18 - Y DB 12H ;19 - R DB 17H ;1A - W DB 09H ;1B DB 1AH ;1C - 1 key on key pad DB 18H ;1D - 2 key on key pad DB 00H ;1E DB 00H ;1F ; DB 00H ;20 DB 0DH ;21 - M DB 00H ;22 DB 02H ;23 - B DB 03H ;24 - C DB 1BH ;25 - ESCape key DB 1FH ;26 - 0 key on key pad DB 0DH ;27 - ENTER key on key pad DB 00H ;28 - not assigned DB 0DH ;29 - RETURN key DB 0F?IR ; ; ; SET THE PORT FOR HARD DISK OPERATION ; MVI A,0CFH ;SET PORT A AS A STATUS PORT OUT PO2AS ; MVI A,00H ;SET FOR OUTPUT OUT PO2AS ; MVI A,07H ; OUT PO2AS ;NO INTERRUPTS ; MVI A,0CFH ; OUT PO2BS ;SET A CONTROL PORT MVI A,0FH ;UPPER NIBBLE OUT, LOWER IN OUT PO2BS ; MVI A,07H ; OUT PO2BS ; ; MVI A,70H ; OUT PO2BD ;SET THE OUTPUT BITS ; CALL SETIV ;SET THE CTC AND INTERRUPTS ; MVI A,MXDSK ; STA CDISK ;RESET THE DRIVE STA LDSK ;RESET THE LAST DISK ; LXI H,SAINT ;GET THE INIT STRING FOR SIO A MVI C,01 ; CALL LINIT ;DO IT LXI H,SBINT ; MVI C,81H ; CALL LINIT ;DO IT LXI H,PPINT ; MVI C,0C1H ; CALL LINIT ; ; LDA IBYTE ; STA IOBYTE ;SET THE I/O BYTE ; MVI C,CS ; CALL CONO ;CLEAR THE SCREEN AND INIT VIDEO ; LXI H,MSG ;POINT AT THE SIGNON MESSAGE LDA CCP+7 ; ORA A ; JNZ BOOT1 ;AUTO BOOT - NO MESSAGE CALL PRNMSG ;PRINT THE SIGN ON MESSAGE LXI H,MSG1 ; LDA DSKFL ;GET THE SINGLE/DOUBLE FLAG ANI 1 ; CNZ PRNMSG ;PRINT THE DOUBLE ?H ;2A - INSERT DB 0FH ;2B - O DB 15H ;2C - U DB 14H ;2D - T DB 05H ;2E - E DB 11H ;2F - Q ; DB 00H ;30 - not assigned DB 00H ;31 - not assigned DB 0BH ;32 - Up Arrow key DB 00H ;33 - not assigned DB 00H ;34 - single quote character DB 0CH ;35 - L DB 0AH ;36 - J DB 07H ;37 - G DB 04H ;38 - D DB 01H ;39 - A DB 00H ;3A - not assigned DB 00H ;3B - not assigned DB 00H ;3C - not assigned DB 00H ;3D DB 00H ;3E DB 00H ;3F ; DB 00H ;40 DB 00H ;41 DB 00H ;42 DB 00H ;43 DB 00H ;44 - not assigned DB 00H ;45 - not assigned DB 00H ;46 - not assigned DB 00H ;47 DB 00H ;48 DB 00H ;49 DB 00H ;4A DB 00H ;4B DB 00H ;4C DB 00H ;4D DB 00H ;4E - not assigned DB 00H ;4F - not assigned ; DB 12H ;50 - 9 key on the key pad DB 04H ;51 - 6 key on the key pad DB 03H ;52 - 3 key on the key pad DB 1EH ;53 - . key on the key pad DB 1CH ;54 - F1 key on the key pad DB 00H ;55 - not assigned DB 00H ;56 - not assigned DB 00H ;57 - not assigned DB 1DH ?SIDED MESSAGE ; BOOT1: CALL SETCPM ;SET THE CPM VECTORS JMP CCP ;CONTINUE ; ; SOME DEVICES REQUIRE AN INIT STRING ; LINIT: MOV A,M ;GET THE FIRST CHARACTER OF THE STRING ORA A ;IS IT ZERO? RZ ;YES MOV A,C ;GET THE IOBYTE VALUE STA IOBYTE ;AND SET IT PUSH H ;SAVE THE POINTER CALL LPTS ;CALL THE STATUS ROUTINE POP H ;GET IT BACK ORA A ;IS IT READY? RZ ;NO LINT1: MOV A,M ;GET THE CHARACTER ORA A ;IS IT THE END RZ ;YES MOV C,A ;NO, SET THE CHARACTER UP INX H ;BUMP PUSH H ;SAVE IT CALL LPTO ;DO IT POP H ;GET IT BACK JMP LINT1 ;CONTINUE ; ; WARM BOOT ENTRY ; WBOOT: DI ;DONT INTERRUPT XRA A ;0 TO ACCUMULATOR STA HSTACT ;HOST BUFFER INACTIVE STA HSTWRT ;CLEAR BUFFER WRITTEN MVI A,MXDSK ; STA LDSK ;RESET THE DISK LXI SP,100H ;SET STACK CALL SETIV ;SET THE INTERRUPT VECTORS EI ; MVI C,0 ; CALL SETDSK ;SET THE DISK DRIVE LXI B,0 ; CALL SETTRK ;SET THE TRACK ADDRESS LXI B,1 ; CALL SETSEC ;SET THE FIRST SECTOR NUMBER LXI B,CCP ;SET THE LOAD?;58 - F2 key on the key pad DB 00H ;59 - not assigned DB 00H ;5A - not assigned DB 00H ;5B - not assigned DB 00H ;5C - not assigned DB 00H ;5D - not assigned DB 00H ;5E - not assigned DB 00H ;5F - not assigned IOSIZ EQU (($-BIOS)/80H)+1 ; ; ; DEFINE INTERRUPT VECTOR TABLE ; DS 8 - ( $ AND 7 ) ;EVEN BOUNDRY DMAIV: DW SRVDMA ;DMA VECTORS DW SRVDMA ; DW SRVDMA ; DW SRVDMA ; CTCIV: DW TIME ;REAL TIME CLOCK DW INTER ;NOT USED DW INTER ;NOT USED DW IDSK ;FLOPPY DISK INTERRUPT ; DW 0,0,0,0 ; ; SIGNON MESSAGE ; MSG: DB 'CP/M 2.2.' DB VER + 'A' DB ' for AVL Eagle with 20MB Corvus ' DB 0 MSG1: DB '(Double sided version)' DB 0 ; ; COLD BOOT ENTRY ; BOOT: DI ;JUST IN CASE LXI SP,100H ;USE CPM STACK AREA ; ; CLEAR OUR WORK AREA ; LXI H,BEGDAT ;POINT AT BEGINNING MVI M,0 ;CLEAR IT LXI D,BEGDAT+1 ;ONE MORE LXI B,DATSIZ ;GET THE SIZE DW LDIR ;CLEAR THE DATA AREA ; LXI H,0 ;CLEAR THE BOTTOM PART OF RAM LXI D,1 ; LXI B,0FFH ; MVI M,0 ; DW LD@a@ ADDRES CALL SETDMA ; MVI A,NSECT ;GET THE SIZE STA NBRSC ;SET THE NUMBER OF SECTORS WBOOT1: CALL READ ;DO A SECTOR READ ORA A ;DO A SECTOR READ JNZ WBOOT ;TRY AGAIN FROM THE TOP LXI H,NBRSC ;POINT AT OUR COUNT DCR M ;COUNT DOWN JZ GOCPM ;ALL DONE LXI D,80H ;SET THE SECTOR SIZE LHLD DMAAD ;GET THE CURRENT ADDRESS DAD D ;POINT TO NEXT SHLD DMAAD ;PUT IT BACK LXI H,SECTOR ;POINT AT SECTOR INR M ;BUMP IT LDA CPMSPT ;GET THE SECTORS PER TRACK DCR A ;ADJUST IT CMP M ;COMPARE JNC WBOOT1 ;CONTINUE MVI M,0 ;RESET TO ZERO LHLD TRACK ;GET THE TRACK INX H ;BUMP SHLD TRACK ;PUT IT BACK JMP WBOOT1 ;CONTINUE ; ; ALL DONE - SET TO GO TO CPM ; GOCPM: CALL SETCPM ;SET THE ENTRY POINTS LDA SYSFL ANI 1 JZ CCP ; JMP CCP+3 ;USE THE CLEAR ENTRY POINT ; ; SET UP CP/M ENTRIES ; SETCPM: MVI A,0C3H ;GET JUMP INSTRUCTION STA 0 ;STORE FOR WARM BOOT LXI H,WBOOTE;WARM BOOT ENTRY SHLD 1 ;FINISH JUMP INSTRUCTION STA 5 ;CP/M ENTRY JUMP LXI H,BDOS ;POINT AT BDOS ENTRY @*********** ; ; ; CONSOLE INPUT ; CONIN: PUSH H ;SAVE H-L LXI H,CITBL ;GET THE INPUT TABLE JMP CCOM ;JOIN COMMON CODE ; ; CONSOLE OUTPUT ROUTINE ; CONOT: PUSH H ;SAVE H-L REG LXI H,COTBL ;GET THE OUTPUT TABLE JMP CCOM ;JOIN COMMON CODE ; ; CONSOLE INPUT STATUS ROUTINE ; CONIS: PUSH H ;SAVE H-L LXI H,CSTBL ;GET THE TABLE JMP CCOM ;JOIN COMMON CODE ; ; READER STATUS ROUTINE ; RDRST: PUSH H ;SAVE H-L LXI H,RSTBL ;GET THE READER STATUS TABLE JMP DORDR ;CONTINUE ; ; READER INPUT ROUTINE ; RDRIN: PUSH H ;SAVE THE HL LXI H,RITBL ;GET THE CORRECT TABLE DORDR: LDA IOBYTE ;GET THE I/O BYTE RRC ;SHIFT IT OVER JMP DCOM ;CONTINUE ; ; PUNCH OUTPUT ROUTINE ; PUNOT: PUSH H ;SAVE H-L LXI H,PNTBL ;GET THE TABLE LDA IOBYTE ;GET THE I/O BYTE RRC ;SHIFT IT OVER RRC RRC JMP DCOM ;CONTINUE ; ; LIST OUTPUT ROUTINE ; LSTOT: PUSH H ; LXI H,LOTBL ;GET THE CORRECT TABLE DOLST: LDA IOBYTE ;GET THE F/O BYTE RLC ;SHIFT IT INTO POSTION RLC ; RLC ; JMP DCOM ;CONT@$SHLD 6 ;FINISH JUMP INSTRUCTION LXI H,80H ;DEFAULT BUFFER ADDRESS SHLD DMAAD ;SET IT LDA BDISK ;GET THE CURRENT BOOT DISK MOV C,A ;LOG IN THE BOOT DISK RET ;ALL DONE ; ; SETUP THE INTERRUPT VECTORS FOR CTC ; SETIV: LXI D,DPBK1B ; LXI H,DPBK1A ; LDA DSKFL ;GET THE DISK FLAG MOV B,A ;SAVE IT ANI 1 ; JZ SETI1 ;CONTINUE XCHG ;DOUBLE SETI1: SHLD DPBA ;SET THE PROPER BLOCK SHLD DPBB ; XCHG SHLD DPBI ; SHLD DPBJ ; MVI A,PROFF ;SET THE PROM OFF STA MTRFL ;CLEAR THE MOTOR FLAG OUT SYSCN ;AND SET IT XRA A ; STA REVFL ;CLEAR ANY REVERSE VIDEO MVI A,03H ; OUT CTC0 ;RESET CLOCK 0 ; LXI H,SIOCM ; MVI C,SIOAS ;SET THE SIO-A PORT ADDR MVI B,SIOLN ;SET THE LENGTH DW OUTIR ;SET THE SIO ; LXI H,SIOCM ; MVI C,SIOBS ;SET THE SIO-B PORT ADDR MVI B,SIOLN ;SET THE LENGTH DW OUTIR ;PUT IT OUT ; LXI H,DMARS ;POINT AT THE RESET COMMAND MVI C,DMAC ;GET THE ADDRESS MVI B,DMRLN ;SET THE LENGTH DW OUTIR ;PUT THE RESET COMMAND OUT ; LHLD SIOA ;GET THE @!INUE ; ; LIST OUTPUT STATUS ROUTINE ; LSTST: PUSH H ;SAVE HL LXI H,LSTBL ;POINT AT THE LIST STATUS TABLE JMP DOLST ;CONTINUE ; ; COMMON CODE TO ROUTE TO ROUTINES ; CCOM: LDA IOBYTE ;GET THE I/O BYTE RLC ;SHIFT IT OVER DCOM: ANI 6 ;MASK IT OFF PUSH D ;SAVE IT MOV E,A ;SET IT MVI D,0 ;CLEAR HIGH ORDER DAD D ;POINT TO ROUTINE MOV E,M ;GET THE LOW BYTE OF ROUTINE INX H ;POINT TO NEXT MOV D,M ;GET IT XCHG ;PUT ROUTINE ADDR IN H-L POP D ;RESTORE XTHL ;RESTORE H-L PUT ADDR ON STACK RET ;GO TO THE ROUTINE ; ; CONSOLE INPUT ROUTINES ; CITBL: DW SAIN ;0 - TTY: DW KYBIN ;1 - CRT: DW RDRIN ;2 - BAT: DW SBIN ;3 - UC1: ; ; CONSOLE INPUT STATUS ROUTINES ; CSTBL: DW SAIST ;0 - TTY: DW KYBST ;1 - CRT: DW RDRST ;2 - BAT: DW SBIST ;3 - UC1: ; ; CONSOLE OUTPUT ROUTINES ; COTBL: DW SAOUT ;0 - TTY: DW VIDEO ;1 - CRT: DW LSTOT ;2 - BAT DW SBOUT ;3 - UC1: ; ; READER INPUT ROUTINES ; RITBL: DW KYBIN ;0 - TTY: DW KYBIN ;1 - PTR: DW SAIN ;2 - UR1: DW SBIN @9CONTROL FOR SIO PORT A MOV A,L ;GET THE CONTROL BYTE OUT CTC1 ;PUT IT OUT MOV A,H ;GET THE COUNTER OUT CTC1 ; ; LHLD SIOB ;GET THE CONTROL BYTES FOR PORT B MOV A,L ;GET THE CONTRL BYTE OUT CTC2 ;PUT IT OUT MOV A,H ;GET THE COUNTER BYTE OUT CTC2 ; ; MVI A,0D5H ;SET FOR INTERRUPT OUT CTC3 ; MVI A,1 ; OUT CTC3 ; ; LXI H,CTCIV ;POINT AT THE VECTOR TABLE MOV A,L ;GET THE LOW ORDER OUT CTC0 ;SET THE VECTOR FOR THE CTC MOV A,H ;GET THE HIGH ORDER ADDR DW STAI ;SET THE I REG DW IM2 ;SET INTERRUPT MODE 2 ; LDA SYSFL ANI 2 RZ ; IN KYBDD ;WASTE ANY CHARACTER STORED UP IN KYBDD ;JUST IN CASE ; RET ;NOW LEAVE ; ; PRINT MESSAGE UTILITY ; PRNMSG: MOV A,M ;GET IT ORA A ;IS IT THE END? RZ ;YES INX H ;BUjMP MOV C,A ;SAVE IT PUSH H ;SAVE CALL CONO ;OUTPUT POP H ;GET IT BACK JMP PRNMSG ;CONTINUE ; ;**.* ; ; CONSOLE AND LINE PRINTER DRIVERS ; ;***AA;3 - UR2: ; ; READ INPUT STATUS ROUTINES ; RSTBL: DW KYBST ;0 - TTY: DW KYBST ;1 - PTR: DW SAIST ;2 - UR1: DW SBIST ;3 - UR2: ; ; PUNCH OUTPUT ROUTINES ; PNTBL: DW SAOUT ;0 - TTY: DW SBOUT ;1 - PTP: DW SAOUT ;2 - UP1: DW SBOUT ;3 - UP2: ; ; LIST OUTPUT ROUTINES ; LOTBL: DW SAOUT ;0 - TTY: DW VIDEO ;1 - CRT: DW SBOUT ;2 - LPT: DW PRTOT ;3 - UL1: ; ; LIST OUTPUT STATUS ROUTINES ; LSTBL: DW SAOST ;0 - TTY: DW VDOST ;1 - CRT: DW SBOST ;2 - LPT: DW PRTST ;3 - UL1: ; ; INPUT FROM SIO, PORT A ; SAIN: CALL SAIST ;CHECK THE INPUT STATUS JZ SAIN ;NOT READY YET IN SIOAD ;GET DATA ANI 7FH ;MASK IT OFF MOV C,A ;SAVE IT MVI A,30H ;GET THE RESET ERRORS FLAG OUT SIOAS ;PUT IT OUT MOV A,C ;GET THE CHARACTER BACK IN CASE RET ;NOW LEAVE ; ; INPUT STATUS CHECK FOR SIO, PORT A ; SAIST: MVI A,10H ; OUT SIOAS ;RESET EXTERNAL CONDITIONS OUT SIOAS ; IN SIOAS ;GET THE STATUS ANI SIORB ;CHECK FOR A CHARACTER READY RZ ;NO READY YET - LEAVE MVI A,0FFH ;THERE ISARTOT: LXI H,PIO1 ;POINT AT THE CONTROL BLOCK MOV A,M ;GET THE CONTROL FLAG ANI 02 ;SOFTWARE FORM FEED? JZ PRTO10 ;NO MOV A,C ;YES, GET THE CHARACTER CPI LF ;IS IT A LINE FEED? JZ PRTF1 ;YES CPI FF ;IS IT A FORM FEED? JZ PRTF2 ; JMP PRTO10 ;NO, CONTINUE ; ; CHARACTER IS A LINE FEED ; PRTF1: INX H ;POINT AT CURRENT LINE INR M ;BUMP MOV A,M ;GET IT INX H ;POINT AT NEXT CMP M ;IS THIS THE END? DCX H ;BACKUP JNZ PRTO10 ;NO MVI M,0 ;RESET TO ZERO JMP PRTO10 ;CONTINUE ; ; PROCESS A FORM FEED ; PRTF2: INX H ;POINT AT CURRENT LINES MOV D,M ;GET THE CURRENT NUMBER OF LINES MVI M,0 ;CLEAR IT INX H ;POINT AT TOTAL MOV E,M ;GET THE TOTAL DCX H ;POINT BACK PRTF3: MOV A,D ;GET THE CURRENT CMP E ;ARE WE DONE YET? RZ ;YES PUSH D ;SAVE MVI C,LF ;OUTPUT A LINE FEED CALL PROUT ;NO, PUT OUT A LINE FEED POP D ;GET IT BACK INR D ;BUMP THE COUNT JMP PRTF3 ;CONTINUE ; ; ACTUAL OUTPUT ROUTINE ; PRTO10: LDA PIO1 ;GET THE FLAGS ANI 1 ;FILTER LINE FEEDS JZ PROA| A CHARCTER READY RET ; ; ; OUTPUT TO SIO PORT A ; SAOUT: CALL SAOST ;CHECK THE OUTPUT STATUS JZ SAOUT ;NOT READY, WAIT MOV A,C ;GET THE CHARACTER OUT SIOAD ;PUT THE CHARACTER OUT RET ;AND LEAVE ; ; OUTPUT STATUS FOR SIO PORT A ; SAOST: MVI A,10H ;GET THE CONDITION RESET OUT SIOAS ;RESET CONDITION OUT SIOAS ; IN SIOAS ;GET THE STATUS LXI H,SAOMK ;POINT AT THE MASK ANA M ;MASK OFF THE BITS INX H ;POINT TO VALUE CMP M ;IS IT THE SAME? JZ SAORD ;YES XRA A ;NO RET ; SAORD: MVI A,0FFH ;YES, SET ACC READY ORA A ; RET ;AND LEAVE ; ; INPUT FROM SIO PORT A ; SBIN: CALL SBIST ;IS THERE A CHARACTER THERE? JZ SBIN ;NOT READY YET IN SIOBD ;GET DATA ANI 7FH ;MASK IT OFF MOV C,A ;SAVE IT MVI A,30H ;GET THE RESET ERRORS FLAG OUT SIOBS ;PUT IT OUT MOV A,C ;GET THE CHARACTER BACK IN CASE RET ;NOW LEAVE ; ; INPUT STATUS CHECK FOR SIO - PORT A ; SBIST: MVI A,10H ; OUT SIOBS ;EXTERNAL CONDITION RESET OUT SIOBS ; IN SIOBS ;GET THE STATUS ANI SIORB ;CHEAgUT ;NO MOV A,C ;YES, GET THE CHARACTER CPI LF ;IS IT LINE FEED? RZ ;YES ; ; AT LAST, THE REAL OUTPUT ROUTINE ; PROUT: CALL PRTST ;CHECK THE STATUS JZ PROUT ;NOT YET MOV A,C ;PRINTER IT READY - GET THE CHARACTER OUT PO1AD ;PUT IT OUT MVI A,00 ;PROVIDE A STROBE OUT PO1BD ; MVI A,02H ; OUT PO1BD ;CLEAR THE STROBE RET ;AND LEAVE ; ; CHECK KEYBOARD INPUT STATUS ; KYBST: IN KYBDS ;GET THE STATUS ANI KYRDY ;CHECK FOR READY RZ ;NOT YET MVI A,0FFH ;SET FOR READY RET ;AND LEAVE ; ; INPUT FROM THE KEYBOARD ROUTINE ; KYBIN: IN KYBDS ; MOV E,A ;GET IT AND SAVE IT ANI KYRDY ;GET STATUS JZ KYBIN ;LOOP IN KYBDD ;GET THE DATA ANI 7FH ;MASK OFF THE UNWANTED BITS CPI CTMAX ;IS IT VALID? JNC KYBIN ;NO, TRY AGAIN MOV C,A ;SAVE IT ; ; E CONTAINS THE STATUS BITS ; C CONTAINS THE DATA (X-Y) BITS ; MOV A,E ; ANI 3 ;SAVE JUST THE SHFIT AND CONTROL BITS MOV E,A ; MVI B,0 ;CLEAR MOV D,B ;HIGH ORDER BYTES LXI H,KYTBL ;POINT AT THE TABLE DAD D ;POINT TO THE ACK FOR A CHARACTER READY RZ ;NO READY YET - LEAVE MVI A,0FFH ;THERE IS A CHARCTER READY RET ; ; ; OUTPUT TO SIO PORT B ; SBOUT: CALL SBOST ;IS THE XMIT BUFFER EMPTY? JZ SBOUT ;NO, WAIT MOV A,C ;GET THE CHARACTER OUT SIOBD ;PUT THE CHARACTER OUT RET ;AND LEAVE ; ; OUTPUT STATUS FOR SIO PORT B ; SBOST: MVI A,10H ; OUT SIOBS ;RESET EXTERNAL CONDITION OUT SIOBS ; IN SIOBS ;GET THE STATUS LXI H,SBOMK ;POINT AT THE MASK ANA M ;MASK OFF THE WANTED BITS INX H ; CMP M ;CHECK TO SEE IF READY JZ SBORD ;YES XRA A ;SET NOT READY RET ;AND LEAVE SBORD: MVI A,0FFH ;SET READY ORA A ; RET ;AND LEAVE ; ; PARALELL PRINTER ROUTINES ; PRTST: IN PO1BD ;GET THE STATUS INFORMATION ANI 30H ;IS THERE A PRINTER THERE? RZ ;NO, JUST LEAVE IN PO1BD ;GET THE STATUS AGAIN CMA ;MAKE THE SIGNAL A HI TRUE READY SIGNL ANI 04H ;IS IT READY FOR A CHARACTER? RZ ;NOT YET MVI A,0FFH ;YES, SET ALL BITS IN CASE RET ;AND LEAVE ; ; OUTPUT THE CHARACTER IN REG C TO THE PRT ; PBsBSPROPER DAD D ;TABLE ADDRESS MOV E,M ;GET THE CORRECT TABLE ADDRESS INX H ; MOV D,M ; XCHG ; DAD B ;INDEX TO THE PROPER CHARACTER MOV A,M ;GET THE CHARACTER MOV C,A ;SAVE IT JUST IN CASE ORA A ;IS IT A NULL (UNDEFINED) JZ KYBIN ;NOT VALID - RESTART THE PROCESS ; ; CHECK FOR ALPHA LOCK PROCESSING ; CPI 'a' ;CHECK THE RANGE RC ;NO CPI 'z'+1 ; RNC ;NOT IN THE ALPHA RANGE IN KYBDS ;GET THE STATUS BACK ANI KYALP ;CHECK FOR ALPHA LOCK DOWN MOV A,C ;GET THE CHARACTER BACK RZ ;NO ALPHA LOCK - LEAVE ANI 5FH ;MAKE THIS UPPER CASE MOV C,A ;SAVE IT RET ;AND LEAVE ; ; VIDEO CONTROLLER STATUS CHECK ; VDOST: IN VSTAT ;GET THE VIDEO STATUS ANI VLRDY ;ARE WE READY FOR A CHARACTER? RZ ;NO MVI A,0FFH ;YES RET ; ; ; VIDEO CONTROLLER OUTPUT ROUTINE ; VIDEO: DI ; DW SSPD,SVDSTK ;SAVE THE OLD STACK LXI SP,VDSTK;GET OUR OWN PUSH H ; PUSH D ; PUSH B ; EI ;ENABLE CALL GTCUR ;GET THE CURSOR POSITION IN HL LDA ESCFL ;GET THE ESCAPE FLAG ORA A ;IS IT B L ; JNZ VCLR1 ;KEEP GOING MVI A,23 ; STA LSTLN ;RESET LAST LINE OUT VCIR6 ;MAKE SURE WE AGREE JMP VRET ;UPDATE AND LEAVE ; ; HOME THE CURSOR TO THE TOP OF THE DISPLAY ; VHOME: LDA LSTLN ;GET THE CURRENT LAST LINE MOV H,A ;SET THIS VALUE MVI L,0 ;ASSUME FIRST POSITION CALL INRLN ;POINT TO THE TOP LINE ON THE DISPLAY JMP VRET ;AND LEAVE ; ; CHARACTER WAS AN ESCAPE - BEGIN THE ESCAPE SEQUENCE ; VESC: STA ESCFL ;SET THE FLAG JMP VCRET ;AND JUST LEAVE ; ; THIS IS THE FIRST CHARACTER FOLLOWING AN ESCAPE ; THIS ROUTINE WILL ANSWER TO SEVERAL DIFFERENT ; ESCAPE CODE SEQUENCES ; ESCPR: CPI ESC ;IS THIS THE FIRST CHARACTER AFTER ESC JNZ ESCNX ;NO, POSITIONING SEQUENCE MOV A,C ;GET THE CHARACTER ANI 7FH ;JUST IN CASE CPI '=' ; JZ POSCR ;CURSOR POSITIONING COMMAND CPI '+' ; JZ ESSCL ;SCREEN CLEAR? CPI '*' ; JZ ESSCL ;SCREEN CLEAR? CPI ')' ; JZ STREV ;SET REVERSE? CPI '(' ; JZ CLREV ;CLEAR REVERSE? CPI 'T' ; JZ ESEOL ;ERASE TO END OF LINE? CPI 'Y' ; JZB,SET? JNZ ESCPR ;YES, PROCESS THE NEXT CHARACTER MOV A,C ;GET THE CHARACTER ANI 7FH ;PARITY BIT MUST NOT BE ON CPI 7FH ;CHECK FOR A RUBOUT JZ VRET ;RUBOUT IS A NO-OPERATION CPI 07H ;BELL? JZ BELL ; CPI 08H ;BACKSPACE? JZ VLEFT ;CURSOR LEFT CPI 0AH ;IS IT LINE FEED? JZ VDOWN ;LINE FEED - CURSOR DOWN CPI 0BH ;UP? JZ VUP ;CURSOR UP CPI 0CH ; JZ VRIGH ;CURSOR RIGHT CPI 0DH ; JZ VCR ;CARRIAGE RETURN CPI 1AH ; JZ VCLR ;CLEAR THE VIDEO CPI 1EH ; JZ VHOME ;HOME THE CURSOR CPI 01BH ; JZ VESC ;ESCAPE - BEGIN SPECIALS CPI ' ' ;IS IT A "NON PRINTING" CHARACTER? JC VRET ;YES, DONT PUT IT IN ; ; THIS IS NOT A SPECIAL CHARACTER ; VINSR: LDA REVFL ;GET THE REVERSE FLAG XRA C ;COMBINE THE CHARACTER MOV C,A ;PUT IT BACK CALL PTCHR ;PUT THE CHARACTER OUT MOV A,L ;GET THE CHARACTER POSITON CPI 79 ;ARE WE NEAR THE END OF THE LINE JNC VNWL ;NEW LINE ; ; ; UDRET: CALL INRCP ;BUMP THE CHARACTER POSITION ; ; COMMON RETURN POINT ; VRET: CALL PTCUR ;PUT THE CURSB ESEOP ;ERASE TO END OF PAGE? CPI 'Z' ; JZ ESEOP ;ERASE TO END OF PAGE? ; JMP ESCRT ;UNKNOWN SEQUENCE ; ; THIS IT THE SECOND LEVEL ROUTING ; ESCNX: CPI '=' ;IS THIS FOLLOWING A '=' JZ YCOR ;YES, PROCESS CPI 0FFH ;ARE WE WAITING FOR THE Y COR JNZ ESCRT ;NO ; ; THIS IS THE X-AXIS VALUE FOR CURSOR POSITION ; XCOR: MOV A,C ;GET THE VALUE SUI 20H ;ADJUST IT CPI 80 ; JC XCOR2 ;INVALID MVI A,79 ;RESET TO MAC XCOR2: MOV L,A ;SET IT LDA YHOLD ;GET THE Y VALUE MOV H,A ;SET IT JMP ESCLR ;CLEAR AND UPDATE CURSOR ; ; THIS IS THE Y-AXIS (LINE) VALUE FOR THE CURSOR POSITION ; YCOR: MOV A,C ;GET THE INPUT CHARACTER SUI 20H ;ADJUST THE VALUE CPI 24 ; JC YCOR2 ;INVALID MVI A,23 ;TEST YCOR2: MOV B,A ;SAVE IT LDA LSTLN ;GET THE ADJUSTMENT INR A ;MAKE IT THE TOP LINE ADD B ;COMBINE CPI 24 ;DID WE WRAP AROUND? JC YCOR3 ;NO SUI 24 ;YES YCOR3: STA YHOLD ;HOLD THIS VALUE MVI A,0FFH ;SET FOR NEXT TIME ; ; SET FLAG FOR SECONDARY ROUTING ; POSCR: STA ESCFL ;SET FOR X VABOR OUT VCRET: DI ; POP B ;RESTORE POP D ; POP H ; DW LSPD,SVDSTK ;RESTORE EI ; RET ;LEAVE THE SUBROUTINE ; ; MOVE THE CURSOR UP ONE LINE ; VUP: CALL DCRLN ;BACKUP ONE LINE JMP VRET ;AND LEAVE ; ; NEW LINE ; VNWL: MVI L,0 ; ; ; MOVE CURSOR DOWN ONE LINE ; VDOWN: LDA LSTLN ;GET THE LAST LINE DISPLAYED CMP H ;ARE WE ON THAT ONE? JNZ VDWN1 ;NO CALL SCROL ;YES, SCROLL IT JMP VRET ;AND LEAVE VDWN1: CALL INRLN ;BUMP THE LINE JMP VRET ;AND LEAVE ; ; CURSOR LEFT ONE CHARACTER POSITION ; VLEFT: CALL DCRCP ;BACK UP ONE CHARACTER POSITION JMP VRET ;AND LEAVE ; ; CURSOR RIGHT ONE CHARACTER POSITION ; VRIGH: CALL INRCP ; JMP VRET ; ; ; DO A CARRIAGE RETURN - RETURN THE CURSOR TO THE ; BEGINNING OF THE LINE - DO NOT CLEAR THE LINE ; VCR: MVI L,0 ;CLEAR THE CHARACTER POSITION JMP VRET ;AND LEAVE ; ; CLEAR EVERYTHING ; VCLR: LXI H,0 ;SET FOR THE TOP MVI C,' ' ;SET FOR A BLANK VCLR1: CALL PTCHR ;CLEAR THE LINE CALL INRCP ;BUMP THE LINE MOV A,H ;GET IT ORACCLUE JMP VCRET ;AND RETRUN ; ; CLEAR THE SCREEN ; ESSCL: XRA A ; STA ESCFL ;CLEAR THE FLAG JMP VCLR ;CLEAR THE SCREEN ; ; SET REVERSE VIDEO ; STREV: MVI A,80H ; STA REVFL ; JMP ESCRT ;CLEAR AND RETURN ; ; CLEAR REVERSE VIDEO ; CLREV: XRA A ; STA REVFL ; JMP ESCRT ; ; ; ERASE TO END OF THE CURRENT LINE ; ESEOL: CALL VEOL ;CLEAR TO THE END OF THE LINE JMP ESCRT ;AND LEAVE ; ; ERASE TO END OF PAGE ; ESEOP: PUSH H ;SAVE CALL VEOL ; POP H ;GET IT BACK LDA LSTLN ;GET THE LAST LINE NUMBER CMP H ;HAVE WE DONE THE LAST LINE JZ ESCRT ;YES MVI L,0 ;NO, START AT THE BEGIN OF NEXT CALL INRLN ;BUMP THE LINE JMP ESEOP ;CONTINUE ; ; COMMON ESCAPE SEQUENCE EXIT ROUTINE ; ESCLR: XRA A ; STA ESCFL JMP VRET ;UPDATE CURSOR AND LEAVE ; ; COMMON ESCAPE SEQUENCE EXIT - NO CURSOR UPDATE ; ESCRT: XRA A ; STA ESCFL ;CLEAR THE FLAG JMP VCRET ;AND LEAVE ; ; PROCESS A BELL CODE ; BELL: LXI H,BEEPC ;POINT AT THE BEEPER MOV A,M ;GET THE COUNT ORA A ;IS IT SET? JNZCVEOL: MVI C,' ' ;ASSUME A BLANK VEOL1: CALL PTCHR ;PUT IT CALL INRCP ;BUMP IT MOV A,L ;GET THE NEW POSITION ORA A ;IS IT THERE? JNZ VEOL1 ;NO RET ;AND LEAVE ; ; SYSTEM LEVEL DISK OPERATIONS ; ; ; SET THE NEXT TRACK TO ZERO ; SETHOM: LXI B,0 ;SET TRACK FOR ZERO LDA HSTWRT ;CHECK FOR PENDING WRITE ORA A JNZ SETTRK ;WRITE IN PROGRESS STA HSTACT ;CLEAR HOST ACTIVE FLAG ; ; SET THE LOGICAL TRACK NUMBER ; SETTRK: MOV H,B ;SET THE HIGH ORDER MOV L,C ;SET THE LOW ORDER SHLD TRACK ;SET THE TRACK ADDRESS RET ; ; SET DMA ADDRESS ; SETDMA: MOV H,B ;ADDRESS TO HL MOV L,C SHLD DMAAD ;STORE ADDRESS RET ; ; DONT DO THE SECTOR TRANSLATION AT THIS LEVEL ; SCTRN: MVI H,0 ; MOV L,C ; RET ; ; ; SET THE LOGICAL SECTOR NUMBER ; SETSEC: MOV A,C ;SET LOW ORDER STA SECTOR ;SET THE SECTOR ADDRESS RET ;THAT'S ALL ; ; SET LOGICAL DISK DRIVE ; SETDSK: LXI H,0 ;ASSUME BAD MOV A,C ;GET THE DRIVE NUMBER CPI MXDSK+1 ; JNC STDER STA CDISK ;SET IT CALL GTPNT ; MOVC VCRET ;YES, LEAVE LDA BPCNT ;GET THE BEEPER CONTROL ORA A ;SET IT SET? JZ VCRET ;NO, NO BEEPER DI ; MOV M,A ;SET THE BEEPER LXI H,MTRFL ;GET THE FLAG MOV A,M ;GET IT ORI BEEPR ;SET THE BIT OUT SYSCN ;SET CONTROL MOV M,A ;PUT IT BACK CALL STINT ;SET OUR INTERRUPTS EI ; JMP VCRET ;NOW LEAVE ; ; CONTROLLER UTILITIES ; GTCUR: IN VCRCC ;GET THE CHARACTER POSITION ANI 07FH ;MASK IT OFF MOV L,A ;SAVE IT IN VCRCL ;GET THE LINE POSITION ANI 1FH ;MASK IT MOV H,A ;SAVE IT RET ;AND LEAVE ; ; SET A NEW CURSOR POSITION ; PTCUR: MOV A,H ;DO LINE FIRST ANI 1FH ;MASK IT OUT VCWCL ;GIVE IT TO THE CONTROLLER MOV A,L ;GET THE CHARACTER POSITION ANI 07FH ;MASK IT OUT VCWCC ;PUT IT OUT RET ;AND LEAVE ; ; PUT THE CHARACTER IN C REG TO THE VIDEO MEMORY ; PTCHR: IN VSTAT ;GET THE MEMORY LATCH STATUS ANI VLRDY ;IS IT EMPTY? JZ PTCHR ;NO, WAIT MOV A,L ;GET THE CHARACTER POSITION OUT VMCHP ; MOV A,H ; OUT VMLIN ; MOV A,C ;GET THE CHARACTER OUT VMDAT ;WRICK A,D ORA E JZ STDER SHLD DPPNT ;SET THE DISK POINTER PUSH H ;SAVE THIS LDAX D ;GET THE CPM VALUE OF SECTOR/TRAK STA CPMSPT ;SET IT LXI H,OALSZ ;GET THE OFFSET TO ALLOCATION SIZE DAD D ; MOV A,M ;GET IT INR A ;BUMP IT STA ALLSZ ;AND SET IT LXI H,OSCSM ;POINT AT SECTOR MASK DAD D ; MOV A,M ;GET IT STA SECMSK ;SET THE MASK INX H ; MOV A,M ; STA SECSHF ; POP H ;RESTORE POINT RET ;NOW LEAVE ; STDER: XRA A LXI H,0 RET ; ; GET POINTERS ; GTPNT: 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) PUSH H ;SAVE THIS MOV C,M ;GET THE TRANSLATE TABLE INX H ; MOV B,M ; DCX H ;POINT BACK AT TOP LXI D,10 ;GET THE OFFSET TO DISK PARAMTER ADR DAD D ;POINT AT ADDR FOR PARAMETERS MOV E,M ;GET THE TABLE ADDRESS INX H ; MOV D,M ;GET IT POP H ; RET ; ;** * ; ; LOGICAL DISK READ ROUTINCTE THE CHARACTER RET ;NOW WE CAN LEAVE ; ; INCREMENT THE CHARACTER POINTER ; INRCP: INR L ;BUMP THE CHARACTER POSITION MOV A,L ;GET IT BACK CPI 80 ;ARE WE AT THE END? RC ;NO MVI L,0 ;CLEAR TO FIRST ; ; INCREMENT THE LINE NUMBER ; INRLN: INR H ;BUMP THE LINE NUMBER MOV A,H ;GET IT CPI 24 ;ARE WE AT THE END? RC ; MVI H,0 ;CLEAR THE FIRST RET ;AND LEAVE ; ; DECREMENT THE CHARACTER POSITION ; DCRCP: DCR L ;BACK UP MOV A,L ;GET IT CPI 80 ;DID WE WRAP AROUND? RC ;NO MVI L,79 ;YES, SET TO END OF LINE ; ; DECREMENT THE LINE NUMBER ; DCRLN: DCR H ;BACK UP MOV A,H ;GET IT CPI 24 ;DID WE WRAP AROUND? RC ;NO MVI H,23 ;YES, RESET RET ; ; SCROLL ; SCROL: LDA LSTLN ;GET THE LAST LINE MOV H,A ;PUT IT IN LINE NUMBER CALL INRLN ;POINT TO THE NEW TOP MOV A,H ;GET IT STA LSTLN ;AND SET PUSH H ;SAVE IT MVI L,0 ;START AT THE BEGINNING CALL VEOL ;ERASE TO END OF LINE IN VCSCR ;SCROLL POP H ;RESTORE HL RET ;AND LEAVE ; ; ERASE TO END OF LINE ; DED}E ; ;*** ; READ: XRA A STA UNACNT ;CLEAR THE UNALLOCATED COUNT MVI A,1 STA READOP ;READ OPERATION STA RSFLAG ;MUST READ DATA MVI A,WRUAL STA WRTYPE ;TREAT AS UNALLOC JMP RWOPER ;TO PERFORM THE READ ; ;**#* ; ; LOGICAL WRITE ROUTINE ; ;*** ; WRITE: XRA A ;0 TO ACCUMULATOR STA READOP ;NOT A READ OPERATION MOV A,C ;WRITE TYPE IN C STA WRTYPE CPI WRUAL ;WRITE UNALLOCATED? JNZ CHKUNA ;CHECK FOR UNALLOC ; ; THIS IS THE FIRST WRITE TO AN UNALLOCATED BLOCK. ; SET THE PARAMETERS ; LDA ALLSZ ;GET THE ALLOCATION SIZE STA UNACNT LXI D,UDSK ;POINT WHERE LXI H,CDISK ;POINT WHAT LXI B,4 ;SET THE SIZE DW LDIR ;PUT IT OVER ; CHKUNA: LDA UNACNT ;ANY UNALLOC REMAIN? ORA A JZ ALLOC ;SKIP IF NOT ; ; MORE UNALLOCATED RECORhDS REMAIN ; DCR A ;UNACNT = UNACNT-1 STA UNACNT ; ; MAKE SURE LOGICAL DISK ADDRESS IS THE SAME ;DMAY HAVE TO FILL THE HOST BUFFER ; FILHST: LXI D,PDSK ;POINT AT PHYSICAL DISK LXI H,CDISK ;POINT AT LOGICAL LXI B,3 ;SET THE SIZE DW LDIR ;MOVE IT OVER LDA REQSEC ;GET THE SECTOR STAX D ;PUT IT IN LDA RSFLAG ;NEED TO READ? ORA A CNZ DREAD ;YES, IF 1 MVI A,1 STA HSTACT ;NO PENDING WRITE ; ; COPY DATA TO OR FROM BUFFER ; MATCH: LDA SECTOR ;GET THE LOGICAL SECTOR NUMBER LXI H,SECMSK ;POINT AT MASK ANA M ;MASK IT OFF MOV L,A ;READY TO SHIFT MVI H,0 ;DOUBLE COUNT DAD H ;SHIFT LEFT 7 BITS DAD H DAD H DAD H DAD H DAD H DAD H ; ; HL HAS RELATIVE HOST BUFFER ADDRESS ; LXI D,HSTBUF DAD D ;HL = HOST ADDRESS XCHG ;NOW IN DE LHLD DMAAD ;GET THE LOGICAL SECTOR LOCATION XCHG ; LXI B,128 ;SET THE LENGTH LDA READOP ;WHICH WAY? ORA A JNZ RWMOVE ;SKIP IF READ ; ; WRITE OPERATION, MARK AND SWITCH DIRECTION ; MVI A,1 STA HSTWRT ;HSTWRT = 1 XCHG ;SOURCE/DEST SWAP ; ; BC INITIALLY 128, DE IS SOURCE, HL IS DEST ; RWMOVE: DW LDIR ;MOVE IT OVER DS LXI H,CDISK ;POINT AT BEGINNING OF LOGICAL LXI D,UDSK ;AND UNA LXI B,4 ;SET THE COUNT CALL MCMP ; JNZ ALLOC ;NOT THE SAME ; ; MATCH, MOVE TO NEXT SECTOR FOR FUTURE REF ; LXI H,USEC ; INR M ;UNASEC = UNASEC+1 LDA CPMSPT ;GET THE SIZE DCR A ; CMP M ;CHECK FOR END OF TRACK JNC NOOVF ;SKIP IF NO OVERFLOW ; ; OVERFLOW TO NEXT TRACK ; MVI M,0 ;UNASEC = 0 LHLD UTRK ;GET THE UNALLOC TRAK NUMBER INX H SHLD UTRK ;UPDATE IT ; ; MATCH FOUND, MARK AS UNNECESSARY READ ; NOOVF: XRA A ;0 TO ACCUMULATOR STA RSFLAG ;RSFLAG = 0 JMP RWOPER ;TO PERFORM THE WRITE ; ; NOT AN UNALLOCATED RECORD, REQUIRES PRE-READ ; ALLOC: XRA A ;0 TO ACCUM STA UNACNT ;UNACNT = 0 INR A ;1 TO ACCUM STA RSFLAG ;RSFLAG = 1 ; ;*** ;* 9 * ;* COMMON CODE FOR READ AND WRITE FOLLOWS * ;*  * ;*** ; D; ; DATA HAS BEEN MOVED TO/FROM HOST BUFFER ; LDA WRTYPE ;WRITE TYPE CPI WRDIR ;TO DIRECTORY? LDA ERFLAG ;IN CASE OF ERRORS JNZ RWRET ;ALL DONE ; ; CLEAR HOST BUFFER FOR DIRECTORY WRITE ; ORA A ;ERRORS? JNZ RWRET ;USE COMMON RETURN POINT XRA A ;0 TO ACCUM STA HSTWRT ;BUFFER WRITTEN CALL DWRITE ;WRITE THE BUFFER NOW LDA ERFLAG RWRET: DI ; DW LSPD,SRWSTK ; EI ;CONTINUE ORA A ;SET ZERO/NON ZERO FLAG RET ;AND LEAVE ; ; UTILITY COMPARE ROUTINE ; TEST FOR EQUALITY ONLY ; MCMP: LDAX D ;GET A BYTE CMP M ;COMPARE RNZ ;NOT EQUAL - JUST LEAVE INX H ;BUMP THE POINTERS INX D ; DCX B ;COUNT DOWN MOV A,B ;CHECK FOR ZERO ORA C ; JNZ MCMP ;NOT DONE YET RET ;ITS EQUAL ; ;**:* ; ; ROUTE THE READ REQUEST TO THE PROPER ROUTINE ; ;*** ; DREAD: LXI H,ORDAD ;GET THE RIGHT OFFSET JMP COMMN ;CONTINUE ; DWRITE: LXI H,OWRAD ; COMMN: LDA PDSK ;GET THE CURRENT DISK D RWOPER: DI ; DW SSPD,SRWSTK LXI SP,RWSTK;USE OUR STACK EI ; XRA A ;ZERO TO ACCUM STA ERFLAG ;NO ERRORS (YET) LDA SECSHF ;GET THE SHIFT FACTOR MOV C,A ;SAVE IT INR C ;BUMP IT LDA SECTOR ;GET THE LOGICAL SECTOR RWOPS: DCR C ;COUNT DOWN JZ RWOPE ; ORA A ;CARRY = 0 RAR ;SHIFT RIGHT JMP RWOPS ;LOOP UNTIL DOWN RWOPE: STA REQSEC ;GET THE REQUIRED PHYSICAL SECTOR ; ; ACTIVE HOST SECTOR? ; LDA HSTACT ;HOST ACTIVE FLAG ORA A ;WAS IT ALREADY? JZ FILHST ;FILL HOST IF NOT ; ; HOST BUFFER ACTIVE, SAME AS SEEK BUFFER? ; LXI H,PDSK ;POINT AT PHYSICAL DISK LXI D,CDISK ;POINT AT REQUEST LXI B,3 ;SET THE SIZE CALL MCMP ;TEST, LEAVING HL => PSEC JNZ NOMATC ;NOT THE SAME ; ; SAME DISK, SAME TRACK, SAME SECTOR? ; LDA REQSEC ;POINT AT THE REQUESTED SECTOR CMP M JZ MATCH ;SKIP IF MATCH ; ; PROPER DISK, BUT NOT CORRECT SECTOR ; NOMATC: LDA HSTWRT ;HOST WRITTEN? ORA A JZ FILHST ;WRITE THE CURRENT BUFFER TO DISK CALL DWRITE XRA A STA HSTWRT STA HSTACT ; ; EEh PUSH H ; CALL GTPNT ;GET THE PROPER POINTER POP H ; DAD D ;POINT TO THE ROUTINE ADDRESS MOV E,M ;LOAD THE ADDRESS INX H ; MOV D,M XCHG ; PCHL ;GO TO THE ROUTINE ; ; READ A PHYSICAL SECTOR FROM DISK ; FREAD: MVI B,6 ;READ COMMAND MVI C,6DH ;SET THE DMA VALUE JMP RWCOM ;COMMON ; ; WRITE A SECTOR ; FWRIT: MVI B,5 ;WRITE COMMAND MVI C,69H ; ; ; COMMON ROUTINE FOR READ AND WRITE ; RWCOM: MOV A,C ;GET THE DMA STA DMACM ;SET THE DMA COMMAND MOV A,B ;GET THE CONTROLLER WORD STA RWDCB ;SET IT MVI A,2 ; STA TOTRY ; LXI H,LDSK ;POINT AT THE LAST DISK WE PROCESSED LDA PDSK ;POINT AT THIS ONE CMP M ;IS IT THE SAME? CNZ SELDSK ;NO, SETUP THE PROPER JUNK LXI H,RWTRY ;POINT AT THE RETRY COUNT MVI M,RETRY ;SET IT INX H ;POINT AT THE COMMAND LDA RWDEN ;GET THE CURRENT DENSITY ORA M ;COMBINE IT WITH THE COMMAND MOV M,A ;SET THE COMMAND INX H ;POINT AT THE SELECT INX H ;POINT AT THE TRACK ; ; SET THE PHYSICAL TRACK NUMBER ; MOV B,M ;GET IT LDA PTRK ;ERMC ;NO XCHG ;YES, OPERATION COMPLETE LXI H,DMARS ;POINT AT THE RESET COMMAND MVI C,DMAC ;GET THE ADDRESS MVI B,DMRLN ;SET THE LENGTH DW OUTIR ;PUT THE RESET COMMAND OUT XCHG ;PUT THE STATUS BACK IN DE INX H ;POINT AT THE STATUS AREA MOV A,M ;GET THE FIRST BYTE (ST0) ANI 0C0H ;WAS IT OK? JZ RWCMP ;ALL DONE ; ; ERROR HAS OCCURRED ; LDA RWTRY ;POINT AT THE RETRY COUNT DCR A ;COUNT DOWN STA RWTRY ;PUT IT BACK JZ MDERR ;ERROR MOV C,A ;SAVE THE RETRY COUNT ; MOV A,M ;DID THE DRIVE GO NOT READY? ANI 08H ; JNZ NTRDY ;YES INX H ;POINT AT ST1 WORD ; MOV A,M ;GET ST1 ANI 02 ;IS IT WRITE PROTECTED? JNZ WTPRT ;YES ; MOV A,C ;GET THE RETRY COUNT BACK CPI 4 ;ARE WE JUST ABOUT OUT? JZ RWCMK ;YES ; INX H ;POINT AT ST2 WORD MOV A,M ;GET ST2 ANI 10H ;WRONG CYLINDER? JNZ RWCMH ;YES, HOME THE DRIVE AND TRY AGAIN ; MOV A,C ;GET THE RETRY COUNT BACK ANI 03 ; JNZ RWCMB ; ; RWCMR: CALL ROCK ;SHIFT THE HEADS JNZ MDERR JMP RWCMA ;TRY AGAIN ; RWCMK: CALL EGET THE TRACK NUMBER MVI C,0 ;ASSUME HEAD 0 CPI 80 ; JC DOTRK ;SIDE ZERO YET SUI 80 ;ADJUST IT INR C ; DOTRK: MOV M,A ;PUT IT IN SUB B ;TEST FOR A DIFFERENCE IN POSITION STA CHGTK ;SET THE FLAG INX H ;POINT AT THE HEAD BYTE ; ; PROCESS THE HEAD BIT ; MOV A,M ;GET THE CURRENT HEAD MOV M,C ;SET THE HEAD BYTE SUB C ;FORM THE DIFFERENCE STA CHGHD ;SET THE HEAD CHANGED BYTE MOV A,C ;GET THE HEAD BIT BACK ADD A ; ADD A ; MOV C,A ; LDA RWSEL ;GET THE UNIT NUMBER ANI 03H ;MASK OFF ANY OLD HEAD VALUE ORA C ;SET THE HEAD SELECT BIT IN THIS BYTE STA RWSEL ;AND PUT IT BACK INX H ;POINT AT SECTOR BYTE ; ; TRANSLATE AND SET THE PHYISCAL SECTOR NUMBER ; PUSH H ;SAVE THE POINTER TO RWSEC LDA PSEC ;GET THE SECTOR MOV C,A ;SAVE IT MVI B,0 ;CLEAR HIGH ORDER INX B ;ASSUME WE HAVE NO TRANSLATION TABLE LHLD DXLTB ;GET THE TRANSLATE TABLE MOV A,H ;TEST FOR NO TRANSLATION ORA L ; JZ NOXLT ;CONTINUE DCX B ;NORMALIZE DAD B ;POINT AT THE ENTRY MOV C,M ;GET THE PREFKICK ;LAST ATTEMPT ; RWCMH: CALL HOME ;RECALIBRATE THE DRIVE JNZ MDERR ;ERROR OCCURRED JMP RWCMA ;TRY AGAIN ; MDSK: DB CR,ESC,'T','Drive ',0 MNRDY: DB ' is not responding',0 MWPRT: DB ' is write protected',0 MDKER: DB ' error detected',0 MQUE: DB '. Please reinsert diskette,' DB ' push any key to retry' DB 0 MCAN: DB CR,ESC,'T',0 ; ; MEDIA ERROR ; MDERR: LXI H,MDKER JMP PRCER ; ; DRIVE NOT READY ; NTRDY: LXI H,TOTRY ; DCR M ; JNZ RWCMB ;NOT YET LXI H,MNRDY ;POINT AT THE NOT READY MESSAGE JMP PRCER ; ; ; DISKETTE IS WRITE PROTECTED ; WTPRT: LXI H,MWPRT ;POINT AT THE MESSAGEE JMP PRCER ; ; ; COMMON ERROR PROCESSING ; PRCER: PUSH H ;SAVE THE MESSAGE MVI A,RETRY ; STA RWTRY ;RESET THE RETRY COUNT CALL CLMTR ;CLEAR THE MOTOR LXI H,MDSK ;POINT AT IT CALL PRNMSG ; LDA PDSK ;GET THE DRIVE NUMBER WE ARE USING ADI 'A' ;ADJUST MOV C,A ;SAVE IT CALL CONO ;PRINT IT TOO POP H ; CALL PRNMSG ;PRINT THE MESSAGE LXI H,MQUE ;GET THE QUESTION CALL PRNMSG ;E8OPER SECTOR NOXLT: POP H ;RESTORE POINTER MOV M,C ;PUT IN THE SECTOR ; ; CHECK MOTOR CONDITION ; CALL CKMTR ;CHECK THE MOTOR CONDITION ; ; CHECK FOR A REQUIRED SEEK ; LXI H,CHGTY ;POINT AT THE CHANGE FLAGS MOV A,M ;GET THE CHANGED DRIVE MVI M,0 ;CLEAR IT FOR NEXT TIME INX H ; ORA M ;GET THE CHANGED HEAD INX H ; ORA M ;GET THE CHANGED TRACK JZ RWCMB ;SEEK NOT REQUIRED ; ; DISK COMMAND BLOCK IS SET UP ; OUTPUT THE DMA CONTROL AND THEN THE DISK CONTROL ; RWCMA: CALL SEEK ;SEEK TO THE CORRECT TRACK JNZ MDERR ;ERROR ; RWCMB: DI ; LXI H,DMACB ;POINT AT THE CONTROL BLOCK MVI B,DMCSZ ;SET THE NUMBER OF BYTES MVI C,DMAC ;SET THE PORT ADDRESS DW OUTIR ;GIVE THE COMMAND TO THE DMA CONTROLLER MVI A,60 ;.6 SEC - 3 REVOLUTIONS STA TMOUT ;SET FOR A 1 SEC TIMEOUT LXI H,RWDCB ;POINT AT THE BLOCK MVI C,9 ;GET THE COMMAND SIZE CALL DSKOT ;PUT IT OUT LXI H,DINTR ;POINT AT THE FLAG MVI M,0 ;CLEAR IT EI ; RWCMC: MOV A,M ;GET INDICATOR ORA A ;IS IT DONE YET? JZ RWCFWFLPRINT IT PRCR1: CALL CONS ; ORA A ; JZ PRCR2 ;WASTE ANY EXTRA CHARACTERS CALL CONI ; JMP PRCR1 ; PRCR2: CALL CONI ;GET REPLY CPI 03H ;CONTROL C? JZ WBOOT ; CPI ESC ;ESCAPE? JZ WBOOT ;ERROR ANI 5FH ;MAKE IT UPPER CASE CPI 'C' ;CONTINUE? JZ CNTER RTER: LXI H,MCAN ;CLEAR THE MESSAGE CALL PRNMSG ; CALL CKMTR ;TURN THE MOTOR BACK ON JMP RWCMH ;TRY AGAIN CNTER: LXI H,MCAN ;CLEAR THE MESSAGE CALL PRNMSG ; JMP IOERT ;HAVE TO LEAVE ; ; GIVE IT UP - ERROR ; IOERT: XRA A ; STA HSTACT MVI A,0FFH ;SET ACC TO NON ZERO ORA A ;SET THE ZERO FLAGS ; ; READ/WRITE OPERATION IS COMPLETE ; RWCMP: PUSH PSW ;SAVE THE RESULT CALL CLMTR ;TURN THE MOTOR OFF POP PSW ;GET THE RESULT BACK LXI H,ERFLAG ;POINT AT THE FLAG ORA M ;COMBINE MOV M,A ;AND PUT IT BACK RET ;NOW LEAVE ; ; CLEAR THE MOTOR ; CLMTR: LXI H,MTRFL ;POINT AT THE MOTOR FLAG MOV A,M ;GET IT ANI NOT ACTIV AND 0FFH ;CLEAR THE ACTIVE FLAG MOV M,A ;PUT IT BACK OUT SYSCN ;SET RET ; ; CHECK FOR A MOTORFx MVI A,1 ;SET +1 JNZ ROCK1 ;ODD OR EVEN? MVI A,0FFH ;MAKE IT -1 ROCK1: ADD C ; JP ROCK2 ; MVI A,5 ;SET FOR TWO ROCK2: CPI 80 ;CHECK FOR MAX JC SEEK1 ;CONTINUE KICK: MVI A,78 ; JMP SEEK1 ;CONTINUE ; ; SEEK TO THE PROPER TRACK ; SEEK: LDA RWSKP ;GET THE TRACK SKIP FLAG ORA A ;SET ZERO FLAG LDA PTRK ;GET THE TRACK JZ SEEK2 ;SKIP OR NOT ADD A ;IF FLAG IS SET, USE EVERY OTHER ONE SEEK2: CPI 80 ; JC SEEK1 ; SUI 80 ; SEEK1: MOV D,A ;SET THE TRACK TO SEEK ORA A ;IS IT ZERO JZ HOME ;YES - USE THE RECAL COMMAND MVI B,0FH ;SET THE COMMAND MVI C,03H ;AND THE SIZE ; ; COMMON CODE FOR SEEK AND RECALIBRATE ; SEKCM: LXI H,SKTRY ;POINT AT OUR CONTROL BLOCK MVI M,3 ;SET THE SEEK RETRY COUNT INX H ;POINT AT THE SIZE MOV M,C ;SET THE SIZE INX H ; MOV M,B ;SET THE COMMAND INX H ; LDA RWSEL ;GET THE SELECT MOV M,A ;SET IT IN INX H ;POINT AT THE NEXT MOV A,D ;GET THE TRACK MOV M,D ;SET THE TRACK TO SEEK CPI 80 ; JC SKCM1 ;OK MVI M,79 ;SET FOR MAX SKCM1: DI F ON AND SET FLAG ; CKMTR: LXI H,220 ;PICK THE RIGHT COUNT SHLD MTRCT ;SET THE TIMEOUT LXI H,MTRFL ;POINT AT THE MOTOR FLAG MOV A,M ;GET THE FLAG ORI ACTIV ;SET THE ACTIVE FLAG MOV M,A ;PUT IT BACK OUT SYSCN ;SET THE FLOP ANI MTRON ;CHECK FOR MOTOR ON RNZ ;IS ON MOV A,M ;GET THE CONTROL FLAG ORI MTRON ;SET THE MOTOR ON BIT MOV M,A ;PUT IT BACK OUT SYSCN ;AND SET THE LATCH CALL STINT ;SET THE CLOCK INTERRUPTING LXI H,CLOCK ;SET THE CLOCK FOR .20 MVI M,20 ; EI CKMTR1: MOV A,M ;GET IT ORA A ; JNZ CKMTR1 ;WAIT UNTIL ITS TIME RET ;AND LEAVE ; ; SET THE REAL TIME CLOCK INTERRUPTING ; STINT: DI ;DONT STOP US NOW MVI A,0A5H ; OUT CTC0 ;SET THE CLOCK JOB MVI A,156 ;APPROXIMATLY 1/100 OUT CTC0 ; RET ; ; SELECT THE DISK DRIVE ; SET TO PERFORM A SEEK EACH TIME WE CHANGE DRIVE TYPES ; SELDSK: MOV E,M ;GET THE LAST DISK/TYPE MOV M,A ;SET THE NEW DRIVE/TYPE ANI 1 ;MASK OFF THE PHYSICAL UNIT NUMBER STA RWSEL ;SET THE PROPER SELECT VALUE MOV A,E ;GET THE LAF0 MVI A,100 ;SET FOR 1.0 SEC TIME OUT STA TMOUT ; LXI H,SKSIZ ;POINT AT THE SIZE MOV C,M ;GET IT INX H ;POINT AT THE CONTROL BLOCK CALL DSKOT ;PUT IT OUT LXI H,DINTR ;GET THE INDICATOR MVI M,0 ;CLEAR THE INTERRUPT INDICATOR EI ;ENABLE INTERRUPTS SKCM2: MOV A,M ;GET THE FLAG ORA A ;IS IT SET YET JZ SKCM2 ;CONTINUE TO LOOP INX H ;POINT AT THE STATUS WORD MOV A,M ;GET THE ST0 WORD ANI 0D0H ;CHECK FOR ERRORS JZ SKCMP ;YES, DONE LXI H,SKTRY ;ERRORS DCR M ;TRY AGAIN JNZ SKCM1 ; ORA A ;SET NON ZERO RET ;THATS ALL FOLKS ; ; SEEK IS COMPLETE ; SKCMP: LXI H,CLOCK ; MVI M,10 ;SET FOR AROUND A HALF REVOLUTION SKCMP1: MOV A,M ; ORA A ; JNZ SKCMP1 ;WAIT FOR THE HEADS TO SETTLE RET ; ; ; OUTPUT THE COMMAND TO THE FDC ; DSKOT: IN DSKS ;GET THE STATUS ADD A ; JNC DSKOT ;TRY AGAIN JM DSKO1 ;NOT READY FOR OUTPUT RAL ;SHIFT RAL ;CHECK BUSY JC DSKOT ;NOT YET MOV A,M ;GET THE BYTE OUT DSKD ;PUT IT OUT INX H ;BUMP FOR NEXT DCR C ;COUNT DOWN JNZ DSKOT FST TYPE USED ANI 0FEH ;STRIP OFF THE UNIT MOV E,A ;AND SAVE IT MOV A,M ;GET THE CURRENT TYPE ANI 0FEH ;DO THE SAME SUB E ;FORM THE TYPE DIFFERENCE STA CHGTY ;SAVE THE TYPE CHANGE FLAG RZ ;TYPE DID NOT CHANGE - JUST LEAVE ; MOV A,M ;GET THE CURRENT DISK BACK CALL GTPNT ;POINT TO THE PROPER ENTRIES MOV H,B ; MOV L,C ; SHLD DXLTB ;SAVE THE TRANSLATE TABLE XCHG ; SHLD DVPNT ;SET THE DEVICE PARAMETER POINTER LXI D,OSCSZ ;POINT AT SECTOR SIZE DAD D ;POINT AT THEM MOV E,M ;GET THE SECTOR SIZE INX H ; MOV D,M ; INX H ; ; DW SDED,DMASZ ;SET THE SIZE ; LXI B,DSKPS ;SET THE SIZE LXI D,RWSIZ ;POINT WHERE IT GOES DW LDIR ;MOVE IT OVER RET ;NOW LEAVE ; ; HOME (RECALIBRATE) THE DISK DRIVE ; HOME: MVI B,07H ;SET THE COMMAND MVI C,02H ;SET THE SIZE MVI D,0 ;SET FOR TRACK ZERO JMP SEKCM ;CONTINUE ; ; ROCK THE DRIVE POSITION ; ROCK: LDA SKTRK ;GET THE LAST SEEK TRACK MOV C,A ;SAVE IT LDA RWTRY ;GET THE RETRY COUNT RAR ; RAR ; ANI 1 ;SET THE FLAGS GG^;NOT DONE YET RET ;ALL DONE DSKO1: PUSH H ;SAVE IT CALL DSKIN ;GET THE INPUT POP H ;GET IT BACK JMP DSKOT ;CONTINUE ; ; GET THE COMPLETED STATUS ; DSKIN: LXI H,WKST0 ;POINT AT THE HOLD AREA PUSH H ;SAVE IT MVI A,7 ;SET THE SIZE DSKI1: MVI M,0 ;CLEAR INX H ; DCR A ;COUNT DOWN JNZ DSKI1 ;CONTINUE POP H ;RESET TO THE TOP MVI M,80H ;SET FOR INVALID ERROR IN CASE DSKI2: IN DSKS ;GET THE STATUS ADD A ;TEST JNC DSKI2 ;NOT READY RP ;NOT IN INPUT - MUST BE DONE IN DSKD ;GET THE BYTE MOV M,A ;PUT IT IN INX H ;BUMP JMP DSKI2 ;TRY SOME MORE ; ; SERVICE DMA COMPLETE INTERRUPT ; SRVDMA: PUSH PSW ;SAVE IT MVI A,083H ;DISABLE DMA OUT DMAC ; MVI A,8BH ;RESET STATUS OUT DMAC ; MVI A,0A3H ;RESET INTERRUPT COMMAND OUT DMAC ; POP PSW ; EI ; DW RETI ; ; ; DISK CONTROLLER INTERRUPT ; IDSK: DW SSPD,SDKSTK ; LXI SP,DKSTK PUSH PSW ;SAVE PSW PUSH H ;SAVE HL XRA A ; STA TMOUT ;CLEAR THE OPERATION TIMEOUT EI ; IN DSKS ;GET THE CURRENT STATUS ORI 20HG;ITS TIME OUT TIME OUT CTC0 ;TURN OFF THE TIMER TIMEX: DI ; POP H ;RESTORE POP PSW ; EI ;ENABLE DW RETI ;ALL DONE ;**0* ; ; Winchester Disk Drivers via PIO #2 ; ;*** ; DVRDY EQU 1 ;DRIVE READY BDIRC EQU 2 ;DIRECTION (HI = CPU OUTPUT, LOW = INPUT) STRLO EQU 30H ;STROBE LOW STRHI EQU 70H ;STROBE HIGH RDCM EQU 32H ;READ COMMAND WRCM EQU 33H ;WRITE COMMAND HSSIZ EQU 512 ;SECTOR SIZE IN USE ; ; HARD DISK READ ROUTINE ; HREAD: MVI A,RDCM ;GET THE READ CODE JMP HDRDW ;JOIN COMMON ; ; HARD DISK WRITE ROUTINE ; HWRIT: MVI A,WRCM ;GET THE WRITE CODE JMP HDRDW ;CONTINUE ; ; COMMON CODE FOR HARD DISK READ/WRITE ; ; FIRST ORDER OF BUSINESS IS TO CONVERT ; THE SYSTEM LEVEL DISK, TRACK AND SECTOR ; TO A DRIVE AND LOGICAL SECTOR NUMBER ; HDRDW: STA COMND ;SET THE COMMAND LHLD PTRK ;GET THE REQUESTED PHYSICAL TRACK XRA A ;CLEAR ACC MVI C,3 ;SET SHIFT COUNT HDFRM: DAD HG ; STA DINTR ; IDSK1: IN DSKS ;GET THE STATUS ADD A ;TEST JNC IDSK1 ;WAIT JM IDSK2 ;CONTINUE MVI A,08H ;GET THE SENSE INTERRUPT COMMAND OUT DSKD ;GIVE THE COMMAND IDSK2: CALL DSKIN ;GET THE CURRENT STATUS DI POP H ;RESTORE POP PSW ;RESTORE DW LSPD,SDKSTK ;RESTORE STACK EI ;ENABLE AGAIN DW RETI ;NOW LEAVE ; ; CTC INTERRUPT ERROR ; INTER: EI ; DW RETI ;NOW LEAVE ; ; TIMER ROUTINE ; TIME: PUSH PSW ;SAVE ACC PUSH H ;SAVE HL EI ;ENBABLE FOR HIGHER PRIORITY ; ; DO CLOCK ; LXI H,CLOCK ; MOV A,M ;GET IT ORA A ;IS IT ZERO? JZ TIME1 ;YES DCR M ;NO, COUNT DOWN ; ; DO OPERATION TIMEOUT ; TIME1: LXI H,TMOUT ; MOV A,M ;GET IT ORA A ; JZ TIME2 ;ALREADY ZERO DCR M ;COUNT DOWN JNZ TIME2 ;CONTINUE ; ; OPERATION HAS TIMED OUT ; MVI M,100 ;SET FOR ANOTHER SECOND LXI H,MTRFL ;POINT AT THE MOTOR FLAG MOV A,M ;GET THE FLAG ANI NOT MTRON AND 0FFH ;TURN OFF THE MOTOR BIT OUT SYSCN ;CLEAR THE CONTROL MOV A,M ;GET THE PROPER ONE BACK OUT SYSCN ;REG ;SHIFT TRACK ADDRESS RAL ;PICK UP HIGH ORDER BITS DCR C ;COUNT DOWN JNZ HDFRM ;CONTINUE STA HDDRV ;SAVE THE HIGH ORDER LDA PSEC ;GET THE SECTOR ADDRESS ADD L ;COMBINE MOV L,A ;PUT IT BACK SHLD HDADD ;SAVE IT ; ; ADJUST THE LINEAR SECTOR NUMBER ; DO THE PROPER SEGMENT ON THE DISK ; LDA PDSK ;GET THE CURRENT DISK ANI 3 ;ADJUST IT FOR TABLE ADD A ; ADD A ;TABLE IT FOUR BYTES MOV L,A ;SET UP MVI H,0 ; LXI D,HDTBL ;POINT AT IT DAD D ;POINT TO THE ENTRY XCHG ;PUT THE POINTER IN DE LXI H,HDADD ;POINT AT OUT SECTOR NUMBER LDAX D ;GET A BYTE ADD M ;COMBINE MOV M,A ;AND PUT IT BACK INX H ; INX D ; LDAX D ;GET THE SECOND BYTE ADC M ; MOV M,A ;PUT IT BACK INX D ;POINT TO HIGHEST ORDER LXI H,HDDRV ; LDAX D ;GET THE NEXT BYTE ADC M ;COMBINE HIGH ORDER INX D ; ADD A ; ADD A ADD A ADD A ;NIBBLE SHIFT LEFT MOV M,A ;SAVE IT LDAX D ;GET THE DRIVE NUMBER ADD M ;COMBINE MOV M,A ;PUT IT BACK ; ; HARD DISK ADDRESS HAS BEEN FORMED - OUTPUT THEGSTORE THE PROPER BIT ; ; PROCESS THE MOTOR ON TIMER ; TIME2: LXI H,MTRFL ;POINT AT THE FLAG MOV A,M ;GET IT ANI ACTIV+MTRON ;DO WE NEED TO CHECK? JZ TIME3 ;NO ANI ACTIV ;ARE WE ACTIVE? JNZ TIME3 ;IN PROGRESS LHLD MTRCT ;GET THE COUNT DCX H ;COUNT DOWN SHLD MTRCT ;PUT THE COUNT BACK MOV A,H ;CHECK FOR ZERO ORA L ; JNZ TIME3 ;NOT AT ZERO YET LDA MTRFL ;GET THE MOTOR WORD BACK ANI NOT MTRON AND 0FFH ;CLEAR MOTOR ON OUT SYSCN ;TURN IT OFF STA MTRFL ;CLEAR THE MOTOR ON ; ; CHECK THE BEEPER ; TIME3: LXI H,BEEPC ;POINT AT THE COUNTER MOV A,M ;GET IT ORA A ;IS IT SET? JZ CLBEP ;NO DCR M ;COUNT DOWN JNZ TIMEC ;CONTINUE CLBEP: LXI H,MTRFL ;GET THE FLAG MOV A,M ;GET IT ANI NOT BEEPR AND 0FFH ;TURN IT OFF MOV M,A ;MOVE IT BACK OUT SYSCN ;TURN IF OFF NOW ; ; IF ALL TIMED JOBS ARE COMPLETE - TURN OFF THE CLOCK ; TIMEC: LDA CLOCK ;GET THE CLOCK ORA A ;IS IT ZERO? JNZ TIMEX ;NO LDA MTRFL ;GET THE CONTROL FLAG ANI BEEPR+MTRON JNZ TIMEX ;CONTINUE MVI A,3 H)H COMMAND ; HDTRY: CALL HCKRD ;DO A CHECK FOR READY CALL FLUSH ;FLUSH AND SET FOR OUTPUT LXI H,COMND ;POINT AT COMMAND MVI E,4 ;SET LENGTH HTRY: IN PO2BD ; ANI DVRDY ;CHECK FOR READY JZ HTRY ;WAIT MOV A,M ;GET THE BYTE OUT PO2AD ;WRITE BYTE TO DISC MVI A,STRLO ;GIVE A LOW LEVEL OUT PO2BD ; MVI A,STRHI ;RETURN TO A HIGH LEVEL OUT PO2BD ; INX H ; DCR E ; JNZ HTRY ;KEEP GOINGG LDA COMND ;GET COMMAND AGAIN CPI WRCM ;GET THE WRITE COMMAND JZ WRIT ;YES, SO WRITE A SECTOR ; ; OPERATION IS A READ - CHECK FOR AN ERROR ; CALL HDCHK ;CHECK FOR ERRORS IN THE RETURN CODE RNZ ;ERROR - RETURN LXI D,HSSIZ ;GET THE SECTOR SIZE LXI H,HSTBUF ;GET THE ADDRESS RLP: IN PO2BD ; ANI DVRDY ;CHECK FOR READY JZ RLP ;WAIT IN PO2AD ;GET THE BYTE MOV M,A ;GET THE BYTE MVI A,STRLO ;GIVE A LOW LEVEL OUT PO2BD ; MVI A,STRHI ;RETURN TO A HIGH LEVEL OUT PO2BD ; INX H DCX D MOV A,D ORA E JNZ RLP ;LOOP UNTIL DONE XRA A RET ;NOW LEAVE ; ; OPERATIION IS A WRITE ; WHOO POP H ; CALL PRNMSG ;PRINT THE MESSAGE LXI H,MHQUE ;GET THE QUESTION CALL PRNMSG ;PRINT IT HPRC1: CALL CONS ; ORA A ; JZ HPRC2 ;WASTE ANY EXTRA CHARACTERS CALL CONI ; JMP HPRC1 ; HPRC2: CALL CONI ;GET REPLY CPI 03H ;CONTROL C? JZ WBOOT ; CPI ESC ;ESCAPE? JZ WBOOT ;ERROR ANI 5FH ;MAKE IT UPPER CASE CPI 'C' ;CONTINUE? JZ HCTER ; HRTER: LXI H,MCAN ;CLEAR THE MESSAGE CALL PRNMSG ; XRA A ; RET ; ; HCTER: LXI H,MCAN ;CLEAR THE MESSAGE CALL PRNMSG ; MVI A,0FFH ORA A RET ; MHQUE: DB '. Push any key to retry',0 ; ; ; CP/M DISK PARAMETER TABLES ; ; DPBASE EQU $ ; DPSIZ EQU 16 ;THIS IS THE SIZE OF EACH TABLE ENTRY ; IF ABFLP ; ; A: = DRIVE 0 - TYPE 1 ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBA: DW DPBK1A DW CHK00,ALL00 ; ; B: = DRIVE 1 - TYPE 1 ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBB: DW DPBK1A DW CHK01,ALL01 ; ; C: = DRIVE 0 - TYPE 2 ; DW XLTB2,0000H DW 0000H,0000H DW DIRBF,DPBK2 DW CHK00,ALL00 ENDIF IHRIT: LXI D,HSSIZ LXI H,HSTBUF ;RESET BUFFER ADDRESS (IN CASE) WLP: IN PO2BD ; ANI DVRDY ;CHECK FOR READY JZ WLP ;WAIT MOV A,M ;GET THE BYTE OUT PO2AD ;WRITE BYTE TO DISC MVI A,STRLO ;GIVE A LOW LEVEL OUT PO2BD ; MVI A,STRHI ;RETURN TO A HIGH LEVEL OUT PO2BD ; INX H DCX D MOV A,D ORA E JNZ WLP ;KEEP GOING ; ; CHECK FOR ERRORS ; CALL HDCHK ;CHECK THE RETURN CODE RET ; ; CHECK FOR AN ERROR RETURN CODE FROM THE CONTROLLER ; HDCHK: CALL STCIN ;TURN AROUND BUSS ; HDCK1: IN PO2BD ; ANI DVRDY ;CHECK FOR READY JZ HDCK1 ;WAIT FOR READY IN PO2AD ;GET THE BYTE MOV C,A ;GET THE BYTE MVI A,STRLO ;GIVE A LOW LEVEL OUT PO2BD ; MVI A,STRHI ;RETURN TO A HIGH LEVEL OUT PO2BD ; MOV A,C ;GET THE RETURN CODE STA HDRCD ;SET THE CODE ANI 80H ;LOOK FOR FATAL ERRORS RZ ;OK, SO RETURN ; ; AN ERROR HAS OCCURRED ; LXI H,MDKER ;SET ERROR MESSAGE CALL HPRC ;PUT THE ERROR UP RNZ ; POP H ;CLEAR THE RETURN OFF THE STACK JMP HDTRY ; ; ; SET THE PARALLEL BUSS FOHF ABHRD ; ; A: = DRIVE 0 - TYPE 3 ; DW XLTB3,0000H DW 0000H,0000H DW DIRBF,DPBK3A DW CHK02,ALL02 ; ; B: = DRIVE 1 - TYPE 3 ; DW XLTB3,0000H DW 0000H,0000H DW DIRBF,DPBK3A DW CHK03,ALL03 ; ; C: = DRIVE 0 - TYPE 3 ; DW XLTB2,0000H DW 0000H,0000H DW DIRBF,DPBK3B DW CHK04,ALL04 ENDIF ; ; D: = DRIVE 1 - TYPE 2 ; DW XLTB2,0000H DW 0000H,0000H DW DIRBF,DPBK2 DW CHK01,ALL01 IF EFHRD ;HARD DISK ON E, F ; ; E: = DRIVE 0 - TYPE 3 ; DW XLTB3,0000H DW 0000H,0000H DW DIRBF,DPBK3A DW CHK02,ALL02 ; ; F: = DRIVE 1 - TYPE 3 ; DW XLTB3,0000H DW 0000H,0000H DW DIRBF,DPBK3A DW CHK03,ALL03 ; ; G: = DRIVE 0 - TYPE 3 ; DW XLTB2,0000H DW 0000H,0000H DW DIRBF,DPBK3B DW CHK04,ALL04 ENDIF IF EFFLP ;FLOPPY ON E, F ; ; E: = DRIVE 0 - TYPE 1 ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBA: DW DPBK1A DW CHK00,ALL00 ; ; F: = DRIVE 1 - TYPE 1 ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBB: DW DPBK1A DW CHK01,ALL01 ; ; G: = DRIVEHR INPUT ; STCIN: IN PO2BD ;GET THE STATUS ANI BDIRC ;CHECK FOR DIRECTION JNZ STCIN ;IS IN OUTPUT MODE MVI A,0CFH ;SET FOR INPUT OUT PO2AS ;SET THE PORT MVI A,0FFH ; OUT PO2AS RET ; ; FLUSH ANY INPUT FROM THE CONTROLLER THEN SET FOR OUTPUT ; FLUSH: IN PO2BD ;GET THE STATUS ANI BDIRC ; JNZ STOUT ;OK MVI A,STRLO OUT PO2BD MVI A,STRHI OUT PO2BD JMP FLUSH ; ; SET FOR OUTPUT ; STOUT: IN PO2BD ;GET THE STATUS ANI BDIRC ;CHECK FOR DIRECTION JZ STOUT ;WAIT MVI A,0FH ; OUT PO2AS ;TURN IT AROUND MVI A,00H OUT PO2AS RET ;AND LEAVE ; ; CHECK FOR DRIVE READY - IF NOT, WAIT UNTIL SO ; HCKRD: MVI C,100 ;NUMBER OF TIMES BEFORE WE ISSUE A MESSAGE ; HCKRD0: IN PO2BD ;GET THE STATUS ANI DVRDY ;CHECK FOR READY RNZ ;ITS OK DCR C ; JNZ HCKRD0 ; LXI H,MNRDY ;POINT AT IT CALL HPRC ; JMP HCKRD ; ; PROCESS MESSAGE ; HPRC: PUSH H ;SAVE THE MESSAGE LXI H,MDSK ;POINT AT IT CALL PRNMSG ; LDA PDSK ADI 'A' ;ADJUST MOV C,A ;SAVE IT CALL CONO ;PRINT IT TIIl 0 - SPARE ; DW 0000H,0000H DW 0000H,0000H DW 0000H,0000H DW 0000H,0000H ENDIF ; ; H: = DRIVE 1 - SPARE ; DW 0000H,0000H DW 0000H,0000H DW 0000H,0000H DW 0000H,0000H ; ; I: = DRIVE 0 - TYPE 1 ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBI: DW DPBK1B DW CHK00,ALL00 ; ; J: = DRIVE 1 - TYPE 1 ; DW XLTB1,0000H DW 0000H,0000H DW DIRBF DPBJ: DW DPBK1B DW CHK01,ALL01 ; ; SET THE NUMBER OF DISK DRIVES IN THE SYSTEM ; MXDSK EQU ($-DPBASE)/DPSIZ ; ; ; ; DISK TYPE #1 - AVL SA410 ; ; 1024 BYTES PER SECTOR ; 5 SECTORS PER TRACK ; 80 TRACKS PER DRIVE ; DOUBLE DENSITY ; DPBK1A: DW 40 ;SECTORS PER TRACK DB 4 ;SHIFT FACTOR DB 15 ;BLOCK MASK (2048 BLOCK SIZE) DB 01 ;NULL MASK DW 194 ;DISK SIZE - 1 DW 191 ;DIRECTORY MAX DB 0E0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 48 ;CHECK SIZE DW 2 ;TRACK OFFSET ; DB 7 ;SECTOR MASK DB 3 ;SECTOR SHIFT FACTOR ; DW 3FFH ;SECTOR SIZE - 1 DB 3 ;N DB 5 ;EOT DB 35H ;GPL DB 0FFH ;DTL DB 40H ;DENSITY DB 00IISK SIZE - 1 DW 255 ;DIRECTORY MAX DB 0F0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 0 ;CHECK SIZE DW 3 ;TRACK OFFSET ; DB 3 ;SECTOR MASK DB 2 ;SECTOR SHIFT ; DW 0,0,0,0 ;FILLER ; DW HREAD ; DW HWRIT ; ; DEFINE PHYSICAL SECTOR NUMBERS ; HDTBL: DW 08 ;LEAVE ROOM AT THE TOP DB 0 DB 1 ;DRIVE NUMBER ; DW 4020H DB 0 DB 1 ;DRIVE NUMBER ; DW 8038H DB 0 DB 1 ;DRIVE NUMBER ; XLTB3 EQU 0 ; ; SET OFFSET VALUES FOR ITEMS IN THE DISK ; PARAMETER BLOCK ; OSPT EQU DPBK-DPBK ; OALSZ EQU ALSZ-DPBK ;OFFSET TO ALLOCATION SIZE OSCSM EQU SCSM-DPBK ;OFFSET TO SECTOR MASK OSCSZ EQU SCSZ-DPBK ;OFFSET TO SECTOR SIZE ODSKP EQU DSKP-DPBK ;OFFSET TO DISK PARAMETERS ORDAD EQU RDAD-DPBK ;OFFSET TO DISK READ ROUTINE ADDRESS OWRAD EQU WRAD-DPBK ;OFFSET TO DISK WRITE ROUTINE ADDRESS DSKPS EQU DPBE-DPBK ;SIZE OF DISK PARAMETERS ; ; SIO INITALIZATION ; SIOCM: DB 04H ;REG 4 DB 44H ; DB 05H ;REG 5 DB 0EAH ; DB 03H ;REG 3 DB 0C1H ; DB 01H ;REG 1 DB 00H ;NO INTERRUPTS DB 10H ;RESET IZH ;SKIP FLAG ; DW FREAD ; DW FWRIT ; ; DISK TYPE #5 - AVL SA460 ; ; 1024 BYTES PER SECTOR ; 5 SECTORS PER TRACK ; 160 TRACKS PER DRIVE ; DOUBLE DENSITY ; DPBK1B: DW 40 ;SECTORS PER TRACK DB 4 ;SHIFT FACTOR DB 15 ;BLOCK MASK (2048 BLOCK SIZE) DB 0 ;NULL MASK DW 394 ;DISK SIZE - 1 DW 191 ;DIRECTORY MAX DB 0E0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 48 ;CHECK SIZE DW 2 ;TRACK OFFSET ; DB 7 ;SECTOR MASK DB 3 ;SECTOR SHIFT FACTOR ; DW 3FFH ;SECTOR SIZE - 1 DB 3 ;N DB 5 ;EOT DB 35H ;GPL DB 0FFH ;DTL DB 40H ;DENSITY DB 0 ;SKIP FLAG ; DW FREAD ;DISK READ AND WRITE ADDRESSES DW FWRIT ; ; XLTB1 EQU $ ;TRANSLATION VECTOR DB 1,3,5,2,4 ;COMMON TO SA410 AND SA460 ; ; DISK TYPE #2 - EAGLE I CPM AND PROCALL TYPE ; ; 128 BYTE SECTORS ; 18 SECTORS PER TRACK ; 35 TRACKS PER DISK ; SINGLE DENSITY ; DPBK EQU $ DPBK2: DW 18 ;SECTORS PER TRACK DB 3 ;BLOCK SHIFT FACTOR ALSZ: DB 7 ;BLOCK MASK DB 0 ;NULL MASK DW 71 ;DISK SIZE-1 DW 63 ;DIRECTORY MAX DBI#ERRORS SIOLN EQU $-SIOCM ;LENGTH OF SIO COMMAND ; ; DMA CONTROLLER CONTROL BLOCK ; DMACB: ;DEFINE THE READ/WRITE SETUP COMMAND DMARS: ;DEFINE THE RESET COMMAND DB 83H ;DISABLE DMA DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; DB 0C3H ; ; DMRLN EQU $-DMARS ;LENGTH OF THE RESET COMMAND ; DB 0DH ; DB DSKD ;SET PORT A AS SOURCE DB 2CH ; DB 0CFH ;FORCE A LOAD OF THE PORT ADDRESS ; DMACM: DB 0 ;CONTROL WORD DB DSKD ;DISK PORT NUMBER DMASZ: DW 0 ;SIZE - 1 DB 2CH ;1B BYTE DB 10H ;1B BYTE DB 80H ;2A BYTE - NO STOP ON MATCH DB 9DH ;2B BYTE DMADR: DW HSTBUF ;MEMORY ADDRESS DB 13H ;INTERRUPT CONTROL BYTE DB DMAIV AND 0FFH ;INTERRUPT VECTOR DB 8AH ;2C BYTE - READY IS ACTIVE HIGH DB 0CFH ;LOAD DB 08BH ;RESET STATUS DB 0ABH ;ENABLE INTERRUPT DB 87H ;ENABLE DMA DMCSZ EQU $-DMACB ;NUMBER OF BYTES TO SEND TO CONTROLLER BEGDAT EQU $ ;UNINITIALIZED DATA AREA BEGINS HERE ; ; DEVICE CONTROL BLOCKS ; RWTRY: DS 1 ;RETRY COUNT RWDCB: DS 1 ;READ/WRITI 0C0H ;ALLOC 0 DB 0 ;ALLOC 1 DW 16 ;CHECK SIZE DW 3 ;TRACK OFFSET ; SCSM: DB 0 ;SECTOR MASK DB 0 ;SECTOR SHIFT FACTOR ; SCSZ: DW 7FH ;SECTOR SIZE - 1 DSKP: DB 0 ; N VALUE DB 18 ; EOT VALUE DB 7 ;GPL VALUE DB 80H ;DTL VALUE DB 0 ;DENSITY DB 1 ;TRACK SKIP FLAG ; DPBE EQU $ ;END OF DISK PARAMETER BLOCK ; RDAD: DW FREAD ;DISK READ ROUTINE WRAD: DW FWRIT ;DISK WRITE ROUTINE ; XLTB2 EQU 0 ;NO TRANSLATION TABLE ; ; DISK TYPE #3 - CORVUS HARD DISK 9.7 MBYTE ; ; 128 BYTE SECTORS ; 32 SECTORS PER TRACK ; ; FIRST HALF ; DPBK3A: DW 32 ;SECTORS PER TRACK DB 4 ;SHIFT FACTOR DB 15 ;BLOCK MASK (8K BLOCK) DB 00 ;NULL MASK DW 4095 ;DISK SIZE - 1 DW 1023 ;DIRECTORY MAX DB 0FFH ;ALLOC 0 DB 0FFH ;ALLOC 1 DW 0 ;CHECK SIZE DW 3 ;TRACK OFFSET ; DB 3 ;SECTOR MASK DB 2 ;SECTOR SHIFT ; DW 0,0,0,0 ;FILLER ; DW HREAD ; DW HWRIT ; ; SECOND HALF ; DPBK3B: DW 32 ;SECTORS PER TRACK DB 4 ;SHIFT FACTOR DB 15 ;BLOCK MASK (8K BLOCK) DB 00 ;NULL MASK DW 1402 ;DJ;JE COMMAND RWSEL: DS 1 ;SELECT BYTE RWTRK: DS 1 ;TRACK NUMBER RWHDR: DS 1 ;HEAD NUMBER RWSEC: DS 1 ;SECTOR (R) RWSIZ: DS 1 ;SIZE (N) RWEOT: DS 1 ;S/TK (EOT) RWGPL: DS 1 ;GAP LENGTH RWDTL: DS 1 ;DATA LENGHT RWDEN: DS 1 ;DENSITY FLAG RWSKP: DS 1 ;TRACK SKIP FLAG ; CHGTY: DS 1 ;CHANGED DRIVE TYPE FLAG CHGHD: DS 1 ;CHANGED HEAD CHGTK: DS 1 ;CHANGED TRACK ; ; SEEK/RECAL CONTROL BLOCK ; SKTRY: DS 1 ;SEEK RETRY SKSIZ: DS 1 ;SIZE OF THE COMMAND SKDCB: DS 1 ;COMMAND SKSEL: DS 1 ;SELECT BYTE SKTRK: DS 1 ;SEEK TRACK NUMBER ; ; COMPLETE STATUS WORK AREA ; DINTR: DS 1 ;DISK INTERRUPT INDICATOR WKST0: DS 7 ;WORKING COPY OF DISK STATUS REGISTERS ; ; HARD DISK WORK AREA ; HDRCD: DS 1 COMND: DS 1 HDDRV: DS 1 HDADD: DS 2 ; ; MISC ; TMOUT: DS 1 ;TIMEOUT COUNTER CLOCK: DS 1 ;WAIT COUNTER BEEPC: DS 1 ;BEEPER TIME MTRFL: DS 1 ;MOTOR ON FLAG MTRCT: DS 2 ;MOTOR ON COUNTER CPMSPT: DS 1 ;CPM SECTORS PER TRACK ALLSZ: DS 1 ;CPM ALLOCATION SIZE SECSHF: DS 1 ;SECTOR SHIFT FACTOR SECMSK: DS JHJ`1 ;SECTOR MASK NBRSC: DS 1 ;NUMBER OF SECTORS TO LOAD SRWSTK: DS 2 ;DISK SAVE STACK SVDSTK: DS 2 ;VIDEO SAVE STACK SDKSTK: DS 2 ;DISK INTERRUPT SAVE STACK TOTRY: DS 1 ;TIME OUT RETRY ESCFL: DS 1 ;ESCAPE SEQUENCE IN PROGRESS REVFL: DS 1 ;REVERSE VIDEO FLAG LSTLN: DS 1 ;LAST LINE DISPLAYED YHOLD: DS 1 ;Y VALUE HOLD ; ; CP/M INTERFACE PARAMETERS ; DMAAD: DS 2 ;DIRECT MEMORY ADDRESS DPPNT: DS 2 ;DISK PARAMETER POINTER DVPNT: DS 2 ;DEVICE PARAMETER POINTER DXLTB: DS 2 ;CURRENT TRANSLATE TABLE ; ; LOGICAL DISK DRIVE ; CDISK: DS 1 ; TRACK: DS 2 ; SECTOR: DS 1 ; ; ; PHYSICAL DISK DRIVE PARAMETERS ; PDSK: DS 1 ;DISK NUMBER PTRK: DS 2 ;TRACK PSEC: DS 1 ;SECTOR LDSK: DS 1 ;LAST DRIVE ACCESSED REQSEC: DS 1 ;REQUEST PHYSICAL SECTOR NUMBER ; UDSK: DS 1 ;LAST UNALLOC DISK UTRK: DS 2 ;LAST UNALLOC TRACK USEC: DS 1 ;LAST UNALLOC SECTOR ; ERFLAG: DS 1 ;ERROR REPORTING RSFLAG: DS 1 ;READ SECTOR FLAG READOP: DS 1 ;1 IF READ OPERATION WRTYPE: DS 1 ;WRITE OPERATION TYPE HSTACT: DS 1 ;HOST ACJHJTIVE FLAG HSTWRT: DS 1 ;HOST WRITTEN FLAG UNACNT: DS 1 ;UNALLOC REC CNT ; ; SCRATCH RAM AREA FOR BDOS USE ; DIRBF: DS 128 ;SCRATCH DIRECTORY AREA ; ALL00: DS 50 ;ALLOCATION VECTOR 0 ALL01: DS 50 ;ALLOCATION VECTOR 1 ALL02: DS 512 ;ALLOCATION VECTOR 2 ALL03: DS 512 ;ALLOCATION VECTOR 3 ALL04: DS 512 ;ALLOCATION VECTOR 4 ; CHK00: DS 48 ;CHECK VECTOR 0 CHK01: DS 48 ;CHECK VECTOR 1 CHK02: DS 0 ;CHECK VECTOR 2 CHK03: DS 0 ;CHECK VECTOR 3 CHK04: DS 0 ;CHECK VECTOR 4 ; HSTBUF DS 1024 ;LEAVE ROOM FOR 1K SECTOR SIZE ; ; WORK STACK AREAS ; DS 20H DKSTK: DS 30H VDSTK: DS 30H ; RWSTK: ; ; MARK END OF DATA ; ENDDAT EQU $ ;END OF DATA AREA ; DATSIZ EQU $-BEGDAT;SIZE OF DATA AREA ; ; PROTECTION ; IF (NOT ENDDAT) AND 8000H '******* Memory wrap around error **' ENDIF END 'NG RSFLAG: DS 1 ;READ SECTOR FLAG READOP: DS 1 ;1 IF READ OPERATION WRTYPE: DS 1 ;WRITE OPERATION TYPE HSTACT: DS 1 ;HOST ACKKHKHKHKHKHL LHLHLHLHLHMMHMHMHMHMHNNHNHNHNHNHOOHOHOHOHOHO