Trailblazer

Základní informace

  • datum vydání poslední verze na PMD-85: 30. 9. 2018
  • originální kód inspirovaný vizuální podobou verze pro Commodore Plus/4
  • využití RAM: 0000h ÷ 77FFh, 7E00h ÷ 7FFFh, C000h ÷ FFFFh (včetně zápisníku)
  • podpora modelů: všechny verze PMD-85 (1/2/2A/3)
  • počet barev: ČB(2), RGB(4), inverzní RGB(4), prokládané RGB(8), ColorACE(8)
  • hudba/zvuky: melodie a zvuky převzaty z verze pro Commodore Plus/4
  • ovládání: klávesnice (klávesy Q, A, O, P, M) nebo volitelně joystick A nebo B

Status

  • finální verze hry, uvolněno k použití

Ovládací klávesy

  • Q = zrychlit běh míče
  • A = zpomalit běh míče
  • O = pohyb míče vlevo
  • P = pohyb míče vpravo
  • M = skok s míčem
  • EOL = spuštění hry
  • STOP = ukončení hry

Popis hry a její vlastnosti

Cílem hry je zdolat všech 16 sektorů. V každém z nich je nutno dostat se s míčem v časovém limitu a s přiděleným počtem možných „skoků“ míče do cíle. Míč během jeho cesty sektorem vede hráč tak, aby pokud možno nezapadl do některé z děr (což způsobí nežádoucí časové prodlení) a pokud možno s nejvyšší zvládnutelnou rychlostí míče. Barva kostek, z nichž je tvořena cesta, určuje vlastnosti této cesty (barvy platí pouze v režimu ColorACE – v ostatních barevných režimech jsou použity dostupné barvy a textury):

  • černá = díra (míč do ní zapadne a čeká se na jeho „obnovu“)
  • plná červená = automatické zpomalení míče
  • plná zelená = automatické zrychlení míče
  • plná modrá = automatický skok míče
  • červená, zelená a modrá s polovičním jasem (texturou) jsou neutrální pole
  • nebeská barva (plná i texturovaná) způsobí prohození stranového ovládání míče hráčem
  • bílá = startovní a cílová rovinka (neutrální pole)
  • žlutá = neutrální pole
  • fialová = neutrální pole

Pro přístup do vyšších sektorů je možno zadávat hesla během hraní úvodní melodie. S ohledem na rychlost PMD-85 je při zadávání hesla dobré podržet klávesu vždy alespoň půl vteřiny a mezi jednotlivými písmeny dělat stejně široké pauzy.

Hra je psána od začátku jako původní kód, inspirovaný myšlenkou původní hry a její podobou na stroji Commodore C16/C116/Plus4. „Odvalování“ cesty pod míčem je ovšem řešeno výlučně programově.

Předchozí verze hry

První verze hry (bez označení v logu) se při připojení disketové jednotky v základním menu samovolně spouštěla vlivem falešné interpretace tlačítka střelby na joysticku. V druhé verzi (označena nápisem „2nd release“) byly navíc opraveny drobné chyby a doplněny následující položky: inicializace služebního PPI 8255, odstranění pozůstatků autopilota, melodie po dojezdu do cíle se přiblížila verzi originálu s modulací obálky tónů, stisk SHIFT+STOP+EOL během úvodní obrazovky provede restart do BIOSu, závěrečná melodie hry běží v tříhlasém režimu. Byl upraven koeficient gravitace, aby se způsob možného projetí hry přiblížil originální verzi.

POKE

  • >01AF 00   =>   neubývá čas
  • >4EB0 DA  =>   ignorování děr v cestě
  • >4EDB 00  =>   neubývají skoky

Soubory ke stažení

Galerie obrázků

obrázek při nahrávání

hra v režimu ColorACE

mapa hry

 

 

 

 

82 komentářů u „Trailblazer

  1. Libor L.A.

    Upload další verze Trailblazeru pro PMD-85. Fonty změněny na rastr 9×12 pixelů, dokončen modul hvězdné oblohy, dokončena hudba (ale ta se ozve až v další verzi, kde dokončím úvodní obrazovku), jede tělo vlastní hry. Nyní tedy dokončím úvodní obrazovku s voláním nastavení, informací, spouštěním samotné hry, atd. A pak už půjdu na poslední veliký problém – kinematiku míče.

  2. Libor L.A.

    Pod hlavním článkem je ke stažení nová verze Trailblazeru pro PMD-85. Celá úvodní obrazovka včetně hudby je hotova, zatím nejede pouze dialog „Informace“, nad jehož obsahem se musím ještě zamyslet. Hru jako takovou lze spustit (dokonce i s použitím supertajných hesel do vyšších sektorů :) ) – nicméně míč si ve hře běží nikým nerušen po cestě. Právě ovládání a kinematika míče nyní bude na řadě.

    Po dokončení posledního sektoru skočí program zpět do úvodní obrazovky. Pokud po dokončení funkčních částí hry zbude místo v paměti, dodělal bych eventuálně nějaké cílové demo.

  3. Libor L.A.

    Po dnešku mohu prozradit, že se mi podařilo zkrotit poslední typ pohybu míče spolu s obsluhou buferu pozadí pod míčem. Konkrétně jsem časově zvládnul šikmý let míče. Teď to ještě doladit tak, aby všech 9 zobrazovacích rutin ([vlevo|na_místě|vpravo] x [nahoru|na_místě|dolů]) bylo stejně dlouhých a nekolísala tak rychlost hry podle typu pohybu míče. Těch rutin musí být opravdu devět. I když by to šlo pomocí jednoduchých cyklů sloučit do jedné rutiny, tak ty rutiny jsou opět časově optimalizované a to u mne znamená jedno: využití „dvoubajtových“ instrukcí POP/PUSH pro přenos dat. A to už se v jednoduchých cyklech nedá moc dobře pozičně posouvat po jednom bajtu. Většinou ano – ale ne vždy.

    Takže odhaduji, že zhruba do týdne uvolním další verzi. Smyčka hry je už dostatečně robustní (a téměř hotova), hraje to melodii po dojezdu, píše cílové hlášky a hesla (ty však pro vás uvolním až ve finální kompilaci, pokud se nezapomenu) a má to většinu ochranných mechanismů.

    Co chybí: zatím jsem neřešil „výjezd“ míče mimo dráhu vlevo a vpravo. Tam ještě míč nekorektně odmazává hvězdné pozadí. Ale mám vizi, jak na to. A poslední balík úprav se zaměří na interpretaci povrchu dráhy. Tam už taky pomalu vím, jak to udělat. On to tedy většinou není problém udělat. Problémem je udělat to extrémně rychle.

    Jak se třeba extrémně rychle dělá regulace rychlosti pásu? Pokud se při každém průchodu herní smyčkou zavolá následující sekvence, lze rychlost pásu regulovat lineárně od nuly (opravdu zastaveného pásu) až po 254/255-in nominální rychlosti bez uvedené regulace.

    LHLD SPEED  ;(H=kumulativní čítač, L=nastavená rychlost pohybu pásu)
    MOV A,H
    ADD L       ; v CY bude "1" v případě, že se má pás posunout
    STA SPEED+1 ; uložit kumulativní čítač
    CNC SHFBAL  ; jen časový balancer, stejně dlouhý jako posun pásu (nemění CY)
    CC SHFBLT   ; vlastní posun pásu o jednu pozici
    

    Většina vlastností hry je tabulkově definovaná. Barvy objektů, barvy a textury povrchu cesty (zde ovšem jen v rastru 2 videobajty nad sebou pro kompletní ColorAce atribut), tvar paraboly letu míče při skoku (nejen tvar, vlastně celá trajektorie, která může zahrnovat i několik skoků za sebou se zmenšující se amplitudou), atd. Takže možnost doladění hry pro tu správnou obtížnost by nemělo činit větších obtíží.

    Myslím, že jeden z časově nejdelších úseků při vývoji této hry bude právě nastavení časových limitů pro jednotlivé sektory tak, aby šly zahrát až po určitém tréninku hráče a nebyly ani moc těžké ale ani moc lehké.

  4. Libor L.A.

    Tak jsem pod článek pověsil nejnovější verzi Trailblazeru pro PMD-85. Pohyb míče je kompletně hotový. Tedy funkčně hotový. Nyní ještě bude následovat časová optimalizace, aby byl pohyb časově rovnoměrný. Pak už se půjde na interakci s dlaždicemi cesty.

    Hra se ovládá prozatím šipkami (vlevo, vpravo, zpomalit, zrychlit) a skáče se klávesou mezerník. Maximální rychlost, kterou vyvinete, bude v praxi stejná nebo mírně vyšší. To ukáže až zmíněná optimalizace.

  5. RomBor

    Tak už asi chápem, že je to zámer. Ak by lopta išla až na kraj dráhy, tak by pri výskoku sprite opustil dráhu a to asi nie je z programátorského hľadiska žiadúce.
    Takto ma to ale zmiatlo, pretože sa zdá, že je lopta na rozhraní dvoch polí a ak bude jedno z tých polí diera, tak nie je jasné, či už lopta do nej spadne, alebo sa ešte udrží.
    Ale možno som si to iba zle vyložil.

    1. Libor L.A.

      Prozatím míč nemůže svým obrysem opustit dráhu, protože přemazával nekorektně ty vedlejší hvězdy. Takže je to záměr, do doby, než se najde řešení. Momentálně připravuji další verzi, která by měla pohyb dráhy podstatně zrychlit a jako vedlejší efekt to přinese fakt, že míč bude moci běhat přes celou šířku obrazovky a nebude stranově omezen viz poslední verze.

      Ovšem něco za něco. Doteď měl míč svůj bufer dlouhý 150 bajtů, který uchovával pozadí pod míčem. Abych ten bufer nemusel rotovat podle pohybu míče (rotace buferu zabírá podle směru ca 6000T CPU každých 10ms), rozpracoval jsem variantu, že budu mít stínovou videoram (lépe řečeno její spodní část) a nic se rotovat nebude. První zkoušky vypadají dost dobře. Ovšem musím obětovat ca 4096 bajtů na náhradu toho buferu, který měl pouhých 150 bajtů. A opět začínám škrábat limit paměti RAM. Ovšem uvědomuji si, že ta hra musí být hratelná (=dostatečně rychlá). Takže asi na výběr nemám.

      1. Libor L.A.

        Momentálně jsem průjezd sektorem č. 16 stáhnul ze 62 vteřin na 37 vteřin a ještě tuším rezervu.
        Ta hra se mi začíná líbit!
        Převod na stínovou videoram se ukázal jako trefa do černého. Teď ještě dopilovat hrany a je to.
        Jo a míč už může jezdit od pixelu 0 vlevo až po pixel 287 vpravo bez omezení a to včetně skákání.

  6. Libor L.A.

    Dnes opět upload nové verze. Míč už tedy jezdí bez omezení, dobu průjezdu sektorem 16 jsem z původních 62 stáhnul na 31 vteřin. Ovšem v rámci urychlení jsem vědomě zanedbal jednu grafickou operaci během vykreslování míče. Ty „defekty“ nejsou moc vidět. Alespoň tedy při rychlejších pohybech míče. Pokud by to bylo (například na reálném hardware) viditelné moc a snižovalo by to estetický dojem z hry, dodělám plnou interpretaci vykreslování míče. Nějak zásadně by to rychlost hry snížit nemělo.

    No a asi půjdu na interpretaci dlažebních kostek..

    1. Libor L.A.

      Někdy se stane, že ten defekt při vykreslování míče zůstane viditelný při dojezdu do cíle. Odstraním. Momentální stav je takový, že míč reaguje na první typy kostek dráhy (zpomalení, skok) včetně ignorace typu kostek, pokud míč letí. Začíná to vystrkovat růžky..

  7. Libor L.A.

    Stav k dnešnímu dni:

    1) interpretace všech „dlažebních kostek“ jede
    2) vykreslování všech objektů je bez kolize
    3) rychlost je podle mne dostačující

    Co zbývá? V zásadě už jen prkotiny. Hlavně ale již zmiňované vyvážení náročnosti. Zítra, tj. v neděli 27.8.2017 bych dal ke stažení další verzi, tentokrát již hratelnou. Bude mít navýšený počet skoků na 9 a čas hry zvednutý paušálně na 199 vteřin. Pokud by někdo chtěl zkoušet „za kolik to dá“ (čas i počet skoků), budu mu nesmírně vděčný. V tom případě by bylo dobré u každého sektoru si poznamenat čas, který jste dali při vašem prvním pokusu o zdolání každého sektoru. To kvůli přehledu, jak se může hráč postupně zlepšovat a jak nastavit právě ty limity času a počtu skoků.

    Takže zítra.. Dnes ještě časově vyvážím jednotlivé pohyby míče, aby nekolísala rychlost hry podle jeho pohybu.

    1. Libor L.A.

      Nakonec jsem to stihl ještě dnes. Zveřejněná verze má některé části (například ztrátu a obnovení míče) vytesány dosti hrubě. V této podobě jsou tam jen proto, aby na ně šlo navázat ostatní procedury. Další pilování je samozřejmě v plánu..

      1. Libor L.A.

        Zveřejněna další verze. Opravena stranová reverze při najetí na dlaždice v barvě CYAN. Opraveno vykreslování míče na pozadí dráhy. A pak mnoho dalších drobných úprav. Někde se ten ca 1kB navíc musel projevit..

        Momentálně je vypnuto časové vyvážení pohybu míče. Ta daň za časové vyvážení pohybu byla znatelná. Tedy to zpomalení hry bylo znatelné. Pokud nenajdu nějaký mechanismus pro rapidní zrychlení, nechám pohyb míče „nevybalancovaný“. Zase až tak moc to nevadí.

  8. Libor L.A.

    Doplněno ovládání JOYSTICKEM a na klávesnici se hra od teď ovládá klávesami QAOPM. A pak plno drobných změn, které asi moc vidět nebudou ale taky se musely udělat.

  9. Libor L.A.

    Upravena letová parabola při skoku míče. S touto konfigurací zřejmě začnu provádět testy obtížnosti jednotlivých sektorů. Jinak zbývají dodělat takové věci, jako:

    1) odlišná hudba při nesplnění časového limitu sektoru
    2) odlišná hudba na konci hry
    3) nějaké překvapení v cíli (jestli se vleze do paměti)
    4) asi upravit texty po zdolání sektorů (u uveřejňovaných verzí zatím nejsou doufám viditelné, kromě toho prvního)
    5) zvážit, zda má smysl sekce „Informace“ a případně ji dodělat
    6) připojit autostarter

  10. Libor L.A.

    Každým dnem se podaří dopilovat kousek kódu Trailblazeru. Dnes jsem přesunem pár instrukcí dosáhl zkrácení doby průjezdu sektoru č.16 z 24 na 21 vteřin, což představuje zrychlení o ca 14%. Přeci jen se integrace všech pohybových komponent hry projevila znatelným zpomalením, a tak musím kompenzovat, kde se dá. Pro zajímavost:

    již vzpomínanou sekvenci:

    LHLD speed
    MOV A,H
    ADD L
    STA speed+1
    

    se vyplatilo nahradit sekvencí:

    LXI H,speed
    MOV A,M
    INX H
    ADD M
    MOV M,A
    

    Přineslo to „zanedbatelné“ dva takty CPU. Jenže ony se ty dva zbytečné takty opakovaly ca 3000x za vteřinu. A takových časových zisků se mi podařilo naškrábat více. A proto těch 14% rychlosti navíc. Obecně se z hlediska časové minimalizace kódu vždy vyplatí načítat data z paměti, když na ně ukazuje nějaký registr a adresa se nezadává jako součást instrukce. Instrukce pro načítání těch dat z paměti pak nemusí zbytečně vynaložit tři takty CPU (čtení bajtu z paměti) na každý načtený bajt. Takže namísto LDA/LHLD/STA/SHLD používat raději MOV M,reg nebo MOV reg,M, ADD M, atd.

    Taky jsem si u originálu všiml, že při manuálním skoku se postupně zvedá jeho amplituda. To musím dodělat. Asi teď delší čas budu hrát originál na Commodore Plus/4 abych nasál právě ty detaily. Takže na verzi pro PMD-85 ještě určitě udělám významné změny. Ale to až budu vědět, jaké to budou..

    V zásadě mohu říci, že mám z hlediska zvětšování rychlosti ještě dva trumfy v rukávu. Mohu prodloužit časovou prodlevu mezi voláními ovladače míče z 10ms na 10.8ms, ovšem za cenu jeho mírného zlenivění. Druhou možností je vypnutí časového vyvážení pohybu míče. Pohybové rutiny (pohyb vlevo, vpravo, skoky, bez pohybu,..) jsou různě dlouhé a u těch nejkratších (bohužel jsou to ty nejčastěji volané) musím několik set až tisíc taktů CPU jalově čekat, aby rychlost hry výrazně nekolísala podle toho, jaké klávesy hráč stlačil. Když vyvážení vypnu, zrychlím hru ca o 10-20% ale nyní po všech optimalizacích už jsou ty rozdíly v době pohybových rutin míče mnohem více viditelné než dříve. Ale mohu tu kompenzaci dělat jen částečnou. Tedy já už teď kompenzuji pouze na 80% času těch nejdelších rutin, což jsou diagonální pohyby míče, kdy se hráč stejně soustředí na něco jiného, než na vnímání kolísání rychlosti. Ale mohu kompenzovat na 70%, 60%, a bůhví, kde se ten pokrok zastaví..

  11. Libor L.A.

    Abych maximálně napodobil vlastnosti originálu, provedl jsem včera a dnes zpětný překlad potřebných částí kódu verze hry pro Commodore C16/Plus4. Postupně jsem vypínal jednotlivé funkce a pozoroval ty zbývající. Celkovou rychlost pohybu, chování při najetí na červené a zelené plochy už mám doladěny podle originálu. Mohu říci, že třeba s oblibou testovaný sektor č.16 projede originál za 23 vteřin, na PMD-85 to trvá 25 vteřin. To není zase až taková tragédie. Na Commodore se příčné pruhy cesty „kreslí“ pouze změnou dvou barevných registrů na každém rozhraní mezi dvěma vodorovnými pásy (za použití přerušení od výšky paprsku na obrazovce), na PMD-85 trvá ryze programově řešené vykreslení jednoho takového předělu v průměru ca 650 taktů CPU – tedy zhruba 20x déle.

    Kdybych měl popsat, jak na mne působí forma programování této hry pro Commodore, tak bych asi řekl: organizačně velmi kulturní, žádné špagety sem a tam, pěkně řešené strukturované řazení procedur. Občas se sice některé proměnné nastaví dvakrát po sobě, protože se na to „zapomnělo“ a právě v těch zanořených procedurách to není vidět. Nebo BCD konverze je dělána formou: odečítej binární jedničky a přičítej BCD jedničky někde jinde. Ale jinak velice pěkné a přehledné. Důvod, proč to na Intelu 8080A s jeho kompaktnějším kódem je dlouhé ca 7000h bajtů oproti 4000h bajtům na MOS6502 je právě fakt, že na PMD-85 mám pro 63 dvojic mikrořádků cesty pod míčem napsaných sólo 63 obslužných driverů. Celá smyčka hry na PMD-85 má na minimum sražený počet podmínek, vše jede jako lineární kód bez větvení.

    Konec už je sice na dosah, ovšem nedá se nad tím sedět každý den. Teď si dám pár dní pauzu..

  12. Libor L.A.

    Dnes jsem uložil ke stažení novou verzi, která má doplněno:

    – u skoků se postupně zvedá amplituda, u manuálních do stupně 3, na modré kostce až do stupně 5
    – maximální amplituda skoku (na stupni 5) zvětšena na 44 pixelů
    – výrazně upravena rutina tisku znaků (kvůli úspoře místa pro skoky)
    – upraven mechanismus detekce modrých kostek
    – doplněn mechanismus bezpečného zavedení do prvního kola
    – sloučeny tabulky pro rychlý převod pixelu na adresu videoram a fázi
    – zaveden kumulativní herní čas a doplněn nástřel herních časů v sektorech (o 10% více než originál)

    Takže nyní už asi opravdu začnu testovat průjezdnost sektorů. Vzhledem k „okopírování“ rychlostně-prostorových poměrů z originální hry by to mělo být v pořádku a vyvážené. Ale uvidím, jestli jsem na něco nezapomněl. Takže, ..

    Testu zdar!

  13. RomBor

    Už to vyzerá fakt takmer hotovo.
    Len mám problém s tým, že viac, času strávim v dierach, ako na dráhe. Žiaľ, moje reflexy na takéto hry nestačia. :-)

    1. Libor L.A.

      Já jsem na tom úplně stejně. Projel jsem zatím jen sektor 1. Přemýšlím co s tím. Jestli na rozdíl od originálu hru velmi zjednodušit, nebo to nechat tak. Třeba takového Penetrátora na PMD-85 jsem bez POKE taky neprojel celého.

      Teď se ještě souběžně zabývám „zachováním literatury o PMD-85 pro příští generace“ a proto Trailblazer zatím netlačím ke konci. Ale shodou okolností jsem včera dokončil „zachování“ poslední várky dokumentace než ji vrátím a další knihy zatím nebudu půjčovat. Takže se asi začnu zamýšlet nad finální edicí hry Trailblazer.

  14. Libor L.A.

    Poslední dny vyloženě hledám nějakou známou „tragickou“ melodii, která zazní, pokud sektor Trailblazeru nebude dokončen ve stanoveném čase. A naopak nějakou příjemnější melodii, která zazní po dokončení posledního, šestnáctého sektoru. A nemohu se rozhodnout.

    Originál to má jinak. Vlastně nijak. Tam ani jedna varianta nenastává. Při vypršení času se sektor ihned ukončí nějakým pazvukem. A po šestnáctém sektoru se opět opakuje ten první. Také bez hudebního bonusu.

    Přednost dávám klasikům. Ti, co jsou přes sto let na pravdě boží, ti se o svá autorská práva hlásit doufám nebudou. Pár tipů mám, ale na to pravé ořechové jsem stále nenarazil..

    Vlastně zbývá jen implementovat ty dvě melodie a trochu upravit ty „oslavné“ texty na koncích sektorů, aby se stále neopakovalo jedno a totéž. Bohužel nelze převzít beze změny originální texty, protože na PMD-85 nejsou jednotné barvy dlaždic ve všech barevných režimech. A ty originální texty se relativně často odkazují právě na ty barvy dlaždic. V zásadě bych ale tyhle problémy chtěl mít tak před půl rokem :)

  15. Libor L.A.

    Abyste si nemysleli, že jsem konverzi Trailblazeru odepsal, tak musím připojit nějakou tu aktualitu. Provedl jsem asi 14 změn. Ne 14 instrukcí. To by za ty dva měsíce bylo málo. Ale 14 významových změn. Nakonec jsem se vrátil ke kořenům a zvuky z velké části kopírují originál na Commodore Plus/4. To cinkání při ztrátě míče jsem ladil asi dvě odpoledne. Ale snad se to bude líbit. Z nedodělků mi zbývá zrealizovat závěrečnou hudbu a připojit autostarter.

    A taky jsem asi přišel na strategii, jak ty sektory projíždět. Zatím je to však pouze teorie, ověřená jen na prvních dvou sektorech…

  16. Libor L.A.

    Trochu jsem upravil stránku hry Trailblazer dle aktuálního stavu a na konec stránky jsem připojil PRC video s průjezdem sektoru 1. I když mám připravenu sadu českých „oslavných“ textů na koncích sektorů, přeci jen mám takový pocit, že ty dobré rady, které se tam občas mihnou, jsou velice pevně svázány s časováním hry na Commodore. I když jsem se snažil zachovat časové proporce pohybu míče a dráhy, nevylučuji jistou odlišnost od původní verze. Přeci jen to nebyla mechanická portace kódu. Proto ty sektory zkusím „nacvičit“ ve verzi na PMD-85 a podle použitelných fíglů ty texty případně modifikovat.

    Zatím je ke stažení dostupná pouze předposlední verze. V té poslední verzi musím pár věcí změnit a není to ještě ono. Chtěl jsem to sem dát o tomto víkendu ale pracovní povinnosti mě odvedly jinam. Takže doufám, že příští týden nebo ten další bych sem mohl hodit finální verzi.

  17. Libor L.A.

    Upload poslední verze. Prozatím jsem v kompilaci zakázal cílové hlášky a finální hudbu. Jinak tam jede všechno jak má. Momentálně probíhají testy hratelnosti jednotlivých sektorů. Při projíždění mě ještě napadlo, že bych zkusil dodělat nějakou jednoduchou animaci ztráty míče. Tedy že míč odskočí vlevo nebo vpravo od hrany, na kterou dopadne. Taky jsem do fotogalerie v článku připojil „mapu“ hry.

    PS: Ty cinkavé zvuky při zapadnutí míče do díry se mi na originálním železe líbí ještě více než v emulátoru..

  18. Libor L.A.

    I když jsem už projel i druhý sektor, tak mi (velice brzy) došla trpělivost. A tak jsem včera napsal AUTOPILOTa, který se podmíněně kompiluje od adresy 9000h a simuluje ovládání joystickem. Zatím mám nadefinován průjezd prvními dvěma sektory. Jednak tím ověřím teoretickou možnost průjezdu všech sektorů, jednak tím ověřím charakter průjezdu každým sektorem a do třetice pustím autopilota a vytvořím z toho video s průjezdem všech šestnácti sektorů.

  19. Libor L.A.

    Když tak píšu „mapy“ autopilota pro jednotlivé sektory, zjišťuji, že i když nejsou ty průjezdy zcela optimální, tak mi zbývá prozatím vždy 9-13 sekund po dojetí kola. Jinými slovy, v každém kole si mohu dovolit 2-3 kolize. To zase není nějak moc přehnaný požadavek na um hráče. Ale asi i tak prodloužím limitní časy sektorů zhruba o 5 sekund. Uvidím, až budou všechny sektory „projety“ a otestovány autopilotem. Program umožňuje nastavit pro každý sektor nezávisle jeho limitní čas. Asi to pak udělám tak, že každý sektor bude mít nastaven čas, za který to dal autopilot + zhruba 15-20 sekund na případné kolize.

  20. Libor L.A.

    Při testech jsem zřejmě narazil na jednu malou odlišnost oproti originálu. Na konci každé skokové sekvence, byť je její délka libovolná, následuje ještě malý doskok. Bez toho by nešel projet sektor 9. Takže o víkendu zapracuji..

    1. Libor L.A.

      Nezbylo mi nakonec nic jiného, než trasovat skoky v originále. Tam nejsou letové paraboly míče definovány tabulkou, nýbrž se počítají na bázi nějakého obskurního algoritmu. Ale nutno dodat, že výsledek je vizuálně stravitelný. Takže si nastavím BREAKPOINT v emulátoru Commodore C16/Plus4 při každé změně souřadnice Y a opisuji letové paraboly. Jedna mi trvá zhruba čtvrt hodiny a je to celkem otrava. Takže až je všechny opíšu a sestavím z toho nějaký systém, pak předefinuji tabulky letových parabol ve své verzi.

      1. Libor L.A.

        Žádné tabulky letových parabol míče asi přepisovat nebudu. Pokusím se implementovat již zmíněný algoritmus z originálu. Sice jej zatím nechápu ale to neznamená, že nefunguje a že není dost dobrý i pro verzi PMD 85. Těch tabulek by nakonec muselo být 18! Ten vykřičník neznamená faktoriál, jedná se o zakončení věty za současného vykulení očí. Tím pádem to nedokončím do 24.12.2017 (což jsem si původně stanovil jako nějaký svůj termín). Ale přeci jen je tato hra specifická tím, že ji nelze jen tak jednoduše projet. A nerad bych překročil hranici, kdy by už nešla vůbec projet. Jakkoliv si nedělám iluze, že pokud to někdo přeci jen zapne, hodí si tam nesmrtelnost..

    1. Libor L.A.

      Bohužel jsem se týden před Vánocemi 2017 přestěhoval a teď spíše připravuji novou dílnu v novém domově. Sice jsem shodou okolností včera poprvé od té doby otevřel editor s Trailblazerem ale čeká mě dost práce a asi na to budu mít jen neděle. Ale jo, chci to dokončit. Teď v hlavě připravuji nástupce. Váhám mezi druhým remakem JETPAC 2018 (neblikavá grafika, ColorACE, hudba) nebo bych zkusil Pacmana. Od dokončení Prince of Persia mě odrazuje to, že mě zatím nenapadla nosná myšlenka, jak převzorkovat animační fáze ze 7 pixelů na bajt na 6 pixelů na bajt (a s tím spojený problém rozdílného počtu fází a jejich interpolace).

  21. mmartinka

    Zdravím v novém roce, pokud se mohu přimluvit ohledně vašeho dalšího projektu, tak mě osobně by se více zamlouval PacMan. Také přeji dostatek času pro dokončení Trailblazeru, i když je to zapeklitě těžká hra na postřeh. Já stale končil v nějaké jámě, asi už nemám postřeh mladíka :)

    Díky za přízen tomuto stroji :), a velké díky za sekci „Jak na to…“

    1. Libor L.A.

      Ohledně zdolatelnosti hry: zatím jediný rozumný postup je následující – vzhledem k relativně malému počtu nutných zásahů hráče během sektoru je dobré se naučit průjezd sektorem nejprve podle mapy, ve stylu, jakým navigátor diktuje řidiči při závodech. Naučit se to nazpaměť jako básničku, která bude obsahovat třeba jen sedm položek. Když jsem psal na zkoušku autopilota, byl jsem překvapen, jak málo řídicích zásahů je zapotřebí pro projetí sektorů 1 až 8. K dalším sektorům jsem se nedostal.

  22. Libor L.A.

    Dnes jsem začal dělat přípravu k tomu, aby míč ve hře Trailblazer dokázal skákat s větší amplitudou. To proto, abych mohl převzít generátor letové paraboly z originální verze z Commodore Plus/4. Pak totiž dosáhnu naprosté shody v časování pohybu míče vůči časové ose a pohybu cesty. Tím pádem budu mít jistotu, že jde-li projet originál, půjde projet i verzi pro PMD-85.

    To zvětšení amplitudy skoku míče není tak jednoduché, jak by se zdálo. Už totiž nemám dostatek RAMky, kterou bych použil jako bufer pozadí za míčem, který se nemusí rotovat. Budu se muset vrátit zpět k systému malého rotovaného buferu ca 150 bajtů, nebo je ještě ve hře sice stínová nerotovaná videoram, ale adresovaná na výšku modulo 64. V každém případě ovšem naroste počet kombinací pohybů míče v osách X a Y a s tím spojených driverů.

    Použitelnou verzi asi nestihnu do Forever Party ale o to asi nejde. Hlavně aby to nakonec fungovalo. Pokud bych nějakou tu paměť ušetřil, dodělal bych animaci ztráty míče. Na rozdíl od originálu se na PMD-85 míč po pádu do díry pouze ztratí. Řešení mě už napadlo, teď jen najít prostor.

  23. Libor L.A.

    Algoritmus pro výpočet letových parabol dle originálu na Commodore byl úspěšně zapracovaný. Nyní jdu na psaní nových pohybových vykreslovačů míče.

  24. Libor L.A.

    Bufering při kolizi míče a kreslení cesty dokončen. Jede dokonce rychleji než všechny dosavadní verze. Tím, že jsem přišel na to, jak eliminovat podmínky a kreslím hrubou silou, tak bez registrové optimalizace jsem rychlejší o 10% než verze s paralelní videoram. Někdy se vyplatí si od toho odpočinout a ono se v hlavě zrodí plno nových podnětů. Uvedené zrychlení sice padne na časové vybalancování zpoždění u jednotlivých směrů pohybu míče ale je z čeho brát. To je ta pozitivní zpráva dne. Z celkem devíti pohybových driverů míče (8+1 pozice jako na joysticku) mám zvládnuty tři. Běh míče na místě a pohyby do stran bez skákání.

    Po dokončení pohybových driverů míče asi dodělám nějaké ty kudrlinky typu animace ztráty míče nebo dopilování hudby během informací ale jinak už asi nemám žádné další položky v sekci TO DO. Dokonce i obrázek během nahrávání už čeká na svou premiéru..

  25. Libor L.A.

    Provedl jsem upload průběžné verze. To abyste si udělali obrázek o tom, co se musí udělat, aby se míč kulturně pohyboval na pozadí. Rotace míče na místě a jednoduché pohyby vlevo a vpravo jsou ošetřeny. U ostatních druhů pohybu zůstávají na pozadí artefakty, které se musí v jednotlivých pohybových driverech ošetřit. Taky si lze z této verze udělat představu o rychlosti. Máte tam nekonečný počet skoků a „děrovou“ nesmrtelnost. Ovšem zablokoval jsem hesla a konec hry. Tedy doufám..

  26. Libor L.A.

    6 z celkových 9 pohybových driverů míče je hotovo. Navíc jsem dořešil problém s prosakováním barvy „bezbarvého“ vesmíru do míče. Prostě jsem i prostor mezi hvězdami „obarvil“ prázdným barvovým atributem hvězd. Ale zase ne tam, kde jsou jiné objekty. Problém spočíval v tom, jak automat rozezná, kde má nastavovat barevný atribut hvězdy a kde ne. Ale už to jede a vizuální dojem je super. Promítá-li se nyní míč částečně na cestu a částečně do mezihvězdného prostoru, je barva míče pěkně rozdělena rozhraním cesty a část míče přebírá barvu cesty v daném místě a část míče přebírá barvu hvězd v celé ploše mimo průnik s cestou. Hm, chápe to někdo? No, hlavně, že už ten míč není mimo cestu strakatý..

  27. Libor L.A.

    Pohybové drivery míče dokončeny. Tedy jsou funkční. Teď si je vytisknu na papír a v klidu s tužkou v ruce udělám časovou optimalizaci. Pak je časově vyvážím a hodím funkční verzi k nahlédnutí. Tak za tři čtyři dny. Blíží se to.

  28. RomBor

    Je to úžasne rýchle.
    Trošku ma tam vydesili tie šmuhy z lopty, keď sa ňou pohybuje do strán a pri skokoch, ale potom som si všimol, že o tom píšeš, že to ešte treba ošetriť.
    Držím palce pri dokončovaní.

    1. Libor L.A.

      Včera jsem po celoodpoledním zkoušení definitivně zavrhnul „vylepšení“ sekce Informace. Nepřineslo to to, co jsem čekal. Dnes se pokusím o animaci míče při jeho ztrátě. Pokusím se udělat postupné zanoření míče pod úroveň nula s akceptováním dynamiky jeho pohybu v okamžiku „průchodu nulou“. Pak ještě zreviduji oslavné texty na koncích sektorů a myslím, že první produkční verze je hotova. Uvažoval jsem o tom, že pro závěrečnou hudbu „vyvinu“ přehrávač čtyřhlasé hudby ale asi si to nechám na jindy. Nějaké pokusy jsem už dělal loni ale nebylo to ono.

  29. Libor L.A.

    Dnes jsem se v rozporu s plánem nedostal k pokračování na Trailblazeru a tak jsem alespoň zkompiloval verzi s posledními zapracovanými úpravami. Ta hra je prakticky hotova, uvedená verze má akorát neomezený počet skoků. Jinak je vše již v cílové podobě. Už s touto nesmrtelností jsem ji projel. Takže pro první zkoušení všech komponent ji uvolňuji v této (předposlední) kompilaci. Pár úprav dodělám ale ty budou již jen kosmetického rázu.

    Z těch ještě nezmíněných restů bych jen uvedl, že musím zkontrolovat, zda skoky svou dynamikou opravdu odpovídají originálu. Zatím to jen předpokládám na základě softwarového modelu a laického posouzení okem. O nadcházejícím víkendu bych chtěl uvolnit cílovou verzi bez zavaděče, kterou bych pak testoval.

  30. Libor L.A.

    Animace ztráty míče je hotova. Dokonce míč umí těsně před pádem „uhnout“ tak, aby spadl do díry celým svým průměrem. Kromě levého okraje cesty. Tam jsem bohužel nepočítal s variantou, že by X-ová souřadnice míče mohla být mírně záporná. Ale co už s tím..

    Nakonec se míč nepropadá do hlubiny s naposledy vypočteným zrychlením, to by ta animace nebyla moc vidět. Jakmile je míč v díře, nastaví se konstantní rychlost pádu. To je jediné možné řešení. Alespoň vím, proč to je v originálu řešeno hodně podobně. Teď ještě doladím běh času během toho pádu a je to vlastně hotovo. Pro obrázek během nahrávání z MGF jsem už vymyslel i nějaký ten kompresní algoritmus. Takže tyto dva resty dodělám a pustím první kompletní verzi pro testování. Ale to asi až v neděli (budu chtít, aby to byla neděle 22.4.2018).

    Nějak mě opouští motivace k dodělávkám této hry. Jak už to tak bývá, když na něčem dělám rok :) Celkem jsem rád, že už to bude hotové. Přeci jen mou pozornost odvádí celá řada jiných problémů a sám se divím, že jsem se dokopal k tomu, abych to dovedl do zdárného konce.

  31. Libor L.A.

    Problém. Na skutečném PMD-85 se program chová trochu jinak. Přitom je to banalita, jedná se o situaci, kdy míč vyjede zcela napravo z cesty. Na skutečném PMD-85 spadne kolmo dolů, na emulátoru pěkně plánovaně odskočí bezpečně doprava, aby do díry spadnul celým svým průměrem. Jedná se o stejnou kompilaci a stejné podmínky provozu. Budu hledat..

    1. Libor L.A.

      Kluci z RM-Teamu mohou být klidní. V jejich emulátoru chyba není. Chyba opět mezi mou židlí a klávesnicí. Měl jsem tušení, že se opakuje historie Arkanoidu, a taky že jo. Prostě emulátor (nebo operační systém) při spuštění hry vynuluje RAM, kdežto reálné paměti v reálném PMD-85 se při zapnutí počítače nenulují. A v tom je rozdíl. Při opravě této chyby jsem vyřešil i symetrické uhýbání míče při pádech do díry.

      1. RomBor

        Pamäť po alokovaní nuluje samozrejme emulátor.
        Nad tým som sa už kedysi zamýšľal, čo by tam po zapnutí malo byť. Žiaľ na reálnom PMD 85 tam nie sú úplne náhodné byty, ale sú tam akoby rôzne série hodnôt po 8 alebo 16 v rade a aj to „nedeterministicky“. Skrátka, závisí to zrejme od stavu zbernice pri nabiehaní napájania.
        V každom prípade, žiadny program by sa nemal spoliehať na obsah „neinicializovanej“ pamäťovej bunky.

  32. Libor L.A.

    Upload nové verze. Zatím bez zavaděče, protože přeci jen změny ještě budou. Ještě v této hře chci vyladit frekvence tónů ve zvukové knihovně. Jinak hra jako taková je komplet hotova. Jediný další rest, který mám, je ten, že jsem zatím důsledně nesrovnával originál s touto verzí co do hratelnosti a dynamiky.

    Během týdne tedy provedu testy na skutečném PMD-85, doladím knihovnu zvuků a přibalím zavaděč. Pak už jen karanténa před uvolněním.

  33. Libor L.A.

    Dvouhlasý přehrávač hudby nové generace je na světě. Má dvě výhody. Protože funguje na principu přímé digitální syntézy (DDS) s délkou akumulátoru 16 bitů, je rozlišení zákonitě mnohem větší než u předchozí 8-bitové verze a zejména vysoké tóny jsou tak generovány se zanedbatelnou frekvenční odchylkou. Takže bez problému jsem se dostal o oktávu výše. Ale možná i více, jen jsem to nezkoušel. Navíc, z principu nedochází při reloadu čítače k prodloužení periody druhého tónu, protože tam k reloadu vlastně vůbec nedochází. Má to ale i jednu nevýhodu. To tělo generátoru souzvuku dvou tónů se opakuje 4x. I tak ten přehrávač zabírá jen pár desítek bajtů. Bližší popis uveřejním v sekci „Jak na to..“ hned jak dokončím Trailblazer. Teď ještě knihovnu zakomponovat do Trailblazeru a hra je podle mých představ.

  34. Libor L.A.

    Tak až nyní jsem dokončil změny, související s výměnou zvukového přehrávače. I když jsem tušil, že to bude pěkně prorostlé s programem vlastní hry, přeci jen těch vazeb a problémů bylo více. Vzhledem k množství změn, které jsem provedl, musím všechno znovu otestovat.

  35. Libor L.A.

    Dnes první pokus o vypuštění finální verze.

    Základní test zavaděče a obecné funkčnosti hry proveden na skutečném stroji PMD 85-2A a dále pak v emulátoru na všech verzích PMD 85 vždy pro standardní i pro turbo režim nahrávání z virtuální MGF pásky.

    Test detailní funkčnosti hry jako takové bude probíhat následující dny.

    1. Libor L.A.

      Za jakékoliv testy budu vděčný. Přeci jen ta klasická nechuť k dokončení vygradovala do takové míry, že se mi to nechce ani testovat. Rok je dlouhá doba. Ale něco o víkendu zkusím. Tenhle program má jednu výhodu. Neobsahuje moc podmínek. Je to povětšinou sekvenčně řazený kód bez větvení. Z toho vyplývá, že když to funguje jednou, bude to fungovat pokaždé. Jen musím otestovat těch pár podmínek typu zvuk zapnutý/vypnutý a podobně.

  36. Libor L.A.

    Pokud budete chtít modifikovat hru za účelem snadnějšího projetí (POKE, SUB či jinak také CHEAT) na skutečném počítači, pak tak udělejte v nějaké smyčce, kdy se čeká na stisk klávesy (ideálně po projetí prvního kola po dohrání hudby). To proto, že valná část procedur využívá „zásobníkového“ registru SP a dost často se stává, že se při restartu přepíše kus hry a ta při pokusu o další spuštění havaruje. Emulátoru se to samozřejmě netýká, tam se virtuální procesor i8080 při vstupu do debugeru „zastaví“ a změněné SP nenadělá paseku.

    PS: Do hlavního článku jsem dal ke stažení knihovnu pro kreslení jednotlivých mikrořádků cesty. Vykreslování cesty se děje tak, že vždy při požadavku na posun cesty se zavolá jedna z uvedených procedur a vykreslí se pouze jedna! dvojice mikrořádků, která v té chvíli tvoří rozhraní mezi pohybujícími se vodorovnými pruhy cesty. Ostatní mikrořádky není třeba překreslovat, neboť se nehýbou. To je ostatně nosná myšlenka, kolem které je portace hry postavena a která nahrazuje systém rotace barev v barvových registrech a systém přerušení od rozkladu obrazu (Raster Interrupt).

      1. Libor L.A.

        Alespoň jsem teď ještě prošel zdrojové kódy a vyzkoušel hru na reálném PMD 85-2A a tam to jede jak má. Budu samozřejmě zkoušet a hledat dál ale napadlo mne, zda zxcygnus nezvolil jiný joystick než ten, který reálně připojil (zvlášť v kombinaci s SD32 nebo PMD32). V nastavení hry se joystick cyklicky přepíná mezi režimy VYPNUTO-GPIO0(A)-GPIO1(B).

        Pokud by tam byla chyba a vydával bych novou verzi, opravím „chybu“ v podobě vítězné melodie po dojetí jednoho kola. V originále zní jinak (je to staccato a ne legato a je tam modulace obálky hlasitosti – což bych taky implementoval). Taky bych na tu finální melodii použil tříhlasý přehrávač, ten byl vyvinut až po dokončení Trailblazeru. Takže je vidět, že by bylo co upravovat..

        1. Libor L.A.

          Na zkoušku jsem udělal modulaci zvuku (8 stupňů hlasitosti a 8 modulačních kroků pro každý tón) u melodie, která se ozve na konci každého úspěšně zvládnutého kola. Je to ono! Je to jako originál na Commodore16/Plus4! Je to sice poznamenáno faktem, že to generuji jednobitově, ovšem je to tam. Na druhou stranu je to první pokus a už mám v hlavě nápad, jak to vylepšit. Snad to bude stát za to.

  37. Libor L.A.

    Tak dojezdový jingle jsem úspěšně předělal přesně podle originálu i s pokusem o modulaci zvukové obálky, ovšem bylo nutno použít čtyřhlasý přehrávač. Teď musím všechny zvukové projevy hry přepsat tak, aby využívaly právě ten čtyřhlasý generátor, abych neměl ve hře tři různé přehrávače hudby. V momentě, kdy se tohle podaří dokončit, bude hotová verze II. Ty ostatní poznatky, vylepšení a objevené chyby (komentované na OldCompu.cz kolegy zxcygnusem a zdenkem6) už jsem zapracoval.

    1. Libor L.A.

      Dnes jsem čtyřhlasou verzi dojezdového jinglu s modulací obálky tónů pustil na skutečném PMD-85 a jsem definitivně rozhodnutý použít tuto verzi. Na rozdíl od emulátoru, na skutečném PMD-85 není důležitá vzorkovací frekvence a nevznikají tak parazitní zvuky z důvodu nerovnoměrného vzorkování na zvukové kartě jakožto mezičlánku mezi programem a reproduktorem. Dokonce je na oranžové LEDce na klávesnici PMD-85 krásně vidět kolísání jasu během každého tónu jakožto důsledek modulace obálky. Jediným problémem pro druhou verzi Trailblazeru tak zůstává fakt, že každý zvuk, tj. úvodní melodie, dojezdový jingle, cinkání při pádu do díry a finální melodie – ty všechny zvuky, aby dobře zněly, tak mají každý svůj nativní přehrávač, který umí dobře právě to, co je pro danou melodii či zvuk důležité. Ale místo v RAMce je, tak proč ne. Spíše jde o efekt než o délku programu.

    1. Libor L.A.

      A hned jsem po sobě našel chybu. Na PMD-85 verze 3 hra nejede. Zítra opravím memory banking, který je příčinou. Dnes už opravdu ne..

      1. Libor L.A.

        Druhý pokus o vypuštění Trailblazer – 2nd release. Hra je otestována v emulátoru na všech verzích PMD-85 jak v pomalém tak i v turbo nahrávacím režimu a také na reálném PMD 85-2A. Autostartér jede, základní životní funkce taktéž. Nyní bude následovat detailní testování kdečeho, abych maximálně eliminoval možnost další chyby.

        Minulá chyba s memory bankingem vznikla tak, že jsem doplnil relativně bezpečnou možnost skočit do BIOSu stiskem kláves SHIFT+STOP+EOL. Jen jsem si neuvědomil, že zápis nulové hodnoty na port C služební 8255-ky (obsluha klávesnice, LEDek, BEEPru a memory bankingu) není vždy bezpečnou hodnotou. Různé modely PMD-85 mají navíc směr obou částí portu C nastaveny různě. Takže bylo nutné najít univerzální nastavení směru a hodnoty portu C před návratem do BIOSu, aby se program vůbec do BIOSu vrátil (a ne do prázdné stínové RAMky pod BIOSem).

        1. Libor L.A.

          Procházím všechna možná větvení programu a zatím vše jede. Tak jsem dnes alespoň nahrál verzi s mírně vylepšeným grafickým schématem pro ČB a 4-barevné verze. Přeci jen čím více se věnuji kontrole a testování a už ne vývoji, tím více toho nalézám, co bych jako uživatel změnil.

  38. Libor L.A.

    Upload *.PRC záznamu z průjezdu sektorů 1 až 4. Protože jsem spíše iluzionista než superman, odehrál to za mne samozřejmě autopilot. Soubor je v hlavním článku nad komentáři.

  39. Libor L.A.

    V zájmu objektivity je nutno dodat, že jsem musel udělat jemnou korekci délky skoku na zelené dlaždici, protože některé sektory občas nešly projet. Přeci jen časová disperze způsobuje jakousi neurčitost v časování a to, co se někdy podaří, se prostě jindy nepodaří. Zatím jsem naučil autopilota sektory 1..6. Uvidíme, jaké požadavky na doladění časově-gravitačních konstant ještě přijdou v dalších sektorech..

    Takže Trailblazer 2nd release bude upraven.

  40. Libor L.A.

    Momentálně zkouším verzi, kde jsou všechny skoky prodlouženy o 33%. Po pokusech o projetí sektorů 1 až 9 mi tento model přijde jako nejvěrnější kopie originálu. Takže přepisuji všech 9 sektorů pro autopilota a až bude fyzicky ověřeno projetí všech 16 sektorů, pak bych tu gravitační aféru uzavřel. Omlouvám se za vypuštění předchozích verzí ale projet tu hru ručně je nad mé síly. A předchozí autopilot bez zpětné vazby nebyl moc precizní. Teď mám novou verzi (autopilota), která se zdá být použitelná a tak až teprve nyní ověřuji to, zda se ty vyšší sektory dají vůbec projet. Předtím jsem tuto vlastnost předpokládal na základě zkušeností z těch nižších sektorů. Tedy, ne že by ty vyšší sektory nešly projet, ale nelze je projet jako na originálu.. To testování ovšem bude vždy omezené, přeci jen nemám tolik času, abych to detailně trasoval na originálu a pak na PMD-85. Vždy se bude jednat o překlopení několika zásadních modulů s jejich typickými vlastnostmi a výsledky křížení těchto modulů jsou ve hvězdách.

    1. Libor L.A.

      Autopilota pro sektory 1..4 mám předefinovaného pro upravený gravitační systém (pro systém +33%). A musím říci, že je to hratelnější v tom smyslu, že stačí nacházet finty, jak navazovat pohyby míče bez nutnosti přesného načasování, aby míč ladně prošel všechny nástrahy. Počet korekcí autopilota na sektor (řekněme počet přehmátnutí prstů na klávesnici PMD-85 nebo změna polohy joysticku) je nyní asi poloviční. Navíc vzhledem k delším automatickým skokům na zelených a modrých dlaždicích si hráč ušetří manuální skoky, které si pak může „vybrat“ v krizových situacích. Pro zajímavost, jak vypadá definice sektoru pro autopilota, přikládám divoký RAW výpis:

      ; ********************************
      ; AUTOPILOT - sektor 1 (160 kroků)
      ; ********************************
      
      .fill 29,AUTX065+AUTS255
      .fill 12,AUTX089+AUTS255
      .fill 37,AUTX065+AUTS255
      .fill 8,AUTX065+AUTS255+AUTJUMP
      .fill 9,AUTX065+AUTS255
      .db AUTX065+AUTS255+AUTJUMP
      .fill 15,AUTX065+AUTS255
      .fill 10,AUTX065+AUTS255+AUTJUMP
      .fill 39,AUTX065+AUTS255
      

      Například konstanta AUTX065 je navedení míče na X-souřadnici 65 (rozsah je 0..131 s krokem 2 pixely) a AUTS255 je zase nastavení rychlosti pohybu. AUTJUMP pak na dané dlaždici aktivuje manuální skok.

  41. Libor L.A.

    Do hlavního článku jsem doplnil soubor TrailblazerWalkthrough.prc s kompletním přechodem hry Trailblazer, tj. sektory 1 až 16. Jsou tam i nějaké ty havárie, ale vzhledem k asynchronnímu ovládání tu hru nikdy nebude možné projet beze ztráty kytičky, i když to řídí autopilot. Alespoň se tam prostřídaly všechny herní situace a zvuky. Nakonec jsem vůči originálu musel snížit gravitaci na 10/16 nominální hodnoty. Asi mi to při vývoji někde uteklo. Dodatečně uvolním novou edici Trailblazer 2nd release, na které jsem autopilotem otestoval průchodnost.

  42. Libor L.A.

    Dnes, tj. 1. 9. 2018 jsem provedl upload nové verze hry Trailblazer 2nd release pro PMD-85. Ačkoliv byla autopilotem potvrzena možnost zdolání této hry (a v klíčových vybraných detailech se verze pro PMD-85 opět přiblížila originálu), ponechávám hru v režimu testování.

    Jak jsem již naznačil, upravil jsem gravitaci. Namísto nepodmíněného volání „gravitační“ procedury DRVHEI je tato nyní volána podmíněně v poměru 10/16 a je to realizováno takto:

    korek:  lxi h,1010110110101101b ; poměr jedniček a nul
                            ; nastavuje 10/16 gravitace
            dad h           ; trojice instrukcí dad h/jnc/inx h
            jnc korot       ; simuluje instrukci RLC HL (rotace)
            inx h
    korot:  shld korek+1    ; uložit rotovaný vzorek jedniček a nul
            cc drvhei       ; MSB=1 => volání ovladače gravitace
    
  43. Libor L.A.

    Stále ještě doplňuji nějaká drobná vylepšení, například výše uvedenou proceduru pro 10/16 gravitace jsem nahradil ekvivalentní ale rychlejší procedurou pro 5/8 gravitace:

    korek:  mvi a,10110110b ; 5/8 = 10/16 gravitace
            rlc
            sta korek+1
            cc drvhei       ; ovladač výšky míče
    

    Co mi ale dělá starosti, to je fakt, že i když korektně vstoupím do BIOSu (na adresu 8000h) s nastránkovanou ROM, tak zatímco na emulátoru je to na všech verzích spolehlivé, tak na skutečném PMD 85-2A někdy zůstane nastránkovaná RAM. Je to tak v jednom případě z dvaceti – ale stává se to. Možná to souvisí s tím, že jsem na této verzi někdy v roce 1995 dělal pokusy s dekódováním pamětí a zanesl tam hardwarovou chybu v podobě nespolehlivého pull-up odporu na PC4 „služebního“ PIO 8255. Snad na to přijdu..

    1. Libor L.A.

      Čenichám kolem a poslední testy ukazují, že titulní hudba možná v nestřeženém okamžiku předefinuje mód služební 8255-ky, která je rovněž zodpovědná za memory banking. To je možné díky fintě se shazováním bitu reproduktoru do nuly zápisem do CWR tohoto obvodu. Ovšem tak jednoduché to není, neboť v emulátoru se chyba neprojevuje..

      Taky se na reálném železe projevují poněkud nepříjemné pazvuky u přehrávání finální hudby v okamžiku, kdy nasazuje třetí zvukový kanál. Prostě se tam objeví nějaká součtová složka a zvuk nepřirozeně zesílí. Ale dělá to jen na skutečném BEEPru s jeho typickou amplitudovou frekvenční charakteristikou. Na verzi 1 méně, na vyšších verzích více. Záleží na tom, kde má použitý BEEPer rezonanční převýšení. Zkusím čtyřhlasý přehrávač.

  44. Libor L.A.

    Uvolněna nová verze, nyní jsou zapracovány všechny známé chyby a položky TODO. V hlavním článku jsem upravil adresy POKE pro cheaty. Závěrečná hudba, ač sama o sobě tříhlasá, byla převedena na čtyřhlasý přehrávač, aby nedocházelo k nelibozvučným rezonancím na skutečných akustických měničích v PMD-85. Problém s návratem do BIOSu v úvodní obrazovce jsem vyřešil tak, že se nespoléhám na pull-up odpor na PC4 služební 8255-ky, kterýžto vypíná AllRAM režim a nastavuji horní část portu C jako výstup a režim AllRAM vypínám nuceně nastavením bitu PC4 do jedničky. A chyby na skutečném hardware se prozatím neobjevují. Nyní už další změny nepředpokládám. I když, s každým čekáním se objevují nové a nové myšlenky, jak to které dílo vylepšit a pak to nemá konec..

  45. Libor L.A.

    Dnes jsem zjistil, že Trailblazer v jeho poslední podobě projedu bez POKE a ještě mi zbyde kolem 60 vteřin. Takže asi ještě upravím povolené časy pro jednotlivé sektory. Já mám v každém sektoru čas delší o 5 vteřin proti originálu, což je zhruba doba zotavení po pádu do díry. Takže ne možná o celých pět vteřin ale o takové dvě tři vteřiny bych mohl každý sektor zkrátit, ať to není zase moc jednoduché.

    Taky se asi vyřešil ten problém s memory bankingem a návratem do BIOSu z hlavní obrazovky. Protože mi hra zkolabovala (s typickými projevy ve videoram) zničehonic v místě, které bylo zkoušeno snad tisíckrát, bylo jasné, že na vině je nespolehlivý kontakt některé z patic na desce plošného spoje. Po dotlačení obvodů do patic zatím funguje i ten návrat do BIOSu, který na emulátoru jel vždy bez chyby. Takže jsem naháněl nějaké duchy a výsledkem je plno drobných vylepšení ve zbytku hry.

    Ještě tak týden bych testoval poslední verzi, jestli se něco neobjeví. Ale ty časy sektorů bych v závěrečné kompilaci asi fakt zkrátil..

  46. Libor L.A.

    V rámci nekonečných úvah na téma „..a ještě vylepším tohleto..“ jsem se zapletl s myšlenkou, že na odpočet času hry použiju čítač/časovač 8253. Prozatím pokusy ukazují, že je to časování plynulejší při přechody mezi samotnou hrou a ztrátou míče. Ovšem něco za něco. Je možné, že pokud vám (tak jako mi) nepojede zdroj 1sec pro 8253, může se hra někdy zaseknout. No a aby se to nestalo, musím ještě vylepšit program, aby se s případným defektem 8253 nebo jejích hodin dokázal vypořádat.

    1. Libor L.A.

      Vše funguje jak má, herní čas je plynulý. Potud je vše v pořádku. Trochu jsem bojoval s faktem, že zpětné čtení obsahu čítače 8253 před příchodem prvního odpočítávacího impulsu s periodou 1 vteřiny dává nějakou náhodnou nesmyslnou hodnotu. A zastavení čítače před čtením nepomáhá. Teprve až čtení po prvním impulsu vrací skutečný obsah čítače. Ale to jsem vyřešil tak, že si v nějaké proměnné pamatuji poslední (=nastavený) čas a pokud se čítač 8253 liší od posledního stavu více jak o jednu vteřinu, prostě toto čtení čítače 8253 ignoruji. Vycházím z předpokladu, že tolik strojového času od posledního čtení 8253-ky jsem nespotřeboval, aby uplynula více jak právě ta jedna vteřina. Prozatím tento přístup funguje a funguje dobře. Jisté riziko je právě u dlouhých úloh – typicky ztráta míče a s tím spojené procedury, kde teoreticky hrozí, že mezi dvěma čteními 8253-ky uplyne více jak jedna vteřina a odpočet by se teoreticky zastavil. To musím zítra propočítat a hlavně otestovat. Ale jak říkám, ten přínos za to stojí.

      1. Libor L.A.

        Dnešní pokusy s Trailblazerem na skutečném PMD 85-2A mě přinutily zabývat se problémem nefunkčního jednovteřinového taktu pro obvod 8253. Z jedničkové verze PMD-85 jsem vypájel MHA1116 a vsadil jej do své verze PMD 85-2A namísto šíleně zmasakrovaného U114D. A stejná chyba. Pár impulsů projde, a pak ticho. Taky jsem vyměnil jeden z kondenzátorů 33nF. Takže zítra zkusím vyměnit ten druhý kondenzátor a součtové tranzistory. A možná i ten společný pull-up rezistor. A pak už zbývá jen výměna 8253. Snad to nezajde tak daleko.

        Protože mi v RAM zbylo pár set bajtů, zvažuji u Trailblazeru podporu zvukového interface MIF-85. Asi si udělám nějaké malé demo, jak by zněly jednotlivé zvuky a melodie. Hra samotná by tím určitě ožila, protože bych mohl udělat podobné zvukové projevy na modrých a zelených dlaždicích, tak jako jsou na červených. Ty zvuky z modrých a zelených dlaždic jsem zkoušel na beepru během vývoje dělat taky, ale časově dostupná řešení mě moc nenadchla (bylo to hrozné), proto zůstaly zvuky jen na červených kostkách a na rozjezdových a dojezdových šachovnicích.

        1. Libor L.A.

          Obvod 8253 na mé desce portů se chová divně. Krystal nový, MHA1116 nový, tranzistory nové, „zkracovací“ kondenzátory 33nF nové, bázový odpor (jeden ze dvou) vyměněn. A když zapnu CTC2 v režimu 0, tak sice čítá, ale přeskakuje některé stavy. Změna stavu čítače nastane vždy po jedné vteřině ale někdy se stav změní o dva LSB. Dělá to tak v jednom případě z dvaceti. Není to přechodné čtení chybného stavu, prostě se stav zmenší o dva a čítá v klidu dál. Zkoušel jsem i funkci latch před čtením čítače (čítám totiž jen LSB) ale nemá to vůbec žádný vliv. Ještě zkusím vyměnit sčítací pull-up odpor 10k a ten druhý bázový vybíjecí odpor 4k7 a pak už půjde 8253 do patice.

          Implementace hardwarového odpočtu herního času se mi líbí tak moc, že překopu celou desku portů, jen aby to jelo! Mezitím budu mít alespoň čas se zabývat myšlenkou implementace podpory MIF-85.

          1. Libor L.A.

            Takže vše kolem 8253 jsem vyměnil, od krystalu přes pasivní součástky, MHA1116, samotný 8253 včetně blokovacího kondu a .. stále stejná chyba čítání sekundových impulsů. Začínám podezírat návrháře IO desky, že tam měl dát (a nedal) nějaký schmittův obvod na výstup tranzistorů, buzených MHA1116. Protože jinak už nevím, co s tím.. Prostě si to sem tam vymyslí jeden sekundový impuls navíc.

            Dokud ten problém nevyřeším, asi nebudu unáhleně vypouštět novou verzi Trailblazeru. Protože jestli to takhle spolehlivě šlape všem, tak se budu muset vrátit k softwarovému odpočtu času. Ale to se mi nechce!

  47. Libor L.A.

    Tak MIF-85 pro Trailblazer jede. Ale že by to přineslo nějakou větší kvalitu zvuku.. Rychlost hry zůstane téměř zachována. Nejdelší sektor 16 se z 31 vteřin prodloužil na 32 vteřin díky sekvenceru pro SAA1099, který ale musí jet jen na jednom zvukovém kanálu, aby moc nezdržoval. Mám trochu problém s frekvenčním rozsahem SAA1099. Na ten cinkavý zvuk při pádu do díry nestačí, chybí mi tam další dvě oktávy. Ale jde to obejít (=ignorovat ty vysoké tóny) a ani to moc není poznat. Jediným přínosem implementace MIF-85 tak zbydou nakonec ty doprovodné zvuky při najíždění míčem na barevné dlaždice, které mají nějakou tu funkci.

    1. Libor L.A.

      Až teď jsem si všiml. že to hlavní časové omezení od implementace zvuků SAA1099 se projevuje při maximální rychlosti pohybu míče. Pokud v maximální rychlosti začnu míčem pohybovat vlevo či vpravo, ubíhající cesta výrazně zpomalí. Ale vlastně je to logické. Vzhledem k použité formě multitaskingu se to zpoždění (mmj. od přehrávače SAA1099) kumulativně hromadí pouze každých 10msec, kdy se obsluhuje pohyb hráče, či spíše míče. A na odvalování cesty se použije pouze zbývající čas. Přeci jen to je nejrychlejší hra, co jsem doposud psal a délka jejího funkčního těla byla těžce optimalizována. Proto i těch směšných 318 teoretických nebržděných taktů CPU na každých 4x10msec hraje roli.

      Ona ta hra při pohybu míče do stran viditelně zpomaluje i v základní verzi bez přehrávače SAA1099, ale s tím přehrávačem je to ještě horší. A jak už jsem říkal, ten přínos je diskutabilní. Charakterem se mi u této hry líbí spíše speaker. Takže definitivně podporu SAA1099 u této hry asi vypustím. Pokud nezapomenu, hodím de sekce „Jak na to“ nějakou použitelnou knihovnu, kterou jsem pro tento účel vytvořil.

  48. Libor L.A.

    Přeci jen pár drobných úprav:

    1) Změna obrázku během nahrávání. Obrázek míče je přesně o 10% užší (šišatější), aby se dosáhlo kompromisu mezi zobrazením v emulátoru a na reálném počítači se zobrazením na monitoru s poměrem stran 4:3 (ale poměrem pixelů 9:8!) Takže na emulátoru je šišatý na výšku, na reálném hardware je šišatý na šířku. Ale ten kompromis jsem musel udělat. Na reálném stroji to bylo šišaté naležato v poměru 12:10 a bylo to příšerné. Taky jsem na tom úvodním obrázku upravil texturu cesty.

    2) „Zkrátil“ jsem zápis POKE pro vypnutí pádu míče do díry v cestě.

    3) Rovnoměrnější odpočet času během pádu míče do díry. Přestože jsem zcela odboural podporu časovače i8253, je teď odpočet času velice rovnoměrný. Našel jsem totiž nesoulad mezi teoretickou předpovědí a skutečnou dobou vypršení času pro vyslání znaku UARTem, kterýžto se používá k časování hry. To mě předtím zlobilo, a proto čas při pádu míče do díry vykazoval někdy mírné zrychlení, někdy mírné zpomalení. Nyní je to podle mých představ.

    4) Pokud jsem to ještě nenapsal, tak jsem definitivně zrušil podporu SAA1099 alias MIF-85. Důvody viz výše.

    5) A jako obvykle, plno drobných, nikdy nekončících, optimalizačních změn.

Napsat komentář: Libor L.A. Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna.