|
|
| version 1.13, 2004/08/20 23:01:16 | version 1.14, 2005/02/04 06:42:11 |
|---|---|
| Line 2 | Line 2 |
| #include "z80core.h" | #include "z80core.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "nevent.h" | |
| #include "vram.h" | #include "vram.h" |
| #include "makescrn.h" | #include "makescrn.h" |
| #include "font.h" | #include "font.h" |
| Line 13 static void waithsync(void) { | Line 12 static void waithsync(void) { |
| SINT32 clock; | SINT32 clock; |
| SINT32 h; | SINT32 h; |
| // 必ず hsyncを待つ? | clock = (CPU_CLOCKCOUNT - iocore.e.framestartclock) << 8; |
| // if (corestat.vsync) { | |
| // return; | |
| // } | |
| clock = nevent_getwork(NEVENT_FRAMES) << 8; | |
| h = clock % crtc.e.rasterclock8; | h = clock % crtc.e.rasterclock8; |
| h = crtc.e.rasterdisp8 - h; | h = crtc.e.rasterdisp8 - h; |
| if (h < 0) { | if (h < 0) { |
| Line 29 static void waithsync(void) { | Line 24 static void waithsync(void) { |
| static UINT pcg_offset(void) { | static UINT pcg_offset(void) { |
| if (tram[TRAM_ATR + 0x07ff] & 0x20) { | if (TRAM_ATR(0x07ff) & 0x20) { |
| return(0x7ff); | return(0x7ff); |
| } | } |
| if (tram[TRAM_ATR + 0x03ff] & 0x20) { | if (TRAM_ATR(0x03ff) & 0x20) { |
| return(0x3ff); | return(0x3ff); |
| } | } |
| if (tram[TRAM_ATR + 0x05ff] & 0x20) { | if (TRAM_ATR(0x05ff) & 0x20) { |
| return(0x5ff); | return(0x5ff); |
| } | } |
| if (tram[TRAM_ATR + 0x01ff] & 0x20) { | if (TRAM_ATR(0x01ff) & 0x20) { |
| return(0x1ff); | return(0x1ff); |
| } | } |
| return(0x7ff); | return(0x7ff); |
| Line 46 static UINT pcg_offset(void) { | Line 41 static UINT pcg_offset(void) { |
| static UINT knj_offset(void) { | static UINT knj_offset(void) { |
| if (!(tram[TRAM_ATR + 0x07ff] & 0x20)) { | if (!(TRAM_ATR(0x07ff) & 0x20)) { |
| return(0x7ff); | return(0x7ff); |
| } | } |
| if (!(tram[TRAM_ATR + 0x03ff] & 0x20)) { | if (!(TRAM_ATR(0x03ff) & 0x20)) { |
| return(0x3ff); | return(0x3ff); |
| } | } |
| if (!(tram[TRAM_ATR + 0x05ff] & 0x20)) { | if (!(TRAM_ATR(0x05ff) & 0x20)) { |
| return(0x5ff); | return(0x5ff); |
| } | } |
| if (!(tram[TRAM_ATR + 0x01ff] & 0x20)) { | if (!(TRAM_ATR(0x01ff) & 0x20)) { |
| return(0x1ff); | return(0x1ff); |
| } | } |
| return(0x7ff); | return(0x7ff); |
| Line 68 static UINT nowsyncoffset(UINT *line) { | Line 63 static UINT nowsyncoffset(UINT *line) { |
| UINT v; | UINT v; |
| UINT ret; | UINT ret; |
| clock = nevent_getwork(NEVENT_FRAMES); | clock = (CPU_CLOCKCOUNT - iocore.e.framestartclock) << 8; |
| if (corestat.vsync) { | |
| clock += corestat.dispclock; | |
| } | |
| clock = clock << 8; | |
| v = clock / crtc.e.rasterclock8; | v = clock / crtc.e.rasterclock8; |
| h = clock - (v * crtc.e.rasterclock8); | h = clock - (v * crtc.e.rasterclock8); |
| if (crtc.s.SCRN_BITS & SCRN_24KHZ) { | if (crtc.s.SCRN_BITS & SCRN_24KHZ) { |
| Line 98 void IOOUTCALL pcg_o(UINT port, REG8 val | Line 89 void IOOUTCALL pcg_o(UINT port, REG8 val |
| if (crtc.s.SCRN_BITS & SCRN_PCGMODE) { | if (crtc.s.SCRN_BITS & SCRN_PCGMODE) { |
| waithsync(); | waithsync(); |
| off = pcg_offset(); | off = pcg_offset(); |
| chr = tram[TRAM_ANK + off]; | chr = TRAM_ANK(off); |
| if (tram[TRAM_KNJ + off] & 0x90) { | if (TRAM_KNJ(off) & 0x90) { |
| chr = chr & (~1); | chr = chr & (~1); |
| line = port & 15; | line = port & 15; |
| } | } |
| Line 109 void IOOUTCALL pcg_o(UINT port, REG8 val | Line 100 void IOOUTCALL pcg_o(UINT port, REG8 val |
| } | } |
| else { | else { |
| off = nowsyncoffset(&line); | off = nowsyncoffset(&line); |
| chr = tram[TRAM_ANK + off]; | chr = TRAM_ANK(off); |
| } | } |
| chr += (port & 0x0300) - 0x100; | chr += (port & 0x0300) - 0x100; |
| if (pcg.d[(chr << 3) + line] != value) { | if (pcg.d[(chr << 3) + line] != value) { |
| pcg.d[(chr << 3) + line] = value; | pcg.d[(chr << 3) + line] = value; |
| scrnallflash = TRUE; | crtc.e.scrnallflash = TRUE; |
| } | } |
| } | } |
| Line 133 REG8 IOINPCALL pcg_i(UINT port) { | Line 124 REG8 IOINPCALL pcg_i(UINT port) { |
| line = port & 0x0f; | line = port & 0x0f; |
| if (!upper) { | if (!upper) { |
| off = knj_offset(); | off = knj_offset(); |
| chr = tram[TRAM_ANK + off]; | chr = TRAM_ANK(off); |
| knj = tram[TRAM_KNJ + off]; | knj = TRAM_KNJ(off); |
| if (knj & 0x80) { | if (knj & 0x80) { |
| addr = ((((knj & 0x1f) << 8) + chr) << 4) + line; | addr = ((((knj & 0x1f) << 8) + chr) << 4) + line; |
| if (knj & 0x40) { | if (knj & 0x40) { |
| Line 151 REG8 IOINPCALL pcg_i(UINT port) { | Line 142 REG8 IOINPCALL pcg_i(UINT port) { |
| } | } |
| else { | else { |
| off = pcg_offset(); | off = pcg_offset(); |
| chr = tram[TRAM_ANK + off]; | chr = TRAM_ANK(off); |
| if (tram[TRAM_KNJ + off] & 0x90) { | if (TRAM_KNJ(off) & 0x90) { |
| chr = chr & (~1); | chr = chr & (~1); |
| } | } |
| else { | else { |
| Line 162 REG8 IOINPCALL pcg_i(UINT port) { | Line 153 REG8 IOINPCALL pcg_i(UINT port) { |
| } | } |
| else { | else { |
| off = nowsyncoffset(&line); | off = nowsyncoffset(&line); |
| chr = tram[TRAM_ANK + off]; | chr = TRAM_ANK(off); |
| } | } |
| if (!upper) { | if (!upper) { |
| return(font_ank[(chr << 3) + line]); | return(font_ank[(chr << 3) + line]); |