19. septembra 2018

Speccy2010 v1.2.2

Všetci odoberatelia noviniek z tohto blogu už určite čítali môj siahodlhý výlev o tom, že som sa tak trocha zbláznil a dal sa na vývoj nového firmwaru pre Speccy2010. Ak patríte medzi tých, čo ma považujú za toho, čo projekty s nadšením rozbieha a potom (svojvoľne!) nedokončené pozastavuje a tešili ste sa, že takto dopadne aj firmware pre Speccy2010, tak to vás asi sklamem: Neprešlo ma to, práce boli intenzívne a je tu nová verzia...

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

Po vydaní verzie v1.2.1 som si chcel dopriať trocha oddychu, no už po týždni mi to nedalo a začal som rozmýšľať, kam to posunúť ďalej. Kládol som si otázky, či sa zamerať na ďalšie vylepšenia grafického užívateľského rozhrania, alebo sa pustiť do rozširovania možností emulácie. Nakoniec vyhral progres nad vizuálom a to z jediného prostého dôvodu:

Počas celého môjho "spektráckeho života" ma to niekde v podvedomí tiahne ku diskovému interface MB-02. Doma sme síce mali Didaktik D40 prakticky od kedy si pamätám a vytvorili sme na tom stovky (podľa brata tisíce) súborov a mám na to krásne spomienky, ale od kedy som sa dozvedel o em-bé-nula-dvojke (tj. objavila sa v RealSpec emulátore), čítal si čokoľvek o jej vlastnostiach a koncepcii, nedokázal som sa zbaviť pocitu niečoho veľkého, dospelého, premysleného do posledného detailu a prispôsobiteľného čomukoľvek. Samozrejme som si uvedomoval všetky prekážky, ktoré sú s plnohodnotnou emuláciou na Speccy2010 spojené: Do VHDL neexistuje implementácia Z80DMA (neviem o nej, internety mlčia) a jediný radič, ktorý Speccy2010 v súčasnosti má k dispozícii je FD1793 Betadisku, no ten je chudobnejší o celú sadu príkazov, ktoré má radič WD2797 navyše použitý v MB-02 (práca so stopami, ktorá sa využíva už napr. pri formátovaní). Bral som ako fakt, že DMA nebude k dispozícii a prekonám to tým, že prenosy budem jednoducho "turbovať" (CPU prepnem v čase prenosu na 35MHz, takisto ako to robím pri DivMMC), no pamäťový model MB-02 je taký jednoduchý a priamočiary, že nebude problém ho implementovať do VHDL. Tak som si povedal, že to skúsím a ešte pred dovolenkou som urobil kópiu pôvodného kódu Betadiskového radiča a vytvoril tak kostru toho, z čoho mal vzniknúť radič WD2797...

Po dvoch týždňoch oddychu, už v plnej sile, som napísal Busymu s týmto mojim smelým plánom. Jeho reakcia ma vlastne ani neprekvapila: „Vykašli sa na radič! Celé MB-0x bolo koncipované tak, aby pracovalo s akýmkoľvek médiom a low-level prístup k nemu poskytovali služby BIOSu. Samotný DOS vlastne ani netuší, s čím práve komunikuje. Ak za médium budeme považovať to, že firmware nejakým štandardným spôsobom sprístupní obrazy diskiet na pamäťovej karte, potom nech BIOS zabezpečí iba čítanie a zápis sektorov z/do týchto obrazov. Taktiež ani DMA nebude potrebné, to pôvodne slúžilo vlastne iba na to, aby sa stíhal prenos dát pri čítaní z HD diskiet a tých pár diem, čo bolo na to vytvorených oželieš. Posielam ti zdrojáky BS-DOSu, pomôžem ti upraviť BIOS a ty si k tomu už iba dopíšeš obsluhu na strane firmware.”

Ako sľúbil, tak splnil a hneď v ten víkend sme sa stretli v Pezinku na júlovom "zjazde" SinDiKaTu, kde mi podrobne vysvetlil, čo v minulosti zabezpečovali všetky tie služby FDC-BIOSu a ako je to všetko v súčasnom svete záznamových zariadení zbytočné. Z pôvodných 16 služieb neostal kameň na kameni (väčšina iba zareaguje nejakým návratovým kódom, iné ani to :)) a ostali ošetrené iba RDSEC a WRSEC, ktoré si jednoducho s firmwarom vymenia 1024 bajtov obsahu sektoru z/do obrazu diskety a ACTIVE/PASIVE, ktoré vyberajú aktuálnu virtuálnu mechaniku. Ďalšie dni mi ešte po večeroch pomáhal odhaliť zopár zádrhelov a odladiť implementačné detaily, ale výsledok na seba dlho nenechal čakať - fungujúca MB-02 a to vrátane RTC na portoch x03 je dnes realitou!

Nebolo to však všetko také jednoduché a priamočiare. Len čo som začal do firmwaru pridávať podporu MB-02 (a možnosť mountovať 4 obrazy diskov) mi došla pamäť - totiž, ARM procesor STR75x má k dispozícii iba 16 kilobajtov pamäte, o ktorú zápasia staticky alokované prostriedky a zásobník. Začal som preto mohutne optimalizovať Sydov "rozšafný" kód, šetriť pamäť globalizáciou premenných a ich zdieľaním. Niekoľko stoviek bajtov som síce ušetril, ale nestačilo to k úspešnej kompilácii. Celou dlhou cestou vlakom zo SinDiKaTu domov som pátral po probléme, aby som nakoniec zistil, že použitá implementácia FatFs si ku každému deskriptoru súboru staticky alokuje aj vyrovnávaciu cache o veľkosti sektora. Našťastie je FatFs skvele konfigurovateľné a po prepnutí do tzv. TINY režimu (sektorová cache je zdieľaná, daňou sú pomalšie operácie s viacerými súbormi), uvoľnilo sa niekoľko ďalších kilobajtov voľného miesta a vývoj mohol pokračovať...

Keď už som bol rozbehnutý, tak som do vstavaného File Managera pridal komplexnú prácu s MBD obrazmi diskov - od ich formátovania až po vytváranie s definovanou geometriou (sektory/stopy). Navyše som všetky tieto operácie zjednotil spolu s prácou s TRD obrazmi pod klávesu F9. Na záver som ešte pridal vlastnosť, ktorá mi pri vývoji veľmi chýbala: Prijímanie súborov po sériovej linke z PC - priamo za behu, bez nutnosti vyťahovať SD kartu zo Speccy2010, mountovať ju do PC a kopírovať to na ňu. To si takto jednoducho vo File Manageri stlačíte F11, zadáte výsledné meno súboru a z PC začnete vysielať požadovaný súbor pomocou XMODEM protokolu. Jednoduché a praktické riešenie (hlavne keď pri ladení VHDL firmwaru potrebujem niekoľkokrát za večer nahrať novú verziu na SD a otestovať)...

Teraz sedím vo vlaku domov zo septembrového stretnutia SinDiKaTu a dopisujem tento blog, čo znamená, že firmware v1.2.2 bude čoskoro vydaný. Bol to dnes opäť plodný deň, kedy som vyriešil niekoľko problémov, ktoré ma hnevali. Chcem sa veľmi poďakovať Busymu, bez ktorého by nielen nejestvoval skvelý BS-DOS, ale ani táto implementácia v Speccy2010. Taktiež musím poďakovať z00movi za neutíchajúcu podporu a beta-testing, ktorým mi pomohol odchytať viacero chýb a "nedodělkov". Špeciálne sa ale musím poďakovať Ikonovi a jeho manželke, ktorí posledné 2 SinDiKaTy kŕmili a napájali tlupu rovnako postihnutých, čo sa im tam nakvartírovali na celú sobotu a hrabali sa v 8-bitových blbinách.

V ďalšej verzii sa chcem zamerať na veľmi dôležitú vec: Časovanie. Niekedy dávno sa proste rozšírilo, že Speccy2010 časuje správne režimy 48k a 128k. Bralo sa to ako fakt, no nie je to pravda. A aj keď nie je úplne jednoduché nájsť demo-efekt, na ktorom sa časovanie rozbije, problém to bohužiaľ je. Našťastie, už teraz viem, odkiaľ budem čerpať inšpiráciu precízneho časovania do VHDL, takže to vyzerá reálne... ako sa u nás východe hovorí: Stay tuned!

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 konflikt v Sýrii, nebude kvôli tomu lacnejší chlieb či lepší kurz eura voči čínskemu yuanu, ale urobíte mi tým jednoducho radosť. ;)

[ Speccy2010 v1.2.2 ]

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

As you probably know, I've took control over the Speccy2010 project and I'm releasing another version with major change: support for a third disk interface!

changelog v1.2.2:

  • implemented MB-02, without Z80DMA or real floppy disk controller but specifically modified original BIOS and simplified data transfer with new BS-DOS 308s firmware
  • Real Time Clock in MB-02 specification, listening on ports #0n03
    (also compatible with ESXDOS 0.8.6 in DivMMC using proper SYS/RTC.SYS)
  • cold-reset and booting screen with firmware's version displayed
  • new disk image formatting/creation wizard implemented in the File Manager on [F9] key
  • file receiver from PC through the UART using the XMODEM transfer protocol in the File Manager on [F11]
  • checking of path & filename validity in ROM Configuration or Disk mount dialogues after manual filepath entry
  • new type of "toast" dialog in File Manager which will show a short message for a few seconds
    (used after disk mount or current working path setting)
  • fixed switching of video modes [Alt+1..5]

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. ;)

2 komentáre:

  1. Myslím si, že po dlhých rokoch čakania a usadených vrstvách prachu na tento projekt nás nemohlo stretnúť nič lepšie ako šikovný a usilovný chalan, ktorý sa toho chytí a dotiahne to do parádne použiteľnej podoby. Vďaka Martin! S mojou github hviezdičkou môžeš počítať :)

    OdpovedaťOdstrániť
  2. Хорошая работа! Сегодня дома буду испытывать новую прошивку. Благодарность и низкий поклон Мартину!

    OdpovedaťOdstrániť