Krótka historia DOS Library V50 - autor: Colin J. Wenzel
Od samego początku, AmigaDOS zawsze był osieroconym dzieckiem w całym
systemie operacyjnym Amigi. We wczesnym etapie istnienia, dodanie kernela
TRIPOSa jako podstawy dla Amiga Disk Operating System (DOS), nie było
pierwszym lepszym dokonanym wyborem. Okoliczności były jednak jakie były.
Zakończono implementację TRIPOSa napisanego w języku zwanym BCPL. BCPL był
poprzednikiem nowoczesnego języka C i zanim ktokolwiek się zorientował, C
stało się psuedostandardem języka dla całego systemu operacyjnego Amigi i
wielu jego elementów. Stało się również najczęściej stosowanym językiem
programowania, w którym powstało wiele aplikacji.
Oczywiście w tamtym czasie, prawie wszystkie elementy systemu były pisane w
asemblerze MC68000. Nie było to jakimś wielkim problemem, gdyż większość
programistów w latach młodości Amigi dorosło na kodzie asemblerowym. Sam
byłem jednym z nich. W dodatku nie było żadnej drogi przyszłości, którą miał
podążać system. Nie było planów przeniesienia systemu operacyjnego na inny
procesor, tak więc zapotrzebowanie na prędkość był najważniejsze, a na
dalszym planie leżały czynniki takie jak portowalność czy systemowość.
Czasy się zmieniały, dodawano pewne części systemu operacyjnego Amigi,
podczas gdy inne sukcesywnie przepisywano całkowicie w C. Jednakże,
największa część systemu nadal była napisana w asemblerze MC68000. Pozostało
to do dzisiaj w takich elementach jak DOS library, a także w części File
Systemu.
Od dnia gdy Commodore zbankrutowało, a cała lista nowych właścicieli Amigi
odpadła już na starcie, Amiga cierpiała przez ponad dekadę na coś w stylu
porzucenia. Nawet wtedy, gdy pojawiały się nowe wersje systemu, nadal
wymagały one implementacji nowych cech.
Teraz, gdy istnieje plan rozwoju, AmigaOS stara się nadgonić te wszystkie
stracone w rozwoju lata. Stare procesory 68000 odchodzą w zapomnienie,
sprzęt, który był obsługiwany przez tyle lat przez AmigaOS nie spełnia
obecnie oczekiwań. Oczywistym się stało, że AmigaOS musi przejść na całkiem
nowy sprzęt jak najszybciej. Tutaj właśnie wkracza AmigaOS4.0. Nie tylko
chodzi o to, aby dogonić stracony czas, lecz trzeba także "odłączyć się" od
starego sprzętu. Nie jest to jednak takie proste, a samo "odłączanie" jest
skompikowane przez fakt, że większość kodu źródłowego systemu operacyjnego
nadal była napisana w asemblerze MC68000, który w znacznej mierze zależny
jest od procesora i w żaden sposób nie może zostać przeportowany na
jakikolwiek z obecnie najnowszych mikroprocesorów.
Pierwszym krokiem, który należało postawić było całkowite przepisanie systemu
operacyjnego do C. Przez lata, różne części systemu były uaktualniane i
przepisywane w całości lub w pewnej części do języka C. Jednak z powodu
starożytnego pochodzenia DOS library i wagi jaką posiadał w aspekcie
kompatybilności, w większym lub mniejszym stopniu pozostawało to zawsze na
tym samym etapie od czasów upadku Commodore. Pod koniec dodano jednak kilka
cech i podjęto poważne próby usunięcia części powłoki TRIPOSa. Na
nieszczęście, nigdy tego nie dokończono i nawet w ostatniej wersji systemu,
wczesna wersja kernela BCPL TRIPOS nadal istniała i działała, chociaż była
ukryta pod grubszą warstwą, którą znamy i używamy na codzień.
Aby osiągnąć cel, którym jest przeportowanie dos.library, starożytny kernel
TRIPOSa musiał zostać usunięty, głównie z powodu tego w jaki sposób był
napisany i w jaki sposób działał. Niemożliwym było powielenie go w obecnie
najczęściej stosowanym języku C. Fakt ten był dodatkowo potęgowany przez
brak jakiejkolwiek dokumentacji co czyniło go jeszcze bardziej mniej
użytecznym.
Pierwszym zadaniem było odcięcie nowoczesnej powłoki od pozostałości TRIPOSa.
Nie było to takie proste jak początkowo się spodziewaliśmy i zajęło mi
osobiście prawie 9 miesięcy. W każdym z etapów coś się gdzieś psuło, czy to
w handlerach, czy w dużej ilości innych elementów systemu, które korzystały
ze starego środowiska i/lub jego efektów ubocznych. Większość z nich nigdy
by się nie pojawiła gdybyś nawet ich szukał. Problemy pojawiały się wtedy
gdy wyciągało się ich podstawę. Wiele komend z C: nadal posiadało wiele
elementów zależnych od starego kodu TRIPOSa.
Na szczęście mieliśmy wspaniałą ekipę koderów, którzy pracowali nad tym
projektem OS4 i tylko gdy odkryliśmy tego zależności, poprawiliśmy je i
przepisaliśmy - jeden za drugim. Wkrótce cały kod starego BCPL TRIPOSa
zniknął. Stało się to o 3 nad ranem, 7 grudnia 2002 roku w Queensland (to
dla tych, którzy chcą wiedzieć dokładnie). Przez kolejnych kilka miesięcy
resztki kodu asemblerowego zostały usunięte i zastąpione językiem C. Prawie
każdy programista z ekipy zajmującej się OS4 miał swój wkład w nową
dos.library, czy to przez poprawianie błędów, które wpływały na inne
elementy, czy też przez budowę struktury samej biblioteki, czy też przez
testy.
Duży wkład mieli również nasi współpracownicy, którym chciałbym osobiście
podziękować. Bez ich pomocy, wątpię abym sam ukończył tę pracę, przynajmniej
nie na przestrzeni kilku lat. Nie zapominam również o wszystkich naszych
beta testerach, którzy po dziś dzień odkrywają dziwne zachowania i mają
ogromny wkład w poziom ulepszeń całkiego pakietu - z punktu widzenia
użytkownika.
Oto lista elementów w jakie swój wkład zapewnili inni programiści, którzy dostarczyli swoje
własne, gotowe do zastosowania zamienniki zastosowane w V50 dos.library:
- całkowicie nowy zamiennik procedury pattern matching
- całkowicie nowa implementacja LoadSeg
- całkowicie nowa implementacja ReadArgs
I wiele innych nowych funkcji, których jest zbyt wiele, aby je tutaj
wymienić.
Praca nad dos.library nie zatrzymała się tylko na przeportowaniu jej do
języka C. Przeprowadzono również wiele potrzebnych usprawnień, które były
potrzebne od wielu lat. Oto krótka lista nowych i ulepszonych cech nowej
dos.libary:
- zniknęło ograniczenie do 255 znaków w ścieżce dostępu do pliku,
- poprawiono wiele błedów dotyczących przekazywania wskaźnika NULL,
- dostępnych jest wiele funkcji dotyczących konwersji formatu daty i czasu,
- nowe procedury mountujące zostały wbudowane w dos.library,
- nowe funkcje adresowania i śledzenia segmentów są od teraz wewnętrzne,
- dostępnych jest wiele funkcji tzw. "task callable",
- rozszerzone wychwytywanie błędów i ich raportowanie,
- obsługa multi-przypisów dla funkcji pattern matching,
- wbudowana obsługa PPC i innych przyszłych formatów.
Podczas okresu rozwoju, dos.library była kompilowana przy pomocy SASC.
Aby jednak przeportować ją na PCC, musieliśmy zastosować GCC. Z początkiem
maja 2003, cały kod został zmieniony tak, aby współpracował z GCC i idzie
to całkiem dobrze.
Cała praca była nie lada wyzwaniem. Jestem pewien, że zostanie doceniona.
Nie mówię tylko o dos.library, ale także o wszystkich pozostałych elementach
systemu. Jestem również pewien, że niebawem usłyszycie więcej informacji od
innych programistów, którzy zajmowali się pracą nad innymi modułami.
Kończąc ten artykuł, pomyślałem, że będzie miło jeżeli pokaże coś, czego
nikt spoza programistów systemu operacyjnego prawdopodobnie nigdy nie widział.
Od wejścia w życie wersji V50, zostało to przeniesione na zawsze do archiwum.
Poniższy tekst pochodzi z oryginalnego nagłówka napisanego w starym kodzie
asemblerowym. Zawarty był w wersji V40 w pliku "doslib.asm".
Autor: Colin J. Wenzel
Club Amiga logo concept and artwork by Mark Rickan & Mohamed Moujami, winners of the Club Amiga Logo Contest.
Submitted text and images reproduced in Club Amiga Monthly are copyright by their respective authors.
All other text and images reproduced in Club Amiga Monthly are copyright 2003 Amiga Inc.
Content may not be reprinted or reproduced in part or in whole without express written consent of Amiga Inc.