--- xmil/io/pcg.c 2004/08/01 05:31:30 1.1 +++ xmil/io/pcg.c 2004/08/12 20:09:42 1.7 @@ -2,9 +2,8 @@ #include "z80core.h" #include "pccore.h" #include "iocore.h" -#include "x1_io.h" -#include "x1_crtc.h" -#include "x1_vram.h" +#include "nevent.h" +#include "vram.h" #include "font.h" @@ -16,16 +15,16 @@ static void pcgsync(void) { static UINT pcg_offset(void) { - if (TXT_RAM[TEXT_ATR + 0x07ff] & 0x20) { + if (tram[TRAM_ATR + 0x07ff] & 0x20) { return(0x7ff); } - if (TXT_RAM[TEXT_ATR + 0x03ff] & 0x20) { + if (tram[TRAM_ATR + 0x03ff] & 0x20) { return(0x3ff); } - if (TXT_RAM[TEXT_ATR + 0x05ff] & 0x20) { + if (tram[TRAM_ATR + 0x05ff] & 0x20) { return(0x5ff); } - if (TXT_RAM[TEXT_ATR + 0x01ff] & 0x20) { + if (tram[TRAM_ATR + 0x01ff] & 0x20) { return(0x1ff); } return(0x7ff); @@ -33,16 +32,16 @@ static UINT pcg_offset(void) { static UINT knj_offset(void) { - if (!(TXT_RAM[TEXT_ATR + 0x07ff] & 0x20)) { + if (!(tram[TRAM_ATR + 0x07ff] & 0x20)) { return(0x7ff); } - if (!(TXT_RAM[TEXT_ATR + 0x03ff] & 0x20)) { + if (!(tram[TRAM_ATR + 0x03ff] & 0x20)) { return(0x3ff); } - if (!(TXT_RAM[TEXT_ATR + 0x05ff] & 0x20)) { + if (!(tram[TRAM_ATR + 0x05ff] & 0x20)) { return(0x5ff); } - if (!(TXT_RAM[TEXT_ATR + 0x01ff] & 0x20)) { + if (!(tram[TRAM_ATR + 0x01ff] & 0x20)) { return(0x1ff); } return(0x7ff); @@ -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,10 +78,10 @@ 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 = TXT_RAM[TEXT_ANK + off]; - if (TXT_RAM[TEXT_KNJ + off] & 0x90) { + chr = tram[TRAM_ANK + off]; + if (tram[TRAM_KNJ + off] & 0x90) { chr &= 0xfe; l = port & 15; } @@ -97,7 +104,7 @@ void IOOUTCALL pcg_o(UINT port, REG8 val } else { off = nowsyncoffset(); // 990622 puni - chr = TXT_RAM[TEXT_ANK + off]; + chr = tram[TRAM_ANK + off]; if (pcg.r.vsync) { pcgsync(); } @@ -122,17 +129,17 @@ void IOOUTCALL pcg_o(UINT port, REG8 val REG8 IOINPCALL pcg_i(UINT port) { - WORD off; + UINT off; int l; BYTE 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 = TXT_RAM[off + TEXT_ANK]; - knj = TXT_RAM[off + TEXT_KNJ]; + chr = tram[TRAM_ANK + off]; + knj = tram[TRAM_KNJ + off]; if (knj & 0x80) { DWORD p; p = ((((DWORD)knj << 8) | chr) & 0x1fff) << 4; @@ -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 { @@ -152,8 +159,8 @@ REG8 IOINPCALL pcg_i(UINT port) { } else { off = pcg_offset(); - chr = TXT_RAM[TEXT_ANK + off]; - if (TXT_RAM[TEXT_KNJ + off] & 0x90) { + chr = tram[TRAM_ANK + off]; + if (tram[TRAM_KNJ + off] & 0x90) { chr &= 0xfe; } else { @@ -176,7 +183,7 @@ REG8 IOINPCALL pcg_i(UINT port) { } else { off = nowsyncoffset(); // 990622 puni - chr = TXT_RAM[TEXT_ANK + off]; + chr = tram[TRAM_ANK + off]; if (pcg.r.vsync) { pcgsync(); }