--- xmil/io/ppi.c 2004/08/12 11:03:09 1.10 +++ xmil/io/ppi.c 2004/08/17 14:46:37 1.16 @@ -1,6 +1,7 @@ #include "compiler.h" #include "pccore.h" #include "iocore.h" +#include "nevent.h" #include "makescrn.h" @@ -9,14 +10,22 @@ static REG8 getportb(void) { REG8 ret; - UINT v; + SINT32 clock; ret = cmt_test(); // | cmt_read(); // THUNDER BALL - v = pccore_getraster(NULL); - if (v < crtc.s.CRT_YL) { + clock = nevent_getwork(NEVENT_FRAMES); + if (corestat.vsync) { + clock += corestat.dispclock; + } + if (clock < crtc.e.dispclock) { ret |= 0x80; // 1:DISP } + clock -= crtc.e.vsyncstart; + if ((clock >= 0) && (clock < crtc.e.vpulseclock)) { + ret |= 0x04; // 1:V-SYNC + } + if (subcpu.IBF) { subcpu.IBF = 0; ret |= 0x40; // 1:SUB-CPU BUSY @@ -27,43 +36,30 @@ static REG8 getportb(void) { if (memio.ram) { ret |= 0x10; // 1:RAM } -#if 1 - if (!(v < crtc.e.vs)) { - ret |= 0x04; // V-SYNC - } -#else // ラプラステスト…VYSNCが長すぎるらしい - if (v_cnt == crtc.e.vs) { - ret |= 0x04; - } -#endif return(ret); } static void setportc(REG8 dat) { - REG8 oldc; - UINT8 xl; + REG8 modify; - oldc = ppi.portc; - if (crtc.s.TXT_XL == 40) { - oldc |= 0x40; - } - else { - oldc &= ~0x40; - } + modify = ppi.portc ^ dat; ppi.portc = dat; - // cmt_write((REG8)(dat & 1)); - if ((oldc & 0x20) && (!(dat & 0x20))) { + if ((modify & 0x20) && (!(dat & 0x20))) { iocore.s.mode = 1; } + if (modify & 0x40) { + crtc_setwidth((REG8)(dat & 0x40)); + } +#if 0 xl = ((dat & 0x40)?40:80); - if (crtc.s.TXT_XL != xl) { - crtc.s.TXT_XL = (UINT8)xl; -// crtc.s.GRP_XL = xl << 3; - vrambank_patch(); + if (crtc.s.reg[CRTCREG_HDISP] != xl) { + crtc.s.reg[CRTCREG_HDISP] = (UINT8)xl; + crtc_bankupdate(); scrnallflash = 1; } +#endif } @@ -120,14 +116,7 @@ REG8 IOINPCALL ppi_i(UINT port) { return(getportb()); case 2: -#if 1 - if (crtc.s.TXT_XL == 40) { - ppi.portc |= 0x40; - } - else { - ppi.portc &= ~0x40; - } -#endif + // mode? return(ppi.portc); case 3: @@ -144,7 +133,7 @@ void ppi_initialize(void) { ppi.porta = 0x00; ppi.portb = 0xff; ppi.portc = 0xff; - ppi.mode = 0x9b; + ppi.mode = 0x82; } void ppi_reset(void) {