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

Od: Michal Hučík
Datum: 31.10.2011 08:41
Předmět: Re: radic wd2791


Dne 31.10.2011 0:50, Radek Suk (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):
> interupt. Zde myslim take na pristi kartu SIO ktera jiste bude IM2 
> podporovat. Take jiste se bude muset casem zavest diskuse ohledne 
> preruseni na UNIKARTE, predstavme si situaci (rezim IM2) ze budu 
> pouzivat tisk pres vnitrni PIO a prijde interupt od PIO a UNIKARTY 
> soucasne. V tom pripade ma prednost PIO (zajistuje to HW Sharpa) a 
> spravne unikarta ma testovat IEI a kdyz je zde log0 tak nema pravo 
> vyvolat Int. Proste muze se pouzit jen IM1 kdy se skace jen na jednu 
> rutinu na adrese 38H a neda se vyuzit plny vykon Sharpa. Z toho plyne 
> ze unikarta asi bude muset znat nejake prikazy ktere budou vypinat 
> vyvolani jejiho interuptu aby jina karta mela interupt volny pro svoji 
> cinnost, jinak se nebude moci zapojit soucasne s jinym interuptem.

Ahoj Radku,

jak uz jsem nedavno napsal, tak to, aby unikarta dokazala korektne 
pracovat s interruptem by vyzadovalo nekolik zasahu do PCB a obavam se, 
ze se do toho nikomu nechce. Signal /INT se v unikarte generuje tak, ze 
pokud je aktivni, tak na nem vystavile 0 a pokud je neaktivni, tak ho 
odpojime a o vystaveni 1 se postara pullup na sbernici Sharpa.
Pokud se budou ostatni pripojene periferie chovat stejne, tak nedojde k 
zadnemu fyzickemu problemu, ale kdyby se pripojilo zarizeni, ktere ma 
potrebu posilat v klidovem stavu tvrdych +5V, tak mame problem.

Co se tyka samotneho preruseni, tak u emu_SIO jej lze deaktivovat pomoci 
prikazu na portu 0x53. U emu_FDC je generovani interruptu realizovano 
tak, ze pokud je radic zapnuty do INT rezimu a je aktivni prikaz 
cteni/zapis sektoru, tak mame v unikarte interni citac zbyvajicich dat 
do ktereho se nastavi velikost fyzickeho sektoru a jeho hodnota se 
snizuje pri  cteni/zapisu datoveho portu 0xdb. Pro vygenerovani 
interruptu je podminkou to, ze tento citac neni nulovy (DRQ). Pri 
testovani jsem odzkousel i variantu, kdy radic agresivne drzel aktivni 
interrupt po celou dobu, kdy byl tento citac nenulovy, ale do firmware 
jsem nakonec pro jistotu pouzil takovou variantu, ze aktivaci INT 
spoustim vzdy po kazdem druhem pozadavku na radic - kazda rutina pro 
praci s FDC totiz neustale testuje status radice prectenim portu 0xd8 a 
toho jsem vyuzil. Napr. v HD cp/m se nastavi radic do INT rezimu, na 
adrese 0x0038 se pripravi prerusovaci kod, zakaze se ruseni, ktere se 
pouziva pro cp/m a nastavi se IM0, do FDC se posle prikaz odpovidajici 
typu operace a pak uz se jen ve smycce neustale testuje status na 0xd8. 
Mezi tim se v preruseni vyridi predani dat a smycka testujici status se 
ukonci ve chvili, kdy FDC prestane byt BUSY.
V tom popisu je v podstate i navod na to, jak je mozne obelstit INT pri 
praci s emu_FDC a obslouzit nejake jine zarizeni, nicmene pri praci se 
skutecnym radicem asi k necemu takovemu nebude sance, protoze by doslo 
ke ztrate dat.

Michal



Ostatní příspěvky vlákna:

 
[2011/1 (52)] [2011/2 (9)] [2011/3 (2)] [2011/4 (9)] [2011/5 (8)] [2011/7 (1)] [2011/8 (40)] [2011/9 (146)] [2011/10 (116)] [2011/11 (29)] [2011/12 (110)]


[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)]