COM
From Atariki
Wersja z dnia 23:09, 5 lut 2008 Eru (Dyskusja | wkład) (Dodane info, że znane to jest również jako EXE i XEX) ← Previous diff |
Wersja z dnia 13:14, 11 sie 2008 Jellonek (Dyskusja | wkład) (przeredagowanie w zwiazku z Binarnym plikiem DOSu) Next diff → |
||
Linia 2: | Linia 2: | ||
== Format standardowy == | == Format standardowy == | ||
- | Plik [[COM]] to plik binarny, zwykle zawierający program wykonywalny dla ośmiobitowego Atari i przeznaczony do wczytania pod kontrolą [[DOS]] lub [[inicjalizer]]a. Często COM jest komendą zewnętrzną systemu DOS, tak jak np. w systemie [[SpartaDOS X]]. 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. | + | Plik [[COM]] to standardowy [[Binarny plik DOSu|plik binarny DOSu]]. |
Standardowy format nie przewiduje automatycznej relokacji kodu, nagłówek dosłownie wskazuje adresy, pod które należy wczytać dane zawarte w bloku (segmencie). Relokowalne binaria ma tylko [[SpartaDOS X]]. | Standardowy format nie przewiduje automatycznej relokacji kodu, 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 [[DOSy]] - jak [[DOS XL]] i [[SpartaDOS]] - w takim wypadku, uruchamiają program od początku pierwszego bloku. | ||
== Formaty niestandardowe == | == Formaty niestandardowe == |
Wersja z dnia 13:14, 11 sie 2008
COM to format pliku zawierającego pliki wykonywalne dla ośmiobitowego Atari. Pliki o tym formacie występują też z rozszerzeniami EXE (głównie na Atari), oraz XEX (głównie do użycia w emulatorach).
Spis treści |
Format standardowy
Plik COM to standardowy plik binarny DOSu.
Standardowy format nie przewiduje automatycznej relokacji kodu, nagłówek dosłownie wskazuje adresy, pod które należy wczytać dane zawarte w bloku (segmencie). Relokowalne binaria ma tylko SpartaDOS X.
Formaty niestandardowe
XL OS
XL OS zawiera własny loader i relokator binariów nazwanych umownie ACX.
SpartaDOS X
SpartaDOS X definiuje, jak wspomniano powyżej, format relokowalnych binariów. Są w nim zapisane załączone do DOS-u procedury systemowe i większość programów narzędziowych. Opcję tworzenia takich binariów mają m.in.: Fast Assembler, HCASM oraz MADS. Segmenty tych binariów mają - w zależności od funkcji - następujące sygnatury:
- .word $FFFA ($FA,$FF) - blok nierelokowalny, ładowany pod wskazany w nagłówku adres (identycznie jak w przypadku bloku o sygnaturze $FFFF); na ogół zawiera nierezydentny (instalacyjny) segment jakiegoś sterownika.
- .word $FFFE ($FE,$FF) - blok relokowalny, ładowany nad MEMLO lub do dodatkowej pamięci, w zależności od zawartości nagłówka (blok może takźe rezerwować pusty obszar pamięci).
- .word $FFFD ($FD,$FF) - blok określający położenie adresów w programie, używany przy relokacji.
- .word $FFFB ($FD,$FF) - blok określający położenie odwołań do symboli zewnętrznych.
- .word $FFFC ($FC,$FF) - blok definicji symbolu.
AlfAssembler
AlfAssembler definiuje format binarny funkcjonalnie identyczny ze standardowym, ale rozszerzony na całą przestrzeń adresową 65C816. Nagłówek ma osiem bajtów: po sygnaturze $FBFB nastepuje 24-bitowy adres poczatku bloku, a po nim 24-bitowy adres końca bloku.
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.