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:
V 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. ;)
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ťIde niekde ten Specy kúpiť hotový?
OdpovedaťOdstrániť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 ?
Čo viem, tak SinDiKaT-isti rozpredali obe várky, ktoré vyrobili (presnejšie sa to rozchmatalo ako teplé rožky :)) a v súčasnosti sú k dispozícii asi iba tieto ruské, o ktorých kvalite však nemáme žiadne info: http://www.zxkit.ru/catalog1/konstruktory/retro-kompyutery/speccy/
OdstrániťKaždým dnem čekám Speccy2010 ;) tak jak dojde, hned vyzkouším ;)
OdpovedaťOdstrániťTak poslušně hlásím, že vše funguje jak má ;) napsal bych víc, ale nemám čas, speccyuju ;)
OdpovedaťOdstrániťTo sú výborné správy. Ráta sa každý spectrista, ktorého táto moja voľnočasová aktivita prinavrátila na jedinú správnu cestu. ;)
Odstrániť