|
|
| version 1.18, 2004/08/18 08:08:13 | version 1.19, 2005/02/04 06:42:11 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "scrnmng.h" | |
| #include "z80core.h" | #include "z80core.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| Line 49 static const GDCCLK gdcclk[] = { | Line 48 static const GDCCLK gdcclk[] = { |
| static void crtc_bankupdate(void) { | static void crtc_bankupdate(void) { |
| if (!(crtc.s.SCRN_BITS & SCRN_ACCESSVRAM)) { | if (!(crtc.s.SCRN_BITS & SCRN_ACCESSVRAM)) { |
| crtc.e.gram = gram + GRAM_BANK0; | crtc.e.gramacc = gram + GRAM_BANK0; |
| crtc.e.updatebit = UPDATE_VRAM0; | crtc.e.updatebit = UPDATE_VRAM0; |
| } | } |
| else { | else { |
| crtc.e.gram = gram + GRAM_BANK1; | crtc.e.gramacc = gram + GRAM_BANK1; |
| crtc.e.updatebit = UPDATE_VRAM1; | crtc.e.updatebit = UPDATE_VRAM1; |
| } | } |
| } | } |
| Line 237 static void crtc_timingupdate(void) { | Line 236 static void crtc_timingupdate(void) { |
| UINT32 fontclock; | UINT32 fontclock; |
| UINT yl; | UINT yl; |
| SINT32 vsyncstart; | |
| // とりあえず…ね | // とりあえず…ね |
| crtc.e.pos = crtc.s.reg[CRTCREG_POSL] | |
| + ((crtc.s.reg[CRTCREG_POSH] & 7) << 8); | |
| crtc.e.rasterdisp8 = (crtc.e.rasterclock8 * 40) / 56; | crtc.e.rasterdisp8 = (crtc.e.rasterclock8 * 40) / 56; |
| fontclock = (crtc.s.reg[CRTCREG_CHRCY] & 0x1f) + 1; | fontclock = (crtc.s.reg[CRTCREG_CHRCY] & 0x1f) + 1; |
| Line 247 static void crtc_timingupdate(void) { | Line 250 static void crtc_timingupdate(void) { |
| // YsIIIが yl==0で disp信号見る…なんで? | // YsIIIが yl==0で disp信号見る…なんで? |
| yl = (crtc.s.reg[CRTCREG_VDISP] & 0x7f); | yl = (crtc.s.reg[CRTCREG_VDISP] & 0x7f); |
| crtc.e.yl = yl; | crtc.e.yl = yl; |
| crtc.e.dispclock = fontclock * max(yl, 1); | iocore.e.dispclock = fontclock * max(yl, 1); |
| crtc.e.vsyncstart = fontclock * ((crtc.s.reg[CRTCREG_VSYNC] & 0x7f) + 1); | vsyncstart = fontclock * ((crtc.s.reg[CRTCREG_VSYNC] & 0x7f) + 1); |
| crtc.e.vpulseclock = ((crtc.s.reg[CRTCREG_PULSE] >> 4) | iocore.e.vsyncstart = vsyncstart; |
| #if !defined(MAINFRAMES_OLD) | |
| iocore.e.vsyncend = vsyncstart + (((crtc.s.reg[CRTCREG_PULSE] >> 4) | |
| * crtc.e.rasterclock8) >> 8); | |
| neitem_mainframes(NEVENT_FRAMES); | |
| #else | |
| iocore.e.vpulseclock = ((crtc.s.reg[CRTCREG_PULSE] >> 4) | |
| * crtc.e.rasterclock8) >> 8; | * crtc.e.rasterclock8) >> 8; |
| #endif | |
| crtc.e.pos = crtc.s.reg[CRTCREG_POSL] | |
| + ((crtc.s.reg[CRTCREG_POSH] & 7) << 8); | |
| } | } |
| Line 271 void IOOUTCALL crtc_o(UINT port, REG8 va | Line 278 void IOOUTCALL crtc_o(UINT port, REG8 va |
| crtc.s.reg[crtc.s.regnum] = value; | crtc.s.reg[crtc.s.regnum] = value; |
| crtc_clkupdate(); | crtc_clkupdate(); |
| crtc_timingupdate(); | crtc_timingupdate(); |
| makescrn.remakeattr = 1; | crtc.e.remakeattr = 1; |
| scrnallflash = 1; | crtc.e.scrnallflash = 1; |
| } | } |
| } | } |
| } | } |
| Line 292 void IOOUTCALL scrn_o(UINT port, REG8 va | Line 299 void IOOUTCALL scrn_o(UINT port, REG8 va |
| } | } |
| if (modify & SCRN_DISPCHANGE) { | if (modify & SCRN_DISPCHANGE) { |
| // pal_reset(); // なんで? | // pal_reset(); // なんで? |
| scrnallflash = 1; | crtc.e.scrnallflash = 1; |
| crtc_dispupdate(); | crtc_dispupdate(); |
| crtc_clkupdate(); | crtc_clkupdate(); |
| crtc_timingupdate(); | crtc_timingupdate(); |
| makescrn.palandply = 1; | crtc.e.palandply = 1; |
| } | } |
| (void)port; | (void)port; |
| } | } |
| Line 314 void IOOUTCALL ply_o(UINT port, REG8 val | Line 321 void IOOUTCALL ply_o(UINT port, REG8 val |
| if (crtc.s.rgbp[CRTC_PLY] != value) { | if (crtc.s.rgbp[CRTC_PLY] != value) { |
| crtc.s.rgbp[CRTC_PLY] = value; | crtc.s.rgbp[CRTC_PLY] = value; |
| makescrn.palandply = 1; | crtc.e.palandply = 1; |
| #if defined(SUPPORT_PALEVENT) | #if defined(SUPPORT_PALEVENT) |
| if ((!corestat.vsync) && (palevent.events < SUPPORT_PALEVENT)) { | if ((!corestat.vsync) && (palevent.events < SUPPORT_PALEVENT)) { |
| PAL1EVENT *e = palevent.event + palevent.events; | PAL1EVENT *e = palevent.event + palevent.events; |
| Line 346 void IOOUTCALL palette_o(UINT port, REG8 | Line 353 void IOOUTCALL palette_o(UINT port, REG8 |
| num = (port >> 8) & 3; | num = (port >> 8) & 3; |
| if (crtc.s.rgbp[num] != value) { | if (crtc.s.rgbp[num] != value) { |
| crtc.s.rgbp[num] = value; | crtc.s.rgbp[num] = value; |
| makescrn.palandply = 1; | crtc.e.palandply = 1; |
| #if defined(SUPPORT_PALEVENT) | #if defined(SUPPORT_PALEVENT) |
| if ((!corestat.vsync) && (palevent.events < SUPPORT_PALEVENT)) { | if ((!corestat.vsync) && (palevent.events < SUPPORT_PALEVENT)) { |
| PAL1EVENT *e = palevent.event + palevent.events; | PAL1EVENT *e = palevent.event + palevent.events; |
| Line 402 void IOOUTCALL blackctrl_o(UINT port, RE | Line 409 void IOOUTCALL blackctrl_o(UINT port, RE |
| if (crtc.s.rgbp[CRTC_BLACK] != value) { | if (crtc.s.rgbp[CRTC_BLACK] != value) { |
| crtc.s.rgbp[CRTC_BLACK] = value; | crtc.s.rgbp[CRTC_BLACK] = value; |
| makescrn.palandply = 1; | crtc.e.palandply = 1; |
| #if defined(SUPPORT_PALEVENT) | #if defined(SUPPORT_PALEVENT) |
| if ((!corestat.vsync) && (palevent.events < SUPPORT_PALEVENT)) { | if ((!corestat.vsync) && (palevent.events < SUPPORT_PALEVENT)) { |
| PAL1EVENT *e = palevent.event + palevent.events; | PAL1EVENT *e = palevent.event + palevent.events; |
| Line 542 void crtc_update(void) { | Line 549 void crtc_update(void) { |
| crtc_dispupdate(); | crtc_dispupdate(); |
| crtc_clkupdate(); | crtc_clkupdate(); |
| crtc_timingupdate(); | crtc_timingupdate(); |
| makescrn.palandply = 1; | crtc.e.palandply = 1; |
| scrnallflash = 1; | crtc.e.scrnallflash = 1; |
| } | } |
| void crtc_setwidth(REG8 width40) { | void crtc_setwidth(REG8 width40) { |
| Line 594 void crtc_reset(void) { | Line 601 void crtc_reset(void) { |
| // } | // } |
| pal_reset(); | pal_reset(); |
| makescrn.palandply = 1; | crtc.e.palandply = 1; |
| crtc_update(); | crtc_update(); |
| } | } |
| Line 602 void crtc_forcesetwidth(REG8 width) { | Line 609 void crtc_forcesetwidth(REG8 width) { |
| crtc.s.reg[CRTCREG_HDISP] = (UINT8)width; | crtc.s.reg[CRTCREG_HDISP] = (UINT8)width; |
| crtc_dispupdate(); | crtc_dispupdate(); |
| scrnallflash = 1; | crtc.e.scrnallflash = 1; |
| } | } |