--- np2/io/gdc.c 2004/02/09 20:39:39 1.14 +++ np2/io/gdc.c 2004/02/16 05:11:38 1.18 @@ -9,7 +9,7 @@ #include "timing.h" -#define SEARHC_SYNC +#define SEARCH_SYNC #define TURE_SYNC typedef struct { @@ -30,7 +30,7 @@ static const GDCCLK gdcclk[] = { static const UINT8 defdegpal[4] = {0x04,0x15,0x26,0x37}; static const UINT8 defsyncm15[8] = {0x10,0x4e,0x07,0x25,0x0d,0x0f,0xc8,0x94}; -static const UINT8 defsyncs15[8] = {0x06,0x26,0x03,0x11,0x86,0x0f,0xc8,0x84}; +static const UINT8 defsyncs15[8] = {0x06,0x26,0x03,0x11,0x86,0x0f,0xc8,0x94}; static const UINT8 defsyncm24[8] = {0x10,0x4e,0x07,0x25,0x07,0x07,0x90,0x65}; static const UINT8 defsyncs24[8] = {0x06,0x26,0x03,0x11,0x83,0x07,0x90,0x65}; @@ -115,35 +115,54 @@ void gdc_paletteinit(void) { static void vectdraw(void) { - UINT32 csrw; - UINT16 textw; + UINT32 csrw; +const GDCVECT *vect; + REG16 textw; + REG8 ope; csrw = LOADINTELDWORD(gdc.s.para + GDC_CSRW); + vect = (GDCVECT *)(gdc.s.para + GDC_VECTW); textw = LOADINTELWORD(gdc.s.para + GDC_TEXTW); + ope = gdc.s.para[GDC_WRITE]; - if (gdc.s.para[GDC_VECTW] & 0x8) { - gdcsub_line(csrw, (GDCVECT *)(gdc.s.para + GDC_VECTW), - textw, gdc.s.para[GDC_WRITE]); - } - if (gdc.s.para[GDC_VECTW] & 0x20) { - gdcsub_circle(csrw, (GDCVECT *)(gdc.s.para + GDC_VECTW), - textw, gdc.s.para[GDC_WRITE]); - } - if (gdc.s.para[GDC_VECTW] & 0x40) { - gdcsub_box(csrw, (GDCVECT *)(gdc.s.para + GDC_VECTW), - textw, gdc.s.para[GDC_WRITE]); + if (vect->ope & 0x08) { + gdcsub_vectl(csrw, vect, textw, ope); + } + if (vect->ope & 0x10) { // undocumented + gdcsub_vectt(csrw, vect, textw, ope); + } + if (vect->ope & 0x20) { + gdcsub_vectc(csrw, vect, textw, ope); + } + if (vect->ope & 0x40) { + gdcsub_vectr(csrw, vect, textw, ope); } } static void textdraw(void) { - UINT32 csrw; + UINT32 csrw; +const GDCVECT *vect; + REG16 textw; + REG8 ope; - if (gdc.s.para[GDC_VECTW] & 0x10) { - csrw = LOADINTELDWORD(gdc.s.para + GDC_CSRW); - gdcsub_text(csrw, (GDCVECT *)(gdc.s.para + GDC_VECTW), - gdc.s.para + GDC_TEXTW, - gdc.s.para[GDC_WRITE]); + csrw = LOADINTELDWORD(gdc.s.para + GDC_CSRW); + vect = (GDCVECT *)(gdc.s.para + GDC_VECTW); + textw = gdc.s.para[GDC_TEXTW + 7]; + textw = (textw << 8) + textw; + ope = gdc.s.para[GDC_WRITE]; + + if (vect->ope & 0x08) { // undocumented + gdcsub_vectl(csrw, vect, textw, ope); + } + if (vect->ope & 0x10) { + gdcsub_text(csrw, vect, gdc.s.para + GDC_TEXTW, ope); + } + if (vect->ope & 0x20) { // undocumented + gdcsub_vectc(csrw, vect, textw, ope); + } + if (vect->ope & 0x40) { // undocumented + gdcsub_vectr(csrw, vect, textw, ope); } } @@ -154,8 +173,8 @@ void gdc_work(int id) { UINT i; BYTE data; - item = (id==GDCWORK_MASTER)?&gdc.m:&gdc.s; - dispflag = (id==GDCWORK_MASTER)?&gdcs.textdisp:&gdcs.grphdisp; + item = (id == GDCWORK_MASTER)?&gdc.m:&gdc.s; + dispflag = (id == GDCWORK_MASTER)?&gdcs.textdisp:&gdcs.grphdisp; for (i=0; icnt; i++) { data = (BYTE)item->fifo[i]; @@ -211,7 +230,6 @@ void gdc_work(int id) { textdraw(); } break; - } item->ptr = gdc_cmd[data].pos; item->rcv = gdc_cmd[data].outdatas; @@ -499,7 +517,7 @@ static REG8 IOINPCALL gdc_i60(UINT port) else { gdc_work(GDCWORK_MASTER); } -#ifdef SEARHC_SYNC +#ifdef SEARCH_SYNC if ((CPU_INPADRS) && (CPU_REMCLOCK >= 5)) { UINT16 jadr = 0xfa74; UINT16 memv; @@ -667,7 +685,7 @@ static REG8 IOINPCALL gdc_ia0(UINT port) gdc_work(GDCWORK_SLAVE); TRACEOUT(("gdc.s.cnt=%d", gdc.s.cnt)); } -#ifdef SEARHC_SYNC +#ifdef SEARCH_SYNC if ((CPU_INPADRS) && (CPU_REMCLOCK >= 5)) { UINT16 jadr = 0xfa74; UINT16 memv;