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