EXTENDED CPC DSK File Disk-Info CPDRead v3.24PTrack-Info  N >PC Toolsp 3м|66xV> | &=t&3أzx |s.0|2|61|r6b} u  t6x} u|  ur3ҡ6 |8|.3|5|64||*PXr=(8|vR& |Zر:6|rŶ%u@@ȸ6|p6}6} t };w2xzIBMBIO COMIBMDOS COMIO SYSMSDOS SYS Disk Boot Failure Non-System disk or disk error Replace and press any key when ready ULî÷+@L1S2! S )>$ WS(:PX!DO:02*|>ͮ v!^4Gx 4s1.!y**";!*[((+ (A (I(M(Z(q>>>+>P0  >"S  &ÙzEP!f"y*"!P-w-w-w-wt%t!P!">!((.)(/*(0(,1(,=(<*EYRʙT(i*"!I!t>/!w2-28!">2! 8!"P0_:WHK "!PR"E*Prrrrrrrr 8"O! n&)),)*! n&))), 88H"`o)) P&o)))*Pw w w w w w w w*[# 0 P &͙!P"S>!w={abcdefghikj/*.- !"#$%&'()O,Q+WIU RYT@xy]\^_pq<=sr23wvmG67>?z{:;l[CBVMNЦADFSZPEX` AECDER UIULLONOOARSTU EAYZ 000000llllllll0,x|0f066f`0`00` 000 0xx000000088`0 ||08<000|p|||`pXl``>`f<x ~|`0||||`<00000p  p0`0|pxf x8l~|~xx>ll>>>xxx00000x````f<f66f8ll8~~8lƶl~~6f|||000000|ll88l8lx000`8 | | 0`|`````|0x 0<`|fvv||||p~|v08000x`p```f<f6>f800000xnv||vvv|~~pl8ll8l|`8 0 000`00v88|8|`0fll`0f`088pfl`0|fllx`0`00`0ll~``0`|fl|l~l`~l`x8f66f|l`||8f|l~l|l0` |`l $(hP( $ PP$( <$((X(   ((~@  <$~(<(>(~ >$B 8Z *$<(R <<$<(>(<(|J ~< T(~(y>0?۱W(yӰ۱0۰ɯ2>(:Track-Info N     Ҽв {,#,1P,,,,,3,2$@PAO$P,,0PP,(,(,*,*K,(P,),))Ou,,,/0,,, ,0,P,,,`{,#2=2jP,"ͧͦ,%,'2&$'L ͦ2=ŦX3Y,%22Y,%2+2Ŧ,"ͧX3Y,%2+<#<<ޥ2< P,#X܁26:2>62$%,% 6ŧ,'2Q2-`2=$'@=`6L7$'^$$Ј 4=~6 ,'2=$'{=`6[,'2=62&$'~7L <`2&$''2&L ,'6»ů徼߶ů߾߭ebq`bdOVTOfϴ߯߼вߙ߲߬ߩ`bdOnoOfq`bdOϳffd`bsf׼לߵ-6߳23!~#F#N!# : Ox# y !(5>242E(0Z:47ķZ!6f͌:4=7͕~#y (`is1!3(5 >!(V({|(#<+>!2""!~+( wA2ÍInsert disk A: / Push any ke$ $ \:7O W\$ `:7O W`$ $?!M1˖< b!M:8 GA>XP*R'{(gz8I(=(5((( >!w> :2:=Ϳ2=Ϳ<2>>!wSƀo&F,Vͩ!:=z^4 o&~ ( (-}08:! Kx5[6S6*5꯽(>=}7ɯ2&PK|o8z   AZ$ կ!I(!V>(0>( >ߢ@ 0W!F(>_A8[0> WN7ˎ>WS77/?.,90 -^\87654321hgfedcbaponmlkjixwvutsrq][@zy :; L":4:3y>> !C !C1>GPX!DS!7~###W(!"!">!60wK!7!;>ݦ0s r !!,#>Ay P B y d(^*?&)))+ͮ:6AO!͙!7 >!()8)_ :?(!͙*?&))))_:6 !""Oy yy! R0   / R0~#$O $: Floppy disk drive $ E: Memory disk board $ K bytes $ydd><)_ =~|('&%$#"!HGFEDCBAPONMLKJIXWVUTSRQ}{`ZY *+ !N>!wP*~/w|ʶ=H˼MD!s|(.(E!RDM!͌>Ew,w,w,w# :_ !z8@8ƀwvJ!{( !B(!ͻ*&DM)) ia: ɇ`o*w>Poxgw!y /g7.g!P":W .:W̯>^ıG ( 0>ͱ  (ͯ ͦ- !"ͦͯ:O! ~#ͱͯBoot erroUser breaRead/write error: Retry/Abort/IgnorDisk sel SUB AUTOEXEC Copyright (c) 1989 L.E.C., LudEk JirouSek > .> ͏> ͕~.~#(  22<VO Ky2ۯ2:۷=!۾_3/+'  A͏ 8 >1. 0_Շ!۶2:2a{_:۷(A(9:=2 *!DM!6#5ͳ(!ͣ(+6 E!F#x(~Lww!" !~64!h#͕*~!ect error: Abort/IgnorNORMCAPSGRAPGRAP"!"*@"@:B2B(QR8 R"@2B͓pj͓>:ͨ` ͓͓>:ͨ(͓>0=R0:/0> &> &&o)) P*#"+.ݬw - Ͱ=!P"ͯͱ0ͯͦͦ;*!"hͷo};>0##"S>_AƷ!!:WX![Ͱ:!7oN:7:?*=EAPDyE *sͪ0|}z>0 n/7(  !6:7sͪ8.#>?.͕+ 8=_.:;<> o$>!>2*5S( @G:(:wx2p(#* 6?w(#6 . (#* 6?w(#6 #6" #~?  x!:y # y# 21y2y_2:Է 1͕>>.U 2C:۷t!V_~#fo!v"!fÞpÞC:۷! ~ ($#0 WxxՀՂG ~ # x!>~:۷=!۾:C!~  6?#ͷx0.jw((͇|]z]>!R <7( PX!z /w# J7!e/G8A &ow &o~ Ͱ!3~6*;+| :??23&t8+| k\`Ͱ>?z+0+n/ !y.zإ Oإ 7.P`-(W >>>:>>/͇8͇WW} 2C:CW(ttPTrack-Info  N (s:`O> 8X{ ͕>:͏͍>:͏͍x  >  (> ͏x 0 ͍ ;C w͞U!5+#~Y+#"~.=r~&o)C(+2|(+!  ͳ< ͞ C:ͷ .!*5=(_ #"C G!~͞Sٷ(p p2ͷ( x~_: "! >Ӽ:=0\SB#*QF#DM*J6# x *U*Js#r*>6#6ryi>(: #~$ =2 :_ø:P/GyO:02͔:<<2>2_!cq*"dryi(b[d(0R:cO:0 ~08"y($?(x ( ( Nk # :u2!_~Яwr>øͩ |i͙6;ͩPYy( ͥ0*Q{z0BKͥ08Op\(:2|%B8bk \(\D8=\ͳ<(M: :۷"=2E" !8h= eC!~2>E~2ۯ2\!!!~( (#B~(#x2͕ 61E+͞C: !۶+DIR ERA TYPESAVEREN USERCOPYzجؠtRead erroNo filAll (Y/N)Disk fulFile existNo spacCOM$$$ SUB(Y/N)>*w~#+w#w+ɯ22u2vs|i * :h(~ w ~ 5  '# ! #  8 w ~>2]Ì!5ͩ*!7"|i"!w# ! w w2]i* ~<w( G:P!]( $ 4~($|i :^<(͓i( øͼ>2`>2^:n!l8 !2n: ( </ü>2`>2^ͩ*͜:nҼ C͢2b(O ͽDM>} >ø"p* :h:b(sO s#r::`== :y== 3*DWw#S*r"p<$ܲy2y"zs"{2a!"1W2k2i2!y)K!P܇_^#V*f݉ޥުޯ޳ݵ)2=CLUZ`glqzX޻1ͩKy*z͜͜:A2͜_Iͦ!~6 Of  :   2>:|  :y!~4 5~y 5 6y0 ^!@Oy  !:~ ̀  #!͜:~!} ! ! ! $Of:~2}*N# } } x(:~2|M x(~+v ͜ݯ2}*p:OG# "pN<$:n!l8w4!w :` /!~ =2n6/2`[!!~~#~O~G#n,-. W! w! y !x(4.:<(*! q!p:< . (͓.:<(ø6}2W'WeN! ~态O>G~G!~G} |*!r#r#ri( _y#x#{8s+p+qͩ* !!q#p#w*::OF}K:`": :a!w>2i*~=2a0:2j~2kw͎:*w>"ø!"8":!"2͙͙ !>w :}!~05x ͅ 3ͅx( #NV:|!~2|x!|5 #wOV~x p !/*y<(<  :!qMDæ2>! ^#V:O|^#V#S[">##"@##"B##D*FL*Q|!h6(6>*@w#w*Bw#w'*! *uF"p"w!pN#F*B^#V*@~#foyx0 *LR+*L8 yx8#*YDM*@s#r*Bs#rRDM[[0MD!!NF:n?G>O:m (* :h(n& ^#V͢Oͽ"p*p}:N*p)= "r:OO:n页o"~?(~?͙|\*d"͙ͩ\͙e>2͙"͙`͙Ó͙͒e*:#:øS2͙͙>2͙*}/_|/*:W}_*8":}o|g"8:i(*6:k( w:j2a͎{*}D͙>2`[eBDOS error on : Read/only file: Abort/Ignore $p* *! ~2n~2l:P2m :` O:nw:lw <*D鯆# ):O!Zyoxg*8:OF}!8N#F`"8*S#*>s#r ~!sK!Z|/W}/_*8zg{o"8*:zg{o":Nk*D:to$*~6w*u*>{#zr+s*w[WRO[H*w ( ́wS$S!<!DN#F$*D[<!u~#?@ABNIPBDOS1MAC-.$$$NC$$$INI]FDISK PRN FDISKS MZF4!"$%FDISK PRNWFDISKMS REL#FDISKC COM2NC U CCP MAC_.78:;<ZNAKY BIN9BIOSINITMAC~=>INIRD OMDFDISK COM6@ABCINTERCA MZF@HIJKLB COM EINTERCO MZFiTUVWXYZL80 COMV[\]^_`ARIT MAC5FGLMBIOSINITRELNOBIOSLOADCOMPQRSabcdBIOSHDD REL9gCCP RELnoCMT REL {|CMT MACpqrstuvwM80 COMM80 COM CMT MAC%xyzBIOSLOADMAC?fBIOSLOADCOM eBIOSLOADRELBIOSLOADCOMhijklm}~ZAKAZNIKCOM MZXFORM COMMZXSYS COMCHS MACCNV MACMZXUP COMMZXUP COMCPM MAC BIOSLOADCOM DIO MAC'IDE8 MAC2IDEBOOT MACLB MAC MBR MACKMZF MACPTABLE MAC NC2 COM BIOSKBD MACpBDOS REL BIOSDSK MACNC2 COM9NIPBDOS BIN/0BIOSHDD MACXD4 COMPNC$ NC INIRD$C NC COM9NC I NC T!NC II"NIPBDOS REL #NC TXT$%&'()*+NC TXT,-FET OM{/0123456POWER COMvXDOS43 HLPLXD43 OVRSUB COM TAPE COM   TAPE COMXD43 OVR=XD43SH OVRXD43SH OVR=BIOSDSK MACHNIPBDOS1MAC !"#$NIPBDOS1MAC%&'()*+,BIOSHDD MAC=BDOS BIN12NIPBDOS MACS345678$$$ SB9Track-Info  N t2 #  Ȁe & dABB4.!ɢ 1 9Lf3)f: p4$!J< ;Nb1n2 o: #I. (Hhj cHfQ cI)fQ hj1ei1eNȈj@ K)*m(q f i+H 8 & dABB4.!ɢ 1 9Lf3)f: p4$!J< ;Nb1n2 o: #I. ( 'Writing to drive...',0D MOPTIONS: DEFM 'FDISK Options',0D MNDET: DEFM 'Number of fixed disks detected: ',0D MCURRENT: DE""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> FM 'Current fixed disk: ',0D MCHOOSE: DEFM 'Choose one of the following: ',0D MCHOICE: DEFM 'Enter choice: ',0D MPROMPT: DEFM '[ ]',0D MPRESKEY: DEFM 'Press any key to continue:',0D MNOTIMP: DEFM 'This feature is not implemented yet.',0D MNODISK: DEFM 'no fixed disks detected',0D MRDERR: DEFM 'Fixed disk read error!',0D MWRERR: DEFM 'Fixed disk write error!',0D MMBROK: DEFM 'Master boot sector updated OK:-)',0D MNOPAR: DEFM 'No partitions are defined',0D MNOTWO: DEFM 'Less than two drives S>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M ͫCopyright (C) 1985 BORLAND IncBTeleVideo 912/20/25MP)(=0r00C *JEE RT)1(1~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0(9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́ d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! Track-Info  N  ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(>  !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}>22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*Track-Info  N !F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!K<>-I-232 '!!M5 Floppy disky '!!M6 RAM disk '!!M0 Konec prce '!H! ͞#*&́!0!6͛OEʷ)*&}2)*&! E)*&#}2*&!6E)!0}2*&! Ek(!!fzZ*}2Ē!(*Ē&͛ͺ&  *Ē&# **&}2͒*͒&!(! !L!͕"!,! ͛ͺZadej pkaz (max.15 znak.): ̈́#!,!͛ͺ  M!!!!n&f"! *DM}2!*&DM}2}! *}&DM}2t! *t&DM͛ ͛ͺNvrat do operanho syst.. }2`}2a"b*b !!*a&.!*`&G!! o&!͒E"!!͛ ͛ͺChyba na disku. `!}2T}2U"V*V !!*U&.!*T&G!! !DMo&!͒Eʔ"!!͛ ͛ͺChyba pi zpisu `!}2H}2I}2J}2K*K&*J&*K&*I&fz"}2?͛!" *?&#"*J&#*H&+fzEz?+}2!:!!*&n&e.=!*&#+!.!!!ͮ#!!fzʄ+}2!*&! s*&#]+!:ͣ!Eʪ+!!!s!!:ͣfz^,}2!*&n&́!a!z͛OE,!*&!!*&n&! Rs;,!*&!!*&n&s!*&!!s*&#û+͑#:-"!-!!D!͕"!.!͛ͺ Zadej barvu  ̈́#!1!͛ͺ (0..15):  !<!*!!&͑#!!fz9-}2#}2>*K&*>&͛!" *I&*>&͛!" *>&#"*K&*H&*K&*I&fzʃ#}2?͛!" *?&#b#͛ͺ0 ͛ͺ1 !o&}2}2!""}2$}2%!}2*%&*$&*":͛!ͪ ͞#*&!*&!}o*&*&́! !~͛O}o}oEr$M*"*%&*$&͛ͺ  !}2*&́! !~͛O*":ͣ*!&}oEʿ$*":*&e.=*"*&!*&!}o*":ͣ!}oE%*"!!-*&͛ͺ  *&#,!1}2!)!!H!͕"!-! M1 Barva papru '!-! M2 Barva inkoustu '!-! M0 Zpt '!-!͛ͺM tento vbr funkc  ͞#*&́!0!2͛OE.*&}24.*&! E4.*&#}2*&!2EM.!0}2*&! EA-*&!1E~.!4!3e,*&!2Eʝ.!4!4e,*&!0EA-!'! !N!͕"!+! ͛ͺ Dlka ppnut klvesy v milisec. !+!*"!n&+s͛ͺ  *&! E#"""}2}2!}2*&*&*^#V͛!& ͞#*&!*&!}o*&*&́!0!9͛O}o}oE%!*s#r*&*&͛ͺ  !}2*&́!0!9͛O*^#V!͸}oED&! *^#V*&!0R*s#r*&!*&!}oEʊ&*^#V! *s#r͛ͺ  *&! *^#V*ͥ}o*^#V*͸}oES%"""}2}2*n&"*&*&!**̈́#͛ͺ (0..99):  !6!!4!5!!c&͑#4!/!!D!͕"!2!͛ͺ  !3!͛ͺPoet bit  !0!͛ͺ  !0!͛ͺ  ̈́#!3!͛ͺ (5..8):  !4!Kn&!@!}2!=!!!!&!4!I!4!In&!|g}o*&!R! s!4!K!4!Kn&!?|g}o*&!R!@s͑#!/!!F!͕"!2!͛ͺ  !3!͛2%**s!֒!֒!n&*&E6'̈́#͛ͺ !֒:!ͪͺ  ͑#!!!$!͕"!!͛ͺ  !(!!M!͕"!,! ͛ͺM nsledujc monosti !,! ͛ͺ(Pouij SPACE nebo sla  !,!͛ͺk vbru funkce. Kdy m  !,!͛ͺvybrno, stiskni CR. ) !!M1 Start po sputn '!! M2 Nastaven barev '!! M3 Ppn pi psan '!! M4 Parametry RSTrack-Info  N   )udovanm textovm editorom. Dobr, e? Funguje to! U teraz sa z toho tem, aj ke to ete nCPM MAC EIDE8 MAC2FGHIIDEBOOT MACJKMBR MACKLMNOPXD4 COMPWXYZ[XDOS43 HLPL\]^_`XD43 OVRabcdefghXD43 OVR=ijklXD43SH OVRmnopqrstXD43SH OVR=uvwxNC IINC UzE-3!4!Gn&!|g}o!#}243!}2!D!!!!&*&!Eʄ3!4!G!4!Gn&!|g}osù3!4!G!4!Gn&!|g}o!*&+s͑#!-!!E!͕"!/!͛ͺ  !2!͛ͺHandshake md  !/!͛ͺ  !.!͛ͺ  ̈́#!0!͛ͺ (0=off,1=on):  !4!Kn&! |g}o! }2!?!!!!&!4!K!4!Kn&!|g}o! *&s͑#!1zsobnka PTRL EQU NEWSP ;pointre pre av panel PTRR EQU PTRL+0100 ;pointre pre prav panel SUBL EQU PTRR+0100 ;sbory pre av panel SUBR EQU SUBL+0900 ;sbory pre prav panel CBUF EQU SUBR+0900 ;pracovn buffer 16 kB KONIEC EQU CBUF+4000 ;prv adresa, do ktorej u ;NC nesiaha. Nesmie by ;via, ako word na adrese 6! ;(NC si to sm oetr.) END }2!)!!J!͕"!-! M1 Dlka slova '!-! M2 Poet stop-bit '!-! M3 Funkce parity '!-!M4 Handshaking '!-!M0 Zpt '!/!͛ͺVyber si z nabdky  ͞#*&́!0!4͛OE06*&}2L6*&! EL6*&#}2*&!4Ee6!0}2*&! E5*&1R‹6R/ø62R›60ø63R«62ø64R¸6ͽ3!!fz7}2!**&͛ͺ LD HL,(6) ;----------------- LD DE,KONIEC OR A SBC HL,DE JR C,MALAPA LD (OLDSP),SP LD SP,NEWSP CALL INI CALL MAIN CALL EXI LD HL,0 PUSH HL EI RETI LAMTO: DEFB 3 ;tabuka na test regularity LAMAA DEFW 0F21F ;DISK SELECT ERROR DEFB 0ED,073,014 DEFB 0E DEFW 0EA01 ;vst. vektor BIOSu DEFW 0EA4C ;COLD boot JP 0EA4C ;WARM boot JP 0EAAE ;KBD test JP 0EAB7 ;KBD read JP 0EAD5 ;CONOUT DEFB 2 DEFW 0F3C4 ;vektor preruenia DEF *&#6*&!0E5LC!+!!I!͕"!,!͛ͺ  !/!͛ͺVlo poet floppy disk !,!͛ͺ  !,!͛ͺ  ̈́#!/!͛ͺ (1..4):  !4!6n&#}2l!9!!l!!&!4!6*l&+!|g}os͑#*&}2Z*k&!0}2!!fzʭ8}2l!:*l&͛ͺ  *l&#s8!9!!K!͕"!;!M 1 Disk A: '!;! M 2 Disk B: '!;! W 0F3C6 ;a adresa skoku DEFB 2 DEFW 0F9E6 ;READ error DEFW 0F8E2 DEFB 2 DEFW 0FA38 ;WRITE error DEFW 0F8E2 DEFB 2 DEFW 0FD00 ;VLO DISKETU... DEFW 0F8E5 DEFB 3 DEFW ARETI ;koniec preruenia EI RETI DEFB 1 DEFW ARET ;return RET DEFB 2 DEFW 0EA53 DEFW 0F753 DEFB 2 DEFW 0F66B ;test, i je LAMA upraven DEFB 04D,044 DEFB 0 LAMTN: DEFB 3 ;tabuka pravy systmu DEFW 0F21F ;pre nae potreby DEFB 0C3,032,0F2 DEFB 0E DEFWM 3 Disk C: '!;!M 4 Disk D: '!;!M 0 Zpt '͞#*&́!0!4͛OEu9*&}2Ñ9*&! Eʑ9*&#}2*&!4Eʪ9!0}2*&! Eʭ8*&!0R}2k*Z&}2!!fz$:}2l!'*l&͛ͺ  *l&#9!'!͛ͺ ͛ͺ !,!͛ͺ0 Zpt !,!͛ͺNsledujc vbr !}2kP8*k&!E$2>/!] ~S >R27 >2& >s2- :]RS)VMFPIGʾLʣ1  v i :m$ +:n͆O:o͆27 0  d 08:8>10ɯ2dG̈́ͧi 2dGi dG̈́  v i d ? v !;"!"!"  v  VU  v >MNi S >(21!_>>6ׯV>>̯y!>:!7 >2p%!>2>2>!>28"9>2 >2!!~w#| INIRD NC !p"!I5!5!5!6p"0!5!5!5! H!!Z6 $7!! 69!@" !("  !!K 6) !p!=>> ( > 7 (ɯ2o2n~g:n7:o /2oH7 HM͖ ~(ɷ>1>2^** SUPERMON V.S# (C) SOKODI 1988 ** V>2ͦdU2 D d>2ͦdM v !$2͖:3 i v l!6v n!om :(!m x2x!m xv K!# [ v Track-Info  N :=(  v v <6  v v Yi   *"v v F *R"8(:( :"8 . # v  *R 1*R *Z*R ! :7 2:27 :27 !~ (2?08 [0:8A0>-#>  w#6#>   v !^͛#.͛^͛#^80![րo0$~>-}----------^------E`--TGH-BXDRPCQAZWSUI--KFV---JN--M---OL----Y{-v v <  v v Yi  !*"v v F *R"8(.!~ ?_͛#v v F v  ( ><!$6#!u w#K!l !6"#!6.#6 !"sv 3 2v v !:<22v v v :<2!(("ͱ:!g<"!g ͸ ͈ 7!"!Kg ͱ͸ ͈ 7!R>2v 3 v v > *"v v > !*R"(0v  ( ><i: y v ( |  v >Z "0!0!'A?!4!;*0&s!4!<*0l&s! !fzʐA}2/!**/&͛ͺ  */&#GA*&}2.!1}2!)!!H!͕"!,! M1 Startovac as '!,! M2 as pechodu stopy '!,!M3 Norml. krok as '!,!M0 Zpt '!.!͛ͺZvol si  ͞#*&́!0!3͛OEʤB*&}2B*&! EB*&#}2*&!3EB!0}2*&! EʠA*&1RB@0C>R= >>yZ Z (>y>)=8 ! 6 X *#"7}o%A }&d 6 % e * 6 (% 6 - 6 ʫ !"= w# x *= N = N 7>2!(("!ͱy ͣ >2!"K!ͱy ͣ !(("ͱ1 v ! !g ͸ ͈ 7!"!Kg ͱ͸ ͈ 7x "~0# >~ Z # x” *| }  '[ x       >y% % >2RC!4!=@0C3R0C!4!>@*&!0EʠA*.&}2!1}2!&!!L!͕"!'!͛ͺ%  !*!M1 Poet floppy disk '!*! M2 Poet stop '!*! M3 Poet stran '!*! M4 Krokovn '!*!M5 as diskovch operac '!*!M0 Zpt '!,!͛ͺVyber si z nabdky  ͞#*&́!0!5͛OEE*&}2y% % >y, >y, > =' >9=.  ,..  : : v v 7 Thank you !$ SHARP MZ monitor $ Bad parametr !$ ------------------------------ MZ tape <-> CP/M Convert v.7 (c) SOKODI 1988,microWare 1989 ------------------------------ $ ----------- HELP ------------- Command :-------------------- Put Get Load Save Verify Find Run Mon default 2400 Bd 2x faster command/S 1200 Bd normal Parametr:---------E*&! EE*&#}2*&!5E6E!0}2*&! ESC*&1R\E$7ÙE2RlE͙:ÙE3R|E7<ÙE4RŒEͱ=ÙE5R™E>?!!fzE}2l!'*l&͛ͺ%  *l&#äE*&!0ESC!&!͛ͺ'  !&!͛ͺ ͛ͺ ͛ͺ !(! !J!͕"!,! ͛ͺKapacita disku v kB  ̈́#!,!͛ͺ (0..1024): ----------- for S,P,R name of file(/s) for L,G,F,V -number of files -hex load speed ------------------------------ $ Run ? [ /N/S via SUPERMON]$ File not found !$ Wrong file !$.MZF Ok$ File name: $ Disk is full !$ File exist ! Delete ? [ /Y]$ Skip file: $ Loading : $ Save : $ Found : $ Put file: $ Get file: $ Press play !$ Press record & play !$ Check sum error !$ Break !$?ave : $ Found : $ Put file: $ Get file: $ Press play !$ PresTrack-Info  N   !4!?n&!"!9!!!!2%!4!?*!s͑#!1}2!)!!K!͕"!-! M1 Pepsat star systm '!-! M2 Spustit nov systm '!-!M3 Spustit star systm '!-!M0 Zpt '!/!͛ͺProve vbr  ͞#*&́!0!3͛OE^H*&}2zH*&! EzH*&#}2*&!3EʓH!0}2*&! EUG*&1RH!4!!"!!!"I2RI!!Wi!!i!!iܲy2y"zs"{2a!"1W2k2i2!y)K!P܇_^#V*f݉ޥުޯ޳ݵ)2=CLUZ`glqzX޻1ͩKy*z͜͜:A2͜_Iͦ!~6 Of  :   2>:|  :y!~4 5~y 5 6y0 ^!@Oy  !:~ ̀  #!͜:~!} ! ! ! $Of:~2}*N# } } x(:~2|M x(~+v ͜ݯ2}I3RI!! *&!0EUG!4!!͕!!!!͕!M!!!!n&fzʩI}2!:!!*&n&e.=!*&#kI!:MSETUP͍EJ!!!s!!fzJ}2!*&! s*&#I!!!"!1}2>!!!P!͕"!!!M!͕"̈́#!!͛ͺ S E T U P + Version 2.2 CS k͛ͺ# Copyright (c) 1991 mZx Soft.  ̈́͑#!!fz K}2!&*&͛ͺ)  !>w :}!~05x ͅ 3ͅx( #NV:|!~2|x!|5 #wOV~x p !/*y<(<  :!qMDæ2>! ^#V:O|^#V#S[">##"@##"B##D*FL*Q|!h6(6>*@w#w*Bw#w'*! *uF"p"w!pN#F*B^#V*@~#foyx0 *LR+*L8 yx8#*YDM*@s#r*Bs#rRDM[[0MD!!NF:n?G>O:m (* :h(n& ^#V͢Oͽ"p*p}:N*p)= "r:OO:n页o" *&#øJX'}2*&1R'Ki*ÄK2R7Kb,ÄK3RGKͰ.ÄK4RWKO/ÄK5RgK!7ÄK6RwK͑FÄK0R„KNG*&}2!EʭJ 1R1i*K2R2b,/K3R3Ͱ.?K4R4O/OK5R5!7_K6R6͑FoK0R0# Copyright (c) 1991 mZx Soft.  ̈́͑#!!fz K}2!&*&͛ͺ) p* *! ~2n~2l:P2m :` O:nw:lw <*D鯆# ):O!Zyoxg*8:OF}!8N#F`"8*S#*>s#r ~!sK!Z|/W}/_*8zg{o"8*:zg{o":Nk*D:to$*~6w*u*>{#zr+s*w[WRO[H*w ( ́wS$S!<!DN#F$*D[<!u~#6#6ryi>(: #~$ =2 :_ø:P/GyO:02͔:<<2>2_!cq*"dryi(b[d(0R:cO:0 ~08"y($?(x ( ( Nk # :u2!_~Яwr>øͩ |i͙6;ͩPYy( ͥ0*Q{z0BKͥ08OMETRII DISKU',0D MGEOMC: DEFM 'Po',0C3,'et cylindr',0CA,': ',0D MGEOMH: DEFM 'Po',0C3,'et hlav : ',0D MGEOMS: DEFM 'Sektor',0CA,'/stopu : ',0D MGEOMM: DEFM 'Zapsat do MBR' MQUEST: DEFM '? (A/N): ',0D MENTD: DEFM 'Zadej ',0C3,'. pevn',0D7,'ho disku',0D MENT1: DEFM ' (',0D MENT2: DEFM '-',0D MENT3: DEFM '): ',0D MENTPD: DEFM 'Zru',0D3,'it oblast ',0C3,0C9,'slo ',0D MENTPS: DEFM 'Nastavit aktivn',0C9,' oblast',0D MSURE: DEFM 'Opravdu? (A/N): ',0D ANSWY EQU 'A' ANSWN EQU 'N' Track-Info  N >*w~#+w#w+ɯ22u2vs|i * :h(~ w ~ 5  '# ! #  8 w ~>2]Ì!5ͩ*!7"|i"!w# ! w w2]i* ~<w( G:P!]( $ 4~($|i :^<(͓i( øͼ>2`>2^:n!l8 !2n: ( </ü>2`>2^ͩ*͜:nҼ C͢2b(O ͽDM>} >ø"p* :h:b(sO s#r::`== :y== 3*DWw#S*r"p<$8.#>?.͕+ 8=_.:;<> o$>!>2*5S( @G:(:wx2p(#* 6?w(#6 . (#* 6?w(#6 #6" #~?  x!:y # y# 21y2y_2:Է 1͕>>.U 2C:۷t!V_~#fo!v"!fÞpÞC:۷! ~ ($#0 WxxՀՂG ~ # x!>~:۷=!۾:C!~  6?#ͷx*p:OG# "pN<$:n!l8w4!w :` /!~ =2n6/2`[!!~~#~O~G#n,-. W! w! y !x(4.:<(*! q!p:< . (͓.:<(ø6}2W'WeN! ~态O>G~G!~G} |*!r#r#ri( _y#x#{8s+p+qͩ* !!q#p#w*::OF}K:`": :a!w>2i*~=2a0:2j~2kw͎:*w>"ø!"8":!"2͙͙(s:`O> 8X{ ͕>:͏͍>:͏͍x  >  (> ͏x 0 ͍ ;C w͞U!5+#~Y+#"~.=r~&o)C(+2|(+!  ͳ< ͞ C:ͷ .!*5=(_ #"C G!~͞Sٷ(p p2ͷ( x~_: "! >Ӽ:=0\S~?(~?͙|\*d"͙ͩ\͙e>2͙"͙`͙Ó͙͒e*:#:øS2͙͙>2͙*}/_|/*:W}_*8":}o|g"8:i(*6:k( w:j2a͎{*}D͙>2`[eBDOS error on : Read/only file: Abort/Ignore $Op\(:2|%B8bk \(\D8=\ͳ<(M: :۷"=2E" !8h= eC!~2>E~2ۯ2\!!!~( (#B~(#x2͕ 61E+͞C: !۶+DIR ERA TYPESAVEREN USERCOPYzجؠtRead erroNo filAll (Y/N)Disk fulFile existNo spacCOM$$$ SUB(Y/N)2"S>>~>*#[%> $ >0$  ( z 7xGz>y{:~}||} _ x  7x )jK7K7ˣ˳<!'KB'!K'KB͋K' ͋ PQVacdeu   ',07>CGFAT12 XENIX DOS16 EXTEND BIGDOS NTFS SPLIT BtMgr DM R/O DM R/W GB Speed 386/ix NET286 NET386 PCIX MZF IDEDOS MZSWAP CP/M BBT NonDos p(!0]T?6>U#w>#w:(1U:)1ôXff"llll|<|n4Xf8llf    Z~<~<~Z~ ~`0 ``f<ff<~`0< ~~>ff>ff>6ff> 0`>00000> .> ͏> ͕~.~#(  22<VO Ky2ۯ2:۷=!۾_3/+'  A͏ 8 >1. 0_Շ!۶2:2a{_:۷(A(9:=2 *!DM!6#5ͳ(!ͣ(+6 E!F#x(~Lww!" !~64!h#͕*~!Track-Info  N  <`|f>fff>ffff<````l8f66f<6nfffff>|ff|6n|<`> > l8fffvlfff<lffffff|`x~0 ~0 0 0 p/ y_W~/w:=  :2 >2>2 >2>!]|!0))))T]V N(: *[ $,: : * :<:<*$,0 0! 0123456789ABCDEF?ABCDEFGHIJKLMNOPQRSTUVWXY :; ][@ZYXWVUTSRQPONMLKJIHGFEDCBA87654321.,90 -^\/?  *+ }{`zyxwvutsrqponmlkjihgfedcba('&%$#"!><)_ =~|  ~~~~~p~pp~8l ``0006~l6l6f7 L.f>ff> llllll~F  F~fffff<ffn@<<, l80fffvl0_8 o> > }Z(Qw 6QQ84886<(I=0~Oo&),ut6~< w7w^Vsr7ws 2!^FO "~F(![A!{a!!>O!0#~ɼؽ !ͻn0 6"F(6( 5 n `~`>ff>6ffffffff<`<<fffff<`6~66~ff>6fff~!O! 2qqr C !""6r :O:Oկ_|V ?W& wu88*  :  0 !O 2    :2<2 ^ c !w4 s!1SL ~{!M^!#E(!&|Gi!(> M: (>MN(!!5 欃ߎܫޘ ׁʂ̌ԐՒڔ㭮圝ߣƺܿ 0>G 0>2^ y2c ! O: *[:<:  W:<_qJT] (zW0!!^ F 4 ͈ 0G:20G:0-%:0_0o:0W0g{0]oz0Tg "S R$," !"0!yx}>0 yoy_->2 |:<8 xgxW:/O 2w 2x xG>́ >V́ >Nā :>́ P  0!w> 0!~>! utwwxy!xG> >V >N :> A!|og~!!]T 7R>!|>)jB0 ?j=  <a<{0O!:9o=29& !::=29:>L2*@:B(RT>:dT>:d:B(> oT2>_W*R |"*@"@:B2B(QR8 R"@2B<SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSa{˯A[GS#xeG?eA0:?q|0S0|0Ɛ'@'!̓8 ))))o!͔8T])))_|}͚è[!Po&~p#:>w w w w w w w w>w w w w w w w w͈ : =s : =ͩ !: =48 6͍ 0!: =405  0!~b (5 0!~C (52>2: :2: !:Track-Info  N x0 ͨ[!L^#V#/R<0ͨ[>0ͨ['d T]#p#w >T?T?$~(%7$^$4$%~%T]6$~("%7$^$4$%w~$(!%ѷ7?O!]*| 7^#V!x-*!*!*!!*"!*"!a{˯0 MD }=|={zͷ> i *OX}ͤ |͔ *QX*WX:RX͔ :PX:YXͤ :NX!~X(!X0nf>'_:LX=Wõ N^#V#N#F^#V#B<0^#V#O N^#V#y/0^#V#O ^#V#A#Ͷ>: 8 >1i 0i 0~ ##>.~ (#0bk 6 ~S# (.( ~#. x_W~S#| V} ( .>ݾ00. .>ݾ0.@A}=?0eA( (  8  ͠^#V#{( T MDx( 0| [} ( .>ݾ0-%͙ ͵ !͑ --%%E>i >i >i D>i g >i >i >Ei >ͩ ͵ i`͑ 0͙ O g E0>|b0>~# ^|͠ 85͙ %('͵ &?8 i`ͅ MD  MD0##_GO{7B8* s#r#q#p#ͤ [s#r#"%-͵ ~#0. .>ݾ0.AA}=?0fA( =ö=Ͷ>:i ÷{ ??( # #6#( ( N!n f}2 >2 )|2 !@A͔!ڎA2!".͞B0!wgo2dA<"bA!BAA!.͞B0Q\|?g"))|#*:O99gB*~* Kp B(C! :(7| ! :<(:<#*+| ":( =#!?7yٹ|ټ}ٽ͓$0 ͓$?Я͢$ #cH8 7Z0 BR0 7B! y |? }intre pre prav panel SUBL EQU PTRR+0100 ;sbory pre av panel SUBR EQU SUBL+0900 ;  iP&)^^#V#,"͙ "22^#V#͠:0O^#V#y2SGx(PN!`T] 7R)k^#V! 0!G:*Ox^B]T+^w4ci0!:(5=(O*^P]T#70!:2<020!:(G5:(<85,0!:(G4:0< :=(4 0220^ !*-͑ :_> (>i *N:0_8(yG(K[XA K[XA0%O͟ Pyi ̩ ~(#0 ͵ r P dLP  dMT` u SPO` PSWP IP R` QBCOP` DE*^` HLjT`  AFRh DFIXh dNC IIA:NC $$$NC$$$.INI$$$NC$$$II$$$ SBNC EXTNC MNUNU COMA:NU NIPSOFT commander V1.0S V sborenastali zmeny.Mlo pamte!UseknVlodisketuA!HadmNastavNastavujemOznaencieovnevojd!vonchobsade ~#i y(> i {> (>ͩ :g :| k 0!^ *^r*-͑ > i F(~#i x=> ̩ (i *͑ w ((w(w (w^"\͙ "X <2Z!XͲ͂!Ͳ͞Ͳ͒Ͳͪxx_nA:A2l@ 2k@!5>2> > 0:o&MD)) s#r ^ 020:8T g[ 0:0>M NN 0_0_2!~X!X:NX(0!((0 !((!(Track-Info  N nchcelkomZmazaVetkynjsprlidlhDopl prkaz:Spustizaloi kBKOI-8 CSASCII 7Latin 2KamenickchPremenvamMmmmnatazapsaZapisujemtamkonfigurciu. panelP. panelav diskPrav diskZruiOpakovaIgnorovaOKChyba pri tanChyba pri zpiseDokem zobrazi max. 128 sborov!Pracujem s diskom, akaj!Chce naozaj skoni?noNieZoradenieZora poda:AdresraMenaPrponyUvateaInformcia:StrunPlnSborsborsborysau nadiskuneexistuje!sborovzdoPM!^͊0&.001N!$͓.w!~'''('j(!,#͒N!$͓.w!~'''((j(1''(1''0!h*^#Vnf"11&(1J)((N!$͓.w!(`)P)!z-#͒N!$͓.w!?((!-NO>!$͓.>g q!?yq!(( !-#ÒNO!4͓.>g q!k)'c)yq!(( j(!-1N!"͓.ͷq!(!-WMD́!`X# i`͒ ( (O `X N!(͓.w!&(!h*#͒NO!(͓.>g q!&yq!( (sr%repsaNecha takNememkoprovapresunKoprujemPresvamna seba!MaemR/OR/WSYSDIRjevymazaNaozajahm utility,ABCDEFGHZvo nejak funkn disk:Neviem njs disk A!1011121314156789Veobecnav uvatePrav uvateZvo uvatea:*? *E)*N0* J@=*U)0*NM* &Z*U'M*Zj*P)w*O T)*j*WX)*w*S\)**D)*N*:'*S#'*Z*'**Z '**O'**I*'+1&2&1&&&{r%N!&͓.w!(`)P)!*8N!0͓.w!&&!.*N!&͓.w!`) '''!K*#͒1& (C) 1992 NIPSOFT Distribtor: mZx software P.O. Box 83 370 04 . Budjovice Disk A:kBkB kB Poloiek:sekov:DIRSYS  $( Ǚ Nzov UZzn.Pol kB PrTyp    +Z0'**O+'O"+)/+A )<+"+B )I+/+C )V+<+D)c+I+E)p+V+F)}+c+G)p+H],)],++],0)],+,+1 )],+,+2 )],+,+3)],+),+4)],+6,+5)],+C,+6)],+P,+7)+,+8)+,+9)+,,A )+),,B)+6,,C)+C,),D)+P,6,E)+C,F)++Vm,'z,I'm,Z,l(,Ap(,N, l(,Ap(,N,(,A(,,M(,,P(,U,(   ( Ǚ Nzov Nzov Nzov   Ǚ( Ǚn f n f5N N#N~S?( OS?(#~=(=(=(͟555͟55͟5N ~ ~ 5=ݾ ~0N!-6*| ~AY/A8w~͵ ^#Vsrn f"3nf"3nf#"3"3~23W^f n )8"3"3og23"323{*3|+"3:3< 23( O!x\ <~K3[3!x\H0!/ ?!6$*7*3-S(,P-?%-K#'-Z5-?B-P#'5-ZR-(_-P'l-R-V!)_-N|- '-Z'-|-V)-N-?-V)-N-l(-A#p(-N- '-O'-Z') +X0') +X '(,~X8 '(,X t(~(,X7 t(~(,X0Tto funkcia zatia nie je implementovan.0Disk je pln!0Adresr je pln!0S.(2.2.".*QX".^ J0".*QX".^ J N!V(,͓.͢i`#͒0!w04~ <(w  p 6p pp:3=U7>23/IU7w 7'7@8^jf <u tnf##~(G&0F ͆5͍5ut##80w wF ͆5H##nf^V50 srut ##0͟ O#~#Si > i ~#Syg 0͟ O>g ͖8>g ~n f~nfR(0Nk,(!$sr%1&!/{r%N'*!.I7IO 7ɯsr%1&N/{r%N(*N2)! +AW)!͓.ͮ!) +.N>):X!+8>W!͓.ͮ!*+. >ÃN>1):X?-!.͓.ͮͷ> i xͽͷ do yͽi`́ ͒ (~#͓ͯ.ͯͮͯͯ͢MDïi`W͒7m{0~608w{0͑60ԡ{0g60Ԁ͠yo yo^́0&͓.͢!+#͒^́0&͓.â^́0&.͓0ͱ00^͊0&͓.M!^͊0&͓.Track-Info  N / ~>W(>Oi  ~!o4(!s4ͷyg ^~# 0G= ~#g =~# | i 0͙ )5!-56(w4!4x %9%9%9%9;:ZXĀ Ñ N~XR}>{͆5o&)^#V! 45~ ͜9W:NX_͊9z{͆5F !~#o~#g~ ( ^Vy:LXGO6yO0͙ :LX݆| )6!y5(!V5%9!o5%9>ͩ ͑ 0͙ :LX݆g.͑ 9(7)  kB v  vybranch sboroch Ñ ͳ958 > &i 0͙ )6!5(!4%9Ñ 0͙ )>| :LXG6!I5(!4%9Ñ 0QN9An f))+KBNO!6͓.> g :A!?3-(!?-ͷyq!( ( #͒ZN:A ~>P[>*}3[ R8 :A>P>K!6͓.w!&(((&'&͒N!6͓.:A!?3-(!?-ͷq!(i`́!gA# i`͒ (gA NB!D͠A!eA!(:A AP(V>2A!͡!!@A͔!0 !eA!ÎA!eALBͶ!!͞"!w <2A>2A2A;" WͶCZF:A<=(1:NXO=<~ ~0 (~8y<=<<;;CZ%(::0 0A~ ;C:0 8A~ 0_59{ݖعW͙ {͜9()6z(| >g 8ͪ:Ñ 80| yg ͖8:09~ F0Gw_8{:i Ñ ͜90; 0͜95s 006 -S<͛<S<͛<06 S<͛ !.T]yGWy O:LXG~=o_~=gW .(.(.>&0:LXg.].yG|gy  0O>!~X!XѷR)$Dg1!eA!͡!8]BͶ! !0!7N1'G!EN!]@A E͙#_W"3S3S3*3R"3"}3*3R"3nf##~(!}3G&## ^#V#͍ͮ > g nf##>g eA #(D!@A!>͠A(D!eA!8:(AP(V -!eA!1s'("܎AځDw <NAA͞"!D!h*m!8Aog~#fo"G 1+!دw <;" ͱ2NhGvF2N%("8hG  `J;JKyK>KKK>K>KYKkKLL!~ MOT˱N'W'_'g'0!O͵ 0!P͵ )0cH>g  >g :[X![HO ^#VSHq!,@N'>g y: !G~#y >?g ~# 0>.>%$#:\÷!7͵ r >h&-͵ >| >i b >i ,͵ ~A2B4!3%9[>v?>| !}3͍ &>&>'>#MDiskMenuUkEditujKoprujPanelAtribtyVymaNov editPresuUlo SETUPSelektujOdselektujUtilityInfoZru nvodMenu editEXT editNastav asSkoniNvratHex/TextKdNjdi vzadNjdiNvratUloKdNjdi vzadNjdi0&=$0o oÑ ͍ )[ ~#i 2>g >+i  yg O)>Fi >6i 2>:i 0^ N#!O>g͵ r > Nvod Y͞@()~@SHIFT(X(1!G$w#)$8ͷH $>GͷH $7,$ ! Hw >%4~()$8ͶI8)$8K )$8 (>%4)$8N:\X( o$o$$K o$$K )$$K )$)$0utq###nfNrHr !HI$?8>| HIø$0!"HH90!WHZH9!HI$?0rH*Jo J!UHI>| HIø$0rH!HIy$͈J#ͅI $!HI>| H*J;"|#_%!@@cHr l q!>%g nf!J'ͷ!."A͑  >i n f))+!̈́H!~@CTRL(~@GRAPH( ~@SH+GR~ 0O#ye@~#i  SUBOR1 TSTk!PRDBNEXT4 SUBOR2 TST!eRDBNEXT3ik1((((N!@AeA #0:A!%)(!)"A1))A)N!0͓.w!((((!P-#͒0͙  } i Ñ 0͙ *A͑ ,> "A0͙ *A-͑ >N͞BG8]B0Nx!BH:eAͭfA7l. xʒBKB B ˯N!B:@AͭAA ߯>70*QX"B^ J 6:A!8)(!.)"Bw!8)(Track-Info  N I!K!GT] 7RG)^#VSAo&G_%:MX!y?@<<;;:\X2\X!HII:[X<2[Ẍ́H*J0!HIy$#ͅI8 $!M* : O99gR0y :\X }oK[X N!͓.!;@ͷ!kX ~(>2H1)'kX1&kX:HO: H ( !HH !H T]+!H  )$$%w $͸$o$: H!H !I$?#o$:HG&LI#>2 HK:HLlL0 L*Jø$!kXH:HG 1#: H :H=(Go$ $:\X( }oI M=2R*RTBRg !&͓.q!?(!-U +G"A~8!@Aw2eA͔!*JA/!>&!J&G"A>2@A2eA*JA"R;"n f "R:R03E2R!B]T?6[@ASeA_%!B@@cHr l q!!Q%9̈́H!.!@A͔!8D͞B8͞B0(P3U>K.͔!8$͞B8>(?G!B >+  x +#!B"R!B"R"R!"R}2R!BT#^ cH>1*RU>?*RU>Lg ~rH*R$,͑ k !VV!QT] 7RQ)^#VRSAo&Q!B[RR0MD!R6*R#"R+]TB(MDkb+!%wN]T*R $&L8o$$K )$COMSUB12345678123;"!@A$M :@Aͭ@A~͵<!K&S%!@A͔!0 1)'!BT]?6͞B81`) '''`0!$M@A N>P ??wutsrwww w  sr ~Sw ~mO(# yL8yٹ8O6##~( aO (4Nsr 6 >GN2&ͮO!͡!01)B'2&ͮOͶ!!7)E:JXA!&wO8(HR7%+"RRMDkb#(+6!R6:R(43U :W>KN*RBR(+)$|!͸E*R"oA!eA! #n-:X :X<<:X :X==د2R{]T͝RRR kX\R <(!%#(K*RLVR(B+ͳW K*RL\R(+#ͳW ͟W2R2R"R2R͝R*RR"RTL:[X<2[Xog"R2R*R"R̈́H*RT  * * BB)BBV)x\ ]*B۷R8sFX1BYͫ[.Z!MsLLî÷8O8(aO!eAͶ!8N~ # (]bk6ͰPO!fAq!w"w#fA"7^~#mO #ɷ {!6͓.!,'*ͷi`́#!B i`͒ (^A!eA:@Aw#~. p+6 BS%xOZ͸N=E!@A~#ͭ>&~!\jB!\͒8 ( (>͒!BJAͦ5(0!FP!@A͔!!BC?6͞B҂M`0!B~mO(aO͸N=E~~mO#!(++~##.!JAx(!BAO~ (# (yG@A>ͭ@A:JMSSkMD2\\ÅZ/8?/2sLLî÷8S~#O^#V#!X2|X͖Y>2|X!CY~#G^#V##0̓Y¤X!YtY0:}X!X(!CYtY>G>0y*^X ia0ͨYx Y͋ͥc͙2JX!~#(O>: ++~A2JX͢2KX2@ADB^'0A~͵;":@A0~8!wͭ!Px ͵ ͤ >͔ :}Xr ͹YB>ί>i   T=="=w===[O>)>>)>Z1MJUDV[G^FUD [FFP?[fUaU`Q[:NX !-M0~/(2X<<;;!.M0ͳX͵<@2c&!W&S%!@A͔!0 1)';"!c&͸N>2}X=E1r)O(_W))O!͓.!@ͷ:!tQ|͸}( ͸E(͸MYOgoFQxFQ{FQy2B"@  tSJS-SSSSSTTTLT?T"W"W"W:W%XWW)Pozcia:9Dka:GKd:#BO\RiRO~K ( #yyP(O{KR]TGRȹ8xB[RR7?~K ( x\R7iR#(\R 7\R#͝R7+VR+VR+iR #% > R͟ = g \R(iR ~#ͪR !YV (/(2X=<:NX(.AK[!JX:X :XZZ:X:X0(#1AQE:NX !.M0!'.M0 =Z!.M0!2.M0=:MX2MX>(*y?2LX!y?@<<;;i sHX^ :JXww:KXw6V:\(=w:l(=w1h&E8!]&& ͦ5 :]X2JX E:JX2]X)E5E{HXDB^':MX!y?@<<=<;;!!8\!ZT] 7RZ)^#VSAo&Z utujem. Mte nevhodn operan systm. Ten sprvny si muste zakpi na adrese: mZx software, Otto Zemek, P.O. Box 83, 370 04 eskVu3*RV:RRV(+|(*R> V#> V^T*R\R:R 2RR(2RB2R*RyR:R< (0o>2RR͕T*RyR"R:R(*R͒R=2RAR2R"R*R͒R0͈2RR"RAR:R2R*RVRȷ(=2R͝RAR"R2R >O2RtS:R2R*R͝R2R*R>O2R:RAR2R2R!BAR2R"R*RVR!B"R0rH>RyR8>g.͑ *RBRͫS*RV :RRV0*R:RG>G*Rx͝R͒R8[RR"RT2R͝RAR2R"R>O2RnTS:R*R( 2R*Rx͒R8T"R:R*R(yR8< 2R͝RxyR8"RyR8Track-Info  N          Budjovice $ Mlo pamti !!! $ Ten sprvny si muste zakpi na adrese: mZx software, Otto Zemek, P.O. Box 83, 370 04 esk׊:MX2MX>(*y?2LX!y?@<<;;i sHX^ :JXww:KXw6V:\(=w:l(=w1h&E8!]&& ͦ5 :]X2JX E:JX2]X)E5E{HXDB^':MX!y?@<<=<;;!!8\!ZT] 7RZ)^#VSAo&Z utujem. Mte nevhodn operan systm. Ten sprvny si muste zakpi na adrese: mZx software, Otto Zemek, P.O. Box 83, 370 04 esk RET GETMAXY: LD A,(MAXY) INC A RET GETMAX: LD HL,(MAXX) INC H INC L RET SAVEWIN: CALL PUAL LD DE,WINDMEMA EX DE,HL SAVEWIN1: LD BC,CRTMEMA-WINDMEMA LDIR RET LOADWIN: CALL PUAL LD DE,WINDMEMA JR SAVEWIN1 SIZEWIN: LD HL,CRTMEMA-WINDMEMA RET ;***************************************************************** VARS: SIFTY: DEFB 0; 1-SHIFT ; 2-CTRL ; 3-GRAPH ; 4-SHIFT+GRAPH YKE1: DEFB 0 YKE3: DEFW 0 KEYF: DEFB NO YINST: DEFB 0 LASTK: DEF,32,32,32,32,32,32,32,32,32,32,32,32,32 DEFB 32,32,32 DEFM "4.SURFACE TEST" DEFB 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32 DEFB 32,32,32 DEFM "5.SAVE FILE TO HARD DISK DRIVE " DEFB 32,32,32,32,32,32 DEFB 32,32,32 DEFM "6.RUN PROGRAM FROM HARD DISK DRIVE" DEFB 13 TXT0: DEFM "========================================" DEFM "MZ-800 IDE INTERFACE TEST BY ZA SOFTWARE" DEFM "========================================" DEFB 13 ;=======MAC:FET !.MAC EXT:FET NC.EXT MZF:CMT R !.! TXT:FET !.! BAK:ERA *.BAK NREXEC MAC8NC EXTNC UNRTIME MACPRAHA PASMZXFORM COMMZXSYS COMMZXSYS MAC0PRAHA BAKMZXUP COMMZXUP COMNC COM1: Preklad FDISK M80 =FDISK L80 8: Makroassembler (M80) M80 =!.MAC 9: M80 s vypisom M80 !,!=!.MAC I: Intercopy CMT R INTERCO C: Intercatalog CMT R INTERCA G: Genmon CMT R GENMON F: FET FET !.! A: Archivcia ARC S: Slov. preklad M80 NCS=NC L80 Z: esk preklad M80 NCC=NC L80 W: Zdrojky na psku TAPE S/S NC.MAC TAPE S/S NRCOPY.MAC TAPE S/S NREXEC.MAC TAPE S/S NRVIEW.MAC TAPE S/S NREDIT.MAC TAPE S/S MENU.MAC TAPE S/S HEL,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32 DEFB 32,32,32 DEFM "2.SLAVE" DEFB 32,32,32,32,32,32,32,32,32,32 DEFB 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32 DEFB 32,32,32 DEFM "3.ABORT" DEFB 13 ;==================================== ;MENU PRO ZOBRAZENI PORTU HDD ;==================================== MENU2: CALL NOKEY CALL CLS700 LD DE,TXT0 CALL PRINT CALL NXTLN LD DE,TXT3 ; PORT 78 CALL PRINT IN A,(&78) ; PRECTEME PORT DP.MAC TAPE S/S PANEL.MAC TAPE S/S NRTIME.MAC TAPE S/S UTIL.MAC X: Zvyok na psku TAPE S/S A:CNV.MAC TAPE S/S A:DIO.MAC TAPE S/S A:WINDOWS.MAC TAPE S/S A:CRT.MAC : Slov. preklad M80 NCS=NC L80 Z: esk preklad M80 NCC=NC L80 W: Zdrojky na psku TAPE S/S NC.MAC TAPE S/S NRCOPY.MAC TAPE S/S NREXEC.MAC TAPE S/S NRVIEW.MAC TAPE S/S NREDIT.MAC TAPE S/S MENU.MAC TAPE S/S HELATA REGISTER CALL &03C1 ; TISK OBSAHU AKUMULATORU CALL NXTLN LD DE,TXT4 ; PORT 79 CALL PRINT IN A,(&79) CALL &03C1 CALL NXTLN LD DE,TXT5 ; PORT 7A CALL PRINT IN A,(&7A) CALL &03C1 CALL NXTLN LD DE,TXT6 ; PORT 7B CALL PRINT IN A,(&7B) CALL &03C1 CALL NXTLN LD DE,TXT7 ; PORT 7C CALL PRINT IN A,(&7C) CALL &03C1 CALL NXTLN LD DE,TXT8 ; PORT 7D CALL PRINT IN A,(&7D) CALL &03C1 CALL NXHL,HL ADD HL,HL ADD HL,HL LD D,H LD E,L BIT 2,(IY+CRTMODE-CRTBASE) JR NZ,SIZEIMG3 ADD HL,DE SIZEIMG3: BIT 1,(IY+CRTMODE-CRTBASE) JR Z,SIZEIMG4 ADD HL,DE SIZEIMG4: LD A,(CRTMODE) CP 2 JR NZ,SIZEIMG5 ADD HL,DE SIZEIMG5: POP IY POP DE POP BC POP AF RET GETWIN: LD HL,(WINDMIN) LD DE,(WINDMAX) INC H INC L INC D INC E RET GETLGTW: LD A,(LGTW) RET GETHGTW: LD A,(HGTW) RET GETSIZEW: LD HL,(SIZEW) RET GETMAXX: LD A,(MAXX) INC A Track-Info  N          TLN LD DE,TXT9 ; PORT 7E CALL PRINT IN A,(&7E) CALL &03C1 CALL NXTLN LD DE,TXTA ; PORT 7F CALL PRINT IN A,(&7F) CALL &03C1 CALL NXTLN CALL NXTLN LD DE,TXTB CALL PRINT KTEST2: LD A,5 LD (&E000),A LD A,(&E001) CP &7F ;KLAVESA "1" JP Z,MENU2 CP &BF ;KLAVESA "2" JP Z,MENU JP KTEST2 TXT3: DEFM " DATA REGISTER " DEFB 32,32,32 DEFM "[#78]:" DEFB 13 TXT4: DEFM " PATT$D3 =LP5nnFFKDotNggHxuEgH/#ӥ^W#"dtX·))h%/¥3u :syJU7uj]9tvnp{<Nà%: < .3;:.4&Ԯyvu+K5BvΑQ58.,b ֛qN7^.bp3tBut u3Zkz٦fŒC$tuthS& 3A. +##|d.&f+4`GGGJ݈u0O"d d_j`$w8^/b<4B.`8f4`P8FY+8@Cp5!nL1 t2lR{4  )udovanm textovm editorom. Dobr, e? Funguje to! U teraz sa z toho tem, aj ke to ete nPANEL MAC"UTIL MACr(NC RELNC RELNCC RELNCC REL&)WINDOWS MAC} CRT REL9NREDIT MACW &'5CNV REL!POKUS SUBPORTY FETs`cdrtp1\ֳqYG>49dqt x[(0vD+nG'HanQ >#Bst q4 <_QnCwH@3bP <-8 rJ 0r.))a<7D'H@aۢ3'J W.[L-kB<nj3 u3@Υ)f]A  0Œ&jf5/,0ۅY.$hm|Z 2S(:DC7HF#aˤ;Vۤ"AtAjTFt%HnfA4T[ aX*5:A&h"6:Yv.y|bELH@֢Seo3\ ``el ɼ >.iBA.v vΐ:.A DEFB 13 TXTB: DEFM " PRESS 1 FOR REFRESH, 2 FOR RETURN" DEFB 13 ;==================================== ;MENU PRO NASTAVENI PARAMETRU DISKU ;==================================== MENU3: CALL NOKEY CALL CLS700 LD DE,TXT0 CALL PRINT CALL NXTLN LD DE,TXTC CALL PRINT LD DE,TXTBUF CALL RDLINE LD DE,TXTBUF+TXCEND-TXTC ; DO DE DAME PRESNOU POZICI 4 ZNAKU NA TEXTOVE RADCE CALL NOKEY ; RADEJI POCKAME AZ UZIVATEL SLEZE Z KLAVESNICE CALL STRHL LD (CYL0:F& "2Y":1Yc>%($TtB$t]tCpeg[%oj?FWIh"+ KejlD:":IB7ȉpY"" Y""]b2fᑍ? .k:"T#EWK wu.$ d2nja@ .zF~2A@0bnxf xZ"ktt٣dEp,8BHC7IFrdZn$?{qo3MnCt@ iI|ϢZ=) )D-tҐ{RBK4aˤtitM#$TtAo8K5{ Q 'd^L+9AQ-+wiIf*6:C,`d3^4d,SKp,k|),HL ; POKUD OK TAK ULOZIT DO PROMENNE CYL0 LD DE,TXTD CALL PRINT LD DE,TXTBUF CALL RDLINE LD DE,TXTBUF+TXDEND-TXTD CALL NOKEY CALL STRHL LD A,L LD (HDS0),A ; POCET HLAV LD DE,TXTE CALL PRINT LD DE,TXTBUF CALL RDLINE LD DE,TXTBUF+TXEEND-TXTE CALL NOKEY CALL STRHL LD A,L LD (SECPT0),A ; POCET SEKTORU NA STOPU WISET: CALL NXTLN ; WIEV SETTINGS CALL NXTLN LD DE,SETTX0 ;VYPISEME PO0f,C|B1tbˤ##0ĎP-] ڰdMN|2D/dXNZR:FK[л}@pX` x<t:Xx=#I?-Vju0V wdZn@b-k!:.V;N`k##9O+@$TFtݤ& C qQG*F,>DKT?tg&ha*F158Ai0Y ֛|_ ӥ| a =/ 5f\!aW*{@s,&F8#x dTtKx],Su Ӌap Ne9Ev5h L֛tXt #P$ ? Рs P!NfL&#C ѩΑ C. CYLINDRU CALL PRINT LD HL,(CYL0) CALL PRNHL CALL NXTLN LD DE,SETTX1 ;VYPISEME POCET HLAV CALL PRINT LD A,(HDS0) LD H,0 LD L,A CALL PRNHL CALL NXTLN LD DE,SETTX2 ;VYPIS POCTU SEKTORU NA CYLINDR CALL PRINT LD A,(SECPT0) LD H,0 LD L,A CALL PRNHL CALL NXTLN ;DOTAZ PRED ZAPISEM DO MBR CALL NXTLN LD DE,SETTX3 CALL PRINT LD HL,&D800+400 ;ZABARVIME MODROU BARVOU LD BC,200 LD DE,&D800+401 LD (HL),&71 LDIR LDTrack-Info  N          1. VOD ------- NIPSOFT commander je distribuovan vlune firmou mZx SOFTWARE a pracuje pod operanm systmom CP/M Lama, ktor sa dodva spolu s programom. Svojvon rozirovanie programovho balka resp. jeho jednotlivch ast, ako aj OS CP/M Lama je prsne zakzan a prvne postihnuten. Program NIPSOFT commander, ktor sa Vm dostal do rk, nie je dokonal. Je to len oklieten napodobenina znmeho NORTON commokonca na tom istom disku pod rznymi uvatemi mete ma rzne NC.EXT. NIPSOFT commander vyhadva NC.EXT vdy na tom disku, ktor je na aktulnom paneli. Pokia sa pod aktulnym uvateom NC.EXT nenachdza, pouije sa ten NC.EXT, ktor sa njde prv v adresri (je to dan vlastnosou Lamaovho CP/M). Pokia sa NC.EXT na aktulnom disku vbec nenachdza, ni sa nestane. tandartn andera pracujceho pod DOSom, ale aj napriek svojim obmedzeniam plne vyuva technick monosti Vho potaa SHARP MZ-800 tak, ako je to len mon. Program vznikol v spoluprci niekokch firiem (LUCKY SOFT, MEO' SOFT, NIPSOFT), priom jeho vznik bol vdatne sponzorovan firmou mZx SOFTWARE, ktor ho aj distribuuje. Sme presveden, e NIPSOFT commander sa stane Vam neocenitenm pomocnkom pri koprovan, presvan, prezeran, span, vymazvan, editovan a poskyt uloenie sboru je pod uvateom 15. - NC.MNU Textov sbor (ukka) uvateskho MENU, ktor sa aktivuje z NC.COM pomocou klvesy F2. Tu mu by definovan dokonca aj dvky sborov. O vytvran sboru NC.MNU a o jeho umiestnen na disku plat to ist, o bolo napsan o NC.EXT. - NC.TXT Tento manul. - FET.COM Na diskete je umiestnen kli demontrcii NC.EXT a NC.MNU. Poznmka: sbory NC.INI, NC.EXuje pritom monosti, o ktorch sa Vm ani nesnvalo. 2. POPIS PROGRAMOVHO BALKA ---------------------------- Na distribunej diskete njdete tieto sbory: - NC.COM Vlastn program, ktor me pracova aj samostatne bez alch prdavnch modulov. Verzia V1.0S je v slovenskom jazyku, V1.0C v eskom jazyku. - NC.INI Sbor, v ktorom s uloen informcie o konfigurcii commanT a NC.MNU s dobrovon a NC.COM bude pracova aj bez nich, samostatne. 3. NROKY NA HARDWARE A SOFTWARE -------------------------------- K tomu, aby mohol NIPSOFT commander na Vaom potai sprvne fungova, potrebujete: - pota SHARP z rady MZ-800 - rozren videopam na 32 kB - aspo jedna FD mechanika 3,5" alebo 5.25" (DD, 2DD alebo QD) - radi FD kompatibiln s firemnm - kvalitnej televzor alebo monitor - operan systm CP/dera. Program NC.COM po spusten preta konfigurciu z tohto sboru, ak ho njde. Do sboru NC.INI mete uloi ubovon konfigurciu, ktor si sami zvolte (vi popis jednotlivch prkazov NC). Je uloen pod uvateom 15. - NC.EXT Textov sbor (ukka), ktor pouva NC pri span rznych typov sborov. NC me toti spa nielen sbory zakonen prponou COM alebo SUB, ale aj sbory s ubovonou pM, ktor dostanete spolu s NIPSOFT commanderom Ak mte k dispozcii iba jednu FD mechaniku a mte sprvne nastaven OS CP/M programom MZXUP (poet mechank=1 a zhodne nastaven poet strn a stp pre mechaniku A aj B), operan systm Vm dovouje emulova disk B na mechanike A. NIPSOFT commander sa bude v tomto prpade sprva tak, ako keby ste mali mechaniku A aj B, priom v skutonosti budete disketu A aj B strka do jednej mechaniky. NIPSOFT commander Vm zakadm oznmi, kedy ktor disketu mterponou, napr. MAC alebo TXT, a to tak, e na sbor typu MAC spust napr. makroassembler a na sbor TXT spust FET alebo in textov editor, poda informcie v sbore NC.EXT. Sbor NC.EXT si mete vytvori sami ubovonm textovm editorom (vi kapitola "VYTVRANIE SBOROV NC.EXT a NC.MNU") a na kadom disku mete ma in NC.EXT poda toho, na o dan disk pouvate. DTrack-Info  N           zastri. Idelne je, ak mte k dispozcii aj ramdisk, pretoe NIPSOFT commander pracuje najefektvnejie vtedy, ak je umiestnen na ramdisku. 4. PRV OBOZNMENIE SA S NIPSOFT COMMANDEROM -------------------------------------------- tart NIPSOFT commandera meme zapsa veobecne: [d1:]NC [[d2:]konf] d1 - disk, na ktorom sa NC nachdza (systmov disk) d2 - disk, na ktorom sa nachdza konfiguran sbor konf - nzov konfiguranho sboru (imp sbor zaber v adresri. kB - poet kilobajtov, ktor sbor zaber na disku. Pr - druh prstupu do sboru (R/O = len tanie, R/W = tanie aj zpis). Typ - typ sboru (DIR = ben sbor, SYS = systmov sbor). Neskr si ukeme, ako mono panel meni z "plnho" na "strun" a naopak. 5. OVLDANIE HLAVNHO MENU -------------------------- Hlavn MENU sa ovlda 20-timi funknmi klvesami (vi "Nvod" v spodnej asti obrazovky). Popeme si ich len strune, pretoe ovldanie je slicitne NC.INI) Pri prvom tarte Vm odporame kli demontrcii tento postup: - Zalote distribun disketu do mechaniky A. Resetujte, prpadne zapnite pota. - Po naskoen systmu CP/M napte na klvesnici NC a odolite klvesou . - Ak chcete nastavi as (be v pravom hornom rohu), stlate GRAPH F4. Do dialgovho okienka napte aktulny as, napr. 11:58:07 a odolite. NIPSOFT commander mte naintalovan a mete s nm pracova. Na obrazovke mte tri okn. V skutone vemi jednoduch. Z ktorhokovek MENU meme vyskoi klvesou ESC, pohybova sa meme po MENU bu pkami, alebo stlaenm "horcej klvesy", ktorou je zvyajne zaiaton psmeno poadovanej voby (s vnimkou hlavnho MENU, kde horcimi klvesami s funkn klvesy). Disk - voba disku a uvatea pre aktulny panel. "Veobecn uvate" ---- znamen, e na paneli sa bud zobrazova vetky sbory bez (F1) ohadu na slo uvatea. Horcimi klvesami pre uvateovpodnom okne mte strun nvod s vznamami jednotlivch funknch klves (vo verzii V1.0 ich mte 20). Zvyn dve okn s panely, ktor reprezentuj dva ubovone vybran disky, v naom prpade je na oboch stranch disk A. Okrem funknch klves funguj aj alie klvesy: TAB - zmena aktulneho panelu PKY HORE, DOLE - zmena aktulneho sboru PKA VPRAVO - alia strnka PKA VAVO - predchdzajca strnka SHIFT PKA HORE - prv sbor SHIFT PKA DOLE - posledn sb 10 a 15 s klvesy "A" a "F". Menu - tto voba zobraz menu, ktor si Vy sami mete nadefinova ---- a ktor je uloen v sbore NC.MNU, spravidla pod uvateom 15. (F2) Sli na spanie rznych externch programov, napr. assembler, Turbo Pascal a pod. Bliie informcie o vytvoren uivateskho menu sa dozviete v kapitole "VYTVRANIE SBOROV NC.EXT A NC.MNU". Uk - umouje prezera jednotliv sbory. Z prezerania sa vror INST - oznaenie/zruenie oznaenia sboru DEL - aktualizcia adresra (napr. po vmene diskety) Vyskajte si ich. V zhlav panelu (hore v strede) mete vidie oznaenie disku a slo uvatea, ak je nejak zvolen. V strede panelu s vypsan informcie o jednotlivch sboroch a v spodnej asti panelu mte pln informcie o aktulnom sbore. V prpade, e mte oznaen niektor sbory (klvesou INST), v spodnej asti panelu sa Vm objav informcia o poaciame ---- klavesou ESC alebo F1, klvesou F2 si volme hexadecimlny alebo (F3) textov md; klvesou F3 menme kd medzi KOI-8 CS, 7 bit. ASCII, LATIN 2 a Kamenickch; a nakoniec klvesy F4 a F5 pouijeme, ak chceme vyhada nejak reazec vpred alebo vzad. pkami HORE a DOLE si pekne rolujeme, CTRL+HORE a DOLE skeme po stranch a SHIFT+HORE a DOLE ideme domov alebo na koniec. Edituj - sli na jednoduch editciu textovte a kapacite oznaench sborov. V pravom hornom rohu obrazovky be relny as. Vimnite si av panel. Sbory s zoraden v troch stpcoch, pretoe je na om nastaven "strun" informcia o sboroch. Na pravom paneli je nastaven "pln" informcia o sboroch. Jednotliv stpce maj tento vznam: Nzov - nzov a prpona sboru. U. - slo uvatea, pod ktorm je sbor na disku uloen. Zzn. - poet zznamov, ktor sbor zaber (1 zznam = 128 bajtov). Pol - poet poloiek, ktorTrack-Info  N          do 16 kB. V prpade vch ------ ukecvaiek sa ns spta, i mu dovolme text usekn (tu si (F4) musme da pozor, pretoe zlon kpia sa nevytvra!). Editor sa ovlda funknmi klvesami podobne ako prezera, s vnimkou klvesy F2, ktorou si priebene ukladme text na disk. Okrem toho funguj aj alie klvesy: HORE - hore. DOLE - dole. VAVO - vavo. VPRAVO - lneho alebo oznaench sborov. Pri ----- vymazvan viacerch sborov je mon u zapoat proces zrui (SHIFT+F3) klvesou ESC. Ak naraz na R/O sbor, spta sa ns, o alej. Ak zvolme "Vetky", nebude sa ns u alej pta. Nov edit - tto funkciu pouijete, ak idete vytvra nov textov sbor. --------- Pracuje rovnako ako voba "Edituj" s tm rozdielom, e na (SHIFT+F4) zaiatku si v dialgovom riadku vypta nzov sboru. Presu - pracuje podobne ako "Kopvpravo. CTRL+HORE - strnka hore. CTRL+DOLE - strnka dole. CTRL+VAVO - zaiatok riadku. CTRL+VPRAVO - koniec riadku. SHIFT+HORE - zaiatok sboru. SHIFT+DOLE - koniec sboru. LIBRA - mae znak pod kurzorom. PRZDNA - mae znak pred kurzorom. TAB - vlo tabultor. ALPHA - prepna mal a vek psmen. GRAPH - so sasruj" s tm rozdielom, e po presunut ------ pvodn sbor zmae. Ak presvame sbor na tom istom disku pod (SHIFT+F5) tm istm uvateom, jedn sa vlastne o premenovanie sboru, a teda musme zvoli pre sbor nov meno, in by presvanie nemalo zmysel. Ulo SETUP - ulo aktulnu konfigurciu NIPSOFT commandera do sboru NC.INI ---------- pod uvatea 15 na disk, kde sa nachadza NIPSOFT commander. (CTRL+F1) Selektuj - pouvame, ak chceme oznai viacnm stlaenm nejakho psmena vyd znak s diakritikou. ESC - ukonenie editcie. Ak sme v texte urobili zmeny, spta sa ns, i treba sbor uloi. Ak editciu ete nechceme ukoni, znova stlame ESC. Kopruj - skopruje aktulny alebo oznaen sbory na vedaj panel. Ak ------- koprujeme aktulny neoznaen sbor, nasko nm dialgov (F5) riadok, v ktorom meme sboru zmen sborov naraz, priom musme -------- zada masku, poda ktorej bude sbory oznaova. Otznik v maske (CTRL+F2) nahrdza prve jeden znak, hviezdika nahrdza ubovon poet znakov od 0 po 8. Priom v maske sa me vyskytn aj viac hviezdiiek. Napr.: *.* - ozna vetky sbory. ????????.* - ozna vetky sbory. *.COM - ozna vetky sbory s prponou COM. A*.* - ozna vetky sbory, ktorci meno. V dialgovom riadku sa mme pohybova VPRAVO VAVO alebo CTRL VPRAVO VAVO. Aj mazacie klvesy funguj podobne ako v editore. Klvesa ESC taktie zaber. pkou DOLE meme ods dole. Ak s nejak problmy napr. s miestom na disku, s R/O sbormi a pod., vdy nm d vedie. Ak koprujeme viac sborov, koprovanie meme prerui klvesou ESC. Sbor, ktor sa zaal koprova, sa dokopruje cel, ale ah nzov sa zana na A. *SOMAR.FE? - ozna vetky sbory, ktorch nzov sa kon na SOMAR a zrove prpona zana na FE. B*OP*D.MAC - ozna tie sbory, ktor zanaj na B a zrove konia na D a zrove niekde medzi B a D je OP a zrove ich prpona je MAC, napr. BOPD.MAC, BAOPD.MAC, BOPED.MAC, BAOPRED.MAC a podobne. Odselektuj - zru viac sborov naraz. Maska sa vylie sa u koprova nezan. Panel - sli na nastavenie vzhadu aktulneho panelu. Informciu je ----- mon nastavi "pln" alebo "strun", zoradenie sborov (SHIFT+F1) v aktulnom paneli me by poda adresra (tak, ako s uloen na disku), alebo poda mena, prpony i uvatea. Atribty - pomocou tejto funkcie meme nastavi bu aktulny alebo viac -------- oznaench sborov na R/O, R/W, SYS alebo DIR. (SHIFT+F2) Vyma - sli na vymazanie aktuTrack-Info  N          tvra podobne, ako pri ---------- funkcii "Selektuj". (CTRL+F3) Utility - tto funkcia spust NIPSOFT utility, ktor si budete mc ------- neskr dokpi. NIPSOFT utility s zatia vo vvoji. Bud (CTRL+F4) umoova zkladn systmov opercie ako naprklad formtovanie, koprovanie systmu CP/M na in disketu, SETUP systmu CP/M, kpiu NIPSOFT commandera aj s podpornmi sbormi na in disketu, prcu s magnetofnom a sbormi typu MZF, Kad riadok sboru NC.EXT mus ma naprklad nasledujci formt: ------ TXT:FET !.! | | | |-------- vkrink namiesto prpony dosad prponu spanho | | | sboru | | | | | |---------- vkrink namiesto mena dosad meno spanho sboru | | | |------------- sbor, ktor sa v skutonosti spust | |----------------- prpona, na zklade ktorej sa vyhadva alie riadky mu by naprklad: BAK:ERA *.BAK PAS:TURBO MAC:M80 =! MZF: prcu s disketami systmu MS DOS a tak alej a tak alej... Info - pod informcie o autorovi, o verzii, o distribtorovi, ---- o vonch i obsadench kilobajtoch, polokch adresara (CTRL+F5) a alokanch blokoch. Zru nvod - zru nvod v spodnej asti obrazovky, m zskate na obrazovke ---------- viac pracovnho priestoru. Po optovnom stlaen GRAPH+F1 sa (GRAPH+F1) nvod op zobraz. Menu edit - sli na editciu uvateskho menu NC.MNU. --------- (GRAPHMZX R !.MZF a tak alej. Jedna poloka menu v sbore NC.MNU mus ma formt ako napr.: ------ A: Archivcia - riadok, ktor sa v Menu zobraz ARC - sbor, ktor sa spust (mus by pred nm aspo | jedna medzera alebo tabultor) | |---------------------- "horca klvesa" alie poloky mu by naprklad: E: Extern editor FET !.! P: Preklad (makroassembler + link) M80 =! L80 !,!/N,/E:START I: Intercatalog M+F2) EXT edit - sli na editciu tartovacieho sboru NC.EXT. -------- (GRAPH+F3) Nastav as - sli na nastavenie aktulneho asu, priom hodiny, minty ---------- a sekundy sa oddeuj ubovonm neselnm znakom. Ak sa sekundy (GRAPH+F4) alebo minty neuved, namiesto nich sa automaticky dosad nula. Skoni - ukon innos NIPSOFT commandera a vrti sa sp do CP/M. ------ (GRAPH+F5) 6. SPANIE SBOROV -------------------- NIPSOFT commander umouje spa sboZX R INTERCA a tak alej. Vidte, e jedna poloka menu me spusti aj viac sborov po sebe. O vkrinkoch plat to ist, o pri sbore NC.EXT. 8. ZVER -------- Pri tvorbe programu NIPSOFT commander sme vychdzali so sksenost, ktor mme s programom NORTON commander na IBM PC. Boli sme pritom obmedzen relnymi technickmi monosami potaa SHARP MZ-800, take sme do NIPSOFT commandera zahrnuli iba najbenejie pouvan funkcie. Operan pam potaa je pritom vyuvan "na ry troma spsobmi: 1. Sbory typu COM alebo SUB meme spa priamo tak, e nabehneme kurzorom na sbor, ktor chceme spusti a stlame klvesu CR. V prpade, e spame sbor typu COM, nasko dialgov riadok, v ktorom meme prkaz doplni o alie parametre. 2. Sbory, ktor nie s typu COM ani SUB meme spusti pomocou "tartovacieho sboru" NC.EXT tak, e kurzorom nabehneme na dan sbor a odoleme ho klvesou CR. NIPSOFT commander vyhad na aktulnom disku sbor NC.Edoraz". Napriek tomu vak verme, e ke sa s programom NIPSOFT commander oboznmite, mnoh z alch systmovch programov, ktor ste doteraz pouvali, sa stan pre Vs navdy zbytonmi. Program NIPSOFT commander bol cel vytvoren v assembleri, take na disku zaber len okolo 24 kilobajtov, o je medzi systmovmi programami rekord vzhadom na monosti, ktor poskytuje. V sasnej dobe sa vyvjaj NIPSOFT utility ako prdavn rozrenie NIPSOFT commandera o alie systmov funkcie. O ich vznXT, v om vyhad riadok s prponou spanho sboru a poda nej spust zvyok tohto riadku (napr. FET, assembler, WordStar a pod.). Takto je mon spa napr. sbory typu MZF. 3. Najastejie pouvan sbory meme nadefinova do uvateskho menu v sbore NC.MNU, tie potom spame cez klvesu F2. Ke spusten sbor regulrne ukon svoju innos, riadenie sa vrti do NIPSOFT commandera. 7. VYTVRANIE SBOROV NC.EXT A NC.MNU ------------------------------------- Track-Info  N         iku Vs bude firma mZx SOFTWARE vas informova vo svojom katalgu. Take vea astia s programom NIPSOFT commander Vm praj firmy mZx SOFTWARE, LUCKY SOFT, MEO'SOFT a NIPSOFT. Posielame aj pozdrav Petrovi Nortonovi z firmy PETER NORTON COMPUTING. Prpadn dotazy a pripomienky mete zasiela na adresu: mZx SOFTWARE P.O. Box 83 370 04 esk Budjovice FIRMA MZX SOFTWARE JE JEDINM DISTRIBTOROM SYSTMU NIPSOFT COMMANDER ============================================000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,008h,0D4h,000h,000h,03Eh,020h,0C5h DEFB 0CDh,02Eh,0D5h,0C1h,0C9h,03Eh,00Dh,0CDh DEFB 08Fh,0D4h,03Eh,00Ah,018h,0F1h,0C5h,0CDh DEFB 095h,0D4h,0E1h,07Eh,0E6h,07Fh,0C8h,0E5h DEFB ========================= j firmy mZx SOFTWARE, LUCKY SOFT, MEO'SOFT a NIPSOFT. Posielame aj pozdrav Petrovi Nortonovi z firmy PETER NORTON COMPUTING. Prpadn dotazy a pripomienky mete zasiela na adresu: mZx SOFTWARE P.O. Box 83 370 04 esk Budjovice FIRMA MZX SOFTWARE JE JEDINM DISTRIBTOROM SYSTMU NIPSOFT COMMANDER ============================================0CDh,02Eh,0D5h,0E1h,0CBh,07Eh,023h,028h DEFB 0F2h,0AFh,0C9h,00Eh,010h,018h,018h,011h DEFB 0D6h,0DBh,00Eh,011h,018h,011h,00Eh,012h DEFB 018h,00Dh,00Eh,016h,018h,009h,0AFh,032h DEFB 0F6h,0DBh,011h,0D6h,0DBh,00Eh,00Fh,0CDh DEFB 005h,000h,032h,0F7h,0DBh,03Ch,0C9h,00Eh DEFB 015h,018h,056h,011h,0D6h,0DBh,00Eh,014h DEFB 018h,04Fh,00Eh,00Dh,018h,04Bh,079h,032h DEFB 0F9h,0DBh,0AFh,032h,0D6h,0DBh,03Ah,0F9h DEFB 0DBh,0B7h,0C8h,03Dh,021h,0F8h,0DBh,0BEh DEFB 0C8h,05Fh,00Eh,00Eh,018h,033h,00Eh,017h ;****************************************************************************** WRIDE:: CALL SCHS RET C LD A,030 OUT (07F),A WRIDE1: CALL WAIDR RET C WRIDE2: OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI DJNZ WRIDE2 IN A,(07F) RRCA RET C DEC D JR NZ,WRIDE1 RET ;****************************************************************************** ;VYPOCET FYZICKYCH PARAMETROV CHS A ICH NASTAVENIE DO REGISTROV ; vstup: HL = virt. rel. sektor (spodnych 16 DEFB 018h,02Fh,00Eh,013h,018h,02Bh,00Eh,019h DEFB 018h,027h,011h,080h,000h,00Eh,01Ah,018h DEFB 020h,01Eh,0FFh,00Eh,020h,018h,01Ah,0C6h DEFB 041h,0CDh,08Fh,0D4h,0CDh,011h,0D5h,0FEh DEFB 00Ah,038h,009h,0F5h,03Eh,031h,0CDh,02Eh DEFB 0D5h,0F1h,0D6h,00Ah,0C6h,030h,05Fh,00Eh DEFB 002h,0CDh,005h,000h,0B7h,0C9h,0CDh,011h DEFB 0D5h,087h,087h,087h,087h,021h,0F8h,0DBh DEFB 0B6h,032h,004h,000h,0C9h,03Ah,0F8h,0DBh DEFB 032h,004h,000h,0C9h,0FEh,061h,0D8h,0FEh DEFB 07Bh,0D0h,0E6h,05Fh,0C9h,03Ah,0B4h,0Dbitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM bloku dat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; HL = adresa RAM bloku dat ; D = pocet prenasanych FYZICKYCH sektorov ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** SCHS: DI PUSH DE LD C,0A LD DE,0 SC1: IN A,(07F) BIT 7,A JR Z,SC2 DEC DE LD A,D OR E JR NZ,SC1 Dd=~ͨ ~#0O  _9 a0 c1d1e1r0 u3i0u2l0l1o3n1o0o4a3r1s1t1u0 e0a5y0z1 7 : 6A6 C7D7E7R6 U9I6U8L6L7O9N7O6O:A9R7S7T7U6 E6A;Y6Z7       .Z80 .RADIX 16 CCP1:: DEFB 0C3h,001h,0D7h,0C3h,0FDh,0D6h,07Fh,003h DEFB 044h,049h,052h,000h,020h,020h,020h,020h DEFB 020h,020h,020h,020h,020h,020h,020h,020h DEFB 043h,06Fh,070h,079h,072h,069h,067h,068h DEFB 074h,020h,028h,063h,029h,020h,031h,039h DEFB 038h,039h,020h,04Ch,02Eh,045h,02Eh,043h DEFB 02Eh,02Ch,020h,04Ch,075h,064h,045h,06Bh DEFB 020h,04Ah,069h,072h,06Fh,075h,053h,065h DEFB 06Bh,020h,020h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,Track-Info  N           TSDB EH,DMcC  dr : 1I +ZR}L X AQ7!FG%-P-V-S*W*O4+TJ!YZI%J [K& /+ŗ2ͯ͡0:= !~(w2:0 !4N w:~7 87(!F 6Ta{0 =2!KB+:tͭ ">2 : *!K1x(B0!:@ *:t( : 2d :@ >2d K1B8 *, #", *+~ !( : !", *~ͯ0"*, #", :( 2 *~ͯ8 1͐ BK*1B". ډ20 21 *. |(c :( 2*~ͯ0>21 :t  :0 ̉(/:9(:1 >21 ( > 20 d :*. +". *, +| K, *1B8>2:92 KBDM:u+##*͕DM[m DM*BDM:u:y+:t+#*ͼDM[ 2'*͕x(+͕2G# ('0>2 (:0: 2 ^#V27!F(#~(( 8ͨ ^ͨ @ͨ ~( @ͨ >:ͨ #~ ( ͨ #>.ͨ  N~ ( ͨ #y(R/OD L>Ϳ :? :/?Py͒͟>|ͨ !\͓|[DEL] to hel:;ûI͑ͩ:;ûCod*KB  [Eof]^=*~̓0:ڨ è |Pos*KB|SizeK*B*KB|Free*KB)88# +6 [%ADM[m >2ɗ2'*ͼKB(-:t ##B(DMBDM[%ADM*[ >2*K[m *K[ :O( >O2>>'2>ͻÓ*%K!B|:> d +:===:===*4KB8*K4[ *K4[m *6KB8*K6[ *K6[m K#*-B0*:u"*-#"->23>2K-*#BK###B(*KB(+͕"*-+"-Ó>2W_z< = z/_!z͖~7*KŧBDM(!~ͯ_zS8# x  DM*[ >2*KB 0} !>o0$~ͨ #Li[#/Co[!:@([1z|In|Ov[1z:A |Cz|Sl:B|Qw:_(Lr{( Rp{( Lr{0Ex:B/2B:A<2Aؗ2A:?/2?:@/2@*4K6B7*"42Ó*"62Ó:/2Ó:x/2xÓ>22 W_Ã2:G!N#(~#0+ y ~8 Ϳ:;ͻ>ͻ>ͻ2Ϳ, press [DEL:;ͻ>ͻ͗ 2D~8ͨ #[ Eof ][ Tof ]Memory fullMacro fullCDM("+~ͯ_zS8+ x  DM*[m >2K*B+~ *ͼKB( +|*1|ȗ2HK*B+:u:9:H>   Җ2H :0(:()DDelete ([Y]es or [N]o)͢;NY 2:7*6"4"Ó :*4[6K BBK *T]B7ȧ*KBB8[S6+S4S͓>2:*4*6KB(9 84*B0*4"4*S6*4"4*6S6"6"4͗> 2ͫ͐ ͫI K+*!BTC+ÓK+xannot RepeatCannot LearnBreakString not foundCMT BreakCMT ErrorCMT File too longLPT BreakNo file ( New file )Disk fullFile R/O[ Eoln ]Cannot justifySystemO: G:( yͻx2 G:: : > ͨ :<=U2:  :0(:(8D[Y]es-save, [Q]uit, [U]pdate or [ESC]͢;Q(*Y(U 2 \ͯ):\(:: UA:0(:('DSure ([Y]es or [N]o)͢;NY [S̓>ͻ>xyy>xyyyB?B7Ő *!BKBҐC+Ó:0(:(DJustify:͢z { S1*1|:@ :(> d 2S!K1Bw C%͝w ͫ* :(͐ KBڊ "͓>2K*4B*6B`i:A(̓$8 ͨO0*+"?b:A7͢7S?:Wb:y:u+:t#[?z(5:u(/:9(# x :7(:?*/ :;û:(0:u(*:9(~͸# x> ͻ:+*/(::u:( A(ŧBDM[#( :u  S#x("SBKBDMK4 0 *4B"4K6 0 *6B"6BDM+[#( :u  S#x(#S"#BKBDMK4 0 *4B"4K6 0 *6B"6*[KB((DM:t :y *B( #:u+  >2*[KB(,DM :u+# :y *B( ++:t##  m >2*KB(w#"G:u¼͠*##"#>2:y :td :ud :y(:tK4B KC4K6B KC6*KB(8+ͭ ":u¼K# C#͠:yTrack-Info  N         ͢*SvKB KB(gK4BK6BDM*B*4B*6B*BDM  |( B0DM|( B0DM|( B0DM:( A( ̓͢O:_:W7 8»>>Kt :x> (>@ͻ :(:/2:= :>ͻ:uK*BDM*+# #KB:9(#:/ S?z~[?Yz6z6Y J !\ ::ͻ:*ͻ:)û͖9G:8x(:<2:87Ow6Z9*!K+B8KB8#K+ "+͓ *!"+͓*#22{*KB(+w"*+|(#*KB(V#"*"*+":!2*"*KB(+V"*"*+"| :2:Gx(x72xx=2*": ::0 X:0z :(*"2: 2͗G:A !m xG:A !2 xG:B(!) xGxZYzyyzYZ!1"2#3$4%5&6'7(8)9_0{(})@;`;1!234567890~"^[]!1"2#3$4%5&6'7(8)9_0{(})@;`;1!234567890~":G(x x*"x *""x2>2:G )x x 2!"*"*"|> K-B8K B8#K- O*#+:3(#23:W̓:uͻDbk #>q*#K-BUe*v")!D\*#K-BUY!\D [)̓DSubstitute ([Y]es, [N]o or [ESC])?͢[)̓:8 x %̓8 x ͗7Y(N"-*KBDM+( :u#I#"ÓK-"-B*:uz "B“>23B!D 6#z ɗ23*#K-BBDM*#K-B BDM~%%#ɧ0)!:#N#y~#(2x(x;2:*+= "*"ɗ2:*#= ">2sE! &x_( w2G!{2H!{{ :H!2I!:G!2>!:0(:(DTyping ..͢:>!(:*"?!* d*"?!*"A!:>!W=#G(:I!(A%%:>!wœ"%x0S1&0;  @@  @0HH0  @ @ =#%x0&0;0 o&> # # y~0 8 o&># : >2ͯ͡8G:(!=( !=(!xG2x~( (###FxaAeEiIoOuUyYrRlLcCdDeEnNrRsStTzZuUlLoOaAuUoOaA:O&.y(>;G:x(T ($(](M$ |8o:0(:(͸|&K,BK̀- 2>ͻ> ͻ>û|(T% |T % "C!:>!oM$W wM$gM$K?![tB=$~=$=$#8:>!W(%x0:>!w S1*C!:I!(  = K?!B(qKt~(i(f:9 %#~O0 0% #!  #Ny (:>!W y"0 '6 '5 `; `yͧ%%#:>!O( :>!WM$J:>!W(%:>!w x1T*C!:I!(  = K?!B+%:>!``(Kt~+%+%:9 %#Æ$N:>!o g y8!  Nyͧ%%#Æ$~80> %$R!%_:2:0(:(DFind:͢!:# &{ Sx2O(=:2:0(:(DReplace:͢!:#:W(g d*KNr*KB:($::g *K6#*K4:g *K*K[z(e::g ͌(YDM*[ (FDM*[m :O(G ͫ%([S:gK{*(*S> 2:g(W* ~%%R#Æ$> ͧ%%:/  :>!O .W(J:>!G(  :>!G( K?!B(Kt~K?! #B :>!:I!A #B(=#O:>!O(y(`80!YN 2{E!> 2:0(:(DCode:͢{2 :0(:(DOption:͢!:#N#y~B C Z R I G S N #(08 :0 xG ##A#CDEF#HIJKLMNOPQRSTU#W@YZ#%#)#&a#cdef#hijklmnopqrstu#w`yz###'#"&!&!>:0O K4 0S4K6 0S6Sbk OBKB8J"!N#y(Ó!N*[BDMm :!N*[ DM >2C{ DM>7DM*{ŧBDM(:_ +(x 8(G((:_(O~ ##C{ DM>7K{ BDMN Syѧ(:_ [y+#(x 8(G[y((:_(O~ +#+: I:0(:(DRepeat:͢z(S*": 2ɗ2>2_:Wzz "{*KB(w#">Track-Info  N          (:(DPaper:͢{2<:0(:(DBorder:͢{2<:0(:(DInk:͢:< {2<:0(:(DBeep:͢{2A3:0(:(DClick:͢{2?3ë<&:0(:(DLoading ..͢S'! 6! 6<2'(*"'*B"'K'*'B(PY[' *' "'*'K>B+8(#"'KBDM[S6*'+(S4S2>2>2&2'S':0(:(DSaving ..:s/y~~( ~~( (:t/y7!0[13 P1*=3#"=37}o%610}:r/2s/>"3!(({(!";3:r/2s/*;308&3 (%:q/2s/ 083 - 0 (>T= ><z DPress RECORD.PLAY͢DPress PLAY͢¾1>~~7( ><x "=3~0# >=f2=k222Ը2v2{*((ʗ2|͸2 x 2 ͸2 2>s=³2>:u/yd2d2>:v/yd2d2>:u/yͱ2>:v/͢! 6! 6['<ʩ):'(*4r*"'*"'B}ƀo0$ KB(K'>B("'['[' "*' "'K'B8['<(>2:'S'['! ~ I!*' 6B#6A#6K['['!*'6B#6A#6K['<>2*N#y8#~+: ~@## y(~.( #  x(>  y(~#. y( ~# x> :0(:(Dmerge With:͢!:#<**'Ó:0(:(DSave:yͱ2 s/( y &d08 3 % ñ1@P6J86{86?86E8876W778R776,9886668676778J8766abcdefghikj/*.- !"#$%&'()O,Q+WIU RYTPy@PXZENMVB[lC:{z;32rs\]_^KLnoSDAF<|8x4t0p~>BB>~pHHHD~BTT|TTBBbRJFB  <"\JbRJFB$X(>H0 BBB͢!:#<* &x(:x*(ÓFET.HLP!'+,:0(:(DlOok:͢!:#<**! 6! 6<()!%-",2,n,&8ͩ+ړ>ͻ͗ Ó>2:, @2,<2,:<ͻD[DEL] to exit, file͢!*͓> ͻ> ͻ ,K,:=2,͗7ȧ (5 (> (B (J(F 8:,<2,G:< 2,:,<2,ͻ> ͩ+:,ͻ2,ͻ:,<2,:=2,*,%-B( ~#",7ȧ!,",,*(7%-b\~BBBBBB DDDD>$~>~ >BB>2B$BBBB< 88$ZBBB<"~J2~$BB>2B$(| RBBBB<$$ ~>~$B~BB TDD8$~@ ~BBBNRRN>@@|@@>2JJNJJ2|BB|HDBy w6w6@Ow6 w6 w6Z99<*G3o&)W3~#foy ڃ6S.0 o&3~7o&))) :I3KE36w w w w w w w w 77/w /w /w /w:0(:(DRead:ͣ͢.DReading:͢.*K/B"/DM*B0*%0"6*/""4>2Ó> 2:0(:(DVerify:ͣ͢.DVerifying:͢.͝0:0(:(DWrite:͢!:#~8>G#!.(w#6 &x2- rKC/*B"/K4C/*B: !"/>2.͵1DWriting:͢.w/͗/Ó/!:#~8>G#.( #~ DFound:͢.!.~ ͸#  /w /w /w /w 6*J3|g].:E3P(>7L7*J3,:E3="J3R7W72J3:K3<?82K3:=9 2K3*N3(KL3T]B8*E3)))+DM!6"N3ia:K37=2K3*J3}7-"J3͵7ͩ7:E3=2J3>(2E3FP2E3F2I3ɗ2I3!?6@:E3((>yy!"N3"J3!"J3!8"G3y=72K3!8"G3 :E3=7y2J37L7L7L7L7:@3( :?3G>=:A3O:B3gA% >>2=9ɗ2=9*J3"P3:=92R32=9 !.C2͵1ڕ0̓2ͫ/~0SK/*/x(">~p2# x *=3|p2}p22!.͵1ڕ0:0(:(DSearching ..͢_1ڕ0@0ڎ0~0SK/*/x~0͵1ڕ008M3 C0!"=30184w# x *=3018%_018 { 22>y> 2> 27!"=3K/*/Sx(͵18_1800ڕ03 0T018# x *=301 01 ~0Track-Info  N :I32S32I3 ͑6Z9*J3} *P3"J3:R32=9:S32I3!39"G3y7ë6;:M9 ':K92K9= $:L9=2L9 {;(:H92L92M9>>2L9Z9(:M9O*Q9:S9>((~#"Q92M9y!>9Y}ƲGV/0 90 r#}H {A(G(2N9 {r;͸9(E2P9:Y90g:y2Y90[:P9_!:2T9~A8[8a8{0 _:U9{( 2O97:y2Y9= !:N9G:P9 :I9G:T9<2T98 =2T9:O97>:F90M ;: YZ@[]QRSTUVWXIJKLMNOPABCDEFGH12345678\^- 09,. ?/ +* yz`{}qrstuvwxijklmno7h,0D4h DEFB 046h,023h,078h,0B7h,028h,008h,07Eh,0CDh DEFB 04Ch,0D5h,077h,005h,018h,0F3h,077h,021h DEFB 008h,0D4h,022h,089h,0D4h,0C9h,00Eh,00Bh DEFB 0CDh,005h,000h,0B7h,0C8h,00Eh,001h,0CDh DEFB 005h,000h,0B7h,0C9h,021h,0B4h,0DBh,07Eh DEFB 0B7h,0C8h,036h,000h,0CDh,0DDh,0D7h,011h DEFB 0B5h,0DBh,0C3h,002h,0D5h,011h,034h,0DBh DEFB 021h,000h,0DCh,006h,006h,01Ah,0BEh,0C2h DEFB 068h,0D7h,013h,023h,010h,0F7h,0C9h,0CDh DEFB 095h,0D4h,02Ah,08Bh,0D4h,07Eh,0FEh,021h DEFB 038h,008h,0E5h,0CDh,02Eh,0Dpabcdefgh!"#$%&'(|~= _)<>    :ͷ8 9<:U9/2U9 9<>2U9o&);^#V#~2S9SQ9;;;;;;;;;;;;;;;;FXEMCRLBHDTYSD:=9:V9=(2V97[E3:U9/O~w~/w:W9/2W9:J92V9:W9 <>2V9>2=9:<2< 2<:<2<:<2<:E3((>!ͫ"" """"*"""4"6!"-"+"!"#>2>2@>ͻ\'͓08$2 !=͆S!:'>2'(S%08$2 !=͆S!:'>2'(S% F#~#y!6"G3}}=F<-= :<_ =ɗ:<_00 =ɗʹ<<0^VR8<( ##'d DG*0}~# > > >13"!0(6 #>20>,20>20! "0"0!3"0""0́13 13"go"0"0O "!C:0!0( ( ####^#V!0́~#:0G>8>8 > 8x=>((>217!2@>(GNf( :1> 8F(~#| ͎ (3  3 ( 8?F w#? ( 5B(>( B(+ >>ͬ!220+0"0 "0"0\9h,019h,07Eh,023h,066h,06Fh,0E9h DEFB 021h,0F3h,076h,022h,000h,0D4h,021h,000h DEFB 0D4h,0E9h,001h,066h,0DBh,0C3h,09Eh,0D4h DEFB 001h,070h,0DBh,0C3h,09Eh,0D4h,0CDh,043h DEFB 0D6h,03Ah,0F9h,0DBh,0B7h,0C2h,0F7h,0D5h DEFB 021h,0D7h,0DBh,001h,00Bh,000h,07Eh,0FEh DEFB 020h,028h,024h,023h,0D6h,030h,0FEh,00Ah DEFB 0D2h,0F7h,0D5h,057h,078h,0E6h,0E0h,0C2h DEFB 0F7h,0D5h,078h,007h,007h,007h,080h,0DAh DEFB 0F7h,0D5h,080h,0DAh,0F7h,0D5h,082h,0DAh DEFB 0F7h,0D5h,047h,00Dh,020h,0D8h,0C9h,07Eh DEFB 0Fȸ("0"0ȸ ȸ("0"0ȸ H#~(08 +ȸ #0> ~# 7 #:0G~# (+ ́ͬ!2!+0DM)) )O | <|0?:*0"0ͪ*0|K0y*0}O͸͸RK͎S!:\0!1À`iRDM 8|0R8 :0 20K0͸##.>_NY(>*Q(>+Q nY !V0c  ͊ y~(:0G:1> 8 _:0!2iPDM *0T]͎s͆~(h  *0Eh,020h,0C2h,0F7h,0D5h,023h,00Dh,020h DEFB 0F6h,078h,0C9h,001h,003h,000h,0EDh,0B0h DEFB 0C9h,021h,080h,000h,081h,0CDh,03Eh,0D6h DEFB 07Eh,0C9h,03Ah,0F9h,0DBh,0B7h,0C8h,03Dh DEFB 021h,0F8h,0DBh,0BEh,0C8h,03Ah,0F8h,0DBh DEFB 0C3h,0F9h,0D4h,0CDh,043h,0D6h,0CDh,0EAh DEFB 0D4h,021h,0D7h,0DBh,07Eh,0FEh,020h,020h DEFB 007h,006h,00Bh,036h,03Fh,023h,010h,0FBh DEFB 01Eh,000h,0D5h,0CDh,0B7h,0D4h,0CCh,078h DEFB 0D7h,028h,073h,03Ah,0F7h,0DBh,00Fh,00Fh DEFB 00Fh,0E6h,060h,04Fh,03Eh,00Ah,0CDh,0C9h DEFB 0D7h,017h,038h,058h,0D1h,07Bh,01Ch,0D5h DEFB 0E6h,003h,0F5h,020h,012h,0CDh,095h,0D4h DEFB 0C5h,0CDh,006h,0D5h,0CDh,017h,0D5h,0C1h DEFB 03Eh,03Ah,0CDh,08Fh,0D4h,018h,008h,0CDh DEFB 08Dh,0D4h,03Eh,03Ah,0CDh,08Fh,0D4h,0CDh DEFB 08Dh,0D4h,006h,001h,078h,0CDh,0C9h,0D7h DEFB 0E6h,07Fh,0FEh,020h,020h,013h,0F1h,0F5h DEFB 0FEh,003h,020h,00Bh,03Eh,009h,0CDh,0C9h DEFB 0D7h,0E6h,07Fh,0FEh,020h,028h,014h,03Eh DEFB 020h,0CDh,08Fh,0D4h,004h,078h,0FEh,00Ch DEFB 030h,009h,0FEh,009h,020h,0D6h,0CDh,08Dh  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ DEFB 0D4h,018h,0D1h,0F1h,0CDh,0C6h,0D5h,020h DEFB 005h,0CDh,0BEh,0D4h,018h,08Bh,0D1h,0C3h DEFB 01Fh,0DBh,0CDh,043h,0D6h,0FEh,00Bh,020h DEFB 01Bh,001h,077h,0DBh,0CDh,09Eh,0D4h,0CDh DEFB 055h,0D5h,021h,007h,0D4h,035h,0C2h,02Bh DEFB 0D7h,023h,07Eh,0FEh,059h,0C2h,02Bh,0D7h DEFB 023h,022h,089h,0D4h,0CDh,0EAh,0D4h,011h DEFB 0D6h,0DBh,0CDh,002h,0D5h,03Ch,0CCh,078h DEFB 0D7h,0C3h,01Fh,0DBh,0CDh,043h,0D6h,0C2h DEFB 0F7h,0D5h,0CDh,0EAh,0D4h,0CDh,0C6h,0D4h DEFB 028h,038h,0CDh,095h,0D4h,021h,0FAh!@3A3|6IvDÁ:4 :2O:y ɯ28  z  :27>_K0x  *0| C0͸N#FC0*0BO͸͸R!0DM͸B 0R(`iR PYDM`iRK͎Së*0+V+^"0"0|=}FƐ'@'8!^VTrack-Info  N ,0DBh DEFB 036h,0FFh,021h,0FAh,0DBh,07Eh,0FEh,080h DEFB 038h,009h,0E5h,0CDh,0DBh,0D4h,0E1h,020h DEFB 01Ah,0AFh,077h,034h,021h,080h,000h,0CDh DEFB 03Eh,0D6h,07Eh,0FEh,01Ah,0CAh,01Fh,0DBh DEFB 0CDh,02Eh,0D5h,0CDh,0C6h,0D5h,0C2h,01Fh DEFB 0DBh,018h,0D7h,03Dh,0CAh,01Fh,0DBh,0CDh DEFB 072h,0D7h,0CDh,0D2h,0D7h,0C3h,0F7h,0D5h DEFB 0CDh,07Eh,0D7h,026h,000h,06Fh,029h,0E5h DEFB 0CDh,043h,0D6h,0C2h,0F7h,0D5h,0CDh,0EAh DEFB 0D4h,011h,0D6h,0DBh,0D5h,0CDh,002h,0D5h DEFB 0D1h,0CDh,0C2h,0D4h,028h,02Bh,04Dh,0D9h,0CDh,0E5h,0D5h,03Ah DEFB 0D7h,0DBh,0FEh,020h,020h,016h,03Ah,0F9h DEFB 0DBh,0B7h,0CAh,022h,0DBh,03Dh,0E6h,00Fh DEFB 032h,0F8h,0DBh,0CDh,045h,0D5h,0CDh,0F9h DEFB 0D4h,0C3h,022h,0DBh,011h,0DFh,0DBh,01Ah DEFB 0FEh,020h,0C2h,0F7h,0D5h,021h,09Dh,0DBh DEFB 0CDh,0C3h,0D7h,0CDh,0EAh,0D4h,0CDh,0C6h DEFB 0D4h,0CAh,013h,0DBh,0CDh,0DDh,0D9h,038h DEFB 068h,03Dh,020h,065h,0CDh,0D2h,0D7h,0CDh DEFB 043h,0D6h,021h,0F9h,0DBh,0E5h,07Eh,032h DEFB 0D6h,0DBh,03Eh,010h,0CDh,045h,0D6h,0E1h DEFB 07Eh,0AFh,032h DEFB 0F6h,0DBh,011h,000h,001h,0E1h,07Ch,0B5h DEFB 028h,016h,02Bh,0E5h,021h,080h,000h,019h DEFB 0E5h,0CDh,00Dh,0D5h,011h,0D6h,0DBh,0CDh DEFB 0D7h,0D4h,0D1h,0E1h,020h,00Bh,018h,0E6h DEFB 011h,0D6h,0DBh,0CDh,0B3h,0D4h,03Ch,020h DEFB 00Ch,011h,0D6h,0DBh,0CDh,002h,0D5h,001h DEFB 081h,0DBh,0CDh,09Eh,0D4h,0CDh,00Ah,0D5h DEFB 0C3h,01Fh,0DBh,0D5h,0CDh,043h,0D6h,0D1h DEFB 0C2h,0F7h,0D5h,03Ah,0F9h,0DBh,0F5h,0D5h DEFB 0CDh,0EAh,0D4h,0CDh,0B7h,0D4h,0D1h,020h DEFB 02Eh,021h,0D6h,0DBh,001h,032h,0E6h,0DBh,0AFh,032h,0F6h,0DBh DEFB 011h,05Ch,000h,021h,0D6h,0DBh,001h,021h DEFB 000h,0EDh,0B0h,021h,008h,0D4h,07Eh,0B7h DEFB 028h,007h,0FEh,020h,028h,003h,023h,018h DEFB 0F5h,011h,081h,000h,042h,07Eh,012h,0B7h DEFB 028h,005h,004h,023h,013h,018h,0F6h,078h DEFB 032h,080h,000h,0CDh,095h,0D4h,0CDh,00Ah DEFB 0D5h,0CDh,036h,0D5h,0CDh,000h,001h,031h DEFB 0B4h,0DBh,0CDh,045h,0D5h,0CDh,0F9h,0D4h DEFB 0C3h,02Bh,0D7h,0CDh,0D2h,0D7h,0C3h,0F7h DEFB 0D5h,001h,095h,0DBh,0CDh,09Eh,0D4h,0CDh DEFB,010h,000h,0EDh DEFB 0B0h,02Ah,089h,0D4h,0EBh,0CDh,035h,0D6h DEFB 0FEh,03Dh,028h,004h,0FEh,05Fh,020h,011h DEFB 0EBh,023h,022h,089h,0D4h,0CDh,043h,0D6h DEFB 020h,007h,0F1h,047h,021h,0F9h,0DBh,07Eh DEFB 0C9h,0CDh,0D2h,0D7h,0C3h,0F7h,0D5h,001h DEFB 08Ah,0DBh,0CDh,09Eh,0D4h,0C3h,01Fh,0DBh DEFB 011h,0E6h,0DBh,0CDh,053h,0D9h,0B7h,028h DEFB 004h,0B8h,070h,020h,0E4h,070h,0AFh,032h DEFB 0D6h,0DBh,0CDh,0B7h,0D4h,028h,009h,011h DEFB 0D6h,0DBh,0CDh,0FEh,0D4h,0C3h,01Fh,0DBh DEFB 0CDh,078h,0D7h,0C3h 0D2h,0D7h,0CDh,043h,0D6h,03Ah,0D7h,0DBh DEFB 0D6h,020h,021h,0F9h,0DBh,0B6h,0C2h,0F7h DEFB 0D5h,0C3h,02Bh,0D7h,000h,016h,000h,000h DEFB 000h,000h,044h,049h,052h,020h,045h,052h DEFB 041h,020h,054h,059h,050h,045h,053h,041h DEFB 056h,045h,052h,045h,04Eh,020h,055h,053h DEFB 045h,052h,043h,04Fh,050h,059h,0E3h,0D7h DEFB 07Ah,0D8h,0ACh,0D8h,0F8h,0D8h,0A0h,0D9h DEFB 0C6h,0D9h,0FAh,0D9h,074h,0DAh,052h,065h DEFB 061h,064h,020h,065h,072h,072h,06Fh,0F2h DEFB 04Eh,06Fh,020h,066h,069h,06Ch,0E5h,041h ,01Fh,0DBh,0CDh,07Eh DEFB 0D7h,0FEh,010h,0D2h,0F7h,0D5h,05Fh,03Ah DEFB 0D7h,0DBh,0FEh,020h,0CAh,0F7h,0D5h,0CDh DEFB 013h,0D5h,0C3h,022h,0DBh,021h,000h,001h DEFB 0E5h,0EBh,0CDh,00Dh,0D5h,0CDh,0DBh,0D4h DEFB 0E1h,0C0h,011h,080h,000h,019h,03Eh,0D3h DEFB 0BCh,0D8h,03Ah,007h,000h,03Dh,0BCh,030h DEFB 0E7h,0C9h,011h,05Ch,000h,0CDh,053h,0D9h DEFB 04Fh,070h,0C5h,0CDh,0D2h,0D7h,0C1h,0C5h DEFB 0CDh,0E6h,0D4h,0CDh,0C6h,0D4h,0CAh,013h DEFB 0DBh,0CDh,0D2h,0D7h,0F1h,0F5h,0CDh,0E7h DEFB 0D4h,011h,05Ch DEFB 06Ch,06Ch,020h,028h,059h,02Fh,04Eh,029h DEFB 0BFh,044h,069h,073h,06Bh,020h,066h,075h DEFB 06Ch,0ECh,046h,069h,06Ch,065h,020h,065h DEFB 078h,069h,073h,074h,0F3h,04Eh,06Fh,020h DEFB 073h,070h,061h,063h,0E5h,043h,04Fh,04Dh DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,024h,024h DEFB 024h,020h,020h,020h,020h,020h,053h,055h DEFB 042h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,0,000h,0CDh,0C2h,0D4h,028h DEFB 03Ah,0AFh,032h,07Ch,000h,0CDh,0D2h,0D7h DEFB 0C1h,0C5h,0CDh,0E6h,0D4h,0CDh,0DDh,0D9h DEFB 008h,0E5h,0CDh,0D2h,0D7h,0E1h,0F1h,0F5h DEFB 0E5h,0CDh,0E7h,0D4h,011h,000h,001h,0E1h DEFB 025h,001h,080h,000h,0B7h,0EDh,042h,038h DEFB 018h,0E5h,062h,06Bh,009h,0E5h,0CDh,00Dh DEFB 0D5h,011h,05Ch,000h,0CDh,0D7h,0D4h,0D1h DEFB 0E1h,028h,0E6h,011h,05Ch,000h,0C3h,044h DEFB 0D9h,008h,038h,0C1h,03Dh,0C2h,019h,0DBh DEFB 011h,05Ch,000h,0CDh,0B3h,0D4h,03Ch,028h DEFB 0EAh,0C3hTrack-Info  N 00h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,028h,059h,02Fh,04Eh,029h CCP2:: END 4h,020h,020h,020h,020h,020h,053h,055h DEFB 042h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,0,004,00E,00B,07F,016 ;SHIFT: DEFB 00D,02A,02B,009,000,007,003,008 DEFB 000,000,000,07D,07B,060,07A,079 DEFB 078,077,076,075,074,073,072,071 DEFB 070,06F,06E,06D,06C,06B,06A,069 DEFB 068,067,066,065,064,063,062,061 DEFB 028,027,026,025,024,023,022,021 DEFB 03E,03C,029,05F,020,03D,07E,07C DEFB 011,011,011,011,017,012,018,019 ;CTRL: DEFB 00D,000,000,009,000,007,003,008 DEFB 000,000,000,01D,01B,000,01A,019 DEFB 018,017,016,015,014,013,012,011 DEFB 010,00F,00E,00D,00C,00B,00A,009 DEFB.COMMENT @ ***************************** * * * *** CPM HDD BIOS *** * * ~~~~~~~~~~~~~~~~~~~~ * * Inicializacia * * Datum * 21.10.2002 * * * * (C) NIPSOFT * * Marek Smihla * * Fedinova 20 * * Bratislava * * 851 01 * * * ***************************** @ .Z80 YES EQU -1 NO EQU 0 BIOS EQU 0EA00h GLO 008,007,006,005,004,003,002,001 DEFB 000,000,000,000,000,000,000,000 DEFB 000,000,000,01F,020,000,01E,01C DEFB 011,014,001,006,01D,00C,002,000 ;GRAPH: DEFB 00D,029,0D0,009,000,007,01B,008 DEFB 000,000,000,0CE,0D1,0D5,0FA,0F9 DEFB 0F8,0F7,0F6,0F5,0F4,0F3,0F2,0F1 DEFB 0F0,0EF,0EE,0ED,0EC,0EB,0EA,0E9 DEFB 0E8,0E7,0E6,0E5,0E4,0E3,0E2,0E1 DEFB 0C1,0D9,0DA,0D4,0C3,0D3,0CC,02B DEFB 02E,02C,0C9,0D7,020,087,08A,084 DEFB 02D,000,013,004,00E,00B,07F,016 ;SHIFT+GRAPH: DEFB 00D,021,022,009,000BAL INIT,DETECT GLOBAL NPAGES,FDPRES GLOBAL MSG,LETNL EXT ADRCCP,ADRBDS EXT GSEC,GHEAD EXT DPBA,DPBC,DPBD,DPBE EXT PARTC,PARTD,PSIZC,PSIZD EXT SELMST,RDIDE,WRIDE,BUF512 EXT PRERV1,PRERV2 EXT INIGDG EXT MAXLIN,CLRSCR,FDRAW EXT WTXMS CONOUT EQU BIOS+0Ch .RADIX 16 TABKV EQU 0BE80h ;adresa tabulky klaves vo VRAM TABFV EQU 0BE80h ;adresa funkcnych klucov vo VRAM FRKEYS EQU 04h ;format register pre tabulku klaves FRFKEY EQU 01h ;format register pre FKEY OCYL EQU 2 ;g,007,003,008 DEFB 000,000,000,03A,028,02F,0DA,0D9 DEFB 0D8,0D7,0D6,0D5,0D4,0D3,0D2,0D1 DEFB 0D0,0CF,0CE,0CD,0CC,0CB,0CA,0C9 DEFB 0C8,0C7,0C6,0C5,0C4,0C3,0C2,0C1 DEFB 09F,09E,09D,09C,094,093,092,091 DEFB 03A,03F,095,099,020,09A,09B,096 DEFB 05F,000,001,006,01D,00C,018,019 TABKE: TABFK: DEFB 'DIR ',0,0,0,0,0,0,0,0 DEFB 'USER ',0,0,0,0,0,0,0 DEFB 'POWER',0Dh,0,0,0,0,0,0 DEFB 'FET ',0,0,0,0,0,0,0,0 DEFB 'COPY ',0,0,0,0,0,0,0 SKEYS: DEFB 'TYPE ',0,0,0,0,0,0,0 DEFB 'SAVE ',0,0,0,0,0,0eometria disku - parameter C OHEAD EQU 4 ;geometria disku - parameter H OSEC EQU 6 ;geometria disku - parameter S OLDR EQU 8 ;MBR loader OTABLE EQU 01BEh ;ofset partition tabulky ACTPAR EQU 80h ;priznak aktivnej particie OACT EQU 0 ;ofset priznaku aktivnej particie OHF EQU 1 ;ofset hlavy zaciatku particie OCSF EQU 2 ;ofset CS zaciatku particie OFSYS EQU 4 ;ofset priznaku operacneho systemu OHL EQU 5 ;ofset hlavy konca particie OCSL EQU 6 ;ofset CS konca particie ORELS ,0 DEFB 'ERA ',0,0,0,0,0,0,0,0 DEFB 'NC',0Dh,0,0,0,0,0,0,0,0,0 DEFB 'REN ',0,0,0,0,0,0,0,0 CKEYS: DEFB 'CMT L ',0,0,0,0,0,0 DEFB 'CMT S ',0,0,0,0,0,0 DEFB 'CMT G ',0,0,0,0,0,0 DEFB 'CMT P ',0,0,0,0,0,0 DEFB 'STAT ',0,0,0,0,0,0,0 GKEYS: DEFB 'CMT L/S ',0,0,0,0 DEFB 'CMT S/S ',0,0,0,0 DEFB 'CMT G/S ',0,0,0,0 DEFB 'CMT P/S ',0,0,0,0 DEFB 'CMT R ',0,0,0,0,0,0 SGKEYS: DEFB 'TAPE L ',0,0,0,0,0 DEFB 'TAPE S ',0,0,0,0,0 DEFB 'TAPE G ',0,0,0,0,0 DEFB 'TAPE P ',0,0,0,0,0 DEFB 'FORMAEQU 8 ;relativny sektor zaciatku particie ONUMS EQU 0Ch ;pocet relativnych sektorov v particii OIDENT EQU 1FEh ;ofset identifikacneho slova AA55h MZID1 EQU 'M' MZID2 EQU 'Z' PIDCPM EQU 0DBh TABKB: DEFB 00D,03A,03B,009,001,007,01B,008 DEFB 000,000,000,05D,05B,040,05A,059 DEFB 058,057,056,055,054,053,052,051 DEFB 050,04F,04E,04D,04C,04B,04A,049 DEFB 048,047,046,045,044,043,042,041 DEFB 038,037,036,035,034,033,032,031 DEFB 02E,02C,039,030,020,02D,05E,05C DEFB 02F,03F,013Track-Info  N .COMMENT @ ***************************** * * * *** CPM HDD BIOS *** * * ~~~~~~~~~~~~~~~~~~~~ * * BIOS loader * * Datum * 8.10.2002 * * * * (C) NIPSOFT * * Marek Smihla * * Fedinova 20 * * Bratislava * * 851 01 * * * ***************************** @ .Z80 .RADIX 16 BIOS EQU 0EA00h CMTLEN EQU 0E00h 0['d ʚ;@B'd ͒ ( x  <Pͳ"ASC:@"<S>"ESG:@ >~>*A[C2@"<S>>>~>*E[G> F >0F  ( z 7xGz`y{:@~}||} _ x  7x )jK<7K>7ˣ˳<!'KB'!K>'KB͋K<' ͋ Ð`ehÊ͊!>ݾ( *&~(nf n f ͐ CMTSEC EQU (CMTLEN-1)/80h+1 EXT BIOS1,BIOS2 EXT INIT,DETECT,NPAGES,FDPRES EXT ADRBDS,ADRCCP EXT MSG,LETNL EXT BOOTDS EXT PSIZC,PSIZD EXT FLUSH EXT BDOS1,BDOS2 EXT CCP1,CCP2 EXT CMT1,CMT2 BOOT EQU BIOS HOME EQU BIOS+18h SELDSK EQU BIOS+1Bh SETTRK EQU BIOS+1Eh SETSEC EQU BIOS+21h SETDMA EQU BIOS+24h READ EQU BIOS+27h WRITE EQU BIOS+2Ah CMTNAM: DEFM 'CMT COM' BOOTD: DEFB 2 ;default boot disk je C START:: DI LD SP,8000h XOR A OUT (0DCh),A LD A,(080h) 0{E͊`͊v!~#U ~ :  ( z 7xGzy{{~}||}>  _ x  7x8 )jKK |jB0 ?jj # JACTIVE PARTITION NOT FOUND OPERATING SYSTEM NOT FOUND SYSTEM HALTED, PRESS RESET FIXED DISK READ ERROR! MBR 1.0B5 FOR MZ800 (C)2001 NIPSOFT _ 8q:Y2Y:Z<8=2Zͩ> [> [̈́ ([>[>2Y2Z`>[>T[A:Y(=2 :Z2 ͩ2Z OR A JR Z,STAR3 DEC A JR Z,STAR3 LD A,(082h) AND 05Fh SUB 'A' ; CP 2 ; JR C,STAR3 CP 1 JR Z,STAR3 CP 5 JR NC,STAR3 LD (BOOTD),A STAR3: LD HL,BIOS1 LD DE,BIOS LD BC,BIOS2-BIOS1 LDIR LD HL,BDOS1 LD DE,ADRBDS LD BC,BDOS2-BDOS1 LDIR LD A,(BOOTD) LD (BOOTDS),A CALL INIT ;inicializacia KBD/IO/PIO/prerusenia/RAM CALL DETECT ;detekcia diskov CALL SAVSYS ;ulozi CCP a BDOS do syst. stop CALL SAVCMT ;ulozi CMT.COM na boot disk JP BOOT SAVSYS: LD 2Y= qP (> {2 z2 ͩz2Y{2Z:YW:Z_ PQVacdeu !&*FAT12 XENIX DOS16 EXTEND BIGDOS NTFS SPLIT BtMgr DM R/O DM R/W GB Speed 386/ix NET286 NET386 PCIX MZF IDEDOS MZSWAP CP/M BBT NonDos S(!O!]T?6>U#w>#w:!U:!S !O!~( y!O!Շ__ *!=̈́nf N F n f NF͑*[K{|eoy?o}?OA,(BOOTD) LD C,A SUB 2 RET C LD HL,(PSIZC) JR Z,SAVSY1 DEC A LD HL,(PSIZD) JR Z,SAVSY1 DEC A RET NZ LD A,(NPAGES) OR A RET Z SAVSY1: LD A,H OR L RET Z CALL SELDSK PUSH HL POP IX LD L,(IX+0Ah) LD H,(IX+0Bh) PUSH HL POP IX LD A,(IX+0Dh) OR A JR Z,SAVSY4 CALL HOME LD BC,CCP1 LD DE,0D4h ;ulozenie CCP SAVSY2: CALL SETDMA LD HL,80h ADD HL,BC ;v HL je adresa dalsieho sektora LD C,E LD B,D CALL SETSEC ;nastav sektor PUSH DE PUSH HL LD }lg!l(#7R)^#Vnf n f n f nfFDISK for MZ-800, ver. 1.0 b10/CPM (C)Copyright Nipsoft 2002 Detecting IDE drives... Reading from drive... Writing to drive... Formatting drive... FDISK Options Number of fixed disks detected: Current disk: Choose one of the following: Enter choice: [ ] Press any key to continue: This feature is not implemented yet. no fixed disks detected Fixed disk read error! Fixed disk write error! Master boot sector updated OK:-) No partitions arõT]!T]x0Z)jɯ_W  ogXe|eko|jB0 ?jj|jB0 ?j # JɷB+ɷBBa{˯A[Gͦ#x͸G?͸A0:?0ͦ00Ɛ'@'!8 ))))o!8  'O͋!8T])))_|P}P__[!o&x0 [!^#V#/R<0[>0[! ^#V#^#V#/RR<0Zف[>Track-Info  N e defined Less than two drives present! Total size: MBytes Partition size in MB (max. ): No. Act Type Mbytes Format Usage (C= /H= /S= (C=?/H=?/S=?) ENTER DRIVE GEOMETRY Cylinders : Heads : Sectors/track: Write do MBR? (Y/N): Enter Fixed Disk Number ( - ): Delete partition number Set active partition Are you sure? (Y/N): Yes No Test error Relative sector: No space for new partition! Create partition Set active partition Delete partition Display partition information Display partiti`AͩA:-G(͜:M7?:Z7?8*[:,=p=ʄͩ!*ͩ`!**|Aͩ ͩx[ ͩy[ ͩD ͩ  (ͦ_{08ͩD ͩ (ͦ_{Y(N <85 3*[K ͚ͩ ͚ͩ ͚ͩ ͘% é( ͩ7͚5 ͩ͹ O͛ W͛ W͛ W͛ ͷ7CS">M2>Z28 ͣ !s1>PP(> 2d  ͩ!+6I k ί2,2-F(>N(>2,͜on info in HEXA Set drive geometry Recreate master boot loader Special diagnostics (destructive!) Change current fixed disk drive Exit FDISK Create MZF partition Create FAT partition Create IDEDOS partition Create MZSWAP partition Create CP/M partition Create custom partition Back to FDISK main menu Test read Test write Test sample written OK. Reliability test (destructive!) Reliability read Writing sector: Testing sector: Number of errors: Starting sector (max. 65534): Ending sector (max. 65534): Fail )L!.U`AP> [A{k= ͚ͩY ͩ`ZB 8A_8 ͘͞7|(_̈́>(wwut u t esut~  K͛u97B8B8~ r'͑͗e#͌͞u t ut͗esutj  ~W!]T6UD8mõ͹W""͛WKB 0i`#""!""!"D8͜mõD͜͹ed sectors: Enter partition code (hexa):  w   # ? b  0     Z7-  7 {0[7!ٷ'ͅͅdͅ ͅ}0[`WA:,=(ͳ͒DõõD͹n ͩ!* ͛}!"w#<=w# "0 BÜD͹n ͩ!* ͛ "0 !">PP(ͻ͹   L!SU? L!lUz(O͛)> > >  > > æ͋ͩ`**}=  "0**͋"K"Kٷ͞8͚͛ͩD*"͹ͩ`͛͛ͩ`A*}=  "!0!"+(A*͚>,[`*#"KB8A͚͛͛ͩA͚>/[*+Ú!"%w#< !"3#<3:ã(>:ã7 |(!+!6666|85>>>?BF<+ut!""6 ( @͋:y1[ÿ́q~ >>Y[> ~ ͩn f nf7>͈>*UB` \ ͩ>7d'7}e>%[͛  Û!O!>PP("~#P> [ [[~# 8 >.[͛ ͛>6!d""!!"^#V#!R"" ( ͋"8!]T6#6U#6UMZ-800 CPM partition ver 1.0"!!"^#V#!R"" ( ͋"8!]T6#6U#6UMZ-800 CPM partition ver 1.0͚A͚>/[*+Ú!"%w#< !"3#<3:ã(>:ã7 |(!+!6666|85>>>?BF<+ut!""6 ( @͋: A8(> [é2Û (   (  07ɯ2-:,=(ͳ͒!  >2-7ɯ2-:,=(ͳ͒!  >2-7͹F Oi OÛ OÛ ͩ:,  ͩ o&͚͛Û ͘ÛF#> [y0[>.[> [^#V###͘  ͛5 ͩD ͩ>2 (2:180䇇_##^#Vz `Ac ͩA`Az(͘H ͩATrack-Info  N IVNEHO SEKTORA NA LOGICKE PARAMETRE CHS ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; vystup: HL = parameter C (cylinder) ; DE = parameter H (hlava) ; BC = parameter S (sektor) ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** RTOFCHS:: ADD HL,HL EXX ADC HL,HL EXX RTOLCHS:: LD BC,(GSEC) CALL IDIV INC DE PUSH DE LD BC,(GHEAD) CALL IDIV RES 4,E RES 6,E POP BC RET GTOR: SRL H RR L EXX LD HL,0 EXX CALL IMULP LD C,E LD B,D JP IMULP ;****************************************************************************** ;PREVOD LOGICKYCH PARAMETROV CHS NA VIRTUALNY RELATIVNY SEKTOR ; vstup: HL = parameter C (cylinder) ; DE = parameter H (hlava) ; BC = parameter S (sektor) ; vystup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; nici: AF, BC, DE, HL, HL' ;******************************T]#p#w w>?w?w$~(%7$^$4$%~%T]6w$~("%z7$^$4$%ww~$(!%ѷ7?wO! *| 7^#V!'-*!7*!F*!U!*"W!n*W"W!o!*Ko!!*! "oKm!*Kk!*!$*:k!q<(2k:rw2k>9 y!   ======================================== INIRD.COM - V1.0, Meo'soft (c) 1991. ======================================== Program zape ochranou sekvenci 32 byte do prvn poloky zlohovanho ramdisku a tm ochrn adres ped vymaznm po resetu potae a restartu systmu. ---------------------------------------- $2mss1&!&]TKi 6!u*8*͇!&Ki~!͉8# x !8e^ {sERROR $OK $&$BIOS BINO!*| 7^#V!-*!*!*!!*"!*"!- - -!;?p#"$=ͣ'!N"@; (."$=~w#~@P/~.#^#Vͣ.*= ͣ *={ģn*+=h %!"="=}2=j!/!W?>|;T:=8j!=44!/!?>|;T͙/*<|ʭ.:@<2@?2@?ó.!1/͵/!4/͵/*<|.>,8L:@<>,İJ:@<2@?2@?!D/͵/͙/.=44!/!?>|;T͙/*<|ʭ.:@<2@?2@?ó.!1/͵/!4/͵/*<|.>,8L:@<>,İJNO!*| 7^#V!-*!*!*!!*"!*"!- - -!;?p#"$=ͣ'!N"@; (."$=~w#~@P/~.#^#Vͣ.*= ͣ *={ģn*+=h %!"="=}2=j!/!W?>|;T:=8j!=44!/!?>|;T͙/*<|ʭ.:@<2@?2@?ó.!1/͵/!4/͵/*<|.>,8L:@<>,İJTrack-Info  N ed sectors: Enter partition code (hexa):  w   # ? b  0     Z7-  7 {0[7!ٷ'ͅͅdͅ ͅ}0[`WA:,=(ͳ͒DõõD͹n ͩ!* ͛}!"w#<=w# "0 BÜD͹n ͩ!* ͛ "0 !">PP(ͻ͹   L!SU? L!lUz(O͛)> > >  > > æ AF RET ;****************************************************************************** ;CELOCISELNE DELENIE 32-BITOVEHO DELENCA 16-BITOVYM DELITELOM ; vstup: HL = delenec (spodnych 16 bitov) ; HL'= delenec (hornych 16 bitov) ; BC = delitel ; vystup: HL = spodnych 16 bitov podielu ; HL'= hornych 16 bitov podielu ; DE = zvysok po deleni (modulo) ; nici: AF ;****************************************************************************** IDIV:: XOR A; nula do A LD E,A LD D,A; vy;****************************************************************************** ; ;ARITMETICKY MODUL PRE ZAKLADNE CELOCISELNE UKONY S CIASTOCNOU PODPOROU ;32-BITOVEJ ARITMETIKY ; ;POZOR - NAVRHNUTE LEN PRE UNSIGNED ARITMETIKU ;V PRIPADE ZAPORNYCH OPERANDOV ICH TREBA PREVIEST NAJPRV NA KLADNE, ;POTOM APLIKOVAT ARITMETICKE RUTINY A NAKONIEC VYSLEDKY PREVIEST ;DO SPRAVNEHO ZNAMIEKNA ; ;(C)2001 NIPSOFT ; ;****************************************************************************** .Z80 .RADInulovanie modula EXX PUSH BC; uchovaj povodny obsah BC' LD B,020; pocet opakovani (32 bitov) do B' OR H; je hornych 8 bitov nulovych? JR NZ,IDIV3; nie su nulove, zostane 32 opakovani OR L JR NZ,IDIV6; boost pre 24-bit. delenec EXX; boost pre 16-bit. delenec PUSH HL; urobime shift delenca o 16 bitov vlavo LD L,A; spodnych 16 bitov bude nula LD H,A EXX POP HL; spodnych 16 bitov presunieme do hornych LD B,010; 16 opakovani JP IDIV1; chod delit IDIV6: LD X 16 GLOBAL IMUL, IMULP GLOBAL IDIV, IDIV16 GLOBAL IADD, IADD32 GLOBAL ISUB, ISUB32 ;****************************************************************************** ;CELOCISELNE NASOBENIE DVOCH 16-BITOVYCH CISEL DO 32-BITOVEHO VYSLEDKU ; vstup: HL = 1. cinitel (spodnych 16 bitov) ; HL'= 1. cinitel (hornych 16 bitov) ; BC = 2. cinitel ; vystup: HL = spodnych 16 bitov sucinu ; HL'= hornych 16 bitov sucinu ; nici: AF, BC, DE, DE' ;***********************************************H,L; urobime shift delenca o 8 bitov vlavo EXX LD A,H LD H,L LD L,E; nula do spodnych 8 bitov EXX LD L,A LD B,018; 24 opakovani IDIV1: LD A,H; najvyssi bit delenca do CY IDIV3: RLCA EXX EX DE,HL; modulo do HL ADC HL,HL; sprava nasun do modula CY SBC HL,BC; je modulo vacsie ako delitel? JR NC,IDIV2; je vacsie, nechaj tam nove modulo ADD HL,BC; vrat stare modulo naspat IDIV2: EX DE,HL; vysledne modulo do DE CCF; vysledny bit podielu do CY ADC HL,HL******************************* IMUL:: LD D,H; 1. cinitel do DE (dolny word) LD E,L LD HL,0; vynulovanie dolnej casti akumulatora PUSH HL EXX LD D,H; 1. cinitel do DE' (horny word) LD E,L POP HL; vynulovanie hornej casti akumulatora EXX LD A,B; horny bajt 2. cinitela do A LD B,010; 16 opakovani IMUL1: RRCA; rotuj 2. cinitel vpravo RR C JR NC,IMUL2; nulovy bit preskoc ADD HL,DE; prirataj do akumulatora 1. cinitel EXX ADC HL,DE EXX IMUL2: EX DE,; nasun novy bit podielu do HL EXX; a cely podiel posun vlavo ADC HL,HL; vratane horneho wordu DJNZ IDIV1; chod na dalsi bit POP BC; hotovo, obnov BC' EXX RET; a skonci ;****************************************************************************** ;CELOCISELNE DELENIE 16-BITOVEHO DELENCA 16-BITOVYM DELITELOM ; vstup: HL = delenec ; BC = delitel ; vystup: HL = podiel ; DE = zvysok po deleni (modulo) ; nici: AF ;***********************************************************HL; 1. cinitel docasne do HL ADD HL,HL; rotuj 1. cinitel vlavo EX DE,HL EXX EX DE,HL ADC HL,HL EX DE,HL EXX DJNZ IMUL1; opakuj dalsi bit RET ;****************************************************************************** ;CELOCISELNE NASOBENIE S OCHRANOU REGISTROV ;****************************************************************************** IMULP:: PUSH AF PUSH BC PUSH DE EXX PUSH DE EXX CALL IMUL EXX POP DE EXX POP DE POP BC POPTrack-Info  N I 1.2 C (C) 22.3.1990 NIPSOFT M S I 19 97401 B B CZECHO-SLOVAKIA>!2"!H vv PP"H!9*H*"T] S~#(T] o~&^#V!Yɚ} Nq#^#V# #+Ò!ͳ~#fo6#zw#s#r#6#T]Bͳ!ͳͳB[~(Sց\_^7{6z~3KLl[xA54t08u9Mon2wvrsG|S1NmHF}DXyB`!RtYQ ia  YQ> Xx { _W!Rɓ`8> !o0$~!GT] 7R}`8> 0!  !^#V#R<0=(0 }0 'd G:x8!( ^#V#N#F#xZ( > :!R0 ?? T])))!>8`i ( ,8G~###x7#N#~_#~W6#q#{w#zw#6~6#~+ AO7+~/wyN#Fw#yN#N#FW^#V#^#V#^ɧ!0G-ٯ.W] ? &##^#V###~#N#F  w#s#r++++q͔G͔O0xAͳwhaJ|o0>4(#}#w+({D?_z/W{/_z/04ʦWٯN|M!)8 08c#+ "sAsxO͢8 z Òq͹͹8Zͳxbb!0Zx =???0h< 8z \wx0~>(٢w8.#w2mY=(<8O:lˆ~(\  N#!tZSY0>2l͡ ~#2m!Q"!x"""">2l6T] ##2m͡bkgp=  T] +6 #O>!ͳ)jB0 ?j= "nZ[]!6q(xG =><a P y( aPLAY!  aRECORD! %( !>Ÿ0G+) z 5(0 4(#xw#q#r#sfq͹8͹ͳ`iah)j8RR0Z٧RR7(_QYPx6~06> 50,/Ƒ#V#^++z( 8Z(G:̀~֠D+G888(6+( G>'wt~s#w+wz B(SX)0 +s+r+pJ                 "*J   "IJ   666"r>Ÿ8 > *r>Po0$"r6>= Ͱ#G͹FG~wxYҢA͹(͹<=͹%0#8xͰ͹g~͹_k0D?|_K0D?%w  !{ spx"zQzI!M_P=!(.Ͱͦ(8_>Gͦ(+OY0D0%~>"D22;!!Ͱ͹͹oO8(E"2h8(:OͰ͹!"!"*[#R((7R(""J *0""J     s }Ɛ'@'|}!FyVmN1> >7ȷO: y ((%8 8:y f>%80>yw#! ( ͗!~O 6#~(94!_n&)))*O|G& Pwyo0$>(> z z(>!@(@ 6*(| } bj"!!"!>T]uC!"!9(Ǽ8Y%~~2l2!>̻ )%8$%²- :m_!(Hxw# x 2 ,(3({_Q@(8(0  >!x/Gy/Ozͳ>7{p6(Ң((Ң _կW<2l{7 gA͹ʯ>ͩ²>ͩxw# x>ˆͩ !QGͰ >0%{W{GҢG8xYGҢ %YGҢG8xYGҢ(%  Y>8{ɯ22/>2lU>0(g~# ~#  Q0Z(>(s 8!r~>>@2/@!(w>!>͗>>@!z( #5 6z(w#6+G>2 (+(& y( +!5> ͗ 8( 76 >2 :;][@ZYXWVUTSRQPONMLKJIHGFEDCBA87654321.,90 -^\/? *+}{`zyxwvutsrqponmlkjihgfedcba('&%$#"!><) =~|_abcdefghikj/*.- !"#$%&'()O,Q+WIU RYTPETrack-Info  N > >?22/>0>>0>0>0>̓(>g>ݔ!>xw# x>º> ~> !AG0?x<<Y>GGx<0?Y<<%7>=~>0#!|>̻ )>+| !>̫ )>?%> e8!>V/x# x> >P/>Q/7>" SLOBODANCDIOPTLSRKVMU?8z7GR,_Idiuj 'tN C DI C P T L(a F #pa L #p*Rc~!KSY= a B 84ͪ~(wa P ! ~ݶp> > : > pa !M~#(| a  N#F#~ 8 x 66W!5a R̈́œ<(~RDM=5ͪ~5 18  106W!M#####>P>P1> 1~|#18> 18z z > # ####PX!s:(a I ;>P2>ASR K VMP H MZ-1P16 CENTRONICSNORMAL SINCLAIRCPM TURBO FAST IPL OK ErrorY N HD480,0 M0,-81 D480,-81 M480,-145 D0,-145 M35,-145 D35,-81 M35,-113 D480,-113 M480,-161 D0,-161 M0,-472 D480,-472 M240,-792 D240,-145 HQ0,S2,M41,-108 PA: S1,R0,5 Q0,S2,M41,-140 PB: S1,R0,5 Q3,S2,M29,-135 Q0,S0,M6,-157 PA: Q0,S0,M246,-157 PB: Q0,S0,M0,-180 IM240,0 M0,0 M0,-8 IM0,-24 I:a B !~# (| 0> 1R;Ͳ;Ͳ>B;Ͳ;Ͳa C : >!S;Ͳ;>#; ;zٲ ; =(;>&2a T A:  a N: !> Sa T [C60/C90]: CW! 9(!>6 a0 !>S!0?0 0 ̓(>S~>>= Vz_>!# x S~>7>͎9G>==_Y $~O#18~#- ~#C( L y1(~! (Ͷ!:!*!K +!*!*l&))) Ͷ~# Ͷ*nͨa BdA[A?4?! :~=((0802 w>- ~=(8a B.Üa B a [N/Y] ? (Y!(!g*!+"*&ͨ><2ͨ"ɯ2V>ί>>10>aI (C)1990 NIPSOFT T: F: V1.2 C F ******************* IDIV16: LD DE,0; vynulovanie modula EXX PUSH BC; uchovaj povodny obsah BC LD B,010; pocet opakovani do B IDIV4: EXX LD A,H; najvyssi bit delenca do CY RLCA EX DE,HL; modulo do HL ADC HL,HL; sprava nasun do modula CY SBC HL,BC; je modulo vacsie ako delitel? JR NC,IDIV5; je vacsie, nechaj tam nove modulo ADD HL,BC; vrat stare modulo naspat IDIV5: EX DE,HL; vysledne modulo do DE CCF; vysledny bit podielu do CY ADC HL,HL; nasun novy b T B E E M S C Q1!>2ͪ:ssaH: !~# >- a? SYSTEM READY .!T] 7R))^#V#N#F!g!!gg<ͼa M S I 19 974 01 B B CZECHO-SLOVAKIA:2!(!gQ!s a...^#V###g!GQsy a: y~# ( ͶͶͨa +|(a ! a NWa : !>~4($4R8r#r7R5it podielu do HL EXX DJNZ IDIV4; chod na dalsi bit POP BC; hotovo, obnov BC EXX RET; a skonci ;****************************************************************************** ;CELOCISELNE PRIPOCITANIE 16-BITOVEHO SCITANCA K 32-BITOVEMU ; vstup: HL = akumulator (spodnych 16 bitov) ; HL'= akumulator (hornych 16 bitov) ; BC = scitanec ; vystup: HL = spodnych 16 bitov suctu ; HL'= hornych 16 bitov suctu ; nici: F ;*****************************************************************a B Ü! =ͣaB : EW (>< a P PLAY!%8( ~!!80*lg n&?6͛Ͷ<ͼ6KSY==(6!0!6*g!~6!>- 0?͛w6Rs##Rc~=(E<+~<#RDM+6 +6 ~^#V r+sͪ~! Qz~# ^#V#!5~48!6#CCKx(a W !p!YWY8a ̈́w!8~Track-Info  N ************* IADD:: ADD HL,BC RET NC EXX INC HL EXX RET ;****************************************************************************** ;CELOCISELNE SCITANIE DVOCH 32-BITOVYCH CISEL ; vstup: HL = akumulator (spodnych 16 bitov) ; HL'= akumulator (hornych 16 bitov) ; BC = scitanec (spodnych 16 bitov) ; BC'= scitanec (hornych 16 bitov) ; vystup: HL = spodnych 16 bitov suctu ; HL'= hornych 16 bitov suctu ; nici: F ;************************************************************* 0173' CD 0000* CALL PRNTC 0176' 10 F9 DJNZ MSGC2 0178' D1 MSGC1: POP DE 0179' C1 POP BC 017A' E1 POP HL 017B' C3 0000* JP MSG 017E' CD 0161' MSGCNL: CALL MSGC 0181' C3 0000* JP LETNL ***************** IADD32:: ADD HL,BC EXX ADC HL,BC EXX RET ;****************************************************************************** ;CELOCISELNE ODCITANIE 16-BITOVEHO CISLA OD 32-BITOVEHO ; vstup: HL = akumulator (spodnych 16 bitov) ; HL'= akumulator (hornych 16 bitov) ; BC = odcitanec ; vystup: HL = spodnych 16 bitov rozdielu ; HL'= hornych 16 bitov rozdielu ; nici: F ;****************************************************************************** ISUB:: OR A SBC SSDHQ RNPAGEST44x1Q92P5" `6Y,RLQ(a,I$R! A Qd1 #\`@p,`ـy<Sq8ai4S!a Q D!%|B!H04 PL$`, P < `0Z6 U|=Wx;ct9W#`[MFM+ -q`@p,D@@l5VMh3c-d1V# OĢM$ҩi6/ `00"JBLR(R41 !dE)JQ)H HL,BC RET NC EXX DEC HL RET ;****************************************************************************** ;CELOCISELNE ODCITANIE DVOCH 32-BITOVYCH CISEL ; vstup: HL = akumulator (spodnych 16 bitov) ; HL'= akumulator (hornych 16 bitov) ; BC = odcitanec (spodnych 16 bitov) ; BC'= odcitanec (hornych 16 bitov) ; vystup: HL = spodnych 16 bitov rozdielu ; HL'= hornych 16 bitov rozdielu ; nici: F ;****************************************************************************** ISUB32' !J`4 )!J84 ()%A4 & b!J 4 #b!J 4 )*JQ0@E*JQ@E#D P@@ &]@7 <~Wow͚3m6n63h6t$Ĕl/@YPiAM. My#M!@V M!!,V %>4M>}ڣM>Z4Av]i` |G0cHi 6dV lrV`%Y^b~0 YAΗiD;H K6K m4vY" +iD:: OR A SBC HL,BC EXX SBC HL,BC EXX RET END OCISELNE ODCITANIE DVOCH 32-BITOVYCH CISEL ; vstup: HL = akumulator (spodnych 16 bitov) ; HL'= akumulator (hornych 16 bitov) ; BC = odcitanec (spodnych 16 bitov) ; BC'= odcitanec (hornych 16 bitov) ; vystup: HL = spodnych 16 bitov rozdielu ; HL'= hornych 16 bitov rozdielu ; nici: F ;****************************************************************************** ISUB32fqC^W/j(63`:DfP2}Q@m?P2` +iFfqCuRP5 8@ >}æq[$c) I@.@\< LAvR@P ?m)6O!^2̖h!""@H F,*aR`h3Tgi* UT@tCB D n͸[6!#t2t!a ٷ@ bk#y A/;Bh vCn/Ӹ~?N&;ۦct nհQ<7Q !Q< JWarning: system write error! $Warning: CMT.COM create error - may be damaged! $CMT.COM was created successfully. $CMT.COM was found on b Siy '3Xo0 @F6Ȁi9Ce!t $NFC!k '#oot drive. $ :; ][@ZYXWVUTSRQPONMLKJIHGFEDCBA87654321.,90 -^\/?  *+ }{`zyxwvutsrqponmlkjihgfedcba('&%$#"!><)_ =~|     ) +., -  !" :(/:? _ DIR USER POWER FET COPY TYPE SAVE ERA NC REN CMT L CMT S CMT G CMT P STAT i7B!e1 &8r41`l2NfQi: e:LgC)t ABAl4 FCj6 F#!d4,@b< 1 1NSI(b  qi6!b0 @ "`2't$` )!")2 "d|!*Febtd"""F"" f "(!!_""$gl"(!"S2"*fh ") J*:B* $d#_JrJ:"q^!xE(!{|GiAM>! @>!M,>6>t>><>AAx@ > >>Я !y !QA AXAY!S WAg(W_RL(z8>RW_RL  2X !S WAg(:X !(58?g+Cp{2r:{WA:R"s>> ȯ2Y 67Fh,0E9h,03Eh DEFB 001h,096h,077h,0E1h,018h,0B3h,0FEh,018h DEFB 020h,010h,0E1h,03Ah,07Dh,0E9h,021h,07Eh DEFB 0E9h,0BEh,030h,097h,035h,0CDh,078h,0DDh DEFB 018h,0F1h,0FEh,015h,020h,006h,0CDh,085h DEFB 0DDh,0E1h,018h,087h,0FEh,012h,020h,033h DEFB 0C5h,0CDh,085h,0DDh,0C1h,0E1h,0E5h,0C5h DEFB 078h,0B7h,028h,00Ch,023h,04Eh,005h,0C5h DEFB 0E5h,0CDh,056h,0DDh,0E1h,0C1h,018h,0F0h DEFB 0E5h,03Ah,07Ch,0E9h,0B7h,0CAh,0C3h,0DDh DEFB 021h,07Eh,0E9h,096h,032h,07Ch,0E9h,0CDh DEFB 078h,0DDh,021h,07Ch,0!!"&","U"dZ @*X UR:Z M:[ Z*^ " *` "! ~  ͐! ~( ̈́ y !(_!"P~w~ w~ w~ wn f ~ݶ(!+ut~nf n f i@0<*gUR0#i@8ۯ_WN#F# = z!O> :yO  $:!O o&x0 :!K ^#V#/R<0:>0:*&Cͺ*,D|{/ J)T 1:X >E/Z J! 8####E9h,035h,020h,0F7h DEFB 0C3h,0C3h,0DDh,023h,077h,004h,0C5h,0E5h DEFB 04Fh,0CDh,056h,0DDh,0E1h,0C1h,07Eh,0FEh DEFB 003h,078h,020h,005h,0FEh,001h,0CAh,000h DEFB 000h,0B9h,0DAh,0C1h,0DDh,0E1h,070h,00Eh DEFB 00Dh,0C3h,021h,0DDh,0CDh,0E1h,0DCh,018h DEFB 02Fh,0CDh,015h,0EAh,018h,02Ah,079h,03Ch DEFB 028h,007h,03Ch,0CAh,006h,0EAh,0C3h,00Ch DEFB 0EAh,0CDh,006h,0EAh,0B7h,0CAh,0ECh,0E8h DEFB 0CDh,009h,0EAh,018h,013h,03Ah,003h,000h DEFB 018h,00Eh,021h,003h,000h,071h,0C9h,0EBh DEFB 04Dh,044h,0C3h,0Track-Info  N ^# JG:Y >A/o J J JX J ͭ'd ":"8f:t:1]6:t_BJ:t02$ _!4V <:Z_Oio;022 !}!"6~+Q >_8 o> > }Z(Qw 6QQ84886<(V=0~OGo&ut6~< w7w^VOysr7ws :!FO ">NyF(![A͘!{a͘!͘!͘ɼؽ !}͒n 0 6)F( 6(: Memory disk board $: Floppy disk drive 720$: Harddisk partition $Detecting drives, please wait... $detected: $ 64 128 256 5121024???? K bytes$ M bytes$NIPOS ver 0.07 build 21.10.2002 (C) 2002 NipSoft $ÛæxB]g/D27<WA*?@xxff"llll|<|n4Xf8llf    Z~<~<~Z~ ~ 5 n Vwu*}}:*8:}2~OOO! !!"8HC8I N#y 0> KC8> ͋#*  :2<2C͡~ _S|ҡ!Oqy4 á:(>Ms1 ͛(!SOy!5{>s1ͤ_͆!(5 {M>_W*[R |"[*X"X:Z2Z(QR8 R"X2Z<>)jB0 ?j=  MrM{0*-"͋ :!O"*8!"8*X:Z(Re>:ue>:u:Z(> oe"8`0 ``f<ff<~`0< ~~>ff>ff>6ff> 0`>00000>fff>ffff<````l8f66f<6$CCCi`y09(58=Go&A^###V##~#(Sy2 (=o&s1o{b: *s|:g:G>ay *͛(>79͛(4s1: (߯2:(͙7( ;ܳ^t<{s1: (y2=(A= :2:!~#^#V#N! # %: O{# z# y !(5>22͙(;0ͳ:7Գ!6^t:=7;_W  ogõe|eko|jB0 ?jj)jnfffff>|ff|6n|<`> > l8fffvlfff<lffffff|`x~0 ~0 0 0 p>!3!@PX!p:8O:8կ_|W&[: O>kb͓C>P_WqJT] (zW":2:2;:B :D2E:B *A}(2!G:C=(!O*:͓O>/ y_W:B/2B:E= :D2E!G͢!;4O !9!(w͌y] 0@o&)))P>>w wK͔K ͔ˣ˳ ( z -xGzy{>~}||} _ x  75x >~>> 8 :.W(>08  !! !":( !(=(*:<< _UnfR8nfnf0#i7:kͿ0 @?85 !6to:7:ڦͿ0q?85 :WX!i[t:??w w w w w w w wͦ*<( R("<!@!:>O40&6!;>405!;!:~(5ɯ!s1!WyF4 /( (X j @(({4>qX=('5*((($)($0(:1(>>g:828ɯ2A>>29ɯ 4  P6˾_*:͓{͋18y>0?۱W(yӰ۱0۰:F*8*::2!"8!":E/0> /2ͦkbN# ( 7 (? |2Track-Info  N = >2>>:>/8PX!iz /w# 7i!4/G8A:>!~6f*+| N͜0B}f0 /7( 5 !6N͜0.w((B],f>!kR <7(5 WW} 2.}A}PI}_I}nI$^ ?~/wG@x(@sD0(4{@W{(<(=8{_!~>>p@s!'N!'F͋͟( = 6d͋͟ >d= H6(s@(@ # ͋1: '!"9%͕ ګ.͗~& !"BK!!pq6> >>>!1!66q!>28"9>2>2!!>>!'~#~#>:'0= > 800 ? ?#I+~|Q})Ͷ)ö48 O48c8gc8oN#F#B8<Û (0Ͷ>0Ͷp( > 'd N#Fm: 'G: '8!w3x(^#V!R8R! '?8'5(#<MD! '4: '=2 'BMDsv#́d͉/{v>7@>xxOF͹ yA[Cx¯Hʵ'y¹@#Ã@ O  ́!?zAo& n& ~O#~怱O+~x o&F#~+ o&>ʴ >2'>(2'y:\=fxA#A*] y y## VYYKRIC'NIIK @ KRIIZ'IK DOLAAR PERCENT ENT @ ZAATVORKA PRAVAAZAATVORKA HVIEZDIC'KA PLUS C'IARKA POMLC'KA BOTKA LOMENO NULA JEDNA DVA TRI S'TYRI PET' S'EST' SED'EM OSEM D'EVET' DVOJBOTKA BOTKOC'IARKA JEMENS'IE JE JEVEC'IE OTAAZNIK  "&*.248BHJNPPV\dfptz|„ˆž†6414165Q11463:2=2Q3"111611661Q41242"!1641242q212C2D2?41+3:2=23qm2>c3:2=2>116%115%2>1+3:2=I V10.1 3C (C) 15.8.1991 NIPSOFT M S I 19 97401 B B CZECHO-SLOVAKIAw3`i1ZVEDAVEC!5m}/lo%^#VSKACEME {=ʗҗ<2>>>}2'2'yQ sYQ1!"'"'&>6T]>>yy!"'e"'&9ůO|$ƀG G,o&)))*'Pwyo$vabcdefghikj/*.- !"#$%&'()O,Q+WIU RYTPE22`qݒqm2>4124273:2=22S2T2Ǐ>@|? @\5Ū58sxZ!= y_BUZZZUUUZUUUfll77fӶ`nM]FOUiYjUUjUMfjUҖU fg1f9kfYqgqsgY.Z^>Hx!m1T] R>@G*'!"'!'6-:')Ͷ6;:')Ͷ6C͉"': 'ͮ$ї! '~=(ʫ. >AA0GAͶ>-Ͷ~=(ʫ. xAA08OAͶͶ>:Ͷ]T:'@;:p\_^7{6z~3KLl[xA54t08u9Mon2wvrsG|S1NmHF}DXyB`!O ~*':u0!Op#####ia( :u0} | ck"'*'}O(,"'.$|8&!,!'6#~!(4:'× ʗ> Ͷ 2' ( =1ͮ *+b Ȑ('&%$#"!><) =_hc :;eȐ][@ZYXWVUTSRQPONMLKJIHGFEDCBA87654321.,90 -^\/?`a*'PTrack-Info  N ~= I ~. @~ 7#~181#~- +##~ $+~++C7(L ~81(:8 >1Ͷ Ͷ2'ID++^#V#^#V#+LD$ʫ.Y($7?͋1!'#0( 8>w0Ͷ 9-!"͋1!'#08>͋1!"9$ ~& !"x'͋1x!" ! 'ʫ.(A?8AͶͶ72'9 $:'( %=(&͕ 8# N#F#^#Vk !"bkͮ͗xʓ >/Ͷ͉>:Ͷ͗ x y0YI͗ # >=2'>/Ͷ͗ ~:'( =(  =1͞ # # ͗x('~!T] >7Rͻ@@!ͩG!'>!O2:dG~#͞ 2~#=1͞ 2~#͗~!.(((P~E~ ͋1: '!" J_Q( G $ʫ.48G̀$ʫ.48(Òx2y2!"F'!"g u M@H @&G0"=+ 1L@eeʧBB2d2dm+V+V[$H$H( H [91+&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!x( g $ !'4 0>.Ͷbkʫ. (1`(:'O(wͶ#7R0!'55+w>û >&͕/8D0( (.D0( .0ë.NOHALRLCRRCRLRRDACPSCCCDEEXNERETRETRRRLLDCPINOUTLDCPINOUTLDICPIINIOTILDDCPDINDOTDINDESUANXOOCPOPUSRLRRRRSLSRSLSRBIRESELEADADSBDJNJJCALREOUIRSIRLCRRCRLRRSLASRASLISRLRESSETBDHSAIIXXYYNNPP(CAF(I(I#0#0#1#1#2#2#3#3(BC(DE(HL(SP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Ͱ>2=(<8Q:n~(O  5#!MZS0>2͇ ~#2!!!͵>26T] ##2͇bkgp=  T] +6 #O>!͙)jB0 ?j= "!"T]S(S"`"/"a"Z[]O>G 9><(  y( (PLAY!  (RECORD! ( ~#(ͶE#GNFG]~wxYҢAN(N<=N٩(IX(IYHLH(HL(HL6 6(""#67826#"#6;66)""#6<826#"#6<626s""#60< 8262#"#61<66s""#64<826#"#6?)==>*8B?= > >9B?)=@t>*$B?=A>:B?)=7+>*%B?==7>&B?)= > *'B?6= > (BA@:6sC6A@96 C6A@:6sC6A@96C6A@:6sCA@96CA @:6sCA@96CADD AADC ASUB SBC AND XOR OR CP͑dd0#8xENg~N_k0D?|_K0D?w® !`{ z := sIxz!z9!_Pb1c!(.E;(8_>G;(+OY0D0~>"D2n2!!ENNoOͣ8(E"2Xhͣ8(:XOEN(Ǽ8~~22v!>̻ )%Ud8$%U- d:_d!́(H!w# x ́ 2͑ ,(3 ˠ!˿~#(= !"!*~˿Ͷ~#(p80<ɯ080>2> 22@8A0=v(Ap >24!b( >(ͦ~#(~G~FDE`h(~#(= ~((((e~C ~!( >2:(= ~˿Ͷ~#(>(ö>)>,Ͷ>#ͶQ>#ͶL~((nf~6 nnf˿48 )~~(>-ͶD >+Ͷp({_!d(8d(0  >!x/Gy/Oz͙>7{Iͧ!6(Ң((Ң _կW<2{7 gANR>LU>L!w# x>+L®!Q÷GEʮ>0{W{GҢG8xYGҢ YGҢG8xYGҢ ¶îY>8{ɯ22>2ll>l0(©> >?22>l0>é>l0>l0>l0>̓(>g>͛ݔ©!>͛!w# x>]>͛®~>p }=(= &}(%##= } ̀2dG~#Q 12~ʈv HALͻ:d_@85010!L!Oz~F!Oj~F!Wzͦ~ͻ~ #~F~ x!~( (+>X2222ƀ2:(!=(!>YXXI(IX(HLHLH(HL(HLHLH(HL(IX~@0!z~ͻ,=!j~ͻ0Ͷ:d= NO~ ~~(@8 0'!z~ͻ!Oj~F>w>L(>Mͻ!Oj~FTrack-Info  N ͛ !I÷ژÝÝG>Y>ڸýýGY><<7͎>͎0#~>~#2~#2~#2~2OF#^#V#*R8W~#oG ()og~#:==ʧ!:w>̻ 6! !|>̻ )>͎+| !>̫ )>?͎%> e=87͎=!V!# x> >P>Q7>͎:=2!>͎>7͎~>! 22!>̫ )>͎+| ~GG>>̓(>S~>>= Vz_>!# x S~>7>͎9G>==_YSLOVAKIA V. V10.1 9,$ͪ «. «.ͮ7$ͪ !.' ͮ>$͕ ګ. 'h!"D0ʫ.>g'>o A͟(͟(O(͸+ :,A2,H%:u2ua%([%!"!u_(Wg&y&:\(2\((u&!"HELP: y(͗)!(>2'ͼ(13">,2'ͼ(͗Ͷ>.Ͷ ^#V###$##$ $%&g&#E$[$ %&#H%$p$&&y(25+9&:5+( p$=($͕ ڽ)$|+++")")V+^R")ͮ$!M0͸28)0[)&͸20*)>9GY7^~>Û>!; 2a2!>̫ )^7>^7>^+|> 77^>̓(!~>͚>^S͚!# x>U>͚T>͚7>^! *"!"*ͰM:=   :=(= [!  a !M00 ! K: !~6!MZr= >#!9!ne: >!~w#| :K2K :L2!M |(*!"*Ú*$BSLLBBSS>>6W_;b(>2!\" *}2|2K * ":5+̱=Y*=̢*'g( ͟^(  )!"!")")!+")L)*)R*)R8*)RNECUM!HELP: L-S-V-$-#-K-D-A--*-P-C-M-I-N-E-@-%--W-B-O-U-? KD~gQD|͞ =1͞ |D**N>Ͷ>8> Ͷ>ͶD>Ͷ> 8> Ͷ>Ͷ##͗**ͪ (]^(eO( (+G ($)8 (Ox, yw##++. yR1/ yc8w##(++^(>)>!T](>.7R}!+ ##~ɡqڪ! : 2y1987!6q(xŸ0G666"K>Ÿ8 > *K>Po0$"K6>= 1ͮ͗̀")ͮ͗̀"#̀"!"T]# 7R%"^#V!,v( L(K(ɯ<!,ˆLSV#$34KPDCA@^E%5NM*:?HIBWOU&'();..4/$ L $ L k e 1 +( 'H0](](((),+1+,,|"|"|"|"|" RECORD  PLAY T ! W SYSTEM READY FT B E E (M2S ;HEP I (C)1991 NIPSOFT {><* 8`8 !^+-(>.R1 8>.O+(͸+ y>+( ͸+(ỳ"˶ë.>A> ͽ+:+O0 <2+:,:,0> ͽ+> ͽ+:,8 >ͽ+:+=> ͽ+:+=GO> ͽ+yO!'45:,Gy6+x̑+xĪ+G:'W:+( 0+,x+ỳ"&͸+:,(2,&!"@2,y&w(u&:,8> ͽ+&:,2,&8&x%%%%%$ͮ$ʫ.!2(y2'O!, ^#V:'2:'2ͥ-:'ͳ-Sg:'_!-%%%!-%!.%*'!B :/S :=F:I B : S : P V C L ? S : V ? K : D : P: D: F: C : M : B : E : F : T : B . N Y C : .C : M [ AUTOMAT / NORMAL / SINCLAIR / CPM / TURBO / FAST IPL ]: M E : S . . Y NORMAL 1!"'!x%~# (ͶD"'!-=!-=!-ɇ_^#VX` x4 `  6001200240028003200 900140018002100250015002400280032003600:' 2'yͮ::'2͋1#  8p͕/ګ.8H,.͗&#>+f :[3G8Af ͗:' 22S͕/ګ.5 ګ.ګ.F&x!"$ ͕/ګ.͗&#ګ.,.>?f :[3ڥ.W&200 B SINCLAIR 1400 B CPM 2400 B TURBO 1200 B FAST IPL 1200 B N : N .: N : N : ASCII : D : S P F OK F OK F OK V . . R [Y/N] ? MZ-1P16. CENTRONICS. MZ-1P16/CENTRONICS P / D : L : P .  C (C) XX.XX.XXXX NIPSOFT M S I 19 97401 B B CZECHO-Track-Info  N 8!"> =  ><(;͉/>2'y>2'z #T]:\(_0ͮz"(" > 72'y#(><>>2'2'y>SILAͪ ͮz8[M0R8[O0R89 .[$͕ ګ.ͮ͗&#Af 2ͮ͗nf^V+"O0SM0$Q0"M0$Q0[M0R#utsr.nfRx(22! '4~=1`8 0`!l1!l1]T +R}`ɓ:h ~w:h 2[æ2[*b|##yȷ#lC~@#I" #ͬ*b|#*W~ !:[:e~ G@x k o Link-80 3.43 14-Apr-81 Copyright (c) 1981 Microsoft ?Command Error~P#~#  `{ +!~G #~ gx+#<~: /͔>*P f> P:g!ho>g6 7ʌʌ  y:+y#P2^2h i !  :\GO: " " " " * * " "=* * BK* * "?2 G<2  (+G&#yyAf 2C3'ͮy82͋1!"FTCSNͪ ͮzs#r+++2s#w2^#~W~23>(2'$3>12'͉%!x%G(> ~Ͷ~# ~I(>;2'L>-ͶL#L>-Ͷ^#VL!">2z6#z: O4ͅ {Ҏ!y yBKO!= s#r! s#r! s#rͅ ڬ! s#r!= s#ry ! ~#fo! ѵ! }_|W>2 * * <* * : <ͅ P* * W{_* #" " "?:YGO0ڗ xڗ)))ҖʌҖ)o>gdy +%Overlaying areaDataProgramÔ!! ~#fo!ͅ ͅ 1Ta#͗͗ 9->@Â(!?e.!!:Ͳ!E8͛ͺ Done, escaped.h!8*&Eʜ803n5! ͻ5͗%ͪ ͮc8w%ͪ ͮ ( #6 %͸2##%͸22շ$$!2 y7$3͗#0800ͶOͥ-xͳ-y>82͋1!"FTCSNͪ ͮzs#r+++2s#w2^#~W~23>(2'$3>12'͉%!x%G(> ~Ͷ~# ~I(>;2'L>-ͶL#L>-Ͷ^#VL!">2ͅ &}< = yy7yM7>,>#ͅ !O> _!j >?P~#P!yk!:!ʆ!= Not Found> P> P>2 i 2:: _<2 !~i ! w#! wO |!y:!(͔*SDMÜ&[Begin execution]:\:Z* * ͅ ~`~¨@w+++o>GO ~+t>ʊ6 #=ƒ* ! ͮ 2Z * ~O_+++y++:ZK͔:e2e *S>[P"N!C ^* s#r!I   ^! ~# != = = ^* ͅ = *ͅ = s#r"N2 * * ͅ ʐ ʅ 2 O^: z x/Gy/O~w#~wM O" z _z! ^#V   $ 2 = ] m `i ^+V! 4* M ! 4Ð ! 5 PY^  s #r lg   # |/g}/o   DM!>= ))K K z zi  BK}o|g҄ : ʫ ͅ ҫ | >]P͔: : $>2*S"!o&'  d   >0G*+"U" " " " go"S"b2 2!2!2Z2\2_2`2e2a2^2Y!*" " " " "?"=!" " " " 2 2 !" ?No Start Address?Loading Error?Nothing Loaded?Out of memory?Illegal Polish Exp:!‰!!!2!!!2*U! ~ 4!>2 2[:e2e ,/MEG@RSUXYE{ O :Ü&O†2YHO2YG:e2e:'>`͉Cx¹'"W _2:h Ğ2U!e~wTrack-Info  N  /}o|g x0   > xPJ>G~#' l~@+^+V$MEMRY$$PROG$COMNM*SC!Jw#] l{ ~@{ +^+V"S! 2C! ?Start symbol - - undefinedi  ~#³ ͞ REL7*b}2Z:e` j: j͔ p @p ͔`p p p * } , >wk  :b? !K * !b  Undefined Global(s) Bytes Free 2dP  ~O~>-ʑ > >/P+^+V+~P ™ /PN~ ʼ !ÿ "~ N+^+V>>PN:d?2d̔>wt :dȯ2dBK* " ͅ " " "=" " ͅ 9* * * ͅ _!* * * BK* * * * * " * * BK* * " " " "= ~w#~wPYd>͆BKl!~@: ~@w+~_q+W: =>Cw+p+q+r+sA! ͔A%Mult. Def. Global ~@*b+"bPYd>͆BKůl~+pN+F@‰: :E(d: =zAA|A: r#sA: |A^zA#W: =ʱ>Bw+r+s+r+sA*b#"b!9~#46+wxG ɯ2 7k [ M  ~++GOŸ& H+D ; & yE >  * [ S } 7~k ~~r <</_* Å |}! 6S#6Y#6M>$>* * ͅ ~O~@ +^+V > j%+~j% > j%= >~ <</O ß ͔&%|}G[j%> j%> j%:YG)0P) 60P3|L}U[P0:͔! ~#foN"N"N>>PÔRQUESTͬæ* : * ͅ ~_~@+++~#* BK" ö+++ö2!2 [#J[J!Jw94#6 _Iw#=!V"9O<2 XP̌yyO!; N#F 2]: ʜ2]AF( t@/: " *?>2 * ͅ A*?>l+^+V^"AAd: =%<2 =A: A*? APY7* M" !*?"?* !" }2 <2 A:]* * |G}ʾ~O«J«A+++ª+™~ y/O qJOx_Ow#2 +w+w+w+ w+ 2 2 : go" " " 2Z" <2 : * * * * *?͟QiEZE! ~#foBK#: =ʞ: •* |ʊҕ}ҕ# ͟p#: •* |ʳҕ¸}ҕ#Õ: =: Ww+p+q+p+q#!Bi++s" ͉:7>[?@2i ԉx $ j 7+> H6 #=@x2h y.̉r xcpdʅ!r ~ …6R#6E#6Ly[ҧ0ڧAң:ҧÌ[ʣ]ʣ@ʣ\ʣ^ʣ_ʣOd: : 2 !BK|A~_q#Vp^AW: =w+" 7ɫ ++'+:E(&: ͆: t2 * * DM* " *? "?* BK" " " " * " ͹'* |‰}ʢ~_~! ^#V* " (O^~#+@w+r+s+@3: 2 !r+sA: =* >lX/o/g ڰA~@w:_2`u+++~ u2`q+p:`O!=>2 !}|!= s#rͅ y A!>/P͔A~W+++~P+%2nd COMMON Larger /*=" |2 * ͅ A> l~@wA7W: >:: =/>G: =9>@w@w+w++3: 2 !: : =r+sA!JKF5#w>>>><2\=O! &! ^#V2y?Wy?^ͅ ?^~y! k! ws#rz^#V͠! p#–* ! N#F#~#fo! ^#V  ! ~#foͅ J! {_{_~J! ^q#Vp! ~s#_~rW}(: &#sͅ {_! 6)`i{ڢ! #[œ* * 6* " * * " ͠* ͅ қ" ! yڮ! ^#V ڽ F#fh! ^#V ^#Vy! l~+W6+6++r+sA*M:L2 h!W: =: ?>@w+6++r+sA:!A>.2!2R* !L͞!i2!+2a! w#!ڒ „! \" " : :\!ڭ!  w#! º+w2!͞A!!?/D illegal with common runtime?No code can be loaded before program withcommon runtime not found, please create header file?End of file on common runtime header!cU͆zʥ͆"Sd! ^#V! ͬ!=ͬyګ: * * ͅ * " * )*  * * Track-Info  N  ^#V^#V! s#r Gyx! Bs#r#3xU|W}_x2 * 2 yoxg* " *?"?*APYͅ ڛ"A: ʻ=±* !" * * ͅ ұñ͟*?{OzG* * DM7xw#  +x~+ xw+ : 7=}O@: 7L?Intersecting yO* ͅ <28!: ?Oʥ: Lͅ Lͅ L!O>,P*8&2M^#Vy!JF#~#P>(P>)P"'* "')'m)'͖'/'Y'J'Y'o''Y'o''Y'o''!' N#F#^#V#~#fo|} +x~+ t'xw# 'xw# Ö'~#fo)'q#p:E(* ͅ ~' O(:L2D(*=" 2 W6+:D(wAOz(2D(:(:E((*=" :D(2E(*=r#s+:D(l(*=ͥ(" 2D(2E(!* p# S(!JN#*~# a(Ar#s*){ʈ({ƀ_҈(zʡ()È(ͦ)*)!1*ͷ)!1*V#^(()!((ͷ)(z(!1*ͷ))ͦ)z{7: " Start = External Public = '*1*z w#)0:ww:*!>))+)!4)?Segment , file not foundcan't create fileread errorDisk is full)!C))!R))ͦ)!d))ͦ)!o)1***Ž)*š)1**<|)1***<ʅ)2*!*)+)##2*w# ** V 0$!2\!:\A!͛!͛! y/!* * ͅ #* " ͅ ~!*Uͅ "yd!*Uͅ "ͅ ڷ!*Uͅ ڰ!!!û!!!!!!!2 YxbelowaboveOrigin loader memory, move anyway(Y or N)?ͅ 2"ͅ F" "!ͅ F"yU": Y"*Uʂ"c"Oͅ ‚"y*U‚"! ͅ ҉"!9;;;;;;ͅ "ͅ ڥ"z")'7""""ͅ #ͅ #"z"7;+O )+ )+  +~@w,O »+>2=>2=;+2=: >2=;+_+>_+:r@/o:<;+}2r@2=;+>2<;+2<;+>2<ͩ(2!=w#"$=:<ģ,+:=»*<ʅ)2*!*)+)##2*w# ** V 0* "=* "?* *=+##-#KP*="=!* BK*=* *?n#ʰ#n#O* * " * *?BK* *?"?#PY* " * " Ú#* *?#BK* * " * * " " *?" *=" ! :$~R#~E#~L6$:e+$9$w++$COMHEXb$  <%2 : ʁ$$* * ͅ ځ$!e~ʎ$ ~$:^ʴ$: ·$*S^" " &yO: &z&%*S|$ͅ $%ͅ $ͅ $0%@%7Ԕ%T%: %yO%@%T%: Ą% <%>j%*S}j%|j%سȯj%zI%%z~#j%^%!: _w{<%2  %%"%yO#"%!%^%0%fj%»%! ~+ x :a*S:a*S^!%?Can't save object file{{ _zW>&> D&{ K&O>:j%y Y~# f&.&>:j%G*S >>j%!-'͡'!3'͡'!6'͡'!<'͡'##µ&##͡'##&#͡'!}'͡'!'͡'* "'* "'* "'* "'* Track-Info  N ( (#B~(#x2͕ 61E+͞C: !۶+DIR ERA TYPESAVEREN USERCOPYzجؠtRead erroNo filAll (Y/N)Disk fulFile existNo spacCOM$$$ SUB(Y/N)ܲy2n"osv"{2V!"1W2`2^2!y)K!P܇_^#V*f݉ޥުޯ޳ݵ޺'28AJOU\yafovM޻1͡Kn*o͜͜:A2 ͜_Iͦ!u~6Boot erroRead/write error: Retry/Abort/IgnorRIADisk select error: Abort/IgnorIADIR Copyright (c) 1989 L.E.C., LudEk JirouSek > .> ͏> ͕~.~#(  22<V Of  :u   2u>:q  :ty!s4 5~y 5 6y0 ^!@Oy  !:s ̀  #!͜:s!r ! ! ! $Of:s2r*N# } } x(:s2qM x(~+v ͜ݯ2r !t>w :r!s05x ͅ 3ͅx( #NV:q!s2qx!q5 #wOV~x p !/*y<(<  :!qMDæ2>! ^#V:O|^#V#SP"3##O Ky2ۯ2:۷=!۾_3/+'  A͏ 8 >1. 0_Շ!۶2:2a{_:۷(A(9:=2 *!DM!6#5ͳ(!ͣ(+6 E!F#x(~Lww!" !~64!h#͕*~!8.#>?.͕+ 8=_.:;<> o$>!>2*5S( @G:(:wx2p(#* 6?w(#6 . (#* 6?w(#6 #6" #~?  x!:####9*;A*F|!]6(6>'*! *j>"l*eKA_W*  og e|eko|jB0 ?jj[NDM[P0MD!!""e!CF:c?G>O:b (* :](n& ^#V͋Oͦ*e}:C*e!)j= "g:DO:c页o"e"* *!~2c~2a:E2b:U O:cw:aw <*9鯆# ):O!Ryoxg*-:O>}!-N#FX"-*H#*3s#r ~!kK!R|/W}/_*-zg{o"-*/zg{o"/F`*9:io$*y # y# 21y2y_2:Է 1͕>>.U 2C:۷t!V_~#fo!v"!fÞpÞC:۷! ~ ($#0 WxxՀՂG ~ # x!>~:۷=!۾:C!~  6?#ͷx(s:`O> 8X{ ͕>:͏͍>:͏͍x  >  (> ͏x 0 ͍ ;C w͞U!5+#~Y+#"~~6w*j*3{#zr+s*l[LRG[=*l ( yw K K!1!9N#F$*9[1!j~##DM*?6# x *J*?s#r*36#6jqa>(: #~$ =2:Tø:E/GyO:02͌:<<2>2T!Xq*"Yjqa(b[Y(0R:XO:0 ~08"y($?(x.=r~&o)C(+2|(+!  ͳ< ͞ C:ͷ .!*5=(_ #"C G!~͞Sٷ(p p2ͷ( x~_: "! >Ӽ:=0\SOp\(:2|%B8bk \(\D8=\ͳ<(M: :۷"=2E" !8h= eC!~2>E~2ۯ2\!!!~Track-Info  N  ( ( Nc # :j2!T~Яwj>ø͡ ta͑63͡PYy( ͝0*F{z0BK͝08>*w~#+w#w+ɯ22j2kkta * :](~ w ~ 5 '# ! #  8 w ~>2RÄ!5͡*!,"ta"!w# ! wo2Ra* ~<w( G:E! ~(ɷ>1>2^** SUPERMON V.S# (C) SOKODI 1988 ** V>2ͦdU2 D d>2ͦdM v !$2͖:3 i v l!6v n!om :(!m x2x!m xv K!# [ v :=(  v v <6  v v Yi   *"v v F *R"8(:( :"8 . # v  *R 1*R *Z*R ! :7 2:27 :27 !~R( $ 4~($ta :S<(͋a( øͼ>2U>2S:c!a8 !2c: ;( %'ü>2U>2S͡*͔:cҼ; C͋2W(O ͦDM6} >ø* :]:W(sO s#r::U== :y== 3*9Ww#K*g"e% *e:DG# "eF% :c!a8w4w :U '!~ =2c6'2U[!!~~#~O~G#n,-. W! w! y !x(4.:<(*! q!p:< . (͋.:<(ø6}2L (2?08 [0:8A0>-#>  w#6#>   v !^͛#.͛^͛#^80![րo0$~>-}----------^------E`--TGH-BXDRPCQAZWSUI--KFV---JN--M---OL----Y{-v v <  v v Yi  !*"v v F *R"8(.!~ ?_͛#v v F v  ( ><!$6#!u w#K!l !6"#!6.#6 !"sv 3 2v v !:<22L]N! ~态O>G~G!~G} t*!r#r#ra( _y#x#{8s+p+q͡* !!q#p#w*/:O>}K/X"/:V!w>2^*~=2V0:2_~2`w̓:*w>"ø!"-"/!"1F`2!/>2͎͎~?(~?͎tT*Y"͎͡T͎]>2͎͎X͎Ë͎͊]*/#:øS1F*?*- ͎ͮ]*;":V :ø2>2͎͎>2͎*}/_|/*/W}_*-"/}o|g"-:^(*6:`( w:_2Vv v v :<2!(("ͱ:!g<"!g ͸ ͈ 7!"!Kg ͱ͸ ͈ 7!R>2v 3 v v > *"v v > !*R"(0v  ( ><i: y v ( |  v >Z >R= >>yZ Z (>y>)=8 ! 6 X *#"7}o%A }&d 6 % e * 6 (% 6 - 6 ʫ !"= w# x *= N = N 7>{v*}D͎>2UP]BDOS error on : Read/only file: Abort/Ignore $  v >2>/!] ~S >R27 >2& >s2- :]RS)VMFPIGʾLʣ1  v i :m$ +:n͆O:o͆27 0  d 08:8>10ɯ2dG̈́ͧi 2dGi dG̈́  v2!(("!ͱy ͣ >2!"K!ͱy ͣ !(("ͱ1 v ! !g ͸ ͈ 7!"!Kg ͱ͸ ͈ 7x "~0# >~ Z # x” *| }  '[ x       >y% % >y% % >y, >y, > =' >9=.  ,..  : : v v 7 Thank you !$ SHARP MZ monitor $ Bad parametr !$ ------------------------------ MZ tape <-> C i d ? v !;"!"!"  v  VU  v >MNi S >(21!_>>6ׯV>>̯y!>:!7 >2p%!>2>2>!>28"9>2 >2!!~w#| !p"!I5!5!5!6p"0!5!5!5! H!!Z6 $7!! 69!@" !("  !!K 6) !p!=>> ( > 7 (ɯ2o2n~g:n7:o /2oH7 HM͖Track-Info  N P/M Convert v.7 (c) SOKODI 1988,microWare 1989 ------------------------------ $ ----------- HELP ------------- Command :-------------------- Put Get Load Save Verify Find Run Mon default 2400 Bd 2x faster command/S 1200 Bd normal Parametr:-------------------- for S,P,R name of file(/s) for L,G,F,V -number of files -hex load speed ------------------------------ $ Run ? [ /N/S via SUPERMON]$ File not found !$ Wrong file !$.MZF Ok$ File na POP BC POP DE JR NZ,SAVCM4 ;ak sa nasiel, skoc PUSH DE PUSH BC LD DE,TMPFCB LD C,16h ;zalozenie suboru CALL 5 INC A POP BC ;obnov pocet sektorov POP DE ;obnov adresu SCF RET Z ;nedal sa zalozit SAVCM1: PUSH BC PUSH DE LD C,1Ah CALL 5 LD DE,TMPFCB LD C,15h CALL 5 POP DE POP BC OR A JR NZ,SAVCM2 LD HL,080h ADD HL,DE EX DE,HL DJNZ SAVCM1 LD DE,TMPFCB LD C,10h CALL 5 INC A LD DE,MCMTO JR NZ,SAVCM3 SAVCM2: LD DE,MCMTE SAVCM3: JP MSG SAVCM4:me: $ Disk is full !$ File exist ! Delete ? [ /Y]$ Skip file: $ Loading : $ Save : $ Found : $ Put file: $ Get file: $ Press play !$ Press record & play !$ Check sum error !$ Break !$?ave : $ Found : $ Put file: $ Get file: $ Press play !$ Press record & play !$ Check sum error !$ Break !$?ave : $ Found : $ Put file: $ Geoad speed ------------------------------ $ Run ? [ /N/S via SUPERMON]$ File not found !$ Wrong file !$.MZF Ok$ File na LD DE,MCMTF JR SAVCM3 TMPFCB: DEFW 0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0 MINITE: DEFM 'Warning: system write error!',0Dh,0Ah,'$' MCMTE: DEFM 'Warning: CMT.COM create error - may be damaged!',0Dh,0Ah,'$' MCMTO: DEFM 'CMT.COM was created successfully.',0Dh,0Ah,'$' MCMTF: DEFM 'CMT.COM was found on boot drive.',0Dh,0Ah,'$' END JNZ SAVCM1 LD DE,TMPFCB LD C,10h CALL 5 INC A LD DE,MCMTO JR NZ,SAVCM3 SAVCM2: LD DE,MCMTE SAVCM3: JP MSG SAVCM4:!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!(~>&ͅS D$8 UIM :ADRCCPQEDXQ%5>AVRAMUD58 UI=:CUROFTT U5D4MQ ,NERRMSGSQdĔ 1IM JBOOTDSPS`T45H =9%:HOMESe4UEE$MQMSETDMAPQ Uu$DXM QIFDRENAБSTdE$xM15MRMERRBTQT e$U$(AIIXPRERV2SS`DE$A DPBD`Du4T8!PARTCTT U48AM%iRDIDEUԒQ`d%TcS(]Qa5NMERRDSQTT$3)@Ux0ܯmS3`<<3|00 `?0000  ;f?1|f3 1f3 > > ;1~3`0 `01l0 3c11~;f3>f;> 0`0 1f33c m38611< `L 5 ;nastavime ako aktivny LD HL,CMTNAM LD DE,CMT1 ;adresa zaciatku CMT.COM LD B,CMTSEC ;pocet sektorov PUSH DE ;odloz adresu PUSH BC ;odloz pocet sektorov PUSH HL ;odloz nazov suboru CALL LETNL LD HL,TMPFCB LD DE,TMPFCB+1 PUSH DE LD BC,23h LD (HL),B LDIR ;nuluj FCB POP DE POP HL ;nazov suboru LD C,0Bh LDIR ;presun do FCB LD A,(BOOTD) INC A LD DE,TMPFCB LD (DE),A ;nastav cislo disku v FCB LD C,0Fh ;sluzba otvorenie suboru CALL 5 INC A Track-Info  N  `0  0x`>0|f3xff3xf?f30|f38 `006 `0 m`ln3xf3|f3f3ln0| f3f3;f f>0 `0 `0 ``00 m1B3u4ڳ@xڻm]Hp6Y=2GCP<xU}B! devN+v >6hf4٦5&!\ bZĔ 0hX6- , !d٠gpt}^l3d:u>/!!"&","U"dZ @*X UR:Z M:[ Z*^ " *` "! ~  ͐! ~( ̈́ y !(_!"P~w~ w~ w~ wn f ~ݶ(!+ut~nf n f i@0<*gUR0#i@8ۯ_WN#F# = z!O> :yO  $:!O o&x0 :!K ^#V#/R<0:>0:*&Cͺ*,D|{/ J)T 1:X >E/Z J! 8####6h2l[KtDu Է<^/V+U* A@BGun!'bөv0 |/injyAI2ApNxȄpX/KtEuDfhu:":DWSŒ!iv٠gpv>%{5d\{@]J4 PuO׳F;^"]u5o"HerJm$ ;N$ ;Nf8[n& `& `& `& nKghx ) !f;WofӨ|O/a;#P.4_ VhGn B:u<٠gqn(^l{W^B3]nñs_?/<G/x?b4(? ý eS(PvHђ> 0.[@j ^# JG:Y >A/o J J JX J ͭ'd CMT COM1:(=(:_A(02!. ! *:2t͊& \:O*&( =*,(=:X |n f ~ (! "$! KB!*ѷ(uJ ;0{  *:Y ( :_! 8G!QR#p :<Q< >Q<7Q !Q< JWarning: system write error! $Warning: CMT.COM create error - may be damaged! $CMT.COM was created successfully. $CMT.COM was found on b: Memory disk board $: Floppy disk drive 720$: Harddisk partition $Detecting drives, please wait... $detected: $ 64 128 256 5121024???? K bytes$ M bytes$NIPOS ver 0.06 build 8.10.2002 (C) 2002 NipSoft $ÛæxB]g/D27<WA*?@xxff"llll|<|n4Xf8llf    Z~<~<~Z~ ~oot drive. $ :; ][@ZYXWVUTSRQPONMLKJIHGFEDCBA87654321.,90 -^\/?  *+ }{`zyxwvutsrqponmlkjihgfedcba('&%$#"!><)_ =~|     ) +., -  !" :(/:? _ DIR USER POWER FET COPY TYPE SAVE ERA NC REN CMT L CMT S CMT G CMT P STAT `0 ``f<ff<~`0< ~~>ff>ff>6ff> 0`>00000>fff>ffff<````l8f66f<6nCMT L/S CMT S/S CMT G/S CMT P/S CMT R TAPE L TAPE S TAPE G TAPE P FORMAT L?WW] "2>q^!xE(!{|GiAM>! @>!M,>6>t>><>AAx@ > >>Я !y !QA AXAY!S WAg(W_RL(z8>RW_RL  2X !S WAg(:X !(58?g+Cp{2r:{WA:R"s>> ȯ2Y 6Track-Info  N fffff>|ff|6n|<`> > l8fffvlfff<lffffff|`x~0 ~0 0 0 p>!3!@PX!p:8O:8կ_|W&[: O>kb͓C>P_WqJT] (zW":2:2;:B :D2E:B *A}(2!G:C=(!O*:͓O>/ y_W:B/2B:E= :D2E!G͢!;4O !9!(w͌y] 0@o&)))P>>w w K͔K ͔ˣ˳ ( z -xGzy{>~}||} _ x  75x >~>> 8 :.W(>08  !! !":( !(=(*:<< _UnfR8nfnf0#i7:kͿ0 @?85 !6to:7:ڦͿ0q?85 :WX!i[t:??w w w w w w w wͦ*<( R("<!@!:>O40&6!;>405!;!:~(5ɯ!s1!WyF4 /( (X j @(({4>qX=('5*((($)($0(:1(>>g:828ɯ2A>>29ɯ 4  P6˾_*:͓{͋18y>0?۱W(yӰ۱0۰:F*8*::2!"8!":E/0> /2ͦkbN# ( 7 (? |2= >2>>:>/8PX!iz /w# 7i!4/G8A:>!~6f*+| N͜0B}f0 /7( 5 !6N͜0.w((B],f>!kR <7(5 WW} 2.}A}PI}_I}nI$^ ?":"8f:t:1]6:t_BJ:t02$ _!4V <:Z_Oio;022 !}!"6~+Q >_8 o> > }Z(Qw 6QQ84886<(V=0~OGo&ut6~< w7w^VOysr7ws :!FO ">NyF(![A͘!{a͘!͘!͘ɼؽ !}͒n 0 6)F( 6( 5 n Vwu*}}:*8:}2~OOO! !!"8HC8I N#y 0> KC8> ͋#*  :2<2C͡~ _S|ҡ!Oqy4 á:(>Ms1 ͛(!SOy!5{>s1ͤ_͆!(5 {M>_W*[R |"[*X"X:Z2Z(QR8 R"X2Z<>)jB0 ?j=  MrM{0*-"͋ :!O"*8!"8*X:Z(Re>:ue>:u:Z(> oe"8$CCCi`y09(58=Go&A^###V##~#(Sy2 (=o&s1o{b: *s|:g:G>ay *͛(>79͛(4s1: (߯2:(͙7( ;ܳ^t<{s1: (y2=(A= :2:!~#^#V#N! # %: O{# z# y !(5>22͙(;0ͳ:7Գ!6^t:=7;_W  ogõe|eko|jB0 ?jj)jTrack-Info  N Boot erroRead/write error: Retry/Abort/IgnorRIADisk select error: Abort/IgnorIADIR Copyright (c) 1989 L.E.C., LudEk JirouSek > .> ͏> ͕~.~#(  22<VOf  :u   2u>:q  :ty!s4 5~y 5 6y0 ^!@Oy  !:s ̀  #!͜:s!r ! ! ! $Of:s2r*N# } } x(:s2qM x(~+v ͜ݯ2r !t>w :r!s05x ͅ 3ͅx( #NV:q!s2qx!q5 #wOV~x p !/*y<(<  :!qMDæ2>! ^#V:O|^#V#SP"3###O Ky2ۯ2:۷=!۾_3/+'  A͏ 8 >1. 0_Շ!۶2:2a{_:۷(A(9:=2 *!DM!6#5ͳ(!ͣ(+6 E!F#x(~Lww!" !~64!h#͕*~!8.#>?.͕+ 8=_.:;<> o$>!>2*5S( @G:(:wx2p(#* 6?w(#6 . (#* 6?w(#6 #6" #~?  x!:y###9*;A*F|!]6(6>'*! *j>"l*eKA_W*  og e|eko|jB0 ?jj[NDM[P0MD!!""e!CF:c?G>O:b (* :](n& ^#V͋Oͦ*e}:C*e!)j= "g:DO:c页o"e"* *!~2c~2a:E2b:U O:cw:aw <*9鯆# ):O!Ryoxg*-:O>}!-N#FX"-*H#*3s#r ~!kK!R|/W}/_*-zg{o"-*/zg{o"/F`*9:io$* # y# 21y2y_2:Է 1͕>>.U 2C:۷t!V_~#fo!v"!fÞpÞC:۷! ~ ($#0 WxxՀՂG ~ # x!>~:۷=!۾:C!~  6?#ͷx(s:`O> 8X{ ͕>:͏͍>:͏͍x  >  (> ͏x 0 ͍ ;C w͞U!5+#~Y+#"~~6w*j*3{#zr+s*l[LRG[=*l ( yw K K!1!9N#F$*9[1!j~##DM*?6# x *J*?s#r*36#6jqa>(: #~$ =2:Tø:E/GyO:02͌:<<2>2T!Xq*"Yjqa(b[Y(0R:XO:0 ~08"y($?(x .=r~&o)C(+2|(+!  ͳ< ͞ C:ͷ .!*5=(_ #"C G!~͞Sٷ(p p2ͷ( x~_: "! >Ӽ:=0\SOp\(:2|%B8bk \(\D8=\ͳ<(M: :۷"=2E" !8h= eC!~2>E~2ۯ2\!!!~ D45 @P5aZ7X"J@@ @ !h:1Hb9Dq\C ék'#yԦe5@fHGŊJ'1fYF(y+ `0k6D A`%^2{6-f8Ov l ,2|<m ᶾd 0 (84`4 QFhE/QŚ.jZ03@%jt8[ H =Hh[!mj ##lz2j+V5 v"] 6ơmj "CQj3XQ@]jmvkQ5AV# q( (#B~(#x2͕ 61E+͞C: !۶+DIR ERA TYPESAVEREN USERCOPYzجؠtRead erroNo filAll (Y/N)Disk fulFile existNo spacCOM$$$ SUB(Y/N)ܲy2n"osv"{2V!"1W2`2^2!y)K!P܇_^#V*f݉ޥުޯ޳ݵ޺'28AJOU\yafovM޻1͡Kn*o͜͜:A2 ͜_Iͦ!u~6 Track-Info  N @ &5NP!5H$ f@ v@8 Ѷ~[kuZ`&Dh`0i|45b0ݒJH!sU# sЛUfZPdmY[mj3@Vh]>3EViU@֫4 >lYj-flC' PBj:@&f <lUT (0DDh),A ;nastav stranu? SRL A ;fyzicke cislo stopy do A LD H,A ;odloz stopu do H IN A,(0D9h) ;citaj nastavenu stopu z radica CPL SUB H ;rozdiel stop (kladny, ak treba ist vpred) CCF ;CY=1 treba ist vpred RET Z ;rovnaky, stopu netreba nastavovat LD L,A ;rozdiel stop do L JR NC,SETWD2 SETWD1: CALL STEPF ;urob krok dopredu DEC L JR NZ,SETWD1 ;opakuj tolkokrat, kolko treba JR SETWD3 SETWD2: CALL STEPB ;urob krok dozadu INC L JR NZ,SETWD2 ;opakuj kym treba SETWD3: IN A4QCk- `X 6 i=ڥsÙ{Op8{P U{Ha~Ov { ڰdP 4|?2GOݐ=k@aZYjZ@ ca ջQxkcl)k8sޢ5*b@Vh]`Fæj=F5sM%k(>3Q@! _Yj/k W@-٤6 Njy*D vՄ+kV-Fkk6٠&xki {Y5V?/\Q +A 5(>f3UmP}95٭& f`Rf'UjZͶ4hXMA@^2{6 nQ rAPYk.,0l՛Px Z,(0D9h) ;??? XOR H ;??? ma byt FF ADD A,1 ;??? ma byt CY=1 WTTRK: LD A,(VSETTF) ;pockaj na ustalenie stopy ;caka A milisekund ;nici: AF WTXMS: PUSH BC LD B,0 WTXM1: DJNZ WTXM1 DEC A JR NZ,WTXM1 POP BC RET ;pokusi sa znova zaostrit na stopu FOCUS: LD A,0FFh ;nastav cca 5s LD (MOTTIM),A ;timer motora RET LD H,074h ;timeout FOC1: IN A,(0D8h) ;je ready? RRA JR C,FOC2 ;ak je ready, pokracuj DEC HL ;dekrementuj timeout LD A,H OR L JR NZ,FOC1 ;ak nevyprsal tͶh @٩4amVi a=ڣmfջQ ZͰ@X -G[4jEG|@uH4$q ~dZMvݪE6٩ >lқen(.!^2k6٫vk6ٯ >f0m~k 'T:kSݪ Xb&؄r٠֫5p(d|^6@px0sB%4'֓]f3QmZMw՚jKk (+G5`Yf59Y&r\@P8 9LFK jKk]pDl 2 ՛Px(u0ɭk:kXtmB&>l+Uj0M}Ov:fSQj2mku84DVkI!/۔2k6i? ͵xl!;VCP@ FzP $@0ax ԫQ jFVh1Z6.Z80 .RADIX 16 CMT1:: DEFB 0F3h,011h,0AFh,00Bh,00Eh,009h,0CDh,076h DEFB 00Bh,03Eh,0FFh,032h,0BCh,00Eh,03Eh,02Fh DEFB 021h,05Dh,000h,001h,00Eh,000h,0EDh,0B1h DEFB 020h,014h,07Eh,0FEh,053h,020h,00Fh,03Eh DEFB 052h,032h,037h,009h,03Eh,01Bh,032h,026h DEFB 00Bh,03Eh,073h,032h,02Dh,00Bh,03Ah,05Dh DEFB 000h,0FEh,052h,0CAh,015h,002h,0FEh,053h DEFB 0CAh,029h,004h,0FEh,056h,0CAh,0D0h,001h DEFB 0FEh,04Dh,0CAh,0F9h,001h,0FEh,046h,0CAh DEFB 0E6h,001h,0FEh,050h,0CAh,049h,004h,0FEh DEFB 047h,٤V5a֓]jRjyi5٤6k/لjmpXR A+JDRpS"de=6a@c6_Mhe0S'cIA6ȼ)_ '3Xu6;Ɠa@e<NgG8 9 &7) MH$U!ȼ)D45DCCP2jmpXR A+JDRpS"de=6a@c6_Mhe0S'cIA64h,020h,020h,020h,020h,020h,053h,055h DEFB 042h,000h,000h,000h,000h,000h,000h,000h DEFB 000h,000h,000h,000h,000h,000h,000h,00CAh,0BEh,001h,0FEh,04Ch,0CAh,0A3h DEFB 001h,011h,031h,00Ch,00Eh,009h,0CDh,076h DEFB 00Bh,0C3h,069h,00Bh,03Ah,06Dh,000h,0FEh DEFB 024h,020h,02Bh,03Ah,06Eh,000h,0CDh,086h DEFB 001h,017h,017h,017h,017h,0E6h,0F0h,04Fh DEFB 03Ah,06Fh,000h,0CDh,086h,001h,0E6h,00Fh DEFB 0B1h,032h,037h,009h,018h,018h,0D6h,030h DEFB 0FEh,00Ah,0D8h,0D6h,007h,0FEh,010h,0D8h DEFB 011h,09Dh,00Bh,0C3h,064h,00Bh,0FEh,030h DEFB 038h,004h,0FEh,03Ah,038h,002h,03Eh,031h DEFB 0D6h,030h,0C9h,0AFh,032h,0BCh,00Eh,0CDh DEFB ,RWERR,VPEND WSTRTF: DEFW 0C8h ;rozbeh mechanik v ms VSETTF: DEFB 3 ;ustalenie na stope v ms VSTEPF: DEFB 6 ;doba kroku v ms MOTTIM: DEFB 0 ;timer motora - nasobok 20 ms ;VDSKS: DEFB 0FDh,0FDh ;VDSKF: DEFB 0 ;aktivna fyzicka mechanika ;fyzicke nastavenie hlaviciek na radici SETWD: LD A,(WSECB) ;cislo sektora v bufri do A SRL A ;preved na fyzicke cislo 512b. SRL A INC A ;fyz. sektory zacinaju od 1 CPL OUT (0DAh),A ;nastav sektor v radici LD A,(WTRKB) ;logicka stopa do A OTrack-Info  N 064h,001h,047h,0C5h,0CDh,084h,005h,0CDh DEFB 0D2h,005h,0CDh,01Ch,006h,0CDh,0A7h,006h DEFB 0C1h,010h,0F0h,0C3h,069h,00Bh,0AFh,032h DEFB 0BCh,00Eh,0CDh,064h,001h,047h,0C5h,0CDh DEFB 0F4h,004h,0C1h,010h,0F9h,0C3h,069h,00Bh DEFB 0CDh,064h,001h,047h,0C5h,0CDh,084h,005h DEFB 011h,0D1h,00Dh,00Eh,009h,0CDh,076h,00Bh DEFB 0C1h,010h,0F1h,0C3h,069h,00Bh,0CDh,064h DEFB 001h,0CDh,0DDh,009h,011h,03Fh,00Eh,00Eh DEFB 009h,0CDh,076h,00Bh,0CDh,006h,007h,018h DEFB 0F0h,021h,03Bh,0E9h,022h,006h,011h,021h 6h,000h,011h,0CEh DEFB 009h,021h,0E3h,0D0h,0EDh,0B0h,021h,04Bh DEFB 00Ah,036h,029h,001h,012h,000h,011h,090h DEFB 00Dh,021h,0E9h,0D0h,0EDh,0B0h,011h,070h DEFB 000h,021h,0FBh,0D0h,001h,03Dh,000h,0EDh DEFB 0B0h,03Eh,0FFh,0C3h,007h,010h,03Eh,090h DEFB 0D3h,0F2h,00Ah,0E6h,081h,028h,005h,01Ah DEFB 0E6h,020h,020h,0F6h,03Eh,09Fh,0D3h,0F2h DEFB 00Ah,0E6h,081h,037h,0C8h,01Ah,0E6h,020h DEFB 028h,0F6h,0C9h,0AFh,032h,06Fh,011h,0F1h DEFB 032h,06Eh,011h,0CDh,0F0h,005h,0E1h,0C9h DEFB 0CDh,07Eh,005h,06DEFB 000h,012h,022h,004h,011h,021h,080h,000h DEFB 022h,002h,011h,011h,089h,00Bh,00Eh,009h DEFB 0CDh,076h,00Bh,018h,009h,0CDh,056h,007h DEFB 0CDh,055h,008h,0CDh,01Ch,006h,011h,08Bh DEFB 00Dh,00Eh,009h,0CDh,076h,00Bh,03Eh,04Dh DEFB 000h,000h,000h,0FEh,04Eh,0CAh,069h,00Bh DEFB 0FEh,053h,020h,004h,03Eh,0FFh,028h,001h DEFB 0AFh,032h,0B9h,00Eh,031h,0F0h,010h,021h DEFB 091h,002h,011h,000h,010h,001h,05Fh,000h DEFB 0EDh,0B0h,03Eh,007h,0D3h,0FCh,0D3h,0FDh DEFB 03Eh,036h,0D3h,0D7h,0AFh,0D3h,0D3h,0E7h,03Ah,06Eh,011h,0BCh DEFB 0C9h,0CDh,037h,008h,0C0h,03Ah,06Fh,011h DEFB 0B7h,0C2h,090h,00Dh,02Fh,032h,06Fh,011h DEFB 0C5h,006h,048h,0CDh,037h,008h,020h,002h DEFB 010h,0F9h,0C1h,0C9h,0C3h,048h,007h,0C3h DEFB 04Dh,007h,0C5h,006h,008h,0CDh,096h,009h DEFB 010h,0FBh,0CDh,07Eh,005h,0C1h,028h,002h DEFB 0BFh,0C9h,0B7h,0C9h,03Eh,008h,0D3h,0CEh DEFB 0D3h,0E3h,011h,087h,000h,031h,0F0h,010h DEFB 0CDh,015h,000h,03Eh,001h,032h,003h,0E0h DEFB 0C3h,05Eh,0EAh,016h,02Ah,02Ah,020h,053h DEFB 055h,050h,04Dh DEFB 056h,03Eh,008h,0D3h,0CEh,03Eh,001h,0D3h DEFB 0CDh,0D3h,0CCh,0AFh,001h,0CFh,006h,0EDh DEFB 079h,0DBh,0E0h,021h,000h,010h,011h,000h DEFB 0C0h,001h,000h,010h,0EDh,0B0h,0DBh,0E1h DEFB 03Eh,007h,0D3h,0DCh,03Ah,0B9h,00Eh,0A7h DEFB 0CAh,007h,010h,011h,000h,0D0h,021h,0F1h DEFB 002h,001h,037h,001h,0EDh,0B0h,0C3h,000h DEFB 0D0h,0D3h,0E0h,0D3h,0E1h,0C3h,003h,0EEh DEFB 0A7h,020h,002h,0D3h,0E2h,0D3h,0E3h,0CDh DEFB 03Eh,007h,0AFh,032h,070h,011h,011h,000h DEFB 000h,0CDh,008h,003h,001h,025h,005h,052h,04Dh,04Fh,04Eh,020h DEFB 056h,02Eh,053h,023h,020h,028h,043h,029h DEFB 020h,053h,04Fh,04Bh,04Fh,044h,049h,020h DEFB 031h,039h,038h,038h,020h,02Ah,02Ah,00Dh DEFB 000h,0CDh,056h,007h,03Eh,0FFh,032h,0BAh DEFB 00Eh,0CDh,0A6h,004h,0CDh,064h,007h,0CDh DEFB 055h,008h,0CDh,01Ch,006h,0AFh,032h,0B8h DEFB 00Eh,0CDh,014h,00Ah,0CDh,044h,00Ah,018h DEFB 0E8h,0CDh,064h,007h,03Eh,0FFh,032h,0BAh DEFB 00Eh,0CDh,0A6h,004h,0CDh,064h,007h,011h DEFB 04Dh,00Eh,00Eh,009h,0CDh,076h,00Bh,021h DEFB 0BCh,000h,0CDh DEFB 014h,0E4h,001h,0FCh,004h,021h,09Ah,0EEh DEFB 0EDh,0B3h,001h,0FDh,004h,0EDh,0B3h,03Eh DEFB 001h,032h,003h,0E0h,03Eh,005h,032h,003h DEFB 0E0h,03Eh,016h,0CDh,012h,000h,021h,0D8h DEFB 003h,03Eh,0C3h,032h,038h,010h,022h,039h DEFB 010h,03Eh,004h,032h,09Eh,011h,0CDh,009h DEFB 000h,03Eh,001h,032h,09Dh,011h,001h,000h DEFB 001h,0D9h,021h,002h,011h,0C3h,0FCh,0ECh DEFB 000h,021h,000h,000h,0D3h,0E2h,07Eh,0D3h DEFB 0E0h,077h,023h,07Ch,0FEh,010h,020h,0F4h DEFB 021h,070h,000h,022h,001h,00Eh,0CDh,024h,006h,0AFh,032h,0B8h DEFB 00Eh,0CDh,096h,007h,018h,0E3h,03Ah,0BAh DEFB 00Eh,0A7h,0C2h,033h,00Bh,0C3h,069h,00Bh DEFB 0C5h,011h,080h,000h,00Eh,01Ah,0CDh,076h DEFB 00Bh,011h,06Ch,000h,021h,00Eh,000h,019h DEFB 036h,000h,0C1h,0CDh,076h,00Bh,0FEh,0FFh DEFB 0CAh,06Eh,004h,087h,087h,087h,087h,087h DEFB 021h,081h,000h,085h,06Fh,011h,06Dh,000h DEFB 001h,00Bh,000h,0EDh,0B0h,0C9h,03Ah,0BAh DEFB 00Eh,0B7h,028h,015h,021h,06Dh,000h,011h DEFB 0E1h,00Eh,001h,00Bh,000h,0EDh,0B0h,00Eh DEFB 010h,021h,049h DEFB 00Eh,035h,021h,087h,00Eh,035h,021h,0DEh DEFB 00Eh,035h,021h,036h,070h,022h,030h,00Fh DEFB 021h,08Eh,004h,035h,021h,012h,005h,035h DEFB 021h,0B1h,005h,035h,001h,01Dh,000h,011h DEFB 006h,006h,021h,095h,0D0h,0EDh,0B0h,001h DEFB 00Dh,000h,011h,048h,007h,021h,0B2h,0D0h DEFB 0EDh,0B0h,021h,05Ah,007h,036h,00Dh,001h DEFB 024h,000h,011h,037h,008h,021h,0BFh,0D0h DEFB 0EDh,0B0h,021h,0AAh,009h,036h,039h,021h DEFB 040h,008h,022h,0B8h,009h,021h,028h,015h DEFB 022h,0BAh,009h,001h,00Track-Info  N 1h,0CDh,078h,004h,0AFh,032h,0BAh,00Eh DEFB 0C9h,00Eh,011h,0CDh,078h,004h,021h,0E1h DEFB 00Eh,011h,06Dh,000h,001h,00Bh,000h,0EDh DEFB 0B0h,00Eh,012h,0CDh,078h,004h,011h,080h DEFB 000h,00Eh,01Ah,0CDh,076h,00Bh,0C9h,0CDh DEFB 04Bh,007h,021h,006h,00Fh,001h,008h,000h DEFB 011h,0BCh,00Eh,0EDh,0B0h,023h,001h,003h DEFB 000h,0EDh,0B0h,0C9h,0CDh,0DDh,009h,011h DEFB 05Bh,00Eh,00Eh,009h,0CDh,076h,00Bh,0CDh DEFB 006h,007h,03Ah,019h,00Fh,03Dh,028h,00Ah DEFB 011h,016h,00Eh,00Eh,009h,0CDh,076h,00Bh DE,045h,060h,02Dh DEFB 02Dh,054h,047h,048h,02Dh,042h,058h,044h DEFB 052h,050h,043h,051h,041h,05Ah,057h,053h DEFB 055h,049h,02Dh,02Dh,04Bh,046h,056h,02Dh DEFB 02Dh,02Dh,04Ah,04Eh,02Dh,02Dh,04Dh,02Dh DEFB 02Dh,02Dh,04Fh,04Ch,02Dh,02Dh,02Dh,02Dh DEFB 059h,07Bh,02Dh,0E5h,0C5h,0D5h,00Eh,002h DEFB 0CDh,076h,00Bh,0D1h,0C1h,0E1h,0C9h,00Eh DEFB 00Fh,011h,0BBh,00Eh,0CDh,076h,00Bh,03Ch DEFB 0CAh,0C8h,006h,011h,0F6h,00Dh,00Eh,009h DEFB 0CDh,076h,00Bh,00Eh,001h,0CDh,076h,00Bh DEFB 0FEh,059h,0C2h,069hFB 018h,0E2h,0CDh,0DFh,004h,00Eh,00Fh,011h DEFB 0BBh,00Eh,0CDh,076h,00Bh,03Ch,0CAh,036h DEFB 005h,011h,0F6h,00Dh,00Eh,009h,0CDh,076h DEFB 00Bh,00Eh,001h,0CDh,076h,00Bh,0FEh,059h DEFB 0C2h,069h,00Bh,0CDh,017h,007h,0CDh,020h DEFB 007h,0CDh,0F8h,009h,02Ah,017h,00Fh,022h DEFB 0B2h,00Eh,011h,085h,00Fh,0D5h,00Eh,01Ah DEFB 0CDh,076h,00Bh,011h,0BBh,00Eh,00Eh,015h DEFB 0CDh,076h,00Bh,0A7h,0C2h,046h,00Bh,0AFh DEFB 02Ah,0B2h,00Eh,011h,080h,000h,0EDh,052h DEFB 022h,0B2h,00Eh,038h,007h,028h,005h,0E1h,00Bh,0CDh,017h,007h DEFB 0CDh,020h,007h,021h,005h,00Fh,0E5h,02Ah DEFB 017h,00Fh,011h,080h,000h,019h,022h,0B2h DEFB 00Eh,0D1h,0D5h,00Eh,01Ah,0CDh,076h,00Bh DEFB 011h,0BBh,00Eh,00Eh,015h,0CDh,076h,00Bh DEFB 0A7h,0C2h,046h,00Bh,0AFh,02Ah,0B2h,00Eh DEFB 011h,080h,000h,0EDh,052h,022h,0B2h,00Eh DEFB 038h,007h,028h,005h,0E1h,019h,0E5h,018h DEFB 0D8h,0E1h,0CDh,02Eh,007h,0C9h,021h,006h DEFB 00Fh,07Eh,0FEh,00Dh,0C8h,0CDh,03Fh,006h DEFB 05Fh,0CDh,09Bh,006h,023h,018h,0F2h,00Eh DEFB 013h,011h,0BBh DEFB 019h,0EBh,018h,0D9h,0E1h,03Ah,01Ah,00Fh DEFB 0A7h,028h,00Dh,0CDh,0DDh,009h,03Ah,005h DEFB 00Fh,0FEh,022h,0C2h,038h,00Bh,018h,0B9h DEFB 0CDh,02Eh,007h,0C9h,0CDh,0DDh,009h,011h DEFB 023h,00Eh,00Eh,009h,0CDh,076h,00Bh,0CDh DEFB 006h,007h,0CDh,0F8h,009h,0AFh,011h,000h DEFB 0D4h,02Ah,019h,00Fh,0EDh,052h,020h,031h DEFB 02Ah,01Bh,00Fh,0EDh,052h,020h,02Ah,011h DEFB 05Ah,000h,02Ah,017h,00Fh,0EDh,052h,020h DEFB 020h,021h,0D2h,00Fh,011h,017h,00Fh,001h DEFB 00Dh,000h,0EDh,0B0h,03Ah,037h,009h,00Eh,0CDh,076h,00Bh,0C9h DEFB 00Eh,016h,011h,0BBh,00Eh,0CDh,076h,00Bh DEFB 0FEh,004h,0D8h,0C3h,046h,00Bh,00Eh,010h DEFB 011h,0BBh,00Eh,0CDh,076h,00Bh,0C9h,0C5h DEFB 006h,00Ah,0DBh,0D2h,0E6h,010h,028h,009h DEFB 03Eh,006h,0D3h,0D3h,03Ch,0D3h,0D3h,010h DEFB 0F1h,0C1h,0C9h,021h,0BBh,00Eh,006h,024h DEFB 036h,000h,023h,010h,0FBh,0C9h,021h,075h DEFB 000h,006h,003h,011h,0CDh,00Dh,01Ah,077h DEFB 013h,023h,010h,0FAh,0CDh,04Bh,007h,021h DEFB 06Ch,000h,011h,0BBh,00Eh,001h,00Ch,000h DEFB 0EDh,0B0h,032h DEFB 0BDh,00Eh,03Ah,0D0h,00Fh,032h,037h,009h DEFB 0CDh,0F8h,009h,03Ah,0BDh,00Eh,032h,037h DEFB 009h,0C9h,021h,006h,00Fh,011h,0BBh,00Eh DEFB 0AFh,012h,013h,006h,007h,07Eh,0FEh,00Dh DEFB 028h,032h,0CDh,03Fh,006h,0FEh,030h,038h DEFB 00Ch,0FEh,05Bh,030h,008h,0FEh,03Ah,038h DEFB 006h,0FEh,041h,030h,002h,03Eh,02Dh,012h DEFB 013h,023h,010h,0E1h,03Eh,020h,012h,013h DEFB 0EBh,011h,0CDh,00Dh,006h,003h,01Ah,077h DEFB 023h,013h,010h,0FAh,006h,018h,036h,000h DEFB 023h,010h,0FBh,0C9h,03Eh,020h,0C9h,021h,0F0h,010h,036h,022h DEFB 023h,001h,008h,000h,0EBh,021h,0BCh,00Eh DEFB 0EDh,0B0h,0EBh,036h,02Eh,023h,0EBh,001h DEFB 003h,000h,0EDh,0B0h,0EBh,036h,00Dh,021h DEFB 000h,001h,022h,004h,011h,0C9h,0CDh,073h DEFB 007h,011h,0BBh,00Eh,00Eh,00Fh,0CDh,076h DEFB 00Bh,0FEh,004h,0D2h,033h,00Bh,011h,000h DEFB 012h,0AFh,032h,0B2h,00Eh,0D5h,00Eh,01Ah DEFB 0CDh,076h,00Bh,011h,0BBh,00Eh,00Eh,014h DEFB 0CDh,076h,00Bh,0A7h,020h,014h,0D1h,021h DEFB 080h,000h,019h,0EBh,03Ah,0B2h,00Eh,03Ch DEFB 032h,012h,013h DEFB 010h,0FCh,018h,0E0h,011h,0D6h,00Dh,00Eh DEFB 009h,0CDh,076h,00Bh,021h,0BCh,00Eh,006h DEFB 008h,05Eh,0CDh,09Bh,006h,023h,010h,0F9h DEFB 01Eh,02Eh,0CDh,09Bh,006h,006h,003h,05Eh DEFB 0CDh,09Bh,006h,023h,010h,0F9h,0C9h,0FEh DEFB 05Eh,0D8h,0FEh,080h,038h,012h,0FEh,0C0h DEFB 030h,00Eh,0E5h,021h,05Bh,006h,0D6h,080h DEFB 085h,06Fh,030h,001h,024h,07Eh,0E1h,0C9h DEFB 03Eh,02Dh,0C9h,07Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,05Eh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02DhTrack-Info  N ,0B2h,00Eh,0FEh,080h,0CCh,0E3h,007h DEFB 018h,0DBh,0E1h,0AFh,032h,005h,011h,0CDh DEFB 0F3h,007h,00Eh,010h,011h,0BBh,00Eh,0CDh DEFB 076h,00Bh,0C9h,00Eh,01Ah,0CDh,076h,00Bh DEFB 011h,0BBh,00Eh,00Eh,014h,0CDh,076h,00Bh DEFB 0A7h,020h,0DFh,03Ah,004h,011h,03Ch,032h DEFB 004h,011h,021h,028h,028h,022h,0B6h,00Eh DEFB 0CDh,0B1h,008h,03Ah,0B2h,00Eh,0A7h,0C8h DEFB 021h,000h,000h,067h,0CBh,03Ch,0CBh,01Dh DEFB 022h,002h,011h,021h,0F0h,010h,001h,080h DEFB 000h,0CDh,067h,00Ah,0CDh,0B8h,00Ah,0CDh DEFB2Ah,0B6h,00Eh DEFB 0CDh,009h,009h,0CDh,036h,009h,0DBh,0D2h DEFB 0E6h,020h,028h,0F1h,025h,020h,0F1h,0CDh DEFB 009h,009h,0CDh,036h,009h,0DBh,0D2h,0E6h DEFB 020h,020h,0E2h,02Dh,020h,0F1h,0CDh,009h DEFB 009h,0E1h,0C9h,0C5h,0E5h,0CDh,009h,009h DEFB 0CDh,036h,009h,0DBh,0D2h,0E6h,020h,0CAh DEFB 0ABh,009h,021h,000h,000h,022h,0B4h,00Eh DEFB 0E1h,0C1h,0C5h,0E5h,0CDh,03Dh,009h,077h DEFB 023h,00Bh,078h,0B1h,020h,0F6h,02Ah,0B4h DEFB 00Eh,0CDh,03Dh,009h,0BCh,0C2h,04Eh,00Bh DEFB 0CDh,03Dh,009h,0BDh,0 088h,00Ah,0CDh,037h,007h,021h,014h,014h DEFB 022h,0B6h,00Eh,021h,000h,012h,0EDh,04Bh DEFB 002h,011h,0CDh,067h,00Ah,0CDh,0B1h,008h DEFB 0CDh,0B8h,00Ah,0CDh,088h,00Ah,0CDh,037h DEFB 007h,021h,000h,052h,011h,000h,012h,001h DEFB 080h,000h,0EDh,0B0h,03Eh,001h,032h,0B2h DEFB 00Eh,011h,080h,012h,0C9h,011h,0BBh,00Eh DEFB 00Eh,00Fh,0CDh,076h,00Bh,0FEh,004h,0D2h DEFB 033h,00Bh,011h,0F0h,010h,00Eh,01Ah,0CDh DEFB 076h,00Bh,011h,0BBh,00Eh,00Eh,014h,0CDh DEFB 076h,00Bh,0A7h,0C2h,03Eh,00Bh,02Ah,002h C2h,04Eh,00Bh,0E1h DEFB 0C1h,0CDh,037h,007h,0C9h,03Eh,0FFh,032h DEFB 0B8h,00Eh,021h,028h,028h,022h,0B6h,00Eh DEFB 001h,080h,000h,021h,005h,00Fh,0CDh,0B1h DEFB 008h,0CDh,079h,009h,0CDh,0A3h,009h,0C9h DEFB 03Eh,0FFh,032h,0B8h,00Eh,021h,014h,014h DEFB 022h,0B6h,00Eh,0EDh,04Bh,017h,00Fh,021h DEFB 085h,00Fh,0CDh,0B1h,008h,0CDh,079h,009h DEFB 0CDh,0A3h,009h,0C9h,0D5h,0C5h,0E5h,021h DEFB 028h,028h,022h,0B6h,00Eh,0CDh,0B1h,008h DEFB 011h,031h,00Eh,00Eh,009h,0CDh,076h,00Bh DEFB 021h,0F1h,010h,0 DEFB 011h,022h,0B2h,00Eh,011h,000h,012h,0D5h DEFB 00Eh,01Ah,0CDh,076h,00Bh,011h,0BBh,00Eh DEFB 00Eh,014h,0CDh,076h,00Bh,0A7h,0C2h,03Eh DEFB 00Bh,0D1h,021h,080h,000h,019h,0E5h,02Ah DEFB 0B2h,00Eh,0AFh,011h,080h,000h,0EDh,052h DEFB 022h,0B2h,00Eh,0D1h,028h,002h,030h,0D7h DEFB 00Eh,010h,011h,0BBh,00Eh,0CDh,076h,00Bh DEFB 0C9h,0C5h,0E5h,006h,00Ah,0DBh,0D2h,0E6h DEFB 010h,028h,00Ah,006h,0FFh,0CDh,0FDh,008h DEFB 010h,0FBh,0E1h,0C1h,0C9h,03Eh,006h,0D3h DEFB 0D3h,03Ch,0D3h,0D3h,010h,0E7h,011h,0CDh,009h,007h,021h,0F0h DEFB 010h,001h,080h,000h,0CDh,067h,00Ah,0CDh DEFB 0B8h,00Ah,0CDh,088h,00Ah,0CDh,037h,007h DEFB 0E1h,0C1h,0D1h,0C9h,0D5h,0C5h,0E5h,021h DEFB 014h,014h,022h,0B6h,00Eh,021h,000h,012h DEFB 0EDh,04Bh,002h,011h,0CDh,067h,00Ah,0CDh DEFB 0B1h,008h,0CDh,0B8h,00Ah,0CDh,088h,00Ah DEFB 0CDh,037h,007h,0E1h,0C1h,0D1h,0C9h,0C5h DEFB 0D5h,0E5h,011h,000h,000h,078h,0B1h,020h DEFB 008h,0EBh,022h,0B4h,00Eh,0E1h,0D1h,0C1h DEFB 0C9h,07Eh,0C5h,006h,008h,007h,030h,001h DEFB 013h,010h,069h DEFB 00Eh,03Ah,0B8h,00Eh,0A7h,020h,003h,011h DEFB 079h,00Eh,00Eh,009h,0CDh,076h,00Bh,0DBh DEFB 0D2h,0E6h,010h,028h,00Ah,011h,07Ch,00Bh DEFB 00Eh,009h,0CDh,076h,00Bh,018h,0CCh,03Eh DEFB 0F8h,0D3h,0D0h,000h,0DBh,0D1h,0E6h,080h DEFB 0CAh,05Ah,00Bh,018h,0E2h,0C5h,006h,015h DEFB 03Eh,052h,03Dh,020h,0FDh,010h,0F9h,0C1h DEFB 0C9h,0C5h,001h,0CFh,006h,03Eh,0F8h,0D3h DEFB 0D0h,000h,03Eh,006h,0EDh,079h,0DBh,0D1h DEFB 0E6h,080h,0CAh,05Ah,00Bh,0DBh,0D2h,0E6h DEFB 020h,020h,0F3h,0DBh,0D1h,0E6h,0FAh,0C1h,023h,00Bh,018h,0E5h DEFB 0D5h,0C5h,0E5h,0D9h,001h,0CFh,006h,0D9h DEFB 03Eh,0F8h,0D3h,0D0h,07Eh,0CDh,0E0h,00Ah DEFB 0DBh,0D1h,0E6h,080h,0CAh,05Ah,00Bh,023h DEFB 00Bh,078h,0B1h,0C2h,094h,00Ah,02Ah,0B4h DEFB 00Eh,07Ch,0CDh,0E0h,00Ah,07Dh,0CDh,0E0h DEFB 00Ah,0CDh,00Eh,00Bh,0E1h,0C1h,0D1h,0C9h DEFB 0C5h,0D5h,0D9h,001h,0CFh,006h,0D9h,001h DEFB 010h,027h,0EDh,05Bh,0B6h,00Eh,0CDh,0F1h DEFB 00Ah,00Bh,078h,0B1h,020h,0F8h,0CDh,00Eh DEFB 00Bh,015h,020h,0FAh,0CDh,0F1h,00Ah,01Dh DEFB 020h,080h,0CAh DEFB 05Ah,00Bh,0DBh,0D2h,0E6h,020h,028h,0F3h DEFB 03Eh,002h,0EDh,079h,0C1h,0C9h,03Eh,029h DEFB 03Dh,0C2h,038h,009h,0C9h,0E5h,021h,000h DEFB 008h,0CDh,009h,009h,0CDh,036h,009h,0DBh DEFB 0D2h,0E6h,020h,0CAh,058h,009h,0E5h,02Ah DEFB 0B4h,00Eh,023h,022h,0B4h,00Eh,0E1h,037h DEFB 07Dh,017h,06Fh,025h,0C2h,041h,009h,0CDh DEFB 009h,009h,07Dh,0E1h,0C9h,0E5h,026h,064h DEFB 0CDh,009h,009h,0CDh,036h,009h,0DBh,0D2h DEFB 0E6h,020h,020h,0F2h,025h,020h,0F1h,0E1h DEFB 0C9h,0CDh,065h,009h,0E5h,0Track-Info  N FAh,0CDh,00Eh,00Bh,0D1h,0C1h,0C9h DEFB 0C5h,006h,008h,0CDh,00Eh,00Bh,007h,0DCh DEFB 00Eh,00Bh,0D4h,0F1h,00Ah,010h,0F7h,0C1h DEFB 0C9h,0F5h,03Eh,003h,0D9h,0EDh,079h,0D3h DEFB 0D3h,0CDh,025h,00Bh,0CDh,025h,00Bh,03Eh DEFB 002h,0EDh,079h,0D9h,0D3h,0D3h,0CDh,025h DEFB 00Bh,0CDh,025h,00Bh,0F1h,0C9h,0F5h,03Eh DEFB 003h,0D9h,0EDh,079h,0D3h,0D3h,0CDh,02Ch DEFB 00Bh,03Eh,002h,0EDh,079h,0D9h,0D3h,0D3h DEFB 0CDh,02Ch,00Bh,0F1h,0C9h,03Eh,00Dh,03Dh DEFB 0C2h,027h,00Bh,0C9h,03Eh,039h,03Dh,0C2h DEFB 0h,076h,065h DEFB 00Dh,00Ah,056h,065h,072h,069h,066h,079h DEFB 020h,046h,069h,06Eh,064h,020h,020h,020h DEFB 020h,020h,052h,075h,06Eh,020h,020h,020h DEFB 020h,020h,020h,04Dh,06Fh,06Eh,00Dh,00Ah DEFB 064h,065h,066h,061h,075h,06Ch,074h,020h DEFB 020h,020h,020h,032h,034h,030h,030h,020h DEFB 042h,064h,020h,020h,032h,078h,020h,066h DEFB 061h,073h,074h,065h,072h,00Dh,00Ah,063h DEFB 06Fh,06Dh,06Dh,061h,06Eh,064h,02Fh,053h DEFB 020h,020h,031h,032h,030h,030h,020h,042h DEFB 064h,020h,020h,020h,0202Eh,00Bh,0C9h,011h,0A8h,00Dh,018h,02Ch DEFB 0CDh,02Eh,007h,0CDh,017h,007h,0CDh,02Eh DEFB 007h,011h,0BCh,00Dh,018h,01Eh,0CDh,017h DEFB 007h,011h,0E4h,00Dh,018h,016h,03Ah,0BCh DEFB 00Eh,0A7h,0CCh,017h,007h,011h,092h,00Eh DEFB 018h,00Ah,03Ah,0BCh,00Eh,0A7h,0CCh,017h DEFB 007h,011h,0A7h,00Eh,00Eh,009h,0CDh,076h DEFB 00Bh,011h,080h,000h,00Eh,01Ah,0CDh,076h DEFB 00Bh,0CDh,037h,007h,0FBh,0C7h,0FBh,0CDh DEFB 005h,000h,0F3h,0C9h,020h,054h,068h,061h DEFB 06Eh,06Bh,020h,079h,06Fh,075h,020h,021h Dh,020h,06Eh,06Fh DEFB 072h,06Dh,061h,06Ch,00Dh,00Ah,050h,061h DEFB 072h,061h,06Dh,065h,074h,072h,03Ah,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,00Dh,00Ah,066h,06Fh,072h DEFB 020h,053h,02Ch,050h,02Ch,052h,020h,020h DEFB 020h,020h,06Eh,061h,06Dh,065h,020h,06Fh DEFB 066h,020h,066h,069h,06Ch,065h,028h,02Fh DEFB 073h,029h,00Dh,00Ah,066h,06Fh,072h,020h DEFB 04Ch,02Ch,047h,02Ch,046h,02Ch,056h,020h DEFB 020h,02Dh,06Eh,075EFB 024h,00Dh,00Ah,053h,048h,041h,052h,050h DEFB 020h,04Dh,05Ah,020h,06Dh,06Fh,06Eh,069h DEFB 074h,06Fh,072h,020h,024h,00Dh,00Ah,007h DEFB 042h,061h,064h,020h,070h,061h,072h,061h DEFB 06Dh,065h,074h,072h,020h,021h,024h,00Dh DEFB 00Ah,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,00Dh DEFB 00Ah,020h,04Dh,05Ah,020h,074h,061h,070h DEFB 065h,020h,03Ch,02Dh,03Eh,020h,043h,050h,06Dh,062h,065h,072h DEFB 020h,06Fh,066h,020h,066h,069h,06Ch,065h DEFB 073h,00Dh,00Ah,020h,020h,020h,020h,020h DEFB 020h,020h,020h,020h,020h,020h,020h,020h DEFB 02Dh,068h,065h,078h,020h,020h,06Ch,06Fh DEFB 061h,064h,020h,073h,070h,065h,065h,064h DEFB 00Dh,00Ah,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 00Dh,00Ah,024h,00Dh,00Ah,052h,075h,06Eh DEFB 020h,03Fh,020h DEFB 02Fh,04Dh,020h,043h,06Fh,06Eh,076h,065h DEFB 072h,074h,020h,076h,02Eh,037h,00Dh,00Ah DEFB 028h,063h,029h,020h,053h,04Fh,04Bh,04Fh DEFB 044h,049h,020h,031h,039h,038h,038h,02Ch DEFB 06Dh,069h,063h,072h,06Fh,057h,061h,072h DEFB 065h,020h,031h,039h,038h,039h,00Dh,00Ah DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,00Dh,00Ah DEFB 024h,007h,00Dh,00Ah,02Dh,02Dh,02Dh,05Bh,020h,02Fh,04Eh,02Fh DEFB 053h,020h,076h,069h,061h,020h,053h,055h DEFB 050h,045h,052h,04Dh,04Fh,04Eh,05Dh,024h DEFB 00Dh,00Ah,007h,046h,069h,06Ch,065h,020h DEFB 06Eh,06Fh,074h,020h,066h,06Fh,075h,06Eh DEFB 064h,020h,021h,024h,00Dh,00Ah,007h,057h DEFB 072h,06Fh,06Eh,067h,020h,066h,069h,06Ch DEFB 065h,020h,021h,024h,02Eh,04Dh,05Ah,046h DEFB 00Dh,00Dh,00Ah,04Fh,06Bh,024h,00Dh,00Ah DEFB 046h,069h,06Ch,065h,020h,06Eh,061h,06Dh DEFB 065h,03Ah,020h,024h,00Dh,00Ah,007h,044h DEFB 069h,073h,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,020h DEFB 048h,045h,04Ch,050h,020h,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,00Dh,00Ah,043h,06Fh,06Dh,06Dh DEFB 061h,06Eh,064h,020h,03Ah,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh,02Dh DEFB 02Dh,00Dh,00Ah,050h,075h,074h,020h,020h DEFB 020h,020h,047h,065h,074h,020h,020h,020h DEFB 020h,020h,020h,04Ch,06Fh,061h,064h,020h DEFB 020h,020h,020h,020h,053h,061Track-Info  N h,06Bh,020h,069h,073h,020h,066h DEFB 075h,06Ch,06Ch,020h,021h,024h,00Dh,00Ah DEFB 007h,046h,069h,06Ch,065h,020h,065h,078h DEFB 069h,073h,074h,020h,021h,00Dh,00Ah,044h DEFB 065h,06Ch,065h,074h,065h,020h,03Fh,020h DEFB 05Bh,020h,02Fh,059h,05Dh,024h,00Dh,053h DEFB 06Bh,069h,070h,020h,066h,069h,06Ch,065h DEFB 03Ah,020h,024h,00Dh,00Ah,04Ch,06Fh,061h DEFB 064h,069h,06Eh,067h,020h,020h,03Ah,020h DEFB 024h,00Dh,00Ah,053h,061h,076h,065h,020h DEFB 020h,020h,020h,020h,03Ah,020h,024h,00Dh DEFB 00A SP,(STCK1S) ;tu sa konci CONOUT RET CTLESC: INC (HL) ;ESC sekvencia - zvacsi fazu RET CTLCLS: LD A,MAXLINS-1 ;zmazeme 24 riadkov JP CLRSCR CTLSHT: SET 7,(HL) ;nastavime priznak horneho ASCII RET CTLBP: ;BEEP sa mi nechce implementovat RET CONOP2: DJNZ CONOP3 ;skoc ak faza >2 CP '=' ;GOTOYX JR Z,CTLGTO DEC (HL) CP '*' ;CLS+HOME JR Z,CTLCLS CP '(' ;low light JR Z,CTLLWL CP ')' ;highlight JR Z,CTLHGL CP '0' ;inverzne video JR Z,CTLINV CP '1' ;normalne video h,046h,06Fh,075h,06Eh,064h,020h,020h DEFB 020h,020h,03Ah,020h,024h,00Dh,00Ah,050h DEFB 075h,074h,020h,020h,066h,069h,06Ch,065h DEFB 03Ah,020h,024h,00Dh,00Ah,047h,065h,074h DEFB 020h,020h,066h,069h,06Ch,065h,03Ah,020h DEFB 024h,00Dh,00Ah,007h,050h,072h,065h,073h DEFB 073h,020h,070h,06Ch,061h,079h,020h,021h DEFB 024h,00Dh,00Ah,007h,050h,072h,065h,073h DEFB 073h,020h,072h,065h,063h,06Fh,072h,064h DEFB 020h,026h,020h,070h,06Ch,061h,079h,020h DEFB 021h,024h,00Dh,00Ah,007h,043h,068h,065h DEFU D4C 5PP5yUp%v%8|/@pڱ☀>) ld&c!h,t]?L Se @)YO s_Q$#1F p%v ѴcppO 0Xa0 `; Al3 -0á|1k *2HVj iY35N` 3H-^2^@ z! f$v+5AK4 `,3H-d[NhxGn"!@@!H, faK4fA ",Ӱ,|Ms( APW !H vv mu{M+ 6pfي < <@"`@jme@BFjh4 7 SM7M#D"3A0 9/B 063h,06Bh,020h,073h,075h,06Dh,020h,065h DEFB 072h,072h,06Fh,072h,020h,021h,024h,00Dh DEFB 00Ah,007h,042h,072h,065h,061h,06Bh,020h DEFB 021h,024h,03Fh,000h,061h,076h,065h,020h DEFB 020h,020h,020h,020h,03Ah,020h,024h,00Dh DEFB 00Ah,046h,06Fh,075h,06Eh,064h,020h,020h DEFB 020h,020h,03Ah,020h,024h,00Dh,00Ah,050h DEFB 075h,074h,020h,020h,066h,069h,06Ch,065h DEFB 03Ah,020h,024h,00Dh,00Ah,047h,065h,074h DEFB 020h,020h,066h,069h,06Ch,065h,03Ah,020h DEFB 024h,00Dh,00Ah,007h,050h,072h,065h,073h 4v/#f>ndpАBc!@D9$E #$DD @pg@@ BI D(ppB D#c`QH 5@Pt)V`$8dv%8#p@~v*Hr! KHP. 0"\mjBK "]-j"p_mX08@|iNd sa}9#v@i =*",׀fqѸ"dF[xb Ѹ @>X, &ؠ`C5, >٧+P_V!i(pf@aAaP@S*"i< + b1)y GT 3Jqd3TFi*2d3Bit3Lqd3TFi&i!^@2d3RpÌt)C0[ bP DEFB 073h,020h,070h,06Ch,061h,079h,020h,021h DEFB 024h,00Dh,00Ah,007h,050h,072h,065h,073h CMT2:: END Bh,020h DEFB 021h,024h,03Fh,000h,061h,076h,065h,020h DEFB 020h,020h,020h,020h,03Ah,020h,024h,00Dh DEFB 00Ah,046h,06Fh,075h,06Eh,064h,020h,020h DEFB 020h,020h,03Ah,020h,024h,00Dh,00Ah,050h DEFB 075h,074h,020h,020h,066h,069h,06Ch,065h DEFB 03Ah,020h,024h,00Dh,00Ah,047h,065h,074h DEFB 020h,020h,066h,069h,06Ch,065h,03Ah,020h DEFB 024h,00Dh,00Ah,007h,050h,072h,065h,073h pivM8,Ӱ-et:@SxDՃ$t-Q p `OExtd,BM,XL"LӰ-% `xՀ;V kt-iAxP K4 8 8]`X6^p%v,Ӱ-YaAlи _P\"Y(P{Tfa8fjv,R,À8 4S$tL!,0fktiٯJ"j iH@1ҐT-Ap{ Z@\2^Mxn f#8d7D `xEvW``9  3`8?cCt8?#Z $uY0 4w0`ll$?XN 0  0^f0/6a konzolu CONOUT: LD (STCK1S),SP ;odloz zasobnik LD SP,STCK1 ;nastav CONOUT zasobnik s navrat. adresou LD HL,CONOPH ;CONOUT faza LD A,C ;parameter do A LD B,(HL) ;faza do B DJNZ CONOP2 ;skoc ak faza >1 CP 20h ;je riadiaci znak? JP NC,PRNTC ;neni, vytlac ho CP 1Bh ;ESC JR Z,CTLESC CP 1Ah ;CLS+HOME JR Z,CTLCLS CP 8 ;backspace JP Z,CLEFT CP 0Dh ;CR JP Z,CBEG CP 0Ah ;LF JP Z,CDOWN CP 17h ;shift na horne ASCII JR Z,CTLSHT CP 7 ;BEEP JR Z,CTLBP CONORT: LDTrack-Info  N IB! Y'hZ-Eh-Ei-iD)e hS*EY-IDh-IhZ-,ŮV+Tfm W`iø͡ ta͑63͡PYy( ͝0*F{z0BK͝08>*w~#+w#w+ɯ22j2kkta * :](~ w ~ 5 '# ! #  8 w ~>2RÄ!5͡*!,"ta"!w# ! wo2Ra* ~<w( G:E!RvX"@3LjDp8(-IKYpS5bfL@)7@ $@dP&HEv٧`[/84;+p8(;!,T@$`XEv`Z>D(e*YR,@`+s4 d\`Sm @g5>,H im0"i8|4Èea Ad@,0hgis E[mm-m'0P $|)KB3A hi9 %*Zb%97>VOKLdfA,Ѱ%s!(dL(lfA,Ѱ%s(Y`KmBŚ Y,W+4 f-@UD hpXVhw T3G f( $ 4~($ta :S<(͋a( øͼ>2U>2S:c!a8 !2c: ;( %'ü>2U>2S͡*͔:cҼ; C͋2W(O ͦDM6} >ø* :]:W(sO s#r::U== :y== 3*9Ww#K*g"e% *e:DG# "eF% :c!a8w4w :U '!~ =2c6'2U[!!~~#~O~G#n,-. W! w! y !x(4.:<(*! q!p:< . (͋.:<(ø6}2LA+8`FvH2\"@l(=3O j?Kp(-X\!B٫C4 f,! K`s5bAK4 B HBPi\S4npZ,! K`pvAiXS5 f EjB b :K@sd`@` L,0j\ < >m5 m\Qh#,$(TQ3A b[ x ݥ9 Dk>[Eb p,ڏPAdG6˴iDh>;O-M%D%>]M,NefoH=a lz!@40,fи.Wy\Xt)فp8E$ KrTp%vPpivFwlPa7y@!AE2APKBiiL]N! ~态O>G~G!~G} t*!r#r#ra( _y#x#{8s+p+q͡* !!q#p#w*/:O>}K/X"/:V!w>2^*~=2V0:2_~2`w̓:*w>"ø!"-"/!"1F`2!/>2͎͎~?(~?͎tT*Y"͎͡T͎]>2͎͎X͎Ë͎͊]*/#:øS1F*?*- ͎ͮ]*;":V :ø2>2͎͎>2͎*}/_|/*/W}_*-"/}o|g"-:^(*6:`( w:_2V̓:B 4!La6N!H  EhZ-EhZ-EhZ-EhZ  p2PD3ye9ap "2UP]BDOS error on : Read/only file: Abort/Ignore $  v >2>/!] ~S >R27 >2& >s2- :]RS)VMFPIGʾLʣ1  v i :m$ +:n͆O:o͆27 0  d 08:8>10ɯ2dG̈́ͧi 2dGi dG̈́  v o03dhZ-EhZ-EhZ-EhZ-QHn/)ƓU(JDy8$cI 7΂1n2"@h(W9ql2"Aq4FADX #MQm2@h(D4bI@f:  &(x4΂4D2 C(~ -S5N1eQ0a2Mqt AE3 ЀH Sq@ B 4P:1eQt Ɠat A@rs9 @!A@rs9FSd a 9 e13@e9!H G#)  ЀH Sq@ B 4P:1eQt Ɠat A@rs9 @!A@rsD4CtCMT2 AE3 ЀH Track-Info  N i d ? v !;"!"!"  v  VU  v >MNi S >(21!_>>6ׯV>>̯y!>:!7 >2p%!>2>2>!>28"9>2 >2!!~w#| !p"!I5!5!5!6p"0!5!5!5! H!!Z6 $7!! 69!@" !("  !!K 6) !p!=>> ( > 7 (ɯ2o2n~g:n7:o /2oH7 HM͖ /M Convert v.7 (c) SOKODI 1988,microWare 1989 ------------------------------ $ ----------- HELP ------------- Command :-------------------- Put Get Load Save Verify Find Run Mon default 2400 Bd 2x faster command/S 1200 Bd normal Parametr:-------------------- for S,P,R name of file(/s) for L,G,F,V -number of files -hex load speed ------------------------------ $ Run ? [ /N/S via SUPERMON]$ File not found !$ Wrong file !$.MZF Ok$ File nam~(ɷ>1>2^** SUPERMON V.S# (C) SOKODI 1988 ** V>2ͦdU2 D d>2ͦdM v !$2͖:3 i v l!6v n!om :(!m x2x!m xv K!# [ v :=(  v v <6  v v Yi   *"v v F *R"8(:( :"8 . # v  *R 1*R *Z*R ! :7 2:27 :27 !~ e: $ Disk is full !$ File exist ! Delete ? [ /Y]$ Skip file: $ Loading : $ Save : $ Found : $ Put file: $ Get file: $ Press play !$ Press record & play !$ Check sum error !$ Break !$?ave : $ Found : $ Put file: $ Get file: $ Press play !$ Press record & play !$ Check sum error !$ Break !$?ave : $ Found : $ Put file: $ Getad speed ------------------------------ $ Run ? [ /N/S via SUPERMON]$ File not found !$ Wrong file !$.MZF Ok$ File nam(2?08 [0:8A0>-#>  w#6#>   v !^͛#.͛^͛#^80![րo0$~>-}----------^------E`--TGH-BXDRPCQAZWSUI--KFV---JN--M---OL----Y{-v v <  v v Yi  !*"v v F *R"8(.!~ ?_͛#v v F v  ( ><!$6#!u w#K!l !6"#!6.#6 !"sv 3 2v v !:<22,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MERRBT:: DEFM v v v :<2!(("ͱ:!g<"!g ͸ ͈ 7!"!Kg ͱ͸ ͈ 7!R>2v 3 v v > *"v v > !*R"(0v  ( ><i: y v ( |  v >Z >R= >>yZ Z (>y>)=8 ! 6 X *#"7}o%A }&d 6 % e * 6 (% 6 - 6 ʫ !"= w# x *= N = N 7>2T ',0,0,0,0,0 TABFKE: SIOT: ;inicializacne bajty SIO DEFB 18h,10h,10h,4,4Ch DEFB 5,0EAh,3,0E1h PIOT: DEFB 0CFh,03Fh,057h,0DFh ;inicializacne bajty PIO-A (FCh) DEFB 0CFh,000h,057h,0FFh ;inicializacne bajty PIO-B (FDh) INIT: DI CALL INIGDG ;640x200, 4 farby + palety + scroll + RAM CALL INITKB ;inicializuj KBD CALL INITPP ;inicializuj PPI 8255 CALL INITCL ;inicializuj hodiny 8253 CALL INITSN ;inicializuj zvuk PSG CALL INITSI ;inicializuj pripadnu kartu SIO CALL INITPI ;i!(("!ͱy ͣ >2!"K!ͱy ͣ !(("ͱ1 v ! !g ͸ ͈ 7!"!Kg ͱ͸ ͈ 7x "~0# >~ Z # x” *| }  '[ x       >y% % >y% % >y, >y, > =' >9=.  ,..  : : v v 7 Thank you !$ SHARP MZ monitor $ Bad parametr !$ ------------------------------ MZ tape <-> CPTrack-Info  N nicializuj PIO (zatial bez prer.) LD A,MAXLIN CALL CLRSCR ;zmaz CRT DI CALL FDRAW ;nakresli FKEYS ;inicializacia povolenia prerusenia PIO PIOENA: DI IM 2 ;budeme prerusovat cez IV LD HL,PRERV1 ;vektor prerusenia BIT 0,L ;zacina na parnej adrese? JR Z,PIOEN1 ;ano, je to OK LD HL,PRERV2 ;ak nie, tak pouzi tento vektor PIOEN1: LD A,H ;horny bajt vektora prerusenia LD I,A ;uloz do I LD BC,83FCh ;B=EI, C=adresa portu PIO-A OUT (C),L ;dolny bajt vektora daj do PIO OUT (C),B ;p z adresy 0 danej stranky ;vstup: D=cislo stranky ;vystup: E=nacitany bajt RDR0: CALL RDSET0 IN E,(C) RET ;pise bajt na adresu 0 danej stranky ;vstup: D=cislo stranky, E=zapisovany bajt RDW0: CALL RDSET0 OUT (C),E RET ;zdetekuje RD a nastavi ho v BIOSe RDSIZE: LD HL,RDSAV XOR A R3: LD D,A CALL RDSET0 INI CP 1 RLA BIT 4,A JR Z,R3 XOR A LD D,A R5: LD E,A CALL RDW0 CALL RDR0 CP E JR Z,R6 LD A,D JR R1 R6: SUB 1 JR C,R5 LD A,1 R2: LD DE,0 CALL ovol PIO prerusenie EI ;budeme prerusovat podla noveho RETI ;uz sa moze prerusovat ;presun KBD tabuliek do VRAM INITKB: DI IN A,(0E0h) ;zapni VRAM LD A,FRKEYS ;rovina pre tabulku klaves OUT (0CCh),A ;nastav WFREG LD HL,TABKB ;presun tabulku klaves LD DE,TABKV ;do VRAM LD BC,TABKE-TABKB LDIR LD A,FRFKEY ;rovina pre funkcne kluce OUT (0CCh),A ;nastav WFREG LD HL,TABFK ;presun funkcne kluce LD DE,TABFV ;do VRAM LD BC,TABFKE-TABFK LDIR IN A,(0E1h) ;zapni RAM RET ;iRDW0 LD D,A LD E,A CALL RDW0 LD D,0 CALL RDR0 JR NZ,R1 ADD A,A CP 10h JR NZ,R2 R1: LD (NPAGES),A LD HL,RDSAV XOR A R4: LD D,A CALL RDSET0 OUTI CP 1 RLA BIT 4,A JR Z,R4 LD A,(NPAGES) OR A LD HL,0 JR Z,R7 LD BC,0F04h LD E,1 CP 10h JR C,R8 LD BC,1F05h LD E,3 RRA RR L R8: SRL A RR L RRA RR L RRA RR L LD H,A DEC HL LD (DPBE+2),BC LD A,E LD (DPBE+4),A LD A,(DPBE+0Dh) LD D,A LD E,0 LD B,C R9: SRL D RR E DJNZ R9 OR Anicializacia hodin 8253 ;CTC0=citac 1:1 ;CTC1=delicka 1:15611 (HSync vstup, sekundovy vystup) ;CTC2=pocitadlo sekund INITCL: DI LD A,36h ;CTC0 mod3 bin. citac 1:1 OUT (0D7h),A LD A,74h ;CTC1 mod2 bin. citac 1:15611 OUT (0D7h),A LD A,0FBh ;CTC1 zapis 3CFBh (=15611) OUT (0D5h),A LD A,3Ch OUT (0D5h),A LD A,0B4h ;CTC2 mod2 bin. citac OUT (0D7h),A LD BC,0D6h ;CTC2 port OUT (C),B ;CTC2 zapis 0000H OUT (C),B INITC1: IN A,(C) IN B,(C) OR B JR NZ,INITC1 ;cakame na CTC2=0 SBC HL,DE R7: LD (DPBE+5),HL RET ;zdetekuje pritomnost FD radica a nastavi v BIOSe FDSIZE: LD A,0FEh OUT (0DAh),A LD A,0Ah CALL WTXMS ;cakaj 10 ms IN A,(0DAh) CP 0FEh RET Z ; LD HL,0 ; LD (DPBA+5),HL XOR A LD (FDPRES),A RET ;zdetekuje HDD particie a nastavi ich v BIOSe HDSIZE: CALL SELMST ;reset Master LD HL,0 ;nuluj HL'HL EXX LD HL,0 EXX LD (PSIZC),HL ;nuluj velkost C particie LD (PSIZD),HL ;nuluj velkost D particie LD (DPBC+5),HL ;nuluj DSM disku C RET ;inicializacia zvuku PSG INITSN: LD A,09Fh ;este stlmime PSG LD B,4 ;styri kanaly vratane sumu INITS1: OUT (0F2h),A ;stlm kanal ADD A,020h ;dalsi kanal DJNZ INITS1 ;opakuj pre kazdy kanal RET ;inicializacia 8255 ;A=vystup rez. 0, B=vstup rez. 0, CL=vystup, CH=vstup INITPP: LD A,8Ah OUT (0D3H),A ;nastav rezim LD A,0F0h ;(?) 8255 brana a joy multipl 556 OUT (0D0h),A ;(?) XOR A OUT (0D3h),A ;vypni zvuk cez 8253 RET ;inicializacia SIO (RS-232 karta) INITSI: LD B LD (DPBD+5),HL ;nuluj DSM disku D LD DE,HDBUF ;sem pride MBR sektor LD B,1 ;1 sektor 512 bajtov CALL RDIDE ;citaj MBR sektor RET C ;vrat sa, ak bola chyba LD HL,(HDBUF+OIDENT) LD DE,0AA55h SBC HL,DE ;testuj ident. AA55h RET NZ ;vrat sa, ak nesedi LD A,(HDBUF) ;testuj mark 'MZ' CP MZID1 RET NZ LD A,(HDBUF+1) CP MZID2 RET NZ ;vrat sa, ak 'MZ' nesedi LD HL,(HDBUF+OHEAD);zisti pocet hlav LD (GHEAD),HL ;nastav hlavy v BIOSe LD HL,(HDBUF+OSEC) ;pocet sektorov na stope LC,09B1h ;pocet 9, adresa B1h (SIO) LD HL,SIOT ;inicializacne bajty SIO PUSH HL OTIR LD BC,09B3h ;pocet 9, adresa B3h (SIO) POP HL ;inicializacne bajty SIO OTIR RET INITPI: DI LD HL,PIOT ;inicializacne bajty PIO LD BC,04FCh ;adresa portu PIO-A OTIR ;zasli na PIO-A LD BC,04FDh ;port PIO-B OTIR ;zasli na PIO-B RET ;nastavi adresu 0 danej stranky ;vstup: D=cislo stranky ;vystup: BC=0EAh RDSET0: LD C,0E9h OUT (C),D LD BC,0EBh OUT (C),B DEC C RET ;cita bajtTrack-Info  N D (GSEC),HL ;nastav v BIOSe LD IX,HDBUF+OTABLE ;adresa part. tabulky do IX LD BC,400h ;B=4 particie, C=0 pocet zistenych CPM LD DE,10h ;vzdialenost medzi particiami ;najprv ideme hladat aktivnu CPM particiu HDSI1: LD A,(IX+OACT) CP ACTPAR ;je particia aktivna? JR NZ,HDSI2 ;ak neni, skus dalsiu CALL TSTCPM ;je CPM? JR NZ,HDSI3 ;aktivna neni CPM, skoc ;nasla sa aktivna cpm particia CALL SETC ;nastav ju v BIOSe LD C,1 ;disk C uz mame, dalsi bude D JR HDSI3 HDSI2: ADD IX,DE ;hladavVKz]0Ւi02O/(rCx %FV52vÏS[#:7 2vN?٦LM5koՐ:=CqA#sa:ݧh* =Y,P>v56 0s_?/w x4` LK4vn,/>G>χƙd@eYb zD!`j<엘@? 3%{6{'jڢv'jڢv8D'\eŒsL FQTnFQTasl4aD!Gh&PA7j T,ҹd@Q!]KuլۢCz(-ۮH*ެ,:eXt>_*MF v 3C-3d _v녒: =_&ѭrY =+4j<.Ȅ2!ox/U8ݐ: =_&ҙrY8ㆫ4j< A@0\ M/˴z]jڠvjڠvjڠvjڠvGG%Aw,~6@Hဠt)D |P Hђ>`>`p9t8u9 AW.H|!˩ >BX@ 6H@? ǣldd_LԛE{Em o>0}oKm-,(}ZkKmb>kH[4 NQP"/Ux!èB N14@P`A"-Vjh@`8F j@f4P-w.L33ttxc bYk͚y>٣g/("C q2z@ Fh!@-W),Y pH8sh+ CP,M/fm!ٶa4@AͰ!>CA1y˴f#. |ۂ6@3Lu;T|³@dIϐ0N>i > |Lq-|2n(3[A +Bz i9Y\>mYP(f ]i74Xf5Ґ l5`ѫ@ -Wi]vϯW @ 7 Œ}}_Ou}}@%}}@%}}@%$` `? Ћ~O"D_`~-B9<0!?a!_ a|]@ >,(l҈Yh#lJ!FEQoѠ`8MPVq }?Oz@!t:&22:ߧ@#l?O! +ߧpݒ;f^a{my N`7p%s(WX`>'DHiͷ  lL<' 50,BpS%%x^aŚxMD@~x`@z]'6–|P@7ҳ;ߧPC%*>OCtxé:>FG=@:P KB^Vh>\"!é$1éIy֋Nn@0 [ >1ZVj-hDl!@ /fh:A] D7S5Bx_Y}SpJX!V/$kEqmO/Ѡ-y>HP?ݤi^PWbS<٭iڰ'' !5}ݧ;Ւ>ٍ6kmv/Ab\+5Hf3Bx€(@i Ev/G۴rG]/qQmԷvW dEP i N@D"(JA%RJiԯ/Q@" ]nS0Giz xY S4f34= VTxDH5pX,h%#+v@#"é!CPKq@"T;J@`4W4W[b2"!éTrack-Info  N TA TAX7TCUBR>UB#UBTTL*UI$ITLECHGR@ORRA*RITHL680807Z80%COMMENT&CREF'DEPHASE(LALL;LFCOND)LIST*PASS2+PHASE,PRINTX-RADIX5REQUEST.SALL++*))*+e+m++))F+J+O+-@  F"  (8/~p}=^w *+=~#"+= oA 0 :! FMAC" @!@=~vO#~ Q w#6 #wDFK>2<2?2f>2=2<2<2=2<2?2=!= w#—<2 =2=2=2=> 2<:m@2<:r@2=>;2=<2=!"=+"?+"=* @!!62@?2=2=2=2?<2=9!-="+= ~# L*=#"=!"=:==2=!=>2?2?͖ CCl CC0Cw#C!-= ʎ ~w# Žw:==2=͖q:=ʨͶNЯ2=NLگ!ͱF> 2-=ͰJ> ͰJ7Ù- !"(=2==2?*="=:-=*>$2-=$2*=O :ʈ:*= 7}ɷ[ a { } 0 ͻ*+=+"+=*+=#"+= aM 0 != q#[ !=6#ͫ 2<ay w# yʙ ͫ r ґ r Gy2=xͫ ґ Ñ $.@?_// // &:? ͫ & 0 ͫ 7  G!W?:=!  2=~!?  "U?^#V!L? w#4 !=~E 6!=N zʸ ^#V#^#V#~=s =G… #h #~=² #"$=#~+?O?!L?w#™ w#s#rJ J +>Ê <*&=~*@####~7#_"@:=$.?_ ;O "$=ŷ$:==$O !=~4#>$Nwy#*+=+~# ʹ%O ~~~#~"RR ~*+=+"+=: =e%p "_-ʔ7+-"+=%ù: =ʳ+ "(=d  :¯@ O 0 : = w8: =f`e#~! _^#V#N+! ; !-="+=*(=|O : =fr'!==Nwy#-!>"=!= q#E0 O f;f:<‘:=VʅMʅDʅX2@?x%ACDEMNOPQRUVX!=~ p:>2>%No EN͍ *S?z :R?O s#rw# =1 >wG#w"$=#w#w#w###w#C "&=####p*@͇ :*$=|>!r ͱF?Symbol table full |}:<:q@:=*$=~@ڳ >>8L!=F#~8L½ *U?  G~8 #~ +~w#~w#s#r#*=s#r~@w:<# ~[~[#^#V#͇ L*=x>{[#z[:= *$=# :=[*$=~*$=#~wxGï>FyF: T0FT:FTLFTLFyTOFyyT-FTLO$TLv̗FTL$TD statementû:=.ʄ$ʌ[YTE3ALLSALL1Cj?CF1M/MA?MCMP2NC2NZOMMONOND1PQ PrPDsPDR2PE*PIrPIsPIRj/PL2POSEG1Z'AAj'AA ADBC"CR CXR ECEFB"EFLEFMEFSEFWIiISJNZSSEGWIiILSE ND NDC NDIF NDM NTRY QUQXjXXXITMXTXTERNALXTRN LOFyT:$T-F0 ,Ļɷ×EH͗×T-z`<ė{Y!~ ^#N! ^#VTԗ<xF{?FT8ė<FHܗ]:<Öh :>B:<0:<Ö>F:< F>2<—:<<=—<2<ů2< 0 ('2FEҥ:<ԗ OT-ͱyHFyF:>G©<xGd*=*=͇ d##99zC<—xxT-OBALkvALTvLTF2FB9FDIFFEFF:FIDN3FNBFTaM)NQNRNC8NCLUDErNDsNDRrNIsNIR"NRNXF1F2FDEFFNDEFRPRPC1C1M2MP2NC2NZ1PQP2PE2POQR1ZQD2:DA DAXrDDsDDRrDIsDIR3*HLDOCALJXI8ACLIBACRO:@OVBVIAMErDEGOPjOPQRRARG*RIsTDRsTIR*UTR UTsUTDsUTIAGECHLOPR"OP UBLICUSHS$USHALARC!EPTZ&ESETR(ETsMETIsEETN IMY*LjLALCZ,LCkLCAroLDMNCNZPPEPOY.RjRARCZ0RCkRCArgRD"STR2STZBB*BIR4BCj7CFZ6ET"ET3"HLD0IMZ8LAPHLZ:RAZF{Hԗ:<ė]:<=ėHԗ]>F]hAÖHԗ]hU:<ė>Fė5{:<=ė>F@ÖHܗ$J L:<`ėUHܗ]B:<(:<ė>F]HܗJ ė>F]Hܗ:< ė:<ė>FTԗO$e7:<(>Fڴ{:<̗ :<F]ė>FU)e:<̗(:<27-Jul-81 PAGE := Q#*<#"<*<#">>> > > >!G# ¾ # o2=#  x# eo# S==x*+=+B 2=*+=++":<$]y  :<Ö:<Ö>{:F):<F>FF5{H$]:<ʮ ė:<ė>FyBOHėJ ̗]:<ė/H$]:<ʮ(:<ė Ü:<HܗJ ̗]:<̗Gx ė> Ö:<ė::>]:<̗ ګ:FyC͖"2>2>:<(>"FÌ:<ė>2FÌ:<:< ė:<`ƝF͖ė]:<ė>+=B "+=G-g:<o|D-B} |B\DzHʂOIQĻz͡OVQĻ ã!B BV0Ե)_#_͊DSͺHS!B 0)T]))_Í!B 0Ե)))_ä!B G0 ))))_ýHõ:<!B 0 ܵO:<=ܵ<_PH$ "͊"͡0 V0 :=2=Ҥ= ʤ! ʤT#L=G#Y!8 ~q2< ;ʞ ʞ• & | •0 ã*+= # #7 ,#~G įxw+"+= Y:<ʓ:<7͍  *@wF2*F>FyK͖]:<w:FGÖ:<"]`ƝFp:<͖"@{ė>:FUė:< Ö5]>6FKB"@{"YPy:<O:<ė>FyWÖ!>>AFwx# -:<G:<7\*=#"= M'*= >͇ %*=:t@`))0) ‹0ˆ:>:>ڿʼ6!6"6'6*#"=ÙG:>@2>:<\*=#"=:>2>!>~7 Gx2>">ģ:<>(~@x##^#VO6G#^#V"=y y£ã7͍ "$=~Bڍ~8:<Ļ2<##~2 å ã:=X '¤ ͺ'S$¤d OãXOR AND NOT MOD SHL SHR OR EQ NE LT LE GT GE LOW HIGHNUL TYPE :< :<:2>2=2<2>2>2>2<2<9">*@͇ 3A!B!c!!ڳ K!O2>h!=y!! !$"y2!!̻!!h!:ó ͩ~@î~ʳ#~?Gxʔ#~12>>A͸bM#^#V"=G}2>#^#V">>C+#^#V+~t><2>= G>>B#~„Ϳ:>@>¡>2>>A͸  2>{2>!>"$=ͣ:<*=##"=:>G:>@x̍:>G}*= #"=C B x x1.6!36**>##~#fo6"6'##"=}xJ:>@xʂCBx*=++*>#:=G~w#s#r#*=s#rC B \:>2>:>x}­z ģ2>*>#~2>*=>͇ %*=:t@)0) 0"=0 ,!:>!2>>ó Ä!:4!K!!xh!G:$"y2O! x怱!>w*+=+N{*>2>z̻̻ |= yWx=z"z"ʘ """ Ļ>Gh!GØ ">?z7" ͏""=">y2?!"o>g~#fo:?Ļʛ"yb!"=yͱ%"*="""*>"{ͱ%zñ%   5DExx0:":=A:=A: =H:=M:= x:= i:@+2>ù>+2>:= ¹:=:= :=:=>C2>:@?:=:= !=4:=j:@?:q@>8L!= ~#^:=T:?=:?!=~#00^">=:=B> ^!-=~# T ^E> ^> ^O:@?y8LðJ>2=:=ʇ> 8L!>!*=#|+:=ʞ*=#"=:=|ʸ>-8LT!f>TT>S8LÞ~#8LPX |>:^ MACRO-80 3.43 Track-Info  N          #?#I#S###3$$$##6%A%M%Z%`%i%%%j#%%%&&(&H&i$zW{_i$zW{_i$zW{_*>|/W}/_:§%ñ%*>|/W}/_:§%ñ%i$zʑ#)Ç#i$#+}zW{_×#*>::y$>§%ñ%*>,$::§%ñ%{_zW*>N$: §%ñ%N$ DM!>=g$))U$U$::͘$: §%ñ%z̻zB$|G|ʽ$|$$$|/G}/O!>$ $7>{_zW}o|g=$|g}oɯO_yW*>~w#w#w#wO ~Ի#~%-Ļ,"(=T-:=2=Ux©x 2=*(="$= x.h :>"(=~w|2=T-x©*(=,#~¯~@ w#s#r#*=s#r.zK:?\/:<č/!<4~=A.!B?~-!>~-!@#B?~# - -- - -!;?p#"$=ͣ'!N"@; (."$=~w#~@P/~.#^#Vͣ.*= ͣ *={ģn*+=h %!"="=}2=j!/!W?>|;T:=8j!=44!/!?>|;T͙/*<|ʭ.:@<2@?2@?ó.!1/͵/!4/͵/*<|.>,8L:@<>,İJ:@<2@?2@?!D/͵/͙/.}ͣ*z%|%|͘$$: §%ñ%>O!G~%͇ T%~%͇ ?T%~%͇ W_ ~%m%~%͇ T%~%{_zT%7T%?T%:*>\W:ç%*>]W::>@2>!>4~?%o%$w5y%:>2>i$}L_i$}L_i$}:_i$}0_i$}Lo{L_i$}?_*=*=͇ : 2=Ͷ,h x 2=xGʖ&:=–&*=*=͇ :=G*="=:<}"= :=&:<ģ:A?':A?ȯ2A?O '+>G2=<2A?2=*=Ú&'+>2A?G2=*=>|/+.ͣ:q@(/8L>8L͝KKNo Fatal error(s) Warning(s):=Gͣ.Ͳ/!k/͵/#Ù/REPT/IRP/IRPC/MACROUnterminated Ͳ/!/͵/#> T> T:@<> ͰJ> ðJ!/:@<ñFConditionalSymbols: Macros: !9*@͇ 3:?!"@" @*?0*@+<2?2?2?*@$͇ #0"?%4;0~<=W0:?<2?:?:?=2?<#~C0:?C0:?C07"?:?=2? &¶0*+=~ ʴ0 ʴ0O 0"+=´0>&2?#1&¶0:?»0>& :2?*?~0=0O+0 0x+~00:?*?~!1&'+>2A?G2=*=Ú&:A?Ķ,:==E'o& ^#V*=͇ s#r2=*=##0': :Ã::?1*@4.2*?~2G+2~/_1~+2=G+~+2ͽ32+<=(2+ 2~>.ͽ3ͽ3?*?O DEO g2=ʋ3%ʸ2,ʕ3 ʕ3 ʕ3;ʕ3!# ʲ3w+ y2"`3V3ͩ(:= 3:<32PX 2|2>:K3)073>:<̝!< )=: 4=2 =<2<: 5):<_2>W!<7~$)G*T],Q*zW* >*#*+=z̗}O|G:= O Oė7 #~@w ~įwy,n*>Oç*f>; *+=+~# **ʮ*î*#"+= (—# '—O͢*0 # )ė: >2=;+2=;+2=)3073=23D#3E#3 >0K3x,3x0:73 K30O:K3>0K3y*`3w+"`30 *`3ò2Ow+ t3 ʷ3c3w+ c3y2ʇ3w+ò2ʲ23ð2°2{=*+=+~ 0 0 ʚ3Ú3!=͇ 3#6 +#1&3:#1!  3#1!3l ?Stack overflow, try more P switches ͩ(:= 44"?/H4> VC4O :O -0i4-= : ^4ɯ :̓:!*@*?!!44͇ º4:?£4xº4*?y9o02?*?W:4-=m:ͽ3 4*?*?*?"?"?"? bkÐ4:?2?;+O )+ )+  +~@w,O »+>2=>2=;+2=: >2=;+_+>_+:r@/o:<;+}2r@2=;+>2<;+2<;+>2<ͩ(2!=w#"$=:<ģ,+:=» *+=+3N,N=2=*+=~#"+=!, (—# '—O —'—# )—: :<:=Z,>=!B?G~¯w#f,pͶ, /—O Į,/—: #~¯~$w'+"=>2=!"=Ö&>2=:=O , ,~w#~d,~w,,͗,wͯ,~@@Track-Info ! N!!!!!!!! !5ů2?: û:?o5O :O OC5yK5y S5y@`5:?=2?:?<2?:?:<(:?#~>5)!ɷ/"?N2O:= ʕ5*?o0y6+,ė5# <ėw+:= ,6G5q2 )6>,65 <2? ë5 "6:?6,6 ;,6<6>6,666 w+5:?,66+0xė"?&i"?R6A4>y5C4* @>2?3-0ʖ6 ʛ1;ʐ1'ʆ6"ʆ6#1l6Gz0 ʛ1ʀ6Ç6" @ :̓:!*@*?*?!!64>2?"?͇ 6:?6x6*?##~#6+æ4W:7-=WQAQBQCQDQEQHQLQMbSPcPSWQIQR bBCbDEbHLbAFjIXDjIYdrNZqZrNCqPrPOrPE:1:ͽ3 6*?4 bk6 ʗOͰJ# ;7ͰJ,7> ͰJ> ͰJ:= : ʗ2?O i7: Z7r7A4C4!-=:?O~ʊ7 #~7!ɷ #"?~(w/"?N2 ,ʨ7w+2?2?w#w͔9 :s#r:"@*@͋9s#r{_* @{̟9*@w{<:F:" @{_͔9zʟ9*@}g:}o~W:{|:F:{_͔9{ȯw#w*@s#ry9*@͋9q#p* @{:*@" @~{_͋9{_{:F:*@*?:?:*@%99i zi W{_*@*@99BK*@"@x*;+w ;"@4;ô9*&=*@99i zi W{_*@99BK*@*&="@ "@xz; w#m;2>2>O!^#V#͜;…;:>Tz^#V{¥;};++V+^{ʯ;w#w+++å; F#"$=~@#~Ĺ<~#^#VG<ͥ<_d<{j<{@u<{m<{_!`~8L_<###~#8L <>1<5R<:>wT!=4:=j*$=~@w> a<> 8L>*>M>C>U8L<*$=#{G#^#V#^#V"=}"$=#~ ģ>I8L!="=*=6!=~G#^#VͣP?Command error?File not found?Can't enter file~ͰJ#ñF!FF!FF!FͱF=GCOMSCNF"AF!G:FGTrack-Info ! N!!!!!!!! !:FO*.G# G!G GG2F*+++"g@*A:s@2j@*g@0J:.F =G2w@2n@2u@2t@2q@2r@2p@2v@<2o@2m@Fů2f@HAͩHA ŒG>2f@!x@͝H> 2A2A2Ay,2p@¶G:f@2p@H#A:q@G AͩHA:A2l@ 2k@G:f@@2f@!@͝Hy=7H 7ͩHAH 7!@͝H:f@!x@}H!@:q@8H@ A> =.H}H:n@MH:k@MH:l@2n@ _2FKJJ*g@##:o@2j@GA ~—HHw# H #ÍH w# H:i@!A~ Hw#ºHJ:7>HxH͙JOx=y I[A@2AJx H AB7΂)oyJFS ^w9NQr7Br<&#y/$R$H@s2 3r9Co99rr$TI͙JHT$I͙JT7͙JY7HL>I͙JS7͙JT7>HR7͙JD7R7>H> eI6 #=]Iy.2i@JAx}IʊI͙J~Iy/y͙JL£I2n@͙JOËIN®I2u@ÜIO¹I2t@ÜIRI2p@ÜICI2q@2n@ÜIMI2v@ÜIII2m@ÜIXI>2r@ÜIZJ2m@ÜIP7:o@<2o@ÜI͙J[-J0-JA)J:-JJO!~6G_J#~ HJ:J-Fx+#YJ~NJ2s@J2s@:j@rJJ>*ͰJ ,F> ͰJ:-F!.F"~Fo>g6 #> w~# ʙJ ʙJ J#"~F_*~F+~ #0J#"~F+~7ȷ> ͰJ> ðJ*B!"(B!@:n@KTndE$$E8ADRCCPETe$TBIOST$3BIOS2:x$DE8OBUF5128d4%45(7CONINM45HTCPOSwT5U$huCURON/d5U%44VCURTYP DE$DPBC/DE$HwDPBE7dU%$4xFDRAWEdE$TFLUSHztTHGSECĄXnINIGDGDx$DTMAXLIN4U%$%HMERRDS:U%%%x䏎MOTTIMz%D8GPARTDRye$U$(ǎPRERV1=$U%c(7PSIZCz4HRDIDEhz$THSECTRA"z4TE4᷾SELMSTz4UDD΅SETSECz4UEE$STCK1_5D48TTIME-(A!"&A!x@:p@AK~AKcK 8L> 8L>8L*(B*B@L*B@ÑK:p@ʕH:x@K>͟L*&A(Ax@L(Ax@ÑK|}Lƀ)`ioL> 8L> 8L> 8L:n@ʕH:@<ʯJM*(B|gL#"(B)Bw*B!@>cM =oL!(A>!x@oL:p@ʕH:x@J*&A|=̔L#"&A'Aw:@@=UDTVTXTATR8u$DX?WRITEg|UuE9MAXLIN4U%$%HMERRDS:U%%%x䏎MOTTIMz%D8GPARTDRye$U$(ǎPRERV1 lc0<63`0mmf3f>|x x`0l1v61< 3Y610f31`<0 ?00`0 09p(p0!jPT.`p\'2W`o f!өy@d٠gpvM!=L!> M_!w@ 5M 3M<3M~=w4{ JM> 8L~ ͰJ!MͱFJDISK FULL!M:>NN@ҲNw#2i@.yN!yNw#RN2i@.ʀN!gNÀN6 #yN:i@.ʍNw#NpMMʲN2M2M:M=NMMN!M"M>2M*M~N7N#"M0}^n Y/Q2"D'R@xXW(>! :!uNjMma_E$m:!:"`Y/Q=p]OHfݤvjfۨh<뵒s|B9u+l3Bw\@?^5{0Gu LbLE![(1?$ ;N$ ;#MmGp$4w CGp$4w CGp$4w CGp$4wmY,VDf(X0K(DCS͚wH < ],K͚wGN(4-TvtZɅYl*2e0!]a a@"ŻĀTrack-Info " N"""""""" "SSDHQ RNPAGEST44x1Q92P5! `6Y,RLQ(a,I$R! A Qd1 #\`@p,`ـy<Sq8ai4S!a Q D!%|B!H04 PL$`, P < `0Z6 U|=Wx;ct9W#`[MFM+ -q`@p,D@@l5VMh3c-d1V# OĢM$ҩi6/ `00"JBLR(R41 !dE)JQ)H (IY+1),A LD A,(IX+ORELS+2) LD (IY+2),A LD A,(IX+ORELS+3) LD (IY+3),A LD L,(IX+ONUMS+0) ;pocet sektorov do HL LD H,(IX+ONUMS+1) LD A,(IX+ONUMS+2) ;je pocet sekt. vacsi ako 65535? OR (IX+ONUMS+3) JR Z,SETC2 LD HL,0 ;max. podporujeme 65536 sektorov SETC2: DEC HL ;uloz max. rel. sektor LD (IY+4),L LD (IY+5),H RET ;test, ci je particia korektna CPM ;vstup: IX=adresa tabulky particie ;vystup: Z=0 neni korektna CPM ;Z=1, HL=DPB particia je korektna CPM ;nici: HL, HL', AF TSTCPM' !J`4 )!J84 ()%A4 & b!J 4 #b!J 4 )*JQ0@E*JQ@E#D P@@ &]@7 <~Wow͚3m6n63h6t$Ĕl/@YPiAM. My#M!@V M!!,V %>4M>}ڣM>Z4Av]i` |G0cHi 6dV lrV`%Y^b~0 YAΗiD;H K6K m4vY" +iD: PUSH BC PUSH DE CALL TSTCP0 POP DE POP BC RET TSTCP0: LD A,(IX+OFSYS) ;test filesystemu CP PIDCPM ;=DBh (CPM)? RET NZ ;neni CPM LD L,(IX+ORELS) ;dolny word LBA zaciatku particie do HL LD H,(IX+ORELS+1) PUSH HL ;dolny word LBA do zasobnika EXX LD L,(IX+ORELS+2) ;horny word LBA zaciatku particie do HL' LD H,(IX+ORELS+3) PUSH HL ;horny word LBA do zasobnika EXX LD DE,BUF512 ;sem nahrame bootsektor LD B,1 ;1 sektor (512 bajtov) CALL RDIDE ;citaj bootsektor JR NC,fqC^W/j(63`:DfP2}Q@m?P2` +iFfqCuRP5 8@ >}æq[$c) I@.@\< LAvR@P ?m)6O!^2̖h!""@H F,*aR`h3Tgi* UT@tCB D n͸[6!#t2t!a ٷ@ bk#y A/;Bh vCn/Ӹ~?N&;ۦct nհ1 R z0>2R= (:>/:}18=0/ <87(:>/I:]1I8=0< <8˯:A802O!2 DRDIR EQU 33 DWDIR EQU 34 DLEN EQU 35 DSRDA EQU 36 DINITD EQU 37 DWDIRN EQU 40 .RADIX 16 IBOOT EQU 0 IWBOOT EQU 3 ICONST EQU 6 ICONIN EQU 9 ICONOUT EQU 0C ILIST EQU 0F IPUNCH EQU 12 IREADER EQU 15 IHOME EQU 18 ISELDSK EQU 1B ISETTRK EQU 1E ISETSEC EQU 21 ISETDMA EQU 24 IREAD EQU 27 IWRITE EQU 2A ILISTST EQU 2D ISECTRAN EQU 30 PARAM1 EQU 5C PARAM2 EQU 6C LGTFBUF EQU 0A5 BDOS MACRO WORK LD C,WORK CALL 5 ENDM BIOS MACRO WORK LOCAL BI*|(:_O4* ~2y!:!*!K*!\*> >!~#G~͈w# _!~ !]T7R> *0r_!F#~͙ͼ1y&!$*Ͱ !^#V!DMR(!MDR(_z$˯A!MDs#r&!O'*Ͱ !Yb]t!͖!YM˯A(dEg:֚2$iٳGLɛ-}v&+ئ'l#{!6ASQC1WȨ(FU%rhVOSK LD HL,BIOSK PUSH HL PUSH DE LD DE,WORK-3 LD HL,(1) ADD HL,DE POP DE JP (HL) BIOSK: ENDM .RADIX 16 .COMMENT | DIO - MODUL PRE ULAHCENIE VSTUPNO-VYSTUPNYCH PRAC SO SUBORMI. ============================================================= -Typy premennych: FILE - premenna so strukturou: 0000 .. 0023 - miesto pre rozvinutie FCB 0024 - pocet aktualnych bajtov v buffri DMA 0025 .. 00A4 - buffer DMA -Vstupne body: RESET - Otvorenie suboru pre cHw7JcBx8eDqf݁9bIMRKaTtYXO[s3pP`N͔@uy"Z 4);Ά0<5>j*\o_k,z?m/.~]=^|nFU%rhV͈w# _!~ !]T7R> *0r_!F#~͙ͼ1y&!$*Ͱ !^#V!DMR(!MDR(_z$˯A!MDs#r&!O'*Ͱ !Yb]t!͖!YM˯A(dEg:֚2$iٳGLɛ-}v&+ئ'l#{!6ASQC1WȨ(FU%rhVitanie po jednom bajte. ----- - VSTUP: HL - adresa premennej FILE DE - adresa prvych 12 bytov FCB - VYSTUP: CY=1, A=0FF - subor neexistuje CY=0, A - poradie polozky REWRITE - Otvorenie noveho suboru pre zapis po jednom bajte. ------- - VSTUP: HL - adresa premennej FILE DE - adresa prvych 12 bytov FCB - VYSTUP: CY=1, A=0FF - adresar je plny CY=0, A - poradie polozky WCLOSE - Uzavretie suboru urceneho pre zapis po jednom bajte ------ - VSTUP: HL - adresa premennej FILE - V!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'^!*"HE!zd kTrack-Info & N&&&&&&&& &YSTUP: CY=1 - disk je plny CY=0 - OK READ - Nacitanie 1 bajtu zo suboru. ---- - VSTUP: HL - adresa premennej FILE - VYSTUP: CY=1 - bajty uz nie su CY=0, A - nacitany bajt WRITE - Zapis jedneho bajtu do suboru. ----- - VSTUP: HL - adresa premennej FILE A - zapisovany bajt - VYSTUP: CY=1 - disk je plny CY=0 - OK SETHEAD - Nastavenie disku, stopy, sektora a DMA ------- - VSTUP: A - cislo diku BC - cislo stopy DE - cislo sektoru HL - adresa DMA -VYSTUP: CY=1, DEFW 0 PUAL: LD (PU),HL EX (SP),HL PUSH DE PUSH BC PUSH IX PUSH IY PUSH AF PUSH HL LD HL,POAL PU1: EX (SP),HL PUSH HL LD HL,(PU) RET POAL: POP AF POA: POP IY POP IX POP BC POP DE POP HL RET PUA: LD (PU),HL EX (SP),HL PUSH DE PUSH BC PUSH IX PUSH IY PUSH HL LD HL,POA JR PU1 END  BIOS ISECTRAN POP BC PUSH HL BIOS ISETTRK POP BC BIOS ISETSEC POP BC BIOS ISETDMA XOR A RET PU: A=#FF - disk nie je CY=0, A=#00 - OK | LGTFBUF EQU 0A5 PRIPFCB: PUSH DE PUSH HL LD D,H LD E,L INC DE LD BC,23 LD (HL),B LDIR INC HL LD (HL),A POP DE POP HL PUSH DE LD C,0C LDIR POP DE RET RESET:: CALL PUA LD A,80 CALL PRIPFCB BDOS DOPEN CP 0FF CCF RET REWRITE:: CALL PUA XOR A CALL PRIPFCB PUSH DE BDOS DDEL POP DE BDOS DNEW CP 0FF CCF RET READ:: CALL PUA PUSH HL POP IX BIT z ͅz({sͅͅ:G(\$:/M7?:/Z7?%*/[/:=ʚ=ʮͅ1ͅ1*|ͥͅ6ͅx>9ͅy>;ͅoͅ  (ͦ_{08ͅoͅ (ͦ_{A(N <%85 3*/[/K/ͅa ͅa ͅa {&ÅDͅB7a W͕ͅ$~&~&~&~w&7C/S/"/>M2/>Z2/%͕$͝%c'͝%%!/Õ$s+1->(7,(IX+24) JR Z,READ1 PUSH HL PUSH HL LD DE,25 ADD HL,DE EX DE,HL BDOS DSDMA POP DE BDOS DRSEQ POP IX OR A SCF RET NZ RES 7,(IX+24) READ1: LD E,(IX+24) INC (IX+24) LD D,0 PUSH IX POP HL ADD HL,DE LD E,25 ADD HL,DE LD A,(HL) OR A RET NULDMA: LD DE,25 ADD HL,DE LD D,H LD E,L INC DE LD BC,7F LD (HL),1A LDIR RET WRITE:: CALL PUA PUSH AF PUSH HL POP IX BIT 7,(IX+24) JR Z,WRITE1 PUSH HLP(> 2$ͅ!6s ͕ ί22F(>N(>2\$$$$ %!%(> >{+_ͅa |ͅ&B 8ͥ8Ý%B͞7|(>(wwut u t ͏sWut~  &~u'7B8B8~ r'͑͗͏#Ͷ͞u t ut͗͏sWut͕$*)͋!"Ý%!-]T6$*8ͥ)%*|!͕&"H)"L)~&KL)B 0i`#"P)B PUSH HL LD DE,25 ADD HL,DE EX DE,HL BDOS DSDMA POP DE PUSH DE BDOS DWSEQ POP HL CALL NULDMA POP IX OR A SCF POP BC RET NZ PUSH BC RES 7,(IX+24) WRITE1: LD E,(IX+24) INC (IX+24) LD D,0 PUSH IX POP HL ADD HL,DE LD E,25 ADD HL,DE POP AF LD (HL),A OR A RET WCLOSE:: CALL PUA EX DE,HL PUSH DE POP IX LD A,(IX+24) OR A JR Z,WCLOSE1 PUSH DE LD HL,25 ADD HL,DE EX DE,HL BDOS DSDMA POP DE .Z80 .RADIX 16 GLOBAL PTESTM, PTESTS GLOBAL SETGEM, SETGES GLOBAL SELMST, SELSLV, RESET GLOBAL RDIDE, WRIDE GLOBAL RTOFCHS, RTOLCHS GLOBAL LCHSTOR, GTOR EXT IMULP, IDIV, IADD GSEC: DEFW 1 GHEAD: DEFW 1 SELDRV: DEFB 0 GSECM: DEFW 1 GHEADM: DEFW 1 GSECS: DEFW 1 GHEADS: DEFW 1 PTESTM:: CALL SELMST PT1: PUSH BC PUSH DE LD E,0A LD BC,0 PT2: IN A,(07F) BIT 7,A JR Z,PT3 DEC BC LD A,B OR C JR NZ,PT2 DEC E JR NZ,PT2 XOR PUSH DE BDOS DWSEQ POP DE OR A SCF RET NZ WCLOSE1: BDOS DCLOSE CP 0FF CCF RET SETHEAD:: CALL PUA PUSH HL; HL=Adresa DMA PUSH BC; BC=slo stopy PUSH DE; DE=slo sektoru LD C,A; A=slo disku BIOS ISELDSK POP BC LD A,H OR L JR NZ,SETHEAD1 POP BC POP HL SCF SBC A,A RET SETHEAD1: LD E,(HL) INC HL LD D,(HL) BIOS ISECTRAN POP BC PUSH HL BIOS ISETTRK POP BC BIOS ISETSEC POP BC BIOS ISETDMA XOR A RET PU: Track-Info & N&&&&&&&& &A INC A JR PT4 RET PT3: SUB 050 PT4: POP DE POP BC RET PTESTS:: CALL SELSLV JR PT1 ;****************************************************************************** ;NASTAVENIE GEOMETRIE PRE PREPOCTY RELATIVNYCH SEKTOROV NA CHS A VICE-VERSA ; vstup: DE = pocet hlav ; HL = pocet sektorov na stopu ; nici: AF ;SETGEM - nastavi geometriu MASTER ;SETGES - nastavi geometriu SLAVE ;****************************************************************************** SETGEM:: LD (GSECM ;****************************************************************************** WRIDE:: CALL SCHS RET C LD A,030 OUT (07F),A WRIDE1: CALL WAIDR RET C WRIDE2: OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI DJNZ WRIDE2 IN A,(07F) RRCA RET C DEC D JR NZ,WRIDE1 RET ;****************************************************************************** ;VYPOCET FYZICKYCH PARAMETROV CHS A ICH NASTAVENIE DO REGISTROV ; vstup: HL = virt. rel. sektor (spodnych 16 ),HL LD (GHEADM),DE LD A,(SELDRV) OR A RET NZ SETG1: LD (GSEC),HL LD (GHEAD),DE RET SETGES: LD (GSECS),HL LD (GHEADS),DE LD A,(SELDRV) OR A JR NZ,SETG1 RET ;****************************************************************************** ;VYBER DISKU MASTER ; nici: AF ;****************************************************************************** SELMST:: DI PUSH DE PUSH HL LD A,0A0 OUT (07E),A LD A,0 LD HL,(GSECM) LD DE,(GHEADM) SELMST1: LD bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM bloku dat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; HL = adresa RAM bloku dat ; D = pocet prenasanych FYZICKYCH sektorov ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** SCHS: DI PUSH DE LD C,0A LD DE,0 SC1: IN A,(07F) BIT 7,A JR Z,SC2 DEC DE LD A,D OR E JR NZ,SC1 D(SELDRV),A LD (GSEC),HL LD (GHEAD),DE POP HL POP DE RESET:: LD A,010 OUT (07F),A RET ;****************************************************************************** ;VYBER DISKU SLAVE ; nici: AF ;****************************************************************************** SELSLV:: DI PUSH DE PUSH HL LD A,0B0 OUT (07E),A LD A,010 LD HL,(GSECS) LD DE,(GHEADS) JR SELMST1 ;****************************************************************************** ;EC C JR NZ,SC1 POP DE SCF RET SC2: LD A,B ADD A,A LD B,A PUSH BC OUT (07A),A CALL RTOFCHS LD A,C OUT (07B),A LD A,(SELDRV) OR 0A0 OR E OUT (07E),A LD A,L OUT (07C),A LD A,H OUT (07D),A POP DE POP HL RET ;****************************************************************************** ;CAKANIE NA PRIPAVENOST DISKU S TIMEOUTOM CCA 10 SEKUND ; vystup: CY = 1, ak sa nedockal ; CY = 0, ak sa dockal ; BC = 2078h (parametre pre data port)NACITANIE BLOKU Z DISKU DO RAM ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM, kam treba blok nahrat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** RDIDE:: CALL SCHS RET C LD A,020 OUT (07F),A RDIDE1: CALL WAIDR RET C RDIDE2: INI INI INI , ak sa dockal ; nici: AF, BC, E ;****************************************************************************** WAIDR: LD E,0A LD BC,0 WAIDR1: IN A,(07F) BIT 3,A JR NZ,WAIDR2 DEC BC LD A,B OR C JR NZ,WAIDR1 DEC E JR NZ,WAIDR1 SCF RET WAIDR2: LD BC,02078 OR A RET ;****************************************************************************** ;RTOFCHS - PREVOD VIRTUALNEHO RELATIVNEHO SEKTORA NA FYZICKE PARAMETRE CHS ;RTOLCHS - PREVOD VIRTUALNEHO RELAT INI INI INI INI INI DJNZ RDIDE2 IN A,(07F) RRCA RET C DEC D JR NZ,RDIDE1 RET ;****************************************************************************** ;ZAPIS BLOKU Z RAM NA DISK ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM, od ktorej treba blok nahrat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; nici: AF, BC, DE, HL, HL' Track-Info ' N'''''''' 'IVNEHO SEKTORA NA LOGICKE PARAMETRE CHS ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; vystup: HL = parameter C (cylinder) ; DE = parameter H (hlava) ; BC = parameter S (sektor) ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** RTOFCHS:: ADD HL,HL EXX ADC HL,HL EXX RTOLCHS:: LD BC,(GSEC) CALL IDIV INC DE PUSH DE LD BC,(GHEAD) CALL IDIV RES 4,E RES 6,E PO1),H EXX LD (IX+ONUMS+2),L LD (IX+ONUMS+3),H POP HL EXX POP HL LD BC,1 CALL ISUB CALL RTOLCHS LD (IX+OHL),E CALL CSCOD LD (IX+OCSL),L LD (IX+OCSL+1),H CALL WRMBR RET C CALL CLRBOT RET C LD DE,PMDIS CALL TOP CALL PARINFO LD DE,0 JP ERRMSG CLRBOT: LD HL,BOTBUF LD E,L LD D,H INC DE LD BC,01FF LD (HL),0 LDIR JP WRBOT PRELT: CALL PREPCHS JR C,PRELT1 CALL PRELW CALL PRELR PRELT1: JP MNDIAG RSEC0: DEFW 0P BC RET GTOR: SRL H RR L EXX LD HL,0 EXX CALL IMULP LD C,E LD B,D JP IMULP ;****************************************************************************** ;PREVOD LOGICKYCH PARAMETROV CHS NA VIRTUALNY RELATIVNY SEKTOR ; vstup: HL = parameter C (cylinder) ; DE = parameter H (hlava) ; BC = parameter S (sektor) ; vystup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; nici: AF, BC, DE, HL, HL' ;******************************.Z80 .RADIX 16 MBRADR EQU 0CE00 ;adresa, kde je nahraty MBR sektor BTSADR EQU 0CC00 ;adresa, kam sa nahra bootsektor MBSTRT EQU MBRADR+08 OSSTRT EQU BTSADR ;adresa, kde sa startuje OS XLETNL EQU 6 ;rutina monitora pre novy riadok XMSG EQU 015 ;rutina monitora pre tlac spravy MID1 EQU 'M' MID2 EQU 'Z' DEFB 01 DEFM 'IDEBOOT V1.1 ' DEFB 0D DEFW FEND-FPLACE DEFW FPLACE DEFW FSTART DEFM 'IDEBOOT V1.1, (C' DEFM ')2001 NIPSOFT. M' DEFM 'AREK SMIHLA, F************************************************ LCHSTOR:: EXX LD HL,0 EXX PUSH BC LD BC,(GHEAD) CALL IMULP LD C,E LD B,D CALL IADD LD BC,(GSEC) CALL IMULP POP BC DEC BC CALL IADD RET END  vstup: HL = parameter C (cylinder) ; DE = parameter H (hlava) ; BC = parameter S (sektor) ; vystup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; nici: AF, BC, DE, HL, HL' ;******************************ED' DEFM 'INOVA 20, 85101 ' DEFM 'BRATISLAVA, SLOV' DEFM 'AKIA ' DEFM ' ' .PHASE 1200 FPLACE: FSTART: JP START SLOGO: DEFM 'IDEBOOT V1.1 (C)2001 NIPSOFT',0D SREAD: DEFM 'READING MBR...',0D SOK: DEFM 'OK',0D SRERR: DEFM 'HARD DRIVE READ ERROR!',0D SNOTF: DEFM 'HARD DRIVE NOT FORMATTED FOR BOOT!',0D SHALT: DEFM 'SYSTEM HALTED, PRESS RESET',0D XMSGNL: CALL XMSG JP XLETNL XCLS: PUSH AF LD A,016 CALL 012 POP AF RET ;*************OP AF LD A,ACTPAR JR Z,ASKPA3 XOR A ASKPA3: LD (IX+OACT),A POP AF LD (IX+OFSYS),A EX DE,HL LD (IX+ORELS),L LD (IX+ORELS+1),H PUSH HL EXX EX DE,HL LD (IX+ORELS+2),L LD (IX+ORELS+3),H PUSH HL EXX PUSH DE CALL RTOLCHS LD (IX+OHF),E CALL CSCOD LD (IX+OCSF),L LD (IX+OCSF+1),H LD A,(IX+OFSYS) OR A JR NZ,ASKPA6 LD DE,MCUSC CALL ASKHEX CALL LETNL LD (IX+OFSYS),L ASKPA6: POP HL CALL ASKPS PUSH HL LD BC,010 SCF ***************************************************************** ;NACITANIE MBR SEKTORA Z PEVNEHO DISKU DO RAM ; vstup: DE = adresa RAM, kam treba blok nahrat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** RBOOT: DI PUSH DE ;zatial odloz adresu RAM LD A,0A0 ;bootujeme MASTER disk OUT (07E),A ;nastav MASTER LD A,010 ;prikaz RESET OUT (07F),A ;urob RESET L SBC HL,BC LD D,PIDF12 JR C,ASKPA4 SBC HL,BC LD D,PIDF16 JR C,ASKPA4 LD D,PIDBIG ASKPA4: LD A,(IX+OFSYS) CP PIDF12 JR NZ,ASKPA5 LD (IX+OFSYS),D ASKPA5: POP HL LD BC,0800 CALL IMULP EXX POP BC EXX POP BC PUSH BC EXX PUSH BC EXX CALL IADD32 LD BC,1 CALL ISUB CALL RTOLCHS INC HL LD DE,0 LD BC,1 CALL LCHSTOR EXX POP BC EXX POP BC PUSH HL EXX PUSH HL EXX CALL ISUB32 LD (IX+ONUMS),L LD (IX+ONUMS+Track-Info ' N'''''''' 'D C,0A ;timeout zhruba 10 sekund do C LD DE,0 ;maximalny timeout do DE RBLK1: IN A,(07F) ;je disk busy? BIT 7,A JR Z,RBLK5 ;je ready, chod citat DEC DE ;je busy, dekrementuj 1. timeout LD A,D OR E JR NZ,RBLK1 ;vrat sa, ak 1. timeout nevyprsal DEC C ;dekrementuj 2. timeout JR NZ,RBLK1 ;este pockaj na pomale disky SCF ;timeout vyprsal, disk ma smolu POP DE RET RBLK5: LD D,2 ;pocet prenasanych sektorov LD A,D OUT (07A),A ;nastav IDE na pocet prenasanych s!e j1  ʾ˯ƿ02U:4*[U~2V0_~#G~#/Oe|T&+| >?)TT͋>?z0 )T<( >/)T!8G!V~x(N  ? !iw##q!X !w!!VN ?V(/>?)To:V}Oeekt. LD A,1 ;parameter S (sektor) do A OUT (07B),A ;nastav sektor LD A,0A0 ;parameter H (hlava) do A OUT (07E),A ;nastav disk a hlavu LD A,0 OUT (07C),A ;nastav spodny bajt cylindra OUT (07D),A ;nastav horny bajt cylindra POP HL ;cielova adresa do HL LD A,020 ;prikaz pre citanie OUT (07F),A ;posleme na command port RBLK6: LD E,0A ;timeout asi 10 sekund do E LD BC,0 ;maximalny timeout do BC RBLK2: IN A,(07F) ;citaj stav disku BIT 3,A ;je pripraveny? JR e$e B>O$8!+| Mz >/M?ɯ) 1* Formtovac program pro floppy. Copyright (c) 1991 mZx soft. $ Zadej jmno disku nebo CR - zpt systm. : $ Stiskni njakou klvesu$ Formtuji... 0$ Ovuji.... 0 $ A je to hotovo. $ Chyba na disket !!! $PN 2N N PN N PN N PN N PN N NZ,RBLK4 ;je pripraveny, tak chod uz citat DEC BC ;dekrementuj 1.timeout LD A,B OR C JR NZ,RBLK2 ;este cakaj, ak nevyprsal DEC E ;dekrementuj 2.timeout JR NZ,RBLK2 ;este daj sancu pomalym diskom SCF ;timeouty vyprsali, RET ;vrat sa s chybou v CY RBLK4: LD BC,078 ;C=data port, B=dlzka sektora INIR ;teraz rychlo citaj 256 bajtov z HDD IN A,(07F) ;bola nejaka chyba? RRCA JR C,RBLK3 ;bola chyba, vrat sa s CY=1 DEC D JR NZ,RBLK6 ;chod citat dalsi sektor RBLPN N PN N PN  N PN N PNNNNPN 2N N 6N  N 6N N 6N  N 6N N 6N  N 6N N 6N  N 6N N 6N  N 6N N K3: EI RET START: CALL XCLS LD DE,SLOGO CALL XMSGNL CALL XLETNL LD DE,SREAD CALL XMSG LD DE,MBRADR CALL RBOOT JR NC,ST1 CALL XLETNL LD DE,SRERR ST2: CALL XMSGNL LD DE,SHALT CALL XMSGNL HALT ST3: LD DE,SNOTF JR ST2 ST1: LD DE,SOK CALL XMSGNL CALL XLETNL LD HL,(MBRADR) LD A,L CP MID1 JR NZ,ST3 LD A,H CP MID2 JR NZ,ST3 LD A,(MBSTRT) CP 0C3 JR NZ,ST3 LD A,(MBSTRT+2) CP MBRADR/100 JR NZ,ST3 JP MBSTRT FE6N N 6N N 6N N 6N N 6N N 6NNNNN 6N N 6N N  6N  N 6N N 6N  N 6N N ND: .DEPHASE END  CALL RBOOT JR NC,ST1 CALL XLETNL LD DE,SRERR ST2: CALL XMSGNL LD DE,SHALT CALL XMSGNL HALT ST3: LD DE,SNOTF JR ST2 ST1: LD DE,SOK CALL XMSGNL CALL XLETNL LD HL,(MBRADR) LD A,L CP MID1 JR NZ,ST3 LD A,H CP MID2 JR NZ,ST3 LD A,(MBSTRT) CP 0C3 JR NZ,ST3 LD A,(MBSTRT+2) CP MBRADR/100 JR NZ,ST3 JP MBSTRT FETrack-Info ( N(((((((( (1 )4*~2YZ:Y>W(J K$-! DM>$ _> ^:Z:Z$:Z:1  :˯AO4* Y|( Q Z:Y>W(J K$=! DM>$ _> .'T K͘ Em  O.4.0.,.!T.$T +.'T m![&:Y>!Z:/:Y}8 0/ <8:Y>!Z:/:Y]8 F SP,STACK LD HL,STACK LD E,L LD D,H INC DE LD BC,(FSIZE) DEC BC LD (HL),0 LDIR LD HL,FILE LD DE,FNAME CALL REWRITE JR C,ERR CALL GETBIOS ; JR C,ERR LD HL,STACK LD BC,(FSIZE) WR: PUSH BC PUSH HL LD A,(HL) LD HL,FILE CALL WRITE POP HL POP BC JR C,ERR INC HL DEC BC LD A,B OR C JR NZ,WR LD HL,FILE CALL WCLOSE JR C,ERR OK: LD DE,MOK JR MS ERR: LD DE,MERR MS: BDOS DMSGOUT LD SP,(OLDSP) RET MERR: DEFM 'ERROR' DEFB 0D,'$' MOK: DEFM 'OK' " z0>2"= Koprka operanho systmu CP/m 2.2.LEC. esk verze (C) 1991 mZx soft tu systm ..... $ Zadej oznaen disku k zpisu nebo CR. : $ Stiskni njakou klvesu$ Zapisuji systm. $ Chyba na clovm disku ! $ Systm nenalzen ! $ Chyba na disket !!!! $ Zpis ukonen . $ystem.. $ Write error onDEFB 0D,'$' FSIZE: DEFW 1600 SEC: DEFW 14 TRK: DEFW 0 DMA: DEFW STACK NOSEC: DEFB 24 NOSEC2: DEFB 1C OLDSP: DEFW 0 FNAME: DEFB 0 DEFM 'BIOS BIN' FILE: DEFS 0A5 DEFS 0100 STACK: END ALL WRITE POP HL POP BC JR C,ERR INC HL DEC BC LD A,B OR C JR NZ,WR LD HL,FILE CALL WCLOSE JR C,ERR OK: LD DE,MOK JR MS ERR: LD DE,MERR MS: BDOS DMSGOUT LD SP,(OLDSP) RET MERR: DEFM 'ERROR' DEFB 0D,'$' MOK: DEFM 'OK' ||} _ x  7x )jK7K7ˣ˳<!'KB'!K'KB͋K' ͋ PQVacdeu !&*FAT12 XENIX DOS16 EXTEND BIGDOS NTFS SPLIT BtMgr DM R/O DM R/W GB Speed 386/ix NET286 NET386 PCIX MZF IDEDOS MZSWAP CP/M BBT NonDos S(!~]T?6>U#w>#w:U:S !~~( y!~Շ__ *!=̈́nf N F n f NF͑*[K<|eoy?o}?O ;****************************************************************************** ; ;KOD MBR ZAVADZACA PRE 8-BIT. VERZIU IDE PRE MZ-800 ;Verzia 1.0 beta 5, 7. 11. 2001, (C) NIPSOFT ; ;Kod sa po prilinkovani k uzivatelskemu programu bude nachadzat ;medzi globalnymi adresami ADMBR1 a ADMBR2. Odtial ho treba premiestnit ;do MBR sektora harddisku od ofsetu 0008h. ; ;Bootovaci program musi najprv preniest cely naformatovany MBR sektor z HDD ;do RAM od adresy CE00h. Potom moze predat riadenie MBR zavadz.Z80 INCLUDE CPM EXT RESET,REWRITE EXT READ,WRITE,WCLOSE EXT SETHEAD .RADIX 16 GETBIOS: LD C,0 BIOS ISELDSK G2: LD BC,(DMA) PUSH BC BIOS ISETDMA POP BC LD HL,80 ADD HL,BC LD (DMA),HL LD BC,(TRK) BIOS ISETTRK LD BC,(SEC) BIOS ISETSEC BIOS IREAD RRCA RET C LD A,(SEC) LD HL,NOSEC INC A CP (HL) JR Z,G1 LD (SEC),A JR G2 G1: LD A,(NOSEC2) CP (HL) RET Z LD (HL),A XOR A LD (SEC),A LD A,2 LD (TRK),A JR G2 START:: LD (OLDSP),SP LDTrack-Info ( N(((((((( (acu instrukciou ;skoku na adresu CE08h. ;****************************************************************************** .Z80 .RADIX 16 ;defaultova ciselna sustava bude 16 ADMBR1:: GLOBAL ADMBR1,ADMBR2 ;adresy, medzi nimi je ulozeny MBR kod MBRADR EQU 0CE00 ;adresa, kde je nahraty MBR sektor BTSADR EQU 0CC00 ;adresa, kam sa nahra bootsektor OSSTRT EQU BTSADR ;adresa, kde sa startuje OS XLETNL EQU 6 ;rutina monitora pre novy riadok XMSG EQU 015 ;rutina monitoraLL XMSGNL ;vypis chybovu hlasku v DE LD DE,SHALT ;a zastav pocitac CALL XMSGNL HALT OSBOOT: LD HL,BTSADR+OIDENT;adresa identifikavneho slova AA55h LD A,(HL) ;spodok ident. slova do A INC HL ;zvys adresu CP 55 ;otestuj spodok ident. slova JR NZ,OSERR ;particia asi neni naformatovana LD A,(HL) ;vrch ident. slova do A CP 0AA ;otestuj vrch ident. slova JR NZ,OSERR ;nesedi, particia asi neni formatovana LD A,(BTSADR) ;nacitaj zaciatok bootsektora CP 0C3 ;je tam inst pre tlac spravy GCYL EQU MBRADR+2 ;geometria disku - parameter C GHEAD EQU MBRADR+4 ;geometria disku - parameter H GSEC EQU MBRADR+6 ;geometria disku - parameter S PTABLE EQU MBRADR+01BE ;adresa partition tabulky ACTPAR EQU 80 ;priznak aktivnej particie OACT EQU 0 ;ofset priznaku aktivnej particie OFSYS EQU 4 ;ofset priznaku operacneho systemu ORELS EQU 8 ;relativny sektor zaciatku particie ONUMS EQU 0C ;pocet relativnych sektorov v particii OIDENT EQU 1FE ;ofset identifrukcia skoku? JR NZ,OSERR ;neni tam skok, a zrejme ani OS JP OSSTRT ;riskneme to a skocime do bootsektora XMSGNL: CALL XMSG ;vypis hlasku v DE JP XLETNL ;a daj kurzor na novy riadok ;****************************************************************************** ;NACITANIE BLOKU Z PEVNEHO DISKU DO RAM ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov (max. 127, ; aj tak by sa ovela viacikacneho slova AA55h .PHASE MBRADR+08 ;nastav adresu, kde zacina zavadzac MBOOT:: JP BOOT ;CE08h - MBR sluzba BOOT MRBLK:: JP RBLK ;CE0Bh - MBR sluzba RBLK MRDERR:: JP RDERR ;CE0Eh - MBR slozba RDERR MOSERR:: JP OSERR ;CE11h - MBR sluzba OSERR MERROR:: JP ERROR ;CE14h - MBR sluzba ERROR MMSGNL:: JP XMSGNL ;CE17h - MBR sluzba MSGNL MRTCHS:: JP RTOCHS ;CE1Ah - MBR sluzba RTCHS MIDIV:: JP XIDIV ;CE1Dh - MBR sluzba IDIV BOOT: LD DE,SCPYRG CALL XMSGNL CALL XLETNL LD IX,PTA do RAM nezmestilo) ; DE = adresa RAM, kam treba blok nahrat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; nici: AF, BC, DE, HL, HL' ;****************************************************************************** RBLK: DI PUSH DE ;zatial odloz adresu RAM LD C,0A ;timeout zhruba 10 sekund do C LD DE,0 ;maximalny timeout do DE RBLK1: IN A,(07F) ;je disk busy? BIT 7,A JR Z,RBLK5 ;je ready, chod citat DEC DE ;je busy, dekrementuj 1. timeout LD A,D OR E BLE ;adresa partition tabulky do IX LD B,4 ;max. pocet particii LD DE,010 ;dlzka partition info B1: LD A,ACTPAR ;priznak aktivnej particie CP (IX+OACT) ;je particia aktivna? JR Z,BOOTP ;je aktivna, chod bootovat B2: ADD IX,DE ;nebola aktivna, skus dalsiu DJNZ B1 ;skusaj, pokial nie su otestovane 4 LD DE,SNOACT ;nenasla sa ziadna aktivna particia, JR ERROR ;skonci s oznamom chyby BOOTP: LD A,(IX+OFSYS) ;priznak filesystemu do A OR A ;je tam vobec filesystem? JR Z,B2 ; JR NZ,RBLK1 ;vrat sa, ak 1. timeout nevyprsal DEC C ;dekrementuj 2. timeout JR NZ,RBLK1 ;este pockaj na pomale disky SCF ;timeout vyprsal, disk ma smolu POP DE RET RBLK5: LD A,B ;pocet prenasanych sektorov ADD A,A ;vynasob dvomi - mame 8 bit IF :-( LD B,A PUSH BC ;aj pocet prenasanych sektorov OUT (07A),A ;nastav IDE na pocet prenasanych sekt. CALL RTOCHS ;preved REL na parametre CHS LD A,C ;parameter S (sektor) do A OUT (07B),A ;nastav sektor LD A,E ;pneni filesystem, chod na dalsiu LD L,(IX+ORELS) ;adresa rel. sektora particie LD H,(IX+ORELS+1) ;do HL, vratane EXX ;horneho WORDu LD L,(IX+ORELS+2) ;do HL' LD H,(IX+ORELS+3) EXX LD B,1 ;budeme tahat 1 sektor (bootsektor) LD DE,BTSADR ;adresa, kam sa nahra bootsektor CALL RBLK ;natiahni bootsektor aktivnej particie JR NC,OSBOOT ;ak nebola chyba, chod startovat OS RDERR: LD DE,SRDERR ;hlaska o chybe disku JR ERROR OSERR: LD DE,SNOOS ;hlaska o chybajucom OS ERROR: CATrack-Info ) N)))))))) )arameter H (hlava) do A OR 0A0 ;bootujeme asi z mastera OUT (07E),A ;nastav disk a hlavu LD A,L OUT (07C),A ;nastav spodny bajt cylindra LD A,H OUT (07D),A ;nastav horny bajt cylindra POP DE ;pocet prenasanych sektorov do D POP HL ;cielova adresa do HL LD A,020 ;prikaz pre citanie OUT (07F),A ;posleme na command port RBLK6: LD E,0A ;timeout asi 10 sekund do E LD BC,0 ;maximalny timeout do BC RBLK2: IN A,(07F) ;citaj stav disku BIT 3,A ;je pripraveny? JRS>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M ͫCopyright (C) 1985 BORLAND IncBTeleVideo 912/20/25MP)(=0r00C *JEE RT)1(1~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0(9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́ d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> Track-Info ) N)))))))) ) !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}>22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!K<>-I:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(> Track-Info * N******** *"! *DM}2!*&DM}2}! *}&DM}2t! *t&DM͛ ͛ͺNvrat do operanho syst.. }2`}2a"b*b !!*a&.!*`&G!! o&!͒E"!!͛ ͛ͺChyba na disku. `!}2T}2U"V*V !!*U&.!*T&G!! !DMo&!͒Eʔ"!!͛ ͛ͺChyba pi zpisu `!}2H}2I}2J}2K*K&*J&*K&*I&fz"}2?͛!" *?&#"*J&#*H&+fzEz?+}2!:!!*&n&e.=!*&#+!.!!!ͮ#!!fzʄ+}2!*&! s*&#]+!:ͣ!Eʪ+!!!s!!:ͣfz^,}2!*&n&́!a!z͛OE,!*&!!*&n&! Rs;,!*&!!*&n&s!*&!!s*&#û+͑#:-"!-!!D!͕"!.!͛ͺ Zadej barvu  ̈́#!1!͛ͺ (0..15):  !<!*!!&͑#!!fz9-}2#}2>*K&*>&͛!" *I&*>&͛!" *>&#"*K&*H&*K&*I&fzʃ#}2?͛!" *?&#b#͛ͺ0 ͛ͺ1 !o&}2}2!""}2$}2%!}2*%&*$&*":͛!ͪ ͞#*&!*&!}o*&*&́! !~͛O}o}oEr$M*"*%&*$&͛ͺ  !}2*&́! !~͛O*":ͣ*!&}oEʿ$*":*&e.=*"*&!*&!}o*":ͣ!}oE%*"!!-*&͛ͺ  *&#,!1}2!)!!H!͕"!-! M1 Barva papru '!-! M2 Barva inkoustu '!-! M0 Zpt '!-!͛ͺM tento vbr funkc  ͞#*&́!0!2͛OE.*&}24.*&! E4.*&#}2*&!2EM.!0}2*&! EA-*&!1E~.!4!3e,*&!2Eʝ.!4!4e,*&!0EA-!'! !N!͕"!+! ͛ͺ Dlka ppnut klvesy v milisec. !+!*"!n&+s͛ͺ  *&! E#"""}2}2!}2*&*&*^#V͛!& ͞#*&!*&!}o*&*&́!0!9͛O}o}oE%!*s#r*&*&͛ͺ  !}2*&́!0!9͛O*^#V!͸}oED&! *^#V*&!0R*s#r*&!*&!}oEʊ&*^#V! *s#r͛ͺ  *&! *^#V*ͥ}o*^#V*͸}oES%"""}2}2*n&"*&*&!**̈́#͛ͺ (0..99):  !6!!4!5!!c&͑#4!/!!D!͕"!2!͛ͺ  !3!͛ͺPoet bit  !0!͛ͺ  !0!͛ͺ  ̈́#!3!͛ͺ (5..8):  !4!Kn&!@!}2!=!!!!&!4!I!4!In&!|g}o*&!R! s!4!K!4!Kn&!?|g}o*&!R!@s͑#!/!!F!͕"!2!͛ͺ  !3!͛2%**s!֒!֒!n&*&E6'̈́#͛ͺ !֒:!ͪͺ  ͑#!!!$!͕"!!͛ͺ  !(!!M!͕"!,! ͛ͺM nsledujc monosti !,! ͛ͺ(Pouij SPACE nebo sla  !,!͛ͺk vbru funkce. Kdy m  !,!͛ͺvybrno, stiskni CR. ) !!M1 Start po sputn '!! M2 Nastaven barev '!! M3 Ppn pi psan '!! M4 Parametry RSPoet stop bit  !0!͛ͺ  !0!͛ͺ  ̈́#!3!͛ͺ (1/2):  !4!Gn&!|g}o!!}2!<!!!!&!4!G!4!Gn&!|g}o!|g}o!*&+s͑#!*!!I!͕"!/!͛ͺ  !/!͛ͺNastav paritu  !/!͛ͺ  !+!͛ͺ  ̈́#!-!͛ͺ (0=off,1=odd,2=even):  !4!Gn&͋-232 '!!M5 Floppy disky '!!M6 Ram disky '!!M0 Konec prce '!H! ͞#*&́!0!6͛OEʷ)*&}2)*&! E)*&#}2*&!6E)!0}2*&! Ek(!!fzZ*}2Ē!(*Ē&͛ͺ&  *Ē&# **&}2͒*͒&!(! !L!͕"!,! ͛ͺZadej pkaz (max.15 znak.): ̈́#!,!͛ͺ  M!!!!n&fTrack-Info * N******** *E-3!4!Gn&!|g}o!#}243!}2!D!!!!&*&!Eʄ3!4!G!4!Gn&!|g}osù3!4!G!4!Gn&!|g}o!*&+s͑#!-!!E!͕"!/!͛ͺ  !2!͛ͺHandshake md  !/!͛ͺ  !.!͛ͺ  ̈́#!0!͛ͺ (0=off,1=on):  !4!Kn&! |g}o! }2!?!!!!&!4!K!4!Kn&!|g}o! *&s͑#!1(1/2):  !4!6*k&n&!!|g}o#}2l!2!!l!!&͑#!4!6*k&!4!6*k&n&!|g}o!*l&+s9*k&!E>@*&!0EʠA*.&}2!1}2!&!!L!͕"!'!͛ͺ%  !*!M1 Poet floppy disk '!*! M2 Poet stop '!*! M3 Poet stran '!*! M4 Krokovn '!*!M5 as diskovch operac '!*!M0 Zpt '!,!͛ͺVyber si z nabdky  ͞#*&́!0!5͛OEE*&}2  !,!͛ͺ  !(!͛ͺ  ̈́#!)!͛ͺ (40/80):  !(!4!6*k&n&!|g}o#}2l!4!!l!(!P&*l&!(*l&!P}oEʞ;͑#!4!6*k&!4!6*k&n&!|g}o*l&!(+s9*k&!Eʠ:!}2kP8*k&!Eʞ=!'!!9!͕"!,!͛ͺ  !)!͛ͺPoet stran  !,!͛ͺ  !(!͛ͺ  ̈́#!)!͛ͺ Track-Info + N++++++++ +E*&! EE*&#}2*&!5E6E!0}2*&! ESC*&1R\E$7ÙE2RlE͙:ÙE3R|E7<ÙE4RŒEͱ=ÙE5R™E>?!!fzE}2l!'*l&͛ͺ%  *l&#äE*&!0ESC!&!͛ͺ'  !&!͛ͺ ͛ͺ ͛ͺ !(! !J!͕"!,! ͛ͺKapacita disku v kB  ̈́#!,!͛ͺ (0..512):  !4!?n&!"!8!!!!2%!4!?*!s͑#!1}2!)!!K!͕"!-! M1 Pepsat star systm '!-! M2 Spustit nov systm '!-!M3 Spustit star systm '!-!M0 Zpt '!/!͛ͺProve vbr  ͞#*&́!0!3͛OE^H*&}2zH*&! EzH*&#}2*&!3EʓH!0}2*&! EUG*&1RH!4!!"!!!"I2RI!!Wi!!i!!iLK3: EI RET ;****************************************************************************** ;PREVOD VIRTUALNEHO RELATIVNEHO SEKTORA NA FYZICKE PARAMETRE CHS ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; vstup: HL'= virt. rel. sektor (hornych 16 bitov) ; vystup: HL = parameter C (cylinder) ; DE = parameter H (hlava) ; BC = parameter S (sektor) ; nici: AF ;****************************************************************************** RTOCHS: ADD HL,HL ;vynasobime pocet sektorov dI3RI!! *&!0EUG!4!!͕!!!!͕!M!!!!n&fzʩI}2!:!!*&n&e.=!*&#kI!:MSETUP͍EJ!!!s!!fzJ}2!*&! s*&#I!!!"!1}2>!!!P!͕"!!!M!͕"̈́#!!͛ͺ mZx UP Version 2.2CS  k͛ͺ# Copyright (c) 1991 mZx soft.  ̈́͑#!!fz K}2!&*&͛ͺ) vomi, EXX ;lebo 8-bit IF pouziva kazdy druhy bajt ADC HL,HL ;horny word tiez vynasobime dvomi EXX LD BC,(GSEC) ;pocet sektorov na stopu CALL XIDIV ;vydelime RELS / pocet sekt. na stopu INC DE ;modulo zvysime o 1 (sektory zacinaju 1) PUSH DE ;vysledny sektor dame do zasobnika LD BC,(GHEAD) ;pocet hlav na cylinder CALL XIDIV ;vysledok v HL bude parameter C POP BC ;do BC pride zo zasobnika vysledne S RET ;a v DE zostane vysledne H ;********************************* *&#øJX'}2*&1R'Ki*ÄK2R7Kb,ÄK3RGKͰ.ÄK4RWKO/ÄK5RgK!7ÄK6RwK͑FÄK0R„KNG*&}2!EʭJ 1R1i*K2R2b,/K3R3Ͱ.?K4R4O/OK5R5!7_K6R6͑FoK0R0# Copyright (c) 1991 mZx soft.  ̈́͑#!!fz K}2!&*&͛ͺ) ********************************************* ;CELOCISELNE DELENIE 32-BITOVEHO DELENCA 16-BITOVYM DELITELOM ; vstup: HL = delenec (spodnych 16 bitov) ; HL'= delenec (hornych 16 bitov) ; BC = delitel ; vystup: HL = spodnych 16 bitov podielu ; HL'= hornych 16 bitov podielu ; DE = zvysok po deleni (modulo) ; nici: AF ;****************************************************************************** XIDIV: LD DE,0; vynulovanie modula EXX PUSH BC; uchovaj povodny obsah BC' LD B,020; pTrack-Info + N++++++++ +ocet opakovani do B' XIDIV1: LD A,H; najvyssi bit delenca do CY RLCA EXX EX DE,HL; modulo do HL ADC HL,HL; sprava nasun do modula CY SBC HL,BC; je modulo vacsie ako delitel? JR NC,XIDIV2; je vacsie, nechaj tam nove modulo ADD HL,BC; vrat stare modulo naspat XIDIV2: EX DE,HL; vysledne modulo do DE CCF; vysledny bit podielu do CY ADC HL,HL; nasun novy bit podielu do HL EXX; a cely podiel posun vlavo ADC HL,HL; vratane horneho wordu DJNZ XIDIV1; chod na dals.Z80 .RADIX 16 EXT START,FEND DEFB 01 DEFM 'NAZOV SUBORU ' DEFB 0D DEFW FEND-FPLACE DEFW FBEG DEFW FSTART DEFM '0123456789ABCDEF' DEFM '0123456789ABCDEF' DEFM '0123456789ABCDEF' DEFM '0123456789ABCDEF' DEFM '0123456789ABCDEF' DEFM '0123456789ABCDEF' DEFM '01234567' FPLACE EQU 1200 FSTART EQU 1200 .PHASE FPLACE FBEG: JP START END i bit POP BC; hotovo, obnov BC' EXX RET; a skonci ;****************************************************************************** ;CELOCISELNE PRIPOCITANIE 16-BITOVEHO SCITANCA K 32-BITOVEMU ; vstup: HL = akumulator (spodnych 16 bitov) ; HL'= akumulator (hornych 16 bitov) ; BC = scitanec ; vystup: HL = spodnych 16 bitov suctu ; HL'= hornych 16 bitov suctu ; nici: F ;****************************************************************************** XIADD: ADD HL,BC RET NC EXX::0 0A~ ;C:0 8A~ 0_59{ݖعW͙ {͜9()6z(| >g 8ͪ:Ñ 80| yg ͖8:09~ F0Gw_8{:i Ñ ͜90; 0͜95s 006 -S<͛<S<͛<06 S<͛ !.T]yGWy O:LXG~=o_~=gW .(.(.>&0:LXg.].yG|gy  0_W"3S3S3*3R"3"}3*3R"3nf##~(!}3G&## ^#V#͍ͮ > g nf##>g DC HL,BC EXX RET SNOACT: DEFM 'ACTIVE PARTITION NOT FOUND',0D SNOOS: DEFM 'OPERATING SYSTEM NOT FOUND',0D SHALT: DEFM 'SYSTEM HALTED, PRESS RESET',0D SRDERR: DEFM 'FIXED DISK READ ERROR!',0D SCPYRG: DEFM 'MBR 1.0B5 FOR MZ800 (C)2001 NIPSOFT',0D .DEPHASE ADMBR2:: END tu ; nici: F ;****************************************************************************** XIADD32: ADD HL,BC EXX A÷!7͵ r >h&-͵ >| >i b >i ,͵ ~A2B4!3%9[>v?>| !}3͍ &>&>'>#MDiskMenuUkEditujKoprujPanelAtribtyVymaNov editPresuUlo SETUPSelektujOdselektujUtilityInfoZru nvodMenu editEXT editNastav asSkoniNvratHex/TextKdNjdi vzadNjdiNvratUloKdNjdi vzadNjdi0&=$0o oÑ ͍ )[ ~#i 2>g >+i  yg O)>Fi >6i 2>:i 0^ N#!O>g͵ r > Nvod Y͞@()~@SHIFT(K3#B *3#"3og"30͍5"323{*3:3ݾ <23"30w w w.6ͣ677~0ݾ(~87'7(-͔5 4 ~ 8w ~w#8>w04~ <(w  p 6p pp:3=U7>23/IU7w 7'7@8^jf <u tnf##~(G&0F ͆5͍5ut##80w wF ͆5H##nf^V50 srut ##0͟ O#~#Si > i ~#Syg 0͟ O>g ͖8>g ~n f~nfRTrack-Info , N,,,,,,,, ,.Z80 .RADIX 16 ;defaultova ciselna sustava bude 16 ; EXT MBRBUF ; GLOBAL INITP,TSTPID,NPART ; GLOBAL OTABLE,OCYL,OHEAD,OSEC,OLDR ; GLOBAL MZID1,MZID2,PIDMZF OCYL EQU 2 ;geometria disku - parameter C OHEAD EQU 4 ;geometria disku - parameter H OSEC EQU 6 ;geometria disku - parameter S OLDR EQU 8 ;MBR loader OTABLE EQU 01BE ;ofset partition tabulky ACTPAR EQU 80 ;priznak aktivnej particie OACT EQU 0 ;ofset priznaku aktivnej particie OHF EQU 1 ;ofset hlavy z POP BC RET ;A=0,1,2,3 ; IX=HANLE PART. FPART: LD IX,MBRBUF+OTABLE OR A RET Z PUSH AF PUSH DE ADD A,A ADD A,A ADD A,A ADD A,A LD E,A LD D,0 ADD IX,DE POP DE POP AF RET FRELF: PUSH IX PUSH AF PUSH BC PUSH DE EXX PUSH BC EXX CALL NPART JR NZ,FRELF1 LD HL,(MBRBUF+OSEC) EXX LD HL,0 EXX FRELF2: EXX POP BC EXX POP DE POP BC POP AF POP IX RET FRELF1: DEC A CALL FPART LD L,(IX+ORELS) LD H,(IXaciatku particie OCSF EQU 2 ;ofset CS zaciatku particie OFSYS EQU 4 ;ofset priznaku operacneho systemu OHL EQU 5 ;ofset hlavy konca particie OCSL EQU 6 ;ofset CS konca particie ORELS EQU 8 ;relativny sektor zaciatku particie ONUMS EQU 0C ;pocet relativnych sektorov v particii OIDENT EQU 1FE ;ofset identifikacneho slova AA55h MZID1 EQU 'M' MZID2 EQU 'Z' PIDF12 EQU 1 PIDF16 EQU 4 PIDBIG EQU 6 PIDMZF EQU 0A0 PIDIDD EQU 0A1 PIDSWP EQU 0A2 PARTCO: DEFB 01,02,04,05+ORELS+1) LD C,(IX+ONUMS) LD B,(IX+ONUMS+1) EXX LD L,(IX+ORELS+2) LD H,(IX+ORELS+3) LD C,(IX+ONUMS+2) LD B,(IX+ONUMS+3) EXX CALL IADD32 JR FRELF2 FRELN: PUSH AF PUSH BC PUSH DE LD HL,(MBRBUF+OCYL) LD DE,(MBRBUF+OHEAD) LD BC,(MBRBUF+OSEC) CALL GTOR POP DE POP BC POP AF RET CSCOD: LD A,H LD H,L RRCA RRCA AND 0C0 LD L,A LD A,C AND 03F OR L LD L,A RET CSDEC: LD A,L AND 03F LD C,A LD B,0 LD A,L DEFB 06,07,08,0A DEFB 50,51,56 DEFB 61,63,64,65 DEFB 75 DEFB 0A0,0A1,0A2 DEFB 0DB,0FF PARTMS: DEFW PART01,PART02,PART04,PART05 DEFW PART06,PART07,PART08,PART0A DEFW PART50,PART51,PART56 DEFW PART61,PART63,PART64,PART65 DEFW PART75 DEFW PARTA0,PARTA1,PARTA2 DEFW PARTDB,PARTFF,PARTXX PART01: DEFM 'FAT12',0D PART02: DEFM 'XENIX',0D PART04: DEFM 'DOS16',0D PART05: DEFM 'EXTEND',0D PART06: DEFM 'BIGDOS',0D PART07: DEFM 'NTFS',0D PART08: DEFM 'SPLIT',0D PARLCA RLCA AND 3 LD L,H LD H,A RET PARDEC: PUSH AF PUSH BC PUSH HL LD HL,PARTCO PUSH HL POP DE LD BC,PARTMS-PARTCO CPIR JR Z,PARDE1 INC HL PARDE1: SCF SBC HL,DE ADD HL,HL LD DE,PARTMS ADD HL,DE LD E,(HL) INC HL LD D,(HL) POP HL POP BC POP AF RET LDRELS: LD L,(IX+ORELS) LD H,(IX+ORELS+1) EXX LD L,(IX+ORELS+2) LD H,(IX+ORELS+3) EXX RET RT0A: DEFM 'BtMgr',0D PART50: DEFM 'DM R/O',0D PART51: DEFM 'DM R/W',0D PART56: DEFM 'GB',0D PART61: DEFM 'Speed',0D PART63: DEFM '386/ix',0D PART64: DEFM 'NET286',0D PART65: DEFM 'NET386',0D PART75: DEFM 'PCIX',0D PARTA0: DEFM 'MZF',0D PARTA1: DEFM 'IDEDOS',0D PARTA2: DEFM 'MZSWAP',0D PARTDB: DEFM 'CP/M',0D PARTFF: DEFM 'BBT',0D PARTXX: DEFM 'NonDos',0D INITP: PUSH BC PUSH DE PUSH HL CALL TSTPID JR Z,INITP1 LD HL,MBRBUF+OTABLE LD E,L LD D,H INC DE REPR4: CALL MSG JP LETNL REPFD: ; LD HL,(DPBA+5) ; LD A,H ; OR L ; RET Z LD A,(FDPRES) OR A RET Z LD A,'A' CALL LET LD DE,MFD CALL MSG JR REPR5 DETECT: LD DE,CPYRGT CALL MSG LD DE,MDEC1 CALL MSG CALL FDSIZE ;zdetekuje FD CALL RDSIZE ;zdetekuje RD CALL HDSIZE ;zdetekuje HD LD DE,MDEC2 CALL MSG CALL REPFD ;oznami zistene floppy mechaniky CALL REPHD ;oznami zistene HD particie CALL REPRD ;oznami zisteny RD a jeho velkost RET .RADIX 10 DETAB: D LD BC,03F LD (HL),0 LDIR LD A,055 INC HL LD (HL),A LD A,0AA INC HL LD (HL),A OR A INITP1: POP HL POP DE POP BC RET TSTPID: LD A,(MBRBUF+OIDENT) CP 055 RET NZ LD A,(MBRBUF+OIDENT+1) CP 0AA RET NPART: PUSH BC PUSH DE PUSH IX LD BC,0400 CALL TSTPID JR NZ,NPART1 LD IX,MBRBUF+OTABLE LD DE,010 NPART2: LD A,(IX+OFSYS) OR A JR Z,NPART3 INC C NPART3: ADD IX,DE DJNZ NPART2 NPART1: LD A,C OR A POP IX POP DE Track-Info , N,,,,,,,, ,EFW 10000,1000,100,10 .RADIX 16 RDSAV: DEFB 0,0,0,0,0 NPAGES: DEFB 0 FDPRES: DEFB 0FFh HDBUF: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,~~~~~p~pp~8l ``0006~l6l6f7 L.f>ff> llllll~F  F~fffff<ffn@<<, l80fffvl0~`>ff>6ffffffff<`<<fffff<`6~66~ff>6fff~!O! 2qqr C !""6r :O:Oկ_|V ?W&: DEFM ' M bytes$' CPYRGT: DEFM 'NIPOS ver 0.07 build 21.10.2002' ; DEFM ' (MZ-800 harddrive operating system)' DEFM ' (C) 2002 NipSoft',0Dh,0Ah,0Dh,0Ah,'$' END  $' MFD: DEFM ': Floppy disk drive 720$' MHD: DEFM ': Harddisk partition $' MDEC1: DEFM 'Detecting drives, please wait... $' MDEC2: DEFM 'detected:',0Dh,0Ah NL: DEFB 0Dh,0Ah,'$' MRD1: DEFM ' 64 128 256 5121024????' MKB: DEFM ' K bytes$' MMB.COMMENT @ ***************************** * * * *** CPM HDD BIOS *** * * ~~~~~~~~~~~~~~~~~~~~ * * Hlavny BIOS * * Datum * 7.10.2002 * * * * (C) NIPSOFT * * Marek Smihla * * Fedinova 20 * * Bratislava * * 851 01 * * * ***************************** @ .Z80 GLOBAL BIOS,CURSCN GLOBAL ADRCCP,ADRBDS GLOõXff"llll|<|n4Xf8llf    Z~<~<~Z~ ~`0 ``f<ff<~`0< ~~>ff>ff>6ff> 0`>00000>fff>ffff<````l8f66f<6nfffff>|ff|6n|<`> > l8fffvlfff<lffffff|`x~0 ~0 0 0 pEWKTJtg&h9*:F198Ai4Y ۀ|_ | a =1 5f\!aW*{@s,%&KJ8#;x .d_tLn,ӓo ˅ip Nّ9Ev5h Lۀtct% #P$ ? Рs P!NfL&#C JP CONIN JP CONOUT JP LIST JP PUNCH JP READER JP HOME JP SELDSK JP SETTRK JP SETSEC JP SETDMA JP READ JP WRITE JP LISTST JP SECTRA TPAL: DEFB BLUE,010h+YELLOW,020h+LRED,030h+WHITE,040h TXTATR: DEFB 010H*ZAKLPOZ+ZAKLPIS TXTINV: DEFB NO ;00=normalne video, FF=inverzne video CPOSX: DEFB 0 ;X pozicia kurzora (cislovane od 0) CPOSY: DEFB 0 ;Y pozicia kurzora (cislovane od 0) CPOS EQU CPOSX ERATR EQU 8Ch CPOSER EQU (MAXLIN-1)*100H LSOF: DEFB 0,0,78h,0,78h ;scroll init LSO }~ vK4?k5R4d3S.km6r ˅;pU. ÜY<[URC*(OiSp` Z"[5Ja3Zn EyX P0Tt]lہ:ݫhY8>8LWI"NKL1{qU. ô fLKۍq{4f\,h ~zYtD+`z"`2N3w<08+"Nl+`1hU&;dutΖifdfLK%*bA [h@;#I| lc9aN4&#@cÀI]`H|],4cBtY,KTtD#wHY4pCBAyF > dYw WhiT$D3 =LP5nnFGKDztNhHuFH1#^W##KdtZ.))h%/¦+3u :syJU7ujbNts|9pӠR:* N@ @J,9yv{:,7K5Rv.Q581,b*,֛qN7^.bv:3tBt u3Zkz٦fŒC$tthS& 3A. +#$|d&f+4`GGJ݈u0O"d d_j`$w8^/b<4B.`8f4`P8FY]+8@Cp5!nL1 t2lR{4`4Y+ O0|(EJB]tF0Ζha:7:D&Jp k!ȯ#;n 3Zk(3] hb xFFH2/:Yf Àtnt %yo\Mp@Cf#-rx-o G&"8:]b+GFJtbt H$#9C;nb] с=L)z= ܢ#wNw+4 bG 4H #W1"8:Y 4x`YFtntMwBQs8FK Ek!!cOqz27:F,Wim@?g໘>O?Gxh +DB O)a(BO g1cd}tp1\ֳqYG>49d|t x[(0vD+nGHanQ >#B~t q4 <_QnCwH@3bP <-8 rJ 0r))a<7D'H@aۢ3'J W.[L-kB<nj3 u3@Υ)f]A  0Œ&jf51,0ۅY1$hm|Z 2S-DCHF" :Db1 #H X ΐ1QE|#gP%u+DIFw'qݒ6hԷdA-TTutL3Dpt ND'IxFV'yICkTLtғ+ ;\c28R p uP4bY#E.T!'883Yn1<,Qp(3RnApttV o9Ygـ`FLwK ?٥w30Nd һer]ap!'{'9p2~Cwp\+W03O!S.S#93M.@pAkr)a<#=S+8U. m1]!sD Fp"Ӥtt٤gd7,xl;IcK4,0ctatX i#KTt25:O#[;Qq *bVvHD\7 p"D1]'y|/*BF_.}Qϊ#8pd.**bFѭҷSdatQwi1'#%sC#f+B"b)o9 t )L&Ayl< Ɠat #g7FQHT$D3uBDOS2FQHB DEFB 0,03C,066,6,6,6,066,03C ;C DEFB 0,07E,0CC,0CC,0CC,0CC,0CC,07E ;D DEFB 0,07E,6,6,03E,6,6,07E ;E DEFB 0,07E,6,6,03E,6,6,6 ;F DEFB 0,03C,066,6,6,076,066,03C ;G DEFB 0,066,066,066,07E,066,066,066 ;H DEFB 0,03C,018,018,018,018,018,03C ;I DEFB 0,07C,060,060,060,060,066,03C ;J DEFB 0,066,066,036,01E,036,066,066 ;K DEFB 0,6,6,6,6,6,6,07E ;L DEFB 0,0C6,0EE,0FE,0D6,0C6,0C6,0C6 ;M DEFB 0,066,066,06E,07E,076,066,066 ;N DEFB 0,03C,066,066,066,066,066,03C ;O ;50 DEFB 0,03E,066,066,FMX EQU 3C0h ;max. hodnota scroll ofsetu ;CURENA a CURSEE musia ist za sebou (vid CURINV procedura) CURENA: DEFB YES ;povolenie kurzora (FF povoleny, 00 zakazany) CURSEE: DEFB NO ;FF-kurzor prave svieti, 00-kurzor nesvieti CURTYP: DEFB 2 ;1-plny, 2-polovicny CURPER: DEFB 07 ;dlzka polperiody kurzora CURRPT: DEFB 07 ;pocitadlo ERRENA: DEFB YES ;povolenie chybovych hlasok CURDEF1: DEFB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh CURDEF2: DEFB 000h,000h,000h,000h,0FFh,0FFh,0FFh,0FFh CO03E,6,6,6 ;P DEFB 0,03C,066,066,066,076,066,0DC ;Q DEFB 0,03E,066,066,03E,036,066,066 ;R DEFB 0,03C,066,6,018,060,066,03C ;S DEFB 0,07E,018,018,018,018,018,018 ;T DEFB 0,066,066,066,066,066,066,03C ;U DEFB 0,0C6,0C6,0C6,0C6,0C6,06C,038 ;V DEFB 0,0C3,0C3,0C3,0DB,0DB,0E7,066 ;W DEFB 0,0C6,0C6,06C,038,06C,0C6,0C6 ;X DEFB 0,066,066,066,03C,018,018,018 ;Y DEFB 0,07E,060,030,018,00C,6,07E ;Z DEFB 0,03E,6,6,6,6,6,03E ;[ DEFB 0,0,6,00C,018,030,060,0C0 ;\ DEFB 0,03E,030,030,030,030,030,03NOPH: DEFB 1 ;faza conout: 1-normalna, 2,3,4-ESC TIME: DEFB 0,0,0 ;adresa casovych premennych v BIOSe TIMEO: DEFW 0 ;casovy ofset (premenna v BIOSe) COND FILBOT CCPNAM: DEFM 'CCP SYS' BDSNAM: DEFM 'BDOS SYS' ENDC .RADIX 16 CG1: ;20 DEFB 0,0,0,0,0,0,0,0 DEFB 0,018,018,018,018,8,0,018 ;! DEFB 0,066,066,022,0,0,0,0 ;" DEFB 0,0,06C,0FE,06C,06C,0FE,06C ;# DEFB 0,018,07C,016,03C,0D0,07C,018 ;$ DEFB 0,0,0CC,06E,034,058,0EC,066 ;% DEFB 0,038,06C,06C,018,0D6,066,0DC ;& DEFBE ;] DEFB 0,018,03C,05A,018,018,018,018 ;^ DEFB 0,0,0,0,0,0,0,0FF ;_ ;60 DEFB 0,6,6,00C,0,0,0,0 ;` DEFB 0,0,0,03C,060,07C,066,0FC ;a DEFB 0,6,6,03E,066,066,066,03E ;b DEFB 0,0,0,03C,066,6,066,03C ;c DEFB 0,060,060,07C,066,066,066,07C ;d DEFB 0,0,0,03C,066,07E,6,03C ;e DEFB 0,038,06C,00C,01E,00C,00C,00C ;f DEFB 0,0,0,07C,066,066,07C,078 ;g DEFB 0,6,6,03E,066,066,066,066 ;h DEFB 0,018,0,01C,018,018,018,03C ;i DEFB 0,060,0,060,060,060,06C,038 ;j DEFB 0,6,6,066,036,01E,036,066 ; 0,018,018,8,0,0,0,0 ;' DEFB 0,018,00C,6,6,6,00C,018 ;( DEFB 0,6,00C,018,018,018,00C,6 ;) DEFB 0,05A,07E,03C,07E,03C,07E,05A ;* DEFB 0,0,018,018,07E,018,018,0 ;+ DEFB 0,0,0,0,0,018,018,00C ;, DEFB 0,0,0,0,07E,0,0,0 ;- DEFB 0,0,0,0,0,0,018,018 ;. DEFB 0,0,0C0,060,030,018,00C,6 ;/ ;30 DEFB 0,03C,066,076,07E,06E,066,03C ;0 DEFB 0,018,01C,01A,018,018,018,03C ;1 DEFB 0,03C,066,060,030,00C,6,07E ;2 DEFB 0,03C,066,060,038,060,066,03C ;3 DEFB 0,060,030,058,06C,07E,060,060 ;4 DEFB 0k DEFB 0,01C,018,018,018,018,018,03C ;l DEFB 0,0,0,07F,0DB,0DB,0DB,0DB ;m DEFB 0,0,0,036,06E,066,066,066 ;n DEFB 0,0,0,03C,066,066,066,03C ;o ;70 DEFB 0,0,0,03E,066,066,03E,6 ;p DEFB 0,0,0,07C,066,066,07C,0F0 ;q DEFB 0,0,0,036,06E,6,6,6 ;r DEFB 0,0,0,07C,6,03C,060,03E ;s DEFB 0,0,00C,03E,00C,00C,06C,038 ;t DEFB 0,0,0,066,066,066,076,06C ;u DEFB 0,0,0,066,066,066,03C,018 ;v DEFB 0,0,0,0C6,0D6,0FE,0EE,06C ;w DEFB 0,0,0,066,066,018,066,066 ;x DEFB 0,0,0,066,066,07C,060,078 ;y ,07E,6,03E,060,060,066,03C ;5 DEFB 0,03C,066,6,03E,066,066,03C ;6 DEFB 0,07E,060,030,03C,00C,6,6 ;7 DEFB 0,03C,066,066,03C,066,066,03C ;8 DEFB 0,03C,066,066,07C,060,066,03C ;9 DEFB 0,0,0,0,018,0,0,018 ;: DEFB 0,0,0,018,0,018,018,00C ;; DEFB 0,030,018,00C,6,00C,018,030 ;< DEFB 0,0,0,07E,0,07E,0,0 ;= DEFB 0,6,00C,018,030,018,00C,6 ;> DEFB 0,03C,066,060,018,018,0,018 ;? ;40 DEFB 0,0,07C,0C6,0F6,076,6,07C ;@ DEFB 0,03C,066,066,066,07E,066,066 ;A DEFB 0,07E,0CC,0CC,07C,0CC,0CC,07E ;Track-Info . N........ .DEFB 0,0,0,07E,030,018,00C,07E ;z DEFB 0,030,018,018,00C,018,018,030 ;{ DEFB 018,018,018,018,018,018,018,018 ;| DEFB 0,00C,018,018,030,018,018,00C ;} DEFB 0,0,0,0,00E,0DB,070,0 ;~ DEFB 0,0,0,0,0,0,0,0 ;Alt-127 .RADIX 10 CG2: ;Nastavime mod 640x200/4 farby a palety, aj zaciatok RAM INIGDG: DI LD A,6 ;640X200, 4 farby LD HL,TPAL ;tabulka paliet OUT (0CEh),A ;nastav mod LD BC,05F0h ;paletovy port OTIR ;zapis palety LD HL,LSOF+4 ;init scroll registrov LD BC,6CFh ;out ~p#:>w w w w w w w w>w w w w w w w w͈ : =s : =ͩ !: =48 6͍ 0!: =405  0!~b (5 0!~C (52>2: :2: !:port scroll registrov OTDR ;zapiseme od 5CF do 0CF vratane LD BC,8 ;budeme presuvat 8 bytov LD D,B ;na nulovu adresu LD E,B LD HL,INIMEM ;tu mame odlozene byty IN A,(0E1h) ;vsade RAM LDIR ;dame ich na zaciatok RAM RET ;Nastavime paletu pozadia do A podla premennej TXTATR PALPOZ: LD A,(TXTATR) RLCA ;PAL pozadia je v bitoch 6 a 7 RLCA PALP1: AND 3 ;zostanu bity 0 a 1 BIT 1,A ;bit 1 posunieme vlavo RET Z XOR 6 RET ;Nastavime paletu pisma do A podla premennej TXTA(?!F*[N>/ y_W~/w:=  :2 >2>2 >2>!]|!0))))T]V N(: *[ $,: : * :<:<*$,0 0! 0123456789ABCDEF?ABCDEFGHIJKLMNOPQRSTUVWXY :; ][@ZYXWVUTSRQPONMLKJIHGFEDCBA87654321.,90 -^\/?  *+ }{`zyxwvutsrqponmlkjihgfedcba('&%$#"!><)_ =~|  TR PALPIS: LD A,(TXTATR) RRCA ;PAL pisma je v bitoch 2 a 3 RRCA JR PALP1 ;Prevod HL z pozicie kurzora na adresu VRAM, nici AF VPOSIT: PUSH DE ;odloz DE XOR A ;nula LD E,A ;do E LD A,H RRA RR E ;v AE je 128xY ADD A,H ;v AE je (128+256)xY ADD A,H ;v AE je (128+256+256)xY LD D,A ;v DE je 640xY LD H,080h ;v L je X stlpec, v H je zaciatok VRAM ADD HL,DE ;v HL je uz definitivna adresa VRAM POP DE ;obnovime DE RET ;Zmazeme koniec riadka vratane kurzora, nici    ) +., -  !" :(/:? _ YYSDTb  !!"6~NQ >_8 o> > }Z(Qw 6QQ84886<(I=0~Oo&),ut6~< w7w^Vsr7ws 2!^FO "~F(![A!{a!!>O!0#~ɼؽ !ͻn0 6"F(6( 5 n AF, DE CLREOL: LD DE,(CPOS) CLREL1: PUSH BC ;mazanie s poziciou kurzora v DE PUSH HL CALL PALPOZ ;zisti paletu pozadia OR A ;je nula? LD C,0FFh ;jednotky do C JR NZ,CLROL1 ;neni nula, budeme pisat jednotky LD C,A ;je nula, budeme pisat nuly LD A,MAXPAL ;do najvyssej palety CLROL1: OR 080h ;priznak zapisu do palety DI ;nevyrusovat CALL CUROF ;vypni kurzor OUT (0CCh),A ;nastav palety pre citanie aj zapis OUT (0CDh),A LD L,E ;pozicia kurzora do HL LD H,D CALL VPOSIT ;pozicia VRAM do HL LD B,E ;stlpec do B LD A,MAXCOLS LD E,A ;sirka celeho riadku do e SUB B LD D,A ;budeme mazat D znakov LD B,8 ;riadok ma 8 riadkov CLROL2: PUSH BC ;odloz registre PUSH HL PUSH DE IN A,(0E0h) ;zapni VRAM LD (HL),C ;vymaz jeden bajt VRAM LD C,D ;pocet znakov, ktore treba este zmazat LD B,0 LD D,H ;nastavime cielovu adresu LD E,L INC DE DEC C ;jeden znak sme uz zmazali rucne JR Z,CLROL3 ;ak neni co mazat, obideme LDIR LDIR CLROL3: IN A,(0E1h) ;0>G 0>2^ y2c ! O: *[:<:  W:<_qJT] (zW0!!^ F 4 ͈ 0G:20G:0-%:0_0o:0W0g{0]oz0Tg "S R$," !"0!yx}>0 yoy_->2 |:<8 xgxW:/O 2w 2x xG>́ >V́ >Nā :>́ P  0!w> 0!~>! utwwxy!xG> >V >N :> ATrack-Info . N........ .vypneme VRAM POP DE POP HL LD A,D ;odlozime D LD D,0 ADD HL,DE ;nastavime dalsi riadok LD D,A ;obnovime D POP BC DJNZ CLROL2 ;opakujeme 8x EI POP HL POP BC RET .COMMENT @ ;Rozskok: A=label, HL=tabulka labelov, BC=pocet labelov (adresy idu naopak) ; nici F, BC, DE, HL ONGOTO: LD E,L LD D,H ADD HL,BC EX DE,HL CPIR RET NZ EX DE,HL ADD HL,BC ADD HL,BC LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) @ ;premiestnenie kurzora (H=Y, L=X, cislE),A CURIN3: POP HL ;obnov registre POP DE POP BC POP AF RET ;scan kurzora pod prerusenim ;nenici nic CURSCN: PUSH AF ;odloz AF LD A,(CURRPT) ;pocitadlo scanov DEC A ;zmensi o 1 JR NZ,CURSC1 CALL CURINV ;je nacase invertovat kurzor LD A,(CURPER) ;novy pocet scanov CURSC1: LD (CURRPT),A ;daj do pocitadla POP AF RET ;zmazanie obrazovky od vrchu (pomale, ale usporne) ;A-pocet riadkov, nici AF,BC,DE,HL CLRSCR: LD HL,0 ;home pozicia CALL UMXY ;nastav poziciu kurzoraovanie od nuly) UMXY: DI ;nesmie sa prerusovat CALL CUROF ;vypneme stary kurzor LD (CPOS),HL ;zmenime poziciu kurzora EI ;uz mozeme prerusovat RET ;zmena X pozicie kurzora (A=X pozicia, cislovanie od nuly) UMX: DI ;nebude sa prerusovat CALL CUROF ;vypneme stary kurzor LD (CPOSX),A ;nastavime novu X poziciu EI ;a uz sa prerusovat moze RET ;zmena Y pozicie kurzora UMY: DI ;nebudeme prerusovat CALL CUROF ;vypneme stary kurzor LD (CPOSY),A ;zmenime Y poziciu na no na HOME LD B,A ;pocet riadkov do B CLRSC1: CALL CLREOL ;zmazeme riadok DI ;nebudeme prerusovat CALL CUROF ;vypneme kuzor LD HL,CPOSY ;a presunieme kurzor INC (HL) ;na dalsi riadok EI DJNZ CLRSC1 ;opakujeme pre kazdy riadok XOR A ;dame kurzor na 1. riadok CALL UMY RET ;a vratime sa ;Ulozenie ASCII znaku do VRAM ;HL=adresa VRAM ;A=ASCII (zatial bere iba dolnych 7 bitov) ;nici: AF,BC,DE,HL AVRAM: PUSH HL ;odloz adresu VRAM AND 7Fh ;iba 7 bitov LD C,A ;odloz do C vu EI ;a uz sa moze prerusovat RET ;vypnutie kurzora, uchova registre CUROF: PUSH AF ;schovaj AF LD A,(CURSEE) ;kurzor svieti? OR A JR NZ,CURON1 ;svieti, chod ho vypnut CUROF1: POP AF ;nesvieti, netreba vypinat RET ;zapnutie kurzora, uchova registre CURON: PUSH AF LD A,(CURPER) ;resetuj dlzku svietenia kurzora LD (CURRPT),A LD A,(CURSEE) ;svieti kurzor? OR A JR NZ,CUROF1 ;ak svieti, netreba ho zapinat CURON1: POP AF ;obnov AF, ideme invertovat svietenie ;invertova wu88*  :  0 !O 2    :2<2 ^ c !w4 s!1SL ~{!M^!#E(!&|Gi!(> M: (>MN(!!5 欃ߎܫޘ ׁʂ̌ԐՒڔ㭮圝ߣƺܿ nie kurzora, uchova registre CURINV: PUSH AF ;schovaj registre PUSH BC PUSH DE PUSH HL LD HL,(CURENA) ;trik: (CURENA) do L, (CURSEE) do H LD A,L ;je kurzor povoleny? OR H ;alebo svieti? JR Z,CURIN3 ;ak neni povoleny a nesvieti, nic nerob LD HL,CURDEF1 ;tu sa skryva tvar kurzora 1 LD A,(CURTYP) ;aky je kurzor? DEC A JR Z,CURIN1 ;typ 1 (plny) LD HL,CURDEF2 ;typ 2 (polovicny) CURIN1: EX DE,HL ;definicia kurzora do DE LD HL,(CPOS) ;pozicia kurzora do HL CALL VPOSIT ;adresa V!|og~!!]T 7R>!|>)jB0 ?j=  <a<{0O!:9o=29& !::=29:>L2*X:Z(RT>:dT>:d:Z(> oT2>_W*[R |"[*X"X:Z2Z(QR8 R"X2Z<SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSa{˯0 MD }=|={z-%͙ ͵ !͑ --%%E>i >i >i D>i g >i >i >Ei >ͩ ͵ i`͑ 0͙ O g E0>0>~# ^| 85͙ %('͵ &?8 i`ͅ MD  MD}0##_GO{7B8*W s#r#q#p#ͤ [Ws#r#"W%-͵ ~#ͤ ~#͔ r e)0*S[WR+V+^"W ^#V#N#F#͙ )͊|} nf} nf ?2!!!:O::O:!*! !45(! +/ 0y0( CP 20h ;CY=1 ak su control znaky SBC A,A ;FF pre CTRL znaky, 0 pre ostatne LD HL,TXTINV ;premenna pre INV video XOR (HL) ;invertuj A pre inverzne video DI ;odteraz neprerusovat CALL CUROF ;zhasni kurzor LD HL,AVRA4+1 ;WFR pre pozanie LD DE,AVRA5+1 ;WFR pre pismo JR Z,AVRA1 EX DE,HL ;pre inv. znaky prehod pozadie a pismo AVRA1: CALL PALPOZ ;zisti paletu pozadia OR 0C0h ;urob parameter WFR LD (HL),A ;pre pozadie CALL PALPIS ;zisti paletu pisma OR 0C0h ;urob parameter W d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! FR LD (DE),A ;pre pismo LD A,C ;obnov ASCII LD DE,CG1 ;znakovy generator SUB 20h ;zacina od 20h JR NC,AVRA2 ;v poriadku pre znaky nad 1Fh ADD A,40h ;CTRL znaky budu vyzerat ako pismena AVRA2: LD L,A LD H,0 ADD HL,HL ;vynasob osmimi ADD HL,HL ADD HL,HL ADD HL,DE ;pripocitaj adresu znakoveho generatora EX DE,HL ;adresa znaku do DE POP HL ;adresa VRAM do HL PUSH HL LD BC,MAXCOLS ;sirka riadku do BC AVRA4: LD A,0 ;tu bude paleta pozadia OUT (0CCh),A ;nastav paletu I""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> N A,(0E0h) ;zapni VRAM LD A,0FFh ;pozadie vypln jednotkami LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A IN A,(0E1h) ;zapni RAM AVRA5: LD A,0 ;tu bude paleta pisma OUT (0CCh),A ;nastav paletu POP HL ;adresa VRAM IN A,(0E0h) ;zapni VRAM LD A,(DE) ;vyber bajt znaku LD (HL),A ;zapis ho do VRAM INC DE ;dalsi bajt znaku ADD HL,BC ;dalsia adresa VRAM LD Track-Info / N//////// /S>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&8 (8~wPT] ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M ?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò* ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(>  !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}Track-Info 0 N00000000 0>22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2 OO SSS ͺI XX XX DD DD OO OO SS SSS ͺI XX XX DD DD OO OO SS SSS ͺI XX XX DD DDDD OOO OOO SSS SSS ͺI XX XX DDDDDDDDD OOOOOOO SSSSSSS ! " ͛ͺ3 *** Soubory disket DOS formAtu prohlIZͺI a kopIruje. *** ͛ͺ; ****************************************************ͺ**"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"****** ͛ͺ3 XDOS V1.1 (c) 1988 JaMeSoft & LecSoft ͺ- XDOS V4.3 (c) 1990 Jan Jungwirth,ͺ% PrAcheN, okr. c. LIpa HELP vypͺISe pRIkazy. @!~!!~:ͣfz&"~!~*~!~*~n&s*~#%!~:@!/!/:!}2~!}2~!͛fzʜ&}2~MNH*~&}ͺ%Ͳ!Ei&!}2~MSH*~&}ͺ%Ͳ!Eʑ&!}2~*~&#7&*~&Eʿ&M XD43SH.OVR!~&MXD43.OVR!~*~&}oE' ͛ͺ1 ** nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*" c E K E J . . . **  !}2~!}2~!*~&N!|g}o!E'!~!A*~&M:XD4.COM͢ =p!~p}2~*~&!E'!~!A*~&!:e.͢ =!~:=p!~p*~&}2~*~&!}2~*~&!*~&!}oE-'*~&!Er(!~Ͱ !~͙͛ͺ Chyba pRi CtenI souboru "!~:!ͪͺ" ! (͙͛ͺ Soubor "!~:!ͪͺ" nenalezen na disketͺE se souborem "XD4.COM" ! ru "!~:!ͪͺ" ! (͙͛ͺ So!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!(~>&***************************************************************************** povdn o chytrm XDOS 4, vyrobil pan Jungwirth, distribuce mZx software ***************************************************************************** Nco k celmu balku...Zdrojov text je, jak jste si mnoz vimli, tvoen z nkolika text pro Turbo - pascal. XD4.PAS udl hlaviku a nathne ostatn sti, XD43.PAS je vlastn program. Vzhledem k dlce asi 2000 dek je soubor nutno kompilovat volbou cHn kompi>͛ͺI XX XX DDDDDDDDD OOOOOOO SSSSSSS ͺI XX XX DD DDDD OOO OOO SSS SSS ͺI XX XX DD DD OO OO SSS SS ͺI XX XX DD DD OO OO SSS SS ͺI XXXX DD DD OO OO SSS ͺI XX DD DD OO OO SSS ͺI XXXX DD DD OOTrack-Info 0 N00000000 0ltoru a pak zmnit rozen souboru na OVR. V SHELL je nutno nastavit END Adress vslednho kdu o 8000 byt ne ne je implicitn. Tolik jen pro ty, co se budou kuchat ve zdrojcch, pro ostatn je to ostatn. Otto Zemek, jr., distributor - mZx software........ OBSLUHA PROGRAMU X D 4  ==================================  Kad pkazov dek (jeho st psan uivatelem) me mt dlku maxi- mln 64 znak, dal znaky jo] koprovn soubor DOS <- CP/M , u kadho souboru vyaduje souhlas pro jeho koprovn WCPM [jmno] koprovn soubor DOS -> CP/M WCPM/Q [jmno] koprovn soubor DOS -> CP/M , u kadho souboru vyaduje souhlas pro jeho koprovn Je-li na clov disket soubor stejnho jmna jako soubor koprovan, program nabdne pepsn, jestlie pepisovan soubor nen systmov,tajn nebo chrnn proti zpisu.  Pozn: Prsou ignorovny. Mal psmena jsou pevedena ped zpracovnm pkazovho dku na velk. Parametry pkaz mus nsledovat bez mezery za oznaenm pkazu a za lomtkem. Program nekontroluje regulrnost parametr zadanho pkazu, na neplatn parametry nen brn zetel. Pi vtm potu parametr se tyto daj rzn kombinovat a nezle na jejich poad. Po ppadnch parametrech pak oddlen mezerou nsledujeppadn speci- fikace jmna soubor nebo v pkazech pro nastocedury RCPM, RCPM/Q, WCPM a WCPM/Q je mon ukonit stiskem ESC nebo ^C kdykoliv v prbhu procedury ( pozor na kolizi s potvrzenm vmny diskety pi prci s jednou mechanikou ) nebo stiskem X jako odpovdi na dotazy. ------------------------------------------------------------------------ DTYPE [jmno] vpis textovho DOS souboru Parametry pkazu: /C vpis textovho DOS souboru i s dcmi kdy, kter jsou zobra- aveni adrs a mechanik speci- fikace cesty. Cel pkaz je pak napklad CDEL/Q *.BAK . Je-li v prbhu vkonu pkazu tohoto programu teba odpovdat na dotazy stiskem nabzen klvesy, je mon pedpokldanou odpov vloit pmo za pkaz jako parametr, nap. HELP/A nebo DDEL/Y *.BAK . ------------------------------------------------------------------------ DDIR[/W] [jmno] vypie adres DOS diskety DDEL [jmno] zru DOS soubory tohoto jmna, ne soubor zeny nim jasem jejich psmenovmi ekvivalenty uvozenmi zna- kem '^' /T vype esk text v PC kdu brat Kamenickch opravdu esky /E pi rozhzench dcch vpisu je tento parametr vrt na sprvn msto /O ped zahjenm vpisu souboru je mon zadat velikost sti souboru v KBytech z jeho zatku, kter se pi vpisu pesko /S v prbhu vpisu souboru je oznmen zatek kady tajn, systmov a R/O DDEL/Q [jmno] tot s dotazem pro kad vybrann DOS soubor ------------------------------------------------------------------------ CDIR [jmno] vypi adres CP/M diskety CDEL [jmno] zru CP/M soubory tohoto jmna, ne soubory systmov a R/O CDEL/Q [jmno] tot s dotazem pro kad vybrann CP/M soubor Pozn: Aby ve uveden funkce programu zobrazovaly sprvn velikost volnho msho KBytu soubo- ru (nap. pro pozdj pouit parametru /O ) V prbhu vpisu je mon vstupovat tmito klvesami: ^S ............... pozastaven vpisu do stisku libovoln klvesy 0 a 9 .......... volba rychlosti vpisu ( 0 - nejvy 9 - nejni ) ESC nebo ^C ...... ukonen vpisu souboru ------------------------------------------------------------------------ Volba adrese DOS diskety:ta na vloen CP/M disket, je teba po jej vmn provzt inicia- lizaci systmu pkazem ' CDRIVE x ' ( nemn-li se mechanika, sta bez parametru 'x' ). Pi zahjen prce programu je tento kon pro vloenou disketu v jednotce A proveden automaticky. Po vmn DOS diskety dn inicializace nutn nen. ------------------------------------------------------------------------ RCPM [jmno] koprovn soubor DOS <- CP/M RCPM/Q [jmnTrack-Info 1 N11111111 1  CD x: cesta volba DOS jednotky a nastaven cesty CD \ cesta nastaveni cesty ze zkladnho adrese Nzvy adres 'cesty' mus bt oddleny znakem '\' (nap. ADR_1 \ ADR_2 ), mezery v nzvu cesty nemaj vznam. Je-li pouit nzev adrese '..', znamen to hierarchicky vy rove adrese (nelze ze zkladn rovn adrese). Pozn.: pln cesta aktulnho DOS adrese me mt maximln dlku 192 koprovn je pak jen cca 5,5 KB) Program tvo 4 diskov CP/M soubory. Soubor 'XD4.COM' obsahuje zavdc st programu. Soubor 'XD43.OVR' obsahuje provdc st programu, nen-li pouit parametr 'SH' pi voln programu. Je-li naopak tento parametr pouit, je provdci st programu nataena ze souboru 'XD43SH.OVR'. V souboru 'XDOS43.HLP' je uloen text pro pouit pkazu 'HELP'. Po nataen a odstartovn programu (objev se dost o p znak. CDRIVE x volba jednotky pro soubory CP/M USER < 0 a 31 > nastaven aktulnho uivatele CP/M  x je A a E.  ------------------------------------------------------------------------ DATE [rr-mm-dd] vypi, zm datum TIME [hh:mm:ss] vypi, zm as Datum a as se zapisuje pi koprovn souboru na DOS disketu do jeho adresov poloky na disku. Po sputn programu je nastaveno datum 1. 7. 1990 a as 00:00. ikaz) nen u nutn ptomnost diskety s programem v systmu. Jen pi provdn pkazu 'HELP','?' je teba vloit disketu s CP/M souborem 'XDOS43.HLP' (mon vloit i do mechaniky konfigurovan programem na DOS mechaniku). Nen-li tento soubor na specifikovan disket nalezen, objev se chybov hlen. Po skonen programu je nastavena stejn aktuln diskov mechanika a slo uivatele jako bylo ped sputnm programu. Program pracuje pod operanm systmem CP/ EXIT nvrat do CP/M CLS sma obrazovku HELP vypi tento text ------------------------------------------------------------------------ Jmno me vdy obsahovat '*' a '?' kron pkazu DTYPE a CD, kde mus bt zadno jednoznan. Soust jmna nesm bt oznaen mechaniky nebo specifikace cesty. Progran pracuje s DOS disketami jednostrannmi i oboustrannmi o kapaci- tch:  160, 180, 320, 360 KBM Jiho Lamae pro SHARP MZ- 800 z tchto dvod: BIOS operanho systmu mus bt schopen pracovat s 9 sektory na stopu dlouhmi 512 byt (formt IBM) a mus bt schopen akceptovat pi vstupu na konzolu prefix CTRL W pro vstup znak esk abecedy (systm mus tak obsahovat odpovdajc genertor znak). Tento text je uloen v textovm souboru 'XDOS43.HLP' a jako takov ve 40ti stopov mechanice, 720 KB v 80ti stopov mechanice. Program automaticky ur formt vloen DOS diskety. Formt CP/M diskety je po celou dobu prce programu uren parametry dann mechaniky uloenmi v opera- nm systmu CP/M. V prbhu zadvn pkaz je mon provdt vmnu disket v mechani- kch, v dob provdn pkaz ne (krom vzvy systmu s jednou mechanikou). Je-li vloen do mechaniky konfigurovan pro DOS disketa CP/M, je hlena chyje mon ho vytisknout. XDOS V1.1 (c) 1988 JaMeSoft & LecSoft XDOS V4.3 (c) 1990 Jan Jungwirth, Prche, okr. esk Lpa distributor mZx software !!! ( kdo se zajm o samotn zdrojky necha prostuduje tu st nvodu, kter hned po napsn HELP a mechaniky odrolovala. Tam je to co hledte .mZx )  1988 JaMeSoft & LecSoft XDOS V4.3 (c) 1990 Jan Jungwirth, Prche, okr. esk Lpaba, v opanm ppad chyba hlena nen a me dojt k pokozen dat DOS diskety (jen pi provdn pkaz CDEL nebo WCPM). Parametry pi voln programu - nezle na poad ---------------------------------  NH - po odstartovn programu nen vypisovna vodn hlavika. SH - program je pak schopen innosti pod pikazovm procesorem SHELL (nen vhodn pro koprovn delch soubor v systmu s jednou mechanikou - vyrovnvac pam pro Track-Info 1 N11111111 14B 20 70 72 C 01D3' 6F 20 4D 5A C 01D7' 2D 38 30 30 C 01DB' 2C 20 76 65 C 01DF' 72 2E 20 31 C 01E3' 2E 30 43 20 C 01E7' 62 30 39 C 01EA' 2F 43 50 4D C MLOGOX: DEFM '/CPM',0D 01EE' 0D C C ;MLOGO2: DEFM 'Fixed Disk Partitioning',0D 01EF' 28 43 29 43 C MLOGO3: DEFM '(C)Copyright Nipsoft 2001',0D 01F3' 6F 70 79 72 C 01 kterW je disketa ͺ s "!(:!ͪͺ"  MABCDE!Q#!%!*&e.MABCDEͲ!RN!*&!:e.͢ =!(:=o !!͒E)͛ͺ Soubor "*&"!:"!(:!ͪͺ " nenalezen. N*͛ !}oEE*!ͩ!D *&! E4*!"!K%E1*E*B**&͛" )͛ "*!!;!:ͣ!Eʘ*!0!:͢ =!g*!:!!:S,*1!d!~">~@!!!:ͣfzJ!"!*!*n&s*#!!:@!2!2:͠Eʅ!!ͩ!D *&"Ë!!"*c!!Eʨ!!Ï!c!}2*&!Eʨ!*&"*"!͛ͺ ~  !!:ͣfzt""!*n&!*n&EG"!*n&͛"!/" k"͛ͺ(!*n&"ͺ)/ *#!͛ͺ ~> c!!͒Eʛ"!Â"!: !!EI#c!*s!!:ͣfzF#"*n&!"_!}2a*_"W*W^#V!W*W^#V!c}oER+*W!l*W^#Vs#r*W^#V!*W^#V!}oEʌ+!}2aM,*W^#V́!! ͛O}oEʻ+!}2aM,*W^#V́!!**W^#V+)^#V͛O}oE+!}2aM,*W^#V!*W^#V!}oEM,*W^#V!E!͒EM,!}2a*a&@!p!]$b!p:M͠E$-!]$"h!p:!* ]*h*h*h!!!&E,!]$*}oE,!b]$͛ͺNesprav*n&!*n&!s]O}oE=#!*n&*s*n&͛"ͺ<  L#*#"ì"P#I#"!!:*!͛ !}2c!́!͑!͑O}oEʡ#$͛ͺ UkonCit ? MAyN!!*&!NE$!!fz$}2͛!" *&##͙$͛ !}2*&x~ABCDEA:B:C:D:E:!}2x!\e.!!"!}2i{@!!!n&! !:ͣ!}oE$!!!×$!:@!nW datum ,!-!b]$͛ͺNespravnW datum Ä-!]$"h͛ͺ Datum je *h^#VO*!ͪ!-"*h^#VO*!ͪ!-"*h^#V!& .!"*^#V́!!͛O*^#V́!!;͛O}o*^#V́!!;͛O}o}2*&@!!W$!:M͠E.!W$"!:!- ]***!!!&E.!W$ͨ-}oE.!W$͛ͺNesprAvnY Cas ..!W$͛ͺNesprAvnY !:@!!!:ͣn&! E2%!!:ͣ!$!:@!I!I:"c!́!͑!͑O}2*^#V!Eʘ%*^#V!*s#r&͛ͺ(PokraCovAnI ... (stiskni nEjakou klͺAvesu nebo ESC, ^C) ͏!́!͑!͑O}2͛! " ͙!*s#r*&@!s!s:$͋$ @!!:"e"g"iM@*e! e.*i:Ͳ"[*[!Eʘ&*i:*g&*i:!*[+k*g*i:*[#*i:ͣ*[Rk&@*e'Cas R/!W$"͛ͺcas je *^#VO*!ͪ!:"*^#VO*!ͪ!:"*^#VO*!ͪ 0"}2}2}2}2!}2!}2!*&!!fzʬ0}2!**&!N! *&!N*&DM! !*&+*&DM! *&!*&!DMo&}2*&!͒Eʡ0͛ͺ R/W chyba DOS disku pRi  *&!Eʌ0͛ͺzApisu  Þ0͛ͺCtenI  0*&#Ù/*&!}2!}2*&Eʀ/00*&""M@!!*s#r!}2!}2!:&@!!:M͍E9'!}2Þ'!!n&! ]OEo'!!!!}2Þ'!:!!n&e.=@!!!!*&E'!:M͍E'!}2'!:*!*!E'!}2'!*s#r*&}2}2}2""" !@!!}2Z!*s#r!*s#r!*s#r*&Eʚ(*&Eʊ(*&Ez(Ç(*&}o}2Z×(*&}o}2Zç(*&}o}2Z*Z&ý( XDOS43.HLP͛ͺ1Stiskni pIsmeno mechaniky, veTrack-Info 2 N22222222 2"}2!"*^#V!E1*! s#r*^#V!EB1*!s#r**^#V*^#V}2**^#V*^#VE*^#V}2**^#VE!}2*&*&*&*&*V/}2*&}2}2!!""!}2*"!"**^#V͒EQ2*!"* ^#V" 2*&}o*^#V!͒}oED4*!]OEʒ2!}24*^#V"*!n&́!͑!͑O}o*&}o* n&*&|g}o&!_8!*n&͒!_8!͒}o}oE9;͛ͺ Chyba  !}2*&}2*&}oEe;͛ͺFAT !!! *&""}2!}2*!R*&*"!*&!Rfz;"*&E;*&****)))))))))S/}2*#ø;*&}2*&*!͒E><* ^#V"!!"z*" ?*!Eʶ=!!"*!!s* !s#r**s#r*x&}oE=!*!k;}2=!*!S/}2!"**^#V*s#r*^#V ^#V!͒EU>*^#V ^#V*s#r*!R">****}oE>?!*)))))!n&́!͑!͑O}oE?*^#V !"*^#V ^#V*s#r*^#V!*)))*eý4 !)!I!}2Z!!I:ͣfzW5"!I*n&!) ]O}oEN5!}2Z*#5*Z&!""}2!}2*:ͣ!ͥEʽ5͛ͺPRIliZ dlouhW jmWno. Y8*:M͍E6!:M͠E5!:*6͛ͺChybI jmWno. Y8!.e.*:Ͳ"h*h!EF6*:ͣ!"h*:!*h!Rk&!{*:*h!*:ͣk&!j!{:ͣ!͸!j:ͣ!͸}o}2g!{!l4!j!l4*g&!{:!5$)) *^#V !s#r*^#V!R*s#r*!"**ͥE;?!*sU>*& "}2*&!Ex? =====  !}2*&#ýL!!!!Mi4ES!ͳEES͛!""!:!ͪ!"" *"!!́!:!!!1}oEsN͛ͺ v DOS adresARi nenI. S!O!s]OE3O͛ ͛ͺ) Zadej poCet KB vynechanWho textu:  !͎ !:&!oEeE͛ͺDOS disk vymEnEn ! VraTͺ*ho (jinak nastavit novou cestu ) a stiskniͺ klAvesu. ͏!}2B}oEeEíE*&*1&}o}o*&!}oEC*&EʤE!y *&}22*2&}2!}2BE&F*&!yC}oE F͛ͺ DOS disk byl vymEnEn ! &F!!!y?< : !!!:ͣfzM}2!*&n&͛" !Track-Info 3 N33333333 3fzBU}2*] *] :!! *&*&n&!|g}oe.=*&#T*] !! *&! n&!|g}o!͒s*]!! *&! n&!|g}o!͒s!}2!!9o&}2*&!͒EV*!*^#V"*!s#r0T*&}2*&*g!n&"*g!!!d!"!*fzʦV"**e*!n&!*!EV|g}o!"*#TV͛ͺ volnYch **!!!&ͺ KB!ͥE_* !!;._!*  !!!ͽ)`* !!NEʋ_!* ! !!!ͽ)`* !ͥE_!* *  !!!ͽ)`!* !*  !!!ͽ!:! ! :}2**&"!*!fzʣ`"*_8!ͥEʚ`**&R"*#l`*&E`͛*! N*!V̀^!ͪͺ volnYch byt !"!%!*&N/S!"t͛ͺ$ AdresAR CPM diskety v mechanice !&$*&):!ͪͺ, uZivatel CIslo ! !o&!&ͺ  *!EʰWM!0ÿWM*.*!0!!:!0:aSEʙZ*!EX͛ͺBude zruSeno: *"v!"r!"p*v"x*r!E6X͛! " *x:͛!ͪ!."*x :!ͪ *x n&E|X͛ͺ r/o *xn&EʡX͛ͺ sys  ôX͛ͺ  *x n&}oEX͛ͺ  *!J, tj. *! ͛!!yͺ KB viëb"D!*D! V!dE!!+;*D!V!|g}oO*!-e.=!+:=!+*D!|g}oO*!-e.=!+:=!+!+:!F!F:"*! V"*! EO*!:e.=*!V!?|g}oO*=!*! EJb!:!pe.=!bb!:! e.=!*! Eʒb!!!1s!!!2s!:!!:"!"*!!W!s]O}oEEY*x!s*x n&*xn&}oE4Y͛ͺ Nelze zruSit. Y!Q!s]O}oE^Y*x!sY͛ͺ ZruSit ? MAyNX!?!*?&!XEʧY͛! " \*x*?&́!A͑!Y͑Os*xn&}oEY*t!R"t*r!"r*r!*!}oE_Z͛ *!!Q!s]O}o}oEYZ!pK%EYZ\!"r*t!"t*v!͒EʉZ*v^#V"v*v!EX͛ͺ  *!EZ͛ͺBude zruSeno  *t͛!&b!"!}2͛ *́!!͛OEʻc͛ͺ DOS disk o kapacitE *!!&ͺ KB v jednotce !!$*&n&"! " *i&Eʡc͛ͺ se jmWnem: !j:!ͪ ûc͛ͺ nemA jmWno ͛ͺ AdresAR !&$*&):!ͪ!:!ͪͺ  * ^#V"!"!"}*x&*!}oEAd́!YYd́!͑!͑!Y*!Eyd!!}2WÀd!}2W*RʖdRg!![!Y]!:!*W&1Eg!["*8͛!ͪ! "* souborJ  *!*t!}oE[͛ͺ ProvWzt ? MAyN!?Q#*?&́!A͑!Y͑OE[*"v*v!͒E[*v"x*xn&E[!@!&$*&):*x:$=!.e.=*x :=p!@͓*v^#V"v[[*!E[͛ͺ NynI je V"+"-!}2/*"* ^#V*-͒EC\* ^#V"\*"#*# n&!!!!|g}o!͒E\͛ͺ% Soubor nelze zruSit. *# n&!|g}o!E\*+^#V!R*+8!ͪ * n&!|g}o!E=e͛*^#V*^#V̀^! ͪ Pe͛ͺ  ͛ͺ *^#V"a!ͪ ͛ͺ *^#Va!ͪͺ  * n&!|g}o!Elf*!"* n&!|g}o!Ee͛ͺHidden,  * n&!|g}o!E2f͛ͺSystem,  * n&!!|g}o!Elf͛ͺNormal,  * n&! |g}o!Eʡf͛ͺ Archive,  * n&!|g}o!Ef͛ͺ R/O *!Eʘg!s#rz^*#!!s*#^#V"!*!_8"*!ͥ*!͸}o*!ͥ}oEK]*!!8*"!*!!*!*!}oE]*v!"v*"!*v**&! ͥ*x&}o}o*!_8!ͥ}o*!_8*!͸}oEs^*!_8!ͥ*!_8*!͸}oE(^*!"*!_8"!]*!_8!ͥEs^*!8*!!8*v**&! R"v!}2/*/&"" M!*!E1_* !!NE^!!!!ͽ._* Track-Info 3 N33333333 3Q!s]O}oE g*!\}2XØg͛ͺ ZruSit ? MAyNX!þ!*þ&!XEZg͛! " pi*þ&́!A͑!Y͑OEʉg*!\}2XØg*!R"͛ *!!Q!s]O}o}oEg!}K%EgpiÖdhRh!"{!![!Y]!:!!!!1Eʼh*f&!|g}o!EKh*!"![8͛!ͪ! "!c8!ͪͺ  *{!!|g}o"{*{!Eʹh͛ !}K%Eʹhpig*{!͒Eh͛ ͛ͺ ͒Ep͛ͺsys 2t*[&!|g}o!͒E.q͛ͺr/o 2t*[&!|g}o!͒Eaq͛ͺhidden 2t͛ͺ PRepsat ? MAyNX!N!*N&!NEʢq͛ 2t*N&!XEq͛ Ct*!~\}oEq|tQr!Q!s]OEQr͛ͺ ZkopIrovat ? MAyNX!N!*N&!NE3r͛ 2t*N&!XEQr͛ Cẗ́j!"t!"r!!&$*&):*:$=!.e.=* :=p!p!͒Eʵr|t!]!Er͛ͺSoubor prAzdnY.  *!Ei͛ͺ Bude zruSeno  *͛!&ͺ soubor(J)  **s#r*!Ebi͛ͺ Pak bude  !B`!}2*&!Ͼ"*!EʥiM!ôiM*.*!!!Ͼ!!:i4Eʃj!ͳEEʀj*!Ͼ:!ľaE}j*!*ľ!}oE}j͛ͺ ProvWzt ? MAyN!þQ#*þ&́!A͑!Y͑OEtj!!Ϳ9Etj!!!y?<}2ƾ͛ Ãjd$*!͒Eʵj*^#V"!!z*"Äj}to"K*K^#V_8!͒*K^#V* 2t!z*:* :=!gk}oEsCt!]"x*x"t!z5n}oE6sCt*x!͸E#sͰm}oEUsCt*"ý*ý*t!Ns#r*ý*t! Vs#r*ý ! !N*v!R"v!!Ϳ9}oEs|t!!!y?<}oEs|t*|!"|͛ͺ( JeStE je na DOS disketͺ E volnYch  !B`*p^#V"p5p͛ͺ ZkopIrovAno *|!&ͺ souborJ !ͲKEʬt!ͳEEʩt!:͹jìtd$zôv**&!"%!}23*!͒Elu!}oE k*K^#V!*Ks#rj*K^#V*!}2B*B&}2M*B&}oEak͛ͺ DOS disk plnY. *M&",!."?!}2A*v!͸Eil*x&Ek͛ͺ! HlavnI DOS adresAR je plnY,ͺ nutno zvolit jinY. êmil*"*_8!El*_8"k!*?s#r*?ͼj}oE-lêm*?^#V!8**?^#V8*v*&*! "v!*?s#r*?ͼjEʪm**,s#r*,^#V ^#V!͒Eʾl*,^#V ^#V*,s#rÉl*,^#V !"*,^#V ^#V*,!6**%ͺ!͒E@u͛ͺ& AdresAR nebo disk CPM plnY .!" sux#EKusu*^#V")!!z*)"t!}23*3&""!}2$D!Eʧuͳt}oEʧuîv*!Ev!!*!s#r!*"*k;}oEv͛ͺdat ! îvx#E vîvçv*"*^#V!͒E?v*^#V"v*!*^#V"*!s#r!*"*k;}oEʜv͛ͺdat ! îvx#Eʧvîv!}2$*$&!!%!*&N*"!"s#r*,^#V !s#r*,^#V"$!.!*$! d*$*?^#Vs#r*$ ! s*$*W$! N*Y$!N*[$!s#r*$*a$!R! N*_$!N*]$s#r!}2A*A&!}2*!͒E(n!*^#V*k;}oEm͛ͺdat ! /nx#En/n*^#V"!!z*"÷m!}2*&"!}2*x"**&!"**Exn*"D!EʗnͰm}oEʗno*!En!!*!s#r*^#V*s#r!**;!!f́!:!!!!!1Ey!f"*8!.e.=*8=!͛!""!:!ͪͺ"  !!:MaSE3x͛ͺ je na CPM  * n&Eʯw͛ͺr_o y*n&Ew͛ͺsys y͛ͺ PRepsat ? MAyNX!4!*4&!NEx͛ y*4&!XE0x͛ yêx!Q!s]OEʪx͛ͺ ZkopIrovat ? MAyNX!4!*4&!NEʌx͛ y*4&!XEʪx͛ y!6!&$*&):!f8$=!.e.=!n8= po*"*^#V!͒Eo*^#V"n*!*^#V"*!s#r*^#V*s#r!**; x#Epoo*x*R"x*x!͸Eʨo*^#V!8!}2o*^#V!"!ͼjEo*^#V*8**s#r!}2*&!ɽ!%!*&N!"|!!ɽ:MaS}oE/pCt*"p*p!͒ECt*p"͛!""*:!ͪ!."* :!ͪͺ"  *"!!Ṕ*:* :=!!!1Eq͛ͺ je na DOS  *[&!|g}o!Track-Info 4 N44444444 4p!6o!͒E2y͛ͺ& AdresAR CPM disku je plnY. y*"*!ͥ*!͸}oE~y*yu}oEqy!6͓y*_8"8yͳt}oEʓy!6͓y!6Ͱ ͛ͺ' JeStE je na CPM disketE  V*!"/S̈́jv͛ͺ ZkopIrovAno *!&ͺ souborJ !ѼͲKEfz!!Ѽ!Mi4Efz!ͳEEcz!Ѽ:Ͱtfzd$́!s!/e.!:Ͳ}2*&!E{*&!!:ͣfzz}2!s]́!*&n&͑!sط*n&!*n&!s]O}oE=#!*n&*s*n&͛"ͺ<  L#*#"ì"P#I#"!!:*!͛ !}2c!́!͑!͑O}oEʡ#$͛ͺ UkonCit ? MAyN!!*&!NE$!!fz$}2͛!" *&##͙$͛ !}2*&x~ABCDEA:B:C:D:E:!}2x!\e.!ö!"!}2i{@!!!n&! !:ͣ!}oE$!!!×$!:@!ӯ*&#òz!:!*&!Rk!@!!:&@!!!!ƻH&gz!:M͠Eʻ}!:MHELP͍!:!?e.͍}oEʆ{ͭ(û}!:MEXIT͍Eʦ{!}2c$û}!:MCLS͍E{>û}!:MDATE͍E{!ƻ:ͱ*û}!:MTIME͍E|!ƻ:ͅ-û}!:MCDRIVE͍E)|!ƻ:ͷFû}!:MWCPM͍EK|!ƻ:ͭtû}!:MRCPM͍Em|!ƻ:Ͷjû}!:MDDIR͍Eʓ|!!ƻ:aû}!:MCD͍Eʳ|!ƻ:Gû}!:MDDEL͍E|!!ƻ:aû}!:M!ӯ:@!!!:ͣn&! E2%!!:ͣ!$!:@!I!I:"c!́!͑!͑O}2*^#V!Eʘ%*^#V!*s#r&͛ͺ(PokraCovAnI ... (stiskni nEjakou klͺAvesu nebo ESC, ^C) ͏!́!͑!͑O}2͛! " ͙!*s#r*&@!s!s:$͋$ @!!:"e"g"iM@*e! e.*i:Ͳ"[*[!Eʘ&*i:*g&*i:!*[+k*g*i:*[#*i:ͣ*[Rk&@*e'USER͍E|!ƻ:,Fû}!:MCDIR͍E!}!!ƻ:Vû}!:MCDEL͍EG}!!ƻ:Vû}!:MDTYPE͍Ej}!ƻ:Lû}͛ͺNeznAmY pRIkaz "!:!ͪͺ", HELPͺ vypISe pRIkazy. )  !!$*&n&͛"!:"!:!ͪ ͛ͺ Zadej pRIkaz:  !2@͎ ͛ !2:@!{!{:!"!"!"M CDRIVE A:͈$MCD B:͈$͙}͈$*c$&Eʩ~! !o&}2w! *w&ͺ~"M@!!*s#r!}2!}2!:&@!!:M͍E9'!}2Þ'!!n&! ]OEo'!!!!}2Þ'!:!!n&e.=@!!!!*&E'!:M͍E'!}2'!:*!*!E'!}2'!*s#r*&}2}2}2""" !@!!}2Z!*s#r!*s#r!*s#r*&Eʚ(*&Eʊ(*&Ez(Ç(*&}o}2Z×(*&}o}2Zç(*&}o}2Z*Z&ý( XDOS43.HLP͛ͺ1Stiskni pIsmeno mechaniky, ve$~ !{:!"!"!"M CDRIVE A:͈$MCD B:͈$͙}͈$*c$&Eʩ~! !o&}2w! *w&ͺ~:Lû}͛ͺNeznAmY pRIkaz "!:!ͪͺ", HELPͺ vypISe pRIkazy. )  !!$*&n&͛"!:"!:!ͪ ͛ͺ Zadej pRIkaz:  !2@͎ ͛ !2:@!{!{:!"!"!"M CDRIVE A:͈$MCD B:͈$͙}͈$*c$&Eʩ~! !o&}2w! *w&ͺ~ kterW je disketa ͺ s "!(:!ͪͺ"  MABCDE!ެQ#!%!*ެ&e.MABCDEͲ!RN!߬*ެ&!:e.͢ =!(:=o !߬!͒E)͛ͺ Soubor "*ެ&"!:"!(:!ͪͺ " nenalezen. N*͛ !߬}oEE*!߬ͩ!ݬD *ݬ&! E4*!"!K%E1*E*B**ݬ&͛" )͛ "ʬ*ʬ!!;!:ͣ!Eʘ*!0!:͢ =!g*!:!̬!̬:S,*1!d!~">~@!!!:ͣfzJ!"!*!*n&s*#!!:@!2!2:͠Eʅ!!ͩ!ܷD *ܷ&"Ë!!"*c!!Eʨ!!Ï!c!}2ѷ*ѷ&!Eʨ!*ѷ&"ڷ*ڷ"!͛ͺ ~  !!:ͣfzt""!*n&!*n&EG"!*n&͛"!/" k"͛ͺ(!*n&"ͺ)/ *#!͛ͺ ~> c!!͒Eʛ"!Â"!: !!EI#c!*s!!:ͣfzF#"*n&!Track-Info 4 N44444444 4"_!}2a*_"W*W^#V!W*W^#V!c}oER+*W!l*W^#Vs#r*W^#V!*W^#V!}oEʌ+!}2aM,*W^#V́!! ͛O}oEʻ+!}2aM,*W^#V́!!**W^#V+)^#V͛O}oE+!}2aM,*W^#V!*W^#V!}oEM,*W^#V!E!͒EM,!}2a*a&@!p!]$b!p:M͠E$-!]$"h!p:!* ]*h*h*h!!!&E,!]$*}oE,!b]$͛ͺNesprav*eý4 !)!I!}2Z!!I:ͣfzW5"!I*n&!) ]O}oEN5!}2Z*#5*Z&!""}2!}2*:ͣ!ͥEʽ5͛ͺPRIliZ dlouhW jmWno. Y8*:M͍E6!:M͠E5!:*6͛ͺChybI jmWno. Y8!.e.*:Ͳ"h*h!EF6*:ͣ!"h*:!*h!Rk&!{*:*h!*:ͣk&!j!{:ͣ!͸!j:ͣ!͸}o}2g!{!l4!j!l4*g&!{:!5$nW datum ,!-!b]$͛ͺNespravnW datum Ä-!]$"h͛ͺ Datum je *h^#VO*!ͪ!-"*h^#VO*!ͪ!-"*h^#V!& .!"*^#V́!!͛O*^#V́!!;͛O}o*^#V́!!;͛O}o}2*&@!!W$!:M͠E.!W$"!:!- ]***!!!&E.!W$ͨ-}oE.!W$͛ͺNesprAvnY Cas ..!W$͛ͺNesprAvnY ]́!?͑4}o!j:!5$ ]́!?͑4}o}2g*&!Ev7*g&!?e.!{:Ͳ!}o!?e.!j:Ͳ!}o}2g!{:ͣ!Eʧ7!{:! e.=!{v7!j:ͣ!E7!j:! e.=!jç7!{:!j:=*!{:!.e.=!j:=**g&}2*g&E&8Y8͛ͺNesprAvnW jmWno "*:!ͪͺ" *&"!*!"!*n&!*!n&!N"*͋E8*!V"8*!|g}o"*" "Cas R/!W$"͛ͺcas je *^#VO*!ͪ!:"*^#VO*!ͪ!:"*^#VO*!ͪ 0"}2}2}2}2!}2!}2׫!*&!!fzʬ0}2ի!**ի&!N! *&!N*&DM! !*&+*ի&DM! *&!*ի&!DMo&}2ԫ*ԫ&!͒Eʡ0͛ͺ R/W chyba DOS disku pRi  *&!Eʌ0͛ͺzApisu  Þ0͛ͺCtenI  0*ի&#Ù/*ԫ&!}2!}2׫*׫&Eʀ/00*&"!*!"!"!"*͋E-9!"!"* !N" !** &*|g}o!*n&*}/o|/g|g}o|g}os!*!* l&*|g}o!*!n&*}/o|/g|g}o|g}os"}2!}2!"*^#V"!*^#V!RfzS:"*&EJ:*&*&****)))))))))S/}o}2*#:*&!E:!*^#V!Rfz:"*&E:*&*&***^#V**)))))))))S/}o}2*#Á:*"}2!"*^#V!E1*! s#r*^#V!EB1*!s#r**^#V*^#V}2**^#V*^#VE*^#V}2**^#VE!}2*&*&*&*&*V/}2*&}2}2!!ͫ"ϫ"ѫ!}2*"!"**ѫ^#V͒EQ2*!"* ^#V" 2*&}o*ѫ^#V!͒}oED4*!ͫ]OEʒ2!}24*ѫ^#V"*!n&́!͑!͑O}o*&}o* n&*&|g}o&!_8!*n&͒!_8!͒}o}oE9;͛ͺ Chyba  !}2*&}2*&}oEe;͛ͺFAT !!! *&""}2!}2۪*!R*&*"ު!*&!Rfz;"ܪ*۪&E;*&*ު*ܪ**ܪ)))))))))S/}2۪*ܪ#ø;*۪&}2*&*!͒E><* ^#V"Ѫ!!"z*Ѫ" ?*!Eʶ=!!"*!!s* !s#r**s#r*x&}oE=!*!k;}2=!*!S/}2!"**^#V*s#r*^#V ^#V!͒EU>*^#V ^#V*s#r*!R">****}oE>?!*)))))!n&́!͑!͑O}oE?*^#V !"*^#V ^#V*s#r*^#V!*)))!n&!:EG!!!!:M͠EʦG!:ͣ!EqG!!n&́!A!E͛OEqG!!n&!AR}2!}2*&}oEʦG͛ͺnesprAvnY parametr ! G! ! !*&!"g!"eH"!b!n&}2Y!b!*!b:͋$@!b@!b!b:ͣ!E;HñK!b:ͣ!ͥ!b!n&!:}o!b!n&́!A!E͛O}oEʯH!b!n&!AR}2!Gd$!b!n&!\EHd$!G!b:ͣ!)) *^#V !s#r*^#V!R*s#r*!"**ͥE;?!*sU>*& "ͪ}2Ϫ*Ϫ&!Ex? < : !!!:ͣfzM}2!*&n&͛" !V!}o}2Y*Y&!}2b!!!S/}oE8C͛ͺBOOT sektoru ! C!!!d!B}oEʪC͛ͺ(Disk nebyl formAtovAn DOSem nebo jeho ͺformAt nelze pouZIt. C!!Ϳ9EC!}2b*b& }21!}22*x&EC!}2äE!}2!!!?<}oEDíE*"!!́!͑M xxxxxxxxxxxx!!1}2*&*+*}o!8M. ͍}o*)**'*}o}o*1&}o}o}2*&!}2*&}o*1&}o*&!}*&n&! ͥEM*&!}2!*&n&! E*M!}2!*&n&! EʾM*&!S!s]O}oEʾM͛ͺ =====< !,! !!yͺ. KB souboru >=====  !}2*&#ýL!!!!Mi4ES!ͳEES͛!""!:!ͪ!"" *"!!Ƥ́!:!!!1}oEsN͛ͺ v DOS adresARi nenI. S!O!s]OE3O͛ ͛ͺ) Zadej poCet KB vynechanWho textu:  !͎ !:&!oEeE͛ͺDOS disk vymEnEn ! VraTͺ*ho (jinak nastavit novou cestu ) a stiskniͺ klAvesu. ͏!}2B}oEeEíE*&*1&}o}o*&!}oEC*&EʤE!y *&}22*2&}2!}2BE&F*&!yC}oE F͛ͺ DOS disk byl vymEnEn ! &F!!!y?  ͛ͺ *^#V"a!ͪ ͛ͺ *^#Va!ͪͺ  * n&!|g}o!Elf*!"* n&!|g}o!Ee͛ͺHidden,  * n&!|g}o!E2f͛ͺSystem,  * n&!!|g}o!Elf͛ͺNormal,  * n&! |g}o!Eʡf͛ͺ Archive,  * n&!|g}o!Ef͛ͺ R/O *!Eʘg! po*"*^#V!͒Eo*^#V"n*!*^#V"*!s#r*^#V*s#r!**; x#Epoo*x*R"x*x!͸Eʨo*^#V!8!}2o*^#V!"!ͼjEo*^#V*8**s#r!}2*&!ɝ!%!*&N!"|!!ɝ:MaS}oE/pCt*"p*p!͒ECt*p"͛!""*:!ͪ!."* :!ͪͺ"  *"!!Ṕ*:* :=!!!1Eq͛ͺ je na DOS  *[&!|g}o!Q!s]O}oE g*!\}2XØg͛ͺ ZruSit ? MAyNX!Þ!*Þ&!XEZg͛! " pi*Þ&́!A͑!Y͑OEʉg*!\}2XØg*!R"͛ *!!Q!s]O}o}oEg!}K%EgpiÖdhRh!"{!![!Y]!:!!!!1Eʼh*f&!|g}o!EKh*!"![8͛!ͪ! "!c8!ͪͺ  *{!!|g}o"{*{!Eʹh͛ !}K%Eʹhpig*{!͒Eh͛ ͛ͺ ͒Ep͛ͺsys 2t*[&!|g}o!͒E.q͛ͺr/o 2t*[&!|g}o!͒Eaq͛ͺhidden 2t͛ͺ PRepsat ? MAyNX!N!*N&!NEʢq͛ 2t*N&!XEq͛ Ct*!~\}oEq|tQr!Q!s]OEQr͛ͺ ZkopIrovat ? MAyNX!N!*N&!NE3r͛ 2t*N&!XEQr͛ Cẗ́j!"t!"r!!&$*&):*:$=!.e.=* :=p!p!͒Eʵr|t!]!Er͛ͺSoubor prAzdnY.  *!Ei͛ͺ Bude zruSeno  *͛!&ͺ soubor(J)  **s#r*!Ebi͛ͺ Pak bude  !B`!}2*&!Ϟ"*!EʥiM!ôiM*.*!!!Ϟ!!:i4Eʃj!ͳEEʀj*!Ϟ:!ĞaE}j*!*Ğ!}oE}j͛ͺ ProvWzt ? MAyN!ÞQ#*Þ&́!A͑!Y͑OEtj!!Ϳ9Etj!!!y?<}2ƞ͛ Ãjd$*!͒Eʵj*^#V"!!z*"Äj}to"K*K^#V_8!͒*K^#V*Track-Info 6 N66666666 6 2t!z*:* :=!gk}oEsCt!]"x*x"t!z5n}oE6sCt*x!͸E#sͰm}oEUsCt*"Ý*Ý*t!Ns#r*Ý*t! Vs#r*Ý ! !N*v!R"v!!Ϳ9}oEs|t!!!y?<}oEs|t*|!"|͛ͺ( JeStE je na DOS disketͺ E volnYch  !B`*p^#V"p5p͛ͺ ZkopIrovAno *|!&ͺ souborJ !ͲKEʬt!ͳEEʩt!:͹jìtd$zôv**&!"%!}23*!͒EluUSER͍E|!ƛ:,Fû}!:MCDIR͍E!}!!ƛ:Vû}!:MCDEL͍EG}!!ƛ:Vû}!:MDTYPE͍Ej}!ƛ:Lû}͛ͺNeznAmY pRIkaz "!:!ͪͺ", HELPͺ vypISe pRIkazy. )  !!$*&n&͛"!:"!ö:!ͪ ͛ͺ Zadej pRIkaz:  !2@͎ ͛ !2:@!{!{:!"!"!"M CDRIVE A:͈$MCD B:͈$͙}͈$*c$&Eʩ~! !o&}2w! *w&ͺ~!6**%ͺ!͒E@u͛ͺ& AdresAR nebo disk CPM plnY .!" sux#EKusu*^#V")!!z*)"t!}23*3&""!}2$D!Eʧuͳt}oEʧuîv*!Ev!!*!s#r!*"*k;}oEv͛ͺdat ! îvx#E vîvçv*"*^#V!͒E?v*^#V"v*!*^#V"*!s#r!*"*k;}oEʜv͛ͺdat ! îvx#Eʧvîv!}2$*$&!!%!*&N*"!"$~ !{:!"!"!"M CDRIVE A:͈$MCD B:͈$͙}͈$*c$&Eʩ~! !o&}2w! *w&ͺ~:Lû}͛ͺNeznAmY pRIkaz "!:!ͪͺ", HELPͺ vypISe pRIkazy. )  !!$*&n&͛"!:"!ö:!ͪ ͛ͺ Zadej pRIkaz:  !2@͎ ͛ !2:@!{!{:!"!"!"M CDRIVE A:͈$MCD B:͈$͙}͈$*c$&Eʩ~! !o&}2w! *w&ͺ~!!f́!:!!!!!1Ey!f"*8!.e.=*8=!͛!""!:!ͪͺ"  !!:MaSE3x͛ͺ je na CPM  * n&Eʯw͛ͺr_o y*n&Ew͛ͺsys y͛ͺ PRepsat ? MAyNX!4!*4&!NEx͛ y*4&!XE0x͛ yêx!Q!s]OEʪx͛ͺ ZkopIrovat ? MAyNX!4!*4&!NEʌx͛ y*4&!XEʪx͛ y!6!&$*&):!f8$=!.e.=!n8=croll ofset do HL LD BC,28h ;8 riadkov x 5 shiftov LD DE,LSOFMX ;3C0h hranica ADD HL,BC ;zvacsenie ofsetu SBC HL,DE ;ofset dosiahol hranicu? JR Z,SCROL1 ;dosiahol, novy ofset bude nula ADD HL,DE ;nedosiahol, vrat novy ofset SCROL1: LD (LSOF),HL ;uloz novy ofset DI ;pocas skrolovania nesmieme prerusovat CALL CUROF ;vypni kurzor LD HL,LSOF+4 ;hodnoty skrolregistrov LD BC,6CFh ;out port skrol registrov OTDR ;skroluj EI ;uz mozeme prerusovat POP DE POP BC RET ;pohp!6o!͒E2y͛ͺ& AdresAR CPM disku je plnY. y*"*!ͥ*!͸}oE~y*yu}oEqy!6͓y*_8"8yͳt}oEʓy!6͓y!6Ͱ ͛ͺ' JeStE je na CPM disketE  V*!"/S̈́jv͛ͺ ZkopIrovAno *!&ͺ souborJ !ќͲKEfz!!ќ!Mi4Efz!ͳEEcz!ќ:Ͱtfzd$́!s!/e.!:Ͳ}2*&!E{*&!!:ͣfzz}2!s]́!*&n&͑!syby kurzora - komentare snad netreba ;nici: AF,HL ;kurzor vpravo CRIGHT: DI CALL CUROF LD HL,CPOSX LD A,MAXCOLS-1 INC (HL) CP (HL) JR NC,SETON CRIG2: LD (HL),0 ;kurzor dole CDOWN: DI CALL CUROF LD HL,CPOSY LD A,MAXLIN-2 INC (HL) CP (HL) JR NC,SETON DEC (HL) CALL SCROLL JR SETON ;kurzor hore - zatial bez skrolu :-( CUP: LD HL,CPOSY JR CLEF1 ;kurzor vlavo CLEFT: LD HL,CPOSX CLEF1: DI CALL CUROF LD A,(HL) OR A JR Z,SETON DEC (HL) SETON: DI CALL CURON *&#òz!:!*&!Rk!@!!:&@!!!!ƛH&gz!:M͠Eʻ}!:MHELP͍!:!?e.͍}oEʆ{ͭ(û}!:MEXIT͍Eʦ{!}2c$û}!:MCLS͍E{>û}!:MDATE͍E{!ƛ:ͱ*û}!:MTIME͍E|!ƛ:ͅ-û}!:MCDRIVE͍E)|!ƛ:ͷFû}!:MWCPM͍EK|!ƛ:ͭtû}!:MRCPM͍Em|!ƛ:Ͷjû}!:MDDIR͍Eʓ|!!ƛ:aû}!:MCD͍Eʳ|!ƛ:Gû}!:MDDEL͍E|!!ƛ:aû}!:MTrack-Info 7 N77777777 7EI RET ;kurzor na zaciatok riadku CBEG: XOR A CALL UMX JR SETON ;kurzor home CHOME: LD HL,0 CALL UMXY JR SETON ;BIOS sluzba - vystup znaku na konzolu CONOUT: LD (STCK1S),SP ;odloz zasobnik LD SP,STCK1 ;nastav CONOUT zasobnik s navrat. adresou LD HL,CONOPH ;CONOUT faza LD A,C ;parameter do A LD B,(HL) ;faza do B DJNZ CONOP2 ;skoc ak faza >1 CP 20h ;je riadiaci znak? JP NC,PRNTC ;neni, vytlac ho CP 1Bh ;ESC JR Z,CTLESC CP 1Ah ;CLS+HOME JR Z,CTLCLS CP 8 ;baccie D VIFLAG: DEFB 0 HOME: LD BC,0 SETTRK: LD (WTRK),BC RET SETSEC: LD (WSEC),BC RET SETDMA: LD (WDMA),BC RET SECTRA: LD L,C LD H,B RET SELDSK: LD A,C ;cislo disku do A CP 5 ;je mensie ako 5? JR NC,SELDER ;neni mensie ako 5, ohlas chybu CP 1 JR Z,SELDER ;disk B nepodporujeme JR C,SELD2 DEC A SELD2: LD B,A ADD A,A ;vynasob 15 ADD A,A ADD A,A ADD A,A SUB B LD L,A ;15-nasobok uloz do HL LD H,0 LD DE,TABDPB ;adresa DPB pre disk A ADD HL,DE ;adrekspace JP Z,CLEFT CP 0Dh ;CR JP Z,CBEG CP 0Ah ;LF JP Z,CDOWN CP 17h ;shift na horne ASCII JR Z,CTLSHT CP 7 ;BEEP JR Z,CTLBP CONORT: LD SP,(STCK1S) ;tu sa konci CONOUT RET CTLESC: INC (HL) ;ESC sekvencia - zvacsi fazu RET CTLCLS: LD A,MAXLIN-1 ;zmazeme 24 riadkov JP CLRSCR CTLSHT: SET 7,(HL) ;nastavime priznak horneho ASCII RET CTLBP: ;BEEP sa mi nechce implementovat RET CONOP2: DJNZ CONOP3 ;skoc ak faza >2 CP '=' ;GOTOYX JR Z,CTLGTO DEC (HL) CP '*' ;CLS+sa DPB pre voleny disk LD E,(HL) ;SPT do E INC HL INC HL INC HL LD D,(HL) ;BLM do D INC HL INC HL LD A,(HL) ;test DSM na nulu INC HL OR (HL) JR Z,SELDER ;DSM voleneho disku je nula, hlas chybu INC D ;pocet sektorov v klustri LD (SPT),DE ;uloz SPT a velkost klustra LD A,C ;nastav cislo disku LD (VDSK),A ;do premennej BIOSu SELD1: OR A JR Z,SELD3 DEC A SELD3: ADD A,A ;cislo disku vynasob 16 ADD A,A ADD A,A ADD A,A LD L,A ;16-nasobok cisla disku do HL LD H,0.COMMENT @ ***************************** * * * *** CPM HDD BIOS *** * * ~~~~~~~~~~~~~~~~~~~~ * * Obsluha diskov * * Datum * 8.10.2002 * * * * (C) NIPSOFT * * Marek Smihla * * Fedinova 20 * * Bratislava * * 851 01 * * * ***************************** @ .Z80 ;YES EQU -1 ;NO EQU 0 FDD EQU YES GLOBAL LD DE,TABDPH ;adresa DPH pre disk A do DE ADD HL,DE ;adresa DPH pre zvoleny disk do HL RET ;hotovo SELDER: LD (STCK1S),SP ;nastav lokalny zasobnik LD SP,STCK1 LD DE,MERRDS ;adresa hlasky do DE CALL ERRMSG ;hlas chybu ; EI ;povol prerusenie (ERRMSG ho zakazuje) LD SP,(STCK1S) ;obnov povodny zasobnik SBC HL,HL ;0 pre abort, -1 pre ignore RET NC ;ak bol abort, vrat sa s nulou v HL LD A,(VDSK) ;bol ignore, zrataj DPH aktualneho disku do HL JR SELD1 ;nastavi adresu a strankuHOME,SELDSK,SECTRA GLOBAL SETTRK,SETSEC,SETDMA GLOBAL READ,WRITE GLOBAL DPBA,DPBC,DPBD,DPBE GLOBAL GSEC,GHEAD,PARTC,PARTD,PSIZC,PSIZD GLOBAL SELMST,RDIDE,WRIDE,BUF512 GLOBAL FLUSH GLOBAL WTXMS ; COND FDD ; EXT FRDBUF,FWRBUF ; ENDC ;FDD ; EXT STCK1,STCK1S ; EXT ERRMSG .RADIX 10 VDSK: DEFB 0 ;disk WTRK: DEFW 0 ;stopa WSEC: DEFW 0 ;sektor WDMA: DEFW 0 ;adresa DMA VDSKB: DEFB 0 ;disk v bufri WTRKB: DEFW 0 ;stopa v bufri WSECB: DEFW 0 ;sektor v bufri VPEND: DEFB 0 v RAMDISKu ;vystup: ;Z=1 - nemame ramdisk ;Z=0 OK, B-128, C=port dat, HL=DMA SETRD: LD HL,(DPBE+5) ;je velkost ramdisku LD A,H OR L ;nulova? RET Z ;ak ano, vrat sa LD A,(WTRK) ;stopa do A RRA LD H,A ;cislo page do H LD A,(WSEC) ;sektor do A RRA LD B,A ;horna cast adresy do B LD A,0 RRA ;dolna cast adresy do A LD C,0E9h ;page port OUT (C),H ;nastav page LD C,0EBh ;address port OUT (C),A ;nastav adresu DEC C ;port dat do C LD B,80h ;dlzka sektora do B LD HL ;write buffer pending SEQCNT: DEFB 0 ;pocitadlo sekvencnych sektorov WRTPAR: DEFB 0 ;parameter sluzby write SPT: DEFB 24h ;pocet sekt. na stopu CLSIZE: DEFB 10h ;pocet sektorov v klustri GSEC: DEFW 1 ;geometria - pocet fyz. sekt. na stopu HD GHEAD: DEFW 1 ;geometria - pocet fyz. hlav na cylinder HD PARTC: DEFW 0,0 ;rel. virt. sektor zaciatok particie C PSIZC: DEFW 0 ;max. virt. sektor particie C PARTD: DEFW 0,0 ;rel. virt. sektor zaciatok particie D PSIZD: DEFW 0 ;max. virt. sektor partiTrack-Info 7 N77777777 7,(WDMA) ;DMA do HL RET ;ideme citat sektor z RAMDISKu RDREAD: CALL SETRD ;nastav adresu JR Z,RDEND ;ak nemame ramdisk, skonci s chybou INIR RDR1: SCF ;bolo OK JR RDEND ;ideme pisat sektor na RAMDISK RDWRIT: CALL SETRD ;nastav adresu JR Z,RDEND ;ak nemame ramdisk, skonci s chybou OTIR JR RDR1 READ: LD (STCK1S),SP LD SP,STCK1 LD A,(VDSK) XOR 4 ;je aktualny ramdisk (E)? JR Z,RDREAD ;ramdisk je aktualny, obsluz ho XOR A LD (SEQCNT),A ;nuluj pocitadlo sekvencnych sektr LD (WRTPAR),A JR WRI4 WRI3: XOR A LD (SEQCNT),A ;vynulujeme sekvencne pocitadlo WRI4: CALL TSTBUF ;je buffer pripraveny? JR Z,WRI5 ;ak je pripraveny, mozeme pokracovat v zapise CALL FLUSH ;nebol pripraveny, vypluj stary buffer JR NC,RDEND ;ak bol problem, skonci CALL SETBUF ;nastav disk/stopu/sektor v bufri LD A,(WRTPAR) ;piseme sekvencne? XOR 2 SCF CALL NZ,RDBUF ;ak nepiseme sekvencne, nacitaj buffer JP NC,RDEND ;ak bola chyba, skonci WRI5: CALL NC,SETBUF ;nastav disk/stoporv LD A,(WSEC) ;testuj, ci sektor AND 3 ;je prvy sektor v bufri? JR Z,RE1 ;ak ano, stary sektor chod vyplut CALL TSTBUF ;testuj, ci je buffer nastaveny SCF JR Z,RE2 ;ak je nastaveny, netreba ho citat RE1: CALL FLUSH ;vypluj stary buffer CALL C,SETBUF ;ak nebola chyba, nastav hlavicku bufra CALL C,RDBUF ;a nacitaj novy buffer RE2: PUSH AF ;odloz flagy CALL SCACHE ;nastav HL=adresu v bufri, DE=DMA, BC=128 CALL FLDIR ;rychly LDIR POP AF ;obnov FLAGY RDEND: SBC A,A ;nastav vu/sektor v bufri LD HL,VPEND LD (HL),1 ;nastav PENDING flag CALL SCACHE ;HL=adresa v bufri, DE=DMA, BC=128 EX DE,HL ;budeme zapisovat z DMA do bufra CALL FLDIR ;rychly LDIR LD A,(WRTPAR) ;bol WRITE parameter 1? DEC A SCF CALL Z,FLUSH ;ak bol 1 (zavretie suboru?), vyplujeme buffer JP RDEND ;skoncime ;32-bit. delenie IDIV: XOR A; nula do A LD E,A LD D,A; vynulovanie modula EXX PUSH BC; uchovaj povodny obsah BC' LD B,020h; pocet opakovani (32 bitov) do B' OR H; ystupny parameter INC A LD SP,(STCK1S) ;obnov zasobnik RET WRITE: LD (STCK1S),SP ;odloz zasobnik LD SP,STCK1 ;nastav lokalny zasobnik LD A,(VDSK) ;aktualny disk XOR 4 ;je ramdisk? JR Z,RDWRIT ;ramdisk obsluz osobitne LD A,C ;parameter WRITE sluzby LD (WRTPAR),A ;odloz DEC A JR Z,WRI3 ;ak WRITE parameter bol 1, skoc DEC A JR NZ,WRI1 ;ak WRITE parameter nebol 2 (asi bol 0),skoc LD A,(CLSIZE) ;WRITE parameter bol 2, budeme ratat sektory LD (SEQCNT),A JR WRI4 WRI1: ;Wje hornych 8 bitov nulovych? JR NZ,IDIV3; nie su nulove, zostane 32 opakovani OR L JR NZ,IDIV6; boost pre 24-bit. delenec EXX; boost pre 16-bit. delenec PUSH HL; urobime shift delenca o 16 bitov vlavo LD L,A; spodnych 16 bitov bude nula LD H,A EXX POP HL; spodnych 16 bitov presunieme do hornych LD B,010h; 16 opakovani JP IDIV1; chod delit IDIV6: LD H,L; urobime shift delenca o 8 bitov vlavo EXX LD A,H LD H,L LD L,E; nula do spodnych 8 bitov EXX LD L,A LD B,018h;RITE parameter nebol 1 ani 2 (asi bol 0) LD HL,VDSKB ;adresa hlavicky bufra do HL LD A,(HL) ;disk v bufri do A INC HL LD E,(HL) ;stopa v bufri do DE INC HL LD D,(HL) INC HL LD C,(HL) ;sektor v bufri do C LD HL,VDSK ;adresa cisla aktualneho disku do HL XOR (HL) INC HL ;adresa aktualnej stopy do HL JR NZ,WRI3 ;ak v bufri neni aktualny disk, skoc LD A,(SPT) ;SPT disku A do A INC C ;inkrementuj sektor v bufri XOR C JR NZ,WRI2 ;ak sektor v bufri neni posledny sektor stopy 24 opakovani IDIV1: LD A,H; najvyssi bit delenca do CY IDIV3: RLCA EXX EX DE,HL; modulo do HL ADC HL,HL; sprava nasun do modula CY SBC HL,BC; je modulo vacsie ako delitel? JR NC,IDIV2; je vacsie, nechaj tam nove modulo ADD HL,BC; vrat stare modulo naspat IDIV2: EX DE,HL; vysledne modulo do DE CCF; vysledny bit podielu do CY ADC HL,HL; nasun novy bit podielu do HL EXX; a cely podiel posun vlavo ADC HL,HL; vratane horneho wordu DJNZ IDIV1; chod na dalsi bit POP BC; h, skoc LD C,A ;novy sektor v bufri bude 0 INC DE ;a stopa v bufri bude zvacsena WRI2: LD A,E XOR (HL) INC HL JR NZ,WRI3 ;sektor nenasleduje za sektorom v bufri, skoc LD A,D XOR (HL) INC HL JR NZ,WRI3 ;sektor nenasleduje za sektorom v bufri, skoc LD A,C XOR (HL) JR NZ,WRI3 ;sektor nenasleduje za sektorom v bufri, skoc LD HL,SEQCNT XOR (HL) JR Z,WRI3 ;ak je v pocitadle sekv. sektorov 0, skoc DEC (HL) ;dekrementuj sekvencne pocitadlo LD A,2 ;este sa nebude citat buffeTrack-Info 8 N88888888 8otovo, obnov BC' EXX RET; a skonci RTOCHS: ADD HL,HL EXX ADC HL,HL EXX LD BC,(GSEC) CALL IDIV INC DE PUSH DE LD BC,(GHEAD) CALL IDIV RES 4,E RES 6,E POP BC RET SCHS: CALL PDI PUSH DE LD C,0Ah LD DE,0 SC1: IN A,(07Fh) BIT 7,A JR Z,SC2 DEC DE LD A,D OR E JR NZ,SC1 DEC C JR NZ,SC1 POP DE JR WAIDR3 SC2: LD A,B ADD A,A LD B,A PUSH BC OUT (07Ah),A CALL RTOCHS LD A,C OUT (07Bh),A LD A,0A0h OR E OUT (07Eh),A LD A,L OUT (07Ch), RET NZ ;vrat sa, ak sa lisi LD A,(DE) INC DE CPI ;porovnaj cislo stopy (dolny bajt) RET NZ ;vrat sa, ak sa lisi LD A,(DE) INC DE CPI ;porovnaj cislo stopy (horny bajt) RET NZ ;vrat sa, ak sa lisi LD A,(DE) XOR (HL) ;porovnaj bity 2..7 cisla sektora (staci dolny bajt) AND 0FCH RET ;skopiruje disk/stupu/sektor do hlavicky buffra ;nici BC,DE,HL,F SETBUF: LD BC,5 ;budeme kopirovat 5 bajtov LD DE,VDSKB ;do hlavicky buffra LD HL,VDSK ;z adresy DSK/TRK/SEC LDIR ;kopA LD A,H OUT (07Dh),A POP DE POP HL RET WAIDR: LD E,0Ah LD BC,0 WAIDR1: IN A,(07Fh) BIT 3,A JR NZ,WAIDR2 DEC BC LD A,B OR C JR NZ,WAIDR1 DEC E JR NZ,WAIDR1 WAIDR3: SCF JR PEI WAIDR2: LD BC,02078h OR A RET SELMST: DI LD A,0A0h OUT (07Eh),A HDRST: LD A,010h OUT (07Fh),A RET ;******************************************************************** ;NACITANIE BLOKU Z DISKU DO RAM ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektoriruj RET ;pripravime registre pre citanie/zapis bufra z HD ;vystup: ; CY=0 mimo pripustny rozsah ; CY=1 HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM ;nici: AF,B,DE,HL,HL' PREPHD: PUSH IX LD IX,PARTC LD A,(VDSKB) SUB 2 JR Z,PREPH1 LD IX,PARTD DEC A JR Z,PREPH1 PREPH2: OR A POP IX RET PREPH1: LD HL,(WTRKB) LD A,(WSECB) SRL H RR L RRA SRL H JR (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM, kam treba blok nahrat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; nici: AF, BC, DE, HL, HL' ;******************************************************************** RDIDE: CALL SCHS RET C LD A,020h OUT (07Fh),A RDIDE1: CALL WAIDR RET C RDIDE2: INI INI INI INI INI INI INI INI DJNZ RDIDE2 IN A,(07Fh) RRCA JR C,PEI DEC D JR NZ,RDIDE1 ;povoli prerusenie, ak pred NZ,PREPH2 RR L RRA LD E,A LD D,L LD L,(IX+4) LD H,(IX+5) OR A SBC HL,DE JR C,PREPH2 LD L,(IX+0) LD H,(IX+1) ADD HL,DE EXX LD L,(IX+2) LD H,(IX+3) JR NC,PREPH3 INC HL PREPH3: EXX LD B,1 LD DE,BUF512 SCF POP IX RET ;precitame buffer RDBUF: LD A,(VDSKB) CP 2 COND FDD ;ak implementujeme FDD JP C,FRDBUF ELSE ;ak neimplementujeme FDD CCF RET NC ENDC ;FDD EXX PUSH HL EXX RDBUF2: CALL PREPHD JR NC,RDBUF1 CALL RDIDE CCF JR chranenym zakazanim bolo povolene PEI: PUSH AF LD A,(VIFLAG) BIT 2,A JR Z,PEI1 EI PEI1: POP AF RET ;******************************************************************** ;ZAPIS BLOKU Z RAM NA DISK ; vstup: HL = virt. rel. sektor (spodnych 16 bitov) ; HL'= virt. rel. sektor (hornych 16 bitov) ; B = pocet prenasanych VIRTUALNYCH sektorov ; DE = adresa RAM, od ktorej treba blok nahrat ; vystup: CY = 1, ak bola chyba ; CY = 0, ak bolo vsetko OK ; nici: AF, BC, DE, HL, HL' ;****C,RDBUF1 CALL RWERR JR NZ,RDBUF2 RDBUF1: EXX POP HL EXX LD HL,VPEND LD (HL),0 RET RWERR: LD DE,MERRRW JP ERRMSG ;flushneme buffer na disk FLUSH: LD A,(VPEND) AND A SCF RET Z LD A,(VDSKB) CP 2 COND FDD ;ak implementujeme FDD JP C,FWRBUF ELSE ;ak neimplementujeme FDD CCF RET NC ENDC ;FDD EXX PUSH HL EXX FLUSH1: CALL PREPHD JR NC,RDBUF1 CALL WRIDE CCF JR C,RDBUF1 CALL RWERR JR NZ,FLUSH1 JR RDBUF1 ;vystup: BC=dlzka CPM sektora, DE=**************************************************************** WRIDE: CALL SCHS RET C LD A,030h OUT (07Fh),A WRIDE1: CALL WAIDR RET C WRIDE2: OUTI OUTI OUTI OUTI OUTI OUTI OUTI OUTI DJNZ WRIDE2 IN A,(07Fh) RRCA JR C,PEI DEC D JR NZ,WRIDE1 JR PEI ;porovna hlavicku bufra s nastavenim disku ;vystup: Z=1 ak su zhodne -> CY=0 ;nici: AF,BC,DE,HL TSTBUF: LD DE,VDSK ;diskove premenne LD HL,VDSKB ;hlavicka buffra LD A,(DE) INC DE CPI ;porovnaj cislo diskuTrack-Info 8 N88888888 8adresa DMA, HL=adresa cache sektora ;nici AF,BC,DE,HL SCACHE: LD A,(WSEC) ;cislo sektora do A LD BC,0080h ;dlzka CPM sektora do BC AND 3 ;poradie sektora v 512bajtovom bufri RRA ;128-nasobok poradia do DE LD D,A LD E,B RR E LD HL,BUF512 ;512 bajtovy buffer ADD HL,DE ;najdeme cache adresu sektora do HL LD DE,(WDMA) ;adresa DMA do DE RET FLDIR: ;rychlejsi nez LDIR LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI JP PE,FLDIR RELL GETTRK ;zisti cislo stopy CALL PEI ;povol prerusenie JR NC,SCNTRK ;ak sa nepodarilo, scanuj vsetky stopy a skonci CALL STPWDW IN A,(0D8h) ;citaj stav CPL AND 0BFh JR NZ,SCNTRK ;ak treba, vzdaj to LD A,C ;vyber zistene cislo stopy OUT (0D9H),A ;a nastav ho na radici RET ;zahadnym sposobom nacita zrejme cislo stopy do C ;vystup CY=1 C=cislo stopy? ;CY=0 timeout vyprsal GETTRK: LD L,2 ;maska pre 1. bit riad. registra LD D,0Fh ;timeout GETTR1: DEC DE ;dekrementuj timeoutT COND FDD ;******************** ; ;DISKETOVE RUTINY ; ;******************** ; GLOBAL FRDBUF,FWRBUF ; EXT WSECB,WTRKB,BUF512 ; EXT VDSKB,RWERR,VPEND ; EXT MOTTIM WSTRTF: DEFW 3E8h ;rozbeh mechanik v ms VSETTF: DEFB 1Eh ;ustalenie na stope v ms VSTEPF: DEFB 0Fh ;doba kroku v ms ;VDSKS: DEFB 0FDh,0FDh ;VDSKF: DEFB 0 ;aktivna fyzicka mechanika ;fyzicke nastavenie hlaviciek na radici SETWD: LD A,(WSECB) ;cislo sektora v bufri do A SRL A ;preved na fyzicke cislo 512b. LD A,D OR E RET Z ;vrat sa s CY=0 ak vyprsal IN A,(0D8h) ;cakaj na READY AND L JR NZ,GETTR1 IN A,(0DBh) ;citaj bajt LD C,A ;? uloz ho do C LD B,5 ;? preskocime 5 bajtov? GETTR2: IN A,(0D8h) ;cakaj READY AND L JR NZ,GETTR2 IN A,(0DBh) ;citaj a zahod bajt DJNZ GETTR2 ;opakuj 5x SCF ;vrat sa s CY=1 RET ;prescanuje vsetky stopy SCNTRK: LD L,50h ;80 stop SCNTR1: CALL STEPF ;krok vpred DEC L ;dekrementuj pocitadlo stop JR Z,WTTRK ;ak su vsetky, pockaj na ustaleni SRL A INC A ;fyz. sektory zacinaju od 1 CPL OUT (0DAh),A ;nastav sektor v radici LD A,(WTRKB) ;logicka stopa do A OUT (0DDh),A ;nastav stranu? SRL A ;fyzicke cislo stopy do A LD H,A ;odloz stopu do H IN A,(0D9h) ;citaj nastavenu stopu z radica CPL SUB H ;rozdiel stop (kladny, ak treba ist vpred) CCF ;CY=1 treba ist vpred RET Z ;rovnaky, stopu netreba nastavovat LD L,A ;rozdiel stop do L JR NC,SETWD2 SETWD1: CALL STEPF ;urob krok dopredu DEC L JR NZ,SETWD1 ;opakuj te a skonci IN A,(0D8h) ;citaj control BIT 2,A ;? JR NZ,SCNTR1 ;ak treba, pokracuj LD A,0FFh ;invertovana nula OUT (0D9h),A ;nastav stopu 0 JR WTTRK ;pockaj na ustalenie a skonci @ ;caka 324T, co je cca 91 mikrosekund W91US: LD B,18h W91U1: DJNZ W91U1 RET ;test pripravenosti na citanie ;najprv caka 91 us a potom testuje 3,1 ms ;vystup: Z=1, ak sa dockal TSTRDY: CALL W91US ;cakaj 91 mikrosekund TSTRD1: IN A,(0D8h) ;pripraveny na citanie? AND 81h XOR 80h RET Z ;priolkokrat, kolko treba JR SETWD3 SETWD2: CALL STEPB ;urob krok dozadu INC L JR NZ,SETWD2 ;opakuj kym treba SETWD3: IN A,(0D9h) ;??? XOR H ;??? ma byt FF ADD A,1 ;??? ma byt CY=1 WTTRK: LD A,(VSETTF) ;pockaj na ustalenie stopy ;caka A milisekund ;nici: AF WTXMS: PUSH BC LD B,0 WTXM1: DJNZ WTXM1 DEC A JR NZ,WTXM1 POP BC RET ;pokusi sa znova zaostrit na stopu FOCUS: LD A,0FFh ;nastav cca 5s LD (MOTTIM),A ;timer motora RET .COMMENT @ toto zatial neimplementujemepraveny, vrat sa DJNZ TSTRD1 RET ;krok vzad - nici AF,B STEPB: LD A,0A7h JR STEPF1 ;krok vpred - nici AF,B STEPF: LD A,87h STEPF1: OUT (0D8h),A ;urob krok LD A,(VSTEPF) ;doba kroku v ms CALL WTXMS ;cakaj, kym sa krok urobi STPWD: LD A,02Fh ;ukoncenie prikazu? OUT (0D8h),A STPWDW: CALL W91US ;cakaj 91 mikrosekund STPWD1: IN A,(0D8h) RRA JR C,W91US ;ak je hotovo, skonci o 91 mikrosekund DJNZ STPWD1 ;ak neni hotovo, skus znova JR STPWD ;a este znova ;precita 512ba LD H,074h ;timeout FOC1: IN A,(0D8h) ;je ready? RRA JR C,FOC2 ;ak je ready, pokracuj DEC HL ;dekrementuj timeout LD A,H OR L JR NZ,FOC1 ;ak nevyprsal timeout, skus znova JR STPWD ;vyprsal timeout, skonci FOC2: IN A,(0D9h) ;citaj cislo stopy RRA CALL C,STEPB ;parne, krok vzad CALL NC,STEPF ;neparne, vrat sa CALL WTTRK ;pockaj na ustalenie stopy CALL PDI ;zakaz prerusenie LD A,3Fh ;prikaz Read Addr OUT (0D8h),A ;zapis control CALL TSTRDY ;testuj pripravenost CATrack-Info 9 N99999999 9jtovy buffer z WD ;vystup: CY=1 OK WDREAD: LD BC,2 ;2 x 256 bajtov LD D,B ;nuluj DE LD E,B LD HL,BUF512 ;adresa bufra WDRE1: DEC DE ;dekrementuj timeout LD A,D OR E RET Z ;ak vyprsal timeout, vrat sa s CY=0 WDRE2: IN A,(0D8h) ;test DRQ AND 2 ;pripraveny na citanie? JR NZ,WDRE1 ;neni pripraveny, cakaj dalej IN A,(0DBh) ;citaj bajt CPL ;komplement LD (HL),A ;uloz do bufra INC HL ;dalsia pozicia v bufri DJNZ WDRE2 ;opakuj 256x DEC C ;a este raz opakuj 256x JR NZ,WDRN A,(0D8h) ;citaj stav CPL AND 0BFh SCF JR Z,FRDBU3 ;skoc, ak bolo OK FRDBU2: CALL FOCUS ;prejdi vsetky stopy POP BC DJNZ FRDBU1 ;opakuj, ak nebolo 5x CALL RWERR ;ohlas chybu JR NZ,FRDBUF ;ak bolo Retry, skus znova PUSH BC FRDBU3: POP BC FRDBU4: LD HL,VPEND ;pending flag LD (HL),0 ;vynuluj RET ;hotovo ;bezpodmienecne flushne buffer na disketu FWRBUF: CALL MOTON ;zapni motor a vyber disk LD B,5 ;5x budeme skusat FWRBU1: PUSH BC CALL SETWD ;nastav stopu a sektor E2 SCF ;podarilo sa, vrat sa s CY=1 RET ;zapise 512bajtovy buffer do WD WDWRIT: LD C,0DBh ;port WD pre zapis LD DE,BUF512 ;adresa bufra LD HL,WDWR1 ;adresa slucky WDWR1: LD A,(DE) ;citaj bajt z bufra INC DE ;dalsia pozicia CPL ;komplement LD B,A ;uloz do B WDWR2: IN A,(0D8h) ;citaj stav RRA ;hotovo? RET C ;hotovo, vrat sa s CY=1 RRA JR C,WDWR2 ;ak neni ready pre zapis, cakaj OUT (C),B ;zapis bajt JP (HL) ;chod na dalsi ;zakaze prerusenie a zrata hlavu GETWJR NC,FWRBU2 ;nejde to, prescanuj stopy CALL STPWD IN A,(0D8h) ;citaj stav BIT 6,A JR Z,FWRBU3 ;chyba, skus znova CALL W91US ;cakaj 91 mikrosekund CALL GETWDH ;zrataj hlavu XOR 05Dh ;primaskuj pisanie OUT (0D8h),A ;nastav radi CALL TSTRDY ;cakaj na Ready CALL WDWRIT ;zapis buffer na disk CALL PEI ;povol prerusenie ak treba LD A,3 ;3 milisekundy CALL WTXMS ;budeme cakat LD HL,BUF512+0202h ;tu-1 by mal skoncit zapis (CY=1) SBC HL,DE ;porovnaj s DE JR NZ,FWRBU2 ;ak nesDH: CALL PDI ;zakaz prerusenie chranenym sposobom LD A,(WTRKB) ;cislo stopy v bufri RLA ;vynasob 8 RLA RLA AND 8 RET ;vrat sa s cislom strany v A3 ;nastartuje motor zvolenej mechaniky MOTON: ; LD BC,VDSKF ;aktivna fyzicka mechanika ; LD A,(BC) ;do A ; LD DE,VDSKS ;adresyaktivnych stop ; LD H,0 ; LD L,A ; ADD HL,DE ;uchovanie aktivnej stopy ; IN A,(0D9h) ;citaj stopu z WD ; LD (HL),A ;odloz ju ; LD A,(VDSKB) ;novy aktivny disk do A ; LD (BC),A ;bude aktivny aj fyzicky edi, zapis sa nepodaril IN A,(0D8h) ;citaj stav INC A SCF JR Z,FRDBU3 ;ak je OK, skoc FWRBU2: CALL FOCUS ;prejdi vsetky stopy FWRBU3: POP BC DJNZ FWRBU1 ;skus znova CALL RWERR ;nepodarilo sa na 5x, ohlas chybu JR NZ,FWRBUF ;ak bolo Retry, vsetko opakuj JR FRDBU4 ;zrus pending a skonci ;******************** ENDC ;FDD ;zakaze prerusenie s tym, ze uschova stav pred zakazanim prerusenia PDI: PUSH AF PUSH HL PDI1: LD A,I ;citaj IFF PUSH AF POP HL ;stare IFF d; LD H,0 ; LD L,A ; ADD HL,DE ;zrataj adresu jeho stopy ; LD A,(HL) ;vyber odlozenu stopu ; OUT (0D9h),A ;nastav ju na radici ; LD A,(BC) ;vyber disk ;MOTO1: OR 84h ;zamaskuj ho LD A,84h ;implementujeme iba mechaniku A CALL PDI ;zakaz prerusenie OUT (0DCh),A ;aktivuj disk na WD a rozbehni motor LD HL,MOTTIM ;casovac motora LD A,(HL) ;motor bezal? LD (HL),80h ;zresetuj timer CALL PEI ;povol prerusenie AND A RET NZ ;ak uz bezal, necakaj LD HL,(WSTRTF) ;cas na rozbeh MOTO2: o L LD A,I ;znova citaj IFF LD A,L ;stare IFF do A, nove IFF je v F PUSH AF POP HL ;stare IFF je v A, nove IFF je v L CP L ;porovnaj stare IFF s novym IFF JR NZ,PDI1 ;ak sa nezhoduju, skus znova LD (VIFLAG),A DI POP HL POP AF RET ;hlavicky diskovych parametrov TABDPH: DEFW 0,0,0,0,DIRBUF,DPBA,CSVA,ALVA ;disk A ; DEFW 0,0,0,0,DIRBUF,DPBB,CSVB,ALVB ;disk B DEFW 0,0,0,0,DIRBUF,DPBC,0,ALVC ;disk C DEFW 0,0,0,0,DIRBUF,DPBD,0,ALVD ;disk D DEFW 0,0,0,0,DIRBUF,DPBE,0,ALVEDJNZ MOTO2 DEC HL LD A,H OR L JR NZ,MOTO2 RET ;nacita buffer z diskety FRDBUF: CALL MOTON ;zapni motor LD B,5 ;5 pokusov FRDBU1: PUSH BC ;odloz pocet pokusov CALL SETWD ;nastav radic JR NC,FRDBU2 ;ak sa neda, skus znova CALL GETWDH ;zrataj hlavu XOR 7Dh ;primaskuj citanie OUT (0D8h),A ;nastav ju CALL TSTRDY ;cakaj na pripravenost CALL WDREAD ;citaj buffer z WD CALL PEI ;povol prerusenie ak treba JR NC,FRDBU2 ;ak bola chyba, skoc CALL STPWDW ;ukonci prikaz ITrack-Info 9 N99999999 9 ;disk E ;tabulky diskovych parametrov ;default format pre 720kB diskety (disk A, B) ;default format pre 32MB particiu (disk C, D) ;default format pre 256kB ramdisk (disk E) TABDPB: DPBA: DEFW 024h ;SPT - 36 sektorov x 128B na stopu DEFB 4,0Fh,0 ;BSH, BLM, EXM - 2kB cluster DEFW 15Eh,7Fh ;DSM, DRM - 351 clustrov, 128 poloziek adresara DEFB 0C0h,0 ;AL0, AL1 - adresar ma dva clustre DEFW 20h,4 ;CKS, OFF - 32 poloziek CRC, 4 systemove stopy ;DPBB: DEFW 024h ;SPT ; DEFB 4,0Fh,0 ;BSH, BHOME JR Z,CTLCLS CP '(' ;low light JR Z,CTLLWL CP ')' ;highlight JR Z,CTLHGL CP '0' ;inverzne video JR Z,CTLINV CP '1' ;normalne video JR Z,CTLNOR CP 'T' ;zmaz koniec riadku JP Z,CLREOL CP '2' ;error video JR Z,CTLERR CP 1Fh ;zakaz kurzor JR Z,CTLCUD CP 1Eh ;povol kurzor JR Z,CTLCUE RET CTLGTO: INC (HL) ;GOTOYX - zvacsi fazu RET CTLERR: LD A,PALERR ;paleta pre error video JR SETCOL CTLLWL: LD A,PALLWL ;paleta pre low video JR SETCOL CTLHGL: LD A,PALHGLLM, EXM ; DEFW 15Eh,7Fh ;DSM, DRM ; DEFB 0C0h,0 ;AL0, AL1 ; DEFW 20h,4 ;CKS, OFF DPBC: DEFW 0100h ;SPT - 256 sektorov x 128B na stopu DEFB 6,3Fh,3 ;BSH, BLM, EXM - 16kB cluster DEFW 0,3FFh ;DSM, DRM - 0 clustrov, 2048 poloziek adres. DEFB 0F0h,0 ;AL0, AL1 - adresar ma 4 clustre DEFW 0,1 ;CKS, OFF - bez CRC, 1 systemova stopa DPBD: DEFW 0100h ;SPT DEFB 7,7Fh,7 ;BSH, BLM, EXM DEFW 0,7FFh ;DSM, DRM DEFB 0F0h,0 ;AL0, AL1 DEFW 0,1 ;CKS, OFF DPBE: DEFW 100h ;SPT - 256 sekt ;paleta pre high video ;nastav paletu pisma A (0-3) ;nici AF, H SETCOL: AND 3 RLCA RLCA LD H,A LD A,(TXTATR) AND 0F0h SETCO1: OR H LD (TXTATR),A RET .COMMENT @ ;nastav paletu pozadia A (0-3) ;nici AF, H SETPAP: AND 3 RRCA RRCA LD H,A LD A,(TEXTATTR) AND 0Fh JR SETCO1 @ CTLCUD: XOR A CTLCU1: LD (CURENA),A RET CTLCUE: LD A,YES JR CTLCU1 CTLINV: LD A,YES ;inverzne znaky CTLNV1: LD (TXTINV),A RET CTLNOR: XOR A ;normalne znaky JR CTLNV1 CONOP3: DJNZ COorov x 128B na stopu DEFB 4,0Fh,1 ;BSH, BLM, EXM - 2kB cluster DEFW 00h,7Fh ;DSM, DRM - 0 clustrov, 128 poloziek adresara DEFB 0C0h,0 ;AL0, AL1 - adresar ma dva clustre DEFW 0,0 ;CKS, OFF - bez CRC, bez systemoveuj stopy DIRBUF: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;128 bajtov pre directory buffer DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 CSVA: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;32 bajtov pre CRC disk A ;CSVB: DNOP4 ;skoc ak faza >3 INC (HL) ;zvacsi fazu, budeme nastavovat Y SUB 20h ;odstran ofset CP MAXLIN-1 ;sme na obrazovke? JP C,UMY ;ano, uloz Y poziciu RET CONOP4: DJNZ CTLAS8 ;skoc ak faza >4 SUB 20h ;odstran ofset X pozicie CP MAXCOLS ;sme na obrazovke? CALL C,UMX ;ano, uloz X poziciu LD (HL),1 ;resetuj fazu RET CTLAS8: RES 7,(HL) ;zrus priznak horneho ASCII OR 80h ;nastav 7. bit ;Tlac znaku na obrazovku ;A=ASCII (zatial bere iba dolnych 7 bitov) ;nici: AF,HL PRNTC:EFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;32 bajtov pre CRC disk B ALVA: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;44 bajtov pre alok. disk A DEFW 0,0,0,0,0,0 ;ALVB: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;44 bajtov pre alok. disk B ; DEFW 0,0,0,0,0,0 ALVC: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;256 bajtov pre alok. disk C DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 PUSH BC PUSH DE LD E,A ;odloz znak LD HL,(CPOS) ;pozicia kurzora do HL CALL VPOSIT ;zrataj adresu VRAM do HL LD A,E ;znak do A CALL AVRAM ;placni ho na obrazovku CALL CRIGHT ;posun kurzor vpravo POP DE POP BC RET ;BIOS sluzba LIST - vystup na tlaciaren ;nici: AF LIST: IN A,(0FEh) ;test pripravenosti tlaciarne RRA JR C,LIST ;neni pripravena, cakaj LD A,C ;znak do A OUT (0FFh),A ;posli znak na tlaciaren LD A,80h OUT (0FEh),A ;strobe LIST1: IN A,(0FEh) ;testuj sta DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ALVD: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;256 bajtov pre alok. disk D DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ALVE: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;32 bajtov pre alok. disk E ; DEFW 0,0,0,0,0,Track-Info : N:::::::: :v tlaciarne RRA JR NC,LIST1 ;cakaj na spracovanie znaku XOR A OUT (0FEh),A ;zhod strobe RET ;BIOS sluzba LISTST - test pripravenosti tlaciarne ;nici: AF LISTST: IN A,(0FEh) ;citaj stav tlaciarne RRA ;CY=0 ak je pripravena CCF ;CY=1 ak je pripravena SBC A,A ;FFh=pripravena, 00h=nepripravena RET ;BIOS sluzba PUNCH - vystup na SIO ;nici: AF PUNCH: IN A,(0B1h) ;citaj stav SIO BIT 2,A ;je pripraveny? JR Z,PUNCH ;ak neni, cakaj LD A,C ;znak do A OUT (0B0h),A ;vystup ziciu kurzora LD (CPOS),HL POP HL ;obnov atribut textu LD (TXTATR),HL JP PEI ;ak treba povol prerusenie a vrat sa BOOT: LD A,(BOOTDS) JR WBOOT1 WBOOT: LD A,(CPMDSK) ;odloz aktivny disk WBOOT1: LD SP,ADRTPA ;zasobnik CCP (100h) PUSH AF CALL INIGDG ;obnov mod a palety (napr. po FETe) DI ;zakaz prerusenie CALL FDRAW ;nakresli funkcne kluce EI ;povol prerusenie CALL SELMST ;tu nahrame CCP a BDOS LD A,(BOOTDS) ;bootovaci disk LD E,A LD C,0Eh CALL 5 ;nastavime znaku na SIO RET ;BIOS sluzba READER - vstup zo SIO ;nici: AF READER: IN A,(0B1h) ;citaj stav SIO RRA ;je pripraveny znak? JR NC,READER ;ak neni, cakaj IN A,(0B0h) ;citaj znak zo SIO RET ;vypis chybovej hlasky BIOSu ;vstup: DE - adresa hlasky ;vystup: CY=1Z=1 - ignore, CY=0 Z=1 abort ;nici AF, BC, DE, HL ERRMSG: LD A,(ERRENA) ;su povolene chybove hlasky? OR A RET Z ;neni su povolene, vrat sa CALL PDI ;radsej nebudeme prerusovat CALL CUROF ;vypneme kurzor LD HL,(TXTATRako aktivny COND FILBOT ;v pripade bootu zo suborov LD HL,CCPNAM LD DE,ADRCCP LD B,10h CALL LDSYS JR C,ERRBOT LD HL,BDSNAM LD DE,0C000h PUSH DE LD B,1Ch CALL LDSYS POP HL JR C,ERRBOT LD DE,ADRBDS LD BC,0E00h LDIR ELSE ;bootujeme zo syst. stop LD DE,0D4h ;sektor zaciatku CCP na HDD/RD LD B,D LD C,D ;stopa zaciatku CCP na HDD/RD LD A,(BOOTDS) CP 2 JR NC,WBOOT3 ;boot z HDD/RD LD C,2 ;stopa zaciatku CCP na FD LD E,01Ch ;sektor zaciatku CCP na FD ) ;odlozime atribut textu PUSH HL LD HL,(CPOS) ;odlozime poziciu kurzora PUSH HL LD A,(FDRENA) ;odlozime kreslenie funkcnych klucov PUSH AF XOR A LD (FDRENA),A ;zakazeme kreslenie funkcnych klucov LD HL,ERATR ;nastavime textovy atribut chyb. hlasky LD (TXTATR),HL LD HL,CPOSER ;nastavime poziciu kurzora LD (CPOS),HL LD B,045h ;max. dlzka chybovej hlasky ERRM1: LD A,(DE) ;vyber pismeno CALL PRNTC ;nakresli ho LD A,(DE) ;este raz ho vyber do A DEC B ;zmensi pocitadlo pismen WBOOT3: CALL SETTRK ;nastavime stopu CCP LD BC,ADRCCP ;sem ulozime CCP WBOOT2: CALL SETDMA ;tu budeme ukladat LD HL,80h ADD HL,BC ;v HL je adresa dalsieho DMA PUSH DE ;odloz sektor PUSH HL ;odloz DMA LD C,E ;adresa sektora do BC LD B,D CALL SETSEC ;nastav sektor CALL READ ;citaj sektor POP BC ;nove DMA do BC POP DE ;stary sektor do DE OR A JR NZ,ERRBOT ;BOOT sa nevydaril INC E ;zvacsi cislo sektora JR Z,WBOOT5 ;koniec tahania z HDD/RD LD A,024h ;pocet sektorov n INC DE ;zvacsi adresu pismen RLCA ;7. bit do A JR NC,ERRM1 ;ak nebol posledny znak, chod na dalsi ERRM2: LD A,' ' ;dokresli medzery do konca riadku CALL PRNTC DJNZ ERRM2 ERRM4: XOR A ;vyprazdni klavesovy buffer LD (KBDLEN),A PUSH DE ;odloz adresu tlacidiel CALL CONIN ;citaj znak DI ;zakaz prerusenie POP DE ;obnov adresu tlacidiel LD L,E ;DE do HL LD H,D LD B,0 LD C,(HL) ;pocet tlacidiel+1 do BC INC HL ;nastav na tlacidla DEC C ;pocet tlacidiel do C JR Z,ERRM; =.\=  *T!.F~/wp8#|(?>2  ۘ©͕OH>. TYPE ANY KEY$> ӉӉA žœʩ<ۘ´>pӉ>PӉÜåDIR COPY REN ERA TYPE TYPEX TYPEH TYPEA RUN EXIT SIZE CHECK STAT USER XUSER TEST SET SETDIR SETSYS SETRO SETWR RECLAIM DISK GROUP LOG RESET DS SPEED SAVE LOAD READ WRITE READGR WRITEGR DUMP DUMPX DUMPH DUMPA MOVE FILL CM SEARCH JP EX GO O    SORT PASS ? PW3 ;nie su tlacidla AND 0DFh ;preved male pismeno na velke CPIR ;zisti, ci bolo stlacene tlacidlo JR NZ,ERRM4 ;nebolo, cakaj na inu klavesu ERRM3: CALL CUROF ;vypni kurzor POP HL ;obnov priznak kreslenia klaves do H SCF ;CY=1 pre ignore DEC C ;Z=1 pre ignore JR Z,ERRM5 CCF ;CY=0 pre abort INC C ;Z=1 pre abort ERRM5: PUSH AF ;odloz priznaky LD A,H ;obnov povolenie kreslenia FKEY LD (FDRENA),A CALL FDRAW ;nakresli FKEY POP AF ;obnov vysledok do AF POP HL ;obnov poTrack-Info : N:::::::: :7 886;;!9"1;*.:m1_<.|g":>2:_2O>O>8_>!)}|2go", }2g|2 22ʊ32*"7"$8"2"0"72"E'"3"3"-'2g"-'"('*#!Fx2w#:] ļ76 #6:\̽502\2u%:j26):\2:1:3͟126)>2\01;>2W9:\0oN0:w:h8 POWER 3.03 on CP/Mh >"?08>.8:g?ʹ/h8 1/2 Copyright (c) 1981, 1982 by PAVEL BREDER MicroShell version 11/07/85 1;a : 2H4>2\:=N0:=/2\0ͷ Vʚ Rb S\ Th PV Un Xz Mʅ Qʔ $ʎ AE=2b#~"ȷ+#c88@ !ã !eã !cã !fã ͷ ʦ !å 2:\2!k~ƀå !Ý !å !gͷ ʥ ~/w:<2 9> 2 9: >" :\0! )= %2wh8 incorrect, for list of commands enter:!#++~ #~8:;>!":M̈́[*w#"w*+}q#6#61#6 #w>M?Ÿͨ >P**w#6#61#6-#6 #6ßh8 select?6*w#~+>2h:H>h8 destination drive 8 02*;_!\VsN0:?1rzf:f::232:w<ʢ!] 6?# *"w>2g<227 222Q 2222u2222h2/2222|22:\2u%O>ʄ>2wc82 92 9ỳ5ͷ :O:G´´:x͗/yh8͗/:86*#͆ ͨ x/[#~*+~Q0:\2u%#x/2w2.~8$O~8y˜ ‹>ʱ>±h8 password required24y/ph8 bad passwordʁ#p~ 24ғ2.#  ˜y/ x<2 u*"-%%u"#6 y/u#~*x/u y/u~n*x/:_:h*h8copy to same driv2îh8 (C)opy or (M)ove82f2*;2fh8 ERASc8ͨ :w2 9:*;:;͞2*w##"og2""V"J!;y/"|0 ?))) O ì>2è><#~| ß:<:h!,+">-#"Vy/~2-/x/"/*"V"kb)*/ ^#V#~+U!#"Js#r!}ʜ*#",+]T4+"!"VÜ:h!"),"*/ ##"w>2*c8 é #~V<+^*,+|¨#w+w#":*;̀5h8::\{5;+;## .->v!++# N#F4v"# t%""Z 8 |)|)9& +,  ./01!P)"P)%]-&M-$U-#E-'O,(/).*h-2 3P*q #py/=Ž:\2x/#~+*:¤:\2~02\:ʼ N0#x/=x/:\2#~+*ʎ:2\! :~###<ͷ : y/!\Ĭ!"6/ #~?"2k:G+ʭ+-6,c8 P[22!e6C#6O#6M̈́{ʗ><2g_:a{Ҋ>2g:[>27 2:g:>_<22\:H4ʶ:` "p/x!p/Ҟ*"w!"" N0>?1\2;; 6?#h8 new name6*w#x/C!=h8 Bad name *;ͬ!h8 ;!+; ~?[8Oygw#x>.8T!3;:ͼ7:ʓ:c–;:t 1:*;­go2/"{!"<1;!;:OD e `y~ʛʡ#ʛʡ Wc8`3*';*$!:u%2H_ͼ7.6#t.+6%#t.>68#t%%@,+^/2%~x/b#~+*b~02j##:ͬ!rx/ #~+ʏ*~0##ͬ!•!;\ͺ7:±:u%!:w*;ͺ73͟1ͯ1!T]#~x21ͅ51\1*$$!*$Ͱ{100T]! F:#N< " xG< A < P :k?P Gڟ :eK yڟ xڟ >s _~o ڟ s ҟ *w 6#6#w# "w* #" )$*,+^/*w6#6ͧ1 *#~<ʂ1!#" **w"/ "j ## s#r# !+" } * #"V +} : p/ }o"F #"Y *F {ozg"C *F ", > i U *C !<) ) Nq#Nq!{ozgU  !#{z *F <) ) N#F^#V_  ~>W: ʶ  ! ~>:  {_#½  ~W # y/0ں::Һ:02*V )*w"ẅ́\!!.%%~G#~$!.%\$~#7::h8 *<}2/:q;2: : :&;=o&:: ´G#Rʼ#ü~^2 4RW#Vz2 42'h8 (8!;~{5# 8~ʹ/c8!: ʈ̉<:>2~͠!ںPc:<}ʿ:=8<::=ʅ8:…}8}c8:",æ*<"<ͺ/2/~58:>.C͉~ʹ/:Sc:=<8}<8#>z} c8: :k?6:\̀5:6 :8 :6 :>ė/~5H 8::dX X <2/** ,+<*)*/ ##^#V*#":ž :ʭ h8 í *0/>=8 ~2 #:p~2 h >(88## >C>*8 :p >O>)88a * *,+<:/=2/ >|8] :k9 _~7 +~?7 >Q >.L >>L ><8>~8#=Q !xl !pF# ^n ^#~[ˆ x/] 8+ - "@ 1 : G:dx 2d 2Q ƀ #~8 R S X 1ں:9Һ:yTrack-Info ; N;;;;;;;; ;}/<_}:=&h8 ----8W2/<~FP::8#:n*{+"{|",:}: }>e~2/*{|):/oʦ|g}o"{:7SÈy/82XN0h8checksum & test>2=2Ϳ&6#"\ : 2 9\͟1/00: ):e2e\3\1ͷ @: 2e2f2hͿ&2go"{"<<2>Se"'#"'+ڥ&>2/>ʓ>*8(> 8:Q9> 8Ͱ37!͈(e>o22!C"R>2*~#o *~<ʗ5կ!]ͼ7!"(!N#R:ͼ7:k!;;_~ƀw1ʖ:2;o&Û:2>?2;;͟1ʖ00:hwͺ3>2\0Fh8Verify error1!8"{ͅ5s2w:m«<2\2\0N0Ͱ:m*:O:>2:O:u%=2@HPX & "<*!*<~ # x2& "<1;!)ͮ:8, 0ں:ں:K ں: O)))) - & 2 2 9h8 addr:Hex Dec Binary Ascii Entec8ͺ/>~5 h88~Gʹ/8xͦ/8ẍ́/8x> >-8x  97@ 88h8 :h8h86*w#x/!F#xCRyx><2"::O!++++:hw<2h###62:O::2Ϳ&>2\0N0h8 checksum *{ͺ/2/*<}h8 bad blocks /:7h8 : 8>.8: 888h8 has the bad blocksͷ 7h8 File is set to SYS & R/Oh8 show bad h8 user  ext*w~ʾ< *:2NRʄ#Fx+ʾ™RRʠ>=2y#Rʱ#*ws*w "w^8*w~͜/8# 8 ~ʹ/c8þh8 repaio!Ê G:5!#~8B,!D,!A,!.Hº:2hx/ʉ ":hAx!B|!Dʗ!& |º:}wo!*~# \!y/ʊ !#: ++nR!~0ʋ!1º:7yO#!iR!Ͷ:R!_ʪ! ?~*»!#~*ʻ!+2u!#~*".!!!W:lz8#!~.!+> " []:ȷ#~. "+>? "+"+"{2:2ͷ y/>2h~ N"0ں::Һ:#:"6:͊:aa"{i":4{9 Һ:23y/82"!c8:dGa y/+#~"zWʿ"8Ҹ" "җ">W×"Wz"W":4"h z">?"~ #" A7# ""~#>52::?2;͟100 8~ʹ/h8 ###Rž#Rʸ^#V{ͺ/~ʹ/8žͧ1ʖh8 :ch8 |1;2yͨ : h8 Öh8checksum:*{ͺ/h8 total:!")ͺ/h8 dec:/Ö~g11Ö:®ʹkh8Illegal namc8!;~#{5 :;g1h8 =:!h8new NAME6*w#~ʖc8x/!2*\x/!\"*;ͬ!>:2n!;~#{5 h8 =!;; ͼ7 "Ë"y/8 #‹"Â"c8:bA8h8 If  exist A-overlay, B-back up, C-ask, D-skip:d08h8 column#h8 +1 in DIh8 :/<%h8 paging :c%h8 request Y/N on current  (Q-request new name) :g%h8 read after write :e%h8 show system s :f%h8 stop if is full :k+$/%h8 Mark copied files X list drives A:`_:H4W{c$0̀5z|$h8 if on linͷ $h8 U list users 0:a͗/h8 :/%h8 submit $$$.SUB!~$/$:u%{5#~$8$h8 +/- 1-8 or (R)ead/write, (S)syste!+;~?Oy8#x>.8;2::;2";͟1>O:cWh8 renam–;1Ö;3>?2;ͷ ©~1!"';Ø::-l>I8x>.8bÖ!;:Q \_~ä~w3Ö::h2*;͟100: g1:b:bªh8  exists, (B)ackup, (O)verwrite, (Sm/dir, e(X)tra POWER!ͺ/h8H:o&)*ͺ/h8H TPA}jF%ͺ/h8H*+ͺ/h8H#,+p/d%/h8 >2 x•%lZ{_%x2\N0c8x{5h8 R}o>W%>O88%&É%}oÉ%%h8 (OFFh8 (ON*:#& &)=&"{::7!"<*:#~8&*<#"<zH&+&#(&&Z&*<)"<=L&h8Used*<*{,+*:# @,+͟&h8, Free*<͟&h8, Capacity*{/h8h8deleted s N0>23*;"'!"'*:#p/p/DM*wBK:==^/1&:=I'=2\0ͺ3L')kip8OSʖB–!+;;;ͼ7>B>A>K:;2:*;3͟1ʕ00: d:bc8h8 old .BAg1:nʏ:bc8h8 overwrite old .BA–:;1>1!;; 6# =ʹÖh8 exist;1>M;>$3;*;3͟1 00: :bc8h8 old temp .$$g1;1ͯ1:g*;$2go"<"{:2:\͞27*w!1:=g;2d*<"<42>2:*;͞27;*{:=u:<u:g"{*<"<17*;!3*{c#{µ"{*K;#"K;:= :< *;!3>:h21!+;;;ͼ7!Track-Info ; N;;;;;;;; ;#2*;"'*',+`i''>?'+?'! 0::7'gͷ ?'gi"0DM!Ͱ3(! x&1:*:DM*w ~#¹(#~++ʹ(#:\{5]T 2:\͞2! ~2 6͟1: w:'h8recover,  existó(::O: ((h8recover,  with bad extenó(h8recove³(2V(+"{:w ͷ :(~w###~2 ###~£(  xg(>£(/2V(*:DM*w~K("<*{ #ʄ(›( w(#: (*<y2V(%(*<K(>2Ϳ&>2Ϳ&c8+  xq'*'#*:,+(*'#*%2,+("'!"'/5h8G*g ERROR on:\2{5h8, loging to drive onl?:?11;×h8 LOh8 on:4X1:\{5:u%2\p6m1Öh8 is $R/3͟1̈́ʌ1[h8 No s!] G1ͩ13*;3ͩ1×5*;é1*;é13ͩ1h8 not founG1*;1ͩ1h8close p6ä5>232!L,+3+"'BKͷ L2:ͼ7À2*.:^#":^#":~#2:~#2:^#":^#";^";!2~::w*:2"%2"*+w:\244~4=_F4" 422bk::)=2>o*:}/o|/g#2 *:*; #"'"';*',+)* 4ͺ/~5:2ʹ/()h8----:-h8 TO*'/h8 S*'/h8 PS*0/:!>\)> 2N0& Ͷ:*:,+ͽ2!"{ä)N0ͮ:Ͷ:"'!"{ͯ:Ͷ:"'}3+x/*:)~8X)>2#~8 )A)>)H)>2!"<x/**& Ͷ:"<x/*Ͷ:"{}*!"<*{:='*::<_O,+>23y2+*<1+`*&*{+}`*:`*: ʀ*c8(h8 At*<ͺ/h8ͺ/+3+:3+̰3ĺ3:*<!p"<!}2/:2*: c8*h8 !"<2*<"<*{+"{}(+2g:'o"_ ~4F4! r#3:5Qh8bad sector on:N13:N1:]3N1:u%2h8rea~3h8, abor*w:ʍ3*<:w# –3:5c8!&;4!|4>ͷ33'3"3**;*',+3>2: =c8(:4 55*w#w=2c8/5<*<#"<*+R84#~#'4~~+#4p#w#w+++q#~ȷ84q#w#w>2\21F4h8 Press ^C, i0`*>=2+*9**'*%2,+}*'*:,+!}o|gh8Out of bounds/*<͋+h8 Last Address*<|p+}q++ͺ/h8H1Ͱ+*';/h8 \1*<1\2=*<"<Ñ+/!\*;ͺ7;ͺ7͟1+:1,00`:: +m1*{#}+*';#"{;1*{#}ʺ:ͯ1*{+"{}0,*<1"<ͅ5,1/"{1;!$*<͋+*{-|*{x|,h,y|,`iDM~ +/r,~#/~,y/ʤ,,µ,x/ʤ,& +*,,p!}/_,& "{,,y/,,,-,!,x/,& +,!p:{/o,-*{"2h8 on system tracks*;*',+*:^5*'+::G}22::Gp/S5" 4BKxn5! T]xk5 q5̀5>@8*;3=5=5h8dir fulͪ5h8 on driveͽ5{561:1::=2:626!Fͼ7F#~8K6#6 #w2W9!:w#5:1ʁ6ø2!6~/w1:1p6 8 6_777ʂ7ʌ7ʴ7z7^6 88!ڊ6^6@G: 6:6: /2 6 #w2W9ø2~#4ʫ7pxA7#Ç#"{& "{ͯ:& "<:'+-)+-(1-ͯ:& *<T]*{,+ں:͈,>b-͈,>b-͈,>b-͈,>2\,2*"w`iͮ::y/--#~+-~O"-?ʵ-:-& |º:Ͷ:M-?:-#*wq$p#p%"w:-~ z-#-:/2#z-**wBK,+*<*{|+"{..*{+"{#|,+ 1. ?N.#zR. 4. ?4.# .c8ͺ/h8: >"8 ~|.ʹ/8×.͠!Ҕ.h8ʹ/h8×.8# _ ʰ.h8 8zk. >"8N.-|#*{ .~c8ͺ/h8:ʹ/8ʹ/h8 ͺ/#/67Ç6#G~wL7+xF6 S7:W7<<2W7x 8̀5:W7<<2W7>^8 97ڀ58334Ç6c7> =2W7S7x >m7>8> 8>8>7z7c82W76Gh8#2W7xʇ6A7Ÿ7Ç6h85Ç6c8Ç6$~#¼778 82 9 8 72 9G:x 80:?2iͮ:7ں: 88a{?_ 2yW8M8G: G8x C8> ͨ :Q9/2Q9#8A7ͨ p6$h8"8h ~8888888888h a 8 > 8~#p8a !;88sectorscan not - filedisk > _9:.-xº:*{q#//z*#~ "/ͯ:N0!"{!;ͯ:& "<!"{x/: #"{h8memory full |g}o#~ x/;ȷ>08‡/Þ/o&/0o&/C8ogü/>2/>////C80/////" 00!x8 !0:8G80.00_!> o~2 #~2 :\02\1>v0>242\0_ 4 3:\_ 0p/҂0x‚0:ʞ0à0:\0ʼ0ڿ0^#V#"('!~#fo;2*;#2'!|2'24=O:<0yOͷ ȯ2|h8 Disk loTrack-Info < N<<<<<<<< <s9:H9> W H9z29:Q9H9>=H92 9H9:2 9 8W > E9z E92 9_>w9>7:is9W_b.)+|i9e9C8{ ʈ9 ™9>ã9> ͘9zŠ9:9<£929_N0h8 capacity:%͟&h8 tracks: *%2#/*;/h8 system /track:*:/**+/h8 last /system:^5/*:#@/h8 dir dir entries:/ @͟&h8 /group:::02/ͺ/>2/h8H groups kbytes/extent:!::)=:͟&+x/ú: h8invalid argument$$$ SUBCOM?LD C,A ;aktivny disk do C JP ADRCCP+3 ERRBOT: LD DE,MERRBT ;boot error message CALL ERRMSG ;vypis chybu CALL FLUSH ;vysporiadaj disk buffer JR NC,WBOOT XOR A LD (WSECB),A POP AF LD (CPMDSK),A JP WBOOT INIMEM: JP BIOS+3 DEFB 0 BOOTDS: DEFB 2 JP ADRBDS+6 COND FILBOT LDSYS: PUSH DE PUSH BC PUSH HL LD HL,TMPFCB LD DE,TMPFCB+1 PUSH DE LD BC,23h LD (HL),B LDIR POP DE POP HL LD C,0Bh LDIR LD A,(BOOTDS) INC A LD DE,TMPFCB LD (DE),A LD C,0Fh !":G:.>!2c424:g."d4"4**+/h8 last /system:^5/*:#@/h8 dir dir entries:/ @͟&h8 /group:::02/ͺ/>2/h8H groups kbytes/extent:!::)=:͟&+x/ú: h8invalid argument$$$ SUBCOM?CALL 5 INC A POP BC POP DE SCF RET Z WBO1: PUSH BC PUSH DE LD C,1Ah CALL 5 LD DE,TMPFCB LD C,14h CALL 5 POP DE POP BC OR A SCF RET NZ LD HL,080h ADD HL,DE EX DE,HL DJNZ WBO1 OR A RET ENDC ;FILBOT INCLUDE BIOSKBD INCLUDE BIOSDSK COND FILBOT TMPFCB: DEFW 0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0 ENDC ;FILBOT STCK1S: DEFW 0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 STCK1: DEFW CONORT .DEPHASE BIOS2:: END  POP DE POP BC OR A SCF RET NZ LD HL,080h ADD HL,DE EX DE,HL DJNZ WBO1 OR A RET ENDC ;FILBOT INCLUDE BIOSKBD INCLUDE BIOSDSK COND FILBOT TMPFCB: DEFW 0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0 ENDC ;FILBOT STCK1S: DEFW 0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 STCK1: DEFW CONORT .DEPHASE BIOS2:: END 0,0,0,0,0,0,0,0,0,0,0;netreba, 1MB poziva 4KB bloky BUF512: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;512 bajtov pre diskovy buffer DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,a FD stope XOR E JR NZ,WBOOT2 ;neni koniec stopy, citaj dalej LD E,A ;dalsia stopa, zacni 0. sektorom LD HL,WTRK INC (HL) ;zvacsi stopu BIT 2,(HL) ;test na 4. stopu JR NZ,WBOOT2 ;este citaj dalej ENDC ;FILBOT ;uz sme nahrali WBOOT5: LD BC,CPMDMA ;nastav adresu 80H CALL SETDMA ;ako default DMA pre CPM LD A,(ADRCCP) ;test, ci CCP zacina XOR 0C3H ;skokom JP NZ,ERRBOT ;nie, ohlas chybu POP AF PUSH AF AND 0Fh LD E,A LD C,0Eh CALL 5 POP AF ; LD (CPMDSK),A Track-Info < N<<<<<<<< <0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MERRBT:: DEFM 'Boot erro','r'+80H DEFB 1 ; DEFM 'User brea','k'+80H MERRRW:: DEFM 'Read/write error: Retry/Abort/Ignor','e'+80H DEFB 4,'RIA' MERRDS:: DEFM 'Disk select error: Abort/Ignor','e'+80H DEFB 3,'IA' 7$^$4$%w~$(!%ѷ7?O!q*| 7^#V!-*!*!*!!*"!*"!xx_nA:A2l@ 2k@!5>2> > 0:o&MD)) s#r ^ 020:8T g[ 0:0>M NN 0_0_2!X!X:OX(0!((0 !((!(~G} |*!r#r#ri( _y#x#{8s+p+qͩ* !!q#p#w*::OF}K:`": :a!w>2i*~=2a0:2j~2kw͎:*w>"ø!"8":!"2͙͙~?(~?͙|\*d"͙ͩ\͙e>2͙"͙`͙Ó͙͒e*:#:øS2͙͙>2͙*}/_|/*:W}_*8":}o|g"8:i(*6:k( w:j2a͎{*}D͙>2`[eBDOS e2> i *PX}ͤ |͔ *RX*XX:SX͔ :QX:ZXͤ :OX!X(!X0nf>'_:MX=Wõ N^#V#N#F^#V#B<0^#V#O N^#V#y/0^#V#O ^#V#A#Ͷ>: 8 >1i 0i 0~ ##>.~ (#0bk 6 ~g# (.( ~#. x_W~g#| V} ( .>ݾ00. .>ݾ0.AA}=?0fA( (  8  ^#V#{( T MDx( 0| [} ( .>ݾ0rror on : Read/only file: Abort/Ignore $  v >2>/!] ~S >R27 >2& >s2- :]RS)VMFPIGʾLʣ1  v i :m$ +:n͆O:o͆27 0  d 08:8>10ɯ2dG̈́ͧi 2dGi dG̈́  v i d ? v !;"!"!"0. .>ݾ0.BA}=?0gA( =ö=Ͷ>:i 2{ ? k0!GG:M<*KOx^ʕB]T+^w4c0!G:M(5=(O*K^P]T#70!G:M2O<02N0!G:O(G5:N(<85,0!G:O(G4:N0< :M=(4 02N2O0^ !G*G-͑ :N_> (>i *KN:M0_8(yG( ~#i y(> i {> (>ͩ :Og :H| k 0!G^ *K^r*G-͑ > i F(~#i x=> ̩ (i *P͑ 6O!~4?͝9(G"0N6# x(~ y( ~*( >?( # #6#( ( N!n f}2 >2 )|2 !AA͔!ڏA2!".͟B͍0!wgo2eA<"cA!PBA!.͟BÍ0Q\|?g"))|#*:O99gP*~* Kp B(C! :(7| ! :<(:<#*+| ":( =#!?7yٹ|ټ}ٽ͓$0 ͓$?Я͢$ #dH8 7Z0 !BR0 8B! y |? }; ((;(; (;^"͙ " <2!-!R-- -%a{˯A[Gg#xyG?yA0:?͐ͅ0g0͐0Ɛ'@'!͗8 ))))o!ͨ8T])))_|}ͮö[!do&x0 Ͷ[!`^#V#/R<0Ͷ[>0Ͷ['d T]#p#w >h?h?$~(%7$^$4$%~%T]6$~("%Track-Info = N======== =K\XA K\XA0%O͟ Pyi ̩ ~(#0 ͵ r P dLP  dM~V` u SPO` PSWP IP R` QBC_P` DE`` HLzT`  AFRh DFIXΆh dNC IIA:NC $$$NC$$$.INI$$$NC$$$II$$$ SBNC EXTNC MNUNU COMA:NU NIPSOFT commander V1.06S V sborenastali zmeny.Mlo pamte!UseknVlodisketuA!HadmNastavNastavujemOznaencieovnevojd!vonchobsadenchcelkomZmazaVetkynjsprlidlhDopl prkaz:Spustizaloi kBKOI-8 CSASCII 7Latin 2KamenickchPremenvamMmmmnatazapsaZapisujemtamkonfigurciu. panelP. panelav diskPrav diskZruiOpakovaIgnorovaOKChyba pri tanChyba pri zpiseDokem zobrazi max. 128 sborov!Pracujem s diskom, akaj!Chce naozaj skoni?noNieZoradenieZora poda:AdresraMenaPrponyUvateaInformcia:StrunPlnSborsborsborysau nadiskuneexistuje!sborovzdo5 Copyright (C) 1987 Pezik / MarVan Tape V2.0 rev.8801 - 2400Bd$+152400Bd$+153200Bd$'!E(!O; :BG>0 y>~~>ʎ:BG?>0 yW k  7?k7k7k 7kV>ͻ~Oͻ#(~O0~ͻ# yͻxͻ:y!9"K"+ . 1-C @d —'—# )—: :<:=Z,>=!B?G~¯w#f,pͶ, /—O Į,/—: #~¯~$w'+"0:}!MͿ ( ><  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\:= NPress $z  *Nrecord.$ DN play !!!$ _N $ sN $>~~>ʎ*K N Tape ERROR $_!^#V N N !!!$:yl!/?K[in header$in check sum$- drop out$- break$- bad compare$- openning file$- disk full$- no file match$- missing extent$ ><:[1 N Writing $!N^N~ #  N+>ͻ*_! !l!+| >K~~>ʎͧ!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>}|ͧ1 _  yB  1  y!9"K:/2Y.>.>21& ͚8& ͚8&͚8- >21& ͚8& ͚8&͚(:CG7|7:CG:DW>ʎ{ͯ yw#(wO0# 77#8FH !>ڎH>ڎ*! x>ڎl:y}¼#(¼O0# 77>ÎOy2:(V: M:1 # ! #1 ! #-!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>}|ͧTrack-Info = N======== =m N Found $:- > 2!^N~ #  N:7>Î ! !1 :7?:=  N READING $  NVerifying $!^N~#  N Þ1ͫ:ͫ: ʯ1 ʯ1:" @ʃ: ʃ:> :Ã::?1*@4.2*?~2G+2~/_1~+2=G+~+2ͽ32+<=(2+ * N!mW!u1  !l >2V N N N !x( B"_>L2]|@!N N>L(2]@:<22[:]L( !Kk >23:L>23! 1 4 >23: / : E4  N>$2 2 2  N2 2 2  N>ʎ * )l>gN N>Ž +| :L( >23 N!1 !    N1&3:#1!  3#1!! $6#1 >/!] ~S(F x2:Y &N u N $  N $:]S  >Î̈́2 !m~:0086 G4  : V @ Nl!6Nȇ!om :^ (2^ !m_   > !_ m  Z!W !  #6N 1-C @yK5y S5y@`5:?=2?:?<2?:?:<(:?#~>5)!ɷ/"?N2O:= ʕ5*?o0y6+,ė5# <ėw+:= ,6y@`5:?=2?:?<2_Track-Info > N>>>>>>>> >Track-Info > N>>>>>>>> >Track-Info ? N???????? ? Track-Info ? N???????? ? M!^͋0&.001N!$͔.w!'''('k(!,# ÍN!$͔.w!'''((k(1''(1''0!i*^#Vnf"11&(1K)((N!$͔.w!(a)Q)!{-# ÍN!$͔.w!?((!-NO>!$͔.>g q!?yq!(( !-# NO!4͔.>g q!l)'d)yq!(( k(!-1N!"͔.2q!(!-MD!aX#O i`  ( (O aX ÍN!(͔.w!&(!i*# ÍNO!(͔.>g q!&yq!( (srPrepsaNecha takNememkoprovapresunKoprujemPresvamna seba!MaemR/OR/WSYSDIRjevymazaNaozajahm utility,ABCDEFGHZvo nejak funkn disk:Neviem njs disk A!1011121314156789Veobecnav uvatePrav uvateZvo uvatea:*?!*E )*N1* K@>*U )1*NN* &[*U'N*Zk*Q)x*O U)*k*WY)*x*S])**D )*N*;'*S#'*Z*'**Z '**O'**I*'+%1&2&1&&&{r%N!&͔.w!(a)Q)!*8N!0͔.w!&&!/*N!&͔.w!a)!'('!L*# Í1& (C) 1992 NIPSOFT Distribtor: mZx software P.O. Box 83 370 04 . Budjovice Disk A:kBkB kB Poloiek:sekov:DIRSYS  $( Ǚ Nzov UZzn.Pol kB PrTyp    +Z0'**O+'O#+)0+A )=+#+B )J+0+C )W+=+D)d+J+E)q+W+F)~+d+G)q+H^,)^,++^,0)^,+,+1 )^,+,+2 )^,+,+3)^,+*,+4)^,+7,+5)^,+D,+6)^,+Q,+7)+,+8)+,+9)+,,A )+*,,B)+7,,C)+D,*,D)+Q,7,E)+D,F)++Vn,'{,I'n,Z,m(,Aq(,N, m(,Aq(,N,(,A(,,M(,,P(,U,(   ( Ǚ Nzov Nzov Nzov   Ǚ( Ǚn f n f5N N#N~g?( Og?(#~=(=(=(͠555͠55͠5N ~ ~ 6=ݾ ~0N!.6*| ~AZ/A8w~͵ ^#Vsrn f"3nf"3nf#"3"3~23W^f n )8"3"3og23"323{*3|+"3:3< 23( O!\ <~K3[3!\\0"/ ?!6$*7* -S(,P-?&-K#'-Z6-?C-P#'6-ZS-)`-P'm-S-V! )`-N}- '-Z'-}-V )-N-?-V )-N-m(-A#q(-N- '-O'-Z')!+X0')!+X '(,X8 '(,X u((,X7 u((,X0Tto funkcia zatia nie je implementovan.0Disk je pln!0Adresr je pln!0S.(2.2.".*RX".^ 0".*RX".^  N!W(,͔.i`# Í0!3K3#B *3#"3og"30͎5"323{*3:3ݾ <23"30w w w.6ͤ677~0ݾ(~87(7(-͕5 4 ~ 8w ~w#9>w04~ <(w  p 6p pp:3=V7>23/IV7w 7(7A8^jf <u tnf##~(G&0F ͇5͎5ut##͍80w wF ͇5H##nf^V50 srut ##0͟ O#~#gi > i ~#gyg 0͟ O>g ͗8>g ~n f*~nf*;=(0Nl,(!$sr%1&"/{r%N'*!.I7IO 7ɯsr%1&O/{r%N (*N2)!!+A)!͔.)!)!+.N>):X!+8>!͔.)!*+. >×N>1):X?-!.͔.)2> i xͽ2; do yͽi`O   (͍~#͔ͯ.ͯ)ͯͯMDïi` ͍7{0~708w{0͑70ԡ{0g70Ԁyo yo^͂0&͔.!+# Í^͂0&͔.^͂0&.͔0Ͳ00^͋0&͔.M!^͋0&͔.Track-Info @ N@@@@@@@@ @R/ ~>W(>Oi  ~!p4(!t42yg ^~# 0G= ~#g =~# | i 0͙ )5!.56(x4!4x &9&9&9&9;:[XĀ Ñ NXR}>{͇5o&)^#V! 45~ ͝9W:OX_͋9z{͇5F !~#o~#g~ ( ^Vy:MXGO6yO0͙ :MX݆| )6!z5(!W5&9!p5&9>ͩ ͑ 0͙ :MX݆g.͑ 9(7); *; kB v ; vybranch sboroch Ñ ʹ968 > &i 0͙ )6!5(!4&9Ñ 0͙ )>| :MXG6!J5(!4&9Ñ 0QOAn f))+KBNO!6͔.> g :A!?4-(!?-2yq!( ( # ͍ZN:A ~>P\>*~3[ R8 :A>P>K!6͔.w!&(((&'& ÍN!6͔.:A!?4-(!?-2q!(i`!hA#O i`  (hA ÍNB!D͡A!fA!(:A AP(V>2A!͡!!AA͔!0 !fA!ÏA!fAMBͶ!!͞"!w <Í2A>2A2A;" WͷCZF:A<=(1:OXO=<~ ~0 (~8y<=<<;;CZ%(9::0 0A~ ;D:0 8A~ 0_69{ݖعW͙ {͝9()6z(| >g 8ͫ:Ñ 80| yg ͗8:09~ F0Gw_8{:i Ñ ͝90; 0͝96s 006 -T<͜<T<͜<06 T<͜ !.T]yGWy O:MXG~=o_~=gW .(.(.>&0:MXg.].yG|gy  0O>!X!XѷR)$Dh1!fA!͡!8^BͶ! !0!7ÍN1'G"EN!]AA E͙#_W"3S3S3*3R"3"~3*3R"3nf##~(!~3G&## ^#V#)͍ > g nf##*>gAfA #(D!AA!>͡A(D!fA!8:(AP(V -!fA!1t'("܏AڂDw <ÍNBA͞"!D!i*!9Aog~#fo"G ̀1+!دw <Í;" Ͳ2NiGwF2N%("8iG  aJg  >g :\X!\HO ^#VSHq!-@O'>g y;: !G~#y >?g ~# 0>.>%$#: 2!7͵ r e>h&-͵ >| >i b >i ,͵ ~A2C4!3&9\>w?>| !~3͍ &>&>'>#MDiskMenuUkEditujKoprujPanelAtribtyVymaNov editPresuUlo SETUPSelektujOdselektujUtilityInfoZru nvodMenu editEXT editNastav asSkoniNvratHex/TextKdNjdi vzadNjdiNvratUloKdNjdi vzadNjdi0&=$0o oÑ ͍ )[ ~#i 2>g >+i  yg O)>Fi >6i 2>:i 0^ N#!O>g͵ r e͹ Nvod Y͟@()@SHIFT(]X(1!G$w#)$8͸H $>G͸H $7,$ ! Hw >%4~()$8ͷI8)$8K )$8 (>%4)$8N:]X( o$o$$K o$$K )$$K )$)$0utq###nfNsHr ! HI$?8>| HIø$0!#H H90!XH[H9! HI$?0sH+Jo J!VHI>| HIø$0sH! HIy$͈J#͆I $! HI>| H+J;"|#_%!@@dHr el q!>%g nf*!K'2!."A͑  >i n f))+!ͅH@CTRL(@GRAPH( @SH+GR~ 0O#yf@~#i  SUBOR1 TSTKBDNUL!-KBDNUL1 SUBOR2 TSTMPHSn!JCOMPH1((((N!AAfA #0:A!&)(!)"A1))B)N!0͔.w!((((!Q-# Í0͙  } i Ñ 0͙ *A͑ ,> "A0͙ *A-͑ >N͟BG8^B0Nx!PH:fAͭgA7m. xʓBKB!B ˯N!P:AAͭBA ߯>70*RX"B^  6:A!9)(!/)"Bw!9)(Track-Info @ N@@@@@@@@ @!I!K!GT] 7RG)^#VgAo&G_%:NX!z?@<<;;:]X2]X! HII:\X<2\XͅH+J0! HIy$#͆I8 $!M* : O99gR0y :]X }oK\X N!͔.!<@2!lXE ~(>2HÍ1)'lX1&lX:HO:H ( !HH !H T]+!H  )$$%w $͸$o$:H! H !I$?#o$:HG'LI#>2HK:HLmL0 ͍L+Jø$!lXH:HG 1#:H :H=(Go$ $:]X( }o͍I M=2R*RTPRg *!&͔.q!?(!.UE͍ +G"A~8!AAw2fA͔!*KA/!>&!J&G"A>2AA2fA*KA"R;"n f "R:R03E2R!P]T?6[AASfA_%!C@@dHr el q!!Q&9ͅH!.!AA͔!8D͟B8͟B0(͍Q3U?K.͔!8$͟B8>(?G!P >+  x +#!P"R͍!P"R"R!"R}2R!PT#^ dH>1*RU>?*RU>Lg ~sH*R$,͑ k !WV!QT] 7RQ)^#VRgAo&Q!P[RR0MD!R6*R#"R+]TB(MDkb+!%wN]T*R $'L8o$$K )$COMSUB12345678123;"!AA%M :AAͭAA~͵<!K&S%!AA͔!0 1)'!PT]?6͟B81a)!'('`0!%MAA N>P ??E0!P!R"P6>wutsrwww w  sr ~gw ~nO(# yL8yٹ8O6##~( bO (5Nsr 6 >GN2&ͯO!͡!01)C'2&ͯOͶ!!7*E:KXA!&wO8(HR7%+"RRMDkb#(+6!R6:R(53U ;W?KN*RPR(+)$|!͹E*R"pA!fA! #n-:X :X<<:X :X==د2R{]T͞RRR lX]R <(!%#(K*RLWR(B+ʹW K*RL]R(+#ʹW ͍͠W2R2R"R2R͞R*RR"RT͍L:\X<2\Xog"R2R*R"RͅH*RT  * * PP)PPV)\  ]*P۷R8sGX1PY͹[. p+6 PS%yOZ͹N>E!AA~#ͭ>&~!]~P!]ͦ8 ( (>ͦ!PKAͧ5(0!TP!AA͔!!PQ?6͟B҃M`0!P~nO(bO͹N>E~~nO#!(++~##.!KAx(!CAO~ (# (yGAA>ͭAA:(5X5M~!\\ÓZx/@/(/X@/sÛæ~x55(5X5~~#O^#V#!X2}XͤY>2}X!KY~#G^#V##0͑Y¥X!Y͂Y0:~X!X(!KY͂Y>G>x0y*_X ia0ͶYx Y͋ͥc͙2KX!~#(O>: ++~A2KX͢2LX2AAͿP^'0A~͵;":AA0~8!wͭ!Px ͵ ͤ >͔ :~Xr YB>ί>i   U==#=x= ==[O>*>>*>Z2MJUDd[G_FUD.[FFP?[gUbUaQ&[:OX !-N0/(2X<2~X>E1s)P(_W))O!͔.! @2;:!uQE͍͐}( E(MYOgoGQxGQ{GQy2Z"X  uSKS.SSSSSTTTMT@T#W#W#W;W&XWW)Pozcia:9Dka:GKd:#PO]RjRO~K ( #yyP(O{KR]TGRȹ8xP[RR7?~K ( x]R7jR#(]R 7]R#͞R7+WR+WR+jR #% > R͟ = g ]R(jR ~#ͫR !ZV (;;!.N0ʹ/(2X=<:OX(.AY[!KX:X :XZZ:X:X0($1ARE:OX !.N0!(.N0 =Z!.N0!3.N0=:NX2NX>(*z?2MX!z?@<<;;i sIX^ :KXww:LXw6V:\(=w:l(=w1h&E8!]&& ͧ5 :^X2KX E:KX2^X*E6E͍{IXͿP^':NX!z?@<<=<;;!!F\!ZT] 7RZ)^#VgAo&Z utujem. Mte nevhodn operan systm. Ten sprvny si muste zakpi na adrese: NipSoft, pracuje iba s betaverziou NIVv3*RV:RRV(+|(*R> V#> V_T*R]R:R 2RR(2RB2R*RzR:R< (0o>2RR͖T*RzR"R:R(*R͓R=2RBR2R"R*R͓R0͈2RR"RBR:R2R*RWRȷ(=2R͞RBR"R2R >O2RuS:R2R*R͞R2R*R>O2R:RBR2R2R!PBR2R"R*RWR!P"R0sH>RzR8>g.͑ *RPRͬS*RV :RRV0*R:RG>G*Rx͞R͓R8[RR"RT2R͞RBR2R"R>O2RoTS:R*R( 2R*Rx͓R8T"R:R*R(zR8< 2R͞RxzR8"RzR8Track-Info A NAAAAAAAA APOS 0.06 $ Mlo pamti !!! $operan systm. Ten sprvny si muste zakpi na adrese: NipSoft, pracuje iba s betaverziou NIN0!3.N0=:NX2NX>(*z?2MX!z?@<<;;i sIX^ :KXww:LXw6V:\(=w:l(=w1h&E8!]&& ͧ5 :^X2KX E:KX2^X*E6E͍{IXͿP^':NX!z?@<<=<;;!!F\!ZT] 7RZ)^#VgAo&Z utujem. Mte nevhodn operan systm. Ten sprvny si muste zakpi na adrese: NipSoft, pracuje iba s betaverziou NIP1sU6u*DKK$tVt0ta`td#&sڮfj9o9G9aG8x>x^RϪ2Zu|QBK$t^tQR6w#"sOggH|>,s|] 4f\SNG#y@o7Ha2 a@f4 o99r2G( T$D3uBDOS2 N A,(0D8h) ;citaj stav CPL AND 0BFh SCF JR Z,FRDBU3 ;skoc, ak bolo OK FRDBU2: CALL FOCUS ;prejdi vsetky stopy POP BC DJNZ FRDBU1 ;opakuj, ak nebolo 5x CALL RWERR ;ohlas chybu JR NZ,FRDBUF ;ak bolo Retry, skus znova PUSH BC FRDBU3: POP BC FRDBU4: LD HL,VPEND ;pending flag LD (HL),0 ;vynuluj RET ;hotovo ;bezpodmienecne flushne buffer na disketu FWRBUF: CALL MOTON ;zapni motor a vyber disk LD B,5 ;5x budeme skusat FWRBU1: PUSH BC CALL SETWD ;nastav stopu a sektor ;***************************************************************** ;***************************************************************** ;** ** ;** B a s i c D i s k O p e r a t i n g S y s t e m ** ;** ** ;***************************************************************** ;***************************************************************** DVERS EQU 22H ;version 2.2 ; moduQ~ vK4?k5BG4d3R.kM6r ֋3pT. ÜY<[UNC*#:OiSp` Z"[5:a3Yn EyX P0Tt]l֛:ݫh]Y8:8KI"N H1sqT. ô fL ӛq{4f\,k~zY7tD+`v"`2N3w<08"Nl+`1hU%djtnifdfL 7%*^:A [h@;#I| l#9aN4&#@cÀI]`H|,4#BtY, TtD"HxYG4pCBAyF > dY WNhI0Yle addresses ; literal constants TRUE EQU 0FFH ;constant true FALSE EQU 000H ;constant false ENDDIR EQU 0FFFFH ;end of directory BYTE EQU 1 ;number of bytes for "byte" type WORD EQU 2 ;number of bytes for "word" type ; fixed addresses in low memory TFCB EQU 005CH ;default fcb location TBUFF EQU 0080H ;default buffer location ; fixed addresses referenced in bios module are ; pererr (0009), selerr (000c), roderr (000f) ; error message handlers SEL$ERROR: ;report select error LD HL,S O0|(DWJBRtF0nhA:1D&Jp kȯ#n 3Wk)(3Z h7bw xFEWH2)Yxf Ѓtct %yoYMp@Cf"-rx-o ѳG&?bGEJtWtˀH$#9CnbZ U=L)z= ܢˤwM+4 bD 4] #W1"2Yg 4J`YtctL.wOVky?/4:*_M'p3XA ~[ё60xȪbKkHB .#?y>;Fn Ea\B N`2yKBp2xK9⁣ 9,ELERR GOERR: ;HL = .errorhandler, call subroutine LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) SELECTDISK: ;select the disk drive given by curdsk, and fill ;the base addresses curtrka - alloca, then fill ;the values of the disk parameter block LD A,(CURDSK) LD C,A CALL SELDSKF LD A,H OR L RET Z LD E,(HL) INC HL LD D,(HL) INC HL LD (TRANV),DE LD (CDRMAXA),HL INC HL INC HL COND BIGDSK INC HL INC HL ELSE LD (CURTRKA),HL INC HL INC HL LD (CURRECA),HL p tt08AqΑ$b@Ar x(U5yo8 2_:Xn9&9+$f땒 0? <|D0=GCPwZ,p1tq rg!ɚap ֛"3\g yK <8gYŚqnHx ;B!N"3 #ۤ8k!f0aKY^aCBtpH|"FEgK<0n}~.gݚsNRҶ;G&!BH^!FpLuxv,0a>kG9l75a|j9N&Q*,DKK5f\L2sB6u>j9 9Y; f sr3Qvj).BH`F:]Xk1tTrack-Info A NAAAAAAAA A ENDC ;BIGDSK INC HL INC HL LD DE,BUFFA LD BC,ADDLIST LDIR LD HL,(DPBADDR) LD DE,SECTPT LD BC,DPBLIST LDIR LD HL,(MAXALL) LD A,H LD HL,SINGLE LD (HL),TRUE OR A JR Z,RETSELECT LD (HL),FALSE RETSELECT: LD A,TRUE OR A RET COND BIGDSK ;move to home position HOME EQU HOMEF ELSE HOME: ;move to home position CALL HOMEF XOR A LD HL,(CURTRKA) LD (HL),A INC HL LD (HL),A LD HL,(CURRECA) LD (HL),A INC HL LD (HL),A RET ENDC ;BIGDSK RDBUFF: ahodime (moze byt iba 16 bitova) POP HL ;obnov HL' POP BC ;obnov BC' EXX ;stopa je v HL, sektor v DE PUSH DE ;odloz sektor LD DE,(OFFSET) ADD HL,DE ;HL = curtrk+offset LD B,H LD C,L CALL SETTRKF ;track set up POP BC ;sektor do BC LD DE,(TRANV) ;BC=sector#, DE=.tran CALL SECTRAN ;HL = tran(sector) LD C,L LD B,H ;BC = tran(sector) JP SETSECF ;sector selected ;store 16-bit ARECORD STAR16: PUSH HL LD HL,0 LD (ARECORDH),HL POP HL STARL: LD (ARECORD),HL RET ;read buffer and check condition CALL READF JR DIOCOMP WRBUFF: ;write buffer and check condition ;write type (wrtype) is in register C ;wrtype = 0 => normal write operation ;wrtype = 1 => directory write operation ;wrtype = 2 => start of new block CALL WRITEF DIOCOMP: OR A RET Z LD HL,PERERR JR GOERR COND BIGDSK SEEKDIR: ;seek the record containing the current dir entry LD HL,(DCNT) LD C,DSKSHF CALL HLROTR LD (DREC),HL CALL STAR16 SEEK: ;seek the track given ELSE SEEKDIR: ;seek the record containing the current dir entry LD HL,(DCNT) LD C,DSKSHF CALL HLROTR LD (ARECORD),HL LD (DREC),HL SEEK: ;seek the track given by arecord (actual record) ;local equates for registers ;arecord = BC ;currec = DE ;Curtrk = HL ;tcurrec = HL ;load the registers from memory LD HL,ARECORD LD C,(HL) INC HL LD B,(HL) LD HL,(CURRECA) LD E,(HL) INC HL LD D,(HL) LD HL,(CURTRKA) LD A,(HL) INC HL LD H,(HL) LD L,A ;loop whileby arecord+arecordh (actual record) ;local equates for registers ;arecord = BC ;currec = DE ;Curtrk = HL ;tcurrec = HL ;load the registers from memory LD HL,(ARECORD) ;dolny word do HL LD BC,(SECTPT) ;pocet sektorov na stopu XOR A ;nula do A LD E,A LD D,A ;vynulovanie modula EXX PUSH BC ;uchovaj povodny obsah BC' PUSH HL ;uchovaj povodny obsah HL' LD HL,(ARECORDH) ;horny word do HL' LD B,020h ;pocet opakovani (32 bitov) do B' OR H ;je hornych 8 bitov nulovych? arecord < currec SEEK0: LD A,C SUB E LD A,B SBC A,D JR NC,SEEK1 ;skip if arecord >= currec ;currec = currec - sectpt PUSH HL LD HL,(SECTPT) EX DE,HL OR A SBC HL,DE EX DE,HL POP HL ;curtrk = curtrk - 1 DEC HL JR SEEK0 ;for another try SEEK1: ;look while arecord >= (t:=currec + sectpt) PUSH HL LD HL,(SECTPT) ADD HL,DE ;HL = currec+sectpt JR C,SEEK2 ;can be > FFFFH LD A,C SUB L LD A,B SBC A,H JR C,SEEK2 ;skip if t > arecord ;currec = t EX DE,HL ;cur JR NZ,IDIV3 ;nie su nulove, zostane 32 opakovani OR L JR NZ,IDIV6 ;boost pre 24-bit. ARECORD EXX ;boost pre 16-bit. ARECORD PUSH HL ;urobime shift delenca o 16 bitov vlavo LD L,A ;spodnych 16 bitov bude nula LD H,A EXX POP HL ;spodnych 16 bitov presunieme do hornych LD B,010h ;16 opakovani JR IDIV1 ;chod delit IDIV6: LD H,L ;urobime shift delenca o 8 bitov vlavo EXX LD A,H LD H,L LD L,E ;nula do spodnych 8 bitov EXX LD L,A LD B,018h ;24 opakovani IDIV1: LD A,H trk = curtrk + 1 POP HL INC HL JR SEEK1 ;for another try SEEK2: POP HL ;arrive here with updated values in each register PUSH BC PUSH DE PUSH HL ;to stack for later ;stack contains (lowest) BC=arecord, DE=currec, HL=curtrk EX DE,HL LD HL,(OFFSET) ADD HL,DE ;HL = curtrk+offset LD B,H LD C,L CALL SETTRKF ;track set up ;note that BC - curtrk is difference to move in bios POP DE ;recall curtrk LD HL,(CURTRKA) LD (HL),E INC HL LD (HL),D ;curtrk updated ;now comput ;najvyssi bit delenca do CY IDIV3: RLCA EXX EX DE,HL ;modulo do HL ADC HL,HL ;sprava nasun do modula CY SBC HL,BC ;je modulo vacsie ako delitel? JR NC,IDIV2 ;je vacsie, nechaj tam nove modulo ADD HL,BC ;vrat stare modulo naspat IDIV2: EX DE,HL ;vysledne modulo do DE CCF ;vysledny bit podielu do CY ADC HL,HL ;nasun novy bit podielu do HL EXX ;a cely podiel posun vlavo ADC HL,HL ;vratane horneho wordu DJNZ IDIV1 ;chod na dalsi bit ;delenie je hotove ;horny word stopy zTrack-Info B NBBBBBBBB Be sector as arecord-currec POP DE ;recall currec LD HL,(CURRECA) LD (HL),E INC HL LD (HL),D POP HL ;HL=arecord, DE=currec OR A SBC HL,DE LD B,H LD C,L LD DE,(TRANV) ;BC=sector#, DE=.tran CALL SECTRAN ;HL = tran(sector) LD C,L LD B,H ;BC = tran(sector) JP SETSECF ;sector selected ENDC ;BIGDSK ; file control block (fcb) constants EMPTY EQU 0E5H ;empty directory entry LSTREC EQU 127 ;last record# in extent RECSIZ EQU 128 ;record size FCBLEN EQU 32 ;file control bloc D,(HL) EX DE,HL RET INDEX: ;compute disk block number from current fcb CALL DM$POSITION ;0...15 in register A LD C,A LD B,0 CALL GETDM ;value to HL COND BIGDSK JP STAR16 ELSE LD (ARECORD),HL RET ENDC ;BIGDSK ALLOCATED: ;called following index to see if block allocated LD HL,(ARECORD) LD A,L OR H RET COND BIGDSK ATRAN: ;compute actual record address, assuming index called LD A,(BLKSHF) ;shift count to reg A LD HL,(ARECORD) EXX ;nuluj horny word PUSH HLk size DIRREC EQU RECSIZ/FCBLEN ;directory elts / record DSKSHF EQU 2 ;log2(dirrec) DSKMSK EQU DIRREC-1 FCBSHF EQU 5 ;log2(fcblen) EXTNUM EQU 12 ;extent number field MAXEXT EQU 31 ;largest extent number UBYTES EQU 13 ;unfilled bytes field MODNUM EQU 14 ;data module number MAXMOD EQU 15 ;largest module number FWFMSK EQU 80H ;file write flag is high order modnum NAMLEN EQU 15 ;name length RECCNT EQU 15 ;record count field DSKMAP EQU 16 ;disk map field LSTFCB EQU FCBLEN-1 NXTREC EQU FCBLEN RA LD HL,0 EXX ATRAN0: ADD HL,HL ;dolny word EXX ADC HL,HL ;horny word EXX DEC A JR NZ,ATRAN0 ;shl(arecord,blkshf) LD (ARECORD1),HL ;save shifted block # LD A,(BLKMSK) LD C,A ;mask value to C LD A,(VRECORD) AND C ;masked value in A OR L LD L,A ;to HL LD (ARECORD),HL ;arecord=HL or (vrecord and blkmsk) EXX LD (ARECORDH),HL POP HL EXX RET ELSE ATRAN: ;compute actual record address, assuming index called LD A,(BLKSHF) ;shift count to reg A LD HL,(ARECORD)NREC EQU NXTREC+1;random record field (2 bytes) ; reserved file indicators ROFILE EQU 9 ;high order of first type char INVIS EQU 10 ;invisible file in dir command ; EQU 11 ;reserved ; utility functions for file access DM$POSITION: ;compute disk map position for vrecord to A LD HL,BLKSHF LD B,(HL) ;shift count to B LD A,(VRECORD) ;current virtual record to A DMPOS0: SRL A DJNZ DMPOS0 ;A = shr(vrecord,blkshf) = vrecord/2**(sect/block) LD B,A ;save it for later addition LD A,8 ATRAN0: ADD HL,HL DEC A JR NZ,ATRAN0 ;shl(arecord,blkshf) LD (ARECORD1),HL ;save shifted block # LD A,(BLKMSK) LD C,A ;mask value to C LD A,(VRECORD) AND C ;masked value in A OR L LD L,A ;to HL LD (ARECORD),HL ;arecord=HL or (vrecord and blkmsk) RET ENDC ;BIGDSK GETEXTA: ;get current extent field address to A LD HL,(INFO) LD DE,EXTNUM ADD HL,DE ;HL=.fcb(extnum) RET GETFCBA: ;compute reccnt and nxtrec addresses for get/setfcb LD HL,(INFO) LD DE,RECCNT SUB (HL) ;8-blkshf to accumulator LD C,A ;extent shift count in register c LD A,(EXTVAL) ;extent value ani extmsk DMPOS1: ;blkshf = 3,4,5,6,7, C=5,4,3,2,1 ;shift is 4,3,2,1,0 DEC C JR Z,DMPOS2 ADD A,A JR DMPOS1 DMPOS2: ;arrive here with A = shl(ext and extmsk,7-blkshf) ADD A,B ;add the previous shr(vrecord,blkshf) value ;A is one of the following values, depending upon alloc ;bks blkshf ;1k 3 v/8 + extval * 16 ;2k 4 v/16+ extval * 8 ;4k 5 v/32+ extval * 4 ;ADD HL,DE EX DE,HL ;DE=.fcb(reccnt) LD HL,NXTREC-RECCNT ADD HL,DE ;HL=.fcb(nxtrec) RET GETFCB: ;set variables from currently addressed fcb CALL GETFCBA ;addresses in DE, HL LD A,(HL) LD (VRECORD),A ;vrecord=fcb(nxtrec) EX DE,HL LD A,(HL) LD (RCOUNT),A ;rcount=fcb(reccnt) CALL GETEXTA ;HL=.fcb(extnum) LD A,(EXTMSK) ;extent mask to a AND (HL) ;fcb(extnum) and extmsk LD (EXTVAL),A RET SETFCB: ;place values back into current fcb CALL GETFCBA ;addresses to DE, HL LD 8k 6 v/64+ extval * 2 ;16k 7 v/128+extval * 1 RET ;with dm$position in A GETDM: ;return disk map value from position given by BC LD HL,(INFO) ;base address of file control block LD DE,DSKMAP ADD HL,DE ;HL =.diskmap ADD HL,BC ;index by a single byte value LD A,(SINGLE) ;single byte/map entry? OR A JR Z,GETDMD ;get disk map single byte LD L,(HL) LD H,0 RET ;with HL=00bb GETDMD: ADD HL,BC ;HL=.fcb(dm+i*2) ;double precision value returned LD E,(HL) INC HL LDTrack-Info B NBBBBBBBB BA,(SEQIO) CP 2 JR NZ,SETFCB1 XOR A ;check ranfill SETFCB1:LD C,A ;=1 if sequential i/o LD A,(VRECORD) ADD A,C LD (HL),A ;fcb(nxtrec)=vrecord+seqio EX DE,HL LD A,(RCOUNT) LD (HL),A ;fcb(reccnt)=rcount RET HLROTR: ;hl rotate right by amount C INC C ;in case zero HLROTR0:DEC C RET Z ;return when zero SRL H ;high byte RR L ;low byte JR HLROTR0 COMPUTE$CS: ;compute checksum for current directory buffer LD B,RECSIZ LD HL,(BUFFA) XOR A COMPUTECS0: ADD A,(HL) INC HL LD A,D SBC A,(HL) RET SETCDR: ;if not (cdrmax > dcnt) then cdrmax = dcnt+1 CALL COMPCDR RET C ;return if cdrmax > dcnt ;otherwise, HL = .cdrmax+1, DE = dcnt INC DE LD (HL),D DEC HL LD (HL),E RET NEWCHECKSUM: LD C,TRUE ;drop through to compute new checksum CHECKSUM: ;compute current checksum record and update the ;directory element if C=true, or check for = if not ;drec < chksiz? LD HL,(DREC) LD DE,(CHKSIZ) OR A SBC HL,DE RET NC PUSH BC CALL COMPINC HL DJNZ COMPUTECS0 RET HLROTL: ;rotate the mask in HL by amount in C INC C HLROTL0: DEC C RET Z ADD HL,HL JR HLROTL0 SET$CDISK: ;set a "1" value in curdsk position of BC PUSH BC LD A,(CURDSK) LD C,A LD HL,1 CALL HLROTL POP BC LD A,C OR L LD L,A LD A,B OR H LD H,A RET NOWRITE: ;return true if dir checksum difference occurred LD HL,(RODSK) LD A,(CURDSK) LD C,A CALL HLROTR LD A,L AND 1 RET SET$RO: ;set current disk to read only LD HL,RODSK UTE$CS LD DE,(CHECKA) LD HL,(DREC) ADD HL,DE POP BC INC C ;0ffh produces zero flag JR Z,INITIAL$CS CP (HL) RET Z CALL COMPCDR RET NC CALL SET$RO RET INITIAL$CS: LD (HL),A RET WRDIR: ;write the current directory entry, set checksum CALL NEWCHECKSUM ;initialize entry CALL SETDIR ;directory dma LD C,1 ;indicates a write directory operation CALL WRBUFF ;write the buffer JR SETDATA ;to data dma address RD$DIR: ;read a directory entry into the directory buffer CALL LD C,(HL) INC HL LD B,(HL) CALL SET$CDISK LD (RODSK),HL ;high water mark in directory goes to max LD HL,(DIRMAX) INC HL EX DE,HL LD HL,(CDRMAXA) LD (HL),E INC HL LD (HL),D RET CHECK$RODIR: ;check current directory element for read/only status CALL GETDPTRA ;address of element CHECK$ROFILE: ;check current buff(dptr) or fcb(0) for r/o status LD DE,ROFILE ADD HL,DE LD A,(HL) RLA RET NC LD HL,ROFERR JP GOERR CHECK$WRITE: ;check for write protected disk SETDIR CALL RDBUFF SETDATA: ;set data dma address LD HL,DMAAD JR SETDMA SETDIR: ;set directory dma address LD HL,BUFFA SETDMA: LD C,(HL) INC HL LD B,(HL) JP SETDMAF DIR$TO$USER: ;copy the directory entry to the user buffer ;after call to search or searchn by user code LD HL,(BUFFA) ;source is directory buffer LD DE,(DMAAD) ;destination is user dma address LD BC,RECSIZ LDIR RET END$OF$DIR: ;return zero flag if at end of directory, non zero ;if not at end (end of diCALL NOWRITE RET Z LD BC,(CURDSK) LD HL,1 CALL HLROTL LD A,H CPL LD D,A LD A,L CPL LD E,A LD HL,(RODSK) LD A,D AND H LD H,A LD A,E AND L LD L,A LD (RODSK),HL LD HL,(DLOG) LD A,D AND H LD H,A LD A,E AND L LD L,A LD (DLOG),HL CALL SETDATA JP SELECT GETDPTRA: ;compute the address of a directory element at ;positon dptr in the buffer LD HL,(BUFFA) LD A,(DPTR) ADDH: ADD A,L LD L,A RET NC INC H RET GETMODNUM: ;compute the address of r if dcnt = 0ffffh) LD HL,DCNT LD A,(HL) INC HL CP (HL) RET NZ INC A RET SET$END$DIR: ;set dcnt to the end of the directory LD HL,ENDDIR LD (DCNT),HL RET READ$DIR: ;read next directory entry, with C=true if initializing LD HL,(DIRMAX) EX DE,HL LD HL,(DCNT) INC HL LD (DCNT),HL EX DE,HL OR A SBC HL,DE JR C,SET$END$DIR LD A,(DCNT) AND DSKMSK LD B,FCBSHF READ$DIR1: ADD A,A DEC B JR NZ,READ$DIR1 LD (DPTR),A OR A RET NZ PUSH BC CALL SEEKDIR CAthe module number ;bring module number to accumulator ;(high order bit is fwf (file write flag) LD HL,(INFO) LD DE,MODNUM ADD HL,DE LD A,(HL) ;A=fcb(modnum) RET CLRMODNUM: ;clear the module number field for user open/make CALL GETMODNUM LD (HL),0 RET SETFWF: CALL GETMODNUM ;set fwf (file write flag) to "1" OR FWFMSK LD (HL),A ;also returns non zero in accumulator RET COMPCDR: ;return cy if cdrmax > dcnt LD HL,(DCNT) EX DE,HL LD HL,(CDRMAXA) LD A,E SUB (HL)Track-Info C NCCCCCCCC CLL RD$DIR POP BC JP CHECKSUM GETALLOCBIT: ;given allocation vector position BC, return with byte ;containing BC shifted so that the least significant ;bit is in the low order accumulator position. HL is ;the address of the byte for possible replacement in ;memory upon return, and D contains the number of shifts ;required to place the returned value back into position LD A,C AND 7 INC A LD E,A LD D,A LD A,C RRCA RRCA RRCA AND 1FH LD C,A LD A,B ADD A,A ADD A,A on vector initialized, home disk CALL HOME ;cdrmax = 3 (scans at least one directory record) LD HL,(CDRMAXA) LD (HL),3 INC HL LD (HL),0 CALL SET$END$DIR ;dcnt = enddir ;read directory entries and check for allocated storage INITIAL2: LD C,TRUE CALL READ$DIR CALL END$OF$DIR RET Z ;return if end of directory ;not end of directory, valid entry? CALL GETDPTRA ;HL = buffa + dptr LD A,EMPTY CP (HL) JR Z,INITIAL2 ;go get another item ;not empty, user code the same? LD ADD A,A ADD A,A ADD A,A OR C LD C,A LD A,B RRCA RRCA RRCA AND 1FH LD B,A LD HL,(ALLOCA) ADD HL,BC LD A,(HL) ROTL: RLCA DEC E JR NZ,ROTL RET SETALLOCBIT: ;BC is the bit position of ALLOC to set or reset. The ;value of the bit is in register E. PUSH DE CALL GETALLOCBIT AND 0FEH POP BC OR C ROTR: ;byte value from ALLOC is in register A, with shift count ;in register C (to place bit back into position), and ;target ALLOC position in registers HL, rotate A,(USRCODE) CP (HL) JR NZ,PDOLLAR ;same user code, check for '$' submit INC HL LD A,(HL) ;first character SUB '$' JR NZ,PDOLLAR ;dollar file found, mark in lret DEC A LD (LRET),A ;lret = 255 PDOLLAR: ;now scan the disk map for allocated blocks LD C,1 ;set to allocated CALL SCANDM CALL SETCDR ;set cdrmax to dcnt JR INITIAL2 ;for another entry COPY$DIRLOC: ;copy directory location to lret following ;delete, rename, ... ops LD A,(DIRLOC) JP STA$RET COMPEXT: ;comp and re RRCA DEC D JR NZ,ROTR LD (HL),A RET SCANDM: ;scan the disk map addressed by dptr for non-zero ;entries, the allocation vector entry corresponding ;to a non-zero entry is set to the value of C (0,1) CALL GETDPTRA ;HL = buffa + dptr ;HL addresses the beginning of the directory entry LD DE,DSKMAP ADD HL,DE ;hl now addresses the disk map PUSH BC ;save the 0/1 bit to set LD C,FCBLEN-DSKMAP+1 ;size of single byte disk map + 1 SCANDM0: ;loop once for each disk map entry Pare extent# in A with that in C, return nonzero ;if they do not match PUSH BC PUSH AF LD A,(EXTMSK) CPL LD B,A LD A,C AND B LD C,A POP AF AND B SUB C AND MAXEXT POP BC RET SEARCH: LD A,(VE9C9) RRA JR NC,SEARCH0 XOR A LD (VE9C9),A PUSH BC CALL SEARCH0 POP BC LD A,(ARET) INC A RET NZ INC A LD (VE9C9),A SEARCH0: ;search for directory element of length C at info LD A,0FFH LD (DIRLOC),A ;changed if actually found LD HL,SEARCHL LD (HL),C ;searcOP DE DEC C RET Z PUSH DE LD A,(SINGLE) OR A JR Z,SCANDM1 PUSH BC PUSH HL LD C,(HL) LD B,0 JR SCANDM2 SCANDM1: DEC C PUSH BC LD C,(HL) INC HL LD B,(HL) PUSH HL SCANDM2: LD A,C OR B JR Z,SCANDM3 LD HL,(MAXALL) OR A SBC HL,BC CALL NC,SETALLOCBIT SCANDM3: POP HL INC HL POP BC JR SCANDM0 INITIALIZE: ;initialize the current disk ;lret = false ;set to true if $ file exists ;compute the length of the allocation vector - 2 LD HL,(MAXALL) LD C,3 ;pehl = C LD HL,(INFO) LD (SEARCHA),HL ;searcha = info CALL SET$END$DIR ;dcnt = enddir CALL HOME ;to start at the beginning ;(drop through to searchn) SEARCHN: ;search for the next directory element, assuming ;a previous call on search which sets searcha and ;searchl LD C,FALSE CALL READ$DIR ;read next dir element CALL END$OF$DIR JR Z,SEARCH$FIN ;skip to end if so ;not end of directory, scan for match LD DE,(SEARCHA) ;DE=beginning of user fcb LD A,(DE) ;first character CP EMPTYrform maxall/8 ;number of bytes in alloc vector is (maxall/8)+1 CALL HLROTR INC HL ;HL = maxall/8+1 LD B,H LD C,L ;count down BC til zero LD HL,(ALLOCA) ;base of allocation vector ;fill the allocation vector with zeros INITIAL0: LD (HL),0 ;alloc(i)=0 INC HL DEC BC ;count length down LD A,B OR C JR NZ,INITIAL0 ;set the reserved space for the directory LD HL,(DIRBLK) EX DE,HL LD HL,(ALLOCA) ;HL=.alloc() LD (HL),E INC HL LD (HL),D ;sets reserved directory blks ;allocatiTrack-Info C NCCCCCCCC C ;keep scanning if empty JR Z,SEARCHNEXT ;not empty, may be end of logical directory PUSH DE ;save search address CALL COMPCDR ;past logical end? POP DE ;recall address JR NC,SEARCH$FIN ;artificial stop SEARCHNEXT: CALL GETDPTRA ;HL = buffa+dptr LD A,(SEARCHL) LD C,A ;length of search to c LD B,0 ;b counts up, c counts down LD A,(VE9C9) RRA JR NC,SEARCHLOOP LD A,(HL) CP 10H JR NC,SEARCHLOOP LD A,(DE) CP 10H JR C,SEARCHOK SEARCHLOOP: LD A,C OR A JR Z,ENDSEARCH POP DE RIGHTTST: LD HL,(MAXALL) LD A,E SUB L LD A,D SBC A,H JR NC,RETBLOCK0 INC DE PUSH BC PUSH DE LD B,D LD C,E CALL GETALLOCBIT RRA JR NC,RETBLOCK POP DE POP BC JR LEFTTST RETBLOCK: RLA INC A CALL ROTR POP HL POP DE RET RETBLOCK0: LD A,C OR B JR NZ,LEFTTST LD HL,0 RET COPY$FCB: ;copy the entire file control block LD C,0 LD E,FCBLEN COPY$DIR: ;copy fcb information starting at C for E bytes ;into the currently addressed directory entry LD A,(DE) CP '?' JR Z,SEARCHOK ;? matches all ;scan next character if not ubytes LD A,B CP UBYTES JR Z,SEARCHOK ;not the ubytes field, extent field? CP EXTNUM ;may be extent field LD A,(DE) ;fcb character JR Z,SEARCHEXT ;skip to search extent SUB (HL) AND 7FH ;mask-out flags/extent modulus JR NZ,SEARCHN ;skip if not matched JR SEARCHOK ;matched character SEARCHEXT: ;A has fcb character ;attempt an extent # match PUSH BC ;save counters LD C,(HL) ;directory character to PUSH DE LD B,0 LD HL,(INFO) ADD HL,BC EX DE,HL CALL GETDPTRA POP BC LD B,0 EX DE,HL LDIR SEEK$COPY: ;enter from close to seek and copy current element CALL SEEKDIR JP WRDIR RENAME: ;rename the file described by the first half of ;the currently addressed file control block. the ;new name is contained in the last half of the ;currently addressed file conrol block. the file ;name and type are changed, but the reel number ;is ignored. the user number is identical CALc CALL COMPEXT ;compare user/dir char POP BC ;recall counters JR NZ,SEARCHN ;skip if no match SEARCHOK: ;current character matches INC DE INC HL INC B DEC C JR SEARCHLOOP ENDSEARCH: ;entire name matches, return dir position LD A,(DCNT) AND DSKMSK LD (LRET),A ;lret = low(dcnt) and 11b LD HL,DIRLOC LD A,(HL) RLA RET NC ;dirloc=0ffh? ;yes, change it to 0 to mark as found XOR A LD (HL),A ;dirloc=0 RET SEARCH$FIN: ;end of directory, or empty name CALL SET$END$L CHECK$WRITE LD C,EXTNUM CALL SEARCH LD HL,(INFO) LD A,(HL) LD DE,DSKMAP ADD HL,DE LD (HL),A RENAME0: CALL END$OF$DIR RET Z CALL CHECK$RODIR LD C,DSKMAP LD E,EXTNUM CALL COPY$DIR CALL SEARCHN JR RENAME0 INDICATORS: ;set file indicators for current fcb LD C,EXTNUM CALL SEARCH INDIC0: CALL END$OF$DIR RET Z LD C,0 LD E,EXTNUM CALL COPY$DIR CALL SEARCHN JR INDIC0 OPEN: ;search for the directory entry, copy to fcb LD C,NAMLEN CALL SEARCH CALL END$OF$DIR ;may be artifical end LD A,0FFH JP STA$RET DELETE: ;delete the currently addressed file CALL CHECK$WRITE ;write protected? LD C,EXTNUM CALL SEARCH ;search through file type DELETE0: ;loop while directory matches CALL END$OF$DIR RET Z ;stop if end ;set each non zero disk map entry to 0 ;in the allocation vector ;may be r/o file CALL CHECK$RODIR ;ro disk error if found CALL GETDPTRA ;HL=.buff(dptr) LD (HL),EMPTY LD C,0 CALL SCANDM ;alloc elts set to 0 CALL WRDIR ;wrDIR RET Z OPEN$COPY: CALL GETEXTA LD A,(HL) PUSH AF PUSH HL CALL GETDPTRA LD DE,(INFO) LD BC,NXTREC PUSH HL LDIR CALL SETFWF POP DE LD HL,EXTNUM ADD HL,DE LD C,(HL) LD HL,RECCNT ADD HL,DE LD B,(HL) POP HL POP AF LD (HL),A LD A,C CP (HL) LD A,B JR Z,OPEN$RCNT LD A,0 JR C,OPEN$RCNT LD A,80H OPEN$RCNT: LD HL,(INFO) LD DE,RECCNT ADD HL,DE LD (HL),A RET MERGEZERO: ;HL = .fcb1(i), DE = .fcb2(i), ;if fcb1(i) = 0 then fcb1(i) := fcb2(i) LDite the directory CALL SEARCHN ;to next element JR DELETE0 ;for another record GET$BLOCK: ;given allocation vector position BC, find the zero bit ;closest to this position by searching left and right. ;if found, set the bit to one and return the bit position ;in hl. if not found (i.e., we pass 0 on the left, or ;maxall on the right), return 0000 in hl LD D,B LD E,C LEFTTST: LD A,C OR B JR Z,RIGHTTST DEC BC PUSH DE PUSH BC CALL GETALLOCBIT RRA JR NC,RETBLOCK POP BC Track-Info D NDDDDDDDD D A,(HL) INC HL OR (HL) DEC HL RET NZ LD A,(DE) LD (HL),A INC DE INC HL LD A,(DE) LD (HL),A DEC DE DEC HL RET CLOSE: ;locate the directory element and re-write it XOR A LD (LRET),A LD (DCNT),A LD (DCNT+1),A CALL NOWRITE RET NZ CALL GETMODNUM AND FWFMSK RET NZ LD C,NAMLEN CALL SEARCH CALL END$OF$DIR RET Z LD BC,DSKMAP CALL GETDPTRA ADD HL,BC EX DE,HL LD HL,(INFO) ADD HL,BC LD C,FCBLEN-DSKMAP MERGE0: LD A,(SINGLE) OR A JR Z,MERGED LDD) LD HL,RCOUNT CP (HL) JR C,RECORDOK CP 80H JR NZ,DISKEOF CALL OPEN$REEL XOR A LD (VRECORD),A LD A,(LRET) OR A JR NZ,DISKEOF RECORDOK: CALL INDEX ;error 2 if reading unwritten data ;(returns 1 to be compatible with 1.4) CALL ALLOCATED JR Z,DISKEOF CALL ATRAN CALL SEEK CALL RDBUFF JP SETFCB DISKEOF: JP SETLRET1 SEQDISKWRITE: ;sequential disk write LD A,1 LD (SEQIO),A DISKWRITE: LD A,FALSE LD (RMF),A CALL CHECK$WRITE LD HL,(INFO) CALL CHECK$ROFILE A,(HL) OR A LD A,(DE) JR NZ,FCBNZERO LD (HL),A FCBNZERO: OR A JR NZ,BUFFNZERO LD A,(HL) LD (DE),A BUFFNZERO: CP (HL) JR NZ,MERGERR JR DMSET MERGED: CALL MERGEZERO EX DE,HL CALL MERGEZERO EX DE,HL LD A,(DE) CP (HL) JR NZ,MERGERR INC DE INC HL LD A,(DE) CP (HL) JR NZ,MERGERR DEC C DMSET: INC DE INC HL DEC C JR NZ,MERGE0 LD BC,-(FCBLEN-EXTNUM) ADD HL,BC EX DE,HL ADD HL,BC LD A,(DE) CP (HL) JR C,ENDMERGE LD (HL),A LD BC,RECCNT-EXTNUM ADD CALL GETFCB LD A,(VRECORD) CP LSTREC+1 JP NC,SETLRET1 CALL INDEX CALL ALLOCATED LD C,0 ;marked as normal write operation for wrbuff JR NZ,DISKWR1 CALL DM$POSITION LD (DMINX),A LD BC,0 OR A JR Z,NOPBLOCK LD C,A DEC BC CALL GETDM LD B,H LD C,L NOPBLOCK: CALL GET$BLOCK LD A,L OR H JR NZ,BLOCKOK LD A,2 JP STA$RET BLOCKOK: COND BIGDSK CALL STAR16 ELSE LD (ARECORD),HL ENDC ;BIGDSK EX DE,HL LD HL,(INFO) LD BC,DSKMAP ADD HL,BC LD A,(SINGLE) OR A HL,BC EX DE,HL ADD HL,BC LD A,(HL) LD (DE),A ENDMERGE: LD A,TRUE LD (FCB$COPIED),A JP SEEK$COPY MERGERR: LD HL,LRET DEC (HL) RET MAKE: ;create a new file by creating a directory entry ;then opening the file CALL CHECK$WRITE LD HL,(INFO) PUSH HL LD HL,EFCB LD (INFO),HL LD C,1 CALL SEARCH CALL END$OF$DIR POP HL LD (INFO),HL RET Z EX DE,HL LD HL,NAMLEN ADD HL,DE LD C,FCBLEN-NAMLEN XOR A MAKE0: LD (HL),A INC HL DEC C JR NZ,MAKE0 LD HL,UBYTES LD A,(DMINX) JR Z,ALLOCWD CALL ADDH LD (HL),E JR DISKWRU ALLOCWD: LD C,A LD B,0 ADD HL,BC ADD HL,BC LD (HL),E INC HL LD (HL),D DISKWRU: LD C,2 ;marked as unallocated write DISKWR1: ;continue the write operation of no allocation error ;C = 0 if normal write, 2 if to prev unalloc block LD A,(LRET) OR A RET NZ PUSH BC CALL ATRAN LD A,(SEQIO) DEC A DEC A JR NZ,DISKWR11 POP BC PUSH BC LD A,C DEC A DEC A JR NZ,DISKWR11 PUSH HL LD HL,(BUFFA) LD D,A ADD HL,DE LD (HL),A CALL SETCDR CALL COPY$FCB JP SETFWF OPEN$REEL: ;close the current extent, and open the next one ;if possible. RMF is true if in read mode XOR A LD (FCB$COPIED),A CALL CLOSE CALL END$OF$DIR RET Z LD HL,(INFO) LD BC,EXTNUM ADD HL,BC LD A,(HL) INC A AND MAXEXT LD (HL),A JR Z,OPEN$MOD LD B,A LD A,(EXTMSK) AND B LD HL,FCB$COPIED AND (HL) JR Z,OPEN$REEL0 JR OPEN$REEL1 OPEN$MOD: ;extent number overflow, go to next module LD BC,MODNFILL0: LD (HL),A INC HL INC D JP P,FILL0 CALL SETDIR LD HL,(ARECORD1) LD C,2 FILL1: LD (ARECORD),HL PUSH BC CALL SEEK POP BC CALL WRBUFF LD HL,(ARECORD) LD C,0 LD A,(BLKMSK) LD B,A AND L CP B INC HL JR NZ,FILL1 POP HL LD (ARECORD),HL CALL SETDATA DISKWR11: CALL SEEK POP BC PUSH BC CALL WRBUFF POP BC LD A,(VRECORD) LD HL,RCOUNT CP (HL) JR C,DISKWR2 LD (HL),A INC (HL) LD C,2 DISKWR2: COND BIGDSK ELSE LD HL,0D400H ;??? ENDC ;BIGDSK PUSUM-EXTNUM ADD HL,BC INC (HL) LD A,(HL) AND MAXMOD JR Z,OPEN$R$ERR OPEN$REEL0: LD C,NAMLEN CALL SEARCH CALL END$OF$DIR JR NZ,OPEN$REEL1 LD A,(RMF) INC A JR Z,OPEN$R$ERR CALL MAKE CALL END$OF$DIR JR Z,OPEN$R$ERR JR OPEN$REEL2 OPEN$REEL1: CALL OPEN$COPY OPEN$REEL2: CALL GETFCB XOR A JP STA$RET OPEN$R$ERR: CALL SETLRET1 JP SETFWF SEQDISKREAD: ;sequential disk read operation LD A,1 LD (SEQIO),A DISKREAD: LD A,TRUE LD (RMF),A CALL GETFCB LD A,(VRECORTrack-Info D NDDDDDDDD DH AF CALL GETMODNUM AND 7FH ;not fwfmsk LD (HL),A POP AF CP LSTREC JR NZ,DISKWR3 LD A,(SEQIO) CP 1 JR NZ,DISKWR3 CALL SETFCB CALL OPEN$REEL LD HL,LRET LD A,(HL) OR A JR NZ,NOSPACE DEC A LD (VRECORD),A NOSPACE: LD (HL),0 DISKWR3: JP SETFCB RSEEK: ;random access seek operation, C=0ffh if read mode ;fcb is assumed to address an active file control block ;(modnum has been set to 1100$0000b if previous bad seek) XOR A LD (SEQIO),A RSEEK1: PUSH BC LD DE,(INFO) E SBC A,(HL) JR C,GETNEXTSIZE LD (HL),E DEC HL LD (HL),B DEC HL LD (HL),C GETNEXTSIZE: CALL SEARCHN JR GETSIZE SETSIZE: POP HL RET SETRANDOM: ;set random record from the current file control block LD HL,(INFO) LD DE,NXTREC CALL COMPUTE$RR LD HL,RANREC ADD HL,DE LD (HL),C INC HL LD (HL),B INC HL LD (HL),A RET SELECT: ;select disk info for subsequent input or output ops LD HL,(DLOG) LD A,(CURDSK) LD C,A CALL HLROTR PUSH HL EX DE,HL CALL SELEC LD HL,RANREC ADD HL,DE LD A,(HL) AND 7FH PUSH AF LD A,(HL) RLA INC HL LD A,(HL) RLA AND 1FH LD C,A LD A,(HL) RRA RRA RRA RRA AND 0FH LD B,A POP AF INC HL LD L,(HL) INC L DEC L LD L,6 ;produce error 6, seek past physical eod JR NZ,SEEKERR LD HL,NXTREC ADD HL,DE LD (HL),A LD HL,EXTNUM ADD HL,DE LD A,C SUB (HL) JR NZ,RANCLOSE LD HL,MODNUM ADD HL,DE LD A,B SUB (HL) AND 7FH JR Z,SEEKOK RANCLOSE: PUSH BC PUSH DE CALL CLOSE POPTDISK POP HL CALL Z,SEL$ERROR LD A,L RRA RET C LD BC,(DLOG) CALL SET$CDISK LD (DLOG),HL JP INITIALIZE CURSELECT: LD A,(LINFO) LD HL,CURDSK CP (HL) RET Z COND MLTBOT CP 0F0H JR C,CURSEL1 CPL LD (BOTDSK),A RET CURSEL1: ENDC ;MLTBOT LD (HL),A JR SELECT RESELECT: ;check current fcb to see if reselection necessary LD A,TRUE LD (RESEL),A LD HL,(INFO) LD A,(HL) AND 1FH DEC A LD (LINFO),A CP 1EH JR NC,NOSELECT LD A,(CURDSK) LD (OLDDSK),A LD A, DE POP BC LD L,3 ;cannot close error #3 LD A,(LRET) INC A JR Z,BADSEEK LD HL,EXTNUM ADD HL,DE LD (HL),C LD HL,MODNUM ADD HL,DE LD (HL),B CALL OPEN LD A,(LRET) INC A JR NZ,SEEKOK POP BC PUSH BC LD L,4 ;seek to unwritten extent #4 INC C JR Z,BADSEEK CALL MAKE LD L,5 ;cannot create new extent #5 LD A,(LRET) INC A JR Z,BADSEEK SEEKOK: POP BC XOR A JP STA$RET BADSEEK: PUSH HL CALL GETMODNUM LD (HL),0C0H POP HL SEEKERR: POP BC LD A,L LD (LRET),(HL) LD (FCBDSK),A AND 0E0H LD (HL),A CALL CURSELECT NOSELECT: LD A,(USRCODE) LD HL,(INFO) OR (HL) LD (HL),A RET FUNC12: ;return version number LD A,DVERS JP STA$RET FUNC13: ;reset disk system and initialize to boot disk LD HL,0 LD (RODSK),HL LD (DLOG),HL LD HL,TBUFF LD (DMAAD),HL CALL SETDATA COND MLTBOT ;in multiboot option init bootdisk instead of A LD A,(BOTDSK) LD (CURDSK),A OR A PUSH AF CALL SELECT POP AF RET NZ ;return if bootdisk is other tA JP SETFWF RANDISKREAD: ;random disk read operation LD C,TRUE CALL RSEEK CALL Z,DISKREAD RET RANDISKWRITE: ;random disk write operation LD C,FALSE CALL RSEEK CALL Z,DISKWRITE RET COMPUTE$RR: ;compute random record position for getfilesize/setrandom EX DE,HL ADD HL,DE LD C,(HL) LD B,0 LD HL,EXTNUM ADD HL,DE LD A,(HL) RRCA AND 80H ADD A,C LD C,A LD A,0 ADC A,B LD B,A LD A,(HL) RRCA AND 0FH ADD A,B LD B,A LD HL,MODNUM ADD HL,DE LD A,han A ELSE CALL SELECT XOR A LD (CURDSK),A ENDC ;MLTBOT LD HL,DLOG SET 0,(HL) JR SELECT ;select disk info FUNC14 EQU CURSELECT FUNC15: ;open file LD A,1 LD (VE9C9),A CALL CLRMODNUM CALL RESELECT JP OPEN FUNC16: ;close file CALL RESELECT JP CLOSE FUNC17: ;search for first occurrence of a file LD C,0 EX DE,HL LD A,(HL) CP '?' JR Z,QSELECT CALL GETEXTA LD A,(HL) CP '?' CALL NZ,CLRMODNUM CALL RESELECT LD C,NAMLEN QSELECT: CALL SEARCH JP DI(HL) ADD A,A ADD A,A ADD A,A ADD A,A PUSH AF ADD A,B LD B,A PUSH AF POP HL LD A,L POP HL OR L AND 1 RET GETFILESIZE: ;compute logical file size for current fcb LD C,EXTNUM CALL SEARCH LD HL,(INFO) LD DE,RANREC ADD HL,DE PUSH HL LD (HL),D INC HL LD (HL),D INC HL LD (HL),D GETSIZE: CALL END$OF$DIR JR Z,SETSIZE CALL GETDPTRA LD DE,RECCNT CALL COMPUTE$RR POP HL PUSH HL LD E,A LD A,C SUB (HL) INC HL LD A,B SBC A,(HL) INC HL LD A,Track-Info E NEEEEEEEE ER$TO$USER FUNC18: ;search for next occurrence of a file name LD HL,(SEARCHA) LD (INFO),HL CALL RESELECT CALL SEARCHN JP DIR$TO$USER FUNC19: ;delete a file CALL RESELECT CALL DELETE JP COPY$DIRLOC FUNC20: ;read a file LD A,1 LD (VE9C9),A CALL RESELECT JP SEQDISKREAD FUNC21: ;write a file CALL RESELECT JP SEQDISKWRITE FUNC22: ;make a file CALL CLRMODNUM CALL RESELECT JP MAKE FUNC23: ;rename a file CALL RESELECT CALL RENAME JP COPY$DIRLOC LD A,(DMINX) JR Z,ALLOCWD CALL ADDH LD (HL),E JR DISKWRU ALLOCWD: LD C,A LD B,0 ADD HL,BC ADD HL,BC LD (HL),E INC HL LD (HL),D DISKWRU: LD C,2 ;marked as unallocated write DISKWR1: ;continue the write operation of no allocation error ;C = 0 if normal write, 2 if to prev unalloc block LD A,(LRET) OR A RET NZ PUSH BC CALL ATRAN LD A,(SEQIO) DEC A DEC A JR NZ,DISKWR11 POP BC PUSH BC LD A,C DEC A DEC A JR NZ,DISKWR11 PUSH HL LD HL,(BUFFA) LD D,A FUNC24: ;return the login vector LD HL,(DLOG) JR STHL$RET FUNC25: ;return selected disk number LD A,(CURDSK) JP STA$RET FUNC26: ;set the subsequent dma address to info LD (DMAAD),DE JP SETDATA FUNC27: ;return the login vector address LD HL,(ALLOCA) JR STHL$RET ;write protect current disk FUNC28 EQU SET$RO FUNC29: ;return r/o bit vector LD HL,(RODSK) JR STHL$RET FUNC30: ;set file indicators CALL RESELECT CALL INDICATORS JP COPY$DIRLOC FUNC31: ;rܲy2y"zs"{2a!"1W2k2i2!y)K!P܇_^#V*f݉ޥުޯ޳ݵ)2=CLUZ`glqzX޻1ͩKy*z͜͜:A2͜_Iͦ!~6 Of  :   2>:|  :y!~4 5~y 5 6y0 ^!@Oy  !:~ ̀  #!͜:~!} ! ! ! $Of:~2}*N# } } x(:~2|M x(~+v ͜ݯ2}eturn address of disk parameter block LD HL,(DPBADDR) STHL$RET: LD (ARET),HL RET FUNC32: ;set user code LD A,(LINFO) CP 0FFH JR NZ,SETUSRCODE LD A,(USRCODE) JP STA$RET SETUSRCODE: AND 1FH LD (USRCODE),A RET FUNC33: ;random disk read operation LD A,1 LD (VE9C9),A CALL RESELECT JP RANDISKREAD FUNC34: ;random disk write operation CALL RESELECT JP RANDISKWRITE FUNC35: ;return file size (0-65536) LD A,1 LD (VE9C9),A CALL RESELECT JP GETFILESIZE  !>w :}!~05x ͅ 3ͅx( #NV:|!~2|x!|5 #wOV~x p !/*y<(<  :!qMDæ2>! ^#V:O|^#V#S[">##"@##"B##D*FL*Q|!h6(6>*@w#w*Bw#w'*! *uF"p"w!pN#F*B^#V*@~#foyx0 *LR+*L8 yx8#*YDM*@s#r*Bs#rRDM[[0MD!!NF:n?G>O:m (* :h(n& ^#V͢Oͽ"p*p}:N*p)= "r:OO:n页o";set random record FUNC36 EQU SETRANDOM FUNC37: LD HL,(INFO) LD A,L CPL LD E,A LD A,H CPL LD HL,(DLOG) AND H LD D,A LD A,L AND E LD E,A LD HL,(RODSK) EX DE,HL LD (DLOG),HL LD A,L AND E LD L,A LD A,H AND D LD H,A LD (RODSK),HL RET GOBACK: ;arrive here at end of processing to return to user LD A,(RESEL) OR A JR Z,RETMON LD HL,(INFO) LD (HL),0 LD A,(FCBDSK) OR A JR Z,RETMON LD (HL),A LD A,(OLDDSK) LD (LINFO),A CALL CURSELECT ; retup* *! ~2n~2l:P2m :` O:nw:lw <*D鯆# ):O!Zyoxg*8:OF}!8N#F`"8*S#*>s#r ~!sK!Z|/W}/_*8zg{o"8*:zg{o":Nk*D:to$*~6w*u*>{#zr+s*w[WRO[H*w ( ́wS$S!<!DN#F$*D[<!u~#6#6ryi>(: #~$ =2 :_ø:P/GyO:02͔:<<2>2_!cq*"dryi(b[d(0R:cO:0 ~08"y($?(x ( ( Nk # :u2!_~Яwr>øͩ |i͙6;ͩPYy( ͥ0*Q{z0BKͥ08ܲy2y"zs"{2a!"1W2k2i2!y)K!P܇_^#V*f݉ޥުޯ޳ݵ)2=CLUZ`glqzX޻1ͩKy*z͜͜:A2͜_Iͦ!~6 Of  :   2>:|  :y!~4 5~y 5 6y0 ^!@Oy  !:~ ̀  #!͜:~!} ! ! ! $Of:~2}*N# } } x(:~2|M x(~+v ͜ݯ2}>*w~#+w#w+ɯ22u2vs|i * :h(~ w ~ 5  '# ! #  8 w ~>2]Ì!5ͩ*!7"|i"!w# ! w w2]i* ~<w( G:P!]( $ 4~($|i :^<(͓i( øͼ>2`>2^:n!l8 !2n: ( </ü>2`>2^ͩ*͜:nҼ C͢2b(O ͽDM>} >ø"p* :h:b(sO s#r::`== :y== 3*DWw#S*r"p<$ !>w :}!~05x ͅ 3ͅx( #NV:|!~2|x!|5 #wOV~x p !/*y<(<  :!qMDæ2>! ^#V:O|^#V#S[">##"@##"B##D*FL*Q|!h6(6>*@w#w*Bw#w'*! *uF"p"w!pN#F*B^#V*@~#foyx0 *LR+*L8 yx8#*YDM*@s#r*Bs#rRDM[[0MD!!NF:n?G>O:m (* :h(n& ^#V͢Oͽ"p*p}:N*p)= "r:OO:n页o"*p:OG# "pN<$:n!l8w4!w :` /!~ =2n6/2`[!!~~#~O~G#n,-. W! w! y !x(4.:<(*! q!p:< . (͓.:<(ø6}2W'WeN! ~态O>G~G!~G} |*!r#r#ri( _y#x#{8s+p+qͩ* !!q#p#w*::OF}K:`": :a!w>2i*~=2a0:2j~2kw͎:*w>"ø!"8":!"2͙͙p* *! ~2n~2l:P2m :` O:nw:lw <*D鯆# ):O!Zyoxg*8:OF}!8N#F`"8*S#*>s#r ~!sK!Z|/W}/_*8zg{o"8*:zg{o":Nk*D:to$*~6w*u*>{#zr+s*w[WRO[H*w ( ́wS$S!<!DN#F$*D[<!u~#2͙"͙`͙Ó͙͒e*:#:øS2͙͙>2͙*}/_|/*:W}_*8":}o|g"8:i(*6:k( w:j2a͎{*}D͙>2`[eBDOS error on : Read/only file: Abort/Ignore $B#*QF#DM*J6# x *U*Js#r*>6#6ryi>(: #~$ =2 :_ø:P/GyO:02͔:<<2>2_!cq*"dryi(b[d(0R:cO:0 ~08"y($?(x ( ( Nk # :u2!_~Яwr>øͩ |i͙6;ͩPYy( ͥ0*Q{z0BKͥ08A,(CURDSK) LD C,A CALL HLROTR PUSH HL EX DE,HL CALL SELECTDISK POP HL CALL Z,SEL$ERROR LD A,L RRA RET C LD BC,(DLOG) CALL SET$CDISK LD (DLOG),HL JP INITIALIZE CURSELECT: LD A,(LINFO) LD HL,CURDSK CP (HL) RET Z COND MLTBOT CP 0F0H JR C,CURSEL1 CPL LD (BOTDSK),A RET CURSEL1: ENDC ;MLTBOT LD (HL),A JR SELECT RESELECT: ;check current fcb to see if reselection necessary LD A,TRUE LD (RESEL),A LD HL,(INFO) LD A,(HL) AND 1FH DEC A LD (LINFO),Track-Info F NFFFFFFFF F>*w~#+w#w+ɯ22u2vs|i * :h(~ w ~ 5  '# ! #  8 w ~>2]Ì!5ͩ*!7"|i"!w# ! w w2]i* ~<w( G:P!]( $ 4~($|i :^<(͓i( øͼ>2`>2^:n!l8 !2n: ( </ü>2`>2^ͩ*͜:nҼ C͢2b(O ͽDM>} >ø"p* :h:b(sO s#r::`== :y== 3*DWw#S*r"p<$BIOS EQU 0EA00H ;BIOS location address ON EQU 0FFFFh OFF EQU 00000h BIGDSK EQU ON ;ON for >8 MB disk support MLTBOT EQU OFF ;patch for bootdisks other than A BDOS1:: .PHASE BDOS ; low memory REBOOT EQU 0000H ;reboot system IOLOC EQU 0003H ;i/o byte location BDOSA EQU 0006H ;address field of jmp BDOS ; bios access constants BOOTF EQU BIOS+3*0 ;cold boot function WBOOTF EQU BIOS+3*1 ;warm boot function CONSTF EQU BIOS+3*2 ;console status function CONINF EQU BIOS+3*3 ;con*p:OG# "pN<$:n!l8w4!w :` /!~ =2n6/2`[!!~~#~O~G#n,-. W! w! y !x(4.:<(*! q!p:< . (͓.:<(ø6}2W'WeN! ~态O>G~G!~G} |*!r#r#ri( _y#x#{8s+p+qͩ* !!q#p#w*::OF}K:`": :a!w>2i*~=2a0:2j~2kw͎:*w>"ø!"8":!"2͙͙sole input function CONOUTF EQU BIOS+3*4 ;console output function LISTF EQU BIOS+3*5 ;list output function PUNCHF EQU BIOS+3*6 ;punch output function READERF EQU BIOS+3*7 ;reader input function HOMEF EQU BIOS+3*8 ;disk home function SELDSKF EQU BIOS+3*9 ;select disk function SETTRKF EQU BIOS+3*10 ;set track function SETSECF EQU BIOS+3*11 ;set sector function SETDMAF EQU BIOS+3*12 ;set dma function READF EQU BIOS+3*13 ;read disk function WRITEF EQU BIOS+3*14 ;write disk function LISTSTF EQU BIOS+~?(~?͙|\*d"͙ͩ\͙e>2͙"͙`͙Ó͙͒e*:#:øS2͙͙>2͙*}/_|/*:W}_*8":}o|g"8:i(*6:k( w:j2a͎{*}D͙>2`[eBDOS error on : Read/only file: Abort/Ignore $3*15 ;list status function SECTRAN EQU BIOS+3*16 ;sector translate ; equates for non graphic characters CTLC EQU 03H ;control c CTLE EQU 05H ;physical eol CTLH EQU 08H ;backspace CTLP EQU 10H ;prnt toggle CTLR EQU 12H ;repeat line CTLS EQU 13H ;stop/start screen CTLU EQU 15H ;line delete CTLX EQU 18H ;=ctl-u CTLZ EQU 1AH ;end of file RUBOUT EQU 7FH ;char delete TAB EQU 09H ;tab char CR EQU 0DH ;carriage return LF EQU 0AH ;line feed CTL EQU 5EH ;up arrow DEFB 0,16H,0,0,0,0 ; enter @!@͍K6Gͥ2Z+ȯX9#n# q <; A(D!A5"8:( BP(V -!A"i1'))`"ADw <^͗A"!D!*͹!Aog~#fo"G 1+"دw <^ # 2N+ͳGF 3N+q(F#8ͳG  JJKKKKKKKKKLLff''''y!O iy!P YuyͮH>Ͱ  Q>Ͱ :X!HO ^#VSHͽ!x@'here from the user's program with function number in c, ; and information address in d,e JP BDOSE ; ************************************************ ; *** relative locations 0009 - 000e *** ; ************************************************ PERERR: DEFW 0 ;permanent error subroutine SELERR: DEFW 0 ;select error subroutine RODERR: DEFW RODSUB ;ro disk error subroutine ROFERR: DEFW ROFSUB ;ro file error subroutine BDOSE: ;arrive here from user programs LD A,C LD (SFUNCN),A .COMMENT @ ************************* * * * *** CPM-BDOS *** * * (NIPOS clone) * * w. >8 MB support * * ~~~~~~~~~~~~~~~~ * * * * Datum * 19.10.2002 * * * * Large disk support * * implementation * * (>8 MB): * * NIPSOFT * * Marek Smihla * * * ************************* @ .Z80 .RADIX 10 BDOS EQU 0DC00H ;BDOS location address Track-Info F NFFFFFFFF F EX DE,HL LD (SINFO),HL LD (ENTSP),SP BDOSE1: LD (INFO),HL EX DE,HL LD A,E LD (LINFO),A LD HL,0 LD (ARET),HL LD SP,LSTACK XOR A LD D,A LD (FCBDSK),A LD (RESEL),A LD (VE9C9),A LD HL,GOBACK PUSH HL LD A,C CP NFUNCS RET NC LD C,E LD HL,FUNCTAB ADD A,A LD E,A ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD HL,(INFO) EX DE,HL JP (HL) ; dispatch table for functions FUNCTAB: DEFW WBOOTF,FUNC1,FUNC2,FUNC3 DEFW PUNCHF,LISTF,FUNC6,FUNC7 DEFW FUNC8,FUNC9,FUNAND 7 JR NZ,TAB0 RET BACKUP: ;back-up one screen position CALL PCTLH LD C,' ' CALL CONOUTF PCTLH: ;send ctlh to console without affecting column count LD C,CTLH JP CONOUTF CRLFP: ;print #, cr, lf for ctlx, ctlu, ctlr functions ;then move to strtcol (starting column) LD C,'#' CALL CONOUT CALL CRLF CRLFP0: LD A,(COLUMN) LD HL,STRTCOL CP (HL) RET NC LD C,' ' CALL CONOUT JR CRLFP0 CRLF: ;carriage return line feed sequence LD C,CR CALL CONOUT LD C,LF JP CONOUTC10,FUNC11 DEFW FUNC12,FUNC13,FUNC14,FUNC15 DEFW FUNC16,FUNC17,FUNC18,FUNC19 DEFW FUNC20,FUNC21,FUNC22,FUNC23 DEFW FUNC24,FUNC25,FUNC26,FUNC27 DEFW FUNC28,FUNC29,FUNC30,FUNC31 DEFW FUNC32,FUNC33,FUNC34,FUNC35 DEFW FUNC36,FUNC37,FUNC38,FUNC39 DEFW FUNC40 NFUNCS EQU ($-FUNCTAB)/2 ; error subroutines RODSUB: ;report write to read/only disk LD SP,LSTACK CALL CHECK$WRITE LD BC,(SFUNCN) LD HL,(SINFO) JP BDOSE1 ROFSUB:;report read/only file CALL CRLF CALL CRLF LD A,(CURDSK PRINT: ;print message until M(BC) = '$' LD A,(BC) CP '$' RET Z INC BC PUSH BC LD C,A CALL TABOUT POP BC JR PRINT READ: ;read to info address (max length, current length, buffer) LD A,(COLUMN) LD (STRTCOL),A LD HL,(INFO) LD C,(HL) INC HL PUSH HL LD B,0 READNX: PUSH BC PUSH HL READN0: CALL CONIN POP HL POP BC CP CR JP Z,READEN CP LF JP Z,READEN CP CTLH JR NZ,NOTH LD A,B OR A JR Z,READNX DEC B LD A,(COLUMN) LD (COMPCOL),A JR LINELEN NO) ADD A,'A' LD (DSKERR),A LD BC,DSKMSG CALL ROFS1 PUSH AF CALL CRLF POP AF AND 05FH XOR 'I' JP Z,RETMON RST 0 ROFS1: CALL PRINT CONIN: ;read console character to A LD HL,KBCHAR LD A,(HL) LD (HL),0 OR A RET NZ JP CONINF CONECH: ;read character with echo CALL CONIN CALL ECHOC RET C PUSH AF LD C,A CALL TABOUT POP AF RET ECHOC: ;echo character if graphic ;cr, lf, tab, or backspace CP CR RET Z CP LF RET Z CP TAB RET Z CP CTLH RET Z CTH: ;not a backspace CP RUBOUT JR NZ,NOTRUB LD A,B OR A JR Z,READNX LD A,(HL) DEC B DEC HL JR RDECH1 NOTRUB:;not a rubout character, check end line CP CTLE JR NZ,NOTE PUSH BC PUSH HL CALL CRLF XOR A LD (STRTCOL),A JR READN0 NOTE: ;not end of line, list toggle? CP CTLP JR NZ,NOTP PUSH HL LD HL,LISTCP LD A,1 SUB (HL) LD (HL),A POP HL JR READNX NOTP: ;not a ctlp, line delete? CP CTLX JR NZ,NOTX POP HL BACKX: LD A,(STRTCOL) LD HL,COLUMN CP P ' ' RET CONBRK: ;check for character ready LD A,(KBCHAR) OR A JR NZ,CONB1 CALL CONSTF AND 1 RET Z CALL CONINF CP CTLS JR NZ,CONB0 CALL CONINF CP CTLC JP Z,REBOOT XOR A RET CONB0: LD (KBCHAR),A CONB1: LD A,1 RET CONOUT: ;compute character position/write console char from C ;compcol = true if computing column position LD A,(COMPCOL) OR A JR NZ,COMPOUT PUSH BC CALL CONBRK POP BC PUSH BC CALL CONOUTF POP BC PUSH BC LD A,(LISTCP) OR A CALL NZ,(HL) JR NC,READ DEC (HL) CALL BACKUP JR BACKX NOTX: ;not a control x, control u? ;not control-X, control-U? CP CTLU JR NZ,NOTU CALL CRLFP POP HL JR READ NOTU: ;not line delete, repeat line? CP CTLR JR NZ,NOTR LINELEN: ;repeat line, or compute line len (ctlh) ;if compcol > 0 PUSH BC CALL CRLFP POP BC POP HL PUSH HL PUSH BC REP0: LD A,B OR A JR Z,REP1 INC HL LD C,(HL) DEC B PUSH BC PUSH HL CALL CTLOUT POP HL POP BC JR REP0 REP1: PUSH HLISTF POP BC COMPOUT: LD A,C LD HL,COLUMN CP RUBOUT RET Z INC (HL) CP ' ' RET NC DEC (HL) LD A,(HL) OR A RET Z LD A,C CP CTLH JR NZ,NOTBACKSP DEC (HL) RET NOTBACKSP: CP LF RET NZ LD (HL),0 RET CTLOUT: ;send C character with possible preceding up-arrow LD A,C CALL ECHOC JR NC,TABOUT PUSH AF LD C,CTL CALL CONOUT POP AF OR 40H LD C,A TABOUT: ;expand tabs to console LD A,C CP TAB JR NZ,CONOUT TAB0: LD C,' ' CALL CONOUT LD A,(COLUMN) Track-Info G NGGGGGGGG GL LD A,(COMPCOL) OR A JP Z,READN0 LD HL,COLUMN SUB (HL) LD (COMPCOL),A BACKSP: ;move back one more space CALL BACKUP LD HL,COMPCOL DEC (HL) JR NZ,BACKSP JP READN0 NOTR: ;not a ctlr, place into buffer RDECHO: INC HL LD (HL),A INC B RDECH1: PUSH BC PUSH HL LD C,A CALL CTLOUT POP HL POP BC LD A,(HL) CP CTLC LD A,B JR NZ,NOTC CP 1 JP Z,REBOOT NOTC: ;not reboot, are we at end of buffer? CP C JP C,READNX READEN: ;end of read operation, store blen POP H LISTCP: DEFB 0 KBCHAR: DEFB 0 ENTSP: DEFW 0 DEFW 0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0 COND BIGDSK DEFW 0 ;big disk support may need 1 stack level more ENDC ;BIGDSK LSTACK: USRCODE:DB 0 CURDSK: DB 0 INFO: DEFW 0 ARET: DEFW 0 LRET EQU ARET VE9C9: DEFB 0 COND MLTBOT BOTDSK DEFB 0 ;cislo bootovacieho disku ENDC ;MLTBOT COND BIGDSK ARECORDH: DEFW 0 ;bits 31..16 of actual record DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0L LD (HL),B LD C,CR JP CONOUT FUNC1: ;return console character with echo CALL CONECH JR STA$RET ;write console character with tab expansion FUNC2 EQU TABOUT FUNC3: ;return reader character CALL READERF JR STA$RET ;FUNC4: equated to punchf ;write punch character ;FUNC5: equated to listf ;write list character ;write to list device FUNC6: ;direct console i/o - read if 0ffh LD A,C INC A JR Z,DIRINP INC A JP Z,CONSTF JP CONOUTF DIRINP: CALL CONSTF OR A J,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0 ELSE DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0 ENDC ;BIGDSK .DEPHASE BDOS2:: END  ENDC ;MLTBOT COND BIGDSK ARECORDH: DEFW 0 ;bits 31..16 of actual record DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0P Z,RETMON CALL CONINF JR STA$RET FUNC7: ;return io byte LD A,(IOLOC) JR STA$RET FUNC8: ;set i/o byte LD HL,IOLOC LD (HL),C RET FUNC9: ;write line until $ encountered EX DE,HL LD C,L LD B,H JP PRINT ;read a buffered console line FUNC10 EQU READ FUNC11: ;check console status CALL CONBRK STA$RET: ;store the A register to aret LD (ARET),A FUNC$RET: RET SETLRET1: ;set lret = 1 LD A,1 JR STA$RET INCLUDE NIPBDOS1 DSKMSG: DEFM 'BDOS error on ' DSKEck size DIRREC EQU RECSIZ/FCBLEN ;directory elts / record DSKSHF EQU 2 ;log2(dirrec) DSKMSK EQU DIRREC-1 FCBSHF EQU 5 ;log2(fcblen) EXTNUM EQU 12 ;extent number field MAXEXT EQU 31 ;largest extent number UBYTES EQU 13 ;unfilled bytes field MODNUM EQU 14 ;data module number MAXMOD EQU 15 ;largest module number FWFMSK EQU 80H ;file write flag is high order modnum NAMLEN EQU 15 ;name length RECCNT EQU 15 ;record count field DSKMAP EQU 16 ;disk map field LSTFCB EQU FCBLEN-1 NXTREC EQU FCBLEN RRR: DEFM ' : Read/only file: Abort/Ignore ' DEFB 7,'$' EFCB: DEFB EMPTY RODSK: DEFW 0 ;read only disk vector DLOG: DEFW 0 ;logged-in disks DMAAD: DEFW TBUFF ;initial dma address CDRMAXA:DEFW 0 CURTRKA:DEFW 0 CURRECA:DEFW 0 BUFFA: DEFW 0 DPBADDR:DEFW 0 CHECKA: DEFW 0 ALLOCA: DEFW 0 ADDLIST EQU $-BUFFA SECTPT: DEFW 0 BLKSHF: DEFB 0 BLKMSK: DEFB 0 EXTMSK: DEFB 0 MAXALL: DEFW 0 DIRMAX: DEFW 0 DIRBLK: DEFW 0 CHKSIZ: DEFW 0 OFFSET: DEFW 0 DPBLIST EQU $-SECTPT TRANV: DEFW 0 ANREC EQU NXTREC+1;random record field (2 bytes) ; reserved file indicators ROFILE EQU 9 ;high order of first type char INVIS EQU 10 ;invisible file in dir command ; EQU 11 ;reserved ; utility functions for file access DM$POSITION: ;compute disk map position for vrecord to A LD HL,BLKSHF LD B,(HL) ;shift count to B LD A,(VRECORD) ;current virtual record to A DMPOS0: SRL A DJNZ DMPOS0 ;A = shr(vrecord,blkshf) = vrecord/2**(sect/block) LD B,A ;save it for later addition LD A,8 FCB$COPIED: DEFB 0 RMF: DEFB 0 DIRLOC: DEFB 0 SEQIO: DEFB 0 LINFO: DEFB 0 DMINX: DEFB 0 SEARCHL: DEFB 0 SEARCHA: DEFW 0 ;search address TINFO: DEFW 0 ;temp for info in "make" SINGLE: DEFB 0 RESEL: DEFB 0 OLDDSK: DEFB 0 FCBDSK: DEFB 0 RCOUNT: DEFB 0 EXTVAL: DEFB 0 VRECORD:DEFW 0 ARECORD:DEFW 0 ARECORD1: DEFW 0 DPTR: DEFB 0 DCNT: DEFW 0 DREC: DEFW 0 SFUNCN: DEFB 0 ;to store function number SINFO: DEFW 0 ;to store INFO parameter COMPCOL: DEFB 0 STRTCOL: DEFB 0 COLUMN: DEFB 0 Track-Info G NGGGGGGGG G SUB (HL) ;8-blkshf to accumulator LD C,A ;extent shift count in register c LD A,(EXTVAL) ;extent value ani extmsk DMPOS1: ;blkshf = 3,4,5,6,7, C=5,4,3,2,1 ;shift is 4,3,2,1,0 DEC C JR Z,DMPOS2 ADD A,A JR DMPOS1 DMPOS2: ;arrive here with A = shl(ext and extmsk,7-blkshf) ADD A,B ;add the previous shr(vrecord,blkshf) value ;A is one of the following values, depending upon alloc ;bks blkshf ;1k 3 v/8 + extval * 16 ;2k 4 v/16+ extval * 8 ;4k 5 v/32+ extval * 4   )********* * * * *** CPM HDD BIOS *** * * ~~~~~~~~~~~~~~~~~FDISK PRN FDISKS MZF4!"$%FDISK PRNWFDISKMS REL#FDISKC COM2A:NC $$$NC$$$.INIFET BIOSINIT.MACXD43SH OVR=BIOSDSK MACHNIPBDOS1MAC !"#$NIPBDOS1MAC%&'()*+,BIOSHDD MAC=BDOS BIN12NIPBDOS MACS345678$$$ SB A,(SEQIO) CP 2 JR NZ,SETFCB1 XOR A ;check ranfill SETFCB1:LD C,A ;=1 if sequential i/o LD A,(VRECORD) ADD A,C LD (HL),A ;fcb(nxtrec)=vrecord+seqio EX DE,HL LD A,(RCOUNT) LD (HL),A ;fcb(reccnt)=rcount RET HLROTR: ;hl rotate right by amount C INC C ;in case zero HLROTR0:DEC C RET Z ;return when zero SRL H ;high byte RR L ;low byte JR HLROTR0 COMPUTE$CS: ;compute checksum for current directory buffer LD B,RECSIZ LD HL,(BUFFA) XOR A COMPUTECS0: ADD A,(HL) D D,(HL) EX DE,HL RET INDEX: ;compute disk block number from current fcb CALL DM$POSITION ;0...15 in register A LD C,A LD B,0 CALL GETDM ;value to HL COND BIGDSK JP STAR16 ELSE LD (ARECORD),HL RET ENDC ;BIGDSK ALLOCATED: ;called following index to see if block allocated LD HL,(ARECORD) LD A,L OR H RET COND BIGDSK ATRAN: ;compute actual record address, assuming index called LD A,(BLKSHF) ;shift count to reg A LD HL,(ARECORD) EXX ;nuluj horny word PUSH H INC HL DJNZ COMPUTECS0 RET HLROTL: ;rotate the mask in HL by amount in C INC C HLROTL0: DEC C RET Z ADD HL,HL JR HLROTL0 SET$CDISK: ;set a "1" value in curdsk position of BC PUSH BC LD A,(CURDSK) LD C,A LD HL,1 CALL HLROTL POP BC LD A,C OR L LD L,A LD A,B OR H LD H,A RET NOWRITE: ;return true if dir checksum difference occurred LD HL,(RODSK) LD A,(CURDSK) LD C,A CALL HLROTR LD A,L AND 1 RET SET$RO: ;set current disk to read only LD HL,RODSKL LD HL,0 EXX ATRAN0: ADD HL,HL ;dolny word EXX ADC HL,HL ;horny word EXX DEC A JR NZ,ATRAN0 ;shl(arecord,blkshf) LD (ARECORD1),HL ;save shifted block # LD A,(BLKMSK) LD C,A ;mask value to C LD A,(VRECORD) AND C ;masked value in A OR L LD L,A ;to HL LD (ARECORD),HL ;arecord=HL or (vrecord and blkmsk) EXX LD (ARECORDH),HL POP HL EXX RET ELSE ATRAN: ;compute actual record address, assuming index called LD A,(BLKSHF) ;shift count to reg A LD HL,(ARECORD LD C,(HL) INC HL LD B,(HL) CALL SET$CDISK LD (RODSK),HL ;high water mark in directory goes to max LD HL,(DIRMAX) INC HL EX DE,HL LD HL,(CDRMAXA) LD (HL),E INC HL LD (HL),D RET CHECK$RODIR: ;check current directory element for read/only status CALL GETDPTRA ;address of element CHECK$ROFILE: ;check current buff(dptr) or fcb(0) for r/o status LD DE,ROFILE ADD HL,DE LD A,(HL) RLA RET NC LD HL,ROFERR JP GOERR CHECK$WRITE: ;check for write protected disk ) ATRAN0: ADD HL,HL DEC A JR NZ,ATRAN0 ;shl(arecord,blkshf) LD (ARECORD1),HL ;save shifted block # LD A,(BLKMSK) LD C,A ;mask value to C LD A,(VRECORD) AND C ;masked value in A OR L LD L,A ;to HL LD (ARECORD),HL ;arecord=HL or (vrecord and blkmsk) RET ENDC ;BIGDSK GETEXTA: ;get current extent field address to A LD HL,(INFO) LD DE,EXTNUM ADD HL,DE ;HL=.fcb(extnum) RET GETFCBA: ;compute reccnt and nxtrec addresses for get/setfcb LD HL,(INFO) LD DE,RECCNT Track-Info H NHHHHHHHH H.COMMENT @ ***************************** * * * *** CPM HDD BIOS *** * * ~~~~~~~~~~~~~~~~~~~~ * * Inicializacia * * Datum * 8.10.2002 * * * * (C) NIPSOFT * * Marek Smihla * * Fedinova 20 * * Bratislava * * 851 01 * * * ***************************** @ .Z80 YES EQU -1 NO EQU 0 BIOS EQU 0EA00h GLO 008,007,006,005,004,003,002,001 DEFB 000,000,000,000,000,000,000,000 DEFB 000,000,000,01F,020,000,01E,01C DEFB 011,014,001,006,01D,00C,002,000 ;GRAPH: DEFB 00D,029,0D0,009,000,007,01B,008 DEFB 000,000,000,0CE,0D1,0D5,0FA,0F9 DEFB 0F8,0F7,0F6,0F5,0F4,0F3,0F2,0F1 DEFB 0F0,0EF,0EE,0ED,0EC,0EB,0EA,0E9 DEFB 0E8,0E7,0E6,0E5,0E4,0E3,0E2,0E1 DEFB 0C1,0D9,0DA,0D4,0C3,0D3,0CC,02B DEFB 02E,02C,0C9,0D7,020,087,08A,084 DEFB 02D,000,013,004,00E,00B,07F,016 ;SHIFT+GRAPH: DEFB 00D,021,022,009,000BAL INIT,DETECT GLOBAL NPAGES,FDPRES GLOBAL MSG,LETNL EXT ADRCCP,ADRBDS EXT GSEC,GHEAD EXT DPBA,DPBC,DPBD,DPBE EXT PARTC,PARTD,PSIZC,PSIZD EXT SELMST,RDIDE,WRIDE,BUF512 EXT PRERV1,PRERV2 EXT INIGDG EXT MAXLIN,CLRSCR,FDRAW EXT WTXMS CONOUT EQU BIOS+0Ch .RADIX 16 TABKV EQU 0BE80h ;adresa tabulky klaves vo VRAM TABFV EQU 0BE80h ;adresa funkcnych klucov vo VRAM FRKEYS EQU 04h ;format register pre tabulku klaves FRFKEY EQU 01h ;format register pre FKEY OCYL EQU 2 ;g,007,003,008 DEFB 000,000,000,03A,028,02F,0DA,0D9 DEFB 0D8,0D7,0D6,0D5,0D4,0D3,0D2,0D1 DEFB 0D0,0CF,0CE,0CD,0CC,0CB,0CA,0C9 DEFB 0C8,0C7,0C6,0C5,0C4,0C3,0C2,0C1 DEFB 09F,09E,09D,09C,094,093,092,091 DEFB 03A,03F,095,099,020,09A,09B,096 DEFB 05F,000,001,006,01D,00C,018,019 TABKE: TABFK: DEFB 'DIR ',0,0,0,0,0,0,0,0 DEFB 'USER ',0,0,0,0,0,0,0 DEFB 'POWER',0Dh,0,0,0,0,0,0 DEFB 'FET ',0,0,0,0,0,0,0,0 DEFB 'COPY ',0,0,0,0,0,0,0 SKEYS: DEFB 'TYPE ',0,0,0,0,0,0,0 DEFB 'SAVE ',0,0,0,0,0,0eometria disku - parameter C OHEAD EQU 4 ;geometria disku - parameter H OSEC EQU 6 ;geometria disku - parameter S OLDR EQU 8 ;MBR loader OTABLE EQU 01BEh ;ofset partition tabulky ACTPAR EQU 80h ;priznak aktivnej particie OACT EQU 0 ;ofset priznaku aktivnej particie OHF EQU 1 ;ofset hlavy zaciatku particie OCSF EQU 2 ;ofset CS zaciatku particie OFSYS EQU 4 ;ofset priznaku operacneho systemu OHL EQU 5 ;ofset hlavy konca particie OCSL EQU 6 ;ofset CS konca particie ORELS ,0 DEFB 'ERA ',0,0,0,0,0,0,0,0 DEFB 'NC',0Dh,0,0,0,0,0,0,0,0,0 DEFB 'REN ',0,0,0,0,0,0,0,0 CKEYS: DEFB 'CMT L ',0,0,0,0,0,0 DEFB 'CMT S ',0,0,0,0,0,0 DEFB 'CMT G ',0,0,0,0,0,0 DEFB 'CMT P ',0,0,0,0,0,0 DEFB 'STAT ',0,0,0,0,0,0,0 GKEYS: DEFB 'CMT L/S ',0,0,0,0 DEFB 'CMT S/S ',0,0,0,0 DEFB 'CMT G/S ',0,0,0,0 DEFB 'CMT P/S ',0,0,0,0 DEFB 'CMT R ',0,0,0,0,0,0 SGKEYS: DEFB 'TAPE L ',0,0,0,0,0 DEFB 'TAPE S ',0,0,0,0,0 DEFB 'TAPE G ',0,0,0,0,0 DEFB 'TAPE P ',0,0,0,0,0 DEFB 'FORMAEQU 8 ;relativny sektor zaciatku particie ONUMS EQU 0Ch ;pocet relativnych sektorov v particii OIDENT EQU 1FEh ;ofset identifikacneho slova AA55h MZID1 EQU 'M' MZID2 EQU 'Z' PIDCPM EQU 0DBh TABKB: DEFB 00D,03A,03B,009,001,007,01B,008 DEFB 000,000,000,05D,05B,040,05A,059 DEFB 058,057,056,055,054,053,052,051 DEFB 050,04F,04E,04D,04C,04B,04A,049 DEFB 048,047,046,045,044,043,042,041 DEFB 038,037,036,035,034,033,032,031 DEFB 02E,02C,039,030,020,02D,05E,05C DEFB 02F,03F,013T ',0,0,0,0,0 TABFKE: SIOT: ;inicializacne bajty SIO DEFB 18h,10h,10h,4,4Ch DEFB 5,0EAh,3,0E1h PIOT: DEFB 0CFh,03Fh,057h,0DFh ;inicializacne bajty PIO-A (FCh) DEFB 0CFh,000h,057h,0FFh ;inicializacne bajty PIO-B (FDh) INIT: DI CALL INIGDG ;640x200, 4 farby + palety + scroll + RAM CALL INITKB ;inicializuj KBD CALL INITPP ;inicializuj PPI 8255 CALL INITCL ;inicializuj hodiny 8253 CALL INITSN ;inicializuj zvuk PSG CALL INITSI ;inicializuj pripadnu kartu SIO CALL INITPI ;i,004,00E,00B,07F,016 ;SHIFT: DEFB 00D,02A,02B,009,000,007,003,008 DEFB 000,000,000,07D,07B,060,07A,079 DEFB 078,077,076,075,074,073,072,071 DEFB 070,06F,06E,06D,06C,06B,06A,069 DEFB 068,067,066,065,064,063,062,061 DEFB 028,027,026,025,024,023,022,021 DEFB 03E,03C,029,05F,020,03D,07E,07C DEFB 011,011,011,011,017,012,018,019 ;CTRL: DEFB 00D,000,000,009,000,007,003,008 DEFB 000,000,000,01D,01B,000,01A,019 DEFB 018,017,016,015,014,013,012,011 DEFB 010,00F,00E,00D,00C,00B,00A,009 DEFBTrack-Info H NHHHHHHHH Hnicializuj PIO (zatial bez prer.) LD A,MAXLIN CALL CLRSCR ;zmaz CRT DI CALL FDRAW ;nakresli FKEYS ;inicializacia povolenia prerusenia PIO PIOENA: DI IM 2 ;budeme prerusovat cez IV LD HL,PRERV1 ;vektor prerusenia BIT 0,L ;zacina na parnej adrese? JR Z,PIOEN1 ;ano, je to OK LD HL,PRERV2 ;ak nie, tak pouzi tento vektor PIOEN1: LD A,H ;horny bajt vektora prerusenia LD I,A ;uloz do I LD BC,83FCh ;B=EI, C=adresa portu PIO-A OUT (C),L ;dolny bajt vektora daj do PIO OUT (C),B ;p z adresy 0 danej stranky ;vstup: D=cislo stranky ;vystup: E=nacitany bajt RDR0: CALL RDSET0 IN E,(C) RET ;pise bajt na adresu 0 danej stranky ;vstup: D=cislo stranky, E=zapisovany bajt RDW0: CALL RDSET0 OUT (C),E RET ;zdetekuje RD a nastavi ho v BIOSe RDSIZE: LD HL,RDSAV XOR A R3: LD D,A CALL RDSET0 INI CP 1 RLA BIT 4,A JR Z,R3 XOR A LD D,A R5: LD E,A CALL RDW0 CALL RDR0 CP E JR Z,R6 LD A,D JR R1 R6: SUB 1 JR C,R5 LD A,1 R2: LD DE,0 CALL ovol PIO prerusenie EI ;budeme prerusovat podla noveho RETI ;uz sa moze prerusovat ;presun KBD tabuliek do VRAM INITKB: DI IN A,(0E0h) ;zapni VRAM LD A,FRKEYS ;rovina pre tabulku klaves OUT (0CCh),A ;nastav WFREG LD HL,TABKB ;presun tabulku klaves LD DE,TABKV ;do VRAM LD BC,TABKE-TABKB LDIR LD A,FRFKEY ;rovina pre funkcne kluce OUT (0CCh),A ;nastav WFREG LD HL,TABFK ;presun funkcne kluce LD DE,TABFV ;do VRAM LD BC,TABFKE-TABFK LDIR IN A,(0E1h) ;zapni RAM RET ;iRDW0 LD D,A LD E,A CALL RDW0 LD D,0 CALL RDR0 JR NZ,R1 ADD A,A CP 10h JR NZ,R2 R1: LD (NPAGES),A LD HL,RDSAV XOR A R4: LD D,A CALL RDSET0 OUTI CP 1 RLA BIT 4,A JR Z,R4 LD A,(NPAGES) OR A LD HL,0 JR Z,R7 LD BC,0F04h LD E,1 CP 10h JR C,R8 LD BC,1F05h LD E,3 RRA RR L R8: SRL A RR L RRA RR L RRA RR L LD H,A DEC HL LD (DPBE+2),BC LD A,E LD (DPBE+4),A LD A,(DPBE+0Dh) LD D,A LD E,0 LD B,C R9: SRL D RR E DJNZ R9 OR Anicializacia hodin 8253 ;CTC0=citac 1:1 ;CTC1=delicka 1:15611 (HSync vstup, sekundovy vystup) ;CTC2=pocitadlo sekund INITCL: DI LD A,36h ;CTC0 mod3 bin. citac 1:1 OUT (0D7h),A LD A,74h ;CTC1 mod2 bin. citac 1:15611 OUT (0D7h),A LD A,0FBh ;CTC1 zapis 3CFBh (=15611) OUT (0D5h),A LD A,3Ch OUT (0D5h),A LD A,0B4h ;CTC2 mod2 bin. citac OUT (0D7h),A LD BC,0D6h ;CTC2 port OUT (C),B ;CTC2 zapis 0000H OUT (C),B INITC1: IN A,(C) IN B,(C) OR B JR NZ,INITC1 ;cakame na CTC2=0 SBC HL,DE R7: LD (DPBE+5),HL RET ;zdetekuje pritomnost FD radica a nastavi v BIOSe FDSIZE: LD A,0FEh OUT (0DAh),A LD A,0Ah CALL WTXMS ;cakaj 10 ms IN A,(0DAh) CP 0FEh RET Z ; LD HL,0 ; LD (DPBA+5),HL XOR A LD (FDPRES),A RET ;zdetekuje HDD particie a nastavi ich v BIOSe HDSIZE: CALL SELMST ;reset Master LD HL,0 ;nuluj HL'HL EXX LD HL,0 EXX LD (PSIZC),HL ;nuluj velkost C particie LD (PSIZD),HL ;nuluj velkost D particie LD (DPBC+5),HL ;nuluj DSM disku C RET ;inicializacia zvuku PSG INITSN: LD A,09Fh ;este stlmime PSG LD B,4 ;styri kanaly vratane sumu INITS1: OUT (0F2h),A ;stlm kanal ADD A,020h ;dalsi kanal DJNZ INITS1 ;opakuj pre kazdy kanal RET ;inicializacia 8255 ;A=vystup rez. 0, B=vstup rez. 0, CL=vystup, CH=vstup INITPP: LD A,8Ah OUT (0D3H),A ;nastav rezim LD A,0F0h ;(?) 8255 brana a joy multipl 556 OUT (0D0h),A ;(?) XOR A OUT (0D3h),A ;vypni zvuk cez 8253 RET ;inicializacia SIO (RS-232 karta) INITSI: LD B LD (DPBD+5),HL ;nuluj DSM disku D LD DE,HDBUF ;sem pride MBR sektor LD B,1 ;1 sektor 512 bajtov CALL RDIDE ;citaj MBR sektor RET C ;vrat sa, ak bola chyba LD HL,(HDBUF+OIDENT) LD DE,0AA55h SBC HL,DE ;testuj ident. AA55h RET NZ ;vrat sa, ak nesedi LD A,(HDBUF) ;testuj mark 'MZ' CP MZID1 RET NZ LD A,(HDBUF+1) CP MZID2 RET NZ ;vrat sa, ak 'MZ' nesedi LD HL,(HDBUF+OHEAD);zisti pocet hlav LD (GHEAD),HL ;nastav hlavy v BIOSe LD HL,(HDBUF+OSEC) ;pocet sektorov na stope LC,09B1h ;pocet 9, adresa B1h (SIO) LD HL,SIOT ;inicializacne bajty SIO PUSH HL OTIR LD BC,09B3h ;pocet 9, adresa B3h (SIO) POP HL ;inicializacne bajty SIO OTIR RET INITPI: DI LD HL,PIOT ;inicializacne bajty PIO LD BC,04FCh ;adresa portu PIO-A OTIR ;zasli na PIO-A LD BC,04FDh ;port PIO-B OTIR ;zasli na PIO-B RET ;nastavi adresu 0 danej stranky ;vstup: D=cislo stranky ;vystup: BC=0EAh RDSET0: LD C,0E9h OUT (C),D LD BC,0EBh OUT (C),B DEC C RET ;cita bajtTrack-Info I NIIIIIIII ID (GSEC),HL ;nastav v BIOSe LD IX,HDBUF+OTABLE ;adresa part. tabulky do IX LD BC,400h ;B=4 particie, C=0 pocet zistenych CPM LD DE,10h ;vzdialenost medzi particiami ;najprv ideme hladat aktivnu CPM particiu HDSI1: LD A,(IX+OACT) CP ACTPAR ;je particia aktivna? JR NZ,HDSI2 ;ak neni, skus dalsiu CALL TSTCPM ;je CPM? JR NZ,HDSI3 ;aktivna neni CPM, skoc ;nasla sa aktivna cpm particia CALL SETC ;nastav ju v BIOSe LD C,1 ;disk C uz mame, dalsi bude D JR HDSI3 HDSI2: ADD IX,DE ;hladaTSTC1 ;pokracuj po uspesnom citani POP HL ;skoriguj zasobnik POP HL TSTC2: XOR A ;nekorektna CPM particia, vrat sa so Z=0 INC A RET TSTC1: LD HL,(BUF512+OIDENT);citaj identif. na konci bootsektora LD DE,0AA55h ;mal by byt AA55h OR A SBC HL,DE EX DE,HL EXX ;navrat LBA bootsektora do HL'HL POP HL EXX POP HL RET NZ ;vrat sa so Z=0, ak AA55h neuspelo INC E ;teraz DE=1 ADD HL,DE ;zvacsi LBA o 1 JR NC,TSTC3 EXX INC HL EXX TSTC3: LD DE,BUF512 ;sem nahrame syst. sektoj dalej aktivnu particiu DJNZ HDSI1 ;teraz budeme hladat neaktivne CPM particie HDSI3: LD B,4 ;max. 4 particie LD DE,10h ;vzdialenost medzi particiami LD IX,HDBUF+OTABLE ;adresa part. tabulky do IX HDSI4: LD A,(IX+OACT) CP ACTPAR JR Z,HDSI5 ;aktivne particie ignoruj CALL TSTCPM ;je CPM? JR NZ,HDSI5 ;ak neni, skusaj dalej PUSH BC CALL SETP ;nasla sa, nastav ju v BIOSe POP BC INC C LD A,C CP 2 ;mame uz 2 particie? RET NC ;mame, vrat sa HDSI5: ADD IX,DE ;hladaj dalej Dr s DPB PUSH DE ;odloz adresu LD B,1 ;bubeme citat 1 sektor 512 bajtov CALL RDIDE ;citaj DPB sektor POP HL ;adresa bufra do HL JR C,TSTC2 ;chyba citania, vrat sa so Z=0 XOR A ;nastav pocitadlo 256 wordow LD E,A ;nuluj akumulator CRC LD D,A TSTC4: LD C,(HL) ;citaj WORD do BC INC HL LD B,(HL) INC HL EX DE,HL ;pricitaj ho k DE ADD HL,BC EX DE,HL DEC A ;dekrementuj counter JR NZ,TSTC4 ;opakuj 256-x LD A,D ;CRC ma byt 0 OR E ;ak je CRC OK, nastav Z=1 LD HL,BUF51JNZ HDSI4 RET ;skopiruje parametre zistenej particie do BIOSu ;vstup: C=0 disk C, C=1 disk D ;IX=adresa tabulky particie ;HL=DPB particie zo syst. sektora SETP: DEC C ;disk C? JR NZ,SETC ;ak ano, nastav ciel C SETD: LD IY,PARTD ;BIOS part. D LD DE,DPBD ;BIOS DPB D JR SETC1 SETC: LD IY,PARTC ;BIOS part. C LD DE,DPBC ;BIOS DPB C SETC1: LD BC,0Fh ;budeme prenasat 15 bajtov LDIR ;skopiruj DPB LD A,(IX+ORELS) ;skopiruj LBA zaciatku particie LD (IY+0),A LD A,(IX+ORELS+1) LD 2+21h ;tu zacina DPB particie RET LET: LD C,A LD B,5 LD A,' ' LET1: CALL PRNTC DJNZ LET1 LD A,C PRNTC: PUSH AF PUSH BC PUSH DE PUSH HL LD C,A CALL CONOUT POP HL POP DE POP BC POP AF RET LETNL: LD DE,NL MSG: LD A,(DE) INC DE CP '$' RET Z CALL PRNTC JR MSG PADEK: PUSH AF PUSH BC PUSH HL PUSH IX LD IX,DETAB+4 LD B,2 LD L,A LD H,0 JR PHL5 PHLBDK: PUSH BC PUSH AF LD A,B SUB 6 JR NC,PHLB1 XOR A PHLB1: INC A LD B,A PHLB2: LD A,'(IY+1),A LD A,(IX+ORELS+2) LD (IY+2),A LD A,(IX+ORELS+3) LD (IY+3),A LD L,(IX+ONUMS+0) ;pocet sektorov do HL LD H,(IX+ONUMS+1) LD A,(IX+ONUMS+2) ;je pocet sekt. vacsi ako 65535? OR (IX+ONUMS+3) JR Z,SETC2 LD HL,0 ;max. podporujeme 65536 sektorov SETC2: DEC HL ;uloz max. rel. sektor LD (IY+4),L LD (IY+5),H RET ;test, ci je particia korektna CPM ;vstup: IX=adresa tabulky particie ;vystup: Z=0 neni korektna CPM ;Z=1, HL=DPB particia je korektna CPM ;nici: HL, HL', AF TSTCPM ' CALL PRNTC DJNZ PHLB2 POP AF POP BC PHLDEK: PUSH AF PUSH BC PUSH HL PUSH IX LD IX,DETAB LD B,4 PHL5: PUSH DE LD C,' '-1 PHL3: XOR A LD E,(IX+0) INC IX LD D,(IX+0) INC IX JR PHL1 PHL4: LD C,'0'-1 PHL1: SBC HL,DE INC A JR NC,PHL4 ADD HL,DE ADD A,C PHL2: CALL PRNTC DJNZ PHL3 LD A,'0' ADD A,L CALL PRNTC POP DE POP IX POP HL POP BC POP AF RET REPHD: LD HL,(PSIZC) LD E,'C' CALL REPHD1 LD HL,(PSIZD) LD E,'D' REPHD1: LD A,H OR L : PUSH BC PUSH DE CALL TSTCP0 POP DE POP BC RET TSTCP0: LD A,(IX+OFSYS) ;test filesystemu CP PIDCPM ;=DBh (CPM)? RET NZ ;neni CPM LD L,(IX+ORELS) ;dolny word LBA zaciatku particie do HL LD H,(IX+ORELS+1) PUSH HL ;dolny word LBA do zasobnika EXX LD L,(IX+ORELS+2) ;horny word LBA zaciatku particie do HL' LD H,(IX+ORELS+3) PUSH HL ;horny word LBA do zasobnika EXX LD DE,BUF512 ;sem nahrame bootsektor LD B,1 ;1 sektor (512 bajtov) CALL RDIDE ;citaj bootsektor JR NC,Track-Info I NIIIIIIII IRET Z PUSH HL LD A,E CALL LET LD DE,MHD CALL MSG POP HL LD DE,1 XOR A ADD HL,DE RLA LD B,5 REPHD2: ADD HL,HL RLA DJNZ REPHD2 CALL PADEK LD DE,MMB JR REPR4 REPRD: LD A,(NPAGES) OR A RET Z PUSH AF LD A,'E' CALL LET LD DE,MRD CALL MSG POP AF LD B,5 LD HL,MRD1 REPR2: RRA JR C,REPR1 INC HL INC HL INC HL INC HL DJNZ REPR2 REPR1: LD BC,0402h REPR3: PUSH BC LD E,(HL) INC HL PUSH HL CALL 5 POP HL POP BC DJNZ REPR3 REPR5: LD DE,MKB FILL0: LD (HL),A INC HL INC D JP P,FILL0 CALL SETDIR LD HL,(ARECORD1) LD C,2 FILL1: LD (ARECORD),HL PUSH BC CALL SEEK POP BC CALL WRBUFF LD HL,(ARECORD) LD C,0 LD A,(BLKMSK) LD B,A AND L CP B INC HL JR NZ,FILL1 POP HL LD (ARECORD),HL CALL SETDATA DISKWR11: CALL SEEK POP BC PUSH BC CALL WRBUFF POP BC LD A,(VRECORD) LD HL,RCOUNT CP (HL) JR C,DISKWR2 LD (HL),A INC (HL) LD C,2 DISKWR2: COND BIGDSK ELSE LD HL,0D400H ;??? ENDC ;BIGDSK PU REPR4: CALL MSG JP LETNL REPFD: ; LD HL,(DPBA+5) ; LD A,H ; OR L ; RET Z LD A,(FDPRES) OR A RET Z LD A,'A' CALL LET LD DE,MFD CALL MSG JR REPR5 DETECT: LD DE,CPYRGT CALL MSG LD DE,MDEC1 CALL MSG CALL FDSIZE ;zdetekuje FD CALL RDSIZE ;zdetekuje RD CALL HDSIZE ;zdetekuje HD LD DE,MDEC2 CALL MSG CALL REPFD ;oznami zistene floppy mechaniky CALL REPHD ;oznami zistene HD particie CALL REPRD ;oznami zisteny RD a jeho velkost RET .RADIX 10 DETAB: DSH AF CALL GETMODNUM AND 7FH ;not fwfmsk LD (HL),A POP AF CP LSTREC JR NZ,DISKWR3 LD A,(SEQIO) CP 1 JR NZ,DISKWR3 CALL SETFCB CALL OPEN$REEL LD HL,LRET LD A,(HL) OR A JR NZ,NOSPACE DEC A LD (VRECORD),A NOSPACE: LD (HL),0 DISKWR3: JP SETFCB RSEEK: ;random access seek operation, C=0ffh if read mode ;fcb is assumed to address an active file control block ;(modnum has been set to 1100$0000b if previous bad seek) XOR A LD (SEQIO),A RSEEK1: PUSH BC LD DE,(INFO) EFW 10000,1000,100,10 .RADIX 16 RDSAV: DEFB 0,0,0,0,0 NPAGES: DEFB 0 FDPRES: DEFB 0FFh HDBUF: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0, LD HL,RANREC ADD HL,DE LD A,(HL) AND 7FH PUSH AF LD A,(HL) RLA INC HL LD A,(HL) RLA AND 1FH LD C,A LD A,(HL) RRA RRA RRA RRA AND 0FH LD B,A POP AF INC HL LD L,(HL) INC L DEC L LD L,6 ;produce error 6, seek past physical eod JR NZ,SEEKERR LD HL,NXTREC ADD HL,DE LD (HL),A LD HL,EXTNUM ADD HL,DE LD A,C SUB (HL) JR NZ,RANCLOSE LD HL,MODNUM ADD HL,DE LD A,B SUB (HL) AND 7FH JR Z,SEEKOK RANCLOSE: PUSH BC PUSH DE CALL CLOSE PO0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MRD: DEFM ': Memory disk board $' MFD: DEFM ': Floppy disk drive 720$' MHD: DEFM ': Harddisk partition $' MDEC1: DEFM 'Detecting drives, please wait... $' MDEC2: DEFM 'detected:',0Dh,0Ah NL: DEFB 0Dh,0Ah,'$' MRD1: DEFM ' 64 128 256 5121024????' MKB: DEFM ' K bytes$' MMBP DE POP BC LD L,3 ;cannot close error #3 LD A,(LRET) INC A JR Z,BADSEEK LD HL,EXTNUM ADD HL,DE LD (HL),C LD HL,MODNUM ADD HL,DE LD (HL),B CALL OPEN LD A,(LRET) INC A JR NZ,SEEKOK POP BC PUSH BC LD L,4 ;seek to unwritten extent #4 INC C JR Z,BADSEEK CALL MAKE LD L,5 ;cannot create new extent #5 LD A,(LRET) INC A JR Z,BADSEEK SEEKOK: POP BC XOR A JP STA$RET BADSEEK: PUSH HL CALL GETMODNUM LD (HL),0C0H POP HL SEEKERR: POP BC LD A,L LD (LRET): DEFM ' M bytes$' CPYRGT: DEFM 'NIPOS ver 0.07 build 21.10.2002' ; DEFM ' (MZ-800 harddrive operating system)' DEFM ' (C) 2002 NipSoft',0Dh,0Ah,0Dh,0Ah,'$' END  $' MFD: DEFM ': Floppy disk drive 720$' MHD: DEFM ': Harddisk partition $' MDEC1: DEFM 'Detecting drives, please wait... $' MDEC2: DEFM 'detected:',0Dh,0Ah NL: DEFB 0Dh,0Ah,'$' MRD1: DEFM ' 64 128 256 5121024????' MKB: DEFM ' K bytes$' MMBTrack-Info J NJJJJJJJJ J,A JP SETFWF RANDISKREAD: ;random disk read operation LD C,TRUE CALL RSEEK CALL Z,DISKREAD RET RANDISKWRITE: ;random disk write operation LD C,FALSE CALL RSEEK CALL Z,DISKWRITE RET COMPUTE$RR: ;compute random record position for getfilesize/setrandom xchg! dad d ;DE=.buf(dptr) or .fcb(0), HL = .f(nxtrec/reccnt) EX DE,HL ADD HL,DE LD C,(HL) LD B,0 LD HL,EXTNUM ADD HL,DE LD A,(HL) RRCA AND 80H ADD A,C LD C,A LD A,0 ADC A,B LD B,A LD A,(HL) RH AF CALL SELECT POP AF RET NZ ;return if bootdisk is other than A ELSE CALL SELECT XOR A LD (CURDSK),A ENDC ;MLTBOT LD HL,DLOG SET 0,(HL) JR SELECT ;select disk info FUNC14: EQU CURSELECT FUNC15: ;open file LD A,1 LD (VE9C9),A CALL CLRMODNUM CALL RESELECT JP OPEN FUNC16: ;close file CALL RESELECT JP CLOSE FUNC17: ;search for first occurrence of a file LD C,0 EX DE,HL LD A,(HL) CP '?' JR Z,QSELECT CALL GETEXTA LD A,(HL) CP '?' CALL NZ,CRCA AND 0FH ADD A,B LD B,A LD HL,MODNUM ADD HL,DE LD A,(HL) ADD A,A ADD A,A ADD A,A ADD A,A PUSH AF ADD A,B LD B,A PUSH AF POP HL LD A,L POP HL OR L AND 1 RET GETFILESIZE: ;compute logical file size for current fcb LD C,EXTNUM CALL SEARCH LD HL,(INFO) LD DE,RANREC ADD HL,DE PUSH HL LD (HL),D INC HL LD (HL),D INC HL LD (HL),D GETSIZE: CALL END$OF$DIR JR Z,SETSIZE CALL GETDPTRA LD DE,RECCNT CALL COMPUTE$RR POP HL PUSH HL LD E,A LRMODNUM CALL RESELECT LD C,NAMLEN QSELECT: CALL SEARCH JP DIR$TO$USER FUNC18: ;search for next occurrence of a file name LD HL,(SEARCHA) LD (INFO),HL CALL RESELECT CALL SEARCHN JP DIR$TO$USER FUNC19: ;delete a file CALL RESELECT CALL DELETE JP COPY$DIRLOC FUNC20: ;read a file LD A,1 LD (VE9C9),A CALL RESELECT JP SEQDISKREAD FUNC21: ;write a file CALL RESELECT JP SEQDISKWRITE FUNC22: ;make a file CALL CLRMODNUM CALL RESELECT JP MAKE FUNC23 LD A,C SUB (HL) INC HL LD A,B SBC A,(HL) INC HL LD A,E SBC A,(HL) JR C,GETNEXTSIZE LD (HL),E DEC HL LD (HL),B DEC HL LD (HL),C GETNEXTSIZE: CALL SEARCHN JR GETSIZE SETSIZE: POP HL RET SETRANDOM: ;set random record from the current file control block LD HL,(INFO) LD DE,NXTREC CALL COMPUTE$RR LD HL,RANREC ADD HL,DE LD (HL),C INC HL LD (HL),B INC HL LD (HL),A RET SELECT: ;select disk info for subsequent input or output ops LD HL,(DLOG) LD : ;rename a file CALL RESELECT CALL RENAME JP COPY$DIRLOC FUNC24: ;return the login vector LD HL,(DLOG) JR STHL$RET FUNC25: ;return selected disk number LD A,(CURDSK) JP STA$RET FUNC26: ;set the subsequent dma address to info LD (DMAAD),DE JP SETDATA FUNC27: ;return the login vector address LD HL,(ALLOCA) JR STHL$RET ;write protect current disk FUNC28: EQU SET$RO FUNC29: ;return r/o bit vector LD HL,(RODSK) JR STHL$RET FUNC30: ;set file indicatoA,(CURDSK) LD C,A CALL HLROTR PUSH HL EX DE,HL CALL SELECTDISK POP HL CALL Z,SEL$ERROR LD A,L RRA RET C LD BC,(DLOG) CALL SET$CDISK LD (DLOG),HL JP INITIALIZE CURSELECT: LD A,(LINFO) LD HL,CURDSK CP (HL) RET Z COND MLTBOT CP 0F0H JR C,CURSEL1 CPL LD (BOTDSK),A RET CURSEL1: ENDC ;MLTBOT LD (HL),A JR SELECT RESELECT: ;check current fcb to see if reselection necessary LD A,TRUE LD (RESEL),A LD HL,(INFO) LD A,(HL) AND 1FH DEC A LD (LINFO),rs CALL RESELECT CALL INDICATORS JP COPY$DIRLOC FUNC31: ;return address of disk parameter block LD HL,(DPBADDR) STHL$RET: LD (ARET),HL RET FUNC32: ;set user code LD A,(LINFO) CP 0FFH JR NZ,SETUSRCODE LD A,(USRCODE) JP STA$RET SETUSRCODE: AND 1FH LD (USRCODE),A RET FUNC33: ;random disk read operation LD A,1 LD (VE9C9),A CALL RESELECT JP RANDISKREAD FUNC34: ;random disk write operation CALL RESELECT JP RANDISKWRITE FUNC35: ;return file size (0A CP 1EH JR NC,NOSELECT LD A,(CURDSK) LD (OLDDSK),A LD A,(HL) LD (FCBDSK),A AND 0E0H LD (HL),A CALL CURSELECT NOSELECT: LD A,(USRCODE) LD HL,(INFO) OR (HL) LD (HL),A RET FUNC12: ;return version number LD A,DVERS JP STA$RET FUNC13: ;reset disk system and initialize to boot disk LD HL,0 LD (RODSK),HL LD (DLOG),HL LD HL,TBUFF LD (DMAAD),HL CALL SETDATA COND MLTBOT ;in multiboot option init bootdisk instead of A LD A,(BOTDSK) LD (CURDSK),A OR A PUSTrack-Info J NJJJJJJJJ J-65536) LD A,1 LD (VE9C9),A CALL RESELECT JP GETFILESIZE ;set random record FUNC36: EQU SETRANDOM FUNC37: LD HL,(INFO) LD A,L CPL LD E,A LD A,H CPL LD HL,(DLOG) AND H LD D,A LD A,L AND E LD E,A LD HL,(RODSK) EX DE,HL LD (DLOG),HL LD A,L AND E LD L,A LD A,H AND D LD H,A LD (RODSK),HL RET GOBACK: ;arrive here at end of processing to return to user LD A,(RESEL) OR A JR Z,RETMON LD HL,(INFO) LD (HL),0 LD A,(FCBDSK) OR A JR Z,RETMnsole input function CONOUTF EQU BIOS+3*4 ;console output function LISTF EQU BIOS+3*5 ;list output function PUNCHF EQU BIOS+3*6 ;punch output function READERF EQU BIOS+3*7 ;reader input function HOMEF EQU BIOS+3*8 ;disk home function SELDSKF EQU BIOS+3*9 ;select disk function SETTRKF EQU BIOS+3*10 ;set track function SETSECF EQU BIOS+3*11 ;set sector function SETDMAF EQU BIOS+3*12 ;set dma function READF EQU BIOS+3*13 ;read disk function WRITEF EQU BIOS+3*14 ;write disk function LISTSTF EQU BIOSON LD (HL),A LD A,(OLDDSK) LD (LINFO),A CALL CURSELECT ; return from the disk monitor RETMON: LD SP,(ENTSP) LD HL,(ARET) LD A,L LD B,H RET FUNC38: EQU FUNC$RET FUNC39: EQU FUNC$RET FUNC40: ;random disk write with zero fill of unallocated block CALL RESELECT LD A,2 LD (SEQIO),A LD C,FALSE CALL RSEEK1 CALL Z,DISKWRITE RET f processing to return to user LD A,(RESEL) OR A JR Z,RETMON LD HL,(INFO) LD (HL),0 LD A,(FCBDSK) OR A JR Z,RETM+3*15 ;list status function SECTRAN EQU BIOS+3*16 ;sector translate ; equates for non graphic characters CTLC EQU 03H ;control c CTLE EQU 05H ;physical eol CTLH EQU 08H ;backspace CTLP EQU 10H ;prnt toggle CTLR EQU 12H ;repeat line CTLS EQU 13H ;stop/start screen CTLU EQU 15H ;line delete CTLX EQU 18H ;=ctl-u CTLZ EQU 1AH ;end of file RUBOUT EQU 7FH ;char delete TAB EQU 09H ;tab char CR EQU 0DH ;carriage return LF EQU 0AH ;line feed CTL EQU 5EH ;up arrow DEFB 0,16H,0,0,0,0 ; enterFB 0,0,6,00C DEFB 018,030,060,0C0 DEFB 0,03E,030,030 DEFB 030,030,030,03E DEFB 0,018,03C,05A DEFB 018,018,018,018 DEFB 0,0,0,0 DEFB 0,0,0,0FF DEFB 0,6,6,00C ;60 DEFB 0,0,0,0 DEFB 0,0,0,03C DEFB 060,07C,066,0FC DEFB 0,6,6,03E DEFB 066,066,066,03E DEFB 0,0,0,03C DEFB 066,6,066,03C DEFB 0,060,060,07C DEFB 066,066,066,07C DEFB 0,0,0,03C DEFB 066,07E,6,03C DEFB 0,038,06C,00C DEFB 01E,00C,00C,00C DEFB 0,0,0,07C DEFB 066,066,07C,078 DEFB 0,6 here from the user's program with function number in c, ; and information address in d,e JP BDOSE ; ************************************************ ; *** relative locations 0009 - 000e *** ; ************************************************ PERERR: DEFW 0 ;permanent error subroutine SELERR: DEFW 0 ;select error subroutine RODERR: DEFW RODSUB ;ro disk error subroutine ROFERR: DEFW ROFSUB ;ro file error subroutine BDOSE: ;arrive here from user programs LD A,C LD (SFUNCN),A .COMMENT @ ************************* * * * *** CPM-BDOS *** * * (NIPOS clone) * * w. >8 MB support * * ~~~~~~~~~~~~~~~~ * * * * Datum * 19.10.2002 * * * * Large disk support * * implementation * * (>8 MB): * * NIPSOFT * * Marek Smihla * * * ************************* @ .Z80 .RADIX 10 BDOS EQU 0DC00H ;BDOS location address EX DE,HL LD (SINFO),HL LD (ENTSP),SP BDOSE1: LD (INFO),HL EX DE,HL LD A,E LD (LINFO),A LD HL,0 LD (ARET),HL LD SP,LSTACK XOR A LD D,A LD (FCBDSK),A LD (RESEL),A LD (VE9C9),A LD HL,GOBACK PUSH HL LD A,C CP NFUNCS RET NC LD C,E LD HL,FUNCTAB ADD A,A LD E,A ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD HL,(INFO) EX DE,HL JP (HL) ; dispatch table for functions FUNCTAB: DEFW WBOOTF,FUNC1,FUNC2,FUNC3 DEFW PUNCHF,LISTF,FUNC6,FUNC7 DEFW FUNC8,FUNC9,FUBIOS EQU 0EA00H ;BIOS location address ON EQU 0FFFFh OFF EQU 00000h BIGDSK EQU OFF ;ON for >8 MB disk support MLTBOT EQU OFF ;patch for bootdisks other than A BDOS1:: .PHASE BDOS ; low memory REBOOT EQU 0000H ;reboot system IOLOC EQU 0003H ;i/o byte location BDOSA EQU 0006H ;address field of jmp BDOS ; bios access constants BOOTF EQU BIOS+3*0 ;cold boot function WBOOTF EQU BIOS+3*1 ;warm boot function CONSTF EQU BIOS+3*2 ;console status function CONINF EQU BIOS+3*3 ;coTrack-Info K NKKKKKKKK KNC10,FUNC11 DEFW FUNC12,FUNC13,FUNC14,FUNC15 DEFW FUNC16,FUNC17,FUNC18,FUNC19 DEFW FUNC20,FUNC21,FUNC22,FUNC23 DEFW FUNC24,FUNC25,FUNC26,FUNC27 DEFW FUNC28,FUNC29,FUNC30,FUNC31 DEFW FUNC32,FUNC33,FUNC34,FUNC35 DEFW FUNC36,FUNC37,FUNC38,FUNC39 DEFW FUNC40 NFUNCS EQU ($-FUNCTAB)/2 ; error subroutines RODSUB: ;report write to read/only disk LD SP,LSTACK CALL CHECK$WRITE LD BC,(SFUNCN) LD HL,(SINFO) JP BDOSE1 ROFSUB:;report read/only file CALL CRLF CALL CRLF LD A,(CURDST PRINT: ;print message until M(BC) = '$' LD A,(BC) CP '$' RET Z INC BC PUSH BC LD C,A CALL TABOUT POP BC JR PRINT READ: ;read to info address (max length, current length, buffer) LD A,(COLUMN) LD (STRTCOL),A LD HL,(INFO) LD C,(HL) INC HL PUSH HL LD B,0 READNX: PUSH BC PUSH HL READN0: CALL CONIN POP HL POP BC CP CR JP Z,READEN CP LF JP Z,READEN CP CTLH JR NZ,NOTH LD A,B OR A JR Z,READNX DEC B LD A,(COLUMN) LD (COMPCOL),A JR LINELEN NK) ADD A,'A' LD (DSKERR),A LD BC,DSKMSG CALL ROFS1 PUSH AF CALL CRLF POP AF AND 05FH XOR 'I' JP Z,RETMON RST 0 ROFS1: CALL PRINT CONIN: ;read console character to A LD HL,KBCHAR LD A,(HL) LD (HL),0 OR A RET NZ JP CONINF CONECH: ;read character with echo CALL CONIN CALL ECHOC RET C PUSH AF LD C,A CALL TABOUT POP AF RET ECHOC: ;echo character if graphic ;cr, lf, tab, or backspace CP CR RET Z CP LF RET Z CP TAB RET Z CP CTLH RET Z OTH: ;not a backspace CP RUBOUT JR NZ,NOTRUB LD A,B OR A JR Z,READNX LD A,(HL) DEC B DEC HL JR RDECH1 NOTRUB:;not a rubout character, check end line CP CTLE JR NZ,NOTE PUSH BC PUSH HL CALL CRLF XOR A LD (STRTCOL),A JR READN0 NOTE: ;not end of line, list toggle? CP CTLP JR NZ,NOTP PUSH HL LD HL,LISTCP LD A,1 SUB (HL) LD (HL),A POP HL JR READNX NOTP: ;not a ctlp, line delete? CP CTLX JR NZ,NOTX POP HL BACKX: LD A,(STRTCOL) LD HL,COLUMN CPCP ' ' RET CONBRK: ;check for character ready LD A,(KBCHAR) OR A JR NZ,CONB1 CALL CONSTF AND 1 RET Z CALL CONINF CP CTLS JR NZ,CONB0 CALL CONINF CP CTLC JP Z,REBOOT XOR A RET CONB0: LD (KBCHAR),A CONB1: LD A,1 RET CONOUT: ;compute character position/write console char from C ;compcol = true if computing column position LD A,(COMPCOL) OR A JR NZ,COMPOUT PUSH BC CALL CONBRK POP BC PUSH BC CALL CONOUTF POP BC PUSH BC LD A,(LISTCP) OR A CALL NZ (HL) JR NC,READ DEC (HL) CALL BACKUP JR BACKX NOTX: ;not a control x, control u? ;not control-X, control-U? CP CTLU JR NZ,NOTU CALL CRLFP POP HL JR READ NOTU: ;not line delete, repeat line? CP CTLR JR NZ,NOTR LINELEN: ;repeat line, or compute line len (ctlh) ;if compcol > 0 PUSH BC CALL CRLFP POP BC POP HL PUSH HL PUSH BC REP0: LD A,B OR A JR Z,REP1 INC HL LD C,(HL) DEC B PUSH BC PUSH HL CALL CTLOUT POP HL POP BC JR REP0 REP1: PUSH ,LISTF POP BC COMPOUT: LD A,C LD HL,COLUMN CP RUBOUT RET Z INC (HL) CP ' ' RET NC DEC (HL) LD A,(HL) OR A RET Z LD A,C CP CTLH JR NZ,NOTBACKSP DEC (HL) RET NOTBACKSP: CP LF RET NZ LD (HL),0 RET CTLOUT: ;send C character with possible preceding up-arrow LD A,C CALL ECHOC JR NC,TABOUT PUSH AF LD C,CTL CALL CONOUT POP AF OR 40H LD C,A TABOUT: ;expand tabs to console LD A,C CP TAB JR NZ,CONOUT TAB0: LD C,' ' CALL CONOUT LD A,(COLUMN) HL LD A,(COMPCOL) OR A JP Z,READN0 LD HL,COLUMN SUB (HL) LD (COMPCOL),A BACKSP: ;move back one more space CALL BACKUP LD HL,COMPCOL DEC (HL) JR NZ,BACKSP JP READN0 NOTR: ;not a ctlr, place into buffer RDECHO: INC HL LD (HL),A INC B RDECH1: PUSH BC PUSH HL LD C,A CALL CTLOUT POP HL POP BC LD A,(HL) CP CTLC LD A,B JR NZ,NOTC CP 1 JP Z,REBOOT NOTC: ;not reboot, are we at end of buffer? CP C JP C,READNX READEN: ;end of read operation, store blen POP AND 7 JR NZ,TAB0 RET BACKUP: ;back-up one screen position CALL PCTLH LD C,' ' CALL CONOUTF PCTLH: ;send ctlh to console without affecting column count LD C,CTLH JP CONOUTF CRLFP: ;print #, cr, lf for ctlx, ctlu, ctlr functions ;then move to strtcol (starting column) LD C,'#' CALL CONOUT CALL CRLF CRLFP0: LD A,(COLUMN) LD HL,STRTCOL CP (HL) RET NC LD C,' ' CALL CONOUT JR CRLFP0 CRLF: ;carriage return line feed sequence LD C,CR CALL CONOUT LD C,LF JP CONOUTrack-Info K NKKKKKKKK KHL LD (HL),B LD C,CR JP CONOUT FUNC1: ;return console character with echo CALL CONECH JR STA$RET ;write console character with tab expansion FUNC2 EQU TABOUT FUNC3: ;return reader character CALL READERF JR STA$RET ;FUNC4: equated to punchf ;write punch character ;FUNC5: equated to listf ;write list character ;write to list device FUNC6: ;direct console i/o - read if 0ffh LD A,C INC A JR Z,DIRINP INC A JP Z,CONSTF JP CONOUTF DIRINP: CALL CONSTF OR A ,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0 ELSE DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0 ENDC ;BIGDSK .DEPHASE BDOS2:: END  ENDC ;MLTBOT COND BIGDSK ARECORDH: DEFW 0 ;bits 31..16 of actual record DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0JP Z,RETMON CALL CONINF JR STA$RET FUNC7: ;return io byte LD A,(IOLOC) JR STA$RET FUNC8: ;set i/o byte LD HL,IOLOC LD (HL),C RET FUNC9: ;write line until $ encountered EX DE,HL LD C,L LD B,H JP PRINT ;read a buffered console line FUNC10 EQU READ FUNC11: ;check console status CALL CONBRK STA$RET: ;store the A register to aret LD (ARET),A FUNC$RET: RET SETLRET1: ;set lret = 1 LD A,1 JR STA$RET INCLUDE NIPBDOS1 DSKMSG: DEFM 'BDOS error on ' DSKBC PUSH HL PUSH DE IN A,(0E0) LD (HL),C LD C,D LD B,0 LD D,H LD E,L CLROL5: INC DE DEC C JR Z,CLROL3 CLROL6: LDIR CLROL3: IN A,(0E1) POP DE POP HL LD A,D LD D,0 ADD HL,DE LD D,A POP BC DJNZ CLROL2 EI RET CLRSCR: CALL PUAL LD IY,CRTBASE LD HL,0 CALL UMXY LD B,(IY+HGTW-CRTBASE) CLRSCR1: CALL CLREOL DI CALL CUROF INC (IY+CPOSY-CRTBASE) EI DJNZ CLRSCR1 XOR A CALL UMY RET SETCOL: CALL PUAL AND 0F ERR: DEFM ' :Read/only file:Abort/Ignore' DEFB 7,'$' EFCB: DEFB EMPTY RODSK: DEFW 0 ;read only disk vector DLOG: DEFW 0 ;logged-in disks DMAAD: DEFW TBUFF ;initial dma address CDRMAXA:DEFW 0 CURTRKA:DEFW 0 CURRECA:DEFW 0 BUFFA: DEFW 0 DPBADDR:DEFW 0 CHECKA: DEFW 0 ALLOCA: DEFW 0 ADDLIST EQU $-BUFFA SECTPT: DEFW 0 BLKSHF: DEFB 0 BLKMSK: DEFB 0 EXTMSK: DEFB 0 MAXALL: DEFW 0 DIRMAX: DEFW 0 DIRBLK: DEFW 0 CHKSIZ: DEFW 0 OFFSET: DEFW 0 DPBLIST EQU $-SECTPT TRANV: DEFW 0 FCLD B,A LD A,(TEXTATTR) AND 0F0 COLOR1: OR B LD (TEXTATTR),A RET SETPAP: CALL PUAL RRCA RRCA RRCA RRCA AND 0F0 LD B,A LD A,(TEXTATTR) AND 0F JR COLOR1 SETWIN: CALL PUAL DEC L DEC H DEC E DEC D LD A,(MAXX) CP E JR NC,SETWIN3 LD E,A SETWIN3: CP L JR NC,SETWIN4 LD L,A SETWIN4: LD A,(MAXY) CP D JR NC,SETWIN5 LD D,A SETWIN5: CP H JR NC,SETWIN6 LD H,A SETWIN6: LD A,E CP L JR NC,SETWIN1 LD E,L LD L,A SETWIN1B$COPIED: DEFB 0 RMF: DEFB 0 DIRLOC: DEFB 0 SEQIO: DEFB 0 LINFO: DEFB 0 DMINX: DEFB 0 SEARCHL: DEFB 0 SEARCHA: DEFW 0 ;search address TINFO: DEFW 0 ;temp for info in "make" SINGLE: DEFB 0 RESEL: DEFB 0 OLDDSK: DEFB 0 FCBDSK: DEFB 0 RCOUNT: DEFB 0 EXTVAL: DEFB 0 VRECORD:DEFW 0 ARECORD:DEFW 0 ARECORD1: DEFW 0 DPTR: DEFB 0 DCNT: DEFW 0 DREC: DEFW 0 SFUNCN: DEFB 0 ;to store function number SINFO: DEFW 0 ;to store INFO parameter COMPCOL: DEFB 0 STRTCOL: DEFB 0 COLUMN: DEFB 0 L: LD A,D CP H JR NC,SETWIN2 LD D,H LD H,A SETWIN2: DI CALL CUROF LD (WINDMIN),HL LD (WINDMAX),DE EX DE,HL OR A SBC HL,DE INC H INC L LD (SIZEW),HL LD HL,0 LD (CPOS),HL EI RET CPYVRAM: CALL PUAL LD IY,CRTBASE LD A,C OR A RET Z LD A,B OR A RET Z LD A,L CP E LD A,0B0 JR NC,CPYV4 LD A,C ADD A,L LD L,A LD A,C ADD A,E LD E,A DEC L DEC E LD A,0B8 CPYV4: LD (CPYV1+1),A LD A,H CP D LD A,(MAXXISTCP: DEFB 0 KBCHAR: DEFB 0 ENTSP: DEFW 0 DEFW 0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0 COND BIGDSK DEFW 0 ;big disk support may need 1 stack level more ENDC ;BIGDSK LSTACK: USRCODE:DB 0 CURDSK: DB 0 INFO: DEFW 0 ARET: DEFW 0 LRET EQU ARET VE9C9: DEFB 0 COND MLTBOT BOTDSK DEFB 0 ;cislo bootovacieho disku ENDC ;MLTBOT COND BIGDSK ARECORDH: DEFW 0 ;bits 31..16 of actual record DEFB 0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0Track-Info L NLLLLLLLL L) INC A JR C,CPYV6 PUSH AF CALL VPOSIT EX DE,HL CALL VPOSIT EX DE,HL POP AF JR CPYV5 CPYV6: LD A,B ADD A,H LD H,A LD A,B ADD A,D LD D,A CALL VPOSIT EX DE,HL CALL VPOSIT PUSH BC LD A,(MAXX) CPL LD C,A LD B,0FF ADD HL,BC EX DE,HL ADD HL,BC POP BC CPYV5: LD (CPYV2+1),A ADD A,A SBC A,A LD (CPYV2+2),A LD A,B ADD A,A ADD A,A ADD A,A LD B,A CPYV3: LD A,1 CALL CPYV0 LD A,2 BIT 2,(IY+CRTMODE-CRTBASE) LL2 SCROLL3: POP HL CALL UMXY RET SCROLLL: CALL PUAL LD HL,(WINDMIN) LD D,H LD E,L INC L LD BC,(SIZEW) DEC C CALL CPYVRAM LD HL,(CPOS) PUSH HL LD H,0 LD L,C SCROLL4: CALL UMXY CALL CLREOL INC H DJNZ SCROLL4 JR SCROLL3 ENDC UMXY: DI CALL CUROF LD (CPOS),HL EI RET SETX: CALL PUAL LD L,A SETX0: LD A,(LGTW) CP L JR C,SETX1 LD A,L SETX1: DEC A UMX: DI CALL CUROF LD (CPOSX),A EI RET SETY: CALL PUAL CALL Z,CPYV0 LD A,4 BIT 1,(IY+CRTMODE-CRTBASE) CALL NZ,CPYV0 LD A,(CRTMODE) CP 2 LD A,8 CALL Z,CPYV0 PUSH BC CPYV2: LD BC,MAXCOLS ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL POP BC DJNZ CPYV3 RET CPYV0: DI CALL CUROF OUT (0CC),A OUT (0CD),A PUSH BC PUSH DE PUSH HL LD B,0 IN A,(0E0) CPYV1: LDIR IN A,(0E1) POP HL POP DE POP BC EI RET LOADIMG: CALL PUAL PUSH HL LD HL,0771A LD A,0E0 JR SAVEIMG1 SAVEIMG: CAL LD H,A SETY0: LD A,(HGTW) CP H JR C,SETY1 LD A,H SETY1: DEC A UMY: DI CALL CUROF LD (CPOSY),A EI RET SETXY: CALL PUAL CALL SETX0 JR SETY0 WHEREXY: LD HL,(CPOS) INC H INC L RET WHEREX: LD A,(CPOSX) INC A RET WHEREY: LD A,(CPOSY) INC A RET SETCHAR: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IY LD IY,CRTBASE PUSH AF LD HL,(WINDMIN) LD DE,(CPOS) ADD HL,DE CALL VPOSIT POP AF LD C,A CP 020 SBC A,A BIL PUAL PUSH HL LD HL,0127E LD A,0E1 SAVEIMG1: LD IY,SAVEI3 LD (IY+4),L LD (IY+7),H LD (IY+1),A XOR 1 LD (IY+3),A POP HL LD A,B OR A RET Z LD A,C OR A RET Z LD IY,CRTBASE CALL VPOSIT LD A,B ADD A,A ADD A,A ADD A,A LD B,A LD A,1 CALL SAVEI0 LD A,2 BIT 2,(IY+CRTMODE-CRTBASE) CALL Z,SAVEI0 LD A,4 BIT 1,(IY+CRTMODE-CRTBASE) CALL NZ,SAVEI0 LD A,(CRTMODE) CP 2 RET NZ LD A,8 SAVEI0: DI CALL CUROF OUT (0CC)T 0,(IY+INVERSE-CRTBASE) JR Z,SETCH0 CPL SETCH0: DI CALL CUROF CALL SETCH EI POP IY POP HL POP DE POP BC POP AF RET SETCH: PUSH HL LD HL,SETCH4+1 LD DE,SETCH5+1 OR A JR Z,SETCH6 EX DE,HL SETCH6: CALL PALPOZ OR 0C0 LD (HL),A CALL PALPIS OR 0C0 LD (DE),A LD A,C COND NORTON LD HL,CG1 SUB 020 JR NC,SETCH1 ADD A,40 SETCH1: LD E,A ELSE LD HL,(ACG1) SUB 020 JR NC,SETCH1 ADD A,040 SETCH1: CP 060 JR C,A OUT (0CD),A PUSH HL PUSH BC SAVEI2: PUSH BC PUSH HL LD B,C SAVEI3: LD C,0E1 SAVEI1: IN A,(0E0) LD A,(HL) DEFB 0ED,070 LD (DE),A INC HL INC DE DJNZ SAVEI1 IN A,(0E1) POP HL LD A,(MAXX) INC A ADD A,L LD L,A ADC A,H SUB L LD H,A POP BC DJNZ SAVEI2 POP BC POP HL EI RET SCROLLH: CALL PUAL LD HL,(WINDMIN) LD D,H LD E,L INC H LD BC,(SIZEW) DEC B CALL CPYVRAM LD HL,(CPOS) PUSH HL LD HL,(SIZEW),SETCH2 LD HL,(ACG2) SUB 060 SETCH2: LD E,A ENDC LD D,0 EX DE,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE EX DE,HL POP HL LD C,(IY+MAXX-CRTBASE) INC C LD B,0 PUSH HL SETCH4: LD A,0 OUT (0CC),A IN A,(0E0) LD A,0FF LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A ADD HL,BC LD (HL),A IN A,(0E1) SETCH5: LD A,0 OUT (0CC) DEC H SCROLL1: LD L,0 CALL UMXY CALL CLREOL POP HL CALL UMXY RET SCROLLD: CALL PUAL LD HL,(WINDMIN) LD D,H LD E,L INC D LD BC,(SIZEW) DEC B CALL CPYVRAM LD HL,(CPOS) PUSH HL LD H,0 JR SCROLL1 COND NORTON SCROLLP: RET SCROLLL: RET ELSE SCROLLP: CALL PUAL LD HL,(WINDMIN) LD D,H LD E,L INC E LD BC,(SIZEW) DEC C CALL CPYVRAM LD HL,(CPOS) PUSH HL LD HL,0 SCROLL2: CALL UMXY CALL CLRBOL INC H DJNZ SCROTrack-Info L NLLLLLLLL L,A POP HL IN A,(0E0) LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A INC DE ADD HL,BC LD A,(DE) LD (HL),A IN A,(0E1) RET SETBOP: PUSH AF XOR A SETBOP1: CALL UMY POP AF RET SETEOP: PUSH AF LD A,(HGT CALL CUROF LD A,NO LD (CURENAH),A POP AF EI RET CURENA: PUSH AF LD A,YES LD (CURENAH),A DI CALL CURON EI POP AF RET TIMDIS: PUSH AF LD A,NO TIMDIS1: LD (TIMENAH),A POP AF RET TIMENA: PUSH AF LD A,YES JR TIMDIS1 SIZEIMG: PUSH AF PUSH BC PUSH DE PUSH IY LD IY,CRTBASE LD E,L LD D,0 LD A,H LD B,8 LD HL,0 SIZEIMG1: RRCA JR NC,SIZEIMG2 ADD HL,DE SIZEIMG2: EX DE,HL ADD HL,HL EX DE,HL DJNZ SIZEIMG1 ADDW) DEC A JR SETBOP1 SETBOL: PUSH AF XOR A SETBOL1: CALL UMX POP AF RET SETEOL: PUSH AF LD A,(LGTW) DEC A JR SETBOL1 PUTCHAR: CALL SETCHAR SETRIGHT: DI CALL CUROF PUSH AF PUSH HL LD HL,CPOSX LD A,(LGTW) DEC A INC (HL) CP (HL) JR C,SETRIG2 DI CALL CURON EI POP HL POP AF RET SETRIG2: LD (HL),0 CALL SETDOWN POP HL POP AF RET SETDOWN: DI CALL CUROF CALL PUAL LD HL,CPOSY LD A,(HGTW) DEC A INC (HL) CP ( HL,HL ADD HL,HL ADD HL,HL LD D,H LD E,L BIT 2,(IY+CRTMODE-CRTBASE) JR NZ,SIZEIMG3 ADD HL,DE SIZEIMG3: BIT 1,(IY+CRTMODE-CRTBASE) JR Z,SIZEIMG4 ADD HL,DE SIZEIMG4: LD A,(CRTMODE) CP 2 JR NZ,SIZEIMG5 ADD HL,DE SIZEIMG5: POP IY POP DE POP BC POP AF RET GETWIN: LD HL,(WINDMIN) LD DE,(WINDMAX) INC H INC L INC D INC E RET GETLGTW: LD A,(LGTW) RET GETHGTW: LD A,(HGTW) RET GETSIZEW: LD HL,(SIZEW) RET GETMAXX: LD A,(MAXX) INC AHL) JR NC,SETON DEC (HL) CALL SCROLLH JR SETON SETLEFT: DI CALL CUROF CALL PUAL LD HL,CPOSX LD A,(HL) OR A CALL Z,SETEOL JR Z,SETUP1 DEC (HL) SETON: DI CALL CURON EI RET SETUP: DI CALL CUROF CALL PUAL SETUP1: LD HL,CPOSY LD A,(HL) OR A CALL Z,SCROLLD JR Z,SETON DEC (HL) JR SETON SETTRUE: PUSH AF XOR A LD (INVERSE),A POP AF RET SETINV: PUSH AF LD A,YES LD (INVERSE),A POP AF RET CUROF: PUSH AF LD RET GETMAXY: LD A,(MAXY) INC A RET GETMAX: LD HL,(MAXX) INC H INC L RET SAVEWIN: CALL PUAL LD DE,WINDMEMA EX DE,HL SAVEWIN1: LD BC,CRTMEMA-WINDMEMA LDIR RET LOADWIN: CALL PUAL LD DE,WINDMEMA JR SAVEWIN1 SIZEWIN: LD HL,CRTMEMA-WINDMEMA RET ;***************************************************************** VARS: SIFTY: DEFB 0; 1-SHIFT ; 2-CTRL ; 3-GRAPH ; 4-SHIFT+GRAPH YKE1: DEFB 0 YKE3: DEFW 0 KEYF: DEFB NO YINST: DEFB 0 LASTK: DEA,(CURSEE) OR A JR NZ,CURON1 CUROF1: POP AF RET CURON: PUSH AF LD A,(CURPER) LD (CURREPT),A LD A,(CURSEE) OR A JR NZ,CUROF1 CURON1: POP AF CURINV: PUSH AF PUSH IY LD IY,CRTBASE LD A,(CURENAH) AND (IY+CURENAS-CRTBASE) OR (IY+CURSEE-CRTBASE) JR Z,CURINV3 PUSH BC PUSH DE PUSH HL LD HL,CURDEF1-8 LD DE,8 LD B,(IY+CURTYP-CRTBASE) CURINV1: ADD HL,DE DJNZ CURINV1 PUSH HL LD HL,(WINDMIN) LD DE,(CPOS) ADD HL,DE CALL VPOSIT POP DFB 0 REPT: DEFB 020 REPTD: DEFB 020 REPTK: DEFB 02 CRT: DEFB 2 KBDLEN: DEFB 0 KBDBUF: DEFM "0123456789ABCDEF" DEFB 0 ADRKODU: DEFW 0 ODLSP: DEFW 0 PRERV1: DEFW PRER NOP PRERV2: DEFW PRER PRERT: DEFB 0CF,03F,097,0DF COND NORTON KEYS: DEFW 4102 DEFW 4202 DEFW 4302 DEFW 4402 DEFW 4502 SKEYS: DEFW 4602 DEFW 4702 DEFW 4802 DEFW 4902 DEFW 4A02 CKEYS: DEFW 4B02 DEFW 4C02 DEFW 4D02 DEFW 4E02 DEFW 4F02 GKEYS: DEFW 5002 DEFW 5102 DEE EX DE,HL LD C,(IY+MAXX-CRTBASE) LD B,8 LD A,02F OUT (0CC),A IN A,(0E0) CURINV2: LDI INC C LD A,C ADD A,E LD E,A ADC A,D SUB E LD D,A DJNZ CURINV2 IN A,(0E1) LD A,(IY+CURSEE-CRTBASE) CPL LD (IY+CURSEE-CRTBASE),A POP HL POP DE POP BC CURINV3: POP IY POP AF RET CURSCAN: PUSH AF LD A,(CURREPT) DEC A JR NZ,CURSCAN1 CALL CURINV CURSCAN2: LD A,(CURPER) CURSCAN1: LD (CURREPT),A POP AF RET CURDIS: DI PUSH AF Track-Info M NMMMMMMMM MFW 5202 DEFW 5302 DEFW 5402 SGKEYS: DEFW 5502 DEFW 5602 DEFW 5702 DEFW 5802 DEFW 5902 ELSE KEYS: DEFW 411B,0,0,0,0,0,0,0 DEFW 421B,0,0,0,0,0,0,0 DEFW 431B,0,0,0,0,0,0,0 DEFW 441B,0,0,0,0,0,0,0 DEFW 451B,0,0,0,0,0,0,0 SKEYS: DEFW 461B,0,0,0,0,0,0,0 DEFW 471B,0,0,0,0,0,0,0 DEFW 481B,0,0,0,0,0,0,0 DEFW 491B,0,0,0,0,0,0,0 DEFW 4A1B,0,0,0,0,0,0,0 CKEYS: DEFW 4B1B,0,0,0,0,0,0,0 DEFW 4C1B,0,0,0,0,0,0,0 DEFW 4D1B,0,0,0,0,0,0,0 DEFW 4E1B,0,0,0,0,0,0,0 SIFT1+3,4411 DEFW CTRL1+0,5411 CAPSLOCK: DEFW AALPHA TABJO: DEFB 00B,00E,013,004 DEFB 0D,01B,0 SCANKEY: LD IY,VARS LD HL,0 LD (ADRKODU),HL LD (IY+SIFTY-VARS),0 LD A,(IY+YKE1-VARS) OR A JP NZ,FKEY LD C,0D0 LD DE,0F000 A3: OUT (C),D LD B,008 IN A,(0D1) CP 0FF JR NZ,A4 LD A,8 ADD A,E LD E,A JR A30 A4: RRCA JR C,A26 LD L,A LD A,0F0 CP D JR NZ,A5 LD A,2 CP B JR NZ,A5 LD A,L A26: INC E DJNZ A4 A30: INC D BIT DEFW 4F1B,0,0,0,0,0,0,0 GKEYS: DEFW 501B,0,0,0,0,0,0,0 DEFW 511B,0,0,0,0,0,0,0 DEFW 521B,0,0,0,0,0,0,0 DEFW 531B,0,0,0,0,0,0,0 DEFW 541B,0,0,0,0,0,0,0 SGKEYS: DEFW 551B,0,0,0,0,0,0,0 DEFW 561B,0,0,0,0,0,0,0 DEFW 571B,0,0,0,0,0,0,0 DEFW 581B,0,0,0,0,0,0,0 DEFW 591B,0,0,0,0,0,0,0 ENDC TABKB: DEFB 00D,03A,03B,009 AALPHA: DEFB 001,007,01B,008 DEFB 000,000,000,05D,05B,040,05A,059 DEFB 058,057,056,055,054,053,052,051 DEFB 050,04F,04E,04D,04C,04B,04A,049 DEFB 3,D JR Z,A3 A5: LD D,0F0 OUT (C),D LD D,0F8 IN A,(0D1) BIT 6,A JR NZ,A31 LD (IY+SIFTY-VARS),3 A31: OUT (C),D INC D IN A,(0D1) OUT (C),D RRCA JR C,A27 INC (IY+SIFTY-VARS) A27: RLCA RLCA JR C,A28 LD E,6 A28: RLCA JR C,A29 LD (IY+SIFTY-VARS),2 A29: IN A,(0D1) INC A JR Z,A9 DEC A LD B,0 A6: RLCA JR NC,A7 INC B JR A6 A7: LD A,(IY+SIFTY-VARS) LD C,A ADD A,A ADD A,A ADD A,C ADD A,B LD L,A LD H,0 ADD HL,048,047,046,045,044,043,042,041 DEFB 038,037,036,035,034,033,032,031 DEFB 02E,02C,039,030,020,02D,05E,05C DEFB 02F,03F,013,004,00E,00B,07F,016 ; DEFB 00D,02A,02B,009,000,007,003,008 DEFB 000,000,000,07D,07B,060,07A,079 DEFB 078,077,076,075,074,073,072,071 DEFB 070,06F,06E,06D,06C,06B,06A,069 DEFB 068,067,066,065,064,063,062,061 DEFB 028,027,026,025,024,023,022,021 DEFB 03E,03C,029,05F,020,03D,07E,07C SIFT1: DEFB 011,011,011,011,017,012,018,019 ; DEFB 00D,000,000,009,000,HL COND NORTON ELSE ADD HL,HL ADD HL,HL ADD HL,HL ENDC LD DE,KEYS ADD HL,DE LD (IY+YKE3-VARS),L LD (IY+YKE3+1-VARS),H LD (IY+YKE1-VARS),0 FKEY: LD A,(IY+YKE1-VARS) INC A COND NORTON CP 03 ELSE CP 011 ENDC JR NZ,D11 XOR A LD (IY+YKE1-VARS),A SCF RET D11: LD (IY+YKE1-VARS),A LD E,(IY+YKE3-VARS) LD D,(IY+YKE3+1-VARS) LD A,(DE) INC DE LD (IY+YKE3-VARS),E LD (IY+YKE3+1-VARS),D OR A SCF RET NZ 007,003,008 DEFB 000,000,000,01D,01B,000,01A,019 DEFB 018,017,016,015,014,013,012,011 DEFB 010,00F,00E,00D,00C,00B,00A,009 DEFB 008,007,006,005,004,003,002,001 DEFB 000,000,000,000,000,000,000,000 DEFB 000,000,000,01F,020,000,01E,01C CTRL1: DEFB 011,014,001,006,01D,00C,002,000 ; DEFB 00D,029,0D0,009,000,007,01B,008 DEFB 000,000,000,0CE,0D1,0D5,0FA,0F9 DEFB 0F8,0F7,0F6,0F5,0F4,0F3,0F2,0F1 DEFB 0F0,0EF,0EE,0ED,0EC,0EB,0EA,0E9 DEFB 0E8,0E7,0E6,0E5,0E4,0E3,0E2,0E1 DEFB 0C1LD (IY+YKE1-VARS),A RET A9: BIT 6,E JR NZ,A12 LD HL,TABKB LD B,(IY+SIFTY-VARS) XOR A RR B RRA RR B RRA OR E LD C,A ADD HL,BC LD (ADRKODU),HL LD A,(HL) BIT 0,(IY+YINST-VARS) JR Z,A12 LD HL,0415B CALL JEVINT LD HL,0617B CALL JEVINT LD HL,0C1DB CALL JEVINT LD HL,0E1FB CALL JEVINT A12: OR A RET NZ LD A,0CF OUT (0D0),A IN A,(0F0) LD C,A IN A,(0F1) AND C LD B,6 LD HL,TABJO D5: RRA JR NC,D6 INC HL DJNZ,0D9,0DA,0D4,0C3,0D3,0CC,02B DEFB 02E,02C,0C9,0D7,020,087,08A,084 DEFB 02D,000,013,004,00E,00B,07F,016 ; DEFB 00D,021,022,009,000,007,003,008 DEFB 000,000,000,03A,028,02F,0DA,0D9 DEFB 0D8,0D7,0D6,0D5,0D4,0D3,0D2,0D1 DEFB 0D0,0CF,0CE,0CD,0CC,0CB,0CA,0C9 DEFB 0C8,0C7,0C6,0C5,0C4,0C3,0C2,0C1 DEFB 09F,09E,09D,09C,094,093,092,091 DEFB 03A,03F,095,099,020,09A,09B,096 DEFB 05F,000,001,006,01D,00C,018,019 DKODY: DEFW SIFT1+0,5911 DEFW SIFT1+1,5911 DEFW SIFT1+2,5311 DEFWTrack-Info M NMMMMMMMM M D5 D6: LD A,(HL) OR A RET JEVINT: CP H RET C CP L RET NC XOR 020 POP HL JR A12 COND NO BEEPK: PUSH BC LD BC,0200 BEEPK0: PUSH AF LD A,090 OUT (0F2),A LD A,1 OUT (0D3),A BEEPK1: DEC BC LD A,B OR C JR NZ,BEEPK1 LD A,09F OUT (0F2),A XOR A OUT (0D3),A POP AF POP BC RET BEEPD: PUSH BC LD BC,1000 JR BEEPK0 ELSE BEEPK EQU CURON BEEPD EQU CURON ENDC PRERKBD: LD IY,VARS CALL SCANKEY LD L,(IY+REPTD-TEST JR Z,KBDREAD1 LD IY,VARS LD HL,KBDBUF+1 LD DE,KBDBUF LD BC,010 LD A,(DE) DI DEC (IY+KBDLEN-VARS) LDIR OR A EI RET COND TEST BRDON: PUSH BC LD BC,06CF OUT (C),C POP BC RET BRDOF: PUSH AF PUSH BC LD BC,06CF XOR A OUT (C),A POP BC POP AF RET BRDON1: PUSH BC LD BC,06CF OUT (C),B POP BC RET ENDC TABKAM: DEFB 0E3,0C8,0D7,0C4,0D1,0E4,0F4,0C3 DEFB 0C5,0E5,0EB,0E9,0CC,0CB,0F1,0E1 DEFB 0F7,0DA,0FA,0D0,0CD,0EFVARS) JR NC,PRERKBD1 JR NZ,PRERKBD5 LD (IY+KEYF-VARS),YES JR PRERKBD3 PRERKBD5: BIT 0,(IY+KEYF-VARS) JR Z,PRERKBD2 XOR A JR PRERKBD3 PRERKBD1: LD (IY+KEYF-VARS),NO OR A JR Z,PRERKBD3 CP (IY+LASTK-VARS) JR NZ,PRERKBD2 DEC (IY+REPT-VARS) JR NZ,PRERKBD4 LD L,(IY+REPTK-VARS) PRERKBD2: PUSH HL CALL SIFT POP HL PRERKBD3: LD (IY+LASTK-VARS),A LD (IY+REPT-VARS),L PRERKBD4: RET SIFT: PUSH AF LD B,CAPSLOCK-DKODY SRL B SRL B LD HL,(ADRKODU) LD ,0CA,0F5 DEFB 0D9,0ED,0E8,0F3,0EC,0F9,0F2,0D4 DEFB 0C1,0C9,0CF,0D5,0CE,0EE,0EA,0F0 DEFB 0D3,0D2,0C6,0E6,0AC,083,0AE,0AF DEFB 080,080,081,0E7,0F6,084,085,086 DEFB 087,088,089,08A,08B,08C,08D,0E0 DEFB 0C2,0FB,0DB,0D6,0C7,0DF,08E,08F DEFB 090,091,092,093,094,095,082,0DC DEFB 0AB,099,09A,09B,09C,09D,09E,09F DEFB 0D8,0E2,0C0,096,097,0DD,0DE,098 DEFB 0B0,0B1,0B2,0B3,0B4,0B5,0B6,0B7 DEFB 0B8,0B9,0BA,0BB,0BC,0BD,0BE,0BF DEFB 0A0,0A1,0A2,0A3,0A4,0A5,0A6,0A7 DEFB 0A8,0F8,0FD,0A9DE,DKODY PRERKBD6: LD A,(DE) INC DE CP L JR NZ,PRERKBD7 LD A,(DE) CP H PRERKBD7: INC DE JR NZ,PRERKBD8 LD A,(KBDLEN) CP 0F CALL NC,BEEPD JR NC,PRERKBD9 CALL BEEPK LD HL,KBDBUF LD C,A LD B,0 ADD HL,BC EX DE,HL LDI LDI ADD A,2 LD (KBDLEN),A PRERKBD9: POP AF RET PRERKBD8: INC DE INC DE DJNZ PRERKBD6 LD A,(DE) INC DE CP L JR NZ,PRERKB10 LD A,(DE) CP H JR NZ,PRERKB10 CALL CUROF LD A,(YINST) XOR 1 LD (YINST),,0FC,0AA,020,0FF TABLAT: DEFB 080,0C8,0D7,081,0D1,0CA,082,085 DEFB 086,087,088,089,08A,08D,0F1,08B DEFB 0F7,0EB,0CB,0D0,0CD,0EC,0CC,08C DEFB 08F,0ED,0E8,0F4,0D4,090,091,0C3 DEFB 0C1,0C9,0CF,0D5,092,093,0FA,0DA DEFB 094,095,0B4,0B5,0E3,0AD,0AE,0AF DEFB 0B7,099,09A,0E7,0F6,0E1,09B,0E5 DEFB 09C,09D,09E,09F,0A0,0A1,0A2,0E0 DEFB 0C2,0FB,0DB,0D6,0C7,0DF,0A3,0A4 DEFB 0A5,0A7,0A8,0A9,0AA,0AB,0AC,08E DEFB 0B0,0B1,0E4,0B2,0C4,0EE,0E9,0B3 DEFB 0C5,0E2,0C0,096,097,0B6,0EA,098 DEFA AND 1 INC A LD (CURTYP),A CALL CURON CALL BEEPK JR PRERKBD9 PRERKB10: POP AF LD E,(IY+KBDLEN-VARS) BIT 4,E JP NZ,BEEPD RET NZ LD D,0 LD HL,KBDBUF ADD HL,DE LD (HL),A INC (IY+KBDLEN-VARS) JP BEEPK RET PRER: LD (ODLSP),SP LD SP,STACKEND PUSH AF PUSH BC PUSH DE PUSH HL PUSH IY COND TEST CALL BRDON ENDC CALL PRERKBD CALL CURSCAN CALL PRERTIM CALL PREREXT CALL PRERIMG POP IY POP HL POP DE POP BC POPB 0EF,084,0F0,0B8,0B9,0CE,0F3,0D3 DEFB 0E6,0F5,0C6,0BA,0D9,0F9,0BB,0BC DEFB 0BD,0FC,0BE,0DC,0BF,083,0A6,0D8 DEFB 0DD,0DE,0F8,0FD,0F2,0D2,020,0FF KAMTOKOI: CP 080 RET C PUSH HL LD HL,TABKAM-080 KAMTO: ADD A,L LD L,A ADC A,H SUB L LD H,A LD A,(HL) POP HL RET LATTOKOI: CP 080 RET C PUSH HL LD HL,TABLAT-080 JR KAMTO KOITOKAM: CP 080 RET C PUSH HL LD HL,TABKAM KOITO1: PUSH DE PUSH BC LD BC,080 LD E,L LD D,H CPIR JR NZ,KOITO2 AF LD SP,(ODLSP) EI COND TEST CALL BRDOF ENDC RETI KBDINI: DI IM 2 PUSH AF PUSH BC PUSH HL LD HL,PRERV1 BIT 0,L JR Z,KBDINI1 LD HL,PRERV2 KBDINI1: LD A,H LD I,A LD BC,04FC OUT (C),L LD HL,PRERT OTIR LD A,09F LD B,4 KBDINI2: OUT (0F2),A ADD A,020 DJNZ KBDINI2 POP HL POP BC POP AF EI RETI KBDTEST: EI LD A,(KBDLEN) OR A JR Z,KBDTEST2 KBDTEST1: LD A,0FF KBDTEST2: RETI KBDREAD: CALL PUA KBDREAD1: CALL KBDTrack-Info N NNNNNNNNN N SCF SBC HL,DE LD A,080 ADD A,L KOITO2: POP BC POP DE POP HL RET KOITOLAT: CP 080 RET C PUSH HL LD HL,TABLAT JR KOITO1 PUTTMX: DEFB 0 PUTTMT: DEFW 0 DEL: PUSH AF LD A,010 LD DE,0 ADD HL,HL DEL1: EX DE,HL ADC HL,HL SBC HL,BC JR NC,DEL2 ADD HL,BC DEL2: CCF EX DE,HL ADC HL,HL DEC A JR NZ,DEL1 POP AF RET PUTTD: LD C,0A CALL DEL CALL PUTTT LD C,06 CALL DEL PUTTT: LD A,E ADD A,'0' PUTTC: PUSH BC PU EQU 31 DUSER EQU 32 DRDIR EQU 33 DWDIR EQU 34 DLEN EQU 35 DSRDA EQU 36 DINITD EQU 37 DWDIRN EQU 40 .RADIX 16 IBOOT EQU 0 IWBOOT EQU 3 ICONST EQU 6 ICONIN EQU 9 ICONOUT EQU 0C ILIST EQU 0F IPUNCH EQU 12 IREADER EQU 15 IHOME EQU 18 ISELDSK EQU 1B ISETTRK EQU 1E ISETSEC EQU 21 ISETDMA EQU 24 IREAD EQU 27 IWRITE EQU 2A ILISTST EQU 2D ISECTRAN EQU 30 PARAM1 EQU 5C PARAM2 EQU 6C LGTFBUF EQU 0A5 BDOS MACRO WORK LD C,WORK CALL 5 ENDM BIOS SH DE PUSH HL LD C,A LD IY,CRTBASE LD A,(PUTTMX) LD L,A DEC A LD (PUTTMX),A LD H,080 XOR A CALL SETCH POP HL POP DE POP BC RET PRERTIM: LD IY,CRTBASE CALL TIMSC RET Z LD A,(TIMENAH) AND (IY+TIMENAS-CRTBASE) RET Z LD A,(MAXX) DEC A LD (PUTTMX),A LD A,(TEXTATTR) PUSH AF LD A,04C LD (TEXTATTR),A LD HL,(TIME) LD A,(TIME+2) OR A JR Z,PRERTIM1 LD DE,0A8C0 SBC HL,DE PRERTIM1: LD B,0 CALL PUTTD LD A,':' CALLMACRO WORK LOCAL BIOSK LD HL,BIOSK PUSH HL PUSH DE LD DE,WORK-3 LD HL,(1) ADD HL,DE POP DE JP (HL) BIOSK: ENDM .RADIX 16 .COMMENT | DIO - MODUL PRE ULAHCENIE VSTUPNO-VYSTUPNYCH PRAC SO SUBORMI. ============================================================= -Typy premennych: FILE - premenna so strukturou: 0000 .. 0023 - miesto pre rozvinutie FCB 0024 - pocet aktualnych bajtov v buffri DMA 0025 .. 00A4 - buffer DMA -Vstupne body: RESET - PUTTC CALL PUTTD LD A,':' CALL PUTTC LD A,(TIME+2) OR A JR Z,PRERTIM2 LD A,0C ADD A,L LD L,A PRERTIM2: CALL PUTTD POP AF LD (TEXTATTR),A RET TIMSC: PUSH DE PUSH HL PUSH AF LD A,080 OUT (0D7),A IN A,(0D6) LD E,A IN A,(0D6) LD D,A LD HL,(TIMEO) OR A SBC HL,DE JR NZ,TIMSC1 TIMSC2: POP HL LD A,H POP HL POP DE RET TIMSC1: EX DE,HL LD (TIMEO),HL LD HL,(TIME) ADD HL,DE LD (TIME),HL LD A,(TIME+2) ADC A,Otvorenie suboru pre citanie po jednom bajte. ----- - VSTUP: HL - adresa premennej FILE DE - adresa prvych 12 bytov FCB - VYSTUP: CY=1, A=0FF - subor neexistuje CY=0, A - poradie polozky REWRITE - Otvorenie noveho suboru pre zapis po jednom bajte. ------- - VSTUP: HL - adresa premennej FILE DE - adresa prvych 12 bytov FCB - VYSTUP: CY=1, A=0FF - adresar je plny CY=0, A - poradie polozky WCLOSE - Uzavretie suboru urceneho pre zapis po jednom bajte ------ - VSTUP: HL - adres0 LD (TIME+2),A JR Z,TIMSC3 LD DE,05180 SBC HL,DE ADD HL,DE JR C,TIMSC3 SBC HL,DE LD (TIME),HL XOR A LD (TIME+2),A TIMSC3: XOR A INC A JR TIMSC2 STACK: DEFM "SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS" DEFM "SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS" STACKEND: END  HL POP DE RET TIMSC1: EX DE,HL LD (TIMEO),HL LD HL,(TIME) ADD HL,DE LD (TIME),HL LD A,(TIME+2) ADC A,a premennej FILE - VYSTUP: CY=1 - disk je plny CY=0 - OK READ - Nacitanie 1 bajtu zo suboru. ---- - VSTUP: HL - adresa premennej FILE - VYSTUP: CY=1 - bajty uz nie su CY=0, A - nacitany bajt WRITE - Zapis jedneho bajtu do suboru. ----- - VSTUP: HL - adresa premennej FILE A - zapisovany bajt - VYSTUP: CY=1 - disk je plny CY=0 - OK SETHEAD - Nastavenie disku, stopy, sektora a DMA ------- - VSTUP: A - cislo diku BC - cislo stopy DE - cislo sektoru HL - adres.Z80 .RADIX 10 EXT RESET,READ DBOOT EQU 0 DCONIN EQU 1 DCONOUT EQU 2 DRDRIN EQU 3 DPUNOUT EQU 4 DLSTOUT EQU 5 DCON EQU 6 DIOBIN EQU 7 DIOBOUT EQU 8 DMSGOUT EQU 9 DMSGIN EQU 10 DCONRD EQU 11 DVER EQU 12 DINIT EQU 13 DSELDSK EQU 14 DOPEN EQU 15 DCLOSE EQU 16 DSEARCH EQU 17 DNEXT EQU 18 DDEL EQU 19 DRSEQ EQU 20 DWSEQ EQU 21 DNEW EQU 22 DREN EQU 23 DRVAF EQU 24 DRNUM EQU 25 DSDMA EQU 26 DRAVF EQU 27 DSRO EQU 28 DRRO EQU 29 DSATR EQU 30 DRABPTrack-Info N NNNNNNNNN Na DMA -VYSTUP: CY=1, A=#FF - disk nie je CY=0, A=#00 - OK | MENO EQU PARAM1 BAZA EQU 02000 BUFFER: DEFS LGTFBUF MSUBOR: DEFM 0D,0A,'S',0D5,'bor $' MNEEX: DEFM ' neexistuje!$' MTVORIM: DEFM 0D,0A,0F4,'ah',0C1,'m obr',0C1,'zok, ',0C3,'akaj!$' PU: DEFW 0 PUAL: LD (PU),HL EX (SP),HL PUSH DE PUSH BC PUSH IX PUSH IY PUSH AF PUSH HL LD HL,POAL PU1: EX (SP),HL PUSH HL LD HL,(PU) RET POAL: POP AF POA: POP IY POP IX POP BC POP DE POP HL RET PUA: LD (PU),HL EX (SP),HL PUSH DE PUSH BC PUSH IX PUSH IY PUSH HL LD HL,POA JR PU1 PRNTC: CALL PUAL LD E,A BDOS DCONOUT RET MSG: CALL PUAL BDOS DMSGOUT RET MSGB: CALL PUAL MSGB1: LD A,(DE) INC DE CALL PRNTC DJNZ MSGB1 RET NEEX: LD DE,MSUBOR CALL MSG LD DE,MENO+1 LD B,8 CALL MSGB LD A,'.' CALL PRNTC LD DE,MENO+9 LD B,3 CALL MSGB LD DE,MNEEX CALL MSG JP 0 PALETY: DEFB 01,013,026,03F,040 INI: CALL PUAL LD A,6 OUT (0CE),A LD HL,PALETY LD BC,05F0 OTIR LD A,083 JR EXI1 EXI: CALL PUAL LD A,4 OUT (0CE),A XOR A OUT (0F0),A LD A,01F OUT (0F0),A LD A,081 EXI1: OUT (0CC),A OUT (0CD),A LD HL,08000 LD DE,08001 LD BC,03E7F IN A,(0E0) LD (HL),L LDIR IN A,(0E1) RET VDIR: OUT (0CC),A LD DE,08000 LD BC,04000 VDIR1: LD A,(HL) EX AF,AF' IN A,(0E0) EX AF,AF' LD (DE),A IN A,(0E1) INC HL INC DE DE.Z80 .RADIX 10 EXT REWRITE,WRITE,WCLOSE DBOOT EQU 0 DCONIN EQU 1 DCONOUT EQU 2 DRDRIN EQU 3 DPUNOUT EQU 4 DLSTOUT EQU 5 DCON EQU 6 DIOBIN EQU 7 DIOBOUT EQU 8 DMSGOUT EQU 9 DMSGIN EQU 10 DCONRD EQU 11 DVER EQU 12 DINIT EQU 13 DSELDSK EQU 14 DOPEN EQU 15 DCLOSE EQU 16 DSEARCH EQU 17 DNEXT EQU 18 DDEL EQU 19 DRSEQ EQU 20 DWSEQ EQU 21 DNEW EQU 22 DREN EQU 23 DRVAF EQU 24 DRNUM EQU 25 DSDMA EQU 26 DRAVF EQU 27 DSRO EQU 28 DRRO EQU 29 DSATR EQUC BC LD A,B OR C JR NZ,VDIR1 RET DMA: DEFW 0 READS: CALL PUAL LD DE,(DMA) PUSH DE BDOS DSDMA POP DE LD HL,080 ADD HL,DE LD (DMA),HL LD DE,BUFFER BDOS DRSEQ RET START:: LD SP,KON+0300 LD HL,BUFFER LD DE,PARAM1 CALL RESET JP C,NEEX LD DE,MTVORIM CALL MSG LD DE,BAZA LD (DMA),DE LD B,0 NAV1: CALL READS DJNZ NAV1 DI CALL INI LD HL,BAZA LD A,01 OUT (0CC),A LD DE,08000 LD BC,03E80 IN A,(0E0) LDIR IN 30 DRABP EQU 31 DUSER EQU 32 DRDIR EQU 33 DWDIR EQU 34 DLEN EQU 35 DSRDA EQU 36 DINITD EQU 37 DWDIRN EQU 40 .RADIX 16 IBOOT EQU 0 IWBOOT EQU 3 ICONST EQU 6 ICONIN EQU 9 ICONOUT EQU 0C ILIST EQU 0F IPUNCH EQU 12 IREADER EQU 15 IHOME EQU 18 ISELDSK EQU 1B ISETTRK EQU 1E ISETSEC EQU 21 ISETDMA EQU 24 IREAD EQU 27 IWRITE EQU 2A ILISTST EQU 2D ISECTRAN EQU 30 PARAM1 EQU 5C PARAM2 EQU 6C LGTFBUF EQU 0A5 BDOS MACRO WORK LD C,WORK CALL 5 ENDMA,(0E1) LD HL,BAZA+04000 LD DE,BAZA LD BC,04000 LDIR LD A,04 OUT (0CC),A LD HL,BAZA LD DE,08000 LD BC,03E80 IN A,(0E0) LDIR IN A,(0E1) LD A,0F8 OUT (0D0),A NAV2: IN A,(0D1) AND 080 JR NZ,NAV2 CALL EXI JP 0 KON: END  DJNZ NAV1 DI CALL INI LD HL,BAZA LD A,01 OUT (0CC),A LD DE,08000 LD BC,03E80 IN A,(0E0) LDIR IN Track-Info O NOOOOOOOO O BIOS MACRO WORK LOCAL BIOSK LD HL,BIOSK PUSH HL PUSH DE LD DE,WORK-3 LD HL,(1) ADD HL,DE POP DE JP (HL) BIOSK: ENDM .RADIX 16 .COMMENT | DIO - MODUL PRE ULAHCENIE VSTUPNO-VYSTUPNYCH PRAC SO SUBORMI. ============================================================= -Typy premennych: FILE - premenna so strukturou: 0000 .. 0023 - miesto pre rozvinutie FCB 0024 - pocet aktualnych bajtov v buffri DMA 0025 .. 00A4 - buffer DMA -Vstupne body: SP,KON+0300 LD B,8 NAV1: PUSH BC LD A,'1'+8 SUB B LD (CISLO),A CALL PRNTM SUB '1' LD BC,0EB OR A RRA RR B OUT (0E9),A XOR A OUT (C),A DEC C LD B,0 LD HL,KON+0300 LD E,080 NAV3: INIR DEC E JR NZ,NAV3 LD DE,MENO LD HL,BUFFER CALL REWRITE JP C,PLNY LD BC,08000 LD DE,KON+0300 NAV2: LD A,(DE) INC DE CALL WRITE JP C,PLNY DEC BC LD A,B OR C JR NZ,NAV2 CALL WCLOSE JP C,PLNY POP BC DJNZ NAV1 JP 0 KO RESET - Otvorenie suboru pre citanie po jednom bajte. ----- - VSTUP: HL - adresa premennej FILE DE - adresa prvych 12 bytov FCB - VYSTUP: CY=1, A=0FF - subor neexistuje CY=0, A - poradie polozky REWRITE - Otvorenie noveho suboru pre zapis po jednom bajte. ------- - VSTUP: HL - adresa premennej FILE DE - adresa prvych 12 bytov FCB - VYSTUP: CY=1, A=0FF - adresar je plny CY=0, A - poradie polozky WCLOSE - Uzavretie suboru urceneho pre zapis po jednom bajte ------ - VSTUP: N: END RA RR B OUT (0E9),A XOR A OUT (C),A DEC C LD B,0 LD HL,KON+0300 LD E,080 NAV3: INIR DEC E JR NZ,NAV3 LD DE,MENO LD HL,BUFFER CALL REWRITE JP C,PLNY LD BC,08000 LD DE,KON+0300 NAV2: LD A,(DE) INC DE CALL WRITE JP C,PLNY DEC BC LD A,B OR C JR NZ,NAV2 CALL WCLOSE JP C,PLNY POP BC DJNZ NAV1 JP 0 KOHL - adresa premennej FILE - VYSTUP: CY=1 - disk je plny CY=0 - OK READ - Nacitanie 1 bajtu zo suboru. ---- - VSTUP: HL - adresa premennej FILE - VYSTUP: CY=1 - bajty uz nie su CY=0, A - nacitany bajt WRITE - Zapis jedneho bajtu do suboru. ----- - VSTUP: HL - adresa premennej FILE A - zapisovany bajt - VYSTUP: CY=1 - disk je plny CY=0 - OK SETHEAD - Nastavenie disku, stopy, sektora a DMA ------- - VSTUP: A - cislo diku BC - cislo stopy DE - cislo sektoru HL - adresa DMA -VYSTUP: CY=1, A=#FF - disk nie je CY=0, A=#00 - OK | MENO: DEFB 0 DEFM 'OBRAZ' CISLO: DEFM '1 OBR' BUFFER: DEFS LGTFBUF MTVORIM: DEFM 0D,0A,'Tvor',0C9,'m: $' MPLNY: DEFM 0D,0A,'Asi je pln',0D9,' disk.$' PU: DEFW 0 PUAL: LD (PU),HL EX (SP),HL PUSH DE PUSH BC PUSH IX PUSH IY PUSH AF PUSH HL LD HL,POAL PU1: EX (SP),HL PUSH HL LD HL,(PU) RET POAL: POP AF POA: POP IY POP IX POP BC POP DE POP HL RET PUA: LD (PU),HL EX (SP),HL PUSH DE PUSH BC PUSH IX PUSH IY PUSH HL LD HL,POA JR PU1 PRNTC: CALL PUAL LD E,A BDOS DCONOUT RET MSG: CALL PUAL BDOS DMSGOUT RET MSGB: CALL PUAL MSGB1: LD A,(DE) INC DE CALL PRNTC DJNZ MSGB1 RET PRNTM: CALL PUAL LD DE,MTVORIM CALL MSG LD DE,MENO+1 LD B,8 CALL MSGB LD A,'.' CALL PRNTC LD DE,MENO+9 LD B,3 CALL MSGB RET PLNY: CALL WCLOSE LD DE,MPLNY CALL MSG JP 0 START:: LDTrack-Info O NOOOOOOOO OA:NC $$$NC$$$.INI FET MENU.MAC  )udovanm textovm editorom. Dobr, e? Funguje to! U teraz sa z toho tem, aj ke to ete n$$$NC$$$INI^