--- np2/io/gdc.c 2003/10/17 07:17:20 1.2 +++ np2/io/gdc.c 2003/11/28 08:01:33 1.6 @@ -4,16 +4,14 @@ #include "memory.h" #include "pccore.h" #include "iocore.h" -#include "gdc_cmd.tbl" -#include "palettes.h" #include "vram.h" +#include "palettes.h" +#include "gdc_cmd.tbl" #define SEARHC_SYNC #define TURE_SYNC -extern BYTE screenupdate; - static const BYTE defdegpal[4] = {0x04,0x15,0x26,0x37}; static const BYTE defsync[8] = {0x10,0x4e,0x07,0x25,0x07,0x07,0x90,0x65}; @@ -47,15 +45,20 @@ void gdc_setanalogpal(int color, int rgb PAL1EVENT *event; ptr = ((BYTE *)(gdc.anapal + color)) + rgb; - if ((*ptr ^ value) & 0x0f) { + if (((*ptr) ^ value) & 0x0f) { gdcs.palchange = GDCSCRN_REDRAW; - if ((palevent.events < PALEVENTMAX) && (!gdc.vsync)) { - event = palevent.event + palevent.events; - event->clock = nevent.item[NEVENT_FLAMES].clock - - (nevent.baseclock - nevent.remainclock); - event->color = (color * sizeof(RGB32)) + rgb; - event->value = value; - palevent.events++; + if (palevent.events < PALEVENTMAX) { + if (!gdc.vsync) { + event = palevent.event + palevent.events; + event->clock = nevent.item[NEVENT_FLAMES].clock - + (I286_BASECLOCK - I286_REMCLOCK); + event->color = (color * sizeof(RGB32)) + rgb; + event->value = value; + palevent.events++; + } + else { + palevent.vsyncpal = 1; + } } } *ptr = value; @@ -389,7 +392,7 @@ static BYTE IOINPCALL gdc_i60(UINT port) gdc_work(GDCWORK_MASTER); } #ifdef SEARHC_SYNC - if ((i286reg.inport) && (nevent.remainclock >= 5)) { + if ((i286reg.inport) && (I286_REMCLOCK >= 5)) { UINT16 jadr = 0xfa74; UINT16 memv; memv = i286_memoryread_w(i286reg.inport); @@ -402,20 +405,19 @@ static BYTE IOINPCALL gdc_i60(UINT port) memv = i286_memoryread_w(i286reg.inport + 2); if (memv == jadr) { // je if (!gdc.vsync) { - nevent.remainclock = -1; + I286_REMCLOCK = -1; } } else if (memv == (jadr + 1)) { // jne if (gdc.vsync) { - nevent.remainclock = -1; + I286_REMCLOCK = -1; } } } } #endif #ifdef TURE_SYNC // クロックイベントの誤差修正 - if (nevent.item[NEVENT_FLAMES].clock < - (nevent.baseclock - nevent.remainclock)) { + if (nevent.item[NEVENT_FLAMES].clock < (I286_BASECLOCK - I286_REMCLOCK)) { ret ^= 0x20; } #endif @@ -451,6 +453,7 @@ static void IOOUTCALL gdc_oa0(UINT port, if (gdc.s.cnt < GDCCMD_MAX) { gdc.s.fifo[gdc.s.cnt++] = dat; } +// TRACEOUT(("GDC-B %.2x", dat)); if (gdc.s.paracb) { // ver0.29 gdc_work(GDCWORK_SLAVE); } @@ -462,6 +465,7 @@ static void IOOUTCALL gdc_oa2(UINT port, if (gdc.s.cnt < GDCCMD_MAX) { gdc.s.fifo[gdc.s.cnt++] = 0x100 | dat; } +// TRACEOUT(("GDC-A %.2x", dat)); gdc_work(GDCWORK_SLAVE); (void)port; } @@ -555,7 +559,7 @@ static BYTE IOINPCALL gdc_ia0(UINT port) gdc_work(GDCWORK_SLAVE); } #ifdef SEARHC_SYNC - if ((i286reg.inport) && (nevent.remainclock >= 5)) { + if ((i286reg.inport) && (I286_REMCLOCK >= 5)) { UINT16 jadr = 0xfa74; UINT16 memv; memv = i286_memoryread_w(i286reg.inport); @@ -568,20 +572,19 @@ static BYTE IOINPCALL gdc_ia0(UINT port) memv = i286_memoryread_w(i286reg.inport + 2); if (memv == jadr) { // je if (!gdc.vsync) { - nevent.remainclock = -1; + I286_REMCLOCK = -1; } } else if (memv == (jadr + 1)) { // jne if (gdc.vsync) { - nevent.remainclock = -1; + I286_REMCLOCK = -1; } } } } #endif #ifdef TURE_SYNC // クロックイベントの誤差修正 - if (nevent.item[NEVENT_FLAMES].clock < - (nevent.baseclock - nevent.remainclock)) { + if (nevent.item[NEVENT_FLAMES].clock < (I286_BASECLOCK - I286_REMCLOCK)) { ret ^= 0x20; } #endif