Džinova 8-bitová stránka
ARMSID

Úvod:
- Po zkušenostech s procesory typu ARM Cortex jako emulátory periférií u jiných 8-bitů (unikarta pro Sharp MZ800)
mě napadlo použít obdobný postup pro emulaci (aspoň co se obsluhy sběrnice týče) obvodů MOS6581 nebo MOS8580 (známých jako SID) v Commodore C64.
- Podobně minimalisticky kdysi začínala asi nejznámější HW náhrada SIDa tzv. SwinSID. Když obsluhu sběrnice zvládne jednoduchá Atmega na 32MHz, co
by dokázal ARM na 100MHz s matematickým koprocesorem ?
- Po prostudování datasheetů k SIDům jsem se naivně vrhnul do nadšené realizace, která se nad očekávání protáhla, jak někteří už vědí, datasheet je spíš přání (navíc neúplné) než realita :)
- A tak se zrodil ARMSID.
Popis, co to umí:
- Další z pokusů nahradit MOS6581 a MOS8580 používaných v Commodore C64. Tentokrát pojatý minimalisticky (v zapojení a jednoduchosti užití, nikoliv výkonu).
- Pokus o opravdové "plug & play" řešení. Stačí jej vložit místo původního SIDa do patice a je hotovo.
- Sám si podle napájecího napětí zjistí, který z čipů nahrazuje a začne příslušnou emulaci (lze dodatečně za chodu softwarově změnit).
- Není potřeba přepínat verzi počítače PAL/NTSC, obvod používá rovnou hodiny sběrnice počítače, vždy je synchronní s C64.
- Emuluje i měření analogových vstupů (joysticky, myš atd. - vstupy POTX a POTY)
- Analogový výstup je dostatečně proudově dimenzovaný, není potřeba pro správnou funkci cokoliv na desce počítače měnit.
- Vzorkování výstupu je 1/16 hodin C64 tedy cca 62kHz/12bitů, žádná emulace výstupu pulzní modulací, poctivý hardwarový D/A převodník.
- Filtry kompletně přenesené do číslicové podoby, emulované float point aritmetikou.
- Řádově nižší úroveň šumu a menší rušení od napájení proti originálu :)
- Podstatně nižší i odběr proudu než originál.
- Případný update firmwaru přímo programem v C64 bez nutnosti zasahovat do počítače.
- Nyní k sehnání zde.
Popis, co je uvnitř:
- Pár odporů, kondenzátorů, jeden stabilizátor, jeden operační zesilovač a procesor. To je vše, součástky jen z jedné strany.
- Jediný programovatelný obvod je zde STM32F410, tedy ARM Cortex M4 s HW float point aritmetikou na 100MHz.
- Analogový výstup posílený přes operační zesilovač AD8515.
- Stabilizátor pro procesor 3,3V, samotný procesor má vstupy 5V tolerantní.
- Schéma v PDF zde:
.
Firmware:
- Aktuální verze FW 2.12 z 9.9.2020 zde. Nebo jako obraz diskety. Nebo zde zazipovaný.
- Nezapomeňte si stáhnout nový konfigurační program.
- Připomínám konfiguraci "Digifix" od minulé verze, kdyby vám něco znělo jinak na emulaci MOS8580, zkontrolujte konfiguraci.
- Opraveno nastavování nejnižší frekvence filtru pro emulaci MOS6581 (občas neodpovídala simulace nastavením).
- Předposlední FW 2.11 z 10.7.2020 zde. Nebo zde zazipovaný.
- Digifix pro emulaci MOS8580 je od této verze konfigurovatelný. Softwarově jde nastavit v několika úrovních a to dokonce i v opačné polaritě.
- V základním nastavení je ale řízen skutečným proudem z externího pinu. Pokud by vám softwarový Digifix chyběl, nastavte si ho přes nový konfigurační program.
- Digifix u MOS8580 vyžaduje například hra Ghostbusters, většina hlavně nových her, dem a hudeb naopak s Digifix nepočítá a ten pak může působit rušivě a přidávat do různých míst šum a hluk.
- Je zde také dotažen hotfix v generování šumu (test bit) z predchozí verze, teď už nechybí žádný zvuk ani v TestBit_4x.sid.
- V neposlední řadě byla poladěna emulace vnitřních analogových offsetů MOS6581. Ve výsledku vede k menší zkreslení některých dem (Mahoney - Musik Run/Stop) a odstranění klapání u některých her (Bubble Bobble).
- Drobný fix aktualizace čítačů generátorů při rychlých změnách.
- Rychlejší uvolnění datové sběrnice na konci čtecího cyklu.
- Předchozí FW 2.10 z 24.3.2020 zde. Nebo zde zazipovaný.
- Proti verzi 2.9 opravuje chybu v hodnotách registru OSC3 při generování šumu. Patrné například ve hře Paradroid.
- Předchozí FW 2.9 z 17.4.2019 zde.
- Pokud máte problémy s detekcí ARMSIDu, může se hodit "blind" FW 2.9 update zde (nepotřebuje číst porty ARMSIDa během updatu, jinak obsahuje stejný FW).
- Případně obě verze včetně konfigurační utility zazipované zde.
- Pro update stačí nahrát do C64, spustit a následovat instrukce.
- Proti verzi 2.8 má 2.9 tyto vyplešení/opravy:
- Prodloužena doba pro detekci reset signálu (oprava hlášených náhodných restartů pro některé konfigurace s deskami 250407, kde není reset signál filtrován).
- Drobná oprava generování šumu na bitech s nejnižší vahou a zrychlení výpočtu.
- Další optimalizace na rychlost i velikost kódu.
- Předchozí FW 2.8 z 17.2.2019 zde.
- Pokud máte problémy s detekcí ARMSIDu, může se hodit "blind" FW 2.8 update zde (nepotřebuje číst porty ARMSIDa během updatu, jinak obsahuje stejný FW).
- Případně obě verze včetně konfigurační utility zazipované zde.
- Pro update stačí nahrát do C64, spustit a následovat instrukce.
- Proti verzi 2.7 má 2.8 tyto vyplešení/opravy:
- Konec zápisu nebo načítaní dat z registrů se řídí pouze signálem CS (u začástku to tak bylo, konec se řídil hodinami 02), může pomoci ke stabilitě v systémech jiných než C64 a C128.
- Aktualizace čítačů generátorů s přesností na 1 tik hodin 02 - cca 1us (nemění se fáze při změně tónu) !
- Správná polarita bandpass filtru.
- Doplněna emulace interních napěťových offsetů filtru.
- Přidáno softwarové "Digi Boost" - efekt, který u MOS8580 udělá odpor 330kOhm mezi EXTin a GND.
- Další optimalizace rychlosti.
Novinky ve verzi 2.7:
- Rychlejší časování pro novou verzi HW.
Novinky ve verzi 2.6:
- Zase o fous rychlejší (zrychlení odezvy při čtení registrů o dalších cca 10ns, rychlejší zpracování zápisu registrů).
Novinky ve verzi 2.5:
- Opět o kousek rychlejší přerušení (zrychlení odezvy při čtení registrů o dalších cca 10ns).
Novinky ve verzi 2.4:
- Další optimalizace přerušení (zrychlení odezvy při čtení registrů o cca 20ns).
Novinky ve verzi 2.3:
- Část přerušení přepsaná do assembleru a optimalizovaná ručně.
- Díky tomu umožněno řízení sběrnice nově jen signálem CS (u verzí 2.x netřeba synchornizaci s hodinami O2, může tak běžet i v jiných systémech než s CPU MOS6502).
- Možnost volit dolní mezní frekvence a strmosti filtrů a ukládání nastavení do paměti flash !
- Zvládá všechny průběhy a i se "samply" (aspoň některými) si taky poradí (Ghostbusters se zasmějou, Chimera na vás zakřičí).
- Plná podpora analogových filtrů (LowPass, BandPass, HighPass, kombinace, řízení jakosti Q obvodu).
- Emulace registrů OSC3 a ENV3 (odezva cca 16 taktů hodin C64).
- Joysticky a myš jedou.
Konfigurace:
- Nová verze testovacího a konfiguračního programu z 9.9.2020 zde.
- Přidána detekce vícero ARMSIDů najednou (adresy D400h,D420h a D500h). Pokud je detekován více než jeden ARMSID, objeví se ještě před spuštěním výběr:
- Pokud je detekován jen jeden ARMSID, spustí se první obrazovka rovnou.
- Ukázka obrazovky konfiguračního programu:
- Lze měnit emulovaný čip MOS6581 nebo MOS8580 nebo to nechat na automatice podle napájecího napětí (nastaveno při zapnutí napájení).
- Nově lze uložit nastavení do paměti flash, bude se tak pokračovat v nastavení i při dalším zapnutí napájení.
- Na nové funkcionality - nastavení dolní mezní frekvence a strmosti filtrů je extra obrazovka po stisku klávesy E:
- Strmost filtrů pro MOS6581 odpovídá měřením uveřejněným zde.
- Pro MOS6581 lze strmost zvýšit nebo snížit v celkem patnácti krocích (-7 až +7), dolní mezní frekvenci v hodnotách 150,215 a 310Hz, pro MOS8580 v sedmi krocích pro frekvenci ladění při středním nastavení od 3kHz do 12kHz (kroky zhruba po 1/3 oktávy) a dolní mezní frekvenci také v sedmi krocích logaritmicky od 30 do 330Hz. Ukázka jiného než výchozího nastavení zde (ovládání přes kurzorové klávesy):
- Nově je v konfiguraci možnost nastavit Digifix pro emulaci MOS8580, dostaneme se k němu přes klávesu D z hlavního menu:
- Digifix můžeme nastavit buď externím odporem vůči zemi na externím pinu (stejně jako pro reálný MOS8580) nebo můžeme přepnout do softwarové emulace a nastavit úroveň v několika krocích manuálně (jedna z možností je 0% t.j. vypnout):
- Nastavení se dá uložit klávesou S do RAM ARMSIDa, vydrží tedy jen do vypnutí napájení nebo příkazu restartu:
- Nebo klávesou P trvale do flash paměti, a pak vydrží nastavení i po vypnutí napájení:
- Zdrojový kód konfiguračního programu v C, pro představu jak se s ARMSIDem komunikuje, je zde.
<= zpět