Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Bewesoft
Informacje na temat BW-DOSa i SpartaDOSu
Syzygy #8

tłumaczył: Lizard/Aids

Tekst przeznaczony dla użytkowników SpartaDOSu oraz BW-DOSa. Jeśli nie używasz jednego z nich (bądź obu) przez min. 90% czasu pracy z komputerem to nie jest to artykuł dla ciebie.

Uwaga: nie jest to spójny tekst, tylko zbiór wielu informacji na temat SpartaDOSu.

Zaczynamy. Jak zapewne wszyscy wiedzą, w 1994 napisałem nowego DOSa na małe Atari - BW-DOSa. W trakcie jego tworzenia i analizy SpartaDOSu, który był dla mnie inspiracją, dowiedziałem się wiele interesujących rzeczy, które niestety nie nadawały się do umieszczenia w dokumentacji. Przez długi czas nie wiedziałem co począć z tym fantem. Dlatego też postanowiłem umieścić ten tekst w Syzygy! No to lecimy!

Lista błędów SpartaDOSu

SpartaDOS jest wspaniałym DOSem, niezbędnym dla każdego fana XL/XE. Niestety, znajduje się w nim kilka błedów. Wkurzające, nie? Najlepszym zabezpieczeniem przed błędami jest poznanie ich wszystkich i unikanie ryzykownych działań. Oto dlaczego zamieszczam listę błędów! Wszystkie wymienione błędy (lub prawie wszystkie, lista dotyczy SpartaDOS 3.2d) występują w wersjach 3.2d, 3.2e, 3.2f i 3.2g. (Być może w innych również - nie sprawdzałem wszystkich wersji)

Podczas ładowania programu kanał #1 powinien być otwarty do odczytu. Pozwala to procedurom inicjującym, wywoływanym po załadowaniu adresu inicjalizacji do INITAD ($02E2), na odczyt pliku programu (np. TurboBASIC XL ładuje tą metodą część siebie bezpośrednio pod system operacyjny). SpartaDOS nie otwiera tego kanału, ponieważ loader jest sam w sobie funkcją XIO, która używa wewnętrznych procedur dostępu do plików, a nie CIO.

Błąd w strukturze SpartaDOSu może czasem spowodować uszkodzenie katalogu głównego (lub dowolnego sektora na dysku)! Chcecie spróbować? No to przygotujcie dwie dyskietki. Na jednej z nich nagrajcie jakiś użytek, który zawiera tylko jeden segment i nagłówek startujący (RUNAD). Wykonajcie polecenie DIR dla jednego dysku, włóżcie drugi (ten z użytkiem) i uruchomcie go. Zmieńcie dysk, zapiszcie na nim jakiś plik, a potem wróćcie do DOSu i wylistujcie katalog...

W czym problem? Loader plików binarnych umieszczony jest w głównej procedurze handlera "D:", co jest błędem. Taki loader uruchamia programy z wektorami RUN/INIT przed zakończeniem wszystkich operacji i przez to każde odwołanie do dysku jest rekursywne przez co DOS zaczyna wariować.

"Nielegalne" zakończenie procedury ładującej program przez wektor RUNAD nie pozwala DOSowi na rozpoznanie zmiany dysku, stąd drugi dysk dostał nazwę (i cały pierwszy sektor) pierwszego dysku. Teraz, gdy włożycie taki dysk do stacji, DOS nie rozpozna zmiany dysku! Reszta jest już prosta: podczas zapisu pliku system uaktualnia sektor z bufora (w którym jest sektor drugiego dysku) i zapisuje go na pierwszym. Czyli część katalogu z drugiej dyskietki zostanie skopiowana w to samo miejsce na pierwszą.

Nigdy nie wolno uruchamiać programu bezpośrednio po zmianie dysku!!! (Spójrzcie na katalog z przykładu.)

W "długiej" formie katalogu podawanych jest tylko sześć mniej znaczących cyfr długości pliku, a te mogą mieć długość do 8 MB (7cyfr), stąd wniosek, że długość plików powyżej 1MB będzie podawana niepoprawnie (gubiona jest pierwsza cyfra).

W "krótkiej" formie katalogu (takiej jak w AtariDOS II) na długość pliku i ilość wolnych sektorów przeznaczono tylko trzy cyfry. SpartaDOS oblicza taką długość obcinając niektóre cyfry (dokładnie polega to na podzieleniu długości pliku przez 256, czyli odrzuceniu najmłodszego bajtu - przyp. tł.).

Prawie każdy DOS zwraca w statusie 3 po odczycie ostatniego bajtu. SpartaDOS tego nie czyni. (BW-DOS 1.00 również, lecz od wersji 1.21 zostało to poprawione.)

Bezpośredni dostęp do katalogów jest ograniczony. Tryb 8+16 (nadpisywanie katalogu) nie pracuje poprawnie i jego działanie jest identyczne z 12+16 (katalog otwarty do odczytu/zapisu).

Tryb 12+32 (wymiana danych katalogu) nie działa - jeśli podkatalog już istnieje (normalne, jeśli chce się wymieniać z nim dane), zwracany jest błąd 151 (File already exists).

Wszystkie tryby ...+16 (praca z katalogiem otwartym tylko przez ścieżkę) ignorują każdą nazwę pliku, mimo że pod SpartaDOSem musi być podana poprawna nazwa pliku. Używając trybów ...+32 do tworzenia nowego katalogu, tworzony jest tylko wpis w katalogu nadrzędnym, nagłówek katalogu w sektorze nie jest zapisywany.

Dozwolone jest jednoczesne otwarcie wielu katalogów, lecz nie są one obsługiwane poprawnie z powodu jednego bufora na linię katalogu...

Wektor ZDIVIO w tablicy COMTAB (start batcha lub wydruku) nie zwraca kodu błędu. W przypadku jego wystąpienia wyświetla tylko komunikat i skacze do Command Processora nie zamykając prawdopodobnie plików otwartych przez program użytkownika.

Polecenie COPY nie zwraca błędu 170 (File not found). Używa piątej strony pamięci dla operacji na nazwach plików.

Druga połówka bufora LBUF w tablicy COMTAB używana jest do tymczasowego przechowywania różnych informacji, np. przy tworzeniu linii wpisu katalogowego przy wykonywaniu operacji GET. Open w trybie szóstym (odczyt katalogu) może nadpisać koniec linii poleceń (parametry), który czeka na pobranie.

Polecenie Command processora BASIC nie sprawdza rzeczywistej wielkości pamięci - na ślepo umieszcza pamięć obrazu poniżej $C000 (BASIC OFF) lub $A000 (BASIC ON). Na czym polega problem? Spróbujce uruchomić Spartę z poleceniem BASIC OFF w pliku STARTUP.BAT i cartridge'm w gnieździe...

Procedura bootująca (sektory 1-3) nie jest w pełni kompatybilna z XF-551. Jasne, to nie jest błąd, lecz powinno to zostać poprawione - rok temu ukazał się nowy XINIT ze starą procedurą...

XINIT nie jest w stanie sformatować dysku w gęstości rozszerzonej w konfigurowalnych stacjach (PERCOM - przyp. tł.). Próbuje to robić poprzez komendy "O" i "!", co nie jest możliwe w większości typów napędów (tutaj wina leży ewidentnie po stronie stacji, gdyż PERCOM został wymyślony właśnie po to, by łatwo zmieniać konfigurację stacji - przyp. tł.)

CLEANUP.COM zawiera błędy. Spróbujcie zainstalować sformatowany ramdysk i uruchomić CLEANUPa. Znajdzie on kilka "błędów". Wciśnijcie "Y", aby zapisać zmiany na ramdysk. Następnie skopiujcie jakiś plik (np. na ramdysk). Komputer zawiesi się... "Błąd" z ramdyskiem polega na tym, że CLEANUP nie oblicza prawidłowo ilości wolnych sektorów. Gdy mapa bitowa dysku zaczyna się w sektorze drugim (normalne dla ramdysku), sektory drugi i trzeci odejmowane są dwukrotnie - jako boot sektory i jako sektory VTOC. Zawieszanie się komputera spowodowane jest błędem w kodzie (CLEANUPa - przyp. tł.), który używa procedury DOSINIT dla zwolnienia buforów DOSu po zapisie zmian na dysku. (Lepszą metodą byłaby zmiana sekwencyjnego numeru dysku - DOSINIT wstrzymuje także wykonywanie plików wsadowych, czyści bufor klawiatury, itd.) Procedura inicjalizacji powinna być wywoływana przez JMP ($0C), lecz autor CLEANUPa wykorzystuje do tego celu nielegalny adres: JSR $07E0! Oczywiście adres ten jest poprawny dla większości DOSów, ale co z rezydentami? Nielegalny skok inicjuje TYLKO DOSa - z tego powodu MemLo będzie niepoprawne! COPY użyje wtedy pamięci zajmowanej przez sterownik ramdysku jako bufora... Aby zabezpieczyć się przed tym problemem należy wcisnąć Reset natychmiast po zakończeniu pracy z CLEANUPem. Program nie informuje o niektórych błędach. Nie jest sprawdzana identyczność nazw pomiędzy wpisem w katalogu nadrzędnym a nazwą w nagłówku katalogu.

RD.COM tworzy błędną strukturę logiczną ramdysku. Ostatni sektor zaznaczony jest jako używany. Może to czasem kolidować z katalogiem głównym (ramdysk 256 KB). Także długość katalogu głównego jest nieprawidłowa do momentu zapisania pierwszego pliku.

Polecenia rezydentne mogą być instalowane wielokrotnie, lecz nie mogą zostać usunięte. Prowadzi to do niezłego bałaganu, zwłaszcza po instalacji kilku kopii tego samego polecenia, które kolidują ze sobą.

To była, "Lista błędów SpartaDOSu". Pewnie was znudziła, więc pozostałą część tego artykułu wypełni... inna lista! (Sorry...)

Poniżej zamieszczono wszystkie różnice pomiędzy BW-DOSem a Spartą. W założeniu BW-DOS jest "małą" wersją SpartaDOSu - używa możliwie najmniej pamięci, jest przy tym wolniejszy od Sparty i więcej funkcji jest zewnętrznych.

BW-DOS, SpartaDOS - różnice

Największą różnicą jest wielkość używanej pamięci. SpartaDOS (3.2d) potrzebuje 16231 bajtów ($0700- $1819, $C000-$C263, $CC00-$CFEB i $D800-$FFFF). Ponieważ pamięć OS-RAM nie może być podzielona dla kilku programów, należy przyjąć, że w rzeczywistości Sparta zajmuje 18713 bajtów ($0700-$1819, $C000- $D000, $D800-$FFFF). BW-DOS (1.00) używa tylko 6134 bajty ($0700-$1EF6 - tak, 3 razy krótszy od Sparty). Jest to przyczyną pozostałych różnic. Ponieważ pamięć pod ROMem nie jest używana, BW-DOS jest kompatybilny z takimi programami jak Turbo Basic.

BW-DOS pozbawiony jest prawie wszystkich błędów Sparty.

Brak funkcji LOCK/UNLOCK (tak samo jak w SpartaDOS X). Brak tych poleceń w Command Processorze i w XIO (funkcje 34 i 46). Brak rozpoznawania zabezpieczenia dysków przed zapisem, a CHKDSK (XIO 47) podaje 0 w bajcie odpowiedzialnym za zabezpieczenie. (Polecenie LOCK/UNLOCK zabezpiecza/odbezpiecza programowo dyski przed zapisem, ale nie formatowaniem, w SpartaDOS X zrezygnowano z tych funkcji - przyp. tł.)

Dyski AtariDOSu II nie są obsługiwane przez DOS. Także polecenie AINIT i funkcja XIO 254 nie istnieją. Należy użyć MENU w celu konwersji. Format SpartaDOSu 1.x także nie jest obsługiwany.

Polecenia SAVE, APPEND są zewnętrzne w BW-DOS, więc brakuje funkcji XIO 41.

Brak polecenia ?DIR (XIO 48).

BOOT jest poleceniem zewnętrznym. Brak obsługi XIO 45.

Operacja ERASE nie zeruje flagi BOOT (sektor 1, bajt 40) podczas usuwania pliku bootowalnego (tzn. uruchamianego przy startowaniu systemu - przyp. tł.)

SpartaDOS zawiera mini bufory, które znacznie przyspieszają operacje na pojedynczych bajtach. W BW-DOSie takich buforów nie ma.

Pliki otwarte w trybie 4tym (bez podania ścieżki) są szukane w katalogu bieżącym oraz >DOS>. (W SpartaDOSie w katalogu głównym.) Z tego powodu, wszystkie polecenia zewnętrzne nie mogą być umieszczane w katalogu głównym - tak jest krócej i przejrzyściej.

Instrukcja POINT może być wolniejsza w przypadku długich plików. SpartaDOS używa dwóch różnych metod w trakcie ustawiania nowej pozycji w pliku - od początku pliku lub bieżącej. BW-DOS potrafi przeszukiwać tylko od początku.

BW-DOS posiada tylko 3 bufory pliku (dla każdej gęstości) - SpartaDOS - 8 dla sektorów 256bajtowych i 16 dla 128bajtowych (lub kombinację, gdy w systemie są napędy o różnych gęstościach). Przez to, Sparta- DOS jest trochę szybszy, zwłaszcza podczas otwierania pliku.

SpartaDOS porafi odzytywać sektory bezpośrednio pod adres docelowy w czasie blokowych operacji I/O - bez użycia buforów. Możliwości takiej nie ma w BW- DOSie.

Katalog może zawierać do 1424 wpisów (tak samo jak SpartaDOS X). Dyskowe wersje Sparty tylko do 126.

Krótki format katalogu (jak AtariDOS II) podaje długość plików w sektorach - mapy sektorów nie są pokazywane pod BW-DOSem.

Tylko dyski 1, 2, 3, 4 i 8 są obsługiwane przez BW- DOSa. Na raz może być otwartych 5 plików, z czego tylko jeden jako katalog.

Nie dołączono procedur szybkiej transmisji SIO.

Bufor klawiatury jest funkcją zewnętrzną. Brak polecenia KEY w Command Processorze.

Sterowniki R-Time 8 i emulatora zegara są dołączane z dysku. (Mimo braku sterowników w pamięci, można ustawić czas i datę, lecz zegar będzie stał.)

Data i czas wyświetlane są wg norm europejskich (dd-mm-yy i zegar 24o godzinny). Zabawną rzeczą jest fakt, że wewnętrznie Sparta używa właśnie tego formatu. (Prawdziwym formatem europejskim jest yy-mm-dd. - przyp. tł.)

Plik AUTORUN.SYS nie jest używany.

Polecenia CP, takie jak: TIME, DATE, MEM, CHKDSK, COPY, PAUSE i VERIFY są poleceniami zewnętrznymi. Brak polecenia TD.

Błędy sygnalizowane są tylko w postaci liczbowej.

Jakakolwiek sygnalizacja błędu wstrzymuje wykonywanie pliku wsadowego w celu uniknięcia problemów.

Brak tablicy skoków pod $FFC0 stosowanej przez SpartaDOS 3.x. Dzięki temu nie jest używana pamięć RAM pod ROMem! (... i spora grupa programów pod dyskową Spartę nie działa, również dzięki temu - przyp. tł.) W zastępstwie na stronie siódmej umieszczono nową tablicę, która zawiera także skok do procedury konwersji liczb z postaci binarnej na ciąg ASCII (nie dostępne pod SpartaDOSem).

Brak flagi blokującej uruchomienie Command Processora po resecie ($0702). Należy użyć flagi INCOMND w tablicy COMTAB.

BW-DOS może zostać uruchomiony z pod innego DOSu lub Micro-DOSu. W takim przypadku plik STARTUP. BAT musi być obecny.

Obsługa urządzenia "E:" podczas przekierowania we/wy została zmieniona w plikach wsadowych i drukowaniu). SpartaDOS instaluje po prostu własny sterownik edytora po zabootowaniu lub resecie. Polecenie XDIV używane jest do zakończenia przekierowania (z powodu kompatybilności). Po tym dalsze przekierowanie jest niemożliwe aż do najbliższego boota.

BW-DOS 1.00 instaluje nowe procedury edytora tylko w momencie przekierowania, które wymieniane są na oryginalne w momencie zakończenia wykonywania batcha lub drukowania. Dlatego przywrócenie oryginalnych procedur odbywa się automatycznie bez użycia XDIV i umożliwia przekierowanie w przyszłości. Nowe polecenie XBAT pozwala na uruchamianie programów sprawiających kłopoty z poziomu batcha.

Obydwa systemy nie pozwalają na zainstalowanie nowych procedur edytora takich jak np. XEP 80. Problem ten nie występuje w wesji 1.21, która wkrótce będzie dostępna.

Istnieje wiele różnic w poleceniach zewnętrznych.

I to już koniec artykułu. Co można jeszcze powiedzieć? Mam nadzieję, że tekst ten odpowiedział na kilka niezadanych pytań.

Jiri Bernasek

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info