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

Od: Michal Hučík
Datum: 18.10.2011 14:22
Předmět: SIO - navrh pro obsluhu



Prozatim si predstavuju, ze by se to mohlo obsluhovat asi takhle:

*
 *
 * SIO data port:               0x52
 * SIO cmd/status port:         0x53
 *
 * Aktualni velikost prijimaciho a odesilaciho bufferu je 255 bajtu.
 *
 * Rychlost portu v bps se nastavuje pres API MZFREPO jako dword.
 *
 *
 * Status:
 * =======
 *              0. bit - nastaven oznamuje data v prijimacim bufferu
 *              2. bit - oznamuje volne misto v odesilacim bufferu
 *
 * Prikazy:
 * ========
 *
 *
 *      RESET   Provede reset portu, tzn.: zlikviduje aktualni obsah prijimaciho i
 *              odesilaciho bufferu,  vynuluje registry RXINT a TXINT, zakaze
 *              generovani interruptu EINT = 0, zapne HW rizeni toku s nastavenim
 *              registru RTS0 = 2 a RTS1 = 128.
 *             
 *      EINT    Povoli generovani interruptu, EINT = 1.
 *
 *      DINT    Zakaze generovani interruptu, EINT = 0.
 *
 *      RXINT   Nasledujicim zapisem se nastavi minimalni pocet bajtu, ktere musi byt
 *              v prijimacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje
 *              generovani interruptu podle stavu prijimaciho bufferu.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RXINT.
 *
 *      TXINT   Nasledujicim zapisem se nastavi minimalni pocet volnych bajtu, ktere musi byt
 *              k dispozici v odesilacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje
 *              generovani interruptu podle stavu odesilaciho bufferu.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v TXINT.
 *
 *      RXBUF   Naslednym ctenim zjistime aktualni pocet bajtu v prijimacim bufferu.
 *
 *      TXBUF   Naslednym ctenim zjistime aktualni pocet bajtu v odesilacim bufferu.
 *
 *      RTS0    Nasledujicim zapisem nastavime minimalni pocet volnych bajtu v prijimacim bufferu
 *              pri kterem unikarta vypne signal RTS a zakaze tim protistrane posilat data.
 *              Pri nulove hodnote nikdy k vypnuti RTS nedojde.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RTS0.
 *
 *              Pozn: pri testovani na 115200 bps se mi ukazalo, ze pri hodnote mensi jak 2 uz
 *              dochazelo ke ztrate dat.
 *
 *      RTS1    Nasledujicim zapisem nastavime minimalni pocet volnych bajtu v prijimacim bufferu
 *              pri kterem unikarta zapne signal RTS a povoli tim protistrane posilat data.
 *              Pokud RTS1 <= RTS0, tak k zapnuti RTS nikdy nedojde.
 *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RTS1.
 *
 *
 * TODO:
 * ==== 
 *
 * Prozatim se mi nejak nedari obsluha CTS signalu, tak jej ani neuvadim.
 *
*/


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