Turbo ROM

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 20:40, 11 lut 2010
FUJI (Dyskusja | wkład)
(Struktura nagrania - wyrzucono spekulacje)
← 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 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 (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''
-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 w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym).+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 ś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).+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.
-Spotykane nagrania dwojakiego rodzaju:+Przy zapisie do odmierzania czasu wykorzystane 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.
-* 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.+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).
-W nagraniu używającym loadera na kasecie obecność "bloku nazwy" jest symulowana przez loader.+ 
 +====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|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ż== ==Zobacz też==
 +* [http://atariarea.krap.pl/forum/viewtopic.php?id=5652 Wątek o Turbo Rom] na forum atari.area
*[[Systemy turbo]] *[[Systemy turbo]]
- 
-{{stub}} 
[[Kategoria:Atari 8-bit]] [[Kategoria:Atari 8-bit]]
[[Kategoria:Magnetofonowe systemy turbo]] [[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ż

Personal tools