DROBNOSTI O SPARTADOSu¢----------------------¢¢ Jak moən⇧ v te, vytvo②il jsem p②ed ⇨asem nov⑨ DOS pro osmibitov⑦ Atari - BW-DOS. Tento syst⑦m se snaə o maxim⇧ln kompatibilitu se SpartaDOSem p②i minim⇧ln d⑦lce programu. A pr⇧v❎ kv
li zm n❎n⑦ kompatibilit❎ jsem b❎hem programov⇧n prov⇧d❎l rozs⇧hl⑦ srovn⇧vac testy se SpartaDOSem, p②i kter⑨ch vy③lo najevo mnoho zaj mav⑦ho tak⑦ o n❎m. Tyto informace se v③ak do n⇧vodu k BW-DOSu t⑦maticky nehod , takəe jsem dlouho nev❎d❎l, co s nimi, a nechal je povalovat na "hald❎" odloəen⑨ch pap r
. Nakonec jsem usoudil, əe by bylo ③koda je navədy utopit ve zm n❎n⑦ "hald❎", a za⇨al jsem tedy ps⇧t tento ⇨l⇧nek.¢¢ SpartaDOS je jedn m z nejlep③ ch DOS
pro Atari XL/XE, prakticky jedin⑨ opravdu "dosp❎l⑨" syst⑦m na tomto po⇨ ta⇨i. Proto si ho obl bilo mnoho uəivatel
, zvl⇧③④ ti pokro⇨ilej③ a program⇧to②i. Nejv❎t③ roz③ ②en dos⇧hl na americk⑦m kontinentu.¢ SpartaDOS bohuəel obsahuje tak⑦ r
zn⑦ chyby a nedostatky, kter⑦ dok⇧ə pr⇧ci s n m ⇨as od ⇨asu po②⇧dn❎ znep② jemnit. Nejlep③ m ②e③en m t❎chto situac je prevence. Pokud o chyb⇧ch v me, m
əeme p②edch⇧zet vzniku rizikov⑨ch situac , a n⇧sledky chyb t m eliminovat.¢ Pr⇧v❎ proto nyn uvedu seznam chyb a nedostatk
SpartaDOSu. Vztahuje se k verz m SpartaDOSu 3.2d, 3.2e, 3.2f a z v❎t③ ⇨⇧sti i 3.2g. SpartaDOS uveden⑨ch verz obsahuje n⇧sleduj c - v ce ⇨i m⑦n❎ z⇧vaən⑦ - chyby:¢¢¢--- Chyba ve vnit②n struktu②e SpartaDOSu zp
sobuje v ur⇨it⑦ situaci znehodnocen adres⇧②
a t m ne⇨itelnost diskety. Kdo nev❎② , a④ si pod SpartaDOSem n❎kter⑦ z v⑨③e uveden⑨ch verz zkus n⇧sleduj c : Zform⇧tujeme dv❎ diskety, na kaədou z nich uloə me na zkou③ku n❎kolik soubor
. Na disketu ⇨.2 um st me n❎jakou men③ utilitu, kter⇧ je uloəena jako jeden dlouh⑨ segment s vektorem RUN, a umoəuje ukl⇧d⇧n dat na disk (nap② klad polsk⑨ ED.COM od Janusze B. Wi③niewsk⑦ho). Nyn vyp ③eme adres⇧② diekty ⇨.1, vloə me disketu ⇨.2 a okaməit❎ spust me (zad⇧n m n⇧zvu) na③i utilitu. Vr⇧t me do disketov⑦ jednotky disketu ⇨.1 a uloə me na ni n❎jak⇧ data. Vysko⇨ me do DOSu a prohl⑦dneme si zni⇨en⑨ adres⇧②...¢ Jedn⇧ se o z⇧vaənou chybu ve vnit②n stavb❎ SpartaDOSu. Rutina pro zav⇧d❎n programov⑨ch soubor
je jednou z intern ch rutin syst⑦mu FMS (diskov⑦ho handleru), coə je chyba - tato rutina totiə p② mo spou③t zav⇧d❎n⑦ programy p②es vektory RUN a INIT (jsou-li definov⇧ny), coə vede k "ileg⇧ln mu" opu③t❎n syst⑦mu FMS bez korektn ho zakon⇨en operace LOAD. V d
sledku toho nejsou do p② slu③n⑨ch prom❎nn⑨ch zaneseny p② padn⑦ zm❎ny, kter⑦ v pr
b❎hu operace LOAD nastaly, zejm⑦na p② padn⇧ v⑨m❎na diskety proveden⇧ bezprost②edn❎ p②ed LOADem (identifikace nov⑦ diskety). Pokud pak do disketov⑦ jednotky vr⇧t me p
vodn disketu, jej ə identifikace z
stala v prom❎nn⑨ch, je obsah sektorov⑨ch buffer
povaəov⇧n za platn⑨ (ə⇧dn⇧ v⑨m❎na diskety), a p②i z⇧pisu n❎jak⑦ho souboru je po ⑤prav❎ "vr⇧cen" na disketu - ve skute⇨nosti ov③em na jinou!!! Tento podivn⑨ "sektorov⑨ kop r⇧k" obvykle postihuje hlavn adres⇧②, kter⑨ z
st⇧v⇧ v bufferech nej⇨ast❎ji a na r
zn⑨ch disket⇧ch v❎t③inou souhlas i jeho um st❎n .¢ Prevence je pom❎rn❎ jednoduch⇧. Nezbytnou podm nkou pro vznik popsan⑦ situace je proveden operace LOAD ihned po v⑨m❎n❎ diskety - tomu je t②eba zabr⇧nit. Sta⇨ po v⑨m❎n❎ diskety nap② klad nahl⑦dnout do adres⇧②e.¢¢--- Intern povel BASIC ve SpartaDOSu netestuje skute⇨nou velikost dostupn⑦ pam❎ti RAM - pro um st❎n obrazovky pouə v⇧ konstanty $A000 pro "BASIC ON" a $C000 pro "BASIC OFF". Je-li p②ipojena n❎jak⇧ cartridge, dojde po "BASIC OFF" ke kolizi obrazov⑦ pam❎ti s ROM cartridge, t m ke zhroucen funkce za② zen "E:" a neovladatelnosti syst⑦mu. Tato situace hroz zejm⑦na p②i kombinaci cartridge a BOOTu z diskety, jej ə soubor STARTUP.BAT obsahuje "BASIC OFF".¢ Prevence: P②i pouəit cartridge se p②esv❎d⇨it, əe ə⇧dn⑨ z pouəit⑨ch d⇧vkov⑨ch soubor
(zejm⑦na STARTUP.BAT) neobsahuje povel "BASIC".¢¢--- Program CLEANUP.COM vytv⇧② po z⇧pisu oprav na disk p②edpoklady pro zablokov⇧n po⇨ ta⇨e - pokud je instalov⇧n jak⑨koliv rezident. Jedn⇧ se o hrubou nedbalost autora tohoto programu. Protoəe CLEANUP zapisuje zm❎ny p② mo p②es SIO, pot②ebuje n❎jak zabr⇧nit DOSu v pouəit star⑨ch sektor
, kter⑦ je③t❎ m
əe m t v bufferech. Spr⇧vn❎ by to m❎l ud❎lat zm❎nou sekven⇨n ho ⇨ sla diskety (DOS by pak identifikoval v⑨m❎nu diskety), CLEANUP toho v③ak dosahuje vyvol⇧n m procedury DOS-INIT. Jedn⇧ se o dosti sv⑦r⇧zn⑦ ②e③en (jako vedlej③ ⑤⇨inek zastav d⇧vkov⑨ soubor, vy⇨ist buffer kl⇧vesnice atd. atd.), jeho pouəit je v③ak moən⑦. "K⇧men ⑤razu" je ov③em ve zp
sobu, jak⑨m CLEANUP tento podprogram vol⇧: M sto spr⇧vn⑦ho skoku na adresu uloəenou v prom❎nn⑦ DOSINI ($0C), pouə v⇧ CLEANUP ileg⇧ln "tvrd⑨" skok na adresu $7E0! Tato adresa je sice v naprost⑦ v❎t③in❎ DOS
za⇨⇧tkem zm n❎n⑦ inicializa⇨n rutiny, nezahrnuje v③ak p② padn⑦ instalovan⑦ rezidenty. A to je pr⇧v❎ ono: CLEANUP inicializuje pouze samotn⑨ DOS - bez rezident
- coə vede k nespr⇧vn⑦mu nastaven prom❎nn⑦ MEMLO, kter⇧ pak nechr⇧n rezidenty p②ed p②eps⇧n m (nap②. p②i kop rov⇧n ).¢ Prevence: Ihned po pouəit programu CLEANUP stisknout kl⇧vesu <RESET>. (T m prob❎hne spr⇧vn⇧ inicializace syst⑦mu, kter⇧ rizikov⑨ stav odstran .)¢¢--- Rutina ZDIVIO, kter⇧ je ur⇨ena ke spou③t❎n d⇧vkov⑨ch soubor
a funkce HardCopy, a je uəivatelsk⑨m program
m p② stupn⇧ p②es stejnojmenn⑨ vektor v tabulce COMTAB, ve SpartaDOSu nespr⇧vn❎ obsluhuje chybov⑦ stavy. Pokud dojde p②i otv r⇧n souboru k chyb❎ (sta⇨ p②eklep v n⇧zvu d⇧vkov⑦ho souboru), SpartaDOS m sto p②ed⇧n chybov⑦ho kdu volaj c mu programu vyp ③e na obrazovku chybov⑦ hl⇧③en a "spadne" do CP. Pokud p②ed t m uəivatelsk⑨ program otev②el n❎jak⑦ soubory, nem⇧ uə ③anci je leg⇧ln❎ uzav② t - pokud byly otev②eny v IOCB ⇨.3 a vy③③ m, neuzav②e je ani CP...¢ Prevence: P②i psan program
pouə vaj c ch ZDIVIO je vhodn⑦ nenech⇧vat p②es vol⇧n zm n❎n⑦ho vektoru ə⇧dn⑦ soubory otev②en⑦.¢¢--- Intern buffer, ve kter⑦m funkce ⇨ten form⇧tovan⑦ho adres⇧②e sestavuje jednotliv⑦ ②⇧dky v⑨pisu, koliduje ve SpartaDOSu s koncem bufferu LBUF (buffer zadan⑦ho p② kazu v CP). Je-li zadan⑨ ②⇧dek dlouh⑨, dojde p②i proveden operace OPEN s aux1=6 k p②eps⇧n jeho konce, a t m p② padn❎ i k chybn⑦ interpretaci zadan⑨ch parametr
.¢ Prevence: P②i psan extern ch povel
nejprve p②evz t v③echny parametry, teprve potom otev rat sobory.¢¢--- Obsluən⑨ program ramdisku RD.COM zaloəen⑨ ramdisk nespr⇧vn❎ form⇧tuje. Bitov⇧ mapa je generov⇧na o jeden bit krat③ , coə v n❎kter⑨ch p② padech (ramdisk 256kB) vede k rozd lu jednoho sektoru na d⑦lce bitov⑦ mapy a t m k form⇧ln kolizi bitov⑦ mapy s hlavn m adres⇧②em. V praxi se tento probl⑦m obvykle nijak neprojevuje, form⇧ln nedostatky v bitov⑦ map❎ v③ak trvaj a mohou se st⇧t p② ⇨inou chybn⑦ funkce n❎kter⑨ch utilit. Nav c je p②i form⇧tov⇧n chybn❎ nastavena d⑦lka hlavn ho adres⇧②e - to se v③ak oprav samo z⇧pisem libovoln⑦ho souboru nebo podadres⇧②e.¢ Prevence: Nepouə vat v ramdisku sektorov❎ orientovan⑦ utility, nebo nepouə vat RD.COM.¢¢¢ T m kon⇨ prvn ⇨⇧st tohoto ⇨l⇧nku - seznam chyb SpartaDOSu. Na ②adu te⇦ p②ich⇧z p②ehled dal③ ch nedostatk
tohoto DOSu, kter⑦ sice nejsou p② mo chybami v programu, mohou v③ak program⇧tora nemile p②ekvapit. Jedn⇧ se v❎t③inou o r
zn⇧ drobn⇧ opomenut autor
SpartaDOSu, kte② n❎kter⑦ funkce nedot⇧hli zcela do konce.¢¢¢--- Ve form⇧tovan⑨ch v⑨pisech adres⇧②e jsou n❎kter⇧ ⇨ sla nevhodn❎ zkr⇧cena. D⑦lka soubor
v "dlouh⑦m" v⑨pisu je o② znuta na 6 ⇨ slic, coə d⇧v⇧ nespr⇧vn⑨ ⑤daj pro v③echny soubory od 1000000 byt
v⑨③e. "Kr⇧tk⑨" v⑨pis podobn⑨m zp
sobem zkracuje po⇨ty sektor
(u soubor
, i voln⑦ sektory) na 3 ⇨ slice - 1000 voln⑨ch sektor
se tedy zobraz jako 000, coə m
əe n❎kter⑦ programy p②iv⑦st k dom❎nce, əe disketa je pln⇧.¢¢--- P② kaz TYPE je ve SpartaDOSu omezen na soubory, kter⑦ neobsahuj ②⇧dky del③ neə 64 znak
(jinak hl⇧s chybu 137).¢¢--- P② kaz COPY nikdy nehl⇧s chybu 170 (soubor nenalezen) a m❎n obsah p⇧t⑦ str⇧nky pam❎ti (sestavuje zde n⇧zvy soubor
).¢¢--- Program CLEANUP hl⇧s v ramdisku neexistuj c chyby. Ramdisky nepot②ebuj BOOTov⑨ zavac❎⇨, a proto m vaj bitovou mapu obvykle um st❎nu jiə v sektoru ⇨.2 - to CLEANUP odm t⇧ pochopit. P②i v⑨po⇨tu voln⑨ch sektor
ode⇨ t⇧ sektory 2 a 3 vədy jako BOOTov⑦, v ramdisku pak je③t❎ znovu jako bitov⑦ mapy - d
(unikne mu chybn⑨ odkaz na nad② zen⑨ adres⇧② nebo chybn⑨ n⇧zev adres⇧②e).¢¢--- P② kaz XINIT nedok⇧əe na v❎t③in❎ konfigurovateln⑨ch disketov⑨ch jednotek (v⇨etn❎ XF-551) form⇧tovat roz③ ②enou hustotu. Pokou③ se to totiə prov⑦st pomoc povel
'O' a '!', coə na v❎t③in❎ jednotek nejde (spr⇧vn⑨ povel je '"'). D⇧le XINIT p②i kop rov⇧n nezachov⇧v⇧ datum a ⇨as DOSov⑦ho souboru.¢¢--- BOOTov⇧ rutina, kterou v③echny verze SpartaDOSu (v⇨etn❎ cartridge SpartaDOS X) ukl⇧daj na form⇧tovan⑦ diskety, nen pln❎ slu⇨iteln⇧ s disketovou jednotkou XF-551. Pokud pouə v⇧me tuto jednotku, poda② se prvn BOOT z dvojit⑦ hustoty aə napodruh⑦, a DOSov⑨ soubor nesm leəet na druh⑦ stran❎ diskety.¢¢--- Rezidentn povely dod⇧van⑦ se SpartaDOSem (nejen) se nebr⇧n v cen⇧sobn⑦ instalaci (mnohdy pak jednotliv⑦ kopie t⑦hoə rezidentu navz⇧jem koliduj ), a nelze je odstraovat z pam❎ti.¢¢--- P②i zav⇧d❎n strojov⑦ho programu - a hlavn❎ p②i prov⇧d❎n jeho INIT rutin - m⇧ b⑨t IOCB ⇨.1 otev②en pro ⇨ten z programov⑦ho souboru. (Toho vyuə v⇧ nap②. Turbo Basic, kter⑨ svoji druhou ⇨⇧st zav⇧d s⇧m - p② mo pod OS-ROM.) Pod SpartaDOSem tento IOCB otev②en nen .¢¢--- SpartaDOS se nebr⇧n otev②en v ce form⇧tovan⑨ch v⑨pis
adres⇧②e sou⇨asn❎, coə v③ak nedok⇧əe spr⇧vn❎ obslouəit. Protoəe je k dispozici jen jeden ②⇧dkov⑨ buffer, "prosakuj " ⇨⇧sti obou v⑨pis
do sebe.¢¢--- V❎t③ina DOS
vrac po p②e⇨ten posledn ho byte v souboru status 3. SpartaDOS nikoliv.¢¢--- P② m⑨ p② stup k adres⇧②
m m⇧ pod SpartaDOSem n❎kter⇧ nep② jemn⇧ omezen . Reəim aux1=8+16 (p②epsat adres⇧②) se pod SpartaDOSem chov⇧ stejn❎ jako 12+16 (aktualizace adres⇧②e) - nedoch⇧z ke zru③en star⑨ch dat, kter⇧ mohou p②i z⇧pisu krat③ ho adres⇧②e p②es del③ ⇨⇧ste⇨n❎ z
stat na jeho konci. Reəim 12+32 (aktualizace podadres⇧②e) je v podstat❎ nefunk⇨n - pokud totiə podadres⇧② jiə existuje (pro⇨ bychom ho jinak aktualizovali?!?), skon⇨ operace s chybou 151 (nelze p②epsat).¢ V③echny reəimy aux1+16 pracuj s adres⇧②em ur⇨en⑨m jen cestou, n⇧zev souboru ignoruj . Pod SpartaDOSem v③ak mus b⑨t i p②esto p② tomen syntakticky spr⇧vn⑨ n⇧zev - proto je vhodn⑦ za cestu vədy p②id⇧vat alespo "*.*". Pouəijeme-li reəimy aux1+32 k zaloəen nov⑦ho podadres⇧②e, neprovede SpartaDOS tuto operaci kompletn❎ - zaloə jen adres⇧②ov⑨ soubor, aniə by do n❎j vloəil spr⇧vnou hlavi⇨ku podadres⇧②e.¢¢--- Obsluha aloka⇨n ch ukazatel
- pozice 18 a 20 v sektoru 1 - je ve v③ech dosud zn⇧m⑨ch verz ch SpartaDOSu (v⇨etn❎ SpartaDOSu X) zna⇨n❎ nedotaəen⇧. Tyto ukazatele ozna⇨uj m sto na disket❎, od kter⑦ho se za⇨ n⇧ hledat voln⑨ sektor p②i roz③i②ov⇧n souboru resp. podadres⇧②e. P②i z⇧pisu nov⑨ch soubor
a podadres⇧②
se s postupn⑨m obsazov⇧n m diskety zvy③uj , p②i maz⇧n je t②eba tyto ukazatele naopak sniəovat. SpartaDOS je p②i uvolov⇧n kaəd⑦ho sektoru vrac na ⇨ slo tohoto sektoru, p②i⇨emə rozli③en mezi oblast adres⇧②
a dat se prov⇧d porovn⇧n m s ukazatelem pro p②id❎lov⇧n adres⇧②
. Protoəe se ale obvykle sektory uvoluj ve vzestupn❎ ⇨ slovan⑨ch skupin⇧ch (soubory a adres⇧②e), p②i maz⇧n adres⇧②
podle t⑦to metody bude jiə druh⑨ sektor nad (novou) hodnotou "adres⇧②ov⑦ho" ukazatele - posunut bude tentokr⇧t ukazatel "datov⑨". T m se oba ukazatele dost⇧vaj na t⑦m❎② stejnou hodnotu, a p②est⇧vaj odd❎lovat adres⇧②e a data do r
zn⑨ch oblast na disket❎. Nov⑦ sektory adres⇧②
i soubor
se za⇨nou p②id❎lovat prom chan❎, coə po ⇨ase vede k "rozh⇧zen " adres⇧②
po cel⑦ disket❎ a pomal⑦mu p② stupu k nim.¢¢--- Obsluha za② zen "E:" p②i pr⇧ci d⇧vkov⑨ch soubor
zn⑦ urychloa⇨e v⑨stupu na obrazovku, kter⑦ se SpartaDOSem funguj , jsou obvykle ②e③eny metodou ileg⇧ln ch z⇧sah
p② mo do programu SpartaDOSu - fuj...)¢¢¢ Informace uveden⑦ v tomto ⇨l⇧nku si v ə⇧dn⑦m p② pad❎ nekladou za c l SpartaDOS n❎jak "o⇨ernit". Jejich ⑤⇨elem je upozornit uəivatele na rizikov⑦ situace, kter⑨m je lep③ se vyhnout, a zv⑨③it tak bezpe⇨nost a efektivitu jejich pr⇧ce se SpartaDOSem. Jinou moənost je p②echod na BW-DOS, kter⑨ je se SpartaDOSem do zna⇨n⑦ m ry slu⇨iteln⑨ a uveden⑦ chyby a nedostatky samoz②ejm❎ nem⇧, v tom p② pad❎ se v③ak mus uəivatel sm ②it s pon❎kud men③ m okruhem dostupn⑨ch funkc .¢¢ Ji② Bern⇧③ek (BEWESOFT)¢¢