Temat nagrywania "dyskietek" do Pegasusa wraca co jakiś czas na forum jak bumerang i cieszy się ogromnym zainteresowaniem. Postanowiłem znów przybliżyć forumowiczom kolejny mój projekt z tej serii, a jest to już drugie podejście do tego tematu. Poprzednie, zaprezentowane w poniższym wątku:
http://www.elektroda.pl/rtvforum/topic2724225.htmlmiało kilka wad:
- obsługa jedynie mappera UNROM (co ograniczało ilość obsługiwanych gier)
- pojemność jedynie 512 KB, co pozwalało na nagranie 4 gier
- wybieranie gry za pomocą zworek
- nagranie nowych gier wymaga wyjęcia kości pamięci, wsadzenia do programatora i nagrania.
Postanowiłem więc podejść do tematu raz jeszcze. Założenia były następujące:
- wykorzystanie układu CPLD zamiast 74XX - większa swoboda w typach obsługiwanych układów. Lubię układ CPLD Xilinx XC9572, mam tego pół szuflady, gdy chcemy współpracować z napięciami TTL to wymaga jedynie pojedynczego zasilania +5V, posiada wbrew pozorom sporo makroceli (72), obudowa łatwa w lutowaniu (PLCC32), stosunkowa duża ilośc koncówek (ok. 40).
- większa pamięc -> wykorzystałem kupioną kiedyś za grosze 4 megabajtową kość Am29LV320D. Wadą jest jej współpraca jedynie z poziomami napięć 3.3V co wymusiło wykorzystanie konwertera 74LVC245.
- nagrywanie gier w prostszy sposób.
W efekcie wymyśliłem coś takiego:
Realizacja nie była trudna, najbardziej bałem się o lutowanie układu pamięci Am29LV320D z uwagi na gęsty raster wyprowadzeń.
Poszło jak z płatka:
Programowanie układuProgramowanie kardridża odbywa się po włożeniu go do programatora mojego autostwa - MyKazzo (komunikacja z PC po USB).
Więcej szczegółów tu:
http://www.elektroda.pl/rtvforum/topic2761660.htmlNagranie 4 MB flasha zajmuje ok 700 sekund.
Co do obudowy to kiedyś kupiłem z 10 sztuk jakiegoś badziewia w rodzaju 999999-in-1 po 1zł/szt, właśnie po to aby mieć obudowy do kardridzy.
Układ CPLD w którym zapisane są mappery tuż po włączeniu zasilania umożliwia zaprogramowanie pamięci flash, a następnie `czeka na sygnał` określający, jaki mapper ma emulować (chwilowo dostepne są:
015 - mapper kadridża 168 in 1
071 - mapper camerica
232 - mapper quatro camerica
002 - mapper UNROM
Musiałem naskrobać trochę kodu w asemblerze 6502 aby wyświetlić tuż po włączeniu menu z listą gier do wyboru (obsługa PPU, joysticka).
TrudnościW zasadzie trudności nie było zbyt wiele. Chronologicznie:
- Problem z komunikacją z pamięcią Am29LV320D.
W początkowo zaprojektowanej PCB podpiąłem nogę pamięci !OE do GND a !WE do R/!W od konsoli. Niestety pamięć nie przyjmowała rozkazów zapisu. Jak się potem okazało, gdy oba wejścia (!OE i !WE) są aktywne, pamięć nie przyjmuje rozkazów zapisu. Zmyliło mnie to, bo pamięci SRAM przy obu aktywnych wejściach pozwalają na zapis:
Stąd konieczność modyfikacji PCB za pomocą kabelka.
- Napisanie w VHDLu mappera do obsługi programowania pamięci
- Napisanie w asm 6502 menu wyboru gier (po 3 latach przerwy w pisaniu pod ten procek prawie wszystko zapomniałem)
Efekt końcowyW jednym kardridżu udało się zmieścić najbardziej popularne gry (168 in 1, złota czwórka, złota 5, kilka inych gier codemasters i kilka innych gier unrom). Pełna lista gier:
168-in-1
Big Nose Freaks Out
Big Nose the Caveman
Fantastic Adv. of Dizzy BLUE
Micro Machines
Ultimate Stunman
Quattro Adventure
Quattro Arcade
Quattro Sports
Fantastic Adv. of Dizzy RED
Dizzy Adventurer
Duck Tales 1
Duck Tales 2
Prince of Persia
Rock Man 1
Uwaga: Osoby zainteresowane posiadaniem takiego kardrydża mogą zgłosić się do mnie za pomocą wiadomości prywatnej.Na koniec mały filmik podsumowujący działanie:
https://youtu.be/C1uyC0tGr8k