Konference: Počítač SHARP MZ-800 a emulátory

Od: Michal Hučík
Datum: 30.5.2013 01:14
Předmět: Re: Soutez



Bohousi, pro jistotu se zeptam jeste jednou: opravdu ti funguje "tento konkretni" Tetris2 spousteny ze systemu na teto diskete?
http://duna.ordoz.com/doc/soutez/Hry-HDS05.dsk  ... dost by mne to zajimalo.

Ja si totiz ten program krokuju a zacinam mit pocit, ze je v nem nekolik chyb, ktere tam zanesl clovek, ktery predelaval puvodni Tetris do programu spustitelneho pod cp/m (.com)

V kodu se nekolikrat opakovane a docela zbytecne vyskytuji instrukce DI, ktere mi naznacuji, ze tam autor mozna s necim bojoval ...

Program si hned na zacatku nastavi DI a rezim IM 0. Ve sve startovaci fazi prochazi adresou 0x0000 a z adresy 0x003d provadi jump, zrejme na svou puvodni starovaci pozici.  V nekolika nasledujicich rutinach se vyskytuje na jejich zacatku DI a na konci EI + RET,  coz zpusobi nekolik restartu celeho programu prostrednictvim IM0 (RST 0x38). Toto je videt i na vystupu z analyzeru. V nekolika rutinach se jejich konci nachazi NOP + RET, coz mne privadi na myslenku, ze az program prejde do faze, kdy jsou interrupty opravdu vyzadovany, tak sam sebe prepise a ty NOPy v podprogramech nahradi instrukcemi EI.

Toto by se asi potvrdilo, kdybych mel po ruce i puvodni MZF verzi toho Tetrisu.

Kazdopadne pokud si ve Zdenkove emulatoru natahnete tu disketu, nastavite kurzor na Tetris2, nastavite breakpoint na 0x9d21
a na 0xe4ae a bouchnete ENTER, ty EI v debuggeru prepiste na NOP. Kra najednou krasne nabehne do uvodniho screenu a hraje hudba - vse bez aktivniho INT. Jakmile bouchnete do klavesnice, tak se to zborti, protoze tam je asi nekde jeste nejaky dalsi EI, ktery tam zrejme nepatri.

To ze se nam takto zmrveny program v emulatorech zakousne svedci o tom, ze nase emulatory ani zdaleka nejsou identicke s realnym Sharpem, nicmene to vypada, ze jsme neobjevili zadnou zasadni chybu.
(Mam jakesi tuseni, ze by mohl byt rozdil treba v tom, jakym zpusobem se na Sharpu a v emulatorech resi CPU_WAIT pri praci s VRAM v MZ-700 ... Delal jsem dnes nejaka mereni a o par taktu to v emulacich nesedi.)

Bohuzel mne nenapada, jak urcit co se presne v tu chvili v Sharpu deje. Jedinym resenim by asi bylo pripichnout na nej zarizeni/analyzer, ktery by to kvantum udaju ze sbernice ulozil a pak to porovnat s denim v emulatoru.

Tak a jestli mi ted Bohousi napises, ze tobe tento konkretni Tetris bezi uplne stejne, jako bezi i v realnem Sharpu, tak mne docela nastves! :)

Michal


Dne 23.5.2013 23:54, Bohumil Nováček (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):

Ahoj,

  tak ja neco placnu. Taky se mi totiz na HW emulatoru Tetris2 kousal.
Zkusim to otazkou ...
Generuje Z80PIO dalsi preruseni az teprve po vykonani instrukce RETI (kod ED 4D) ?
Pokud je odpoved NE, nekdo nedocetl specifikaci Z80PIO az dokonce ! ;-)

Hodne stesti
Bohous

---------- Původní zpráva ----------
Od: Michal Hučík (sharpemu tu byla ta zakroucena vec pandora.cz) <ordoz tu byla ta zakroucena vec ordoz.com>
Datum: 23. 5. 2013
Předmět: Soutez


Ahoj,

chtel bych vyhlasit soutez, jejimz ukolem je najit pricinu toho, proc v zadnem z top emulatoru (Zdenkuv, Romanuv) nefunguje spravne hra Tetris2, ktera je ulozena na tomto konkretnim DSK http://duna.ordoz.com/doc/soutez/Hry-HDS05.dsk

Hra se po spusteni zakousne. Deje se tak nejen ve zminenych emulatorech, ale i v mem FPGA HW modelu Sharpa.

Nicmene kdyz ten image natahnete pres SD do Unikarty, tak ta hra na realnem Sharpu bez problemu bezi!

Kdysi jsem to trochu zkoumal a jedine co si z toho pamatuju je tusim to, ze v emulatoru se deje jeden interrupt navic a ten tu hru zbori... Vic si nevybavuju, nicmene na pozadani jsem ochoten premerit sondou, ci osciloskopem vse, co bude v mych silach - mne totiz uz nejak nenapada jak dal tu pricinu potizi hledat a proto by treba pomohl pohled na vec od nekoho cerstveho.

Klidne placnete i prvni hloupost, ktera vas jako mozna pricina napadne :)


Pro uspesneho resitele tohoto ukolu nabizim za odmenu 1ks WD2791 z jiste limitovane edice ;)

Michal


---
Pobyty na horách se slevou


 
[2013/1 (17)] [2013/2 (52)] [2013/3 (60)] [2013/4 (68)] [2013/5 (60)] [2013/6 (42)] [2013/7 (9)] [2013/8 (48)] [2013/9 (1)] [2013/10 (40)] [2013/11 (45)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]