| version 1.38, 2004/06/18 07:42:13 | version 1.46, 2007/12/16 14:58:24 | 
| Line 9 | Line 9 | 
 |  |  | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| BYTE    GBON_PTN; | UINT8   GBON_PTN; | 
| BYTE    GBBCC; | UINT8   GBBCC; | 
| BYTE    GBDOTU; | UINT8   GBDOTU; | 
| BYTE    GBDSP; | UINT8   GBDSP; | 
| BYTE    GBCPC[4]; | UINT8   GBCPC[4]; | 
| BYTE    GBSX1[2]; | UINT8   GBSX1[2]; | 
| BYTE    GBSY1[2]; | UINT8   GBSY1[2]; | 
| BYTE    GBLNG1[2]; | UINT8   GBLNG1[2]; | 
| BYTE    GBWDPA[2]; | UINT8   GBWDPA[2]; | 
| BYTE    GBRBUF[2][3]; | UINT8   GBRBUF[2][3]; | 
| BYTE    GBSX2[2]; | UINT8   GBSX2[2]; | 
| BYTE    GBSY2[2]; | UINT8   GBSY2[2]; | 
| BYTE    GBMDOT[2]; | UINT8   GBMDOT[2]; | 
| BYTE    GBCIR[2]; | UINT8   GBCIR[2]; | 
| BYTE    GBLNG2[2]; | UINT8   GBLNG2[2]; | 
| BYTE    GBMDOTI[8]; | UINT8   GBMDOTI[8]; | 
| BYTE    GBDTYP; | UINT8   GBDTYP; | 
| BYTE    GBFILL; | UINT8   GBFILL; | 
 | } UCWTBL; | } UCWTBL; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| Line 107  const CRTDATA *crt; | Line 107  const CRTDATA *crt; | 
 | gdc.mode1 &= ~(0x2d); | gdc.mode1 &= ~(0x2d); | 
 | mem[MEMB_CRT_STS_FLAG] = mode; | mem[MEMB_CRT_STS_FLAG] = mode; | 
 | crt = crtdata; | crt = crtdata; | 
| if (!(np2cfg.dipsw[0] & 1)) { | if (!(pccore.dipsw[0] & 1)) { | 
 | mem[MEMB_CRT_STS_FLAG] |= 0x80; | mem[MEMB_CRT_STS_FLAG] |= 0x80; | 
 | gdc.mode1 |= 0x08; | gdc.mode1 |= 0x08; | 
 | crt += 2; | crt += 2; | 
| Line 137  void bios0x18_0c(void) { | Line 137  void bios0x18_0c(void) { | 
 |  |  | 
 | if (!(gdcs.textdisp & GDCSCRN_ENABLE)) { | if (!(gdcs.textdisp & GDCSCRN_ENABLE)) { | 
 | gdcs.textdisp |= GDCSCRN_ENABLE; | gdcs.textdisp |= GDCSCRN_ENABLE; | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 | } | } | 
 | } | } | 
 |  |  | 
 | static void bios0x18_0f(UINT seg, UINT off, REG8 num, REG8 cnt) { | static void bios0x18_0f(UINT seg, UINT off, REG8 num, REG8 cnt) { | 
 |  |  | 
| BYTE    *p; | UINT8   *p; | 
 | UINT    raster; | UINT    raster; | 
 | UINT    t; | UINT    t; | 
 |  |  | 
| Line 173  static void bios0x18_0f(UINT seg, UINT o | Line 173  static void bios0x18_0f(UINT seg, UINT o | 
 | #endif | #endif | 
 |  |  | 
 | while((cnt--) && (p < (gdc.m.para + GDC_SCROLL + 0x10))) { | while((cnt--) && (p < (gdc.m.para + GDC_SCROLL + 0x10))) { | 
| t = MEML_READ16(seg, off); | t = MEMR_READ16(seg, off); | 
 | t >>= 1; | t >>= 1; | 
 | STOREINTELWORD(p, t); | STOREINTELWORD(p, t); | 
| t = MEML_READ16(seg, off + 2); | t = MEMR_READ16(seg, off + 2); | 
 | t *= raster; | t *= raster; | 
 | STOREINTELWORD(p + 2, t); | STOREINTELWORD(p + 2, t); | 
 | off += 4; | off += 4; | 
 | p += 4; | p += 4; | 
 | } | } | 
 | gdcs.textdisp |= GDCSCRN_ALLDRAW2; | gdcs.textdisp |= GDCSCRN_ALLDRAW2; | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 | } | } | 
 |  |  | 
 | void bios0x18_10(REG8 curdel) { | void bios0x18_10(REG8 curdel) { | 
| Line 207  void bios0x18_10(REG8 curdel) { | Line 207  void bios0x18_10(REG8 curdel) { | 
 | REG16 bios0x18_14(REG16 seg, REG16 off, REG16 code) { | REG16 bios0x18_14(REG16 seg, REG16 off, REG16 code) { | 
 |  |  | 
 | UINT16  size; | UINT16  size; | 
| const BYTE      *p; | const UINT8     *p; | 
| BYTE    buf[32]; | UINT8   buf[32]; | 
 | UINT    i; | UINT    i; | 
 |  |  | 
 | switch(code >> 8) { | switch(code >> 8) { | 
 | case 0x00:                      // 8x8 | case 0x00:                      // 8x8 | 
 | size = 0x0101; | size = 0x0101; | 
| MEML_WRITE16(seg, off, 0x0101); | MEMR_WRITE16(seg, off, 0x0101); | 
 | p = fontrom + 0x82000 + ((code & 0xff) << 4); | p = fontrom + 0x82000 + ((code & 0xff) << 4); | 
| MEML_WRITESTR(seg, off + 2, p, 8); | MEMR_WRITES(seg, off + 2, p, 8); | 
 | break; | break; | 
 |  |  | 
 | //              case 0x28: | //              case 0x28: | 
| Line 224  const BYTE *p; | Line 224  const BYTE *p; | 
 | case 0x2a: | case 0x2a: | 
 | case 0x2b: | case 0x2b: | 
 | size = 0x0102; | size = 0x0102; | 
| MEML_WRITE16(seg, off, 0x0102); | MEMR_WRITE16(seg, off, 0x0102); | 
 | p = fontrom; | p = fontrom; | 
 | p += (code & 0x7f) << 12; | p += (code & 0x7f) << 12; | 
 | p += (((code >> 8) - 0x20) & 0x7f) << 4; | p += (((code >> 8) - 0x20) & 0x7f) << 4; | 
| MEML_WRITESTR(seg, off + 2, p, 16); | MEMR_WRITES(seg, off + 2, p, 16); | 
 | break; | break; | 
 |  |  | 
 | case 0x80:                      // 8x16 ANK | case 0x80:                      // 8x16 ANK | 
 | size = 0x0102; | size = 0x0102; | 
 | p = fontrom + 0x80000 + ((code & 0xff) << 4); | p = fontrom + 0x80000 + ((code & 0xff) << 4); | 
| MEML_WRITESTR(seg, off + 2, p, 16); | MEMR_WRITES(seg, off + 2, p, 16); | 
 | break; | break; | 
 |  |  | 
 | default: | default: | 
| Line 246  const BYTE *p; | Line 246  const BYTE *p; | 
 | buf[i*2+0] = *p; | buf[i*2+0] = *p; | 
 | buf[i*2+1] = *(p+0x800); | buf[i*2+1] = *(p+0x800); | 
 | } | } | 
| MEML_WRITESTR(seg, off + 2, buf, 32); | MEMR_WRITES(seg, off + 2, buf, 32); | 
 | break; | break; | 
 | } | } | 
| MEML_WRITE16(seg, off, size); | MEMR_WRITE16(seg, off, size); | 
 | return(size); | return(size); | 
 | } | } | 
 |  |  | 
 | static void bios0x18_1a(REG16 seg, REG16 off, REG16 code) { | static void bios0x18_1a(REG16 seg, REG16 off, REG16 code) { | 
 |  |  | 
| BYTE    *p; | UINT8   *p; | 
| BYTE    buf[32]; | UINT8   buf[32]; | 
 | UINT    i; | UINT    i; | 
 |  |  | 
 | if (((code >> 8) & 0x7e) == 0x76) { | if (((code >> 8) & 0x7e) == 0x76) { | 
| MEML_READSTR(seg, off + 2, buf, 32); | MEMR_READS(seg, off + 2, buf, 32); | 
 | p = fontrom; | p = fontrom; | 
 | p += (code & 0x7f) << 12; | p += (code & 0x7f) << 12; | 
 | p += (((code >> 8) - 0x20) & 0x7f) << 4; | p += (((code >> 8) - 0x20) & 0x7f) << 4; | 
| Line 354  const CRTDATA *p; | Line 354  const CRTDATA *p; | 
 | } | } | 
 |  |  | 
 | CopyMemory(gdc.m.para + GDC_SYNC, gdcmastersync[master], 8); | CopyMemory(gdc.m.para + GDC_SYNC, gdcmastersync[master], 8); | 
| ZeroMemory(gdc.m.para + GDC_SCROLL, 8); | ZeroMemory(gdc.m.para + GDC_SCROLL, 4); | 
 | gdc.m.para[GDC_PITCH] = 80; | gdc.m.para[GDC_PITCH] = 80; | 
 |  |  | 
 | p = crtdata + crt; | p = crtdata + crt; | 
| Line 369  const CRTDATA *p; | Line 369  const CRTDATA *p; | 
 | crtc.reg.sdr = 0; | crtc.reg.sdr = 0; | 
 |  |  | 
 | CopyMemory(gdc.s.para + GDC_SYNC, gdcslavesync[slave], 8); | CopyMemory(gdc.s.para + GDC_SYNC, gdcslavesync[slave], 8); | 
| ZeroMemory(gdc.s.para + GDC_SCROLL, 8); | ZeroMemory(gdc.s.para + GDC_SCROLL, 4); | 
 | if (slave & 1) { | if (slave & 1) { | 
 | gdc.s.para[GDC_PITCH] = 80; | gdc.s.para[GDC_PITCH] = 80; | 
 | gdc.clock |= 3; | gdc.clock |= 3; | 
 | mem[MEMB_PRXDUPD] |= 0x04; | mem[MEMB_PRXDUPD] |= 0x04; | 
 |  | gdc.s.para[GDC_SCROLL+3] = 0x40; | 
 | } | } | 
 | else { | else { | 
 | gdc.s.para[GDC_PITCH] = 40; | gdc.s.para[GDC_PITCH] = 40; | 
| Line 396  const CRTDATA *p; | Line 397  const CRTDATA *p; | 
 | gdcs.textdisp &= ~GDCSCRN_ENABLE; | gdcs.textdisp &= ~GDCSCRN_ENABLE; | 
 | gdcs.textdisp |= GDCSCRN_EXT | GDCSCRN_ALLDRAW2; | gdcs.textdisp |= GDCSCRN_EXT | GDCSCRN_ALLDRAW2; | 
 | gdcs.grphdisp |= GDCSCRN_EXT | GDCSCRN_ALLDRAW2; | gdcs.grphdisp |= GDCSCRN_EXT | GDCSCRN_ALLDRAW2; | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 |  |  | 
 | mem[0x597] &= ~3; | mem[0x597] &= ~3; | 
 | mem[0x597] |= (scrn >> 4) & 3; | mem[0x597] |= (scrn >> 4) & 3; | 
| Line 441  void bios0x18_40(void) { | Line 442  void bios0x18_40(void) { | 
 | gdc_forceready(GDCWORK_SLAVE); | gdc_forceready(GDCWORK_SLAVE); | 
 | if (!(gdcs.grphdisp & GDCSCRN_ENABLE)) { | if (!(gdcs.grphdisp & GDCSCRN_ENABLE)) { | 
 | gdcs.grphdisp |= GDCSCRN_ENABLE; | gdcs.grphdisp |= GDCSCRN_ENABLE; | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 | } | } | 
 | mem[MEMB_PRXCRT] |= 0x80; | mem[MEMB_PRXCRT] |= 0x80; | 
 | } | } | 
| Line 451  void bios0x18_41(void) { | Line 452  void bios0x18_41(void) { | 
 | gdc_forceready(GDCWORK_SLAVE); | gdc_forceready(GDCWORK_SLAVE); | 
 | if (gdcs.grphdisp & GDCSCRN_ENABLE) { | if (gdcs.grphdisp & GDCSCRN_ENABLE) { | 
 | gdcs.grphdisp &= ~(GDCSCRN_ENABLE); | gdcs.grphdisp &= ~(GDCSCRN_ENABLE); | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 | } | } | 
 | mem[MEMB_PRXCRT] &= 0x7f; | mem[MEMB_PRXCRT] &= 0x7f; | 
 | } | } | 
| Line 478  void bios0x18_42(REG8 mode) { | Line 479  void bios0x18_42(REG8 mode) { | 
 | } | } | 
 | else { | else { | 
 | #endif | #endif | 
| ZeroMemory(gdc.s.para + GDC_SCROLL, 8); | ZeroMemory(gdc.s.para + GDC_SCROLL, 4); | 
 | if (crtmode == 2) {                                                     // ALL | if (crtmode == 2) {                                                     // ALL | 
 | crtmode = 2; | crtmode = 2; | 
 | if ((mem[MEMB_PRXDUPD] & 0x24) == 0x20) { | if ((mem[MEMB_PRXDUPD] & 0x24) == 0x20) { | 
| Line 509  void bios0x18_42(REG8 mode) { | Line 510  void bios0x18_42(REG8 mode) { | 
 | gdc.s.para[GDC_SCROLL+1] = (200*40) >> 8; | gdc.s.para[GDC_SCROLL+1] = (200*40) >> 8; | 
 | } | } | 
 | } | } | 
 |  | if (mem[MEMB_PRXDUPD] & 4) { | 
 |  | gdc.s.para[GDC_SCROLL+3] = 0x40; | 
 |  | } | 
 | if ((crtmode == 2) || (!(mem[MEMB_PRXCRT] & 0x40))) { | if ((crtmode == 2) || (!(mem[MEMB_PRXCRT] & 0x40))) { | 
 | gdc.mode1 &= ~(0x10); | gdc.mode1 &= ~(0x10); | 
 | gdc.s.para[GDC_CSRFORM] = 0; | gdc.s.para[GDC_CSRFORM] = 0; | 
| Line 526  void bios0x18_42(REG8 mode) { | Line 530  void bios0x18_42(REG8 mode) { | 
 | gdcs.disp = (mode >> 4) & 1; | gdcs.disp = (mode >> 4) & 1; | 
 | } | } | 
 | if (!(mode & 0x20)) { | if (!(mode & 0x20)) { | 
| gdc.mode1 &= ~0x04; | gdc.mode2 &= ~0x04; | 
 | } | } | 
 | else { | else { | 
 | gdc.mode2 |= 0x04; | gdc.mode2 |= 0x04; | 
 | } | } | 
 |  | gdcs.mode2 = gdc.mode2; | 
 | gdcs.grphdisp |= GDCSCRN_ALLDRAW2; | gdcs.grphdisp |= GDCSCRN_ALLDRAW2; | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 | } | } | 
 |  |  | 
 | static void setbiosgdc(UINT32 csrw, const GDCVECT *vect, UINT8 ope) { | static void setbiosgdc(UINT32 csrw, const GDCVECT *vect, UINT8 ope) { | 
 |  |  | 
| gdc.s.para[GDC_CSRW + 0] = (BYTE)csrw; | gdc.s.para[GDC_CSRW + 0] = (UINT8)csrw; | 
| gdc.s.para[GDC_CSRW + 1] = (BYTE)(csrw >> 8); | gdc.s.para[GDC_CSRW + 1] = (UINT8)(csrw >> 8); | 
| gdc.s.para[GDC_CSRW + 2] = (BYTE)(csrw >> 16); | gdc.s.para[GDC_CSRW + 2] = (UINT8)(csrw >> 16); | 
 |  |  | 
 | gdc.s.para[GDC_VECTW] = vect->ope; | gdc.s.para[GDC_VECTW] = vect->ope; | 
 | gdc_vectreset(&gdc.s); | gdc_vectreset(&gdc.s); | 
| Line 567  static void bios0x18_47(void) { | Line 572  static void bios0x18_47(void) { | 
 | SINT16          dy; | SINT16          dy; | 
 |  |  | 
 | gdc_forceready(GDCWORK_SLAVE); | gdc_forceready(GDCWORK_SLAVE); | 
| MEML_READSTR(CPU_DS, CPU_BX, &ucw, sizeof(ucw)); | MEMR_READS(CPU_DS, CPU_BX, &ucw, sizeof(ucw)); | 
 | GBSX1 = LOADINTELWORD(ucw.GBSX1); | GBSX1 = LOADINTELWORD(ucw.GBSX1); | 
 | GBSY1 = LOADINTELWORD(ucw.GBSY1); | GBSY1 = LOADINTELWORD(ucw.GBSY1); | 
 | GBSX2 = LOADINTELWORD(ucw.GBSX2); | GBSX2 = LOADINTELWORD(ucw.GBSX2); | 
| Line 669  static void bios0x18_49(void) { | Line 674  static void bios0x18_49(void) { | 
 |  |  | 
 | UCWTBL          ucw; | UCWTBL          ucw; | 
 | UINT            i; | UINT            i; | 
| BYTE            pat[8]; | UINT8           pat[8]; | 
 | UINT16          tmp; | UINT16          tmp; | 
 | GDCVECT         vect; | GDCVECT         vect; | 
 | UINT16          GBSX1; | UINT16          GBSX1; | 
| Line 679  static void bios0x18_49(void) { | Line 684  static void bios0x18_49(void) { | 
 |  |  | 
 | gdc_forceready(GDCWORK_SLAVE); | gdc_forceready(GDCWORK_SLAVE); | 
 |  |  | 
| MEML_READSTR(CPU_DS, CPU_BX, &ucw, sizeof(ucw)); | MEMR_READS(CPU_DS, CPU_BX, &ucw, sizeof(ucw)); | 
 | for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | 
 | mem[MEMW_PRXGLS + i] = ucw.GBMDOTI[i]; | mem[MEMW_PRXGLS + i] = ucw.GBMDOTI[i]; | 
 | pat[i] = GDCPATREVERSE(ucw.GBMDOTI[i]); | pat[i] = GDCPATREVERSE(ucw.GBMDOTI[i]); | 
| Line 761  void bios0x18(void) { | Line 766  void bios0x18(void) { | 
 | }               tmp; | }               tmp; | 
 | int             i; | int             i; | 
 |  |  | 
| #if 0 | #if 1 | 
 | TRACEOUT(("int18 AX=%.4x %.4x:%.4x", CPU_AX, | TRACEOUT(("int18 AX=%.4x %.4x:%.4x", CPU_AX, | 
| MEML_READ16(CPU_SS, CPU_SP+2), | MEMR_READ16(CPU_SS, CPU_SP+2), | 
| MEML_READ16(CPU_SS, CPU_SP))); | MEMR_READ16(CPU_SS, CPU_SP))); | 
 | #endif | #endif | 
 |  |  | 
 | switch(CPU_AH) { | switch(CPU_AH) { | 
| Line 827  void bios0x18(void) { | Line 832  void bios0x18(void) { | 
 | case 0x0d:                                              // テキスト画面の表示終了 | case 0x0d:                                              // テキスト画面の表示終了 | 
 | if (gdcs.textdisp & GDCSCRN_ENABLE) { | if (gdcs.textdisp & GDCSCRN_ENABLE) { | 
 | gdcs.textdisp &= ~(GDCSCRN_ENABLE); | gdcs.textdisp &= ~(GDCSCRN_ENABLE); | 
| screenupdate |= 2; | pcstat.screenupdate |= 2; | 
 | } | } | 
 | break; | break; | 
 |  |  | 
| Line 844  void bios0x18(void) { | Line 849  void bios0x18(void) { | 
 | SETBIOSMEM16(MEMW_CRT_W_RASTER, tmp.w); | SETBIOSMEM16(MEMW_CRT_W_RASTER, tmp.w); | 
 | STOREINTELWORD(gdc.m.para + GDC_SCROLL + 2, tmp.w); | STOREINTELWORD(gdc.m.para + GDC_SCROLL + 2, tmp.w); | 
 | gdcs.textdisp |= GDCSCRN_ALLDRAW2; | gdcs.textdisp |= GDCSCRN_ALLDRAW2; | 
| //                      screenupdate |= 2; | //                      pcstat.screenupdate |= 2; | 
 | break; | break; | 
 |  |  | 
 | case 0x0f:                                              // 複数の表示領域の設定 | case 0x0f:                                              // 複数の表示領域の設定 | 
| Line 961  void bios0x18(void) { | Line 966  void bios0x18(void) { | 
 | break; | break; | 
 |  |  | 
 | case 0x43:                                              // パレットの設定 | case 0x43:                                              // パレットの設定 | 
| MEML_READSTR(CPU_DS, CPU_BX + offsetof(UCWTBL, GBCPC), | MEMR_READS(CPU_DS, CPU_BX + offsetof(UCWTBL, GBCPC), tmp.col, 4); | 
| tmp.col, 4); |  | 
 | for (i=0; i<4; i++) { | for (i=0; i<4; i++) { | 
 | gdc_setdegitalpal(6 - (i*2), (REG8)(tmp.col[i] >> 4)); | gdc_setdegitalpal(6 - (i*2), (REG8)(tmp.col[i] >> 4)); | 
 | gdc_setdegitalpal(7 - (i*2), (REG8)(tmp.col[i] & 15)); | gdc_setdegitalpal(7 - (i*2), (REG8)(tmp.col[i] & 15)); | 
| Line 971  void bios0x18(void) { | Line 975  void bios0x18(void) { | 
 |  |  | 
 | case 0x44:                                              // ボーダカラーの設定 | case 0x44:                                              // ボーダカラーの設定 | 
 | //                      if (!(mem[MEMB_PRXCRT] & 0x40)) { | //                      if (!(mem[MEMB_PRXCRT] & 0x40)) { | 
| //                              color = MEML_READ8(CPU_DS, CPU_BX + 1); | //                              color = MEMR_READ8(CPU_DS, CPU_BX + 1); | 
 | //                      } | //                      } | 
 | break; | break; | 
 |  |  |