Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Zpět na zprávu

Celé vlákno · 3 zprávy

Re: Soutez

Bohumil Nováček SHARP MZ-800

Ahoj Michale,

  tak jsem to dneska zkousel nabootovat z obrazu diskety a spustit tuhle verzi
TETRIS2 a az na nejake artefakty na uvodni obrazovce mi to na tom
ARMu bezi. Na uvodnim screenu je pres pismeno T par malych cisel
po radcich 69, pak 95, pak jeden vynechany, pak 69,95, zas volno a 69,00
a az dole pod sovetskou vlajkou znaky 00.
Jinak neco zmacknu, predefinuju si klavesy a hraju, zkousel jsem to
nekolikrat a porad stejne dobry :-)

Prikladam kazetovou verzi, kterou jsem zkousel predtim a ta v pohode
bezi i na Zdenkovym emulatoru.

Jinak wait stavy pri pristupu k videu v MZ700 modu na ARMu ignoruju,
tam bych asi chybu nehledal.

Zatim
Bohous

Zobrazit citovaný text

---------- Původní zpráva ----------
Od: Michal Hučík (sharpemupandora.cz) <ordoz[doména skryta]>
Datum: 30. 5. 2013
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



Přílohy

  • tetris-2
    application/octet-stream · 20 kB

Re: Soutez

Michal Hučík SHARP MZ-800


Ahoj Bohousi, odpovim rovnou do konfery, abych mohl rovnou i ostatnim 
popsat jak to teda vlastne funguje...

Podobne jako u tebe se ta hra chova u mne na FPGA, akorat, ze pri 
samotnem hrani uz se mi to hryzne... Vzhledem k tomu, ze to asi funguje 
jen diky hazardnim stavum, tak tam bude zrejme nejaka sirsi variabilita 
toho co se tam muze zapsat, aby to alespon nejak nabehlo ...

Kdyz jsem si ve Zdenkovem emulatoru pockal, az hra prosla adresou 0x0000 
a pak poprve prosla tou adresou 0x0037 validnim zpusobem a nasledne jsem 
na 0x0038 zapsal RETI, tak mi najednou  cely Tetris rozbehnul jako ze 
skatulky :)

  V te prvni casti Tetrisu se docela hodne zapisuje do VRAM - maze se 
screen a vykresluje se uvodni obrazovka. Kdyz tam nemas WAIT, tak je 
vetsi pravdepodobnost, ze tema vykreslovacima rutinama projdes s 
minimalnim poctem prijatych RST 0x38 a tak ti to "skoro" chodi.

Na realnem Sharpu tech interruptu probehne opravdu more a ten clovek co 
to psal to zrejme nejak divoce poladil, aby mu to pres ty hazardni stavy 
nakonec nastartovalo OK... verim, ze to muselo vznikat hodne bolestivou 
cestou :) Kdyz se nad tom zamyslim, tak on asi nemel moc sanci vubec 
prijit na to co mu ten program ve skutecnosti dela.

Podle toho co se mi podarilo zjistit a namerit v Sharpu, tak pokud v 
MZ-700 Sharp pracuje s VRAM ve chvili, kdy je paprsek ve viditelne casti 
radku, tak GDG vygeneruje WAIT. Aby to nebylo az tak jednoduche, tak pro 
zapis je v GDG jedno bajtovy buffer a proto zapis jednoho bajtu jeste 
projde bez povsimnuti, ale dalsi bajt uz zastavi procesor az do chvile, 
kdy prijde hrana HBLN. To se deje nezavisle na tom, zda jsme, ci nejsme 
ve snimkovem zatemneni.

Pri cteni se logicky zadny buffer aplikovat neda a tak dochazi k WAIT 
bezprostredne uz pri prvni RD operaci. (U Zdenka, i u mne v FPGA se 
zatim RD i WR chovaji oba prave takhle, coz je zrejme duvod proc u nas 
hra tuhne a na Sharpu ne.)

Vcera jsem vsak zjistil, ze u RD operaci dochazi ke kratkym WAIT stavum 
i v dobe, kdy probiha radkove zatemneni, coz je pro mne novinka.

Pokud si stahnes SW k logickemu analyzeru 
http://www.asix.cz/dwnld_sigma-omega.htm (je potreba mit v pocitaci 
nainstalovany FTDI driver, jinak to nenabehne 
http://www.ftdichip.com/Drivers/VCP.htm ). Tak se muzes podivat na 
namerene prubehy signalu:

http://duna.ordoz.com/doc/zdenek/SHARP_FULL_MZ700_VRAM_WR.stf

http://duna.ordoz.com/doc/zdenek/SHARP_FULL_MZ700_VRAM_RD.stf

Zaznam prubehu programu WR:

loop:
     ld (hl),a
     jp loop

Pro cteni jsem jen zmenil ld a,(hl).


Mozna by bylo zajimave odzkouset so nastane, kdyz v MZ-700 rezimu 
zacneme cist/psat do osmistovkovych GDG registru ... jestlipak to taky 
zpusobi nejaky WAIT.

Michal

Dne 30.5.2013 12:36, Bohumil Nováček (sharpemupandora.cz) napsal(a):
Zobrazit citovaný text (21 řádků)
>
> Ahoj Michale,
>
>   tak jsem to dneska zkousel nabootovat z obrazu diskety a spustit 
> tuhle verzi
> TETRIS2 a az na nejake artefakty na uvodni obrazovce mi to na tom
> ARMu bezi. Na uvodnim screenu je pres pismeno T par malych cisel
> po radcich 69, pak 95, pak jeden vynechany, pak 69,95, zas volno a 69,00
> a az dole pod sovetskou vlajkou znaky 00.
> Jinak neco zmacknu, predefinuju si klavesy a hraju, zkousel jsem to
> nekolikrat a porad stejne dobry :-)
>
> Prikladam kazetovou verzi, kterou jsem zkousel predtim a ta v pohode
> bezi i na Zdenkovym emulatoru.
>
> Jinak wait stavy pri pristupu k videu v MZ700 modu na ARMu ignoruju,
> tam bych asi chybu nehledal.
>
> Zatim
> Bohous
>

Re: Soutez

Michal Hučík SHARP MZ-800

Tak se divam do tertris-2.mzf ... tam pri interruptu na 0x0000 vidim IM 
1 a predevsim PIO ma zakazan interrupt ... Tedy se potvrzuje, ze hru 
zmrvil ten, kdo z ni vyrabel .com

Ted uz jen prijit na to, jak primet emulator, aby se i v tomto pripade 
choval stejne jako Sharp :)

Michal