Forum

Z PMD 85 Infoserver

:: späť na zoznam tém ::
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  27.11.2012 14:48:07
Predmet  Predmet ::  JETPAC
Tak jsem sehnal binárku od JETPAC ze ZX Spectra. Začal jsem to disassemblovat, vypadá to, že by to
šlo přeportovat na PMD-85 celkem bez problémů. Jediný problém vidím v rychlosti. Ale co PMD-85 ztrácí na hrubé taktovací frekvenci, to by mělo jít dohnat efektivnějším výběrem instrukcí ve vykreslovacích procedurách. Navíc nemusím řešit obsluhu pole barvových atributů u ZX Spectra, na tom se taky něco času ušetří. Titulní obrázek převedený do dvou odstínů bílé a jedné černé barvy pozadí vypadá pořád moc pěkně. Podporu joysticků ale i vlastně celý program odladím asi jen na místním emulátoru. Pokud by se někomu chtělo ladit na reálném HW, rád průběžně poskytnu kusy kódu na odladění. Problémy s připojením PMD-85 (verze 1/2/2A) na současné barevné TV máme asi všichni. Jak to řešíte?

JETPAC je sice sprostá střílečka, ale i takových je na PMD-85 málo (tedy skoro žádná).
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  10.01.2013 05:27:37
Predmet  Predmet ::  Re: JETPAC - Testovací verze ke stažení
Snad se majitelé tohoto webu nebudou hněvat, když tady odkážu na stránky www.pmd85.mysteria.cz. Tam jsem v sekci Download nechal ke stažení ptp archiv s testovací verzí hry Jetpac pro PMD-85. Zatím to nemá grafický zavaděč a pracuji na odstranění jedné nepřesnosti, nicméně hru lze plnohodnotně hrát (je tam zatím ještě plná nesmrtelnost). Jakékoliv testy a postřehy z řad případných uživatelů budou vítány.

Hra byla testována v simulátoru PMD-85 z těchto stránek a rovněž pro tento simulátor je určen archiv jetpac.ptp s vlastní hrou.
 
Správa
Autor  Autor ::  mop
Poslaná  Poslaná ::  06.02.2013 09:18:33
Predmet  Predmet ::  Re: JETPAC - Testovací verze ke stažení
Je to fakt pěkně udělaná předělávka. PMDčku nerozumím, tak se chci zeptat, proč je létání pod klávesou E. PMD nemá kurzorovou klávesu nahoru? Hrál jsem v emulátoru tu aktuální verzi se stránky Dowload.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  06.02.2013 09:59:27
Predmet  Predmet ::  Re: JETPAC - Testovací verze ke stažení
Klávesnica PMD 85 nemá šípky hore a dole, pretože pre editáciu textu sa v základe používa iba dialógový riadok, kde je pohyb kurzora iba v rámci riadku.
Ovládanie hier, ktoré sú obvykle z dielne VBG Software je E=hore, Y=dole, <-- a -->. Prípadne ako Fire sa používa Medzera alebo Shift. Zrejme preto toto ovládanie použil aj Libor v Jetpac.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  06.02.2013 17:55:02
Predmet  Predmet ::  Re: JETPAC - Testovací verze ke stažení
Přesně jak řekl Roman. A kvůli unifikaci ovládání jsem implementoval i stejné rozložení bitů joystickového portu, jak to použili VBG u svých her.
 
Správa
Autor  Autor ::  solaris104
Poslaná  Poslaná ::  11.01.2013 15:31:39
Predmet  Predmet ::  Re: JETPAC - Testovací verze ke stažení
Paradni práce. JetPac je vyborna hra. Mel bych na Tebe jeden dotaz. Kdyz uz dokonale znas kod JetPacu, nechtel bys fixnout verzi JetPacu pro Ondru, aby fungovala i s joystickem? Emulator, assembler, binarku JetPacu i nejakou dokumentaci pro Ondru mame.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  11.01.2013 20:29:31
Predmet  Predmet ::  Re: JETPAC - úprava pro Ondru
Zkuste poslat binární kód nebo disasemblovaný výpis, kouknu se na to. Jo a popište nějak Váš problém, o co konkrétně jde. Nic neslibuju, ale pokusím se. Originál je řešený tak, že má několik oddělených rutin pro testování klávesnice - tedy konkrétně tuším tři. A k tomu se sólo testuje zastavení pádu směrem dolů vlivem gravitace. Jedna rutina je test na vlevo/vpravo, jedna je test střelby a jedna testuje požadavek na let vzhůru. Každá z těchto rutin nejprve otestuje stavovou proměnnou KEYBOARD/JOYSTICK (v originále je to bitová maska 02 na adrese 5cf3) a podle toho buď provede vlastní test klávesnice nebo odskočí na univerzální (společnou) rutinu, která jen přečte port joysticku. Stisknuté klávesy se převádí na kódy KEMPSTON joysticku.
Ale chtěl bych vidět tu rychlost na Ondrovi. Já jsem se musel postavit na hlavu, vynechat kompletní obsluhu barev, ořezat animaci zavěšených kousků rakety a FUELu, zefektivnit zobrazovací rutinu, procesor je bržděn jen pár procenty od videoprocesoru a dostal jsem se horko těžko na původní rychlost (spíše ale odhaduju ca 80-90% rychlosti originálu). Je fakt, že PMD-85 běží na 2.048MHz oproti 3,5MHz originálu.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  19.12.2012 05:34:01
Predmet  Predmet ::  Re: JETPAC
Zdrojový kód mám přepsaný do instrukcí i8080. Jednodušší procedury jsem udělal podobné ale v zásadě nové. Procedury vykreslování a management hry jsem použil zcela původní, jen jsem nahradil instrukce procesoru Z80. Například instrukci PUSH IX jsem nahradil sekvencí: PUSH H/LHLD IX/XTHL.. Takže je to přeportováno, a ... nejede to. Ale to se dalo čekat. Včera jsem pár chyb odstranil, a teď budu hledat ty další (chyby). Určité zpomalení očekávám zejména kvůli náhradám právě těch Z80 instrukcí: např. LD H,(IX+6) - náhradu za tohle snad ani nemusím rozepisovat, to už je vidět hned. Určité zrychlení si slibuji od vypuštění kódu na zpracování barvových atributů (PMD-85 nic takového nemá, že..) Naštěstí beeper je stejné zařízení, tahle konverze spočívala jen ve změně pozice řídicího bitu reproduktoru.

Rekapitulace: nabídka a start hry jede, vykreslení scény kromě hráče jede, zvuky se ozývají, herní engine není na 100% ale "nějak" to jede. Neobjevují se žádné objekty kromě rakety (té alespoň funguje gravitační mechanismus, který je společný pro všechny objekty).

Takže si popřeju hodně štěstí a ještě více času a ozvu se až to bude. Nechcete se někdo na tom podílet? Teď bych potřeboval otrocky porovnávat původní ASM kód a ten přeportovaný..
 
Správa
Autor  Autor ::  l00k
Poslaná  Poslaná ::  22.12.2012 18:15:48
Predmet  Predmet ::  Re: JETPAC
Pošli, mrknu na to. Sám sem si pro sebe kousek taky předělal, ale zůstal jsem u Z80. Nevím jestli sis všimnul ale je tam pár samomodifikujících se částí + nějaká ta ochrana.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  24.12.2012 08:32:33
Predmet  Predmet ::  Re: JETPAC
Akorát myslím ve dvou místech se mění adresa (resp. operační kód + adresa) a je tam po startu vytvořena instrukce PCHL v oblasti proměnných. Pokud máš další postřehy ohledně nějakého zabezpečení, rád se dozvím. Nemohu totiž rozchodit kosmonauta. Jeho ovládací mechanismus jsem už dvakrát kontroloval, spíše to vypadá na nevhodně inicializované proměnné (každý objekt v této hře má 8 byte dlouhý "popis", kde je pozice, stav, event. další pomocné proměnné). I začátek hry včetně té inicializace objektů jsem několikrát prošel, a nic jsem nenašel. Takže je možné, že mi nějaký "zabezpečovací" mechanismus ušel. Ten kosmonaut žije (ostatní objekty s ním kolidují), jenom není vidět a nelze jej ovládat. Rychlost zatím odhaduji na 60% originálu. Ale to je narychlo sbastlenou grafickou konverzí do systému PMD85 se zrcadlovým otáčením bitů dle původních obrázků). Ve skutečnosti by to mělo být lepší, obrázky otočím už v bitmapách a nebudu to dělat během kreslení.
Po včerejšku mi chodí na 100% ty nepřátelské objekty. Jejich mechanismus je zdá se kompletní.

Zdrojové soubory v ASM pošlu trochu později, stále tam nacházím chyby typu LXI h, LHLD (daň za rychlost a ruční přepis). Bohužel jsem kvůli množství instrukcí Z80 nemohl udělat disassemblaci přímo v kódu i8080 ale dělal jsem ji v kódu Z80 a pak to ručně přepsal. Kódu je tam 8k i s obrázky.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  24.12.2012 10:08:56
Predmet  Predmet ::  Re: JETPAC
Škoda že si to do toho kódu 8080 vůbec přepisoval. Já píšu 99% programů na IQ151 v syntaxi Z80 protože ji prostě umím líp :) . Používám PSPAD+vlastní syntaxi 8080-Z80 kde mi zvýrazňuje správné instrukce takže poznám když jsem napsal něco co 8080 neumí, případně zařve kompilátor kterému je to jedno, procesor pozná podle definice na začátku zdrojáku (Macro Assembler AS V1.42). pokud si vyházel ty Z80 instrukce, chodilo to na ZX nebo ne? Zkoušíš to teď už na PMD nebo stále na ZX?
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  24.12.2012 14:40:14
Predmet  Predmet ::  Re: JETPAC
Jestli se to kompiluje v kódu i8080 nebo Z80 očištěném o nadstavbové instrukce je mi vcelku jedno. V tom problém nevidím. A postup byl následující: mám snap paměti ZXS, který když natáhnu do simulátoru ZXS, tak jede. Spouští se od adresy 25061 (61e5h). Když totéž provedu s upraveným programem pro PMD85 tak jede, ale má to mouchy. Zajímavé je, že program čte něco z adresy 5c78h, ale nikdy tuto adresu nemodifikuje. Buď to bude nějaká ochrana, nebo se to mění během přerušení a slouží to jako synchronizace nebo ta adresa slouží jako konstanta (to se mi moc nezdá).
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  24.12.2012 15:24:12
Predmet  Predmet ::  Re: JETPAC
Jen pro pořádek a neznalé syst. proměnných ZX spectra, na té adrese je nejnižší bajt 3 bajtové proměnné Frames, který se zvyšuje každé přerušení (snímková synchronizace 50 Hz). Pozor, při zakázaném přerušení se nic nezvyšuje, je to součást rutiny obsluhy přerušení IM1 ZX spectra.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  24.12.2012 16:18:09
Predmet  Predmet ::  Heuréka - ten trotl se objevil
Díky Lukášovi se objevil panáček. Upozornil mě na opravdu trapnou chybu. Namísto symbolických návěští jsem uvedl natvrdo adresu ze ZX Spectra. To sice nebylo ono, ale odstranění podobné chyby někde jinde způsobilo, že se ten kosmonaut objevil na scéně. Zbytek po večeři..
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  24.12.2012 21:40:16
Predmet  Predmet ::  Re: Heuréka - ten trotl se objevil
podobná chyba je u plamenů z trysek okolo X668b (vícekrát)
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  25.12.2012 20:47:26
Predmet  Predmet ::  Takže nám to jede..
Jo, jede. Všechny objekty se chovají jak mají. Ovládání bez problémů. Jednu vadu to ale má. Jede to tak na čtvrtině rychlosti originálu. Ale to bude spíše nějaká chyba. A vím, že tam je jedno kolizní volání procedury, ale to se vychytá. Teď budu muset udělat grafický modul pro PMD-85. Celá ta hra naštěstí jede "multiplatformně" v reálných souřadnicích 256*192 pix a do videopaměti se to transformuje jednou jedinou centrální procedurou. Jo, a má to i ty správné zvuky..

Ještě jednou díky Lukášovi, hodně mi pomohl..

PS: Teoreticky by změnou bitmap (resp. vhodnou změnou horních dvou atributových bitů) šlo provozovat hru i v tom "colorace" režimu. Jedinou komplikaci vidím ve vybarvování rakety při sbírání paliva. Tam se asi modifikuje bitmapa rakety - ale to by s v programu dalo asi upravit taky.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  25.12.2012 21:56:07
Predmet  Predmet ::  Re: Takže nám to jede..
No a teď je řada na Romanovi, ten si určitě lehce poradí s optimalizací a PMD grafikou :) Pokud bude potřeba něco otimalizovat tak na to je Roman expert ...
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  25.12.2012 21:34:45
Predmet  Predmet ::  Re: Takže nám to jede..
Pokiaľ tomu správne rozumiem, tak sa vždy pri vykresľovaní spritu rotuje pôvodnou predlohou?
Ak je to tak, určite by som v záujme zrýchlenia išiel cestou úpravy všetkých spritov do formátu VRAM PMD 85 a dôsledne optimalizoval vykresľovacie rutiny.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  26.12.2012 09:06:46
Predmet  Predmet ::  Re: Takže nám to jede..
Myslím, že ty rotace se počítají před začátkem levelu, takže už to pak nezdržuje. Zásadní problém (ale samozřejmě řešitelný) je ten, že ZXS vystřídá na každých 8pix v horizontálním směru 4 fáze pohybu, kdežto u PMD budou buď 3 fáze na 6pix (rychlejší) nebo 4 fáze na 6pix (kroky 1-2-1-2 pixely - nepříliš plynulé a zbytečně o 1/3 pomalejší). Ta hra jela svižně, dokud se nerozjel objekt kosmonaut. Ten žere dost strojového času. Trochu jsem to zrychlil vypuštěním procedury pro obsluhu barvových atributů, ale ne moc. Optimalizace přijde na řadu, až herní engine bude na 100%.

Např. taková prkotina: ZXS při výstřelu "maluje" vodorovné čárky - bajty 0ffh. Na PMD-85 to způsobí, že ta vodorovná šestice bitů bliká a některé výstřely nejsou vidět, neboť proběhnout krátce jen v době, kdy blikač videoprocesoru zhasíná tuto šestici pixelů. Nebo aby byla písmena pěkná i při inverzi, tisknu znaky v rastru 6 x 9 pixelů, a o dva pixely musím nahoře zmenšit hrací pole, protože mi kosmonaut umazává spodní dva pixely skóre. A takových věcí tam je plno, nejprve to chci vychytat.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  26.12.2012 22:44:28
Predmet  Predmet ::  Re: Takže nám to jede..
Otázka spíš na Romana, je moc složité ty sprity se šířkou 2x8 případně 3x8 bitů dostat do těch 6-tic co má PMD? Nemáš na to nějaký fígl jak je dostat na správné místo efektivně a rychle?
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  26.12.2012 23:21:00
Predmet  Predmet ::  Re: Takže nám to jede..
Programovo je to vždy "problém". Okrem počtu grafických bitov v byte 8 vs. 6, je tu ešte to, že na PMD 85 je najľavejší pixel 0. bit bytu a na ZXS je to 7. bit.

Na konverziu grafiky ZXS/PMD 85 máme vlastný program - RM-Team Sprite Editor. Nie je všemohúci, ale nám pomohol veľmi.
Pre "konverziu" je potrebné najprv nastaviť parametre pôvodných spritov zo ZXS a importovať binárku s dátami spritov. Následne upraviť parametre spritov pre formát PMD 85 a urobiť potrebné úpravy. Zdrojové dáta možno uložiť do súboru .sprite alebo exportovať do binárky vo zvolenom formáte.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  27.11.2012 21:27:55
Predmet  Predmet ::  Re: JETPAC
JETPAC je pekná hra a rád ju otestujem aj na živom HW :-)

Pripojenie PMD 85-1/2/2A cez RGB výstup k TV so sebou nesie dva problémy.
1) Výstupné signály na RGB konektore nemajú vhodné úrovne a snáď ani impedancie pre pripojenie k TV napr. cez štandardný SCART konektor, takže je nutná úprava - najjednoduchšie asi odporové deliče.
2) Do zelenej zložky je "primiešané" aj blikanie, ktoré je nutné odstaviť - ak sa nemýlim, tak na DPS je potrebný jeden preškrab a jedna prepojka.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  27.11.2012 20:15:31
Predmet  Predmet ::  Re: JETPAC
Já jsem dělal port ze ZX spectra hry Space raiders na IQ151, mám takový pocit že tyto první hry (objevili se i jako cartridge do XZ IF2), byly port z nějakého jiného osmibitu nebo herní automatu s procesorem 8080, nikde žádné relativní skoky, IX, IY... jen předělané pro zobrazování na Spectru. Jestli se ti povede funkční 8080 převod měl bych zájem o zdroják... zkusil bych IQ151 port, ale obávám se že tady s rychlostí už asi narazím.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  28.11.2012 05:10:34
Predmet  Predmet ::  Re: JETPAC
Cožpak IQ151 nemělo standardní osazení i8080A/8224/8228? Pokud ano, je dost pravděpodobné, že to bylo taktováno rovněž na 2.048MHz. Ale rád se nechám poučit, je-li to jinak.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  28.11.2012 06:23:47
Predmet  Predmet ::  Re: JETPAC
Procesor a obvody kolem jsou standard, ale problém je s grafikou IQ151 má pouze textovou Videoram. Pro grafiku má speciální modul s 16kB RAM ale přistupuje se do ní ne pomocí stránkování, ale tak že je připojená adresovkou na 8255 (2 porty adresa, třetí řídící) + datovka na zvláštní port, takže přístup do videoram je přes 2xout, 1x in, pak operace (and or xor) a pak out - pro změnu bitů v 1 bajtu. Např. nejrychlejší mazání grafické obrazovky pak trvá okolo 3 vteřin.
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  28.11.2012 10:47:51
Predmet  Predmet ::  Re: JETPAC
Bože.. Kdo tohle vymyslel..

Ale měl bych nápad, zkus udržovat virtuální obrázek v normální RAMce a kopírovat do té videoram jen změny, popřípadě vše ale až po provedení těch XOR propočtů.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  29.11.2012 19:10:37
Predmet  Predmet ::  Re: JETPAC
Zběžně jsem prolítl kód a zase tak jednoduché jako Space Raiders to určitě nebude. S tímhle si docela pohráli a je tam hodně velká spousta Z80 instrukcí... Koukám že se už v roce 1983 pokoušeli o jakousi malou ochranu :)
Jinak pro informaci jak jsem dělal ty Space raiders...
1. disassembling hlavních částí, určení kódu a dat
2. doplnění návěstí, odkazů na data a tabulky a grafiku, disassembling grafiky jako DEFB
3. zkouška překladu na stejnou adresu a potom zkouška relokace na jinou adresu (stále ještě na Spectru)
4. Nahrazení instrukcí pro procesor 8080 a test (na spectru)
-> takto funkční zdroják teprve začátek portování na IQ151
5. předělání grafických rutin a výpisů textů + klávesnice + zvuky
6. tisíce drobných dodělávek a úprava časování :)

Takže jestli už si z něčím začal a budeš mít zájem o pomoc/spolupráci tak řekni.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  29.11.2012 20:50:03
Predmet  Predmet ::  Re: JETPAC
Keď som "portoval" hru Plotting zo Speccy, tak som všetko písal nanovo. Okrem skutočnosti, že sa tam používali Z80 inštrukcie, tak pôvodný kód bola neskutočná "šialenosť", i keď z určitého pohľadu tam boli zaujímavé a šikovné riešenia. V 90% kódu sa všetko riešilo cez zásobník - vyberanie z tabuliek, vykresľovanie grafiky. Napr. sa tam nepoužívala jedna rutina na zobrazenie spritov, ale všetko bolo rozpísané desiatky-krát pre každý prípad zobrazenia nejakého spritu a dáta spritu sa ťahali cez zásobníkové operácie. Takže niekoľko kB kódu bolo iba vykresľovanie spritov. To som si na PMD 85 z pamäťových dôvodov pochopiteľne nemohol dovoliť. Z pôvodného kódu som okukal iba niektoré algoritmy (rutiny) hernej logiky, ktoré som si ale aj tak upravil a prispôsobil pre seba.
 
Správa
Autor  Autor ::  Lukáš
Poslaná  Poslaná ::  29.11.2012 22:00:34
Predmet  Predmet ::  Re: JETPAC
Jak píšeš o tom zásobníku, připomíná mi to přeložený kód třeba Pascalu, to dělá tyhle šílenosti...
 
Správa
Autor  Autor ::  Libor L.A.
Poslaná  Poslaná ::  30.11.2012 05:38:54
Predmet  Predmet ::  Re: JETPAC
Já jsem pro disasemblaci použil snap paměti v herním režimu, takže jestli tam nějaká ochrana byla, to nevím. Ale přijde mi, že se tam dost plýtvá pamětí (na kód), řada věcí by šla určitě udělat úsporněji. Uvidíme, co s tím udělá převod na platformu i8080. A co se týče zásobníku, přičel jsem na chuť těmhle konstrukcím se zásobníkem. Většinou šetří místo pro kód a urychlí celou věc. Momentálně mám u JETPACa disasemblované části s "obyčejnými" printy, obsluhou klávesnice, generování pseudozvuků, různé podpůrné procedury pro převody adres a identifikoval jsem místo a smysl některých proměnných. Teď rozkresluju obrázkové "slices", ze kterých se skládají obrázkové objekty. Začínám mít základní představu, jak to funguje. Doufám, že identifikuju nějakou kulturní základní herní smyčku. U Flappyho (některé lidi bych považoval za bohy - bez ironie) je nádherná ukázka kompaktní hrací smyčky na pár bajtech, ze které se volají dílčí provedury.
:: späť na zoznam tém ::