Zapoznalem sie troszke z kodem obu procedur SDX jext_on i *off. Nie bardzo rozumiem potrzebe wszystkich dzialan jakie te procedury wykonuja. Jest to dosc nieczytelne poza korzyscia wynikajaca z samego faktu mozliwosci zastapienia indeksami wartosci kodujacych banki. Troche przypomina to strukture stosu, ale jakie moga plynac z tego korzysci nie potrafie dociec.
Natomiast dostrzeglem ciekawe rozwiazanie SDX w postaci zapewnienia temu dosowi w przypadku wylaczonego ROMu wykonywanie zawartych w nim procedur przerwan na zasadzie przylaczania na czas ich wykonywania ROMu i powrotu do stanu z wylaczonym ROMem po wykonaniu przerwan. Tak wiec pod SDX, tak to odczytuje, nie ma obawy przed dostepem do RAMu pod ROMem z uwagi na mozliwosc wystapienia przerwan, lub koniecznosci ich wylaczania na ten czas.
W trybie banked Sparta pozostawia wolny RAM pod ROMem, ale robi pewna ciekawa rzecz, mianowicie kopiuje standardowy zestaw znakow. Ciekawe, czy wogole z tego korzysta, czy to uklon w strone wygody uzytkownika, aby dostep do RAMu pod ROMem maksymalnie udogodnic.
Szkoda, ale poki co, wersja programu jaka opracowalem, nie dziala pod SDX. Nie bardzo wiem co konkretnie przeszkadza temu, ale bede jeszcze probowal dojsc przyczyny. Nie chodzi tu tez o doczytanie pliku konfiguracyjnego, o ktorym sie tutaj rozwodzilem tyle, ale o doczytanie wskazanych plikow.
Odpalam komenda X, poniewaz korzystam tez z obszaru $a000-$bfff.
[ Dodano: Nie Maj 15, 2005 1:29 pm ]
Natomiast dostrzeglem ciekawe rozwiazanie SDX...
Lizard pisal juz o tym wczesniej:
Chodzi Ci o przerwania sprzętowe ($FFFA-$FFFF)? Możesz je dowolnie wykorzystywać, ale na koniec przywróć je do stanu początkowego. SpartaDOS wstawia tam wektory procedur podmieniających RAM na ROM i wywołyjących właściwą procedurę rozpoznania źródła przerwania.
Moje gapiostwo.
Nie domyslilem sie takze, ze Sparta tworzy tablice "masek grup bankow" zawsze tak samo niezaleznie od liczby dostepnej pamieci i rodzaju rozszerzenia. Oznacza to, ze dostep do tej czesci tablicy T_ w zasadzie nie jest nam potrzebny, wystarczy podobna tablice umiescic we wlasnym kodzie.
Lizard juz o tym napominal, ze tablica ta jest gorzej przystosowana do rozszerzenia +256 typu Compo, poniewaz tylko dwa pierwsze wpisy z czterech dostepnych teoretycznie dla rozszerzenia pamieci tej wielkosci, jest takze uzywanych w Compo, a kolejne dwa juz nie (w Rambo nat. tak).
Prawdopodobnie Sparta sprawdza kolejne wpisy z T_+8 (grup bankow) i po napotkaniu pierwszej, ktora nie umozliwia przelaczenia banku, okresla wielkosc dostepnej pamieci.
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?
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).
Musze tez przyznac racje Lizardowi i Draco, ktorzy sugerowali, ze korzystanie z "nielegalnych" dla SDX bankow, a nastepnie proba "dogadania" sie z urzadzeniem zewnetrznym, powoduje nieoczekiwane reakcje programu.
Sprawdzilem, ze wyrzucenie z programu procki rozpoznajacej dostepne banki pamieci oraz powstrzymywanie sie od uzywania "nielegalnych" bankow umozliwia prawidlowe dzialanie programu.
Wydaje mi sie, ze to musi byc jakis blad w kodzie SDX, ktory tak komplikuje korzystanie z pamieci dodatkowej. Oczywiscie moge sie mylic, ale chce niejako zasygnalizowac, ze warto byloby sie baczniej rozejrzec w kodzie w miejscach, ktore moga decydowac o takim zachowaniu SDX przy przelaczaniu bankow.