3. júla 2018

Ako sa Speccy2010 znova narodilo

Bola jar roku pána 2014 a mne sa konečne podarilo dostať k vytúženej univerzálnej doske Speccy2010 založenej na veľkom FPGA Altera Cyclone II a procesore ARM STR75x, ktorú autor zvaný Syd z Kyjeva, ako už názov napovedá, predurčil stať sa plnohodnotným klonom ZX-Spectra. A keďže som človek od prírody hravý, tak mojim cieľom nebolo iba pasívne užívať to, čo doska v tom čase poskytovala, ale zamerať sa skôr na jej ďalší vývoj a prispôsobenie tomu, na čo som ako stredoeurópsky spektrista zvyknutý...

TL;DR: Speccy2010 has a new firmware, more info at the end of the article »

Na začiatku bolo, ako to už býva zvykom, slovo: Konkrétne niekoľko stoviek slov z00ma, ktorý na svojom blogu napísal pár výborných článkov o Speccy2010, ktorými ma dokonale uhranul a namotal tak, že keď sa objavila možnosť si osadenú dosku zaobstarať, tak som do toho, nedbajúc na financie išiel.

Okamžite, keď sa mi doska dostala do rúk som sa začal "vŕtať" vo firmvéri, hlavne vďaka otvoreným a ľahko dostupným zdrojovým kódom, ktoré Syd po sebe zanechal. V tom čase sa už vedelo, že on sám projekt opustil a že v ňom nemieni ďalej pokračovať, čo ma povzbudilo ešte o čosi viac.

Áno, ja som už raz taký, že moment, pre ktorý väčšina rozumného ľudstva od takýchto projektov dáva ruky preč je pre mňa skôr spúšťačom si to "vziať za svoje", kompletne prekopať a pokračovať vo vývoji.

Aby som sa oboznámil s tým, ako tam v micro-controlleri všetko funguje a o čo sa vlastne stará, pustil som sa najprv do prispôsobenia mapovania kláves. Celkové ovládanie, ktoré tam mal Syd mi prišlo divné a nevedel som si naň zvyknúť (pripomínalo to keymap-chaos UnrealSpeccy emulátora), takže inšpirovaný emulátormi ZXSpin, SpecEmu, Fuse, či staručkým RealSpec, som toto rozloženie prispôsobil k obrazu svojmu a myslím si, že našincovi "pôjde do rúk" lepšie.

No a nebol by to môj príbeh, keby v tomto peknom momente neprišli prvé problémy:

1. Ukázalo sa, že moja doska mala akúsi hardvérovú závadu a micro-controller nedokázal sám sebe updatovať firmvér z SD karty, čo je štandardná vlastnosť zavádzača Speccy2010. Našťastie mám kamarátov zo SinDiKatu, ktorí boli okamžite ochotní sa toho chytiť, takže jedného chladného rána som ešte za svitania sadol do auta a vybral sa "do neďalekých" Smoleníc (400 km z Košíc :), kde to z00m a ikon podrobili skúmaniu a kontrole na studené spoje, no bezúspešne. Ale ako som spomínal, sú to kamaráti a tak navrhli možné riešenie: Túto dosku si ponechajú na podrobnejšiu analýzu a doslova na počkanie mi z00m začal osadzovať dosku novú. A keby som sa nemusel ponáhľať domov (aby som nedorazil v noci), tak by som si ju v ten deň aj viezol domov. Dostal som sa k nej ale už o týždeň-dva na 15. ročníku demoparty FOReVER a používam ju dodnes. Vývoj mohol zas pokračovať, ale...

2. Keďže mojim primárnym cieľom bolo do firmvéru ku vstavanému Betadisku implementovať "naše" známe DivIDE (konkrétnejšie DivMMC), veľmi skoro som prišiel na to, že bez detailných znalostí toho, ako funguje nielen samotné DivIDE z pohľadu logiky a portov, no hlavne fungovania hradlového poľa Speccy2010 popísaného vo VHDL sa nepohnem. S heslom "musím sa ešte veľa učiť" som si od Romana požičiaval 3 knihy o VHDL a FPGA všeobecne, no veľa som sa toho naučiť nestihol, pretože...

3. Na jeseň sa mi narodila dcéra a všetky tieto moje veselé kratochvíle museli ísť na vedľajšiu koľaj. Čoskoro som mal pocit, že sa k tomu už asi nikdy nedostanem, hlavne keď som sa v ďalších rokoch stále viac prepadal do vyhorenia...

... o 42 mesiacov neskôr...

Najsilnejším impulzom, ktorý vo mne tento projekt znovu zobudil bola neuveriteľná frustrácia a sklamanie z toho, akým smerom a do akej prdele až dospeli vývojári okolo klonu ZX Spectrum Next. Chlapci, sorry jako, ale chceli sme konečne poriadne Spectrum bez blbín a kompromisov, nie amigisticko-konzolového mačkopsa, ktorý originálne speccy kvoli plnému vagónu "vylepšení" ani nestíha časovať!

A tak som 1. mája vytiahol zo skrine Speccy2010, oprášil zdrojáky s niekoľkými modifikáciami ešte z roku 2014 a začal na tom makať. Najprv som sa podujal urobiť firmvéru ARM micro-controllera kompletný refactoring, lebo povedzme si, Syd je určite šikovný chlapík, ale štábna kultúra, znovu-použiteľnosť a modularita mu pri C/C++ zjavne nič nehovorí (main.cpp či specShell.cpp ako toaleťáky o 2000+ riadkoch ;). To prispelo k tomu, že som musel do detailu pochopiť, ako to pracuje, akým spôsobom sa komunikuje s FPGA, kde a kedy sa pracuje so zbernicou a ako sa vlastne konfiguruje beh a správanie počítača. Keď už som bol "vo švungu", tak som vstavaný súborový prehliadač prerobil na šikovný Commander (a-la Norton, Volkov, Midnight, FAR...) a trochu ho vylepšil...

A bol to práve moment, kedy som si bol v kreatívnej dielni brácha Romana osadzovať svoje Speccy2010 do škatuľky, keď prišla reč na to, ako ten firmvér vlastne funguje, ako by sa tam dalo integrovať DivMMC a začali sme spolu čítať zdroják VHDL - v tom momente sa mi všetko, čo som dovtedy o VHDL čítal (díky @adent!) v hlave pospájalo a začal som tomu rozumieť. Romanove encyklopedické znalosti o tom, ako funguje riadiaci port DivIDE a tiež jedna hotová implementácia DivMMC v multi-klone Mist mi nakoniec pomohli v pochopení toho, čo vo výsledku musím dostať do FPGA Speccy2010.

Po 3 týždňoch od tohto momentu sme už sedeli s bráchom a v rámci hesla "viac hláv, viac kapusty" analyzovali moju čerstvú implementáciu DivMMC a krok po kroku, za pomoci Karnaughových máp hľadali všetky možné kombinácie stavov na riadiacom porte, ladili stránkovanie, prístup do pamäte... a v tú noc sa to stalo: ESXDOS 0.8.6 nabootoval!
Šťastím bez seba som sa od toho nevedel do skorých ranných hodín odtrhnúť. :)

Nakoniec bolo nutné vyriešiť už iba dialógové menu na konfiguráciu ROM súborov pre jednotlivé modely počítačov či firmvéry diskových interfejsov, rozbehať správne fungovanie signálu NMI a optimalizovať rýchlosť I/O operácií DivMMC.

Po 7. rokoch je takto na svete nová verzia firmvéru:

[ Speccy2010 v1.2.1 ]

...and the last few words for english readers:

Speccy2010 is FPGA development board built for the implementation of various gaming computers but originally focused on ZX Spectrum and its clones.

I'm mborik of GembaBoys and last 4 years I've been working on new updated firmware for Speccy2010 and adopt it to "our" Central European customs or conventions, which simply means to implement DivIDE, disk interface by Pavel Cimbal - specifically a successor called DivMMC.

Why so many years, you asking? Firstly I had some hardware issues with my board but the main blocker was a birth of my daughter. Finally, in May of this year I began to work intensively on it and here is the result:

changelog v1.2.1:

  • added new configuration for standard ZX-Spectrum 128 (toastrack)
  • implemented DivMMC, with full-feature DivIDE control register and programming model in VHDL
  • standard Sinclair machines has a configurable disk interface
  • extended configuration INI file, it's more structured by config groups
    (you should delete old speccy2010.ini from your SD)
  • added config group with configurable paths to ROM files for all machines or firmwares
  • implemented ROM Configuration dialog [Alt+F9]
  • fixed NMI functionality globally [F5]
  • file browser and viewer redesigned to look more like a Commander
  • copy/move should ask for overwrite if file(s) exists
  • improved screen viewer slideshow
    (accesible from [F3] or [Enter], next screen with [Space])
  • keyboard LEDs now indicates:
    • NumLock: power-up
    • CapsLock: disk interface activity
    • ScrollLock: PC keyboard emulation
  • optional mimic TV screen interlace in VHDL
  • implemented hard reset functionality
    (accessible from the config menu [F9] after hit of F5 key)

More info, sources and issue tracker on the project's github pages »

6 komentárov:

  1. Tak klobouk dolů, gratuluji k novému FW se spoustou vylepšení :-).

    OdpovedaťOdstrániť
  2. A já už chtěl Speccy 2010 prodat, protože mi se starým firmware prostě nefungoval.
    Musím zkusit, zda to můj stroj zachrání.
    Rozhodně se zdá, že nový firmware bude užitečnější a ještě více speccy než ten starý.

    OdpovedaťOdstrániť
  3. Toto je absolútne úžasná vec. Speccy2010 mi už akosi zapadalo prachom, ale s týmto firmwarom je to úplne iná káva. Vďaka Martin! Odviedol si kus dobrej roboty.

    OdpovedaťOdstrániť
  4. Martine díky. Naprosto super. Z prakticky nepoužitelného krámu je teď ultimátní stroj. Speccy2010 jsem si tenkrát stavěl pro zábavu a chtěl jsem pokořit ten 200 nožičkový fpga. Stálo to sice hromadu peněz, ale stavbu jsem si užil celkem dvakrát. Software k tomu nebyl nic moc a teď je všechno jinak.
    Vzpomínám si, jak si mluvil o tom, že se nechceš učit VHDL... :-)
    Ještě jednou díky a gratuluji.
    Pavel Vymetálek

    OdpovedaťOdstrániť
  5. Ďakujem vám všetkým za pozitívne slová. Nečakal som, že to bude mať až takýto pozitívny ohlas. ;)
    BTW má už niekto aj reálne skúsenosti s testovaním?

    OdpovedaťOdstrániť