Turbo ROM

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 23:57, 6 mar 2010
FUJI (Dyskusja | wkład)
(Drobne korekty.)
← Previous diff
Wersja z dnia 09:17, 7 mar 2010
FUJI (Dyskusja | wkład)
(Struktura nagrania - poprawki i uzupełnienia.)
Next diff →
Linia 40: Linia 40:
* 0.08 ms - 0.2 ms dla bitów "0" * 0.08 ms - 0.2 ms dla bitów "0"
-''(wartości teoretyczne ustawiane przy zapisie do uzupełnienia)''+''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 "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.+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. 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 zintegrowane z loaderem.+Czas trwania impulsów jest mierzony w pętli wykonywanej przez mikroprocesor (pętla trwa 9 taktów zegara), podczas operacji odczytu wyłączane wszelkie przerwania i wyświetlanie obrazu.
-Ogólnie W bloku występują kolejno:+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.
-* 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.+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).
-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.+====Ogólna budowa bloków danych====
-Bity w bajcie zapisywane są w kolejności od najmłodszego do najstarszego (jak przy zapisie standardowym).+Program w systemie Turbo Rom składa się z maksymalnie 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.
 + 
 +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" 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==== ====Budowa bloku informacyjnego dla programów typu COM/EXE====
Linia 105: Linia 110:
|15 |15
|20 |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)''+|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 |35
Linia 113: Linia 118:
|36 |36
|1 |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.+|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 |37
Linia 126: Linia 131:
''Całkowita długość: 41 bajtów'' ''Całkowita długość: 41 bajtów''
-====Budowa bloku informacyjnego dla programów w BASICu====+====Budowa bloku informacyjnego dla programów w BASIC-u====
{| border="1" {| border="1"
Linia 151: Linia 156:
|- |-
|6 |6
-|6+|2
-|??? (być może jak w przypadku com/exe, być może parametry specyficzne dla BASIC)+|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 |12
|2 |2
-|Długość bloku danych (następnego po obecnym)+|Długość bloku danych (następnego po obecnym).
|- |-
|14 |14
Linia 164: Linia 177:
|15 |15
|20 |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)''+|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 |35
Linia 172: Linia 185:
|36 |36
|1 |1
-|Dla programów w BASIC-u równy 0.+|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 |37
Linia 183: Linia 196:
<pre> <pre>
LDX #17 LDX #17
-loop: LDA $660,X ;patrz dwa wiersze niżej+loop: LDA $660,X ;patrz dwa wiersze tabeli niżej
STA 128,X STA 128,X
DEX DEX
Linia 199: Linia 212:
|60 |60
|18 |18
-|Kopia pierwszych 18 bajtów następnego bloku danych.+|Zmienne BASIC-a (LOMEM,VNTP,VNTD,VVTP,SIMTAB,STMCUR,STARP,RUNSTK,BMEMHI) przepisywane przez powyższą procedurę pod adres $0080.
|} |}

Wersja z dnia 09:17, 7 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), 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 systemie Turbo Rom składa się z maksymalnie 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.

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" 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