Namieszałem trochę XXL-owi, więc późno bo późno ale zabieram głos w dyskusji.
Odrobina technicznego bełkotu może pomóc zrozumieć jak działają mechanizmy MEMAC i obostrzenia z nimi związane.
-------------------------------------------------------------------------------------
Mechanizm kontroli linii CASINH
Próba dostępu przez CPU / ANTIC do adresów zajętych przez:
- OS ROM (gdy aktywny - sterowanie: PORTB)
- BASIC (gdy aktywny - sterowanie: PORTB)
- Cartridge (gdy aktywny - sterowanie liniami RD4 i RD5 na porcie CART)
- Rejestry sprzętowe ($d000-$d7ff, aktywne zawsze)
Spowoduje wystawienie przez MMU sygnału CASINH, który to sygnał odcina wewnętrzną
pamięć RAM Atari. Dodatkowo CASINH podłączony do VBXE informuje je, że nie należy nawet próbować podłączać VRAM do szyny.
To połączenie CASINH do VBXE to właśnie ten nieszczęsny nowy "kabelek". Jego brak spowoduje, że
w powyższych przypadkach nic nie ostrzeże VBXE i będzie tak:
przy odczycie: dane z VRAM "zderzą się" na szynie danych z danymi z ROM, CARTA lub rejestrów sprzętowych.
w efekcie bufory będą przeciążane (ale raczej nic się nie spali) i CPU / ANTIC odczyta jakieś bzdury
(wygra silniejszy scalak) - mamy tu p.2 z testu XXL-a - komp się wiesza ponieważ obszar romu $f000-$ffff jest
na bieżąco używany a już nie można nic normalnego z niego odczytać.
przy zapisie: dane zapisywane będą jednocześnie do VRAM i ROM (!) lub rejestrów sprzętowych ....
tutaj jest jeszcze jeden zonk który wynika z konstrukcji atari - mianowicie zapis do ROM
powoduje znowu zderzenie na szynie danych ponieważ w uproszczeniu ROM zakłada, że jeżeli coś od niego chcą
to jest to zawsze odczyt niezależnie od stanu linii R/W i wystawia dane na szynę.
Dodanie kabelka do VBXE powoduje, że nie wpycha się ono z pamięcią MEMAC A na siłę tam, gdzie i tak wepchnąć się nie może.
-------------------------------------------------------------------------------------
Mechanizm kontroli linii EXTSEL
New Device wystawia sygnał MPD, który powoduje odłączenie przez MMU ROMu w obszarze
$d800-$dfff. Po odłączeniu nie jest już wystawiany sygnał CASINH dla tego obszaru -
w tym miejscu może się więc pojawić okienko z normalnym RAM Atari. Aby Atari nie podłączyło ani ROM ani RAM
dodatkowo uaktywnia się linię EXTSEL, która niezależnie odłączy wewnętrzny RAM.
Pojawia się więc "dziura" $d800-$dfff w którą można podstawić ROM/RAM NewDevice (KMK).
Sygnał CASINH dla tego obszaru jest więc nieaktywny, jednak VBXE i w tym przypadku
"trzyma rękę na pulsie" monitorując dodatkowo stan linii EXTSEL (z której samo korzysta w celu zmiany normalnego RAM na obszar VRAM)
robi to następująco:
- gdy spełnione są warunki włączenia bufora memac a/b (CASINH nieaktywny, adres zgodny z memac, aktywacja memac)
wówczas sprawdzany jest jeszcze stan linii EXTSEL - jeżeli linia jest aktywna, wówczas VBXE zakłada, że
jakieś nieznane mu urządzenie (np. KMK) zażądało dostępu do szyny danych i "odpuszcza sobie" podłączenie VRAM w tym cyklu
- nieznane urządzenie ma priorytet nad VBXE.
Jeżeli linia EXTSEL jest nieaktywna, wówczas VBXE zakłada, że nic nieznanego mu nie "dobiera się" do szyny sam ją (linię EXTSEL) aktywuje - czyli w tym cyklu podłączany jest VRAM a odłączany RAM Atari.