CP/M 2.2 QUAD.CAPDISKETTECPM FROMNORTH * STAR ---------SYSTEM--TRACKS-BIOS USER CPM CCP CPM BDOS --------DIR.SEC1DIR.SEC2DIR.SEC3DIR.SEC4--------CPM DATADATASEC1DATASEC2DATASEC3DATASEC4........ @ 1"1%"/!q!>2?!qү22Ϳ:>=E:Cz2#!͎>2<:ٷ6!J:2G^#V#ȀxBL^pvӥӵӘ 56K CP/M vers 2.2 rev A for Horizon DQ Product of North Star Computers,Inc. end-boot661 Ý#(9H.M9<:P=Ϳ:5W@ͣ:چt>wG#7wG# ˆD>Á:ʣ:><::yg> gy?O o&"/͒~{=! >‚!# ~Y>>!(~qĭ*/~}OG?Wr! _V/<_: .:/oVoVoV:#8k=i<:/G:%¿Vÿ::2(0x <::0Ҽ¶¶>Á@ͣ: ըG# ըG# JÞ>Á::::::/3:I~_G#~_G# 5XD23:24>"f#Gy@O:3ˆ{†:@PͿӯ2›:3ʛթOҧ:4=Sy2x ҳ 2y2!:Pկ7ɷٷĎٯٷ 6G:ٸ T D S (C) Copyright,1980 North Star Computers, Inc.1!~6#!J###!YY"$"&:e!""ٯ2,=2(2͝ͼK>22!"!"!"):Oi&6"!2=2.{!FPx >2xD:!X2-:-O>!MyG-!\~-Fx@*-:- ->G -x*!wD s#r*!))))!2*,-w!y׾vwA2!z͎ ӯ< MOUNT A: IN DRIVE, TYPE ANY KEY זހ׼ަO?(?(Q?(?`i"y2 `i")i` >2߯2+Õد2!+ b]:wÕ6Õضʕ5**ߴ>(v>@,}o*‘* ʕد2+**±* *:+>¿<*"* "#:go*):G=2,w# x=!+~ٯw !.4ٯz>{:,߷ȯ2,G:O*:߷9X*&XQO~uٱO~]z\W~&@{}#{!͎6&zW|E!MSIDE 2 N/A~O6#Î#~ͭ~ͭ#Î0:ڸO6!> >  ÌMVcVÊp,:>0>Vycyp> yɯ>>7>>7>@!~/w/wʾ$$$Fp,¾$|¾ï>A>0>` > >>>`y> >>Y22!>y! ~ n[n#[M>22>2M.r|Ա ͒> Ò> Ò͘~#͌ì _2<ý2˽ýýý߽ý !Ķ2:2a{_:ķʖ:ķ>Ľ˽ʖ:=2–!B!6#5ڽʖ:ķĽ!ͬ¾ʧݾÂݾ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ݾ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*ٿ6?ۿwȿ0߿#6 #6" #~?  xDIR ERA TYPESAVEREN USER(!yO#< Ty#O 321y_͸2y2ͽ:˜1͘оA͌>>͌9ؾо2^ :ķ¥.!_~#fow]­Îå!v"!çREAD ERRORçNO FILE^:ķ ! ~ 3#0 Wx x G ~ # 3x~#B!Y~ɯ2:ķ=!ľý:ķ=!ľ:ý^T!~  6?#ˆ:`O> K{͘оA͒>:͒͢>:͒͢xK > K > ͒x  ͢¾ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tнʧ͘!6!~ڇ ¯w4!Y~ʆ͌¾†t=ʆf ^ T ¯2o&)|+!ؾڽ<ͧվÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yøpsp2mÆÆf ͧÆFILE EXISTS _: É: :ķʉ=2)ͽÉ T!@нk!ؾ}|q=qf^!~2>`~2į2\!!B!~> >#0~O#Cx2͘վ1)ͽÂf zͧÆBAD LOADCOMf^: !Ķ Â$$$ SUB(řťūű"C{2!"E9"1Aȯ22!ty)K!G_^#V*Cǐ~уEќѥѫ ,&-AGMSț!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :ȷE B 2>: ȷb# : ȷy! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! Ⱦ Hù H H $O͐: 2 *CN# x: 2 p&x~+é7Ư2 H! >w_: ! Ⱦ5ͤNkͱ¦ͱxʊ#Nx: ȷ! Ȗ2 ͤ! 5™#wO~x½p Hy<< ӷʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>ӯ*w#w*w#w'û*ӷ! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N:ҷ EG>O: \ɷSɀ*C :ҷqn& ^#V>O^"*}:*)=":O:ҡo"*C *C!ͮ~2~2ͦ:Ҧ2ͮ:ɯO:ҁw:w |g}o*ү# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:҅o$*C~i6iw**{#zr+s{ozg**͕** ʾ,w͜͸Ͳ!!N#F$**O!~#:AȾ#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s̖-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :ҷ~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌xʯ2͢*C ~<wʃG:Ҡ!Ҧʎì 4~ʶ¬:<ʶ$ʶïZͻɯx>2>2ͻ:!ҾZί2:Eȷẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C :ҷ:ddslO s#r:Eȷ͊:==»y==»*Ww#*"͸*:G#š"͸:!Ҿw4!`iw:Z!E~=26ɯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!BȾw!>2*C~=2u:B2~2wE:A*Cȶw>"!""ү2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*ҤW}_*"}o|g":ҷʑ*C6:ҷʑw:2E**E}DQ>2PIP OM:SUBMIT COM XSUB COMED COM4 ASM COM@ DDT COM&LOAD COMSTAT OM)DUMP COMDIRDUMP COM FCOPY COMFORMAT COMCOPY COMSYSGEN COMFCOPY MAC FPRINT MAC! !(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE) COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! Ͳ:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yʗ ͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 *NEWBIOS MAC'"#$FINPUT COM%NEWBIOS COM&FPRINT COM'FINPUT MAC$()*ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 HHͯ :^!w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q* "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!*M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !r+s+p+q*~$7*>*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\2*">!b!ͯ >!`0ͯ !q:E:24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.:020' 'ͳ'7 6'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:HDM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*ȟ/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ *M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ -:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&6:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈* copyright(c) 1977, digital research $Error On Line $SUBNo 'SUB' File Present$Disk Write Error$Command Buffer Overflow$Command Too Long$Parameter Error$Invalid Control Character$Directory Full$Cannot Close, Read/Only?$!9"!͇͊!p+q* ͊!p+q*͍2!p+q*͍2!p+q*͊!p+q*͍!p+q*͍!p+q*͍2!s+p+q+p+q:=2ʦ** w*#"*#"!p+q(+*DM*p*& 6:ep\:=-!6]:ͧz2~e:~2O! 6*~& 6$>!~_z*~& w!~5Bx:yͧ*v+"vv ~_{ozg001 $$$$ SUB6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧW Extended Submit Vers 2.0Xsub Already Present$Requires CP/M Version 2.0 or later$:y*###ƒ# yk   җ 4!~=ŐW!xʵ ~#èbx {~#o}où.xsubb!np+q*m2_!pp+q*o ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7***x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6= COPYRIGHT (C) 1979, DIGITAL RESEARCH DISK OR DIRECTORY FULL$FILE EXISTS, ERASE IT$NEW FILE$** FILE IS READ/ONLY **$"SYSTEM" FILE NOT ACCESSIBLE$BAK$$$BAK$$$-(Y/N)?$NO MEMORY$BREAK "$" AT $1mM"m +!8s~1m!f6ͧ!t6>!t%\= >!t6:t<2t=O! ~2u b:<2O>9b!60+~9b!60+4:uat:u_2u:uMʉSͧ!v6!"v!|6:|Ҁ!x6 2}:} Hk:} h:}$6 2}$*}M3:}02}O> ͧ3!z6ͭ:}"!}5́ͭ́3*yM"h:}^a a2}O>Vͧ^:}>*z& ~ !z4í!{q*v#"v͙dͧ*vv :{w:x<2xO>}|ͧ2% ͋*-"*$$$ SUBq:(=2(N *$*& w*$#"$*&#"&' !"N*M^7 !)6:!)ھ *N*DM͆ 2*ʭ :*ʗ ͯ *N"P*6:2)÷ *N"N!) $@BA$! A "!$"" ]xsub*"-!/"*"+!""1 M*!"́!"* (xsub active)$|*y ʥ*"*7***x*́͋<͛ :%*=26͋!7^#6 #6 #6$ 8*7~O #w# !6:6= *M  *!M 1m! 6!6! 6: 2Ebͽ!e:d\::eH2 H҆ͽ:e2!:d2e:!2dû :!I¬!: :H2 ҮX:h2iҐ:!ʍ:!:!H:!H,!"! 6#~ F)ͷX:! X):i!h)9 e:!:h2jO>F L>!":i!jHҼ*"+M ~ ʼͲ!f6!h6!"! 6F!f6:h2k!iҠ:i2k:j2h:k!hҶ9 æ:h2j!!6:j2he:! >"Ͳ*"M ~2!O :! *+"!!6e*!M͛ /$^L:!@OL:! 2͑e:b:! L:h<2hb:! b:hO>!hw:! pX:! …!!6  LÊ!!6ûô:!ʛ͑:! ҩ OҸû:!R†!6G>!!!6 :2.t -? >!!6!6s, !6:xB!6OU2!SB!G6:҃!6:G҃*G& ~2!:G<2G_ Qқ=e  b:!-®! 6:!#¿͇;J:!:!!6Lv:!:Jv: *#"͎"&! 6R*I""ë :!M:H| ! 6>F ͛e: <2 O! Hqy d F : 2! 6*#s#r :!N ͢ *o/ Ҧ Ͷn! 6!"&R! 6o$ Î Ç :!S0 $͢- :2"+s#r!:* *& ~2!:<2 :!W> v :!X³ Z͎\ Ee ð :7/҃ E!76e ͕ :xƒ - ͷ*&"K(Kڰ *KM N͔*K"KҌ :!Z ͎  ͢ : :!  'v!gq:7 e !p+q*DM  =? ) !p+q.*DMF -L *9"`!"b!h6!j6!|6.!=\ -x !e:dʥ *eM \R :xʥ @ *dM \, :x \͕ :x - V :e _ :f w : =e !e:d*eM =e : =e =͕ !]6:x>- !"!76!6!6!66*dM  *dM !6:8!*`*;DM \u 2xʻ>!xҨ- *`*;6:82*`"`:<2w!"`9`h*`*;~2*`#"`6:0O  ú!p+q:/(*DMͩ:  : I N* *DM:aO>!Һ x!: ڦ> ʡ* +" >¡! 6: <2 =O! N͒:  O͒: ! 6:h!o$O* ͸ ! 6 !h6!: 2 3* & 6 : <2 =O! N͒*dM  :sGsu n>!6:<2=O! N͒!">!"͎/Ҵ*+">>!": *#"*""*!".+",*$"**o".!",!36:3{.!7q:*7M͒:7o$+͛ͪ*$M ~28Om:8 I͇͢u$oqo͛rP! 6!"&*$"(R͎ҔM͢ҡÔ($ҵ! 6R͇vͶ2!*!Mm$"*"M :!w͢:! e2!:! : /HH/Q:! @!!6 R!!6 :!KR$*& :!w:<2dn!:s+q*$";!>6:>/;oH*;#"(";:92=*=& *(M !::=2>/H:=<2=*(#"(æÀ:>*(+"(R:>!6! 6:!B)! >w!"&*o"(R :!C:eR :!DKeX :!K\ͷX :!Lj^ :!Pš͎҇! 6F×͢җ:Ç :!T¨F :!U¾: 2 :!V͎"$DMͩ/ *oDMͩ : 2 :! (::H%^bF : ͎H :!Ay! 6*""&*o"(R͎an͢na! 6R :!F”͢ґ Ä :!J $:2$͢ :=2:<2!*& ~2!ü*""I*M*o/!:":f *g&!lq:l $ !h4:l 1 !h6*lM :hB     !h55!mq:m :hO>H2ny} !m6 !o6:n!oښ *mM !o4‚ !pq:p ڪ >:p :p H:p H!qq*qM͛  ^W :q@2q*qMW   !sp+q*r !up+q *tDM !wp+q*v !zp+q*y2x!|p+q*{2x!~p+q*}2x!p+q*!p+q*!p+q*!p+q*2x!p+q*!6   >>! q* &!p+q*:*eM !b+!s{!f!6:!b*b*^DM =ͅ N- *b"b:<2)f!"b!q9bڀ*b*^:w*b#"b!q:6ڶZͅ ʱ- !66*6& :w:6<26!J6*b}:J<2Jm=? :x- : ;*dM .=\ -=ͨ ;: *eM =ͨ .M= -C!q:Y*M !q:a/>z!/H!q*MaҎ:_:!q:ҥ*My:!p+q!'"!6>**ͪ{2**ͪ"*! ͪ":!!*22*,**"0M ~ H3*0"**+"*+">23:2/k!36,*+s#rx:3x*0"*: “**"&*"+"(á*$#"&**#"(*"#""*$#"$*"+""*$+"$*#"!4qM*"*$: *(y"$DM}|C#~ *#"*&DMyxC 1*+":4?w+"$""ͷR: —*$"("҈!"&Ô""&*""&$mڸ*o"(**$"($"O26͛*"M :6w͢:6 $:2*o/*!My:<2=O!s Hq**DMͷ! 6: e!"*""?k*&"?*?+M ~2A :hHҏ *&"?(?:A ½8*#" ҽ*?M ~2AO *?"?ҕ!"*"*"^: 2B! 6F:B2 o(>&H6͛9!C6>!Ca R>:C<2C?! 6!"͇͢Ґq"ڊ͛Íq!!6 !!6 !6*!Ma2D*!M͒2!:D/!+w!6e2!͢!Eq!E:!:H:H!Fq*FM8 *FM   Oy2F :FY5>>:!02HO> /!";u*)))*) *H& "PҘ! 6+s#ré! 6"DM!>))덑o|g =±^#V) ^#V|g}o _{ozgi`N#Fogo&og_{_z#W H = LIBX$$$$$$$LIB!4w_#~ ʸ A:4~~# ¼ > \ ?ʻ w# !ͼ ? !ͼ !)ͼ !ͼ :5͡ :6:6͡ :7͡ :\ ʻ 24!dͮ 25ͮ 27ͮ 26!8 ( ʃ !Y 1  :7ʞ !z 8  !"2D2X2#! 8 !ͼ z{* ! !"!8 w#  +6# *#"~!ͼ G:6QxJQS*!w#"! 1 !"!Y~~# …¡z!ͼ wʹ* ! w#" ! 8 !" ! zz_O4:  :6y@2 0 0:x0_<2! wI2 2> 2 >2ɯ22 !~@_6^4#: w~$w: 0 q: A: A͋q: a{_2  2 - !ɯ2I:  ;*:  ͭͷ ͭ͋>9q>9: '!2 >9 7:! 6 >2>2: 2 Qͭ:Ğ! :lj<͖<j<|<: OʊQ>ÖH >2 2 û: B­>ôD> ¸!52 !"!N#~#A07O! ~*!) " {zA"*![N![ N#Fr+sq#p/>G=#w#w3#w#w!JSYMBOL TABLE OVERFLOW G*##~w*##~͎*_###s#r^#V`à 4 Wm ()*+,-/ABCDEHLMDBDIDSDWEIIFINORSPACIADCADDADIANAANDANICMACMCCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRICALLENDMLDAXLHLDPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/z'{ͅ>ɯo>g"k!m6ů{_zW5>)D*kOxGd !m?FDM!xGyOڂÃ)sn55)=â|g}o=î--#zg{ozg{ozg{oÓ:: ;,!ɯ22=2l!"]!~H5_!m~0:ą:  *":  :‰:̅ԅ!^#=ʅVq”*qͦ1& O:lµ̅>2ly:_!w~!s!m~ùy !~=w_!m~ ͅ:|: |Ë  |*" ͩ !6="1 :  1}1:n:>BʋSSͦSSxS 1:  1"" ͦ 1 |R >O U!" 1 1!|_!^#fk $8AP`ixH ñññ81Ľ y0îH ñGîG  ñH ñ(Ľ yîH ñîîĽ y0îîH ñG 1: :,; c*| } 8O:! G~#x=2> > ! >x6 #='G! ~ p( O*}O>4?:7w:#ĸ*"!͸* }w>ͪg( ʆ1 Y :7ʗ8 z !<ͼ CP/M ASSEMBLER - VER 2.0 NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES END OF ASSEMBLY G:7xʘ!#~ʄl͸Ä**!O {zʊ͸*"!!#^4!$wͯͯWƐ'@'ê>:ͪ!#^Ww*!{͚|͚}͚͚{!$~#͚͚> ͪ> ͪ:  '<ͭ'<>V$>O$:Ğà\ÞØ`rÍÖ![w#w#b!"!F#v2[G*##~w*##~<*}q!~ڬ6![^![^#fk"͎͘!G#*####*^#Vû!^*"*?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x_BH!œ#¶ ¦{KÈCÈ<:JCR:  !6 s!#  ɯ<:O=_Z!F!V#fjQ̓E!^#Vo&)~#FxGyѯ<àn8!~ڢͅ6~44O! s#r!~ ڿ6ͅ^4!mw!wp!~ͅ!55N! N#fio&)^#fkͰ>2lyPLnR>UX:l̅2l͓*>E2C!" """ :ʼ:*1 |R|ͦ0FIL: R  R* } *" :¿::¿üX!C^#fk[@ :Œ:=ʌG!ʆF#H vÛc*| EH ͺ,^1 ͦ *""1 EH DH ͺ,1 ͦ :  1:  " > 2 Ľ y0G G t :):,.>C :|: Jü;r :R: ʼʋ!ʼR!ʼʋ>SR{ozg!~4ʧͦ !6 ! **̈́**̈́\iͩ !w#H USE FACTOR !* "z{*"* "I !" :1 R O*UR X* G:xl :  *̩ : l x͖ *#"EH DH 0:~ ! ^4! w͆ Æ *! 6z͖ {͖ 4>R>V>D >P >L >N=COPYRIGHT (C) 1980, DIGITAL RESEARCH DDT VERS 2.2$10 !~=W!xe ~#Xbxʇ {z~#o}o҃i.2_!fp+q*e2_2_!hp+q*g!jp+q*i!lp+q*k!np+q*m2_!pp+q*oÃO$*sy͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͘=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷz8O!B N#N ¾SP.* |} !9":q!"- Ͷ Aګ ҫ _!7^#V~  \p Z z ů2[\͓͢ ҫ ͐ =« f " ͓ ҫ ͐ ʻf " =ʻf "=« ý> 2͐ f "]=f =« *]}o"_  *]"a. ~ #E }"]*a 6 *]}#|#*]E ͐ « f f f {zA|« W}d ͐ f f f DMʡڏ"=ʡͲ=ʡYPͲ1**!O~4#~#F#x~#s#r#w>͐ « f f  . ᯕo>g. ë «   Ͷ ͐ =« f xY |« }ҫ gA>S Ag}S S i |« }!w s#r:[ʔ _!~ʦ ![4ç \͢¦ 2[ 7 >?  e͢!g"c> _͢a_!f~> 5*c~#"c 0 7   > >  ͢| } @ >. *_}o| , 0 ë ^#V#!Y ))))o P q s#r#!V4 !V6# ,® >2Vñ m ͅ m ͅ m ͅ « Vʫ ! XN!~  )*)þ))>+><7"9.Yͯ * M^2U :2:2ͳ:_³ͯ !6! @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A" y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P !ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷ͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# O!b q!vz͒q.?*!9"8"͉Z*" +*'/7?v"*2:EI SPHLDI XCHGPCHLXTHLRET HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB ANA XRA ORA CMP INR DCR MVI LXI STAXINX DAD LDAXDCX RST PSW POP PUSHNZZ NCC POPEP M B C D E H L M A B D H SP PSW ??= M!Eâê ö  - Ð f  "J*"!"!"2O!" "]""!1!++""M>28!"9:] !í 1 2|2\  !]w# ʫ .&  0 6 #& .K !e K w# ʫ : U 6 #K 6AW w#] !e~H#~E#~X*}|́ "!́ ͐ !ʬ =« f kʫ j \͢F w# ͋ t ʫ : W& _& & O { `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #N  *. *.  NEXT PC͐ =« f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å D  !  #! _^! ^#V~ x+ >= = !~  . !   #x f L L ͓ͅ ҆ *" !6ï +"_*~ #E گ ʫ ^#V. ï ~ CZMEIABDHSP!"M"+"!91*~!O~6=G#^#V#~x (#"!N#FW( *J>7Å*M|N+"M N:LHͅÅD Å >* *͓ b" . *"] !/~##ʁtZ*F#n!Is!^#V&&##&))::^#V#*^#V>+)x-8_$$$I$$H!!! BH" !I B  $$!BD! $!BI D@"!$I$$H"!I$I$I$UUU$$A$ D$HD$$ H B!$D$"$B$DA!ABI$H B$I $HI$H$! $I $I$$A !A@$I$"!$H$I$I "! $A$  HHAA"I @BB $A"@ COPYRIGHT (C) 1978, DIGITAL RESEARCH ERROR: $, LOAD ADDRESS $DISK READ$INVERTED LOAD ADDRESS$DISK WRITE$LOAD ADDRESS $ERROR ADDRESS $BYTES READ:$INVALID HEX DIGIT$CHECK SUM ERROR $FIRST ADDRESS $LAST ADDRESS $BYTES READ $RECORDS WRITTEN $HEXCANNOT OPEN SOURCE$COMNO MORE DIRECTORY SPACE$CANNOT CLOSE FILE$*!9"!e !" !" \!""͊: ƒde"\\\͊: ²d\͝: )d;! q* &f  ! q> ! : A O6Y: !2 6=21 á:1 : r+s#r==_HL"4 " >6 ͪS* "6 =23 :1 =21 v=O* #" Y8  ͝҉* +"8 .!2 ʞR̀* "4 4 = ͝* #" çR*6 DM+R*8 DM+R*: DM+R*< M!? q=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y23 Copyright (c) 1979, Digital Research????????????CON:RDR:PUN:LST:DEV:VAL:USR:DSK:TTY:CRT:BAT:UC1:TTY:PTR:UR1:UR2:TTY:PTP:UP1:UP2:TTY:CRT:LPT:UL1:R/OR/WSYSDIRR/O R/W SYS DIR ** Aborted **Active User :Active Files: Drive Characteristics65536: 128 Byte Record CapacityKilobyte Drive Capacity32 Byte Directory EntriesChecked Directory EntriesRecords/ ExtentRecords/ BlockSectors/ TrackReserved Tracks is Temp R/O Disk: d:=R/OSet Indicator: d:filename.typ $R/O $R/W $SYS $DIRDisk SL!*p+q*)O2'!,p+q*+O2'O2'O!.p+q*-LRRLR\LR" O!/q*/& L!1p+q*0#L~*##N!ͽ͞"T!Vq*VMͳ!Xp+q!W* >Wr#MͲ!_p+q!`6>!`6*`&*^*`&Y />!`4 >*]& ~ O!]49!a6:a*]& ~2bO>z*bM >!b/~,H~:H~*H~.H~>H~<H~=H*]& 6!]4T!]4!cq*a&Y :cw!a4: 0O! q: O: O! p+q* |O* }O! p+q*  f! p+q* DMB! p+q)R* DMB1B* DM+;! p+q* i2 ! p+q* i2 ! p+q* i2 i2 !" p+q*! f!$ p+q*# i!& p+q*% i!( p+q*' i2 !* p+q*) f!/ s+p+q+p+q:/ =2/ X*+ *- w*+ #"+ *- #"- 1* #" ͖r*   ~!" ! ͸×* " x20 º*   DM":0 Ad*   6!" Ç!" : !"6 "8 ": }2< !"4 "= ! A 0O> :A 0:A AO>&R̀:A A H.2B !2 w:B !D s+q*C &͍:D _og_{ozg^#V) _{ozgi`N#Fogo&og_{_z#Wq=  ͝Kd*= ! ͸p!@ 6>!@ X*= }O!< *@ & w*= #"= !@ 4)!< 4\mad* }O!< :? wlR*4 DM+{R* DM+R 4 ͝*4 }¿= 4 ͝< N*4 #"4  å;*4 DM+: Y2tatus : DSK: d:DSK:User Status : USR:Iobyte Assign: =Bad DelimiterInvalid AssignmentBad Delimiter: Bytes Remaining On R/, Space: Invalid File Indicator** Too Many Files **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!9"2!T OË!]6:\:] Hr3 Ë:\ʀË͇ /ҋͺ *2!"q*"&L ͐ ͐ ͐!$p+q*#~*#N͐*##"#÷!&p+q͠*%DMͱ O O!(q*(&!gr+s+p+q!h6>fr*d*f!is*d́"dPY! "f>!h#~Haͫo!h6:i0O͐!mr+s+p+q*lTZs#r*lڶ*l+s#r*jN#F+q#pÌ!nq!"o"q}2uo&"s* s:n*sDM2u:uqos*s"s*o͊O !v6>!vQ*v&w 6`i+46)A*:'ʓ:'O!) ~2vʍ:vO!w 6,]!v6>!v*v&w ~һ*vM !v4˜8AO͐:͐ͱ*##N!ͽ"* N#F*͠">!H% - *DM ͱͷDM  ͱ* N#F 9ͱ * ^#V))DM Tͱ* ~ *} *M!+s#r#4 !s+p+q!6!66:!ڄ !6!6>!r *&**&Y i !6!4+4A :} :!4- >!699 2¨ :!4: :2!6+6>! :O!9 DMi ͱ:!O!Y DMi :2͠Q" 8AO͐jͱͷDM͏ m  Z"l"!6>ʥ *}҆ *M ͱ*}x O͐} W͐ͱ !+s#r!+s#r#4D ͠:\ʹ :\=Oͳͩ !6!)6l :) :)=2) :] & !"}2\!h6?!j6?\:'C:'ƀo&")!)6!"):)/)HҘ]!)6> !)ڎ*)&*)*)&*) y!)6 Ä:) 2):)<2)M*)#")/:)ҩ*)+")`*")#"]!*)!/H!")!"]*)) *)s#r!)*)) *)) N#Fq#p*)) *)s#r*)#")!)6 J:)!)J!)6 :)<2)*)")҈q:tw͠ͱ!"))ҍ*)) ^#V")]͠.*)DM\ -°!\6:\ͣ:ͱ*}DM'ͫ*)%) N#F'ͫ*)!) N#F'k͐ͫ*)) N#FͫR͐/͐ *) ~IO͐NW͐ͫ8AO͐:͐ *) ~2)t(͐:)҃)͐*)#")Ã& \!"))\Ұ*)")]͠*)M! ^#V *) >*) w *) >*) w *) >*)-:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W!9"1W͜Q>2!͢QG}DrYQ|͏}͏#> ex͏#r* _> e> e ҉0Ë7e}} :³ʳ7_<2!~ɯ2|\\FILE DUMP VERSION 1.4$ NO INPUT FILE PRESENT ON DISK$!Y , <    *$A!6 # T!w $r# *`: 0 *A*! ~ ʰxkb))))_y‘BK{ͅ*!66!"80*{#z+++ #:2͠!4 F :® )!6>!ګ ͠:O!9 DMi 8ͱ!6> !ڤ Å :2k ä  ͐:!O!Y DMi w !4C F :¿ >F : F :=229:Y= ;>9*&Y DM =2 I>!6:=28 :2:2 :!!29:Y T >:Y,e \>Ì !p+q*~:ʉ *N͐*#"o :͐!p+q!'"!6> **{2*́"PY! ">!+~H !6:0O͐à k͐)6> !).*)&*)*)&*) w:)<2)*)) >w#6*)) w#6*)!) w#6*)%) w#6*)) N#F*)) q#p*)%) *) ~e *) * ~o&͞ *)%) q#p!)6* >!)6!)6>!)=:)!)w=*)&*)~2):)*)& *):)2):):*)!) *)) s, >X\:)“>!d!")>!)d!")!")*++!)a*)) ^#V")]*)")*)) ^#V")]!)6> !)T*)&*)~2)*)&*)~2)O;*)) ^#V" w *) >*) w.*)DM\ -+!\6uͱ:)O! DMͱ*)#")Ù*))))))"):m w>.Yn -:YS:Z Hҧ!6> 2)½>!)6> !)*)&*)>2) :) .͐*)M͐:)<2)99:Y=/9&ͩ c,Hͩ 9 EHͺ i`N#Fog_og_ogDM!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_z#W1&0*"!>8>?!hw#w#w#w!":\F_\x ^!]6? ͙F\ʵƀ* "o& ͙!͢k~#™4~:60+~0Ң60â !**}|1 "#!>K6 #=͙ >. * ͙ʹͪͪͪͪ !    !^b#~RʾSʠBm{ 9͍bʇbG͍b2#~0? ?{bbGb®͊ 9}k))_P}|}2#~0 ?)T])) a decimal Sector Number "S349" or Enter B and a hex Block Number "B2A" or Enter R to reprint dir.dump, Ctl-C to exit: $ Incorrect - Unrecognized Input$ Sectors 0 to 19 are in the system track area They are not accounted for as a CP/M BLOCK$ r S and a decimal Sector Number "S349" or Enter B and a hex Block Number "$ CP/M BLOCK XX CONTAINS SECTORS p, Ctl-C to exit: $ $5-16 $ TOTAL FCBs listed = 0 Directory Capacity is 64 (Hard Disk is 256) $ NO FILES MATCHED, WILL SHOW ALL$ Enter S and1l!{w#?ö 22|2:] 6ö:m Dö \!l?\>2# L&:ʶ\;<̶{{<̶\¦{GĶÌ{Y<̶l NO SOURCE FILE$AMBIGUOUS FILE NAME$NO DESTINATION FILE$NO DIRECTORY SPACE$SOURCE AND DEST. FILES IDENTICAL$OUT OF DISK SPACE$WRITE PROTECTED???$COPY COMPLETED$ʒͱ:7*7!o>g~#fo:7O*7xʼyŸ"6IDENTICAL$OUT OF DISK SPACE$WRITE PROTECTED???$COPY COMPLETED$ʒ_!Sʹ!h6 #P3*[E 9*)#[r!h ͙*)[(##~ ͊}02l2q͊}02k2p{02j2o!>))Җ ڢ=33=~´#~0:~0:#)_P}|}2#~ FILENAME.EXT-EXTENT -#of - BLOCK NUMBERS ALLOCATED TO FILE (in Hex) -Number -RECS- 1- 2- 3- 4- 5- 6- 7- 8- 9-10-11-12-13-14-15-16 $ TOTAL FCBs listed = 0 Directory Capacity is 64 (Hard Disk is 256) $ NO FILES MATCHED, WILL SHOW ALL$ Enter S and>FORMAT VERSION 1.0 COPYRIGHT,1980 NORTH STAR COMPUTERS,INC.1H!v 2!qDz!GQz!2zX!SG~2#"!* #G202:@ʰ:G*  G:!EQW!"E!E#%"!6# !6# !6 # *0"!4F:T!::O> ͯ*):Sʼ!V!:O>ͯ#~_!"::2,!ʘ!^":! !:O>ͯG!V:O!>ͯ#~¿ó:2>ͯó:O!>CILITY LEAVES SIDE ONE INTACT$ *** ERROR - Can NOT format Quad-Capacity *** CPMGEN was told that Drive is NOT Quad$ Select one of the format options below: D = Double-Density Single-Sided = D Q = Quad-Capacity (Double-Sided)= Q S = Single-Density = S X = eXit - Warm Boot from A: = X Enter option letter (D,Q,S,X): $ - Proceeding to Format 35 * Tracks - $ - Proceeding to Format 70 * Tracks -... $-Dety SQUAD.CAPDOUBLE-D CP/M 2.2<COPY VERSION 1.0 COPYRIGHT,1980 NORTH STAR COMPUTERS,INC.1*!0": !~2&@w"(!"###""-!ͼ %n26 2@ !ͼ nҷF°>2@ !ͼn÷>n>27 !6 n:\:6 *7 x!z ! !; x! ! !Q~25 #!F:@ +!a:7 <+!rͼ LQ]Dn:5 n>f:5 n>ff:5 >n28 02222:@ Œ:7 ʌ:8 >#ڙ2< >2A !"= >!2? "B   :6 O:= G>9 $$z2A  != 4*BURN to Exit: $ To Surface Check Only, Enter "N", To Verify-Compare two diskettes, Enter "V", To Copy, Enter OUTPUT Drive number(1-4): $ Enter SECOND INPUT Drive number(1-4): $ Proceeding to copy x sided diskette $ Surface-Checking (read & CRC check) x sided diskette $ Verifying-Comparing two x sided diskettes $ Verification/Comparison: $ Surface Check: $ Copy: $ Input is CP/M Quad-Capacity Diskette Enter RETURN for normal two-sided$A Input is CP/M Single-Sided Diskette Although Q will F** COPY ABORTED *** OUTPUT ERROR CANNOT BE FORCED $r D r RETURN or Q for two-sided$ Input is CP/M Quad Diskette BUT drive(s) not two-sided per CPMGEN, D Forces processing ONLY one-sided$@ Input is CP/M Single-Sided Diskette Enter D or RETURN for one-sided$@ Input lacks CP/M capacity code Enter RETURN or D for one-sided$ Copy COMPLETE$ Surface Check COMPLETE$ Verify COMPLETE$ *** but ERRORS were FOUND & BYPASSED $ *ͯ: ~#A*11?怰 North Star CP/M 2.20 Diskette Formatter Initializes Diskettes for use with CP/M $ To format as: CP/M 2 Double-Density$ Load Diskette in Drive: X, Strike RETURN when ready,$ Diskette Successfully Initialized $ Enter Drive number(1-4): $ To format as: Quad-Capacity Diskette: $ To format as: Double-Density Diskette: $ To format as: Single-Density Diskette: $ EXTEND CP/M2 SINGLE-SIDED TO Quad-Capacity SPECIAL FA XXXXXXXXDISKETTECPM FROMNORTH * STAR ---------SYSTEM--TRACKS-BIOS USER CPM CCP CPM BDOS --------DIR.SEC1DIR.SEC2DIR.SEC3DIR.SEC4--------CPM DATADATASEC1DATASEC2DATASEC3DATASEC4........ :? =¬:7 ~:@ P>!2? "B :7 O:> G> 9 ڳ!> 4*B :? = ~>!2? :7 O:> G<2> >9 $$z i:? =U*< }§:@ :7 <:A <nnO$O~#:6 O!>9 A_15?0G*O~ 怰>2 North Star CP/M 2.2 Diskette Copier (ver 1.0) Copies Double-Density or Quad-Capacity Diskettes $ Mount the Diskettes to be processed and- Enter INPUT Drive number(1-4): Or Mount System Diskette and RETorce two-sided process, Enter RETURN for normal one-sided$ Input is not recognized as CP/M Diskette Enter D for one-side or RETURN or Q for two-sided$ Input is CP/M Quad Diskette BUT drive(s) not two-sided per CPMGEN, D Forces processing ONLY one-sided$@ Input is CP/M Single-Sided Diskette Enter D or RETURN for one-sided$@ Input lacks CP/M capacity code Enter RETURN or D for one-sided$ Copy COMPLETE$ Surface Check COMPLETE$ Verify COMPLETE$ *** but ERRORS were FOUND & BYPASSED $ *1;SYSGEN 1.0COPYRIGHT,1980 NORTH STAR COMPUTERS,INC.*0" X82n !4!+5:O!4>!4:O!,>:O!> 5A?Ɓ2P  ~# : Enter Destination Disk Drive number(1-4)- or RETURN to Cold-Boot from drive 1- or CONTROL-C to Warm-Boot ? $ Load output diskette in drive x and RETURN to write CP/M system onto it? $ If System RAM Image already in RAM (@1400H), Enter RETURN- To re ; ; FILE-TO-FILE COPY PROGRAM ; ; AT THE CCP LEVEL, THE COMMAND ; ; FCOPY R:X.Y Q:U.V ; ; COPIES THE FILE NAMED X.Y FROM DRIVE ; R TO A FILE NAMED U.V ON DRIVE Q. ; BOOT EQU 0000H ;SYSTEM RESET BDOS EQU 0005H ;BDOS ENTRY POINT FCB1 EQU 005CH ;FIRST FILE NAME SFCB EQU FCB1 ;SOURCE FCB FCB2 EQU 006CH ;SECOND FILE NAME DBUFF EQU 0080H ;DEFAULT BUFFER TPA EQU 0100H ;BEGINNING OF TPA ; PRINTF EQU 9 ;PRINT BUFFER FUNC# OPENF EQU 15 ;OPEN FILE FUNC# CLOSEF EQU 16 ;CLOSE FILSAGE JP FINIS ;DONE LP1: DEC C ;COUNT 16...0 JP NZ,MFCB ;LOOP 16 TIMES ; ;NAME HAS BEEN MOVED. ZERO CR XOR A ;A=00H LD (DFCBCR),A ;CURRENT REC=0 LD (FCB1+32),A ;READ REC=0 LD (DIFF),A ;DIFF FLAG=0 ; ;CHECK FOR BLANK FCB'S LD A,(FCB1+1) ;LOAD FIRST CHAR OF SOURCE FILE NAME CP 20H ;BLANK? JP NZ,LP2 LD DE,NOFILE ;READY MESSAGE JP FINIS ;DONE LP2: LD A,(FCB2+1) ;LOAD FIRST CHAR OF DEST FILE NAME CP 20H ;BLANK? JP NZ,LP4 LD DE,NODEST ;READY MESSAGE JP FINIS ;DONE ; ;ad System into RAM Image, Enter Drive number(1-4)? $ Load input diskette in drive x and RETURN to read CP/M system from it? $ North Star CP/M 2.2 Sysgen Any response of CONTROL-C causes Warm Boot $ 1*0" 2U4 :O!*>!*!4:O!> kette in drive x and RETURN to write CP/M system onto it? $ If System RAM Image already in RAM (@1400H), Enter RETURN- To reE FUNC# DELF EQU 19 ;DELETE FILE FUNC# READF EQU 20 ;SEQUENTIAL READ WRITEF EQU 21 ;SEQUENTIAL WRITE MAKEF EQU 22 ;MAKE FILE FUNC# ; .Z80 LD SP,STACK ;LOCAL STACK ; ; MOVE SECOND FILE NAME TO DFCB LD C,16 ;HALF AN FCB LD DE,FCB2 ;SOURCE OF MOVE LD HL,DFCB ;DESTINATION FCB MFCB: LD A,(DE) ;SOURCE FCB INC DE ;READY NEXT LD (HL),A ;DESTINATION FCB INC HL ;READY NEXT ; ;CHECK FOR AMBIGUOUS DESTINATION FILE CP 3FH ;QUESTION MARK? JP NZ,LP1 AMBIG: LD DE,AMBFILE ;READY MESAMBIGUOUS SOURCE FILE? ;IDENTICAL SOURCE AND DEST? ;***N.B.***DOESN'T COMPARE DEFAULT DISK WITH SPECIFIED DISKS. LP4: LD C,11 ;LENGTH OF FILENAME LD DE,FCB1 ;SOURCE FILENAME LD HL,FCB2 ;DESTINATION FILENAME SCHK: LD A,(DE) ;GET CHAR INC DE ;READY NEXT CP 3FH ;QUESTION MARK? JP Z,AMBIG ;YES, SO DISPLAY ERROR CP (HL) ;DIFFERENT? JP Z,LP3 LD A,0FFH ;YES, SO SET FLAG LD (DIFF),A ;STORE FLAG LP3: INC HL ;READY NEXT DEC C ;COUNT 16...0 JP NZ,SCHK ;LOOP 16 TIMES LD DE,SAME ;READY MESSAGE LD A,(DIFF) ;GET FLAG CP 00H ;FLAG SET? JP Z,FINIS ;DONE IF NAMES WERE THE SAME ; ;SOURCE AND DESTINATION FCB'S READY ; LD DE,SFCB ;SOURCE FILE CALL OPEN ;ERROR IF A=255 LD DE,NOFILE ;READY MESSAGE INC A ;255 BECOMES 0 CALL Z,FINIS ;DONE IF NO FILE ; ;SOURCE FILE OPEN, PREP DESTINATION LD DE,DFCB ;DESTINATION CALL DELETE ;REMOVE IF PRESENT ; LD DE,DFCB ;DESTINATION CALL MAKE ;CREATE THE FILE LD DE,NODIR ;READY MESSAGE INC A ;255 BECOMES 0 CALL ZAGE INC A ;255 BECOMES 0 CALL Z,FINIS ;SHOULDN'T HAPPEN ; ;COPY OPERATION COMPLETE. END LD DE,NORMAL ;READY MESSAGE ; FINIS: LD C,PRINTF ;WRITE MESSAGE GIVEN BY -DE- CALL BDOS ;WRITE MESSAGE JP BOOT ;REBOOT SYSTEM ; ;SYSTEM INTERFACE SUBROUTINES ;(ALL RETURN DIRECTLY FROM BDOS) ; OPEN: LD C,OPENF JP BDOS ; CLOSE: LD C,CLOSEF JP BDOS ; DELETE: LD C,DELF JP BDOS ; READ: LD C,READF JP BDOS ; WRITE: LD C,WRITEF JP BDOS ; MAKE: LD C,MAKEF JP BDOS ; ;CONSOLE MESSAGES ; ; FILE PRINT PROGRAM ; ; AT THE CCP LEVEL, THE COMMAND ; ; FPRINT R:X.Y ; ; PRINTS THE FILE NAMED X.Y FROM DRIVE ; R ON THE SYSTEM PRINTER. ; FEATURES: 1) TABS EXPANDED TO EVERY 8 COLUMNS. ; 2) ^C ABORTS PRINT-OUT AND RETURNS TO CP/M ; 3) ^S STOPS PRINTING;^Q STARTS PRINTING. ; BOOT EQU 0000H ;SYSTEM RESET BDOS EQU 0005H ;BDOS ENTRY POINT FCB1 EQU 005CH ;FIRST FILE NAME SFCB EQU FCB1 ;SOURCE FCB DBUFF EQU 0080H ;DEFAULT BUFFER TPA EQU 0100H ;BEGINNING OF TPA ; ;GET CHAR INC DE ;READY NEXT CP 3FH ;QUESTION MARK? JP Z,AMBIG ;YES, SO DISPLAY ERROR DEC C ;COUNT 16...0 JP NZ,SCHK ;LOOP 16 TIMES ; ;SOURCE FCB'S READY ; LD DE,SFCB ;SOURCE FILE CALL OPEN ;ERROR IF A=255 LD DE,NOFILE ;READY MESSAGE INC A ;255 BECOMES 0 CALL Z,FINIS ;DONE IF NO FILE ; ;SOURCE FILE OPEN. ;COPY UNTIL -EOF- ON SOURCE ; LD B,07H ;SET-UP COLUMN COUNTER LD (BSAV),BC ;INITIAL COLUMN COUNTER SAVE LOC. COPY: LD DE,SFCB ;SOURCE CALL READ ;READ NEXT RECOR B ;RE-SET COLUMN JP NZ,SKIP ;SKIP RELOAD IF B NE 0 NEWLN: LD B,08H ;RE-SET B SKIP: LD (BSAV),BC ;SAVE B LD C,05H ;SET PRINT CALL 0005H ;PRINT IT LD C,0BH ;GET CONSOLE STATUS CALL BDOS ;GET IT INC A ;255 BECOMES 0 JP NZ,NEXT ;SKIP IF NO INPUT LD E,0FFH ;READ CHAR,DIRECT IO LD C,06H ;DIRECT IO CALL BDOS ;GET CHAR CP 13H ;DC3? JP NZ,NEXT1 ;NO, SO IGNORE IT LP11: LD C,0,FINIS ;DONE IF NO DIR SPACE ; ;SOURCE FILE OPEN, DEST. FILE OPEN ;COPY UNTIL -EOF- ON SOURCE ; COPY: LD DE,SFCB ;SOURCE CALL READ ;READ NEXT RECORD OR A ;EOF? JP NZ,EOFILE ;SKIP WRITE IF SO ; ;NOT -EOF-, WRITE THE RECORD LD DE,DFCB ;DESTINATION CALL WRITE ;WRITE RECORD LD DE,SPACE ;READY MESSAGE OR A ;00 IF WRITE OK CALL NZ,FINIS ;END IF NOT SO JP COPY ;LOOP UNTIL -EOF- ; EOFILE: LD DE,DFCB ;-EOF-,CLOSE DESTINATION CALL CLOSE ;A=255 IF ERROR LD DE,WRPROT ;READY MESS NOFILE: DB 'NO SOURCE FILE$' AMBFILE:DB 'AMBIGUOUS FILE NAME$' NODEST: DB 'NO DESTINATION FILE$' NODIR: DB 'NO DIRECTORY SPACE$' SAME: DB 'SOURCE AND DEST. FILES IDENTICAL$' SPACE: DB 'OUT OF DISK SPACE$' WRPROT: DB 'WRITE PROTECTED???$' NORMAL: DB 'COPY COMPLETED$' ; ;DATA AREAS DFCB: DS 33 ;DESTINATION FCB DFCBCR EQU DFCB+32 ;CURRENT RECORD DIFF: DS 1 ;FLAG FOR COMPARING SOURCE AND DEST FILES ; DS 32 ;16 LEVEL STACK STACK: END  PRINTF EQU 9 ;PRINT BUFFER FUNC# OPENF EQU 15 ;OPEN FILE FUNC# READF EQU 20 ;SEQUENTIAL READ DIRIO EQU 6 ;DIRECT IO ; .Z80 LD SP,STACK ;LOCAL STACK ; ;NAME HAS BEEN MOVED. ZERO CR XOR A ;A=00H LD (FCB1+32),A ;READ REC=0 ; ;CHECK FOR BLANK FCB'S LD A,(FCB1+1) ;LOAD FIRST CHAR OF SOURCE FILE NAME CP 20H ;BLANK? JP NZ,LP4 LD DE,NOFILE ;READY MESSAGE JP FINIS ;DONE ; ;AMBIGUOUS SOURCE FILE? ; LP4: LD C,12 ;LENGTH OF FILENAME LD DE,FCB1 ;SOURCE FILENAME SCHK: LD A,(DE) D OR A ;EOF? JP NZ,EOFILE ;SKIP WRITE IF SO ; ;NOT -EOF-, WRITE THE RECORD LD D,80H ;LENGTH OF BUFFER LD HL,80H ;START OF BUFFER LD BC,(BSAV) ;GET TAB COLUMN COUNTER WRT: LD (SAFE),HL ;SAVE HL LD A,(HL) ;GET CHAR CP 09H ;TAB? JP Z,TAB ;EXPAND TABS LD E,A ;SET CHAR FOR PRINT CP 0DH ;END OF LINE? JP Z,NEWLN ;RE-SET B DEC BH ;GET CONSOLE STATUS CALL BDOS ;GET IT INC A ;255 BECOMES 0 JP NZ,LP11 ;KEEP WAITING LD E,0FFH ;READ CHAR LD C,06H ;DIRECT IO CALL BDOS ;READ IT CP 11H ;DC1? JP NZ,LP11 ;NO, SO LOOP AGAIN NEXT1: LD DE,ABORT ;PREPARE MESSAGE CP 03H ;^C? JP Z,FINIS ;END IF ^C TYPED NEXT: LD HL,(SAFE) ;RESTORE HL INC HL ;POINT TO NEXT DEC D ;80...0 LD BC,(BSAV) ;RESTORE B JP NZ,WRT ;LOOP 80H TIMES JP COPY ;GET NEXT REC TAB: LD C,05H ;SET OUTPUT TAB1: LD E,20H ;SET FOR BLANK LD (BSAV),BC ;SAVE B CALL BDOS ;SEND BLANK LD BC,(BSAV) ;RESTORE B DJNZ TAB ;LOOP TILL B=0 LD B,08H ;RE-SET B LD (BSAV),BC ;SAVE B JP NEXT ;GET NEXT ; ; ;PRINT OPERATION COMPLETE. END EOFILE: LD DE,NORMAL ;READY MESSAGE ; FINIS: LD C,PRINTF ;WRITE MESSAGE GIVEN BY -DE- CALL BDOS ;WRITE MESSAGE Y COMPLETED$' ; ;DATA AREAS ; SAFE: DS 4 BSAV: DS 4 DS 32 ;16 LEVEL STACK STACK: END  ;SEND -CR- JP BOOT ;REBOOT SYSTEM ; ;SYSTEM INTERFACE SUBROUTINES ;(ALL RETURN DIRECTLY FROM BDOS) ; OPEN: LD C,OPENF JP BDOS ; READ: LD C,READF JP BDOS ; AMBIG: LD DE,AMBFILE JP FINIS ; ;CONSOLE MESSAGES NOFILE: DB 'NO SOURCE FILE$' AMBFILE:DB 'AMBIGUOUS FILE NAME$' ABORT: DB 'PRINT-OUT ABORTED.$' WRPROT: DB 'WRITE PROTECTED???$' NORMAL: DB 'COP.PHASE 0DA00H .Z80 ; ; ;***** USER AREA ***** USER AREA ***** USER AREA ***** ; MICROANGELO BASIC INPUT OUTPUT SYSTEM ; PERFORMS CHARACTER INPUT/OUTPUT FOR THE ; CP/M SEQUENTIAL DEVICES - CONSOLE & LIST ; ;THESE ROUTINES ARE FOR MICROANGELO SYSTEM(56K MEMORY) ;MAY BE REPLACED IN EITHER THE SYSGEN-RAM-IMAGE AT ; 3200H-33FFH, OR IN SECTOR 8 (IN THE SYSTEM TRACK AREA), ; ; ;****** BEGINNING OF JUMP VECTOR ********************** ; JP INIT ;COLD BOOT INIT (USART & PARITY SETUP) ********************** ; ; ; ; ;*** MICROANGELO I/O ROUTINES *** ; ;INPUT FROM KEYBOARD ATTACHED TO PARRALLEL PORT *** CINL: IN A,(06H) AND 02H JP Z,CINL IN A,(00H) PUSH AF LD A,30H OUT (06H),A POP AF CP 99H ;SWITCH UPPER CASE? JP Z,ALP NOP NOP LD C,A LD A,(UPP) CP 00H JP NZ,UPPER LD A,C RET ALP: LD A,(UPP) XOR (0FFH) LD (UPP),A JP CINL UPPER: LD A,61H LP3: CP C JP Z,YES INC A CP 7BH JP NZ,LP3 LD A,C RET YES: RES 5,C LD A,C RET ; LD E,0DH ;CLEAR BUFFER ON PRINTER LD C,05H ;SET FOR PRINTER CALL BDOS ;SEND -CR- JP BOOT ;REBOOT SYSTEM ; ;SYSTEM INTERFACE SUBROUTINES ;(ALL RETURN DIRECTLY FROM BDOS) ; OPEN: LD C,OPENF JP BDOS ; READ: LD C,READF JP BDOS ; AMBIG: LD DE,AMBFILE JP FINIS ; ;CONSOLE MESSAGES NOFILE: DB 'NO SOURCE FILE$' AMBFILE:DB 'AMBIGUOUS FILE NAME$' ABORT: DB 'PRINT-OUT ABORTED.$' WRPROT: DB 'WRITE PROTECTED???$' NORMAL: DB 'COP JP CONTST ;CONSOLE TEST FOR INPUT JP CINL ;CONSOLE INPUT (PARRALLEL PORT) JP COUTL ;CONSOLE OUTPUT(MICROANGELO PORT) PRTSER: JP COUTR ;SERIAL PRINTER(RIGHT SERIAL PORT) JP COUTL ;PUNCH TO CONSOLE JP CINL ;PAPER TAPE READER FROM CONSOLE JP PRTTST ;TEST PRINTER STATUS - NULL IMPLEMENTATION PRTPAR: RET ;PARALLEL PRINTER (IF CPMGEN TOLD PARALLEL) ;*** CPMGEN ALTERS BIOS+10H TO JUMP TO "PRTSER" OR "PRTPAR" ; DEPENDING UPON PRINTER INTERFACE ANSWER. ; ;****** END OF DEFINED JUMP VECTOR ******;CONSOLE INPUT PENDING TEST CONTST: IN A,(06H) ;GET LEFT USART STATUS NOP ;ROOM FOR PATCHING AND 02H RET Z LD A,(0FFH) RET ; ;OUTPUT TO CONSOLE VIA MICROANGELO PORT. ;NOTE HANDLING OF -LF- AND -CR- AND CURSOR ADDRESSING COUTL: LD A,C CP 81H JP Z,CADD LD A,(AFLG) CP 00H JP NZ,SKIP LD A,C CP 0DH JP Z,CR CP 0AH JP Z,LF LD C,A LP11: IN A,(0F1H) AND 01H JP NZ,LP11 LD A,C OUT (0F0H),A RET CR: CALL READ LD C,81H CALL LP11 LD C,D CALL LP11 LD C,00H CALL LP11 RET LF: CALL READ LD B,C LD C,80H CALL LP11 LD C,00H CALL LP11 LD C,0DH CALL LP11 CALL READ LD C,81H CALL LP11 LD C,D CALL LP11 LD C,B CALL LP11 RET READ: LD C,82H CALL LP11 CALL RD1 LD D,A CALL RD1 LD C,A RET RD1: IN A,(0F1H) AND 02H JP Z,RD1 IN A,(0F0H) RET CADD: LD C,A LD A,02H LD (AFLG),A JP LP11 SKIP: LD A,(AFLG) DEC A LD (AFLG),A JP LP11 AFLG: NOP UPP: NOP ; ;OUTPUT TO LEFT SERIAL PORT (PRINTER) COUTR: IN A,(03H) ATA BITS, NO PARITY LD A,37H ;CMD: RTS,ER,RXF,DTR,TXEN OUT (03H),A ;SECONDARY(RIGHT)SERIAL PORT INITIALIZATION LD A,0CEH ;2 STOP BITS, 16X CLOCK OUT (05H),A ;& 8 DATA BITS, NO PARITY LD A,37H ;CMD: RTS,ER,RXF,DTR,TXEN OUT (05H),A ; ;PARITY INITIALIZATION LD A,40H ;DISABLE PARITY LOGIC OUT (0C0H),A ;BEFORE READING UNWRITTEN RAM LD HL,00H ;PREPARE TO CYCLE THROUGH RAM LD A,0E0H ;END OF 56K OF RAM ;LAST 8K NOT DONE TO AVOID MDS DISK CONTROLLER ;SO ABOVE LINE AVOIDS STD E800H, ALSO OUT (0F1H),A LD A,0DH OR (80H) OUT (00H),A XOR (80H) OUT (00H),A XOR (80H) OUT (00H),A RET ; ; ; THE LAST 80H BYTES OF THIS 512 BYTE USER AREA IS NEEDED ; BY THE DISK BIOS FOR TWO SPECIAL PURPOSES. ; 1. SUPPORT NON-STANDARD DISK CONTROLLER PROM ADDRESSES ; 2. AUTOSTART HDBOOT AND SUPPLY THE WORK-FILE PATHNAME ; FOR NORTH STAR HARD DISK SYSTEMS. ; ; IF YOU HAVE NEITHER A NORTH STAR HARD DISK ; NOR A NON-STANDARD MDS PROM ADDRESSES, ; THEN YOU MAY FREELY OVERWRITE THE ARE12|:] Ì \? \R<Č\<̌!͔G>ÌNO DESTINATION FILE$AMBIGUOUS FILE NAME$NO DESTINATION FILE$NO DIRECTORY SPACE$OUT OF DISK SPACE$WRITE PROTECTED???$FILE SAVED$DUPLICATE FILE NAME$27ʒʒʒʒͱ:7*7!FILE$NO DIRECTORY SPACE$OUT OF DISK SPACE$WRITE PROTECTED???$FILE SAVED$DUPLICATE FILE NAME$27ʒʒʒʒNOP AND 01H JP Z,COUTR LD A,C NOP OUT (02H),A RET ;NULL IMPLEMENTATION OF PRINTER TEST PRTTST: XOR A ;LEAVE ZERO IN A RET ;DONE ; ;*********** INITIALIZATION CODE **************** ;******* PERFORMED ONLY ON COLD BOOTSTRAP ******* INIT: NOP ;THREE NOP'S FOR PATCHING NOP NOP ; ;INITIALIZE MOTHER BOARD AND SERIAL PORTS XOR A OUT (06H),A OUT (06H),A OUT (06H),A OUT (06H),A ;STANDARD (LEFT) SERIAL PORT INITIALIZATION LD A,0CEH ;2 STOP BITS, 16X CLOCK OUT (03H),A ;& 8 DF0,F8,... TINPAR: LD B,(HL) LD (HL),B INC L JP NZ,TINPAR INC H CP H JP NZ,TINPAR ; ;PARITY ALL CORRECT, ENABLE PARITY TESTING TINU: LD A,41H ;TURN PARITY ON OUT (0C0H),A ;ON RAM BOARDS ; ;REMOVE ANY JUNK APPEARING IN INPUT PORTS IN A,(02H) ;FROM STD PORT IN A,(04H) ;FROM SECOND PORT ; ;INIT PARALLEL PORT AND ANY PRINTER ON IT LD A,30H ;RESET PAR. INPUT FLAG OUT (06H),A LD A,60H ;SET PAR. INPUT FLAG OUT (06H),A LD A,01H ;RESTART MICROANGELO OUT (0F1H),A LD A,00HA AND USE THE ; ENTIRETY OF SECTOR 8 IN THE SYSTEM TRACK AREA. ; ; IF YOU DO HAVE A HARD DISK OR NON-STANDARD MDS PROMS, ; THEN YOU MUST LEAVE THE LAST 80H BYTES INTACT. ; IN THE SYSGEN RAM IMAGE, YOU MUST LEAVE 3380H THRU ; 33FFH UNMODIFIED, USE ONLY 3200H-337FH FOR YOUR ; REPLACEMENT USER AREA  IF YOU HAVE NEITHER A NORTH STAR HARD DISK ; NOR A NON-STANDARD MDS PROM ADDRESSES, ; THEN YOU MAY FREELY OVERWRITE THE AREWaa>0:O:Ey:2>aS<{Gy˩y:y:y ʆ ʘO{yͼ{J{{ͼA{{ {ͼ{J{H{{WOO>2{:=2{yɯ>>7>>7>@!>Fp,$>A>0>`>>> ɱO>2{:=2{yɯ1f2|:]  \? \<CB\!KB">~ ʪ_ ^`CB <›“ <~~ *>#KBK8 CBKBCBÛ/  NO SOURCE FILE$AMBIGUOUS FILE NAME$PRINT-OUT ABORTED.$WRITE PROTECTED???$COPY COMPLETED$7z^ ͱ"6"7y27ͰNO SOURCE FILE$AMBIGUOUS FFPRINT BAK#LMVMPRINT MACMPRINT $$$FPRINT COMU ; ; FILE INPUT PROGRAM ; ; AT THE CCP LEVEL, THE COMMAND ; ; FINPUT R:X.Y ; ; READS A BINARY FILE FROM THE CONSOLE AND STORES ; IT IN FILE X.Y ON DISK R:. ; THE PROGRAM IS PRIMARILY USED TO TRANSFER ; PROGRAMS BETWEEN DIFFERENT COMPUTERS. ; **NOTES** ; 1) USES A 128 BYTE BUFFER, STARTING AT 80H. ; 2) SENDS A ^S WHEN INPUT SHOULD BE SUSPENDED ; AND A ^Q TO RESTART INPUT. ; 3) WILL NOT INTERPRET AN CODES. ; 4) -EOF- SET BY A 5 SEC. DELAY WITH NO INPUT. ; BOOT EQUENTIAL WRITE MAKEF EQU 22 ;MAKE FILE FUNC# DIRIO EQU 6 ;DIRECT IO COUNTH EQU 5 ;5 SEC. DELAY FOR -EOF- COUNTL EQU 0FFFFH ;MAXIMUM INNER LOOP DELAY CONST EQU 3 ;CONSOLE STATUS PORT CONIN EQU 2 ;CONSOLE INPUT PORT ; .Z80 LD SP,STACK ;LOCAL STACK ; ;ZERO -CR- SECTION OF FCB. XOR A ;A=00H LD (FCB1+32),A ;READ REC=0 ; ;CHECK FOR BLANK FCB'S LD A,(FCB1+1) ;LOAD FIRST CHAR OF SOURCE FILE NAME CP 20H ;BLANK? JP NZ,LP4 LD DE,NOFILE ;READY MESSAGE JP FINIS ;DONE ; ;AMBIGUOUS DESDIR ;READY MESSAGE INC A ;255 BECOMES 0 CALL Z,FINIS ;DONE IF NO DIRECTORY SPACE ; ;DEST. FILE CREATED AND OPEN ;COPY UNTIL -EOF- ON SOURCE ; COPY: LD D,80H ;LENGTH OF BUFFER LD HL,80H ;START OF BUFFER RD: PUSH HL ;SAVE -HL- PUSH DE ;SAVE -D- CALL GETCHAR ;GET NEXT CHAR INTO -B-.A=FF FOR EOF. INC A ;255 BECOMES 0 JP Z,EOFILE ;PERFORM END OF FILE POP DE ;RE-LOAD BUFFER LENGTH POP HL ;RE-LOAD BUFFER POSITION LD (HL),B ;SAVE NEW CHARACTER. INC HL ;POINT TO NEXT DEIF WRITE OK CALL NZ,FINIS ;END IF NOT SO LD DE,SFCB ;SET FCB CALL CLOSE ;CLOSE FILE LD DE,WRPROT ;READY MESSAGE INC A ;255 BECOMES 0 CALL Z,FINIS ;SHOULDN'T HAPPEN LD DE,NORMAL ;READY MESSAGE ; FINIS: LD C,PRINTF ;WRITE MESSAGE GIVEN BY -DE- CALL BDOS ;WRITE MESSAGE JP BOOT ;REBOOT SYSTEM GETCHAR:LD B,COUNTH ;SET OUTER LOOP COUNTER LD DE,-1 ;SET DECREMENTER LOOPA: LD HL,COUNTL ;SET INNER LOOP COUNTER LOOPB: IN A,(CONST) ;CHARACTER READY? AND 02H ;READY? JP NZ,READY ;JUMILE JP BDOS ; AMBIG: LD DE,AMBFILE JP FINIS ; ;CONSOLE MESSAGES NOFILE: DB 'NO DESTINATION FILE$' AMBFILE:DB 'AMBIGUOUS FILE NAME$' NODEST: DB 'NO DESTINATION FILE$' NODIR: DB 'NO DIRECTORY SPACE$' SPACE: DB 'OUT OF DISK SPACE$' WRPROT: DB 'WRITE PROTECTED???$' NORMAL: DB 'FILE SAVED$' DUP: DB 'DUPLICATE FILE NAME$' ; ;DATA AREAS ; SAFE: DS 4 DS 32 ;16 LEVEL STACK STACK: END  0000H ;SYSTEM RESET BDOS EQU 0005H ;BDOS ENTRY POINT FCB1 EQU 005CH ;FIRST FILE NAME SFCB EQU FCB1 ;SOURCE FCB DBUFF EQU 0080H ;DEFAULT BUFFER TPA EQU 0100H ;BEGINNING OF TPA CONOUT EQU 0DA09H ;JUMP TO CONSOLE OUTPUT CHAR ROUTINE SAFE2 EQU SAFE + 2 ;SAFE SPOT FOR -D- ; FINDF EQU 17 ;SEARCH FOR FIRST FUNC# PRINTF EQU 9 ;PRINT BUFFER FUNC# OPENF EQU 15 ;OPEN FILE FUNC# CLOSEF EQU 16 ;CLOSE FILE FUNC# DELF EQU 19 ;DELETE FILE FUNC# READF EQU 20 ;SEQUENTIAL READ WRITEF EQU 21 ;SEQUTINATION FILE? ; LP4: LD C,12 ;LENGTH OF FILENAME LD DE,FCB1 ;DESTINATION FILENAME SCHK: LD A,(DE) ;GET CHAR INC DE ;READY NEXT CP 3FH ;QUESTION MARK? JP Z,AMBIG ;YES, SO DISPLAY ERROR DEC C ;COUNT 16...0 JP NZ,SCHK ;LOOP 16 TIMES ; ;DESTINATION FCB READY. ; LD DE,SFCB ;DESTINATION FILE CALL FIND ;ERROR IF A=255 LD DE,DUP ;READY MESSAGE INC A ;255 BECOMES 0 CALL NZ,FINIS ;END IF DUPLICATE NAME LD DE,SFCB ;DESTINATION FILE. CALL MAKE ;CREATE DEST.FILE LD DE,NOC D ;80...0 JP NZ,RD ;LOOP 80 TIMES ; ; BUFFER FULL SO SAVE ON DISK. ; LD C,13H ;LOAD DC3 CALL CONOUT ;SEND DC3 LD DE,SFCB ;LOAD FCB ADDRESS CALL WRITE ;WRITE RECORD LD DE,SPACE ;READY MESSAGE OR A ;0 IF WRITE OK CALL NZ,FINIS ;END IF NOT SO LD C,11H ;LOAD DC1 CALL CONOUT ;SEND DC1 JP COPY ;GET NEXT RECORD. ; ; ; INPUT OPERATION COMPLETE. SAVE LAST BUFFER AND END EOFILE: LD DE,SFCB ;SET FCB CALL WRITE ;WRITE LAST RECORD LD DE,SPACE ;READY MESSAGE OR A ;00 P OUT IF YES. ADD HL,DE ;INNER COUNT JP C,LOOPB ;COUNTL...0 DEC B ;COUNTH...0 JP NZ,LOOPA ;LOOP TO END LD A,0FFH ;SET EOFILE FLAG RET ;RETURN READY: IN A,(CONIN) ;GET CHARACTER LD B,A ;TRANSFER TO B LD A,00H ;SET DATA IN FLAG RET ;RETURN ; ;SYSTEM INTERFACE SUBROUTINES ;(ALL RETURN DIRECTLY FROM BDOS) ; OPEN: LD C,OPENF JP BDOS ; CLOSE: LD C,CLOSEF JP BDOS ; ; WRITE: LD C,WRITEF JP BDOS ; MAKE: LD C,MAKEF JP BDOS ; FIND: LD C,FINDF ;SEARCH FOR DUPLICATE F