Konference: Počítač SHARP MZ-800 a emulátory
Od: | Bohumil Nováček |
Datum: | 24.5.2013 16:50 |
Předmět: | Re: Soutez |
Ahoj Zdeňku,
to bude asi ten problém, PIO na zakázání nebo povolení přerušení nijak nereaguje,
pouze na to RETI (popřípadně něco tomu podobného), dřiv než přijde RETI nevyvolá
nový INT na pinu a to ani žádný další obvod v IEI IEO řetězu.
V Madonna2.mzf, když změníš na adrese 3327h ED na C9, tedy přerušení
bude končit instrukcemi EI a RET (místo EI a RETI), a spustíš znovu od 3304h,
tak by se to mělo seknout a další přerušení už nevyvolat, jako na Sharpovi.
Podle mě to ve většíně programů funguje i bez toho, protože:
a) málokdy trvá zpracování prerušení déle než doba do další změny na pinu PIO
b) paranoia velí programátorům začínat zpracování přerušení instrukcí DI a končit EI a RETI,
pak si to hlídá sám program, aby nebyl volaný víckrát
Zatím
Bohouš
---------- Původní zpráva ----------
Od: Zdenek Adler (sharpemu tu byla ta zakroucena vec pandora.cz) <zdeneka tu byla ta zakroucena vec seznam.cz>
Datum: 24. 5. 2013
Předmět: Re: Soutez
Ahoj,
no mozna to tim vubec neni zpusobeno, ale kazdopadne jsem to rano zkousel a bohuzel treba
zrovna Zdenkuv emulator vesele generuje preruseni od PIO, i kdyz nahradim RETI jenom RET,
zatimco Sharp se zastavi.
S tou reakci na ED XX misto ED 4D je to mozne, ze je to tahkle zjednodusene implementovano.
Zkusim overit pokusem na Sharpovi.
Zatim drzim palec v dalsim hledani a budu kdyztak napomocen
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: 24. 5. 2013
Předmět: Re: Soutez
Ahoj, diky za tip, ale tuto vlastnost budou mit asi vsechny zminene emulatory implementovanu (u Zdenka to treba jeste vyzkousim nejakym experimentalnim kodem).
Tady je VHDL kod meho Z80PIO ve kterem je m.j. v poznamce napsano, ze skutecne PIO pry nereaguje na RETI, ale jen na zacatek instrukcniho optokodu 0xED a pak uz mu staci jen jeden aktivni M1 + RD cyklus ... Uz si to nevybavuju, ale kdyz jsem to tam napsal, tak si budu verit :)
http://duna.ordoz.com/doc/soutez/Z80PIO.vhd
Tu chybu s Tetris2 jsme se Zdenkem probirali uz pred par rokama a vzpomnel jsem si na ni prave v souvislosti s tim, ze jsi prisel na to, ze v emulatoru chodi pomaleji interrupty z 8253 ... Napadlo mne, jestli neni spise chyba nekde kolem tech preruseni, nez v samotnem citaci a proto jsem to znova vytahnul na svetlo.
Tve demo jsem na FPGA jeste nezkousel. Snad pres vikend.
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) mailto:ordoz tu byla ta zakroucena vec ordoz.com
Datum: 23. 5. 2013
Předmět: Soutez
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
Ostatní příspěvky vlákna:
[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)]