Binarny plik DOS-u

From Atariki

(Przekierowano z Binarny plik DOSu)
Jump to: navigation, search

Najpopularniejszy format pliku obiektowego, wprowadzony przez Atari, Inc. jako format wynikowy funkcji "BINARY SAVE" DOS-u 1.0 i programu Assembler Editor. Format został zmodyfikowany w DOS-ie 2.0, i w tej nowszej wersji wszedł do powszechnego użycia - wersja 2.0 jest obsługiwana przez wszystkie kolejne DOS-y firmy Atari oraz przez systemy innych firm, np. MyDOS.

Plik ma strukturę blokową - składa się z jednego lub więcej bloków, czy też segmentów, z których każdy dosłownie wskazuje adresy, pod które należy wczytać dane zawarte w bloku. Ten format pliku zatem nie przewiduje automatycznej relokacji danych - relokowalne binaria ma tylko SpartaDOS X.

Specjalne bloki pozwalają też na uruchamianie kodu inicjującego w trakcie ładowania pliku, oraz uruchomienie programu po jego załadowaniu. Pliki w tym formacie są więc zazwyczaj programami wykonywalnymi dla ośmiobitowego Atari, przeznaczonymi do wczytania pod kontrolą DOS-u lub inicjalizera.

Spis treści

Format pliku

Sygnatura pliku

Plik musi zaczynać się sygnaturą w postaci 2 bajtów:

  • $84 $09 w przypadku DOS-u 1.0,
  • $FF $FF w przypadku DOS-u 2.0 i późniejszych.

Po sygnaturze następuje jeden lub więcej bloków, czy też segmentów.

Struktura bloku

Każdy blok poprzedzony jest 4-bajtowym nagłówkiem w postaci dwóch słów (w kolejności LSB):

  1. adres początku danych,
  2. adres końca.

Po nagłówku następują bajty danych, w liczbie równej dokładnie <adres końca> - <adres początku> + 1. Dane te wczytywane są w obszar pamięci wyznaczony przez adresy z nagłówka.

Począwszy od DOS-u 2.0 dopuszczalne jest wystąpienie nadmiarowej sygnatury ($FF $FF) przed każdym blokiem (włącznie z pierwszym) - podczas odczytu jest ona ignorowana. Pozwala to na scalenie (np. komendą COPY FILE z parametrem /A) wielu plików binarnych DOS-u w jeden, bez konieczności usuwania 2 bajtów sygnatury z każdego pliku poza pierwszym.

Obszary specjalne

W trakcie ładowania pliku binarnego zapisanie danych do określonych obszarów pamięci ma szczególne znaczenie:

RUNAD - automatyczne uruchomienie po załadowaniu

Załadowanie adresu pod wektor RUNAD = $02E0-$02E1 spowoduje, że gdy ładowanie osiągnie koniec pliku, tj. po zakończeniu ładowania wszystkich bloków, system wykona skok pod ten adres. Pozwala to stworzyć plik programu samouruchamiający się po załadowaniu.

Program może zakończyć działanie i powrócić do DOS-u wykonując skok pośredni poprzez wektor DOSVEC = $0A-$0B. W DOS-ie 1.0 była to jedyna możliwość powrotu, natomiast począwszy od DOS-u 2.0 możliwe jest też zakończenie programu rozkazem RTS.

Niektóre DOS-y, np. DOS XL i SpartaDOS, nie pozwalają załadować pliku obiektowego bez uruchomienia. Brak wpisania adresu pod RUNAD powoduje, że owe DOS-y wykonują skok pod adres początkowy pierwszego załadowanego bloku.

INITAD - automatyczna inicjalizacja podczas ładowania

W DOS-ie 2.0 wprowadzono możliwość wykonania programu po załadowaniu każdego bloku. Załadowanie adresu pod wektor INITAD = $20E2-$20E3 powoduje skok pod ów adres natychmiast po załadowaniu bieżącego bloku. Wczytywany plik pozostaje otwarty. Powrót z programu rozkazem RTS powoduje kontynuację ładowania pliku.

COS + NCOPY - wyświetlanie nazwy ładowanego pliku

COS w trakcie ładowania programu z taśmy pozwala na wyświetlenie jego nazwy nadanej podczas kopiowania przy pomocy programu Name Copy. Blok nazwy jest zwykłym blokiem binarnym ładowanym w obszar $1C0-$1CE:

  • $00-$07: nazwa pliku w kodach ATASCII,
  • $08-$0A: rozszerzenie pliku w kodach ATASCII,
  • $0B: spacja ($20)
  • $0C-$0E: długość pliku wyrażona w 128-bajtowych blokach również zapisana kodami ATASCII.

UWAGA! Jest on zapisywany przez Name Copy jako pierwszy blok pliku, co może powodować problemy z uruchomieniem programu w niektórych DOS-ach w sytuacji gdy w pliku nie zdefiniowano adresu uruchomienia programu.

Przykładowa treść bloku:

QA      COM 100

Przykłady

Format ten stosowany jest zarówno do wczytywania kodu programu (np. zewnętrzne polecenia DOS-u w postaci plików COM, EXE, XEX), jak i pozbawionych kodu programu czystych danych (np. CMC, TMC).

Personal tools