--- np2/io/crtc.c 2003/12/08 00:55:32 1.3 +++ np2/io/crtc.c 2005/03/06 10:41:50 1.8 @@ -22,8 +22,8 @@ static void IOOUTCALL crtc_o7c(UINT port if (grcg.chip) { grcg.modereg = (UINT8)dat; grcg.counter = 0; - vramop.operate &= VOP_GRCGMASK; - vramop.operate |= ((dat & 0xc0) >> 4); + vramop.operate &= ~(3 << VOPBIT_GRCG); + vramop.operate |= ((dat & 0xc0) >> (6 - VOPBIT_GRCG)); if (grcg.chip >= 2) { grcg.gdcwithgrcg = (dat >> 4) & 0x0c; } @@ -60,14 +60,41 @@ static const IOINP crtci70[8] = { NULL, NULL, NULL, NULL, NULL, NULL, crtc_i7c, NULL}; + +void crtc_biosreset(void) { + + if (!(np2cfg.dipsw[0] & 0x01)) { + crtc.reg.pl = 0; + crtc.reg.bl = 0x0f; + crtc.reg.cl = 0x10; + crtc.reg.ssl = 0; + } + else { + crtc.reg.pl = 0; + crtc.reg.bl = 0x07; + crtc.reg.cl = 0x08; + crtc.reg.ssl = 0; + } + gdcs.textdisp |= GDCSCRN_ALLDRAW; + + grcg.modereg = 0; + grcg.counter = 0; + vramop.operate &= ~(3 << VOPBIT_GRCG); + grcg.gdcwithgrcg = 0; + ZeroMemory(grcg.tile, sizeof(grcg.tile)); + i286_vram_dispatch(vramop.operate); +} + void crtc_reset(void) { ZeroMemory(&grcg, sizeof(grcg)); ZeroMemory(&crtc, sizeof(crtc)); - crtc.reg.pl = 0x00; - crtc.reg.bl = 0x0f; - crtc.reg.cl = 0x10; +#if defined(SUPPORT_PC9821) + grcg.chip = 3; // PC-9821は EGC必須 +#else grcg.chip = np2cfg.grcg & 3; // GRCG動作のコピー +#endif + crtc_biosreset(); } void crtc_bind(void) {