energy.scene.pl
Popularny magazyn na ośmiobitowe Atari
Wybierz muzykę:
Energy 1: 1 2 3 4 5 Energy 2: 1 2 3 4 5 6 7 8 9 10 11 12 |
autor: electron
Artykuł ten przeznaczony jest raczej dla elektroników oraz koderów.
Zapewne wielu koderów zastanawiało sie nieraz, jak by to było fajnie, gdyby można było wprowadzać dowolne zmiany w ROM komputera, a zwłaszcza w systemie operacyjnym. Jednak jak wiadomo ROM nie jest zbyt podatny na wszelkie próby zapisu czegokolwiek (nie mówimy tu o EPROM i EEPROM). Z tego powodu skazani jesteśmy na standardowy OS, który jest rewelacyjny jak na swoje lata i chyba najambitniejszy z systemów operacyjnych jakie napisano dla ośmiobitoców, jednak nie jest pozbawiony błędów, a o szybkości niektórych - zdecydowanie zbyt uniwersalnych procedur napisano już wiele. Koder, który chciałby na przykład przyspieszyć procedury edytora ekranowego, lub zrobić procedury szybkiej transmisji ze swoją stacją dysków skazany jest na tworzenie "programów rezydentnych" których życie jest przecież w ciągłym zagrożeniu, gdyż lwia część innych programów nie zwraca uwagi gdzie się ładuje i co przy okazji niszczy. Takie programy zajmują nam część bezcennej pamięci komputerka, ich relokacja, ochrona, inicjowanie jest dosyć kłopotliwe. Poza tym sam OS nie we wszystkich przypadkach udostępnia nam wektory, pod które można się "podczepić" aby cichaczem zrealizować procedurę. Dobrym przykładem jest tu podsystem SIO, który nie posiada wektora w RAM wskazującego swój adres, a który nieraz by się chętnie zmieniło aby zrobić częściowo własne procedury.
Jednym ze stosowanych (dawniej) rozwiązań jest całkowita podmiana ROM poprzez przepisanie go do pamięci RAM pod ROM. Jest to rozwiązanie skuteczne dopóki jakiś program nie zacznie ruszać rejestru $d301 lub po prostu nie załaduje się tam... Było to może dobre rozwiązanie w przypadku programów pisanych pod ATARI 400/800 które nie miały pamięci pod ROMem i $d301 służył do obsługi joysticków. Jednak 90% współczesnych i tych z ostatniego dziesięciolecia programów bez oporu korzysta z RAMu pod ROMem i słusznie! Tak więc to rozwiązanie zdecydowanie odpada. Niektórzy aby usprawnić pracę z komputerem pisali własne systemy, po czym umieszczali je w pamięci EPROM i sprzedawali później wszystkim chętnym po mniej lub bardziej "atrakcyjnych" cenach... Ilu ludzi ma QMEGA, TOMS-OS czy też inne "dzieła" zawierające często kupę błędów. Jednak po co komu TOMS-OS, jeżeli nie ma stacji TOMS? Po co QMEG, jezeli żadne turbo z udostępnianych przez ten system nie obsługuje jego stacji dysków? Użytkownik tych systemów jest skazany na pomysły ich autorów, co oczywiście nie jest zbyt wygodne.
Jest jednak na to rada. Możemy mieć w każdej chwili w komputerze dowolny system operacyjny, dowolnie i bez problemu go modyfikować, dostosowywać do własnych potrzeb. Przy tym nie będzie żadnej rożnicy między normalnym ROMem a naszym systemem przynajmniej z punktu widzenia sterowania.
Ta rada to urządzenie, które wymyśliłem już dłuższy czas temu i nazwałem ROM SIMULATORem. Przechodziło ono kolejne etapy ewolucji i wersję obecną, jej możliwości, sposób działania i sterawania a także wykrywania chciałbym tutaj przedstawić.
Urządzenie jest oparte na standardowej i dosyć taniej kości SRAM typu 62256 - nowa kosztuje ponad 10zł (zależy gdzie) jednak bardzo często można spotkać kości pochodzące z tzw. "odzysku" które są jak najbardziej pełnowartościowe, a ich cena kształtuje się w okolicach 30-50% ceny nowego układu. Poza tym układem urządzenie zbudowane jest z kilku układów TTL-LS lub HCTMOS, oraz ewentualnie kilku elementów biernych. Celowo nie podaję tutaj szczegółów, gdyż mam zamiar przedstawić szczegółowy opis działania urządzenia, rozwiązania układowe pozostawiając w gestii czytelnika - elektronika. Oczywiście, wymagana jest podstawowa umiejętność projektowania układów cyfrowych, oraz dosyć dobra znajomość działania naszej ukochanej atarki.
Z punktu widzenia oprogramowania: ROM SIMULATOR jest normalną pamięcią ROM, tak więc znajduje się w adresach $c000-$cfff, $d800-$ffff, $5000-$57ff (pamięć SRAM jest uruchamiana zamiast ROM - linią CS ROM z MMU). Nie można do niej nic zapisać bez zezwolenia w rejestrze sterującym.
Rejestr sterujący:
Adres $d700, jednak twórcy oprogramowania MUSZĄ dać możliwość zmiany adresu tego rejestru, wszak w niektórych komputerach ten rejestr może być już zajęty przez inne rozszerzenia. Możliwość zmiany tego adresu MUSI BYĆ, sposób realizacji tej zmiany to sprawa autora programu korzystającego z ROM SIM.
Rejestr jest zarówno do zapisu jak i do odczytu, tzn. wpisana tam wartość MUSI się dać z niego odczytć.
Znaczenia bitów:
Identyczne dla zapisu jak i dla odczytu, chyba, że napisane jest inaczej.
Bity:
0 - numer aktywnego banku pamięci 62256 - ten układ zawiera 32KB RAM, a OS ma 16KB, więc można w ROM SIM zmieścić więcej, jednak trzeba to podzielić na dwa banki.
Po sygnale RST zawiera wartość 0 - czyli po starcie komputera i po każdym naciśnięciu klawisza RESET jest zerowany - co oznacza, że po RESET zawsze włączany jest bank 0 ROM SIM - może być to przydatne dla systemów typu FREEZER.
1,2,3,4,5 - nieużywane. Przy zapisie ich wartość jest bez znaczenia, przy odczycie MUSI być równa 1.
6 - główny bit sterujący. 0 - ROM SIM włączony, 1 - włączony normalny ROM. Po włączeniu komputera jest automatycznie ustawiany. (sygnał RST NIE RUSZA TEGO BITU!)
7 - bit zezwolenia zapisu do ROM SIM. 0 - zapis zabroniony (ROM SIM zachowuje sie wtedy jak normalny ROM) 1 - zapis dozwolony - można modyfikować zawartość naszego "ROMu". Jest automatycznie zerowany identycznie jak bit 0, czyli po sygnale RST przypadkowy (lub nieprzypadkowy) zapis do ROM SIMa jest niemożliwy.
Wszystkie bity są w pełni niezależne, tzn. każdy może przyjąć dowolny stan niezależnie od innych bitów (bity 0,6,7)
Rejestr sterujący można zablokować, czyli zabezpieczyć przed modyfikacją - wówczas ROM SIM jest NIEWYKRYWALNY o ile została wcześniej włączona blokada zapisu. Zablokowanie rejestru odbywa się w sposób tyleż prymitywny, co bardzo pewny - poprzez przełącznik wystający na zewnątrz komputera. Po zablokowaniu nie można nic do rejestru zapisać, czyli zmienić aktualnego stanu ROM SIMa, chociaż on sam może być w tej chwili w dowolnym stanie (zał, wył, write protect, unprotect etc.) Zablokowanie rejestru nie wpływa więc na pracę urządzenia. Gdy rejestr jest zablokowany następują także opisane powyżej automatyczne zmiany stanu bitów sterujących (po sygnale RST - bity 0 i 7 są zerowane - wiąże się to z odpowiednią zmianą stanu ROM SIMa) Przy odczycie z zablokowanego rejestru otrzymujemy wartość, którą standardowo zwraca komputer z "pustej" (nieobciążonej) szyny danych. W większości komputerów jest to #$FF, jednak w niektórych może być to inna wartość - to zależy od konstrukcji (wersji) atarki...
Sposób wykrywania ROM SIM:
1. Rejestr sterujący aktywny:
- wyłączamy przerwania
- zapamiętujemy stan rejestru
- wpisujemy do rejestru wartość #0
- odczytujemy. Powinno być #$3e
- zapisujemy wartość #$c1
- odczytujemy. Powinno być #$ff
- wpisujemy starą wartość
- włączamy przerwania
Dla pewności możemy spróbować coś zapisać do ROM SIM (np. pod adres $c000) Gdy ROM SIM jest włączony i dozwolony jest zapis oraz gdy zapis jest zabroniony. Mam nadzieję, że wiadomo jaki powinien być efekt - różny dla obu przypadków.
2. Rejestr zablokowany
Wykrycie ROM SIM praktycznie niemożliwe, chyba że jest dozwolony zapis i ROM SIM jest włączony - bo dziwny to ROM, do którego można coś zapisać nieprawdaż?
Co umożliwia ROM SIM?
Chyba sie domyślamy - możliwości są OGROMNE, praktycznie autor usprawnień do systemu czy też jego całkowicie nowych wersji jest skrępowany tylko własną pomysłowością (o ile jest niewielka :) ) A zastosowań ułatwiających życie na codzień może być mnóstwo... Przykład: napisałem program pt. XTOS.COM, który czyni życie posiadacza stacji XF551 znacznie łatwiejszym - system obsługuje stację w trybie TURBO (nawet przy BOOT), nie występują nigdy kłopoty z rozpoznawaniem gęstości dysków, jest b. szybki i wygodny ramdysk obsługiwany przez SIO jako dyskietka 180KB (jak w Qmegu, tyle że chyba trochę lepszy) Eleganckie menu konfiguracyjne po naciśnięciu SELECT+RESET... (możliwość BOOTowania z ramdysku). Przy tym XTOS.COM ma 5 sektorów w gęstości DOUBLE! i nie wiesza systemu gdyż jest przecież jego częścią aż do wyłączenia komputera (lub wyłączenia ROM SIMa).
Rozszerzenia XTOS mieszczą sie w obszarze 2 generatora znaków ($cc00) co nie jest chyba złym pomysłem. (mogłyby być np. zamiast Self-Testu).
W każdej chwili można wgrać do ROM SIMa dowolny system operacyjny (np. QMEG, TOMS-OS etc.) i korzystać z nich bez żadnej różnicy jakby były na EPROMIE w kompucie.
Urządzenie nie jest podtrzymywane bateryjnie i to jest chyba jedna z jego nielicznych wad, tak na dłuższą metę jednak wydaje mi się to niepotrzebne. Wgranie programu do ROM SIMa (zwłaszcza takiego jak XTOS - 5 sektorów) nie przedstawia specjalnych kłopotów.
Mam nadzieję, że powyższy opis będzie wystarczający dla osób, które będą chciały zbudować sobie ROM SIMULATOR, zaznaczam jednak o KONIECZNOŚĆI zachowania 100% kompatybilności z powyższym opisem (STANDARD!). Na razie urządzenie posiadam ja oraz JASKIER/TAQUART, jest bardzo przydatne w codziennej pracy na atarce.
Ważna sprawa! Zabraniam wykorzystywania mojego pomysłu w celach zarobkowych.