| version 1.74, 2004/02/21 00:25:33 | version 1.86, 2004/04/16 22:20:03 | 
| Line 21 | Line 21 | 
 | #include        "maketext.h" | #include        "maketext.h" | 
 | #include        "maketgrp.h" | #include        "maketgrp.h" | 
 | #include        "makegrph.h" | #include        "makegrph.h" | 
 |  | #include        "makegrex.h" | 
 | #include        "sound.h" | #include        "sound.h" | 
 | #include        "fmboard.h" | #include        "fmboard.h" | 
 | #include        "beep.h" | #include        "beep.h" | 
| Line 47 | Line 48 | 
 | 0, 0, 0, 0, | 0, 0, 0, 0, | 
 | {0x3e, 0x73, 0x7b}, 0, | {0x3e, 0x73, 0x7b}, 0, | 
 | 0, 0, {1, 1, 6, 1, 8, 1}, | 0, 0, {1, 1, 6, 1, 8, 1}, | 
 | {{0, {0, }}, {0, {0, }}}, |  | 
 |  |  | 
 | "VX", PCBASECLOCK25, 4, | "VX", PCBASECLOCK25, 4, | 
 | {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e}, | {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e}, | 
 | 1, 1, 2, 1, 0x000000, 0xffffff, | 1, 1, 2, 1, 0x000000, 0xffffff, | 
| 22050, 800, 4, 0, | 22050, 500, 4, 0, | 
 | {0, 0, 0}, 0xd1, 0x7f, 0xd1, 0, 0, 1, | {0, 0, 0}, 0xd1, 0x7f, 0xd1, 0, 0, 1, | 
 | 3, {0x0c, 0x0c, 0x08, 0x06, 0x03, 0x0c}, 64, 64, 64, 64, 64, | 3, {0x0c, 0x0c, 0x08, 0x06, 0x03, 0x0c}, 64, 64, 64, 64, 64, | 
 | 1, 0x82, | 1, 0x82, | 
| Line 69 | Line 69 | 
 | 0, 0, | 0, 0, | 
 | 4 * PCBASECLOCK25}; | 4 * PCBASECLOCK25}; | 
 |  |  | 
 | static const BYTE msw_default[8] = |  | 
 | {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e}; |  | 
 |  |  | 
 | BYTE    screenupdate = 3; | BYTE    screenupdate = 3; | 
 | int             screendispflag = 1; | int             screendispflag = 1; | 
 | int             soundrenewal = 0; | int             soundrenewal = 0; | 
| Line 133  static void pccore_set(void) { | Line 130  static void pccore_set(void) { | 
 | } | } | 
 | pccore.multiple = multiple; | pccore.multiple = multiple; | 
 | pccore.realclock = pccore.baseclock * multiple; | pccore.realclock = pccore.baseclock * multiple; | 
| #if 0 |  | 
| keybrd.xferclock = pccore.realclock / 1920; |  | 
| gdc.rasterclock = pccore.realclock / 24816; |  | 
| gdc.hsyncclock = (gdc.rasterclock * 4) / 5; |  | 
| gdc.dispclock = pccore.realclock * 50 / 3102; |  | 
| gdc.vsyncclock = pccore.realclock * 5 / 3102; |  | 
| #endif |  | 
 | // HDDの接続 (I/Oの使用状態が変わるので.. | // HDDの接続 (I/Oの使用状態が変わるので.. | 
 | if (np2cfg.dipsw[1] & 0x20) { | if (np2cfg.dipsw[1] & 0x20) { | 
 | pccore.hddif |= PCHDD_IDE; | pccore.hddif |= PCHDD_IDE; | 
| Line 355  void pccore_reset(void) { | Line 346  void pccore_reset(void) { | 
 |  |  | 
 | bios_initialize(); | bios_initialize(); | 
 |  |  | 
| if (np2cfg.ITF_WORK) { | CS_BASE = 0xf0000; | 
| CS_BASE = 0xf0000; | CPU_CS = 0xf000; | 
| CPU_CS = 0xf000; | CPU_IP = 0xfff0; | 
| CPU_IP = 0xfff0; |  | 
| } |  | 
| else { |  | 
| for (i=0; i<8; i++) { |  | 
| mem[0xa3fe2 + i*4] = msw_default[i]; |  | 
| } |  | 
| CS_BASE = 0xfd800; |  | 
| CPU_CS = 0xfd80; |  | 
| CPU_IP = 0x0002; |  | 
| } |  | 
 | CPU_CLEARPREFETCH(); | CPU_CLEARPREFETCH(); | 
 | sysmng_cpureset(); | sysmng_cpureset(); | 
 |  |  | 
| Line 381  void pccore_reset(void) { | Line 363  void pccore_reset(void) { | 
 |  |  | 
 | static void drawscreen(void) { | static void drawscreen(void) { | 
 |  |  | 
| BYTE    timing; | UINT8   timing; | 
|  | void    (VRAMCALL * grphfn)(int page, int alldraw); | 
|  | UINT8   bit; | 
 |  |  | 
 | tramflag.timing++; | tramflag.timing++; | 
 | timing = ((LOADINTELWORD(gdc.m.para + GDC_CSRFORM + 1)) >> 5) & 0x3e; | timing = ((LOADINTELWORD(gdc.m.para + GDC_CSRFORM + 1)) >> 5) & 0x3e; | 
| Line 399  static void drawscreen(void) { | Line 383  static void drawscreen(void) { | 
 | gdc_updateclock(); | gdc_updateclock(); | 
 | } | } | 
 |  |  | 
| if (drawframe) { | if (!drawframe) { | 
| if ((gdcs.textdisp & GDCSCRN_EXT) || | return; | 
| (gdcs.grphdisp & GDCSCRN_EXT)) { | } | 
| if (dispsync_renewalvertical()) { | if ((gdcs.textdisp & GDCSCRN_EXT) || (gdcs.grphdisp & GDCSCRN_EXT)) { | 
| gdcs.textdisp |= GDCSCRN_ALLDRAW2; | if (dispsync_renewalvertical()) { | 
| gdcs.grphdisp |= GDCSCRN_ALLDRAW2; | gdcs.textdisp |= GDCSCRN_ALLDRAW2; | 
| } | gdcs.grphdisp |= GDCSCRN_ALLDRAW2; | 
| } | } | 
| if (gdcs.textdisp & GDCSCRN_EXT) { | } | 
| gdcs.textdisp &= ~GDCSCRN_EXT; | if (gdcs.textdisp & GDCSCRN_EXT) { | 
| dispsync_renewalhorizontal(); | gdcs.textdisp &= ~GDCSCRN_EXT; | 
| tramflag.renewal |= 1; | dispsync_renewalhorizontal(); | 
| if (dispsync_renewalmode()) { | tramflag.renewal |= 1; | 
| screenupdate |= 2; | if (dispsync_renewalmode()) { | 
| } | screenupdate |= 2; | 
| } |  | 
| if (gdcs.palchange) { |  | 
| gdcs.palchange = 0; |  | 
| pal_change(0); |  | 
| screenupdate |= 1; |  | 
 | } | } | 
| if (gdcs.grphdisp & GDCSCRN_EXT) { | } | 
| gdcs.grphdisp &= ~GDCSCRN_EXT; | if (gdcs.palchange) { | 
| if (((gdc.clock & 0x80) && (gdc.clock != 0x83)) || | gdcs.palchange = 0; | 
| (gdc.clock == 0x03)) { | pal_change(0); | 
| gdc.clock ^= 0x80; | screenupdate |= 1; | 
| gdcs.grphdisp |= GDCSCRN_ALLDRAW2; | } | 
|  | if (gdcs.grphdisp & GDCSCRN_EXT) { | 
|  | gdcs.grphdisp &= ~GDCSCRN_EXT; | 
|  | if (((gdc.clock & 0x80) && (gdc.clock != 0x83)) || | 
|  | (gdc.clock == 0x03)) { | 
|  | gdc.clock ^= 0x80; | 
|  | gdcs.grphdisp |= GDCSCRN_ALLDRAW2; | 
|  | } | 
|  | } | 
|  | if (gdcs.grphdisp & GDCSCRN_ENABLE) { | 
|  | if (!(gdc.mode1 & 2)) { | 
|  | grphfn = makegrph; | 
|  | bit = GDCSCRN_MAKE; | 
|  | if (gdcs.disp) { | 
|  | bit <<= 1; | 
|  | } | 
|  | #if defined(SUPPORT_PC9821) | 
|  | if (gdc.analog & 2) { | 
|  | grphfn = makegrphex; | 
|  | if (gdc.analog & 4) { | 
|  | bit = GDCSCRN_MAKE | (GDCSCRN_MAKE << 1); | 
|  | } | 
|  | } | 
|  | #endif | 
|  | if (gdcs.grphdisp & bit) { | 
|  | (*grphfn)(gdcs.disp, gdcs.grphdisp & bit & GDCSCRN_ALLDRAW2); | 
|  | gdcs.grphdisp &= ~bit; | 
|  | screenupdate |= 1; | 
 | } | } | 
 | } | } | 
| if (gdcs.grphdisp & GDCSCRN_ENABLE) { | else if (gdcs.textdisp & GDCSCRN_ENABLE) { | 
| if (!(gdc.mode1 & 2)) { | if (!gdcs.disp) { | 
| if (!gdcs.disp) { | if ((gdcs.grphdisp & GDCSCRN_MAKE) || | 
| if (gdcs.grphdisp & GDCSCRN_MAKE) { | (gdcs.textdisp & GDCSCRN_MAKE)) { | 
| makegrph(0, gdcs.grphdisp & GDCSCRN_ALLDRAW); | if (!(gdc.mode1 & 0x4)) { | 
| gdcs.grphdisp &= ~GDCSCRN_MAKE; | maketextgrph(0, gdcs.textdisp & GDCSCRN_ALLDRAW, | 
| screenupdate |= 1; | gdcs.grphdisp & GDCSCRN_ALLDRAW); | 
 | } | } | 
| } | else { | 
| else { | maketextgrph40(0, gdcs.textdisp & GDCSCRN_ALLDRAW, | 
| if (gdcs.grphdisp & (GDCSCRN_MAKE << 1)) { | gdcs.grphdisp & GDCSCRN_ALLDRAW); | 
| makegrph(1, gdcs.grphdisp & (GDCSCRN_ALLDRAW << 1)); |  | 
| gdcs.grphdisp &= ~(GDCSCRN_MAKE << 1); |  | 
| screenupdate |= 1; |  | 
 | } | } | 
 |  | gdcs.grphdisp &= ~GDCSCRN_MAKE; | 
 |  | screenupdate |= 1; | 
 | } | } | 
 | } | } | 
| else if (gdcs.textdisp & GDCSCRN_ENABLE) { | else { | 
| if (!gdcs.disp) { | if ((gdcs.grphdisp & (GDCSCRN_MAKE << 1)) || | 
| if ((gdcs.grphdisp & GDCSCRN_MAKE) || | (gdcs.textdisp & GDCSCRN_MAKE)) { | 
| (gdcs.textdisp & GDCSCRN_MAKE)) { | if (!(gdc.mode1 & 0x4)) { | 
| if (!(gdc.mode1 & 0x4)) { | maketextgrph(1, gdcs.textdisp & GDCSCRN_ALLDRAW, | 
| maketextgrph(0, gdcs.textdisp & GDCSCRN_ALLDRAW, | gdcs.grphdisp & (GDCSCRN_ALLDRAW << 1)); | 
| gdcs.grphdisp & GDCSCRN_ALLDRAW); |  | 
| } |  | 
| else { |  | 
| maketextgrph40(0, gdcs.textdisp & GDCSCRN_ALLDRAW, |  | 
| gdcs.grphdisp & GDCSCRN_ALLDRAW); |  | 
| } |  | 
| gdcs.grphdisp &= ~GDCSCRN_MAKE; |  | 
| screenupdate |= 1; |  | 
 | } | } | 
| } | else { | 
| else { | maketextgrph40(1, gdcs.textdisp & GDCSCRN_ALLDRAW, | 
| if ((gdcs.grphdisp & (GDCSCRN_MAKE << 1)) || | gdcs.grphdisp & (GDCSCRN_ALLDRAW << 1)); | 
| (gdcs.textdisp & GDCSCRN_MAKE)) { |  | 
| if (!(gdc.mode1 & 0x4)) { |  | 
| maketextgrph(1, gdcs.textdisp & GDCSCRN_ALLDRAW, |  | 
| gdcs.grphdisp & (GDCSCRN_ALLDRAW << 1)); |  | 
| } |  | 
| else { |  | 
| maketextgrph40(1, gdcs.textdisp & GDCSCRN_ALLDRAW, |  | 
| gdcs.grphdisp & (GDCSCRN_ALLDRAW << 1)); |  | 
| } |  | 
| gdcs.grphdisp &= ~(GDCSCRN_MAKE << 1); |  | 
| screenupdate |= 1; |  | 
 | } | } | 
 |  | gdcs.grphdisp &= ~(GDCSCRN_MAKE << 1); | 
 |  | screenupdate |= 1; | 
 | } | } | 
 | } | } | 
 | } | } | 
|  | } | 
| if (gdcs.textdisp & GDCSCRN_ENABLE) { | if (gdcs.textdisp & GDCSCRN_ENABLE) { | 
| if (tramflag.renewal) { | if (tramflag.renewal) { | 
| gdcs.textdisp |= maketext_curblink(); | gdcs.textdisp |= maketext_curblink(); | 
| } | } | 
| if ((cgwindow.writable & 0x80) && (tramflag.gaiji)) { | if ((cgwindow.writable & 0x80) && (tramflag.gaiji)) { | 
| gdcs.textdisp |= GDCSCRN_ALLDRAW; | gdcs.textdisp |= GDCSCRN_ALLDRAW; | 
| } | } | 
| cgwindow.writable &= ~0x80; | cgwindow.writable &= ~0x80; | 
| if (gdcs.textdisp & GDCSCRN_MAKE) { | if (gdcs.textdisp & GDCSCRN_MAKE) { | 
| if (!(gdc.mode1 & 0x4)) { | if (!(gdc.mode1 & 0x4)) { | 
| maketext(gdcs.textdisp & GDCSCRN_ALLDRAW); | maketext(gdcs.textdisp & GDCSCRN_ALLDRAW); | 
| } |  | 
| else { |  | 
| maketext40(gdcs.textdisp & GDCSCRN_ALLDRAW); |  | 
| } |  | 
| gdcs.textdisp &= ~GDCSCRN_MAKE; |  | 
| screenupdate |= 1; |  | 
 | } | } | 
 |  | else { | 
 |  | maketext40(gdcs.textdisp & GDCSCRN_ALLDRAW); | 
 |  | } | 
 |  | gdcs.textdisp &= ~GDCSCRN_MAKE; | 
 |  | screenupdate |= 1; | 
 | } | } | 
| if (screenupdate) { | } | 
| screenupdate = scrndraw_draw((BYTE)(screenupdate & 2)); | if (screenupdate) { | 
| drawcount++; | screenupdate = scrndraw_draw((BYTE)(screenupdate & 2)); | 
| } | drawcount++; | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 546  void screenvsync(NEVENTITEM item) { | Line 533  void screenvsync(NEVENTITEM item) { | 
 |  |  | 
 | // --------------------------------------------------------------------------- | // --------------------------------------------------------------------------- | 
 |  |  | 
| #define IPTRACE                 (1 << 12) | // #define      IPTRACE                 (1 << 12) | 
 |  |  | 
 | #if defined(TRACE) && IPTRACE | #if defined(TRACE) && IPTRACE | 
| static UINT             trpos = 0; | static  UINT    trpos = 0; | 
| static UINT32   treip[IPTRACE]; | static  UINT32  treip[IPTRACE]; | 
 |  |  | 
 | void iptrace_out(void) { | void iptrace_out(void) { | 
 |  |  | 
| Line 587  UINT cflg; | Line 574  UINT cflg; | 
 | #endif | #endif | 
 |  |  | 
 |  |  | 
 |  | void pccore_postevent(UINT32 event) {   // yet! | 
 |  |  | 
 |  | (void)event; | 
 |  | } | 
 |  |  | 
 | void pccore_exec(BOOL draw) { | void pccore_exec(BOOL draw) { | 
 |  |  | 
 | drawframe = draw; | drawframe = draw; | 
| keystat_sync(); | //      keystat_sync(); | 
 | soundmng_sync(); | soundmng_sync(); | 
 | mouseif_sync(); | mouseif_sync(); | 
 | pal_eventclear(); | pal_eventclear(); | 
| Line 653  void pccore_exec(BOOL draw) { | Line 645  void pccore_exec(BOOL draw) { | 
 | CPU_DX, CPU_DS, CPU_DI, mem[0xa3fe0])); | CPU_DX, CPU_DS, CPU_DI, mem[0xa3fe0])); | 
 | } | } | 
 | #endif | #endif | 
| //                      if ((CPU_CS == 0x2516) && (CPU_IP == 0x97B0)) { | #if 0 | 
| //                              TRACEOUT(("DS = %.4x", CPU_DS)); | if (CPU_IP == 0x2E4F) { | 
| //                      } | TRACEOUT(("CS = %.4x - 0x2e4f", CPU_CS)); | 
| //                      i286x_step(); | } | 
| i286c_step(); | #endif | 
|  | if (CPU_CS == 0x8b6) { | 
|  | TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); | 
|  | } | 
|  | i286x_step(); | 
|  | //                      i286c_step(); | 
 | } | } | 
 | #endif | #endif | 
 | nevent_progress(); | nevent_progress(); |