Ciekawi mnie jeszcze taka rzecz, a pewnie jest to ogolnie znana sprawa, jak to sie dzieje, ze bit basica (7) jest uzywany do przelaczania bankow pamieci dodatkowej w niektorych rozszerzeniach (Compo 320, 1088), a jednoczesnie dostep do niego jest mozliwy?
To proste. Gdy bit 4 PortB jest równy jeden, to bit 7 przełącza Basic, gdy bit 4 = 0, to bit 7 przełącza banki pamięci. Podobnie jest z bitem odpowiedzialym za SelfTest.
Lizard w tym watku pisal tez o swojej poprawce do Sparty w zakresie wlasciwego rozpoznawania pamieci dodatkowej dla rozszerzenia typu Compo. Domyslam sie, ze jest to najprostrze rozwiazanie zamieniajace miejscami wpisy w tablicy T_ (konkretnie T+10 i 11 na T+16 i 17). Wowczas taka poprawka oczywiscie jest zasadna i uzyteczna, ale tylko dla atarek z rozszerzeniem Compo, natomiast wykorzystywanie SDX z ta poprawka przy rozszerzeniach Rambo, powoduje ograniczenie pamieci o polowe (analogiczna sytuacje jak bez poprawki dla Compo).
Nie, moja poprawka jest uniwersalna i działa z każdym rozszerzeniem (od 128kB do 1088 kB, niezależnie od bitów przełączających). Z przyczyn technicznych testowałem ją tylko na swoim sprzęcie (320 kB CopmyShop) i wszystkich konfiguracjach pamięci emulatora Atari800Win. Dla każdego przypadku działała bezbłędnie. Nikt też nie skarżył się, że mu nie działa, więc wnioskuję, że jest ok. Program nie zamienia miejscami wpisów w tabeli, lecz tworzy ją od podstaw.
Procedury przełączające pamięć są skonstruowane, by nie trzeba było pamiętać w jakim "stanie" jest teraz pamięć. Przykład:
Włączasz bank SDX poprzez Ext_On, następnie włączasz jakiś inny bank tą samą procedurą (Ext_On). Teraz wywołanie Ext_Off nie wyłączy dodatkowej pamięci, lecz przełączy pamięć na bank SDX. Dopiero kolejne wywołanie Ext_Off odłączy dodatkową pamięć. Czyli jak słusznie zauważyłeś działa to na zasadzie stosu. Oczywiście przy odpowiednim zagnieżdżeniu wszystko się ładnie wysypie, więc bez przesady. ;)
Jak zauważyłeś w procedurze zmieniającej bank jest sekwencja: EOR; AND; EOR. To właśnie powoduje, że zmianie ulegą tylko bity zmieniające banki, a tekie coś jak Basic czy system pozostana w niezmienionym stanie.