16. júna 2019

Speccy2010 v1.2.5

Dnes to bude veľmi krátke. Táto nová verzia firmwaru pre Speccy2010 neprináša nič nové a je vlastne iba opravou, presnejšie náhradou za verziu 1.2.4. Prečo? Ako sa hovorí: za všetkým hľadaj Shreka...

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

Shrek sa stal hneď po jeho "veľkom návrate" najaktívnejším užívateľom Speccy2010, takže upgrade na verziu 1.2.4 si stihol urobiť ešte predtým, ako som ju oficiálne oznámil tu na blogu. No od toho momentu sa mu začali diať podivné veci, ktoré mi zvykol popisovať na Messengeri. Kulminovalo to počas jeho rekreačného pobytu kam si vzal Speccy2010 a bugreporty som mal na dennom programe. Tým dejom, tomu chovaniu, ktoré v tých správach popisoval, väčšinou aj s video-prílohou som však nerozumel - nič mi nedávalo zmysel. Programátorská hrdosť mi nedovolila si pripustiť, že na tom môžem niesť podiel viny a celé som to uzavrel tým, že musí mať vadný kus s nejakým hardwarovým problémom. z00m sa hneď ponúkol, nech mu svoje Speccy2010 pošle a on sa naň pozrie. Ja som to považoval za vyriešené a na niekoľko týždňov som sa odpojil od 8-bitového sveta...

Lenže nebol to iba problém niekoho iného. Napriek tomu, že z00m celý plošák prezrel mikroskopom, studené spoje nenašiel a hoci napokon zistil "nakopnutú" SDRAMku, ktorú vymenil, problémy s firmwarom pretrvávali. Medzitým som ja implementoval listing TAP súborov a keď som to mal ako-tak hotové, rozhodol som sa to otestovať. Na moje prekvapenie sa moje Speccy2010 už vôbec nerozbehlo a skončilo v boot-loope. Začal som mať neblahé tušenie, že to, čo sa deje Shrekovi je problém toho, že som skrátka narazil na limity nielej FPGA, ale už aj ARMu. Ako je známe, tento ARM má k svojmu behu k dispozícii iba 16kB pamäte, pričom cca 13kB využíva na statické alokácie a zbytok je určený zásobníku. Žiadne dynamické alokácie neexistujú a ak sa má runtime niečo nové alokovať, ide to práve na zásobník. A tu bolo presne jadro pudla, kedy si rôzne metódy a funkcie alokovali stovky (až niekoľko stovák) bajtov veľké buffre a štruktúry, ktoré tak všetky končili na zásobníku a ten čoskoro pretiekol. Paradoxne, práve pri ukladaní konfiguračného súboru sa dvíhala takáto lavína o veľkosti kilobajtov (cesty ku všetkým romkám a diskom), ktorú ARM nemal šancu ustáť. Také smutné dedičstvo Syda, čo sa pripomína v mnohých core funkciách, ktoré sa volajú veľakrát a odvšadiaľ. Takže som kontaktoval Peda, žijúcu legendu zo 7Gods a nechal som si po lopate a trpezlivo vysvetliť, ako funguje C/C++ správa pamäte, kedy sa čo a kam alokuje a on ma dokopal k návrhu takého globálneho kontajnera buffrov. Takže som prezrel prakticky celý kód, optimalizoval to a používam už iba niekoľko globálne prístupných, zdieľaných a staticky alokovaných bufferov a štruktúr.

S prevratným objavom ale nakoniec prišiel opäť z00m. Vo vývojom prostredí Quartus, v ktorom kompilujeme firmware pre FPGA bolo nastavené, že teplotný profil, v ktorom sa bude fungovať počíta s chladičom a prístupom vzduchu. Keď som si predstavil, ako tým trpia všetky tie naše/vaše zaškatulkované Speccy2010, bolo mi veru smutne. Po zmene tohto nastavenia na teplotný profil bez chladenia a prístupu vzduchu sa jemne zmenila aj samotná syntéza a výsledné taktovania. Výsledkom je tento stabilný firmware, ktorým vám vyslovene odporúčam nahradiť predošlý. Tiež vás musím varovať pred používaním hlboko vnorených adresárov a celkovo dlhým cestám k súborom. Tie buffre na prácu s plnou cestou k súborom nemajú ani sto bajtov...

Na záver sa musím už iba recipročne 8-krát ospravedlniť Shrekovi. Jeho správy ma zasiahli akurát v období, kedy som nemal vôbec radosť z toho, ako mi Speccy2010 uberá hromadu energie a trpia tým iné projekty. Úprimne, keď dnes konečne vidím, koľko ľudí reálne používa tento môj firmware a aktualizuje si vždy novú verziu (2 = Shrek a z00m), tak do toho hádžem vidly. Nikto iný problémy nereportoval, nikto o to už ani nezavadí komentárom, takže nasledujúca verzia bude s najväčšou pravdepodobnosťou posledná. Doplním tam všetky veci, ktoré mám rozpracované pred dokončením alebo už hotové a končím.

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)... alebo aj nemusíte, je to jedno.

[ Speccy2010 v1.2.5 ]

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

This is a replacement of last version of Speccy2010 firmware which has serious stability issues because of insufficient runtime memory for ARM firmware and invalid thermal control bits in FPGA firmware. Lot of optimizations was happen to keep low memory footprint of ARM firmware.

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.

7 komentárov:

  1. Thank you for leading this project!

    OdpovedaťOdstrániť
  2. Velký návrat je to jen pro mne - protože jsem nevěřil, že si někdy ZX Spectrum pustím jinak než v emulátoru a to jen z nostalgického důvodu. Nevěřil jsem, že někdy budu ještě programovat v assembleru a jezdit na Cony. Užívám si to a jelikož jsem exhibicionista, křičím to do světa skrzeva stránky. ;)

    A vůbec se mi nemusíš omlouvat, já jsem rád, že jsi se Speccy2010 ujal - je vidět, že jsi ta správná osoba. Dotáhl jsi Speccy2010 tam, kde je teď - je to plnohodnotná náhrada ZX Spectra.

    OdpovedaťOdstrániť
  3. A ještě poznámka k tomu, že ti nikdo nehlásil chyby ve verzi 1.2.4 - mě se chyby projevovali hlavně když jsem měnil konfiguraci Speccyho (přepínal diskové řadiče atd.), takže pokud někdo používal Speccy2010 s jednou konfigurací nemusel na to ani přijít. Nehledě na to, i já tam měl HW problém, který vše ještě zhoršil.

    OdpovedaťOdstrániť
    Odpovede
    1. Ono je to taky tím, že vůbec netuším, co z toho githubu vlastně stahovat a jak to pak do ARMu a FPGA veprogramovat, jsou tam buď jednotlivé soubory, které nevím, k čemu jsou (kromě readme, ve kterém to ale vysvětleno není), nebo se mi stáhne v zipu nějaký soubor .git, který taky k ničemu není.
      Takže čekám, až bude zas nějaký CON a tam si budu s něčí pomocí upgradovat.

      Odstrániť
    2. Sorry, ale keď si ma chcel vytočiť, alebo iba trollením "namíchnuť", tak sa ti skutočne dokonale podarilo.
      V !každom! článku na konci je gigantický červený link priamo na daný release, kde stačí kliknúť na jediný logický link (označený ikonou balíka) `speccy2010_v1.2.x.zip`, stiahnuť a nakopírovať do koreňového adresára SD karty a TO JE VŠETKO. 😒
      Ak release obsahuje `speccy2010_v1.2.x_sdcard.zip` a nechce sa ti babrať s konfiguráciou, tak aj ten skopíruješ do rootu SD karty.
      Prepáč, ale mám na práci iné veci, ako každého vodiť za ručičku a spisovať návody na kopírovanie obsahu zipov na SD kartu... najmä ak to pred rokom už niekto urobil: https://blog.darkbyte.sk/?p=929786
      🤦‍♂️

      Odstrániť
    3. Nehovoriac o tom, že v README je od začiatku projektu medzi "key features": Upgrading of firmware for microcontroller and FPGA is done automatically from the root directory of the SD card

      Odstrániť