Binarny plik DOS-u
From Atariki
Wersja z dnia 17:58, 11 gru 2020 Mono (Dyskusja | wkład) (COS+NCOPY) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→COS + NCOPY - przykład) |
||
Linia 30: | Linia 30: | ||
* $0B: spacja ($20) | * $0B: spacja ($20) | ||
* $0C-$0E: długość pliku wyrażona w 128-bajtowych blokach również zapisana kodami ATASCII. | * $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 == | == Przykłady == |
Aktualna wersja
Plik powstający po wydaniu polecenia "BINARY SAVE" z poziomu DOS-ów Atari w wersjach 1.0, 2.0, 2.5, 4.0, jak i MyDOSu.
Spis treści |
Format standardowy
Plik binarny, zwykle zawierający program wykonywalny dla ośmiobitowego Atari i przeznaczony do wczytania pod kontrolą DOS-u lub inicjalizera. Plik taki ma strukturę blokową, tzn. składa się z jednego, bądź więcej bloków, czy też segmentów, przy czym pierwszy z nich musi zaczynać się sygnaturą w postaci słowa $FFFF. Pozostałe bloki mogą zawierać tę sygnaturę, ale nie jest to warunek konieczny - wszystkie natomiast muszą zawierać nagłówek.
Standardowy format nie przewiduje automatycznej relokacji danych, nagłówek dosłownie wskazuje adresy, pod które należy wczytać dane zawarte w bloku (segmencie). Relokowalne binaria ma tylko SpartaDOS X.
Nagłówek
Każdy blok zawiera nagłówek w postaci dwóch bądź trzech słów:
- sygnatura $FFFF (niezbędna przy pierwszym bloku, opcjonalna przy pozostałych),
- adres początku danych,
- adres końca.
Dane
Dane znajdują się bezpośrednio za nagłówkiem i wczytywane są w obszar pamięci wyznaczony przez adresy z nagłówka. Wyznaczają one również objętość ładowanych danych.
Obszary specjalne
W trakcie ładowania pliku binarnego słowa spod dwóch adresów w pamięci mają szczególne znaczenie:
- INITAD $02E2 - jeśli zostało zmienione poprzez ostatnio wczytywany blok, traktowane jest jako adres procedury do wykonania bezpośrednio po wczytaniu tego bloku (powrót przez RTS),
- RUNAD $02E0 - jeśli zostało zmienione przez którykolwiek z wczytywanych bloków, traktowane jest jako adres startowy od którego wykonywany zostanie program, po załadowaniu wszystkich bloków.
Jeśli słowo pod adresem $02E0 nie zostanie zmienione przez żaden z ładowanych bloków (bądź przez procedurę wykonywaną w wypadku stwierdzenia zmiany słowa $02E2), to nie ma ustalonego adresu, od którego należy wystartować załadowany plik binarny. Niektóre DOS-y - jak DOS XL i SpartaDOS - w takim wypadku, uruchamiają program od początku pierwszego bloku.
COS + NCOPY
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).