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, ale také nižší než ostatní modení náhražky.
- 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.16 z 15.6.2024 zde. Nebo jako obraz diskety. Nebo zde zazipovaný.
- Nezapomeňte si stáhnout nový konfigurační program.
- Oprava pro 2 MHz mód C128. Od tohoto firmwaru je ARMSID funkční pro všechny módy a typy komunikace s C128 (i ty nekompatibilní s dokumentací SID).
- Do konfigurace přidána možnost použít vstup EXT IN (pin 26) jako analogový vstup a jeho připojení do interního směšovače, jako na originál čipu. Nutno počítat s lehkým nárustem šumu z tohoto vstupu, doporučuju používat, jen když tuto vlastnost opravdu potřebujete.
- Dále přidána do konfigurace možnost změny hranice pro detekci emulace 6581/8580 podle vstupního napětí (pin 28), tzv. autodetekce. Původně je tato hranice stanovena na 10,5V, co je pod značí emulaci 8580, co je nad tak 6581. Při novém nastavení může tato hranice být cca 2V a tak lze použít k přepínání pinem 28 logické úrovně 5V nebo i jen 3V (pin 28 se u ARMSID nepoužívá k napájení, jen k měření napětí, k funci není napájení na tomto pinu nutné).
- Předposlední verze FW 2.15 z 7.1.2023 zde. Nebo jako obraz diskety. Nebo zde zazipovaný.
- Oprava chyby při generování šumu v nejvyšší oktávě (reportováno například v hře Crossroads II a Jumpman).
- Detekce typu SID s tímto algoritmem vrací skutečné nastavení typu v konfiguraci ARMSIDa.
- Díky tomu, krom jiných, hraje i poslední část Wonderland XIII alespoň při nastavení ARMSIDa na emulaci MOS6581. Prodigy jedou !
- Oprava ve špatném časování přehrávání hudby Turrican 2 - The Final Fight (dobře slyšitelné na skladbě 2).
- Doplněno nedokumentované přehrávání "žádného" průběhu, díky tomu například Boing Boom Tschak výrazně míň (cca 20dB dolů) píská.
- Úprava v generování kombinovaných waveforms (nejen) pro emulaci MOS8580, kde se víc blíží originálu (jak jen se dá u čipů, které jsou samy o sobě různé mezi sebou, závislé na teplotě, napětí a čase).
- Předchozí FW 2.13 z 6.12.2021 zde. Nebo jako obraz diskety. Nebo zde zazipovaný.
- Opět optimalizace na rychlost, a to nejen na běh aplikace jako takové, ale i obsluhy sběrnice, konečně jedou spolehlivě "pádla" na NTSC mašině i s nejstaršími HW verzemi ARMSIDa (se součástkami nahoře) !
- Rychlejší je i start aplikace, místo stovek milisekund je ARMSID plně funkční už za míň jak 15 milisekund od připojení napájení !
- Přidána možnost "opravit" tzv. ADSR bug, tedy chybu v generátoru obálky, která je vlastní originálním čipům a je reprodukována i v ARMSIDu. V C64 to kvůli kompatibilitě není potřeba, ale pokud používáte ARMSID v syntezátorech, mohla by vás tato funkce zajímat.
- Lehce poupravena jakost (Q) obvodů filtru pro ještě věrnější reprodukci MOS8580.
- Předchozí FW 2.12 z 9.9.2020 zde. Nebo jako obraz diskety. Nebo zde zazipovaný.
- 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ředchozí 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 15.06.2024 zde.
- Přidána detekce vícero ARMSIDů najednou (adresy D400h,D420h,D500h,D520h,DE00h,DE20h,DF00h a 0xDF20h). 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í:
- Na nové stránce s extra funkcemi můžeme "opravit" takzvaný ADSR-Bug. Toto je zajímavé pokud používáte ARMSID v nějakém syntezátoru, kde je původní chyba z originál SIDa nežádoucí. V C64 a C128 určitě tuto volbu ponechte na "NO" pro zachování stejného chování s originál SIDem.
- Nastavením "LOW AUTODETECT THRESHOLD" na yes změníte rozhodovací úroveň automatické detekce emulovaného čipu 6581/8580 na pinu 28 z 10,5V na pouhé 2V, lze jej pak například ovládat logickou úrovní (z 5V nebo jen 3V napájení), vhodné zejména pro použití mimo C64, kde pak není potřeba jiné napájecí napětí než 5V.
- A nastavením "EXT IN MIXED TO THE FILTER" na yes propojíte externí audio vstup (pin 26) s interním směšovačem a umožníte jeho zapojení do výstupu nebo vstupu filtru, jako u originál čipu. Vstup přidává malou dávku šumu, používejte, jen pokud opravdu potřebujete, pro co nejnižší odstup šumu od signálu.
- Zdrojový kód konfiguračního programu v C, pro představu jak se s ARMSIDem komunikuje, je zde.
<= zpět