5. apríla 2019

Speccy2010 v1.2.3

Po viac než polroku od posledného releasu firmvéru pre Speccy2010 dnes prinášam novú verziu, ktorá sa rodila veľmi dlho a trochu aj bolestne. Napokon je zameraná na užívateľské rozhranie a debugger...

TL;DR: More info about Speccy2010 v1.2.3 at the end of the article »

Ak si pamätáte, v minulom blogposte som spomenul, že by som sa rád zameral na časovanie. No, nekecal som a skutočne som popri tej hromade grafických zmien pracoval na tom, aby Speccy2010 správne emuloval tzv. contention, čiže brzdenie procesora kdesi v polovici inštrukcie, keď ku pamäti chce pristupovať ULA. Snáď to nie je nejaké šokujúce odhalenie, že Speccy2010 - aj keď sa o to rôznymi "ofajčmi" snaží - to proste nerobí správne, lebo veď pôvodný autor je príslušníkom velikogo sovietskogo naroda a ich Pentagony niečo také proste nemajú. My môžeme byť radi, že sa o to Syd aspoň pokúsil a takisto môžete byť radi, že som sa o to pokúsil aj ja a výsledkom je jeden branch na githube, kde som sa snažil vo Verilogu implementovať komplet novú ULU podľa toho, ako ju Alexej Melnikov (Sorgelig) napísal vo svojom multi-klone MiSTer. Zjavne mi však chýbajú práve tie potrebné hardvérové znalosti, ktoré sú pri takom niečom nutné, pretože sa mi proste nepodarilo zosynchronizovať prístup k dynamickým RAM v polovici inštrukcie, nastaviť správne priebehy zatemňovacím a snímkovacím impulzom a ani po niekoľkých mesiacoch som nedokázal z obrazu odstrániť bordel z celej zbernice a divné posunutie (orezanie?). 😒

Ľutujem, ale v tomto smere sa cítim vyčerpaný a bez pomoci "z vonku" sa nepohnem. Samozrejme sa ponúka zdanlivo jednoduché riešenie ozvať sa priamo Alexejovi, ale ja mám problém, že by som vlastne ani nevedel formulovať požiadavku, v čom potrebujem pomôcť, keďže sám naplno nerozumiem javom, ktoré sa tam teraz dejú. Na strane druhej moje vášne schladil aj LMN/8bc, keď mi na FOReVERi hovoril, aký je problém s Alexejom vôbec nadviazať kontakt. Sám viem, aké je to otravné, keď sa niekto dožaduje, aby som riešil "niekoho niečo", čo sa ma vlastne netýka a ja zo zásady nerobím druhým to, čo nechcem, aby druhí robili mne. Sorry jako, ale v tomto nevidím riešenie, hlavne po tom, čo mi Altera Quartus už niekoľkokrát napísal, že "no more free LUTs" a musel som pristúpiť ku niekoľkým optimalizáciám priamo na úrovni VHDL (absurdné, čo?!). To znamená, že som narazil na limity daného FPGA a ďalší vývoj bude možný alebo prekopaním celého zobrazovania, alebo odrezávaním funkcionality (napr. odpáliť plnohodnotnú emuláciu Betadisk radiča?)...

Iste ste vycítili, že som z toho ostal pomerne frustrovaný a preto som ďalšie mesiace pristúpil k "vyčisteniu hlavy" a pustil sa do vývoja vlastného dlhotrvajúceho dema. Keď som bol minulý rok nedobrovoľne "odídený" z Gemba Boys (lebo sa pár ľudí za všetkých rozhodlo, že nezdieľajú so mnou víziu dizajnového dema precízne synchronizovaného na silný soundtrack), zaprisahal som sa, že na demoscénu kašlem a budem sa venovať už iba firmvérom, emulátorom a utilitám. V tomto momente mi však tvorba dema v rámci psychohygieny prišla ako fajn nápad, no hlavne preto, že som chcel niečo fakt hodnotné odovzdať k 20. výročiu FOReVERu a bolo mi ľúto tej hromady demo-materiálu, čo mi 3 roky ležala na disku a v poznámkovom bloku. Do FOReVERu ostávalo 7 týždňov a keďže som bol na to úplne sám, stihol som dokončiť iba prvú polovicu, navyše som nemohol bojovať v riadnej demo-kategórii. Napriek tomu všetkému sa mi s týmto nedokončeným demom Regression podarilo získať viac preferenčných hlasov ako Gemba demo takže win-win! ;))
Celý príbeh aj pikantné či technické detaily sem spíšem po vydaní plnej verzie dema...

Po FOReVERi sa situácia obrátila a ja som mal dema "plné kecky", na jeho dokončenie som nemal síl a preto som sa s radosťou vrátil ku Speccy2010 a rozhodol sa vydať túto, polroka kvasenú verziu. Čo teda prináša?

1️⃣ Kompletný grafický redizajn: Ak chcete na obrazovku ZX-Spectra dostať viac informácii, musíte siahnuť buď po proporčnom písme, alebo zvoliť jednoduchšie implementovateľné - užšie písmo. Zvolil som preto znakovú sadu 6x8 pixelov, ktorej vykresľovanie ako-tak stíha aj ARM v Speccy2010, hoci musím uznať, že pri prekresľovaní celej obrazovky pokrytej znakmi vidno, že sa ARM "nenudí". Vďaka úzkemu fontu sa tak na obrazovke konfiguračných dialógov našlo viac miesta a vypadla možnosť voľby fontu ako zbytočná, nevyužívaná. File Manager je teraz prehľadnejší tým, že sa do panelov vojdu dlhšie názvy súborov. Dialógy sa nemusia uchyľovať ku kráteniu správ a celkovo z tejto grafickej užívateľskej nadstavby vymizlo veľa nezmyselných skratiek (hlavne z riadku klávesových skratiek File Managera :)

2️⃣ Text viewer: Bola pridaná možnosť ne/zalamovať riadky zobrazeného textu pomocou klávesy F2. Pri nezalomených riadkoch potom funguje posun doprava/doľava kurzorovými šípkami. Ak sa zistí, že súbor nie je textový, automaticky sa prepne do režimu hex-dump. Do hex-dump režimu si môžete prepnúť ručne aj akýkoľvek textový súbor pomocou F4.

3️⃣ Hex editor: Vo File Manageri je možné upravovať akýkoľvek súbor pomocou F4. Hex-editor pracuje priamo nad súborom na SD karte, takže akákoľvek zmena je okamžitá a nezvratná. So srandičkami so zapamätávaním zmien (save, cancel, undo, redo...) nepočítajte - nie sú na to prostriedky, čas ani chuť. Berte to ako núdzovku. ;)

4️⃣ Debugger! Ak ste niekedy používali emulátor UnrealSpeccy, tak viete, že v jeho útrobách sa ukrýva špičkový a veľmi mocný debugger. Voilá, tak už sa ukrýva aj v útrobách Speccy2010 a je dostupný kedykoľvek za behu cez klávesovú skratku Alt+F12. Beží v ARMe a visí tak nad celým strojom v FPGA: Ovláda priamo beh Z80, pozná stavy všetkých registrov, portov a má kedykoľvek k dispozícií každý bajt pamäte. Jeho možnosti si najrýchlejšie načrtneme popisom ovládania:

  • má 2 základné pohľady/okná: Trace [F2] - výpis inštrukcií a Dump [F3], kedy prepína medzi výpisom pamäte hexadecimálne alebo ASCII
  • [Tab] prepína medzi sekciou registrov a výpisom inštrukcii alebo pamäte
  • po registroch či výpisoch sa pohybuje klasicky šípkami a/lebo [PgUp], [PgDown] a hodnoty sa dajú modifikovať pomocou [Enter]
  • [F7] vykoná práve jednu inštrukciu (a teda vojde aj do podprogramu)
  • [F8] spustí beh a zastaví sa až na nasledujúcom riadku výpisu
  • [F4] spustí beh a zastaví sa až na inštrukcii na aktuálnom kurzore
  • medzerníkom si na aktuálnom kurzore nastavíte breakpoint
  • ['] (apostrof, vedľa bodkočiarky) umožní nahliadnuť na adresu, ktorá je použitá v inštrukcii na aktuálnom kurzore
  • [G] (goto) umožní nahliadnuť na zadanú adresu
  • [Backspace] vráti kurzor na predošlú pozíciu pred vnorením (nahliadnutím)
  • [Home] presunie kurzor na aktuálne PC
  • [Z] nastaví PC na adresu, na ktorej aktuálne stojí kurzor
  • v Dump okne fungujú klávesy na presun pohľadu kam ukazuje register:
    • [Ctrl+H], [Ctrl+D], [Ctrl+B] - hl, de, bc
    • [Ctrl+Shift+H], [Ctrl+Shift+D], [Ctrl+Shift+B] - hl`, de`, bc`
    • [Ctrl+X], [Ctrl+Y] - ix, iy
    • [Ctrl+P], [Ctrl+S] - pc, sp

Ešte sa pozastavím pri informáciách v paneloch s informáciami napravo:
pages vidíte aktuálnu organizáciu pamäte a to nie len z pohľadu RAM, tj. aktuálne nastránkovaná 128k stránka v priestore od #C000 a práve zobrazovanej VRAM (SCR 5/7), ale aj to, čo je nastránkované v časti ROM podľa aktuálne zvoleného diskového interfejsu. Takže ak sa tam pri emulácii DivMMC zobrazí niečo ako EP/3D, neznamená to nič iné, ako to, že v priestore #0000-#1FFF je nastránkovaná EEPROM a v #2000-#3FFF zas SRAM banka č. 61. Pri emulácii MB-02 zas zreteľne vidíte, kedy je nastránkovaná BS-ROM, systém BS-DOS alebo niektorá z ďalších tridsiatich SRAM baniek.

Panel stack snáď nemusím špeciálne predstavovať, no panel ports má oproti emulátoru UnrealSpeccy dvojitú funkciu. Namiesto zobrazovania stavu portov ZX-Spectra (a súčasne zvoleného diskového systému) môže slúžiť na náhľad do pamäte v mieste, kam práve ukazuje niektorý z registrov. Panel watch reg sa ovláda rovnakými klávesovými skratkami ako v Dump okne, takže napr. po Ctrl+D vidíte 16 bajtov pamäte, kam ukazuje register de. Pri debuggovaní sa to veľmi zíde, sám som na to odladil desiatky (podľa brata stovky) buildov dema Regression. Na zobrazenie stavu portov sa vrátite pomocou Ctrl+P.


5️⃣ Flasher str750prog: Táto konzolová utilitka sa v začiatku projektu šírila v balíku so Speccy2010. Syd ju tam dodával ako hotový exe-kompilát, ktorý potom z repozitára akosi vypadol a zmizol. Ďalšie roky sa utilitka šírila už iba z disku na disk a každý musel kvôli flashovaniu bootovať Windows. Z najčiernejších zákutí internetu (.ru) sa nám v SinDiKate podarilo "vyňúrať" zdrojáky tohto flashera, reverzným inžinierstvom a spätným prekladom overiť ich správnosť (či sedia flashovacie sekvencie) a následne prispôsobiť pre gcc/clang, aby utilitku bolo možné skompilovať a používať na každej platforme.

6️⃣ Booter: Prešiel refactoringom, aktualizoval som v ňom FatFs a trocha vylepšil sekvenciu, ktorá z SD karty napaľuje firmvér. Odteraz sa fyzicky porovnáva obsah a napaľovanie sa spustí okamžite po prvom rozdielnom bajte. Navyše overuje to, čo napálil a už prvé chyby podrobne hlási cez seriák na FTDI, no keď vidí, že napaľovanie nefunguje správne, sekne s tým a nepokračuje.
Postup, ako si do Speccy2010 napáliť booter už skvele popísal z00m, odporúčam.

Prajem mnoho pekných chvíľ pri užívaní tejto novej verzie. Privítam akúkoľvek spätnú väzbu v komentároch. Ďalšie verzie by som rád vydával s menšími časovými odstupmi. Po stretnutí s Miguelom na FOReVERi vás už teraz môžem navnadiť na to, že nasledujúcej verzii bude niečo, čo celkom zmení pohodlie používania Speccy2010. 😉

PS: Ak sa vám tento projekt páči a máte účet na githube, môžete ho podporiť tým, že si ho pridáte medzi obľúbené (hviezdička). Nevyrieši to brexit, nebude kvôli tomu celosvetový mier a neposilní bitcoin, ale urobíte mi tým jednoducho radosť.

[ Speccy2010 v1.2.3 ]

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

As you probably know, I've took control over the Speccy2010 project and half-year after the last version I'm releasing another one with these features:

changelog v1.2.3:

  • ground up redesign of the graphical user interface
  • much more informations on screen thanks to thinner font in GUI (6 pixel wide)
  • viewer [F3] in File Commander with wrap/unwrap lines [F2] and hex-view [F4] functionality
  • new hex-editor implemented in the File Manager on [F4] key
  • implemented full-featured debugger! [Alt+F12] (see gallery above and help file)
  • updated emulation of Z80 (thanks to Sorgelig)

More info, sources and issue tracker on the project's github pages »
If you like this project, please consider to star and watch it on the github. ;)

3 komentáre:

  1. Som roztopený. Takýto otvorený a rohľadený prístup tento projekt potreboval odzačiatku. Výborne, len tak ďalej a ďakujem!

    OdpovedaťOdstrániť
  2. Ide niekde ten Specy kúpiť hotový?
    Ja to by som to nevedel složit. A ani by som na to nemal čas.
    Som zvedavý na ten pokec ohľadne tej demotvorby. Zvuk by mal byť s demom zladený, to potom vypadá vždy lepšie. Vaše demo WE ARE ALIVE považujem za jedno z best dem ! To ste boli ešte všetci spolu, že ?

    OdpovedaťOdstrániť
  3. Každým dnem čekám Speccy2010 ;) tak jak dojde, hned vyzkouším ;)

    OdpovedaťOdstrániť