,! ~# y $# +$9k,,,,,,,\X COPYRIGHT (C) 1979, DIGITAL RESEARCH ,,_͌> ͒> Ò> Ò͘~#͌ì _2<Я2,, ч!׶2:2a{_:׷ʖ:׷>Ľʖ:=2–!B!6#5ʖ:3,,Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!,,#͘*~ "ҷ"͌#>?͌͘ =_.:;<> O҅o$>!Y2*O"ʉ@0,,G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" ,,#~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 3ӯ21y_͸2y2ͽ:з2,,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!~ڇj,, կw4!Y~ʆ͌†t=ʆf ^ T կ2o&)|+!<ͧ,,ÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yָpsp2mÆÆf ͧ,FILE EXISTS _: É: :׷ʉ=2)ͽÉ T!@k!}|q,NÎ N#Fyʝ*}|\#u*#DM*6# x±**s#r͡*6#6^>:A۾#~$=2Ek͌,=qf^!~2>`~2ׯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LO,::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sߖ-|N-# 5,ADCOMf^: !׶ Â$$$ SUBzͧÆBAD LO,S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# # e, O͐  :۷E B 2>: ۷b# : ۷y! 4 5~yy5 6y, w ~>2!E5T*C!"C"C!w# F! w͌xݯ2͢*C ~<wʃG:!ʎs,Ґ^H@Oy H H: –ͬ  #H: ! ۾ Hù H H $O͐: 2 *CN# ,ì 4~ʶ¬:<ʶ$ʶïZͻܯx>2>2ͻ:!Z2:E۷ẅ́͊Ͳ>+,x: 2 p&x~+é7ٯ2 H! >w_: ! ۾5ͤNkͱ¦ͱxʊ#NW,2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E۷͊:==»t,x: ۷! ۖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#,y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26,2E>! ^#V w#P:BO|^#V#"##"##"##"!,ܯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄb,O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*,i6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{6,yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \ܷS܀*C :qn& ^#V>O^,s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B۾w!>2*C~=2u:B2~2wE:A*C۶w>","*}:*)=":O:塵o"*C *C!ͮ~2~2ͦ:2ͮ:ܯO:w:w |g}o*密# ,!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*y, ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw*,):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6,*{#zr+s{ozg**͕** ݾ,w͜͸Ͳ!!N#F$**O!~#2g":ʑ*C6,"**#"͕: 2Þy<_WyOxOxG* ~V5dw^ :ʈ(,35@KQglw}Ø&q>225s>2!"2!">w:n>2O$Os>B,> 1#_!l!z¬{x ڒʒ2> Ò>:>2:s:<2A>=,,yy > `# 2>>5y@g!y2o&))))wy2y2 n&i`",,J> *lJ*l> !ڴ~ #´> ! w#@2> ::.x,,G:_x_/<_2y ::w>2:_!F#^+> :=G _ksv __~# yl,,'G#gc#%cd f,,@ @       60K CP/M Version 2.2 Mini-Altair BIOS Version 1.4 $ Cannot find sector ,,in register $NNNNNNNN,,,,ͥ+,ͥ+,ͥ+,ͥ+,ͥ+,ͥ+,ͥ+,ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+PIP COM: ED COM4DO COM SYSCPM SUBͥ+ͥ+CREF80 COM +,-.SURVEY COM /0WRITE COMDUMP COM1ͥ+ͥ+M80 COML80 COMTSUBMIT COM 56DUMP ASM!_`acdͥ+ͥ+ASM COM@MBASIC COM>KLMNQR]^UNLOAD COMbFORMAT COM9:fͥ+ͥ+CCP COMpqBDOS COMrstuCBIOS COMvwxFORMAT COMͥ+ͥ+CBIOS COMyzͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+READ COMSID COM= !"#$%LIB80 COM%&'()*LS COM234ͥ+ͥ+FORMAT COMhiSYSGEN COM 78STAT COM*M80 COMͥ+ͥ+XSUB COMMBASIC COM;<=>?@ABCDEFGHIJMAC COM\OPSTUVWXYZ[\DDT COM&ͥ+ͥ+LOAD COMASCIIKEYCOMeMEMCFG LIBgMOVER COMoͥ+ͥ+MON COM~MOVER COMqCCP COMrsBDOS COMtvwxͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+ͥ+(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)ͥ+ !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:ͥ+ COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUͥ+2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 *ͥ+ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE Rͥ+ :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*Mͥ+$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIͥ+6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  ͥ+221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$ͥ+:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]ͥ+Ҳ:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2ͥ+:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!ͥ+HHͯ :!^w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6lͥ+ ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2m÷ͥ+ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2ͥ+!6*ME:2::^Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ ͥ+!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6 ͥ+(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)ͥ+͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ ÷ͥ+NTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$ͥ+ "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{&ͥ+ETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILEͥ+! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !ͥ+ZED 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ͥ+::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! ͷͥ+:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<ͥ+ңŠ ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>ͥ+ҟ/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!Eͥ+ ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͥ+ͯ m!62m!62m!62m!62m'2:2:TҒ: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!b~26!~6<+wé>!ͥ+ү !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'ͥ+> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ͥ+:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:Hͥ+*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:ͥ+7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!ͥ+:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†ͥ+!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*ȷͥ+÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*ͥ+zgO{ozgi`N#Fogo&og H ©=¨ͥ+r+s+p+q*~$7*>*>H&>*#"*#"> 2:^R͎:!6!6=2:ʙ!6:“Hͥ+ͥ+-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=ͥ+ͥ+һ:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020ͷͥ+ͥ+2*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͷͥ+`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!ͥ+!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂ͷͥ+ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>ͥ+ұ:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""ķͥ+¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g÷ͥ+' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*Mͥ+!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ ͥ+DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{oͥ+& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !ͥ+ͥ+9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\ͷͥ+ͥ+20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!ͥ+ͥ+ :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&6ͥ+ COPYRIGHT (C) 1979, DIGITAL RESEARCH DISK OR DIRECTORY FULL$FILE EXISTS, ERASE IT$NEW FILE$** FILE IS READ/ONLY **$"SYSTEM" ͥ+N ͢ *o/ Ҧ Ͷn! 6!"&R! 6o$ Î Ç :!S0 $͢- :2"ͥ+9m++s#r!9+s#r9";9;"^*mM 6*m+"o!o#s#r!6!f6!6:] :m H}- :\ͥ+- ͷ*&"K(Kڰ *KM N͔*K"KҌ :!Z ͎  ͢ : :!  'v!gqͥ+ *M  *!M 1m! 6!6! 6: 2Ebͽ!e:d\::eH2 H҆ͽ:e2!:d2e:!2dͥ+6:n!oښ *mM !o4‚ !pq:p ڪ >:p :p H:p H!qq*qM͛  ^W :q@2q*qMW   !sp+qͥ+)ͷX:! X):i!h)9 e:!:h2jO>F L>!":i!jHҼ*"+M ~ ʼͲ!f6!h6!"ͥ+!p+q*!p+q*2x!p+q*!6   >>! q* &!p+q*ͥ+!!6e*!M͛ /$^L:!@OL:! 2͑e:b:! L:h<2hb:! b:hO>!hw:! pX:! …!!6  ͷͥ+!e:dʥ *eM \R :xʥ @ *dM \, :x \͕ :x - V :e _ :f w : ͥ+-? >!!6!6s, !6:xB!6OU2!SB!G6:҃!6:G҃*G& ~2!:G<2Gͥ+*`*;DM \u 2xʻ>!xҨ- *`*;6:82*`"`:<2w!"`9`h*`*;~2*`#"`ͥ+! 6:!B)! >w!"&*o"(R :!C:eR :!DKeX :!K\ͷX :!Lj^ :!Pš͎҇! 6ڷͥ+*b*^:w*b#"b!q:6ڶZͅ ʱ- !66*6& :w:6<26!J6*b}:J<2Jm=? :x- ͥ+ (::H%^bF : ͎H :!Ay! 6*""&*o"(R͎an͢na! 6R :!F”ͥ+MaҎ:_:!q:ҥ*My:!p+q!'"!6>**ͪ{2**ͪ"*! ͪ":!!ͥ+"&! 6R*I""ë :!M:H| ! 6>F ͛e: <2 O! Hqy d F : 2! 6*#s#r :!ͥ+FILE NOT ACCESSIBLE$BAK$$$BAK$$$-(Y/N)?$NO MEMORY$BREAK "$" AT $1mM"m +!8s~ v :!X³ Z͎\ Ee ð :7/҃ E!76e ͕ :xƒ ͥ+2d‘ 2dÝ:d=2d!\6:l2e±:d2eø:e=2eEU !M6 !""*o"$!h61m!6#1m!6?1m!6>1m!f6ͥ+:f *g&!lq:l $ !h4:l 1 !h6*lM :hB     !h55!mq:m :hO>H2ny} !m6 !oͥ+û :!I¬!: :H2 ҮX:h2iҐ:!ʍ:!:!H:!H,!"! 6#~ F÷ͥ+*r !up+q *tDM !wp+q*v !zp+q*y2x!|p+q*{2x!~p+q*}2x!p+q*!p+q*ͥ+! 6F!f6:h2k!iҠ:i2k:j2h:k!hҶ9 æ:h2j!!6:j2he:! >"Ͳ*"M ~2!O :! *+"ͥ+:7 e !p+q*DM  =? ) !p+q.*DMF -L *9"`!"b!h6!j6!|6.!=\ -x ͥ+LÊ!!6ûô:!ʛ͑:! ҩ OҸû:!R†!6G>!!!6 :2.t ͥ+=e !e:d*eM =e : =e =͕ !]6:x>- !"!76!6!6!66*dM  *dM !6:8!Ϸͥ+_ Qқ=e  b:!-®! 6:!#¿͇;J:!:!!6Lv:!:Jv: *#"͎ͥ+:*eM !b+!s{!f!6:!b*b*^DM =ͅ N- *b"b:<2)f!"b!q9bڀͥ+F×͢җ:Ç :!T¨F :!U¾: 2 :!V͎"$DMͩ/ *oDMͩ : 2 :!ͥ+: ;*dM .=\ -=ͨ ;: *eM =ͨ .M= -C!q:Y*M !q:a/>z!/H!q*ͥ+͢ґ Ä :!J $:2$͢ :=2:<2!*& ~2!ü*""I*M*o/!:"ͥ+6:0O  ú!p+q:/(*DMͩ:  : I N* *DM:aO>!Һ x!: ڷͥ+Ҙ! 6+s#ré! 6"DM!>))덑o|g =±^#V) ^#V|g}o _{ozgi`N#Fogo&oͥ+* ͸ ! 6 !h6!: 2 3* & 6 : <2 =O! N͒*dM  :sGsu n>!6:<2=O!ͥ+X$$$$$$$LIBͥ+*22*,**"0M ~ H3*0"**+"*+">23:2/k!36,*+s#rx:3x*0"*: ͥ+functab)/2 ;disk funcs dw func12,func13,func14,func15 dw func16,func17,func18,func19 dw func20,func21,func22,func23 dw fͥ+ *#"*&DMyxC 1*+":4?w+"$""ͷR: —*$"("҈!ͥ+dw func40 nfuncs equ ($-functab)/2 ; error subroutines persub: ld hl,permsg ;report permanent error call errflg ;to reͥ+!7q:*7M͒:7o$+͛ͪ*$M ~28Om:8 I͇͢u$oqo͛rP! 6!"&ͥ+and Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q*ͥ+e2!:! : /HH/Q:! @!!6 R!!6 :!KR$*& :!w:<2dn!:s+q*$";!>6ͥ+=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=ͥ+$:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hͥ+ʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!zͥ+6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ͥ+*z& ~2y :yHڪ!z4>>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧͥ+*FM8 *FM   Oy2F :FY5>>:!02HO> /!";u*)))*) *H& "Pҷͥ+Ҧ> ʡ* +" >¡! 6: <2 =O! N͒:  O͒: ! 6:h!o$Oͥ+g_{_z#W H = LIBͥ+ N͒!">!"͎/Ҵ*+">>!": *#"*""*!".+",*$"**o".!",!36:3{.ͥ+ions functab: dw wbootf, func1, func2, func3 dw punchf, listf, func6, func7 dw func8, func9, func10,func11 diskf equ ($-ͥ+“**"&*"+"(á*$#"&**#"(*"#""*$#"$*"+""*$+"$*#"!4qM*"*$: *(y"$DM}|C#~ͥ+unc24,func25,func26,func27 dw func28,func29,func30,func31 dw func32,func33,func34,func35 dw func36,func37,func38,func39 ͥ+"&Ô""&*""&$mڸ*o"(**$"($"O26͛*"M :6w͢:6 ɷͥ+:7<2ght(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Commͥ+*$"(R͎ҔM͢ҡÔ($ҵ! 6R͇vͶ2!*!Mm$"*"M :!w͢:! ͷͥ+ ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:ͥ+:>/;oH*;#"(";:92=*=& *(M !::=2>/H:=<2=*(#"(æÀ:>*(+"(R:>!6ͥ+ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMͥ+Hҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! ͥ+6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}!~_z*~& w!~5Bx:yͧ*v+"vͥ+ ; ; ͥ+ush af ld c,a call tabout pop af ret ;with character in A echoc: ;echo character if graphic cp cr ;cr, lf, taͥ+ ; ; READY FOR SYSGEN COMMAND ; ; ͥ+ cp ' ' ret ;carry set if not graphic conbrk: ;check for character ready ld a,(kbchar) or a jp nz,conb1 ;skip ifͥ+ ; ; ; ; ͥ+ter ready, read it call coninf ;to A cp ctls jp nz,conb0 ;check stop screen function ;found ctls, read next characteͥ+ ; ; ͥ+; ; This utility loads a sysgen cp/m memory image to memory starting at ; location 0900h as follows: ; ; 0900h - coldboot (cͥ+ \¢ B!>w# «!2 \ +yҢ\1WINDOWS Fͥ+es are MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB ; required programs: M80.COM, L80.COM, DDT.COM, ASM.COM XSUB ; creͥ+E IT? ENTER Y TO REPLACE, ANY OTHER TO CANCEL: $ REPLACING EXISTING CPM FILE ... $******************************* ALTAIR32ͥ+A B:CCP.REL ; create BDOS.COM M80 =B:BDOS/M L80 B:BDOS,A:BDOS/N/E ERA B:BDOS.REL ; create CBIOS.COM M80 =B:CBIOS/M L80 B:ͥ+!9 nfR?ک^V!0` nfͶ̀ nf~0`!9!9 nfR?^V!0`ͥ+0 ICBIOS.COM R1e80 g0 ERA MOVER.COM ERA CCP.COM ERA BDOS.COM ERA CBIOS.COM ; ; ;**************************************ͥ+}2 *gRڟ*g`æ!.`!4!w*gR?&*g_W _W*gR?L!@*g!-`*gͥ+ ; ; ; ; ͥ+v ~_{ozg001 $$$$ SUBͥ+; ; SYSGEN MEMORY IMAGE OF CP/M LOADED INTO PLACE ; ; ͥ+b, or backspace ret z ;carriage return? cp lf ret z ;line feed? cp tab ret z ;tab? cp ctlh ret z ;backspace? ͥ+ ; ; ; ; ͥ+ active kbchar ;no active kbchar, check external break call constf and 1 ret z ;return if no char ready ;characͥ+ ; ;*******************************************************************;ͥ+r call coninf ;to A cp ctlc jp z,reboot ;ctlc implies re-boot ;not a reboot, act as if nothing has happened xor a ͥ+]  }!vw# !v .w#x9>.w#x%!v>Z \ʊ ZY\ͷͥ+p/m image relocator) ; 0980h - standard cp/m ccp ; 1180h - standard cp/m bdos ; 1f80h - MITS Altair bios ; ; Required sourcͥ+ILE OPEN ERROR $WINDOWS FILE READ ERROR $CPM FILE WRITE ERROR $CPM FILE CREATE ERROR $CPM FILE EXISTS, DO YOU WISH TO REPLACͥ+ate MOVER.COM M80 =B:MOVER/M L80 B:MOVER,A:MOVER/N/E ERA B:MOVER.REL ; create CCP.COM M80 =B:CCP/M L80 B:CCP,A:CCP/N/E ERͥ+ READ UTILITY v1.0 Written by: Scott LaBombard ******************************* USAGE: READ FILENAME.EXT $ͥ+CBIOS,A:CBIOS/N/E ERA B:CBIOS.REL ; put pieces together DDT F100 2BFF 0 IMOVER.COM R0800 ICCP.COM R0880 IBDOS.COM R108ͥ+^V!7`!9!9nf<^V!!9*gR}2! `[W*gR?ڬ[*gngͷͥ+*****************************; ; ; ; ͥ+]  }!Nw# !N .w#x9>.w#x%\W !N>{§z§ *Yͥ+SID Version 3.0$1 !~=W!xʸ ~#ëbx {~#o}oü.ͥ+ FILE WRITE ERROR $CPM FILE OPEN ERROR $WINDOWS FILE EXISTS, DO YOU WISH TO REPLACE IT? ENTER Y TO REPLACE, ANY OTHER TO CANCͥ+=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷͥ+ LaBombard ******************************* USAGE: WRITE FILENAME.EXT $ͥ+!ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷͷͥ+#"[*R?!"*#"<_W*g8!@P=G6M6>>&T])[y}O(s#rq|ͥ+C–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# ͥ+1L *~#~#~# !*>2 !  : A"2 =2 O|X!"" ~2 #~2 #~2 #~2 !w * 2 ͥ+@* ͡. ;ͣW!E# ¡ # ¬# ·@ʴʥzʖ=ʐ=|zJz?4)z zͥ+ : D"FEP:TʁQ)! !_O!M>2 !{: O!C: O: >s>2 >2 ! ͥ+;,!Ù!;qz8O! !;,z;qyO! ͣͣW_͕qyO! ͣ͒qyͥ+!R : O : G: <#2 >2 : <82 <>!: &o! !&: o!&: o!ͥ+T HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB ANͥ+PX |>:GH> : MD!>9 ))=3 |2 2 zYoW|d_g̓: w>o>g: _ͥ+äìrØ,;ò"*"!"!"".2222{2V!" ""#"0"T!1!!++"!"W>28!"9ͥ+&ÐCOPYRIGHT 1982, DIGITAL RESEARCH09158230654321ͥ+!N>ʛ  è\ʸ!3ʨ 1\WINDOWS FILE CREATE ERROR $WINDOWSͥ+ÃO$45 w y͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͥ͘+EL: $ REPLACING EXISTING WINDOWS FILE ... $******************************* ALTAIR32 WRITE UTILITY v1.0 Written by: Scottͥ+ y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P ͥ+ *gR?ښ!!! ![! *! *! og_W*ͭ!2@"[*[*"*ͥ+͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËͥ+( ѯ |Ē R Ms#r!ɯ (== <ɯ| <)½>2 >2 ! <: OO Z!  Z ͥ+O!b q!vz͒q.?*!9"8"͉Z*" +*'/7?v"*2:EI SPHLDI XCHGPCHLXTHLREͥ+!PC: O!>2 <2 <: OO  ¨!!2&: o!&: o! ͥ+A XRA ORA CMP INR DCR MVI LXI STAXINX DAD LDAXDCX RST PSW POP PUSHNZZ NCC POPEP M B C D E H L M A B D H SP PSW ??= y#ڤ ͥ+ҒW{!T]7MD!>2 yOxG}o|g}o|g?ڲ33: =—yoxg: =O* !'}Ny$#q## ͥ+:] ,:e &O:l &:u &^! 1ͲĤͨ>#r ,!6-X5ADD_!o^#VD ͥ+ , !ʠ# “D Dͨp,,=D;x|D}D͕gA>Ag},|D}!w,ͥ+3; "=3;=D*{2z2*}o:*"ͨͲ,*">:r:vp^#V#ڊ ]Êp~͘#ͥ+ҕw#ͻ |mͻË *¡ͻ?r# ¡{zPY!ͼ|}?>22!"".!Ow #w q!\6 ͤͥ+2ͨ,2;;";"DM1 !6M ; "#=M ͡ =M YP͡ !|~ʇ #^#V:ʀ *#{€ z€ "~62!Ç ͥ+ҹ ͻ:›@w#͹àG6#|.̻|6# ±xa_!~> 5*~#"ů2[\ͤͤͥ+p>#r!"^#V#0}o|g#  x: y0A rGM yrM M G:  z,{ ,<,p>'r{r>'r,*.##ͥ+ҷr# ғ0r7r͉É> r> r ͤ:p>.r^+~r:ͨ>:r|͘}÷ͥ+ , w# ,Dʛ ;!=:0 D;: !: !|D",!|~g #~#Ve ze :,w, G :,D!|~·ͥ+×#^#V""~/o>g++I!.B@¿B^#V=B^' D''DS_#ͥ+=D*",!l~#  :]? D!"T>HXE4*,s \ͤ w# W KS*ͼDD D:s ͥ+-ͧy_xWl!XN!~͕ ʰè!_^!%ͳ^#Vxͥ>-r~r~r>=r!~ͨ͘ͷͥ+!\~#  2|:] ʥ !3=r*!~͘*!x**:CZMEIABDHSP!"ͥ+ ^#V~͘p d..:,>."C w#4/=D;:]s#r# D}w#: # >w>2V!ͥ+ҷ7* :{*!|~#~#V*#z~=µ=2{w`:͡* ͨ<͘!Y*#*  ‘Ͳ*`=ͥ+2|:~:}vv>2|ͷͥ+ DD DD D upDDaD,½:,=D;" ,,DD;=;=;!,ͥ+ͳs#r,:[,_!~@![4@\ͤ>2[>ͨ>?r,!e>Cw#>Ow#>Mw!u>Sw#>Yw#>Mw., * mʷͥ+ڊ x":­*p*}›|›*,+!ͼ,=:D:e O:u ^! |Dͭ,ͨ,}ͥ+!",D;;;!6W/6!6# q,J>2MQA qQA qQA DDͷͥ+#w6 R 1*#*!!~4ʼ #~#F#¼ x¼ ~#s#r#w>,{ ;= =D;ͨpᯕo>g,ͨͷͥ+ͤͤͤͤ!ex#y#*0}|A"0*T}|"T:2!A> _ͤ~ͥ+V+^+N+y,ͨp ʤ ~+rØ Ͳ,À :D,aD, ;" = ;"=D > 2,ͨ,!| }·ͥ+Ҙ  r>.r*}o|/+- , 0 D^#V#*.NyD** t ʎ+Ž_ Žʇͥ+ҏ :,w#s#r, | D!|~ :ʲ 6 ͨ~͘p#^#V   ,:D!\6#>  w# >w# 6,! ͥ+0 D)DM)) O ^-*^#V#^.))))o"ys#r#!4-\Â+i*yqͧ+ͧ lͥ+W _ O {¦ x!ʠ i`"# w#© KSDs . . GтWx!A :2>ULT4ͥ+p!#x !pp͡aA*#" !6i+"*#~͘#ipe^#Vi~͘*#~G€xíͥ+#^#Vr+s+6AD*"s#s#r) » ! *#*".,!=*Tp*0p*#p*+,=D;ͨp:ͥ+Y2V"!+"#!91!*#~:!2!~>#^#V#~ 1͓!~6a=G#^#V#~xPʅ#"#!N#Fͨڅ*>ͥ+"W#ʤڔ;}D=ʣ=D;"W"Y2* û :D!\!"]*T"_,:D*"]*"_*]PD!"[\(ͥ+͡* *#* :**MD*:7* ͓ͨ!"W2{>*r*#aM" *!", PASS !V~*Y+"Y|yw=2{~ !ͥ+*" "2:G :!F#N#~ :!!y~#!~6L#~6I#~6B: : !!!ͥ+ >VTxX8_T*!T:?*####T>V><7*W|ʉ!N*#!qʉ>#rͥ͘+wxʒ‰y:ұ0ڱOxGÙx+N#^,>. . *4 ^*44,> *xxʷͥ+ z <33:"QH'd 2" SYMBOLS NEXT MSZE PC END 2"02#O> h record(s) written. *ͥ+ҋ6 #=y.8xڢʯã"yɯ**͋ ~OA:,,++:ͥ+)) _{ozg^#V) !^#V|g}o @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ Hͥ+}̊*"+1+++:,:Ͳ' >@w ҴxIJ:w+ :;@~*!@"DM+1: p+q+rͥ+I $BBHHA"HI$H!$HB $ $!$"$I"! $@H$$H D   "@DD"@HB D@!$"II$ͥ+wx+#ʖ~Ë2\ͬ>*>O> >2> >:ʬ<2> >~>#G~>+ú~#  ` / +ͥ+"I$ @$I"DH BH" !I B  B$H$ $BDA B@BI $$@B! B$ D B$ !A@@Bͥ+ͷ~w×ͷ~w+++r+sB:̵~,+<2ͱ!ͬUnsatisfied external request(s)yͧ ÷ͥ+H$$HII$ D@B!HUUURI! @"I@"$H@Bͥ+Y!ͱͱ**͋ G ~@ҫ¦ $ ÕͬìSymbol Value Defined Reference"Y"Y>͸~w+1+r+sYշͥ+;$HIS UTILITY LOADS A SYSGEN CP/M MEMORY IMAGE TO MEMORY STARTING AT$ͥ+9 z ͺɯ2*͋ ~@ҮĴ$ Ø:L ͖ ͺɯ2*͋ ~@$ :] üO~++ͥ+!zs# x>2*""> 2*22m~ (!"!6=h!6# p#6#> w#\"!2,l 2 *"ͥ+~##ʏ‚Z:!*w2!*#F#|!s!^#V QQNNDQ?TT::^#V#*^#Vʷͥ+"͊:#!_^#VJB:Į5:($W[[0[AW:[;O8*-l>w#p#}y+>‚͖ͥ+> r-:V!ʟ-ڟ>=_~/w/w{ʽ-ҽ=YPæ"*.##F+N+~/o>g{·ͥ+ y6<&*6#w#w#6#w#w# yͷ >&8:7>I@*6#6 #w#8xc2jzn> ڷͥ+& *#& !#s *&&# :#w:# >!#@  -*# :#wͽ2"_og_{ozg_og^#V)ͥ+@7~ DM:1^+V:+++++;#x+;y;@"{ J+~+ng~w*+r+s w@f"+1+w+w+p+q+r+s+' 7*ͥ+ B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$I $ͥ++s+~ wF#~# x:!>/O ü++++:w+:w7_ > >:!o>g6 !~6Gʞ#~ …ͥ+$D$@HI $IH"@H$DH AA@HA"@H$!D$H$$I" HB ! @$I$$"B HA $IH"H "$ Iͥ+#27U@L CERO3H 2:2BByʀʍB2**͋ ʬ~ġ~/_bͥ+!BB HD "BI"!BH""H$ $"H  @H!HH D!HDH BHBDͥ+'CBɯ3xG3 73x3x!~w#4H\!">2*!"YYy   ͥ+E; THIS UTILITY LOADS A SYSGEN CP/M MEMORY IMAGE TO MEMORY STARTING AT$ͥ+ͷ~!i ͱ*>2' !q !~#6@>>:> / ͱ!V *z ͬ!A *z ͱ2*͋ ʒ~{$ b:ͥ+ REG HL = END ADDR ;********************************************************************************** RCPM: PUSH D ;SAVE STAͥ+~2+V+^+++V+^ ~,+ ,~/_~>#/ <2ͬ!n ͱ<2ͱ! G <2ͱ! G Common block(s)Eͥ+,d|2FORLIB RELͥ+ͺͺ  ͺͺú' ,+V+^: Length of Data areaLength of ProgramModule ofڈ ~ 7,ͥ+ͥ+4#6 _ ͥ w# ! "O:G<2ͥ Xͥ P:\ )0>) K 0>H |a }Gl x0:w >PX ͥ+NÎ N#Fyʝ*Ʊ}|\#u*Ʊ#DM*6# x±*ʱ*s#r͡*6#6^>Ҫ:A#~$=2Ek͌ҷͥ+3 :3 "*͋ ڧ "*$͋ * ^#V+*{ʧ :<2͠ ͠ xj ~# ] * "*  " * ^#V{ͥ+S:2E!Ա~Яw>T D^6kƩ-äPYyѫ 5*Ʊ{zBK5o|g}}}""*%T]##ó*++"ê*|}  ~GO ͥ+2: .ʹ y%#2 >@͸ɯ2 go":IG:~2͊څxr͊͡͡2GG ͡BI:ͥ+*|4A>22͜> x:<32Ԍ> x> x: ھ͜<2> x͌ ͺ 'ͥ+Ox, =+#>2x2#" G:<222 :E<2!"*" ##"ʹ VVyʙV?** s#r2 w#wͥ+ͥ+5#N+>5+~>5:5<2 ,'2 :G~x:͏ !w#Q* "w#w**͋ ~~vw/_:ͥ+ntry point(s)External reference(s)27v ʭ 2͖ ͺ' 7v  ͋ ~ ~ͬ¬ ë: ͥ+ͥ++++~+ng~|}!~#4  t6+w͑ xG © ɯ2͑ ͥ 7ͧ ) Gͧ   ͧ )  ͧ !w ͥ+ͥ+ |} >:> '"!7 ! :O ~>'A> y > CBy :GW> !F# W> _x GxGͷͥ+Ҫ:Ա:ű/GyO>2Ա!رq*C"ٱ͡ʔ*ٱJҔ^:رOyʃ?|x | s-|N-# ͥ+Ҳʗ r+s*͋ ʗ | *w#w}_|W! >?>ͬ(Out of memor! ê Command erro! ê File read erro! ê File not fͥ+!  CR"*!"!"t``9tP*#"> xt"x JG!y yw# f ͥ+ry write erro>2I< >2< eu ͧ : eͥ+#r#w#w#yw# "A:O>4G> x+x 72!"PX R|P>:*w#":<2*KB!~ͥ+ҷ _<2!~*w#"*' * ~#" :# !~# !w#! w#ͷͥ+ 7#~#foN#F+w#wxy+͌*"*++## ~O#^#V"#^#V"#yn2͜~x #eͲ*>#xͥ+@͸V#~G#N#~±>@2͸>2+~, *~Ÿ,:,+++~++ͥ+ͥ+ !"y{!?~ u  w#¬ w? {:= :< f> x> x>xͥ+ͥ+:< W*w|̧#"wxwy!>£ =¯!w>!ï:= : *u|=#"uvͥ+ͥ+~|Í7ȷ! @@´> !  DISK FULLͥ+ͥ+:< W*w|̧#"wxwy!>£ =¯!w>!ï:= : *u|=#"uvͥ+Pͥ+m ù>?2D##~2l###~#fo"m#|g}o¤E:mʹ~ #½!K bytes inD!ƀ_ͥ+~ # !  !  ! ; "`*+++"*`:2*p :} ; 2222222<22 ů22n r:ʄͥ+ | | | | | | | | | !f6#6#6 !?2j2k~G/wp!f4#42j>:k2k!h4#4#¶:j#%ͥ+ҷ : :2͆ ' *##:2G` ~? ? w# 5 #5  w#H :!i~ l w#b O :7>’ xn ͷͥ+͆Ɛ'@'_:}:} iobyte:} drive:} BDOS at:}:} *f Bytes RAM *hͥ+Ґ 6 #= y.2O ix% 2 & <2y/y L72 O8  [m 0m Ai :m R O!~6Gʟ #~ͥ+!zG2ʴʴzʧ z_z}#‡  Ports active *d  |{0__ɷͥ+ҷ* +~ #p #" +~7ȷ> > y!"w!:P w!"u!:ʁ ~ ͣ < ͣ <ͥ+ͥ+*wyPy := : >*uwPw |}[ƀ)`iï> x> x> x:= ͥ+ͥ+w:?< *y|'#"yz {>?=P!=,!>L_! u s xͥ+ͥ+*wyPy := : >*uwPw |}[ƀ)`iï> x> x> x:= ͥ+ͥ+!9"d1 *** System Survey (June 82) *** !PDrive>A_:\o` }‡*.<~2l##n&"ͥ+?Command error?File not found?Can't enter fileͥ+#D files with*m!|/g}/o#K bytes remaining $-< Memory map: 0 8 16 24 32 40 48 56 64 ͥ+ oQ a:`2 2¡ :@2!E y=7n 7oQ `  7!?E :!% !: 'o> = % :ͥ+:5:55:k15 ¬ T=TPA C=CPM B=BIOS or unassigned R=ROM or bad BIOS atÔͥ+ Ox=y³ [A@2`O x ڠ  a ç T T7 Y7Ò L S7 T7>Ò R7 D7R7>Ò > ͥ+ Bytes ROM * Bytes in TPA |/g}/o Bytes Empty  Total Active Bytes Active I/O ports!+|zͥ+ ˆ z | x+#ʙ ~Î 2ÿ 2:²  >*  { > :| !} " o>g6 #> w~#  #" _ͥ+~W_#>:l-k&:{o*G)>???????????{0__ɷͥ+Name Ext Bytes UN At ! File(s), occupying K of K total capacity directory entries and K bytes remain on 1 !ͥ+STING SYSGEN CP/M MEMORY IMAGE): ',0 EXIMG: DB CR,LF,CR,LF,'USING EXISTING SYSGEN CP/M MEMORY IMAGE AT 900H',0 SDISK: DB Cͥ+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 !ͥ+,'FUNCTION COMPLETE' DB CR,LF,'CP/M IMAGE LOADED TO RAM AT 900H',0 DESTQ: DB CR,LF,CR,LF,'ENTER DESTINATION DRIVE LETTER (Aͥ+Î : 2   ]Q  ?\\ : DM, Q ! "= *3 ##)*= "; */ &# "! *3 #"#  !! "% >!1 . 2' \ͷͥ+ATION DISK IN DRIVE ' DDRV: DS 001H DB ' AND PRESS ANY KEY WHEN READY ...',0 WRITRY: DB CR,LF,CR,LF,'READY TO WRITE CP/M Iͥ+ )*= *; s#r*; "; : 2 !S 6!"V * "n >!S d*S &T ) ^#V"K O!l ^#V"M :S =2S M K  a*K "G *ͥ+!9"1W͜Q>2!͢QG}DrYQ|͏}͏#> ex͏#r* _> e> eͥ+ ^#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 ͥ+LE PRESENT ON DISK$!Y , <    *$A!6 # T!w $r# *`: 0 ͥ+ )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*= ͥ+proper record call rd$dir ;read the directory record pop bc ;recall initialization flag jp checksum ;checksum the directͥ+ DMf KK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! '= :/ = ͥ+e least significant ;bit is in the low order accumulator position. HL is ;the address of the byte for possible replacͥ+(   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *&ͥ+ Hit SPACEͥ+ITTEN BY: SCOTT LaBOMBARD',CR,LF,CR,LF,0 SRCQ: DB 'ENTER SOURCE DRIVE LETTER (A OR B)',CR,LF DB '(OR PRESS ENTER TO USE EXIͥ+9" ! J> # ->! . *ͪe> # < * v K  K  K !B r+s+p+qA ?  p*A *? :]$Ž ŷͥ+R,LF,CR,LF DB 'PLACE SOURCE DISK IN DRIVE ' SDRV: DS 001H DB ' AND PRESS ANY KEY WHEN READY ...',0 ILOAD: DB CR,LF,CR,LFͥ+C 4Ø:!4:!5(  ! I3= : [= t:\a:\=_: :] t ?]\ : ҃! 6?ͥ+ OR B)',CR,LF DB '(OR PRESS ENTER TO EXIT AND "SAVE 41 CPMXX.COM" IF DESIRED): ',0 DDISK: DB CR,LF,CR,LF DB 'PLACE DESTINͥ+: 2 : ʩ: ƀo&"* ~ʛ*# +"# ** DMY қ** DM  *; q#p* " . ** #DM*; -e**  *; w* #"ͥ+MAGE AT 900H TO DISK',CR,LF DB 'PRESS ANY KEY TO CONINUE OR CTRL-C TO EXIT ... ',0 DONE: DB CR,LF,CR,LF,'CP/M IMAGE SUCCESSͥ+M "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*=ͥ+ ҉0Ë7e}} :³ʳ7_<2!~ɯ2|\\FILE DUMP VERSION 1.4$ NO INPUT FIͥ+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 û!" "    #* #"ͥ+*A*! ~ ʰxkb))))_y‘BK{ͅ*!66!"80*{#z+++ #ͥ+^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% Էͥ+ory elt ; ret getallocbit: ;given allocation vector position BC, return with byte ;containing BC shifted so that thͥ+: = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !" ͥ+ement in ;memory upon return, and D contains the number of shifts ;required to place the returned value back into posiͥ+*( * " 3*1 #" " " *5 " > # R : B * +" ! +s#r( ! 6: " * ~2 * #" * +" > ʶ ͥ+v ~_{ozg001 $$$$ SUBͥ+K*# DMf = * *% DMf = : AOK :K . g S -A >>!  ~?l W >#^ : /!ͥ+E; ;$ͥ+ _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2ͥ+E; ;$ͥ+Ƿͥ+E; ;$ͥ+ copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Commͥ+>2!,"  ! A" ž>ͺx ڭʭ !,A.A=.2 ͕ͥ+ ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:ͥ+~> :<2Az{!! w# w#¤!!> N# ~#N#   :> >ͥ+ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMͥ+RITTEN BY: SCOTT LaBOMBARD ENTER SOURCE DRIVE LETTER (A TO H) (OR PRESS ENTER TO USE EXISTING SYSGEN CP/M MEMORY IMAGE): ͥ+6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}!~_z*~& w!~5Bx:yͧ*v+"vͥ+: 2 Ғ * +" : <2 O>ҳ ! 6* #" * ~2 p K* DMf = * *% DMf = * *% DMf = *( #"( ͥ+E; SYSGEN MEMORY IMAGE OF CP/M LOADED INTO PLACE ;$ͥ+:' —  ʑ #‹  W ʢ #™ i`N#FogDM!>))덑o|g =¼ DM!>)) = ^#V) ^#V|g}o ͥ+E; ;$ͥ+ : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) # Ƿͥ+E; ;$ͥ+Ƿͥ+1O..9 M2R3.9 !  !,u.S..9 2<.9_.9ͷͥ+and Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q*ͥ+ ͛!"~#͕x  1>  A!"wG# P6#p#qͺ͕x HH xͥ+=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=ͥ+ @.> : !!C.9DMITS ALTAIR CP/M2 SYSGEN UTILITY VERSION 1.3 Wͥ+ʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!zͥ+ USING EXISTING SYSGEN CP/M MEMORY IMAGE AT 900H PLACE SOURCE DISK IN DRIVE S AND PRESS ANY KEY WHEN READY ... FUNCTIOͥ+*z& ~2y :yHڪ!z4>>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧͥ+PMXX.COM" IF DESIRED): PLACE DESTINATION DISK IN DRIVE AND PRESS ANY KEY WHEN READY ... READY TO WRITE CP/M IMAGE AT ͥ+ DISK DRIVE (A-P) OR CTRL-C TO EXIT ? $ * DRIVE NOT CONFIGURED FOR THIS SYSTEM * $ COMMAND: $ VALID COMMANDS ARE: [D]ISK,ͥ+IFIED DRIVE NOT READY ͥ+A ON THE DISK !!! INSERT DISK TO FORMAT IN DRIVE $ AND THEN PRESS [C] TO CONTINUE, OR PRESS ANY OTHER KEY TO ABORT WITHOUT LOͥ+ ;IS IT NUMERIC? JC HOK ;YES, SO PRINT... ADI 007H ;OTHERWISE CONVERT TO ALPHA HOK: JMP OUTCHK ;AND PRINT ;*********ͥ+R KEY TO ABORT ... $ *** CHECKING FOR BAD SECTORS (READ ONLY) *** $ TEST RUN COMPLETE. IF ANY ERRORS WERE FOUND, YOU SHOUͥ+*********************************************************************** MSG: LDAX D ;GET BYTE OF MESSAGE BUFFER ͥ+ ... $PROCESSING TRACK# $ ERROR OCCURRED ON TRACK $ SECTOR $ BAD SECTOR - SUGGEST FORMATTING OR DISCARDING THIS DISKETTE ...ͥ+1$ *~#~#~# !*>2 !  : A"2 =2 O|X!"" ~2 #~2 #~2 #~2 !O * 2 ͥ+YXTZZSR\SZeXY{TzTSYHIyII|(*g(678&+7y8919JHFIHH"+IFFz)) *m*zQ}QQU@VXͥ+ : D"FEP:TʁQ)!!7O!%>2 !S: O!C: O: >s>2 >2 ! ͥ+ҸHAIιELETŪATI͆EFSTҭEFINԮEFSNǯEFDB̰EƘLSŢNāRASŦDIԧRROҨRRX O/QO҂IELILERIOTωO TωOSUEEXͥ+!* : O : G: <#2 >2 : <82 <>!: &o! !&: o!&: o!ͥ+OPEοUԝΕCTPTIOκRINԑUOKřOEEETURΎEAćUΊESTORŌE͏ESUMũSEIGHTNENUͬESEANDOMIZŻTOАWAХAVPCTEзͥ+PX |>:GH> : MD!>9 ))=3 |2 2 zYoW|d_g̓: w>o>g: _ͥ+y||PF<2(z{ *z);*)&,,d-D.s)%%'i')1+%+Q+3)NEXT without FORSyntax errorRETURN without GOSUBOut of DATAIllegal functͥ+PX |>:GH> : MITS ALTAIR CP/M2 DISKETTE INITIALIZER FOR THE 88-DCDD DISK SYSTEM V1.3 $ ͥ+900H TO DISK PRESS ANY KEY TO CONINUE OR CTRL-C TO EXIT ... CP/M IMAGE SUCCESSFULLY SAVED TO DISK INVALID DRIVE SPECͥ+ [F]ULL, [P]ARTIAL, [T]EST, [Q]UIT $ * SKIP FORMATTING THE SYSTEM BOOT TRACKS *$ !!! WARNING: THIS COMMAND DESTROYS ALL DATͥ+DISPLAY A SINGLE DIGIT POP PSW ;RESTORE LOW DIGIT HOUT: ANI 00FH ;REMOVE HIGH DIGIT ADI '0' ;CONVERT TO ASCII CPI 03AHͥ+SS ... $ BAD SECTOR FOUND AT TRACK $ INSERT DISK TO TEST IN SELECTED DRIVE AND THEN TYPE C TO CONTINUE, OR PRESS ANY OTHEͥ+************************************************************************* ; PRINT A MESSAGE TERMINATED WITH A '$' ;***********ͥ+LD COPY ALL FILES FROM THE DISKETTE AND FORMAT IT. $ INSERT CP/M BOOT DISK INTO DRIVE A AND THEN PRESS ANY KEY TO CONTINUEͥ+ CPI '$' ;CHECK FOR STRING TERMINATOR RZ ;IF TERMINATOR FOUND, RETURN CALL OUTCHK ;ELSE PRINT CHARAͥ+Ì]z))DEc9@gQC}DE CsD +"]D  $ |D}DDD<|""XL{LL{PtM=$$ͥ+o&!g * ###<2 o&!} ##^#V" ! #~2 o&! * * &,: _F: _#}2  ! ͥ+VaQdQgQ;LM$Xq"9BLdhiUTϫNBTSLOSONԚLEAҒINSNDBV+V,V-O HRAL̶OMMOηͥ+<: OO !Z ˆ! : >½>2 >2 ! <: OO\ Z! \ Z ͥ+NPUԅƋNSTNNMNKEYILPRINԞLISԟPOEԈINűOASEISԓO O0EEFTO1ERGOKI2KS3KD4IDEXԃUL̖AMEהͥ+!(C: O!>2 <2 <: OO\  ¨!! &: o!&: o! ͥ+GQI TRTRINGPACEYSTEͽHEROΣROFƤABA SINSAARPTIDTȡAIԗHILŴENĵRITŷO۾yͥ+ҒW{!T]7MD!>2 yOxG}o|g}o|g?ڲ33: =—yoxg: =O* !'}Ny$#q## ͥ+ion callOverflowOut of memoryUndefined line numberSubscript out of rangeDuplicate DefinitionDivision by zeroIllegal direcͥ+ҥ<1>DA2MSB!E :* > @(K 2 Ç 2 *  C " :b ʢ >(Kڢ ͷͥ+RESUME without errorUnprintable errorMissing operandLine buffer overflow??FOR Without NEXT??WHILE without WENDWEND witͥ+ y}ͯ!6"*" 7C*"* "â *bk~####~ ҷ ڷù#s#rïC *DM~#ͥ+ready exists??Disk fullInput past endBad record numberBad file name?Direct statement in fileToo many filesͥ+m?>HjZEڗ;;>ʸ;>HOZ#þGO TOUBZ!AO ^#V#ZOd#<ͥ+:ͥ+Y>5W>Y{~.ʧ:"0":i ~O.O>Y(ͬ}Y|Y%~.ͬ:g * |>}e. ͥ+,ͥ+0o.o%~ Ҡ ʠ ʠ> :i <ʩ=m+~ ʬ ʬ ʬ#>d2 ͋9C" :g ͬ! (" !9T  +V+^##ͥ+ͥ+ $* "* 3àE3\B" !9" ~: #~#ʅ #^#V": >[@1>]@ցLO! ͥ+ͥ+ 0?<=:l ҫ ګ*n ¨###^#V,:m 2g *n " *p " !n (E AOGEAGx3Ø(:l  *j #*C > 2 ,$`i P "  "!>:yHG+ȸ#"ͥ+ҢC{K2* " * |< " " * |! 4 4 5wY2B!{DP 2R U >(_#U * ~?o !P #GC!BʻY|ͥ+tType mismatchOut of string spaceString too longString formula too complexCan't continueUndefined user functionNo RESUMEͥ+<=ʢ (ͬ~ ̾(" ҊSe]" ;5$ܢ"ʇ: \*v " * ͶB" t##s#r## w#ͥ+hout WHILEFIELD overflowInternal errorBad file numberFile not foundBad file modeFile already open?Disk I/O errorFile alͥ++##~#foC`i~#fo??2i 2h ;#~=!@}O|G!""y O:h ~ʂ#Y:aJg>2h 2i U%~|*O~#Y÷ͥ+pP8`@` ͥ+y(!!!Z.!>dG>Y2i Y%=+ZOiMk֢ύ>2i W„ͷͥ+ͥ+Y! d! ~Y#=%iʎ%à&O[H> K> Yi>: y +=2i ZY#ZEo:ҋͥ+ͥ+* C" B* *Cd Nz)~S ͒(q)ʹ(QZ~>r)ʹ(E(OdG+ɷͥ+ͥ+N#F#~: ҆ ځ#:l `#2l f>R~#"j &o"n >2m !~##"j +fC͎*j <2m n G("j !ͥ+ͥ+s#=~,V  ~.* +3 *n 2l +!Cdbk))0_C7Ct šR;CÔͷͥ+҆ *|<ʗ :  D=96543>7@?2C: * "   *" 2 2 |< "  * ÷ͥ+<֌W-͋9C" :g G:g x=ͬ:g  H * #^#V*Cs* C{! C{>HͣFHͷͥ+,{ʨ+F•{o|P {o|<«{o|2¸{/o|/}//o|//}o|g,::e C,* =( |" 2 " â ~,dC+͆(~ʕ *n ͥ+>2 ͋9:g " " ͬB!9(:g * ~)C,* C,Á2N 2g !9(!9.,:g G:N Od}!ͥ+=:G<:e ?=!B&Gá(* TF~\:I:G<:\V:G:e \!B\/V tz|TFͥ+҈ͣFG* T]##N#F! * +" |2 !O ,w# x»*#| C>2 OÐ9~ #~#`J x 2b ͥ+Lo͋9;*0KDF>-?Redo from start #~ "4N: !!#G* Q!a ;#YHL">2>2 F~ͥ+{>2e]!"N#F#xʇ TFQBN#F#Cچ " 1~ > @ !b !BÑ ~ͥB# b 2 e] #~ ڷͥ+, ~,B>2 d: =Bd̨H+~,ʿ+N6,E* 2 QC,͋9~,c: 2 TF—Qd¢WG"ʌ:ͥ+y!~v!ʏ!y_¢!: >2 ÷![®!2 !: >2 !> XG{!~#_XG!!2 E0:?+͎ " oͥ+C(+B͓2 " * ~" ڎ_4:g {[H !xVzʬQںzʺ! :g  N#F#N#F! N#F#N#FƷͥ+5$Ҕ"T]C!E #G!* C¦"`i" "\]~"\]C,u "z)d: E()È% PXʷͥ+(zOxdz o! N#F* *(" " ͩ( *!:h og~#fox(2g 6" ;)!A͙(*ʹ(" "ͥ+#s#r u# 2 *+#~##^#Vʚ#O: y$#¦#¦#3z##£#3 > %$B!$#G11+÷ͥ+͉:C)|)IoBI'UTC)}* k(͋9" d(~a{_&([OʭH¬#~ͥ+y$\Aʔ$z)ð$!$#G KD#~.~•$z)"j87Random number seed (-32768 to 32767)$*" +%%$ͥ+* u )4} )H>2  N#fi-++<(aZz)}/o|/g" :g q7xz)z ͥ+(µC(zʢPY" : {:_ u ~GC+K x),  <2~(z˜<* * "ͥ+:n O!t C"s#rs#r~(͋9~)C,D:g " ~#fo| ~(" * C(ͥ+€€l>2á Q+!B>ee,%;d)1F6 * 4TF* ::G<:?ͥ+P O:* * C)>" : OBO/ @è2go"C#ʧQHͥ+b + C,u W : u 2_H 2u 2_H 2H /<z)zu 2 2 C,u Y +ͷͥ+,2 ÓC;&G: ʫ>?@> @0KDů2 6,+>2 ͉:~+[(# "4([])ͥ+! _!A!_.!!!/!: -!<-!> >2 { =! ! <~J!#~#X! k*l!~#>l!+!:G@ #T]~u!#ͥ+Ҧ Wʉ:,+FO: y!...+ʽ,G+M: C#~# #^#V" cCӷͥ+6 r6*n )1:l O " H*">&{:m ;"!;"#~ ̾(~#m":m A" ^".h"Dh"EA"A"{v"*j ŷͥ+KG* W " Ð)͙(6Çz)uÇxdd!BdX* \FÇy2h :g g+Wxͥ+/#,#BK/#C,/#C,( z`iC[# !C^#Vzn#~#+K#͑#^#Vzʌ#ͥ+ i*͙(*g' .EJ ]<=ʓ<"FO&i:* ,C(#r PQͥ+ң#Undefined line #3###N#F>!#*j +p+q+w: Ò#CBCACSCE: * * C ~0  2 <2 ~̓$#ͥ+[Eҗ:0ÞG7))))o~ +8  )))0O í)#~ց(7>OyC,;*ͥ+ҷ%#~#Y #^#V" y~.%$$$$$%** "͋9+%c%C,+8%": 2 2 ! 6ͷ(÷ͥ+G,Q-x ‚-y-Ñ,! --Ñ-L} : A--! (d-: -2 !t(. ! (.&, ! (>.".&,! ͥ+O&)zWyO%x\E#&! w%%x! 5&F#~怩Oé( 4Ç0~_#~W#~O! ~/woG}_}W}Oq&CZQd& oz…&y-Oҷͥ+! [-!0 Y-xb.! 5b.%y2 +6 ~q+¨.(+~ڈ0w&,4È0%3*j%>2 `h)~&i-.+.+/ͥ+È%E(.(y2<'"7'PX!%!%'! ~#Y'Wy='O|g}oxGQ'x Gz/'CZQO͙(!-ͦ(E(ʐ0.(4g04g0+~2ͥ+')d e/ܮ/.!W'!z)e/ͮ/e/) *d.(.=d^'- ̓$> ̓$!  101(d0! 1(* |* "1Cʷͥ+ xE(!N(E(y! y )#x+y+z+{z|O(@)}P(! ( E(!N(E(O! y#)+f)I)N(d* ͥ+ʟ1Eʟ1Dʟ101,1.¢1+60{ʫ1+6${+p2 ! 6 ͙(* * 2 f2E~2:101 #~1>DG1" `iͥ+(6*x(! F#&* 6*|UY(d *!" " >>)d GOW_ʹ((gf*>b&|5&N&z< dE(*t(̀*k(ͥ+22ҏ2460̾("5+~0ʞ2.ľ(2d>"w#6+26-/</ 2:#p#w#6! #zQ334z4ͺ5{(=4b1ͥ+#*!x"+>);)+ ;=+|G+y4+|Gz)*͙(,N0|)+DM!>)ډ+)q+ ډ+=c+|+xͥ+43_x44"5452_y/3/3{_x34434y5O4GO"53* =4P2*ѯ3E(ͥ+Ҁ6*Y(ͨ+g{o)+! ~w! ~G+N (R,/<#Fwx+ B,F+N9(! G>w2 ! %-x,: 2 ,,4ʈ0ͥ+Ͳ4d4CO)Û45C)4;/Ã4/Ͳ4d4t#)46C)4=60#44560#=4{5=.>! N#F#=(.>! p+q+=9.: ʔ0: %'44ʈ0͝.!7 qA>,?t.>,: <=,ͥ+{&Ë&-yOzW{_xGÅ&$cCu͍M r5E(&1r'ʹ(>2 ͙(!&ͧ7͙(ͩ(!&ͧ7i'͙(T(ѷͥ+.ʆ/e /E5/l#/L#/q#/Q4/:g N/>N/~%ʓ/#ʤ/!ʥ/dN/De/ͮ/2S0e/_{_//i/k(d!Wͥ+'+~2'+~2'AOW_2'}o|gxG>?ұ'2'7y<=':'x'> $&{_zWyO)xG:'2'y”'! 5”'%>.! N#ͥ+)O |0" .y*750t$)20.(H0 0**Ͳ.(T(**&, 0͙(T(È%{ b00_X/! dw0: x0yÞ0ͥ+g)d E(* ||O(* * ͷ(" `i" ! ^#V#N#F# (:g Gw#(! ~7w?##wy7O! ((! ( dͥ+ !@ #G"G)Ͳ1F1Ͳ1416+͆(F16-k(#60: W:g 22һ1ͺ5! F : _ 1x*1{1Aqͥ+ )(! 6(&,)Ü)y%: 2 : B*: ½)))|/g}/o)! : )B*" >2g )aj)d* ʹͥ+" #~+N2-%20OxGN2#~ 2`xEC2y 1>2 S2|1;21" `i" ͩ(#W\4: 2Ëͥ+dҦ* )! ~: ~B*6{y%! ~*O+~+¶*!*) *yʹ((+6+q*: O! >%-,2 Ñ,! ~5ͥ+3p#6! #: ~ 3* 3+3-+$0I3#I3++w?3 3I36%3m36C){3)1+6%)d3E(\ͥ++ʚ+*͙(*'x)*t(| ++DM!>+ +7>{_zW}o|g=+w+|G+|)Ooyg)* +|ͥ+7\4y/OzWO/4)4/<,! -G: º,! Vwz# Ÿ,x’,%! Y-,x,! w%: ,! ~++w! 4#,4ʈ0+60 ! ->! ͥ+Ҽ 6.#605#H56." #H 6,#dq5(! 6(&,*6> 5/>,K5>,p#=B5! ͦ(~5y%>B*ͩ(ͥ+ >>(9>ʵ=6>>@!B<~ͥB#¨=!>7A_>~=ͥB܁>=#~== !B<~>\ͥB~>ͥB́>ͥ+ҲƤ~@zZrN vH Tʚ;@B''d G" կͥ+ ~7W'#~+w#Ã>yڡ>>@>> o&DM#͹BwͥB#Þ>x+>ͥB>x+~ͥB> !Bz ž?#W?~#.?#ʡ?,?z@Wá?~#>.??# ?~##??T]^###xG#z+@xͥ+':G8<2G8!i8O |%ʹ({YOO6+F6!F84~֫58w %!i8(w+w+w85Jʙ9v" GSљ e͘w>ROhFhiuh!8|%:ͥ+~#@_@Ò@>@r@;** AxxOI&G* 5@G> 5@@@z>+@TFfV:\A@:@27A ͥ+Ie&X4#]I͙(8͙(ͩ(y8g'E(6t(: N9QYi'!%!X9͘7!8 J;xn{/|t1}=Z}~L~l+ͥ+> @:e €A ڮA:G:e ʥA!BʮA<2e OTFAWMS: 0P:A!7C!E #Gͥ+_! V+z2g : =ʒ;):~(;3;2 : 2 }:*  " c:o[::g [::&2g :2@ > @+B> BC~ +üB*v  >ƕo>gB9*++"  BgGBBշͥ+2 go" d;!D " *f WX;OByN#F#=/;:"+p+q=I;*_;2: l;z;2 ͋9D2 `i D * CD `i" ~,Dͥ+|<>!@1> @!b  ~#=GA"=[0A= A=_zW"=! =L=ʺ>O>>ʨ=1g= !>=#ʻ=>>=ͥ+ү_6?5ʹ(/{_#zW#yO++Ғ5B&#ͩ(p#ڄ5>5e6>5N#F#* /}o|g5" p#=55w1_cͥ+=>\@~A +> +>+> +>>@ >wͥB# >6Hͨ=Aq>s> >s> ʑ>ʑ> ʑ> >>_‘>>_ʙ>ͥB+>>ͥ+ʎ6))))Ÿ6y=ʟ6ʫ60:ڨ6 ʸ6ʊ6È6!t(͙(! 6ͦ(6)!r%>2 E(x+76ʗ0%yʹ(7: 7ͥ+;* ?: ?2 \@@_W@W~#!ʎ@#ʡ?&ʉ@g@+>H?+~#.?_}@\&???$ͥ+&wz^Pc|u~r1͙(+ʹ('͙(~#ͦ(='ͷ(͈%ð7RO!&ͦ(76*E(!H8>8!i8ͦ(!H8Ȇw#O ͷ(ͥ+ҷ@~-@@>Wr@Cxz*1#G+7N@2 ;K@, ~#_~#foxE?m@@@?!BͫH@ͥ+ w: 82 t("~'͙(͍*ͅ%)8͈%͈%E(t(͈%t(: 82 !9͘7: 2 "~۷ͥ+A> @:A 3A6A:<:-A!MA6A<2Oɯ2:> 7A> 7A2:XG{A:e ʍA=2e >îA Aͥ+C,}92f NE G2#~.9ʵ9:ү90ҵ9E9G#~:90Ҽ9EҼ9.ʼ9x' 2~&9 :%$!#yͥ+:AD/2AD:e !B6!a > @> @TF3B:?B2ɯ2e :=@FBAA2CDD͙BƒBʌBͥ+" * c:͋9W_:Cʍ:MC;:g G:* C;^#~#¸;:g ¸;~;#^^#V#˜;:f DMW']< #:¹;#ʾ;+͸<þ;:g w#_ʖOD22>^@@@!B* | * "u <2>2ͥ+ڊ<)ʏ<)< * 7~#O G#w¬<G#<#*x " >2g ( C"x ~ #FͨH͹( @ +B-G* * /O #CZG" # >G*v " !* !z *x Cͥ+O~###͚,@ÇP>"@&G>"@íP*|Q~Q\}o|gQ> @+|ͥ+C(u C,C)d$Ix 'IH0Ix > {͹FGH* w#?IHIO>~XIxx~#F#fh GN#^#VUJ LJ#7Jѯx<#4JIJC(͋9;*#^#V* CڍJ*Cͥ+' ~p"K0*K0N"X0!0q#*w œ:0!x ͜ *V0*R0:_0̍"V02*M0r; !:r ͥ+gG* * >?@> @(KͿAzK68Kp22 ͿAoK!B!=:>\2UK'K@+iK~@K+@K@!B!b 2OAKͥ+ww2/ͬ:2T/-"."$/2/>2.v:.ʸ!/6+͕%>20:.ʮ:.0209$<!5*}Ģ*V0":0·ͥ+*|>L!b ("_yq#@ K2e > @ͿA,L KzK: Bw!a >2 ;2 " $L33oL " ** áL ͷͥ+sÖ*I0| E2V ,[ ͊m *R0"R0"P0 m E2D2V ,ʾ ͊:/ m :/ "> 2/:Įͥ+(""  B!9 +" _MC(͋9s#r#~,=M #MC)" >!=_M=_M=_M!9DM!jM* * * à2 2 ~ͥ+B**v {_zWME}_|W2 " ċ9" P ^#V#* C ~#~#Eͦ(: E! ͦ(|%(ͷ()/F####N#Fͥ+NO**+#~#N#^#V"N:N2 ͉:ʢNxG͒;>2 hN~(nNþN~(͉:zNxGNͥ+#rF?P(o6ÙFr6ÙF)1FͨHH~#2 : mS:2ùR2 2 * DM* " * #* " CNP `i" * *+zʠ `ià Qͥ+* ͓H͓H!F~#N#Fo,- ÜH;** HPYN* CHG " *x +F+N+C"x ͥHW~H#^#VͷFx * sFͥ+( COPYRIGHT (C) 1977 DIGITAL RESEARCH 112O02Z0̀%!"K2.>2.*M0"$/̓%!"":g0i!"P0"R0"2:0vͥ+LI~IJPI=O~GCH_#~#foFr+.pC)Cd>Ix C,;*C,* C)ͥͥ+*V0}|<r ͪ*|Ĵ:O0_͑H *V0"Ù*V0"E V» ͪ»**»"Ù*K0"X0!0NA#~ͥ+ҍJͣF(C,u ~JͥHG!W'y~2:0b: 020 W,F:0b: 0e,ʹ:re*X0#![0~ʇͥ+:ʐK>\@2yKCD7 ;L K ´K(KKCD(KK0K@> @>bKK>#iKK6!B!b K KxLͥ+y: 0:yv! X! ^#fkX _~ 0^ Z   2 5 8  :0‰:0=ʉG! 0ʃF#2ͥ+LL" *" ##^#V#~#fo"͆(ʵLA3à* "à!9~#L L~#foC L >2 ͋9dͥ+:0 : 0 -Ͳ !/6+:.;?*$/*."$/?"$/:.l*.^#V{r+s5*.^#V ʓ:.ͥ+ DWڬ qU6Qʦ ʠ !' ~U U#~¸U`i}WÙU>O #~(PY!' ůwͱW:!͞Zʻ =ʝ =UѯÚ <ʻ !% ^#ͥ+[02e/*.#"X0$<5ͬ*$/"M00:T/2:/2[0 v>20*.".2[0v*R0m "R0͍"R0!/w >=G*R0*I0"R0"R0 ͥ+~U4N#V pʝVzw w+s#r#6#6DM:V!" s#r#6 W! {zVWw<W<ͥ+>"4:O0: 2\0:0=: 0 F!Fʹ%*X0"`0>2Z0*X0":0k: 0T!T:\0¦:ͥ+% N#F+q#p###6 ’WͱW: ͞Z>ªW>w+w!(HW7?*' 6#67ͥH~ʲ #^#fk_XN#~:X+ͥ+X06 '>#G*I0!" :0 :Z0 !0N*K0:O0·ͥ+ w#…XCACSW:!<¾ ͥH~ʠ #N#F OXIXR  C,#u C,{ʦ _շͥ+ҵP!B#*QѻQ  C,PY"+#x _:ڦ !N#F :Q!)^Q! >>>ͬ͹F* (H>>ͥ+ !4̨!~5 G!~Ҩ4_!p!~ʮ5^!~> >2\0:0N *K0"+"X0:0 >''!:ͥ+yĊRW1R R{ +R,> +R+R1R1R͊RWQ"  U!Ux͹FFTC$C(u ~,KU*Qʠ "QC)}͹FʅU͙BlUA~Uw# ^UF*ͥ+ r+s!06#wÚ> 209!e/~6![0~6".~,#!0w9 9*.~6 *: 0,Ĵ2f/*.s#r2ͥ+Vr+s9Q6V PY,V!#V`i>yV!' ~UͱW)9V6Qʦ !&QV! ~+n6Qʦ ! ~*~Ee\DM'ͥ+m :/ }>͞ ¥͢ :O0*V0*ʿ͜">2:O0:0:O0!!4:0: 0,طͥ+ʻ !! {w:W}W!! ~!) ;WU;W~#>W*~ʖ\( ~hW+~#5O ~+~tWzWJW7>*T]ͥ+O0¦:0=ʦ ʦ*"X0 !':[0'Tx»!Z04TT!Z05T:\0!":]0!**V0":O0*X0~ Ĵ*ͥ++@bXy@bXbX #RX~.0X>X7X#X2 z bXbX> >X7X> WX7Xò W<ʣ !ͥ+ҟ"b0+"X0yʛ 'É' Ͳ >ͮ 222:0: 0 !ͮ-:0̷ͥ+:0!4 :0& : 0::0!xI !4̨ e ::̮>͞ } !~5:Į ͵ͥ+>ͥH<2g #~#fo(d ,»QZûQ Q͋9;*W_Wڬ Q¾Q"QG{,xQPXW1R!b Oz"yR QR RO{,ͥ+0N : 0,N :0 >  > !0N#~' ) > ''*K0"V0:\0x ʹ:\0" m }*K0"+"X0''*K0"V0>"4ͬͥ+..ɷw#eRX͔R:2+ʾRC,CR 22!6"!C:2*""*#|hV* *CMS~#hVSV:SS=S~,~#ͥ+  ͺ :0: 0 !;* _!5 ^#fkS \ h n 2 ͠ ͻ ͵ ͠ ͖ 8{ Ăy0÷ͥ+;*ͥHF~O#^#VT*CT* CTY* * CUyP͘% >U̘%>: 2 3>E͘%ͥ+ : 0 v-!v !v-ʹ {ozg:.7ͮ2Z0!O0~4l!"*|>"V0*""J͊!/6 !/͒%:^0ͥ+!/w:e/S:e/9ɯ2f/2d/2e/:0:e/ !2f/g/~#»S͉!f/~4!g/_:e/w2e/ɯ<*V0"36ͥ+0Ģ*R0̜*R0ĜG:O0xě%:/ *R0̍:xz*P0#"P0E2D20:b!^4!/wͥ+җ :e/&ʕ:0  ý͗&{&{ý͗  !e/~&>62/-!.6*M0"$/B".2f/*"V0͗ 2f/2e/2[020ͥ+ҷ*X0#Þ!.*V0".#"X0$:d0<:0<! 0~?<#ʐ: 0͡!.".^#V"V0}{##~20:Z0?:\0:O0?́;B*`0*X0++{z~ ͥ+P'!5^!/~ !~620͕%2.|z}z> u!.~w:.W=*u!.4C*V0^#V"V0ý!.5¯:20͕%!^4!/ͥ+ã ¡:.ʔ>+2/͕%!/6 >20>20:[02́:0:Z0: 0=!EQ<!LT:[0=!LE>!GT:[0=!GE2[0" 0!04ͥ+-!2~B6~44O!! s#r!1~ _6^4! w!p!2~~!55ͥ+0Æ7O!~*0!ʩң)Ú "0 x:[0 '¦́'æ:[0 :[0,;%:[0 !:[0; ,ͥ+)D*OxG !?DM!xGyO23)#͌)=R|g}o=^͌͌rͥ+́:[0  <¨!~4 >¼!~5 : >20>V>O>I>B͘%ͥ+ҭoolo&3:0: 0 ;!,ɯ2122=2 !"I0&q!1~\5_! ~͔D:2:/ *!"I0:/ :0ͥ+>F>;>G==<==>=s;=P=*>=$?P:-?]>*<<==<;=>>y> ;:ͥ+2 yU`:10_!~0!1s! ~͔ yU!1~N=w_! ~QZP>2 ypC͘%:0 : 0 v;:0ͥ+óf:.O*.~H:.=!4>͕%0:/#". ͆%2G:0xa{_ ʇ ʇ:0x҇_<20ͥ+ҷʏ>2.͡%ͱ*K0*T0&*M0*T0&\ ͍!/w#õH USE FACTOR !/͒%*"P0Þ%z{*P0"R0*"V0 !":Oͥ+*"V0ɯ2!4!f/6".!f/~55!d/^4!g/~f:.:e/JGwf^l͗^{:e/&{!f/4#ww&ʞGʱ2e/xfͷͥ+jj*R0!6zz{z4A_A?ɯ2.2*T0"V0!.8w# *V0*K0{zҤ*b0+"X0 =$*ͥ+> 2͕%>20ɯ202!0~@$6^4#:[0w~$w:[00 6:[0A:[0?e@eAɷP6 ͥ+Ҫ."V0s#r+*.s#r*V0##~_"V0!.".>2.*.^#V#"."V0*V0}d##~<2.G*V0##"X0:.> u!.~w>w> u:.ͥ+++!+"X0:Z02Z0́ͪ'2Z0X:[0*K: ḰͪX? X́ö20Pg>ã6r>ã:[0'ƒ2[0>ͥ+w>R͘%>V͘%>Dý>Pý>Lý>Oý>Bý>Sý>N͘%*6".~ 6ͥ+>20![0:0/ʦg¦´/ʦA¦:[0O<QA>HHR>22[0m:B_>fD> j!052!"0!0N#~#Aַ҄ͥ+N!! N#fiooo&)^#fk9BIO[ov ͌z{>ɯo>g͌"!6ů{_zW5>ͥ+202́/>20:[02́:0G:0::0l:[0'́:[0' 20/:[0'|>20^—ͥ+oz{͉͌͌}|͉͌Þ͌Þ͌ë͉͌!!o#Ã͌zg{o͌zg{o͌zg{ͥ+!QéÉ $ ? H Y ` e Ò ü ò ~ÏGÇåûfD?<==:e>?; ><>; ;<=R>>ͥ+:0! 0^#=ʙV¨*0!҂ :0:0& !!>O: >ͥ+ =;>?>P?<=?>>=<<i;m=>c==>o>v<=<;8?N!Nw#w#W!"V0!.w#w#l2N!ͥ+&)L)*Õ**x&t+!,ã-Ë,I,á&&M+*7%!I%w_:JASMPE%:L%%:M%%:I*~# ͥ+5~wN#Fq#p>BØ%!0" * F#%2NG*V0##~w*V0##~<͉:.t!.N!. yq~t +a *\ ?=)$=)w#Ž&!\60 ڱ&>GO#w ³&>O # &6 &6L#6I#6B#w2|r&\u'>2]0!"%![0~2%wG&!,x&>ͥ+!0^*K0"V0*M0{z"K0!N"O1#w#w*V0!NN*O N#Fr+sq#p0U>G=#w#wY*M0!0n& {ozg"V0!K0{#zڷͥ+,N'!k-x&!,N':% '> ':%'_!% '6 4ɯ2%2]02e02d02g02%:\ͥ+OL TABLE OVERFLOW G*V0##~w*V0##~=*V0_###1 s#r1 ^#V1 ##"X0P wP ~O!0~z 6~=ͼ ͥ+ʣ(e0Lʣ(d0Qʣ(g0Rʣ(%1¶(x#3(~AҶ(#3(#6 !)-x&!x&!%͉&!%͉&ͳ'(`&͛'͠':%)!&͉&l&͛'ͥ+&À# $b${$*!:!X!!M"p"""""4#\#j# ()*+,-/ABCDEHLMDBDIDSDWEIEQGEGTIFINLELTNEORSPACIADCADDADIANAANDANICMACMCCMPCPIDAADADDͥ+Ҁ~):.2]0ʢ)r&\!~-N'*%F))Z&!"%*%B&%)¼))*)6# )G&*%*%#"%~ͥ+GCALLCSEGDSEGELSEENDMHIGHIRPCLDAXLHLDNAMEPAGEPCHLPUSHREPTSHLDSPHLSTAXXCHGXTHLENDIFEXITMEXTRNLOCALMACROSTKLNTITLEINPAGEMACLIBPUBLͥ+*`*G&`*!S-x&ö,͟**>&*@&w#">&!F)l&!">&*@&&`*_!%~ ͥ+<& #*)&# PP%27&#(&#  $ %*%"$  NZZ NCC POPEP M ͥ+0!]0+~,:/ ,!/~ +:f0,:/++:_0,+:/#,:/ ,:_0=+!/~ +!0s!%~!%*4:0!/,G~Y+ͥ+Ҿ # ɯ<:0O=_^$!"F!!V#fjQ̀#G$2!!!^#Vo&)O~#F##xGyѯ&}ʶ,>͕*æ,+,:%,l&&͈'!-x&CP/M MACRO ASSEM 2.0 NO SOURCE FILE PRESENT Nͥ+0000000000000000000@@@@@@@@@@@@@@@@AA AAQQQ"Q'Q,Q1Q6a:6'D'>.6'D'>-6'x&!ͥ+"M0b*M0!0N#yʢ ~Õb!."O1:N *M0!$/{#z"V0$ _!.*V0~#~1 ~#"M0û1 !͒%Þ%SYMBͥ+ =)!%w#w#w#w#w#w#>2^02_0:m$(!~#$,(~(# 3(%Aʩ(Pʩ(Sʩ(Hʩ(Lʩ(*t(+t(-¶(^0~Sʣ(Mͥ+!0N#~ͼ „ Ͳ O2Ny2f0!"&:O0*!"%2%2%2%Z&%u'!-x&z{:]0ʢ)*%F)w)!"%r&\‰)*%#"%+ͥ+CRDCXENDEQUHLTINRINXIRPJMPLDALOWLXIMODMOVMVINOPNOTNULORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRIASEͥ+!<-x&G:%7*$*x*7*x2*Ϳ'5*9**&*&w#"&!F)`&!"&*&%~ʅ*B&Œͥ+IC7 PF FPA A A* A A A(#&&#&2#/?&#' '( v'( %:P!@"ͥ+*2%*b0}!,~ +*#+> *>#**> **b0~>+*#2+> *> *> *}2%!%*O*:/ :O0:%y*:%!O0•+:eͥ+x#_BH!™# 0#³# £#{ڽ#KÅ#CÅ#<: 0 JCR:0 $# $! 06 p#! 0$#ͥ+#x=+> Y+> Y+20!/>x6 #=,G!/~ pͳ'*&}?,>*/,`&%͈':^0*+,!&6S#6Y#6M#w!&w:%2%!"&ͳ'*2%`&ͥ+_^#~G~W!:!x             0!0$0'0*0-000306090<0?0B0E0H0K0N0Q0T0W0Z0]0`0c0f0i0l0o0r0u0x0{0~0000ͥ+O DIRECTORY SPACE SOURCE FILE NAME ERROR INVALID PARAMETER: SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES UNͥ+ҟ ~šRÇ !?`2 "!"6:͗C2e " * ^#V"zB"UB"##^#V"A##^#V"A##^#V"=A 2!]!!"" !"22d 2 2 ͥ+.WƐ'@'Õ*>:͕*!%^Ww*%{-|-}--{?.!%~#-6.-> ͕*> ͕*͞*> ͞*ͥ+S^Mʐ^F C:dʯ^z{2ô^"v +^C/}^C:d" ô^+*v +"v +:!]"2<s#r# * ͥ+noutf ;externally, to console pop bc push bc ;recall/save character ;may be copying to the list device ld a,(listcpͥ+y Microsoft Bytes freeBASIC-80 Rev. 5.21 [CP/M Version] Copyright 1977-1981 (C) by Microsoft Created: 28-Jul-81 ͥ+compute column position ld hl,column ;A = char, HL = .column cp rubout ret z ;no column change if nulls inc (hl) ;coluͥ+A SDRV ;STORE SOURCE DRIVE LETTER IN MESSAGE 011A CD6402 CALL VALDRV ;VALIDATE/STORE SPECIFIED SOURCE DRIVE 011D 11450ͥ+9Q¯ WzZ" 1Y{1Y!~ 1Y6B#6A#6Sz"# w# >YwwͱWoY<ʻ ÅY<…Y£ͥ+ 579, PACIFIC GROVE ; CALIFORNIA, 93950 ; ORG 100H BDOS EQU 0005H ;DOS ENTRY POINT CONS EQU 1 ;READ CONSOLE TYPEF EQU 2 ;ͥ+Z!6# ͖ZW2 !͒Z!͒Zʣ O!  ~#@ygZ~ dZ>.@ QZ:e W:ڀZ> @@ͥ+READF EQU 20 ;READ FUNCTION ; FCB EQU 5CH ;FILE CONTROL BLOCK ADDRESS BUFF EQU 80H ;INPUT DISK BUFFER ADDRESS ; ; NON GRAPHͥ+u]*Q  ! ^#V~,+ zʵ +s#r! w#w! ~#fo!CT[Ò[BK>!)g[)#h[))v[ u[#=][}_ͥ+ME FCBFN EQU FCB+1 ;FILE NAME FCBFT EQU FCB+9 ;DISK FILE TYPE (3 CHARACTERS) FCBRL EQU FCB+12 ;FILE'S CURRENT REEL NUMBER FCͥ+ \DM*q]*s]X\"q]PY[2*o]! ~#foCs#rG\:T\!T\!& äV~# xY\DM\ʓ\͹\! w!( ͥ+ LENGTH ; ; SET UP STACK LXI H,0 DAD SP ; ENTRY STACK POINTER IN HL FROM THE CCP SHLD OLDSP ; SET SP TO LOCAL STACK ARͥ+!9}o|g ] \ \ ** C!9}o|g!X9}o|g S] )] )]*|<:  C*+6*ͥ+BALANCED MACRO LIB END OF ASSEMBLY G:%x-!%~--.-*P0*%O {-z-.*P0"%!%^4!%w.ͷͥ+2!"!" !z "x ! "L *"v >2!^" :^^<2^!~" ^F#~+w##D^+6" !^/x^+6"" #/x^i^^6Zͥ+wsͥ+ DM=^#"" {ozgB|g}o_|0_!{ozgB"v "" " *B}o|g++!_#G1!_#G!#G" !B! v] Owned bͥ+) or a call nz,listf ;to printer, if so pop bc ;recall the character compout: ld a,c ;recall the character ;and ͥ+;ENTER PRESSED, SYSGEN IMAGE ALREADY LOADED 0114 CA4D01 JZ WRITT ;JUMP TO SYSTEM TRACK WRITE ROUTINE 0117 326404 STͥ+mn = column + 1 cp ' ' ret nc ;return if graphic ;not graphic, reset column position dec (hl) ;column = column - 1 ͥ+; FILE DUMP PROGRAM, READS AN INPUT FILE AND PRINTS IN HEX ; ; COPYRIGHT (C) 1975, 1976, 1977, 1978 ; DIGITAL RESEARCH ; BOXͥ+ cY!%w#w#w#w~ʨYCzW* ) p# ®YC T T _W<Yʣ ͷͥ+TYPE FUNCTION PRINTF EQU 9 ;BUFFER PRINT ENTRY BRKF EQU 11 ;BREAK KEY FUNCTION (TRUE IF CHAR READY) OPENF EQU 15 ;FILE OPEN ͥ+!BAZ~*6?# –ZO!!4¶Z#4¶Z#4y"Zʻ ><+Z* C! s#r#wZ2ͥ+IC CHARACTERS CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED ; ; FILE CONTROL BLOCK DEFINITIONS FCBDN EQU FCB+0 ;DISK NAͥ+}la)ҍ[#x"o]! "q]!) "s]!}o|gCڼ[bk:u]\C[ \DM*s]*q]X\"q]PY\*o]#"o]}o|g|Ÿ[ͥ+BRC EQU FCB+15 ;FILE'S RECORD COUNT (0 TO 128) FCBCR EQU FCB+32 ;CURRENT (NEXT) RECORD NUMBER (0 TO 127) FCBLN EQU FCB+33 ;FCBͥ+V6 ʎ\zwø \ʓ\͹\! ~!ô\! ^#V! s#rDMͱ\ͫ\C" ͒#\>;S"]C ** C!X9}o|gͥ+EA (RESTORED AT FINIS) LXI SP,STKTOP ; READ AND PRINT SUCCESSIVE BUFFERS CALL SETUP ;SET UP INPUT FILE CPI 255 ;255 IF FIͥ+*D"D]*D"B!"D*@*B}>*D#"Dɯ2+2?!"B"D<  NO IFILE FILE$!\ "ͥ+JMP FINIS ;TO RETURN ; OPENOK: ;OPEN OPERATION OK, SET BUFFER INDEX TO END MVI A,80H STA IBP ;SET BUFFER POINTER TO 80H ;ͥ+ OFILE$!" ** #" ɯ22!"!" <  NO DIR SPACE: OFILE$!m0 ͥ+ LINE POSITION JC FINIS ;CARRY SET BY GNB IF END FILE MOV B,A ; PRINT HEX VALUES ; CHECK FOR LINE FOLD MOV A,L ANI 0FHͥ+*>:%N‘> %> %* }±">%¥<  CANNOT CLOSE OFILE$ͥ+CTER READY RRC ;INTO CARRY JC FINIS ;DON'T PRINT ANY MORE ; MOV A,H CALL PHEX MOV A,L CALL PHEX NONUM: INX H ;Tͥ+ IMOVER.COM$$$$****************************************************;$ͥ+THAT A JMP TO 0000H REBOOTS) CALL CRLF LHLD OLDSP SPHL ; STACK POINTER CONTAINS CCP'S STACK LOCATION RET ;TO THE CCP ͥ+ARRY SET FOR EOF STC RET ; G0: ;READ THE BYTE AT BUFF+REG A MOV E,A ;LS BYTE OF BUFFER INDEX MVI D,0 ;DOUBLE PRECISIONͥ+RKF CALL BDOS POP B! POP D! POP H; ENVIRONMENT RESTORED RET ; PCHAR: ;PRINT A CHARACTER PUSH H! PUSH D! PUSH B; SAVED ͥ+,BUFF DAD D ; ABSOLUTE CHARACTER ADDRESS IS IN HL MOV A,M ; BYTE IS IN THE ACCUMULATOR ORA A ;RESET CARRY BIT RET ; ͥ+HAR RET ; ; PNIB: ;PRINT NIBBLE IN REG A ANI 0FH ;LOW 4 BITS CPI 10 JNC P10 ; LESS THAN OR EQUAL TO 9 ADI '0' JMͥ+OPENF CALL BDOS ; 255 IN ACCUM IF OPEN ERROR RET ; DISKR: ;READ DISK FILE RECORD PUSH H! PUSH D! PUSH B LXI D,FCB Mͥ+ RRC RRC RRC CALL PNIB ;PRINT NIBBLE POP PSW CALL PNIB RET ; ERR: ;PRINT ERROR MESSAGE ; D,E ADDRESSES MESSAGE ͥ+LF,'NO INPUT FILE PRESENT ON DISK$' ; VARIABLE AREA IBP: DS 2 ;INPUT BUFFER POINTER OLDSP: DS 2 ;ENTRY SP VALUE FROM CCP ;ͥ+*+~# !\ FCOMö*B*D}|ڟ!"D*B{zґ*@‹ͥ+LE NOT PRESENT JNZ OPENOK ;SKIP IF OPEN IS OK ; ; FILE NOT THERE, GIVE ERROR MESSAGE AND RETURN LXI D,OPNMSG CALL ERR ͥ+HEXå** }|ڕ!" *{z҇*h* " : t DISK FULL:ͥ+ HL CONTAINS NEXT ADDRESS TO PRINT LXI H,0 ;START WITH 0000 ; GLOOP: PUSH H ;SAVE LINE POSITION CALL GNB POP H ;RECALLͥ+))))O "Iʊ>:%2>N:N:NNNpI?O:2y_y0:j%:N> %> %ͥ+ ;CHECK LOW 4 BITS JNZ NONUM ; PRINT LINE NUMBER CALL CRLF ; ; CHECK FOR BREAK KEY CALL BREAK ; ACCUM LSB = 1 IF CHARAͥ+R0800$M$$$$$****************************************************;$ͥ+O NEXT LINE NUMBER MVI A,' ' CALL PCHAR MOV A,B CALL PHEX JMP GLOOP ; FINIS: ; END OF DUMP, RETURN TO CCP ; (NOTE ͥ+ ; READ ANOTHER BUFFER ; ; CALL DISKR ORA A ;ZERO VALUE IF READ OK JZ G0 ;FOR ANOTHER BYTE ; END OF DATA, RETURN WITH Cͥ+; ; ; SUBROUTINES ; BREAK: ;CHECK BREAK KEY (ACTUALLY ANY KEY WILL DO) PUSH H! PUSH D! PUSH B; ENVIRONMENT SAVED MVI C,Bͥ+ INDEX TO DE INR A ;INDEX=INDEX+1 STA IBP ;BACK TO MEMORY ; POINTER IS INCREMENTED ; SAVE THE CURRENT FILE ADDRESS LXI Hͥ+ MVI C,TYPEF MOV E,A CALL BDOS POP B! POP D! POP H; RESTORED RET ; CRLF: MVI A,CR CALL PCHAR MVI A,LF CALL PCͥ+SETUP: ;SET UP FILE ; OPEN THE FILE FOR INPUT XRA A ;ZERO TO ACCUM STA FCBCR ;CLEAR CURRENT RECORD ; LXI D,FCB MVI C,ͥ+P PRN ; ; GREATER OR EQUAL TO 10 P10: ADI 'A' - 10 PRN: CALL PCHAR RET ; PHEX: ;PRINT HEX CHAR IN REG A PUSH PSW RRCͥ+VI C,READF CALL BDOS POP B! POP D! POP H RET ; ; FIXED MESSAGE AREA SIGNON: DB 'FILE DUMP VERSION 1.4$' OPNMSG: DB CR,ͥ+ENDING WITH "$" MVI C,PRINTF ;PRINT BUFFER FUNCTION CALL BDOS RET ; ; GNB: ;GET NEXT BYTE LDA IBP CPI 80H JNZ G0 ͥ+ ; STACK AREA DS 64 ;RESERVE 32 LEVEL STACK STKTOP: ; END ͥ+LOCKS PER DISK: $ RESERVED TRACKS: $ TRACKS PER DISK: $ $ $ͥ+000H ;CP/M WARM BOOT ENTRY COLDBT EQU 00900H ;COLD BOOT/CPM RELOC LOCATION IN SYSGEN IMAGE STADDR EQU 00980H ;FIRST SYSGEN ͥ+ !_p+q*^ !ap+q*` 2[!cp+q*b 2[!ep+q*d !gp+q*f !ip+q*h 2[!kp+q*jͥ+QU 02C00H ;FOR COMPLETION CHECK ROUTINE ORG 00100H ;DEFAULT LOCATION LXI SP,STACK ;INITIALIZE THE STACK LXI D,SIͥ+*"|!+p+q:sO**",|S!".![6>.P:[H*,DM1*,",*.+".ð:[!s6*,"ͥ+PI 00DH ;ENTER PRESSED, SYSGEN IMAGE ALREADY LOADED JZ WRITT ;JUMP TO SYSTEM TRACK WRITE ROUTINE STA SDRV ;STORE SOURCE Dͥ+~ Ž*1+"1*~#"~`*1#"1>1Pz~CH*~~ *1+"1*~+"~âz~C*~#"~*~"!46~ͷͥ+>>1];F$> Q-0:8Q$Q;FR PRESS ANY KEY TO SEE THE ASCII HEͥ+tem memory bioslen equ 0900h ; adjust as bios changes are made (if size changes)ͥ+TY ; ; SPECIFIC FOR ALTAIR DOS ; ;**************************ͥ+C+s#r@C+s#r*DM͇*u& ~2tO>Zһ:t2t:u<2u*g͇ g:2v!t6 !u6͟!Dq!D:t:vͥ+ABOMBARD ; 9/19/02 ; ;***************************************ͥ+C+s#r@C+s#r*DM͇*u& ~ͥ+00h to the Altair disk ; system tracks (0-5). ; ; The sectors of a track are ͥ+ͥ+ $ INIT DONE - NOW VERIFYING DISKETTE $ NO ERRORS FOUND ON THIS DISKETTE $ SECTORS PER TRACK: $ SECTORS PER BLOCK: $ Bͥ+ (MITS 2SIO) CONDATA EQU 011H ;IO DATA PORT (MITS 2SIO) CR EQU 00DH ;CARRIAGE RETURN LF EQU 00AH ;LINEFEED WBOOT EQU 00ͥ+P7>P+*/"*wM*P4*z"~"M:tDJ*DM͕MSgYLYv !\q*\& !]q*]&ͥ+IMAGE MEMORY LOC TO SAVE TO SYS TRKS SAVEND EQU 02C00H ;LAST SYSGEN IMAGE MEMORY LOC TO SAVE TO SYS TRKS MEMEND Eͥ+ 2[!mp+q*l  !nq*n& !pp+q*o  g g!rp+q*q A!s6!Y"z"~"*z"!6!6ͥ+GNON ;DISPLAY STARTUP MESSAGE CALL MSG LXI D,SRCQ ;DISPLAY CP/M IMAGE SOURCE PROMPT CALL MSG CALL INCH ;GET ANSWER Cͥ+1:s/,H+s#r*,~/*,#",*,+",*,~ I*,+",6*,"!2r+s+q:0›>1P~CHҘ*~ͥ+RIVE LETTER IN MESSAGE CALL VALDRV ;VALIDATE/STORE SPECIFIED SOURCE DRIVE LXI D,SDISK ;PROMPT TO LOAD UP SOURCE DISK CALͥ+; ; Modify as bios and/or system memory configuration changes ; are implemented ; msize equ 60 ; adjust per installed sysͥ+X CODE ...CTRL-C TO EXIT... $ͥ+ͥ+******************************************************** ; ; DISASSEMBLED/MODIFIED BY: SCOTT Lͥ+HDM!>))덑o|g) =DM!>))> =6i`N#Fogo&ogn@~C+s#rt*z"~*~"@ͥ+******************************************* ; ; This utility writes data from address 0h to 2Cͥ+ File not found$ Illegal command$ͥ+written in the following order: ; (first even sectors, then odd sectors in ascending order) ; ͥ+PX |>:GH> : MITS ALTAIR CP/M2 DISKETTE INITIALIZER FOR THE 88-DCDD DISK SYSTEM V1.3 MOͥ+ ICBIOS.COM$M$*****************************************************;$ͥ+ COMMAND: $ VALID COMMANDS ARE: [D]ISK, [F]ULL, [P]ARTIAL, [T]EST, [Q]UIT $ * SKIP FORMATTING THE SYSTEM BOOT TRACKS *$ !!ͥ+ IBDOS.COM$$M$*****************************************************;$ͥ+ PRESS ANY OTHER KEY TO ABORT WITHOUT LOSS ... $ BAD SECTOR FOUND AT TRACK $ INSERT DISK TO TEST IN SELECTED DRIVE AND THEͥ+ICCP.COM$$$M$*****************************************************;$ͥ+ETE. IF ANY ERRORS WERE FOUND, YOU SHOULD COPY ALL FILES FROM THE DISKETTE AND FORMAT IT. $ INSERT CP/M BOOT DISK INTO DRIͥ+ IMOVER.COM$M$*****************************************************;$ͥ+MATTING OR DISCARDING THIS DISKETTE ... $ INIT DONE - NOW VERIFYING DISKETTE $ NO ERRORS FOUND ON THIS DISKETTE $ SECTOͥ+DDT$2BFF 0$$*****************************************************;$ͥ+;$*****************************************************************;$ͥ+ERA B:CBIOS.REL$THER$*********************************************;$ͥ+ ERA BDOS.COM$$*****************************************************;$ͥ+M80 =B:CBIOS/M$IOS/N/E$*******************************************;$ͥ+ ERA MOVER.COM$*****************************************************;$ͥ+ERA B:BDOS.REL$OM$N/E$*******************************************;$ͥ+R1E80$ER.COM$*****************************************************;$ͥ+DIFIED/UPDATED BY: SCOTT LaBOMBARD $ DISK DRIVE (A-P) OR CTRL-C TO EXIT ? $ * DRIVE NOT CONFIGURED FOR THIS SYSTEM * $ ͥ+R1080$COM$M$*****************************************************;$ͥ+! WARNING: THIS COMMAND DESTROYS ALL DATA ON THE DISK !!! INSERT DISK TO FORMAT IN DRIVE $ AND THEN PRESS [C] TO CONTINUE, ORͥ+R0880$OM$$M$*****************************************************;$ͥ+N TYPE C TO CONTINUE, OR PRESS ANY OTHER KEY TO ABORT ... $ *** CHECKING FOR BAD SECTORS (READ ONLY) *** $ TEST RUN COMPLͥ+R0800$M$$$M$*****************************************************;$ͥ+VE A AND THEN PRESS ANY KEY TO CONTINUE ... $PROCESSING TRACK# $ ERROR OCCURRED ON TRACK $ SECTOR $ BAD SECTOR - SUGGEST FORͥ+ F100 2BFF 0$$*****************************************************;$ͥ+RS PER TRACK: $ SECTORS PER BLOCK: $ BLOCKS PER DISK: $ RESERVED TRACKS: $ TRACKS PER DISK: $ $ $ͥ+; PUT PIECES TOGETHER$*********************************************;$ͥ+ ERA CBIOS.COM$*****************************************************;$ͥ+L80 B:CBIOS,A:CBIOS/N/E$*******************************************;$ͥ+ ERA CCP.COM$$$*****************************************************;$ͥ+; CREATE CBIOS.COM$N/E$*******************************************;$ͥ+G0$MOVER.COM$*****************************************************;$ͥ+L80 B:BDOS,A:BDOS/N/E$$*******************************************;$ͥ+; 0980H - STANDARD CP/M CCP$$AC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+; CREATE BDOS.COM$/E$$*******************************************;$ͥ+;$900H - COLDBOOT (CP/M IMAGE RELOCATOR)$BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+L80 B:CCP,A:CCP/N/E$$$*******************************************;$ͥ+E; THIS UTILITY LOADS A SYSGEN CP/M MEMORY IMAGE TO MEMORY STARTING AT$LIB$ͥ+; CREATE CCP.COM$E$$$*******************************************;$ͥ+ERA B:MOVER.REL$$E$$$*******************************************;$ͥ+L80 B:MOVER,A:MOVER/N/E$*******************************************;$ͥ+M80 =B:MOVER/M$VER/N/E$*******************************************;$ͥ+; CREATE MOVER.COM$N/E$*******************************************;$ͥ+XSUB$TE MOVER.COM$N/E$*******************************************;$ͥ+7; REQUIRED PROGRAMS: M80.COM, L80.COM, DDT.COM, ASM.COM$***********;$ͥ+J; REQUIRED SOURCES ARE MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+;$EQUIRED SOURCES ARE MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+; 1F80H - MITS ALTAIR BIOS$.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+; 1180H - STANDARD CP/M BDOS$AC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+ M80 =B:BDOS/M$OS/N/E$$*******************************************;$ͥ+); 0900H - COLDBOOT (CP/M IMAGE RELOCATOR)$BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+ ERA B:CCP.REL$OM$/E$$*******************************************;$ͥ+; LOCATION 0900H AS FOLLOWS:$ RELOCATOR)$BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+ M80 =B:CCP/M$P/N/E$$$*******************************************;$ͥ+;$HIS UTILITY LOADS A SYSGEN CP/M MEMORY IMAGE TO MEMORY STARTING AT$LIB$ͥ+ERA B:MOVER.REL$$E$$$*******************************************;$ͥ+! ~# y $# +$9ͥ+M80 =B:MOVER/M$VER/N/E$*******************************************;$ͥ+; CREATE MOVER.COM$N/E$*******************************************;$ͥ+XSUB$TE MOVER.COM$N/E$*******************************************;$ͥ+7; REQUIRED PROGRAMS: M80.COM, L80.COM, DDT.COM, ASM.COM$***********;$ͥ+J; REQUIRED SOURCES ARE MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+;$EQUIRED SOURCES ARE MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+; 1F80H - MITS ALTAIR BIOS$.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC, MEMCFG.LIB$ͥ+\X COPYRIGHT (C) 1979, DIGITAL RESEARCH ͥ+&-AGMSۛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6ͥ+ ч!׶2:2a{_:׷ʖ:׷>Ľʖ:=2–!B!6#5ʖ:׷ͥ+Ґ^H@Oy H H: –ͬ  #H: ! ۾ Hù H H $O͐: 2 *CN# ʷͥ+#͘*~ "ҷ"͌#>?͌͘ =_.:;<> O҅o$>!Y2*O"ʉ@ͥ+x: ۷! ۖ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#ͥ+#~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 3ӯ21y_͸2y2ͽ:з·ͥ+O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*ڷͥ+ ! ~ 3#0 Wx x Ҁ ҂ G ~ # 3x~#B!Y~ɯ2:׷=!׾ý:׷=!׾:ý^T!׷ͥ+"*}:*)=":O:塵o"*C *C!ͮ~2~2ͦ:2ͮ:ܯO:w:w |g}o*密# ͥ+ ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇͥ+*{#zr+s{ozg**͕** ݾ,w͜͸Ͳ!!N#F$**O!~#:A۾#~$=2Ek͌ҷͥ+=qf^!~2>`~2ׯ2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOͥ+S:2E!~Яw>T D^6k-äPYy 5*{zBK5 ͒> Ò> Ò͘~#͌ì _2<Я2ͷͥ+ O͐  :۷E B 2>: ۷b# : ۷y! 4 5~yy5 6yͥ+ҷĽ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!·ͥ+x: 2 p&x~+é7ٯ2 H! >w_: ! ۾5ͤNkͱ¦ͱxʊ#Nͥ+G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" ͥ+2E>! ^#V w#P:BO|^#V#"##"##"##"!ͷͥ+Ҙ1͘A͌>>͌92^ :׷¥.!_~#fow]խ֎֥!v"!çREAD ERRORçNO FILE^:׷·ͥ+yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \ܷS܀*C :qn& ^#V>O^ܷͥ+~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x ͥ+ ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw*ͥ+ կw4!Y~ʆ͌†t=ʆf ^ T կ2o&)|+!<ͧͥ+"**#"͕: 2Þy<_WyOxOxG* ~V5dw^ :ʈ޷ͥ+҆FILE EXISTS _: É: :׷ʉ=2)ͽÉ T!@k!}|qͥ+::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sߖ-|N-# ͥ+ADCOMf^: !׶ Â$$$ SUBzͧÆBAD LOͥ+ *C ^OT *C~wD -'  -@ͦ~^*C Ox! N!Fwyͥ+> 1#_!l!z¬{x ڒʒ2> Ò>:>2:s:<2A>=ͥ+ w ~>2!E5T*C!"C"C!w# F! w͌xݯ2͢*C ~<wʃG:!ʎͥ+J> *lJ*l> !ڴ~ #´> ! w#@2> ::.xͥ+2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E۷͊:==»ͥ+'G#gc#%cd ͥ+ܯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄͥ+in register $NNNNNNNNͥ+s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!B۾w!>2*C~=2u:B2~2wE:A*C۶w>"ͥ+ͥ+):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6ͥ+ͥ+o file ... $ Usage: loadihex filename.com $ Could not create output file $ File write error $ Invlaid hex character $ ͥ+ͥ+ad checksum $ͥ+ͥ+35@KQglw}Ø&q>225s>2!"2!">w:n>2O$Os>ͥ+xʋ>ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# # ͥ+yy > `# 2>>5y@g!y2o&))))wy2y2 n&i`"ͥ+ì 4~ʶ¬:<ʶ$ʶïZͻܯx>2>2ͻ:!Z2:E۷ẅ́͊Ͳ>ͥ+G:_x_/<_2y ::w>2:_!F#^+> :=G _ksv __~# ylͥ+y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26ͥ+@ @       60K CP/M Version 2.2 (Altair32, BIOS Version 1.4) $ Cannot find sector ͥ+үi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{ͥ+ͥ+!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*ͥ+ͥ+:ʑw:2E**E}DQ>2g":ʑ*C6ͥ+ͥ+ Memory error $ Bad checksum $ͥ+ͥ+ͯ*-w#ww##> ͯÂ""~>2:[R0 *4#4>2:[R> *4 #4(> ͥ+ͥ+ͥ+):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6ͥ+ͥ+#"!*!ͻ *^#V"*#"* !"!"!!"!**!+*&s*!#"!*" !P!͜ *!ͥ+ͥ+E%$NUsage: uudecode d#!~P!!.e.!;ͳ!̀Ei$!;N.uue>P!!Ȟ!;p !Ȟͷͥ+ͥ+3!722vs>2!"2!">G:n>2O$Os>ͥ+;$ ; ;*******************************************************************; ; ; ͥ+yy7!y2vo&))))Gy2ry2s n&i`"tͿ͙> v*t<Ϳ*tv<> !ͥ+E; ;$*****************************************; ; ; ͥ+:v_!bF#^+> :s=G /;sv //~# y<wsww7wͥ+E; ;$*****************************************; ; ; ͥ+  62K CP/M Version 2.2 (Altair32, BIOS Version 1.3) $ Cannot find sector in register $NNNNNNNNͥ+E; ;$*****************************************; ; ; ͥ+ͥ+!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*ͥ+ͥ+:ʑw:2E**E}DQ>2g":ʑ*C6ͥ+ͥ+Eʨ#͜ͻLine *!'ͻ:  !;͜!ͫ "*#"͜!.# !Ȟͪ*P͏ͬ m&͜!̀˷ͥ+ͥ+!Eʪ$N Can't open !;>d#͜ͻ Decoding !;!ͫ %á%"e"gNP*g!Ŝ*e^#Vn&! ѷͥ+;$ ; ;*******************************************************************; ; ; ͥ+> 1Ͱ/͙!v Ò>:v>2v s:v<2vA>=ͥ+E;*******************************************************************;$*****************************************; ; ; ͥ+sڄ~ #„> !s w#ž@> ð :vxͰG:r_x_/<_y  :rw>ͥ+E; ;$*****************************************; ; ; ͥ+3Wwswwww34 @ @     ͥ+E; ;$*****************************************; ; ; ͥ+ͥ+E; READY FOR SYSGEN COMMAND ;$*****************************************; ; ; ͥ+ATIONS DONE ; ************************************************************** ; PRINT CARRIAGE RETURN AND LINE FEED ; ******ͥ+E; SYSGEN MEMORY IMAGE OF CP/M LOADED INTO PLACE ;$*****************************************; ; ; ͥ+JMP OUTCHK ;PRINT CHAR TO CONSOLE ; ************************************************************** ; BUILD 3/6 OCTAL DIGITSͥ+E; ;$*****************************************; ; ; ͥ+MVI B,3 ;SET DIGIT COUNTER OCTL: LXI H,0 ;CLEAR ALL 16 BITS OF HL REG AGN: CALL INCH ;GET CHAR FROM CONSOLE MOV C,A CPIͥ+E; ;$*****************************************; ; ; ͥ+RR ;NOT OCTAL SO LEAVE MOV A,C ;CONVERT ASCII TO BINARY ANI 007Q ;STRIP ASCII DAD H ;SHIFT HL LEFT 3 BITS DAD H DAͥ+E;*******************************************************************;$*****************************************; ; ; ͥ+ ICBIOS.COM$M$*****************************************************;$*****************************************; ; ; ͥ+;$*****************************************************************;$*****************************************; ; ; ͥ+ IBDOS.COM$$M$*****************************************************;$*****************************************; ; ; ͥ+ ERA BDOS.COM$$*****************************************************;$*****************************************; ; ; ͥ+ICCP.COM$$$M$*****************************************************;$*****************************************; ; ; ͥ+ ERA MOVER.COM$*****************************************************;$*****************************************; ; ; ͥ+ IMOVER.COM$M$*****************************************************;$*****************************************; ; ; ͥ+ͥ+E; ;$*****************************************; ; ; ͥ+******************************************************** CRLF: MVI A,015Q CALL OUTCHK ;PRINT CHAR TO CONSOLE MVI A,012Q ͥ+E; ;$*****************************************; ; ; ͥ+ IN HL ; ************************************************************** OCTL6: MVI B,6 ;SET DIGIT COUNTER JMP OCTL OCTL3: ͥ+E; ;$*****************************************; ; ; ͥ+ ' ' ;CHECK FOR SPACE CHAR STC RZ ;SPACE CHAR ENTERED SO QUIT ANI 270Q ;CHECK FOR VALID OCTAL DIGIT XRI 060Q JNZ Eͥ+E; ;$*****************************************; ; ; ͥ+R1E80$ER.COM$*****************************************************;$*****************************************; ; ; ͥ+;$*****************************************************************;$*****************************************; ; ; ͥ+R1080$COM$M$*****************************************************;$*****************************************; ; ; ͥ+ ERA CBIOS.COM$*****************************************************;$*****************************************; ; ; ͥ+R0880$OM$$M$*****************************************************;$*****************************************; ; ; ͥ+ ERA CCP.COM$$$*****************************************************;$*****************************************; ; ; ͥ+R0800$M$$$M$*****************************************************;$*****************************************; ; ; ͥ+G0$MOVER.COM$*****************************************************;$*****************************************; ; ; ͥ+ F100 2BFF 0$$*****************************************************;$*****************************************; ; ; ͥ+7]uu : «ʫ7_<2 !~ɯ2|\\FILE DUMP VERSION 1.4$ NO INPUT FILE PRESEͥ+; PUT PIECES TOGETHER$*********************************************;$*****************************************; ; ; ͥ+ ; ; SET UP STACK 0100 210000 LXI H,0 0103 39 DAD SP ; ENTRY STACKͥ+L80 B:CBIOS,A:CBIOS/N/E$*******************************************;$*****************************************; ; ; ͥ+7 314F02 LXI SP,STKTOP ; READ AND PRINT SUCCESSIVE BUFFERS 010A CDB901 CALL SETUP ;SET UP INPUT FILE ͥ+; CREATE CBIOS.COM$N/E$*******************************************;$*****************************************; ; ; ͥ+ ; FILE NOT THERE, GIVE ERROR MESSAGE AND RETURN 0112 11EB01 LXI D,OPNMSG 0115 CD9401 CALL ERR 0118 C34901 ͥ+L80 B:BDOS,A:BDOS/N/E$$*******************************************;$*****************************************; ; ; ͥ+M80 =B:MOVER/M$VER/N/E$*******************************************;$*****************************************; ; ; ͥ+; CREATE BDOS.COM$/E$$*******************************************;$*****************************************; ; ; ͥ+XSUB$TE MOVER.COM$N/E$*******************************************;$*****************************************; ; ; ͥ+L80 B:CCP,A:CCP/N/E$$$*******************************************;$*****************************************; ; ; ͥ+>; REQUIRED SOURCES ARE MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+; CREATE CCP.COM$E$$$*******************************************;$*****************************************; ; ; ͥ+; 1F80H - MITS ALTAIR BIOS$.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+!9" 1O͹͔I>2 !͚IG}<jQI#x͇> ]#j*  _> ]> ] ҁ0Ãͥ+DDT$2BFF 0$$*****************************************************;$*****************************************; ; ; ͥ+NT ON DISK$ͥ+ERA B:CBIOS.REL$THER$*********************************************;$*****************************************; ; ; ͥ+ POINTER IN HL FROM THE CCP 0104 220D02 SHLD OLDSP ; SET SP TO LOCAL STACK AREA (RESTORED AT FINIS) 010ͥ+M80 =B:CBIOS/M$IOS/N/E$*******************************************;$*****************************************; ; ; ͥ+ 010D FEFF CPI 255 ;255 IF FILE NOT PRESENT 010F C21B01 JNZ OPENOK ;SKIP IF OPEN IS OK ; ͥ+ERA B:BDOS.REL$OM$N/E$*******************************************;$*****************************************; ; ; ͥ+L80 B:MOVER,A:MOVER/N/E$*******************************************;$*****************************************; ; ; ͥ+ M80 =B:BDOS/M$OS/N/E$$*******************************************;$*****************************************; ; ; ͥ+; CREATE MOVER.COM$N/E$*******************************************;$*****************************************; ; ; ͥ+ ERA B:CCP.REL$OM$/E$$*******************************************;$*****************************************; ; ; ͥ+7; REQUIRED PROGRAMS: M80.COM, L80.COM, DDT.COM, ASM.COM$***********;$*****************************************; ; ; ͥ+ M80 =B:CCP/M$P/N/E$$$*******************************************;$*****************************************; ; ; ͥ+;$EQUIRED SOURCES ARE MOVER.MAC, CCP.MAC, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+ERA B:MOVER.REL$$E$$$*******************************************;$*****************************************; ; ; ͥ+; 1180H - STANDARD CP/M BDOS$AC, CCP.MAC, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+_͌> ͒> Ò> Ò͘~#͌ì _2<د2ͷͥ+'; 0900H - COLDBOOT/CP/M IMAGE RELOCATOR$, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+ҷĽ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!·ͥ+; LOCATION 0900H AS FOLLOWS:$RELOCATOR$, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" ͥ+;$HIS UTILITY LOADS A SYSGEN CP/M MEMORY IMAGE TO MEMORY STARTING AT$*****************************************; ; ; ͥ+Ҙ1͘A͌>>͌92^ :߷¥.!_~#fow]ݭގޥ!v"!çREAD ERRORçNO FILE^:߷·ͥ+! ~# y $# +$;ͥ+~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x ͥ+CALL PCHAR 0174 C9 RET ; ; PNIB: ;PRINT NIBBLE IN REG A 0175 E60Fͥ+ ݯw4!Y~ʆ͌†t=ʆf ^ T ݯ2o&)|+!<ͧͥ+C630 ADI '0' 017E C38301 JMP PRN ; ; GREATER OR EQUAL TO 10 0181 C637 P10: ͥ+҆FILE EXISTS _: É: :߷ʉ=2)ͽÉ T!@k!}|qͥ+ REG A 0187 F5 PUSH PSW 0188 0F RRC 0189 0F RRC 018A 0F RRC 018B 0F RRC 018Cͥ+ADCOMf^: !߶ Â$$$ SUBzͧÆBAD LOͥ+\X COPYRIGHT (C) 1979, DIGITAL RESEARCH ͥ+; 0980H - STANDARD CP/M CCP$$AC, CCP.MAC, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+ ه!߶2:2a{_:߷ʖ:߷>Ľʖ:=2–!B!6#5ʖ:߷ͥ+;$900H - COLDBOOT/CP/M IMAGE RELOCATOR$, BDOS.MAC, CBIOS.MAC$****;$*****************************************; ; ; ͥ+#͘*~ "ڷ"͌#>?͌͘ =_.:;<> Oڅo$>!Y2*O"ʉ@ͥ+E; THIS UTILITY LOADS A SYSGEN CP/M MEMORY IMAGE TO MEMORY STARTING AT$*****************************************; ; ; ͥ+#~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 3ۯ21y_͸2y2ͽ:ط·ͥ+ PCHAR: ;PRINT A CHARACTER 015D E5D5C5 PUSH H! PUSH D! PUSH B; SAVED 0160 0E02 MVI C,TYPEF 0162 5F ͥ+ ! ~ 3#0 Wx x ڀ ڂ G ~ # 3x~#B!Y~ɯ2:߷=!߾ý:߷=!߾:ý^T!߷ͥ+ ; CRLF: 016A 3E0D MVI A,CR 016C CD5D01 CALL PCHAR 016F 3E0A MVI A,LF 0171 CD5D01 ͥ+ ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇͥ+ ANI 0FH ;LOW 4 BITS 0177 FE0A CPI 10 0179 D28101 JNC P10 ; LESS THAN OR EQUAL TO 9 017C ͥ+ÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Y޸psp2mÆÆf ͧ÷ͥ+ADI 'A' - 10 0183 CD5D01 PRN: CALL PCHAR 0186 C9 RET ; PHEX: ;PRINT HEX CHAR INͥ+=qf^!~2>`~2߯2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOͥ+ CD7501 CALL PNIB ;PRINT NIBBLE 018F F1 POP PSW 0190 CD7501 CALL PNIB 0193 C9 RET ͥ+"C{2!"E9"1A22!ty)K!G_^#V*C~E ,ͥ+xʋ>ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# # ͥ+ O͐  :E B 2>: b# : y! 4 5~yy5 6yͥ+ì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ>ͥ+x: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nͥ+y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26ͥ+2E>! ^#V w#P:BO|^#V#"##"##"##"!ͷͥ+үi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{ͥ+yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^ͥ+!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*ͥ+ ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw*ͥ+:ʑw:2E**E}DQ>2g":ʑ*C6ͥ+"**#"͕: 2Þy<_WyOxOxG* ~V5dw^ :ʈͥ+3Wwswwww34 @ @     ͥ+::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# ͥ+ͥ+ *C ^OT *C~wD -'  -@ͦ~^*C Ox! N!Fwyͥ+&-AGMS!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6ͥ+ w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎͥ+Ґ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN# ʷͥ+2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E͊:==»ͥ+x: ! 2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#ͥ+2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄͥ+O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*ڷͥ+s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bw!>2*C~=2u:B2~2wE:A*Cw>"ͥ+"*}:*)=":O:o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*# ͥ+):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6ͥ+*{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~# :s=G /;sv //~# y<wsww7wͥ+NÎ N#Fyʝ*}|\#u*#DM*6# x±**s#r͡*6#6^>:A#~$=2Ek͌ҷͥ+  62K CP/M Version 2.2 (Altair32, BIOS Version 1.2) $ Cannot find sector in register $NNNNNNNNͥ+S:2E!~Яw>T D^6k-äPYy 5*{zBK522vs>2!"2!">G:n>2O$Os>ͥ+AT THE DRIVE IS NOT READY 030D CD2F03 CALL MSG 0310 FB EI ;ENABLE INTERRUPTS 0311 C30000 JMP WBOOT ;BACͥ+yy7!y2vo&))))Gy2ry2s n&i`"tͿ͙> v*t<Ϳ*tv<> !ͥ+ ; RESET SPECIFIED DRIVE/CONTROLLER SPECIFIED BY DRIVE 'DRVN' ;*******************************ͥ+:v_!bF#^+> :s=G /;sv //~# y<wsw6wuwͥ+OR R/W 0316 1F RAR ;SO WHEN CONTROLLER IS RESET WE DON'T CAUSE ANY 0317 DA1403 JC RSTDRV ;POTENTIAL SECTOR DAͥ+  62K CP/M Version 2.2 (Altair32, BIOS Version 1.2) $ Cannot find sector in register $NNNNNNNNͥ+ 031F D308 OUT SELOUT ;DO IT 0321 C9 RET ;********************************ͥ+ͥ+***************************************************************************** 0322 DB09 FNDSEC: IN SECPOS ;LOCATE CURRENͥ+ͥ+01FH ;MASK EVERYTHING BUT SECTOR NUMBER 032A B8 CMP B ;IS OUR SECTOR UNDER THE HEAD? 032B C22203 JNZ FNDSEC ;ͥ+ͥ+******************************** ; PRINT A MESSAGE TERMINATED WITH A '0' ; - TRASHES DE ͥ+ͥ+D ;GET BYTE OF MESSAGE BUFFER 0330 FE00 CPI 0 ;CHECK FOR STRING TERMINATOR 0332 C8 RZ ;Iͥ+PING OUT UNTIL AT TRK ZERO 0309 C9 RET ;SUCCESSFUL RETURN 030A 110906 ENABF: LXI D,DRFAIL ;LET THE USER KNOW THͥ+> 1Ͱ/͙!v Ò>:v>2v s:v<2vA>=ͥ+K TO CP/M ;**********************************************************************************ͥ+sڄ~ #„> !s w#ž@> ð :vxͰG:r_x_/<_y  :rw>ͥ+*************************************************** 0314 DB09 RSTDRV: IN SECPOS ;WAIT UNTIL SECTOR IS *NOT* POSITIONED Fͥ+3wsww3w3S @ @     ͥ+TA PROBLEMS! 031A 3A1F06 LDA DRVN ;RETRIEVE DRIVE NUMBER INTO A 031D F680 ORI 080H ;CLEAR DISK CONTROLLER MASKͥ+ͥ+************************************************** ; FIND SECTOR SELECTED BY REGISTER B ;*****ͥ+ͥ+T SECTOR ON DISK 0324 1F RAR 0325 DA2203 JC FNDSEC ;WAIT UNTIL SECTOR POSITIONED FOR R/W 0328 E61F ANI ͥ+ͥ+KEEP LOOKING IF NOT 032E C9 RET ;**************************************************ͥ+ͥ+ ;********************************************************************************** 032F 1A MSG: LDAX ͥ+ͥ+478FE20EC :10027000DA48020601CA4802DB091FDA7802DB0805 :10028000E602C27E023E01D3093A20063C32200635 :100290000600C341027ABCC07Bͥ+************************** ; MISCELLANEOUS DATA ;*********************************************ͥ+94E23DB08A2C2C80281D399 :1002D0000A7E231D4E23C81DD30AC2C802C9060ABE :1002E00005CA0A033A1F06D308DB08E608C2E00283 :1002F0003E04ͥ+32 DB '1.2' 037E 0D0A575249 DB CR,LF,'WRITTEN BY: SCOTT LaBOMBARD',CR,LF,CR,LF,0 03A0 454E544552SRCQ: ͥ+00008C9DB091FDA2203E61FB8C22203C91A73 :10033000FE00C8CD440313C32F03DB100FD23A03D2 :10034000DB11E67FF5DB100F0FD24503F1D311C9A6 ͥ+,0 0400 0D0A0D0A55EXIMG: DB CR,LF,CR,LF,'USING EXISTING SYSGEN CP/M MEMORY IMAGE AT 900H',0 ͥ+0D0A2F :100380005752495454454E2042593A2053434F54F2 :1003900054204C61424F4D424152440D0A0D0A0017 :1003A000454E54455220534F55524ͥ+4 20414E4420 DB ' AND PRESS ANY KEY WHEN READY ...',0 0476 0D0A0D0A46ILOAD: DB CR,LF,CR,LF,'FUNCTION COMPLETͥ+F TERMINATOR FOUND, RETURN 0333 CD4403 CALL OUTCHK ;ELSE PRINT CHARACTER 0336 13 INX D ;Pͥ+A5553494E472045584953544942 :100410004E472053595347454E2043502F4D204DB2 :10042000454D4F525920494D4147452041542039AF :10043000ͥ+******************************************************************** ; INPUT AND ECHO/PRINT CHARACTER TO THE COͥ+320414E59204B85 :100464004559205748454E205245414459202E2E87 :100474002E000D0A0D0A46554E4354494F4E204353 :100484004F4D504C4554ͥ+10 INCH: IN CONSTAT ;CHECK STATUS PORT 033C 0F RRC 033D D23A03 JNC INCH ;CHECK READ STATUS 0340 DB11 ͥ+22044455354494E4154494F4E20CB :1004C4004452495645204C45545445522028412015 :1004D400544F2048290D0A284F5220505245535357 :1004E4ͥ+ 0345 DB10 LOOP: IN CONSTAT ;CHECK STATUS PORT 0347 0F RRC 0348 0F RRC 0349 D24503 JNC LOOP ;ͥ+:1005140044293A20000D0A0D0A504C414345204419 :10052400455354494E4154494F4E204449534B205E :09053400494E204452495645206D :10053Eͥ+PED CHARACTER 034F C9 RET ;********************************************************ͥ+BDC9118680212003 :1002A00006CD2203DB08A2C2A402DB0A77231DC805 :1002B000DB0A77231DC2A402C9118601212006CDC5 :1002C00022033E80D30ͥ+************************************* 0350 4D49545320SIGNON: DB 'MITS ALTAIR CP/M2 SYSGEN UTILITY VERSION ' 037B 312Eͥ+D309C30203DB08E602C2F7023E0252 :10030000D309DB08E640C2F702C9110906CD2F0365 :10031000FBC30000DB091FDA14033A1F06F680D383 :10032ͥ+DB 'ENTER SOURCE DRIVE LETTER (A TO H)',CR,LF 03C4 284F522050 DB '(OR PRESS ENTER TO USE EXISTING SYSGEN CP/M MEMORY IMAGE): 'ͥ+ :100350004D49545320414C544149522043502F4D54 :10036000322053595347454E205554494C4954590E :1003700020202056455253494F4E20312E32ͥ+ 0434 0D0A0D0A SDISK: DB CR,LF,CR,LF 0438 504C414345 DB 'PLACE SOURCE DISK IN DRIVE ' 0453 SDRV: DS 001H 045ͥ+34520445249DF :1003B0005645204C455454455220284120544F2046 :1003C00048290D0A284F5220505245535320454E7C :1003D00054455220544F20ͥ+555345204558495354B5 :1003E000494E472053595347454E2043502F4D20E7 :1003F0004D454D4F525920494D414745293A20001E :100400000D0A0D0ͥ+OINT TO NEXT BYTE IN STRING 0337 C32F03 JMP MSG ;DO ANOTHER ;**************ͥ+303048000D0A0D0A504C41434520534FBF :1004400055524345204449534B20494E204452497C :03045000564520EE :1004540020414E4420505245535ͥ+NSOLE (MITS 2SIO) ;********************************************************************************** 033A DBͥ+450D0A43502F4D20494D76 :10049400414745204C4F4144454420544F2052414C :1004A4004D2041542039303048000D0A0D0A454E84 :1004B40054455ͥ+ IN CONDATA ;READ CHARACTER 0342 E67F ANI 07FH ;STRIP PARITY BIT 0344 F5 OUTCHK: PUSH PSW ;SAVE CHARACTERͥ+0020454E54455220544F20455849542041EC :1004F4004E442022534156452034312043504D5818 :10050400582E434F4D2220494620444553495245D5 ͥ+GET READ STATUS UNTIL READY 034C F1 POP PSW ;RESTORE CHARACTER TO PRINT 034D D311 OUT CONDATA ;PRINT USER TYͥ+E' 048B 0D0A43502F DB CR,LF,'CP/M IMAGE LOADED TO RAM AT 900H',0 04AE 0D0A0D0A45DESTQ: DB CR,LF,CR,LF,'ENTͥ+:10056E00524954452043502F4D20494D4147452077 :10057E004154203930304820544F204449534B0DBC :10058E000A505245535320414E59204B45592ͥ+,0 0519 0D0A0D0A DDISK: DB CR,LF,CR,LF 051D 504C414345 DB 'PLACE DESTINATION DISK IN DRIVE ' 053D ͥ+4D414745204D :1005CE005355434345535346554C4C59205341566E :1005DE00454420544F204449534B0D0A000D0A0D3B :1005EE000A494E56414C494ͥ+F,CR,LF,'READY TO WRITE CP/M IMAGE AT 900H TO DISK',CR,LF 058F 5052455353 DB 'PRESS ANY KEY TO CONINUE OR CTRL-C TO EXIT ... 'ͥ+000000000 ͥ+5EB 0D0A0D0A49BADDRV: DB CR,LF,CR,LF,'INVALID DRIVE SPECIFIED',CR,LF,0 0609 0D0A0D0A44DRFAIL: DB CR,LF,CR,LFͥ+RM BOOT ENTRY 04B8 CONST: DS 003H ;CONSOLE STATUS 04BB CONIN: DS 003H ;CONSOLE INPUT ͥ+ 0623 BUF: DS 00086H 06A9 DS 00020H 06C9 = STACK: EQU $ ͥ+>2 !,"! ! A# ž>͹x ڭʭ !,A/A=/2 ͕ͥ+C ;MOVE TO REG A TO CHK FOR MESSAGE END 049A FE24 CPI '$' ;ARE WE AT THE END OF THE MESSAGE? 049Cͥ+~> : <2 Az{! "¤ w# w#¤! "> N# ~#N#   :> >ͥ+ARACTER 04A0 23 INX H ;POINT OT THE NEXT BYTE OF THE MESSAGE 04A1 C39804 JMP MSG ͥ+WRITTEN BY: SCOTT LaBOMBARD ENTER SOURCE DRIVE LETTER (A TO H) (OR PRESS ENTER TO USE EXISTING SYSGEN CP/M MEMORY IMAGE): ͥ+ 04A5 23 INX H ;POINT TO NEXT BUFFER LOCATION 04A6 05 DCR B ;DECREMENT BUFFEͥ+ON COMPLETE CP/M IMAGE LOADED TO RAM AT 900H ENTER DESTINATION DRIVE LETTER (A TO H) (OR PRESS ENTER TO EXIT AND "SAVE 41 ͥ+0020414E4420505245535320414E59204B9A :10054E004559205748454E205245414459202E2E9C :10055E002E000D0A0D0A524541445920544F205782 ͥ+ER DESTINATION DRIVE LETTER (A TO H)',CR,LF 04DB 284F522050 DB '(OR PRESS ENTER TO EXIT AND "SAVE 41 CPMXX.COM" IF DESIRED): 'ͥ+05441 :10059E004F20434F4E494E5545204F522043545203 :1005AE004C2D4320544F2045584954202E2E2E209A :1005BE00000D0A0D0A43502F4D2049ͥ+ DDRV: DS 001H 053E 20414E4420 DB ' AND PRESS ANY KEY WHEN READY ...',0 0560 0D0A0D0A52WRITRY: DB CR,Lͥ+42044524956452053DF :1005FE0050454349464945440D0A000D0A0D0A442B :10060E0052495645204E4F542052454144590D0AE9 :01061E0000DB :0ͥ+,0 05BF 0D0A0D0A43DONE: DB CR,LF,CR,LF,'CP/M IMAGE SUCCESSFULLY SAVED TO DISK',CR,LF,0 0ͥ+ ;*************************************************************************** 04B5 WBOOT: DS 003H ;WAͥ+,'DRIVE NOT READY',CR,LF,0 061F DRVN: DS 001H 0620 ALTBUF: DS 00003Hͥ+1P//: M2S4/: !  !,v/S//: 2=/:`/:ͷͥ+ 06C9 END ͥ+ ͛!#~#͕x  1>  A!#wG# P6#p#q͹͕x HH xͥ+ C8 RZ ;RETURN IF WE ARE 049D CDBE04 CALL CONOUT ;ELSE PRINT THE CURRENT MESSAGE CHͥ+ @ / : ""D/:EMITS ALTAIR CP/M2 SYSGEN UTILITY VERSION 1.2 ͥ+ ;PRINT SOME MORE 04A4 71 FILBUF: MOV M,C ;MOVE FILL CHAR IN REG C TO CURRENT BUFF LOCATION ͥ+ USING EXISTING SYSGEN CP/M MEMORY IMAGE AT 900H PLACE SOURCE DISK IN DRIVE S AND PRESS ANY KEY WHEN READY ... FUNCTIͥ+R TOTAL BYTE COUNT 04A7 C2A404 JNZ FILBUF ;CONTINUE IF NOT ZERO 04AA C9 RET ͥ+CPMXX.COM" IF DESIRED): PLACE DESTINATION DISK IN DRIVE AND PRESS ANY KEY WHEN READY ... READY TO WRITE CP/M IMAGE ATͥ+!@ _W*@gN 8ä!nn : !! !nog";!Aw!Ew!Fw_W*gN !nn : !=w!Cw$*=gR?*=g_Wͥ+CIFIED DRIVE NOT READY ͥ+Ҁ*=g[WngN ?ڛ!=5*=gN Ҵ[=W*gN !nn : !=4*gR:*gN *gN !nn : !ͥ+ DB CR,LF,'WARNING: THIS COMMAND DESTROYS ALL DATA ON THE DISK!',CR,LF 05F8 5459504520 DB 'TYPE C TO CONTINUE, A Tͥ+?gN ڣ*>g*=gngs!>4!=4! ͠!! !!= *=gF _WN )_W*;N &*AgN *>gN !ͥ+READ ONLY) ***',CR,LF,LF,'$' 065E 0D0A424144BADSEC: DB CR,LF,'BAD SECTOR FOUND AT TRACK $' ͥ+*AgR?*AgR?گ;*Ags!A4*BgN / *BgN  *;<ͮ*; )) n!nͥ+:Binary copy a file from PTR. Usage: READ $ For SIMH. Copyright 2002 by Peter Schorn, peter.schorn@acm.org ͥ+ SUB=   n Z80 processor required. $MxMY|(b ѯ | Rb Mͷͥ+ar-02) SIMH Interface VXXX $Previous file of same name deleted. $No more directory space available. $File does not exist. $ͥ+! %(=  goRW_= DM(go%t <)ñ  !!? !!@ S*=gN ZI*>gN ZM*?gN ZH*@gN ڗ!! !! !! !ͥ+ 900H TO DISK PRESS ANY KEY TO CONINUE OR CTRL-C TO EXIT ... CP/M IMAGE SUCCESSFULLY SAVED TO DISK INVALID DRIVE SPEͥ+s!=4! ogG0*9R':*gN g*g}2=_W*=gR?^*=g#*=gngs!=5!6 !4[W*gN *g}2=ͥ+F,'*** SKIP FORMATTING THE SYSTEM BOOT TRACKS ***' 05BD 0D0A24 DB CR,LF,'$' 05C0 0D0A574152WARN: ͥ+=6A*gR#}2C!=6*Cg}2!>6!?w[=W*gRH *>gRک*=g.ngN n!=4!?6!͠*>gR҆*ͥ+O ABORT WITHOUT LOSS ...',CR,LF,LF,'$' 062B 0D0A0A2A2ACHKSEC: DB CR,LF,LF,'*** CHECKING FOR BAD SECTORS (ͥ+nn / &_W*AgN &!inn / À!!> ;*Ag[>Ws!A4*AgN }!Aw*BgN m/ }*BgN } ûͥ+ 067C 0D0A0A5445TSTDON: DB CR,LF,LF,'TEST RUN COMPLETE.',CR,LF 0693 494620414E DB 'IF ANY ERRORS WERE FOUNDͥ+*FgN / !!G*9N / !nn !! _W*DgN P !nh T =_ 6e 6>>x $$$ ͥ+ 4^W!R?j+6ng!)^WogR?ڜ+nf*54 4!9!9kB written. $ READ V-2.10 (30-Mͥ+s#r!ɯ (== <ɯ| <)gR*>g s!>4!9 !DS _W*DgN !n!! !ͥ+:Write a file to PTP (binary or text (default)). Usage: WRITE [B] $ For SIMH. Copyright 2002 by Peter Schorn,ͥ+! %(=  goRW_= DM(go%t <)ï >~$ͥ+͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(&ͥ+Ms#r!ɯ (== <ɯ| <)!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >ͥ+ҟ2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r!Ʒͥ+!gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lͥ+ *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):ͥ+*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:ͥ+)!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V"ͥ+>!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~!r *&**&Y i !6!4+4A :} :!ͥ+͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*)ͥ+:2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2ҷͥ+-:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)ŷͥ+ =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*ͥ+M!>))덑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͐ͥ+R" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_ͥ+j6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) ͥ+!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4ͥ+)6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%)ͥ+TZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqosͥ+)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!"ͥ+vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠"ͥ+)*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!ͥ+DM oͱ*DM ͱ*N#F ͱ * N#F ͱ͠!p+q͠*DM':͐ͫZ"!6> *} *Mͥ+!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)ͥ+4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2ͥ+ w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn ͥ+k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DMͷͥ+99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDͥ+ҫ#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐ͥ+mSU D ooqGͥ+=!+@=~vO#~ Q w#6 #wD̈́K>2<2@2>2-=ͥ+*PASS2+PHASE,PRINTX-RADIX5REQUEST.SALL2@2@͖ CCl CC0Cw#C!H= ʎ ~w# ͥ+m+'-@  F"  (85vCd} *F=~#"F= oA 0ͥ+ҷ$:==$U !=~4#>$Nwy#*F=+~# ʿ+U ~#~"RR *F=+"F=:(=k+s -"x-ʯ7Dͥ+# yʟ ͱ x җ x Gy2=xͱ җ × $.@?_// // &:? ͱ & 6 ͱ ͥ+#N1! ; !H="F=*C=|U :(=lÍ'!==Nwy#3!>">!> q#K6 U l;l:<—:>VʋMʋͥ+ #"?=#~+?j?!g?w#Ÿ w#s#rP P +>Ð <*A=~*@####~7#_"@:=$.?_ ;O$ ͥ+%No END statement:=.ʊ$ʒ[YTE3ALLSALL1Cj?CF1M/MA?MCMP2NC2NZOMMONOND1PQ PrPDsPDR2PE*PIrPIsPIRj/PL2POSEG1Z'AAj'AA ADBC"CRͥ+ͥ+N LOBALkvALTvLTF2FB9FDIFFEFF:FIDN3FNBFTaM)NQNRNC8NCLUDErNDsNDRrNIsNIR"NRNXF1F2FDEFFNDEFRͥ+ͥ+jOPQRRARG*RIsTDRsTIR*UTR UTsUTDsUTIAGECHLOPR"OP UBLICUSHS$USHALARC!EPTZ&ESETR(ETsMETIsEETN IMͥ+ͥ+ZUB#UBTTL*UI$ITLECHGR@ORRA*RITHL680807Z80%COMMENT&CREF'DEPHASE(LALL;LFCOND)LISTͥ+2<2<2=2<2?2=!= w#—<2(=2.=2/=2=> 2<:@2<:@2*=>;23=<22=!"4=+"@+"6=*'@!!62[?21=2+=29=2?<2)=?!H="ͥ+nyt&,''>(('()-((5*5,,))))))))h6f6(5C,~&+*A4**i7+9M+ +[9;7+U+\+!++))*+++,))d+h+ͥ+Žw:9==28=͖q:,=ʨNЯ2,=4OMگ!F> 2H=J> J7ò- !"C=20==2?*="=:H=*>$2H=$2E=U :ʋ:E=ͥ+ : 7}ɷ[ a { } 6 *F=+"F=*F=#"F= aS 6 != q#a !=6#ͱ  2<a wͥ+-"F=+ÿ:(=ʹ1 -"C=j # :µ@ U 6 :(= ʒ8 :(=l`k#~! _^#Vͥ+7 G!r?:=' " 2=~!?  "p?^#V!g? w#: !=~K 6!=N zʾ ^#V#^#V#~=y =G‹ #n #~=¸ͥ+DʋX2[?~+ACDEMNOPQRUVX!>~ p:>2>ɷͥ+"?=͓ *n?z :m?O s#rw# & =7 >wG#w"?=#w#w#w###w#I "A=####p*@͍ ;*?=|>!x F?Symbol ͥ+:<ĝ>LGÜ:<( c`ƝLp:<͜(@{ĝ>:L[ĝ:< Ü;c>6LKB(@{ٷͥ+~@w:<# ~a~a#^#V#͍ R*=xD{a#za:> *?=# :0=a*?=~*?=#~wxGõ>LyL@ ͥ+`))0) ‘0Ž:>:>6!6"6'6*#">ßG:>@2>:2>!ͥ+*ZOLyZ@*m-L6 ,ɷÝKN͝Ým-zf<ĝ{Y! ^#N! ^#ͥ+ G>>B#~Š:>@>§>2>>A;''2>{2>!>"?=ͩ:<*=##"=:>G:>@x̓:>G̓*>惷ͥ+:<<=<2<ů2< 6 (-22>:>x̓³z ĩ2>*>#~2>*>#>͍ +*>:@)0) 0ͥ+m-ë*ů2< 6 (2+2+>ÿ>+2+>:> ¿:.=:> :1=:,=>C2*>:[?:/=:> !3=4:2=p:[?:@>vL!>ͥ+:<=ĝ>L@ÜNܝ*e R:<fĝ[NܝcH:<(:<ĝ>LcNܝe ĝ>LcNܝ:< ĝ:<ĝ>ͥ+L!1>!*4=#|+:/=ʤ*6=#"6=:/=|ʾ>-vLZ!>ZZ>SvLä~#vLPX |>:d MACRO-80ͥ+< :<*cy  :<Ü:<Ü>%{ :L/:<L>FL;{N*c:ͥ+=x¦*=*=͍ "?="=ĩ:A> y> C+B+y*?=+~xGW> #######Fyxͥ+Gxĝ> Ü:<ĝ :<[4:<:<ʙԝ c:<ĝÜ([:>:> c:<̝ ڱ:>>> > > >!G) # ) o2=) # x) eo) n=ͥ+ĝ>L2*L>LyK͜c:<} :<^:<;͜{:<  s:<񇇇@OÜ ͥ+table full |}:<:@:-=*?=~@ڹ >>vL!=F#~vL *p?  G~8#~ +~w#~w#s#r#*=s#rͥ+(YPy:<O:<ĝ>LyWÜ!>?AFwx# 3:<G:<7b*=#"='h'*>'>͍ +*>:@ʷͥ+Z6LZ@LZRLZRLyZOLyym-LZRO*ZRv̝LZRͥ+>~ͯ~@ô~ʹ#~?Gxʚ#~72>>A;hS#^#V"=G̓2>#^#V">>C1#^#V+~z><2>=ͥ+VZԝBxL{?LZ8ĝBLNܝc:<Ü̓ :>H:<0:<Ü>L:< L>2<ͥ+#">C'B'x&x746!96**>##~#fo6"6'##">̓xP:>@xʈ:C+B+x*=++*>#:=G~w#s#r#ͥ+ĝH>LKҫ:<ԝ Om-ͷyHLyL:>G¯BxGj*=*=͍ j##T9zC<xxͥ+">DExx0:(:*=G:)=G:(=N:/=S:> ~:> o:@L{Nԝ:<ĝc:<=ĝNԝc>LcnAÜNԝcn [:<ĝ>Lĝ;{ͥ+ ~#d:+=Z:?=##:?#!9=~#06d(>C:8=H> d!H=~# Z dK> d> dO:[?yvLJ>23=:/=ʍ> vͥ+LZԝO*k7:<(>Lں{:<̝ :<Lcĝ>L[/k:<̝"(:ͥ+ 3.44 09-Dec-81 PAGE :> Q)*<#"<*<#" !>">O!f ~*>w!>"> '"!*=:=*=:=:ͥ+<ʴ ĝ:<ĝ>LyBONĝe ̝c:<ĝ5N*c:<ʴ(:<ĝ â:<Nܝe ̝c:<̝ͥ+G+#W>_xGxGFɯFxGF .7FxFx!>~w#4ZL>2>U C \ \'"(ʬͥ+ʡ>LyC͜(2>2>:<(>"LÒ:<ĝ>2LÒ:< :< ĝ:< `ƝL͜ĝc:<ͥ+=x*F=+H 2=*F=++"F=H "F=GHg:<o|DHB} |BwDʕHʝOdQ•ͼOqQ þ!H Bʷͥ+ o%͙%{_zo%7o%?o%:W?L&*>*>\W:W?O>%*>]W:W?O>:>@2>!>4~?%o%$w5y%:>2>̈́$}R_ɷͥ+4!H 00 ܻO:<=ܻ<_Pc$ =ͥ=ͼ6 q6 :=2=ҿ=$ ʿ!  ʿo#g=b#t!ͥ+,̓ x 2=xGʱ&:=±&*=*=͍ :=G*="=:<ă"= :=&:<ĩ:\?2':\?ȯ2\?U 2'1>G2=<2\?2ͥ+ʮ:<7͓ $ !*@w!7 Gx22>">ĩ:<>C~@x##^#VOQb#^#V"=y y¾þ7͓ "?=~ͥ+ͩ2=1 6 "ʠ''(G) ) *F=++' ) '³' ʳ'6 ,';'' "F=(y(# G) ) 'L) ͥ+$¿j OþXOR AND NOT MOD SHL SHR OR EQ NE LT LE GT GE LOW HIGHNUL TYPE :< :<:U<2>1h'̓ y,(:<=)G2<:<=)2<ͥ+ 6 ,8!:>8!2>> ß!:W?O:>O!f! "x̓!G:W?O`!"f!ó _y{y!*=YGŷͥ+)zP))z/P)P):<@ =P):<@ P)7:(=)U $ )) )P)?P):(=(! "F=P)72*)"F=x))72*)ͥ+ |= yWx=z6"z6"ʳ 6"6"6" >G̓!Gó "Y?zR" ͪ""=">y2W?͎!"ʡ"2X?ʋ"ʋ"ʋ"ͥ+ҚG:> U Oĝ7 -#~@w ~ĵwy,ʉ*1>O*>; *F=+~# ****#"F= () 'O*6 ͥ+   P#Z#d#n###N$$%##Q%\%h%u%{%%%%#%&&&-&C&c&̈́$zW{_̈́$zW{_̈́$zW{_*>|/W}/_:W?O>·ͥ+Y+>22<(2 {=ʝҝ<2 +{22=+?pU :=+>!ͥ+>G$:W?%$%$y%$$$:W?%$ ?$=:W?9$y9$2>:W?O>%%{_zW*>i$:W?O> %%i$ DM!>=ʂ$))p$÷ͥ+ҷµw#„,p, /U ,/@ #~µ~$w2'+"=>2=!"=ñ&>2=:=U - -~w#~d -~wͥ+g=$|g}oɯO_yW*>z5%|5%|ͳ$%:W?O> %%>O!G͙%͍ o%͙%͍ ?o%͙%͍ W_ ͙%È%͙%͍ͥ+q0Ի)z#zͥDnHn!H 0)T]))_è!H 0Ի)))_ÿ!H G0 ))))_Hû:<·ͥ+̈́$}R_̈́$}@_̈́$}6_̈́$}Ro{R_̈́$}?_*=*=͍ :W?_ :> Ox&> 2>Էͥ+S ~Œ2< ;ʹ ʹ° & × °6 þ*F= # #7 -#~G ĵxw+!"F=$ t:<ͥ+=*=õ&2'1>2\?G2=*=õ&2'1>2\?G2=*=õ&:\?,:==`'o& ^#V*=͍ s#r2=*=##K':<ʇ':=ʇ'*= ͥ+Bڨ~8:<2<##~2  þ:=X # '¿ 'nͥ+ ȸ'# ( ,ʍ'LÍ'Z:=y,ʍ'̓ x1 "N('ĝO) d( o(GŷLP(xx|(L,ʷͥ+ ɯG og2>2>2=2<2>2>2>2<2<9">*)@͍ 4\!]!~!! f!O2>̓!=y "" "?"y2W?͎!W!<7~?)<\)w!<4:(=2(=!?"y2W?͎!!F%:W?Of!è!@ 2W?:W?G2>O! x怱!>w*F=+N{*>2>zͥ+~,**#"F=2*-*"F=y))# *)) <ĝ# R* # &R* :**F=+#~>b*T],l*zr* Y*#*F=z̝}O|ͥ+ʋ"ʋ"ͪ":X?*Y?!#o>g~#fo:W?O*Y?ʶ"y}!"=y%"*="""*>"{%z%ͥ+) )ĝ@ >2/=Y+2/=Y+2-=Y+U G+ G+ $ :+~@w,U ,+>2-=>2.=Y+2.=@ >2.=Y+}+>}+:@/o:|/W}/_:W?O>%%̈́$zʬ#)â#̈́$#+}zW{_ò#*>:W?y#:W?O2>:W? #*="=*>͔$>%%*ʷͥ+=w#"?=:<ĩ,+:,= *F=+qN1,4O=2,=*F=~#"F=!5, () 'U ') )@ :<:=x,>=!]?G~ͥ+p$:W? *>:W?y*>ͳ$:W?O> %%zzB%|G|$|%$%|/G}/O!>$ $7>{_zW}o|ͥ+,,͝-w͵,~Bدw#w#w#wU ~#~>-,"C=m-:>21=Ux¯x 20=*C="?= x4̓ :>"C=~w|ͥ+#~>P)!ɷ/"@i2O:> ʰ5*@͊0y6+,ĝ5) <ĝw+:> G6G5͌2 D6>G65# <2@ 5 ʷͥ+ -!V?p#"?=ͩ2'!5O"@ A."?=~w#~@k/~.#^#Vͩ.*= ͩ *={ĩn*F=ԃ +!"4="6=}2/=p!/!3=4ͥ+H0ʱ6 ʶ1;ʫ1'ʡ6"ʡ6>1Ç6G͕0 ʶ1ʛ6â6"%@;:͞:!*#@* @*?!!64>2@" @͍ 7:@6x 7* @ͥ+!_//ʹ//̓ͩ*>|,/F/ͩ+:@C/>vLKLNo Fatal error(s) Warning(s):=Gͩ./!//ͥ+ u77\4^4!H=: @O~ʥ7 #Ù7!ɷ #"?~(w/"@i2 ,7w+2@2@0"?%O;.0~<=r0:@<2@:@:@=2@<#~^0:@^0ͥ+#r*@͊0!7͓ /6+6" @+͌2G 6 8;8,ʥ8x ʥ8 å8##^#V͈:8886+ 86+.0͈:*@O "ͥ++~10:@*@~<1=11O+11 #1x+~111<*F=U 0w1G~# \1 d10P1x0G0&06 "F= ͥ+9"=:=2=@ !!@Ns#Frͦ9ͯ9q#p*@^#V+*@##^#V+*!@}9ͯ9"!@9*@ "@*)@͍ I;*?%:?͍ I;*@T9ͦ9ͥ+I2* @~82G+#2~/_2~F2=G+~F23*2+<=C2+;2~>.33?*@O DEU Ă2=:f3)0R3>)30R3=363D>3E>3 >0f3xG3x0:R3 f30O:f3>0f3y*{3w+"{36 *{32Ow+ͥ+@ "@xʕ; w#È;2>2>O!^#V#ͷ; ;:>Zz^#V{;};++V+^{;w#w+++; F#"?=~@#~<~#^#Vŷͥ+  4>1!4r ?Stack overflow, try more P switches (:> O4"?/c4> \^4U :U H0ʄ4H=;: ͥ+*>M>C>UvL2<*?=#{G#^#V#^#V"=̓"?=#~ ĩ>IvL!>">*>6!>~G#^#Vͩͥ+@"@ bkë4:?2@+5ů2@@ :@ʊ5U :U O^5yf5y n5y@{5:@=2@:@<2@:@:<(:@ͥ+21=m-x¯*C=-#~µ~@ w#s#r#*=s#r4͸K:?w/:<Ĩ/!<4~=Z.!]?~-!1>~-!@#]?~# . .. .ͥ+=6:@6G6 ;,76<36>76G67676 w+5:@G66+.0xĝ" @&i"?m6\4>Ô5^4*%@>2@3ͷͥ+4!r?>͗;Z:3=8p!3=44!/!?>͗;Zʹ/*<|.:@<2[?2[?.!L//!O//*<|/>,vL:@<>,J:@<2[?2[?ͥ+##~#7+4r:47H=r:1:3 7* @4 bk6 ʝOJ) V7JG7> J> J:> @ ʝ2 @O ʄ7@ͥ+)ô/REPT/IRP/IRPC/MACROUnterminated /!//)> Z> Z:@<> J> J!/:@&2?>1&0:?0>&;:2?*@~ 1=1O+1 0xɷͥ+@* @!94" @"@2@r:I9H=r:1:3 +9*@* @4* @#2@4}_|W:=̓ :> 2=xx2=*=Tͥ+ ʐ1 ʐ16 Ö10}1ͱ k1å1ͱ k10ß1 ;1ù1:0 ʞ: ù1:: 1 1:"%@ʞ: ʞ:> ;:Þ::@1*@4ͥ+*%@{_{:s#r#>w#wͯ9%:s#r*:"#@*#@ͦ9s#r{_*%@{̺9*@w{W:a:"%@{_ͯ9zʺ9*@}‚:}ͥ+ ;Ý+ '}3"}3<ʛ3>ʦ3%2,ʰ3 ʰ3 ʰ3;ʰ3!) 3w+ Ô2"{3q3(:> 63:<.33PX 2ͥ+*@*?:?;*)@%T9o zo W{_*@*@T9BK*@"@xE;+w 8;"@O;9*A=*@T9o zo W{_*@T9BK*@*A="ͥ+ ʏ3 3~3w+ ~3Ô2ʢ3w+22322{=*F=+~ 6 6 ʵ3õ3!=͍ 3#6 +>1&3:>1!зͥ+G5<<_<{…<{@Đ<{ʈ<{_!f~vLz<###~#vL;<>L<5m<:>wZ!3=4:2=p*?=~@w> |<> vL>ͥ+y4ɯ;:͞:!*#@*?!!44͍ 4:@¾4x4*?͔9͊02@*?r:5H=͈:3 4*@*@*?"?"ͥ+ͥ+ͥ+ͥ+?Command error?File not found?Can't enter file~J#F!FF!FF!FFXGCOMSCNͥ+ͥ+<2@2@Fů2@H8AH-A §G>2@!@͸H> 2-A25A2,Ay,2@G:@2@H>A:@G;AH-A:,A2@ 2@G:@@2@!@ͷͥ+QAQBQCQDQEQHQLQMbSPcPSWQIQR bBCbDEbHLbAFjIXDjIYdrNZqZrNCqPrPOrPEͥ+̈́K%K;K*@##:@2@G,A ~²HHw# ¨H #èH w#»H:@!5A~ Hw#H*J:7>IxHJOx=y&I[ͥ+RELCRFPRNͥ+y.2@*J5AxژIʥIJÙIy/yJL¾I2@JOæINI2@÷IOI2@÷IRI2@÷ICI2@2@÷IMI2@÷IIJ2@ͥ+ͥ+@JK>*J GF> J:HF!IF"Fo>g6 #> w:@J!IF~ JaJJAw#þJ~# J J K#"F_ɷͥ+ͥ+!"EDGD!@~KsK w#ªKw@KGD:@ʰH:@ vL> vL>vL*Cͥ+ͥ+@¡M =­L!CA>!@íL:@ʰH:@J*AA|=L#"AABAѷͥ+ͥ+ͥ+Pͥ+ͥ+F",AF =IHܘH:@hH:@hH:@2@ _2ͥ+ͥ+A@2,A*Jx I -AoIJIT?IJT7JY7ILYIJS7JT7>IR7JD7R7>I> ڀI6 #=xIͥ+ͥ+÷IXJ>2@÷IZJ2@÷IP7:@<2@÷IJ[HJ0HJADJ:HJ-JO!~6GzJ#~ cJUJHFx+#tJ~iJ2@ÚJ2@:ͥ+ͥ+*F+~ #KJ#"F+~7ȷ> J> JEB!"CB!@:@NKCA!"AA!@:@K~K͡KL*AACA@NLCA@K|}YLƀ)`iíL> vL> vL> vL:@ʰH:ͥ+ͥ+w:@<KM*ED|%M#"EDFDKGD>@=NM!=*M!>JM_!@ sM qM vL~ͥ+s#r! s#rͅ ڬ! s#r!; s#ry ! ~#fo! ѵ! ͷͥ+!M:>·ͥ+ʌҖ)o>gdy +%Overlaying areaDataProgramÔ!! ~#fo!ͅ ͅ ͥ+MM0O!M"M>2M*M~+O70O#"M0ͥ+ʆ!; Not Found> P> P>2 g 28: _<2 !~g ! w#! ͥ+ͥ+Ҋ6 #=ƒ* ! ͮ 2X * ~O_+++y++:XK͔:c2c *Q>[P"N!C \* s#r!I ͷͥ+*+"S" " " " go"Q"`2 2!2!2X2Z2]2^2c2_2\2W!*" " " " "=";!" " " " 2 2 !" ?No Staͥ+wM M" z _z! ^#V   $ 2 = ] m `i ^+V! 4* M ! 4Ð ! 5 PY\  s #r lͥ+ ~ 4!>2 2Y:c2c ,/MEG@RSUXYE{ O :Ù&O†ͥ+K}o|g҄ : ʫ ͅ ҫ | >]P͔: : $>2*Q"!o&'  d   >0Gͥ+:f ~w:f 2Yæ2Y*`|##yȷ#jC~@#I" #ͬ*`|#*U~ !:Y:c~ G@x kͥ+2A! ?Start symbol - - undefinedg  ~#³ ͞ REL7*`}2X:c` j: j͔ ͷͥ+G #~ ex+#<~: /͔>*P d> P:e!fo>g6 7ʌʌ  y:+y#P2\2f gͥ+O~>-ʑ > >/P+^+V+~P ™ /PN~ ʼ !ÿ "~ N+^+V>>PN:b?2b̔>wt :bȯ2b÷ͥ+z6#z: O4ͅ {Ҏ!y yBKO!; s#r! ͥ+zMËM7ȷ!MF@@²M> J!MFKDISK FULLͥ+}_|W>2 * * <* * : <ͅ P* * W{_* #" " "=:WGO0ڗ xڗ)))Җͥ+ҌN@Nw#2@.ʷN!ڷNw#N2@.ʾN!ҥNþN6 #·N:@.Nw#NpMMN2M2M:M=Oͥ+ͅ &}< = yy7yM7>,>#ͅ !M> _!h >?P~#P!yk!:!ͥ+ͥ+wO |!y:!(͔*QDMÙ&[Begin execution]:Z:X* * ͅ ~`~¨@w+++o>GO ~+t>ʷͥ+ͥ+   \! ~# != = = \* ͅ = *ͅ = s#r"N2 * * ͅ ʐ ʅ 2 M\: z x/Gy/O~w#~ͥ+rt Address?Loading Error?Nothing Loaded?Out of memory?Illegal Polish Exp:!‡!!!2!!!2*S!ͥ+g   # |/g}/o   DM!>= ))K K z zi  Bͥ+2WHO2WG:c2c:'>`͇Ax¹'"U _2:f Ğ2U!c~wͥ+ /}o|g x0   > xPH>G~#' j~@+^+V$MEMRY$$PROG$COMNM*QA!Hw#] j{ ~@{ +^+V"Q! ͷͥ+ o Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft ?Command Error~P#~#  `{ +!~ͥ+p @p ͔`p p p * } , >wk  :`? !K * !b  Undefined Global(s) Bytes Free 2bP  ~ͥ+ !  :\GO: " " " " * * " ";* * BK* * "=2 G<2 ͥ+Ҕk [ M  ~++GOŸ& H+D ; & yE >  * [ S } 7~k ~~r <</_*ʷͥ+ " * * BK* * " " " "; ~w#~wPYb>̈́BKj~@: ~@w+~_q+U: =>Cw+p+q+r+sA! зͥ+}G[h%> h%> h%:WG)0P) 60P3|L}U[P0:͔! ~#foN"ͥ+r#sA: ›|A\zA#U: =ʯ>Bw+r+s+r+sA*`#"`!7~#46+wxG ɯ2 7ͥ+ҭ 2 2 : go" " " 2X" <2 : * * * * *=͝QiEZͿE! ~#foBK#: =ʝ: ”* |ͥ+F 2[: ʚ2[AC( r>-: " *=>2 * ͅ A*=>j+^+V\"?Aͥ+:7>[?@2g ԇx " h 5)> F6 #=>x2f y.̇p xanbʃ!p ~ ƒ6R#6Eͥ+O©H©A+++¨+—~ y/O oHOx_Ow#2 +w+w+w+ w+w+ͥ+>@w+r+s+@1: 2 r+sA: =* >jV/o/g ڮA~@w:]2^s+++~ s2^q+p:^O!;ͥ+|‡}ʠ~_|!^#V* " (M\~#+ j~@wA7U: >8: =->G: =7>@wͥ+j~+ܾU6+6++r+sA*K:J2 fU: ;: =>@w+6++r+sA:!A>.2!2P* !J͞!g2!+}2_! ͥ+! p#”* ! N#F#~#fo! ^#V  ! ~#foͅ H! {_{_~H! ^q#Vp! ͥ+e?No code can be loaded before program withcommon runtime not found, please create header file?End of file on common runtime ͥ+ ͞* ͅ ҙ" ! yڬ! ^#V ڻ F#fh! ^#V ^#Vy! ^ͥ+* " ͅ " " ";" " ͅ 7* * * ͅ ]!* * * BK* * * * *ͥ+ Å |}! 6S#6Y#6M<$>* * ͅ ~O~@ +^+V > h%+~h% > h%= >~ <</O ß ͑&%|ͥ+͔A%Mult. Def. Global ~@*`+"`PYb>̈́BKůj~+nN+F@‡: ›:B(b: =›zAA;|A: ›ͥ+N"N>>PÔRQUESTͬæ* : * ͅ ~_~@+++~#* BK" ö+++ö2!2ͥ+Y!HYH!Hw74#6 _Gw#;!T"7O<2 XP̊wwO!9 N#ͥ+ҒʊҔ}Ҕ͝p#: ”* |ʲҔ·}ҔÔ: =: Uw+p+q+p+q#Bi++s" ͇ͥ+b: =#<2 =A: A*= APY7* K" !*="=* !" }2 <2 A:[* * |G}ʼ~ͥ+#6Ly[ҥ0ڥAҡ:ҥÊ[ʡ]ʡ@ʡ\ʡ^ʡ_ʡOb: : 2 BK|A~_q#Vp\AU: =ͥ+" 7ɩ))'):B($: ̈́: r2 * * DM* " *= "=* BK" " " " * " Ͷ'* ͥ+>2 }|!; s#rͅ y A!>/P͔A~W+++~P+%2nd COMMON Larger /*;" |2 * ͅ ͥ+r+sM~O@wy@+Ns+Fr{~2f M* :f w+r+s+p+q+" ~+V+^+F+N+* e@ DM!`i"N*=ͷͥ+BCHK:Jʯʯ U6+wAU: : =>@w+w++1: 2 : : =r+sA!HIF5#wͥ+>>><2Z=O! $! ^#V0y=Uy?\ͅ ?\|y! i! us#rx^#Vͥ͞+w#!ڐ ‚! \" " : :Z!ګ!  w#! ¸+w2!͞A!!?/D illegal with common runtimͥ+~s#_~rW}&: $#qͅ {_! 6)`i{ڠ! #Yš* * 6* " * * "ͥ+header!aǗzʣ̈́"Qb! ^#V! ͪ!;ͪyک: * * ͅ * " * '* * * BKͥ+#V^#V! s#r Gyx! @s#r#1xS|W}_x2 * 2 yoxg* "ͥ+ %%"%yO#"%!%\%.%fh%¹%! ~+ x :_*Q:_*Q\!%?Can'ͥ+ +x~+ xw+ : 7={O>: 7J?Intersecting wO* ͥͅ+*Q >>h%!*'͞'!0'͞'!3'͞'!9'͞'##²&##͞'##¿&#͞'!z'͞'!'͞'* "'* "'* "'* "'* "ͥ+ҳ " Start = External Public = %*ͥ+w# |'xw# Ó'~#fo&'q#p:B(* ͅ ~'M(:J2A(*;" 2 U6+:A(wAMzͥ+ͥ+_҅(zʞ()Å(ͣ) *)!.*ʹ)!.*V#^(((!((ʹ)(z(!.*ʹ)(ͣ)z{7.ͥ+"!2Z!:Z?!͙!͙! y-!* * ͅ #* " ͅ |!*Sͅ ͥ+)!O))ͣ)!a))ͣ)!l).***‹)*—).**%R%: Ă% <%>h%*Q}h%|h%سȯh%zG%%z~#h%\%!: _w{<%2 ͥ+Ҷ *="=*?PYͅ ڙ"?: ʹ=¯* !" * * ͅ үï͝*={OzG* * DM7xw# ͥ+t save object file{{ _zW;&> A&{ H&O>:h%y Y~# c&+&>:h%Gͥ+ <26: ?Oʣ: Jͅ Jͅ J!M>,P*6&0M^#Vy!HF#~#P>(P>)P:ͥ+'* "'&'m&'͓','V'G'V'l'|'V'l'|'V'l'|'!' N#F#^#V#~#fo|} +x~+ q'xͥ+ͥ+(2A(7(:B((*;" :A(2B(*;r#s+:A(i(*;͢(" 2A(2B(!* p# P(!HN#*~# ^(Ar#s *){ʅ({ƀͥ+ͥ+*z w#)0:ww:*!;) )+ )!1)?Segment , file not foundcan't create fileread errorDisk is full)!@)÷ͥ+"yb!*Sͅ "ͅ ڵ!*Sͅ ڮ!!!ù!!!!!!!2 YxbelowaboveOrigin loader memory, mͥ+*<ʂ)2*!* )+ )##2*w# '*ͥ+ͅ ҇"!9;;;;;;ͅ "ͅ ڣ"z"&'7"ڿ"""ͅ #ͅ #"z"7ѷͥ+ͥ+ *=BK* *="=#PY* " * " Ø#* *=#BK* * " * * " " *=" *;" ͥ+ͥ+c~ʌ$ ~$:\ʲ$: µ$*Q\" " &yO: &w&%*Q|$ͅ $%ͅ $ͅ $.%>%7Ԓ%R%:ͥ+B505D411C :10057500525449414C2C205B545D4553542C205B0F :10058500515D5549540D0A240D0A2A2A2A20534B38 :10059500495020464F524D4154ͥ+ 06EC 50524F4345TRKST: DB 'PROCESSING TRACK# $' 06FF 0D0A455252TRKERR: DB CR,LF,'ERROR OCCURRED ͥ+05448495320434F4D4D41DB :1005D5004E442044455354524F595320414C4C20CE :1005E50044415441204F4E20544845204449534BE3 :1005F500210Dͥ+'BAD SECTOR - SUGGEST FORMATTING OR',CR,LF 0749 4449534341 DB 'DISCARDING THIS DISKETTE ...',CR,LF,'$' ͥ+5002E2E0D0A0A240D0A0A2A2A2A2043484595 :10063500434B494E4720464F5220424144205345A3 :1006450043544F5253202852454144204F4E4C5954 ͥ+ON: DB CR,LF,'NO ERRORS FOUND ON THIS DISKETTE',CR,LF,'$' 07B4 0D0A0D0A53SPTMS: DB CR,LF,CR,LF,'SECTOͥ+20521D :10068500554E20434F4D504C4554452E0D0A494675 :1006950020414E59204552524F52532057455245FD :1006A50020464F554E442C20594F5ͥ+4FBPDMS: DB CR,LF,'BLOCKS PER DISK: $' 07F8 0D0A524553RTKMS: DB CR,LF,'RESERVED TRACKS: $' ͥ+4420464F524D415420E7 :1006E50049542E0D0A0A2450524F43455353494E3F :1006F5004720545241434B2320240D0A4552524F63 :1007050052204F4ͥ+ 0826 0D0A24 CRLF: DB CR,LF,'$' 0829 BUFF: DS 00CH ;BUFFER Fͥ+4745535420464F524D415454494E472046 :100745004F520D0A44495343415244494E472054A0 :10075500484953204449534B45545445202E2E2E89 :1ͥ+ ATRANS: DS 002H ;SECTOR TRANSLATION TABLE ADDR (FROM FROM DPH ABOVE) 0839 DPBAD: DS 002H ͥ+5F7 :1007950052524F525320464F554E44204F4E2054EF :1007A500484953204449534B455454450D0A240D9B :1007B5000A0D0A534543544F52532050ͥ+OVE) 083C TPD: DS 001H ;TRACKS PER DISK 083D SPB: DS 001H ;SECTORS PER BLOCK 083ͥ+2204449534B3A20DC :1007F5002020240D0A524553455256454420545253 :1008050041434B533A202020240D0A545241434B77 :100815005320504552ͥ+ 0841 DMA1: DS 080H ;DMA BUFFER ONE 08C1 DMA2: DS 080H ;DMA BUFFERͥ+, YOU SHOULD COPY',CR,LF 06BE 414C4C2046 DB 'ALL FILES FROM THE DISKETTE AND FORMAT IT.',CR,LF,LF,'$' ͥ+54494E47205448E6 :1005A500452053595354454D20424F4F54205452E2 :1005B50041434B53202A2A2A0D0A240D0A5741523A :1005C5004E494E473A2ͥ+ON TRACK $' 071A 2053454354SECST: DB ' SECTOR $' 0723 0D0A424144SECERR: DB CR,LF,ͥ+0A54595045204320544F20434F4E56 :1006050054494E55452C204120544F2041424F52CC :100615005420574954484F5554204C4F5353202E7E :10062ͥ+ 0768 0D0A494E49FMTDON: DB CR,LF,'INIT DONE - NOW VERIFYING DISKETTE',CR,LF,'$' 078F 0D0A4E4F20VFYDͥ+ :1006550029202A2A2A0D0A0A240D0A424144205338 :100665004543544F5220464F554E44204154205443 :100675005241434B2020240D0A0A54455354ͥ+RS PER TRACK: $' 07CC 0D0A534543SPBMS: DB CR,LF,'SECTORS PER BLOCK: $' 07E2 0D0A424Cͥ+52053484F5501 :1006B5004C4420434F50590D0A414C4C2046494C5F :1006C50045532046524F4D20544845204449534BED :1006D5004554544520414Eͥ+ 080E 0D0A545241TPDMS: DB CR,LF,'TRACKS PER DISK: $' 0824 0D24 CRM: DB CR,'$'ͥ+3435552524544204F4E20545298 :1007150041434B202420534543544F5220240D0A76 :1007250042414420534543544F52202D20535547B1 :10073500ͥ+OR USER INPUT 0835 DPHEAD: DS 002H ;DISK PARAMETER HEADER ADDRESS FOR SPECIFIED DRV 0837ͥ+00765000D0A240D0A494E495420444F4E45202D6B :10077500204E4F5720564552494659494E47204429 :1007850049534B455454450D0A240D0A4E4F204ͥ+ ;DISK PARAMETER BLOCK ADDRESS (FROM DPH ABOVE) 083B SPT: DS 001H ;STORED WITH SEC PER TRACK (FROM DPB ABͥ+4552205475 :1007C5005241434B3A20240D0A534543544F52534B :1007D5002050455220424C4F434B3A20240D0A42AB :1007E5004C4F434B532050455ͥ+E BPD: DS 002H ;BLOCKS PER DISK 0840 RTRK: DS 001H ;RESERVED TRACKS ͥ+204449534B3A202020240D63 :04082500240D0A2470 :0000000000 ͥ+ TWO 0941 DRVN: DS 001H ;TRACKS CURRENT DRIVE NUMBER 0942 CURTRK: DS 001Hͥ+ST, [Q]UIT $ *** SKIP FORMATTING THE SYSTEM BOOT TRACKS *** $ WARNING: THIS COMMAND DESTROYS ALL DATA ON THE DISK! TYPE C Tͥ+FLAG TO INDICATE PARTIAL FORMAT 0945 TMP1: DS 001H ;TEMP VARS FOR 'TRACKS PER DISK' CALCͥ+EST RUN COMPLETE. IF ANY ERRORS WERE FOUND, YOU SHOULD COPY ALL FILES FROM THE DISKETTE AND FORMAT IT. $PROCESSING TRACK# $ ͥ+ DS 040H ;ALLOCATE SOME SPACE FOR THE STACK 0988 = STACK: EQU $ 0988 ͥ+ING DISKETTE $ NO ERRORS FOUND ON THIS DISKETTE $ SECTORS PER TRACK: $ SECTORS PER BLOCK: $ BLOCKS PER DISK: $ RESERVͥ+ TRACKS 07D1 DMA1: DS 080H ;DMA BUFFER ONE 0851 DMA2: Dͥ+;GET START ADDRESS F25D EB XCHG ;MOVE START ADDR TO DE F25E CD4BF6 CALL SPACE F261 CD69F6 CALL GHEX4 ;Gͥ+1 *~#~#~# !͘>2D !͘) :+A"=2A O|T}T""5~27#~28#~29#~2:!͘*92;o&ͷͥ+DDRESSES OKAY F26A 11F5F6 LXI D,AERR ;ELSE INDICATE ADDRESS ERROR F26D C335F6 JMP EMSG ;AND EXIT F270 1B ͥ+D"F5P*T]Q"!K͘Oõ!͘>2D !͘ͻC:D >O>2B >2C !Aͤ:B OOA6ͷͥ+ CURR ADDR IS > END, EXIT IF SO F277 DA14F0 JC ENTER ;EXIT IF CURRENT > END ADDRESS F27A 7C MOV A,H ;COMPARE Mͥ+2C :B <2B >!͘:B &o!$͘!͘&:B o!͘&:C o!#͘!+͘>2B <2C :B OOͥ+T WITH END LSB F280 BB CMP E F281 CA14F0 JZ ENTER F284 E5 VCONT: PUSH H ;RESTORE SPECIFIED END ADDRESSͥ+|2F 2E zoW|_g>:E 2>o>g:F _W{J!T]7MD!>2G yOxG}o|g}o|g?m33:G =Ryoxgͥ+ DCX D ;POINT TO LAST ACTUALLY PROCESSED F28D E1 POP H ;RESTORE SPECIFIED END ADDRESS F28E C374F2 JMP VLOOͥ+TE INITIALIZER *** $ DISK DRIVE (A-H) OR CTRL-C TO EXIT? $ COMMAND: $ VALID COMMANDS ARE: [D]ISK, [F]ULL, [P]ARTIAL, [T]Eͥ+ ;TRACKS CURRENT TRACK 0943 CURSEC: DS 001H ;TRACKS CURRENT SECTOR 0944 PFLAG: DS 001H ;ͥ+O CONTINUE, A TO ABORT WITHOUT LOSS ... $ *** CHECKING FOR BAD SECTORS (READ ONLY) *** $ BAD SECTOR FOUND AT TRACK $ Tͥ+ULATION SR'S 0946 TMP2: DS 001H 0947 TMP3: DS 001H 0948 ͥ+ ERROR OCCURRED ON TRACK $ SECTOR $ BAD SECTOR - SUGGEST FORMATTING OR DISCARDING THIS DISKETTE ... $ INIT DONE - NOW VERIFYͥ+END ͥ+ED TRACKS: $ TRACKS PER DISK: $ $ $ͥ+S 080H ;DMA BUFFER TWO 08D1 DRVN: DS 001H ;TRACKS CURRENT DRIVE NUMBER 08D2 ͥ+ET END ADDRESS IN HL F264 CD19F6 CALL ENDCHK ;CHECK IF START ADDR IS > END ADDR F267 D270F2 JNC VL1 ;CONTINUE IF Aͥ+!͘*9###<2=o&!͘##^#V">!͘#~2@o&!͘*>*=&:;_:@_#}2<!=͘) :+ͥ+VL1: DCX D ;ADJUST FOR VCONT CALL (WILL INX DE BACK) F271 C384F2 JMP VCONT F274 CD19F6 VLOOP: CALL ENDCHK ;CHECK IFͥ+d!h͘:D >™>2B >2C !Aͤ:B OO6!Aͫ6®!͘:;O :<G:C <2C >ͥ+SB OF CURRENT WITH END MSB F27B BA CMP D F27C C284F2 JNZ VCONT F27F 7D MOV A,L ;COMPARE LSB OF CURRENͥ+ěo!|͘!^͘&:B o!͘&:C o!&͘PX |>:GH;MD!> ))= ͥ+ F285 13 INX D ;POINT TO NEXT INSTR TO PROCESS F286 CD50F6 CALL CRLF F289 CD91F2 CALL DINST F28C 1B ͥ+:C =O*7!}Ny$;#Øq#¤# «o!&͘PX |>:GH; *** ALTAIR CP/M2 DISKETͥ+P ;DO SOME MORE ; ************************************************************************ ͥ+ MORE ; Space over to instruction address F2D6 CD4BF6 SPLP: CALL SPACE ;PRINT A SPACE F2D9 25 Dͥ+**************** F291 D5 DINST: PUSH D ;SAVE CURRENT ADDRESS F292 7A MOV A,D ;GET MSB BYTE OF ADDRESS F29ͥ+ LDAX B ;GET CHAR FROM TABLE F2E0 A7 ANA A ;IS THIS THE END OF STRING? F2E1 CAF8F2 JZ VOUT1 ;IF YES, EXIT Fͥ+BF6 CALL SPACE ;PRINT A SPACE F29D CD1EF3 CALL LOOK ;LOOKUP THE INSTRUCTION F2A0 E603 ANI 003H ;SAVE INSTRUͥ+E9 FE20 CPI ' ' ;END OF NAME? F2EB C2DFF2 JNZ VLP3 ;NO, KEEP GOING ; Fill in name field with spacͥ+I B,004H ;4 SPACES TOTAL F2A6 4F MOV C,A ;SAVE COUNT F2A7 1B DCX D ;BACKUP ADDRESS ; Disͥ+SPACE F2F5 C3EEF2 JMP VOUT ;DO ANOTHER ; Output operands for the instruction F2F8 F1 VOUT1: POPͥ+ HPR ;PRINT IN HEX F2AD CD4BF6 CALL SPACE F2B0 05 DCR B ;DECREMENT COUNT F2B1 0D DCR C ;DECREMENTͥ+ JZ T1 ;YES, PROCESS IT ; Type 2 - One byte immediate date F2FE F5 T2: PUSH PSW ;SAVE TYPE F2FFͥ+CE ;PRINT A SPACE F2B8 CD4BF6 CALL SPACE ;AND ANOTHER F2BB CD4BF6 CALL SPACE ;AND ANOTHER F2BE 05 DCR Bͥ+05 3D DCR A ;IS IT TYPE2? F306 C210F3 JNZ T3 ;NO, TRY NEXT F309 13 INX D ;ADVANCE TO DATA F30A 1A ͥ+ POP B ;RESTORE TABLE ADDRESS F2C3 F1 POP PSW ;RESTORE TYPE/LENGTH F2C4 D1 POP D ;RESTORE INSTRUCTION ͥ+INX D F30F C9 RET ; Type 3 - Two bytes immediate data F310 13 T3: INX D ;SKIP TO LSB F311ͥ+ ;8 SPACES/FIELD F2C9 E60F ANI 00FH ;SAVE ONLY LENGTH F2CB 6F MOV L,A ;SAVE FOR LATER USE F2CC 1A Pͥ+BACKUP TO LSB F317 1A LDAX D ;GET LSB F318 CD1EF6 CALL HPR ;PRINT IT F31B 13 INX D ;INCREMENT TO MSͥ+ DCR H ;DECREMENT FIELD COUNT F2D2 2D DCR L ;DECREMENT OPCODE COUNT F2D3 C2CCF2 JNZ PCHR ;KEEP GOING IFͥ+ ; DISPLAY A DISASSEMBLED INSTRUCTION ; ********************************************************ͥ+CR H ;DECREMENT COUNT F2DA C2D6F2 JNZ SPLP ;MORE TO GO F2DD 1606 MVI D,006H ;FIELD WIDTH F2DF 0A VLP3:ͥ+3 CD1EF6 CALL HPR ;PRINT IT F296 7B MOV A,E ;GET LSB OF ADDRESS F297 CD1EF6 CALL HPR ;PRINT IT F29A CD4ͥ+2E4 CDBCF6 CALL OUTCHK ;IF NO, PRINT IT F2E7 03 INX B ;NEXT COUNT F2E8 15 DCR D ;DECREMENT COUNT F2ͥ+CTION LENGTH F2A2 F5 PUSH PSW ;SAVE LENGTH F2A3 E5 PUSH H ;SAVE INST ADDRESS IN TABLE F2A4 0604 MVͥ+es F2EE 15 VOUT: DCR D ;DECREMENT COUNT F2EF CADFF2 JZ VLP3 ;MORE TO GO F2F2 CD4BF6 CALL SPACE ;PRINT A ͥ+play the opcode bytes in HEX F2A8 13 VLP1: INX D ;DO NEXT F2A9 1A LDAX D ;GET OPCODE F2AA CD1EF6 CALLͥ+ PSW ;RESTORE TYPE F2F9 D1 POP D ;RESTORE INSTRUCTION ADDRESS F2FA 3D DCR A ;IS IT TYPE1? F2FB CA0EF3 ͥ+ COUNT OF OPCODES F2B2 C2A8F2 JNZ VLP1 ;MORE TO GO ; Fill in to boundary F2B5 CD4BF6 VLP2: CALL SPAͥ+ 3E24 MVI A,'$' ;GET HEX INDICATER F301 CDBCF6 CALL OUTCHK ;PRINT IT F304 F1 POP PSW ;RESTORE TYPE F3ͥ+ ;DECREMENT COUNT F2BF C2B5F2 JNZ VLP2 ;MORE TO GO ; Display ASCII equivalent of opcodes F2C2 C1 ͥ+ LDAX D ;GET DATA F30B CD1EF6 CALL HPR ;OUTPUT IN HEX ; Type 1 - No operand F30E 13 T1: ͥ+ADDR F2C5 D5 PUSH D ;SAVE FOR LATER USE F2C6 F5 PUSH PSW ;SAVE FOR LATER USE F2C7 2608 MVI H,008H ͥ+ 13 INX D ;SKIP TO MSB F312 1A LDAX D ;GET MSB F313 CD1EF6 CALL HPR ;PRINT F316 1B DCX D ;ͥ+CHR: LDAX D ;GET BYTE FROM OPCODE F2CD 13 INX D ;NEXT F2CE CD5AF6 CALL OUTP ;DISPLAY IF PRINTABLE F2D1 25 ͥ+B F31C 13 INX D F31D C9 RET ; *******************************************ͥ+6F13DC210F3131ACD1EF613C97D :10F3100013131ACD1EF61B1ACD1EF61313C9D51AD8 :10F32000472190F378A623BE23CA35F37E23A7C2D4 :10F33000ͥ+ ************************************************************************ F31E D5 LOOK: PUSH D ;SAVE DE F31F 1A ͥ+0F3600064C26BF3780F0F0FC371F3FE73C284F3A3 :10F3700078E607E521C8F6856F7EFE53C283F31257 :10F38000133E50E11213A7C23AF32180BF79D1Cͥ+324 78 LOOK1: MOV A,B ;GET OPCODE F325 A6 ANA M ;MASK F326 23 INX H ;SKIP MASK F327 BE Cͥ+01505553F1 :10F3C000482050535700FFF101504F5020505357E1 :10F3D00000FF270144414100FF7601484C5400FFE3 :10F3E000FB01454900FFF3014ͥ+s wasn't it, advance to the next F32C 7E LOOK2: MOV A,M ;GET BYTE F32D 23 INX H ;ADVANCE TO NEXT F32E A7 ͥ+484C00FFE9015043484C00AC :10F42000FFDB02494E2000FFD3024F55542000FF5E :10F430000701524C4300FF0F0152524300FF1701D6 :10F44000524ͥ+ ; We found the instruction, copy over the text description F335 4E LOOK3: MOV C,M ;SAVE TYPE F336 23 ͥ+ JMP LOOK9 ;AND DO THE NEXT ; Insert destination register name F35F FE64 LOOK6: CPI 'd' ;SET DESTINATͥ+ F33B 23 INX H ;NEXT ; Insert a RESTART vector number F33C FE76 CPI 'v' ;RESTART VECTOR F3ͥ+HT IN LSB F366 0F RRC F367 0F RRC F368 C371F3 JMP LOOK8 ;AND PROCEED TO NEXT ; Inserͥ+ F343 0F RRC F344 0F RRC F345 E607 ANI 007H ;REMOVE TRASH F347 C630 ADI '0' ;CONVERT TO DIGIͥ+ MOV A,B ;GET OPCODE ; Lookup a general processor register F371 E607 LOOK8: ANI 007H ;SAVE ONLͥ+I 'p' ;IS THIS A REGISTER PAIR? F34E C25FF3 JNZ LOOK6 ;NO, SO TRY NEXT F351 78 MOV A,B ;GET OPCDOE F352 0F ͥ+table F377 85 LOOK9: ADD L ;OFFSET TO VALUE F378 6F MOV L,A ;RESAVE ADDRESS F379 7E MOV A,M ;GETͥ+4BF625C2D6F216060A83 :10F2E000A7CAF8F2CDBCF60315FE20C2DFF215CA9C :10F2F000DFF2CD4BF6C3EEF2F1D13DCA0EF3F53E8F :10F3000024CDBCFͥ+***************************** ; LOOKUP INSTRUCTION IN TABLE TYPE/LEN IN A, CODE STRING IN HL ;ͥ+2CF3C324F34E231180BF7E23FE76C24CF0 :10F34000F3780F0F0FE607C630C384F3FE70C25F79 :10F35000F3780F0F0F0FE603E521D0F6C377F3FE26 :1ͥ+ LDAX D ;GET OPCODE F320 47 MOV B,A ;SAVE FOR LATER USE F321 2190F3 LXI H,ITABLE ;POINT TO LOOKUP TABLE Fͥ+9CD :10F39000FFFE024350492000FF3A034C4441200045 :10F3A000FF32035354412000FF2A034C484C4420B1 :10F3B00000FF220353484C442000FFF5ͥ+MP M ;DOES IT MATCH? F328 23 INX H ;SKIP OPCODE F329 CA35F3 JZ LOOK3 ;YES, WE FOUND IT ; Thiͥ+44900FF3701535435 :10F3F0004300FF3F01434D4300FF2F01434D4100B8 :10F40000FFEB015843484700FFE3015854484C00C4 :10F41000FFF9015350ͥ+ ANA A ;END OF STRING YET? F32F C22CF3 JNZ LOOK2 ;NO, SO KEEP LOOKING F332 C324F3 JMP LOOK1 ;NEXT ͥ+ ANI 003H ;SAVE ONLY RP F358 E5 PUSH H ;SAVE HL F359 21D0F6 LXI H,RPTAB ;POINT TO PAIR TABLE F35C C377F3 ͥ+ INX H ;SKIP TYPE F337 1180BF LXI D,BUFFER ;POINT TO TEXT BUFFER F33A 7E LOOK4: MOV A,M ;GET CHAR FROM SOURCE ͥ+ION? F361 C26BF3 JNZ LOOK7 ;NO, SO TRY THE NEXT F364 78 MOV A,B ;GET OPCODE F365 0F RRC ;SHIFT RIGͥ+3E C24CF3 JNZ LOOK5 ;NO, SO IT'S OKAY F341 78 MOV A,B ;GET OPCODE F342 0F RRC ;SHIFT IT TO LOW LSB ͥ+t source register name F36B FE73 LOOK7: CPI 's' ;SOURCE REGISTER? F36D C284F3 JNZ LOOK10 ;NO, IT'S OKAY F370 78ͥ+T F349 C384F3 JMP LOOK10 ;AND SET THE CHARACTER ; Insert a register pair name F34C FE70 LOOK5: CPͥ+Y SOURCE F373 E5 PUSH H ;SAVE HL F374 21C8F6 LXI H,RTAB ;POINT TO TABLE ; Lookup register in ͥ+ RRC ;SHIFT RIGHT TO LSB FOR LOOKUP F353 0F RRC F354 0F RRC F355 0F RRC F356 E603 ͥ+ CHARACTER INTO ACC F37A FE53 CPI 'S' ;ADD 'P' IF STACK POINTER F37C C283F3 JNZ LK9 F37F 12 STAX D ;SAͥ+ FFE901 DB 0FFH,0E9H,001H F41B 5043484C00 DB 'PCHL',000H F420 FFDB02 DB 0FFH,0DBH,002H F423 494E2000 DB 'IN ',00ͥ+RESTORE HL REGISTER ; Save character in destination string F384 12 LOOK10: STAX D ;SAVE VALUE F385 ͥ+ 'RLC',000H F436 FF0F01 DB 0FFH,00FH,001H F439 52524300 DB 'RRC',000H F43D FF1701 DB 0FFH,017H,001H F440 52414ͥ+ ; End of LIST F38A 2180BF LXI H,BUFFER ;POINTER TO DESCRIPTION F38D 79 MOV A,C ;GET THE LENGTHͥ+4E 4144492000 DB 'ADI ',000H F453 FFCE02 DB 0FFH,0CEH,002H F456 4143492000 DB 'ACI ',000H F45B FFD602 DB 0FFH,0D6Hͥ+************************************************** ; OPCODE DISASSEMBLY TABLE: MASK, OPCODE, TYPE/LENGTH, STRINͥ+ 0FFH,0E6H,002H F46E 414E492000 DB 'ANI ',000H F473 FFF602 DB 0FFH,0F6H,002H F476 4F52492000 DB 'ORI ',000H F47B FFEͥ+FEH,002H F393 4350492000 DB 'CPI ',000H F398 FF3A03 DB 0FFH,03AH,003H F39B 4C44412000 DB 'LDA ',000H F3A0 FF3203 ͥ+ ; 8085 specific instructions ; DB 0FFH,020H,001H ; DB 'RIM',000H ͥ+ FF2203 DB 0FFH,022H,003H F3B4 53484C4420 DB 'SHLD ',000H F3BA FFF501 DB 0FFH,0F5H,001H F3BD 5055534820 DB 'PUSH Pͥ+H,00BH F48D 4A4D502000 DB 'JMP ',000H F492 FFCA43 DB 0FFH,0CAH,043H F495 4A5A2000 DB 'JZ ',000H F499 FFC24B DBͥ+4100 DB 'DAA',000H F3D8 FF7601 DB 0FFH,076H,001H F3DB 484C5400 DB 'HLT',000H F3DF FFFB01 DB 0FFH,0FBH,001H Fͥ+1B DB 0FFH,0D2H,01BH F4AB 4A4E432000 DB 'JNC ',000H F4B0 FFEA23 DB 0FFH,0EAH,023H F4B3 4A50452000 DB 'JPE ',000H ͥ+1H F3EE 53544300 DB 'STC',000H F3F2 FF3F01 DB 0FFH,03FH,001H F3F5 434D4300 DB 'CMC',000H F3F9 FF2F01 DB 0FFHͥ+ ',000H F4C7 FFF28B DB 0FFH,0F2H,08BH F4CA 4A502000 DB 'JP ',000H F4CE FFCD0B DB 0FFH,0CDH,00BH F4D1 43414C4C2ͥ+ DB 0FFH,0E3H,001H F40B 5854484C00 DB 'XTHL',000H F410 FFF901 DB 0FFH,0F9H,001H F413 5350484C00 DB 'SPHL',000H F418ͥ+VE THE 'S' F380 13 INX D F381 3E50 MVI A,'P' ;LOAD 'P' FOR NEXT SAVE TO BUFFER F383 E1 LK9: POP H ;ͥ+0H F427 FFD302 DB 0FFH,0D3H,002H F42A 4F55542000 DB 'OUT ',000H F42F FF0701 DB 0FFH,007H,001H F432 524C4300 DBͥ+13 INX D ;ADVANCE TO NEXT ONE F386 A7 ANA A ;END OF LIST? F387 C23AF3 JNZ LOOK4 ;NO, SO KEEP COPYING ͥ+C00 DB 'RAL',000H F444 FF1F01 DB 0FFH,01FH,001H F447 52415200 DB 'RAR',000H F44B FFC602 DB 0FFH,0C6H,002H F4ͥ+ F38E D1 POP D ;RESTORE DE REGISTER F38F C9 RET ; **********************ͥ+,002H F45E 5355492000 DB 'SUI ',000H F463 FFDE02 DB 0FFH,0DEH,002H F466 5342492000 DB 'SBI ',000H F46B FFE602 DBͥ+G ; ************************************************************************ F390 FFFE02 ITABLE: DB 0FFH,0ͥ+E02 DB 0FFH,0EEH,002H F47E 5852492000 DB 'XRI ',000H F483 FF0001 DB 0FFH,000H,001H F486 4E4F5000 DB 'NOP',000H ͥ+ DB 0FFH,032H,003H F3A3 5354412000 DB 'STA ',000H F3A8 FF2A03 DB 0FFH,02AH,003H F3AB 4C484C4420 DB 'LHLD ',000H F3B1ͥ+ ; DB 0FFH,030H,001H ; DB 'SIM',000H ; Jumps, Calls & Returns F48A FFC30B DB 0FFH,0C3ͥ+SW',000H F3C6 FFF101 DB 0FFH,0F1H,001H F3C9 504F502050 DB 'POP PSW',000H F3D1 FF2701 DB 0FFH,027H,001H F3D4 4441ͥ+ 0FFH,0C2H,04BH F49C 4A4E5A2000 DB 'JNZ ',000H F4A1 FFDA13 DB 0FFH,0DAH,013H F4A4 4A432000 DB 'JC ',000H F4A8 FFD2ͥ+3E2 454900 DB 'EI',000H F3E5 FFF301 DB 0FFH,0F3H,001H F3E8 444900 DB 'DI',000H F3EB FF3701 DB 0FFH,037H,00ͥ+ F4B8 FFE22B DB 0FFH,0E2H,02BH F4BB 4A504F2000 DB 'JPO ',000H F4C0 FFFA83 DB 0FFH,0FAH,083H F4C3 4A4D2000 DB 'JMͥ+,02FH,001H F3FC 434D4100 DB 'CMA',000H F400 FFEB01 DB 0FFH,0EBH,001H F403 5843484700 DB 'XCHG',000H F408 FFE301 ͥ+0 DB 'CALL ',000H F4D7 FFCC43 DB 0FFH,0CCH,043H F4DA 435A2000 DB 'CZ ',000H F4DE FFC44B DB 0FFH,0C4H,04BH F4E1ͥ+7000492000FFF6024F52492000FFEE02585289 :10F48000492000FF00014E4F5000FFC30B4A4D5072 :10F490002000FFCA434A5A2000FFC24B4A4E5A205Eͥ+BH F4F0 434E432000 DB 'CNC ',000H F4F5 FFEC23 DB 0FFH,0ECH,023H F4F8 4350452000 DB 'CPE ',000H F4FD FFE42B DB 0Fͥ+0FFCD07 :10F4D0000B43414C4C2000FFCC43435A2000FFC457 :10F4E0004B434E5A2000FFDC1343432000FFD41B44 :10F4F000434E432000FFEC234350ͥ+ DB 0FFH,0F4H,08BH F50F 43502000 DB 'CP ',000H F513 FFC905 DB 0FFH,0C9H,005H F516 52455400 DB 'RET',000H F51Aͥ+0FFD815524300FFD01D68 :10F53000524E4300FFE82552504500FFE02D525047 :10F540004F00FFF885524D00FFF08D525000C04033 :10F55000014D4Fͥ+ F527 FFD815 DB 0FFH,0D8H,015H F52A 524300 DB 'RC',000H F52D FFD01D DB 0FFH,0D0H,01DH F530 524E4300 DB 'RNͥ+001414443207300F8A001414E4120730023 :10F59000F8B0014F5241207300F8A80158524120A1 :10F5A0007300F8B801434D50207300C70401494E61 :ͥ+W Extended Submit Vers 2.0Xsub Already Present$Requires CP/M Version 2.0 or later$:y*###ƒ# yk ͥ+5000 DB 'RP',000H ; Register based instructions F54E C04001 DB 0C0H,040H,001H F551 4D4F562064 DB 'Mͥ+ ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7*ͥ+355422073 DB 'SUB s',000H F56C F89801 DB 0F8H,098H,001H F56F 5342422073 DB 'SBB s',000H F575 F88001 DB 0F8H,080H,0ͥ+2% ͋*-"*$$$ SUBq:(=2(N *$*& w*$#"$*&#"&' !"N*M^7 !)6:!)ھ *N*DM͆ ÷ͥ+ 0F8H,0A0H,001H F58A 414E412073 DB 'ANA s',000H F590 F8B001 DB 0F8H,0B0H,001H F593 4F52412073 DB 'ORA s',000H F599 Fͥ+ͥ+00H F5AB C70401 DB 0C7H,004H,001H F5AE 494E522064 DB 'INR d',000H F5B4 C70501 DB 0C7H,005H,001H F5B7 4443522064 ͥ+14C00FF1F0152415200FFC60241448D :10F45000492000FFCE024143492000FFD602535508 :10F46000492000FFDE025342492000FFE602414EE0 :10F4ͥ+ 434E5A2000 DB 'CNZ ',000H F4E6 FFDC13 DB 0FFH,0DCH,013H F4E9 43432000 DB 'CC ',000H F4ED FFD41B DB 0FFH,0D4H,01ͥ+ :10F4A00000FFDA134A432000FFD21B4A4E432000DC :10F4B000FFEA234A50452000FFE22B4A504F20002C :10F4C000FFFA834A4D2000FFF28B4A50200ͥ+FH,0E4H,02BH F500 43504F2000 DB 'CPO ',000H F505 FFFC83 DB 0FFH,0FCH,083H F508 434D2000 DB 'CM ',000H F50C FFF48B ͥ+452000FFE42B04 :10F5000043504F2000FFFC83434D2000FFF48B430A :10F51000502000FFC90552455400FFC845525A000B :10F52000FFC04D524E5A0ͥ+ FFC845 DB 0FFH,0C8H,045H F51D 525A00 DB 'RZ',000H F520 FFC04D DB 0FFH,0C0H,04DH F523 524E5A00 DB 'RNZ',000Hͥ+5620642C7300C706024D564920BA :10F56000642C00F89001535542207300F898015321 :10F570004242207300F88001414444207300F8881F :10F5800ͥ+C',000H F534 FFE825 DB 0FFH,0E8H,025H F537 52504500 DB 'RPE',000H F53B FFE02D DB 0FFH,0E0H,02DH F53E 52504F00 ͥ+ DB 'RPO',000H F542 FFF885 DB 0FFH,0F8H,085H F545 524D00 DB 'RM',000H F548 FFF08D DB 0FFH,0F0H,08DH F54B 52ͥ+  җ 4!~=ŐW!xʵ ~#èbx {~#o}où.xsubb!np+q*m2_!pp+q*oͥ+OV d,s',000H F559 C70602 DB 0C7H,006H,002H F55C 4D56492064 DB 'MVI d,',000H F563 F89001 DB 0F8H,090H,001H F566 5ͥ+**x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6=ͥ+01H F578 4144442073 DB 'ADD s',000H F57E F88801 DB 0F8H,088H,001H F581 4144432073 DB 'ADC s',000H F587 F8A001 DBͥ+2*ʭ :*ʗ ͯ *N"P*6:2)÷ *N"N!) $@BA$! A "!$""ͥ+8A801 DB 0F8H,0A8H,001H F59C 5852412073 DB 'XRA s',000H F5A2 F8B801 DB 0F8H,0B8H,001H F5A5 434D502073 DB 'CMP s',0ͥ+ͥ+DB 'DCR d',000H ; Register pair instructions F5BD CF0103 DB 0CFH,001H,003H F5C0 4C58492070 DB 'LXI p,',ͥ+i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!ppJ,ͥ+0 DB 'STAX p',000H F5DB CF0301 DB 0CFH,003H,001H F5DE 494E582070 DB 'INX p',000H F5E4 CF0B01 DB 0CFH,00BH,001H Fͥ+=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷͥ+C5H,001H F5F9 5055534820 DB 'PUSH p',000H F600 CFC101 DB 0CFH,0C1H,001H F603 504F502070 DB 'POP p',000H ͥ+!ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷͷͥ+ays matches invalid opcodes F612 000001 DB 000H,000H,001H F615 44422000 DB 'DB ',000H ͥ+C–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# ͥ+1 *~#~#~# !͘>2J !͘/ :1A"=2G O|T}T"";~2=#~2>#~2?#~2@!͘*?2Ao&ͷͥ+@* ͡. ;ͣW!E# ¡ # ¬# ·@ʴʥzʖ=ʐ=|zJz?4)z zͥ+D"F5P*T]Q"!E͘Oõ!͘>2J !͘ͻC:J >O>2H >2I !Gͤ:H OOG6ͷͥ+;,!Ù!;qz8O! !;,z;qyO! ͣͣW_͕qyO! ͣ͒qyͥ+2I :H <2H >!͘:H &o!*͘!͘&:H o! ͘&:I o!)͘!1͘>2H <2I :H OOͥ+T HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB ANͥ+|2L 2K zoW|_g>:K 2>o>g:L _W{J!T]7MD!>2M yOxG}o|g}o|g?m33:M =Ryoxgͥ+âê ö  - Ð f  "J*"!"!"2O!" "]""!1!++""M>28!"9:] !í 1ͥ+=COPYRIGHT (C) 1980, DIGITAL RESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃ͥ+000H F5C7 EF0A01 DB 0EFH,00AH,001H F5CA 4C44415820 DB 'LDAX p',000H F5D1 EF0201 DB 0EFH,002H,001H F5D4 535441582ͥ+ÃO$*sy͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͥ͘+5E7 4443582070 DB 'DCX p',000H F5ED CF0901 DB 0CFH,009H,001H F5F0 4441442070 DB 'DAD p',000H F5F6 CFC501 DB 0CFH,0ͥ+ y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P ͥ+ ; Restart instruction F609 C7C701 DB 0C7H,0C7H,001H F60C 5253542076 DB 'RST v',000H ; This entry alwͥ+͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËͥ+ ; ************************************************************************ ; CHECK IF CURRͥ+z8O!B N#N ¾SP.* |} !9":q!"™>2H >2I !Gͤ:H OO6!Gͫ6®!͘:AO :BG:I <2I >ͥ+O!b q!vz͒q.?*!9"8"͉Z*" +*'/7?v"*2:EI SPHLDI XCHGPCHLXTHLREͥ+ěo!͘!d͘&:H o! ͘&:I o!,͘PX |>:GH;MD!> ))= ͥ+A XRA ORA CMP INR DCR MVI LXI STAXINX DAD LDAXDCX RST PSW POP PUSHNZZ NCC POPEP M B C D E H L M A B D H SP PSW ??= M!Eͥ+:I =O*=!}Ny$;#Øq#¤# «o!,͘PX |>:GH; *** ALTAIR DISKETTE INIͥ+͓ !" >- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓ͥ͢+ :2:2ͳ:_³ͯ !6! @!!BH @@ABH B! "BHI$$BI$BI $ HI ͥ+a. ~ #E }"]*a 6 *]}#|#*]E ͐ « f f f {zA|« W}d ͐ f f fͥ+$I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A"ͥ+ 2|2\  !]w# ʫ .&  0 6 #& .K !e K w# ʫ : U 6 #K 6AW w#] !e~H#~E#~Xͥ+$I$I$UUU$$A$ ͥ+ҷ `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #N  *. *.  NEXT PC͐ =«ͥ+ͥ+ ë «   Ͷ ͐ =« f xY |« }ҫ gA>S Ag}S S i |« }!w s#r:[ʔ ͥ+ ͥ+7   > >  ͢| } @ >. *_}o| , 0 ë ^#V#!Y ))))o P ͥ+HEXͥ+! _^! ^#V~ x+ >= = !~  . !   #x f L L ͓ͅ ҆ *" !6ͥ+ͥ+x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtͥ+ͥ+)*)þ))>+><7"9.Yͯ * M^2Uͥ+ ҫ ͐ =« f " ͓ ҫ ͐ ʻf " =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *]"ͥ+҂D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I ͥ+ DMʡڏ"=ʡͲ=ʡYPͲ1**!O~4#~#F#x~#s#r#w>͐ « f f  . ᯕo>g.ͥ+$$$I$$H!!! BH" !I B  $$!BD! $!BI D@"!$I$$H"!Iͥ+*}|́ "!́ ͐ !ʬ =« f kʫ j \͢F w# ͋ t ʫ : W& _& & O {ͥ+ͥ+ f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å D  !  #ͥ+1*" COPYRIGHT(C) 1978, DIGITAL RESEARCH ͥ+_!~ʦ ![4ç \͢¦ 2[ 7 >?  e͢!g"c> _͢a_!f~> 5*c~#"c 0 ͥ+ á 4êü /L9ASMPRNͥ+q s#r#!V4 !V6# ,® >2Vñ m ͅ m ͅ m ͅ « Vʫ ! XN!~  ͥ+ͥ+ï +"_*~ #E گ ʫ ^#V. ï ~ CZMEIABDHSP!"M"+"!91*~!O~6=G#^#V#~ͥ+ͥ+Z*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_ͥ+ͥ+ :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 wͥ+ͥ+~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6yɷͥ+ͥ+Y :7ʗ8 z !<ͼ CP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCEͥ+ͥ+͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪͥ+ͥ+: A: A͋q: a{_2  2 - !ɯ2I:  ;*:  ͭͷ ͭ͋ͥ+ͥ+OʊQ>ÖH >2 2 û: B­>ôD> ¸!52 !"!N#~#A07O! ~*!) " Ʒͥ+ͥ+ͥ+ͥ+G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"*ͥ+!)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1 ѷͥ+ͥ+#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~շͥ+ͥ+:! G~#x=2> > ! >x6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 ͥ+ͥ+ FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊͥ+ͥ+@2 0 0:x0_<2! wI2 2> 2 >2ɯ22 !~@_6^4#: w~$w: 0 qͥ+ͥ+>9q>9: '!2 >9 7:! 6 >2>2: 2 Qͭ:Ğ! :lj<͖<j<|<: ͥ+ͥ+:  '<ͭ'<>V$>O$:Ğà\ÞØ`rÍÖͥ+ͥ+![w#w#b!"!F#v2[ͥ+!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ ͥ+{zA"*![N![ N#Fr+sq#p/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~ͷͥ+S 1:  1"" ͦ 1 |͍ >O U!" 1 1!|_!^#fk $8AP`ixͥ+CCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXͥ+îîĽ y0îîH ñG 1: :,; c*| } 8Oͥ+?'  v:P@< !  PP27 ( *"  NZZ NCC POPEPͥ+R{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"ɷͥ+#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8ͥ+:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >Nͥ+z'{ͅ>ɯo>g"k!m6ů{_zW5>)D*kOxGd !m?FDM!xGyOڂ÷ͥ+]UIT $ A PARTIAL FORMAT WILL NOT FORMAT THE SYSTEM BOOT TRACKS... $ WARNING: THIS COMMAND DESTROYS ALL DATA ON THE DISK! TYͥ+oÓ:: ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :‰:̅ԅ!^#ͥ+ $ TEST RUN COMPLETE. IF ANY ERRORS WERE FOUND, YOU SHOULD COPY ALL FILES FROM THE DISKETTE AND FORMAT IT. $PROCESSING TRAͥ+Ͱ>2lyPLnR>UX:l̅2l͓ͷͥ+VERIFYING DISKETTE $ NO ERRORS FOUND ON THIS DISKETTE $ SECTORS PER TRACK: $ SECTORS PER BLOCK: $ BLOCKS PER DISK: $ ͥ+  R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#Hͥ+************************************************************ ; ; Address Mode Function ; ------- ---- -------- ; selout Oͥ+:|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSxͥ+Ҏ*_###s#r^#V`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACMͥ+H ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñͥ+RICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/ͥ+Ľ y0G G t :):,.>C :|: Jü;r :R: ʼʋ!ʼR!ʼʋ>Sͥ+ M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!ͥ+* "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0ͥ+!~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fkͥ+TIALIZER *** $ DISK DRIVE (A-D) OR CTRL-C TO EXIT? $ COMMAND: $ VALID COMMANDS ARE: [D]ISK, [F]ULL, [P]ARTIAL, [T]EST, [Qͥ+҃)sn55)=â|g}o=î--#zg{ozg{ozg{ͥ+PE C TO CONTINUE, A TO ABORT WITHOUT LOSS ... $ *** CHECKING FOR BAD SECTORS (READ ONLY) *** $ BAD SECTOR FOUND AT TRACK ͥ+=ʅVq”*qͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͥͅ+CK# $ ERROR OCCURRED ON TRACK $ SECTOR $ BAD SECTOR - SUGGEST FORMATTING OR DISCARDING THIS DISKETTE ... $ INIT DONE - NOW ͥ+*>ERʵ2C!" """ :ʼ:*1 |R|ͦ0FIL: Rͥ+RESERVED TRACKS: $ TRACKS PER DISK: $ $ $ͥ+ vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 ͷͥ+ ADDR > END ADDR (DE=CURR, HL=END): SET CY IF SO ; ************************************************************ͥ+CHK ;PRINT CHAR TO CONSOLE ; ***************************************************************ͥ+;GET DIFFERENCE OF ADDR LSB'S F61C 9A SBB D F61D C9 RET ; ***************ͥ+************************* F650 3E0D CRLF: MVI A,00DH F652 CDBCF6 CALL OUTCHK ;PRINT CHAR TO CONSOLE F655 3E0A ͥ+ ; ************************************************************************ F61E F5 HPR: PUSH PSW ;SAVE LOW DIGIT ͥ+************************************************* ; CHECK FOR ASCII PRINTABLE CHARACTER ; ****ͥ+F623 CD27F6 CALL HOUT ;DISPLAY A SINGLE DIGIT F626 F1 POP PSW ;RESTORE LOW DIGIT F627 E60F HOUT: ANI 00FHͥ+6 JC OUTP1 ;NOT PRINTABLE, SUB FOR '.' F65F FE7F CPI 07FH ;IS IS PRINTABLE? F661 DABCF6 JC OUTCHK ;PRINTABLͥ+JC HOK ;YES, SO PRINT... F630 C607 ADI 007H ;OTHERWISE CONVERT TO ALPHA F632 C3BCF6 HOK: JMP OUTCHK ;AND PRINT ͥ+ͥ+PRINT A MESSAGE TERMINATED WITH A '$' AND AN OPTIONAL ERR FLAG ; **********************************************ͥ+ͥ+L OUTCHK ;PRINT ERROR CHAR TO CONSOLE F63D C314F0 JMP ENTER F640 1A MSG: LDAX D F641 Fͥ+ͥ+ D F648 C340F6 JMP MSG ; **************************************************ͥ+ͥ+******************************************** F64B 3E20 SPACE: MVI A,' ' ;ASCII SPACE CHARACTER F64D C3BCF6 JMP OUTͥ+************ F619 7D ENDCHK: MOV A,L ;GET DIFFERENCE OF ADDR MSB'S F61A 93 SUB E F61B 7C MOV A,H ͥ+********* ; PRINT A LINEFEED/CARRIAGE RETURN ; ***********************************************ͥ+********************************************************* ; DISPLAY ACCUMULATOR BYTE IN HEX FORMAT ͥ+ MVI A,00AH F657 C3BCF6 JMP OUTCHK ;PRINT CHAR TO CONSOLE ; ***********************ͥ+ F61F 0F RRC ;SHIFT HIGH DIGIT INTO LOW F620 0F RRC F621 0F RRC F622 0F RRC ͥ+******************************************************************** F65A FE20 OUTP CPI ' ' ;LESS THAN ' '? F65C DA64Fͥ+ ;REMOVE HIGH DIGIT F629 C630 ADI '0' ;CONVERT TO ASCII F62B FE3A CPI 03AH ;IS IT NUMERIC? F62D DA32F6 ͥ+ͥ+ ; ************************************************************************ ; ͥ+ͥ+************************** F635 CD40F6 EMSG: CALL MSG F638 3E3F MVI A,'?' ;WE HAVE A PROBLEM F63A CDBCF6 CALͥ+ͥ+E24 CPI '$' F643 C8 RZ F644 CDBCF6 CALL OUTCHK F647 13 INX ͥ+ͥ+********************** ; WRITE A SPACE CHARACTER TO THE CONSOLE ; ****************************ͥ+@ COPYRIGHT (C) 1978, DIGITAL RESEARCH ERROR: $, LOAD ADDRESS $DISK READ$INVERTED LOAD ADDRESS$DISK WRITE$LOAD ADDRESS $ERRORͥ+ ; ************************************************************************ ; GET AND BUILD 2 OR 4ͥ+T OPEN SOURCE$COMNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$*!9"!e !" !" \!""͊: ƒͥ+ GHEX4: MVI B,004H ;SET DIGIT COUNTER F66B C370F6 JMP GOHEX F66E 0602 GHEX2: MVI B,002H F670 210000 GOHEX:ͥ+: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B*ͥ+77 FE20 CPI ' ' ;CHECK FOR SPACE CHAR F679 37 STC F67A C8 RZ ;SPACE CHAR ENTERED SO QUIT F67B FE0ͥ+( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸ͥ+HEX ;CHECK FOR VALID HEX DIGIT F683 D28CF6 JNC GH1 ;IF VALID HEX CONTINUE F686 1104F7 LXI D,HERR ;INDICATE HEX CHͥ+6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝ҷͥ+4EFF :10F5E00058207000CF0B01444358207000CF090110 :10F5F000444144207000CFC501505553482070004D :10F60000CFC101504F50207000C7C70ͥ+q=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wɷͥ+3E3FCDBCF6C314F0C2 :10F640001AFE24C8CDBCF613C340F63E20C3BCF658 :10F650003E0DCDBCF63E0AC3BCF6FE20DA64F6FED3 :10F660007FDABCF63ͥ+A 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_ͥ+30FE0ADA99F6D607856F05C273F6C929 :10F6A000FE30D8FE473FD8FE3A3FD0FE41C9DB10BE :10F6B0000FC9DB100FD2B2F6DB11E67FF5DB100FBE :10Fͥ+ͥ+E :10F6F0004F41443A244144445224434B53554D24F2 :08F700004D454D2448455824F5 :0000000000 ͥ+E, SO PRINT F664 3E2E OUTP1 MVI A,'.' ;SET TO A PERIOD F666 C3BCF6 JMP OUTCHK ;AND PRINT IT ͥ+ ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $HEXCANNOͥ+ HEX DIGITS IN L OR HL ; ************************************************************************ F669 0604 ͥ+de"\\\͊: ²d\͝: )d;! q* &f  ! q> ! : A Oͥ+ LXI H,000H ;CLEAR ALL 16 BITS OF HL REG F673 CDB2F6 AGN: CALL INCH ;GET CHAR FROM CONSOLE F676 4F MOV C,A F6ͥ+ DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!ͥ+D CPI 00DH ;WAS THE ENTER KEY PRESSED? F67D CA14F0 JZ ENTER ;EXIT BACK TO OPTIONS IF SO F680 CDA0F6 CALL VALͥ+×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! ͥ+10F5B00052206400C70501444352206400CF010378 :10F5C0004C584920702C00EF0A014C4441582070DF :10F5D00000EF020153544158207000CF030149ͥ+҉* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!? ͥ+15253542042 :10F610007600000001444220007D937C9AC9F50FDA :10F620000F0F0FCD27F6F1E60FC630FE3ADA32F6AD :10F63000C607C3BCF6CD40F6ͥ+lR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2ͥ+E2EC3BCF60604C370F6060273 :10F67000210000CDB2F64FFE2037C8FE0DCA14F0AF :10F68000CDA0F6D28CF61104F7C335F62929292925 :10F69000D6ͥ+{ozg^#V) _{ozgi`N#Fogo&og_{_z#Wͥ+6C0000FD2BDF6F1D311C942434445484C4D41D8 :10F6D00042444853414C5441495220535953544594 :10F6E0004D204D4F4E49544F522056312E32244C0ͥ+ͥ+AR ERROR F689 C335F6 JMP EMSG F68C 29 GH1: DAD H ;SHIFT HL LEFT 4 BITS F68D 29 DAD H F68E 29 ͥ+6C0 0F RRC F6C1 D2BDF6 JNC LOOP ;GET READ STATUS UNTIL READY F6C4 F1 POP PSW ;RESTORE CHARACTER TO PRIͥ+6 JC CALC2 ;IS A DECIMAL NUMBER F697 D607 SUI 007H ;CONVERT TO HEX F699 85 CALC2 ADD L ;INCLUDE IN FINALͥ+'BCDEHLMA' ;TABLE OF REGISTER NAMES F6D0 42444853 RPTAB: DB 'BDHS' ;TABLE OF REGISTER PAIRS F6D4 414C544ͥ+ RET ; ************************************************************************ ͥ+B53554DCERR: DB 'CKSUM$' F700 4D454D24 MERR: DB 'MEM$' F704 48455824 HERR: DB 'HEX$' F708 Eͥ+** F6A0 FE30 VALHEX: CPI '0' ;< '0' F6A2 D8 RC ;TOO LOW F6A3 FE47 CPI 'G' ;>'F' F6A5 3F Cͥ+L BYTES IN SECTOR DONE DCR E ;DECREMENT BYTE COUNTER FOR THIS SECTOR OUT DSKWRIT ;WRITE CURRENT BYTE IN A, C STILL HAS NEXͥ+TATE F6AA D0 RNC ;VALID HEX CHARACTER F6AB FE41 CPI 'A' ;SET C IF < 'A' F6AD C9 RET ͥ+RENT SECTOR COUNT LXI H,SAVEND ;LOAD LAST ADDR TO SAVE IN HL CALL CKDONE ;CHECK TO SEE IF CURRENT ADDR = LAST JNC FINIS ͥ+E STATUS (MITS 2SIO) ; ************************************************************************ F6AE DB10 ͥ+T ;CHECK AGAINST MAX SECTORS PER TRACK JC SECLP ;MORE SECTORS TO GO IF < 32 MVI B,001H ;SET UP TO PROCESS ODD SECTORS Jͥ+F CY=0, NO MORE ; ************************************************************************ ͥ+OVE: IN STATIN ;WAIT UNTIL HEAD MOVEMENT ALLOWED ANI 002H ;HEAD MOVEMENT ALLOWED MASK JNZ HMOVE MVI A,001H ;STEP HEAD Iͥ+************************************** F6B2 DB10 INCH: IN CONSTAT ;CHECK STATUS PORT F6B4 0F RRC F6B5 D2B2F6ͥ+R IT STA ALTBUF ;SAVE CURR TRK NUM TO 1ST BYTE OF SECT BUFFER MVI B,000H ;PROCESS EVEN SECTORS FIRST ON EACH TRACK JMP Rͥ+F6BC F5 OUTCHK: PUSH PSW ;SAVE CHARACTER F6BD DB10 LOOP: IN CONSTAT ;CHECK STATUS PORT F6BF 0F RRC Fͥ+ DAD H F68F 29 DAD H F690 D630 SUI 030H ;ASCII BIAS F692 FE0A CPI 00AH ;DECIMAL NUMBER? F694 DA99Fͥ+NT F6C5 D311 OUT CONDATA ;PRINT USER TYPED CHARACTER F6C7 C9 RET F6C8 4243444548RTAB: DB ͥ+ VALUE F69A 6F MOV L,A ;PUT HEX IN H F69B 05 DCR B ;MORE DIGITS? F69C C273F6 JNZ AGN F69F C9 ͥ+149IMSG: DB 'ALTAIR SYSTEM MONITOR V1.2$' F6EF 4C4F41443AMSG1: DB 'LOAD:$' F6F5 4144445224AERR: DB 'ADDR$' F6FA 434ͥ+ ; TEST ACCUMULATOR FOR VALID HEX ; **********************************************************************ͥ+ND ͥ+MC ;SET C FLAG STATE F6A6 D8 RC ;TOO HIGH F6A7 FE3A CPI 03AH ;<='9' F6A9 3F CMC ;SET C FLAG Sͥ+T BYTE JNZ WTRDY ;WRITE SOME MORE BYTES IN THIS SECTOR FINSEC: POP D ;RESTORE CURRENT MEMORY LOCATION POP B ;RESTORE CURͥ+ ; ************************************************************************ ; CHECK CONSOLͥ+;IF CARRY FLAG NOT SET, WE ARE DONE INR B ;INCREMENT SECTOR COUNT INR B ;AND AGAIN (EVERY OTHER SECTOR) MOV A,B CPI SPͥ+ CONST: IN CONSTAT ;CHECK IO STATUS PORT F6B0 0F RRC ;ROTATE TO CARRY F6B1 C9 RET ;IF CY=1 THEN MORE/Iͥ+Z SECLP ;DO ODD SECTORS TO IF CURRENT = 32 WAITNP: IN SECPOS ;WAIT UNTIL SECTOR *NOT* POSTIONED FOR R/W RAR JC WAITNP HMͥ+ ; INPUT AND ECHO/PRINT CHARACTER TO THE CONSOLE (MITS 2SIO) ; **********************************ͥ+N A SINGLE TRACK MASK OUT DSKCON ;DO IT LDA ALTBUF ;LOAD FIRST BYTE TO A INR A ;FIRST BYTE OF SECT IS TRACK NUMBER, INCͥ+ JNC INCH ;CHECK READ STATUS F6B8 DB11 IN CONDATA ;READ CHARACTER F6BA E67F ANI 07FH ;STRIP PARITY BIT ͥ+WWAIT FINIS: IN SECPOS ;WAIT UNTIL SECTOR IS *NOT* POSITIONED FOR R/W RAR ;SO WHEN CONTROLLER IS RESET WE DON'T CAUSE ANY ͥ+4, T5[S0 - S23] ; 28 + 32+ 32+ 32+ 32+ 28 = 184 sectors = 23552 byte (5C00) ; ͥ+RUPTS EXIT: JMP EXIT ;JUMP TO PSTJMP AFTER ALL SYS TRKS SAVED CKDONE: MOV A,D ;MOVE MSB OF CURR MEM LOC TO A CMP H ;COMͥ+ ; ; Address Mode Function ; ------- ---- -------- ; selout Out Selects aͥ+CMP L ;COMPARE WITH LSB OF LAST ADDR TO PROCESS RET ;CARRY SET IF CURRENT ADDR < LAST ADDR ALTBUF: DS 00003H BUF: DS 00ͥ+ Out Controls disk function ; secpos In Indicates current sector position of disk ; dskwrit ͥ+D HL ;********************************************************************************** 029F 118680 RDSECͥ+************************************************ ; ; SELOUT - PORT 8 (OUT) ; ͥ+ ;********************************************************************************** ; ͥ+--+---+---+ ; ; C = If this bit is 1, the disk controller selected by 'device' is ͥ+TY ; ;********************************************************************************** ͥ+/O operations. ; X = not used ; Device = value zero thru 15, selects drive to be controlled. ͥ+ ; ;********************************************************************************** ;ͥ+; | R | Z | I | X | X | H | M | W | ; +---+---+---+---+---+---+---+---+ ; ; Wͥ+ ; ; The sectors of a track are written in the following order: ; (first evenͥ+ H - When 0, indicates head is loaded for read/write ; X - not used (will be 0) ; I - When 0, ͥ+ ; 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 ; ; T0[S8 - S31], T1, T2, T3, Tͥ+ JC FINIS ;POTENTIAL SECTOR DATA PROBLEMS! MVI A,080H ;CLEAR DISK CONTROLLER MASK OUT SELOUT ;DO IT EI ;ENABLE INTERͥ+ ; ;********************************************************************************** ͥ+PARE WITH MSB OF LAST ADDR TO PROCESS RNZ ;RETURN IF NOT EQUAL (CARRY FLAG SET) MOV A,E ;MOVE LSB OF CURR MEM LOC TO A ͥ+nd enables controller and drive ; statin In Indicates status of drive and controller ; dskconͥ+086H DS 00010H STACK: EQU $ ͥ+ Out Write data ; dskread In Read data ; ;**********************************ͥ+: LXI D,08086H ; = READY TO READ MASK, = 134 BYTES 02A2 212206 LXI H,ALTBUF ;POINT TO BUFFER FOR SECTOR DATA 02A5ͥ++---+---+---+---+---+---+---+---+ ; | C | X | X | X | Device | ; +---+---+---+---+---+-ͥ+ ; MITS ALTAIR 8800 SYSTEM TRACK WRITE UTILITY ; ; MODIFIED MITS ALTAIR 'PTD' UTILIͥ+ ; cleared. If the bit is zero, 'device' is selected as the ; device being controlled by subsequent Iͥ+ ; ; DISASSEMBLED/MODIFIED BY: SCOTT LABOMBARD ; 8/25/02 ͥ+ ; ; STATIN - PORT 8 (IN) ; +---+---+---+---+---+---+---+---+ ͥ+ ; This utility writes data from address 0h to 5c00h to the Altair disk ; syStem tracks (0-5).ͥ+ - When 0, write circuit ready to write another byte. ; M - When 0, head movement is allowed ;ͥ+ sectors, then odd sectors in ascending order) ; ; 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,ͥ+indicates interrupts enabled (not used this simulator) ; Z - When 0, indicates head is on track 0 ͥ+ector is positioned to read or write ; ;******************************************************ͥ+********************************************************** ; ; DSKCON - PORT 9 (OUT) ͥ+= STATIN EQU 008H ;IN 0009 = DSKCON EQU 009H ;OUT 0009 = SECPOS EQU 009H ;IN 000A =ͥ++---+---+---+---+---+ ; ; I - When 1, steps head IN one track ; O - When 1, sͥ+ ;LOCATION EQUATES 0000 = STADDR EQU 00000H ;FIRST MEMORY LOC TO SAVE TO SYS TRKS 2C00 = SAVEND EQU ͥ+ ; E - Enables interrupts (ignored by this simulator) ; D - Disables interrupts (ignored by thisͥ+ON IN RAM 5800 F3 DI ;DISABLE INTERRUPTS 5801 316959 LXI SP,STACK ;INITIALIZE THE STACK 58ͥ+Write Enable sequence: ; W bit on device 'statin' (see above) will go 1 and data will be read from ͥ+ͥ+will go off then, and the sector data will be written ; to disk. Before you do this, you must have stepped ͥ+ͥ+ ; device 'secpos', then set this bit. ; ; SECPOS - PORT 9 (IN) ; As theͥ+ͥ+ter. ; ; +---+---+---+---+---+---+---+---+ ; | X | X | Sector Number | T ͥ+ͥ+ctor number = binary of the sector number currently under the head, 0-31. ; T = Sector True, is a 1 when the sͥ+ ; R - When 0, indicates that read circuit has new byte to read ; ;************************ͥ+**************************** ;DISK EQUATES 0008 = SELOUT EQU 008H ;OUT 0008 ͥ+ ; +---+---+---+---+---+---+---+---+ ; | W | C | D | E | U | H | O | I | ; +---+---+---ͥ+ DSKWRIT EQU 00AH ;OUT 0020 = SPT EQU 020H ;SECTORS PER TRACK ͥ+teps head OUT one track ; H - When 1, loads head to drive surface ; U - When 1, unloads head ͥ+ 02C00H ;LAST MEMORY LOC TO SAVE TO SYS TRKS 5800 ORG 05800H ;MITS DEFAULT LOCATIͥ+ simulator) ; C - When 1 lowers head current (ignored by this simulator) ; W - When 1, starts ͥ+ͥ+ ; port 'dskread' until 137 bytes have been read by the controller from ; that port. The W bit ͥ+ͥ+the track to the desired ; number, and waited until the right sector number is presented on ͥ+ͥ+ sectors pass by the read head, they are counted and the ; number of the current one is available in this regisͥ+ͥ+| ; +---+---+---+---+---+---+---+---+ ; ; X = Not used ; Seͥ+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::