Hej!
Udało mi się odkopać moje materiały dotyczące AST-Multicartridge, zacznijmy od widoku PCB:
schemat cartridge (wersja low-res):
Schemat AST-Multi Cartridge: AST-Muticart (wersja wektorowa PDF)
Schemat AST-Multi Cartridge: AST-Muticart (wersja rastrowa PNG)
Teraz parę słów o działaniu carta bo jest dość nietypowe. Jedyne podobne rozwiązanie, jedyne podobne rozwiązanie widziałem w cartridge chyba o nazwie "OSCAR turbo", ale do rzeczy. Na schemacie cartridge możemy wydzielić kilka bloków funkcjonalnych:
1) pamięć EPROM zawierająca dane i programy umieszczone w cartridge
2) zespół dwóch 4-bitowych liczników 7493 (U3,U4) połączonych kaskadowo tak aby tworzyły jeden licznik 8-bitowy. Wartości generowane przez ten licznik służą jako dodatkowe linie adresowe AD0-AD7 pozwalające sterować górnymi ośmioma bitami magistrali adresowej pamięci EPROM (U5)
3) przerzutnik RS składający się z bramek U1B, U2B. Ten przerzutnik odpowiedzialny jest za wyłączenie cartridge-a i steruje linią RD5 w gnieździe cartridge-a.
4) prosty dekoder adresów złożony z bramek U1A, U1D, U2A, U2C, U2D. Ten dekoder generuje sygnały "chip select" dla pamięci EEPROM, sygnał BANK_CLK który powoduje zwiększenie zawartości liczników U3,U4 przy każdym zapisie pod adres z zakresu $D500-$D5FF, ten sam sygnał jest użyty do skasowania przerzutnika RS odłączającego cartridge.
5) układ reset składający się z elementów R1, C2, U1C. Po włączeniu zasilania jego zadaniem jest ustawienie przerzutnika RS (składającego się z bramek U2B, U1B) tak aby sygnał RD5 przyjął wartość "1", oraz wyzerowanie liczników U3 oraz U4.
Teraz pokrótce opiszę zasadę działania cartridge. Po włączeniu zasilania układ reset-u ustawia przerzutnik RS tak aby linia RD5 była aktywna (sygnał CLR) oraz zeruje liczniki U3,U4 (sygnał RST). Cartridge zajmuje teoretycznie obszar $A000-$BFFF jednak pamięć EPROM ma podłączone tylko 8 młodszych bitów adresu do magistrali adresowej ATARI. Wynika z tego iż w obszarze $A000-$BFFF widać jedynie pierwsze 256 bajtów pamięci EPROM, te pierwsze 256 bajtów jest powtórzone w obszarze $A000-$BFFF 32 razy (8192/256=32). I teraz uwaga, ten sam obszar (o rozmiarze 256 bajtów) widoczny jest również w obszarze $D500-$D5FF. Konstrukcja dekodera adresów sprawia iż przy każdym odczycie dotyczącym $D500-$D5FF pamięć EPROM jest aktywowana sygnałem CS z dekodera. To samo dotyczy się obszaru $A000-$BFFF. Do wykrycia dostępu w obszarze $D500-$D5FF jest użyty sygnał ~CCTL, do wykrycia adresu z przedziału $A000-$BFFF użyto sygnału ~S5.
Dlaczego tak zrobiono? Aby OS Atari mógł cokolwiek uruchomić z cartridge musi mieć odpowiedni nagłówek w obszarze $BFFA-$BFFF (adres startu programu, typ cartridge oraz adres inicjalizacji). Autorowi rozwiązania zależało głównie na zrobieniu czegoś w rodzaju ROM-DYSKU którego sektor będzie widoczny w obszarze $D500-$D5FF. Jednak aby cartridge mógł wystartować potrzebny odpowiedni nagłówek oraz kawałek programu umożliwiającego wystartowanie całości. Uproszczenie dekodera adresów oraz podłączenie do magistrali Atari tylko 8 młodszych bitów adresu skutkuje właśnie tym iż w obszarze $A000-$BFFF widać tylko 256 bajtów (A0-A7=8 bitów adresu, i teraz liczmy 2^8=256). W 256 bajtach musiał się więc zmieścić program startujący cart oraz ładujący pozostałe dane w odpowiednie miejsca. Również w tych 256 bajtach musiał się zmieścić nagłówek carta.
Kolejnym krokiem jest wyjaśnienie jak się można dobrać do pozostałych danych zapisanych w pamięci EPROM. Mianowicie każdy zapis pod adres $D500-$D5FF powoduje:
- po pierwsze przestawienie przerzutnika RS tak iż dezaktywowany jest sygnał RD5 a więc cartridge jest wyłączany (to znaczy pamięć EPROM nie jest już mapowana w obszar $A000-$BFFF). Jedynie co pozostaje aktywne to mapowanie 256-bajtów pamięci EPROM w obszar $D500-$D5FF.
- po drugie każdy zapis do $D500-$D5FF powoduje wygenerowanie impulsu BANK_CLK podłączonego do wejścia taktującego 8-bitowy licznik składający się z U3, U4 który to adresuje górne 8-bitów pamięci EPROM.
Cała filozofia działa carta polega na tym iż każdy zapis do $D500-$D5FF powoduje iż widać kolejny 256-bajtowy sektor z EPROM w obszarze $D500-$D5FF. Takich sektorów może być maksymalnie 256 a więc teoretycznie mamy ROM-dysk o pojemności do 64kB. Pierwszy 256-bajtowy sektor po włączeniu zasilania jest widoczny (powtórzony 32 razy) w obszarze $A000-$BFFF. Pierwszy zapis (i właściwie każdy kolejny też) do $D500-$D5FF odłącza mapowanie obszaru $A000-$BFFF.
i teraz kilka uwag:
- Po wystartowaniu i wyłączeniu carta (write to $d5xx, RD5=0) nie ma możliwości jego ponownego włączenia. (tylko wyłączenie zasilania)
- każdy zapis do $d5xx powoduje zwiększenie wartości licznika, nie ma jednak możliwości określenia (odczytania) wartości tego licznika. Program musi liczyć ile razy dokonał zapisów do $d5xx aby określić numer aktualnie mapowanego sektora w obszar $d500-$d5ff. Nie ma możliwości zerowania tego licznika ani ustawiania konkretnej wartości. Więc aby wrócić do sektorów o niższych numerach należy dokonać przepełnienia licznika tak aby zaczął liczyć od zera.
- AST multi-cartridge nie będzie działał np. ze Sparta DOS X ponieważ próbuje przejąć dla siebie cały obszar $D500-$D5FF.
- AST multi-cartridge teoretycznie może adresować 256 sektorów po 256 bajtów każdy, jednak w posiadanym przeze mnie egzemplarzu linia AD7 nie była podłączona użyty EPROM miał wielkość 32K.
Mam nadzieję iż wszystko wyjaśniłem i teraz trzeba tylko chętnego aby dopisał emulację tego carta do A800-a8cas ;)
Na koniec link do zawartości pamięci EPROM, obraz do pobrania tutaj: AST Multi-cartridge EPROM image.
pozdrawiam
Seban