COM
From Atariki
| Wersja z dnia 11:05, 15 maj 2006 KMK (Dyskusja | wkład) (→Nagłówek) ← Previous diff  | 
				Wersja z dnia 11:35, 8 cze 2006 KMK (Dyskusja | wkład) Next diff →  | 
			||
| Linia 1: | Linia 1: | ||
| - | == Wstęp == | + | == 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 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. | ||
| - | Format nie przewiduje automatycznej relokacji kodu, nagłówek dosłownie wskazuje adresy, pod które nalezy 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 nalezy wczytać dane zawarte w bloku (segmencie). Relokowalne binaria ma tylko [[SpartaDOS X]]. | 
| - | == Nagłówek == | + | === Nagłówek === | 
| Każdy blok zawiera nagłówek w postaci dwóch bądź trzech słów: | 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), | # sygnatura $FFFF (niezbędna przy pierwszym bloku, opcjonalna przy pozostałych), | ||
| Linia 10: | Linia 10: | ||
| # adres końca. | # adres końca. | ||
| - | == Dane == | + | === 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. | 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 == | + | === Obszary specjalne === | 
| W trakcie ładowania pliku binarnego słowa spod dwóch adresów w pamięci mają szczególne znaczenie: | 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), | * 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. | * 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. | 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 == | ||
| + | |||
| + | == SpartaDOS X == | ||
| + | |||
| + | [[SpartaDOS X]] definiuje, jak wspomniano powyżej, format relokowalnych binariów. Są w nim zapisane procedury załączone do DOS-u procedury systemowe i większość programów narzędziowych. Binaria takie wytwarza [[Fast Assembler]] oraz [[MADS]]. Segmenty tych binariów mają - w zależności od funkcji - sygnatury $FEFF, $FDFF, $FCFF i $FAFF. | ||
| + | |||
| + | == 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. | ||
| {{stub}} | {{stub}} | ||
Wersja z dnia 11:35, 8 cze 2006
Spis treści | 
Format standardowy
Plik COM to plik binarny, zwykle zawierający program wykonywalny dla ośmiobitowego Atari i przeznaczony do wczytania pod kontrolą DOS lub inicjalizera. 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.
Standardowy format nie przewiduje automatycznej relokacji kodu, nagłówek dosłownie wskazuje adresy, pod które nalezy 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
SpartaDOS X
SpartaDOS X definiuje, jak wspomniano powyżej, format relokowalnych binariów. Są w nim zapisane procedury załączone do DOS-u procedury systemowe i większość programów narzędziowych. Binaria takie wytwarza Fast Assembler oraz MADS. Segmenty tych binariów mają - w zależności od funkcji - sygnatury $FEFF, $FDFF, $FCFF i $FAFF.
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.
