Co dalšího pro PMD-85

Dnes jsem zřejmě dokončil druhou edici Lemmingsů (oficiálně testování dokončím koncem týdne zřejmě 12.3.2017)  a taky jsem ještě udělal jednu úpravu na Treasure Island (omlouvám se Romanovi z RM-TEAMu).

Co dál. Včera večer jsem přemýšlel nad základními mechanismy, kolem kterých by se dala udělat hra Trailblazer. Opět jsem se inspiroval v mých vzpomínkách na Commodore Plus/4. Tato hra existuje rovněž na ZX Spectrum, ale ta verze se mi moc nelíbí. Možná kvůli barev nakonec narazím na takové limity, že to bude vypadat stejně jako na ZXS, ale nyní si myslím, že to jde lépe. Tuto hru už asi v dohledné době nestihnu dokončit, tak alespoň začnu demonstrací možné rychlosti. Sám jsem zvědav, jak to bude vypadat.

První demo, které ukazuje, zda PMD-85 má na to, aby rolovalo obrazovku ve stylu těchto míčových her, je v přiloženém souboru pod názvem BLAZDEM1. Natahuje a spouští se od adresy 0000h. Šipkami vlevo a vpravo se dá zrychlovat a zpomalovat. Já myslím.. že na to péemdéčko má. Takže první test, který měl ukázat, zda se tím vůbec zabývat, dopadl dobře. Další krok bude vytvarovat dlážděnou cestu tak, aby se do dálky sbíhala a uměla textury a barvy jednotlivých dlaždic. To už je sice vymyšleno ale k realizaci zbývá dlouhá cesta.

Druhé demo (BLAZDEM2 v přiloženém souboru pro emulátor PMD-85) už vypadá jako Trailblazer. Ale není tam ten míč. To bude takový programátorský oříšek, dostat jej tam bez rušivých vlivů na animaci a její plynulost. Ale to doufám přijde. Teď přišla inspirace, jak vyřešit tu plynoucí plochu, a tak jsem to udělal. Možná na úkor testování předchozích her. Ale inspirace si poručit nedá. Jak přijde, je ji třeba chytit a využít. A vypadá to takto:

 

Třetí demo (BLAZDEM3) v níže uvedeném souboru virtuální MGF pásky pro emulátor PMD-85 již obsahuje ovládání míče. Zatím jen do stran, skákání jsem nestihl. Sežralo to dost výkonu, na druhou stranu jsem začal optimalizovat „drivery“ jednotlivých mikrořádků, čímž jsem pokles rychlosti začal postupně kompenzovat. Každá dvojice mikrořádků (jednak tvoří pár pro barevný atribut ColorACE, jednak umožňuje vytvářet primitivní textury) má totiž svůj driver. Ten ví, v jaké výšce obrazovky se nalézá, jak daleko od levého okraje a co se má v této „výšce“ spouštět za další procesy. Takže se nic nepočítá. Samozřejmě ten driver také ví, na kterých adresách na mikrořádku se nalézají předěly mezi pěti podélnými pásy. Původní varianta tyto drivery neměla, používala univerzální proceduru, která předěly mezi pásy počítala za chodu pomocí Bresenhamových interpolátorů a smyček ve stylu FOR/NEXT. Ta časová režie na interpolátory a smyčky je značná, proto postupně klopím tuto proceduru do již zmíněných řádkových driverů. Mimochodem, ty Bresenhamovy interpolátory jsou použity ve druhém BLAZDEMu – taky jsou pěkně rychlé. Ale s míčem už to nestačilo. Stále si myslím, že tam mám dost rychlostní rezervy v těch prozatím nepřeklopených řádkových driverech. Zrovna ta část cesty ve výšce míče (je to největší plocha a nejčastěji překreslovaná) stále jede na těch „pomalých“ Bresenhamech. Další demo už asi nebude. Až se k tomu po dovolené vrátím, bude asi následovat už první varianta nějaké smysluplné hratelné verze.

Ještě jsem na poslední chvíli stačil dát dohromady čtvrté demo (BLAZDEM4) a přidat jej do ZIP souboru pod článkem. Demonstruje chod pásu na maximální současný možný výkon, funguje stranové ovládání míče a regulace rychlosti pásu. Jak říkám, je to maximum, více rychlosti z toho dostanu jedině tehdy, pokud zmenším míč o 6 pixelů na šířku (a adekvátně na výšku) nebo zmenším plochu té dlaždicové cesty. Ale ani tak to zázraky nebudou – budeme se bavit o deseti, dvaceti procentech nárůstu rychlosti. Spíše bych hratelnost té hry postavil na technice projíždění levelů než na rychlosti.

Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu: Trailblazer (verze z 20.3.2017 ve 11:25)

Tabulka a graf v Excelu pro výpočet a simulaci dlaždicové plochy: výpočet dlaždicové plochy

Oprava Lemmings pro PMD-85

Protože jsem před časem začal dělat pokusy s reálným hardware PMD-85, vyzkoušel jsem samozřejmě i Lemmings. Nepříjemným zjištěním bylo, že v některých místech dochází k mnohonásobnému detekování klávesy při jejím jednom jediném stisku. Tato chyba se na emulátoru nemohla projevit, protože z principu se zákmity kláves při stisku a puštění do nadřazeného systému nedostávají. Obslužná rutina v Lemmingsech samozřejmě obsahovala softwarový filtr proti zakmitávání, ale byl nastaven na nedostatečně dlouhou ochrannou dobu. A hlavně nebyl odzkoušen na skutečném hardware PMD-85. Což tímto napravuji.

Taky jsem pro vykreslování barevných objektů použil fintu, na kterou jsem přišel dva dny po dokončení Treasure Island 🙁 Místo přenosu dat do videoram na místo ukazatele (například v registrovém páru HL) jsou použity cílové ukazatele dva (v DE a v HL) a zápis dvojice bajtů, která určuje svůj společný barevný atribut, probíhá ihned po sobě. Prostě se připraví adresy a data a provede se sekvence: STAX D – MOV M,B. Teoreticky to zkracuje dobu, po kterou trvá riziko, že se na obrazovce stihne zobrazit mezistav s neplatnou kombinací těchto dvou částí barevného atributu. A ve skutečnosti mám subjektivní pocit, že se snížil počet „záblesků“ hlavně bílého falešného atributu při vykreslování fialové. Tam to bylo vidět nejvíc. S tím byla spojena změna formátu fontu a všech uložených grafických komponent (mimo herní grafiky, protože WEXova část se nemění).

Třetí změnou je oprava chyby, kdy po vstupu do menu pro definici ovládacích kláves se vše naoko tvářilo, že je zároveň ovládání přepnutou na klávesy, ovšem od posledního nastavení se nic nezměnilo. Explicitní volba ovládání klávesnice/joystick fungovala dobře, tam jsem neměnil nic.

Čtvrtou změnou je dodatečná úprava programu hry tak, aby u verze 2 a vyšší využíval rutiny BIOSu (typicky operace čtení z MGF) v paměťovém rozsahu 8000h až 8FFFh bez ohledu na to, zda je v této oblasti namapována ROM nebo RAM. To umožní zapnout ALLRAM mód a modifikovat tyto rutiny podle „svého“ záznamového zařízení. Program si po startu zapamatuje výchozí mapování paměti a takové pak používá při přístupech do BIOSu. Pro rozlišení typu PMD (v zásadě na verzi 1 a ostatní) se používá sedmibajtový řetězec na adrese 8DDBh. Pokud je tam nalezena sekvence: CD 0E 8E DB 1E B8 C9 – pak se jedná o verzi PMD 85-1 a jsou použity vlastní čtecí rutiny Lemmings bez použití BIOSu, v opačném případě se volají BIOSovské procedury 8B6Ch a 8EBEh). A (nejen) tyto procedury mohou být libovolně přepsány – dokonce již od nultého bajtu.

A pro rozlišení verze je samozřejmě v logu Lemmings malý text „2nd release“.

Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu: Lemmings (2nd release) – (verze z 9.3.2017 ve 12:12)


pozn.: Protože poslední hry bez výjimky ždímou paměť do posledních bajtů (nenechte se zmást velikostí uvedenou na MGF pásce – ta je před dekompresí), upustil jsem od všeobecné spustitelnosti na strojích jako C2717 a Didaktik. O Maťovi ani nemluvě. Těch podmínek pro různé stroje by se nakupilo tolik, že i testování těch kombinací by zabralo ohromné množství času. I tak je těch kombinací při testech až až. Pokud by se našel někdo, kdo by chtěl některou z těch her adaptovat na tyto stroje, raději zkompiluji sólo verzi. Jednodušší hry, které nepřepínají paměť ve 3. kvadrantu, a které nevyužívají odlišně mapované porty – ty samozřejmě pojedou. Ale bez garance.

Zatím to zde dávám jako pracovní materiál, ještě ca týden bych prováděl všemožné testy, zda tam ještě něco nenajdu. Pak bych tu „verzi 2“ prohlásil za hotovou.

JETPAC pro PMD-85

Hrou JETPAC od firmy ULTIMATE začaly 25.11.2012 mé pokusy s převodem her ze ZX Spectra na PMD-85. Během 76 dní se mi podařilo tuto hru kompletně převést a zprovoznit. S odstupem času vnímám, jak bídnou grafiku tato hra má, hlavně z pohledu problikávání objektů během jejich vykreslování. Ale takto byla ta hra v originále napsána – a já to neměnil.

Hlavní výzvou byla rychlost. Přeci jen procesorem se jmenovitým taktem ca 2.0 MHz konkurovat procesoru na ca 3.5MHz je odvážné. Oba procesory jsou na těchto platformách zpomalovány kvůli vykreslování obrazu, v tom asi výrazný rozdíl není. Naštěstí jsou všechny ty „prefixové“ instrukce procesoru Z80, které má oproti i8080 navíc, přeci jen ve výsledku o něco pomalejší. Ano, jsou efektivnější, pohodlnější, a to právě svádí k jejich používání. To je jedna z časových rezerv, která hraje ve prospěch převodů her ze ZX Spectra na PMD-85 při zachování jejich rychlosti. Ale ten hlavní prostředek k dosažení srovnatelné rychlosti hry je v tom, že řadu univerzálních procedur, využívajících smyčky, jsem rozepsal do jednoúčelových lineárních zápisů, optimalizovaných právě na rychlost – bez ohledu na délku kódu.

A zde je výsledek:

    

Hra je pouze černobílá. V té době jsem o barvách ještě neuvažoval. Ale když jsem se zpětně díval na zdrojový kód, zdá se mi, že výškové souřadnice objektů jsou vždy sudé. To by samozřejmě umožňovalo použití barevného systému ColorACE bez přitěžujícího zvětšování bitmap objektů.

Pro ilustraci, jak jsem vykompenzoval pokles výkonu 3,5MHz vs. 2MHz, uvádím zdrojový kód mé originální knihovny zobrazovacího modulu. Je to trochu prasárna, má to spíše formu záplat na originální kód, ale jsou tam viditelné postupy, kdy je původní univerzální zobrazovací procedura o délce několika desítek bajtů rozpracována do několika variant, podle toho, co se má dělat a jak široké jsou vykreslované obrazové fáze (vždy stará, která se maže, a nová, která se kreslí). Návěští některých procedur v této knihovně ještě obsahují původní adresu v paměti ZX Spectra (725Eh), takže můžete srovnat s původní procedurou:

Zdrojový kód vykreslovací knihovny pro PMD-85: Zobrazovací knihovna pro PMD-85

Zdrojový kód autostarteru pro PMD-85: Autostarter

Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu: JETPAC

Portace hry Treasure Island

Tuhle hru jsem měl kdysi rád, už jenom proto, že to byla jedna z prvních her na mém prvním počítači, který jsem si koupil. Tím počítačem bylo Commodore Plus/4 a mě ty barvičky ve hře prostě uchvátily.

A tak jsem v neděli 5.2.2017 začal portovat. Začal jsem jsem statickými objekty. Výsledek této části portace jsem hodil do přiloženého souboru pod článkem. Až bude hra funkční, pak budu řešit, jestli se tam vlezou i alternativní bitmapy pro čtyřbarevný režim a režim ColorACE. V tom posledně jmenovaném totiž vynikne krása té hry. Ale i černobílé to má své kouzlo.

V pátek 10.2.2017 jsem dokončil druhou mezihru. Taky jsem kompletně jinak udělal detekci střetu hráče s těmi pěstmi ve druhé mezihře. Namísto výpočtů se testuje fyzický střet. Ovládání už je nyní ve stylu původní hry, tj. klávesy Q,A,O,P,M (a také H, T, B+T). Joystick přibude později.

Ve středu 15.2.2017 dokončena sada statické grafiky pro ColorACE (bude-li nakonec použita). Úvodní obrazovka a první mezihra je v konečné podobě. Animace jedou výhradně přes vyrovnávací paměť.

Pátek 17.2.2017 – obě mezihry v konečné podobě. Modul pohybu hráče v hlavní hře hotov. Ve zdrojovém kódu identifikovány všechny zbylé moduly.

Pondělí 20.2.2017 – funkční hra, piráti vrhají meče (zatím bez interakce s okolím) a duch ostrova nevylézá z nory. Chybí zavaděč pro MGF pásek, možná nějaká ta hudba, možná nějaký ten extra font a možná nějaká závěrečná obrazovka.

Středa 22.2.2017 – hra je defacto hotova. Zbývají dodělat jen nějaké okrajové věci mimo vlastní herní jádro.

Neděle 26.2.2017 – dokončení hry. Základní testování proběhlo, nicméně určitě se ještě na něco přijde.

Čtvrtek 2.3.2017 – hra zabalena do autostarteru s úvodním obrázkem a komprimací. Tímto považuji hru za kompletně hotovou.

 

Hra má určité specifické vlastnosti. Zde je jejich výčet:

  • Po spuštění hry příkazem JUMP 0000 je nutno jednorázově zvolit, v jakém barevném režimu hra pojede. Tento krok je bohužel nevratný a tak po degradaci na čtyřbarevný nebo monochromatický režim se již nelze vrátit ke ColorACE. Jediná možnost je nahrát hru znovu a zvolit systém ColorACE.
  • Hra podporuje standardní joystick. Aby se nebil s případnou disketovou jednotkou, je natvrdo namapovaný na portu GPIO1 (tedy na portu B obvodu 8255).
  • Hra vychází z verze pro ZX Spectrum, má však doplněnou hudbu z verze pro Commodore Plus/4.  Hodnota „lopaty“ je zvýšena na 2 body, aby teoretický dosažený součet bodů činil 100%. Této hodnoty ovšem prakticky nelze dosáhnout, neboť v systému není uloženo tolik mečů na vybití všech pirátů. Myslím, že v praxi dosažitelný maximální počet je 91%. Je doplněno měření času ve třetí části hry (ostrov).
  • Ve čtyřbarevném režimu je přiřazení barev jaké je. Je to dáno nikoliv citem ale strojovým přiřazením.
  • Ovládání chůze hráče je tlačítky Q,A,O,P (směry) a M (vržení meče). Tlačítkem H lze hru pozastavit, stiskem T se opět spustí. Současným stiskem B+T se hra restartuje. Tlačítkem K0 lze zvuky vypnout a tlačítkem K1 lze zvuky opět zapnout.

Ukázky z hry ve variantě pro ColorACE. Postupně I. a II. mezihra a výchozí obrazovka hlavní hry.

         

 

Přikládám i finální verzi mapy hry včetně rozmístění pirátů a bonusových předmětů.

 

Protože jsem po delší době změnil autostarter, přikládám i jeho zdrojový kód. V této verzi obsahuje i dekompresní algoritmy pro obrázek (kódování čtyř šestipixelových videobajtů do tří bajtů) a selektivní RLE kompresi hlavního programu. Možná se bude hodit pár matematických funkcí nad osmibitovými čísly jako násobení, dělení a převod binárního čísla na BCD.

Zdrojový kód autostarteru pro PMD-85: Autostarter

Zdrojový kód pro matematické funkce: Matematické funkce

Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu: TreasureIsland (verze z 10.3.2017 v 9:25)

Upravená verze Arkanoidu

Protože jsem ve hře Arkanoid pro PMD-85 provedl v posledních měsících celou řadu změn, dávám tímto k dispozici novou verzi. Uvádím výčet změn:

  • opravena zásadní chyba při střelbě (vedla k pádu systému, zejména na skutečném hardware)
  • celková optimalizace kódu, která uvolnila přes 500 bajtů pro další vylepšení
  • pixelová optimalizace bran pro vypouštění UFO (sjednocení a zjednodušení kreslicích procedur)
  • optimalizace rutin, vykreslujících „neherní“ objekty (nápisy, okraje arény)
  • přepočet směrových vektorů pro pohyb míčku
  • upraveno logo pro identifikaci verze („2nd release“)

Ukázky z hry ve čtyřbarevném režimu (Red/Green/Blue/Magenta)

Arkanoid – titulní obrazovka

Arkanoid – po startu

Arkanoid – Round 1

 

 

 

 

 

Arkanoid – černobílá mapa

Arkanoid – čtyřbarevná mapa

Arkanoid – ColorACE mapa

 

 

 

 

 

 

Soubor virtuální MGF pásky pro emulátor PMD-85 od RM-TEAMu: Arkanoid (2nd release)