Turbo ROM
From Atariki
Wersja z dnia 21:57, 21 sty 2010 FUJI (Dyskusja | wkład) (→Struktura nagrania - prawdziwy sposób kodowania bitów nadal niepewny) ← Previous diff |
Aktualna wersja FUJI (Dyskusja | wkład) (→Ogólna budowa bloków danych - - uzupełnienie) |
||
Linia 6: | Linia 6: | ||
==Technikalia, obsługa== | ==Technikalia, obsługa== | ||
- | ''Źródło: [[Tajemnice_Atari]] nr 5/91 (obszerne wyjątki) Uwaga: jest to recenzja systemu Turbo ROM Plus, ale obecność "Plus" w nazwie najprawdopodobniej odróżnia jednego dystrybutora, firmę Plus, od drugiego (firmy Mapasoft)'' | + | ''Źródło: [[Tajemnice_Atari]] nr 5/91 (obszerne wyjątki), jest to recenzja systemu Turbo ROM Plus, sprzedawanego przez firmę "Plus", ale różnice użytkowe w stosunku do rozwiązania firmy Mapasoft są niewielkie.'' |
(...)Zainstalowanie Turbo Romu polega na przeróbce magnetofonu oraz wymaga posiadania cartridge'a zawierającego oprogramowanie systemowe. Możliwa jest również praca bez cartridge'a, ale wtedy przed każdym programem umieszczony jest trzyrekordowy loader w systemie standard, a więc średnia szybkość transmisji jest dużo mniejsza. Z tego też powodu dużo wygodniejsza jest praca z dołączaną pamięcią ROM (...). | (...)Zainstalowanie Turbo Romu polega na przeróbce magnetofonu oraz wymaga posiadania cartridge'a zawierającego oprogramowanie systemowe. Możliwa jest również praca bez cartridge'a, ale wtedy przed każdym programem umieszczony jest trzyrekordowy loader w systemie standard, a więc średnia szybkość transmisji jest dużo mniejsza. Z tego też powodu dużo wygodniejsza jest praca z dołączaną pamięcią ROM (...). | ||
Linia 31: | Linia 31: | ||
==Struktura nagrania== | ==Struktura nagrania== | ||
- | ''Opis wyłącznie na podstawie analizy sygnału z taśmy'' | + | ''Opis na podstawie analizy sygnału z taśmy i programu obsługi umieszczonego na cartridge-u'' |
- | Nośnikiem informacji, jak w przypadku innych szybkich systemów turbo, jest szerokość impulsu (modulacja [http://pl.wikipedia.org/wiki/Pulse_Width_Modulation PWM]). Sądząc z kształtu fali sygnału, w tym przypadku najprawdopodobniej szerokość tę determinuje czas trwania stanu wysokiego (lub niskiego), a nie czas trwania cyklu następujących po sobie stanów wysokiego i niskiego (czy niskiego i wysokiego) jak np. w [[Turbo_Blizzard|Turbo Blizzard]]. | + | Nośnikiem informacji, jak w przypadku innych szybkich systemów turbo, jest szerokość impulsu (modulacja [http://pl.wikipedia.org/wiki/Pulse_Width_Modulation PWM]). Przez impuls rozumiana jest sekwencja narastającego i opadającego zbocza sygnału (sekwencja poziomów wysokiego i niskiego, w tej kolejności). |
- | ---- | + | Szerokości impulsów używanych w tym systemie zapisu wynoszą: |
- | ''treść pomiędzy liniami to czysta spekulacja'' | + | |
- | Szerokości impulsów (rozumianych jak powyżej) najprawdopodobniej są zdeterminowane cyklami zegara procesora (lub innymi cyklami zegarowymi) i wynoszą: | + | * 0.2 ms - 0.4 ms dla bitów "1" |
+ | * 0.08 ms - 0.2 ms dla bitów "0" | ||
- | * 0.15-0.20 ms dla bitów "1" | + | ''wartości teoretyczne (AUDF3 i AUDF4 połączone w jeden licznik, AUDCTL=$28)'': |
- | * 0.05-0.1 ms dla bitów "0" | + | * ''sygnał pilotujący: AUDF3=$29, AUDF4=$01'' |
+ | * ''bit 0: AUDF3=$69, AUDF4=$00'' | ||
+ | * ''bit 1: AUDF3=$EB, AUDF4=$00'' | ||
- | Na sygnał pilotujący składa się długa seria impulsów "1". | + | Na sygnał pilotujący składa się długa seria impulsów odpowiadających bitom "1". Szerokość tych impulsów tak naprawdę jest trochę większa niż dla bitów "1", ale procedura odczytu spodziewa się tych samych przedziałów wartości w obu przypadkach. Powód takiego zróżnicowania jest niejasny. |
- | ---- | + | Przy odczycie brany jest pod uwagę tylko czas trwania stanu "1" na linii data-in, co odpowiada niskiemu poziomowi sygnału na taśmie. Stan "0" jest po prostu omijany. Wynika to z tego, że odległości między zboczami sąsiadujących ze sobą impulsów "0" i "1" nie są ściśle zachowywane, co nie pozwoliło by na bezbłędny odczyt. |
- | Odstępy pomiędzy impulsami zmieniają się dynamicznie w granicach od 0.1 ms do 0.2 ms i zależą od szerokości sąsiadujących impulsów. Gdy następuje seria impulsów "0", to odległości między nimi również spadają do szerokości tych impulsów. Podobnie w przypadku impulsów "1". Gdy sąsiadują ze sobą impulsy "0" i "1", to przerwa między nimi ma jakąś pośrednią szerokość. | + | Czas trwania impulsów jest mierzony w pętli wykonywanej przez mikroprocesor (pętla trwa 9 taktów zegara), podczas operacji odczytu wyłączane są wszelkie przerwania i wyświetlanie obrazu. |
- | Zaraz za stosunkowo krótkim sygnałem pilotującym (trwającym 2 s dla bloku nazwy i 0.57 s dla bloku danych) jest jeden impuls "0", za którym znajdują się już dane. Bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym). | + | Przy zapisie do odmierzania czasu wykorzystane są liczniki POKEY-a, sterowanie poziomem sygnału odbywa się przez rejestr PBCTL (bit 3, sterowanie linią COMMAND). Przerwania tak jak przy odczycie są wyłączone. |
- | Generalnie cały program zapisany jest w jednym długim bloku danych, co wydatnie podnosi prędkość wczytywania (brak przerw między blokami). | + | Koniec bloku danych jest wykrywany na podstawie zmierzonego czasu trwania impulsu - jeżeli czas ten jest dłuższy od maksymalnego czasu dla bitu "1" lub krótszy od minimalnego czasu dla bitu "0" to procedura odczytu się kończy i obliczana jest suma kontrolna (XOR) dla odczytanych danych. Jest to jedyny sposób wyjścia z pętli odczytu (oprócz klawisza RESET). |
- | Spotykane są nagrania dwojakiego rodzaju: | + | ====Ogólna budowa bloków danych==== |
- | * bez "bloku nazwy" (gdy loader w formacie standardowym jest nagrany przed częścią turbo) | + | |
- | * z "blokiem nazwy" (potrzebny cartridge z oprogramowaniem do odczytu) | + | |
- | "Blok nazwy", jeżeli występuje, składa się z 41 bajtów. | + | Program w oryginalnym systemie Turbo Rom składa się z dwóch bloków: bloku informacyjnego i bloku właściwych danych. Blok informacyjnych zawiera m.in. nazwę programu. Blok informacyjny wygląda różnie w zależności od rodzaju pliku. Bloku informacyjnego nie ma w przypadku programów poprzedzonych odpowiednim loaderem zapisanych w formacie standardowym, do ładowania takich programów nie jest potrzebny cartridge, a informacje zawarte normalnie w bloku informacyjnym są zintegrowane z loaderem. |
- | W nagraniu używającym loadera na kasecie obecność "bloku nazwy" jest symulowana przez loader. | + | |
- | {{stub}} | + | Oprócz tego ''(według informacji od współautora oprogramowania)'' powstały również: |
- | [[Kategoria:Atari 8-bit]] [[Kategoria: Magnetofonowe Systemy Turbo]] | + | |
+ | *zmodyfikowana wersja Turbo Rom Plus z inną organizacją danych ''(szczegóły nieznane)'' | ||
+ | *wersja, w której dane były transmitowane w wielu krótkich blokach danych, wzorowana na systemie [[Turbo_Blizzard|Turbo Blizzard]]; powstało również specjalne oprogramowanie do tej wersji (loadery oraz [[Turbo_Rom_KOS|Turbo Rom KOS]]) | ||
+ | |||
+ | Ogólnie w bloku danych występują kolejno: | ||
+ | * sygnał pilotujący - dłuższy dla bloku informacyjnego (4884 impulsy "1", około 1.8 s, minimu wymagane przy odczycie to 5x256 impulsów) i krótszy dla bloku danych (516 impulsow "1", około 0.2 s, minimum 256 impulsów) | ||
+ | * jeden impuls odpowiadający bitowi "0" oznaczający koniec sygnału pilotującego i początek danych | ||
+ | * bajty danych, bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym). | ||
+ | * 4 impulsy odpowiadające bitowi "1" chroniące koniec bloku przed uszkodzeniem (ostatni impuls może być nieczytelny) | ||
+ | |||
+ | ====Budowa bloku informacyjnego dla programów typu COM/EXE==== | ||
+ | |||
+ | {| border="1" | ||
+ | |- | ||
+ | !Offset | ||
+ | !Długość | ||
+ | !Zawartość | ||
+ | |- | ||
+ | |0 | ||
+ | |1 | ||
+ | |Suma kontrolna (XOR) bloku informacyjnego | ||
+ | |- | ||
+ | |1 | ||
+ | |2 | ||
+ | |Adres ładowania bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $0601 | ||
+ | |- | ||
+ | |3 | ||
+ | |2 | ||
+ | |Długość bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $0028 | ||
+ | |- | ||
+ | |5 | ||
+ | |1 | ||
+ | |Suma kontrolna (XOR) bloku danych (następnego po obecnym) | ||
+ | |- | ||
+ | |6 | ||
+ | |2 | ||
+ | |Adres przepisywany do RUNAD ($02E0) - adres uruchomienia programu | ||
+ | |- | ||
+ | |8 | ||
+ | |2 | ||
+ | |Adres przepisywany do INITAD ($02E2) - adres inicjalizacji programu | ||
+ | |- | ||
+ | |10 | ||
+ | |2 | ||
+ | |Adres początku ładowania programu | ||
+ | |- | ||
+ | |12 | ||
+ | |2 | ||
+ | |Długość bloku danych (następnego po obecnym) | ||
+ | |- | ||
+ | |14 | ||
+ | |1 | ||
+ | |Zawsze 0 | ||
+ | |- | ||
+ | |15 | ||
+ | |20 | ||
+ | |Nazwa programu, zapisana w kodach ekranowych. Mogą być używane znaki o kodach od 0 do 63. Dwa najstarsze bity określają kolor wyświetlania znaku ''(w trybie 6 lub 7 ANTIC-a)'' | ||
+ | |- | ||
+ | |35 | ||
+ | |1 | ||
+ | |Typ programu. Dla programów com/exe zawsze równy 1. | ||
+ | |- | ||
+ | |36 | ||
+ | |1 | ||
+ | |Flaga określająca konieczność skoku do adresu w INITAD przed skokiem do RUNAD. Procedura w INITAD jest uruchamiana, gdy ten bajt jest równy 0. | ||
+ | |- | ||
+ | |37 | ||
+ | |3 | ||
+ | |??? trzy zera | ||
+ | |- | ||
+ | |40 | ||
+ | |1 | ||
+ | |Kod rozkazu RTS ($60). W to miejsce wykonywany jest skok zaraz po pomyślnym odczytaniu bloku informacyjnego. | ||
+ | |} | ||
+ | |||
+ | ''Całkowita długość: 41 bajtów'' | ||
+ | |||
+ | ====Budowa bloku informacyjnego dla programów w BASIC-u==== | ||
+ | |||
+ | {| border="1" | ||
+ | |- | ||
+ | !Offset | ||
+ | !Długość | ||
+ | !Zawartość | ||
+ | |- | ||
+ | |0 | ||
+ | |1 | ||
+ | |Suma kontrolna (XOR) bloku informacyjnego | ||
+ | |- | ||
+ | |1 | ||
+ | |2 | ||
+ | |Adres ładowania bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $0601 | ||
+ | |- | ||
+ | |3 | ||
+ | |2 | ||
+ | |Długość bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $004D | ||
+ | |- | ||
+ | |5 | ||
+ | |1 | ||
+ | |Suma kontrolna (XOR) bloku danych (następnego po obecnym) | ||
+ | |- | ||
+ | |6 | ||
+ | |2 | ||
+ | |Adres uruchomienia programu. W przypadku normalnych programów w BASIC-u wskazuje na procedurę umieszczoną w pamięci cartridge-a (wpisanie $FF do KBCODES, 1 do rejestru Y i powrót). | ||
+ | |- | ||
+ | |8 | ||
+ | |2 | ||
+ | |Adres inicjalizacji programu. W przypadku normalnych programów w BASIC-u zawiera zera, brak procedury inicjalizacji. | ||
+ | |- | ||
+ | |10 | ||
+ | |2 | ||
+ | |Względny adres początku ładowania programu (LOMEM) | ||
+ | |- | ||
+ | |12 | ||
+ | |2 | ||
+ | |Długość bloku danych (następnego po obecnym). | ||
+ | |- | ||
+ | |14 | ||
+ | |1 | ||
+ | |Zawsze 0 | ||
+ | |- | ||
+ | |15 | ||
+ | |20 | ||
+ | |Nazwa programu, zapisana w kodach ekranowych. Mogą być używane znaki o kodach od 0 do 63. Dwa najstarsze bity określają kolor wyświetlania znaku ''(w trybie 6 lub 7 ANTIC-a)'' | ||
+ | |- | ||
+ | |35 | ||
+ | |1 | ||
+ | |Typ programu. Dla programów w BACIC-u zawsze równy 0. | ||
+ | |- | ||
+ | |36 | ||
+ | |1 | ||
+ | |Flaga określająca konieczność skoku do adresu w INITAD przed skokiem do RUNAD. Procedura w INITAD jest uruchamiana, gdy ten bajt jest równy 0. W przypadku normalnych programów w BASIC-u rówy 1. | ||
+ | |- | ||
+ | |37 | ||
+ | |3 | ||
+ | |??? trzy zera | ||
+ | |- | ||
+ | |40 | ||
+ | |19 | ||
+ | |Procedura przygotowująca program do załadowania. | ||
+ | <pre> | ||
+ | LDX #17 | ||
+ | loop: LDA $660,X ;patrz dwa wiersze tabeli niżej | ||
+ | STA 128,X | ||
+ | DEX | ||
+ | BPL loop | ||
+ | LDA #158 | ||
+ | STA $254 | ||
+ | STA $268 ;COLDST | ||
+ | RTS | ||
+ | </pre> | ||
+ | |- | ||
+ | |59 | ||
+ | |1 | ||
+ | |Bajt równy 0. | ||
+ | |- | ||
+ | |60 | ||
+ | |18 | ||
+ | |Zmienne BASIC-a (LOMEM,VNTP,VNTD,VVTP,SIMTAB,STMCUR,STARP,RUNSTK,BMEMHI) przepisywane przez powyższą procedurę pod adres $0080. | ||
+ | |} | ||
+ | |||
+ | ''Całkowita długość: 78 bajtów'' | ||
+ | |||
+ | ==Zobacz też== | ||
+ | * [http://atariarea.krap.pl/forum/viewtopic.php?id=5652 Wątek o Turbo Rom] na forum atari.area | ||
+ | *[[Systemy turbo]] | ||
+ | [[Kategoria:Atari 8-bit]] | ||
+ | [[Kategoria:Magnetofonowe systemy turbo]] |
Aktualna wersja
System "Turbo ROM" został opracowany wspólnie przez krakowskie firmy PLUS i MAPASOFT (źródło: opty.org).
Do wczytywania nagrań w tym formacie potrzebny był specjalny cartridge z oprogramowaniem ładującym, ewentualnie właściwe nagranie poprzedzał loader nagrany na taśmie w formacie standardowym.
Przeznaczeniem tego systemu była przede wszystkim dystrybucja gier i programów do szybkiego wczytywania z magnetofonu.
Spis treści |
Technikalia, obsługa
Źródło: Tajemnice_Atari nr 5/91 (obszerne wyjątki), jest to recenzja systemu Turbo ROM Plus, sprzedawanego przez firmę "Plus", ale różnice użytkowe w stosunku do rozwiązania firmy Mapasoft są niewielkie.
(...)Zainstalowanie Turbo Romu polega na przeróbce magnetofonu oraz wymaga posiadania cartridge'a zawierającego oprogramowanie systemowe. Możliwa jest również praca bez cartridge'a, ale wtedy przed każdym programem umieszczony jest trzyrekordowy loader w systemie standard, a więc średnia szybkość transmisji jest dużo mniejsza. Z tego też powodu dużo wygodniejsza jest praca z dołączaną pamięcią ROM (...).
Dzięki zapisaniu wszelkich niezbędnych do pracy programów na dołączanej, zewnętrznej pamięci ROM komputer równocześnie z włączeniem staje się gotowy do pracy w turbo. W cartridge'u umieszczone są cztery programy umożliwiające pracę w systemie Turbo Rom Plus. Są to:
- loader do gier i pozostałych programów;
- program umożliwiający współpracę z basicem;
- program kopiujący pliki zapisane w formacie cartridge'a;
- program do przenoszenia plików zapisanych w formacie standardowych na format Turbo Rom.
Wymieniony powyżej zestaw programów wystarcza w zupełności do wczytywania i kopiowania gier i programów w basicu, bo też do tego system został z założenia stworzony. Jest to więc system przeznaczony przede wszystkim dla osób, które większość czasu przed komputerem spędzają pokonując kolejne gry. Dla użytkowników korzystających często z programów użytkowych Turbo Rom Plus jest nieco mniej użyteczny. Wpływa na to głównie oprogramowanie pisane pod kątem zastosowań mniej profesjonalnych, bowiem możliwości sprzętowe systemu są bardzo duże i szkoda, że nie zostały w pełni wykorzystane.
Ta niedogodność uwidacznia się jednak tylko w czasie naprawdę poważnej pracy z komputerem, natomiast dla osób, którym Atari służy do zabawy system jest bardzo użyteczny, praktyczny i prosty w obsłudze. Umożliwia między innymi nadawanie nagrywanym programom nazw, pojawiających się w czasie ich późniejszego wczytywania. Jeżeli wybierzemy funkcję LOAD i nie podamy nazwy gry system zacznie "przeglądać" kasetę, a po napotkaniu każdego programu wyświetla jego nazwę, pytając jednocześnie czy ma ten program wczytać. Turbo Rom Plus charakteryzuje się bardzo dużą szybkością transmisji danych, oczywiście przy zachowaniu dużej pewności wczytywania. Na jednej kasecie C-60 można zapisać nawet do 100 gier (przy użyciu turbo z cartridge'm). (...)
Zalety:
- bardzo duża szybkość transmisji;
- możliwość nadawania programom nazw;
- praca możliwa zarówno w systemie turbo, jak i w transmisji nomalnej bez konieczności przełączania dodatkowego przełącznika;
- połączenie komputerem przy pomocy używanego standardowo kabla.
Wady:
- utrudniona praca z programami użytkowymi.
Struktura nagrania
Opis na podstawie analizy sygnału z taśmy i programu obsługi umieszczonego na cartridge-u
Nośnikiem informacji, jak w przypadku innych szybkich systemów turbo, jest szerokość impulsu (modulacja PWM). Przez impuls rozumiana jest sekwencja narastającego i opadającego zbocza sygnału (sekwencja poziomów wysokiego i niskiego, w tej kolejności).
Szerokości impulsów używanych w tym systemie zapisu wynoszą:
- 0.2 ms - 0.4 ms dla bitów "1"
- 0.08 ms - 0.2 ms dla bitów "0"
wartości teoretyczne (AUDF3 i AUDF4 połączone w jeden licznik, AUDCTL=$28):
- sygnał pilotujący: AUDF3=$29, AUDF4=$01
- bit 0: AUDF3=$69, AUDF4=$00
- bit 1: AUDF3=$EB, AUDF4=$00
Na sygnał pilotujący składa się długa seria impulsów odpowiadających bitom "1". Szerokość tych impulsów tak naprawdę jest trochę większa niż dla bitów "1", ale procedura odczytu spodziewa się tych samych przedziałów wartości w obu przypadkach. Powód takiego zróżnicowania jest niejasny. Przy odczycie brany jest pod uwagę tylko czas trwania stanu "1" na linii data-in, co odpowiada niskiemu poziomowi sygnału na taśmie. Stan "0" jest po prostu omijany. Wynika to z tego, że odległości między zboczami sąsiadujących ze sobą impulsów "0" i "1" nie są ściśle zachowywane, co nie pozwoliło by na bezbłędny odczyt.
Czas trwania impulsów jest mierzony w pętli wykonywanej przez mikroprocesor (pętla trwa 9 taktów zegara), podczas operacji odczytu wyłączane są wszelkie przerwania i wyświetlanie obrazu.
Przy zapisie do odmierzania czasu wykorzystane są liczniki POKEY-a, sterowanie poziomem sygnału odbywa się przez rejestr PBCTL (bit 3, sterowanie linią COMMAND). Przerwania tak jak przy odczycie są wyłączone.
Koniec bloku danych jest wykrywany na podstawie zmierzonego czasu trwania impulsu - jeżeli czas ten jest dłuższy od maksymalnego czasu dla bitu "1" lub krótszy od minimalnego czasu dla bitu "0" to procedura odczytu się kończy i obliczana jest suma kontrolna (XOR) dla odczytanych danych. Jest to jedyny sposób wyjścia z pętli odczytu (oprócz klawisza RESET).
Ogólna budowa bloków danych
Program w oryginalnym systemie Turbo Rom składa się z dwóch bloków: bloku informacyjnego i bloku właściwych danych. Blok informacyjnych zawiera m.in. nazwę programu. Blok informacyjny wygląda różnie w zależności od rodzaju pliku. Bloku informacyjnego nie ma w przypadku programów poprzedzonych odpowiednim loaderem zapisanych w formacie standardowym, do ładowania takich programów nie jest potrzebny cartridge, a informacje zawarte normalnie w bloku informacyjnym są zintegrowane z loaderem.
Oprócz tego (według informacji od współautora oprogramowania) powstały również:
- zmodyfikowana wersja Turbo Rom Plus z inną organizacją danych (szczegóły nieznane)
- wersja, w której dane były transmitowane w wielu krótkich blokach danych, wzorowana na systemie Turbo Blizzard; powstało również specjalne oprogramowanie do tej wersji (loadery oraz Turbo Rom KOS)
Ogólnie w bloku danych występują kolejno:
- sygnał pilotujący - dłuższy dla bloku informacyjnego (4884 impulsy "1", około 1.8 s, minimu wymagane przy odczycie to 5x256 impulsów) i krótszy dla bloku danych (516 impulsow "1", około 0.2 s, minimum 256 impulsów)
- jeden impuls odpowiadający bitowi "0" oznaczający koniec sygnału pilotującego i początek danych
- bajty danych, bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym).
- 4 impulsy odpowiadające bitowi "1" chroniące koniec bloku przed uszkodzeniem (ostatni impuls może być nieczytelny)
Budowa bloku informacyjnego dla programów typu COM/EXE
Offset | Długość | Zawartość |
---|---|---|
0 | 1 | Suma kontrolna (XOR) bloku informacyjnego |
1 | 2 | Adres ładowania bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $0601 |
3 | 2 | Długość bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $0028 |
5 | 1 | Suma kontrolna (XOR) bloku danych (następnego po obecnym) |
6 | 2 | Adres przepisywany do RUNAD ($02E0) - adres uruchomienia programu |
8 | 2 | Adres przepisywany do INITAD ($02E2) - adres inicjalizacji programu |
10 | 2 | Adres początku ładowania programu |
12 | 2 | Długość bloku danych (następnego po obecnym) |
14 | 1 | Zawsze 0 |
15 | 20 | Nazwa programu, zapisana w kodach ekranowych. Mogą być używane znaki o kodach od 0 do 63. Dwa najstarsze bity określają kolor wyświetlania znaku (w trybie 6 lub 7 ANTIC-a) |
35 | 1 | Typ programu. Dla programów com/exe zawsze równy 1. |
36 | 1 | Flaga określająca konieczność skoku do adresu w INITAD przed skokiem do RUNAD. Procedura w INITAD jest uruchamiana, gdy ten bajt jest równy 0. |
37 | 3 | ??? trzy zera |
40 | 1 | Kod rozkazu RTS ($60). W to miejsce wykonywany jest skok zaraz po pomyślnym odczytaniu bloku informacyjnego. |
Całkowita długość: 41 bajtów
Budowa bloku informacyjnego dla programów w BASIC-u
Offset | Długość | Zawartość |
---|---|---|
0 | 1 | Suma kontrolna (XOR) bloku informacyjnego |
1 | 2 | Adres ładowania bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $0601 |
3 | 2 | Długość bloku bez uwzględniania bajtu sumy kontrolnej, zawsze $004D |
5 | 1 | Suma kontrolna (XOR) bloku danych (następnego po obecnym) |
6 | 2 | Adres uruchomienia programu. W przypadku normalnych programów w BASIC-u wskazuje na procedurę umieszczoną w pamięci cartridge-a (wpisanie $FF do KBCODES, 1 do rejestru Y i powrót). |
8 | 2 | Adres inicjalizacji programu. W przypadku normalnych programów w BASIC-u zawiera zera, brak procedury inicjalizacji. |
10 | 2 | Względny adres początku ładowania programu (LOMEM) |
12 | 2 | Długość bloku danych (następnego po obecnym). |
14 | 1 | Zawsze 0 |
15 | 20 | Nazwa programu, zapisana w kodach ekranowych. Mogą być używane znaki o kodach od 0 do 63. Dwa najstarsze bity określają kolor wyświetlania znaku (w trybie 6 lub 7 ANTIC-a) |
35 | 1 | Typ programu. Dla programów w BACIC-u zawsze równy 0. |
36 | 1 | Flaga określająca konieczność skoku do adresu w INITAD przed skokiem do RUNAD. Procedura w INITAD jest uruchamiana, gdy ten bajt jest równy 0. W przypadku normalnych programów w BASIC-u rówy 1. |
37 | 3 | ??? trzy zera |
40 | 19 | Procedura przygotowująca program do załadowania.
LDX #17 loop: LDA $660,X ;patrz dwa wiersze tabeli niżej STA 128,X DEX BPL loop LDA #158 STA $254 STA $268 ;COLDST RTS |
59 | 1 | Bajt równy 0. |
60 | 18 | Zmienne BASIC-a (LOMEM,VNTP,VNTD,VVTP,SIMTAB,STMCUR,STARP,RUNSTK,BMEMHI) przepisywane przez powyższą procedurę pod adres $0080. |
Całkowita długość: 78 bajtów
Zobacz też
- Wątek o Turbo Rom na forum atari.area
- Systemy turbo