--- xmil/io/pcg.c 2004/08/04 15:18:26 1.3 +++ xmil/io/pcg.c 2004/08/13 04:08:33 1.8 @@ -2,8 +2,7 @@ #include "z80core.h" #include "pccore.h" #include "iocore.h" -#include "x1_io.h" -#include "x1_crtc.h" +#include "nevent.h" #include "vram.h" #include "font.h" @@ -50,14 +49,22 @@ static UINT knj_offset(void) { static UINT nowsyncoffset(void) { + SINT32 clock; + UINT h; + UINT v; UINT ret; + UINT line; - ret = (((v_cnt - crtc.CRT_YL) / crtc.fnty) + crtc.TXT_YL) * crtc.TXT_XL - + crtc.TXT_TOP; - if (pccore.HSYNC_CLK) { - ret += (h_cnt * crtc.TXT_XL) / pccore.HSYNC_CLK; - } - + clock = nevent_getwork(NEVENT_FRAMES); + if (corestat.vsync) { + clock += corestat.dispclock; + } + v = clock / RASTER_CLOCK; + h = clock - (v * RASTER_CLOCK); + ret = v / crtc.e.fonty; + line = v - (ret * crtc.e.fonty); + ret = (ret * crtc.s.reg[CRTCREG_HDISP]) + crtc.e.pos; + ret += (h * crtc.s.reg[CRTCREG_HDISP]) / RASTER_CLOCK; if (ret >= 0x0800) { ret = 0x07ff; // オーバーフロー } @@ -71,7 +78,7 @@ void IOOUTCALL pcg_o(UINT port, REG8 val UINT off; UINT l; - if (crtc.SCRN_BITS & SCRN_PCGMODE) { + if (crtc.s.SCRN_BITS & SCRN_PCGMODE) { off = pcg_offset(); chr = tram[TRAM_ANK + off]; if (tram[TRAM_KNJ + off] & 0x90) { @@ -124,18 +131,18 @@ REG8 IOINPCALL pcg_i(UINT port) { UINT off; int l; - BYTE chr,knj,val; + UINT8 chr,knj,val; val = 0xff; - if (crtc.SCRN_BITS & SCRN_PCGMODE) { + if (crtc.s.SCRN_BITS & SCRN_PCGMODE) { l = port & 0x0f; if ((port & 0xff00) == 0x1400) { off = knj_offset(); chr = tram[TRAM_ANK + off]; knj = tram[TRAM_KNJ + off]; if (knj & 0x80) { - DWORD p; - p = ((((DWORD)knj << 8) | chr) & 0x1fff) << 4; + UINT p; + p = (((knj << 8) | chr) & 0x1fff) << 4; if (knj & 0x40) { val = font_knjx1t[p + l + FONTX1T_LR]; } @@ -143,7 +150,7 @@ REG8 IOINPCALL pcg_i(UINT port) { val = font_knjx1t[p + l]; } } - else if (crtc.SCRN_BITS & SCRN_CPUFONT) { + else if (crtc.s.SCRN_BITS & SCRN_CPUFONT) { val = font_txt[(chr << 4) + l]; } else {