Autor ::l00k Poslaná :: 22.12.2012 18:15:48 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 ::Libor L.A. Poslaná :: 24.12.2012 08:32:33 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 ::Lukáš Poslaná :: 24.12.2012 10:08:56 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 ::Libor L.A. Poslaná :: 24.12.2012 14:40:14 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 ::Lukáš Poslaná :: 24.12.2012 15:24:12 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 ::Libor L.A. Poslaná :: 24.12.2012 16:18:09 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 ::Lukáš Poslaná :: 24.12.2012 21:40:16 Predmet ::Re: Heuréka - ten trotl se objevil
podobná chyba je u plamenů z trysek okolo X668b (vícekrát)
Správa
Autor ::Libor L.A. Poslaná :: 25.12.2012 20:47:26 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 ::Lukáš Poslaná :: 25.12.2012 21:56:07 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 ::Roman Bórik Poslaná :: 25.12.2012 21:34:45 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 ::Libor L.A. Poslaná :: 26.12.2012 09:06:46 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 ::Lukáš Poslaná :: 26.12.2012 22:44:28 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 ::Roman Bórik Poslaná :: 26.12.2012 23:21:00 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.