Projektuję nowe rozszerzenie pamięci do XL/XE. Generalnie wyszło to tak trochę przez przypadek. Postanowiliśmy z Lotharkiem przetestować PSRAM'y QSPI jako pamięć do Atari zamiast klasycznych układów SRAM. No i tak jakoś wyszło, że mamy na PCB układ 8MB PSRAM i warto go wykorzystać w całości, bo czemu nie.
8MB daje łącznie 512 bloków po 16k. 4 bloki oczywiście idą na "pamięć podstawową". Zostaje zatem 508 bloków do dyspozycji. Najpierw do tego dodałem klasyczne 16 bloków w standardzie Rambo - zasadniczo sterowanie bitami 2,3,5,6 portu B PIA ($D301) przy zgaszonym bicie 4.
Potem do tego doszedł Axlon - 255 bloków przełączanych zapisem do ROM.
Po tych zabiegach zostało prawie 4MB RAM niewykorzystane, więc na razie "na szybko" dodałem 3 bity z wirtualnego drugiego PIA (adres $D305) i w ten sposób razem z 4 bitami z $D301 mamy dodatkowe 2MB - razem z Axlonem i pamięcią podstawową daje to trochę ponad 6MB.
No i męczy mnie to, że nadal mam bloki RAM, które można jakoś przełączać i dzięki temu uzyskać dostęp do pełnych 8MB.
Do tego mam dostęp do sygnału HALT, więc teoretycznie mógłbym sterować oddzielnie blokami dla CPU i oddzielnie dla ANTIC'a - ale to już chyba nie ma większego sensu.
Piszę tutaj, bo może macie jakieś pomysły na to. Na razie mogę dodać bez problemów więcej bitów z $D305 i w ten sposób przełączać w zasadzie wszystkie bloki - oczywiście w takim układzie jakieś kombinacje będą niepoprawne. A może zamiast $D305 jakoś inaczej to przełączać? Ogólnie jak od 512 odejmiemy 4 bloki podstawowej i 255 Axlona to zostają 253 bloki do dyspozycji.
Zostaje też ewentualnie kwestia magicznych 2kB z obszaru $D000-$D7FF, które też mógłbym w jakiś sposób gdzieś udostępnić po podaniu jakiejś kombinacji.
Na razie mój pomysł jest taki:
$D301 - bit 4 - jak zapalony to albo pamięć podstawowa, albo 1..255 z Axlon'a Jak bit 4 w $D301 zgaszony to: bierzemy biity 6,5,3,2 z $D301 oraz 6,5,3,2 z $D305. Mamy 8 bitów. Kombinacje 0..252 przełączają odpowiedni bank. Kombinacja 253,254 i 255 - sam nie wiem - bank podstawowy? Chyba najsensowniej. $D305 - bit 4 - przełączanie tego bloku $D000-$D7FF - pytanie pod jakie adresy go pakować?
Dodam, że układ jest w całości pod CPU, więc nie łączymy niczego do fizycznego PIA. Port D301 i D305 są w zasadzie portami wirtualnymi w FPGA. PIA nadal standardowo będzie wystawiać sobie te bity niezależnie, czy zapis pójdzie do D301, czy D305 - stąd nie mogę używać bitów 0,1 i 7 - te standardowo idą do MMU i będą przełączały OS,BASIC i SELF-TEST.