Turbo ROM
From Atariki
Wersja z dnia 20:40, 11 lut 2010 FUJI (Dyskusja | wkład) (→Struktura nagrania - wyrzucono spekulacje) ← Previous diff |
Wersja z dnia 23:53, 6 mar 2010 FUJI (Dyskusja | wkład) (→Struktura nagrania - - tym razem powinno być w miarę dobrze.) Next diff → |
||
Linia 31: | Linia 31: | ||
==Struktura nagrania== | ==Struktura nagrania== | ||
- | ''Opis na podstawie analizy sygnału z taśmy i informacji od twórców tego systemu zapisu'' | + | ''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]). Przez impuls rozumiana jest sekwencja narastającego i opadającego zbocza sygnał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]). 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 wynoszą: | + | Szerokości impulsów używanych w tym systemie zapisu wynoszą: |
- | * 0.3-0.35 ms dla bitów "1" | + | * 0.2 ms - 0.4 ms dla bitów "1" |
- | * 0.1-0.2 ms dla bitów "0" | + | * 0.08 ms - 0.2 ms dla bitów "0" |
- | Na sygnał pilotujący składa się długa seria impulsów "1" ''(lub impulsów odrobinę szerszych)'' | + | ''(wartości teoretyczne ustawiane przy zapisie do uzupełnienia)'' |
- | 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 krótki impuls, za którym znajdują się już dane. Bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym). | + | Na sygnał pilotujący składa się długa seria impulsów "1". Szerokość tych impulsów jest trochę większa niż dla bitów 1, ale procedura odczytu spodziewa się tych samych wartości w obu przypadkach. Różnica wynika zapewne z różnic w procedurach zapisu i odczytu. |
+ | 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. | ||
- | Generalnie cały program zapisany jest w jednym długim bloku danych, co wydatnie podnosi prędkość wczytywania (brak przerw między blokami). | + | Program w systemie Turbo Rom składa się z maksymalnie dwóch bloków: bloku informacyjnego i bloku 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. W takiej sytuacji informacje zawarte normalnie w bloku informacujnym są zintegrowane z loaderem. |
- | Spotykane są nagrania dwojakiego rodzaju: | + | Ogólnie W bloku występują kolejno: |
- | * bez "bloku nazwy" (gdy loader w formacie standardowym jest nagrany przed częścią turbo) | + | * sygnał pilotujący - dłuższy dla bloku informacyjnego (4884 impulsy "1", około 1.8 s) i krótszy dla bloku danych (516 impulsow "1", około 0.2 s) |
- | * z "blokiem nazwy" (potrzebny cartridge z oprogramowaniem do odczytu) | + | * jeden impuls odpowiadający bitowi "0" |
+ | * bajty danych | ||
+ | * 4 impulsy odpowiadające bitowi "1" chroniące koniec bloku przed uszkodzeniem (ostatni impuls może być nieczytelny) | ||
- | "Blok nazwy", jeżeli występuje, składa się z 41 bajtów. | + | 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. |
- | W nagraniu używającym loadera na kasecie obecność "bloku nazwy" jest symulowana przez loader. | + | |
+ | Czas trwania impulsów jest mierzony w pętli wykonywanej przez mikroprocesor (pętla trwa 9 taktów zegara), podczas operacji odczytu i zapisu wyłączane są wszelkie przerwania i wyświetlanie obrazu. | ||
+ | |||
+ | Bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym). | ||
+ | |||
+ | ====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 Antica)'' | ||
+ | |- | ||
+ | |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 1. | ||
+ | |- | ||
+ | |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 BASICu==== | ||
+ | |||
+ | {| 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 | ||
+ | |6 | ||
+ | |??? (być może jak w przypadku com/exe, być może parametry specyficzne dla BASIC) | ||
+ | |- | ||
+ | |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 Antica)'' | ||
+ | |- | ||
+ | |35 | ||
+ | |1 | ||
+ | |Typ programu. Dla programów w BACIC-u zawsze równy 0. | ||
+ | |- | ||
+ | |36 | ||
+ | |1 | ||
+ | |Dla programów w BASIC-u równy 0. | ||
+ | |- | ||
+ | |37 | ||
+ | |3 | ||
+ | |??? trzy zera | ||
+ | |- | ||
+ | |40 | ||
+ | |19 | ||
+ | |Procedura przygotowująca program do załadowania. | ||
+ | <pre> | ||
+ | LDX #17 | ||
+ | loop: LDA $660,X ;patrz dwa wiersze 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 | ||
+ | |Kopia pierwszych 18 bajtów następnego bloku danych. | ||
+ | |} | ||
+ | |||
+ | ''Całkowita długość: 78 bajtów'' | ||
==Zobacz też== | ==Zobacz też== |
Wersja z dnia 23:53, 6 mar 2010
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) Uwaga: jest to recenzja systemu Turbo ROM Plus, ale obecność "Plus" w nazwie najprawdopodobniej odróżnia jednego dystrybutora, firmę Plus, od drugiego (firmy Mapasoft)
(...)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 ustawiane przy zapisie do uzupełnienia)
Na sygnał pilotujący składa się długa seria impulsów "1". Szerokość tych impulsów jest trochę większa niż dla bitów 1, ale procedura odczytu spodziewa się tych samych wartości w obu przypadkach. Różnica wynika zapewne z różnic w procedurach zapisu i odczytu. 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.
Program w systemie Turbo Rom składa się z maksymalnie dwóch bloków: bloku informacyjnego i bloku 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. W takiej sytuacji informacje zawarte normalnie w bloku informacujnym są zintegrowane z loaderem.
Ogólnie W bloku występują kolejno:
- sygnał pilotujący - dłuższy dla bloku informacyjnego (4884 impulsy "1", około 1.8 s) i krótszy dla bloku danych (516 impulsow "1", około 0.2 s)
- jeden impuls odpowiadający bitowi "0"
- bajty danych
- 4 impulsy odpowiadające bitowi "1" chroniące koniec bloku przed uszkodzeniem (ostatni impuls może być nieczytelny)
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.
Czas trwania impulsów jest mierzony w pętli wykonywanej przez mikroprocesor (pętla trwa 9 taktów zegara), podczas operacji odczytu i zapisu wyłączane są wszelkie przerwania i wyświetlanie obrazu.
Bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym).
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 Antica) |
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 1. |
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 BASICu
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 | 6 | ??? (być może jak w przypadku com/exe, być może parametry specyficzne dla BASIC) |
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 Antica) |
35 | 1 | Typ programu. Dla programów w BACIC-u zawsze równy 0. |
36 | 1 | Dla programów w BASIC-u równy 0. |
37 | 3 | ??? trzy zera |
40 | 19 | Procedura przygotowująca program do załadowania.
LDX #17 loop: LDA $660,X ;patrz dwa wiersze niżej STA 128,X DEX BPL loop LDA #158 STA $254 STA $268 ;COLDST RTS |
59 | 1 | Bajt równy 0. |
60 | 18 | Kopia pierwszych 18 bajtów następnego bloku danych. |
Całkowita długość: 78 bajtów
Zobacz też
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.