MAPA PAMIĘCI
Kolejne cztery bajty są bardzo ważne głównie dla użytkowników stacji dysków, dla pozostałych są to po prostu nieużywane komórki pamięci, obdarzone wspólną nazwą GLBABS. Kiedy w pamięci znajduje się jakiś Dyskowy System Operacyjny (zwany w skrócie DOS-em), to mamy do czynienia z dwoma słowami, które przechowują bardzo ważne informacje, dotyczące ostatnio ładowanego programu maszynowego.
Użytkownicy publikowanej na łamach TA nakładki dla DOS-a 2.5 o nazwie "Command Processor" lub popularnego COS-a znają na pewno polecenie RUN, rozpoznawane przez te programy. Użycie tej komendy bez parametru powoduje ponowne wykonanie programu ostatnio wgrywanego z dysku, czy też kasety. Wynika to z prostego faktu - komenda RUN bez parametru powoduje wykonanie programu, którego adres zawarty jest właśnie w opisywanych komórkach pamięci. Takie, bardzo sympatyczne zachowanie ładowanego programu możliwe jest tylko wtedy, kiedy jego wykonywanie zostało zakończone w ładny sposób, czyli przez "dobrowolny" powrót do DOS-a, bowiem w przypadku zakończenia pracy naciśnięciem klawisza RESET każdy DOS wpisze do RUNAD adres swojej własnej procedury bezpieczeństwa. Cały powyższy opis jest prawdziwy dla DOS-a 2.5 i wszelkich DOS-ów, które są z nim zgodne. Jednak oprócz nich istnieją także Dyskowe Systemy Operacyjne, które startują odczytywane programy w sobie tylko właściwy sposób. Najbardziej znanym spośród nich jest SpartaDOS, który wykonuje programy od pierwszego odczytanego bajtu, o ile nie podano RUNAD. Należy o tym pamiętać, kiedy tworzy się programy przeznaczone właśnie dla SpartaDOS-a. Skoro już piszę o uruchamianiu programów dyskowych i o SpartaDOS-ie, to nie od rzeczy będzie wspomnieć o jeszcze jednej ważnej sprawie. Często zdarza się, że programy kończą się zwykłą instrukcją RTS, powodującą powrót do DOS-a. Nie jest to błędem, lecz o wiele bezpieczniejsze jest kończenie programu rozkazem skoku pośredniego przez komórkę DOSVEC (10-11, $0a-0b). Taka ostrożność spowodowana jest znajomością zachowania właśnie SpartaDOS-a, który po wywołaniu pierwszego odczytanego rozkazu usiłuje jeszcze wykonać procedurę, której adres jest w RUNAD. Wywołanie DOS-a przez DOSVEC powoduje zaniechanie takiego postępowania i nie grozi żadnymi niebezpiecznymi konsekwencjami.
Procedura inicjalizacyjna jest zazwyczaj króciutkim podprogramem, który przygotowuje proces ładowania właściwego programu dyskowego. Może on np. wyłączyć ekran w przypadku, gdy ładowana jest nowa Display List, co zapobiegnie niezbyt ładnym efektom "mrugania" obrazu. Podczas inicjalizacji można także wyświetlić wizytówkę, która będzie widniała na ekranie przez cały czas wgrywania programu, czy też stworzyć licznik wczytywanych bloków danych - jest całe mnóstwo możliwości, których wykorzystanie może znakomicie uatrakcyjnić oczekiwanie na załadowanie programu. Wszystkie powyższe sugestie można również odnieść do COS-a, który jest dokładnym odpowiednikiem Dyskowego Systemu Operacyjnego, a więc także przestrzega zasad ładowania programów. W przypadku używania COS-a komórka INITAD ma nawet jeszcze większe znaczenie, bo widok ładnego, interesującego ekranu naprawdę umila niezbyt krótkie oczekiwanie na wgranie programu kasetowego.
Zawartość RAMSIZ jest dokładnie taka sama, jak zawartość RAMTOP (106, $6a), a domyślna umieszczana tutaj wartość to 160, co jest o tyle zrozumiałe, że interpreter BASIC-a zajmuje obszar od adresu 40960, czyli 160*256.
Istnienie tego typu wskaźnika ma swoje uzasadnienie i jest bardzo pomocne przy tworzeniu tzw. programów rezydentnych. Cóż to takiego? Programy rezydentne to programy, które ładują się do pamięci i są w niej stale obecne, aż do momentu usunięcia ich przez użytkownika, przy czym umożliwiają pracę z innymi programami, chowając się gdzieś w tle i aktywizując się dopiero na wyraźne życzenie. Do tej klasy programów należy np. popularny XLF - umożliwia on korzystanie z edytora tekstów, tablicy kodów, kalkulatora i wglądownicy równocześnie z dowolnym innym programem załadowanym do pamięci. Uważni czytelnicy TA na pewno przypominają sobie publikowany w numerze 1/92 w cyklu o programowaniu procesora 6502 program Relocator, którego zadaniem było takie przetłumaczenie dowolnego programu maszynowego, aby po umieszczeniu go pod adresem wskazywanym przez MEMLO dawał się bez kłopotu uruchomić. Dysponując tęgo typu procedurą mamy podstawowe narzędzie do tworzenia programów rezydentnych - trzeba tylko, żeby taki program był połączony z Relocatorem i po przeniesieniu go na sam dół pamięci wpisał do MEMLO adres pierwszego bajtu ponad sobą. Podłączony do jakiegoś przerwania, np. do przerwania klawiatury może spokojnie oczekiwać na polecenie aktywacji, nie przeszkadzając innym programom w pracy. To wszystko teoria, którą staramy się lansować w naszej gazecie, ale w praktyce nie jest to tak łatwe, jak może się wydawać. Nie znaczy to oczywiście, że zamierzam wycofać się z tego, co napisałem przed chwilą. Chodzi mi o coś innego - wiele programów nic sobie nie robi z MEMLO. Na przykład bardzo interesujący SpartaDOS X ładuje swoje dane w stałe miejsce w dole pamięci nie zwracając uwagi na to, że coś przy okazji niszczy. Niestety, na to nie można już nic poradzić, trzeba tylko pamiętać o tym przy ładowaniu programów rezydentnych do pamięci.
Wielu użytkowników ATARI XL/XE dysponuje rozszerzeniami stacji dysków, często zgodnymi ze standardem TOP DRIVE. W tym systemie niektórym z bitów DVSTAT nadano dodatkowe znaczenie - postaram się króciutko wspomnieć o tych cechach, choć wszelkie informacje pochodzą z dokumentacji systemu TOP DRIVE instalowanego przez pewną firmę z Nowej Dęby i nie mogę wziąć za nie pełnej odpowiedzialności.
Znaczenie bitów: • 7 bit ustawiony oznacza, że urządzenie jest "inteligentne", czyli wyposażone we własny mikroprocesor, natomiast bit skasowany mówi o tym, że mamy do czynienia z magnetofonem kasetowym; w systemie TOP DRIVE (będę go oznaczał umownie TD) i podobnych, wartość 0 tego bitu oznacza, że w stacji znajduje się dyskietka sformatowana w rozszerzonej gęstości. • 6 nieużywany. • 5 bit ustawiony oznacza w TD, że dyskietka w stacji została sformatowana w podwójnej gęstości. • 4 bit ustawiony oznacza, że silnik urządzenia w tej chwili pracuje. • 3 bit ustawiony oznacza, że dyskietka jest zabezpieczona przed zapisem. • 2 bit ustawiony oznacza, że podczas zapisu wystąpił błąd. • 1 bit ustawiony oznacza, że podczas przesyłania danych wystąpił błąd. • 0 bit ustawiony oznacza nieprawidłową komendę dla urządzenia.
W systemie TD znaczenie bitów jest następujące: • 7 bit równy 0 oznacza, że drzwi stacji są otwarte. • 6 bit równy 0 oznacza, że dysk jest zabezpieczony przed zapisem. • 5 bit oznacza typ rekordu, lecz niestety nie umiem podać szczegółów na ten temat. • 4 bit równy 0 oznacza, że wystąpił błąd RNF (*). • 3 bit równy 1 oznacza, że wystąpił błąd CRC (*). • 2 bit równy 0 oznacza, że podczas przesyłania część danych została utracona; • 1 bit równy 0 oznacza żądanie przesłania danych. • 0 bit równy 0 oznacza, że kontroler stacji jest zajęty.
Jarosław Syrylak
(*) RNF oznacza Record Not Found, zaś CRC jest skrótem, pochodzącym od słów Cyclic Redundancy Check. Obydwa terminy odnoszą się do informacji kontrolnych zawartych na każdej ścieżce oraz w każdym sektorze na dysku i dostępnych jedynie dla sterownika napędu. Błąd RNF występuje wtedy, gdy nie odnaleziono sektora z danymi, których potrzebuje program, a błąd CRC oznacza nieprawidłową sumę kontrolną dla danych w sektorze. |