diff --git a/bios/bios0c.c b/bios/bios0c.c index acd52435..4e2be799 100644 --- a/bios/bios0c.c +++ b/bios/bios0c.c @@ -13,7 +13,7 @@ void bios0x0c(void) { UINT16 dseg; REG8 flag; UINT8 data; - UINT8 stat; + UINT8 status; REG16 pos; REG16 cnt; @@ -22,11 +22,11 @@ void bios0x0c(void) { flag = MEMR_READ8(dseg, doff + R_FLAG); data = iocore_inp8(0x30); // データ引き取り - stat = iocore_inp8(0x32) & 0xfc; // ステータス - stat |= (iocore_inp8(0x33) & 3); + status = iocore_inp8(0x32) & 0xfc; // ステータス + status |= (iocore_inp8(0x33) & 3); #if 0 - if (stat & 0x38) { + if (status & 0x38) { iocore_out8(0x32, flag | 0x10); } #endif @@ -62,7 +62,7 @@ void bios0x0c(void) { } // データ投棄 pos = MEMR_READ16(dseg, doff + R_PUTP); - MEMR_WRITE16(dseg, pos, (UINT16)((data << 8) | stat)); + MEMR_WRITE16(dseg, pos, (UINT16)((data << 8) | status)); // 次のポインタをストア pos = (UINT16)(pos + 2); diff --git a/bios/bios12.c b/bios/bios12.c index f9af2043..fe1bdd6c 100644 --- a/bios/bios12.c +++ b/bios/bios12.c @@ -10,7 +10,7 @@ void bios0x12(void) { - UINT8 stat; + UINT8 status; UINT8 result; UINT8 *p; UINT8 drv; @@ -22,16 +22,16 @@ void bios0x12(void) { iocore_out8(0x00, 0x20); } - stat = iocore_inp8(baseport); + status = iocore_inp8(baseport); while(1) { - if (!(stat & FDCSTAT_CB)) { - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO)) != FDCSTAT_RQM) { + if (!(status & FDCSTAT_CB)) { + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO)) != FDCSTAT_RQM) { break; } iocore_out8(baseport+2, 0x08); - stat = iocore_inp8(baseport); + status = iocore_inp8(baseport); } - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) != (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) { break; } @@ -52,8 +52,8 @@ void bios0x12(void) { } while(1) { *p++ = result; - stat = iocore_inp8(baseport); - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) + status = iocore_inp8(baseport); + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) != (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) { break; } diff --git a/bios/bios13.c b/bios/bios13.c index 281abbb4..a4ca5247 100644 --- a/bios/bios13.c +++ b/bios/bios13.c @@ -10,7 +10,7 @@ void bios0x13(void) { - UINT8 stat; + UINT8 status; UINT8 result; UINT8 *p; UINT8 drv; @@ -22,16 +22,16 @@ void bios0x13(void) { iocore_out8(0x00, 0x20); } - stat = iocore_inp8(baseport); + status = iocore_inp8(baseport); while(1) { - if (!(stat & FDCSTAT_CB)) { - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO)) != FDCSTAT_RQM) { + if (!(status & FDCSTAT_CB)) { + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO)) != FDCSTAT_RQM) { break; } iocore_out8(baseport+2, 0x08); - stat = iocore_inp8(baseport); + status = iocore_inp8(baseport); } - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) != (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) { break; } @@ -52,8 +52,8 @@ void bios0x13(void) { p = mem + MEMX_DISK_RESULT + (drv * 8); while(1) { *p++ = result; - stat = iocore_inp8(baseport); - if ((stat & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) + status = iocore_inp8(baseport); + if ((status & (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) != (FDCSTAT_RQM | FDCSTAT_DIO | FDCSTAT_CB)) { break; } diff --git a/bios/bios18.c b/bios/bios18.c index 9e3ff074..a38dc37d 100644 --- a/bios/bios18.c +++ b/bios/bios18.c @@ -766,7 +766,7 @@ void bios0x18(void) { } tmp; int i; -#if 1 +#if 0 TRACEOUT(("int18 AX=%.4x %.4x:%.4x", CPU_AX, MEMR_READ16(CPU_SS, CPU_SP+2), MEMR_READ16(CPU_SS, CPU_SP))); diff --git a/bios/bios1b.c b/bios/bios1b.c index 0f0c5637..a2386da1 100644 --- a/bios/bios1b.c +++ b/bios/bios1b.c @@ -243,7 +243,7 @@ static void b0patch(void) { cnt = 0; last = 0; while(size--) { - c = MEMR_READ8(ES_BASE, addr++); + c = MEMR_READ8(CPU_ES, addr++); cl = 0; do { REG8 now = c & 0x80; diff --git a/bios/bios1f.c b/bios/bios1f.c index 815bcf19..1913a746 100644 --- a/bios/bios1f.c +++ b/bios/bios1f.c @@ -40,6 +40,7 @@ static REG8 bios0x1f_90(void) { l = min(l, srclimit - srcaddr); l = min(l, dstlimit - dstaddr); if (!l) { + CPU_A20EN(FALSE); goto p90_err2; } MEML_READS(srcbase + srcaddr, work, l); diff --git a/cbus/board14.c b/cbus/board14.c index eda22584..5e8942c4 100644 --- a/cbus/board14.c +++ b/cbus/board14.c @@ -15,16 +15,16 @@ UINT board14_pitcount(void) { - SINT32 clock; + SINT32 clk; - clock = nevent_getremain(NEVENT_MUSICGEN); - if (clock >= 0) { - clock /= pccore.multiple; - clock /= 8; + clk = nevent_getremain(NEVENT_MUSICGEN); + if (clk >= 0) { + clk /= pccore.multiple; + clk /= 8; if (!(pccore.cpumode & CPUMODE_8MHZ)) { - clock = clock * 13 / 16; + clk = clk * 13 / 16; } - return(clock); + return(clk); } return(0); } diff --git a/common.h b/common.h index 4c4939dc..24e62320 100644 --- a/common.h +++ b/common.h @@ -161,7 +161,3 @@ enum { #define FASTCALL #endif -#if !defined(GCC_ATTR_REGPARM) -#define GCC_ATTR_REGPARM -#endif - diff --git a/fdd/fdd_mtr.c b/fdd/fdd_mtr.c index 050efc7f..fa506bc6 100644 --- a/fdd/fdd_mtr.c +++ b/fdd/fdd_mtr.c @@ -117,9 +117,9 @@ void fddmtr_initialize(void) { FillMemory(fddmtr.head, sizeof(fddmtr.head), 42); } -void fddmtr_callback(UINT time) { +void fddmtr_callback(UINT nowtime) { - if ((fddmtr.curevent) && (time >= fddmtr.nextevent)) { + if ((fddmtr.curevent) && (nowtime >= fddmtr.nextevent)) { fddmtr_event(); } } diff --git a/fdd/sxsicd.c b/fdd/sxsicd.c index a57b780d..64f58931 100644 --- a/fdd/sxsicd.c +++ b/fdd/sxsicd.c @@ -298,7 +298,7 @@ static BRESULT opencue(SXSIDEV sxsi, const OEMCHAR *fname) { _CDTRK trk[99]; OEMCHAR path[MAX_PATH]; - UINT index; + UINT idx; UINT8 curtrk; UINT curtype; TEXTFILEH tfh; @@ -308,7 +308,7 @@ static BRESULT opencue(SXSIDEV sxsi, const OEMCHAR *fname) { ZeroMemory(trk, sizeof(trk)); path[0] = '\0'; - index = 0; + idx = 0; curtrk = 1; curtype = 0x14; tfh = textfile_open(fname, 0x800); @@ -332,16 +332,16 @@ static BRESULT opencue(SXSIDEV sxsi, const OEMCHAR *fname) { } } else if ((argc >= 3) && (!milstr_cmp(argv[0], str_index))) { - if (index < NELEMENTS(trk)) { - trk[index].type = curtype; - trk[index].track = curtrk; - trk[index].pos = getpos(argv[2]); - index++; + if (idx < NELEMENTS(trk)) { + trk[idx].type = curtype; + trk[idx].track = curtrk; + trk[idx].pos = getpos(argv[2]); + idx++; } } } textfile_close(tfh); - return(openimg(sxsi, path, trk, index)); + return(openimg(sxsi, path, trk, idx)); } BRESULT sxsicd_open(SXSIDEV sxsi, const OEMCHAR *fname) { diff --git a/font/font.c b/font/font.c index 4eeee6d1..a5885095 100644 --- a/font/font.c +++ b/font/font.c @@ -1,3 +1,11 @@ +/** + * @file font.c + * @brief CGROM and font loader + * + * @author $Author: yui $ + * @date $Date: 2011/02/23 10:11:44 $ + */ + #include "compiler.h" #include "strres.h" #include "dosio.h" @@ -6,23 +14,33 @@ #include "fontdata.h" #include "fontmake.h" - #ifndef FONTMEMORYBIND UINT8 __font[0x84000]; #endif static const OEMCHAR fonttmpname[] = OEMTEXT("font.tmp"); - +/** + * Initializes CGROM + */ void font_initialize(void) { + ZeroMemory(fontrom, sizeof(fontrom)); + font_setchargraph(FALSE); +} + +/** + * Builds charactor graphics + * @param[in] epson If this parameter is FALSE, patched NEC charactor + */ +void font_setchargraph(BOOL epson) { + UINT8 *p; UINT8 *q; UINT i; UINT j; UINT32 dbit; - ZeroMemory(fontrom, sizeof(fontrom)); p = fontrom + 0x81000; q = fontrom + 0x82000; for (i=0; i<256; i++) { @@ -41,8 +59,18 @@ void font_initialize(void) { q += 2; } } + + if (!epson) { + *(UINT16 *)(fontrom + 0x81000 + (0xf2 * 16)) = 0; + fontrom[0x82000 + (0xf2 * 8)] = 0; + } } +/** + * Retrieves the font type of the specified file. + * @param[in] fname The name of the font file + * @return font type + */ static UINT8 fonttypecheck(const OEMCHAR *fname) { const OEMCHAR *p; @@ -75,6 +103,13 @@ const OEMCHAR *p; return(FONTTYPE_NONE); } +/** + * Loads font files + * @param[in] filename The name of the font file + * @param[in] force If this parameter is TRUE, load file always + * If this parameter is FALSE, load when font is not ready + * @return font type + */ UINT8 font_load(const OEMCHAR *filename, BOOL force) { UINT i; @@ -154,4 +189,3 @@ const UINT8 *p; } return(type); } - diff --git a/font/font.h b/font/font.h index f71db791..f8db18a2 100644 --- a/font/font.h +++ b/font/font.h @@ -1,7 +1,13 @@ +/** + * @file font.h + * @brief CGROM and font loader + * + * @author $Author: yui $ + * @date $Date: 2011/02/23 10:11:44 $ + */ #define FONTMEMORYBIND // 520KBくらいメモリ削除(ぉぃ - #ifdef __cplusplus extern "C" { #endif @@ -14,6 +20,7 @@ extern UINT8 __font[0x84000]; #endif void font_initialize(void); +void font_setchargraph(BOOL epson); UINT8 font_load(const OEMCHAR *filename, BOOL force); #ifdef __cplusplus diff --git a/generic/hostdrv.c b/generic/hostdrv.c index c1ba7150..dbfe7cd5 100644 --- a/generic/hostdrv.c +++ b/generic/hostdrv.c @@ -1259,12 +1259,12 @@ void hostdrv_reset(void) { void hostdrv_mount(const void *arg1, long arg2) { if ((np2cfg.hdrvroot[0] == '\0') || (hostdrv.stat.is_mount)) { - np2sysp_outstr("ng", 0); + np2sysp_outstr(OEMTEXT("ng"), 0); return; } hostdrv.stat.is_mount = TRUE; fetch_if4dos(); - np2sysp_outstr("ok", 0); + np2sysp_outstr(OEMTEXT("ok"), 0); (void)arg1; (void)arg2; } diff --git a/generic/hostdrvs.c b/generic/hostdrvs.c index 978aeb15..ace9e5d6 100644 --- a/generic/hostdrvs.c +++ b/generic/hostdrvs.c @@ -121,7 +121,7 @@ static BOOL hddseadir(void *vpItem, void *vpArg) { return(FALSE); } -LISTARRAY hostdrvs_getpathlist(const OEMCHAR *realpath) { +LISTARRAY hostdrvs_getpathlist(const OEMCHAR *path) { FLISTH flh; FLINFO fli; @@ -129,7 +129,7 @@ LISTARRAY hostdrvs_getpathlist(const OEMCHAR *realpath) { char fcbname[11]; HDRVLST hdd; - flh = file_list1st(realpath, &fli); + flh = file_list1st(path, &fli); if (flh == FLISTH_INVALID) { goto hdgpl_err1; } diff --git a/generic/keydisp.c b/generic/keydisp.c index 53148efb..538c29a5 100644 --- a/generic/keydisp.c +++ b/generic/keydisp.c @@ -537,6 +537,7 @@ static void setfmhdl(UINT8 items, UINT base) { } } +#if defined(SUPPORT_PX) static void setfmhdlex(const OPN_T *pOpn, UINT nItems, UINT nBase) { while(nItems--) { @@ -552,6 +553,7 @@ static void setfmhdlex(const OPN_T *pOpn, UINT nItems, UINT nBase) { } } } +#endif // defined(SUPPORT_PX) static void setpsghdl(UINT8 items) { diff --git a/generic/np2info.c b/generic/np2info.c index 6b3ebba3..cfe6cf29 100644 --- a/generic/np2info.c +++ b/generic/np2info.c @@ -60,11 +60,11 @@ static void info_cpu(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { static void info_clock(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { - UINT32 clock; + UINT32 clk; OEMCHAR clockstr[16]; - clock = (pccore.realclock + 50000) / 100000; - OEMSPRINTF(clockstr, str_clockfmt, clock/10, clock % 10); + clk = (pccore.realclock + 50000) / 100000; + OEMSPRINTF(clockstr, str_clockfmt, clk/10, clk % 10); milstr_ncpy(str, clockstr, maxlen); (void)ex; } diff --git a/i286x/memory.x86 b/i286x/memory.x86 index 55653992..17227420 100644 --- a/i286x/memory.x86 +++ b/i286x/memory.x86 @@ -1343,5 +1343,3 @@ memxwrite_lp: mov dl, [esi] memxwrite_ed: pop ebx ret 4 - ends - diff --git a/i386c/cpucore.c b/i386c/cpucore.c index a6cfc68b..962db6f7 100644 --- a/i386c/cpucore.c +++ b/i386c/cpucore.c @@ -1,5 +1,3 @@ -/* $Id: cpucore.c,v 1.3 2004/02/20 16:09:04 monaka Exp $ */ - #include "compiler.h" #include "cpucore.h" diff --git a/i386c/cpucore.h b/i386c/cpucore.h index aea166b5..2e836829 100644 --- a/i386c/cpucore.h +++ b/i386c/cpucore.h @@ -1,5 +1,3 @@ -/* $Id: cpucore.h,v 1.5 2004/06/15 13:50:13 monaka Exp $ */ - #ifndef NP2_I386C_CPUCORE_H__ #define NP2_I386C_CPUCORE_H__ diff --git a/i386c/ia32/cpu.c b/i386c/ia32/cpu.c index ce547da0..1c140d6b 100644 --- a/i386c/ia32/cpu.c +++ b/i386c/ia32/cpu.c @@ -1,5 +1,3 @@ -/* $Id: cpu.c,v 1.24 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -56,6 +54,11 @@ int ctx_index = 0; int cpu_inst_trace = 0; #endif +#if defined(DEBUG) +int cpu_debug_rep_cont = 0; +CPU_REGS cpu_debug_rep_regs; +#endif + void exec_1step(void) @@ -86,7 +89,7 @@ exec_1step(void) buf[0] = '\0'; for (i = 0; i < len; i++) { - snprintf(tmp, sizeof(tmp), "%02x ", d->opcode[i]); + snprintf(tmp, sizeof(tmp), "%02x ", d->opbyte[i]); milstr_ncat(buf, tmp, sizeof(buf)); } for (; i < 8; i++) { @@ -96,7 +99,7 @@ exec_1step(void) buf[0] = '\0'; for (; i < d->nopbytes; i++) { - snprintf(tmp, sizeof(tmp), "%02x ", d->opcode[i]); + snprintf(tmp, sizeof(tmp), "%02x ", d->opbyte[i]); milstr_ncat(buf, tmp, sizeof(buf)); if ((i % 8) == 7) { VERBOSE((" : %s", buf)); @@ -111,21 +114,6 @@ exec_1step(void) ctx[ctx_index].opbytes = 0; #endif -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - if (CPU_STAT_BP && !(CPU_EFLAG & RF_FLAG)) { - int i; - for (i = 0; i < CPU_DEBUG_REG_INDEX_NUM; i++) { - if ((CPU_STAT_BP & (1 << i)) - && (CPU_DR7_GET_RW(i) == CPU_DR7_RW_CODE) - && (CPU_DR(i) == CPU_EIP) - && (CPU_DR7_GET_LEN(i) == 0)) { - CPU_DR6 |= CPU_DR6_B(i); - EXCEPTION(DB_EXCEPTION, 0); - } - } - } -#endif /* IA32_SUPPORT_DEBUG_REGISTER */ - for (prefix = 0; prefix < MAX_PREFIX; prefix++) { GET_PCBYTE(op); #if defined(IA32_INSTRUCTION_TRACE) @@ -156,24 +144,33 @@ exec_1step(void) /* normal / rep, but not use */ if (!(insttable_info[op] & INST_STRING) || !CPU_INST_REPUSE) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif (*insttable_1byte[CPU_INST_OP32][op])(); -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - goto check_break_point; -#else return; -#endif } /* rep */ CPU_WORKCLOCK(5); +#if defined(DEBUG) + if (!cpu_debug_rep_cont) { + cpu_debug_rep_cont = 1; + cpu_debug_rep_regs = CPU_STATSAVE.cpu_regs; + } +#endif if (!CPU_INST_AS32) { if (CPU_CX != 0) { if (!(insttable_info[op] & REP_CHECKZF)) { /* rep */ for (;;) { (*insttable_1byte[CPU_INST_OP32][op])(); - if (--CPU_CX == 0) + if (--CPU_CX == 0) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif break; + } if (CPU_REMCLOCK <= 0) { CPU_EIP = CPU_PREV_EIP; break; @@ -183,8 +180,12 @@ exec_1step(void) /* repe */ for (;;) { (*insttable_1byte[CPU_INST_OP32][op])(); - if (--CPU_CX == 0 || CC_NZ) + if (--CPU_CX == 0 || CC_NZ) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif break; + } if (CPU_REMCLOCK <= 0) { CPU_EIP = CPU_PREV_EIP; break; @@ -194,8 +195,12 @@ exec_1step(void) /* repne */ for (;;) { (*insttable_1byte[CPU_INST_OP32][op])(); - if (--CPU_CX == 0 || CC_Z) + if (--CPU_CX == 0 || CC_Z) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif break; + } if (CPU_REMCLOCK <= 0) { CPU_EIP = CPU_PREV_EIP; break; @@ -209,8 +214,12 @@ exec_1step(void) /* rep */ for (;;) { (*insttable_1byte[CPU_INST_OP32][op])(); - if (--CPU_ECX == 0) + if (--CPU_ECX == 0) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif break; + } if (CPU_REMCLOCK <= 0) { CPU_EIP = CPU_PREV_EIP; break; @@ -220,8 +229,12 @@ exec_1step(void) /* repe */ for (;;) { (*insttable_1byte[CPU_INST_OP32][op])(); - if (--CPU_ECX == 0 || CC_NZ) + if (--CPU_ECX == 0 || CC_NZ) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif break; + } if (CPU_REMCLOCK <= 0) { CPU_EIP = CPU_PREV_EIP; break; @@ -231,8 +244,12 @@ exec_1step(void) /* repne */ for (;;) { (*insttable_1byte[CPU_INST_OP32][op])(); - if (--CPU_ECX == 0 || CC_Z) + if (--CPU_ECX == 0 || CC_Z) { +#if defined(DEBUG) + cpu_debug_rep_cont = 0; +#endif break; + } if (CPU_REMCLOCK <= 0) { CPU_EIP = CPU_PREV_EIP; break; @@ -241,30 +258,4 @@ exec_1step(void) } } } - -#if defined(IA32_SUPPORT_DEBUG_REGISTER) -check_break_point: - if (CPU_TRAP || (CPU_STAT_BP_EVENT & ~CPU_STAT_BP_EVENT_RF)) { - UINT8 orig = CPU_STAT_BP_EVENT & ~CPU_STAT_BP_EVENT_RF; - - CPU_STAT_BP_EVENT &= CPU_STAT_BP_EVENT_RF; - - CPU_DR6 |= (orig & 0xf); - if (orig & CPU_STAT_BP_EVENT_TASK) { - CPU_DR6 |= CPU_DR6_BT; - } - if (CPU_TRAP) { - CPU_DR6 |= CPU_DR6_BS; - } - INTERRUPT(DB_EXCEPTION, TRUE, FALSE, 0); - } - if (CPU_EFLAG & RF_FLAG) { - if (CPU_STAT_BP_EVENT & CPU_STAT_BP_EVENT_RF) { - /* after IRETD or task switch */ - CPU_STAT_BP_EVENT &= ~CPU_STAT_BP_EVENT_RF; - } else { - CPU_EFLAG &= ~RF_FLAG; - } - } -#endif /* IA32_SUPPORT_DEBUG_REGISTER */ } diff --git a/i386c/ia32/cpu.h b/i386c/ia32/cpu.h index 74cc334d..c31a0976 100644 --- a/i386c/ia32/cpu.h +++ b/i386c/ia32/cpu.h @@ -1,5 +1,3 @@ -/* $Id: cpu.h,v 1.36 2008/01/25 18:02:18 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -172,9 +170,10 @@ typedef struct { UINT8 user_mode; UINT8 hlt; - UINT8 bp; /* break point bitmap */ - UINT8 bp_ev; /* break point event */ - UINT8 pad; + UINT8 bp; /* break point bitmap */ + UINT8 bp_ev; /* break point event */ + + UINT8 backout_sp; /* backout ESP, when exception */ UINT32 pde_base; @@ -214,20 +213,20 @@ typedef struct { } FPU_REGS; typedef struct { - UINT8 valid; /* ・・ク・ケ・ソヘュク */ - UINT8 sign; /* ノ荵 */ - UINT8 zero; /* ・シ・ */ - UINT8 inf; /* 。 */ - UINT8 nan; /* NaN */ - UINT8 denorm; /* ネタオオャイス */ - SINT16 exp; /* サリソノ */ - UINT64 num; /* セョソノ */ + UINT8 valid; + UINT8 sign; + UINT8 zero; + UINT8 inf; + UINT8 nan; + UINT8 denorm; + SINT16 exp; + UINT64 num; } FP_REG; typedef struct { - UINT8 top; /* ・ケ・ソ・テ・ッーフテヨ */ - UINT8 pc; /* タコナル */ - UINT8 rc; /* エン、 */ + UINT8 top; + UINT8 pc; + UINT8 rc; UINT8 dmy[1]; FP_REG reg[FPU_REG_NUM]; @@ -265,7 +264,7 @@ typedef struct { } I386EXT; typedef struct { - I386STAT s; /* STATsave、オ、、ナロ */ + I386STAT s; /* STATsave'ed */ I386EXT e; } I386CORE; @@ -360,22 +359,8 @@ extern sigjmp_buf exec_1step_jmpbuf; #define CPU_REGS_SREG(n) CPU_STATSAVE.cpu_regs.sreg[(n)] #define CPU_STAT_SREG(n) CPU_STATSAVE.cpu_stat.sreg[(n)] -#define CPU_STAT_SREGBASE(n) CPU_STATSAVE.cpu_stat.sreg[(n)].u.seg.segbase -#define CPU_STAT_SREGEND(n) CPU_STATSAVE.cpu_stat.sreg[(n)].u.seg.segend -#define CPU_STAT_SREGLIMIT(n) CPU_STATSAVE.cpu_stat.sreg[(n)].u.seg.limit -#define CPU_STAT_SREG_CLEAR(n) \ -do { \ - memset(&CPU_STAT_SREG(n), 0, sizeof(descriptor_t)); \ -} while (/*CONSTCOND*/ 0) -#define CPU_STAT_SREG_INIT(n) \ -do { \ - descriptor_t sd; \ -\ - memset(&sd, 0, sizeof(sd)); \ - sd.u.seg.limit = 0xffff; \ - CPU_SET_SEGDESC_DEFAULT(&sd, (n), 0); \ - CPU_STAT_SREG(n) = sd; \ -} while (/*CONSTCOND*/ 0) +#define CPU_STAT_SREGBASE(n) CPU_STAT_SREG((n)).u.seg.segbase +#define CPU_STAT_SREGLIMIT(n) CPU_STAT_SREG((n)).u.seg.limit #define CPU_AL CPU_REGS_BYTEL(CPU_EAX_INDEX) @@ -416,6 +401,13 @@ do { \ #define CPU_FS CPU_REGS_SREG(CPU_FS_INDEX) #define CPU_GS CPU_REGS_SREG(CPU_GS_INDEX) +#define CPU_ES_DESC CPU_STAT_SREG(CPU_ES_INDEX) +#define CPU_CS_DESC CPU_STAT_SREG(CPU_CS_INDEX) +#define CPU_SS_DESC CPU_STAT_SREG(CPU_SS_INDEX) +#define CPU_DS_DESC CPU_STAT_SREG(CPU_DS_INDEX) +#define CPU_FS_DESC CPU_STAT_SREG(CPU_FS_INDEX) +#define CPU_GS_DESC CPU_STAT_SREG(CPU_GS_INDEX) + #define ES_BASE CPU_STAT_SREGBASE(CPU_ES_INDEX) #define CS_BASE CPU_STAT_SREGBASE(CPU_CS_INDEX) #define SS_BASE CPU_STAT_SREGBASE(CPU_SS_INDEX) @@ -458,8 +450,8 @@ do { \ #define REAL_FLAGREG ((CPU_FLAG & 0xf7ff) | (CPU_OV ? O_FLAG : 0) | 2) #define REAL_EFLAGREG ((CPU_EFLAG & 0xfffff7ff) | (CPU_OV ? O_FLAG : 0) | 2) -void set_flags(UINT16 new_flags, UINT16 mask); -void set_eflags(UINT32 new_flags, UINT32 mask); +void CPUCALL set_flags(UINT16 new_flags, UINT16 mask); +void CPUCALL set_eflags(UINT32 new_flags, UINT32 mask); #define CPU_INST_OP32 CPU_STATSAVE.cpu_inst.op_32 @@ -472,7 +464,6 @@ void set_eflags(UINT32 new_flags, UINT32 mask); #define CPU_STAT_CS_BASE CPU_STAT_SREGBASE(CPU_CS_INDEX) #define CPU_STAT_CS_LIMIT CPU_STAT_SREGLIMIT(CPU_CS_INDEX) -#define CPU_STAT_CS_END CPU_STAT_SREGEND(CPU_CS_INDEX) #define CPU_STAT_ADRSMASK CPU_STATSAVE.cpu_stat.adrsmask #define CPU_STAT_SS32 CPU_STATSAVE.cpu_stat.ss_32 @@ -481,9 +472,19 @@ void set_eflags(UINT32 new_flags, UINT32 mask); #define CPU_STAT_PAGING CPU_STATSAVE.cpu_stat.paging #define CPU_STAT_VM86 CPU_STATSAVE.cpu_stat.vm86 #define CPU_STAT_WP CPU_STATSAVE.cpu_stat.page_wp -#define CPU_STAT_CPL CPU_STAT_SREG(CPU_CS_INDEX).rpl +#define CPU_STAT_CPL CPU_CS_DESC.rpl #define CPU_STAT_USER_MODE CPU_STATSAVE.cpu_stat.user_mode #define CPU_STAT_PDE_BASE CPU_STATSAVE.cpu_stat.pde_base +#define CPU_SET_PREV_ESP1(esp) \ +do { \ + CPU_STATSAVE.cpu_stat.backout_sp = 1; \ + CPU_PREV_ESP = (esp); \ +} while (/*CONSTCOND*/0) +#define CPU_SET_PREV_ESP() CPU_SET_PREV_ESP1(CPU_ESP) +#define CPU_CLEAR_PREV_ESP() \ +do { \ + CPU_STATSAVE.cpu_stat.backout_sp = 0; \ +} while (/*CONSTCOND*/0) #define CPU_STAT_HLT CPU_STATSAVE.cpu_stat.hlt @@ -503,12 +504,6 @@ void set_eflags(UINT32 new_flags, UINT32 mask); #define CPU_MODE_SUPERVISER 0 #define CPU_MODE_USER (1 << 3) -#define CPU_SET_CPL(cpl) \ -do { \ - UINT8 __t = (UINT8)((cpl) & 3); \ - CPU_STAT_CPL = __t; \ - CPU_STAT_USER_MODE = (__t == 3) ? CPU_MODE_USER : CPU_MODE_SUPERVISER; \ -} while (/*CONSTCOND*/ 0) #define CPU_CLI \ do { \ @@ -528,14 +523,12 @@ do { \ #define CPU_IDTR_BASE CPU_STATSAVE.cpu_sysregs.idtr_base #define CPU_LDTR CPU_STATSAVE.cpu_sysregs.ldtr #define CPU_LDTR_DESC CPU_STATSAVE.cpu_stat.ldtr -#define CPU_LDTR_BASE CPU_STATSAVE.cpu_stat.ldtr.u.seg.segbase -#define CPU_LDTR_END CPU_STATSAVE.cpu_stat.ldtr.u.seg.segend -#define CPU_LDTR_LIMIT CPU_STATSAVE.cpu_stat.ldtr.u.seg.limit +#define CPU_LDTR_BASE CPU_LDTR_DESC.u.seg.segbase +#define CPU_LDTR_LIMIT CPU_LDTR_DESC.u.seg.limit #define CPU_TR CPU_STATSAVE.cpu_sysregs.tr #define CPU_TR_DESC CPU_STATSAVE.cpu_stat.tr -#define CPU_TR_BASE CPU_STATSAVE.cpu_stat.tr.u.seg.segbase -#define CPU_TR_END CPU_STATSAVE.cpu_stat.tr.u.seg.segend -#define CPU_TR_LIMIT CPU_STATSAVE.cpu_stat.tr.u.seg.limit +#define CPU_TR_BASE CPU_TR_DESC.u.seg.segbase +#define CPU_TR_LIMIT CPU_TR_DESC.u.seg.limit /* * control register @@ -626,7 +619,6 @@ void ia32a20enable(BOOL enable); void ia32(void); void ia32_step(void); void CPUCALL ia32_interrupt(int vect, int soft); -void CPUCALL ia32_exception(int vect, int p1, int p2); void exec_1step(void); #define INST_PREFIX (1 << 0) @@ -639,9 +631,12 @@ void ia32_panic(const char *buf, ...); void ia32_bioscall(void); -void FASTCALL change_pm(BOOL onoff); -void FASTCALL change_vm(BOOL onoff); -void FASTCALL change_pg(BOOL onoff); +void CPUCALL change_pm(BOOL onoff); +void CPUCALL change_vm(BOOL onoff); +void CPUCALL change_pg(BOOL onoff); + +void CPUCALL set_cr3(UINT32 new_cr3); +void CPUCALL set_cpl(int new_cpl); extern const UINT8 iflags[]; #define szpcflag iflags @@ -654,9 +649,10 @@ extern UINT16 *reg16_b53[0x100]; extern UINT32 *reg32_b20[0x100]; extern UINT32 *reg32_b53[0x100]; -extern const char *reg8_str[8]; -extern const char *reg16_str[8]; -extern const char *reg32_str[8]; +extern const char *reg8_str[CPU_REG_NUM]; +extern const char *reg16_str[CPU_REG_NUM]; +extern const char *reg32_str[CPU_REG_NUM]; +extern const char *sreg_str[CPU_SEGREG_NUM]; char *cpu_reg2str(void); #if defined(USE_FPU) @@ -689,20 +685,20 @@ void dbg_printf(const char *str, ...); #define FPU_REG(i) FPU_STAT.reg[i] /* FPU status register */ -#define FP_IE_FLAG (1 << 0) /* フオク、ハニーコ */ -#define FP_DE_FLAG (1 << 1) /* ・ヌ・ホ。シ・゙・鬣、・コ・ノ。ヲ・ェ・レ・鬣・ノ */ -#define FP_ZE_FLAG (1 << 2) /* ・シ・、ヒ、隍スササ */ -#define FP_OE_FLAG (1 << 3) /* ・ェ。シ・ミ。シ・ユ・。シ */ -#define FP_UE_FLAG (1 << 4) /* ・「・・タ。シ・ユ・。シ */ -#define FP_PE_FLAG (1 << 5) /* タコナル */ -#define FP_SF_FLAG (1 << 6) /* ・ケ・ソ・テ・ッ・ユ・ゥ・・ネ */ -#define FP_ES_FLAG (1 << 7) /* ・ィ・鬘シ・オ・゙・・ケ・ニ。シ・ソ・ケ */ -#define FP_C0_FLAG (1 << 8) /* セキ・ウ。シ・ノ */ -#define FP_C1_FLAG (1 << 9) /* セキ・ウ。シ・ノ */ -#define FP_C2_FLAG (1 << 10) /* セキ・ウ。シ・ノ */ -#define FP_TOP_FLAG (7 << 11) /* ・ケ・ソ・テ・ッ・ン・、・・ネ、ホ・ネ・テ・ラ */ -#define FP_C3_FLAG (1 << 14) /* セキ・ウ。シ・ノ */ -#define FP_B_FLAG (1 << 15) /* FPU ・モ・ク。シ */ +#define FP_IE_FLAG (1 << 0) /* 辟。蜉ケ縺ェ蜍穂ス */ +#define FP_DE_FLAG (1 << 1) /* 繝繝弱シ繝槭Λ繧、繧コ繝峨サ繧ェ繝壹Λ繝ウ繝 */ +#define FP_ZE_FLAG (1 << 2) /* 繧シ繝ュ縺ォ繧医k髯、邂 */ +#define FP_OE_FLAG (1 << 3) /* 繧ェ繝シ繝舌シ繝輔Ο繝シ */ +#define FP_UE_FLAG (1 << 4) /* 繧「繝ウ繝繝シ繝輔Ο繝シ */ +#define FP_PE_FLAG (1 << 5) /* 邊セ蠎ヲ */ +#define FP_SF_FLAG (1 << 6) /* 繧ケ繧ソ繝繧ッ繝輔か繝ォ繝 */ +#define FP_ES_FLAG (1 << 7) /* 繧ィ繝ゥ繝シ繧オ繝槭Μ繧ケ繝繝シ繧ソ繧ケ */ +#define FP_C0_FLAG (1 << 8) /* 譚。莉カ繧ウ繝シ繝 */ +#define FP_C1_FLAG (1 << 9) /* 譚。莉カ繧ウ繝シ繝 */ +#define FP_C2_FLAG (1 << 10) /* 譚。莉カ繧ウ繝シ繝 */ +#define FP_TOP_FLAG (7 << 11) /* 繧ケ繧ソ繝繧ッ繝昴う繝ウ繝医ョ繝医ャ繝 */ +#define FP_C3_FLAG (1 << 14) /* 譚。莉カ繧ウ繝シ繝 */ +#define FP_B_FLAG (1 << 15) /* FPU 繝薙ず繝シ */ #define FP_TOP_SHIFT 11 #define FP_TOP_GET() ((FPU_STATUSWORD & FP_TOP_FLAG) >> FP_TOP_SHIFT) @@ -718,12 +714,12 @@ do { \ } while (/*CONSTCOND*/0) /* FPU control register */ -#define FP_CTRL_PC_SHIFT 8 /* タコナルタゥク */ -#define FP_CTRL_RC_SHIFT 10 /* エン、眤ゥク */ +#define FP_CTRL_PC_SHIFT 8 /* 邊セ蠎ヲ蛻カ蠕。 */ +#define FP_CTRL_RC_SHIFT 10 /* 荳ク繧∝宛蠕。 */ -#define FP_CTRL_PC_24 0 /* テアタコナル */ -#define FP_CTRL_PC_53 1 /* ヌワタコナル */ -#define FP_CTRL_PC_64 3 /* ウネト・タコナル */ +#define FP_CTRL_PC_24 0 /* 蜊倡イセ蠎ヲ */ +#define FP_CTRL_PC_53 1 /* 蛟咲イセ蠎ヲ */ +#define FP_CTRL_PC_64 3 /* 諡。蠑オ邊セ蠎ヲ */ #define FP_CTRL_RC_NEAREST_EVEN 0 #define FP_CTRL_RC_DOWN 1 @@ -740,6 +736,7 @@ void idtr_dump(UINT32 base, UINT limit); void ldtr_dump(UINT32 base, UINT limit); void tr_dump(UINT16 selector, UINT32 base, UINT limit); UINT32 pde_dump(UINT32 base, int idx); +void segdesc_dump(descriptor_t *sdp); UINT32 convert_laddr_to_paddr(UINT32 laddr); UINT32 convert_vaddr_to_paddr(unsigned int idx, UINT32 offset); @@ -778,6 +775,7 @@ typedef struct { } disasm_context_t; int disasm(UINT32 *eip, disasm_context_t *ctx); +char *cpu_disasm2str(UINT32 eip); #ifdef __cplusplus } diff --git a/i386c/ia32/cpu_io.c b/i386c/ia32/cpu_io.c index 8de7fbcc..dfa4f14e 100644 --- a/i386c/ia32/cpu_io.c +++ b/i386c/ia32/cpu_io.c @@ -1,5 +1,3 @@ -/* $Id: cpu_io.c,v 1.8 2007/02/06 14:20:57 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -32,122 +30,90 @@ #include "iocore.h" #include "memory.h" -static void IOOUTCALL check_io(UINT port, UINT len); +static void CPUCALL check_io(UINT port, UINT len); -static void IOOUTCALL +static void CPUCALL check_io(UINT port, UINT len) { UINT off; - UINT8 bit; - UINT8 map; + UINT16 map; + UINT16 mask; if (CPU_STAT_IOLIMIT == 0) { VERBOSE(("check_io: CPU_STAT_IOLIMIT == 0 (port = %04x, len = %d)", port, len)); EXCEPTION(GP_EXCEPTION, 0); } - off = port / 8; - bit = 1 << (port % 8); - for (; len > 0; ++off, bit = 0x01) { - if (off >= CPU_STAT_IOLIMIT) { - VERBOSE(("check_io: off(%08x) >= CPU_STAT_IOLIMIT(%08x) (port = %04x, len = %d)", off, CPU_STAT_IOLIMIT, port, len)); - EXCEPTION(GP_EXCEPTION, 0); - } - - map = cpu_kmemoryread(CPU_STAT_IOADDR + off); - for (; (len > 0) && (bit != 0x00); bit <<= 1, --len) { - if (map & bit) { - VERBOSE(("check_io: (bitmap(0x%02x) & bit(0x%02x)) != 0 (port = %04x, len = %d)", map, bit, port, len)); - EXCEPTION(GP_EXCEPTION, 0); - } - } + if ((port + len) / 8 >= CPU_STAT_IOLIMIT) { + VERBOSE(("check_io: out of range: CPU_STAT_IOLIMIT(%08x) (port = %04x, len = %d)", CPU_STAT_IOLIMIT, port, len)); + EXCEPTION(GP_EXCEPTION, 0); } -} -#if defined(IA32_SUPPORT_DEBUG_REGISTER) && CPU_FAMILY >= 5 -INLINE static void IOOUTCALL -check_ioport_break_point(UINT port, UINT length) -{ - int i; - - if (CPU_STAT_BP && !(CPU_EFLAG & RF_FLAG)) { - for (i = 0; i < CPU_DEBUG_REG_INDEX_NUM; i++) { - if ((CPU_STAT_BP & (1 << i)) - && (CPU_DR7_GET_RW(i) == CPU_DR7_RW_IO) - - && ((port <= CPU_DR(i) && port + length > CPU_DR(i)) - || (port > CPU_DR(i) && port <= CPU_DR(i) + CPU_DR7_GET_LEN(i)))) { - CPU_STAT_BP_EVENT |= CPU_STAT_BP_EVENT_B(i); - } - } + off = port / 8; + mask = ((1 << len) - 1) << (port % 8); + map = cpu_kmemoryread_w(CPU_STAT_IOADDR + off); + if (map & mask) { + VERBOSE(("check_io: (bitmap(0x%04x) & bit(0x%04x)) != 0 (CPU_STAT_IOADDR=0x%08x, offset=0x%04x, port = 0x%04x, len = %d)", map, mask, CPU_STAT_IOADDR, off, port, len)); + EXCEPTION(GP_EXCEPTION, 0); } } -#else -#define check_ioport_break_point(port, length) -#endif -UINT8 +UINT8 IOINPCALL cpu_in(UINT port) { if (CPU_STAT_PM && (CPU_STAT_VM86 || (CPU_STAT_CPL > CPU_STAT_IOPL))) { check_io(port, 1); } - check_ioport_break_point(port, 1); return iocore_inp8(port); } -UINT16 +UINT16 IOINPCALL cpu_in_w(UINT port) { if (CPU_STAT_PM && (CPU_STAT_VM86 || (CPU_STAT_CPL > CPU_STAT_IOPL))) { check_io(port, 2); } - check_ioport_break_point(port, 2); return iocore_inp16(port); } -UINT32 +UINT32 IOINPCALL cpu_in_d(UINT port) { if (CPU_STAT_PM && (CPU_STAT_VM86 || (CPU_STAT_CPL > CPU_STAT_IOPL))) { check_io(port, 4); } - check_ioport_break_point(port, 4); return iocore_inp32(port); } -void +void IOOUTCALL cpu_out(UINT port, UINT8 data) { if (CPU_STAT_PM && (CPU_STAT_VM86 || (CPU_STAT_CPL > CPU_STAT_IOPL))) { check_io(port, 1); } - check_ioport_break_point(port, 1); iocore_out8(port, data); } -void +void IOOUTCALL cpu_out_w(UINT port, UINT16 data) { if (CPU_STAT_PM && (CPU_STAT_VM86 || (CPU_STAT_CPL > CPU_STAT_IOPL))) { check_io(port, 2); } - check_ioport_break_point(port, 2); iocore_out16(port, data); } -void +void IOOUTCALL cpu_out_d(UINT port, UINT32 data) { if (CPU_STAT_PM && (CPU_STAT_VM86 || (CPU_STAT_CPL > CPU_STAT_IOPL))) { check_io(port, 4); } - check_ioport_break_point(port, 4); iocore_out32(port, data); } diff --git a/i386c/ia32/cpu_io.h b/i386c/ia32/cpu_io.h index 35bbf48d..53841428 100644 --- a/i386c/ia32/cpu_io.h +++ b/i386c/ia32/cpu_io.h @@ -1,5 +1,3 @@ -/* $Id: cpu_io.h,v 1.3 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -28,16 +26,18 @@ #ifndef IA32_CPU_CPU_IO_H__ #define IA32_CPU_CPU_IO_H__ +#include "interface.h" + #ifdef __cplusplus extern "C" { #endif -UINT8 cpu_in(UINT port); -UINT16 cpu_in_w(UINT port); -UINT32 cpu_in_d(UINT port); -void cpu_out(UINT port, UINT8 val); -void cpu_out_w(UINT port, UINT16 val); -void cpu_out_d(UINT port, UINT32 val); +UINT8 IOINPCALL cpu_in(UINT port); +UINT16 IOINPCALL cpu_in_w(UINT port); +UINT32 IOINPCALL cpu_in_d(UINT port); +void IOOUTCALL cpu_out(UINT port, UINT8 val); +void IOOUTCALL cpu_out_w(UINT port, UINT16 val); +void IOOUTCALL cpu_out_d(UINT port, UINT32 val); #ifdef __cplusplus } diff --git a/i386c/ia32/cpu_mem.c b/i386c/ia32/cpu_mem.c index d53d38e5..837c755c 100644 --- a/i386c/ia32/cpu_mem.c +++ b/i386c/ia32/cpu_mem.c @@ -1,5 +1,3 @@ -/* $Id: cpu_mem.c,v 1.21 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2004 NONAKA Kimihiro * All rights reserved. @@ -33,273 +31,355 @@ /* * memory access check */ -void -cpu_memoryread_check(descriptor_t *sd, UINT32 offset, UINT length, int e) -{ - UINT32 uplimit; +static int MEMCALL check_limit_upstairs(descriptor_t *sdp, UINT32 offset, UINT len); +static void MEMCALL cpu_memoryread_check(descriptor_t *sdp, UINT32 offset, UINT len, int e); +static void MEMCALL cpu_memorywrite_check(descriptor_t *sdp, UINT32 offset, UINT len, int e); - if (CPU_STAT_PM) { - /* invalid */ - if (!sd->valid) { - VERBOSE(("cpu_memoryread_check: invalid")); - EXCEPTION(GP_EXCEPTION, 0); +static int MEMCALL +check_limit_upstairs(descriptor_t *sdp, UINT32 offset, UINT len) +{ + UINT32 limit; + UINT32 end; + + __ASSERT(sdp != NULL); + __ASSERT(len > 0); + + len--; + end = offset + len; + + if (SEG_IS_DATA(sdp) && SEG_IS_EXPANDDOWN_DATA(sdp)) { + /* expand-down data segment */ + limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff; + if (sdp->u.seg.limit == 0) { + /* + * 32bit 16bit + * +-------+ +-------+ FFFFFFFFh + * | | | | + * | | + [1] + 0000FFFFh + * | valid | | | + * | | +-------+ 0000FFFFh - len -1 + * | | | valid | + * +-------+ +-------+ 00000000h + */ + if (!SEG_IS_32BIT(sdp)) { + if ((len > limit) /* len check */ + || (end > limit)) { /* [1] */ + goto exc; + } + } else { + sdp->flag |= CPU_DESC_FLAG_WHOLEADR; + } + } else { + /* + * 32bit 16bit + * +-------+ +-------+ FFFFFFFFh + * | [2] | | | + * +-------+ +.......+ FFFFFFFFh - len - 1 + * | | | [2] | + * | | +.......+ 0000FFFFh + * | valid | | | + * | | +-------+ 0000FFFFh - len - 1 + * | | | valid | + * +-------+ +-------+ seg.limit + * | [1] | | [1] | + * +-------+ +-------+ 00000000h + */ + if ((len > limit - sdp->u.seg.limit) /* len check */ + || (end < offset) /* wrap check */ + || (offset < sdp->u.seg.limit) /* [1] */ + || (end > limit)) { /* [2] */ + goto exc; + } } - - /* not present */ - if (!sd->p) { - VERBOSE(("cpu_memoryread_check: not present")); - EXCEPTION(e, 0); + } else { + /* expand-up data or code segment */ + if (sdp->u.seg.limit == 0xffffffff) { + /* + * 16/32bit + * +-------+ FFFFFFFFh + * | | + * | | + * | valid | + * | | + * | | + * +-------+ 00000000h + */ + sdp->flag |= CPU_DESC_FLAG_WHOLEADR; + } else { + /* + * 16/32bit + * +-------+ FFFFFFFFh + * | | + * | | + * | [1] | + * +.......+ seg.limit + * | | + * +-------+ seg.limit - len - 1 + * | valid | + * +-------+ 00000000h + */ + if ((len > sdp->u.seg.limit) /* len check */ + || (end < offset) /* wrap check */ + || (end > sdp->u.seg.limit + 1)) { /* [1] */ + goto exc; + } } } + return 1; /* Ok! */ - switch (sd->type) { +exc: + VERBOSE(("check_limit_upstairs: check failure: offset = 0x%08x, len = %d", offset, len + 1)); +#if defined(DEBUG) + segdesc_dump(sdp); +#endif + return 0; +} + +static void MEMCALL +cpu_memoryread_check(descriptor_t *sdp, UINT32 offset, UINT len, int e) +{ + + __ASSERT(sdp != NULL); + __ASSERT(len > 0); + + if (!SEG_IS_VALID(sdp)) { + e = GP_EXCEPTION; + goto exc; + } + if (!SEG_IS_PRESENT(sdp) + || SEG_IS_SYSTEM(sdp) + || (SEG_IS_CODE(sdp) && !SEG_IS_READABLE_CODE(sdp))) { + goto exc; + } + + switch (sdp->type) { case 0: case 1: /* ro */ case 2: case 3: /* rw */ - case 10: case 11: /* rx */ - case 14: case 15: /* rxc */ - if (offset > sd->u.seg.limit - length + 1) { - VERBOSE(("cpu_memoryread_check: offset(%08x) > sd->u.seg.limit(%08x) - length(%08x) + 1", offset, sd->u.seg.limit, length)); - EXCEPTION(e, 0); - } - if (length - 1 > sd->u.seg.limit) { - VERBOSE(("cpu_memoryread_check: length(%08x) - 1 > sd->u.seg.limit(%08x)", length, sd->u.seg.limit)); - EXCEPTION(e, 0); - } - break; - case 4: case 5: /* ro (expand down) */ case 6: case 7: /* rw (expand down) */ - uplimit = sd->d ? 0xffffffff : 0x0000ffff; - if (offset <= sd->u.seg.limit) { - VERBOSE(("cpu_memoryread_check: offset(%08x) <= sd->u.seg.limit(%08x)", offset, sd->u.seg.limit)); - EXCEPTION(e, 0); - } - if (offset > uplimit) { - VERBOSE(("cpu_memoryread_check: offset(%08x) > uplimit(%08x)", offset, uplimit)); - EXCEPTION(e, 0); - } - if (uplimit - offset < length - 1) { - VERBOSE(("cpu_memoryread_check: uplimit(%08x) - offset(%08x) < length(%08x) - 1", uplimit, offset, length)); - EXCEPTION(e, 0); - } + case 10: case 11: /* rx */ + case 14: case 15: /* rxc */ + if (!check_limit_upstairs(sdp, offset, len)) + goto exc; break; default: - VERBOSE(("cpu_memoryread_check: invalid type (type = %d)", sd->type)); - EXCEPTION(e, 0); - break; + goto exc; } - sd->flag |= CPU_DESC_FLAG_READABLE; + sdp->flag |= CPU_DESC_FLAG_READABLE; + return; + +exc: + VERBOSE(("cpu_memoryread_check: check failure: offset = 0x%08x, len = %d", offset, len)); +#if defined(DEBUG) + segdesc_dump(sdp); +#endif + EXCEPTION(e, 0); } -void -cpu_memorywrite_check(descriptor_t *sd, UINT32 offset, UINT length, int e) +static void MEMCALL +cpu_memorywrite_check(descriptor_t *sdp, UINT32 offset, UINT len, int e) { - UINT32 uplimit; - if (CPU_STAT_PM) { - /* invalid */ - if (!sd->valid) { - VERBOSE(("cpu_memorywrite_check: invalid")); - EXCEPTION(GP_EXCEPTION, 0); - } + __ASSERT(sdp != NULL); + __ASSERT(len > 0); - /* not present */ - if (!sd->p) { - VERBOSE(("cpu_memorywrite_check: not present")); - EXCEPTION(e, 0); - } - - if (!sd->s) { - VERBOSE(("cpu_memorywrite_check: system segment")); - EXCEPTION(e, 0); - } + if (!SEG_IS_VALID(sdp)) { + e = GP_EXCEPTION; + goto exc; + } + if (!SEG_IS_PRESENT(sdp) + || SEG_IS_SYSTEM(sdp) + || SEG_IS_CODE(sdp) + || (SEG_IS_DATA(sdp) && !SEG_IS_WRITABLE_DATA(sdp))) { + goto exc; } - switch (sd->type) { + switch (sdp->type) { case 2: case 3: /* rw */ - if (offset > sd->u.seg.limit - length + 1) { - VERBOSE(("cpu_memorywrite_check: offset(%08x) > sd->u.seg.limit(%08x) - length(%08x) + 1", offset, sd->u.seg.limit, length)); - EXCEPTION(e, 0); - } - if (length - 1 > sd->u.seg.limit) { - VERBOSE(("cpu_memorywrite_check: length(%08x) - 1 > sd->u.seg.limit(%08x)", length, sd->u.seg.limit)); - EXCEPTION(e, 0); - } - break; - case 6: case 7: /* rw (expand down) */ - uplimit = sd->d ? 0xffffffff : 0x0000ffff; - if (offset <= sd->u.seg.limit) { - VERBOSE(("cpu_memorywrite_check: offset(%08x) <= sd->u.seg.limit(%08x)", offset, sd->u.seg.limit)); - EXCEPTION(e, 0); - } - if (offset > uplimit) { - VERBOSE(("cpu_memorywrite_check: offset(%08x) > uplimit(%08x)", offset, uplimit)); - EXCEPTION(e, 0); - } - if (uplimit - offset < length - 1) { - VERBOSE(("cpu_memorywrite_check: uplimit(%08x) - offset(%08x) < length(%08x) - 1", uplimit, offset, length)); - EXCEPTION(e, 0); - } + if (!check_limit_upstairs(sdp, offset, len)) + goto exc; break; default: - VERBOSE(("cpu_memorywrite_check: invalid type (type = %d)", sd->type)); - EXCEPTION(e, 0); - break; + goto exc; } - sd->flag |= CPU_DESC_FLAG_WRITABLE; + sdp->flag |= CPU_DESC_FLAG_WRITABLE | CPU_DESC_FLAG_READABLE; + return; + +exc: + VERBOSE(("cpu_memorywrite_check: check failure: offset = 0x%08x, len = %d", offset, len)); +#if defined(DEBUG) + segdesc_dump(sdp); +#endif + EXCEPTION(e, 0); } -void -cpu_stack_push_check(UINT16 s, descriptor_t *sd, UINT32 esp, UINT length) +void MEMCALL +cpu_stack_push_check(UINT16 s, descriptor_t *sdp, UINT32 sp, UINT len) { UINT32 limit; + UINT32 start; - if (CPU_STAT_PM) { - if (!sd->valid || !sd->p) { - VERBOSE(("cpu_stack_push_check: valid = %d, present = %d", sd->valid, sd->p)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); - } - if (!sd->s || sd->u.seg.c || !sd->u.seg.wr) { - VERBOSE(("cpu_stack_push_check: s = %d, c = %d, wr", sd->s, sd->u.seg.c, sd->u.seg.wr)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); - } + __ASSERT(sdp != NULL); + __ASSERT(len > 0); - if (!sd->d) { - limit = 0xffff; - } else { - limit = 0xffffffff; - } - if (sd->u.seg.ec) { - /* expand-down stack */ - if ((esp == 0) - || (esp < length) - || (esp - length <= sd->u.seg.limit) - || (esp > limit)) { - VERBOSE(("cpu_stack_push_check: expand-down, esp = %08x, length = %08x", esp, length)); - VERBOSE(("cpu_stack_push_check: limit = %08x, seglimit = %08x", limit, sd->u.seg.limit)); - VERBOSE(("cpu_stack_push_check: segbase = %08x, segend = %08x", sd->u.seg.segbase, sd->u.seg.segend)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); - } - } else { - /* expand-up stack */ - if (esp == 0) { - if ((sd->d && (sd->u.seg.segend != 0xffffffff)) - || (!sd->d && (sd->u.seg.segend != 0xffff))) { - VERBOSE(("cpu_stack_push_check: expand-up, esp = %08x, length = %08x", esp, length)); - VERBOSE(("cpu_stack_push_check: limit = %08x, seglimit = %08x", limit, sd->u.seg.limit)); - VERBOSE(("cpu_stack_push_check: segbase = %08x, segend = %08x", sd->u.seg.segbase, sd->u.seg.segend)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); - } - } else { - if ((esp < length) - || (esp - 1 > sd->u.seg.limit)) { - VERBOSE(("cpu_stack_push_check: expand-up, esp = %08x, length = %08x", esp, length)); - VERBOSE(("cpu_stack_push_check: limit = %08x, seglimit = %08x", limit, sd->u.seg.limit)); - VERBOSE(("cpu_stack_push_check: segbase = %08x, segend = %08x", sd->u.seg.segbase, sd->u.seg.segend)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); - } - } - } + len--; + + if (!SEG_IS_VALID(sdp) + || !SEG_IS_PRESENT(sdp) + || SEG_IS_SYSTEM(sdp) + || SEG_IS_CODE(sdp) + || !SEG_IS_WRITABLE_DATA(sdp)) { + goto exc; } -} -void -cpu_stack_pop_check(UINT16 s, descriptor_t *sd, UINT32 esp, UINT length) -{ - UINT32 limit; + start = sp - len; + limit = SEG_IS_32BIT(sdp) ? 0xffffffff : 0x0000ffff; - if (CPU_STAT_PM) { - if (!sd->valid || !sd->p) { - VERBOSE(("cpu_stack_pop_check: valid = %d, present = %d", sd->valid, sd->p)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); - } - if (!sd->s || sd->u.seg.c || !sd->u.seg.wr) { - VERBOSE(("cpu_stack_pop_check: s = %d, c = %d, wr", sd->s, sd->u.seg.c, sd->u.seg.wr)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); + if (SEG_IS_EXPANDDOWN_DATA(sdp)) { + /* expand-down stack */ + if (!SEG_IS_32BIT(sdp)) { + if (sp > limit) { /* [*] */ + goto exc; + } } - - if (!sd->d) { - limit = 0xffff; + if (sdp->u.seg.limit == 0) { + /* + * 32bit 16bit + * +-------+ +-------+ FFFFFFFFh + * | | | [*] | + * | | +-------+ 0000FFFFh + * | valid | | | + * | | | valid | + * | | | | + * +-------+ +-------+ 00000000h + */ + if (!SEG_IS_32BIT(sdp)) { + if (sp > limit) { /* [1] */ + goto exc; + } + } else { + sdp->flag |= CPU_DESC_FLAG_WHOLEADR; + } } else { - limit = 0xffffffff; + /* + * 32bit 16bit + * +-------+ +-------+ FFFFFFFFh + * | | | [*] | + * | valid | +-------+ 0000FFFFh + * | | | valid | + * +-------+ +-------+ seg.limit + len - 1 + * | | | | + * +..[1]..+ +..[1]..+ seg.limit + * | | | | + * +-------+ +-------+ 00000000h + */ + if ((len > limit - sdp->u.seg.limit) /* len check */ + || (start > sp) /* wrap check */ + || (start < sdp->u.seg.limit)) { /* [1] */ + goto exc; + } } - if (sd->u.seg.ec) { - /* expand-down stack */ - if ((esp == limit) - || ((limit - esp) + 1 < length)) { - VERBOSE(("cpu_stack_pop_check: expand-up, esp = %08x, length = %08x", esp, length)); - VERBOSE(("cpu_stack_pop_check: limit = %08x, seglimit = %08x", limit, sd->u.seg.limit)); - VERBOSE(("cpu_stack_pop_check: segbase = %08x, segend = %08x", sd->u.seg.segbase, sd->u.seg.segend)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); + } else { + /* expand-up stack */ + if (sdp->u.seg.limit == limit) { + /* + * 32bit 16bit + * +-------+ +-------+ FFFFFFFFh + * | | | [1] | + * | | +-------+ 0000FFFFh + * | valid | | | + * | | | valid | + * | | | | + * +-------+ +-------+ 00000000h + */ + if (!SEG_IS_32BIT(sdp)) { + if (sp > limit) { /* [1] */ + goto exc; + } + } else { + sdp->flag |= CPU_DESC_FLAG_WHOLEADR; } } else { - /* expand-up stack */ - if ((esp == limit) - || (sd->u.seg.segend == 0) - || (esp > sd->u.seg.limit) - || ((sd->u.seg.limit - esp) + 1 < length)) { - VERBOSE(("cpu_stack_pop_check: expand-up, esp = %08x, length = %08x", esp, length)); - VERBOSE(("cpu_stack_pop_check: limit = %08x, seglimit = %08x", limit, sd->u.seg.limit)); - VERBOSE(("cpu_stack_pop_check: segbase = %08x, segend = %08x", sd->u.seg.segbase, sd->u.seg.segend)); - EXCEPTION(SS_EXCEPTION, s & 0xfffc); + /* + * 32bit 16bit + * +-------+ +-------+ FFFFFFFFh + * | | | | + * | [1] | + [1] + 0000FFFFh + * | | | | + * +-------+ +-------+ seg.limit + * | valid | | valid | + * +.......+ +.......+ len - 1 + * | [+] | | [+] | + * +-------+ +-------+ 00000000h + * + * [+]: wrap check + */ + if ((len > sdp->u.seg.limit) /* len check */ + || (start > sp) /* wrap check */ + || (sp > sdp->u.seg.limit + 1)) { /* [1] */ + goto exc; } } } + return; + +exc: + VERBOSE(("cpu_stack_push_check: check failure: selector = 0x%04x, sp = 0x%08x, len = %d", s, sp, len)); +#if defined(DEBUG) + segdesc_dump(sdp); +#endif + EXCEPTION(SS_EXCEPTION, s & 0xfffc); } -#if defined(IA32_SUPPORT_DEBUG_REGISTER) -INLINE static void -check_memory_break_point(UINT32 address, UINT length, UINT rw) +void MEMCALL +cpu_stack_pop_check(UINT16 s, descriptor_t *sdp, UINT32 sp, UINT len) { - int i; - if (CPU_STAT_BP && !(CPU_EFLAG & RF_FLAG)) { - for (i = 0; i < CPU_DEBUG_REG_INDEX_NUM; i++) { - if ((CPU_STAT_BP & (1 << i)) - && (CPU_DR7_GET_RW(i) & rw) + __ASSERT(sdp != NULL); + __ASSERT(len > 0); - && ((address <= CPU_DR(i) && address + length > CPU_DR(i)) - || (address > CPU_DR(i) && address < CPU_DR(i) + CPU_DR7_GET_LEN(i)))) { - CPU_STAT_BP_EVENT |= CPU_STAT_BP_EVENT_B(i); - } - } + if (!SEG_IS_VALID(sdp) + || !SEG_IS_PRESENT(sdp) + || SEG_IS_SYSTEM(sdp) + || SEG_IS_CODE(sdp) + || !SEG_IS_WRITABLE_DATA(sdp)) { + goto exc; } -} -#else -#define check_memory_break_point(address, length, rw) + + if (!check_limit_upstairs(sdp, sp, len)) + goto exc; + return; + +exc: + VERBOSE(("cpu_stack_pop_check: check failure: selector = 0x%04x, sp = 0x%08x, len = %d", s, sp, len)); +#if defined(DEBUG) + segdesc_dump(sdp); #endif + EXCEPTION(SS_EXCEPTION, s & 0xfffc); +} /* * code fetch */ -#define ucrw (CPU_PAGE_READ_CODE | CPU_STAT_USER_MODE) - UINT8 MEMCALL cpu_codefetch(UINT32 offset) { - descriptor_t *sd; + const int ucrw = CPU_PAGE_READ_CODE | CPU_STAT_USER_MODE; + descriptor_t *sdp; UINT32 addr; -#if defined(IA32_SUPPORT_TLB) - TLB_ENTRY_T *ep; -#endif - sd = &CPU_STAT_SREG(CPU_CS_INDEX); - if (offset <= sd->u.seg.limit) { - addr = sd->u.seg.segbase + offset; - if (!CPU_STAT_PAGING) - return cpu_memoryread(addr); -#if defined(IA32_SUPPORT_TLB) - ep = tlb_lookup(addr, ucrw); - if (ep != NULL && ep->memp != NULL) { - return ep->memp[addr & 0xfff]; - } -#endif - return cpu_linear_memory_read_b(addr, ucrw); - } + sdp = &CPU_CS_DESC; + addr = sdp->u.seg.segbase + offset; + + if (!CPU_STAT_PM) + return cpu_memoryread(addr); + if (offset <= sdp->u.seg.limit) + return cpu_lmemoryread(addr, ucrw); + EXCEPTION(GP_EXCEPTION, 0); return 0; /* compiler happy */ } @@ -307,34 +387,18 @@ cpu_codefetch(UINT32 offset) UINT16 MEMCALL cpu_codefetch_w(UINT32 offset) { - descriptor_t *sd; + const int ucrw = CPU_PAGE_READ_CODE | CPU_STAT_USER_MODE; + descriptor_t *sdp; UINT32 addr; -#if defined(IA32_SUPPORT_TLB) - TLB_ENTRY_T *ep; - UINT16 value; -#endif - sd = &CPU_STAT_SREG(CPU_CS_INDEX); - if (offset <= sd->u.seg.limit - 1) { - addr = sd->u.seg.segbase + offset; - if (!CPU_STAT_PAGING) - return cpu_memoryread_w(addr); -#if defined(IA32_SUPPORT_TLB) - ep = tlb_lookup(addr, ucrw); - if (ep != NULL && ep->memp != NULL) { - if ((addr + 1) & 0x00000fff) { - return LOADINTELWORD(ep->memp + (addr & 0xfff)); - } - value = ep->memp[0xfff]; - ep = tlb_lookup(addr + 1, ucrw); - if (ep != NULL && ep->memp != NULL) { - value += (UINT16)ep->memp[0] << 8; - return value; - } - } -#endif - return cpu_linear_memory_read_w(addr, ucrw); - } + sdp = &CPU_CS_DESC; + addr = sdp->u.seg.segbase + offset; + + if (!CPU_STAT_PM) + return cpu_memoryread_w(addr); + if (offset <= sdp->u.seg.limit - 1) + return cpu_lmemoryread_w(addr, ucrw); + EXCEPTION(GP_EXCEPTION, 0); return 0; /* compiler happy */ } @@ -342,56 +406,19 @@ cpu_codefetch_w(UINT32 offset) UINT32 MEMCALL cpu_codefetch_d(UINT32 offset) { - descriptor_t *sd; + const int ucrw = CPU_PAGE_READ_CODE | CPU_STAT_USER_MODE; + descriptor_t *sdp; UINT32 addr; -#if defined(IA32_SUPPORT_TLB) - TLB_ENTRY_T *ep[2]; - UINT32 value; - UINT remain; -#endif - sd = &CPU_STAT_SREG(CPU_CS_INDEX); - if (offset <= sd->u.seg.limit - 3) { - addr = sd->u.seg.segbase + offset; - if (!CPU_STAT_PAGING) - return cpu_memoryread_d(addr); -#if defined(IA32_SUPPORT_TLB) - ep[0] = tlb_lookup(addr, ucrw); - if (ep[0] != NULL && ep[0]->memp != NULL) { - remain = 0x1000 - (addr & 0xfff); - if (remain >= 4) { - return LOADINTELDWORD(ep[0]->memp + (addr & 0xfff)); - } - ep[1] = tlb_lookup(addr + remain, ucrw); - if (ep[1] != NULL && ep[1]->memp != NULL) { - switch (remain) { - case 3: - value = ep[0]->memp[0xffd]; - value += (UINT32)LOADINTELWORD(ep[0]->memp + 0xffe) << 8; - value += (UINT32)ep[1]->memp[0] << 24; - break; - - case 2: - value = LOADINTELWORD(ep[0]->memp + 0xffe); - value += (UINT32)LOADINTELWORD(ep[1]->memp + 0) << 16; - break; - - case 1: - value = ep[0]->memp[0xfff]; - value += (UINT32)LOADINTELWORD(ep[1]->memp + 0) << 8; - value += (UINT32)ep[1]->memp[2] << 24; - break; - - default: - ia32_panic("cpu_codefetch_d(): out of range. (remain = %d)\n", remain); - return (UINT32)-1; - } - return value; - } - } -#endif - return cpu_linear_memory_read_d(addr, ucrw); - } + sdp = &CPU_CS_DESC; + addr = sdp->u.seg.segbase + offset; + + if (!CPU_STAT_PM) + return cpu_memoryread_d(addr); + + if (offset <= sdp->u.seg.limit - 3) + return cpu_lmemoryread_d(addr, ucrw); + EXCEPTION(GP_EXCEPTION, 0); return 0; /* compiler happy */ } @@ -400,199 +427,92 @@ cpu_codefetch_d(UINT32 offset) * additional physical address memory access functions */ UINT64 MEMCALL -cpu_memoryread_q(UINT32 address) +cpu_memoryread_q(UINT32 paddr) { UINT64 value; - value = cpu_memoryread_d(address); - value += (UINT64)cpu_memoryread_d(address + 4) << 32; + value = cpu_memoryread_d(paddr); + value += (UINT64)cpu_memoryread_d(paddr + 4) << 32; return value; } -REG80 MEMCALL -cpu_memoryread_f(UINT32 address) +void MEMCALL +cpu_memorywrite_q(UINT32 paddr, UINT64 value) { - REG80 value; - UINT i; - for (i = 0; i < sizeof(REG80); ++i) { - value.b[i] = cpu_memoryread(address + i); - } - return value; + cpu_memorywrite_d(paddr, (UINT32)value); + cpu_memorywrite_d(paddr + 4, (UINT32)(value >> 32)); } -void MEMCALL -cpu_memorywrite_q(UINT32 address, UINT64 value) +REG80 MEMCALL +cpu_memoryread_f(UINT32 paddr) { + REG80 value; + int i; - cpu_memorywrite_d(address, (UINT32)value); - cpu_memorywrite_d(address + 4, (UINT32)(value >> 32)); + for (i = 0; i < (int)sizeof(REG80); ++i) { + value.b[i] = cpu_memoryread(paddr + i); + } + return value; } void MEMCALL -cpu_memorywrite_f(UINT32 address, const REG80 *value) +cpu_memorywrite_f(UINT32 paddr, const REG80 *value) { - UINT i; + int i; - for (i = 0; i < sizeof(REG80); ++i) { - cpu_memorywrite(address + i, value->b[i]); + for (i = 0; i < (int)sizeof(REG80); ++i) { + cpu_memorywrite(paddr + i, value->b[i]); } } /* * virtual address memory access functions */ -#include "cpu_mem.mcr" +#define CHOOSE_EXCEPTION(sreg) \ + (((sreg) == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION) -VIRTUAL_ADDRESS_MEMORY_ACCESS_FUNCTION(b, UINT8, 1) -VIRTUAL_ADDRESS_MEMORY_ACCESS_FUNCTION(w, UINT16, 2) -VIRTUAL_ADDRESS_MEMORY_ACCESS_FUNCTION(d, UINT32, 4) - -UINT64 MEMCALL -cpu_vmemoryread_q(int idx, UINT32 offset) -{ - descriptor_t *sd; - UINT32 addr; - int exc; - - __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); - - sd = &CPU_STAT_SREG(idx); - if (!sd->valid) { - exc = GP_EXCEPTION; - goto err; - } - - if (!(sd->flag & CPU_DESC_FLAG_READABLE)) { - cpu_memoryread_check(sd, offset, 8, - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); - } else { - switch (sd->type) { - case 4: case 5: case 6: case 7: - if (offset - (8 - 1) <= sd->u.seg.limit) - goto range_failure; - break; - - default: - if (offset > sd->u.seg.limit - (8 - 1)) - goto range_failure; - break; - } - } - addr = sd->u.seg.segbase + offset; - check_memory_break_point(addr, 8, CPU_DR7_RW_RO); - if (!CPU_STAT_PAGING) - return cpu_memoryread_q(addr); - return cpu_linear_memory_read_q(addr, CPU_PAGE_READ_DATA | CPU_STAT_USER_MODE); - -range_failure: - if (idx == CPU_SS_INDEX) { - exc = SS_EXCEPTION; - } else { - exc = GP_EXCEPTION; - } - VERBOSE(("cpu_vmemoryread_q: type = %d, offset = %08x, limit = %08x", sd->type, offset, sd->u.seg.limit)); -err: - EXCEPTION(exc, 0); - return 0; /* compiler happy */ -} - -void MEMCALL -cpu_vmemorywrite_q(int idx, UINT32 offset, UINT64 value) -{ - descriptor_t *sd; - UINT32 addr; - int exc; - - __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); - - sd = &CPU_STAT_SREG(idx); - if (!sd->valid) { - exc = GP_EXCEPTION; - goto err; - } - - if (!(sd->flag & CPU_DESC_FLAG_WRITABLE)) { - cpu_memorywrite_check(sd, offset, 8, - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); - } else { - switch (sd->type) { - case 6: case 7: - if (offset - (8 - 1) <= sd->u.seg.limit) - goto range_failure; - break; - - default: - if (offset > sd->u.seg.limit - (8 - 1)) - goto range_failure; - break; - } - } - addr = sd->u.seg.segbase + offset; - check_memory_break_point(addr, 8, CPU_DR7_RW_RW); - if (!CPU_STAT_PAGING) { - cpu_memorywrite_q(addr, value); - } else { - cpu_linear_memory_write_q(addr, value, CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE); - } - return; +#include "cpu_mem.mcr" -range_failure: - if (idx == CPU_SS_INDEX) { - exc = SS_EXCEPTION; - } else { - exc = GP_EXCEPTION; - } - VERBOSE(("cpu_vmemorywrite_q: type = %d, offset = %08x, limit = %08x", sd->type, offset, sd->u.seg.limit)); -err: - EXCEPTION(exc, 0); -} +DECLARE_VIRTUAL_ADDRESS_MEMORY_RW_FUNCTIONS(b, UINT8, 1) +DECLARE_VIRTUAL_ADDRESS_MEMORY_RMW_FUNCTIONS(b, UINT8, 1) +DECLARE_VIRTUAL_ADDRESS_MEMORY_RW_FUNCTIONS(w, UINT16, 2) +DECLARE_VIRTUAL_ADDRESS_MEMORY_RMW_FUNCTIONS(w, UINT16, 2) +DECLARE_VIRTUAL_ADDRESS_MEMORY_RW_FUNCTIONS(d, UINT32, 4) +DECLARE_VIRTUAL_ADDRESS_MEMORY_RMW_FUNCTIONS(d, UINT32, 4) +DECLARE_VIRTUAL_ADDRESS_MEMORY_RW_FUNCTIONS(q, UINT64, 8) REG80 MEMCALL cpu_vmemoryread_f(int idx, UINT32 offset) { - descriptor_t *sd; + descriptor_t *sdp; UINT32 addr; int exc; __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); - sd = &CPU_STAT_SREG(idx); - if (!sd->valid) { + sdp = &CPU_STAT_SREG(idx); + addr = sdp->u.seg.segbase + offset; + + if (!CPU_STAT_PM) + return cpu_memoryread_f(addr); + + if (!SEG_IS_VALID(sdp)) { exc = GP_EXCEPTION; goto err; } - - if (!(sd->flag & CPU_DESC_FLAG_READABLE)) { - cpu_memoryread_check(sd, offset, 10, - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); - } else { - switch (sd->type) { - case 4: case 5: case 6: case 7: - if (offset - (10 - 1) <= sd->u.seg.limit) - goto range_failure; - break; - - default: - if (offset > sd->u.seg.limit - (10 - 1)) - goto range_failure; - break; - } + if (!(sdp->flag & CPU_DESC_FLAG_READABLE)) { + cpu_memoryread_check(sdp, offset, 10, CHOOSE_EXCEPTION(idx)); + } else if (!(sdp->flag & CPU_DESC_FLAG_WHOLEADR)) { + if (!check_limit_upstairs(sdp, offset, 10)) + goto range_failure; } - addr = sd->u.seg.segbase + offset; - check_memory_break_point(addr, 10, CPU_DR7_RW_RO); - if (!CPU_STAT_PAGING) - return cpu_memoryread_f(addr); - return cpu_linear_memory_read_f(addr, CPU_PAGE_READ_DATA | CPU_STAT_USER_MODE); + return cpu_lmemoryread_f(addr, CPU_PAGE_READ_DATA | CPU_STAT_USER_MODE); range_failure: - if (idx == CPU_SS_INDEX) { - exc = SS_EXCEPTION; - } else { - exc = GP_EXCEPTION; - } - VERBOSE(("cpu_vmemoryread_f: type = %d, offset = %08x, limit = %08x", sd->type, offset, sd->u.seg.limit)); + VERBOSE(("cpu_vmemoryread_f: type = %d, offset = %08x, limit = %08x", sdp->type, offset, sdp->u.seg.limit)); + exc = CHOOSE_EXCEPTION(idx); err: EXCEPTION(exc, 0); { @@ -605,50 +525,36 @@ cpu_vmemoryread_f(int idx, UINT32 offset) void MEMCALL cpu_vmemorywrite_f(int idx, UINT32 offset, const REG80 *value) { - descriptor_t *sd; + descriptor_t *sdp; UINT32 addr; int exc; __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); - sd = &CPU_STAT_SREG(idx); - if (!sd->valid) { - exc = GP_EXCEPTION; - goto err; + sdp = &CPU_STAT_SREG(idx); + addr = sdp->u.seg.segbase + offset; + + if (!CPU_STAT_PM) { + cpu_memorywrite_f(addr, value); + return; } - if (!(sd->flag & CPU_DESC_FLAG_WRITABLE)) { - cpu_memorywrite_check(sd, offset, 10, - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); - } else { - switch (sd->type) { - case 6: case 7: - if (offset - (10 - 1) <= sd->u.seg.limit) - goto range_failure; - break; - - default: - if (offset > sd->u.seg.limit - (10 - 1)) - goto range_failure; - break; - } + if (!SEG_IS_VALID(sdp)) { + exc = GP_EXCEPTION; + goto err; } - addr = sd->u.seg.segbase + offset; - check_memory_break_point(addr, 10, CPU_DR7_RW_RW); - if (!CPU_STAT_PAGING) { - cpu_memorywrite_f(addr, value); - } else { - cpu_linear_memory_write_f(addr, value, CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE); + if (!(sdp->flag & CPU_DESC_FLAG_WRITABLE)) { + cpu_memorywrite_check(sdp, offset, 10, CHOOSE_EXCEPTION(idx)); + } else if (!(sdp->flag & CPU_DESC_FLAG_WHOLEADR)) { + if (!check_limit_upstairs(sdp, offset, 10)) + goto range_failure; } + cpu_lmemorywrite_f(addr, value, CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE); return; range_failure: - if (idx == CPU_SS_INDEX) { - exc = SS_EXCEPTION; - } else { - exc = GP_EXCEPTION; - } - VERBOSE(("cpu_vmemorywrite_f: type = %d, offset = %08x, limit = %08x", sd->type, offset, sd->u.seg.limit)); + VERBOSE(("cpu_vmemorywrite_f: type = %d, offset = %08x, limit = %08x", sdp->type, offset, sdp->u.seg.limit)); + exc = CHOOSE_EXCEPTION(idx); err: EXCEPTION(exc, 0); } diff --git a/i386c/ia32/cpu_mem.h b/i386c/ia32/cpu_mem.h index fdbaa5db..931778e0 100644 --- a/i386c/ia32/cpu_mem.h +++ b/i386c/ia32/cpu_mem.h @@ -1,5 +1,3 @@ -/* $Id: cpu_mem.h,v 1.10 2007/02/06 14:20:57 monaka Exp $ */ - /* * Copyright (c) 2002-2004 NONAKA Kimihiro * All rights reserved. @@ -38,47 +36,46 @@ extern "C" { /* * memory access check */ -void cpu_memoryread_check(descriptor_t *sd, UINT32 madr, UINT length, int e); -void cpu_memorywrite_check(descriptor_t *sd, UINT32 madr, UINT length, int e); -void cpu_stack_push_check(UINT16 s, descriptor_t *sd, UINT32 madr, UINT length); -void cpu_stack_pop_check(UINT16 s, descriptor_t *sd, UINT32 madr, UINT length); -#define STACK_PUSH_CHECK(s, sd, addr, n) cpu_stack_push_check(s, sd, addr, n) -#define STACK_POP_CHECK(s, sd, addr, n) cpu_stack_pop_check(s, sd, addr, n) +void MEMCALL cpu_stack_push_check(UINT16 s, descriptor_t *sdp, UINT32 sp, UINT len); +void MEMCALL cpu_stack_pop_check(UINT16 s, descriptor_t *sdp, UINT32 sp, UINT len); +#define SS_PUSH_CHECK(sp, len) \ + cpu_stack_push_check(CPU_SS_INDEX, &CPU_SS_DESC, (sp), (len)) +#define SS_POP_CHECK(sp, len) \ + cpu_stack_pop_check(CPU_SS_INDEX, &CPU_SS_DESC, (sp), (len)) /* * virtual address function */ void MEMCALL cpu_vmemorywrite_b(int idx, UINT32 offset, UINT8 value); +#define cpu_vmemorywrite(i,o,v) cpu_vmemorywrite_b(i,o,v) void MEMCALL cpu_vmemorywrite_w(int idx, UINT32 offset, UINT16 value); void MEMCALL cpu_vmemorywrite_d(int idx, UINT32 offset, UINT32 value); void MEMCALL cpu_vmemorywrite_q(int idx, UINT32 offset, UINT64 value); void MEMCALL cpu_vmemorywrite_f(int idx, UINT32 offset, const REG80 *value); UINT8 MEMCALL cpu_vmemoryread_b(int idx, UINT32 offset); +#define cpu_vmemoryread(i,o) cpu_vmemoryread_b(i,o) UINT16 MEMCALL cpu_vmemoryread_w(int idx, UINT32 offset); UINT32 MEMCALL cpu_vmemoryread_d(int idx, UINT32 offset); UINT64 MEMCALL cpu_vmemoryread_q(int idx, UINT32 offset); REG80 MEMCALL cpu_vmemoryread_f(int idx, UINT32 offset); -UINT32 MEMCALL cpu_memory_access_va_RMW_b(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg); -UINT32 MEMCALL cpu_memory_access_va_RMW_w(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg); -UINT32 MEMCALL cpu_memory_access_va_RMW_d(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg); -#define cpu_vmemorywrite(i,o,v) cpu_vmemorywrite_b(i,o,v) -#define cpu_vmemoryread(i,o) cpu_vmemoryread_b(i,o) -#define cpu_memory_access_va_RMW(i,o,f,a) cpu_memory_access_va_RMW_b(i,o,f,a) +UINT32 MEMCALL cpu_vmemory_RMW_b(int idx, UINT32 offset, UINT32 (CPUCALL *func)(UINT32, void *), void *arg); +UINT32 MEMCALL cpu_vmemory_RMW_w(int idx, UINT32 offset, UINT32 (CPUCALL *func)(UINT32, void *), void *arg); +UINT32 MEMCALL cpu_vmemory_RMW_d(int idx, UINT32 offset, UINT32 (CPUCALL *func)(UINT32, void *), void *arg); /* * code fetch */ -UINT8 MEMCALL cpu_codefetch(UINT32 madr); -UINT16 MEMCALL cpu_codefetch_w(UINT32 madr); -UINT32 MEMCALL cpu_codefetch_d(UINT32 madr); +UINT8 MEMCALL cpu_codefetch(UINT32 offset); +UINT16 MEMCALL cpu_codefetch_w(UINT32 offset); +UINT32 MEMCALL cpu_codefetch_d(UINT32 offset); /* * additional physical address function */ -UINT64 MEMCALL cpu_memoryread_q(UINT32 address); -REG80 MEMCALL cpu_memoryread_f(UINT32 address); -void MEMCALL cpu_memorywrite_q(UINT32 address, UINT64 value); -void MEMCALL cpu_memorywrite_f(UINT32 address, const REG80 *value); +UINT64 MEMCALL cpu_memoryread_q(UINT32 paddr); +REG80 MEMCALL cpu_memoryread_f(UINT32 paddr); +void MEMCALL cpu_memorywrite_q(UINT32 paddr, UINT64 value); +void MEMCALL cpu_memorywrite_f(UINT32 paddr, const REG80 *value); #ifdef __cplusplus } diff --git a/i386c/ia32/cpu_mem.mcr b/i386c/ia32/cpu_mem.mcr index 4fe14251..b736a99f 100644 --- a/i386c/ia32/cpu_mem.mcr +++ b/i386c/ia32/cpu_mem.mcr @@ -1,5 +1,3 @@ -/* $Id: cpu_mem.mcr,v 1.4 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. @@ -25,51 +23,38 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#define VIRTUAL_ADDRESS_MEMORY_ACCESS_FUNCTION(width, valtype, length) \ +#define DECLARE_VIRTUAL_ADDRESS_MEMORY_RW_FUNCTIONS(width, valtype, length) \ valtype MEMCALL \ cpu_vmemoryread_##width(int idx, UINT32 offset) \ { \ - descriptor_t *sd; \ + descriptor_t *sdp; \ UINT32 addr; \ int exc; \ \ __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); \ \ - sd = &CPU_STAT_SREG(idx); \ - if (!sd->valid) { \ - exc = GP_EXCEPTION; \ - goto err; \ - } \ + sdp = &CPU_STAT_SREG(idx); \ + addr = sdp->u.seg.segbase + offset; \ \ - if (!(sd->flag & CPU_DESC_FLAG_READABLE)) { \ - cpu_memoryread_check(sd, offset, (length), \ - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); \ - } else { \ - switch (sd->type) { \ - case 4: case 5: case 6: case 7: \ - if (offset - ((length) - 1) <= sd->u.seg.limit) \ - goto range_failure; \ - break; \ -\ - default: \ - if (offset > sd->u.seg.limit - ((length) - 1)) \ - goto range_failure; \ - break; \ - } \ - } \ - addr = sd->u.seg.segbase + offset; \ - check_memory_break_point(addr, (length), CPU_DR7_RW_RO); \ - if (!CPU_STAT_PAGING) \ + if (!CPU_STAT_PM) \ return cpu_memoryread_##width(addr); \ - return cpu_linear_memory_read_##width(addr, CPU_PAGE_READ_DATA | CPU_STAT_USER_MODE); \ \ -range_failure: \ - if (idx == CPU_SS_INDEX) { \ - exc = SS_EXCEPTION; \ - } else { \ + if (!SEG_IS_VALID(sdp)) { \ exc = GP_EXCEPTION; \ + goto err; \ } \ - VERBOSE(("cpu_vmemoryread: type = %d, offset = %08x, length = %d, limit = %08x", sd->type, offset, length, sd->u.seg.limit)); \ + if (!(sdp->flag & CPU_DESC_FLAG_READABLE)) { \ + cpu_memoryread_check(sdp, offset, (length), \ + CHOOSE_EXCEPTION(idx)); \ + } else if (!(sdp->flag & CPU_DESC_FLAG_WHOLEADR)) { \ + if (!check_limit_upstairs(sdp, offset, (length))) \ + goto range_failure; \ + } \ + return cpu_lmemoryread_##width(addr, CPU_PAGE_READ_DATA | CPU_STAT_USER_MODE); \ +\ +range_failure: \ + VERBOSE(("cpu_vmemoryread_" #width ": type = %d, offset = %08x, length = %d, limit = %08x", sdp->type, offset, length, sdp->u.seg.limit)); \ + exc = CHOOSE_EXCEPTION(idx); \ err: \ EXCEPTION(exc, 0); \ return 0; /* compiler happy */ \ @@ -78,104 +63,79 @@ err: \ void MEMCALL \ cpu_vmemorywrite_##width(int idx, UINT32 offset, valtype value) \ { \ - descriptor_t *sd; \ + descriptor_t *sdp; \ UINT32 addr; \ int exc; \ \ __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); \ \ - sd = &CPU_STAT_SREG(idx); \ - if (!sd->valid) { \ + sdp = &CPU_STAT_SREG(idx); \ + addr = sdp->u.seg.segbase + offset; \ +\ + if (!CPU_STAT_PM) { \ + cpu_memorywrite_##width(addr, value); \ + return; \ + } \ +\ + if (!SEG_IS_VALID(sdp)) { \ exc = GP_EXCEPTION; \ goto err; \ } \ -\ - if (!(sd->flag & CPU_DESC_FLAG_WRITABLE)) { \ - cpu_memorywrite_check(sd, offset, (length), \ - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); \ - } else { \ - switch (sd->type) { \ - case 6: case 7: \ - if (offset - ((length) - 1) <= sd->u.seg.limit) \ - goto range_failure; \ - break; \ -\ - default: \ - if (offset > sd->u.seg.limit - ((length) - 1)) \ - goto range_failure; \ - break; \ - } \ - } \ - addr = sd->u.seg.segbase + offset; \ - check_memory_break_point(addr, (length), CPU_DR7_RW_RW); \ - if (!CPU_STAT_PAGING) { \ - cpu_memorywrite_##width(addr, value); \ - } else { \ - cpu_linear_memory_write_##width(addr, value, CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE); \ + if (!(sdp->flag & CPU_DESC_FLAG_WRITABLE)) { \ + cpu_memorywrite_check(sdp, offset, (length), \ + CHOOSE_EXCEPTION(idx)); \ + } else if (!(sdp->flag & CPU_DESC_FLAG_WHOLEADR)) { \ + if (!check_limit_upstairs(sdp, offset, (length))) \ + goto range_failure; \ } \ + cpu_lmemorywrite_##width(addr, value, CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE); \ return; \ \ range_failure: \ - if (idx == CPU_SS_INDEX) { \ - exc = SS_EXCEPTION; \ - } else { \ - exc = GP_EXCEPTION; \ - } \ - VERBOSE(("cpu_vmemorywrite: type = %d, offset = %08x, length = %d, limit = %08x", sd->type, offset, length, sd->u.seg.limit)); \ + VERBOSE(("cpu_vmemorywrite_" #width ": type = %d, offset = %08x, length = %d, limit = %08x", sdp->type, offset, length, sdp->u.seg.limit)); \ + exc = CHOOSE_EXCEPTION(idx); \ err: \ EXCEPTION(exc, 0); \ -} \ -\ +} + +#define DECLARE_VIRTUAL_ADDRESS_MEMORY_RMW_FUNCTIONS(width, valtype, length) \ UINT32 MEMCALL \ -cpu_memory_access_va_RMW_##width(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg) \ +cpu_vmemory_RMW_##width(int idx, UINT32 offset, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) \ { \ - descriptor_t *sd; \ + descriptor_t *sdp; \ UINT32 addr; \ - UINT32 res, dst; \ + UINT32 result; \ + valtype value; \ int exc; \ \ __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); \ \ - sd = &CPU_STAT_SREG(idx); \ - if (!sd->valid) { \ - exc = GP_EXCEPTION; \ - goto err; \ + sdp = &CPU_STAT_SREG(idx); \ + addr = sdp->u.seg.segbase + offset; \ +\ + if (!CPU_STAT_PM) { \ + value = cpu_memoryread_##width(addr); \ + result = (*func)(value, arg); \ + cpu_memorywrite_##width(addr, result); \ + return value; \ } \ \ - if (!(sd->flag & CPU_DESC_FLAG_WRITABLE)) { \ - cpu_memorywrite_check(sd, offset, (length), \ - (idx == CPU_SS_INDEX) ? SS_EXCEPTION : GP_EXCEPTION); \ - } else { \ - switch (sd->type) { \ - case 6: case 7: \ - if (offset - ((length) - 1) <= sd->u.seg.limit) \ - goto range_failure; \ - break; \ -\ - default: \ - if (offset > sd->u.seg.limit - ((length) - 1)) \ - goto range_failure; \ - break; \ - } \ + if (!SEG_IS_VALID(sdp)) { \ + exc = GP_EXCEPTION; \ + goto err; \ } \ - addr = sd->u.seg.segbase + offset; \ - check_memory_break_point(addr, (length), CPU_DR7_RW_RW); \ - if (!CPU_STAT_PAGING) { \ - dst = cpu_memoryread_##width(addr); \ - res = (*func)(dst, arg); \ - cpu_memorywrite_##width(addr, res); \ - } else { \ - dst = cpu_memory_access_la_RMW_##width(addr, func, arg); \ + if (!(sdp->flag & CPU_DESC_FLAG_WRITABLE)) { \ + cpu_memorywrite_check(sdp, offset, (length), \ + CHOOSE_EXCEPTION(idx)); \ + } else if (!(sdp->flag & CPU_DESC_FLAG_WHOLEADR)) { \ + if (!check_limit_upstairs(sdp, offset, (length))) \ + goto range_failure; \ } \ - return dst; \ + return cpu_lmemory_RMW_##width(addr, func, arg); \ \ range_failure: \ - if (idx == CPU_SS_INDEX) { \ - exc = SS_EXCEPTION; \ - } else { \ - exc = GP_EXCEPTION; \ - } \ - VERBOSE(("cpu_memory_access_va_RMW: type = %d, offset = %08x, length = %d, limit = %08x", sd->type, offset, length, sd->u.seg.limit)); \ + VERBOSE(("cpu_vmemory_RMW_" #width ": type = %d, offset = %08x, length = %d, limit = %08x", sdp->type, offset, length, sdp->u.seg.limit)); \ + exc = CHOOSE_EXCEPTION(idx); \ err: \ EXCEPTION(exc, 0); \ return 0; /* compiler happy */ \ diff --git a/i386c/ia32/ctrlxfer.c b/i386c/ia32/ctrlxfer.c index cb37515f..820d3acf 100644 --- a/i386c/ia32/ctrlxfer.c +++ b/i386c/ia32/ctrlxfer.c @@ -1,5 +1,3 @@ -/* $Id: ctrlxfer.c,v 1.19 2008/01/25 17:49:46 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -35,12 +33,12 @@ /*------------------------------------------------------------------------------ * JMPfar_pm */ -static void JMPfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip); -static void JMPfar_pm_call_gate(const selector_t *callgate_sel); -static void JMPfar_pm_task_gate(selector_t *taskgate_sel); -static void JMPfar_pm_tss(selector_t *tss_sel); +static void CPUCALL JMPfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip); +static void CPUCALL JMPfar_pm_call_gate(const selector_t *callgate_sel); +static void CPUCALL JMPfar_pm_task_gate(selector_t *taskgate_sel); +static void CPUCALL JMPfar_pm_tss(selector_t *tss_sel); -void +void CPUCALL JMPfar_pm(UINT16 selector, UINT32 new_ip) { selector_t jmp_sel; @@ -55,11 +53,11 @@ JMPfar_pm(UINT16 selector, UINT32 new_ip) EXCEPTION(GP_EXCEPTION, jmp_sel.idx); } - if (jmp_sel.desc.s) { + if (!SEG_IS_SYSTEM(&jmp_sel.desc)) { VERBOSE(("JMPfar_pm: code or data segment descriptor")); /* check segment type */ - if (!jmp_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&jmp_sel.desc)) { /* data segment */ VERBOSE(("JMPfar_pm: data segment")); EXCEPTION(GP_EXCEPTION, jmp_sel.idx); @@ -103,16 +101,16 @@ JMPfar_pm(UINT16 selector, UINT32 new_ip) /*--- * JMPfar: code segment */ -static void +static void CPUCALL JMPfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) { VERBOSE(("JMPfar_pm: CODE-SEGMENT")); /* check privilege level */ - if (!cs_sel->desc.u.seg.ec) { + if (!SEG_IS_CONFORMING_CODE(&cs_sel->desc)) { VERBOSE(("JMPfar_pm: NON-CONFORMING-CODE-SEGMENT")); - /* イシエャ p.119 4.8.1.1. */ + /* 荳句キサ p.119 4.8.1.1. */ if (cs_sel->rpl > CPU_STAT_CPL) { VERBOSE(("JMPfar_pm: RPL(%d) > CPL(%d)", cs_sel->rpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel->idx); @@ -123,7 +121,7 @@ JMPfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) } } else { VERBOSE(("JMPfar_pm: CONFORMING-CODE-SEGMENT")); - /* イシエャ p.120 4.8.1.2. */ + /* 荳句キサ p.120 4.8.1.2. */ if (cs_sel->desc.dpl > CPU_STAT_CPL) { VERBOSE(("JMPfar_pm: DPL(%d) > CPL(%d)", cs_sel->desc.dpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel->idx); @@ -132,7 +130,7 @@ JMPfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) /* not present */ if (selector_is_not_present(cs_sel)) { - VERBOSE(("JMPfar_pm: selector is not present")); + VERBOSE(("JMPfar_pm: code selector is not present")); EXCEPTION(NP_EXCEPTION, cs_sel->idx); } @@ -143,13 +141,13 @@ JMPfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) } load_cs(cs_sel->selector, &cs_sel->desc, CPU_STAT_CPL); - SET_EIP(new_ip); + CPU_EIP = new_ip; } /*--- * JMPfar: call gate */ -static void +static void CPUCALL JMPfar_pm_call_gate(const selector_t *callgate_sel) { selector_t cs_sel; @@ -169,7 +167,7 @@ JMPfar_pm_call_gate(const selector_t *callgate_sel) /* not present */ if (selector_is_not_present(callgate_sel)) { - VERBOSE(("JMPfar_pm: selector is not present")); + VERBOSE(("JMPfar_pm: call gate selector is not present")); EXCEPTION(NP_EXCEPTION, callgate_sel->idx); } @@ -181,18 +179,18 @@ JMPfar_pm_call_gate(const selector_t *callgate_sel) } /* check segment type */ - if (!cs_sel.desc.s) { + if (SEG_IS_SYSTEM(&cs_sel.desc)) { VERBOSE(("JMPfar_pm: code segment is system segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (!cs_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&cs_sel.desc)) { VERBOSE(("JMPfar_pm: code segment is data segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } /* check privilege level */ - if (!cs_sel.desc.u.seg.ec) { - /* イシエャ p.119 4.8.1.1. */ + if (!SEG_IS_CONFORMING_CODE(&cs_sel.desc)) { + /* 荳句キサ p.119 4.8.1.1. */ if (cs_sel.rpl > CPU_STAT_CPL) { VERBOSE(("JMPfar_pm: RPL(%d) > CPL(%d)", cs_sel.rpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); @@ -202,7 +200,7 @@ JMPfar_pm_call_gate(const selector_t *callgate_sel) EXCEPTION(GP_EXCEPTION, cs_sel.idx); } } else { - /* イシエャ p.120 4.8.1.2. */ + /* 荳句キサ p.120 4.8.1.2. */ if (cs_sel.desc.dpl > CPU_STAT_CPL) { VERBOSE(("JMPfar_pm: DPL(%d) > CPL(%d)", cs_sel.desc.dpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); @@ -211,7 +209,7 @@ JMPfar_pm_call_gate(const selector_t *callgate_sel) /* not present */ if (selector_is_not_present(&cs_sel)) { - VERBOSE(("JMPfar_pm: selector is not present")); + VERBOSE(("JMPfar_pm: code selector is not present")); EXCEPTION(NP_EXCEPTION, cs_sel.idx); } @@ -222,13 +220,13 @@ JMPfar_pm_call_gate(const selector_t *callgate_sel) } load_cs(cs_sel.selector, &cs_sel.desc, CPU_STAT_CPL); - SET_EIP(callgate_sel->desc.u.gate.offset); + CPU_EIP = callgate_sel->desc.u.gate.offset; } /*--- * JMPfar: task gate */ -static void +static void CPUCALL JMPfar_pm_task_gate(selector_t *taskgate_sel) { selector_t tss_sel; @@ -282,12 +280,18 @@ JMPfar_pm_task_gate(selector_t *taskgate_sel) } task_switch(&tss_sel, TASK_SWITCH_JMP); + + /* out of range */ + if (CPU_EIP > CPU_STAT_CS_LIMIT) { + VERBOSE(("JMPfar_pm: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); + EXCEPTION(GP_EXCEPTION, 0); + } } /*--- * JMPfar: TSS */ -static void +static void CPUCALL JMPfar_pm_tss(selector_t *tss_sel) { @@ -310,18 +314,24 @@ JMPfar_pm_tss(selector_t *tss_sel) } task_switch(tss_sel, TASK_SWITCH_JMP); + + /* out of range */ + if (CPU_EIP > CPU_STAT_CS_LIMIT) { + VERBOSE(("JMPfar_pm: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); + EXCEPTION(GP_EXCEPTION, 0); + } } /*------------------------------------------------------------------------------ * CALLfar_pm */ -static void CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip); -static void CALLfar_pm_call_gate(const selector_t *callgate_sel); -static void CALLfar_pm_task_gate(selector_t *taskgate_sel); -static void CALLfar_pm_tss(selector_t *tss_sel); +static void CPUCALL CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip); +static void CPUCALL CALLfar_pm_call_gate(const selector_t *callgate_sel); +static void CPUCALL CALLfar_pm_task_gate(selector_t *taskgate_sel); +static void CPUCALL CALLfar_pm_tss(selector_t *tss_sel); -void +void CPUCALL CALLfar_pm(UINT16 selector, UINT32 new_ip) { selector_t call_sel; @@ -336,11 +346,11 @@ CALLfar_pm(UINT16 selector, UINT32 new_ip) EXCEPTION(GP_EXCEPTION, call_sel.idx); } - if (call_sel.desc.s) { + if (!SEG_IS_SYSTEM(&call_sel.desc)) { /* code or data segment descriptor */ VERBOSE(("CALLfar_pm: code or data segment descriptor")); - if (!call_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&call_sel.desc)) { /* data segment */ VERBOSE(("CALLfar_pm: data segment")); EXCEPTION(GP_EXCEPTION, call_sel.idx); @@ -384,7 +394,7 @@ CALLfar_pm(UINT16 selector, UINT32 new_ip) /*--- * CALLfar_pm: code segment */ -static void +static void CPUCALL CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) { UINT32 sp; @@ -392,9 +402,9 @@ CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) VERBOSE(("CALLfar_pm: CODE-SEGMENT")); /* check privilege level */ - if (!cs_sel->desc.u.seg.ec) { + if (!SEG_IS_CONFORMING_CODE(&cs_sel->desc)) { VERBOSE(("CALLfar_pm: NON-CONFORMING-CODE-SEGMENT")); - /* イシエャ p.119 4.8.1.1. */ + /* 荳句キサ p.119 4.8.1.1. */ if (cs_sel->rpl > CPU_STAT_CPL) { VERBOSE(("CALLfar_pm: RPL(%d) > CPL(%d)", cs_sel->rpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel->idx); @@ -405,7 +415,7 @@ CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) } } else { VERBOSE(("CALLfar_pm: CONFORMING-CODE-SEGMENT")); - /* イシエャ p.120 4.8.1.2. */ + /* 荳句キサ p.120 4.8.1.2. */ if (cs_sel->desc.dpl > CPU_STAT_CPL) { VERBOSE(("CALLfar_pm: DPL(%d) > CPL(%d)", cs_sel->desc.dpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel->idx); @@ -424,7 +434,7 @@ CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) sp = CPU_SP; } if (CPU_INST_OP32) { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 8); + SS_PUSH_CHECK(sp, 8); /* out of range */ if (new_ip > cs_sel->desc.u.seg.limit) { @@ -435,7 +445,7 @@ CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) PUSH0_32(CPU_CS); PUSH0_32(CPU_EIP); } else { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 4); + SS_PUSH_CHECK(sp, 4); /* out of range */ if (new_ip > cs_sel->desc.u.seg.limit) { @@ -448,16 +458,16 @@ CALLfar_pm_code_segment(const selector_t *cs_sel, UINT32 new_ip) } load_cs(cs_sel->selector, &cs_sel->desc, CPU_STAT_CPL); - SET_EIP(new_ip); + CPU_EIP = new_ip; } /*--- * CALLfar_pm: call gate */ -static void CALLfar_pm_call_gate_same_privilege(const selector_t *call_sel, selector_t *cs_sel); -static void CALLfar_pm_call_gate_more_privilege(const selector_t *call_sel, selector_t *cs_sel); +static void CPUCALL CALLfar_pm_call_gate_same_privilege(const selector_t *call_sel, selector_t *cs_sel); +static void CPUCALL CALLfar_pm_call_gate_more_privilege(const selector_t *call_sel, selector_t *cs_sel); -static void +static void CPUCALL CALLfar_pm_call_gate(const selector_t *callgate_sel) { selector_t cs_sel; @@ -489,11 +499,11 @@ CALLfar_pm_call_gate(const selector_t *callgate_sel) } /* check segment type */ - if (!cs_sel.desc.s) { + if (SEG_IS_SYSTEM(&cs_sel.desc)) { VERBOSE(("CALLfar_pm: code segment is system segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (!cs_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&cs_sel.desc)) { VERBOSE(("CALLfar_pm: code segment is data segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } @@ -516,7 +526,7 @@ CALLfar_pm_call_gate(const selector_t *callgate_sel) EXCEPTION(GP_EXCEPTION, 0); } - if (!cs_sel.desc.u.seg.ec && (cs_sel.desc.dpl < CPU_STAT_CPL)) { + if (!SEG_IS_CONFORMING_CODE(&cs_sel.desc) && (cs_sel.desc.dpl < CPU_STAT_CPL)) { CALLfar_pm_call_gate_more_privilege(callgate_sel, &cs_sel); } else { CALLfar_pm_call_gate_same_privilege(callgate_sel, &cs_sel); @@ -526,7 +536,7 @@ CALLfar_pm_call_gate(const selector_t *callgate_sel) /*--- * CALLfar_pm: call gate (SAME-PRIVILEGE) */ -static void +static void CPUCALL CALLfar_pm_call_gate_same_privilege(const selector_t *callgate_sel, selector_t *cs_sel) { UINT32 sp; @@ -538,34 +548,31 @@ CALLfar_pm_call_gate_same_privilege(const selector_t *callgate_sel, selector_t * } else { sp = CPU_SP; } - if (callgate_sel->desc.type == CPU_SYSDESC_TYPE_CALL_32) { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 8); + SS_PUSH_CHECK(sp, 8); PUSH0_32(CPU_CS); PUSH0_32(CPU_EIP); - - load_cs(cs_sel->selector, &cs_sel->desc, CPU_STAT_CPL); - SET_EIP(callgate_sel->desc.u.gate.offset); } else { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 4); + SS_PUSH_CHECK(sp, 4); PUSH0_16(CPU_CS); PUSH0_16(CPU_IP); - - load_cs(cs_sel->selector, &cs_sel->desc, CPU_STAT_CPL); - SET_EIP(callgate_sel->desc.u.gate.offset); } + + load_cs(cs_sel->selector, &cs_sel->desc, CPU_STAT_CPL); + CPU_EIP = callgate_sel->desc.u.gate.offset; } /*--- * CALLfar_pm: call gate (MORE-PRIVILEGE) */ -static void +static void CPUCALL CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t *cs_sel) { UINT32 param[32]; /* copy param */ selector_t ss_sel; + UINT stacksize; UINT32 old_eip, old_esp; UINT32 new_esp; UINT16 old_cs, old_ss; @@ -597,24 +604,24 @@ CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t * /* check privilege level */ if (ss_sel.rpl != cs_sel->desc.dpl) { - VERBOSE(("CALLfar_pm: RPL[SS](%d) != DPL[CS](%d)", ss_sel.rpl, cs_sel->desc.dpl)); + VERBOSE(("CALLfar_pm: selector RPL[SS](%d) != DPL[CS](%d)", ss_sel.rpl, cs_sel->desc.dpl)); EXCEPTION(TS_EXCEPTION, ss_sel.idx); } if (ss_sel.desc.dpl != cs_sel->desc.dpl) { - VERBOSE(("CALLfar_pm: DPL[SS](%d) != DPL[CS](%d)", ss_sel.desc.dpl, cs_sel->desc.dpl)); + VERBOSE(("CALLfar_pm: descriptor DPL[SS](%d) != DPL[CS](%d)", ss_sel.desc.dpl, cs_sel->desc.dpl)); EXCEPTION(TS_EXCEPTION, ss_sel.idx); } /* stack segment must be writable data segment. */ - if (!ss_sel.desc.s) { + if (SEG_IS_SYSTEM(&ss_sel.desc)) { VERBOSE(("CALLfar_pm: stack segment is system segment")); EXCEPTION(TS_EXCEPTION, ss_sel.idx); } - if (ss_sel.desc.u.seg.c) { + if (SEG_IS_CODE(&ss_sel.desc)) { VERBOSE(("CALLfar_pm: stack segment is code segment")); EXCEPTION(TS_EXCEPTION, ss_sel.idx); } - if (!ss_sel.desc.u.seg.wr) { + if (!SEG_IS_WRITABLE_DATA(&ss_sel.desc)) { VERBOSE(("CALLfar_pm: stack segment is read-only data segment")); EXCEPTION(TS_EXCEPTION, ss_sel.idx); } @@ -628,9 +635,20 @@ CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t * param_count = callgate_sel->desc.u.gate.count; VERBOSE(("CALLfar_pm: param_count = %d", param_count)); + /* check stack size */ + if (cs_sel->desc.d) { + stacksize = 16; + } else { + stacksize = 8; + } if (callgate_sel->desc.type == CPU_SYSDESC_TYPE_CALL_32) { - STACK_PUSH_CHECK(ss_sel.idx, &ss_sel.desc, new_esp, 16 + param_count * 4); + stacksize += param_count * 4; + } else { + stacksize += param_count * 2; + } + cpu_stack_push_check(ss_sel.idx, &ss_sel.desc, new_esp, stacksize); + if (callgate_sel->desc.type == CPU_SYSDESC_TYPE_CALL_32) { /* dump param */ for (i = 0; i < param_count; i++) { param[i] = cpu_vmemoryread_d(CPU_SS_INDEX, old_esp + i * 4); @@ -645,7 +663,7 @@ CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t * } load_cs(cs_sel->selector, &cs_sel->desc, cs_sel->desc.dpl); - SET_EIP(callgate_sel->desc.u.gate.offset); + CPU_EIP = callgate_sel->desc.u.gate.offset; PUSH0_32(old_ss); PUSH0_32(old_esp); @@ -659,8 +677,6 @@ CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t * PUSH0_32(old_cs); PUSH0_32(old_eip); } else { - STACK_PUSH_CHECK(ss_sel.idx, &ss_sel.desc, new_esp, 8 + param_count * 2); - /* dump param */ for (i = 0; i < param_count; i++) { param[i] = cpu_vmemoryread_w(CPU_SS_INDEX, old_esp + i * 2); @@ -675,7 +691,7 @@ CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t * } load_cs(cs_sel->selector, &cs_sel->desc, cs_sel->desc.dpl); - SET_EIP(callgate_sel->desc.u.gate.offset); + CPU_EIP = callgate_sel->desc.u.gate.offset; PUSH0_16(old_ss); PUSH0_16(old_esp); @@ -694,7 +710,7 @@ CALLfar_pm_call_gate_more_privilege(const selector_t *callgate_sel, selector_t * /*--- * CALLfar_pm: task gate */ -static void +static void CPUCALL CALLfar_pm_task_gate(selector_t *taskgate_sel) { selector_t tss_sel; @@ -748,12 +764,18 @@ CALLfar_pm_task_gate(selector_t *taskgate_sel) } task_switch(&tss_sel, TASK_SWITCH_CALL); + + /* out of range */ + if (CPU_EIP > CPU_STAT_CS_LIMIT) { + VERBOSE(("JMPfar_pm: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); + EXCEPTION(GP_EXCEPTION, 0); + } } /*--- * CALLfar_pm: TSS */ -static void +static void CPUCALL CALLfar_pm_tss(selector_t *tss_sel) { @@ -776,6 +798,12 @@ CALLfar_pm_tss(selector_t *tss_sel) } task_switch(tss_sel, TASK_SWITCH_CALL); + + /* out of range */ + if (CPU_EIP > CPU_STAT_CS_LIMIT) { + VERBOSE(("JMPfar_pm: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); + EXCEPTION(GP_EXCEPTION, 0); + } } @@ -783,10 +811,11 @@ CALLfar_pm_tss(selector_t *tss_sel) * RETfar_pm */ -void +void CPUCALL RETfar_pm(UINT nbytes) { selector_t cs_sel, ss_sel, temp_sel; + descriptor_t *sdp; UINT32 sp; UINT32 new_ip, new_sp; UINT16 new_cs, new_ss; @@ -801,27 +830,27 @@ RETfar_pm(UINT nbytes) sp = CPU_SP; } if (CPU_INST_OP32) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, nbytes + 8); + SS_POP_CHECK(sp, nbytes + 8); new_ip = cpu_vmemoryread_d(CPU_SS_INDEX, sp); new_cs = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 4); } else { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, nbytes + 4); + SS_POP_CHECK(sp, nbytes + 4); new_ip = cpu_vmemoryread_w(CPU_SS_INDEX, sp); new_cs = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 2); } rv = parse_selector(&cs_sel, new_cs); if (rv < 0) { - VERBOSE(("RETfar_pm: parse_selector (selector = %04x, rv = %d, %s)", cs_sel.selector, rv)); + VERBOSE(("RETfar_pm: parse_selector (selector = %04x, rv = %d)", cs_sel.selector, rv)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } /* check segment type */ - if (!cs_sel.desc.s) { + if (SEG_IS_SYSTEM(&cs_sel.desc)) { VERBOSE(("RETfar_pm: return to system segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (!cs_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&cs_sel.desc)) { VERBOSE(("RETfar_pm: return to data segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } @@ -831,7 +860,7 @@ RETfar_pm(UINT nbytes) VERBOSE(("RETfar_pm: RPL(%d) < CPL(%d)", cs_sel.rpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (!cs_sel.desc.u.seg.ec && (cs_sel.desc.dpl > cs_sel.rpl)) { + if (!SEG_IS_CONFORMING_CODE(&cs_sel.desc) && (cs_sel.desc.dpl > cs_sel.rpl)) { VERBOSE(("RETfar_pm: NON-COMFORMING-CODE-SEGMENT and DPL(%d) > RPL(%d)", cs_sel.desc.dpl, cs_sel.rpl)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } @@ -865,47 +894,47 @@ RETfar_pm(UINT nbytes) } load_cs(cs_sel.selector, &cs_sel.desc, CPU_STAT_CPL); - SET_EIP(new_ip); + CPU_EIP = new_ip; } else { VERBOSE(("RETfar_pm: RETURN-OUTER-PRIVILEGE-LEVEL")); if (CPU_INST_OP32) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 8 + 8 + nbytes); + SS_POP_CHECK(sp, 8 + 8 + nbytes); new_sp = cpu_vmemoryread_d(CPU_SS_INDEX, sp + 8 + nbytes); new_ss = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 8 + nbytes + 4); } else { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 4 + 4 + nbytes); + SS_POP_CHECK(sp, 4 + 4 + nbytes); new_sp = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 4 + nbytes); new_ss = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 4 + nbytes + 2); } rv = parse_selector(&ss_sel, new_ss); if (rv < 0) { - VERBOSE(("RETfar_pm: parse_selector (selector = %04x, rv = %d, %s)", ss_sel.selector, rv)); - EXCEPTION(GP_EXCEPTION, ss_sel.idx); + VERBOSE(("RETfar_pm: parse_selector (selector = %04x, rv = %d)", ss_sel.selector, rv)); + EXCEPTION(GP_EXCEPTION, (rv == -2) ? 0 : ss_sel.idx); } - /* check stack segment descriptor */ - if (!ss_sel.desc.s) { + /* stack segment must be writable data segment. */ + if (SEG_IS_SYSTEM(&ss_sel.desc)) { VERBOSE(("RETfar_pm: stack segment is system segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (ss_sel.desc.u.seg.c) { + if (SEG_IS_CODE(&ss_sel.desc)) { VERBOSE(("RETfar_pm: stack segment is code segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (!ss_sel.desc.u.seg.wr) { + if (!SEG_IS_WRITABLE_DATA(&ss_sel.desc)) { VERBOSE(("RETfar_pm: stack segment is read-only data segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } /* check privilege level */ if (ss_sel.rpl != cs_sel.rpl) { - VERBOSE(("RETfar_pm: RPL[SS](%d) != RPL[CS](%d)", ss_sel.rpl, cs_sel.rpl)); + VERBOSE(("RETfar_pm: selector RPL[SS](%d) != RPL[CS](%d)", ss_sel.rpl, cs_sel.rpl)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } if (ss_sel.desc.dpl != cs_sel.rpl) { - VERBOSE(("RETfar_pm: DPL[SS](%d) != RPL[CS](%d)", ss_sel.desc.dpl, cs_sel.rpl)); + VERBOSE(("RETfar_pm: descriptor DPL[SS](%d) != RPL[CS](%d)", ss_sel.desc.dpl, cs_sel.rpl)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } @@ -924,9 +953,6 @@ RETfar_pm(UINT nbytes) VERBOSE(("RETfar_pm: new_ip = %08x, new_cs = %04x", new_ip, cs_sel.selector)); VERBOSE(("RETfar_pm: new_sp = %08x, new_ss = %04x", new_sp, ss_sel.selector)); - load_cs(cs_sel.selector, &cs_sel.desc, cs_sel.rpl); - SET_EIP(new_ip); - load_ss(ss_sel.selector, &ss_sel.desc, cs_sel.rpl); if (CPU_STAT_SS32) { CPU_ESP = new_sp + nbytes; @@ -934,47 +960,46 @@ RETfar_pm(UINT nbytes) CPU_SP = (UINT16)(new_sp + nbytes); } + load_cs(cs_sel.selector, &cs_sel.desc, cs_sel.rpl); + CPU_EIP = new_ip; + /* check segment register */ for (i = 0; i < CPU_SEGREG_NUM; i++) { - descriptor_t *dp; - BOOL valid; + if (i == CPU_SS_INDEX || i == CPU_CS_INDEX) + continue; - dp = &CPU_STAT_SREG(i); - if ((!dp->u.seg.c || !dp->u.seg.ec) - && (CPU_STAT_SREG(i).dpl < CPU_STAT_CPL)) { - /* segment register is invalid */ + sdp = &CPU_STAT_SREG(i); + if ((SEG_IS_DATA(sdp) || !SEG_IS_CONFORMING_CODE(sdp)) + && (CPU_STAT_CPL > sdp->dpl)) { + /* current segment descriptor is invalid */ CPU_REGS_SREG(i) = 0; - CPU_STAT_SREG_CLEAR(i); + memset(sdp, 0, sizeof(*sdp)); continue; } + /* Reload segment descriptor */ rv = parse_selector(&temp_sel, CPU_REGS_SREG(i)); if (rv < 0) { /* segment register is invalid */ CPU_REGS_SREG(i) = 0; - CPU_STAT_SREG_CLEAR(i); + memset(sdp, 0, sizeof(*sdp)); continue; } - valid = TRUE; - if (!temp_sel.desc.s) { - /* system segment */ - valid = FALSE; - } - if (temp_sel.desc.u.seg.c && !temp_sel.desc.u.seg.wr) { - /* execute-only code segment */ - valid = FALSE; - } - if (!temp_sel.desc.u.seg.c || !temp_sel.desc.u.seg.ec) { - if (CPU_STAT_CPL > temp_sel.desc.dpl) { - valid = FALSE; - } - } - - if (!valid) { - /* segment register is invalid */ + /* + * - system segment + * - execute-only code segment + * - data or conforming code segment && CPL > DPL + */ + if (SEG_IS_SYSTEM(&temp_sel.desc) + || (SEG_IS_CODE(&temp_sel.desc) + && !SEG_IS_READABLE_CODE(&temp_sel.desc)) + || ((SEG_IS_DATA(&temp_sel.desc) + || !SEG_IS_CONFORMING_CODE(&temp_sel.desc)) + && (CPU_STAT_CPL > temp_sel.desc.dpl))) { + /* segment descriptor is invalid */ CPU_REGS_SREG(i) = 0; - CPU_STAT_SREG(i).valid = 0; + memset(sdp, 0, sizeof(*sdp)); } } } @@ -987,11 +1012,11 @@ RETfar_pm(UINT nbytes) * IRET_pm */ static void IRET_pm_nested_task(void); -static void IRET_pm_protected_mode_return(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags); -static void IRET_pm_protected_mode_return_same_privilege(const selector_t *cs_sel, UINT32 new_ip, UINT32 new_flags); -static void IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 new_ip, UINT32 new_flags); -static void IRET_pm_return_to_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags); -static void IRET_pm_return_from_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags); +static void CPUCALL IRET_pm_protected_mode_return(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags); +static void CPUCALL IRET_pm_protected_mode_return_same_privilege(const selector_t *cs_sel, UINT32 new_ip, UINT32 new_flags); +static void CPUCALL IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 new_ip, UINT32 new_flags); +static void CPUCALL IRET_pm_return_to_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags); +static void CPUCALL IRET_pm_return_from_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags); void IRET_pm(void) @@ -1012,12 +1037,12 @@ IRET_pm(void) sp = CPU_SP; } if (CPU_INST_OP32) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 12); + SS_POP_CHECK(sp, 12); new_ip = cpu_vmemoryread_d(CPU_SS_INDEX, sp); new_cs = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 4); new_flags = cpu_vmemoryread_d(CPU_SS_INDEX, sp + 8); } else { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 6); + SS_POP_CHECK(sp, 6); new_ip = cpu_vmemoryread_w(CPU_SS_INDEX, sp); new_cs = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 2); new_flags = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 4); @@ -1028,7 +1053,7 @@ IRET_pm(void) if (CPU_EFLAG & VM_FLAG) { /* RETURN-FROM-VIRTUAL-8086-MODE */ IRET_pm_return_from_vm86(new_cs, new_ip, new_flags); - } else if (new_flags & VM_FLAG) { + } else if ((new_flags & VM_FLAG) && CPU_STAT_CPL == 0) { /* RETURN-TO-VIRTUAL-8086-MODE */ IRET_pm_return_to_vm86(new_cs, new_ip, new_flags); } else { @@ -1061,7 +1086,7 @@ IRET_pm_nested_task(void) } /* check system segment */ - if (tss_sel.desc.s) { + if (!SEG_IS_SYSTEM(&tss_sel.desc)) { VERBOSE(("IRET_pm: task segment is %s segment", tss_sel.desc.u.seg.c ? "code" : "data")); EXCEPTION(GP_EXCEPTION, tss_sel.idx); } @@ -1088,12 +1113,18 @@ IRET_pm_nested_task(void) } task_switch(&tss_sel, TASK_SWITCH_IRET); + + /* out of range */ + if (CPU_EIP > CPU_STAT_CS_LIMIT) { + VERBOSE(("JMPfar_pm: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); + EXCEPTION(GP_EXCEPTION, 0); + } } /*--- * IRET_pm: PROTECTED-MODE-RETURN */ -static void +static void CPUCALL IRET_pm_protected_mode_return(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) { selector_t cs_sel; @@ -1109,11 +1140,11 @@ IRET_pm_protected_mode_return(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) } /* check code segment descriptor */ - if (!cs_sel.desc.s) { + if (SEG_IS_SYSTEM(&cs_sel.desc)) { VERBOSE(("IRET_pm: return code segment is system segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (!cs_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&cs_sel.desc)) { VERBOSE(("IRET_pm: return code segment is data segment")); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } @@ -1123,8 +1154,8 @@ IRET_pm_protected_mode_return(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) VERBOSE(("IRET_pm: RPL(%d) < CPL(%d)", cs_sel.rpl, CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } - if (cs_sel.desc.u.seg.ec && (cs_sel.desc.dpl > cs_sel.rpl)) { - VERBOSE(("IRET_pm: CONFORMING-CODE-SEGMENT and DPL(%d) != RPL(%d)", cs_sel.desc.dpl, cs_sel.rpl)); + if (SEG_IS_CONFORMING_CODE(&cs_sel.desc) && (cs_sel.desc.dpl > cs_sel.rpl)) { + VERBOSE(("IRET_pm: CONFORMING-CODE-SEGMENT and DPL(%d) > RPL(%d)", cs_sel.desc.dpl, cs_sel.rpl)); EXCEPTION(GP_EXCEPTION, cs_sel.idx); } @@ -1144,7 +1175,7 @@ IRET_pm_protected_mode_return(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) /*--- * IRET_pm: SAME-PRIVILEGE */ -static void +static void CPUCALL IRET_pm_protected_mode_return_same_privilege(const selector_t *cs_sel, UINT32 new_ip, UINT32 new_flags) { UINT32 mask; @@ -1178,24 +1209,24 @@ IRET_pm_protected_mode_return_same_privilege(const selector_t *cs_sel, UINT32 ne /* set new register */ load_cs(cs_sel->selector, &cs_sel->desc, CPU_STAT_CPL); - SET_EIP(new_ip); - - set_eflags(new_flags, mask); + CPU_EIP = new_ip; if (CPU_STAT_SS32) { CPU_ESP += stacksize; } else { CPU_SP += (UINT16)stacksize; } + + set_eflags(new_flags, mask); } /*--- * IRET_pm: OUTER-PRIVILEGE */ -static void +static void CPUCALL IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 new_ip, UINT32 new_flags) { - descriptor_t *dp; + descriptor_t *sdp; selector_t ss_sel; UINT32 mask; UINT32 sp; @@ -1212,11 +1243,11 @@ IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 n sp = CPU_SP; } if (CPU_INST_OP32) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 20); + SS_POP_CHECK(sp, 20); new_sp = cpu_vmemoryread_d(CPU_SS_INDEX, sp + 12); new_ss = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 16); } else { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 10); + SS_POP_CHECK(sp, 10); new_sp = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 6); new_ss = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 8); } @@ -1225,29 +1256,35 @@ IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 n rv = parse_selector(&ss_sel, new_ss); if (rv < 0) { VERBOSE(("IRET_pm: parse_selector (selector = %04x, rv = %d)", ss_sel.selector, rv)); - EXCEPTION(GP_EXCEPTION, ss_sel.idx); + EXCEPTION(GP_EXCEPTION, (rv == -2) ? 0 : ss_sel.idx); } /* check privilege level */ if (ss_sel.rpl != cs_sel->rpl) { - VERBOSE(("IRET_pm: RPL[SS](%d) != RPL[CS](%d)", ss_sel.rpl, cs_sel->rpl)); + VERBOSE(("IRET_pm: selector RPL[SS](%d) != RPL[CS](%d)", ss_sel.rpl, cs_sel->rpl)); EXCEPTION(GP_EXCEPTION, ss_sel.idx); } +#if 0 if (ss_sel.desc.dpl != cs_sel->rpl) { - VERBOSE(("IRET_pm: DPL[SS](%d) != RPL[CS](%d)", ss_sel.desc.dpl, cs_sel->rpl)); + VERBOSE(("IRET_pm: segment DPL[SS](%d) != RPL[CS](%d)", ss_sel.desc.dpl, cs_sel->rpl)); + EXCEPTION(GP_EXCEPTION, ss_sel.idx); + } + if (ss_sel.desc.rpl != cs_sel->rpl) { + VERBOSE(("IRET_pm: segment RPL[SS](%d) != RPL[CS](%d)", ss_sel.desc.rpl, cs_sel->rpl)); EXCEPTION(GP_EXCEPTION, ss_sel.idx); } +#endif - /* check stack segment descriptor */ - if (!ss_sel.desc.s) { + /* stack segment must be writable data segment. */ + if (SEG_IS_SYSTEM(&ss_sel.desc)) { VERBOSE(("IRET_pm: stack segment is system segment")); EXCEPTION(GP_EXCEPTION, ss_sel.idx); } - if (ss_sel.desc.u.seg.c) { + if (SEG_IS_CODE(&ss_sel.desc)) { VERBOSE(("IRET_pm: stack segment is code segment")); EXCEPTION(GP_EXCEPTION, ss_sel.idx); } - if (!ss_sel.desc.u.seg.wr) { + if (!SEG_IS_WRITABLE_DATA(&ss_sel.desc)) { VERBOSE(("IRET_pm: stack segment is read-only data segment")); EXCEPTION(GP_EXCEPTION, ss_sel.idx); } @@ -1278,9 +1315,7 @@ IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 n /* set new register */ load_cs(cs_sel->selector, &cs_sel->desc, cs_sel->rpl); - SET_EIP(new_ip); - - set_eflags(new_flags, mask); + CPU_EIP = new_ip; load_ss(ss_sel.selector, &ss_sel.desc, cs_sel->rpl); if (CPU_STAT_SS32) { @@ -1289,15 +1324,17 @@ IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 n CPU_SP = (UINT16)new_sp; } + set_eflags(new_flags, mask); + /* check segment register */ for (i = 0; i < CPU_SEGREG_NUM; i++) { if ((i != CPU_CS_INDEX) && (i != CPU_SS_INDEX)) { - dp = &CPU_STAT_SREG(i); - if ((!dp->u.seg.c || !dp->u.seg.ec) - && (CPU_STAT_SREG(i).dpl < CPU_STAT_CPL)) { + sdp = &CPU_STAT_SREG(i); + if ((SEG_IS_DATA(sdp) || !SEG_IS_CONFORMING_CODE(sdp)) + && (sdp->dpl < CPU_STAT_CPL)) { /* segment register is invalid */ CPU_REGS_SREG(i) = 0; - CPU_STAT_SREG_CLEAR(i); + memset(sdp, 0, sizeof(*sdp)); } } } @@ -1306,7 +1343,7 @@ IRET_pm_protected_mode_return_outer_privilege(const selector_t *cs_sel, UINT32 n /*--- * IRET_pm: new_flags & VM_FLAG */ -static void +static void CPUCALL IRET_pm_return_to_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) { UINT16 segsel[CPU_SEGREG_NUM]; @@ -1316,10 +1353,6 @@ IRET_pm_return_to_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) VERBOSE(("IRET_pm: Interrupt procedure was in virtual-8086 mode: PE=1, VM=1 in flags image")); - if (CPU_STAT_CPL != 0) { - ia32_panic("IRET_pm: CPL != 0"); - } - if (!CPU_INST_OP32) { ia32_panic("IRET_pm: 16bit mode"); } @@ -1329,34 +1362,31 @@ IRET_pm_return_to_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) } else { sp = CPU_SP; } - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, 36); + SS_POP_CHECK(sp, 36); + new_sp = cpu_vmemoryread_d(CPU_SS_INDEX, sp + 12); segsel[CPU_SS_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 16); segsel[CPU_ES_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 20); segsel[CPU_DS_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 24); segsel[CPU_FS_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 28); segsel[CPU_GS_INDEX] = cpu_vmemoryread_w(CPU_SS_INDEX, sp + 32); - segsel[CPU_CS_INDEX] = (UINT16)new_cs; + segsel[CPU_CS_INDEX] = new_cs; for (i = 0; i < CPU_SEGREG_NUM; i++) { - CPU_REGS_SREG(i) = segsel[i]; - CPU_STAT_SREG_INIT(i); + segdesc_init(i, segsel[i], &CPU_STAT_SREG(i)); } + CPU_ESP = new_sp; + CPU_EIP = new_ip & 0xffff; + /* to VM86 mode */ set_eflags(new_flags, IOPL_FLAG|I_FLAG|VM_FLAG|RF_FLAG); - - new_sp &= 0xffff; - new_ip &= 0xffff; - - CPU_ESP = new_sp; - SET_EIP(new_ip); } /*--- * IRET_pm: VM_FLAG */ -static void +static void CPUCALL IRET_pm_return_from_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) { UINT stacksize; @@ -1373,13 +1403,16 @@ IRET_pm_return_from_vm86(UINT16 new_cs, UINT32 new_ip, UINT32 new_flags) if (CPU_STAT_SS32) { CPU_ESP += stacksize; } else { - CPU_SP += (UINT16)stacksize; + CPU_SP += stacksize; } - set_eflags(new_flags, I_FLAG|RF_FLAG); + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + set_eflags(new_flags, I_FLAG|RF_FLAG); return; } VERBOSE(("IRET_pm: trap to virtual-8086 monitor: VM=1, IOPL<3")); diff --git a/i386c/ia32/ctrlxfer.h b/i386c/ia32/ctrlxfer.h index 0be5716f..da62f317 100644 --- a/i386c/ia32/ctrlxfer.h +++ b/i386c/ia32/ctrlxfer.h @@ -1,5 +1,3 @@ -/* $Id: ctrlxfer.h,v 1.3 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -32,9 +30,9 @@ extern "C" { #endif -void JMPfar_pm(UINT16 selector, UINT32 new_ip); -void CALLfar_pm(UINT16 selector, UINT32 new_ip); -void RETfar_pm(UINT nbytes); +void CPUCALL JMPfar_pm(UINT16 selector, UINT32 new_ip); +void CPUCALL CALLfar_pm(UINT16 selector, UINT32 new_ip); +void CPUCALL RETfar_pm(UINT nbytes); void IRET_pm(void); #ifdef __cplusplus diff --git a/i386c/ia32/debug.c b/i386c/ia32/debug.c index 4f87316d..72dc01bc 100644 --- a/i386c/ia32/debug.c +++ b/i386c/ia32/debug.c @@ -1,5 +1,3 @@ -/* $Id: debug.c,v 1.13 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -34,6 +32,26 @@ #endif +/* + * register strings + */ +const char *reg8_str[CPU_REG_NUM] = { + "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" +}; + +const char *reg16_str[CPU_REG_NUM] = { + "ax", "cx", "dx", "bx", "sp", "bp", "si", "di" +}; + +const char *reg32_str[CPU_REG_NUM] = { + "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi" +}; + +const char *sreg_str[CPU_SEGREG_NUM] = { + "es", "cs", "ss", "ds", "fs", "gs" +}; + + char * cpu_reg2str(void) { @@ -43,7 +61,7 @@ cpu_reg2str(void) "eax=%08x ecx=%08x edx=%08x ebx=%08x\n" "esp=%08x ebp=%08x esi=%08x edi=%08x\n" "eip=%08x prev_eip=%08x\n" - "es=%04x cs=%04x ss=%04x ds=%04x fs=%04x gs=%04x\n" + "cs=%04x ss=%04x ds=%04x es=%04x fs=%04x gs=%04x\n" "eflag=%08x " /* ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF CF */ "[ ID=%d VIP=%d VIF=%d AC=%d VM=%d RF=%d NT=%d IOPL=%d %s %s %s TF=%d %s %s %s %s %s ]\n" @@ -103,7 +121,7 @@ put_cpuinfo(void) #endif strcat(buf, a20str()); - printf(buf); + printf("%s", buf); } void @@ -117,7 +135,7 @@ dbg_printf(const char *str, ...) va_end(ap); strcat(buf, "\n"); - printf(buf); + printf("%s", buf); } void @@ -136,7 +154,7 @@ memory_dump(int idx, UINT32 madr) size = 0x100; addr = madr - 0x80; } - VERBOSE(("memory dump\n-- \n")); + VERBOSE(("memory dump\n--")); for (s = 0; s < size; s++) { if ((s % 16) == 0) { VERBOSE(("%08x: ", addr + s)); @@ -208,8 +226,6 @@ tr_dump(UINT16 selector, UINT32 base, UINT limit) UINT32 v; UINT i; - (void)selector; - VERBOSE(("TR_DUMP: selector = %04x", selector)); for (i = 0; i < limit; i += 4) { @@ -240,12 +256,111 @@ pde_dump(UINT32 base, int idx) v = cpu_memoryread_d(paddr); VERBOSE(("PDE_DUMP: 0x%08x: %08x", paddr, v)); } else { + VERBOSE(("PDE_DUMP: invalid idx (%d)", idx)); paddr = 0; } return paddr; } +void +segdesc_dump(descriptor_t *sdp) +{ +#if defined(DEBUG) + const char *s; + + __ASSERT(sdp != NULL); + + VERBOSE(("dump descriptor: %p", sdp)); + + VERBOSE(("valid : %s", SEG_IS_VALID(sdp) ? "true" : "false")); + VERBOSE(("present : %s", SEG_IS_PRESENT(sdp) ? "true" : "false")); + VERBOSE(("DPL : %d", sdp->dpl)); + VERBOSE(("type : %d", sdp->type)); + VERBOSE(("kind : %s", SEG_IS_SYSTEM(sdp) ? "system" : "code/data")); + if (!SEG_IS_SYSTEM(sdp)) { + if (SEG_IS_CODE(sdp)) { + VERBOSE(("type : %dbit %sconforming code", + SEG_IS_32BIT(sdp) ? 32 : 16, + SEG_IS_CONFORMING_CODE(sdp) ? "" : "non-")); + VERBOSE(("access : execute%s", + SEG_IS_READABLE_CODE(sdp) ? "/read" : "")); + } else { + VERBOSE(("type : %dbit expand-%s data", + SEG_IS_32BIT(sdp) ? 32 : 16, + SEG_IS_EXPANDDOWN_DATA(sdp) ? "down" : "up")); + VERBOSE(("access : read%s", + SEG_IS_WRITABLE_DATA(sdp) ? "/write" : "")); + } + VERBOSE(("4k scale : %s", sdp->u.seg.g ? "true" : "false")); + VERBOSE(("baseadr : 0x%08x", sdp->u.seg.segbase)); + VERBOSE(("limit : 0x%08x", sdp->u.seg.limit)); + } else { + switch (sdp->type) { + case CPU_SYSDESC_TYPE_LDT: /* LDT */ + VERBOSE(("type : LDT")); + VERBOSE(("4k scale : %s", sdp->u.seg.g ? "true" : "false")); + VERBOSE(("baseadr : 0x%08x", sdp->u.seg.segbase)); + VERBOSE(("limit : 0x%08x", sdp->u.seg.limit)); + break; + + case CPU_SYSDESC_TYPE_TASK: /* task gate */ + VERBOSE(("type : task gate")); + VERBOSE(("selector : 0x%04x", sdp->u.gate.selector)); + break; + + case CPU_SYSDESC_TYPE_TSS_16: /* 286 TSS */ + case CPU_SYSDESC_TYPE_TSS_BUSY_16: /* 286 Busy TSS */ + case CPU_SYSDESC_TYPE_TSS_32: /* 386 TSS */ + case CPU_SYSDESC_TYPE_TSS_BUSY_32: /* 386 Busy TSS */ + VERBOSE(("type : %dbit %sTSS", + (sdp->type & CPU_SYSDESC_TYPE_32BIT) ? 32 : 16, + (sdp->type & CPU_SYSDESC_TYPE_TSS_BUSY_IND) ? + "Busy " : "")); + VERBOSE(("4k scale : %s", sdp->u.seg.g ? "true" : "false")); + VERBOSE(("baseadr : 0x%08x", sdp->u.seg.segbase)); + VERBOSE(("limit : 0x%08x", sdp->u.seg.limit)); + break; + + case CPU_SYSDESC_TYPE_CALL_16: /* 286 call gate */ + case CPU_SYSDESC_TYPE_INTR_16: /* 286 interrupt gate */ + case CPU_SYSDESC_TYPE_TRAP_16: /* 286 trap gate */ + case CPU_SYSDESC_TYPE_CALL_32: /* 386 call gate */ + case CPU_SYSDESC_TYPE_INTR_32: /* 386 interrupt gate */ + case CPU_SYSDESC_TYPE_TRAP_32: /* 386 trap gate */ + switch (sdp->type & CPU_SYSDESC_TYPE_MASKBIT) { + case CPU_SYSDESC_TYPE_CALL: + s = "call"; + break; + + case CPU_SYSDESC_TYPE_INTR: + s = "interrupt"; + break; + + case CPU_SYSDESC_TYPE_TRAP: + s = "trap"; + break; + + default: + s = "unknown"; + break; + } + VERBOSE(("type : %c86 %s gate", + (sdp->type & CPU_SYSDESC_TYPE_32BIT) ? '3':'2', s)); + VERBOSE(("selector : 0x%04x", sdp->u.gate.selector)); + VERBOSE(("offset : 0x%08x", sdp->u.gate.offset)); + VERBOSE(("count : %d", sdp->u.gate.count)); + break; + + case 0: case 8: case 10: case 13: /* reserved */ + default: + VERBOSE(("type : unknown descriptor")); + break; + } + } +#endif +} + UINT32 convert_laddr_to_paddr(UINT32 laddr) { @@ -278,7 +393,7 @@ convert_vaddr_to_paddr(unsigned int idx, UINT32 offset) if (idx < CPU_SEGREG_NUM) { sdp = &CPU_STAT_SREG(idx); - if (sdp->valid) { + if (SEG_IS_VALID(sdp)) { laddr = CPU_STAT_SREGBASE(idx) + offset; return convert_laddr_to_paddr(laddr); } diff --git a/i386c/ia32/disasm.c b/i386c/ia32/disasm.c index f059c815..91ac4587 100644 --- a/i386c/ia32/disasm.c +++ b/i386c/ia32/disasm.c @@ -1,5 +1,3 @@ -/* $Id: disasm.c,v 1.9 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. @@ -30,25 +28,6 @@ #include "inst_table.h" -/* - * register strings - */ -const char *reg8_str[8] = { - "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" -}; - -const char *reg16_str[8] = { - "ax", "cx", "dx", "bx", "sp", "bp", "si", "di" -}; - -const char *reg32_str[8] = { - "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi" -}; - -const char *sreg_str[6] = { - "es", "cs", "ss", "ds", "fs", "gs" -}; - /* * opcode strings */ @@ -639,7 +618,7 @@ ea(disasm_context_t *ctx) * get opcode */ static int -op(disasm_context_t *ctx) +get_opcode(disasm_context_t *ctx) { const char *opcode; UINT8 op[3]; @@ -654,36 +633,35 @@ op(disasm_context_t *ctx) return rv; op[0] = (UINT8)(ctx->val & 0xff); - if (insttable_info[op[0]] & INST_PREFIX) { - if (ctx->prefix == 0) - ctx->prefix = ctx->next; - - switch (op[0]) { - case 0x26: /* ES: */ - case 0x2e: /* CS: */ - case 0x36: /* SS: */ - case 0x3e: /* DS: */ - ctx->useseg = TRUE; - ctx->seg = (op[0] >> 3) & 3; - break; - - case 0x64: /* FS: */ - case 0x65: /* GS: */ - ctx->useseg = TRUE; - ctx->seg = (op[0] - 0x64) + 4; - break; - - case 0x66: /* OPSize: */ - ctx->op32 = !CPU_INST_OP32; - break; - - case 0x67: /* AddrSize: */ - ctx->as32 = !CPU_INST_AS32; - break; - } - continue; + if (!(insttable_info[op[0]] & INST_PREFIX)) + break; + + if (ctx->prefix == 0) + ctx->prefix = ctx->next; + + switch (op[0]) { + case 0x26: /* ES: */ + case 0x2e: /* CS: */ + case 0x36: /* SS: */ + case 0x3e: /* DS: */ + ctx->useseg = TRUE; + ctx->seg = (op[0] >> 3) & 3; + break; + + case 0x64: /* FS: */ + case 0x65: /* GS: */ + ctx->useseg = TRUE; + ctx->seg = (op[0] - 0x64) + 4; + break; + + case 0x66: /* OPSize: */ + ctx->op32 = !CPU_STATSAVE.cpu_inst_default.op_32; + break; + + case 0x67: /* AddrSize: */ + ctx->as32 = !CPU_STATSAVE.cpu_inst_default.as_32; + break; } - break; } if (prefix == MAX_PREFIX) return 1; @@ -795,14 +773,14 @@ disasm(UINT32 *eip, disasm_context_t *ctx) ctx->arg[2] = 0; ctx->eip = *eip; - ctx->op32 = CPU_INST_OP32; - ctx->as32 = CPU_INST_AS32; + ctx->op32 = CPU_STATSAVE.cpu_inst_default.op_32; + ctx->as32 = CPU_STATSAVE.cpu_inst_default.as_32; ctx->seg = -1; ctx->baseaddr = ctx->eip; ctx->pad = ' '; - rv = op(ctx); + rv = get_opcode(ctx); if (rv) { memset(ctx, 0, sizeof(disasm_context_t)); return rv; @@ -811,3 +789,54 @@ disasm(UINT32 *eip, disasm_context_t *ctx) return 0; } + +char * +cpu_disasm2str(UINT32 eip) +{ + static char output[2048]; + disasm_context_t d; + UINT32 eip2 = eip; + int rv; + + output[0] = '\0'; + rv = disasm(&eip2, &d); + if (rv == 0) { + char buf[256]; + char tmp[32]; + int len = d.nopbytes > 8 ? 8 : d.nopbytes; + int i; + + buf[0] = '\0'; + for (i = 0; i < len; i++) { + snprintf(tmp, sizeof(tmp), "%02x ", d.opbyte[i]); + milstr_ncat(buf, tmp, sizeof(buf)); + } + for (; i < 8; i++) { + milstr_ncat(buf, " ", sizeof(buf)); + } + snprintf(output, sizeof(output), "%04x:%08x: %s%s", + CPU_CS, eip, buf, d.str); + + if (i < d.nopbytes) { + char t[256]; + buf[0] = '\0'; + for (; i < d.nopbytes; i++) { + snprintf(tmp, sizeof(tmp), "%02x ", + d.opbyte[i]); + milstr_ncat(buf, tmp, sizeof(buf)); + if ((i % 8) == 7) { + snprintf(t, sizeof(t), + "\n : %s", buf); + milstr_ncat(output, t, sizeof(output)); + buf[0] = '\0'; + } + } + if ((i % 8) != 0) { + snprintf(t, sizeof(t), + "\n : %s", buf); + milstr_ncat(output, t, sizeof(output)); + } + } + } + return output; +} diff --git a/i386c/ia32/exception.c b/i386c/ia32/exception.c index 06c844eb..198a0b43 100644 --- a/i386c/ia32/exception.c +++ b/i386c/ia32/exception.c @@ -1,5 +1,3 @@ -/* $Id: exception.c,v 1.20 2008/01/25 17:49:46 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -63,21 +61,32 @@ static const int dftable[4][4] = { { 1, 1, 1, 1, }, }; -void +void CPUCALL exception(int num, int error_code) { +#if defined(DEBUG) + extern int cpu_debug_rep_cont; + extern CPU_REGS cpu_debug_rep_regs; +#endif int errorp = 0; __ASSERT((unsigned int)num < EXCEPTION_NUM); #if 0 iptrace_out(); - debugwriteseg("execption.bin", &CPU_STAT_SREG(CPU_CS_INDEX), CPU_PREV_EIP & 0xffff0000, 0x10000); + debugwriteseg("execption.bin", &CPU_CS_DESC, CPU_PREV_EIP & 0xffff0000, 0x10000); #endif VERBOSE(("exception: -------------------------------------------------------------- start")); VERBOSE(("exception: %s, error_code = %x at %04x:%08x", exception_str[num], error_code, CPU_CS, CPU_PREV_EIP)); VERBOSE(("%s", cpu_reg2str())); + VERBOSE(("code: %dbit(%dbit), address: %dbit(%dbit)", CPU_INST_OP32 ? 32 : 16, CPU_STATSAVE.cpu_inst_default.op_32 ? 32 : 16, CPU_INST_AS32 ? 32 : 16, CPU_STATSAVE.cpu_inst_default.as_32 ? 32 : 16)); +#if defined(DEBUG) + if (cpu_debug_rep_cont) { + VERBOSE(("rep: original regs: ecx=%08x, esi=%08x, edi=%08x", cpu_debug_rep_regs.reg[CPU_ECX_INDEX].d, cpu_debug_rep_regs.reg[CPU_ESI_INDEX].d, cpu_debug_rep_regs.reg[CPU_EDI_INDEX].d)); + } + VERBOSE(("%s", cpu_disasm2str(CPU_PREV_EIP))); +#endif CPU_STAT_EXCEPTION_COUNTER_INC(); if ((CPU_STAT_EXCEPTION_COUNTER >= 3) @@ -87,42 +96,38 @@ exception(int num, int error_code) } switch (num) { - case DE_EXCEPTION: /* (F) スササ・ィ・鬘シ */ - case DB_EXCEPTION: /* (F/T) ・ヌ・ミ・テ・ー */ - case BR_EXCEPTION: /* (F) BOUND 、ホネマーマウー */ - case UD_EXCEPTION: /* (F) フオク・ェ・レ・ウ。シ・ノ */ - case NM_EXCEPTION: /* (F) ・ヌ・ミ・、・ケサネヘムノヤイト (FPU 、ャフオ、、) */ - case MF_EXCEPTION: /* (F) ノ簇ーセョソナタ・ィ・鬘シ */ -#if CPU_FAMILY >= 5 - case MC_EXCEPTION: /* (A) ・゙・キ・・チ・ァ・テ・ッ */ -#endif -#if CPU_FAMILY >= 6 - case XF_EXCEPTION: /* (F) ・ケ・ネ・遙シ・゚・・ー SIMD ウネト・フソホ */ -#endif + case DE_EXCEPTION: /* (F) 髯、邂励お繝ゥ繝シ */ + case DB_EXCEPTION: /* (F/T) 繝繝舌ャ繧ー */ + case BR_EXCEPTION: /* (F) BOUND 縺ョ遽蝗イ螟 */ + case UD_EXCEPTION: /* (F) 辟。蜉ケ繧ェ繝壹さ繝シ繝 */ + case NM_EXCEPTION: /* (F) 繝繝舌う繧ケ菴ソ逕ィ荳榊庄 (FPU 縺檎┌縺) */ + case MF_EXCEPTION: /* (F) 豬ョ蜍募ー乗焚轤ケ繧ィ繝ゥ繝シ */ CPU_EIP = CPU_PREV_EIP; + if (CPU_STATSAVE.cpu_stat.backout_sp) + CPU_ESP = CPU_PREV_ESP; /*FALLTHROUGH*/ - case NMI_EXCEPTION: /* (I) NMI ウ荀ケ、゚ */ - case BP_EXCEPTION: /* (T) ・ヨ・。シ・ッ・ン・、・・ネ */ - case OF_EXCEPTION: /* (T) ・ェ。シ・ミ。シ・ユ・。シ */ + case NMI_EXCEPTION: /* (I) NMI 蜑イ繧願セシ縺ソ */ + case BP_EXCEPTION: /* (T) 繝悶Ξ繝シ繧ッ繝昴う繝ウ繝 */ + case OF_EXCEPTION: /* (T) 繧ェ繝シ繝舌シ繝輔Ο繝シ */ errorp = 0; break; - case DF_EXCEPTION: /* (A) ・タ・ヨ・・ユ・ゥ・・ネ (errcode: 0) */ + case DF_EXCEPTION: /* (A) 繝繝悶Ν繝輔か繝ォ繝 (errcode: 0) */ errorp = 1; error_code = 0; break; -#if CPU_FAMILY >= 4 - case AC_EXCEPTION: /* (F) ・「・鬣、・・皈・ネ・チ・ァ・テ・ッ (errcode: 0) */ + case AC_EXCEPTION: /* (F) 繧「繝ゥ繧、繝ウ繝。繝ウ繝医メ繧ァ繝繧ッ (errcode: 0) */ error_code = 0; /*FALLTHROUGH*/ -#endif - case TS_EXCEPTION: /* (F) フオク TSS (errcode) */ - case NP_EXCEPTION: /* (F) ・サ・ー・皈・ネノヤコ゚ (errcode) */ - case SS_EXCEPTION: /* (F) ・ケ・ソ・テ・ッ・サ・ー・皈・ネ・ユ・ゥ・・ネ (errcode) */ - case GP_EXCEPTION: /* (F) ーネフハンクホ羌ー (errcode) */ - case PF_EXCEPTION: /* (F) ・レ。シ・ク・ユ・ゥ・・ネ (errcode) */ + case TS_EXCEPTION: /* (F) 辟。蜉ケ TSS (errcode) */ + case NP_EXCEPTION: /* (F) 繧サ繧ー繝。繝ウ繝井ク榊惠 (errcode) */ + case SS_EXCEPTION: /* (F) 繧ケ繧ソ繝繧ッ繧サ繧ー繝。繝ウ繝医ヵ繧ゥ繝ォ繝 (errcode) */ + case GP_EXCEPTION: /* (F) 荳闊ャ菫晁ュキ萓句、 (errcode) */ + case PF_EXCEPTION: /* (F) 繝壹シ繧ク繝輔か繝ォ繝 (errcode) */ CPU_EIP = CPU_PREV_EIP; + if (CPU_STATSAVE.cpu_stat.backout_sp) + CPU_ESP = CPU_PREV_ESP; errorp = 1; break; @@ -142,35 +147,28 @@ exception(int num, int error_code) VERBOSE(("exception: ---------------------------------------------------------------- end")); - INTERRUPT(num, 0, errorp, error_code); -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - if (num != BP_EXCEPTION) { - if (CPU_INST_OP32) { - set_eflags(REAL_EFLAGREG|RF_FLAG, RF_FLAG); - } - } -#endif + interrupt(num, INTR_TYPE_EXCEPTION, errorp, error_code); CPU_STAT_EXCEPTION_COUNTER_CLEAR(); siglongjmp(exec_1step_jmpbuf, 1); } /* - * ・ウ。シ・。ヲ・イ。シ・ネ。ヲ・ヌ・」・ケ・ッ・・ラ・ソ + * 繧ウ繝シ繝ォ繝サ繧イ繝シ繝医サ繝繧」繧ケ繧ッ繝ェ繝励ち * * 31 16 15 14 13 12 8 7 5 4 0 * +------------------------------------+--+-----+----------+-----+---------+ - * | ・ェ・ユ・サ・テ・ネ 31..16 | P| DPL | 0 D 1 0 0|0 0 0|・ォ・ヲ・・ネ | 4 + * | 繧ェ繝輔そ繝繝 31..16 | P| DPL | 0 D 1 0 0|0 0 0|繧ォ繧ヲ繝ウ繝 | 4 * +------------------------------------+--+-----+----------+-----+---------+ * 31 16 15 0 * +------------------------------------+-----------------------------------+ - * | ・サ・ー・皈・ネ。ヲ・サ・・ッ・ソ | ・ェ・ユ・サ・テ・ネ 15..0 | 0 + * | 繧サ繧ー繝。繝ウ繝医サ繧サ繝ャ繧ッ繧ソ | 繧ェ繝輔そ繝繝 15..0 | 0 * +------------------------------------+-----------------------------------+ */ /* - * ウ荀ケ、゚・ヌ・」・ケ・ッ・・ラ・ソ + * 蜑イ繧願セシ縺ソ繝繧」繧ケ繧ッ繝ェ繝励ち *-- - * ・ソ・ケ・ッ。ヲ・イ。シ・ネ + * 繧ソ繧ケ繧ッ繝サ繧イ繝シ繝 * * 31 16 15 14 13 12 8 7 0 * +------------------------------------+--+-----+----------+---------------+ @@ -178,62 +176,68 @@ exception(int num, int error_code) * +------------------------------------+--+-----+----------+---------------+ * 31 16 15 0 * +------------------------------------+-----------------------------------+ - * | TSS ・サ・ー・皈・ネ。ヲ・サ・・ッ・ソ | Reserved | 0 + * | TSS 繧サ繧ー繝。繝ウ繝医サ繧サ繝ャ繧ッ繧ソ | Reserved | 0 * +------------------------------------+-----------------------------------+ *-- - * ウ荀ケ、゚。ヲ・イ。シ・ネ + * 蜑イ繧願セシ縺ソ繝サ繧イ繝シ繝 * * 31 16 15 14 13 12 8 7 5 4 0 * +------------------------------------+--+-----+----------+-----+---------+ - * | ・ェ・ユ・サ・テ・ネ 31..16 | P| DPL | 0 D 1 1 0|0 0 0|Reserved | 4 + * | 繧ェ繝輔そ繝繝 31..16 | P| DPL | 0 D 1 1 0|0 0 0|Reserved | 4 * +------------------------------------+--+-----+----------+-----+---------+ * 31 16 15 0 * +------------------------------------+-----------------------------------+ - * | ・サ・ー・皈・ネ。ヲ・サ・・ッ・ソ | ・ェ・ユ・サ・テ・ネ 15..0 | 0 + * | 繧サ繧ー繝。繝ウ繝医サ繧サ繝ャ繧ッ繧ソ | 繧ェ繝輔そ繝繝 15..0 | 0 * +------------------------------------+-----------------------------------+ *-- - * ・ネ・鬣テ・ラ。ヲ・イ。シ・ネ + * 繝医Λ繝繝励サ繧イ繝シ繝 * * 31 16 15 14 13 12 8 7 5 4 0 * +------------------------------------+--+-----+----------+-----+---------+ - * | ・ェ・ユ・サ・テ・ネ 31..16 | P| DPL | 0 D 1 1 1|0 0 0|Reserved | 4 + * | 繧ェ繝輔そ繝繝 31..16 | P| DPL | 0 D 1 1 1|0 0 0|Reserved | 4 * +------------------------------------+--+-----+----------+-----+---------+ * 31 16 15 0 * +------------------------------------+-----------------------------------+ - * | ・サ・ー・皈・ネ。ヲ・サ・・ッ・ソ | ・ェ・ユ・サ・テ・ネ 15..0 | 0 + * | 繧サ繧ー繝。繝ウ繝医サ繧サ繝ャ繧ッ繧ソ | 繧ェ繝輔そ繝繝 15..0 | 0 * +------------------------------------+-----------------------------------+ *-- - * DPL : ・ヌ・」・ケ・ッ・・ラ・ソニテク「・・ル・ - * ・ェ・ユ・サ・テ・ネ : ・ラ・・キ。シ・ク・罍ヲ・ィ・・ネ・遙ヲ・ン・、・・ネ、゙、ヌ、ホ・ェ・ユ・サ・テ・ネ - * P : ・サ・ー・皈・ネツクコ゚・ユ・鬣ー - * ・サ・・ッ・ソ : ・ヌ・」・ケ・ニ・」・ヘ。シ・キ・逾。ヲ・ウ。シ・ノ。ヲ・サ・ー・皈・ネ、ホ・サ・ー・皈・ネ。ヲ・サ・・ッ・ソ - * D : ・イ。シ・ネ、ホ・オ・、・コ。・0 = 16 bit, 1 = 32 bit + * DPL : 繝繧」繧ケ繧ッ繝ェ繝励ち迚ケ讓ゥ繝ャ繝吶Ν + * 繧ェ繝輔そ繝繝 : 繝励Ο繧キ繝シ繧ク繝」繝サ繧ィ繝ウ繝医Μ繝サ繝昴う繝ウ繝医∪縺ァ縺ョ繧ェ繝輔そ繝繝 + * P : 繧サ繧ー繝。繝ウ繝亥ュ伜惠繝輔Λ繧ー + * 繧サ繝ャ繧ッ繧ソ : 繝繧」繧ケ繝繧」繝阪シ繧キ繝ァ繝ウ繝サ繧ウ繝シ繝峨サ繧サ繧ー繝。繝ウ繝医ョ繧サ繧ー繝。繝ウ繝医サ繧サ繝ャ繧ッ繧ソ + * D : 繧イ繝シ繝医ョ繧オ繧、繧コシ0 = 16 bit, 1 = 32 bit */ -static void interrupt_task_gate(const descriptor_t *gd, int softintp, int errorp, int error_code); -static void interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int error_code); +static void CPUCALL interrupt_task_gate(const descriptor_t *gsdp, int intrtype, int errorp, int error_code); +static void CPUCALL interrupt_intr_or_trap(const descriptor_t *gsdp, int intrtype, int errorp, int error_code); -void -interrupt(int num, int softintp, int errorp, int error_code) +void CPUCALL +interrupt(int num, int intrtype, int errorp, int error_code) { - descriptor_t gd; + descriptor_t gsd; UINT idt_idx; UINT32 new_ip; UINT16 new_cs; + int exc_errcode; - VERBOSE(("interrupt: num = 0x%02x, softintp = %s, errorp = %s, error_code = %08x", num, softintp ? "on" : "off", errorp ? "on" : "off", error_code)); + VERBOSE(("interrupt: num = 0x%02x, intrtype = %s, errorp = %s, error_code = %08x", num, (intrtype == INTR_TYPE_EXTINTR) ? "external" : (intrtype == INTR_TYPE_EXCEPTION ? "exception" : "softint"), errorp ? "on" : "off", error_code)); + + CPU_SET_PREV_ESP(); if (!CPU_STAT_PM) { /* real mode */ + CPU_WORKCLOCK(20); + idt_idx = num * 4; if (idt_idx + 3 > CPU_IDTR_LIMIT) { VERBOSE(("interrupt: real-mode IDTR limit check failure (idx = 0x%04x, limit = 0x%08x", idt_idx, CPU_IDTR_LIMIT)); EXCEPTION(GP_EXCEPTION, idt_idx + 2); } - if (!softintp && CPU_STAT_HLT) { + if ((intrtype == INTR_TYPE_EXTINTR) && CPU_STAT_HLT) { + VERBOSE(("interrupt: reset HTL in real mode")); CPU_EIP++; - CPU_STAT_HLT = FALSE; + CPU_STAT_HLT = 0; } REGPUSH0(REAL_FLAGREG); @@ -245,42 +249,45 @@ interrupt(int num, int softintp, int errorp, int error_code) new_ip = cpu_memoryread_w(CPU_IDTR_BASE + idt_idx); new_cs = cpu_memoryread_w(CPU_IDTR_BASE + idt_idx + 2); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); - CPU_WORKCLOCK(20); + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; } else { /* protected mode */ - VERBOSE(("interrupt: -------------------------------------------------------------- start")); + CPU_WORKCLOCK(200); + VERBOSE(("interrupt: -------------------------------------------------------------- start")); VERBOSE(("interrupt: old EIP = %04x:%08x, ESP = %04x:%08x", CPU_CS, CPU_EIP, CPU_SS, CPU_ESP)); #if defined(DEBUG) if (num == 0x80) { /* Linux, FreeBSD, NetBSD, OpenBSD system call */ - VERBOSE(("interrupt: syscall no = %d\n%s", CPU_EAX, cpu_reg2str())); + VERBOSE(("interrupt: syscall# = %d\n%s", CPU_EAX, cpu_reg2str())); } #endif - /* VM86 && IOPL < 3 && interrupt cause == INTn */ - if (CPU_STAT_VM86 && (CPU_STAT_IOPL < CPU_IOPL3) && (softintp == -1)) { - VERBOSE(("interrupt: VM86 && IOPL < 3 && INTn")); - EXCEPTION(GP_EXCEPTION, 0); - } - idt_idx = num * 8; + exc_errcode = idt_idx + 2; + if (intrtype == INTR_TYPE_EXTINTR) + exc_errcode++; + if (idt_idx + 7 > CPU_IDTR_LIMIT) { VERBOSE(("interrupt: IDTR limit check failure (idx = 0x%04x, limit = 0x%08x", idt_idx, CPU_IDTR_LIMIT)); - EXCEPTION(GP_EXCEPTION, idt_idx + 2 + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); } - memset(&gd, 0, sizeof(gd)); - load_descriptor(&gd, CPU_IDTR_BASE + idt_idx); - if (!gd.valid || !gd.p) { + /* load a gate descriptor from interrupt descriptor table */ + memset(&gsd, 0, sizeof(gsd)); + load_descriptor(&gsd, CPU_IDTR_BASE + idt_idx); + if (!SEG_IS_VALID(&gsd)) { VERBOSE(("interrupt: gate descripter is invalid.")); - EXCEPTION(GP_EXCEPTION, idt_idx + 2 + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); + } + if (!SEG_IS_SYSTEM(&gsd)) { + VERBOSE(("interrupt: gate descriptor is not system segment.")); + EXCEPTION(GP_EXCEPTION, exc_errcode); } - switch (gd.type) { + switch (gsd.type) { case CPU_SYSDESC_TYPE_TASK: case CPU_SYSDESC_TYPE_INTR_16: case CPU_SYSDESC_TYPE_INTR_32: @@ -289,56 +296,62 @@ interrupt(int num, int softintp, int errorp, int error_code) break; default: - VERBOSE(("interrupt: invalid gate type (%d)", gd.type)); - EXCEPTION(GP_EXCEPTION, idt_idx + 2 + !softintp); + VERBOSE(("interrupt: invalid gate type (%d)", gsd.type)); + EXCEPTION(GP_EXCEPTION, exc_errcode); break; } - /* 5.10.1.1. ホ羌ー。ソウ荀ケ、゚・マ・・ノ・鬘ヲ・ラ・・キ。シ・ク・网ホハンク */ - if (softintp && (gd.dpl < CPU_STAT_CPL)) { - VERBOSE(("interrupt: softintp && DPL(%d) < CPL(%d)", gd.dpl, CPU_STAT_CPL)); - EXCEPTION(GP_EXCEPTION, idt_idx + 2); + /* 5.10.1.1. 萓句、厄シ丞牡繧願セシ縺ソ繝上Φ繝峨Λ繝サ繝励Ο繧キ繝シ繧ク繝」縺ョ菫晁ュキ */ + if ((intrtype == INTR_TYPE_SOFTINTR) && (gsd.dpl < CPU_STAT_CPL)) { + VERBOSE(("interrupt: intrtype(softint) && DPL(%d) < CPL(%d)", gsd.dpl, CPU_STAT_CPL)); + EXCEPTION(GP_EXCEPTION, exc_errcode); } - if (!softintp && CPU_STAT_HLT) { + if (!SEG_IS_PRESENT(&gsd)) { + VERBOSE(("interrupt: gate descriptor is not present.")); + EXCEPTION(NP_EXCEPTION, exc_errcode); + } + + if ((intrtype == INTR_TYPE_EXTINTR) && CPU_STAT_HLT) { + VERBOSE(("interrupt: reset HTL in protected mode")); CPU_EIP++; - CPU_STAT_HLT = FALSE; + CPU_STAT_HLT = 0; } - switch (gd.type) { + switch (gsd.type) { case CPU_SYSDESC_TYPE_TASK: - interrupt_task_gate(&gd, softintp, errorp, error_code); + interrupt_task_gate(&gsd, intrtype, errorp, error_code); break; case CPU_SYSDESC_TYPE_INTR_16: case CPU_SYSDESC_TYPE_INTR_32: case CPU_SYSDESC_TYPE_TRAP_16: case CPU_SYSDESC_TYPE_TRAP_32: - interrupt_intr_or_trap(&gd, softintp, errorp, error_code); + interrupt_intr_or_trap(&gsd, intrtype, errorp, error_code); break; default: - EXCEPTION(GP_EXCEPTION, idt_idx + 2 + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); break; } VERBOSE(("interrupt: ---------------------------------------------------------------- end")); } + + CPU_CLEAR_PREV_ESP(); } -static void -interrupt_task_gate(const descriptor_t *gd, int softintp, int errorp, int error_code) +static void CPUCALL +interrupt_task_gate(const descriptor_t *gsdp, int intrtype, int errorp, int error_code) { selector_t task_sel; int rv; VERBOSE(("interrupt: TASK-GATE")); - (void)softintp; - - rv = parse_selector(&task_sel, gd->u.gate.selector); - if (rv < 0 || task_sel.ldt) { - VERBOSE(("interrupt: parse_selector (selector = %04x, rv = %d, %cDT)", gd->u.gate.selector, rv, task_sel.ldt ? 'L' : 'G')); + rv = parse_selector(&task_sel, gsdp->u.gate.selector); + if (rv < 0 || task_sel.ldt || !SEG_IS_SYSTEM(&task_sel.desc)) { + VERBOSE(("interrupt: parse_selector (selector = %04x, rv = %d, %cDT, type = %s)", gsdp->u.gate.selector, rv, task_sel.ldt ? 'L' : 'G', task_sel.desc.s ? "code/data" : "system")); EXCEPTION(TS_EXCEPTION, task_sel.idx); } @@ -366,13 +379,26 @@ interrupt_task_gate(const descriptor_t *gd, int softintp, int errorp, int error_ task_switch(&task_sel, TASK_SWITCH_INTR); + CPU_SET_PREV_ESP(); + if (errorp) { - XPUSH0(error_code); + VERBOSE(("interrupt: push error code (%08x)", error_code)); + if (task_sel.desc.type == CPU_SYSDESC_TYPE_TSS_32) { + PUSH0_32(error_code); + } else { + PUSH0_16(error_code); + } + } + + /* out of range */ + if (CPU_EIP > CPU_STAT_CS_LIMIT) { + VERBOSE(("interrupt: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); + EXCEPTION(GP_EXCEPTION, 0); } } -static void -interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int error_code) +static void CPUCALL +interrupt_intr_or_trap(const descriptor_t *gsdp, int intrtype, int errorp, int error_code) { selector_t cs_sel, ss_sel; UINT stacksize; @@ -383,9 +409,10 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err UINT32 new_ip, new_sp; UINT32 old_ip, old_sp; UINT16 old_cs, old_ss, new_ss; + int exc_errcode; int rv; - new_ip = gd->u.gate.offset; + new_ip = gsdp->u.gate.offset; old_ss = CPU_SS; old_cs = CPU_CS; old_ip = CPU_EIP; @@ -394,7 +421,7 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err new_flags = REAL_EFLAGREG & ~(T_FLAG|RF_FLAG|NT_FLAG|VM_FLAG); mask = T_FLAG|RF_FLAG|NT_FLAG|VM_FLAG; - switch (gd->type) { + switch (gsdp->type) { case CPU_SYSDESC_TYPE_INTR_16: case CPU_SYSDESC_TYPE_INTR_32: VERBOSE(("interrupt: INTERRUPT-GATE")); @@ -408,100 +435,108 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err break; default: - ia32_panic("interrupt: gate descriptor type is invalid (type = %d)", gd->type); + ia32_panic("interrupt: gate descriptor type is invalid (type = %d)", gsdp->type); break; } - rv = parse_selector(&cs_sel, gd->u.gate.selector); + exc_errcode = gsdp->u.gate.selector & ~3; + if (intrtype == INTR_TYPE_EXTINTR) + exc_errcode++; + + rv = parse_selector(&cs_sel, gsdp->u.gate.selector); if (rv < 0) { - VERBOSE(("interrupt: parse_selector (selector = %04x, rv = %d)", gd->u.gate.selector, rv)); - EXCEPTION(GP_EXCEPTION, cs_sel.idx + !softintp); + VERBOSE(("interrupt: parse_selector (selector = %04x, rv = %d)", gsdp->u.gate.selector, rv)); + EXCEPTION(GP_EXCEPTION, exc_errcode); } /* check segment type */ - if (!cs_sel.desc.s) { + if (SEG_IS_SYSTEM(&cs_sel.desc)) { VERBOSE(("interrupt: code segment is system segment")); - EXCEPTION(GP_EXCEPTION, cs_sel.idx + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); } - if (!cs_sel.desc.u.seg.c) { + if (SEG_IS_DATA(&cs_sel.desc)) { VERBOSE(("interrupt: code segment is data segment")); - EXCEPTION(GP_EXCEPTION, cs_sel.idx + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); } /* check privilege level */ if (cs_sel.desc.dpl > CPU_STAT_CPL) { VERBOSE(("interrupt: DPL(%d) > CPL(%d)", cs_sel.desc.dpl, CPU_STAT_CPL)); - EXCEPTION(GP_EXCEPTION, cs_sel.idx + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); } /* not present */ if (selector_is_not_present(&cs_sel)) { VERBOSE(("interrupt: selector is not present")); - EXCEPTION(NP_EXCEPTION, cs_sel.idx + !softintp); + EXCEPTION(NP_EXCEPTION, exc_errcode); } - if (!cs_sel.desc.u.seg.ec - && (cs_sel.desc.dpl < CPU_STAT_CPL)) { + if (!SEG_IS_CONFORMING_CODE(&cs_sel.desc) && (cs_sel.desc.dpl < CPU_STAT_CPL)) { + stacksize = errorp ? 12 : 10; if (!CPU_STAT_VM86) { VERBOSE(("interrupt: INTER-PRIVILEGE-LEVEL-INTERRUPT")); - stacksize = errorp ? 12 : 10; } else { /* VM86 */ + VERBOSE(("interrupt: INTERRUPT-FROM-VIRTUAL-8086-MODE")); if (cs_sel.desc.dpl != 0) { /* 16.3.1.1 */ VERBOSE(("interrupt: DPL[CS](%d) != 0", cs_sel.desc.dpl)); - EXCEPTION(GP_EXCEPTION, cs_sel.idx); + EXCEPTION(GP_EXCEPTION, exc_errcode); } - VERBOSE(("interrupt: INTERRUPT-FROM-VIRTUAL-8086-MODE")); - stacksize = errorp ? 20 : 18; + stacksize += 8; } - switch (gd->type) { - case CPU_SYSDESC_TYPE_INTR_32: - case CPU_SYSDESC_TYPE_TRAP_32: + if (gsdp->type & CPU_SYSDESC_TYPE_32BIT) { stacksize *= 2; - break; } + /* get stack pointer from TSS */ get_stack_pointer_from_tss(cs_sel.desc.dpl, &new_ss, &new_sp); + /* parse stack segment descriptor */ rv = parse_selector(&ss_sel, new_ss); + + /* update exception error code */ + exc_errcode = ss_sel.idx; + if (intrtype == INTR_TYPE_EXTINTR) + exc_errcode++; + if (rv < 0) { VERBOSE(("interrupt: parse_selector (selector = %04x, rv = %d)", new_ss, rv)); - EXCEPTION(TS_EXCEPTION, ss_sel.idx + !softintp); + EXCEPTION(TS_EXCEPTION, exc_errcode); } /* check privilege level */ if (ss_sel.rpl != cs_sel.desc.dpl) { - VERBOSE(("interrupt: RPL[SS](%d) != DPL[CS](%d)", ss_sel.rpl, cs_sel.desc.dpl)); - EXCEPTION(TS_EXCEPTION, ss_sel.idx + !softintp); + VERBOSE(("interrupt: selector RPL[SS](%d) != DPL[CS](%d)", ss_sel.rpl, cs_sel.desc.dpl)); + EXCEPTION(TS_EXCEPTION, exc_errcode); } if (ss_sel.desc.dpl != cs_sel.desc.dpl) { - VERBOSE(("interrupt: DPL[SS](%d) != DPL[CS](%d)", ss_sel.desc.dpl, cs_sel.desc.dpl)); - EXCEPTION(TS_EXCEPTION, ss_sel.idx + !softintp); + VERBOSE(("interrupt: descriptor DPL[SS](%d) != DPL[CS](%d)", ss_sel.desc.dpl, cs_sel.desc.dpl)); + EXCEPTION(TS_EXCEPTION, exc_errcode); } - /* check segment type */ - if (!ss_sel.desc.s) { + /* stack segment must be writable data segment. */ + if (SEG_IS_SYSTEM(&ss_sel.desc)) { VERBOSE(("interrupt: stack segment is system segment")); - EXCEPTION(TS_EXCEPTION, ss_sel.idx + !softintp); + EXCEPTION(TS_EXCEPTION, exc_errcode); } - if (ss_sel.desc.u.seg.c) { + if (SEG_IS_CODE(&ss_sel.desc)) { VERBOSE(("interrupt: stack segment is code segment")); - EXCEPTION(TS_EXCEPTION, ss_sel.idx + !softintp); + EXCEPTION(TS_EXCEPTION, exc_errcode); } - if (!ss_sel.desc.u.seg.wr) { + if (!SEG_IS_WRITABLE_DATA(&ss_sel.desc)) { VERBOSE(("interrupt: stack segment is read-only data segment")); - EXCEPTION(TS_EXCEPTION, ss_sel.idx + !softintp); + EXCEPTION(TS_EXCEPTION, exc_errcode); } /* not present */ if (selector_is_not_present(&ss_sel)) { VERBOSE(("interrupt: selector is not present")); - EXCEPTION(SS_EXCEPTION, ss_sel.idx + !softintp); + EXCEPTION(SS_EXCEPTION, exc_errcode); } /* check stack room size */ - STACK_PUSH_CHECK(ss_sel.idx, &ss_sel.desc, new_sp, stacksize); + cpu_stack_push_check(ss_sel.idx, &ss_sel.desc, new_sp, stacksize); /* out of range */ if (new_ip > cs_sel.desc.u.seg.limit) { @@ -513,24 +548,22 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err CPU_ESP = new_sp; load_cs(cs_sel.selector, &cs_sel.desc, cs_sel.desc.dpl); - SET_EIP(new_ip); + CPU_EIP = new_ip; - switch (gd->type) { - case CPU_SYSDESC_TYPE_INTR_32: - case CPU_SYSDESC_TYPE_TRAP_32: + if (gsdp->type & CPU_SYSDESC_TYPE_32BIT) { if (CPU_STAT_VM86) { PUSH0_32(CPU_GS); PUSH0_32(CPU_FS); PUSH0_32(CPU_DS); PUSH0_32(CPU_ES); - CPU_SET_SEGREG(CPU_GS_INDEX, 0); + LOAD_SEGREG(CPU_GS_INDEX, 0); CPU_STAT_SREG(CPU_GS_INDEX).valid = 0; - CPU_SET_SEGREG(CPU_FS_INDEX, 0); + LOAD_SEGREG(CPU_FS_INDEX, 0); CPU_STAT_SREG(CPU_FS_INDEX).valid = 0; - CPU_SET_SEGREG(CPU_DS_INDEX, 0); + LOAD_SEGREG(CPU_DS_INDEX, 0); CPU_STAT_SREG(CPU_DS_INDEX).valid = 0; - CPU_SET_SEGREG(CPU_ES_INDEX, 0); + LOAD_SEGREG(CPU_ES_INDEX, 0); CPU_STAT_SREG(CPU_ES_INDEX).valid = 0; } PUSH0_32(old_ss); @@ -541,10 +574,7 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err if (errorp) { PUSH0_32(error_code); } - break; - - case CPU_SYSDESC_TYPE_INTR_16: - case CPU_SYSDESC_TYPE_TRAP_16: + } else { if (CPU_STAT_VM86) { ia32_panic("interrupt: 16bit gate && VM86"); } @@ -556,33 +586,31 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err if (errorp) { PUSH0_16(error_code); } - break; } } else { if (CPU_STAT_VM86) { VERBOSE(("interrupt: VM86")); - EXCEPTION(GP_EXCEPTION, cs_sel.idx + !softintp); + EXCEPTION(GP_EXCEPTION, exc_errcode); } - if (!cs_sel.desc.u.seg.ec && (cs_sel.desc.dpl != CPU_STAT_CPL)) { - VERBOSE(("interrupt: NON-CONFORMING-CODE-SEGMENT(%s) and DPL[CS](%d) != CPL", cs_sel.desc.u.seg.ec ? "false" : "true", cs_sel.desc.dpl, CPU_STAT_CPL)); - EXCEPTION(GP_EXCEPTION, cs_sel.idx + !softintp); + if (!SEG_IS_CONFORMING_CODE(&cs_sel.desc) && (cs_sel.desc.dpl != CPU_STAT_CPL)) { + VERBOSE(("interrupt: %sCONFORMING-CODE-SEGMENT(%d) && DPL[CS](%d) != CPL", SEG_IS_CONFORMING_CODE(&cs_sel.desc) ? "" : "NON-", cs_sel.desc.dpl, CPU_STAT_CPL)); + EXCEPTION(GP_EXCEPTION, exc_errcode); } + VERBOSE(("interrupt: INTRA-PRIVILEGE-LEVEL-INTERRUPT")); stacksize = errorp ? 8 : 6; - switch (gd->type) { - case CPU_SYSDESC_TYPE_INTR_32: - case CPU_SYSDESC_TYPE_TRAP_32: + if (gsdp->type & CPU_SYSDESC_TYPE_32BIT) { stacksize *= 2; - break; } + /* check stack room size */ if (CPU_STAT_SS32) { sp = CPU_ESP; } else { sp = CPU_SP; } - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, stacksize); + SS_PUSH_CHECK(sp, stacksize); /* out of range */ if (new_ip > cs_sel.desc.u.seg.limit) { @@ -591,28 +619,22 @@ interrupt_intr_or_trap(const descriptor_t *gd, int softintp, int errorp, int err } load_cs(cs_sel.selector, &cs_sel.desc, CPU_STAT_CPL); - SET_EIP(new_ip); + CPU_EIP = new_ip; - switch (gd->type) { - case CPU_SYSDESC_TYPE_INTR_32: - case CPU_SYSDESC_TYPE_TRAP_32: + if (gsdp->type & CPU_SYSDESC_TYPE_32BIT) { PUSH0_32(old_flags); PUSH0_32(old_cs); PUSH0_32(old_ip); if (errorp) { PUSH0_32(error_code); } - break; - - case CPU_SYSDESC_TYPE_INTR_16: - case CPU_SYSDESC_TYPE_TRAP_16: + } else { PUSH0_16(old_flags); PUSH0_16(old_cs); PUSH0_16(old_ip); if (errorp) { PUSH0_16(error_code); } - break; } } set_eflags(new_flags, mask); diff --git a/i386c/ia32/exception.h b/i386c/ia32/exception.h index f2d2f441..f89ed85a 100644 --- a/i386c/ia32/exception.h +++ b/i386c/ia32/exception.h @@ -1,5 +1,3 @@ -/* $Id: exception.h,v 1.2 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -56,13 +54,19 @@ enum { EXCEPTION_NUM }; +enum { + INTR_TYPE_SOFTINTR = -1, /* software interrupt (INTn) */ + INTR_TYPE_EXTINTR = 0, /* external interrupt */ + INTR_TYPE_EXCEPTION = 1, /* exception */ +}; + #define EXCEPTION(num, vec) \ exception(num, vec); -#define INTERRUPT(num, softintp, errorp, error_code) \ - interrupt(num, softintp, errorp, error_code) +#define INTERRUPT(num, softintp) \ + interrupt(num, softintp, 0, 0) -void exception(int num, int vec); -void interrupt(int num, int softintp, int errorp, int error_code); +void CPUCALL exception(int num, int vec); +void CPUCALL interrupt(int num, int intrtype, int errorp, int error_code); #ifdef __cplusplus } diff --git a/i386c/ia32/groups.c b/i386c/ia32/groups.c index a832bf92..1ec8d52c 100644 --- a/i386c/ia32/groups.c +++ b/i386c/ia32/groups.c @@ -1,5 +1,3 @@ -/* $Id: groups.c,v 1.7 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/groups.h b/i386c/ia32/groups.h index efcd0658..929239e2 100644 --- a/i386c/ia32/groups.h +++ b/i386c/ia32/groups.h @@ -1,5 +1,3 @@ -/* $Id: groups.h,v 1.3 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/ia32.c b/i386c/ia32/ia32.c index e252b9c6..4b0a657c 100644 --- a/i386c/ia32/ia32.c +++ b/i386c/ia32/ia32.c @@ -1,5 +1,3 @@ -/* $Id: ia32.c,v 1.20 2008/01/25 17:49:46 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -132,69 +130,64 @@ ia32_setemm(UINT frame, UINT32 addr) { /* - * ・筍シ・ノチォーワ + * 繝「繝シ繝蛾キ遘サ */ -void FASTCALL +void CPUCALL change_pm(BOOL onoff) { - int i; if (onoff) { - for (i = 0; i < CPU_SEGREG_NUM; i++) { - CPU_STAT_SREG(i).valid = 1; - CPU_STAT_SREG(i).dpl = 0; - } - VERBOSE(("Entering to Protected-Mode...")); + VERBOSE(("change_pm: Entering to Protected-Mode...")); } else { - VERBOSE(("Leaveing from Protected-Mode...")); + VERBOSE(("change_pm: Leaveing from Protected-Mode...")); } CPU_INST_OP32 = CPU_INST_AS32 = CPU_STATSAVE.cpu_inst_default.op_32 = CPU_STATSAVE.cpu_inst_default.as_32 = 0; CPU_STAT_SS32 = 0; - CPU_SET_CPL(0); + set_cpl(0); CPU_STAT_PM = onoff; } -void FASTCALL +void CPUCALL change_pg(BOOL onoff) { if (onoff) { - VERBOSE(("Entering to Paging-Mode...")); + VERBOSE(("change_pg: Entering to Paging-Mode...")); } else { - VERBOSE(("Leaveing from Paging-Mode...")); + VERBOSE(("change_pg: Leaveing from Paging-Mode...")); } + CPU_STAT_PAGING = onoff; } -void FASTCALL +void CPUCALL change_vm(BOOL onoff) { int i; CPU_STAT_VM86 = onoff; if (onoff) { + VERBOSE(("change_vm: Entering to Virtual-8086-Mode...")); for (i = 0; i < CPU_SEGREG_NUM; i++) { - CPU_STAT_SREGLIMIT(i) = 0xffff; - CPU_SET_SEGREG(i, CPU_REGS_SREG(i)); + LOAD_SEGREG(i, CPU_REGS_SREG(i)); } CPU_INST_OP32 = CPU_INST_AS32 = CPU_STATSAVE.cpu_inst_default.op_32 = CPU_STATSAVE.cpu_inst_default.as_32 = 0; CPU_STAT_SS32 = 0; - CPU_SET_CPL(3); - VERBOSE(("Entering to Virtual-8086-Mode...")); + set_cpl(3); } else { - VERBOSE(("Leaveing from Virtual-8086-Mode...")); + VERBOSE(("change_vm: Leaveing from Virtual-8086-Mode...")); } } /* * flags */ -static void +static void CPUCALL modify_eflags(UINT32 new_flags, UINT32 mask) { UINT32 orig = CPU_EFLAG; @@ -216,7 +209,7 @@ modify_eflags(UINT32 new_flags, UINT32 mask) } } -void +void CPUCALL set_flags(UINT16 new_flags, UINT16 mask) { @@ -225,7 +218,7 @@ set_flags(UINT16 new_flags, UINT16 mask) modify_eflags(new_flags, mask); } -void +void CPUCALL set_eflags(UINT32 new_flags, UINT32 mask) { @@ -234,3 +227,29 @@ set_eflags(UINT32 new_flags, UINT32 mask) mask |= AC_FLAG|ID_FLAG; modify_eflags(new_flags, mask); } + +/* + * CR3 (Page Directory Entry base physical address) + */ +void CPUCALL +set_cr3(UINT32 new_cr3) +{ + + VERBOSE(("set_CR3: old = %08x, new = 0x%08x", CPU_CR3, new_cr3)); + + CPU_CR3 = new_cr3 & CPU_CR3_MASK; + CPU_STAT_PDE_BASE = CPU_CR3 & CPU_CR3_PD_MASK; + tlb_flush(0); +} + +/* + * CPL (Current Privilege Level) + */ +void CPUCALL +set_cpl(int new_cpl) +{ + int cpl = new_cpl & 3; + + CPU_STAT_CPL = (UINT8)cpl; + CPU_STAT_USER_MODE = (cpl == 3) ? CPU_MODE_USER : CPU_MODE_SUPERVISER; +} diff --git a/i386c/ia32/ia32.mcr b/i386c/ia32/ia32.mcr index 649c081c..f98154f1 100644 --- a/i386c/ia32/ia32.mcr +++ b/i386c/ia32/ia32.mcr @@ -1,5 +1,3 @@ -/* $Id: ia32.mcr,v 1.24 2008/01/25 18:07:30 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -74,7 +72,7 @@ do { \ #define CPU_HALT() \ do { \ - CPU_REMCLOCK = -1; \ + CPU_REMCLOCK = -1; \ } while (/*CONSTCOND*/ 0) #define IRQCHECKTERM() \ @@ -89,25 +87,7 @@ do { \ /* * instruction pointer */ -#define SET_EIP(v) \ -do { \ - UINT32 __new_ip = (v); \ - if (__new_ip > CPU_STAT_CS_LIMIT) { \ - VERBOSE(("SET_EIP: new_ip = %08x, limit = %08x", __new_ip, CPU_STAT_CS_LIMIT)); \ - EXCEPTION(GP_EXCEPTION, 0); \ - } \ - CPU_EIP = __new_ip; \ -} while (/*CONSTCOND*/ 0) - -#define ADD_EIP(v) \ -do { \ - UINT32 __tmp_ip = CPU_EIP + (v); \ - if (!CPU_STATSAVE.cpu_inst_default.op_32) { \ - __tmp_ip &= 0xffff; \ - } \ - SET_EIP(__tmp_ip); \ -} while (/*CONSTCOND*/ 0) - +/* 繧ウ繝シ繝峨ヵ繧ァ繝繝√↓菴ソ逕ィ縺吶k縺ョ縺ァ縲^pSize 縺ョ蠖ア髻ソ繧貞女縺代※縺ッ縺縺代↑縺 */ #define _ADD_EIP(v) \ do { \ UINT32 __tmp_ip = CPU_EIP + (v); \ @@ -715,48 +695,48 @@ do { \ */ #define REGPUSH(reg, clock) \ do { \ - UINT16 new_sp = CPU_SP - 2; \ - cpu_vmemorywrite_w(CPU_SS_INDEX, new_sp, reg); \ - CPU_SP = new_sp; \ + UINT16 __new_sp = CPU_SP - 2; \ CPU_WORKCLOCK(clock); \ + cpu_vmemorywrite_w(CPU_SS_INDEX, __new_sp, reg); \ + CPU_SP = __new_sp; \ } while (/*CONSTCOND*/ 0) #define REGPUSH_32(reg, clock) \ do { \ - UINT32 new_esp = CPU_ESP - 4; \ - cpu_vmemorywrite_d(CPU_SS_INDEX, new_esp, reg); \ - CPU_ESP = new_esp; \ + UINT32 __new_esp = CPU_ESP - 4; \ CPU_WORKCLOCK(clock); \ + cpu_vmemorywrite_d(CPU_SS_INDEX, __new_esp, reg); \ + CPU_ESP = __new_esp; \ } while (/*CONSTCOND*/ 0) #define REGPUSH0(reg) \ do { \ - UINT16 new_sp = CPU_SP - 2; \ - cpu_vmemorywrite_w(CPU_SS_INDEX, new_sp, (UINT16)reg); \ - CPU_SP = new_sp; \ + UINT16 __new_sp = CPU_SP - 2; \ + cpu_vmemorywrite_w(CPU_SS_INDEX, __new_sp, (UINT16)reg); \ + CPU_SP = __new_sp; \ } while (/*CONSTCOND*/ 0) /* Operand Size == 16 && Stack Size == 32 */ #define REGPUSH0_16_32(reg) \ do { \ - UINT32 new_esp = CPU_ESP - 2; \ - cpu_vmemorywrite_w(CPU_SS_INDEX, new_esp, (UINT16)reg); \ - CPU_ESP = new_esp; \ + UINT32 __new_esp = CPU_ESP - 2; \ + cpu_vmemorywrite_w(CPU_SS_INDEX, __new_esp, (UINT16)reg); \ + CPU_ESP = __new_esp; \ } while (/*CONSTCOND*/ 0) /* Operand Size == 32 && Stack Size == 16 */ #define REGPUSH0_32_16(reg) \ do { \ - UINT16 new_sp = CPU_SP - 4; \ - cpu_vmemorywrite_d(CPU_SS_INDEX, new_sp, reg); \ - CPU_SP = new_sp; \ + UINT16 __new_sp = CPU_SP - 4; \ + cpu_vmemorywrite_d(CPU_SS_INDEX, __new_sp, reg); \ + CPU_SP = __new_sp; \ } while (/*CONSTCOND*/ 0) #define REGPUSH0_32(reg) \ do { \ - UINT32 new_esp = CPU_ESP - 4; \ - cpu_vmemorywrite_d(CPU_SS_INDEX, new_esp, reg); \ - CPU_ESP = new_esp; \ + UINT32 __new_esp = CPU_ESP - 4; \ + cpu_vmemorywrite_d(CPU_SS_INDEX, __new_esp, reg); \ + CPU_ESP = __new_esp; \ } while (/*CONSTCOND*/ 0) #define PUSH0_16(reg) \ @@ -788,16 +768,16 @@ do { \ #define REGPOP(reg, clock) \ do { \ + CPU_WORKCLOCK(clock); \ (reg) = cpu_vmemoryread_w(CPU_SS_INDEX, CPU_SP); \ CPU_SP += 2; \ - CPU_WORKCLOCK(clock); \ } while (/*CONSTCOND*/ 0) #define REGPOP_32(reg, clock) \ do { \ + CPU_WORKCLOCK(clock); \ (reg) = cpu_vmemoryread_d(CPU_SS_INDEX, CPU_ESP); \ CPU_ESP += 4; \ - CPU_WORKCLOCK(clock); \ } while (/*CONSTCOND*/ 0) #define REGPOP0(reg) \ @@ -847,44 +827,44 @@ do { \ */ #define SP_PUSH_16(reg) \ do { \ - UINT16 sp = CPU_SP; \ + UINT16 __sp = CPU_SP; \ if (!CPU_STAT_SS32) { \ - REGPUSH0(sp); \ + REGPUSH0(__sp); \ } else { \ - REGPUSH0_16_32(sp); \ + REGPUSH0_16_32(__sp); \ } \ } while (/*CONSTCOND*/ 0) #define ESP_PUSH_32(reg) \ do { \ - UINT32 sp = CPU_ESP; \ + UINT32 __esp = CPU_ESP; \ if (!CPU_STAT_SS32) { \ - REGPUSH0_32_16(sp); \ + REGPUSH0_32_16(__esp); \ } else { \ - REGPUSH0_32(sp); \ + REGPUSH0_32(__esp); \ } \ } while (/*CONSTCOND*/ 0) #define SP_POP_16(reg) \ do { \ - UINT32 sp; \ + UINT32 __sp; \ if (!CPU_STAT_SS32) { \ - sp = CPU_SP; \ + __sp = CPU_SP; \ } else { \ - sp = CPU_ESP; \ + __sp = CPU_ESP; \ } \ - CPU_SP = cpu_vmemoryread_w(CPU_SS_INDEX, sp); \ + CPU_SP = cpu_vmemoryread_w(CPU_SS_INDEX, __sp); \ } while (/*CONSTCOND*/ 0) #define ESP_POP_32(reg) \ do { \ - UINT32 sp; \ + UINT32 __esp; \ if (!CPU_STAT_SS32) { \ - sp = CPU_SP; \ + __esp = CPU_SP; \ } else { \ - sp = CPU_ESP; \ + __esp = CPU_ESP; \ } \ - CPU_ESP = cpu_vmemoryread_d(CPU_SS_INDEX, sp); \ + CPU_ESP = cpu_vmemoryread_d(CPU_SS_INDEX, __esp); \ } while (/*CONSTCOND*/ 0) @@ -893,32 +873,50 @@ do { \ */ #define JMPSHORT(clock) \ do { \ - UINT32 __ip; \ + UINT32 __new_ip; \ + UINT32 __dest; \ CPU_WORKCLOCK(clock); \ - GET_PCBYTESD(__ip); \ - ADD_EIP(__ip); \ + GET_PCBYTESD(__dest); \ + __new_ip = CPU_EIP + __dest; \ + if (!CPU_INST_OP32) { \ + __new_ip &= 0xffff; \ + } \ + if (__new_ip > CPU_STAT_CS_LIMIT) { \ + EXCEPTION(GP_EXCEPTION, 0); \ + } \ + CPU_EIP = __new_ip; \ } while (/*CONSTCOND*/ 0) #define JMPNEAR(clock) \ do { \ - UINT32 __ip; \ + UINT16 __new_ip; \ + SINT16 __dest; \ CPU_WORKCLOCK(clock); \ - GET_PCWORDS(__ip); \ - ADD_EIP(__ip); \ + GET_PCWORDS(__dest); \ + __new_ip = CPU_IP + __dest; \ + if (__new_ip > CPU_STAT_CS_LIMIT) { \ + EXCEPTION(GP_EXCEPTION, 0); \ + } \ + CPU_EIP = __new_ip; \ } while (/*CONSTCOND*/ 0) -#define JMPNEAR_4(clock) \ +#define JMPNEAR32(clock) \ do { \ - UINT32 __ip; \ + UINT32 __new_ip; \ + UINT32 __dest; \ CPU_WORKCLOCK(clock); \ - GET_PCDWORD(__ip); \ - ADD_EIP(__ip); \ + GET_PCDWORD(__dest); \ + __new_ip = CPU_EIP + __dest; \ + if (__new_ip > CPU_STAT_CS_LIMIT) { \ + EXCEPTION(GP_EXCEPTION, 0); \ + } \ + CPU_EIP = __new_ip; \ } while (/*CONSTCOND*/ 0) #define JMPNOP(clock, d) \ do { \ CPU_WORKCLOCK(clock); \ - ADD_EIP((d)); \ + _ADD_EIP((d)); \ } while (/*CONSTCOND*/ 0) diff --git a/i386c/ia32/ia32xc.mcr b/i386c/ia32/ia32xc.mcr index f260b65c..1836ba68 100644 --- a/i386c/ia32/ia32xc.mcr +++ b/i386c/ia32/ia32xc.mcr @@ -1,5 +1,3 @@ -/* $Id: ia32xc.mcr,v 1.8 2005/03/12 12:34:30 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/inst_table.c b/i386c/ia32/inst_table.c index d4884508..2d9eccf8 100644 --- a/i386c/ia32/inst_table.c +++ b/i386c/ia32/inst_table.c @@ -1,5 +1,3 @@ -/* $Id: inst_table.c,v 1.10 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -44,7 +42,7 @@ #include "string_inst.h" #include "system_inst.h" -#include "fp.h" +#include "instructions/fpu/fp.h" /* @@ -57,11 +55,10 @@ undef_op(void) EXCEPTION(UD_EXCEPTION, 0); } -static void +static void CPUCALL undef_op2(UINT32 v) { - (void)v; EXCEPTION(UD_EXCEPTION, 0); } @@ -1450,7 +1447,7 @@ void (*insttable_2byte[2][256])(void) = { */ /* group 1 */ -void (*insttable_G1EbIb[])(UINT8 *, UINT32) = { +void (CPUCALL *insttable_G1EbIb[])(UINT8 *, UINT32) = { ADD_EbIb, OR_EbIb, ADC_EbIb, @@ -1460,7 +1457,7 @@ void (*insttable_G1EbIb[])(UINT8 *, UINT32) = { XOR_EbIb, CMP_EbIb, }; -void (*insttable_G1EbIb_ext[])(UINT32, UINT32) = { +void (CPUCALL *insttable_G1EbIb_ext[])(UINT32, UINT32) = { ADD_EbIb_ext, OR_EbIb_ext, ADC_EbIb_ext, @@ -1471,7 +1468,7 @@ void (*insttable_G1EbIb_ext[])(UINT32, UINT32) = { CMP_EbIb_ext, }; -void (*insttable_G1EwIx[])(UINT16 *, UINT32) = { +void (CPUCALL *insttable_G1EwIx[])(UINT16 *, UINT32) = { ADD_EwIx, OR_EwIx, ADC_EwIx, @@ -1481,7 +1478,7 @@ void (*insttable_G1EwIx[])(UINT16 *, UINT32) = { XOR_EwIx, CMP_EwIx, }; -void (*insttable_G1EwIx_ext[])(UINT32, UINT32) = { +void (CPUCALL *insttable_G1EwIx_ext[])(UINT32, UINT32) = { ADD_EwIx_ext, OR_EwIx_ext, ADC_EwIx_ext, @@ -1492,7 +1489,7 @@ void (*insttable_G1EwIx_ext[])(UINT32, UINT32) = { CMP_EwIx_ext, }; -void (*insttable_G1EdIx[])(UINT32 *, UINT32) = { +void (CPUCALL *insttable_G1EdIx[])(UINT32 *, UINT32) = { ADD_EdIx, OR_EdIx, ADC_EdIx, @@ -1502,7 +1499,7 @@ void (*insttable_G1EdIx[])(UINT32 *, UINT32) = { XOR_EdIx, CMP_EdIx, }; -void (*insttable_G1EdIx_ext[])(UINT32, UINT32) = { +void (CPUCALL *insttable_G1EdIx_ext[])(UINT32, UINT32) = { ADD_EdIx_ext, OR_EdIx_ext, ADC_EdIx_ext, @@ -1515,7 +1512,7 @@ void (*insttable_G1EdIx_ext[])(UINT32, UINT32) = { /* group 2 */ -void (*insttable_G2Eb[])(UINT8 *) = { +void (CPUCALL *insttable_G2Eb[])(UINT8 *) = { ROL_Eb, ROR_Eb, RCL_Eb, @@ -1525,7 +1522,7 @@ void (*insttable_G2Eb[])(UINT8 *) = { SHL_Eb, SAR_Eb, }; -void (*insttable_G2Eb_ext[])(UINT32) = { +void (CPUCALL *insttable_G2Eb_ext[])(UINT32) = { ROL_Eb_ext, ROR_Eb_ext, RCL_Eb_ext, @@ -1536,7 +1533,7 @@ void (*insttable_G2Eb_ext[])(UINT32) = { SAR_Eb_ext, }; -void (*insttable_G2Ew[])(UINT16 *) = { +void (CPUCALL *insttable_G2Ew[])(UINT16 *) = { ROL_Ew, ROR_Ew, RCL_Ew, @@ -1546,7 +1543,7 @@ void (*insttable_G2Ew[])(UINT16 *) = { SHL_Ew, SAR_Ew, }; -void (*insttable_G2Ew_ext[])(UINT32) = { +void (CPUCALL *insttable_G2Ew_ext[])(UINT32) = { ROL_Ew_ext, ROR_Ew_ext, RCL_Ew_ext, @@ -1557,7 +1554,7 @@ void (*insttable_G2Ew_ext[])(UINT32) = { SAR_Ew_ext, }; -void (*insttable_G2Ed[])(UINT32 *) = { +void (CPUCALL *insttable_G2Ed[])(UINT32 *) = { ROL_Ed, ROR_Ed, RCL_Ed, @@ -1567,7 +1564,7 @@ void (*insttable_G2Ed[])(UINT32 *) = { SHL_Ed, SAR_Ed, }; -void (*insttable_G2Ed_ext[])(UINT32) = { +void (CPUCALL *insttable_G2Ed_ext[])(UINT32) = { ROL_Ed_ext, ROR_Ed_ext, RCL_Ed_ext, @@ -1578,7 +1575,7 @@ void (*insttable_G2Ed_ext[])(UINT32) = { SAR_Ed_ext, }; -void (*insttable_G2EbCL[])(UINT8 *, UINT) = { +void (CPUCALL *insttable_G2EbCL[])(UINT8 *, UINT) = { ROL_EbCL, ROR_EbCL, RCL_EbCL, @@ -1588,7 +1585,7 @@ void (*insttable_G2EbCL[])(UINT8 *, UINT) = { SHL_EbCL, SAR_EbCL, }; -void (*insttable_G2EbCL_ext[])(UINT32, UINT) = { +void (CPUCALL *insttable_G2EbCL_ext[])(UINT32, UINT) = { ROL_EbCL_ext, ROR_EbCL_ext, RCL_EbCL_ext, @@ -1599,7 +1596,7 @@ void (*insttable_G2EbCL_ext[])(UINT32, UINT) = { SAR_EbCL_ext, }; -void (*insttable_G2EwCL[])(UINT16 *, UINT) = { +void (CPUCALL *insttable_G2EwCL[])(UINT16 *, UINT) = { ROL_EwCL, ROR_EwCL, RCL_EwCL, @@ -1609,7 +1606,7 @@ void (*insttable_G2EwCL[])(UINT16 *, UINT) = { SHL_EwCL, SAR_EwCL, }; -void (*insttable_G2EwCL_ext[])(UINT32, UINT) = { +void (CPUCALL *insttable_G2EwCL_ext[])(UINT32, UINT) = { ROL_EwCL_ext, ROR_EwCL_ext, RCL_EwCL_ext, @@ -1620,7 +1617,7 @@ void (*insttable_G2EwCL_ext[])(UINT32, UINT) = { SAR_EwCL_ext, }; -void (*insttable_G2EdCL[])(UINT32 *, UINT) = { +void (CPUCALL *insttable_G2EdCL[])(UINT32 *, UINT) = { ROL_EdCL, ROR_EdCL, RCL_EdCL, @@ -1630,7 +1627,7 @@ void (*insttable_G2EdCL[])(UINT32 *, UINT) = { SHL_EdCL, SAR_EdCL, }; -void (*insttable_G2EdCL_ext[])(UINT32, UINT) = { +void (CPUCALL *insttable_G2EdCL_ext[])(UINT32, UINT) = { ROL_EdCL_ext, ROR_EdCL_ext, RCL_EdCL_ext, @@ -1642,7 +1639,7 @@ void (*insttable_G2EdCL_ext[])(UINT32, UINT) = { }; /* group 3 */ -void (*insttable_G3Eb[])(UINT32) = { +void (CPUCALL *insttable_G3Eb[])(UINT32) = { TEST_EbIb, TEST_EbIb, NOT_Eb, @@ -1653,7 +1650,7 @@ void (*insttable_G3Eb[])(UINT32) = { IDIV_ALEb, }; -void (*insttable_G3Ew[])(UINT32) = { +void (CPUCALL *insttable_G3Ew[])(UINT32) = { TEST_EwIw, TEST_EwIw, NOT_Ew, @@ -1664,7 +1661,7 @@ void (*insttable_G3Ew[])(UINT32) = { IDIV_AXEw, }; -void (*insttable_G3Ed[])(UINT32) = { +void (CPUCALL *insttable_G3Ed[])(UINT32) = { TEST_EdId, TEST_EdId, NOT_Ed, @@ -1676,7 +1673,7 @@ void (*insttable_G3Ed[])(UINT32) = { }; /* group 4 */ -void (*insttable_G4[])(UINT32) = { +void (CPUCALL *insttable_G4[])(UINT32) = { INC_Eb, DEC_Eb, undef_op2, @@ -1688,7 +1685,7 @@ void (*insttable_G4[])(UINT32) = { }; /* group 5 */ -void (*insttable_G5Ew[])(UINT32) = { +void (CPUCALL *insttable_G5Ew[])(UINT32) = { INC_Ew, DEC_Ew, CALL_Ew, @@ -1699,7 +1696,7 @@ void (*insttable_G5Ew[])(UINT32) = { undef_op2, /* POP_Ew_G5 */ }; -void (*insttable_G5Ed[])(UINT32) = { +void (CPUCALL *insttable_G5Ed[])(UINT32) = { INC_Ed, DEC_Ed, CALL_Ed, @@ -1711,7 +1708,7 @@ void (*insttable_G5Ed[])(UINT32) = { }; /* group 6 */ -void (*insttable_G6[])(UINT32) = { +void (CPUCALL *insttable_G6[])(UINT32) = { SLDT_Ew, STR_Ew, LLDT_Ew, @@ -1723,7 +1720,7 @@ void (*insttable_G6[])(UINT32) = { }; /* group 7 */ -void (*insttable_G7[])(UINT32) = { +void (CPUCALL *insttable_G7[])(UINT32) = { SGDT_Ms, SIDT_Ms, LGDT_Ms, @@ -1735,7 +1732,7 @@ void (*insttable_G7[])(UINT32) = { }; /* group 8 */ -void (*insttable_G8EwIb[])(UINT32) = { +void (CPUCALL *insttable_G8EwIb[])(UINT32) = { undef_op2, undef_op2, undef_op2, @@ -1746,7 +1743,7 @@ void (*insttable_G8EwIb[])(UINT32) = { BTC_EwIb, }; -void (*insttable_G8EdIb[])(UINT32) = { +void (CPUCALL *insttable_G8EdIb[])(UINT32) = { undef_op2, undef_op2, undef_op2, @@ -1758,7 +1755,7 @@ void (*insttable_G8EdIb[])(UINT32) = { }; /* group 9 */ -void (*insttable_G9[])(UINT32) = { +void (CPUCALL *insttable_G9[])(UINT32) = { undef_op2, CMPXCHG8B, undef_op2, diff --git a/i386c/ia32/inst_table.h b/i386c/ia32/inst_table.h index 87e93a0c..63607945 100644 --- a/i386c/ia32/inst_table.h +++ b/i386c/ia32/inst_table.h @@ -1,5 +1,3 @@ -/* $Id: inst_table.h,v 1.5 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -45,51 +43,51 @@ extern void (*insttable_2byte[2][256])(void); */ /* group 1 */ -extern void (*insttable_G1EbIb[])(UINT8 *, UINT32); -extern void (*insttable_G1EwIx[])(UINT16 *, UINT32); -extern void (*insttable_G1EdIx[])(UINT32 *, UINT32); -extern void (*insttable_G1EbIb_ext[])(UINT32, UINT32); -extern void (*insttable_G1EwIx_ext[])(UINT32, UINT32); -extern void (*insttable_G1EdIx_ext[])(UINT32, UINT32); +extern void (CPUCALL *insttable_G1EbIb[])(UINT8 *, UINT32); +extern void (CPUCALL *insttable_G1EwIx[])(UINT16 *, UINT32); +extern void (CPUCALL *insttable_G1EdIx[])(UINT32 *, UINT32); +extern void (CPUCALL *insttable_G1EbIb_ext[])(UINT32, UINT32); +extern void (CPUCALL *insttable_G1EwIx_ext[])(UINT32, UINT32); +extern void (CPUCALL *insttable_G1EdIx_ext[])(UINT32, UINT32); /* group 2 */ -extern void (*insttable_G2Eb[])(UINT8 *); -extern void (*insttable_G2Ew[])(UINT16 *); -extern void (*insttable_G2Ed[])(UINT32 *); -extern void (*insttable_G2EbCL[])(UINT8 *, UINT); -extern void (*insttable_G2EwCL[])(UINT16 *, UINT); -extern void (*insttable_G2EdCL[])(UINT32 *, UINT); -extern void (*insttable_G2Eb_ext[])(UINT32); -extern void (*insttable_G2Ew_ext[])(UINT32); -extern void (*insttable_G2Ed_ext[])(UINT32); -extern void (*insttable_G2EbCL_ext[])(UINT32, UINT); -extern void (*insttable_G2EwCL_ext[])(UINT32, UINT); -extern void (*insttable_G2EdCL_ext[])(UINT32, UINT); +extern void (CPUCALL *insttable_G2Eb[])(UINT8 *); +extern void (CPUCALL *insttable_G2Ew[])(UINT16 *); +extern void (CPUCALL *insttable_G2Ed[])(UINT32 *); +extern void (CPUCALL *insttable_G2EbCL[])(UINT8 *, UINT); +extern void (CPUCALL *insttable_G2EwCL[])(UINT16 *, UINT); +extern void (CPUCALL *insttable_G2EdCL[])(UINT32 *, UINT); +extern void (CPUCALL *insttable_G2Eb_ext[])(UINT32); +extern void (CPUCALL *insttable_G2Ew_ext[])(UINT32); +extern void (CPUCALL *insttable_G2Ed_ext[])(UINT32); +extern void (CPUCALL *insttable_G2EbCL_ext[])(UINT32, UINT); +extern void (CPUCALL *insttable_G2EwCL_ext[])(UINT32, UINT); +extern void (CPUCALL *insttable_G2EdCL_ext[])(UINT32, UINT); /* group 3 */ -extern void (*insttable_G3Eb[])(UINT32); -extern void (*insttable_G3Ew[])(UINT32); -extern void (*insttable_G3Ed[])(UINT32); +extern void (CPUCALL *insttable_G3Eb[])(UINT32); +extern void (CPUCALL *insttable_G3Ew[])(UINT32); +extern void (CPUCALL *insttable_G3Ed[])(UINT32); /* group 4 */ -extern void (*insttable_G4[])(UINT32); +extern void (CPUCALL *insttable_G4[])(UINT32); /* group 5 */ -extern void (*insttable_G5Ew[])(UINT32); -extern void (*insttable_G5Ed[])(UINT32); +extern void (CPUCALL *insttable_G5Ew[])(UINT32); +extern void (CPUCALL *insttable_G5Ed[])(UINT32); /* group 6 */ -extern void (*insttable_G6[])(UINT32); +extern void (CPUCALL *insttable_G6[])(UINT32); /* group 7 */ -extern void (*insttable_G7[])(UINT32); +extern void (CPUCALL *insttable_G7[])(UINT32); /* group 8 */ -extern void (*insttable_G8EwIb[])(UINT32); -extern void (*insttable_G8EdIb[])(UINT32); +extern void (CPUCALL *insttable_G8EwIb[])(UINT32); +extern void (CPUCALL *insttable_G8EdIb[])(UINT32); /* group 9 */ -extern void (*insttable_G9[])(UINT32); +extern void (CPUCALL *insttable_G9[])(UINT32); #ifdef __cplusplus } diff --git a/i386c/ia32/instructions/arith.mcr b/i386c/ia32/instructions/arith.mcr index b5248d44..0ddc4fc4 100644 --- a/i386c/ia32/instructions/arith.mcr +++ b/i386c/ia32/instructions/arith.mcr @@ -1,5 +1,3 @@ -/* $Id: arith.mcr,v 1.2 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. @@ -30,29 +28,26 @@ /* args == 1 */ #define ARITH_INSTRUCTION_1(inst) \ -static UINT32 \ +static UINT32 CPUCALL \ inst##1(UINT32 dst, void *arg) \ { \ - (void)arg; \ BYTE_##inst(dst); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##2(UINT32 dst, void *arg) \ { \ - (void)arg; \ WORD_##inst(dst); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##4(UINT32 dst, void *arg) \ { \ - (void)arg; \ DWORD_##inst(dst); \ return dst; \ } \ \ -void \ +void CPUCALL \ inst##_Eb(UINT32 op) \ { \ UINT8 *out; \ @@ -67,11 +62,11 @@ inst##_Eb(UINT32 op) \ } else { \ CPU_WORKCLOCK(5); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, 0); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##1, 0); \ } \ } \ \ -void \ +void CPUCALL \ inst##_Ew(UINT32 op) \ { \ UINT16 *out; \ @@ -86,11 +81,11 @@ inst##_Ew(UINT32 op) \ } else { \ CPU_WORKCLOCK(5); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, 0); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, 0); \ } \ } \ \ -void \ +void CPUCALL \ inst##_Ed(UINT32 op) \ { \ UINT32 *out; \ @@ -105,27 +100,27 @@ inst##_Ed(UINT32 op) \ } else { \ CPU_WORKCLOCK(5); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, 0); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, 0); \ } \ } /* args == 2 */ #define ARITH_INSTRUCTION_2(inst) \ -static UINT32 \ +static UINT32 CPUCALL \ inst##1(UINT32 dst, void *arg) \ { \ UINT32 src = PTR_TO_UINT32(arg); \ BYTE_##inst(dst, src); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##2(UINT32 dst, void *arg) \ { \ UINT32 src = PTR_TO_UINT32(arg); \ WORD_##inst(dst, src); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##4(UINT32 dst, void *arg) \ { \ UINT32 src = PTR_TO_UINT32(arg); \ @@ -149,7 +144,7 @@ inst##_EbGb(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ } \ } \ \ @@ -169,7 +164,7 @@ inst##_EwGw(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ } \ } \ \ @@ -189,7 +184,7 @@ inst##_EdGd(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ } \ } \ \ @@ -265,7 +260,7 @@ inst##_EAXId(void) \ CPU_EAX = dst; \ } \ \ -void \ +void CPUCALL \ inst##_EbIb(UINT8 *regp, UINT32 src) \ { \ UINT32 dst; \ @@ -275,14 +270,14 @@ inst##_EbIb(UINT8 *regp, UINT32 src) \ *regp = (UINT8)dst; \ } \ \ -void \ +void CPUCALL \ inst##_EbIb_ext(UINT32 madr, UINT32 src) \ { \ \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ } \ \ -void \ +void CPUCALL \ inst##_EwIx(UINT16 *regp, UINT32 src) \ { \ UINT32 dst; \ @@ -292,14 +287,14 @@ inst##_EwIx(UINT16 *regp, UINT32 src) \ *regp = (UINT16)dst; \ } \ \ -void \ +void CPUCALL \ inst##_EwIx_ext(UINT32 madr, UINT32 src) \ { \ \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ } \ \ -void \ +void CPUCALL \ inst##_EdIx(UINT32 *regp, UINT32 src) \ { \ UINT32 dst; \ @@ -309,16 +304,16 @@ inst##_EdIx(UINT32 *regp, UINT32 src) \ *regp = dst; \ } \ \ -void \ +void CPUCALL \ inst##_EdIx_ext(UINT32 madr, UINT32 src) \ { \ \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ } /* args == 3 */ #define ARITH_INSTRUCTION_3(inst) \ -static UINT32 \ +static UINT32 CPUCALL \ inst##1(UINT32 dst, void *arg) \ { \ UINT32 src = PTR_TO_UINT32(arg); \ @@ -326,7 +321,7 @@ inst##1(UINT32 dst, void *arg) \ BYTE_##inst(res, dst, src); \ return res; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##2(UINT32 dst, void *arg) \ { \ UINT32 src = PTR_TO_UINT32(arg); \ @@ -334,7 +329,7 @@ inst##2(UINT32 dst, void *arg) \ WORD_##inst(res, dst, src); \ return res; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##4(UINT32 dst, void *arg) \ { \ UINT32 src = PTR_TO_UINT32(arg); \ @@ -359,7 +354,7 @@ inst##_EbGb(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ } \ } \ \ @@ -379,7 +374,7 @@ inst##_EwGw(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ } \ } \ \ @@ -399,7 +394,7 @@ inst##_EdGd(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ } \ } \ \ @@ -475,7 +470,7 @@ inst##_EAXId(void) \ CPU_EAX = res; \ } \ \ -void \ +void CPUCALL \ inst##_EbIb(UINT8 *regp, UINT32 src) \ { \ UINT32 dst, res; \ @@ -485,14 +480,14 @@ inst##_EbIb(UINT8 *regp, UINT32 src) \ *regp = (UINT8)res; \ } \ \ -void \ +void CPUCALL \ inst##_EbIb_ext(UINT32 madr, UINT32 src) \ { \ \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##1, UINT32_TO_PTR(src)); \ } \ \ -void \ +void CPUCALL \ inst##_EwIx(UINT16 *regp, UINT32 src) \ { \ UINT32 dst, res; \ @@ -502,14 +497,14 @@ inst##_EwIx(UINT16 *regp, UINT32 src) \ *regp = (UINT16)res; \ } \ \ -void \ +void CPUCALL \ inst##_EwIx_ext(UINT32 madr, UINT32 src) \ { \ \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, UINT32_TO_PTR(src)); \ } \ \ -void \ +void CPUCALL \ inst##_EdIx(UINT32 *regp, UINT32 src) \ { \ UINT32 dst, res; \ @@ -519,11 +514,11 @@ inst##_EdIx(UINT32 *regp, UINT32 src) \ *regp = res; \ } \ \ -void \ +void CPUCALL \ inst##_EdIx_ext(UINT32 madr, UINT32 src) \ { \ \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, UINT32_TO_PTR(src)); \ } #endif /* IA32_CPU_ARITH_MCR__ */ diff --git a/i386c/ia32/instructions/bin_arith.c b/i386c/ia32/instructions/bin_arith.c index e83da71b..f9795ab1 100644 --- a/i386c/ia32/instructions/bin_arith.c +++ b/i386c/ia32/instructions/bin_arith.c @@ -1,5 +1,3 @@ -/* $Id: bin_arith.c,v 1.12 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2002-2004 NONAKA Kimihiro * All rights reserved. @@ -45,7 +43,7 @@ ARITH_INSTRUCTION_3(SBB) /* * IMUL */ -void +void CPUCALL IMUL_ALEb(UINT32 op) { UINT32 madr; @@ -65,7 +63,7 @@ IMUL_ALEb(UINT32 op) CPU_AX = (UINT16)res; } -void +void CPUCALL IMUL_AXEw(UINT32 op) { UINT32 madr; @@ -86,7 +84,7 @@ IMUL_AXEw(UINT32 op) CPU_DX = (UINT16)(res >> 16); } -void +void CPUCALL IMUL_EAXEd(UINT32 op) { UINT32 madr; @@ -195,7 +193,7 @@ IMUL_GdEdId(void) /* * MUL */ -void +void CPUCALL MUL_ALEb(UINT32 op) { UINT32 res, madr; @@ -214,7 +212,7 @@ MUL_ALEb(UINT32 op) CPU_AX = (UINT16)res; } -void +void CPUCALL MUL_AXEw(UINT32 op) { UINT32 res, madr; @@ -234,7 +232,7 @@ MUL_AXEw(UINT32 op) CPU_DX = (UINT16)(res >> 16); } -void +void CPUCALL MUL_EAXEd(UINT32 op) { UINT32 res, madr; @@ -258,7 +256,7 @@ MUL_EAXEd(UINT32 op) /* * IDIV */ -void +void CPUCALL IDIV_ALEb(UINT32 op) { UINT32 madr; @@ -288,7 +286,7 @@ IDIV_ALEb(UINT32 op) EXCEPTION(DE_EXCEPTION, 0); } -void +void CPUCALL IDIV_AXEw(UINT32 op) { SINT32 tmp, r; @@ -318,7 +316,7 @@ IDIV_AXEw(UINT32 op) EXCEPTION(DE_EXCEPTION, 0); } -void +void CPUCALL IDIV_EAXEd(UINT32 op) { SINT64 tmp, r; @@ -352,7 +350,7 @@ IDIV_EAXEd(UINT32 op) /* * DIV */ -void +void CPUCALL DIV_ALEb(UINT32 op) { UINT32 madr; @@ -381,7 +379,7 @@ DIV_ALEb(UINT32 op) EXCEPTION(DE_EXCEPTION, 0); } -void +void CPUCALL DIV_AXEw(UINT32 op) { UINT32 madr; @@ -410,7 +408,7 @@ DIV_AXEw(UINT32 op) EXCEPTION(DE_EXCEPTION, 0); } -void +void CPUCALL DIV_EAXEd(UINT32 op) { UINT32 madr; @@ -492,34 +490,31 @@ void DEC_EDI(void) { DWORD_DEC(CPU_EDI); CPU_WORKCLOCK(2); } /* * NEG */ -static UINT32 +static UINT32 CPUCALL NEG1(UINT32 src, void *arg) { UINT32 dst; - (void)arg; BYTE_NEG(dst, src); return dst; } -static UINT32 +static UINT32 CPUCALL NEG2(UINT32 src, void *arg) { UINT32 dst; - (void)arg; WORD_NEG(dst, src); return dst; } -static UINT32 +static UINT32 CPUCALL NEG4(UINT32 src, void *arg) { UINT32 dst; - (void)arg; DWORD_NEG(dst, src); return dst; } -void +void CPUCALL NEG_Eb(UINT32 op) { UINT8 *out; @@ -534,11 +529,11 @@ NEG_Eb(UINT32 op) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, NEG1, 0); + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, NEG1, 0); } } -void +void CPUCALL NEG_Ew(UINT32 op) { UINT16 *out; @@ -553,11 +548,11 @@ NEG_Ew(UINT32 op) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, NEG2, 0); + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, NEG2, 0); } } -void +void CPUCALL NEG_Ed(UINT32 op) { UINT32 *out; @@ -572,7 +567,7 @@ NEG_Ed(UINT32 op) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, NEG4, 0); + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, NEG4, 0); } } @@ -703,7 +698,7 @@ CMP_EAXId(void) DWORD_SUB(res, dst, src); } -void +void CPUCALL CMP_EbIb(UINT8 *regp, UINT32 src) { UINT32 dst, res; @@ -712,7 +707,7 @@ CMP_EbIb(UINT8 *regp, UINT32 src) BYTE_SUB(res, dst, src); } -void +void CPUCALL CMP_EbIb_ext(UINT32 madr, UINT32 src) { UINT32 dst, res; @@ -721,7 +716,7 @@ CMP_EbIb_ext(UINT32 madr, UINT32 src) BYTE_SUB(res, dst, src); } -void +void CPUCALL CMP_EwIx(UINT16 *regp, UINT32 src) { UINT32 dst, res; @@ -730,7 +725,7 @@ CMP_EwIx(UINT16 *regp, UINT32 src) WORD_SUB(res, dst, src); } -void +void CPUCALL CMP_EwIx_ext(UINT32 madr, UINT32 src) { UINT32 dst, res; @@ -739,7 +734,7 @@ CMP_EwIx_ext(UINT32 madr, UINT32 src) WORD_SUB(res, dst, src); } -void +void CPUCALL CMP_EdIx(UINT32 *regp, UINT32 src) { UINT32 dst, res; @@ -748,7 +743,7 @@ CMP_EdIx(UINT32 *regp, UINT32 src) DWORD_SUB(res, dst, src); } -void +void CPUCALL CMP_EdIx_ext(UINT32 madr, UINT32 src) { UINT32 dst, res; diff --git a/i386c/ia32/instructions/bin_arith.h b/i386c/ia32/instructions/bin_arith.h index bdf36a48..3639b564 100644 --- a/i386c/ia32/instructions/bin_arith.h +++ b/i386c/ia32/instructions/bin_arith.h @@ -1,5 +1,3 @@ -/* $Id: bin_arith.h,v 1.4 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -42,12 +40,12 @@ void ADD_GdEd(void); void ADD_ALIb(void); void ADD_AXIw(void); void ADD_EAXId(void); -void ADD_EbIb(UINT8 *, UINT32); -void ADD_EwIx(UINT16 *, UINT32); -void ADD_EdIx(UINT32 *, UINT32); -void ADD_EbIb_ext(UINT32, UINT32); -void ADD_EwIx_ext(UINT32, UINT32); -void ADD_EdIx_ext(UINT32, UINT32); +void CPUCALL ADD_EbIb(UINT8 *, UINT32); +void CPUCALL ADD_EwIx(UINT16 *, UINT32); +void CPUCALL ADD_EdIx(UINT32 *, UINT32); +void CPUCALL ADD_EbIb_ext(UINT32, UINT32); +void CPUCALL ADD_EwIx_ext(UINT32, UINT32); +void CPUCALL ADD_EdIx_ext(UINT32, UINT32); /* ADC */ void ADC_EbGb(void); @@ -59,12 +57,12 @@ void ADC_GdEd(void); void ADC_ALIb(void); void ADC_AXIw(void); void ADC_EAXId(void); -void ADC_EbIb(UINT8 *, UINT32); -void ADC_EwIx(UINT16 *, UINT32); -void ADC_EdIx(UINT32 *, UINT32); -void ADC_EbIb_ext(UINT32, UINT32); -void ADC_EwIx_ext(UINT32, UINT32); -void ADC_EdIx_ext(UINT32, UINT32); +void CPUCALL ADC_EbIb(UINT8 *, UINT32); +void CPUCALL ADC_EwIx(UINT16 *, UINT32); +void CPUCALL ADC_EdIx(UINT32 *, UINT32); +void CPUCALL ADC_EbIb_ext(UINT32, UINT32); +void CPUCALL ADC_EwIx_ext(UINT32, UINT32); +void CPUCALL ADC_EdIx_ext(UINT32, UINT32); /* SUB */ void SUB_EbGb(void); @@ -76,12 +74,12 @@ void SUB_GdEd(void); void SUB_ALIb(void); void SUB_AXIw(void); void SUB_EAXId(void); -void SUB_EbIb(UINT8 *, UINT32); -void SUB_EwIx(UINT16 *, UINT32); -void SUB_EdIx(UINT32 *, UINT32); -void SUB_EbIb_ext(UINT32, UINT32); -void SUB_EwIx_ext(UINT32, UINT32); -void SUB_EdIx_ext(UINT32, UINT32); +void CPUCALL SUB_EbIb(UINT8 *, UINT32); +void CPUCALL SUB_EwIx(UINT16 *, UINT32); +void CPUCALL SUB_EdIx(UINT32 *, UINT32); +void CPUCALL SUB_EbIb_ext(UINT32, UINT32); +void CPUCALL SUB_EwIx_ext(UINT32, UINT32); +void CPUCALL SUB_EdIx_ext(UINT32, UINT32); /* SBB */ void SBB_EbGb(void); @@ -93,17 +91,17 @@ void SBB_GdEd(void); void SBB_ALIb(void); void SBB_AXIw(void); void SBB_EAXId(void); -void SBB_EbIb(UINT8 *, UINT32); -void SBB_EwIx(UINT16 *, UINT32); -void SBB_EdIx(UINT32 *, UINT32); -void SBB_EbIb_ext(UINT32, UINT32); -void SBB_EwIx_ext(UINT32, UINT32); -void SBB_EdIx_ext(UINT32, UINT32); +void CPUCALL SBB_EbIb(UINT8 *, UINT32); +void CPUCALL SBB_EwIx(UINT16 *, UINT32); +void CPUCALL SBB_EdIx(UINT32 *, UINT32); +void CPUCALL SBB_EbIb_ext(UINT32, UINT32); +void CPUCALL SBB_EwIx_ext(UINT32, UINT32); +void CPUCALL SBB_EdIx_ext(UINT32, UINT32); /* IMUL */ -void IMUL_ALEb(UINT32 op); -void IMUL_AXEw(UINT32 op); -void IMUL_EAXEd(UINT32 op); +void CPUCALL IMUL_ALEb(UINT32 op); +void CPUCALL IMUL_AXEw(UINT32 op); +void CPUCALL IMUL_EAXEd(UINT32 op); void IMUL_GwEw(void); void IMUL_GdEd(void); void IMUL_GwEwIb(void); @@ -112,24 +110,24 @@ void IMUL_GwEwIw(void); void IMUL_GdEdId(void); /* MUL */ -void MUL_ALEb(UINT32 op); -void MUL_AXEw(UINT32 op); -void MUL_EAXEd(UINT32 op); +void CPUCALL MUL_ALEb(UINT32 op); +void CPUCALL MUL_AXEw(UINT32 op); +void CPUCALL MUL_EAXEd(UINT32 op); /* IDIV */ -void IDIV_ALEb(UINT32 op); -void IDIV_AXEw(UINT32 op); -void IDIV_EAXEd(UINT32 op); +void CPUCALL IDIV_ALEb(UINT32 op); +void CPUCALL IDIV_AXEw(UINT32 op); +void CPUCALL IDIV_EAXEd(UINT32 op); /* DIV */ -void DIV_ALEb(UINT32 op); -void DIV_AXEw(UINT32 op); -void DIV_EAXEd(UINT32 op); +void CPUCALL DIV_ALEb(UINT32 op); +void CPUCALL DIV_AXEw(UINT32 op); +void CPUCALL DIV_EAXEd(UINT32 op); /* INC */ -void INC_Eb(UINT32 op); -void INC_Ew(UINT32 op); -void INC_Ed(UINT32 op); +void CPUCALL INC_Eb(UINT32 op); +void CPUCALL INC_Ew(UINT32 op); +void CPUCALL INC_Ed(UINT32 op); void INC_AX(void); void INC_CX(void); void INC_DX(void); @@ -148,9 +146,9 @@ void INC_ESI(void); void INC_EDI(void); /* DEC */ -void DEC_Eb(UINT32 op); -void DEC_Ew(UINT32 op); -void DEC_Ed(UINT32 op); +void CPUCALL DEC_Eb(UINT32 op); +void CPUCALL DEC_Ew(UINT32 op); +void CPUCALL DEC_Ed(UINT32 op); void DEC_AX(void); void DEC_CX(void); void DEC_DX(void); @@ -169,9 +167,9 @@ void DEC_ESI(void); void DEC_EDI(void); /* NEG */ -void NEG_Eb(UINT32 op); -void NEG_Ew(UINT32 op); -void NEG_Ed(UINT32 op); +void CPUCALL NEG_Eb(UINT32 op); +void CPUCALL NEG_Ew(UINT32 op); +void CPUCALL NEG_Ed(UINT32 op); /* CMP */ void CMP_EbGb(void); @@ -183,12 +181,12 @@ void CMP_GdEd(void); void CMP_ALIb(void); void CMP_AXIw(void); void CMP_EAXId(void); -void CMP_EbIb(UINT8 *, UINT32); -void CMP_EwIx(UINT16 *, UINT32); -void CMP_EdIx(UINT32 *, UINT32); -void CMP_EbIb_ext(UINT32, UINT32); -void CMP_EwIx_ext(UINT32, UINT32); -void CMP_EdIx_ext(UINT32, UINT32); +void CPUCALL CMP_EbIb(UINT8 *, UINT32); +void CPUCALL CMP_EwIx(UINT16 *, UINT32); +void CPUCALL CMP_EdIx(UINT32 *, UINT32); +void CPUCALL CMP_EbIb_ext(UINT32, UINT32); +void CPUCALL CMP_EwIx_ext(UINT32, UINT32); +void CPUCALL CMP_EdIx_ext(UINT32, UINT32); #ifdef __cplusplus } diff --git a/i386c/ia32/instructions/bit_byte.c b/i386c/ia32/instructions/bit_byte.c index b2dc7642..72993aab 100644 --- a/i386c/ia32/instructions/bit_byte.c +++ b/i386c/ia32/instructions/bit_byte.c @@ -1,5 +1,3 @@ -/* $Id: bit_byte.c,v 1.11 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -81,7 +79,7 @@ BT_EdGd(void) CPU_FLAGL |= (dst >> BIT_INDEX32(src)) & 1; } -void +void CPUCALL BT_EwIb(UINT32 op) { UINT32 src, dst, madr; @@ -100,7 +98,7 @@ BT_EwIb(UINT32 op) CPU_FLAGL |= (dst >> BIT_INDEX16(src)) & 1; } -void +void CPUCALL BT_EdIb(UINT32 op) { UINT32 src, dst, madr; @@ -192,7 +190,7 @@ BTS_EdGd(void) } } -void +void CPUCALL BTS_EwIb(UINT32 op) { UINT16 *out; @@ -228,7 +226,7 @@ BTS_EwIb(UINT32 op) } } -void +void CPUCALL BTS_EdIb(UINT32 op) { UINT32 *out; @@ -337,7 +335,7 @@ BTR_EdGd(void) } } -void +void CPUCALL BTR_EwIb(UINT32 op) { UINT16 *out; @@ -373,7 +371,7 @@ BTR_EwIb(UINT32 op) } } -void +void CPUCALL BTR_EdIb(UINT32 op) { UINT32 *out; @@ -482,7 +480,7 @@ BTC_EdGd(void) } } -void +void CPUCALL BTC_EwIb(UINT32 op) { UINT16 *out; @@ -518,7 +516,7 @@ BTC_EwIb(UINT32 op) } } -void +void CPUCALL BTC_EdIb(UINT32 op) { UINT32 *out; @@ -1006,7 +1004,7 @@ TEST_EAXId(void) DWORD_AND(tmp, src); } -void +void CPUCALL TEST_EbIb(UINT32 op) { UINT32 src, tmp, madr; @@ -1023,7 +1021,7 @@ TEST_EbIb(UINT32 op) BYTE_AND(tmp, src); } -void +void CPUCALL TEST_EwIw(UINT32 op) { UINT32 src, tmp, madr; @@ -1040,7 +1038,7 @@ TEST_EwIw(UINT32 op) WORD_AND(tmp, src); } -void +void CPUCALL TEST_EdId(UINT32 op) { UINT32 src, tmp, madr; diff --git a/i386c/ia32/instructions/bit_byte.h b/i386c/ia32/instructions/bit_byte.h index 7f959230..92f379ca 100644 --- a/i386c/ia32/instructions/bit_byte.h +++ b/i386c/ia32/instructions/bit_byte.h @@ -1,5 +1,3 @@ -/* $Id: bit_byte.h,v 1.3 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -37,20 +35,20 @@ extern "C" { */ void BT_EwGw(void); void BT_EdGd(void); -void BT_EwIb(UINT32); -void BT_EdIb(UINT32); +void CPUCALL BT_EwIb(UINT32); +void CPUCALL BT_EdIb(UINT32); void BTS_EwGw(void); void BTS_EdGd(void); -void BTS_EwIb(UINT32); -void BTS_EdIb(UINT32); +void CPUCALL BTS_EwIb(UINT32); +void CPUCALL BTS_EdIb(UINT32); void BTR_EwGw(void); void BTR_EdGd(void); -void BTR_EwIb(UINT32); -void BTR_EdIb(UINT32); +void CPUCALL BTR_EwIb(UINT32); +void CPUCALL BTR_EdIb(UINT32); void BTC_EwGw(void); void BTC_EdGd(void); -void BTC_EwIb(UINT32); -void BTC_EdIb(UINT32); +void CPUCALL BTC_EwIb(UINT32); +void CPUCALL BTC_EdIb(UINT32); /* * BSx @@ -90,9 +88,9 @@ void TEST_ALIb(void); void TEST_AXIw(void); void TEST_EAXId(void); -void TEST_EbIb(UINT32); -void TEST_EwIw(UINT32); -void TEST_EdId(UINT32); +void CPUCALL TEST_EbIb(UINT32); +void CPUCALL TEST_EwIw(UINT32); +void CPUCALL TEST_EdId(UINT32); #ifdef __cplusplus } diff --git a/i386c/ia32/instructions/ctrl_trans.c b/i386c/ia32/instructions/ctrl_trans.c index c2bcc072..fedfc72d 100644 --- a/i386c/ia32/instructions/ctrl_trans.c +++ b/i386c/ia32/instructions/ctrl_trans.c @@ -1,5 +1,3 @@ -/* $Id: ctrl_trans.c,v 1.23 2008/01/25 18:02:18 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -43,52 +41,45 @@ void JMP_Jb(void) { - UINT32 ip; - CPU_WORKCLOCK(7); - GET_PCBYTESD(ip); - ADD_EIP(ip); + JMPSHORT(7); } void JMP_Jw(void) { - UINT32 ip; - CPU_WORKCLOCK(7); - GET_PCWORDS(ip); - ADD_EIP(ip); + JMPNEAR(7); } void JMP_Jd(void) { - UINT32 ip; - CPU_WORKCLOCK(7); - GET_PCDWORD(ip); - ADD_EIP(ip); + JMPNEAR32(7); } -void +void CPUCALL JMP_Ew(UINT32 op) { UINT32 madr; - UINT32 new_ip; + UINT16 new_ip; if (op >= 0xc0) { CPU_WORKCLOCK(7); new_ip = *(reg16_b20[op]); - SET_EIP(new_ip); } else { CPU_WORKCLOCK(11); madr = calc_ea_dst(op); new_ip = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - SET_EIP(new_ip); } + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; } -void +void CPUCALL JMP_Ed(UINT32 op) { UINT32 madr; @@ -97,28 +88,37 @@ JMP_Ed(UINT32 op) if (op >= 0xc0) { CPU_WORKCLOCK(7); new_ip = *(reg32_b20[op]); - SET_EIP(new_ip); } else { CPU_WORKCLOCK(11); madr = calc_ea_dst(op); new_ip = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - SET_EIP(new_ip); } + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; } void JMP16_Ap(void) { - UINT32 new_ip; + descriptor_t sd; + UINT16 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(11); GET_PCWORD(new_ip); GET_PCWORD(new_cs); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; } else { /* Protected mode */ JMPfar_pm(new_cs, new_ip); @@ -128,28 +128,37 @@ JMP16_Ap(void) void JMP32_Ap(void) { + descriptor_t sd; UINT32 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(11); GET_PCDWORD(new_ip); GET_PCWORD(new_cs); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; } else { /* Protected mode */ JMPfar_pm(new_cs, new_ip); } } -void +void CPUCALL JMP16_Ep(UINT32 op) { + descriptor_t sd; UINT32 madr; - UINT32 new_ip; + UINT16 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(11); if (op < 0xc0) { @@ -158,8 +167,13 @@ JMP16_Ep(UINT32 op) new_cs = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; } else { /* Protected mode */ JMPfar_pm(new_cs, new_ip); @@ -169,12 +183,14 @@ JMP16_Ep(UINT32 op) EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL JMP32_Ep(UINT32 op) { + descriptor_t sd; UINT32 madr; UINT32 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(11); if (op < 0xc0) { @@ -183,8 +199,13 @@ JMP32_Ep(UINT32 op) new_cs = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; } else { /* Protected mode */ JMPfar_pm(new_cs, new_ip); @@ -224,7 +245,7 @@ JO_Jd(void) if (CC_NO) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -258,7 +279,7 @@ JNO_Jd(void) if (CC_O) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -292,7 +313,7 @@ JC_Jd(void) if (CC_NC) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -324,7 +345,7 @@ JNC_Jd(void) if (CC_C) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -358,7 +379,7 @@ JZ_Jd(void) if (CC_NZ) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -392,7 +413,7 @@ JNZ_Jd(void) if (CC_Z) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -426,7 +447,7 @@ JNA_Jd(void) if (CC_A) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -460,7 +481,7 @@ JA_Jd(void) if (CC_NA) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -494,7 +515,7 @@ JS_Jd(void) if (CC_NS) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -528,7 +549,7 @@ JNS_Jd(void) if (CC_S) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -562,7 +583,7 @@ JP_Jd(void) if (CC_NP) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -596,7 +617,7 @@ JNP_Jd(void) if (CC_P) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -630,7 +651,7 @@ JL_Jd(void) if (CC_NL) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -664,7 +685,7 @@ JNL_Jd(void) if (CC_L) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -698,7 +719,7 @@ JLE_Jd(void) if (CC_NLE) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -732,7 +753,7 @@ JNLE_Jd(void) if (CC_LE) { JMPNOP(2, 4); } else { - JMPNEAR_4(7); + JMPNEAR32(7); } } @@ -742,16 +763,16 @@ JeCXZ_Jb(void) { if (!CPU_INST_AS32) { - if (CPU_CX) { - JMPNOP(4, 1); - } else { + if (CPU_CX == 0) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } } else { - if (CPU_ECX) { - JMPNOP(4, 1); - } else { + if (CPU_ECX == 0) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } } } @@ -763,21 +784,24 @@ JeCXZ_Jb(void) void LOOPNE_Jb(void) { + UINT32 cx; if (!CPU_INST_AS32) { - CPU_CX--; - if (CPU_CX == 0 || (CPU_FLAGL & Z_FLAG)) { - JMPNOP(4, 1); - } else { + cx = CPU_CX; + if (--cx != 0 && CC_NZ) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } + CPU_CX--; } else { - CPU_ECX--; - if (CPU_ECX == 0 || (CPU_FLAGL & Z_FLAG)) { - JMPNOP(4, 1); - } else { + cx = CPU_ECX; + if (--cx != 0 && CC_NZ) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } + CPU_ECX--; } } @@ -785,21 +809,24 @@ LOOPNE_Jb(void) void LOOPE_Jb(void) { + UINT32 cx; if (!CPU_INST_AS32) { - CPU_CX--; - if (CPU_CX == 0 || !(CPU_FLAGL & Z_FLAG)) { - JMPNOP(4, 1); - } else { + cx = CPU_CX; + if (--cx != 0 && CC_Z) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } + CPU_CX--; } else { - CPU_ECX--; - if (CPU_ECX == 0 || !(CPU_FLAGL & Z_FLAG)) { - JMPNOP(4, 1); - } else { + cx = CPU_ECX; + if (--cx != 0 && CC_Z) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } + CPU_ECX--; } } @@ -807,21 +834,24 @@ LOOPE_Jb(void) void LOOP_Jb(void) { + UINT32 cx; if (!CPU_INST_AS32) { - CPU_CX--; - if (CPU_CX == 0) { - JMPNOP(4, 1); - } else { + cx = CPU_CX; + if (--cx != 0) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } + CPU_CX--; } else { - CPU_ECX--; - if (CPU_ECX == 0) { - JMPNOP(4, 1); - } else { + cx = CPU_ECX; + if (--cx != 0) { JMPSHORT(8); + } else { + JMPNOP(4, 1); } + CPU_ECX--; } } @@ -831,31 +861,46 @@ LOOP_Jb(void) void CALL_Aw(void) { - SINT32 ip; + UINT16 new_ip; + SINT16 dest; CPU_WORKCLOCK(7); - GET_PCWORDS(ip); + CPU_SET_PREV_ESP(); + GET_PCWORDS(dest); + new_ip = CPU_EIP + dest; + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } PUSH0_16(CPU_IP); - ADD_EIP(ip); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } void CALL_Ad(void) { - UINT32 ip; + UINT32 new_ip; + UINT32 dest; CPU_WORKCLOCK(7); - GET_PCDWORD(ip); + CPU_SET_PREV_ESP(); + GET_PCDWORD(dest); + new_ip = CPU_EIP + dest; + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } PUSH0_32(CPU_EIP); - ADD_EIP(ip); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } -void +void CPUCALL CALL_Ew(UINT32 op) { UINT32 madr; - UINT32 new_ip; + UINT16 new_ip; + CPU_SET_PREV_ESP(); if (op >= 0xc0) { CPU_WORKCLOCK(7); new_ip = *(reg16_b20[op]); @@ -864,16 +909,21 @@ CALL_Ew(UINT32 op) madr = calc_ea_dst(op); new_ip = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } PUSH0_16(CPU_IP); - SET_EIP(new_ip); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } -void +void CPUCALL CALL_Ed(UINT32 op) { UINT32 madr; UINT32 new_ip; + CPU_SET_PREV_ESP(); if (op >= 0xc0) { CPU_WORKCLOCK(7); new_ip = *(reg32_b20[op]); @@ -882,26 +932,39 @@ CALL_Ed(UINT32 op) madr = calc_ea_dst(op); new_ip = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } PUSH0_32(CPU_EIP); - SET_EIP(new_ip); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } void CALL16_Ap(void) { - UINT32 new_ip; + descriptor_t sd; + UINT16 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(13); GET_PCWORD(new_ip); GET_PCWORD(new_cs); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + PUSH0_16(CPU_CS); PUSH0_16(CPU_IP); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ CALLfar_pm(new_cs, new_ip); @@ -911,44 +974,62 @@ CALL16_Ap(void) void CALL32_Ap(void) { + descriptor_t sd; UINT32 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(13); GET_PCDWORD(new_ip); GET_PCWORD(new_cs); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + PUSH0_32(CPU_CS); PUSH0_32(CPU_EIP); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ CALLfar_pm(new_cs, new_ip); } } -void +void CPUCALL CALL16_Ep(UINT32 op) { - UINT32 ad; - UINT32 new_ip; + descriptor_t sd; + UINT32 madr; + UINT16 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(16); if (op < 0xc0) { - ad = calc_ea_dst(op); - new_ip = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); - new_cs = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad + 2); + madr = calc_ea_dst(op); + new_ip = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); + new_cs = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + PUSH0_16(CPU_CS); PUSH0_16(CPU_IP); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ CALLfar_pm(new_cs, new_ip); @@ -958,25 +1039,34 @@ CALL16_Ep(UINT32 op) EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL CALL32_Ep(UINT32 op) { - UINT32 ad; + descriptor_t sd; + UINT32 madr; UINT32 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(16); if (op < 0xc0) { - ad = calc_ea_dst(op); - new_ip = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); - new_cs = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad + 4); + madr = calc_ea_dst(op); + new_ip = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); + new_cs = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + PUSH0_32(CPU_CS); PUSH0_32(CPU_EIP); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ CALLfar_pm(new_cs, new_ip); @@ -992,11 +1082,16 @@ CALL32_Ep(UINT32 op) void RETnear16(void) { - UINT32 new_ip; + UINT16 new_ip; CPU_WORKCLOCK(11); + CPU_SET_PREV_ESP(); POP0_16(new_ip); - SET_EIP(new_ip); + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } void @@ -1005,25 +1100,35 @@ RETnear32(void) UINT32 new_ip; CPU_WORKCLOCK(11); + CPU_SET_PREV_ESP(); POP0_32(new_ip); - SET_EIP(new_ip); + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } void RETnear16_Iw(void) { - UINT32 new_ip; + UINT16 new_ip; UINT16 size; CPU_WORKCLOCK(11); + CPU_SET_PREV_ESP(); GET_PCWORD(size); POP0_16(new_ip); - SET_EIP(new_ip); + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; if (!CPU_STAT_SS32) { CPU_SP += size; } else { CPU_ESP += size; } + CPU_CLEAR_PREV_ESP(); } void @@ -1033,30 +1138,45 @@ RETnear32_Iw(void) UINT16 size; CPU_WORKCLOCK(11); + CPU_SET_PREV_ESP(); GET_PCWORD(size); POP0_32(new_ip); - SET_EIP(new_ip); + if (new_ip > CPU_STAT_CS_LIMIT) { + EXCEPTION(GP_EXCEPTION, 0); + } + CPU_EIP = new_ip; if (!CPU_STAT_SS32) { CPU_SP += size; } else { CPU_ESP += size; } + CPU_CLEAR_PREV_ESP(); } void RETfar16(void) { - UINT32 new_ip; + descriptor_t sd; + UINT16 new_ip; UINT16 new_cs; + UINT16 sreg; CPU_WORKCLOCK(15); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); POP0_16(new_ip); POP0_16(new_cs); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ RETfar_pm(0); @@ -1066,17 +1186,27 @@ RETfar16(void) void RETfar32(void) { + descriptor_t sd; UINT32 new_ip; UINT32 new_cs; + UINT16 sreg; CPU_WORKCLOCK(15); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); POP0_32(new_ip); POP0_32(new_cs); - CPU_SET_SEGREG(CPU_CS_INDEX, (UINT16)new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + + LOAD_SEGREG(CPU_CS_INDEX, (UINT16)new_cs); + CPU_EIP = new_ip; + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ RETfar_pm(0); @@ -1086,25 +1216,34 @@ RETfar32(void) void RETfar16_Iw(void) { - UINT32 new_ip; + descriptor_t sd; + UINT16 new_ip; UINT16 new_cs; + UINT16 sreg; UINT16 size; CPU_WORKCLOCK(15); GET_PCWORD(size); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); POP0_16(new_ip); POP0_16(new_cs); - CPU_SET_SEGREG(CPU_CS_INDEX, new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + LOAD_SEGREG(CPU_CS_INDEX, new_cs); + CPU_EIP = new_ip; if (!CPU_STAT_SS32) { CPU_SP += size; } else { CPU_ESP += size; } + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ RETfar_pm(size); @@ -1114,25 +1253,34 @@ RETfar16_Iw(void) void RETfar32_Iw(void) { + descriptor_t sd; UINT32 new_ip; UINT32 new_cs; + UINT16 sreg; UINT16 size; CPU_WORKCLOCK(15); GET_PCWORD(size); if (!CPU_STAT_PM || CPU_STAT_VM86) { /* Real mode or VM86 mode */ + CPU_SET_PREV_ESP(); POP0_32(new_ip); POP0_32(new_cs); - CPU_SET_SEGREG(CPU_CS_INDEX, (UINT16)new_cs); - SET_EIP(new_ip); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + LOAD_SEGREG(CPU_CS_INDEX, (UINT16)new_cs); + CPU_EIP = new_ip; if (!CPU_STAT_SS32) { CPU_SP += size; } else { CPU_ESP += size; } + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ RETfar_pm(size); @@ -1142,14 +1290,17 @@ RETfar32_Iw(void) void IRET(void) { + descriptor_t sd; UINT32 new_ip; UINT32 new_flags; UINT32 new_cs; UINT32 mask; + UINT16 sreg; + CPU_WORKCLOCK(22); if (!CPU_STAT_PM) { /* Real mode */ - CPU_WORKCLOCK(22); + CPU_SET_PREV_ESP(); mask = I_FLAG|IOPL_FLAG; if (!CPU_INST_OP32) { POP0_16(new_ip); @@ -1162,19 +1313,21 @@ IRET(void) mask |= RF_FLAG; } - set_eflags(new_flags, mask); + /* check new instrunction pointer with new code segment */ + load_segreg(CPU_CS_INDEX, new_cs, &sreg, &sd, GP_EXCEPTION); + if (new_ip > sd.u.seg.limit) { + EXCEPTION(GP_EXCEPTION, 0); + } + + LOAD_SEGREG(CPU_CS_INDEX, (UINT16)new_cs); + CPU_EIP = new_ip; - CPU_SET_SEGREG(CPU_CS_INDEX, (UINT16)new_cs); - SET_EIP(new_ip); + set_eflags(new_flags, mask); + CPU_CLEAR_PREV_ESP(); } else { /* Protected mode */ IRET_pm(); } -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - if (CPU_EFLAG & RF_FLAG) { - CPU_STAT_BP_EVENT |= CPU_STAT_BP_EVENT_RF; - } -#endif IRQCHECKTERM(); } @@ -1186,7 +1339,7 @@ INT1(void) { CPU_WORKCLOCK(33); - INTERRUPT(1, 1, 0, 0); + INTERRUPT(1, INTR_TYPE_SOFTINTR); } void @@ -1194,7 +1347,7 @@ INT3(void) { CPU_WORKCLOCK(33); - INTERRUPT(3, 2, 0, 0); + INTERRUPT(3, INTR_TYPE_SOFTINTR); } void @@ -1206,7 +1359,7 @@ INTO(void) return; } CPU_WORKCLOCK(35); - INTERRUPT(4, 3, 0, 0); + INTERRUPT(4, INTR_TYPE_SOFTINTR); } void @@ -1220,9 +1373,10 @@ INT_Ib(void) #if defined(ENABLE_TRAP) softinttrap(CPU_CS, CPU_EIP - 2, vect); #endif - INTERRUPT(vect, -1, 0, 0); + INTERRUPT(vect, INTR_TYPE_SOFTINTR); return; } + VERBOSE(("INT_Ib: VM86 && IOPL < 3 && INTn")); EXCEPTION(GP_EXCEPTION, 0); } @@ -1231,7 +1385,6 @@ BOUND_GwMa(void) { UINT32 op, madr; UINT16 reg; - int vect; CPU_WORKCLOCK(13); GET_PCBYTE(op); @@ -1242,11 +1395,10 @@ BOUND_GwMa(void) reg <= cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2)) { return; } - vect = BR_EXCEPTION; - } else { - vect = UD_EXCEPTION; + EXCEPTION(BR_EXCEPTION, 0); + return; } - EXCEPTION(vect, 0); + EXCEPTION(UD_EXCEPTION, 0); } void @@ -1254,7 +1406,6 @@ BOUND_GdMa(void) { UINT32 op, madr; UINT32 reg; - int vect; CPU_WORKCLOCK(13); GET_PCBYTE(op); @@ -1265,11 +1416,10 @@ BOUND_GdMa(void) reg <= cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr + 4)) { return; } - vect = BR_EXCEPTION; - } else { - vect = UD_EXCEPTION; + EXCEPTION(BR_EXCEPTION, 0); + return; } - EXCEPTION(vect, 0); + EXCEPTION(UD_EXCEPTION, 0); } /* @@ -1279,26 +1429,16 @@ void ENTER16_IwIb(void) { UINT32 sp, bp; - UINT32 size; UINT32 val; UINT16 dimsize; + UINT16 new_bp; UINT8 level; GET_PCWORD(dimsize); GET_PCBYTE(level); level &= 0x1f; - /* check stack room size */ - if (CPU_STAT_PM && !CPU_STAT_VM86) { - size = dimsize + (level + 1) * 2; - if (!CPU_STAT_SS32) { - sp = CPU_SP; - } else { - sp = CPU_ESP; - } - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, size); - } - + CPU_SET_PREV_ESP(); PUSH0_16(CPU_BP); if (level == 0) { /* enter level=0 */ CPU_WORKCLOCK(11); @@ -1324,36 +1464,39 @@ ENTER16_IwIb(void) CPU_WORKCLOCK(12 + level * 4); if (!CPU_STAT_SS32) { bp = CPU_BP; - CPU_BP = CPU_SP; + new_bp = CPU_SP; while (level--) { bp -= 2; CPU_SP -= 2; val = cpu_vmemoryread_w(CPU_SS_INDEX, bp); cpu_vmemorywrite_w(CPU_SS_INDEX, CPU_SP, (UINT16)val); } - REGPUSH0(CPU_BP); + REGPUSH0(new_bp); + CPU_BP = new_bp; CPU_SP -= dimsize; } else { bp = CPU_EBP; - CPU_BP = CPU_SP; + new_bp = CPU_SP; while (level--) { bp -= 2; CPU_ESP -= 2; val = cpu_vmemoryread_w(CPU_SS_INDEX, bp); cpu_vmemorywrite_w(CPU_SS_INDEX, CPU_ESP, (UINT16)val); } - REGPUSH0_16_32(CPU_BP); + REGPUSH0_16_32(new_bp); + CPU_BP = new_bp; CPU_ESP -= dimsize; } } } + CPU_CLEAR_PREV_ESP(); } void ENTER32_IwIb(void) { UINT32 sp, bp; - UINT32 size; + UINT32 new_bp; UINT32 val; UINT16 dimsize; UINT8 level; @@ -1362,17 +1505,7 @@ ENTER32_IwIb(void) GET_PCBYTE(level); level &= 0x1f; - /* check stack room size */ - if (CPU_STAT_PM && !CPU_STAT_VM86) { - size = dimsize + (level + 1) * 4; - if (CPU_STAT_SS32) { - sp = CPU_ESP; - } else { - sp = CPU_SP; - } - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, size); - } - + CPU_SET_PREV_ESP(); PUSH0_32(CPU_EBP); if (level == 0) { /* enter level=0 */ CPU_WORKCLOCK(11); @@ -1398,63 +1531,50 @@ ENTER32_IwIb(void) CPU_WORKCLOCK(12 + level * 4); if (CPU_STAT_SS32) { bp = CPU_EBP; - CPU_EBP = CPU_ESP; + new_bp = CPU_ESP; while (level--) { bp -= 4; CPU_ESP -= 4; val = cpu_vmemoryread_d(CPU_SS_INDEX, bp); cpu_vmemorywrite_d(CPU_SS_INDEX, CPU_ESP, val); } - REGPUSH0_32(CPU_EBP); + REGPUSH0_32(new_bp); + CPU_EBP = new_bp; CPU_ESP -= dimsize; } else { bp = CPU_BP; - CPU_EBP = CPU_ESP; + new_bp = CPU_ESP; while (level--) { bp -= 4; CPU_SP -= 4; val = cpu_vmemoryread_d(CPU_SS_INDEX, bp); cpu_vmemorywrite_d(CPU_SS_INDEX, CPU_SP, val); } - REGPUSH0_32_16(CPU_EBP); + REGPUSH0_32_16(new_bp); + CPU_EBP = new_bp; CPU_SP -= dimsize; } } } + CPU_CLEAR_PREV_ESP(); } void LEAVE(void) { - UINT32 sp, bp; - UINT s; CPU_WORKCLOCK(4); - if (CPU_STAT_PM && !CPU_STAT_VM86) { - if (!CPU_INST_OP32) { - s = 2; - } else { - s = 4; - } - if (!CPU_STAT_SS32) { - sp = CPU_SP; - bp = CPU_BP; - } else { - sp = CPU_ESP; - bp = CPU_EBP; - } - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), sp, (bp - sp) + s); - } - + CPU_SET_PREV_ESP(); if (!CPU_STAT_SS32) { CPU_SP = CPU_BP; } else { CPU_ESP = CPU_EBP; } if (!CPU_INST_OP32) { - REGPOP0(CPU_BP); + POP0_16(CPU_BP); } else { POP0_32(CPU_EBP); } + CPU_CLEAR_PREV_ESP(); } diff --git a/i386c/ia32/instructions/ctrl_trans.h b/i386c/ia32/instructions/ctrl_trans.h index 513bc975..00d69e49 100644 --- a/i386c/ia32/instructions/ctrl_trans.h +++ b/i386c/ia32/instructions/ctrl_trans.h @@ -1,5 +1,3 @@ -/* $Id: ctrl_trans.h,v 1.6 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -38,12 +36,12 @@ extern "C" { void JMP_Jb(void); void JMP_Jw(void); void JMP_Jd(void); -void JMP_Ew(UINT32); -void JMP_Ed(UINT32); +void CPUCALL JMP_Ew(UINT32); +void CPUCALL JMP_Ed(UINT32); void JMP16_Ap(void); void JMP32_Ap(void); -void JMP16_Ep(UINT32); -void JMP32_Ep(UINT32); +void CPUCALL JMP16_Ep(UINT32); +void CPUCALL JMP32_Ep(UINT32); /* * Jcc @@ -110,12 +108,12 @@ void LOOP_Jb(void); */ void CALL_Aw(void); void CALL_Ad(void); -void CALL_Ew(UINT32); -void CALL_Ed(UINT32); +void CPUCALL CALL_Ew(UINT32); +void CPUCALL CALL_Ed(UINT32); void CALL16_Ap(void); void CALL32_Ap(void); -void CALL16_Ep(UINT32); -void CALL32_Ep(UINT32); +void CPUCALL CALL16_Ep(UINT32); +void CPUCALL CALL32_Ep(UINT32); /* * RET diff --git a/i386c/ia32/instructions/data_trans.c b/i386c/ia32/instructions/data_trans.c index add6022c..bfeb5867 100644 --- a/i386c/ia32/instructions/data_trans.c +++ b/i386c/ia32/instructions/data_trans.c @@ -1,5 +1,3 @@ -/* $Id: data_trans.c,v 1.18 2008/01/25 17:55:55 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -175,7 +173,7 @@ MOV_SwEw(void) madr = calc_ea_dst(op); src = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } - CPU_SET_SEGREG(idx, (UINT16)src); + LOAD_SEGREG(idx, (UINT16)src); if (idx == CPU_SS_INDEX) { exec_1step(); } @@ -193,11 +191,10 @@ MOV_ALOb(void) CPU_INST_SEGREG_INDEX = DS_FIX; if (!CPU_INST_AS32) { GET_PCWORD(madr); - CPU_AL = cpu_vmemoryread(CPU_INST_SEGREG_INDEX, madr); } else { GET_PCDWORD(madr); - CPU_AL = cpu_vmemoryread(CPU_INST_SEGREG_INDEX, madr); } + CPU_AL = cpu_vmemoryread(CPU_INST_SEGREG_INDEX, madr); } void @@ -209,11 +206,10 @@ MOV_AXOw(void) CPU_INST_SEGREG_INDEX = DS_FIX; if (!CPU_INST_AS32) { GET_PCWORD(madr); - CPU_AX = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } else { GET_PCDWORD(madr); - CPU_AX = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } + CPU_AX = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } void @@ -225,11 +221,10 @@ MOV_EAXOd(void) CPU_INST_SEGREG_INDEX = DS_FIX; if (!CPU_INST_AS32) { GET_PCWORD(madr); - CPU_EAX = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } else { GET_PCDWORD(madr); - CPU_EAX = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } + CPU_EAX = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } void @@ -241,11 +236,10 @@ MOV_ObAL(void) CPU_INST_SEGREG_INDEX = DS_FIX; if (!CPU_INST_AS32) { GET_PCWORD(madr); - cpu_vmemorywrite(CPU_INST_SEGREG_INDEX, madr, CPU_AL); } else { GET_PCDWORD(madr); - cpu_vmemorywrite(CPU_INST_SEGREG_INDEX, madr, CPU_AL); } + cpu_vmemorywrite(CPU_INST_SEGREG_INDEX, madr, CPU_AL); } void @@ -257,11 +251,10 @@ MOV_OwAX(void) CPU_INST_SEGREG_INDEX = DS_FIX; if (!CPU_INST_AS32) { GET_PCWORD(madr); - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, CPU_AX); } else { GET_PCDWORD(madr); - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, CPU_AX); } + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, CPU_AX); } void @@ -273,11 +266,10 @@ MOV_OdEAX(void) CPU_INST_SEGREG_INDEX = DS_FIX; if (!CPU_INST_AS32) { GET_PCWORD(madr); - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, CPU_EAX); } else { GET_PCDWORD(madr); - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, CPU_EAX); } + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, CPU_EAX); } void @@ -751,7 +743,7 @@ CMOVNLE_GdEd(void) /* * XCHG */ -static UINT32 +static UINT32 CPUCALL XCHG(UINT32 dst, void *arg) { UINT32 src = PTR_TO_UINT32(arg); @@ -773,7 +765,7 @@ XCHG_EbGb(void) } else { CPU_WORKCLOCK(5); madr = calc_ea_dst(op); - *src = (UINT8)cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, XCHG, UINT32_TO_PTR(*src)); + *src = (UINT8)cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, XCHG, UINT32_TO_PTR(*src)); } } @@ -791,7 +783,7 @@ XCHG_EwGw(void) } else { CPU_WORKCLOCK(5); madr = calc_ea_dst(op); - *src = (UINT16)cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, XCHG, UINT32_TO_PTR(*src)); + *src = (UINT16)cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, XCHG, UINT32_TO_PTR(*src)); } } @@ -809,7 +801,7 @@ XCHG_EdGd(void) } else { CPU_WORKCLOCK(5); madr = calc_ea_dst(op); - *src = cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, XCHG, UINT32_TO_PTR(*src)); + *src = cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, XCHG, UINT32_TO_PTR(*src)); } } @@ -834,7 +826,7 @@ void XCHG_EDIEAX(void) { CPU_WORKCLOCK(3); SWAP_DWORD(CPU_EDI, CPU_EAX); } /* * BSWAP */ -INLINE static UINT32 +static INLINE UINT32 CPUCALL BSWAP_DWORD(UINT32 val) { UINT32 v; @@ -857,7 +849,7 @@ void BSWAP_EDI(void) { CPU_WORKCLOCK(2); CPU_EDI = BSWAP_DWORD(CPU_EDI); } /* * XADD */ -static UINT32 +static UINT32 CPUCALL XADD1(UINT32 dst, void *arg) { UINT32 src = PTR_TO_UINT32(arg); @@ -866,7 +858,7 @@ XADD1(UINT32 dst, void *arg) return res; } -static UINT32 +static UINT32 CPUCALL XADD2(UINT32 dst, void *arg) { UINT32 src = PTR_TO_UINT32(arg); @@ -875,7 +867,7 @@ XADD2(UINT32 dst, void *arg) return res; } -static UINT32 +static UINT32 CPUCALL XADD4(UINT32 dst, void *arg) { UINT32 src = PTR_TO_UINT32(arg); @@ -901,7 +893,7 @@ XADD_EbGb(void) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - *src = (UINT8)cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, XADD1, UINT32_TO_PTR(*src)); + *src = (UINT8)cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, XADD1, UINT32_TO_PTR(*src)); } } @@ -922,7 +914,7 @@ XADD_EwGw(void) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - *src = (UINT16)cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, XADD2, UINT32_TO_PTR(*src)); + *src = (UINT16)cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, XADD2, UINT32_TO_PTR(*src)); } } @@ -943,7 +935,7 @@ XADD_EdGd(void) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - *src = cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, XADD4, UINT32_TO_PTR(*src)); + *src = cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, XADD4, UINT32_TO_PTR(*src)); } } @@ -1037,7 +1029,7 @@ CMPXCHG_EdGd(void) DWORD_SUB(tmp, eax, dst); } -void +void CPUCALL CMPXCHG8B(UINT32 op) { UINT32 madr, dst_l, dst_h; @@ -1082,7 +1074,7 @@ void PUSH_EBP(void) { CPU_WORKCLOCK(3); PUSH0_32(CPU_EBP); } void PUSH_ESI(void) { CPU_WORKCLOCK(3); PUSH0_32(CPU_ESI); } void PUSH_EDI(void) { CPU_WORKCLOCK(3); PUSH0_32(CPU_EDI); } -void +void CPUCALL PUSH_Ew(UINT32 op) { UINT32 dst, madr; @@ -1090,16 +1082,15 @@ PUSH_Ew(UINT32 op) if (op >= 0xc0) { CPU_WORKCLOCK(2); dst = *(reg16_b20[op]); - PUSH0_16(dst); } else { CPU_WORKCLOCK(5); madr = calc_ea_dst(op); dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - PUSH0_16(dst); } + PUSH0_16(dst); } -void +void CPUCALL PUSH_Ed(UINT32 op) { UINT32 dst, madr; @@ -1107,13 +1098,12 @@ PUSH_Ed(UINT32 op) if (op >= 0xc0) { CPU_WORKCLOCK(2); dst = *(reg32_b20[op]); - PUSH0_32(dst); } else { CPU_WORKCLOCK(5); madr = calc_ea_dst(op); dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - PUSH0_32(dst); } + PUSH0_32(dst); } void @@ -1189,6 +1179,7 @@ POP_Ew(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); GET_PCBYTE(op); if (op >= 0xc0) { @@ -1197,9 +1188,10 @@ POP_Ew(void) madr = calc_ea_dst(op); cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, src); } + CPU_CLEAR_PREV_ESP(); } -void +void CPUCALL POP_Ew_G5(UINT32 op) { UINT32 madr; @@ -1207,6 +1199,7 @@ POP_Ew_G5(UINT32 op) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); if (op >= 0xc0) { *(reg16_b20[op]) = src; @@ -1214,6 +1207,7 @@ POP_Ew_G5(UINT32 op) madr = calc_ea_dst(op); cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, src); } + CPU_CLEAR_PREV_ESP(); } void @@ -1224,6 +1218,7 @@ POP_Ed(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); GET_PCBYTE(op); if (op >= 0xc0) { @@ -1232,15 +1227,17 @@ POP_Ed(void) madr = calc_ea_dst(op); cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, src); } + CPU_CLEAR_PREV_ESP(); } -void +void CPUCALL POP_Ed_G5(UINT32 op) { UINT32 src, madr; CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); if (op >= 0xc0) { *(reg32_b20[op]) = src; @@ -1248,6 +1245,7 @@ POP_Ed_G5(UINT32 op) madr = calc_ea_dst(op); cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, src); } + CPU_CLEAR_PREV_ESP(); } void @@ -1257,8 +1255,10 @@ POP16_ES(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); - CPU_SET_SEGREG(CPU_ES_INDEX, src); + LOAD_SEGREG(CPU_ES_INDEX, src); + CPU_CLEAR_PREV_ESP(); } void @@ -1268,8 +1268,10 @@ POP32_ES(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); - CPU_SET_SEGREG(CPU_ES_INDEX, (UINT16)src); + LOAD_SEGREG(CPU_ES_INDEX, (UINT16)src); + CPU_CLEAR_PREV_ESP(); } void @@ -1279,8 +1281,10 @@ POP16_SS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); - CPU_SET_SEGREG(CPU_SS_INDEX, src); + LOAD_SEGREG(CPU_SS_INDEX, src); + CPU_CLEAR_PREV_ESP(); exec_1step(); } @@ -1291,8 +1295,10 @@ POP32_SS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); - CPU_SET_SEGREG(CPU_SS_INDEX, (UINT16)src); + LOAD_SEGREG(CPU_SS_INDEX, (UINT16)src); + CPU_CLEAR_PREV_ESP(); exec_1step(); } @@ -1303,8 +1309,10 @@ POP16_DS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); - CPU_SET_SEGREG(CPU_DS_INDEX, src); + LOAD_SEGREG(CPU_DS_INDEX, src); + CPU_CLEAR_PREV_ESP(); } void @@ -1314,8 +1322,10 @@ POP32_DS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); - CPU_SET_SEGREG(CPU_DS_INDEX, (UINT16)src); + LOAD_SEGREG(CPU_DS_INDEX, (UINT16)src); + CPU_CLEAR_PREV_ESP(); } void @@ -1325,8 +1335,10 @@ POP16_FS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); - CPU_SET_SEGREG(CPU_FS_INDEX, src); + LOAD_SEGREG(CPU_FS_INDEX, src); + CPU_CLEAR_PREV_ESP(); } void @@ -1336,8 +1348,10 @@ POP32_FS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); - CPU_SET_SEGREG(CPU_FS_INDEX, (UINT16)src); + LOAD_SEGREG(CPU_FS_INDEX, (UINT16)src); + CPU_CLEAR_PREV_ESP(); } void @@ -1347,8 +1361,10 @@ POP16_GS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_16(src); - CPU_SET_SEGREG(CPU_GS_INDEX, src); + LOAD_SEGREG(CPU_GS_INDEX, src); + CPU_CLEAR_PREV_ESP(); } void @@ -1358,8 +1374,10 @@ POP32_GS(void) CPU_WORKCLOCK(5); + CPU_SET_PREV_ESP(); POP0_32(src); - CPU_SET_SEGREG(CPU_GS_INDEX, (UINT16)src); + LOAD_SEGREG(CPU_GS_INDEX, (UINT16)src); + CPU_CLEAR_PREV_ESP(); } /* @@ -1371,10 +1389,8 @@ PUSHA(void) UINT16 sp = CPU_SP; CPU_WORKCLOCK(17); + CPU_SET_PREV_ESP(); if (!CPU_STAT_SS32) { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_SP, 16); - } REGPUSH0(CPU_AX); REGPUSH0(CPU_CX); REGPUSH0(CPU_DX); @@ -1384,9 +1400,6 @@ PUSHA(void) REGPUSH0(CPU_SI); REGPUSH0(CPU_DI); } else { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_ESP, 16); - } REGPUSH0_16_32(CPU_AX); REGPUSH0_16_32(CPU_CX); REGPUSH0_16_32(CPU_DX); @@ -1396,6 +1409,7 @@ PUSHA(void) REGPUSH0_16_32(CPU_SI); REGPUSH0_16_32(CPU_DI); } + CPU_CLEAR_PREV_ESP(); } void @@ -1404,10 +1418,8 @@ PUSHAD(void) UINT32 esp = CPU_ESP; CPU_WORKCLOCK(17); + CPU_SET_PREV_ESP(); if (!CPU_STAT_SS32) { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_SP, 32); - } REGPUSH0_32_16(CPU_EAX); REGPUSH0_32_16(CPU_ECX); REGPUSH0_32_16(CPU_EDX); @@ -1417,9 +1429,6 @@ PUSHAD(void) REGPUSH0_32_16(CPU_ESI); REGPUSH0_32_16(CPU_EDI); } else { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_PUSH_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_ESP, 32); - } REGPUSH0_32(CPU_EAX); REGPUSH0_32(CPU_ECX); REGPUSH0_32(CPU_EDX); @@ -1429,70 +1438,81 @@ PUSHAD(void) REGPUSH0_32(CPU_ESI); REGPUSH0_32(CPU_EDI); } + CPU_CLEAR_PREV_ESP(); } void POPA(void) { + UINT16 ax, cx, dx, bx, bp, si, di; CPU_WORKCLOCK(19); + CPU_SET_PREV_ESP(); if (!CPU_STAT_SS32) { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_SP, 16); - } - REGPOP0(CPU_DI); - REGPOP0(CPU_SI); - REGPOP0(CPU_BP); + REGPOP0(di); + REGPOP0(si); + REGPOP0(bp); CPU_SP += 2; - REGPOP0(CPU_BX); - REGPOP0(CPU_DX); - REGPOP0(CPU_CX); - REGPOP0(CPU_AX); + REGPOP0(bx); + REGPOP0(dx); + REGPOP0(cx); + REGPOP0(ax); } else { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_ESP, 16); - } - REGPOP0_16_32(CPU_DI); - REGPOP0_16_32(CPU_SI); - REGPOP0_16_32(CPU_BP); + REGPOP0_16_32(di); + REGPOP0_16_32(si); + REGPOP0_16_32(bp); CPU_ESP += 2; - REGPOP0_16_32(CPU_BX); - REGPOP0_16_32(CPU_DX); - REGPOP0_16_32(CPU_CX); - REGPOP0_16_32(CPU_AX); + REGPOP0_16_32(bx); + REGPOP0_16_32(dx); + REGPOP0_16_32(cx); + REGPOP0_16_32(ax); } + CPU_CLEAR_PREV_ESP(); + + CPU_AX = ax; + CPU_CX = cx; + CPU_DX = dx; + CPU_BX = bx; + CPU_BP = bp; + CPU_SI = si; + CPU_DI = di; } void POPAD(void) { + UINT32 eax, ecx, edx, ebx, ebp, esi, edi; CPU_WORKCLOCK(19); + CPU_SET_PREV_ESP(); if (!CPU_STAT_SS32) { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_SP, 32); - } - REGPOP0_32_16(CPU_EDI); - REGPOP0_32_16(CPU_ESI); - REGPOP0_32_16(CPU_EBP); + REGPOP0_32_16(edi); + REGPOP0_32_16(esi); + REGPOP0_32_16(ebp); CPU_SP += 4; - REGPOP0_32_16(CPU_EBX); - REGPOP0_32_16(CPU_EDX); - REGPOP0_32_16(CPU_ECX); - REGPOP0_32_16(CPU_EAX); + REGPOP0_32_16(ebx); + REGPOP0_32_16(edx); + REGPOP0_32_16(ecx); + REGPOP0_32_16(eax); } else { - if (CPU_STAT_PM && !CPU_STAT_VM86) { - STACK_POP_CHECK(CPU_REGS_SREG(CPU_SS_INDEX), &CPU_STAT_SREG(CPU_SS_INDEX), CPU_ESP, 32); - } - REGPOP0_32(CPU_EDI); - REGPOP0_32(CPU_ESI); - REGPOP0_32(CPU_EBP); + REGPOP0_32(edi); + REGPOP0_32(esi); + REGPOP0_32(ebp); CPU_ESP += 4; - REGPOP0_32(CPU_EBX); - REGPOP0_32(CPU_EDX); - REGPOP0_32(CPU_ECX); - REGPOP0_32(CPU_EAX); - } + REGPOP0_32(ebx); + REGPOP0_32(edx); + REGPOP0_32(ecx); + REGPOP0_32(eax); + } + CPU_CLEAR_PREV_ESP(); + + CPU_EAX = eax; + CPU_ECX = ecx; + CPU_EDX = edx; + CPU_EBX = ebx; + CPU_EBP = ebp; + CPU_ESI = esi; + CPU_EDI = edi; } /* diff --git a/i386c/ia32/instructions/data_trans.h b/i386c/ia32/instructions/data_trans.h index bb94f7e9..df8a8f37 100644 --- a/i386c/ia32/instructions/data_trans.h +++ b/i386c/ia32/instructions/data_trans.h @@ -1,5 +1,3 @@ -/* $Id: data_trans.h,v 1.5 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -160,7 +158,7 @@ void XADD_EdGd(void); void CMPXCHG_EbGb(void); void CMPXCHG_EwGw(void); void CMPXCHG_EdGd(void); -void CMPXCHG8B(UINT32); +void CPUCALL CMPXCHG8B(UINT32); /* * PUSH @@ -197,8 +195,8 @@ void PUSH32_DS(void); void PUSH32_FS(void); void PUSH32_GS(void); -void PUSH_Ew(UINT32); -void PUSH_Ed(UINT32); +void CPUCALL PUSH_Ew(UINT32); +void CPUCALL PUSH_Ed(UINT32); /* * POP @@ -232,8 +230,8 @@ void POP32_FS(void); void POP16_GS(void); void POP32_GS(void); -void POP_Ew_G5(UINT32); -void POP_Ed_G5(UINT32); +void CPUCALL POP_Ew_G5(UINT32); +void CPUCALL POP_Ed_G5(UINT32); /* * PUSHA/POPA diff --git a/i386c/ia32/instructions/dec_arith.c b/i386c/ia32/instructions/dec_arith.c index d30c0cbf..ccf1b3a8 100644 --- a/i386c/ia32/instructions/dec_arith.c +++ b/i386c/ia32/instructions/dec_arith.c @@ -1,5 +1,3 @@ -/* $Id: dec_arith.c,v 1.4 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/dec_arith.h b/i386c/ia32/instructions/dec_arith.h index be04b61a..11072a27 100644 --- a/i386c/ia32/instructions/dec_arith.h +++ b/i386c/ia32/instructions/dec_arith.h @@ -1,5 +1,3 @@ -/* $Id: dec_arith.h,v 1.2 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/flag_ctrl.c b/i386c/ia32/instructions/flag_ctrl.c index ea022f06..1c4deb52 100644 --- a/i386c/ia32/instructions/flag_ctrl.c +++ b/i386c/ia32/instructions/flag_ctrl.c @@ -1,5 +1,3 @@ -/* $Id: flag_ctrl.c,v 1.11 2008/01/25 17:49:46 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -130,6 +128,7 @@ POPF_Fw(void) UINT16 flags, mask; CPU_WORKCLOCK(3); + CPU_SET_PREV_ESP(); if (!CPU_STAT_PM) { /* Real Mode */ POP0_16(flags); @@ -155,6 +154,7 @@ POPF_Fw(void) /* compiler happy */ } set_eflags(flags, mask); + CPU_CLEAR_PREV_ESP(); IRQCHECKTERM(); } @@ -164,6 +164,7 @@ POPFD_Fd(void) UINT32 flags, mask; CPU_WORKCLOCK(3); + CPU_SET_PREV_ESP(); if (!CPU_STAT_PM) { /* Real Mode */ POP0_32(flags); @@ -193,6 +194,7 @@ POPFD_Fd(void) /* compiler happy */ } set_eflags(flags, mask); + CPU_CLEAR_PREV_ESP(); IRQCHECKTERM(); } diff --git a/i386c/ia32/instructions/flag_ctrl.h b/i386c/ia32/instructions/flag_ctrl.h index 0ac40494..8fc18555 100644 --- a/i386c/ia32/instructions/flag_ctrl.h +++ b/i386c/ia32/instructions/flag_ctrl.h @@ -1,5 +1,3 @@ -/* $Id: flag_ctrl.h,v 1.2 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/x11/sdl/xnp2.h b/i386c/ia32/instructions/fpu.c similarity index 81% rename from x11/sdl/xnp2.h rename to i386c/ia32/instructions/fpu.c index f68fe9bb..90d4895f 100644 --- a/x11/sdl/xnp2.h +++ b/i386c/ia32/instructions/fpu.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003 NONAKA Kimihiro + * Copyright (c) 2012 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -10,8 +10,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES @@ -25,9 +23,21 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef NP2_SDL_XNP2_H__ -#define NP2_SDL_XNP2_H__ +#include "compiler.h" +#include "cpu.h" +#include "ia32.mcr" -#include "SDL.h" +#include "instructions/fpu/fp.h" -#endif /* NP2_SDL_XNP2_H__ */ + +void +FWAIT(void) +{ +#if defined(USE_FPU) + if (CPU_CR0 & (CPU_CR0_MP|CPU_CR0_TS)) { + EXCEPTION(NM_EXCEPTION, 0); + } + + fpu_fwait(); +#endif +} diff --git a/i386c/ia32/instructions/fpu/fp.h b/i386c/ia32/instructions/fpu/fp.h index 5d93b4f6..3fc811d2 100644 --- a/i386c/ia32/instructions/fpu/fp.h +++ b/i386c/ia32/instructions/fpu/fp.h @@ -1,5 +1,3 @@ -/* $Id: fp.h,v 1.4 2005/03/12 12:34:05 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -33,6 +31,7 @@ extern "C" { #endif void fpu_init(void); +void fpu_fwait(void); void FWAIT(void); void ESC0(void); diff --git a/i386c/ia32/instructions/fpu/fpdummy.c b/i386c/ia32/instructions/fpu/fpdummy.c index 176bb0ac..924ed9fd 100644 --- a/i386c/ia32/instructions/fpu/fpdummy.c +++ b/i386c/ia32/instructions/fpu/fpdummy.c @@ -1,27 +1,21 @@ -/* $Id: fpdummy.c,v 1.7 2004/03/26 06:33:53 yui Exp $ */ - #include "compiler.h" #include "cpu.h" #include "ia32.mcr" #include "fp.h" -void -FWAIT(void) -{ -// TRACEOUT(("use FPU - FWAIT")); -} - void ESC0(void) { UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU d8 %.2x", op)); + TRACEOUT(("use FPU d8 %.2x", op)); if (op >= 0xc0) { + EXCEPTION(NM_EXCEPTION, 0); } else { madr = calc_ea_dst(op); + EXCEPTION(NM_EXCEPTION, 0); } } @@ -31,14 +25,16 @@ ESC1(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU d9 %.2x", op)); + TRACEOUT(("use FPU d9 %.2x", op)); if (op >= 0xc0) { + EXCEPTION(NM_EXCEPTION, 0); } else { madr = calc_ea_dst(op); - if ((op & 0x38) == 0x38) { - TRACEOUT(("FSTCW")); - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, 0xffff); + if ((op & 0x38) != 0x38) { + EXCEPTION(NM_EXCEPTION, 0); } + TRACEOUT(("FSTCW")); + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, 0xffff); } } @@ -48,10 +44,12 @@ ESC2(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU da %.2x", op)); + TRACEOUT(("use FPU da %.2x", op)); if (op >= 0xc0) { + EXCEPTION(NM_EXCEPTION, 0); } else { madr = calc_ea_dst(op); + EXCEPTION(NM_EXCEPTION, 0); } } @@ -61,10 +59,16 @@ ESC3(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU db %.2x", op)); + TRACEOUT(("use FPU db %.2x", op)); if (op >= 0xc0) { + if (op != 0xe3) { + EXCEPTION(NM_EXCEPTION, 0); + } + /* FNINIT */ + (void)madr; } else { madr = calc_ea_dst(op); + EXCEPTION(NM_EXCEPTION, 0); } } @@ -74,10 +78,12 @@ ESC4(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU dc %.2x", op)); + TRACEOUT(("use FPU dc %.2x", op)); if (op >= 0xc0) { + EXCEPTION(NM_EXCEPTION, 0); } else { madr = calc_ea_dst(op); + EXCEPTION(NM_EXCEPTION, 0); } } @@ -87,10 +93,17 @@ ESC5(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU dd %.2x", op)); + TRACEOUT(("use FPU dd %.2x", op)); if (op >= 0xc0) { + EXCEPTION(NM_EXCEPTION, 0); } else { madr = calc_ea_dst(op); + if (((op >> 3) & 7) != 7) { + EXCEPTION(NM_EXCEPTION, 0); + } + /* FSTSW */ + TRACEOUT(("FSTSW")); + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, 0xffff); } } @@ -100,10 +113,12 @@ ESC6(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU de %.2x", op)); + TRACEOUT(("use FPU de %.2x", op)); if (op >= 0xc0) { + EXCEPTION(NM_EXCEPTION, 0); } else { madr = calc_ea_dst(op); + EXCEPTION(NM_EXCEPTION, 0); } } @@ -113,9 +128,16 @@ ESC7(void) UINT32 op, madr; GET_PCBYTE(op); -// TRACEOUT(("use FPU df %.2x", op)); + TRACEOUT(("use FPU df %.2x", op)); if (op >= 0xc0) { + if (op != 0xe0) { + EXCEPTION(NM_EXCEPTION, 0); + } + /* FSTSW AX */ + TRACEOUT(("FSTSW AX")); + CPU_AX = 0xffff; } else { madr = calc_ea_dst(op); + EXCEPTION(NM_EXCEPTION, 0); } } diff --git a/i386c/ia32/instructions/logic_arith.c b/i386c/ia32/instructions/logic_arith.c index 35098609..a05754c4 100644 --- a/i386c/ia32/instructions/logic_arith.c +++ b/i386c/ia32/instructions/logic_arith.c @@ -1,5 +1,3 @@ -/* $Id: logic_arith.c,v 1.7 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/logic_arith.h b/i386c/ia32/instructions/logic_arith.h index 067464bc..a1ed14e5 100644 --- a/i386c/ia32/instructions/logic_arith.h +++ b/i386c/ia32/instructions/logic_arith.h @@ -1,5 +1,3 @@ -/* $Id: logic_arith.h,v 1.4 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -44,12 +42,12 @@ void AND_GdEd(void); void AND_ALIb(void); void AND_AXIw(void); void AND_EAXId(void); -void AND_EbIb(UINT8 *, UINT32); -void AND_EwIx(UINT16 *, UINT32); -void AND_EdIx(UINT32 *, UINT32); -void AND_EbIb_ext(UINT32, UINT32); -void AND_EwIx_ext(UINT32, UINT32); -void AND_EdIx_ext(UINT32, UINT32); +void CPUCALL AND_EbIb(UINT8 *, UINT32); +void CPUCALL AND_EwIx(UINT16 *, UINT32); +void CPUCALL AND_EdIx(UINT32 *, UINT32); +void CPUCALL AND_EbIb_ext(UINT32, UINT32); +void CPUCALL AND_EwIx_ext(UINT32, UINT32); +void CPUCALL AND_EdIx_ext(UINT32, UINT32); /* * OR @@ -63,12 +61,12 @@ void OR_GdEd(void); void OR_ALIb(void); void OR_AXIw(void); void OR_EAXId(void); -void OR_EbIb(UINT8 *, UINT32); -void OR_EwIx(UINT16 *, UINT32); -void OR_EdIx(UINT32 *, UINT32); -void OR_EbIb_ext(UINT32, UINT32); -void OR_EwIx_ext(UINT32, UINT32); -void OR_EdIx_ext(UINT32, UINT32); +void CPUCALL OR_EbIb(UINT8 *, UINT32); +void CPUCALL OR_EwIx(UINT16 *, UINT32); +void CPUCALL OR_EdIx(UINT32 *, UINT32); +void CPUCALL OR_EbIb_ext(UINT32, UINT32); +void CPUCALL OR_EwIx_ext(UINT32, UINT32); +void CPUCALL OR_EdIx_ext(UINT32, UINT32); /* * XOR @@ -82,19 +80,19 @@ void XOR_GdEd(void); void XOR_ALIb(void); void XOR_AXIw(void); void XOR_EAXId(void); -void XOR_EbIb(UINT8 *, UINT32); -void XOR_EwIx(UINT16 *, UINT32); -void XOR_EdIx(UINT32 *, UINT32); -void XOR_EbIb_ext(UINT32, UINT32); -void XOR_EwIx_ext(UINT32, UINT32); -void XOR_EdIx_ext(UINT32, UINT32); +void CPUCALL XOR_EbIb(UINT8 *, UINT32); +void CPUCALL XOR_EwIx(UINT16 *, UINT32); +void CPUCALL XOR_EdIx(UINT32 *, UINT32); +void CPUCALL XOR_EbIb_ext(UINT32, UINT32); +void CPUCALL XOR_EwIx_ext(UINT32, UINT32); +void CPUCALL XOR_EdIx_ext(UINT32, UINT32); /* * NOT */ -void NOT_Eb(UINT32); -void NOT_Ew(UINT32); -void NOT_Ed(UINT32); +void CPUCALL NOT_Eb(UINT32); +void CPUCALL NOT_Ew(UINT32); +void CPUCALL NOT_Ed(UINT32); #ifdef __cplusplus } diff --git a/i386c/ia32/instructions/misc_inst.c b/i386c/ia32/instructions/misc_inst.c index 7cd243a7..cd60ef62 100644 --- a/i386c/ia32/instructions/misc_inst.c +++ b/i386c/ia32/instructions/misc_inst.c @@ -1,5 +1,3 @@ -/* $Id: misc_inst.c,v 1.8 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/misc_inst.h b/i386c/ia32/instructions/misc_inst.h index 883e902c..486dd438 100644 --- a/i386c/ia32/instructions/misc_inst.h +++ b/i386c/ia32/instructions/misc_inst.h @@ -1,5 +1,3 @@ -/* $Id: misc_inst.h,v 1.2 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/seg_reg.c b/i386c/ia32/instructions/seg_reg.c index ef8f720d..a8e5b92b 100644 --- a/i386c/ia32/instructions/seg_reg.c +++ b/i386c/ia32/instructions/seg_reg.c @@ -1,5 +1,3 @@ -/* $Id: seg_reg.c,v 1.5 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -45,7 +43,7 @@ LES_GwMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); - CPU_SET_SEGREG(CPU_ES_INDEX, sreg); + LOAD_SEGREG(CPU_ES_INDEX, sreg); *out = (UINT16)dst; return; } @@ -65,7 +63,7 @@ LES_GdMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); - CPU_SET_SEGREG(CPU_ES_INDEX, sreg); + LOAD_SEGREG(CPU_ES_INDEX, sreg); *out = dst; return; } @@ -85,7 +83,7 @@ LSS_GwMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); - CPU_SET_SEGREG(CPU_SS_INDEX, sreg); + LOAD_SEGREG(CPU_SS_INDEX, sreg); *out = (UINT16)dst; return; } @@ -105,7 +103,7 @@ LSS_GdMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); - CPU_SET_SEGREG(CPU_SS_INDEX, sreg); + LOAD_SEGREG(CPU_SS_INDEX, sreg); *out = dst; return; } @@ -125,7 +123,7 @@ LDS_GwMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); - CPU_SET_SEGREG(CPU_DS_INDEX, sreg); + LOAD_SEGREG(CPU_DS_INDEX, sreg); *out = (UINT16)dst; return; } @@ -145,7 +143,7 @@ LDS_GdMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); - CPU_SET_SEGREG(CPU_DS_INDEX, sreg); + LOAD_SEGREG(CPU_DS_INDEX, sreg); *out = dst; return; } @@ -165,7 +163,7 @@ LFS_GwMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); - CPU_SET_SEGREG(CPU_FS_INDEX, sreg); + LOAD_SEGREG(CPU_FS_INDEX, sreg); *out = (UINT16)dst; return; } @@ -185,7 +183,7 @@ LFS_GdMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); - CPU_SET_SEGREG(CPU_FS_INDEX, sreg); + LOAD_SEGREG(CPU_FS_INDEX, sreg); *out = dst; return; } @@ -205,7 +203,7 @@ LGS_GwMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 2); - CPU_SET_SEGREG(CPU_GS_INDEX, sreg); + LOAD_SEGREG(CPU_GS_INDEX, sreg); *out = (UINT16)dst; return; } @@ -225,7 +223,7 @@ LGS_GdMp(void) madr = calc_ea_dst(op); dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); sreg = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr + 4); - CPU_SET_SEGREG(CPU_GS_INDEX, sreg); + LOAD_SEGREG(CPU_GS_INDEX, sreg); *out = dst; return; } diff --git a/i386c/ia32/instructions/seg_reg.h b/i386c/ia32/instructions/seg_reg.h index 2e47fe75..6c5b85a3 100644 --- a/i386c/ia32/instructions/seg_reg.h +++ b/i386c/ia32/instructions/seg_reg.h @@ -1,5 +1,3 @@ -/* $Id: seg_reg.h,v 1.2 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/shift_rotate.c b/i386c/ia32/instructions/shift_rotate.c index 04c7ef1d..d5749c2c 100644 --- a/i386c/ia32/instructions/shift_rotate.c +++ b/i386c/ia32/instructions/shift_rotate.c @@ -1,5 +1,3 @@ -/* $Id: shift_rotate.c,v 1.8 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/shift_rotate.h b/i386c/ia32/instructions/shift_rotate.h index 892fc991..715e599e 100644 --- a/i386c/ia32/instructions/shift_rotate.h +++ b/i386c/ia32/instructions/shift_rotate.h @@ -1,5 +1,3 @@ -/* $Id: shift_rotate.h,v 1.4 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -35,50 +33,50 @@ extern "C" { /* * SAR */ -void SAR_Eb(UINT8 *); -void SAR_Ew(UINT16 *); -void SAR_Ed(UINT32 *); -void SAR_Eb_ext(UINT32); -void SAR_Ew_ext(UINT32); -void SAR_Ed_ext(UINT32); -void SAR_EbCL(UINT8 *, UINT32); -void SAR_EbCL_ext(UINT32, UINT32); -void SAR_EwCL(UINT16 *, UINT32); -void SAR_EwCL_ext(UINT32, UINT32); -void SAR_EdCL(UINT32 *, UINT32); -void SAR_EdCL_ext(UINT32, UINT32); +void CPUCALL SAR_Eb(UINT8 *); +void CPUCALL SAR_Ew(UINT16 *); +void CPUCALL SAR_Ed(UINT32 *); +void CPUCALL SAR_Eb_ext(UINT32); +void CPUCALL SAR_Ew_ext(UINT32); +void CPUCALL SAR_Ed_ext(UINT32); +void CPUCALL SAR_EbCL(UINT8 *, UINT32); +void CPUCALL SAR_EbCL_ext(UINT32, UINT32); +void CPUCALL SAR_EwCL(UINT16 *, UINT32); +void CPUCALL SAR_EwCL_ext(UINT32, UINT32); +void CPUCALL SAR_EdCL(UINT32 *, UINT32); +void CPUCALL SAR_EdCL_ext(UINT32, UINT32); /* * SHR */ -void SHR_Eb(UINT8 *); -void SHR_Ew(UINT16 *); -void SHR_Ed(UINT32 *); -void SHR_Eb_ext(UINT32); -void SHR_Ew_ext(UINT32); -void SHR_Ed_ext(UINT32); -void SHR_EbCL(UINT8 *, UINT32); -void SHR_EbCL_ext(UINT32, UINT32); -void SHR_EwCL(UINT16 *, UINT32); -void SHR_EwCL_ext(UINT32, UINT32); -void SHR_EdCL(UINT32 *, UINT32); -void SHR_EdCL_ext(UINT32, UINT32); +void CPUCALL SHR_Eb(UINT8 *); +void CPUCALL SHR_Ew(UINT16 *); +void CPUCALL SHR_Ed(UINT32 *); +void CPUCALL SHR_Eb_ext(UINT32); +void CPUCALL SHR_Ew_ext(UINT32); +void CPUCALL SHR_Ed_ext(UINT32); +void CPUCALL SHR_EbCL(UINT8 *, UINT32); +void CPUCALL SHR_EbCL_ext(UINT32, UINT32); +void CPUCALL SHR_EwCL(UINT16 *, UINT32); +void CPUCALL SHR_EwCL_ext(UINT32, UINT32); +void CPUCALL SHR_EdCL(UINT32 *, UINT32); +void CPUCALL SHR_EdCL_ext(UINT32, UINT32); /* * SHL */ -void SHL_Eb(UINT8 *); -void SHL_Ew(UINT16 *); -void SHL_Ed(UINT32 *); -void SHL_Eb_ext(UINT32); -void SHL_Ew_ext(UINT32); -void SHL_Ed_ext(UINT32); -void SHL_EbCL(UINT8 *, UINT32); -void SHL_EbCL_ext(UINT32, UINT32); -void SHL_EwCL(UINT16 *, UINT32); -void SHL_EwCL_ext(UINT32, UINT32); -void SHL_EdCL(UINT32 *, UINT32); -void SHL_EdCL_ext(UINT32, UINT32); +void CPUCALL SHL_Eb(UINT8 *); +void CPUCALL SHL_Ew(UINT16 *); +void CPUCALL SHL_Ed(UINT32 *); +void CPUCALL SHL_Eb_ext(UINT32); +void CPUCALL SHL_Ew_ext(UINT32); +void CPUCALL SHL_Ed_ext(UINT32); +void CPUCALL SHL_EbCL(UINT8 *, UINT32); +void CPUCALL SHL_EbCL_ext(UINT32, UINT32); +void CPUCALL SHL_EwCL(UINT16 *, UINT32); +void CPUCALL SHL_EwCL_ext(UINT32, UINT32); +void CPUCALL SHL_EdCL(UINT32 *, UINT32); +void CPUCALL SHL_EdCL_ext(UINT32, UINT32); /* * SHRD @@ -99,66 +97,66 @@ void SHLD_EdGdCL(void); /* * ROR */ -void ROR_Eb(UINT8 *); -void ROR_Ew(UINT16 *); -void ROR_Ed(UINT32 *); -void ROR_Eb_ext(UINT32); -void ROR_Ew_ext(UINT32); -void ROR_Ed_ext(UINT32); -void ROR_EbCL(UINT8 *, UINT32); -void ROR_EbCL_ext(UINT32, UINT32); -void ROR_EwCL(UINT16 *, UINT32); -void ROR_EwCL_ext(UINT32, UINT32); -void ROR_EdCL(UINT32 *, UINT32); -void ROR_EdCL_ext(UINT32, UINT32); +void CPUCALL ROR_Eb(UINT8 *); +void CPUCALL ROR_Ew(UINT16 *); +void CPUCALL ROR_Ed(UINT32 *); +void CPUCALL ROR_Eb_ext(UINT32); +void CPUCALL ROR_Ew_ext(UINT32); +void CPUCALL ROR_Ed_ext(UINT32); +void CPUCALL ROR_EbCL(UINT8 *, UINT32); +void CPUCALL ROR_EbCL_ext(UINT32, UINT32); +void CPUCALL ROR_EwCL(UINT16 *, UINT32); +void CPUCALL ROR_EwCL_ext(UINT32, UINT32); +void CPUCALL ROR_EdCL(UINT32 *, UINT32); +void CPUCALL ROR_EdCL_ext(UINT32, UINT32); /* * ROL */ -void ROL_Eb(UINT8 *); -void ROL_Ew(UINT16 *); -void ROL_Ed(UINT32 *); -void ROL_Eb_ext(UINT32); -void ROL_Ew_ext(UINT32); -void ROL_Ed_ext(UINT32); -void ROL_EbCL(UINT8 *, UINT32); -void ROL_EbCL_ext(UINT32, UINT32); -void ROL_EwCL(UINT16 *, UINT32); -void ROL_EwCL_ext(UINT32, UINT32); -void ROL_EdCL(UINT32 *, UINT32); -void ROL_EdCL_ext(UINT32, UINT32); +void CPUCALL ROL_Eb(UINT8 *); +void CPUCALL ROL_Ew(UINT16 *); +void CPUCALL ROL_Ed(UINT32 *); +void CPUCALL ROL_Eb_ext(UINT32); +void CPUCALL ROL_Ew_ext(UINT32); +void CPUCALL ROL_Ed_ext(UINT32); +void CPUCALL ROL_EbCL(UINT8 *, UINT32); +void CPUCALL ROL_EbCL_ext(UINT32, UINT32); +void CPUCALL ROL_EwCL(UINT16 *, UINT32); +void CPUCALL ROL_EwCL_ext(UINT32, UINT32); +void CPUCALL ROL_EdCL(UINT32 *, UINT32); +void CPUCALL ROL_EdCL_ext(UINT32, UINT32); /* * RCR */ -void RCR_Eb(UINT8 *); -void RCR_Ew(UINT16 *); -void RCR_Ed(UINT32 *); -void RCR_Eb_ext(UINT32); -void RCR_Ew_ext(UINT32); -void RCR_Ed_ext(UINT32); -void RCR_EbCL(UINT8 *, UINT32); -void RCR_EbCL_ext(UINT32, UINT32); -void RCR_EwCL(UINT16 *, UINT32); -void RCR_EwCL_ext(UINT32, UINT32); -void RCR_EdCL(UINT32 *, UINT32); -void RCR_EdCL_ext(UINT32, UINT32); +void CPUCALL RCR_Eb(UINT8 *); +void CPUCALL RCR_Ew(UINT16 *); +void CPUCALL RCR_Ed(UINT32 *); +void CPUCALL RCR_Eb_ext(UINT32); +void CPUCALL RCR_Ew_ext(UINT32); +void CPUCALL RCR_Ed_ext(UINT32); +void CPUCALL RCR_EbCL(UINT8 *, UINT32); +void CPUCALL RCR_EbCL_ext(UINT32, UINT32); +void CPUCALL RCR_EwCL(UINT16 *, UINT32); +void CPUCALL RCR_EwCL_ext(UINT32, UINT32); +void CPUCALL RCR_EdCL(UINT32 *, UINT32); +void CPUCALL RCR_EdCL_ext(UINT32, UINT32); /* * RCL */ -void RCL_Eb(UINT8 *); -void RCL_Ew(UINT16 *); -void RCL_Ed(UINT32 *); -void RCL_Eb_ext(UINT32); -void RCL_Ew_ext(UINT32); -void RCL_Ed_ext(UINT32); -void RCL_EbCL(UINT8 *, UINT32); -void RCL_EbCL_ext(UINT32, UINT32); -void RCL_EwCL(UINT16 *, UINT32); -void RCL_EwCL_ext(UINT32, UINT32); -void RCL_EdCL(UINT32 *, UINT32); -void RCL_EdCL_ext(UINT32, UINT32); +void CPUCALL RCL_Eb(UINT8 *); +void CPUCALL RCL_Ew(UINT16 *); +void CPUCALL RCL_Ed(UINT32 *); +void CPUCALL RCL_Eb_ext(UINT32); +void CPUCALL RCL_Ew_ext(UINT32); +void CPUCALL RCL_Ed_ext(UINT32); +void CPUCALL RCL_EbCL(UINT8 *, UINT32); +void CPUCALL RCL_EbCL_ext(UINT32, UINT32); +void CPUCALL RCL_EwCL(UINT16 *, UINT32); +void CPUCALL RCL_EwCL_ext(UINT32, UINT32); +void CPUCALL RCL_EdCL(UINT32 *, UINT32); +void CPUCALL RCL_EdCL_ext(UINT32, UINT32); #ifdef __cplusplus } diff --git a/i386c/ia32/instructions/shift_rotate.mcr b/i386c/ia32/instructions/shift_rotate.mcr index 2e32dc90..25b82b31 100644 --- a/i386c/ia32/instructions/shift_rotate.mcr +++ b/i386c/ia32/instructions/shift_rotate.mcr @@ -1,5 +1,3 @@ -/* $Id: shift_rotate.mcr,v 1.11 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -32,31 +30,28 @@ * shift/rorate instruction macro */ #define SHIFT_ROTATE_INSTRUCTION(inst) \ -static UINT32 \ +static UINT32 CPUCALL \ inst##1(UINT32 src, void *arg) \ { \ UINT32 dst; \ - (void)arg; \ BYTE_##inst##1(dst, src); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##2(UINT32 src, void *arg) \ { \ UINT32 dst; \ - (void)arg; \ WORD_##inst##1(dst, src); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##4(UINT32 src, void *arg) \ { \ UINT32 dst; \ - (void)arg; \ DWORD_##inst##1(dst, src); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##CL1(UINT32 src, void *arg) \ { \ UINT32 cl = PTR_TO_UINT32(arg); \ @@ -64,7 +59,7 @@ inst##CL1(UINT32 src, void *arg) \ BYTE_##inst##CL(dst, src, cl); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##CL2(UINT32 src, void *arg) \ { \ UINT32 cl = PTR_TO_UINT32(arg); \ @@ -72,7 +67,7 @@ inst##CL2(UINT32 src, void *arg) \ WORD_##inst##CL(dst, src, cl); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##CL4(UINT32 src, void *arg) \ { \ UINT32 cl = PTR_TO_UINT32(arg); \ @@ -81,7 +76,7 @@ inst##CL4(UINT32 src, void *arg) \ return dst; \ } \ \ -void \ +void CPUCALL \ inst##_Eb(UINT8 *out) \ { \ UINT32 src, dst; \ @@ -91,14 +86,14 @@ inst##_Eb(UINT8 *out) \ *out = (UINT8)dst; \ } \ \ -void \ +void CPUCALL \ inst##_Eb_ext(UINT32 madr) \ { \ \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##1, 0); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##1, 0); \ } \ \ -void \ +void CPUCALL \ inst##_Ew(UINT16 *out) \ { \ UINT32 src, dst; \ @@ -108,14 +103,14 @@ inst##_Ew(UINT16 *out) \ *out = (UINT16)dst; \ } \ \ -void \ +void CPUCALL \ inst##_Ew_ext(UINT32 madr) \ { \ \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, 0); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, 0); \ } \ \ -void \ +void CPUCALL \ inst##_Ed(UINT32 *out) \ { \ UINT32 src, dst; \ @@ -125,15 +120,15 @@ inst##_Ed(UINT32 *out) \ *out = dst; \ } \ \ -void \ +void CPUCALL \ inst##_Ed_ext(UINT32 madr) \ { \ \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, 0); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, 0); \ } \ \ /* ExCL, ExIb */ \ -void \ +void CPUCALL \ inst##_EbCL(UINT8 *out, UINT32 cl) \ { \ UINT32 src, dst; \ @@ -143,14 +138,14 @@ inst##_EbCL(UINT8 *out, UINT32 cl) \ *out = (UINT8)dst; \ } \ \ -void \ +void CPUCALL \ inst##_EbCL_ext(UINT32 madr, UINT32 cl) \ { \ \ - cpu_memory_access_va_RMW(CPU_INST_SEGREG_INDEX, madr, inst##CL1, (void *)cl); \ + cpu_vmemory_RMW_b(CPU_INST_SEGREG_INDEX, madr, inst##CL1, UINT32_TO_PTR(cl)); \ } \ \ -void \ +void CPUCALL \ inst##_EwCL(UINT16 *out, UINT32 cl) \ { \ UINT32 src, dst; \ @@ -160,14 +155,14 @@ inst##_EwCL(UINT16 *out, UINT32 cl) \ *out = (UINT16)dst; \ } \ \ -void \ +void CPUCALL \ inst##_EwCL_ext(UINT32 madr, UINT32 cl) \ { \ \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##CL2, (void *)cl); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##CL2, UINT32_TO_PTR(cl)); \ } \ \ -void \ +void CPUCALL \ inst##_EdCL(UINT32 *out, UINT32 cl) \ { \ UINT32 src, dst; \ @@ -177,11 +172,11 @@ inst##_EdCL(UINT32 *out, UINT32 cl) \ *out = dst; \ } \ \ -void \ +void CPUCALL \ inst##_EdCL_ext(UINT32 madr, UINT32 cl) \ { \ \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##CL4, (void *)cl); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##CL4, UINT32_TO_PTR(cl)); \ } /* @@ -193,7 +188,7 @@ struct SHxD_arg { }; #define SHxD_INSTRUCTION(inst) \ -static UINT32 \ +static UINT32 CPUCALL \ inst##2(UINT32 dst, void *arg) \ { \ struct SHxD_arg *p = (struct SHxD_arg *)arg; \ @@ -202,7 +197,7 @@ inst##2(UINT32 dst, void *arg) \ WORD_##inst(dst, src, cl); \ return dst; \ } \ -static UINT32 \ +static UINT32 CPUCALL \ inst##4(UINT32 dst, void *arg) \ { \ struct SHxD_arg *p = (struct SHxD_arg *)arg; \ @@ -231,7 +226,7 @@ inst##_EwGwIb(void) \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ GET_PCBYTE(arg.cl); \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, &arg); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, &arg); \ } \ } \ \ @@ -254,7 +249,7 @@ inst##_EdGdIb(void) \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ GET_PCBYTE(arg.cl); \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, &arg); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, &arg); \ } \ } \ \ @@ -276,7 +271,7 @@ inst##_EwGwCL(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, (void *)&arg); \ + cpu_vmemory_RMW_w(CPU_INST_SEGREG_INDEX, madr, inst##2, (void *)&arg); \ } \ } \ \ @@ -298,12 +293,12 @@ inst##_EdGdCL(void) \ } else { \ CPU_WORKCLOCK(7); \ madr = calc_ea_dst(op); \ - cpu_memory_access_va_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, (void *)&arg); \ + cpu_vmemory_RMW_d(CPU_INST_SEGREG_INDEX, madr, inst##4, (void *)&arg); \ } \ } -/* Pentium!!! - ・キ・ユ・ネ・ォ・ヲ・・ネ != 1、ホセケ遉マOV、マノヤハム、鬢ケ、、 */ +/* Pentium!!! - 繧キ繝輔ヨ繧ォ繧ヲ繝ウ繝 != 1縺ョ蝣エ蜷医ッOV縺ッ荳榊、峨i縺吶> */ /* * SAR @@ -886,8 +881,9 @@ do { \ CPU_OV = ((s) >> 31) ^ tmp; \ } \ while ((c)--) { \ - tmp = (s) & 1; \ + UINT32 tmp2 = (s) & 1; \ (s) = (tmp << 31) | ((s) >> 1); \ + tmp = tmp2; \ } \ CPU_FLAGL |= tmp; \ } \ @@ -967,9 +963,9 @@ do { \ CPU_OV = ((s) + 0x40000000) & 0x80000000; \ } \ while ((c)--) { \ - tmp = (s) & 0x80000000; \ + UINT32 tmp2 = (s) & 0x80000000; \ (s) = ((s) << 1) | (tmp & 1); \ - tmp >>= 31; \ + tmp = tmp2 >> 31; \ } \ CPU_FLAGL |= tmp; \ } \ diff --git a/i386c/ia32/instructions/shift_rotatexc.mcr b/i386c/ia32/instructions/shift_rotatexc.mcr index dd750a1c..70a2ff81 100644 --- a/i386c/ia32/instructions/shift_rotatexc.mcr +++ b/i386c/ia32/instructions/shift_rotatexc.mcr @@ -1,5 +1,3 @@ -/* $Id: shift_rotatexc.mcr,v 1.3 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/string_inst.c b/i386c/ia32/instructions/string_inst.c index d9a68a43..9778f2bd 100644 --- a/i386c/ia32/instructions/string_inst.c +++ b/i386c/ia32/instructions/string_inst.c @@ -1,5 +1,3 @@ -/* $Id: string_inst.c,v 1.3 2005/03/12 12:33:47 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/string_inst.h b/i386c/ia32/instructions/string_inst.h index df998bcc..169b0501 100644 --- a/i386c/ia32/instructions/string_inst.h +++ b/i386c/ia32/instructions/string_inst.h @@ -1,5 +1,3 @@ -/* $Id: string_inst.h,v 1.2 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/instructions/system_inst.c b/i386c/ia32/instructions/system_inst.c index 53d6542a..2f222fde 100644 --- a/i386c/ia32/instructions/system_inst.c +++ b/i386c/ia32/instructions/system_inst.c @@ -1,5 +1,3 @@ -/* $Id: system_inst.c,v 1.32 2008/01/25 18:02:18 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -32,7 +30,7 @@ #include "system_inst.h" -void +void CPUCALL LGDT_Ms(UINT32 op) { UINT32 madr; @@ -40,7 +38,7 @@ LGDT_Ms(UINT32 op) UINT16 limit; if (op < 0xc0) { - if (!CPU_STAT_PM || !CPU_STAT_VM86 || CPU_STAT_CPL == 0) { + if (!CPU_STAT_PM || (CPU_STAT_CPL == 0 && !CPU_STAT_VM86)) { CPU_WORKCLOCK(11); madr = calc_ea_dst(op); limit = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); @@ -63,7 +61,7 @@ LGDT_Ms(UINT32 op) EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL SGDT_Ms(UINT32 op) { UINT32 madr; @@ -85,7 +83,7 @@ SGDT_Ms(UINT32 op) EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL LLDT_Ew(UINT32 op) { UINT32 madr; @@ -107,11 +105,11 @@ LLDT_Ew(UINT32 op) VERBOSE(("LLDT: CPL(%d) != 0", CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, 0); } - VERBOSE(("LLDT: VM86")); + VERBOSE(("LLDT: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL SLDT_Ew(UINT32 op) { UINT32 madr; @@ -133,11 +131,11 @@ SLDT_Ew(UINT32 op) } return; } - VERBOSE(("SLDT: VM86")); + VERBOSE(("SLDT: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL LTR_Ew(UINT32 op) { UINT32 madr; @@ -159,11 +157,11 @@ LTR_Ew(UINT32 op) VERBOSE(("LTR: CPL(%d) != 0", CPU_STAT_CPL)); EXCEPTION(GP_EXCEPTION, 0); } - VERBOSE(("LTR: VM86")); + VERBOSE(("LTR: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL STR_Ew(UINT32 op) { UINT32 madr; @@ -185,11 +183,11 @@ STR_Ew(UINT32 op) } return; } - VERBOSE(("STR: VM86")); + VERBOSE(("STR: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL LIDT_Ms(UINT32 op) { UINT32 madr; @@ -197,7 +195,7 @@ LIDT_Ms(UINT32 op) UINT16 limit; if (op < 0xc0) { - if (!CPU_STAT_PM || !CPU_STAT_VM86 || CPU_STAT_CPL == 0) { + if (!CPU_STAT_PM || (CPU_STAT_CPL == 0 && !CPU_STAT_VM86)) { CPU_WORKCLOCK(11); madr = calc_ea_dst(op); limit = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); @@ -220,7 +218,7 @@ LIDT_Ms(UINT32 op) EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL SIDT_Ms(UINT32 op) { UINT32 madr; @@ -276,7 +274,7 @@ MOV_CdRd(void) * 31 = PG (pageing) */ - /* イシエャ p.182 ウ荀ケ、゚ 13 - ーネフハンクホ羌ー */ + /* 荳句キサ p.182 蜑イ繧願セシ縺ソ 13 - 荳闊ャ菫晁ュキ萓句、 */ if ((src & (CPU_CR0_PE|CPU_CR0_PG)) == (UINT32)CPU_CR0_PG) { EXCEPTION(GP_EXCEPTION, 0); } @@ -288,6 +286,7 @@ MOV_CdRd(void) src &= CPU_CR0_ALL; #if defined(USE_FPU) src |= CPU_CR0_ET; /* FPU present */ + src &= ~CPU_CR0_EM; #else src |= CPU_CR0_EM | CPU_CR0_NE; src &= ~(CPU_CR0_MP | CPU_CR0_ET); @@ -296,7 +295,7 @@ MOV_CdRd(void) VERBOSE(("MOV_CdRd: %04x:%08x: cr0: 0x%08x <- 0x%08x(%s)", CPU_CS, CPU_PREV_EIP, reg, CPU_CR0, reg32_str[op & 7])); if ((reg ^ CPU_CR0) & (CPU_CR0_PE|CPU_CR0_PG)) { - tlb_flush(TRUE); + tlb_flush(1); } if ((reg ^ CPU_CR0) & CPU_CR0_PE) { if (CPU_CR0 & CPU_CR0_PE) { @@ -332,7 +331,7 @@ MOV_CdRd(void) * 3 = PWT (page level write throgh) */ reg = CPU_CR3; - set_CR3(src); + set_cr3(src); VERBOSE(("MOV_CdRd: %04x:%08x: cr3: 0x%08x <- 0x%08x(%s)", CPU_CS, CPU_PREV_EIP, reg, CPU_CR3, reg32_str[op & 7])); break; @@ -367,7 +366,7 @@ MOV_CdRd(void) VERBOSE(("MOV_CdRd: %04x:%08x: cr4: 0x%08x <- 0x%08x(%s)", CPU_CS, CPU_PREV_EIP, reg, CPU_CR4, reg32_str[op & 7])); if ((reg ^ CPU_CR4) & (CPU_CR4_PSE|CPU_CR4_PGE|CPU_CR4_PAE)) { - tlb_flush(TRUE); + tlb_flush(1); } break; @@ -427,7 +426,7 @@ MOV_RdCd(void) EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL LMSW_Ew(UINT32 op) { UINT32 src, madr; @@ -455,14 +454,18 @@ LMSW_Ew(UINT32 op) EXCEPTION(GP_EXCEPTION, 0); } -void +void CPUCALL SMSW_Ew(UINT32 op) { UINT32 madr; if (op >= 0xc0) { CPU_WORKCLOCK(2); - *(reg16_b20[op]) = (UINT16)CPU_CR0; + if (CPU_INST_OP32) { + *(reg32_b20[op]) = (UINT16)CPU_CR0; + } else { + *(reg16_b20[op]) = (UINT16)CPU_CR0; + } } else { CPU_WORKCLOCK(3); madr = calc_ea_dst(op); @@ -516,7 +519,7 @@ ARPL_EwGw(void) } return; } - VERBOSE(("ARPL: VM86")); + VERBOSE(("ARPL: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } @@ -542,10 +545,11 @@ LAR_GwEw(void) return; } - if (sel.desc.s) { + if (!SEG_IS_SYSTEM(&sel.desc)) { /* code or data segment */ - if (!(sel.desc.u.seg.c && sel.desc.u.seg.ec)) { - /* not conforming code segment */ + if ((SEG_IS_DATA(&sel.desc) + || !SEG_IS_CONFORMING_CODE(&sel.desc))) { + /* data or non-conforming code segment */ if ((sel.desc.dpl < CPU_STAT_CPL) || (sel.desc.dpl < sel.rpl)) { CPU_FLAGL &= ~Z_FLAG; @@ -576,7 +580,7 @@ LAR_GwEw(void) CPU_FLAGL |= Z_FLAG; return; } - VERBOSE(("LAR: VM86")); + VERBOSE(("LAR: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } @@ -599,10 +603,11 @@ LAR_GdEw(void) return; } - if (sel.desc.s) { + if (!SEG_IS_SYSTEM(&sel.desc)) { /* code or data segment */ - if (!(sel.desc.u.seg.c && sel.desc.u.seg.ec)) { - /* not conforming code segment */ + if ((SEG_IS_DATA(&sel.desc) + || !SEG_IS_CONFORMING_CODE(&sel.desc))) { + /* data or non-conforming code segment */ if ((sel.desc.dpl < CPU_STAT_CPL) || (sel.desc.dpl < sel.rpl)) { CPU_FLAGL &= ~Z_FLAG; @@ -633,7 +638,7 @@ LAR_GdEw(void) CPU_FLAGL |= Z_FLAG; return; } - VERBOSE(("LAR: VM86")); + VERBOSE(("LAR: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } @@ -655,10 +660,11 @@ LSL_GwEw(void) return; } - if (sel.desc.s) { + if (!SEG_IS_SYSTEM(&sel.desc)) { /* code or data segment */ - if (!(sel.desc.u.seg.c && sel.desc.u.seg.ec)) { - /* not conforming code segment */ + if ((SEG_IS_DATA(&sel.desc) + || !SEG_IS_CONFORMING_CODE(&sel.desc))) { + /* data or non-conforming code segment */ if ((sel.desc.dpl < CPU_STAT_CPL) || (sel.desc.dpl < sel.rpl)) { CPU_FLAGL &= ~Z_FLAG; @@ -685,7 +691,7 @@ LSL_GwEw(void) CPU_FLAGL |= Z_FLAG; return; } - VERBOSE(("LSL: VM86")); + VERBOSE(("LSL: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } @@ -707,10 +713,11 @@ LSL_GdEw(void) return; } - if (sel.desc.s) { + if (!SEG_IS_SYSTEM(&sel.desc)) { /* code or data segment */ - if (!(sel.desc.u.seg.c && sel.desc.u.seg.ec)) { - /* not conforming code segment */ + if ((SEG_IS_DATA(&sel.desc) + || !SEG_IS_CONFORMING_CODE(&sel.desc))) { + /* data or non-conforming code segment */ if ((sel.desc.dpl < CPU_STAT_CPL) || (sel.desc.dpl < sel.rpl)) { CPU_FLAGL &= ~Z_FLAG; @@ -737,11 +744,11 @@ LSL_GdEw(void) CPU_FLAGL |= Z_FLAG; return; } - VERBOSE(("LSL: VM86")); + VERBOSE(("LSL: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL VERR_Ew(UINT32 op) { selector_t sel; @@ -766,13 +773,14 @@ VERR_Ew(UINT32 op) } /* system segment */ - if (!sel.desc.s) { + if (SEG_IS_SYSTEM(&sel.desc)) { CPU_FLAGL &= ~Z_FLAG; return; } - /* not conforming code segment && (CPL > DPL || RPL > DPL) */ - if (!(sel.desc.u.seg.c && sel.desc.u.seg.ec)) { - /* not conforming code segment */ + + /* data or non-conforming code segment */ + if ((SEG_IS_DATA(&sel.desc) + || !SEG_IS_CONFORMING_CODE(&sel.desc))) { if ((sel.desc.dpl < CPU_STAT_CPL) || (sel.desc.dpl < sel.rpl)) { CPU_FLAGL &= ~Z_FLAG; @@ -780,7 +788,8 @@ VERR_Ew(UINT32 op) } } /* code segment is not readable */ - if (sel.desc.u.seg.c && !sel.desc.u.seg.wr) { + if (SEG_IS_CODE(&sel.desc) + && !SEG_IS_READABLE_CODE(&sel.desc)) { CPU_FLAGL &= ~Z_FLAG; return; } @@ -788,11 +797,11 @@ VERR_Ew(UINT32 op) CPU_FLAGL |= Z_FLAG; return; } - VERBOSE(("VERR: VM86")); + VERBOSE(("VERR: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } -void +void CPUCALL VERW_Ew(UINT32 op) { selector_t sel; @@ -817,12 +826,12 @@ VERW_Ew(UINT32 op) } /* system segment || code segment */ - if (!sel.desc.s || sel.desc.u.seg.c) { + if (SEG_IS_SYSTEM(&sel.desc) || SEG_IS_CODE(&sel.desc)) { CPU_FLAGL &= ~Z_FLAG; return; } /* data segment is not writable */ - if (!sel.desc.u.seg.wr) { + if (!SEG_IS_WRITABLE_DATA(&sel.desc)) { CPU_FLAGL &= ~Z_FLAG; return; } @@ -835,7 +844,7 @@ VERW_Ew(UINT32 op) CPU_FLAGL |= Z_FLAG; return; } - VERBOSE(("VERW: VM86")); + VERBOSE(("VERW: real-mode or VM86")); EXCEPTION(UD_EXCEPTION, 0); } @@ -845,9 +854,6 @@ MOV_DdRd(void) UINT32 src; UINT op; int idx; -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - int i; -#endif CPU_WORKCLOCK(11); GET_PCBYTE(op); @@ -875,32 +881,13 @@ MOV_DdRd(void) CPU_DR(idx) = src; break; -#if CPU_FAMILY >= 5 - case 4: - if (CPU_CR4 & CPU_CR4_DE) { - EXCEPTION(UD_EXCEPTION, 0); - } -#endif case 6: CPU_DR6 = src; break; -#if CPU_FAMILY >= 5 - case 5: - if (CPU_CR4 & CPU_CR4_DE) { - EXCEPTION(UD_EXCEPTION, 0); - } -#endif case 7: CPU_DR7 = src; CPU_STAT_BP = 0; -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - for (i = 0; i < CPU_DEBUG_REG_INDEX_NUM; i++) { - if (CPU_DR7 & (CPU_DR7_L(i)|CPU_DR7_G(i))) { - CPU_STAT_BP |= (1 << i); - } - } -#endif /* IA32_SUPPORT_DEBUG_REGISTER */ break; default: @@ -947,25 +934,10 @@ MOV_RdDd(void) break; case 4: -#if CPU_FAMILY >= 5 - if (CPU_CR4 & CPU_CR4_DE) { - EXCEPTION(UD_EXCEPTION, 0); - } -#endif case 6: -#if CPU_FAMILY == 4 *out = (CPU_DR6 & 0x0000f00f) | 0xffff0ff0; -#elif CPU_FAMILY >= 5 - *out = (CPU_DR6 & 0x0000e00f) | 0xffff0ff0; -#endif break; -#if CPU_FAMILY >= 5 - case 5: - if (CPU_CR4 & CPU_CR4_DE) { - EXCEPTION(UD_EXCEPTION, 0); - } -#endif case 7: *out = CPU_DR7; break; @@ -1002,13 +974,12 @@ WBINVD(void) } } -void +void CPUCALL INVLPG(UINT32 op) { - descriptor_t *sd; + descriptor_t *sdp; UINT32 madr; int idx; - int exc; if (CPU_STAT_PM && (CPU_STAT_VM86 || CPU_STAT_CPL != 0)) { VERBOSE(("INVLPG: VM86(%s) or CPL(%d) != 0", CPU_STAT_VM86 ? "true" : "false", CPU_STAT_CPL)); @@ -1020,38 +991,29 @@ INVLPG(UINT32 op) madr = calc_ea_dst(op); idx = CPU_INST_SEGREG_INDEX; - sd = &CPU_STAT_SREG(idx); - if (!sd->valid) { - exc = GP_EXCEPTION; - goto err; + sdp = &CPU_STAT_SREG(idx); + if (!SEG_IS_VALID(sdp)) { + EXCEPTION(GP_EXCEPTION, 0); } - switch (sd->type) { + switch (sdp->type) { case 4: case 5: case 6: case 7: - if (madr <= sd->u.seg.limit) { - if (idx == CPU_SS_INDEX) - exc = SS_EXCEPTION; - else - exc = GP_EXCEPTION; - goto err; + if (madr <= sdp->u.seg.limit) { + EXCEPTION((idx == CPU_SS_INDEX) ? + SS_EXCEPTION: GP_EXCEPTION, 0); } break; default: - if (madr > sd->u.seg.limit) { - if (idx == CPU_SS_INDEX) - exc = SS_EXCEPTION; - else - exc = GP_EXCEPTION; - goto err; + if (madr > sdp->u.seg.limit) { + EXCEPTION((idx == CPU_SS_INDEX) ? + SS_EXCEPTION: GP_EXCEPTION, 0); } break; } - tlb_flush_page(sd->u.seg.segbase + madr); + tlb_flush_page(sdp->u.seg.segbase + madr); return; } - exc = UD_EXCEPTION; -err: - EXCEPTION(exc, 0); + EXCEPTION(UD_EXCEPTION, 0); } void @@ -1070,8 +1032,9 @@ HLT(void) EXCEPTION(GP_EXCEPTION, 0); } + VERBOSE(("HLT: do HLT.")); CPU_HALT(); - CPU_EIP--; + CPU_EIP = CPU_PREV_EIP; CPU_STAT_HLT = 1; } @@ -1112,7 +1075,7 @@ WRMSR(void) idx = CPU_ECX; switch (idx) { - /* MTRR 、リ、ホス、ュケ、゚サ tlb_flush(TRUE); */ + /* MTRR 縺ク縺ョ譖ク縺崎セシ縺ソ譎 tlb_flush(1); */ default: EXCEPTION(GP_EXCEPTION, 0); diff --git a/i386c/ia32/instructions/system_inst.h b/i386c/ia32/instructions/system_inst.h index 38f52905..2067b125 100644 --- a/i386c/ia32/instructions/system_inst.h +++ b/i386c/ia32/instructions/system_inst.h @@ -1,5 +1,3 @@ -/* $Id: system_inst.h,v 1.4 2005/03/12 12:33:48 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -33,22 +31,22 @@ extern "C" { #endif /* Load/Store system register */ -void LGDT_Ms(UINT32); -void SGDT_Ms(UINT32); -void LLDT_Ew(UINT32); -void SLDT_Ew(UINT32); -void LTR_Ew(UINT32); -void STR_Ew(UINT32); -void LIDT_Ms(UINT32); -void SIDT_Ms(UINT32); +void CPUCALL LGDT_Ms(UINT32); +void CPUCALL SGDT_Ms(UINT32); +void CPUCALL LLDT_Ew(UINT32); +void CPUCALL SLDT_Ew(UINT32); +void CPUCALL LTR_Ew(UINT32); +void CPUCALL STR_Ew(UINT32); +void CPUCALL LIDT_Ms(UINT32); +void CPUCALL SIDT_Ms(UINT32); /* ctrl reg */ void MOV_CdRd(void); void MOV_RdCd(void); /* msw */ -void LMSW_Ew(UINT32); -void SMSW_Ew(UINT32); +void CPUCALL LMSW_Ew(UINT32); +void CPUCALL SMSW_Ew(UINT32); /* */ void CLTS(void); @@ -61,8 +59,8 @@ void LSL_GwEw(void); void LSL_GdEw(void); /* */ -void VERR_Ew(UINT32); -void VERW_Ew(UINT32); +void CPUCALL VERR_Ew(UINT32); +void CPUCALL VERW_Ew(UINT32); /* dbg reg */ void MOV_DdRd(void); @@ -73,7 +71,7 @@ void INVD(void); void WBINVD(void); /* */ -void INVLPG(UINT32); +void CPUCALL INVLPG(UINT32); /* */ void _LOCK(void); diff --git a/i386c/ia32/interface.c b/i386c/ia32/interface.c index 560db5c1..102c5934 100644 --- a/i386c/ia32/interface.c +++ b/i386c/ia32/interface.c @@ -1,5 +1,3 @@ -/* $Id: interface.c,v 1.26 2008/01/27 12:11:31 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -36,9 +34,6 @@ #include "iocore.h" #include "dmax86.h" #include "bios.h" -#if defined(IA32_REBOOT_ON_PANIC) -#include "pccore.h" -#endif void @@ -50,31 +45,32 @@ ia32_initreg(void) CPU_EDX = (CPU_FAMILY << 8) | (CPU_MODEL << 4) | CPU_STEPPING; CPU_EFLAG = 2; - CPU_CR0 = CPU_CR0_CD | CPU_CR0_NW | CPU_CR0_ET; + CPU_CR0 = CPU_CR0_CD | CPU_CR0_NW; #if defined(USE_FPU) - CPU_CR0 |= CPU_CR0_EM | CPU_CR0_NE; - CPU_CR0 &= ~CPU_CR0_MP; -#else + CPU_CR0 &= ~CPU_CR0_EM; CPU_CR0 |= CPU_CR0_ET; +#else + CPU_CR0 |= CPU_CR0_EM | CPU_CR0_NE; + CPU_CR0 &= ~(CPU_CR0_MP | CPU_CR0_ET); #endif CPU_MXCSR = 0x1f80; + + CPU_GDTR_BASE = 0x0; CPU_GDTR_LIMIT = 0xffff; + CPU_IDTR_BASE = 0x0; CPU_IDTR_LIMIT = 0xffff; + CPU_LDTR_BASE = 0x0; + CPU_LDTR_LIMIT = 0xffff; + CPU_TR_BASE = 0x0; + CPU_TR_LIMIT = 0xffff; -#if CPU_FAMILY == 4 CPU_STATSAVE.cpu_regs.dr[6] = 0xffff1ff0; -#elif CPU_FAMILY >= 5 - CPU_STATSAVE.cpu_regs.dr[6] = 0xffff0ff0; - CPU_STATSAVE.cpu_regs.dr[7] = 0x00000400; -#endif for (i = 0; i < CPU_SEGREG_NUM; ++i) { - CPU_STAT_SREG_INIT(i); + segdesc_init(i, 0, &CPU_STAT_SREG(i)); } - CPU_LDTR_LIMIT = 0xffff; - CPU_TR_LIMIT = 0xffff; - - CPU_SET_SEGREG(CPU_CS_INDEX, 0xf000); + LOAD_SEGREG(CPU_CS_INDEX, 0xf000); + CPU_STAT_CS_BASE = 0xffff0000; CPU_EIP = 0xfff0; CPU_ADRSMASK = 0x000fffff; @@ -103,11 +99,8 @@ ia32shut(void) void ia32a20enable(BOOL enable) { -#if (CPU_FAMILY == 3) - CPU_ADRSMASK = (enable)?0x00ffffff:0x00ffffff; -#else + CPU_ADRSMASK = (enable)?0xffffffff:0x00ffffff; -#endif } void @@ -133,20 +126,12 @@ ia32(void) break; } -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - do { - exec_1step(); - if (dmac.working) { - dmax86(); - } - } while (CPU_REMCLOCK > 0); -#else if (CPU_TRAP) { do { exec_1step(); if (CPU_TRAP) { CPU_DR6 |= CPU_DR6_BS; - INTERRUPT(1, TRUE, FALSE, 0); + INTERRUPT(1, INTR_TYPE_EXCEPTION); } dmax86(); } while (CPU_REMCLOCK > 0); @@ -160,7 +145,6 @@ ia32(void) exec_1step(); } while (CPU_REMCLOCK > 0); } -#endif } void @@ -188,12 +172,10 @@ ia32_step(void) do { exec_1step(); -#if !defined(IA32_SUPPORT_DEBUG_REGISTER) if (CPU_TRAP) { CPU_DR6 |= CPU_DR6_BS; - INTERRUPT(1, TRUE, FALSE, 0); + INTERRUPT(1, INTR_TYPE_EXCEPTION); } -#endif if (dmac.working) { dmax86(); } @@ -206,13 +188,13 @@ ia32_interrupt(int vect, int soft) // TRACEOUT(("int (%x, %x) PE=%d VM=%d", vect, soft, CPU_STAT_PM, CPU_STAT_VM86)); if (!soft) { - INTERRUPT(vect, FALSE, FALSE, 0); - } - else { - if (CPU_STAT_VM86 && (CPU_STAT_IOPL < CPU_IOPL3) && (soft == -1)) { - TRACEOUT(("BIOS interrupt: VM86 && IOPL < 3 && INTn")); + INTERRUPT(vect, INTR_TYPE_EXTINTR); + } else { + if (CPU_STAT_PM && CPU_STAT_VM86 && CPU_STAT_IOPL < CPU_IOPL3) { + VERBOSE(("ia32_interrupt: VM86 && IOPL < 3 && INTn")); + EXCEPTION(GP_EXCEPTION, 0); } - INTERRUPT(vect, TRUE, FALSE, 0); + INTERRUPT(vect, INTR_TYPE_SOFTINTR); } } @@ -232,6 +214,7 @@ ia32_panic(const char *str, ...) va_end(ap); strcat(buf, "\n"); strcat(buf, cpu_reg2str()); + VERBOSE(("%s", buf)); msgbox("ia32_panic", buf); @@ -282,20 +265,18 @@ ia32_bioscall(void) if (!CPU_STAT_PM || CPU_STAT_VM86) { #if 1 - adrs = (CPU_EIP - 1) + ((CPU_REGS_SREG(CPU_CS_INDEX)) << 4); + adrs = CPU_PREV_EIP + (CPU_CS << 4); #else - adrs = (CPU_EIP - 1) + CPU_STAT_CS_BASE; + adrs = CPU_PREV_EIP + CPU_STAT_CS_BASE; #endif if ((adrs >= 0xf8000) && (adrs < 0x100000)) { if (biosfunc(adrs)) { /* Nothing to do */ } - if (!CPU_STAT_PM || CPU_STAT_VM86) { - CPU_SET_SEGREG(CPU_ES_INDEX, CPU_ES); - CPU_SET_SEGREG(CPU_CS_INDEX, CPU_CS); - CPU_SET_SEGREG(CPU_SS_INDEX, CPU_SS); - CPU_SET_SEGREG(CPU_DS_INDEX, CPU_DS); - } + LOAD_SEGREG(CPU_ES_INDEX, CPU_ES); + LOAD_SEGREG(CPU_CS_INDEX, CPU_CS); + LOAD_SEGREG(CPU_SS_INDEX, CPU_SS); + LOAD_SEGREG(CPU_DS_INDEX, CPU_DS); } } } diff --git a/i386c/ia32/interface.h b/i386c/ia32/interface.h index dc65dec7..839ae942 100644 --- a/i386c/ia32/interface.h +++ b/i386c/ia32/interface.h @@ -1,5 +1,3 @@ -/* $Id: interface.h,v 1.19 2008/01/25 18:02:18 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -32,6 +30,14 @@ #define CPUCALL #endif +#ifndef STATIC_INLINE +#if defined(__GNUC__) +#define STATIC_INLINE static INLINE __attribute__((unused)) +#else +#define STATIC_INLINE static INLINE +#endif +#endif + #if !defined(QWORD_CONST) #define QWORD_CONST(v) v ## ULL #define SQWORD_CONST(v) v ## LL diff --git a/i386c/ia32/paging.c b/i386c/ia32/paging.c index 70df4f79..f077dce6 100644 --- a/i386c/ia32/paging.c +++ b/i386c/ia32/paging.c @@ -1,5 +1,3 @@ -/* $Id: paging.c,v 1.29 2007/02/06 14:20:57 monaka Exp $ */ - /* * Copyright (c) 2003-2004 NONAKA Kimihiro * All rights reserved. @@ -30,25 +28,25 @@ #include "ia32.mcr" /* - * ・レ。シ・ク・ユ・ゥ・・ネホ羌ー + * 繝壹シ繧ク繝輔か繝ォ繝井セ句、 * - * 4-31: ヘスフコム、゚ - * 3: RSVD: 0 = ・ユ・ゥ・・ネ、ホクカー、マヘスフ・モ・テ・ネー翳ソ、ヌ、マ、ハ、ォ、テ、ソ。・ - * 1 = ・レ。シ・ク。ヲ・ユ・ゥ・・ネ、ホクカー、マ。、ー翳ソ、ネ・゙。シ・ッ、オ、、ソ PTE 、゙、ソ、マ - * PDE 、ホヘスフ・モ・テ・ネーフテヨ、ホ、ヲ、チー、ト、ヌ。、1 、ャク。スミ、オ、、ソ、ウ、ネ、ヌ、「、。・ - * 2: U/S: 0 = ・ユ・ゥ・・ネ、ホクカー、ネ、ハ、テ、ソ・「・ッ・サ・ケ、マ・ラ・・サ・テ・オ、ャ・ケ。シ・ム・ミ・、・カ。ヲ - * ・筍シ・ノ、ヌシツケヤテ讀ヒケヤ、、、ソ。・ - * 1 = ・ユ・ゥ・・ネ、ホクカー、ネ、ハ、テ、ソ・「・ッ・サ・ケ、マ・ラ・・サ・テ・オ、ャ・譯シ・カ。ヲ・筍シ・ノ、ヌ - * シツケヤテ讀ヒケヤ、、、ソ。・ - * 1: W/R: 0 = ・ユ・ゥ・・ネ、ホクカー、ネ、ハ、テ、ソ・「・ッ・サ・ケ、ャニノ、゚シ隍熙ヌ、「、テ、ソ。・ - * 1 = ・ユ・ゥ・・ネ、ホクカー、ネ、ハ、テ、ソ・「・ッ・サ・ケ、ャス、ュケ、゚、ヌ、「、テ、ソ。・ - * 0: P: 0 = ・ユ・ゥ・・ネ、ホクカー、ャノヤコ゚・レ。シ・ク、ヌ、「、テ、ソ。・ - * 1 = ・ユ・ゥ・・ネ、ホクカー、ャ・レ。シ・ク。ヲ・・ル・ハンクー翳ソ、ヌ、「、テ、ソ。・ + * 4-31: 莠育エ貂医∩ + * 3: RSVD: 0 = 繝輔か繝ォ繝医ョ蜴溷屏縺ッ莠育エ繝薙ャ繝磯&蜿阪〒縺ッ縺ェ縺九▲縺滂シ + * 1 = 繝壹シ繧ク繝サ繝輔か繝ォ繝医ョ蜴溷屏縺ッシ碁&蜿阪→繝槭シ繧ッ縺輔l縺 PTE 縺セ縺溘ッ + * PDE 縺ョ莠育エ繝薙ャ繝井ス咲スョ縺ョ縺縺。荳縺、縺ァシ1 縺梧、懷コ縺輔l縺溘%縺ィ縺ァ縺ゅkシ + * 2: U/S: 0 = 繝輔か繝ォ繝医ョ蜴溷屏縺ィ縺ェ縺」縺溘い繧ッ繧サ繧ケ縺ッ繝励Ο繧サ繝繧オ縺後せ繝シ繝代ヰ繧、繧カ繝サ + * 繝「繝シ繝峨〒螳溯。御クュ縺ォ陦後o繧後◆シ + * 1 = 繝輔か繝ォ繝医ョ蜴溷屏縺ィ縺ェ縺」縺溘い繧ッ繧サ繧ケ縺ッ繝励Ο繧サ繝繧オ縺後Θ繝シ繧カ繝サ繝「繝シ繝峨〒 + * 螳溯。御クュ縺ォ陦後o繧後◆シ + * 1: W/R: 0 = 繝輔か繝ォ繝医ョ蜴溷屏縺ィ縺ェ縺」縺溘い繧ッ繧サ繧ケ縺瑚ェュ縺ソ蜿悶j縺ァ縺ゅ▲縺滂シ + * 1 = 繝輔か繝ォ繝医ョ蜴溷屏縺ィ縺ェ縺」縺溘い繧ッ繧サ繧ケ縺梧嶌縺崎セシ縺ソ縺ァ縺ゅ▲縺滂シ + * 0: P: 0 = 繝輔か繝ォ繝医ョ蜴溷屏縺御ク榊惠繝壹シ繧ク縺ァ縺ゅ▲縺滂シ + * 1 = 繝輔か繝ォ繝医ョ蜴溷屏縺後壹シ繧ク繝サ繝ャ繝吶Ν菫晁ュキ驕募渚縺ァ縺ゅ▲縺滂シ */ /* - * イシエャ 4.12. ・レ。シ・クハンク、ネ・サ・ー・皈・ネハンク、ホチネ、゚ケ遉、サ - * 。ヨノス 4-2. ・レ。シ・ク。ヲ・ヌ・」・・ッ・ネ・熙ネ・レ。シ・ク。ヲ・ニ。シ・ヨ・、ホハンク、ホチネ、゚ケ遉、サ。ラ + * 荳句キサ 4.12. 繝壹シ繧ク菫晁ュキ縺ィ繧サ繧ー繝。繝ウ繝井ソ晁ュキ縺ョ邨縺ソ蜷医o縺 + * 縲瑚。ィ 4-2. 繝壹シ繧ク繝サ繝繧」繝ャ繧ッ繝医Μ縺ィ繝壹シ繧ク繝サ繝繝シ繝悶Ν縺ョ菫晁ュキ縺ョ邨縺ソ蜷医o縺帙 * * +------------+------------+------------+ * | PDE | PTE | merge | @@ -73,11 +71,11 @@ * | s | rw | s | rw | s | rw | * +-----+------+-----+------+-----+------+ * - * 「ィ rw/p : CR0 、ホ WP ・モ・テ・ネ、ャ ON 、ホセケ遉ヒ、マ ro + * 窶サ rw/p : CR0 縺ョ WP 繝薙ャ繝医′ ON 縺ョ蝣エ蜷医↓縺ッ ro */ /* - * ・皈筵・「・ッ・サ・ケ/PxE(セ蠏ュサイセネ)/CPL/CR0 、ネ・レ。シ・ク・「・ッ・サ・ケク「、ホエリキク + * 繝。繝「繝ェ繧「繧ッ繧サ繧ケ/PxE(荳願ィ伜盾辣ァ)/CPL/CR0 縺ィ繝壹シ繧ク繧「繧ッ繧サ繧ケ讓ゥ縺ョ髢「菫 * * +-----+-----+-----+-----+-----+---+ * | CR0 | CPL | PxE | PxE | ope | | @@ -157,17 +155,17 @@ static const UINT8 page_access_bit[32] = { /* *-- - * 32bit ハェヘ・「・ノ・・ケ 4k ・レ。シ・ク + * 32bit 迚ゥ逅繧「繝峨Ξ繧ケ 4k 繝壹シ繧ク * - * ・・ヒ・「。ヲ・「・ノ・・ケ + * 繝ェ繝九い繝サ繧「繝峨Ξ繧ケ * 31 22 21 12 11 0 * +------------------------+----------------------+--------------------------+ - * | ・レ。シ・ク。ヲ・ヌ・」・・ッ・ネ・ | ・レ。シ・ク。ヲ・ニ。シ・ヨ・ | ・ェ・ユ・サ・テ・ネ | + * | 繝壹シ繧ク繝サ繝繧」繝ャ繧ッ繝医Μ | 繝壹シ繧ク繝サ繝繝シ繝悶Ν | 繧ェ繝輔そ繝繝 | * +------------------------+----------------------+--------------------------+ * | | | * +-----------+ +-----------+ +----------+ * | | | - * | ・レ。シ・ク。ヲ・ヌ・」・・ッ・ネ・ | ・レ。シ・ク。ヲ・ニ。シ・ヨ・ ・レ。シ・ク | + * | 繝壹シ繧ク繝サ繝繧」繝ャ繧ッ繝医Μ | 繝壹シ繧ク繝サ繝繝シ繝悶Ν 繝壹シ繧ク | * | +--------------------+ | +-------------------+ +------------------+ | * | | | | | | | | | * | | | | +-------------------+ | | | @@ -179,241 +177,257 @@ static const UINT8 page_access_bit[32] = { * | | | | | | | | * +>+--------------------+ +>+-------------------+ +>+------------------+ * | - * +- CR3(ハェヘ・「・ノ・・ケ) + * +- CR3(迚ゥ逅繧「繝峨Ξ繧ケ) */ -static UINT32 MEMCALL paging(const UINT32 laddr, const int ucrw); -#if defined(IA32_SUPPORT_TLB) -static void MEMCALL tlb_update(const UINT32 laddr, const UINT entry, const int ucrw); -#endif +/* TLB */ +struct tlb_entry { + UINT32 tag; /* linear address */ +#define TLB_ENTRY_TAG_VALID (1 << 0) +/* pde & pte & CPU_PTE_WRITABLE (1 << 1) */ +/* pde & pte & CPU_PTE_USER_MODE (1 << 2) */ +#define TLB_ENTRY_TAG_DIRTY CPU_PTE_DIRTY /* (1 << 6) */ +#define TLB_ENTRY_TAG_GLOBAL CPU_PTE_GLOBAL_PAGE /* (1 << 8) */ +#define TLB_ENTRY_TAG_MAX_SHIFT 12 + UINT32 paddr; /* physical address */ +}; +static void MEMCALL tlb_update(UINT32 laddr, UINT entry, int ucrw); +/* paging */ +static UINT32 MEMCALL paging(UINT32 laddr, int ucrw); + +/* + * linear memory access + */ +/* RMW */ UINT8 MEMCALL -cpu_memory_access_la_RMW_b(UINT32 laddr, UINT32 (*func)(UINT32, void *), void *arg) +cpu_memory_access_la_RMW_b(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|CPU_STAT_USER_MODE; - UINT32 result, value; + const int ucrw = CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE; UINT32 paddr; + UINT32 result; + UINT8 value; paddr = paging(laddr, ucrw); value = cpu_memoryread(paddr); result = (*func)(value, arg); cpu_memorywrite(paddr, (UINT8)result); - return value; } UINT16 MEMCALL -cpu_memory_access_la_RMW_w(UINT32 laddr, UINT32 (*func)(UINT32, void *), void *arg) +cpu_memory_access_la_RMW_w(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|CPU_STAT_USER_MODE; - UINT32 result, value; + const int ucrw = CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE; UINT32 paddr[2]; + UINT32 result; + UINT16 value; paddr[0] = paging(laddr, ucrw); - if ((laddr + 1) & 0x00000fff) { + if ((laddr + 1) & CPU_PAGE_MASK) { value = cpu_memoryread_w(paddr[0]); result = (*func)(value, arg); cpu_memorywrite_w(paddr[0], (UINT16)result); - } else { - paddr[1] = paging(laddr + 1, ucrw); - value = cpu_memoryread_b(paddr[0]); - value += (UINT16)cpu_memoryread_b(paddr[1]) << 8; - result = (*func)(value, arg); - cpu_memorywrite(paddr[0], (UINT8)result); - cpu_memorywrite(paddr[1], (UINT8)(result >> 8)); + return value; } + + paddr[1] = paging(laddr + 1, ucrw); + value = cpu_memoryread_b(paddr[0]); + value += (UINT16)cpu_memoryread_b(paddr[1]) << 8; + result = (*func)(value, arg); + cpu_memorywrite(paddr[0], (UINT8)result); + cpu_memorywrite(paddr[1], (UINT8)(result >> 8)); return value; } UINT32 MEMCALL -cpu_memory_access_la_RMW_d(UINT32 laddr, UINT32 (*func)(UINT32, void *), void *arg) +cpu_memory_access_la_RMW_d(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|CPU_STAT_USER_MODE; - UINT32 result, value; + const int ucrw = CPU_PAGE_WRITE_DATA | CPU_STAT_USER_MODE; UINT32 paddr[2]; - UINT remain; + UINT32 result; + UINT32 value; + int remain; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); if (remain >= 4) { value = cpu_memoryread_d(paddr[0]); result = (*func)(value, arg); cpu_memorywrite_d(paddr[0], result); - } else { - paddr[1] = paging(laddr + remain, ucrw); - switch (remain) { - case 3: - value = cpu_memoryread(paddr[0]); - value += (UINT32)cpu_memoryread_w(paddr[0] + 1) << 8; - value += (UINT32)cpu_memoryread(paddr[1]) << 24; - result = (*func)(value, arg); - cpu_memorywrite(paddr[0], (UINT8)result); - cpu_memorywrite_w(paddr[0] + 1, (UINT16)(result >> 8)); - cpu_memorywrite(paddr[1], (UINT8)(result >> 24)); - break; - - case 2: - value = cpu_memoryread_w(paddr[0]); - value += (UINT32)cpu_memoryread_w(paddr[1]) << 16; - result = (*func)(value, arg); - cpu_memorywrite_w(paddr[0], (UINT16)result); - cpu_memorywrite_w(paddr[1], (UINT16)(result >> 16)); - break; - - case 1: - value = cpu_memoryread(paddr[0]); - value += (UINT32)cpu_memoryread_w(paddr[1]) << 8; - value += (UINT32)cpu_memoryread(paddr[1] + 2) << 24; - result = (*func)(value, arg); - cpu_memorywrite(paddr[0], (UINT8)result); - cpu_memorywrite_w(paddr[1], (UINT16)(result >> 8)); - cpu_memorywrite(paddr[1] + 2, (UINT8)(result >> 24)); - break; - - default: - ia32_panic("cpu_memory_access_la_RMW_d(): out of range (remain = %d)\n", remain); - return (UINT32)-1; - } + return value; + } + + paddr[1] = paging(laddr + remain, ucrw); + switch (remain) { + case 3: + value = cpu_memoryread(paddr[0]); + value += (UINT32)cpu_memoryread_w(paddr[0] + 1) << 8; + value += (UINT32)cpu_memoryread(paddr[1]) << 24; + result = (*func)(value, arg); + cpu_memorywrite(paddr[0], (UINT8)result); + cpu_memorywrite_w(paddr[0] + 1, (UINT16)(result >> 8)); + cpu_memorywrite(paddr[1], (UINT8)(result >> 24)); + break; + + case 2: + value = cpu_memoryread_w(paddr[0]); + value += (UINT32)cpu_memoryread_w(paddr[1]) << 16; + result = (*func)(value, arg); + cpu_memorywrite_w(paddr[0], (UINT16)result); + cpu_memorywrite_w(paddr[1], (UINT16)(result >> 16)); + break; + + case 1: + value = cpu_memoryread(paddr[0]); + value += (UINT32)cpu_memoryread_w(paddr[1]) << 8; + value += (UINT32)cpu_memoryread(paddr[1] + 2) << 24; + result = (*func)(value, arg); + cpu_memorywrite(paddr[0], (UINT8)result); + cpu_memorywrite_w(paddr[1], (UINT16)(result >> 8)); + cpu_memorywrite(paddr[1] + 2, (UINT8)(result >> 24)); + break; + + default: + ia32_panic("cpu_memory_access_la_RMW_d: out of range (remain=%d)\n", remain); + value = 0; /* XXX compiler happy */ + break; } return value; } +/* read */ UINT8 MEMCALL -cpu_linear_memory_read_b(UINT32 laddr, const int ucrw) +cpu_linear_memory_read_b(UINT32 laddr, int ucrw) { - UINT32 paddr; - paddr = paging(laddr, ucrw); - return cpu_memoryread(paddr); + return cpu_memoryread(paging(laddr, ucrw)); } UINT16 MEMCALL -cpu_linear_memory_read_w(UINT32 laddr, const int ucrw) +cpu_linear_memory_read_w(UINT32 laddr, int ucrw) { UINT32 paddr[2]; UINT16 value; paddr[0] = paging(laddr, ucrw); - if ((laddr + 1) & 0x00000fff) { + if ((laddr + 1) & CPU_PAGE_MASK) return cpu_memoryread_w(paddr[0]); - } else { - paddr[1] = paging(laddr + 1, ucrw); - value = cpu_memoryread_b(paddr[0]); - value += (UINT16)cpu_memoryread_b(paddr[1]) << 8; - return value; - } + + paddr[1] = paging(laddr + 1, ucrw); + value = cpu_memoryread_b(paddr[0]); + value += (UINT16)cpu_memoryread_b(paddr[1]) << 8; + return value; } UINT32 MEMCALL -cpu_linear_memory_read_d(UINT32 laddr, const int ucrw) +cpu_linear_memory_read_d(UINT32 laddr, int ucrw) { UINT32 paddr[2]; UINT32 value; UINT remain; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); - if (remain >= 4) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); + if (remain >= sizeof(value)) return cpu_memoryread_d(paddr[0]); - } else { - paddr[1] = paging(laddr + remain, ucrw); - switch (remain) { - case 3: - value = cpu_memoryread(paddr[0]); - value += (UINT32)cpu_memoryread_w(paddr[0] + 1) << 8; - value += (UINT32)cpu_memoryread(paddr[1]) << 24; - break; - - case 2: - value = cpu_memoryread_w(paddr[0]); - value += (UINT32)cpu_memoryread_w(paddr[1]) << 16; - break; - - case 1: - value = cpu_memoryread(paddr[0]); - value += (UINT32)cpu_memoryread_w(paddr[1]) << 8; - value += (UINT32)cpu_memoryread(paddr[1] + 2) << 24; - break; - - default: - ia32_panic("cpu_linear_memory_read_d(): out of range (remain = %d)\n", remain); - value = (UINT32)-1; - break; - } - return value; + + paddr[1] = paging(laddr + remain, ucrw); + switch (remain) { + case 3: + value = cpu_memoryread(paddr[0]); + value += (UINT32)cpu_memoryread_w(paddr[0] + 1) << 8; + value += (UINT32)cpu_memoryread(paddr[1]) << 24; + break; + + case 2: + value = cpu_memoryread_w(paddr[0]); + value += (UINT32)cpu_memoryread_w(paddr[1]) << 16; + break; + + case 1: + value = cpu_memoryread(paddr[0]); + value += (UINT32)cpu_memoryread_w(paddr[1]) << 8; + value += (UINT32)cpu_memoryread(paddr[1] + 2) << 24; + break; + + default: + ia32_panic("cpu_linear_memory_read_d: out of range (remain=%d)\n", remain); + value = 0; /* XXX compiler happy */ + break; } + return value; } UINT64 MEMCALL -cpu_linear_memory_read_q(UINT32 laddr, const int ucrw) +cpu_linear_memory_read_q(UINT32 laddr, int ucrw) { UINT32 paddr[2]; UINT64 value; UINT remain; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); - if (remain >= 8) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); + if (remain >= sizeof(value)) return cpu_memoryread_q(paddr[0]); - } else { - paddr[1] = paging(laddr + remain, ucrw); - switch (remain) { - case 7: - value = cpu_memoryread(paddr[0]); - value += (UINT64)cpu_memoryread_w(paddr[0] + 1) << 8; - value += (UINT64)cpu_memoryread_d(paddr[0] + 3) << 24; - value += (UINT64)cpu_memoryread(paddr[1]) << 56; - break; - - case 6: - value = cpu_memoryread_w(paddr[0]); - value += (UINT64)cpu_memoryread_d(paddr[0] + 2) << 16; - value += (UINT64)cpu_memoryread_w(paddr[1]) << 48; - break; - - case 5: - value = cpu_memoryread(paddr[0]); - value += (UINT64)cpu_memoryread_d(paddr[0] + 1) << 8; - value += (UINT64)cpu_memoryread_w(paddr[1]) << 40; - value += (UINT64)cpu_memoryread(paddr[1] + 1) << 56; - break; - - case 4: - value = cpu_memoryread_d(paddr[0]); - value += (UINT64)cpu_memoryread_d(paddr[1]) << 32; - break; - - case 3: - value = cpu_memoryread(paddr[0]); - value += (UINT64)cpu_memoryread_w(paddr[0] + 1) << 8; - value += (UINT64)cpu_memoryread_d(paddr[1]) << 24; - value += (UINT64)cpu_memoryread(paddr[1] + 4) << 56; - break; - - case 2: - value = cpu_memoryread_w(paddr[0]); - value += (UINT64)cpu_memoryread_d(paddr[1]) << 16; - value += (UINT64)cpu_memoryread_w(paddr[1] + 4) << 48; - break; - - case 1: - value = cpu_memoryread(paddr[0]); - value += (UINT64)cpu_memoryread_d(paddr[1]) << 8; - value += (UINT64)cpu_memoryread_w(paddr[1] + 4) << 40; - value += (UINT64)cpu_memoryread(paddr[1] + 6) << 56; - break; - - default: - ia32_panic("cpu_linear_memory_read_q(): out of range (remain = %d)\n", remain); - value = (UINT64)-1; - break; - } + + paddr[1] = paging(laddr + remain, ucrw); + switch (remain) { + case 7: + value = cpu_memoryread(paddr[0]); + value += (UINT64)cpu_memoryread_w(paddr[0] + 1) << 8; + value += (UINT64)cpu_memoryread_d(paddr[0] + 3) << 24; + value += (UINT64)cpu_memoryread(paddr[1]) << 56; + break; + + case 6: + value = cpu_memoryread_w(paddr[0]); + value += (UINT64)cpu_memoryread_d(paddr[0] + 2) << 16; + value += (UINT64)cpu_memoryread_w(paddr[1]) << 48; + break; + + case 5: + value = cpu_memoryread(paddr[0]); + value += (UINT64)cpu_memoryread_d(paddr[0] + 1) << 8; + value += (UINT64)cpu_memoryread_w(paddr[1]) << 40; + value += (UINT64)cpu_memoryread(paddr[1] + 2) << 56; + break; + + case 4: + value = cpu_memoryread_d(paddr[0]); + value += (UINT64)cpu_memoryread_d(paddr[1]) << 32; + break; + + case 3: + value = cpu_memoryread(paddr[0]); + value += (UINT64)cpu_memoryread_w(paddr[0] + 1) << 8; + value += (UINT64)cpu_memoryread_d(paddr[1]) << 24; + value += (UINT64)cpu_memoryread(paddr[1] + 4) << 56; + break; + + case 2: + value = cpu_memoryread_w(paddr[0]); + value += (UINT64)cpu_memoryread_d(paddr[1]) << 16; + value += (UINT64)cpu_memoryread_w(paddr[1] + 4) << 48; + break; + + case 1: + value = cpu_memoryread(paddr[0]); + value += (UINT64)cpu_memoryread_d(paddr[1]) << 8; + value += (UINT64)cpu_memoryread_w(paddr[1] + 4) << 40; + value += (UINT64)cpu_memoryread(paddr[1] + 6) << 56; + break; + + default: + ia32_panic("cpu_linear_memory_read_q: out of range (remain=%d)\n", remain); + value = 0; /* XXX compiler happy */ + break; } return value; } REG80 MEMCALL -cpu_linear_memory_read_f(UINT32 laddr, const int ucrw) +cpu_linear_memory_read_f(UINT32 laddr, int ucrw) { UINT32 paddr[2]; REG80 value; @@ -421,178 +435,183 @@ cpu_linear_memory_read_f(UINT32 laddr, const int ucrw) UINT i, j; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); - if (remain >= 10) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); + if (remain >= sizeof(value)) return cpu_memoryread_f(paddr[0]); - } else { - paddr[1] = paging(laddr + remain, ucrw); - for (i = 0; i < remain; ++i) { - value.b[i] = cpu_memoryread(paddr[0] + i); - } - for (j = 0; i < 10; ++i, ++j) { - value.b[i] = cpu_memoryread(paddr[1] + j); - } - return value; + + paddr[1] = paging(laddr + remain, ucrw); + for (i = 0; i < remain; ++i) { + value.b[i] = cpu_memoryread(paddr[0] + i); + } + for (j = 0; i < 10; ++i, ++j) { + value.b[i] = cpu_memoryread(paddr[1] + j); } + return value; } +/* write */ void MEMCALL -cpu_linear_memory_write_b(UINT32 laddr, UINT8 value, const int user_mode) +cpu_linear_memory_write_b(UINT32 laddr, UINT8 value, int ucrw) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|user_mode; - UINT32 paddr; - paddr = paging(laddr, ucrw); - cpu_memorywrite(paddr, value); + cpu_memorywrite(paging(laddr, ucrw), value); } void MEMCALL -cpu_linear_memory_write_w(UINT32 laddr, UINT16 value, const int user_mode) +cpu_linear_memory_write_w(UINT32 laddr, UINT16 value, int ucrw) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|user_mode; UINT32 paddr[2]; paddr[0] = paging(laddr, ucrw); - if ((laddr + 1) & 0x00000fff) { + if ((laddr + 1) & CPU_PAGE_MASK) { cpu_memorywrite_w(paddr[0], value); - } else { - paddr[1] = paging(laddr + 1, ucrw); - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite(paddr[1], (UINT8)(value >> 8)); + return; } + + paddr[1] = paging(laddr + 1, ucrw); + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite(paddr[1], (UINT8)(value >> 8)); } void MEMCALL -cpu_linear_memory_write_d(UINT32 laddr, UINT32 value, const int user_mode) +cpu_linear_memory_write_d(UINT32 laddr, UINT32 value, int ucrw) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|user_mode; UINT32 paddr[2]; UINT remain; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); - if (remain >= 4) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); + if (remain >= sizeof(value)) { cpu_memorywrite_d(paddr[0], value); - } else { - paddr[1] = paging(laddr + remain, ucrw); - switch (remain) { - case 3: - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite_w(paddr[0] + 1, (UINT16)(value >> 8)); - cpu_memorywrite(paddr[1], (UINT8)(value >> 24)); - break; - - case 2: - cpu_memorywrite_w(paddr[0], (UINT16)value); - cpu_memorywrite_w(paddr[1], (UINT16)(value >> 16)); - break; - - case 1: - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite_w(paddr[1], (UINT16)(value >> 8)); - cpu_memorywrite(paddr[1] + 2, (UINT8)(value >> 24)); - break; - } + return; + } + + paddr[1] = paging(laddr + remain, ucrw); + switch (remain) { + case 3: + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite_w(paddr[0] + 1, (UINT16)(value >> 8)); + cpu_memorywrite(paddr[1], (UINT8)(value >> 24)); + break; + + case 2: + cpu_memorywrite_w(paddr[0], (UINT16)value); + cpu_memorywrite_w(paddr[1], (UINT16)(value >> 16)); + break; + + case 1: + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite_w(paddr[1], (UINT16)(value >> 8)); + cpu_memorywrite(paddr[1] + 2, (UINT8)(value >> 24)); + break; + + default: + ia32_panic("cpu_linear_memory_write_d: out of range (remain=%d)\n", remain); + break; } } void MEMCALL -cpu_linear_memory_write_q(UINT32 laddr, UINT64 value, const int user_mode) +cpu_linear_memory_write_q(UINT32 laddr, UINT64 value, int ucrw) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|user_mode; UINT32 paddr[2]; UINT remain; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); - if (remain >= 8) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); + if (remain >= sizeof(value)) { cpu_memorywrite_q(paddr[0], value); - } else { - paddr[1] = paging(laddr + remain, ucrw); - switch (remain) { - case 7: - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite_w(paddr[0] + 1, (UINT16)(value >> 8)); - cpu_memorywrite_d(paddr[0] + 3, (UINT32)(value >> 24)); - cpu_memorywrite(paddr[1], (UINT8)(value >> 56)); - break; - - case 6: - cpu_memorywrite_d(paddr[0] + 2, (UINT32)(value >> 16)); - cpu_memorywrite_w(paddr[1], (UINT16)(value >> 48)); - break; - - case 5: - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite_d(paddr[0] + 1, (UINT32)(value >> 8)); - cpu_memorywrite_w(paddr[1], (UINT16)(value >> 40)); - cpu_memorywrite(paddr[1] + 2, (UINT8)(value >> 56)); - break; - - case 4: - cpu_memorywrite_d(paddr[0], (UINT32)value); - cpu_memorywrite_d(paddr[1], (UINT32)(value >> 32)); - break; - - case 3: - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite_w(paddr[0] + 1, (UINT16)(value >> 8)); - cpu_memorywrite_d(paddr[1], (UINT32)(value >> 24)); - cpu_memorywrite(paddr[1] + 4, (UINT8)(value >> 56)); - break; - - case 2: - cpu_memorywrite_w(paddr[0], (UINT16)value); - cpu_memorywrite_d(paddr[1], (UINT32)(value >> 16)); - cpu_memorywrite_w(paddr[1] + 4, (UINT16)(value >> 48)); - break; - - case 1: - cpu_memorywrite(paddr[0], (UINT8)value); - cpu_memorywrite_d(paddr[1], (UINT32)(value >> 8)); - cpu_memorywrite_w(paddr[1] + 4, (UINT16)(value >> 40)); - cpu_memorywrite(paddr[1] + 6, (UINT8)(value >> 56)); - break; - } + return; + } + + paddr[1] = paging(laddr + remain, ucrw); + switch (remain) { + case 7: + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite_w(paddr[0] + 1, (UINT16)(value >> 8)); + cpu_memorywrite_d(paddr[0] + 3, (UINT32)(value >> 24)); + cpu_memorywrite(paddr[1], (UINT8)(value >> 56)); + break; + + case 6: + cpu_memorywrite_w(paddr[0], (UINT16)value); + cpu_memorywrite_d(paddr[0] + 2, (UINT32)(value >> 16)); + cpu_memorywrite_w(paddr[1], (UINT16)(value >> 48)); + break; + + case 5: + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite_d(paddr[0] + 1, (UINT32)(value >> 8)); + cpu_memorywrite_w(paddr[1], (UINT16)(value >> 40)); + cpu_memorywrite(paddr[1] + 2, (UINT8)(value >> 56)); + break; + + case 4: + cpu_memorywrite_d(paddr[0], (UINT32)value); + cpu_memorywrite_d(paddr[1], (UINT32)(value >> 32)); + break; + + case 3: + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite_w(paddr[0] + 1, (UINT16)(value >> 8)); + cpu_memorywrite_d(paddr[1], (UINT32)(value >> 24)); + cpu_memorywrite(paddr[1] + 4, (UINT8)(value >> 56)); + break; + + case 2: + cpu_memorywrite_w(paddr[0], (UINT16)value); + cpu_memorywrite_d(paddr[1], (UINT32)(value >> 16)); + cpu_memorywrite_w(paddr[1] + 4, (UINT16)(value >> 48)); + break; + + case 1: + cpu_memorywrite(paddr[0], (UINT8)value); + cpu_memorywrite_d(paddr[1], (UINT32)(value >> 8)); + cpu_memorywrite_w(paddr[1] + 4, (UINT16)(value >> 40)); + cpu_memorywrite(paddr[1] + 6, (UINT8)(value >> 56)); + break; + + default: + ia32_panic("cpu_linear_memory_write_q: out of range (remain=%d)\n", remain); + break; } } void MEMCALL -cpu_linear_memory_write_f(UINT32 laddr, const REG80 *value, const int user_mode) +cpu_linear_memory_write_f(UINT32 laddr, const REG80 *value, int ucrw) { - const int ucrw = CPU_PAGE_WRITE|CPU_PAGE_DATA|user_mode; UINT32 paddr[2]; UINT remain; UINT i, j; paddr[0] = paging(laddr, ucrw); - remain = 0x1000 - (laddr & 0x00000fff); - if (remain >= 10) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); + if (remain >= sizeof(value)) { cpu_memorywrite_f(paddr[0], value); - } else { - paddr[1] = paging(laddr + remain, ucrw); - for (i = 0; i < remain; ++i) { - cpu_memorywrite(paddr[0] + i, value->b[i]); - } - for (j = 0; i < 10; ++i, ++j) { - cpu_memorywrite(paddr[1] + j, value->b[i]); - } + return; } -} + paddr[1] = paging(laddr + remain, ucrw); + for (i = 0; i < remain; ++i) { + cpu_memorywrite(paddr[0] + i, value->b[i]); + } + for (j = 0; i < 10; ++i, ++j) { + cpu_memorywrite(paddr[1] + j, value->b[i]); + } +} +/* + * linear address memory access function + */ void MEMCALL -cpu_memory_access_la_region(UINT32 laddr, UINT length, const int ucrw, BYTE *data) +cpu_memory_access_la_region(UINT32 laddr, UINT length, int ucrw, UINT8 *data) { UINT32 paddr; UINT remain; /* page remain */ UINT r; - if (length == 0) - return; - - remain = 0x1000 - (laddr & 0x00000fff); - for (;;) { + while (length > 0) { + remain = CPU_PAGE_SIZE - (laddr & CPU_PAGE_MASK); if (!CPU_STAT_PAGING) { paddr = laddr; } else { @@ -606,49 +625,26 @@ cpu_memory_access_la_region(UINT32 laddr, UINT length, const int ucrw, BYTE *dat cpu_memorywrite_region(paddr, data, r); } - length -= r; - if (length == 0) - break; - - data += r; laddr += r; - remain -= r; - if (remain <= 0) { - /* next page */ - remain += 0x1000; - } + data += r; + length -= r; } } -void MEMCALL -paging_check(UINT32 laddr, UINT length, const int ucrw) +UINT32 MEMCALL +laddr2paddr(UINT32 laddr, int ucrw) { - UINT32 paddr; - UINT remain; /* page remain */ - UINT r; - - remain = 0x1000 - (laddr & 0x00000fff); - for (;;) { - paddr = paging(laddr, ucrw); - - r = (remain > length) ? length : remain; - - length -= r; - if (length == 0) - break; - laddr += r; - remain -= r; - if (remain <= 0) { - /* next page */ - remain += 0x1000; - } - } + return paging(laddr, ucrw); } +/* + * paging + */ static UINT32 MEMCALL -paging(const UINT32 laddr, const int ucrw) +paging(UINT32 laddr, int ucrw) { + struct tlb_entry *ep; UINT32 paddr; /* physical address */ UINT32 pde_addr; /* page directory entry address */ UINT32 pde; /* page directory entry */ @@ -656,13 +652,10 @@ paging(const UINT32 laddr, const int ucrw) UINT32 pte; /* page table entry */ UINT bit; UINT err; -#if defined(IA32_SUPPORT_TLB) - TLB_ENTRY_T *ep; ep = tlb_lookup(laddr, ucrw); if (ep != NULL) - return ep->paddr + (laddr & 0xfff); -#endif + return ep->paddr + (laddr & CPU_PAGE_MASK); pde_addr = CPU_STAT_PDE_BASE + ((laddr >> 20) & 0xffc); pde = cpu_memoryread_d(pde_addr); @@ -693,7 +686,7 @@ paging(const UINT32 laddr, const int ucrw) } /* make physical address */ - paddr = (pte & CPU_PTE_BASEADDR_MASK) + (laddr & 0x00000fff); + paddr = (pte & CPU_PTE_BASEADDR_MASK) + (laddr & CPU_PAGE_MASK); bit = ucrw & (CPU_PAGE_WRITE|CPU_PAGE_USER_MODE); bit |= (pde & pte & (CPU_PTE_WRITABLE|CPU_PTE_USER_MODE)); @@ -718,9 +711,8 @@ paging(const UINT32 laddr, const int ucrw) cpu_memorywrite_d(pte_addr, pte); } -#if defined(IA32_SUPPORT_TLB) - tlb_update(laddr, pte, (bit & (CPU_PTE_WRITABLE|CPU_PTE_USER_MODE)) + ((ucrw & CPU_PAGE_CODE) >> 1)); -#endif + tlb_update(laddr, pte, (bit & (CPU_PTE_WRITABLE|CPU_PTE_USER_MODE)) + ((ucrw & CPU_PAGE_CODE) ? 1 : 0)); + return paddr; pf_exception: @@ -731,14 +723,9 @@ paging(const UINT32 laddr, const int ucrw) return 0; /* compiler happy */ } - -#if defined(IA32_SUPPORT_TLB) /* * TLB */ -#define TLB_GET_PADDR(ep, addr) ((ep)->paddr + ((addr) & ~CPU_PTE_BASEADDR_MASK)) -#define TLB_SET_PADDR(ep, addr) ((ep)->paddr = (addr) & CPU_PTE_BASEADDR_MASK) - #define TLB_TAG_SHIFT TLB_ENTRY_TAG_MAX_SHIFT #define TLB_TAG_MASK (~((1 << TLB_TAG_SHIFT) - 1)) #define TLB_GET_TAG_ADDR(ep) ((ep)->tag & TLB_TAG_MASK) @@ -758,7 +745,7 @@ do { \ #if (CPU_FEATURES & CPU_FEATURE_PGE) == CPU_FEATURE_PGE #define TLB_IS_GLOBAL(ep) ((ep)->tag & TLB_ENTRY_TAG_GLOBAL) #else -#define TLB_IS_GLOBAL(ep) FALSE +#define TLB_IS_GLOBAL(ep) 0 #endif #define TLB_SET_TAG_FLAGS(ep, entry, bit) \ @@ -773,60 +760,34 @@ do { \ #define TLB_ENTRY_MASK (NENTRY - 1) typedef struct { - TLB_ENTRY_T entry[NENTRY]; -} TLB_T; - -static TLB_T tlb[NTLB]; - -#if defined(IA32_PROFILE_TLB) -/* profiling */ -typedef struct { - UINT64 tlb_hits; - UINT64 tlb_misses; - UINT64 tlb_lookups; - UINT64 tlb_updates; - UINT64 tlb_flushes; - UINT64 tlb_global_flushes; - UINT64 tlb_entry_flushes; -} TLB_PROFILE_T; - -static TLB_PROFILE_T tlb_profile; - -#define PROFILE_INC(v) tlb_profile.v++ -#else /* !IA32_PROFILE_TLB */ -#define PROFILE_INC(v) -#endif /* IA32_PROFILE_TLB */ - + struct tlb_entry entry[NENTRY]; +} tlb_t; +static tlb_t tlb[NTLB]; void tlb_init(void) { memset(tlb, 0, sizeof(tlb)); -#if defined(IA32_PROFILE_TLB) - memset(tlb_profile, 0, sizeof(tlb_profile)); -#endif /* IA32_PROFILE_TLB */ } void MEMCALL tlb_flush(BOOL allflush) { - TLB_ENTRY_T *ep; + struct tlb_entry *ep; int i; int n; if (allflush) { - PROFILE_INC(tlb_global_flushes); - } else { - PROFILE_INC(tlb_flushes); + tlb_init(); + return; } for (n = 0; n < NTLB; n++) { for (i = 0; i < NENTRY ; i++) { ep = &tlb[n].entry[i]; - if (TLB_IS_VALID(ep) && (allflush || !TLB_IS_GLOBAL(ep))) { + if (TLB_IS_VALID(ep) && !TLB_IS_GLOBAL(ep)) { TLB_SET_INVALID(ep); - PROFILE_INC(tlb_entry_flushes); } } } @@ -835,12 +796,10 @@ tlb_flush(BOOL allflush) void MEMCALL tlb_flush_page(UINT32 laddr) { - TLB_ENTRY_T *ep; + struct tlb_entry *ep; int idx; int n; - PROFILE_INC(tlb_flushes); - idx = (laddr >> TLB_ENTRY_SHIFT) & TLB_ENTRY_MASK; for (n = 0; n < NTLB; n++) { @@ -848,23 +807,20 @@ tlb_flush_page(UINT32 laddr) if (TLB_IS_VALID(ep)) { if ((laddr & TLB_TAG_MASK) == TLB_GET_TAG_ADDR(ep)) { TLB_SET_INVALID(ep); - PROFILE_INC(tlb_entry_flushes); } } } } -TLB_ENTRY_T * MEMCALL -tlb_lookup(const UINT32 laddr, const int ucrw) +struct tlb_entry * MEMCALL +tlb_lookup(UINT32 laddr, int ucrw) { - TLB_ENTRY_T *ep; + struct tlb_entry *ep; UINT bit; int idx; int n; - PROFILE_INC(tlb_lookups); - - n = (ucrw & CPU_PAGE_CODE) >> 1; + n = (ucrw & CPU_PAGE_CODE) ? 1 : 0; idx = (laddr >> TLB_ENTRY_SHIFT) & TLB_ENTRY_MASK; ep = &tlb[n].entry[idx]; @@ -880,45 +836,27 @@ tlb_lookup(const UINT32 laddr, const int ucrw) #endif { if (!(ucrw & CPU_PAGE_WRITE) || TLB_IS_DIRTY(ep)) { - PROFILE_INC(tlb_hits); return ep; } } } } - PROFILE_INC(tlb_misses); return NULL; } static void MEMCALL -tlb_update(const UINT32 laddr, const UINT entry, const int bit) +tlb_update(UINT32 laddr, UINT entry, int bit) { - TLB_ENTRY_T *ep; - UINT32 pos; + struct tlb_entry *ep; int idx; int n; - PROFILE_INC(tlb_updates); - n = bit & 1; idx = (laddr >> TLB_ENTRY_SHIFT) & TLB_ENTRY_MASK; ep = &tlb[n].entry[idx]; TLB_SET_VALID(ep); TLB_SET_TAG_ADDR(ep, laddr); - TLB_SET_PADDR(ep, entry); TLB_SET_TAG_FLAGS(ep, entry, bit); - - if (ep->paddr < CPU_MEMREADMAX) { - ep->memp = mem + ep->paddr; - return; - } else if (ep->paddr >= USE_HIMEM) { - pos = (ep->paddr & CPU_ADRSMASK) - 0x100000; - if (pos < CPU_EXTMEMSIZE) { - ep->memp = CPU_EXTMEM + pos; - return; - } - } - ep->memp = NULL; + ep->paddr = entry & CPU_PTE_BASEADDR_MASK; } -#endif /* IA32_SUPPORT_TLB */ diff --git a/i386c/ia32/paging.h b/i386c/ia32/paging.h index 61996539..a6101911 100644 --- a/i386c/ia32/paging.h +++ b/i386c/ia32/paging.h @@ -1,5 +1,3 @@ -/* $Id: paging.h,v 1.21 2007/02/06 14:20:57 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -33,23 +31,23 @@ extern "C" { #endif /* - * ・レ。シ・ク。ヲ・ヌ・」・・ッ・ネ・遙ヲ・ィ・・ネ・ (4K ・ミ・、・ネ・レ。シ・クサネヘムサ) + * 繝壹シ繧ク繝サ繝繧」繝ャ繧ッ繝医Μ繝サ繧ィ繝ウ繝医Μ (4K 繝舌う繝医壹シ繧ク菴ソ逕ィ譎) * * 31 12 11 9 8 7 6 5 4 3 2 1 0 * +----------------------------------------+------+-+--+-+-+---+---+---+---+-+ - * | ・レ。シ・ク。ヲ・ニ。シ・ヨ・、ホ・ル。シ・ケ。ヲ・「・ノ・・ケ |サネヘムイト|G|PS|-|A|PCD|PWT|U/S|R/W|P| + * | 繝壹シ繧ク繝サ繝繝シ繝悶Ν縺ョ繝吶シ繧ケ繝サ繧「繝峨Ξ繧ケ |菴ソ逕ィ蜿ッ|G|PS|-|A|PCD|PWT|U/S|R/W|P| * +----------------------------------------+------+-+--+-+-+---+---+---+---+-+ * | | | | | | | | | | - * 9-11: ・キ・ケ・ニ・爍ヲ・ラ・・ー・鬣゙、ャサネヘムイトヌス --------+ | | | | | | | | | - * 8: ・ー・。シ・ミ・。ヲ・レ。シ・ク(フオサ、オ、、) ------------+ | | | | | | | | - * 7: ・レ。シ・ク。ヲ・オ・、・コ (0 = 4k ・ミ・、・ネ・レ。シ・ク) ---------+ | | | | | | | - * 6: ヘスフ (-) ---------------------------------------+ | | | | | | - * 5: ・「・ッ・サ・ケ -----------------------------------------+ | | | | | - * 4: ・ュ・罕テ・キ・衫オク --------------------------------------+ | | | | - * 3: ・鬣、・ネ・ケ・。シ --------------------------------------------+ | | | - * 2: ・譯シ・カ。ソ・ケ。シ・ム・ミ・、・カ (0 = ・ケ。シ・ム・ミ・、・カ) ---------------------+ | | - * 1: ニノ、゚シ隍遙ソス、ュケ、゚ (0 = ニノ、゚シ隍熙ホ、゚) ---------------------------+ | - * 0: ・レ。シ・クツクコ゚ ---------------------------------------------------------+ + * 9-11: 繧キ繧ケ繝繝繝サ繝励Ο繧ー繝ゥ繝槭′菴ソ逕ィ蜿ッ閭ス --------+ | | | | | | | | | + * 8: 繧ー繝ュ繝シ繝舌Ν繝サ繝壹シ繧ク(辟。隕悶&繧後k) ------------+ | | | | | | | | + * 7: 繝壹シ繧ク繝サ繧オ繧、繧コ (0 = 4k 繝舌う繝医壹シ繧ク) ---------+ | | | | | | | + * 6: 莠育エ (-) ---------------------------------------+ | | | | | | + * 5: 繧「繧ッ繧サ繧ケ -----------------------------------------+ | | | | | + * 4: 繧ュ繝」繝繧キ繝・辟。蜉ケ --------------------------------------+ | | | | + * 3: 繝ゥ繧、繝医せ繝ォ繝シ --------------------------------------------+ | | | + * 2: 繝ヲ繝シ繧カシ上せ繝シ繝代ヰ繧、繧カ (0 = 繧ケ繝シ繝代ヰ繧、繧カ) ---------------------+ | | + * 1: 隱ュ縺ソ蜿悶jシ乗嶌縺崎セシ縺ソ (0 = 隱ュ縺ソ蜿悶j縺ョ縺ソ) ---------------------------+ | + * 0: 繝壹シ繧ク蟄伜惠 ---------------------------------------------------------+ */ #define CPU_PDE_BASEADDR_MASK 0xfffff000 #define CPU_PDE_GLOBAL_PAGE (1 << 8) @@ -63,23 +61,23 @@ extern "C" { #define CPU_PDE_PRESENT (1 << 0) /* - * ・レ。シ・ク。ヲ・ヌ・」・・ッ・ネ・遙ヲ・ィ・・ネ・ (4M ・ミ・、・ネ・レ。シ・クサネヘムサ) + * 繝壹シ繧ク繝サ繝繧」繝ャ繧ッ繝医Μ繝サ繧ィ繝ウ繝医Μ (4M 繝舌う繝医壹シ繧ク菴ソ逕ィ譎) * * 31 22 21 12 11 9 8 7 6 5 4 3 2 1 0 * +----------------------------+-----------+------+-+--+-+-+---+---+---+---+-+ - * |・レ。シ・ク・ニ。シ・ヨ・、ホハェヘ・「・ノ・・ケ| ヘスフコム、゚ |サネヘムイト|G|PS|D|A|PCD|PWT|U/S|R/W|P| + * |繝壹シ繧ク繝繝シ繝悶Ν縺ョ迚ゥ逅繧「繝峨Ξ繧ケ| 莠育エ貂医∩ |菴ソ逕ィ蜿ッ|G|PS|D|A|PCD|PWT|U/S|R/W|P| * +----------------------------+-----------+------+-+--+-+-+---+---+---+---+-+ * | | | | | | | | | | - * 9-11: ・キ・ケ・ニ・爍ヲ・ラ・・ー・鬣゙、ャサネヘムイトヌス --------+ | | | | | | | | | - * 8: ・ー・。シ・ミ・。ヲ・レ。シ・ク ------------------------+ | | | | | | | | - * 7: ・レ。シ・ク。ヲ・オ・、・コ (1 = 4M ・ミ・、・ネ・レ。シ・ク) ---------+ | | | | | | | - * 6: ・タ。シ・ニ・」 ---------------------------------------+ | | | | | | - * 5: ・「・ッ・サ・ケ -----------------------------------------+ | | | | | - * 4: ・ュ・罕テ・キ・衫オク --------------------------------------+ | | | | - * 3: ・鬣、・ネ・ケ・。シ --------------------------------------------+ | | | - * 2: ・譯シ・カ。ソ・ケ。シ・ム・ミ・、・カ (0 = ・ケ。シ・ム・ミ・、・カ) ---------------------+ | | - * 1: ニノ、゚シ隍遙ソス、ュケ、゚ (0 = ニノ、゚シ隍熙ホ、゚) ---------------------------+ | - * 0: ・レ。シ・クツクコ゚ ---------------------------------------------------------+ + * 9-11: 繧キ繧ケ繝繝繝サ繝励Ο繧ー繝ゥ繝槭′菴ソ逕ィ蜿ッ閭ス --------+ | | | | | | | | | + * 8: 繧ー繝ュ繝シ繝舌Ν繝サ繝壹シ繧ク ------------------------+ | | | | | | | | + * 7: 繝壹シ繧ク繝サ繧オ繧、繧コ (1 = 4M 繝舌う繝医壹シ繧ク) ---------+ | | | | | | | + * 6: 繝繝シ繝繧」 ---------------------------------------+ | | | | | | + * 5: 繧「繧ッ繧サ繧ケ -----------------------------------------+ | | | | | + * 4: 繧ュ繝」繝繧キ繝・辟。蜉ケ --------------------------------------+ | | | | + * 3: 繝ゥ繧、繝医せ繝ォ繝シ --------------------------------------------+ | | | + * 2: 繝ヲ繝シ繧カシ上せ繝シ繝代ヰ繧、繧カ (0 = 繧ケ繝シ繝代ヰ繧、繧カ) ---------------------+ | | + * 1: 隱ュ縺ソ蜿悶jシ乗嶌縺崎セシ縺ソ (0 = 隱ュ縺ソ蜿悶j縺ョ縺ソ) ---------------------------+ | + * 0: 繝壹シ繧ク蟄伜惠 ---------------------------------------------------------+ */ #define CPU_PDE_4M_BASEADDR_MASK 0xffc00000 #define CPU_PDE_4M_GLOBAL_PAGE (1 << 8) @@ -93,23 +91,23 @@ extern "C" { #define CPU_PDE_4M_PRESENT (1 << 0) /* - * ・レ。シ・ク。ヲ・ニ。シ・ヨ・。ヲ・ィ・・ネ・ (4k ・ミ・、・ネ。ヲ・レ。シ・ク) + * 繝壹シ繧ク繝サ繝繝シ繝悶Ν繝サ繧ィ繝ウ繝医Μ (4k 繝舌う繝医サ繝壹シ繧ク) * * 31 12 11 9 8 7 6 5 4 3 2 1 0 * +----------------------------------------+------+-+-+-+-+---+---+---+---+-+ - * | ・レ。シ・ク、ホ・ル。シ・ケ。ヲ・「・ノ・・ケ |サネヘムイト|G|-|D|A|PCD|PWT|U/S|R/W|P| + * | 繝壹シ繧ク縺ョ繝吶シ繧ケ繝サ繧「繝峨Ξ繧ケ |菴ソ逕ィ蜿ッ|G|-|D|A|PCD|PWT|U/S|R/W|P| * +----------------------------------------+------+-+-+-+-+---+---+---+---+-+ * | | | | | | | | | | - * 9-11: ・キ・ケ・ニ・爍ヲ・ラ・・ー・鬣゙、ャサネヘムイトヌス -------+ | | | | | | | | | - * 8: ・ー・。シ・ミ・。ヲ・レ。シ・ク -----------------------+ | | | | | | | | - * 7: ヘスフ (-) -----------------------------------+ | | | | | | | - * 6: ・タ。シ・ニ・」 -------------------------------------+ | | | | | | - * 5: ・「・ッ・サ・ケ ---------------------------------------+ | | | | | - * 4: ・ュ・罕テ・キ・衫オク ------------------------------------+ | | | | - * 3: ・鬣、・ネ・ケ・。シ ------------------------------------------+ | | | - * 2: ・譯シ・カ。ソ・ケ。シ・ム・ミ・、・カ (0 = ・ケ。シ・ム・ミ・、・カ) -------------------+ | | - * 1: ニノ、゚シ隍遙ソス、ュケ、゚ (0 = ニノ、゚シ隍熙ホ、゚) -------------------------+ | - * 0: ・レ。シ・クツクコ゚ -------------------------------------------------------+ + * 9-11: 繧キ繧ケ繝繝繝サ繝励Ο繧ー繝ゥ繝槭′菴ソ逕ィ蜿ッ閭ス -------+ | | | | | | | | | + * 8: 繧ー繝ュ繝シ繝舌Ν繝サ繝壹シ繧ク -----------------------+ | | | | | | | | + * 7: 莠育エ (-) -----------------------------------+ | | | | | | | + * 6: 繝繝シ繝繧」 -------------------------------------+ | | | | | | + * 5: 繧「繧ッ繧サ繧ケ ---------------------------------------+ | | | | | + * 4: 繧ュ繝」繝繧キ繝・辟。蜉ケ ------------------------------------+ | | | | + * 3: 繝ゥ繧、繝医せ繝ォ繝シ ------------------------------------------+ | | | + * 2: 繝ヲ繝シ繧カシ上せ繝シ繝代ヰ繧、繧カ (0 = 繧ケ繝シ繝代ヰ繧、繧カ) -------------------+ | | + * 1: 隱ュ縺ソ蜿悶jシ乗嶌縺崎セシ縺ソ (0 = 隱ュ縺ソ蜿悶j縺ョ縺ソ) -------------------------+ | + * 0: 繝壹シ繧ク蟄伜惠 -------------------------------------------------------+ */ #define CPU_PTE_BASEADDR_MASK 0xfffff000 #define CPU_PTE_GLOBAL_PAGE (1 << 8) @@ -122,12 +120,8 @@ extern "C" { #define CPU_PTE_WRITABLE (1 << 1) #define CPU_PTE_PRESENT (1 << 0) - -/* - * linear address memory access function - */ -void MEMCALL cpu_memory_access_la_region(UINT32 address, UINT length, const int ucrw, BYTE *data); -void MEMCALL paging_check(UINT32 laddr, UINT length, const int ucrw); +#define CPU_PAGE_SIZE 0x1000 +#define CPU_PAGE_MASK (CPU_PAGE_SIZE - 1) /* ucrw */ #define CPU_PAGE_WRITE (1 << 0) @@ -138,104 +132,213 @@ void MEMCALL paging_check(UINT32 laddr, UINT length, const int ucrw); #define CPU_PAGE_READ_DATA (CPU_PAGE_DATA) #define CPU_PAGE_WRITE_DATA (CPU_PAGE_WRITE|CPU_PAGE_DATA) -UINT8 MEMCALL cpu_memory_access_la_RMW_b(UINT32 laddr, UINT32 (*func)(UINT32, void *), void *arg); -UINT16 MEMCALL cpu_memory_access_la_RMW_w(UINT32 laddr, UINT32 (*func)(UINT32, void *), void *arg); -UINT32 MEMCALL cpu_memory_access_la_RMW_d(UINT32 laddr, UINT32 (*func)(UINT32, void *), void *arg); -UINT8 MEMCALL cpu_linear_memory_read_b(UINT32 laddr, const int ucrw); -UINT16 MEMCALL cpu_linear_memory_read_w(UINT32 laddr, const int ucrw); -UINT32 MEMCALL cpu_linear_memory_read_d(UINT32 laddr, const int ucrw); -UINT64 MEMCALL cpu_linear_memory_read_q(UINT32 laddr, const int ucrw); -REG80 MEMCALL cpu_linear_memory_read_f(UINT32 laddr, const int ucrw); -void MEMCALL cpu_linear_memory_write_b(UINT32 laddr, UINT8 value, const int user_mode); -void MEMCALL cpu_linear_memory_write_w(UINT32 laddr, UINT16 value, const int user_mode); -void MEMCALL cpu_linear_memory_write_d(UINT32 laddr, UINT32 value, const int user_mode); -void MEMCALL cpu_linear_memory_write_q(UINT32 laddr, UINT64 value, const int user_mode); -void MEMCALL cpu_linear_memory_write_f(UINT32 laddr, const REG80 *value, const int user_mode); - -#define cpu_lmemoryread(a,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memoryread(a) : \ - cpu_linear_memory_read_b(a,CPU_PAGE_READ_DATA | (pl)) -#define cpu_lmemoryread_b(a,pl) cpu_lmemoryread(a,pl) -#define cpu_lmemoryread_w(a,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memoryread_w(a) : \ - cpu_linear_memory_read_w(a,CPU_PAGE_READ_DATA | (pl)) -#define cpu_lmemoryread_d(a,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memoryread_d(a) : \ - cpu_linear_memory_read_d(a,CPU_PAGE_READ_DATA | (pl)) -#define cpu_lmemoryread_q(a,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memoryread_q(a) : \ - cpu_linear_memory_read_q(a,CPU_PAGE_READ_DATA | (pl)) - -#define cpu_lmemorywrite(a,v,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memorywrite(a,v) : cpu_linear_memory_write_b(a,v,pl) -#define cpu_lmemorywrite_b(a,v,pl) cpu_lmemorywrite(a,v,pl) -#define cpu_lmemorywrite_w(a,v,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memorywrite_w(a,v) : cpu_linear_memory_write_w(a,v,pl) -#define cpu_lmemorywrite_d(a,v,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memorywrite_d(a,v) : cpu_linear_memory_write_d(a,v,pl) -#define cpu_lmemorywrite_q(a,v,pl) \ - (!CPU_STAT_PAGING) ? \ - cpu_memorywrite_q(a,v) : cpu_linear_memory_write_q(a,v,pl) +UINT8 MEMCALL cpu_memory_access_la_RMW_b(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg); +UINT16 MEMCALL cpu_memory_access_la_RMW_w(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg); +UINT32 MEMCALL cpu_memory_access_la_RMW_d(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg); +UINT8 MEMCALL cpu_linear_memory_read_b(UINT32 laddr, int ucrw); +UINT16 MEMCALL cpu_linear_memory_read_w(UINT32 laddr, int ucrw); +UINT32 MEMCALL cpu_linear_memory_read_d(UINT32 laddr, int ucrw); +UINT64 MEMCALL cpu_linear_memory_read_q(UINT32 laddr, int ucrw); +REG80 MEMCALL cpu_linear_memory_read_f(UINT32 laddr, int ucrw); +void MEMCALL cpu_linear_memory_write_b(UINT32 laddr, UINT8 value, int ucrw); +void MEMCALL cpu_linear_memory_write_w(UINT32 laddr, UINT16 value, int ucrw); +void MEMCALL cpu_linear_memory_write_d(UINT32 laddr, UINT32 value, int ucrw); +void MEMCALL cpu_linear_memory_write_q(UINT32 laddr, UINT64 value, int ucrw); +void MEMCALL cpu_linear_memory_write_f(UINT32 laddr, const REG80 *value, int ucrw); /* - * linear address memory access with superviser mode + * linear address memory access function with TLB */ -#define cpu_kmemoryread(a) cpu_lmemoryread(a,CPU_MODE_SUPERVISER) -#define cpu_kmemoryread_w(a) cpu_lmemoryread_w(a,CPU_MODE_SUPERVISER) -#define cpu_kmemoryread_d(a) cpu_lmemoryread_d(a,CPU_MODE_SUPERVISER) -#define cpu_kmemorywrite(a,v) cpu_lmemorywrite(a,v,CPU_MODE_SUPERVISER) -#define cpu_kmemorywrite_w(a,v) cpu_lmemorywrite_w(a,v,CPU_MODE_SUPERVISER) -#define cpu_kmemorywrite_d(a,v) cpu_lmemorywrite_d(a,v,CPU_MODE_SUPERVISER) +/* RMW */ +STATIC_INLINE UINT8 MEMCALL +cpu_lmemory_RMW_b(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) +{ + UINT32 result; + UINT8 value; + + if (!CPU_STAT_PAGING) { + value = cpu_memoryread_b(laddr); + result = (*func)(value, arg); + cpu_memorywrite_b(laddr, result); + return value; + } + return cpu_memory_access_la_RMW_b(laddr, func, arg); +} +STATIC_INLINE UINT16 MEMCALL +cpu_lmemory_RMW_w(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) +{ + UINT32 result; + UINT16 value; -/* - * CR3 (Page Directory Entry base physical address) - */ -#define set_CR3(cr3) \ -do { \ - VERBOSE(("set_CR3: old = %08x, new = 0x%08x", CPU_CR3, (cr3) & CPU_CR3_MASK)); \ - CPU_CR3 = (cr3) & CPU_CR3_MASK; \ - CPU_STAT_PDE_BASE = CPU_CR3 & CPU_CR3_PD_MASK; \ - tlb_flush(FALSE); \ -} while (/*CONSTCOND*/ 0) + if (!CPU_STAT_PAGING) { + value = cpu_memoryread_w(laddr); + result = (*func)(value, arg); + cpu_memorywrite_w(laddr, result); + return value; + } + return cpu_memory_access_la_RMW_w(laddr, func, arg); +} + +STATIC_INLINE UINT32 MEMCALL +cpu_lmemory_RMW_d(UINT32 laddr, UINT32 (CPUCALL *func)(UINT32, void *), void *arg) +{ + UINT32 result; + UINT32 value; + + if (!CPU_STAT_PAGING) { + value = cpu_memoryread_d(laddr); + result = (*func)(value, arg); + cpu_memorywrite_d(laddr, result); + return value; + } + return cpu_memory_access_la_RMW_d(laddr, func, arg); +} + +/* read */ +STATIC_INLINE UINT8 MEMCALL +cpu_lmemoryread_b(UINT32 laddr, int ucrw) +{ + + if (!CPU_STAT_PAGING) + return cpu_memoryread_b(laddr); + return cpu_linear_memory_read_b(laddr, ucrw); +} +#define cpu_lmemoryread(a,ucrw) cpu_lmemoryread_b((a),(ucrw)) + +STATIC_INLINE UINT16 MEMCALL +cpu_lmemoryread_w(UINT32 laddr, int ucrw) +{ + + if (!CPU_STAT_PAGING) + return cpu_memoryread_w(laddr); + return cpu_linear_memory_read_w(laddr, ucrw); +} + +STATIC_INLINE UINT32 MEMCALL +cpu_lmemoryread_d(UINT32 laddr, int ucrw) +{ + + if (!CPU_STAT_PAGING) + return cpu_memoryread_d(laddr); + return cpu_linear_memory_read_d(laddr, ucrw); +} + +STATIC_INLINE UINT64 +cpu_lmemoryread_q(UINT32 laddr, int ucrw) +{ + + if (!CPU_STAT_PAGING) + return cpu_memoryread_q(laddr); + return cpu_linear_memory_read_q(laddr, ucrw); +} + +STATIC_INLINE REG80 +cpu_lmemoryread_f(UINT32 laddr, int ucrw) +{ + + if (!CPU_STAT_PAGING) + return cpu_memoryread_f(laddr); + return cpu_linear_memory_read_f(laddr, ucrw); +} + +/* write */ +STATIC_INLINE void MEMCALL +cpu_lmemorywrite_b(UINT32 laddr, UINT8 value, int ucrw) +{ + + if (!CPU_STAT_PAGING) { + cpu_memorywrite_b(laddr, value); + return; + } + cpu_linear_memory_write_b(laddr, value, ucrw); +} +#define cpu_lmemorywrite(a,v,ucrw) cpu_lmemorywrite_b((a),(v),(ucrw)) + +STATIC_INLINE void MEMCALL +cpu_lmemorywrite_w(UINT32 laddr, UINT16 value, int ucrw) +{ + + if (!CPU_STAT_PAGING) { + cpu_memorywrite_w(laddr, value); + return; + } + cpu_linear_memory_write_w(laddr, value, ucrw); +} + +STATIC_INLINE void MEMCALL +cpu_lmemorywrite_d(UINT32 laddr, UINT32 value, int ucrw) +{ + + if (!CPU_STAT_PAGING) { + cpu_memorywrite_d(laddr, value); + return; + } + cpu_linear_memory_write_d(laddr, value, ucrw); +} + +STATIC_INLINE void MEMCALL +cpu_lmemorywrite_q(UINT32 laddr, UINT64 value, int ucrw) +{ + + if (!CPU_STAT_PAGING) { + cpu_memorywrite_q(laddr, value); + return; + } + cpu_linear_memory_write_q(laddr, value, ucrw); +} + +STATIC_INLINE void MEMCALL +cpu_lmemorywrite_f(UINT32 laddr, const REG80 *value, int ucrw) +{ + + if (!CPU_STAT_PAGING) { + cpu_memorywrite_f(laddr, value); + return; + } + cpu_linear_memory_write_f(laddr, value, ucrw); +} /* - * TLB function + * linear address memory access with superviser mode */ -typedef struct { - UINT32 tag; /* linear address */ -#define TLB_ENTRY_TAG_VALID (1 << 0) -/* pde & pte & CPU_PTE_WRITABLE (1 << 1) */ -/* pde & pte & CPU_PTE_USER_MODE (1 << 2) */ -#define TLB_ENTRY_TAG_DIRTY CPU_PTE_DIRTY /* (1 << 6) */ -#define TLB_ENTRY_TAG_GLOBAL CPU_PTE_GLOBAL_PAGE /* (1 << 8) */ -#define TLB_ENTRY_TAG_MAX_SHIFT 12 +#define cpu_kmemoryread(a) \ + cpu_lmemoryread((a),CPU_PAGE_READ_DATA|CPU_MODE_SUPERVISER) +#define cpu_kmemoryread_w(a) \ + cpu_lmemoryread_w((a),CPU_PAGE_READ_DATA|CPU_MODE_SUPERVISER) +#define cpu_kmemoryread_d(a) \ + cpu_lmemoryread_d((a),CPU_PAGE_READ_DATA|CPU_MODE_SUPERVISER) +#define cpu_kmemorywrite(a,v) \ + cpu_lmemorywrite((a),(v),CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER) +#define cpu_kmemorywrite_w(a,v) \ + cpu_lmemorywrite_w((a),(v),CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER) +#define cpu_kmemorywrite_d(a,v) \ + cpu_lmemorywrite_d((a),(v),CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER) - UINT32 paddr; /* physical address */ +/* + * linear address memory access function + */ +void MEMCALL cpu_memory_access_la_region(UINT32 address, UINT length, int ucrw, UINT8 *data); +UINT32 MEMCALL laddr2paddr(UINT32 laddr, int ucrw); - UINT8 *memp; /* shortcut for pre-fetch queue */ -} TLB_ENTRY_T; +STATIC_INLINE UINT32 MEMCALL +laddr_to_paddr(UINT32 laddr, int ucrw) +{ + if (!CPU_STAT_PAGING) + return laddr; + return laddr2paddr(laddr, ucrw); +} -#if defined(IA32_SUPPORT_TLB) +/* + * TLB function + */ +struct tlb_entry; void tlb_init(void); void MEMCALL tlb_flush(BOOL allflush); void MEMCALL tlb_flush_page(UINT32 laddr); -TLB_ENTRY_T* MEMCALL tlb_lookup(const UINT32 laddr, const int ucrw); -#else -#define tlb_init() -#define tlb_flush(allflush) (void)(allflush) -#define tlb_flush_page(la) (void)(la) -#define tlb_lookup(la, ucrw) NULL -#endif +struct tlb_entry *MEMCALL tlb_lookup(UINT32 laddr, int ucrw); #ifdef __cplusplus } diff --git a/i386c/ia32/resolve.c b/i386c/ia32/resolve.c index 3efcad3b..3a9f0ae4 100644 --- a/i386c/ia32/resolve.c +++ b/i386c/ia32/resolve.c @@ -1,5 +1,3 @@ -/* $Id: resolve.c,v 1.9 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. diff --git a/i386c/ia32/resolve.h b/i386c/ia32/resolve.h index b0ca97cd..46154059 100644 --- a/i386c/ia32/resolve.h +++ b/i386c/ia32/resolve.h @@ -1,5 +1,3 @@ -/* $Id: resolve.h,v 1.6 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -34,7 +32,7 @@ extern "C" { void resolve_init(void); -INLINE static UINT32 +STATIC_INLINE UINT32 CPUCALL calc_ea_dst(UINT32 op) { extern UINT32 (*calc_ea_dst_tbl[0x100])(void); diff --git a/i386c/ia32/segments.c b/i386c/ia32/segments.c index 0fb95971..d93cff49 100644 --- a/i386c/ia32/segments.c +++ b/i386c/ia32/segments.c @@ -1,5 +1,3 @@ -/* $Id: segments.c,v 1.18 2008/01/25 17:53:27 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -29,36 +27,31 @@ #include "cpu.h" #include "ia32.mcr" +static void CPUCALL segdesc_set_default(int, UINT16, descriptor_t *); -void -load_segreg(int idx, UINT16 selector, int exc) +void CPUCALL +load_segreg(int idx, UINT16 selector, UINT16 *sregp, descriptor_t *sdp, int exc) { selector_t sel; int rv; __ASSERT((unsigned int)idx < CPU_SEGREG_NUM); + __ASSERT((sregp != NULL)); + __ASSERT((sdp != NULL)); if (!CPU_STAT_PM || CPU_STAT_VM86) { - descriptor_t sd; - /* real-mode or vm86 mode */ - CPU_REGS_SREG(idx) = selector; - - memset(&sd, 0, sizeof(sd)); - if (idx == CPU_CS_INDEX) { - sd.rpl = CPU_STAT_CPL; - } - sd.u.seg.limit = CPU_STAT_SREGLIMIT(idx); - CPU_SET_SEGDESC_DEFAULT(&sd, idx, selector); - CPU_STAT_SREG(idx) = sd; + *sregp = selector; + segdesc_set_default(idx, selector, &sel.desc); + *sdp = sel.desc; return; } + VERBOSE(("load_segreg: EIP = %04x:%08x, idx = %d, selector = %04x, sregp = %p, dp = %p, exc = %d", CPU_CS, CPU_PREV_EIP, idx, selector, sregp, sdp, exc)); + /* * protected mode */ - VERBOSE(("load_segreg: EIP = %04x:%08x, idx = %d, selector = %04x, exc = %d", CPU_CS, CPU_PREV_EIP, idx, selector, exc)); - if (idx == CPU_CS_INDEX) { ia32_panic("load_segreg: CS"); } @@ -68,8 +61,9 @@ load_segreg(int idx, UINT16 selector, int exc) if ((rv != -2) || (idx == CPU_SS_INDEX)) { EXCEPTION(exc, sel.idx); } - CPU_REGS_SREG(idx) = sel.selector; - CPU_STAT_SREG_CLEAR(idx); + /* null selector */ + *sregp = sel.selector; + memset(sdp, 0, sizeof(*sdp)); return; } @@ -77,9 +71,9 @@ load_segreg(int idx, UINT16 selector, int exc) case CPU_SS_INDEX: if ((CPU_STAT_CPL != sel.rpl) || (CPU_STAT_CPL != sel.desc.dpl) - || !sel.desc.s - || sel.desc.u.seg.c - || !sel.desc.u.seg.wr) { + || SEG_IS_SYSTEM(&sel.desc) + || SEG_IS_CODE(&sel.desc) + || !SEG_IS_WRITABLE_DATA(&sel.desc)) { EXCEPTION(exc, sel.idx); } @@ -89,22 +83,22 @@ load_segreg(int idx, UINT16 selector, int exc) EXCEPTION(SS_EXCEPTION, sel.idx); } - load_ss(sel.selector, &sel.desc, sel.selector & 3); + load_ss(sel.selector, &sel.desc, CPU_STAT_CPL); break; case CPU_ES_INDEX: case CPU_DS_INDEX: case CPU_FS_INDEX: case CPU_GS_INDEX: - /* !(system segment || non-readable code segment) */ - if (!sel.desc.s - || (sel.desc.u.seg.c && !sel.desc.u.seg.wr)) { + if (SEG_IS_SYSTEM(&sel.desc) + || (SEG_IS_CODE(&sel.desc) && !SEG_IS_READABLE_CODE(&sel.desc))) { EXCEPTION(exc, sel.idx); } - /* data segment || non-conforming code segment */ - if (!sel.desc.u.seg.c || !sel.desc.u.seg.ec) { + if (SEG_IS_DATA(&sel.desc) + || !SEG_IS_CONFORMING_CODE(&sel.desc)) { /* check privilege level */ - if ((sel.rpl > sel.desc.dpl) || (CPU_STAT_CPL > sel.desc.dpl)) { + if ((sel.rpl > sel.desc.dpl) + || (CPU_STAT_CPL > sel.desc.dpl)) { EXCEPTION(exc, sel.idx); } } @@ -115,8 +109,8 @@ load_segreg(int idx, UINT16 selector, int exc) EXCEPTION(NP_EXCEPTION, sel.idx); } - CPU_REGS_SREG(idx) = sel.selector; - CPU_STAT_SREG(idx) = sel.desc; + *sregp = sel.selector; + *sdp = sel.desc; break; default: @@ -128,43 +122,47 @@ load_segreg(int idx, UINT16 selector, int exc) /* * load SS register */ -void -load_ss(UINT16 selector, const descriptor_t *sd, UINT cpl) +void CPUCALL +load_ss(UINT16 selector, const descriptor_t *sdp, int cpl) { - CPU_STAT_SS32 = sd->d; - CPU_REGS_SREG(CPU_SS_INDEX) = (UINT16)((selector & ~3) | (cpl & 3)); - CPU_STAT_SREG(CPU_SS_INDEX) = *sd; + CPU_STAT_SS32 = sdp->d; + CPU_SS = (UINT16)((selector & ~3) | (cpl & 3)); + CPU_SS_DESC = *sdp; } /* * load CS register */ -void -load_cs(UINT16 selector, const descriptor_t *sd, UINT cpl) +void CPUCALL +load_cs(UINT16 selector, const descriptor_t *sdp, int new_cpl) { + int cpl = new_cpl & 3; CPU_INST_OP32 = CPU_INST_AS32 = CPU_STATSAVE.cpu_inst_default.op_32 = - CPU_STATSAVE.cpu_inst_default.as_32 = sd->d; - CPU_REGS_SREG(CPU_CS_INDEX) = (UINT16)((selector & ~3) | (cpl & 3)); - CPU_STAT_SREG(CPU_CS_INDEX) = *sd; - CPU_SET_CPL(cpl & 3); + CPU_STATSAVE.cpu_inst_default.as_32 = sdp->d; + CPU_CS = (UINT16)((selector & ~3) | cpl); + CPU_CS_DESC = *sdp; + set_cpl(cpl); } /* * load LDT register */ -void +void CPUCALL load_ldtr(UINT16 selector, int exc) { selector_t sel; int rv; + memset(&sel, 0, sizeof(sel)); + rv = parse_selector(&sel, selector); if (rv < 0 || sel.ldt) { if (rv == -2) { /* null segment */ + VERBOSE(("load_ldtr: null segment")); CPU_LDTR = 0; memset(&CPU_LDTR_DESC, 0, sizeof(CPU_LDTR_DESC)); return; @@ -173,23 +171,11 @@ load_ldtr(UINT16 selector, int exc) } /* check descriptor type */ - if (sel.desc.s || (sel.desc.type != CPU_SYSDESC_TYPE_LDT)) { + if (!SEG_IS_SYSTEM(&sel.desc) + || (sel.desc.type != CPU_SYSDESC_TYPE_LDT)) { EXCEPTION(exc, sel.selector); } -#if 0 - /* - * LEMM 、ホオニー、隍 LDT ・サ・ー・皈・ネ、ホ・・゚・テ・ネ・チ・ァ・テ・ッス靉、フオクイス - * - * セノセ」ア:・・゚・テ・ネ 0 、ホ LDT ・サ・・ッ・ソ、 LLDT 、マツフフワ、テ、ン、、。」 - * ツミコ」ア:・・゚・テ・ネ 0 、ホ LDT ・サ・・ッ・ソ、ホツ螟、熙ヒ・フ・・サ・・ッ・ソ、 LLDT。」 - */ - /* check limit */ - if (sel.desc.u.seg.limit < 7) { - ia32_panic("load_ldtr: LDTR descriptor limit < 7 (limit = %d)", sel.desc.u.seg.limit); - } -#endif - /* not present */ rv = selector_is_not_present(&sel); if (rv < 0) { @@ -204,101 +190,88 @@ load_ldtr(UINT16 selector, int exc) CPU_LDTR_DESC = sel.desc; } -void -load_descriptor(descriptor_t *descp, UINT32 addr) +void CPUCALL +load_descriptor(descriptor_t *sdp, UINT32 addr) { UINT32 l, h; - memset(descp, 0, sizeof(*descp)); + __ASSERT(sdp != NULL); + + VERBOSE(("load_descriptor: address = 0x%08x", addr)); l = cpu_kmemoryread_d(addr); h = cpu_kmemoryread_d(addr + 4); - VERBOSE(("load_descriptor: descriptor address = 0x%08x, h = 0x%08x, l = %08x", addr, h, l)); - - descp->flag = 0; + VERBOSE(("descriptor value = 0x%08x%08x", h, l)); - descp->p = (h & CPU_DESC_H_P) == CPU_DESC_H_P; - descp->type = (UINT8)((h & CPU_DESC_H_TYPE) >> 8); - descp->dpl = (UINT8)((h & CPU_DESC_H_DPL) >> 13); - descp->s = (h & CPU_DESC_H_S) == CPU_DESC_H_S; + memset(sdp, 0, sizeof(*sdp)); + sdp->flag = 0; - VERBOSE(("load_descriptor: present = %s, type = %d, DPL = %d", descp->p ? "true" : "false", descp->type, descp->dpl)); + sdp->p = (h & CPU_DESC_H_P) ? 1 : 0; + sdp->type = (UINT8)((h & CPU_DESC_H_TYPE) >> CPU_DESC_H_TYPE_SHIFT); + sdp->dpl = (UINT8)((h & CPU_DESC_H_DPL) >> CPU_DESC_H_DPL_SHIFT); + sdp->s = (h & CPU_DESC_H_S) ? 1 : 0; - if (descp->s) { + if (!SEG_IS_SYSTEM(sdp)) { /* code/data */ - descp->valid = 1; - descp->d = (h & CPU_SEGDESC_H_D) ? 1 : 0; - - descp->u.seg.c = (h & CPU_SEGDESC_H_D_C) ? 1 : 0; - descp->u.seg.g = (h & CPU_SEGDESC_H_G) ? 1 : 0; - descp->u.seg.wr = (descp->type & CPU_SEGDESC_TYPE_WR) ? 1 : 0; - descp->u.seg.ec = (descp->type & CPU_SEGDESC_TYPE_EC) ? 1 : 0; - - descp->u.seg.segbase = (l >> 16) & 0xffff; - descp->u.seg.segbase |= (h & 0xff) << 16; - descp->u.seg.segbase |= h & 0xff000000; - descp->u.seg.limit = (h & 0xf0000) | (l & 0xffff); - if (descp->u.seg.g) { - descp->u.seg.limit <<= 12; - descp->u.seg.limit |= 0xfff; + sdp->valid = 1; + sdp->d = (h & CPU_SEGDESC_H_D) ? 1 : 0; + + sdp->u.seg.c = (h & CPU_SEGDESC_H_D_C) ? 1 : 0; + sdp->u.seg.g = (h & CPU_SEGDESC_H_G) ? 1 : 0; + sdp->u.seg.wr = (sdp->type & CPU_SEGDESC_TYPE_WR) ? 1 : 0; + sdp->u.seg.ec = (sdp->type & CPU_SEGDESC_TYPE_EC) ? 1 : 0; + + sdp->u.seg.segbase = (l >> 16) & 0xffff; + sdp->u.seg.segbase |= (h & 0xff) << 16; + sdp->u.seg.segbase |= h & 0xff000000; + sdp->u.seg.limit = (h & 0xf0000) | (l & 0xffff); + if (sdp->u.seg.g) { + sdp->u.seg.limit <<= 12; + if (SEG_IS_CODE(sdp) || !SEG_IS_EXPANDDOWN_DATA(sdp)) { + /* expand-up segment */ + sdp->u.seg.limit |= 0xfff; + } } - descp->u.seg.segend = descp->u.seg.segbase + descp->u.seg.limit; - - VERBOSE(("load_descriptor: %s segment descriptor", descp->u.seg.c ? "code" : "data")); - VERBOSE(("load_descriptor: segment base address = 0x%08x, segment limit = 0x%08x", descp->u.seg.segbase, descp->u.seg.limit)); - VERBOSE(("load_descriptor: d = %s, g = %s", descp->d ? "on" : "off", descp->u.seg.g ? "on" : "off")); - VERBOSE(("load_descriptor: %s, %s", descp->u.seg.c ? (descp->u.seg.wr ? "executable/readable" : "execute-only") : (descp->u.seg.wr ? "writable" : "read-only"), (descp->u.seg.c ? (descp->u.seg.ec ? "conforming" : "non-conforming") : (descp->u.seg.ec ? "expand-down" : "expand-up")))); } else { /* system */ - switch (descp->type) { + switch (sdp->type) { case CPU_SYSDESC_TYPE_LDT: /* LDT */ - descp->valid = 1; - descp->u.seg.g = (h & CPU_SEGDESC_H_G) ? 1 : 0; - - descp->u.seg.segbase = h & 0xff000000; - descp->u.seg.segbase |= (h & 0xff) << 16; - descp->u.seg.segbase |= l >> 16; - descp->u.seg.limit = h & 0xf0000; - descp->u.seg.limit |= l & 0xffff; - if (descp->u.seg.g) { - descp->u.seg.limit <<= 12; - descp->u.seg.limit |= 0xfff; + sdp->valid = 1; + sdp->u.seg.g = (h & CPU_SEGDESC_H_G) ? 1 : 0; + + sdp->u.seg.segbase = h & 0xff000000; + sdp->u.seg.segbase |= (h & 0xff) << 16; + sdp->u.seg.segbase |= l >> 16; + sdp->u.seg.limit = h & 0xf0000; + sdp->u.seg.limit |= l & 0xffff; + if (sdp->u.seg.g) { + sdp->u.seg.limit <<= 12; + sdp->u.seg.limit |= 0xfff; } - descp->u.seg.segend = descp->u.seg.segbase + descp->u.seg.limit; - - VERBOSE(("load_descriptor: LDT descriptor")); - VERBOSE(("load_descriptor: LDT base address = 0x%08x, limit size = 0x%08x", descp->u.seg.segbase, descp->u.seg.limit)); break; case CPU_SYSDESC_TYPE_TASK: /* task gate */ - descp->valid = 1; - descp->u.gate.selector = (UINT16)(l >> 16); - - VERBOSE(("load_descriptor: task descriptor: selector = 0x%04x", descp->u.gate.selector)); + sdp->valid = 1; + sdp->u.gate.selector = (UINT16)(l >> 16); break; case CPU_SYSDESC_TYPE_TSS_16: /* 286 TSS */ case CPU_SYSDESC_TYPE_TSS_BUSY_16: /* 286 TSS Busy */ case CPU_SYSDESC_TYPE_TSS_32: /* 386 TSS */ case CPU_SYSDESC_TYPE_TSS_BUSY_32: /* 386 TSS Busy */ - descp->valid = 1; - descp->d = (h & CPU_GATEDESC_H_D) ? 1 : 0; - descp->u.seg.g = (h & CPU_SEGDESC_H_G) ? 1 : 0; - - descp->u.seg.segbase = h & 0xff000000; - descp->u.seg.segbase |= (h & 0xff) << 16; - descp->u.seg.segbase |= l >> 16; - descp->u.seg.limit = h & 0xf0000; - descp->u.seg.limit |= l & 0xffff; - if (descp->u.seg.g) { - descp->u.seg.limit <<= 12; - descp->u.seg.limit |= 0xfff; + sdp->valid = 1; + sdp->d = (h & CPU_GATEDESC_H_D) ? 1 : 0; + sdp->u.seg.g = (h & CPU_SEGDESC_H_G) ? 1 : 0; + + sdp->u.seg.segbase = h & 0xff000000; + sdp->u.seg.segbase |= (h & 0xff) << 16; + sdp->u.seg.segbase |= l >> 16; + sdp->u.seg.limit = h & 0xf0000; + sdp->u.seg.limit |= l & 0xffff; + if (sdp->u.seg.g) { + sdp->u.seg.limit <<= 12; + sdp->u.seg.limit |= 0xfff; } - descp->u.seg.segend = descp->u.seg.segbase + descp->u.seg.limit; - - VERBOSE(("load_descriptor: %dbit %sTSS descriptor", descp->d ? 32 : 16, (descp->type & CPU_SYSDESC_TYPE_TSS_BUSY_IND) ? "busy " : "")); - VERBOSE(("load_descriptor: TSS base address = 0x%08x, limit = 0x%08x", descp->u.seg.segbase, descp->u.seg.limit)); - VERBOSE(("load_descriptor: d = %s, g = %s", descp->d ? "on" : "off", descp->u.seg.g ? "on" : "off")); break; case CPU_SYSDESC_TYPE_CALL_16: /* 286 call gate */ @@ -308,29 +281,30 @@ load_descriptor(descriptor_t *descp, UINT32 addr) case CPU_SYSDESC_TYPE_INTR_32: /* 386 interrupt gate */ case CPU_SYSDESC_TYPE_TRAP_32: /* 386 trap gate */ if ((h & 0x0000000e0) == 0) { - descp->valid = 1; - descp->d = (h & CPU_GATEDESC_H_D) ? 1:0; - descp->u.gate.selector = (UINT16)(l >> 16); - descp->u.gate.offset = h & 0xffff0000; - descp->u.gate.offset |= l & 0xffff; - descp->u.gate.count = (BYTE)(h & 0x1f); - - VERBOSE(("load_descriptor: %dbit %s gate descriptor", descp->d ? 32 : 16, ((descp->type & CPU_SYSDESC_TYPE_MASKBIT) == CPU_SYSDESC_TYPE_CALL) ? "call" : (((descp->type & CPU_SYSDESC_TYPE_MASKBIT) == CPU_SYSDESC_TYPE_INTR) ? "interrupt" : "trap"))); - VERBOSE(("load_descriptor: selector = 0x%04x, offset = 0x%08x, count = %d, d = %s", descp->u.gate.selector, descp->u.gate.offset, descp->u.gate.count, descp->d ? "on" : "off")); + sdp->valid = 1; + sdp->d = (h & CPU_GATEDESC_H_D) ? 1 : 0; + sdp->u.gate.selector = (UINT16)(l >> 16); + sdp->u.gate.offset = h & 0xffff0000; + sdp->u.gate.offset |= l & 0xffff; + sdp->u.gate.count = (UINT8)(h & 0x1f); } else { - ia32_panic("load_descriptor: 386 gate is invalid"); + sdp->valid = 0; + VERBOSE(("load_descriptor: gate is invalid")); } break; case 0: case 8: case 10: case 13: /* reserved */ default: - descp->valid = 0; + sdp->valid = 0; break; } } +#if defined(DEBUG) + segdesc_dump(sdp); +#endif } -int +int CPUCALL parse_selector(selector_t *ssp, UINT16 selector) { UINT32 base; @@ -348,7 +322,7 @@ parse_selector(selector_t *ssp, UINT16 selector) idx = selector & CPU_SEGMENT_SELECTOR_INDEX_MASK; if (ssp->ldt) { /* LDT */ - if (!CPU_LDTR_DESC.valid) { + if (!SEG_IS_VALID(&CPU_LDTR_DESC)) { VERBOSE(("parse_selector: LDT is invalid")); return -1; } @@ -364,14 +338,14 @@ parse_selector(selector_t *ssp, UINT16 selector) limit = CPU_GDTR_LIMIT; } if (idx + 7 > limit) { - VERBOSE(("parse_selector: segment limit check failed")); + VERBOSE(("parse_selector: segment limit check failed: 0x%08x > 0x%08x", idx + 7, limit)); return -3; } /* load descriptor */ ssp->addr = base + idx; load_descriptor(&ssp->desc, ssp->addr); - if (!ssp->desc.valid) { + if (!SEG_IS_VALID(&ssp->desc)) { VERBOSE(("parse_selector: segment descriptor is invalid")); return -4; } @@ -379,19 +353,19 @@ parse_selector(selector_t *ssp, UINT16 selector) return 0; } -int +int CPUCALL selector_is_not_present(const selector_t *ssp) { UINT32 h; /* not present */ - if (!ssp->desc.p) { + if (!SEG_IS_PRESENT(&ssp->desc)) { VERBOSE(("selector_is_not_present: not present")); return -1; } /* set access bit if code/data segment descriptor */ - if (ssp->desc.s) { + if (!SEG_IS_SYSTEM(&ssp->desc)) { h = cpu_kmemoryread_d(ssp->addr + 4); if (!(h & CPU_SEGDESC_H_A)) { h |= CPU_SEGDESC_H_A; @@ -401,3 +375,39 @@ selector_is_not_present(const selector_t *ssp) return 0; } + +void CPUCALL +segdesc_init(int idx, UINT16 sreg, descriptor_t *sdp) +{ + + __ASSERT(((unsigned int)idx < CPU_SEGREG_NUM)); + __ASSERT((sdp != NULL)); + + CPU_REGS_SREG(idx) = sreg; + segdesc_set_default(idx, sreg, sdp); +} + +static void CPUCALL +segdesc_set_default(int idx, UINT16 selector, descriptor_t *sdp) +{ + + __ASSERT(((unsigned int)idx < CPU_SEGREG_NUM)); + __ASSERT((sdp != NULL)); + + sdp->u.seg.segbase = (UINT32)selector << 4; + sdp->u.seg.limit = 0xffff; + sdp->u.seg.c = (idx == CPU_CS_INDEX) ? 1 : 0; /* code or data */ + sdp->u.seg.g = 0; /* non 4k factor scale */ + sdp->u.seg.wr = 1; /* execute/read(CS) or read/write(others) */ + sdp->u.seg.ec = 0; /* nonconforming(CS) or expand-up(others) */ + sdp->valid = 1; /* valid */ + sdp->p = 1; /* present */ + sdp->type = (CPU_SEGDESC_TYPE_WR << CPU_DESC_H_TYPE_SHIFT) + | ((idx == CPU_CS_INDEX) ? CPU_SEGDESC_H_D_C : 0); + /* readable code/writable data segment */ + sdp->dpl = CPU_STAT_VM86 ? 3 : 0; /* descriptor privilege level */ + sdp->rpl = CPU_STAT_VM86 ? 3 : 0; /* request privilege level */ + sdp->s = 1; /* code/data */ + sdp->d = 0; /* 16bit */ + sdp->flag = CPU_DESC_FLAG_READABLE|CPU_DESC_FLAG_WRITABLE; +} diff --git a/i386c/ia32/segments.h b/i386c/ia32/segments.h index e4e57395..947e451a 100644 --- a/i386c/ia32/segments.h +++ b/i386c/ia32/segments.h @@ -1,5 +1,3 @@ -/* $Id: segments.h,v 1.10 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -39,7 +37,7 @@ typedef struct { union { struct { UINT32 segbase; - UINT32 segend; + UINT32 d_pad; UINT32 limit; UINT8 c; /* 0 = data, 1 = code */ @@ -71,11 +69,22 @@ typedef struct { UINT8 flag; #define CPU_DESC_FLAG_READABLE (1 << 0) #define CPU_DESC_FLAG_WRITABLE (1 << 1) +#define CPU_DESC_FLAG_WHOLEADR (1 << 2) } descriptor_t; +#define SEG_IS_VALID(sdp) ((sdp)->valid) +#define SEG_IS_PRESENT(sdp) ((sdp)->p) +#define SEG_IS_32BIT(sdp) ((sdp)->d) +#define SEG_IS_SYSTEM(sdp) (!(sdp)->s) +#define SEG_IS_CODE(sdp) ((sdp)->s && (sdp)->u.seg.c) +#define SEG_IS_DATA(sdp) ((sdp)->s && !(sdp)->u.seg.c) +#define SEG_IS_READABLE_CODE(sdp) ((sdp)->u.seg.wr) +#define SEG_IS_WRITABLE_DATA(sdp) ((sdp)->u.seg.wr) +#define SEG_IS_CONFORMING_CODE(sdp) ((sdp)->u.seg.ec) +#define SEG_IS_EXPANDDOWN_DATA(sdp) ((sdp)->u.seg.ec) /* - * ・サ・ー・皈・ネ。ヲ・ヌ・」・ケ・ッ・・ラ・ソ + * segment descriptor * * 31 24 23 22 21 20 19 16 15 14 13 12 11 8 7 0 * +----------------+--+--+--+--+-------+--+-----+--+-------+---------------+ @@ -88,9 +97,11 @@ typedef struct { */ /* descriptor common */ -#define CPU_DESC_H_TYPE (0xf << 8) +#define CPU_DESC_H_TYPE_SHIFT 8 +#define CPU_DESC_H_TYPE (0xf << CPU_DESC_H_TYPE_SHIFT) #define CPU_DESC_H_S ( 1 << 12) /* 0 = system, 1 = code/data */ -#define CPU_DESC_H_DPL ( 3 << 13) +#define CPU_DESC_H_DPL_SHIFT 13 +#define CPU_DESC_H_DPL ( 3 << CPU_DESC_H_DPL_SHIFT) #define CPU_DESC_H_P ( 1 << 15) /* exist */ /* for segment descriptor */ @@ -133,62 +144,22 @@ typedef struct { #define CPU_SYSDESC_TYPE_INTR 0x06 #define CPU_SYSDESC_TYPE_TRAP 0x07 #define CPU_SYSDESC_TYPE_MASKBIT 0x07 +#define CPU_SYSDESC_TYPE_32BIT 0x08 #define CPU_SYSDESC_TYPE_TSS_BUSY_IND 0x02 -#define CPU_SET_SEGDESC_DEFAULT(dscp, idx, selector) \ -do { \ - (dscp)->u.seg.segbase = (UINT32)(selector) << 4; \ - (dscp)->u.seg.segend = (dscp)->u.seg.segbase + (dscp)->u.seg.limit; \ - (dscp)->u.seg.c = ((idx) == CPU_CS_INDEX) ? 1 : 0; \ - (dscp)->u.seg.g = 0; \ - (dscp)->u.seg.wr = 1; \ - (dscp)->valid = 1; \ - (dscp)->p = 1; \ - (dscp)->type = 0x02; /* writable */ \ - (dscp)->dpl = 0; \ - (dscp)->s = 1; /* code/data */ \ - (dscp)->d = 0; /* 16bit */ \ - (dscp)->flag = CPU_DESC_FLAG_READABLE|CPU_DESC_FLAG_WRITABLE; \ -} while (/*CONSTCOND*/ 0) - -#define CPU_SET_TASK_BUSY(selector, dscp) \ -do { \ - UINT32 addr; \ - UINT32 h; \ - addr = CPU_GDTR_BASE + ((selector) & CPU_SEGMENT_SELECTOR_INDEX_MASK); \ - h = cpu_kmemoryread_d(addr + 4); \ - if (!(h & CPU_TSS_H_BUSY)) { \ - (dscp)->type |= CPU_SYSDESC_TYPE_TSS_BUSY_IND; \ - h |= CPU_TSS_H_BUSY; \ - cpu_kmemorywrite_d(addr + 4, h); \ - } else { \ - ia32_panic("CPU_SET_TASK_BUSY: already busy (%04x:%08x)", selector, h); \ - } \ -} while (/*CONSTCOND*/ 0) - -#define CPU_SET_TASK_FREE(selector, dscp) \ -do { \ - UINT32 addr; \ - UINT32 h; \ - addr = CPU_GDTR_BASE + ((selector) & CPU_SEGMENT_SELECTOR_INDEX_MASK); \ - h = cpu_kmemoryread_d(addr + 4); \ - if (h & CPU_TSS_H_BUSY) { \ - (dscp)->type &= ~CPU_SYSDESC_TYPE_TSS_BUSY_IND; \ - h &= ~CPU_TSS_H_BUSY; \ - cpu_kmemorywrite_d(addr + 4, h); \ - } else { \ - ia32_panic("CPU_SET_TASK_FREE: already free (%04x:%08x)", selector, h); \ - } \ -} while (/*CONSTCOND*/ 0) - -void load_descriptor(descriptor_t *descp, UINT32 addr); - -#define CPU_SET_SEGREG(idx, selector) load_segreg(idx, selector, GP_EXCEPTION) -void load_segreg(int idx, UINT16 selector, int exc); -void load_ss(UINT16 selector, const descriptor_t *sd, UINT cpl); -void load_cs(UINT16 selector, const descriptor_t *sd, UINT cpl); -void load_ldtr(UINT16 selector, int exc); + +void CPUCALL segdesc_init(int idx, UINT16 sreg, descriptor_t *sdp); +void CPUCALL load_descriptor(descriptor_t *sdp, UINT32 addr); + +void CPUCALL load_segreg(int idx, UINT16 selector, UINT16 *sregp, descriptor_t *sdp, int exc); +#define LOAD_SEGREG1(idx, selector, e) \ + load_segreg(idx, selector, &CPU_REGS_SREG(idx), &CPU_STAT_SREG(idx), e) +#define LOAD_SEGREG(idx, selector) \ + LOAD_SEGREG1((idx), (selector), GP_EXCEPTION) +void CPUCALL load_ss(UINT16 selector, const descriptor_t *sdp, int cpl); +void CPUCALL load_cs(UINT16 selector, const descriptor_t *sdp, int cpl); +void CPUCALL load_ldtr(UINT16 selector, int exc); /* @@ -210,8 +181,8 @@ typedef struct { descriptor_t desc; } selector_t; -int parse_selector(selector_t *ssp, UINT16 selector); -int selector_is_not_present(const selector_t *ssp); +int CPUCALL parse_selector(selector_t *ssp, UINT16 selector); +int CPUCALL selector_is_not_present(const selector_t *ssp); #ifdef __cplusplus } diff --git a/i386c/ia32/task.c b/i386c/ia32/task.c index 82d9cef2..8b998317 100644 --- a/i386c/ia32/task.c +++ b/i386c/ia32/task.c @@ -1,5 +1,3 @@ -/* $Id: task.c,v 1.22 2008/01/25 18:12:13 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -29,33 +27,68 @@ #include "cpu.h" #include "ia32.mcr" +#define TSS_16_SIZE 44 +#define TSS_16_LIMIT (TSS_16_SIZE - 1) +#define TSS_32_SIZE 104 +#define TSS_32_LIMIT (TSS_32_SIZE - 1) + +static void CPUCALL +set_task_busy(UINT16 selector) +{ + UINT32 addr; + UINT32 h; + + addr = CPU_GDTR_BASE + (selector & CPU_SEGMENT_SELECTOR_INDEX_MASK); + h = cpu_kmemoryread_d(addr + 4); + if (!(h & CPU_TSS_H_BUSY)) { + h |= CPU_TSS_H_BUSY; + cpu_kmemorywrite_d(addr + 4, h); + } else { + ia32_panic("set_task_busy: already busy(%04x:%08x)", + selector, h); + } +} + +static void CPUCALL +set_task_free(UINT16 selector) +{ + UINT32 addr; + UINT32 h; + + addr = CPU_GDTR_BASE + (selector & CPU_SEGMENT_SELECTOR_INDEX_MASK); + h = cpu_kmemoryread_d(addr + 4); + if (h & CPU_TSS_H_BUSY) { + h &= ~CPU_TSS_H_BUSY; + cpu_kmemorywrite_d(addr + 4, h); + } else { + ia32_panic("set_task_free: already free(%04x:%08x)", + selector, h); + } +} -void +void CPUCALL load_tr(UINT16 selector) { selector_t task_sel; int rv; -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - int i; -#endif UINT16 iobase; rv = parse_selector(&task_sel, selector); - if (rv < 0 || task_sel.ldt || task_sel.desc.s) { + if (rv < 0 || task_sel.ldt || !SEG_IS_SYSTEM(&task_sel.desc)) { EXCEPTION(GP_EXCEPTION, task_sel.idx); } /* check descriptor type & stack room size */ switch (task_sel.desc.type) { case CPU_SYSDESC_TYPE_TSS_16: - if (task_sel.desc.u.seg.limit < 0x2b) { + if (task_sel.desc.u.seg.limit < TSS_16_LIMIT) { EXCEPTION(TS_EXCEPTION, task_sel.idx); } iobase = 0; break; case CPU_SYSDESC_TYPE_TSS_32: - if (task_sel.desc.u.seg.limit < 0x67) { + if (task_sel.desc.u.seg.limit < TSS_32_LIMIT) { EXCEPTION(TS_EXCEPTION, task_sel.idx); } iobase = cpu_kmemoryread_w(task_sel.desc.u.seg.segbase + 102); @@ -76,62 +109,56 @@ load_tr(UINT16 selector) tr_dump(task_sel.selector, task_sel.desc.u.seg.segbase, task_sel.desc.u.seg.limit); #endif - CPU_SET_TASK_BUSY(task_sel.selector, &task_sel.desc); + set_task_busy(task_sel.selector); CPU_TR = task_sel.selector; CPU_TR_DESC = task_sel.desc; + CPU_TR_DESC.type |= CPU_SYSDESC_TYPE_TSS_BUSY_IND; /* I/O deny bitmap */ - if (task_sel.desc.type == CPU_SYSDESC_TYPE_TSS_BUSY_32) { - if (iobase != 0 && iobase < task_sel.desc.u.seg.limit) { - CPU_STAT_IOLIMIT = (UINT16)(task_sel.desc.u.seg.limit - iobase); - CPU_STAT_IOADDR = task_sel.desc.u.seg.segbase + iobase; - } else { - CPU_STAT_IOLIMIT = 0; + CPU_STAT_IOLIMIT = 0; + if (CPU_TR_DESC.type == CPU_SYSDESC_TYPE_TSS_BUSY_32) { + if (iobase < CPU_TR_LIMIT) { + CPU_STAT_IOLIMIT = (UINT16)(CPU_TR_LIMIT - iobase); + CPU_STAT_IOADDR = CPU_TR_BASE + iobase; + VERBOSE(("load_tr: enable ioport control: iobase=0x%04x, base=0x%08x, limit=0x%08x", iobase, CPU_STAT_IOADDR, CPU_STAT_IOLIMIT)); } - } else { - CPU_STAT_IOLIMIT = 0; } - -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - /* clear local break point flags */ - CPU_DR7 &= ~(CPU_DR7_L(0)|CPU_DR7_L(1)|CPU_DR7_L(2)|CPU_DR7_L(3)|CPU_DR7_LE); - CPU_STAT_BP = 0; - for (i = 0; i < CPU_DEBUG_REG_INDEX_NUM; i++) { - if (CPU_DR7 & CPU_DR7_G(i)) { - CPU_STAT_BP |= (1 << i); - } + if (CPU_STAT_IOLIMIT == 0) { + VERBOSE(("load_tr: disable ioport control.")); } -#endif } -void +void CPUCALL get_stack_pointer_from_tss(UINT pl, UINT16 *new_ss, UINT32 *new_esp) { UINT32 tss_stack_addr; + VERBOSE(("get_stack_pointer_from_tss: pl = %d", pl)); + VERBOSE(("get_stack_pointer_from_tss: CPU_TR type = %d, base = 0x%08x, limit = 0x%08x", CPU_TR_DESC.type, CPU_TR_BASE, CPU_TR_LIMIT)); + __ASSERT(pl < 3); if (CPU_TR_DESC.type == CPU_SYSDESC_TYPE_TSS_BUSY_32) { tss_stack_addr = pl * 8 + 4; - if (tss_stack_addr + 7 > CPU_TR_DESC.u.seg.limit) { + if (tss_stack_addr + 7 > CPU_TR_LIMIT) { EXCEPTION(TS_EXCEPTION, CPU_TR & ~3); } - tss_stack_addr += CPU_TR_DESC.u.seg.segbase; + tss_stack_addr += CPU_TR_BASE; *new_esp = cpu_kmemoryread_d(tss_stack_addr); *new_ss = cpu_kmemoryread_w(tss_stack_addr + 4); } else if (CPU_TR_DESC.type == CPU_SYSDESC_TYPE_TSS_BUSY_16) { tss_stack_addr = pl * 4 + 2; - if (tss_stack_addr + 3 > CPU_TR_DESC.u.seg.limit) { + if (tss_stack_addr + 3 > CPU_TR_LIMIT) { EXCEPTION(TS_EXCEPTION, CPU_TR & ~3); } - tss_stack_addr += CPU_TR_DESC.u.seg.segbase; + tss_stack_addr += CPU_TR_BASE; *new_esp = cpu_kmemoryread_w(tss_stack_addr); *new_ss = cpu_kmemoryread_w(tss_stack_addr + 2); } else { ia32_panic("get_stack_pointer_from_tss: task register is invalid (%d)\n", CPU_TR_DESC.type); } - - VERBOSE(("get_stack_pointer_from_tss: pl = %d, new_esp = 0x%08x, new_ss = 0x%04x", pl, *new_esp, *new_ss)); + VERBOSE(("get_stack_pointer_from_tss: new stack pointer = %04x:%08x", + *new_ss, *new_esp)); } UINT16 @@ -140,23 +167,24 @@ get_backlink_selector_from_tss(void) UINT16 backlink; if (CPU_TR_DESC.type == CPU_SYSDESC_TYPE_TSS_BUSY_32) { - if (4 > CPU_TR_DESC.u.seg.limit) { + if (4 > CPU_TR_LIMIT) { EXCEPTION(TS_EXCEPTION, CPU_TR & ~3); } } else if (CPU_TR_DESC.type == CPU_SYSDESC_TYPE_TSS_BUSY_16) { - if (2 > CPU_TR_DESC.u.seg.limit) { + if (2 > CPU_TR_LIMIT) { EXCEPTION(TS_EXCEPTION, CPU_TR & ~3); } } else { - ia32_panic("get_backlink_selector_from_tss: task register is invalid (%d)\n", CPU_TR_DESC.type); + ia32_panic("get_backlink_selector_from_tss: task register has invalid type (%d)\n", CPU_TR_DESC.type); } - backlink = cpu_kmemoryread_w(CPU_TR_DESC.u.seg.segbase); - VERBOSE(("get_backlink_selector_from_tss: backlink selector = 0x%04x", backlink)); + backlink = cpu_kmemoryread_w(CPU_TR_BASE); + VERBOSE(("get_backlink_selector_from_tss: backlink selector = 0x%04x", + backlink)); return backlink; } -void +void CPUCALL task_switch(selector_t *task_sel, task_switch_type_t type) { UINT32 regs[CPU_REG_NUM]; @@ -168,95 +196,91 @@ task_switch(selector_t *task_sel, task_switch_type_t type) UINT16 iobase; UINT16 t; - selector_t cs_sel; + selector_t cs_sel, ss_sel; int rv; - UINT32 cur_base; /* current task state */ - UINT32 task_base; /* new task state */ + UINT32 cur_base, cur_paddr; /* current task state */ + UINT32 task_base, task_paddr; /* new task state */ UINT32 old_flags = REAL_EFLAGREG; BOOL task16; UINT i; VERBOSE(("task_switch: start")); - /* limit check */ switch (task_sel->desc.type) { case CPU_SYSDESC_TYPE_TSS_32: case CPU_SYSDESC_TYPE_TSS_BUSY_32: - if (task_sel->desc.u.seg.limit < 0x67) { + if (task_sel->desc.u.seg.limit < TSS_32_LIMIT) { EXCEPTION(TS_EXCEPTION, task_sel->idx); } - task16 = FALSE; + task16 = 0; break; case CPU_SYSDESC_TYPE_TSS_16: case CPU_SYSDESC_TYPE_TSS_BUSY_16: - if (task_sel->desc.u.seg.limit < 0x2b) { + if (task_sel->desc.u.seg.limit < TSS_16_LIMIT) { EXCEPTION(TS_EXCEPTION, task_sel->idx); } - task16 = TRUE; + task16 = 1; break; default: ia32_panic("task_switch: descriptor type is invalid."); - task16 = FALSE; /* compiler happy */ + task16 = 0; /* compiler happy */ break; } - cur_base = CPU_TR_DESC.u.seg.segbase; + cur_base = CPU_TR_BASE; + cur_paddr = laddr_to_paddr(cur_base, CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER); task_base = task_sel->desc.u.seg.segbase; - VERBOSE(("task_switch: cur task (%04x) = 0x%08x:%08x", CPU_TR, cur_base, CPU_TR_DESC.u.seg.limit)); - VERBOSE(("task_switch: new task (%04x) = 0x%08x:%08x", task_sel->selector, task_base, task_sel->desc.u.seg.limit)); + task_paddr = laddr_to_paddr(task_base, CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER); + VERBOSE(("task_switch: current task (%04x) = 0x%08x:%08x (p0x%08x)", + CPU_TR, cur_base, CPU_TR_LIMIT, cur_paddr)); + VERBOSE(("task_switch: new task (%04x) = 0x%08x:%08x (p0x%08x)", + task_sel->selector, task_base, task_sel->desc.u.seg.limit, + task_paddr)); VERBOSE(("task_switch: %dbit task switch", task16 ? 16 : 32)); #if defined(MORE_DEBUG) - { - UINT32 v; - - VERBOSE(("task_switch: new task")); - for (i = 0; i < task_sel->desc.u.seg.limit; i += 4) { - v = cpu_kmemoryread_d(task_base + i); - VERBOSE(("task_switch: 0x%08x: %08x", task_base + i,v)); - } + VERBOSE(("task_switch: new task")); + for (i = 0; i < task_sel->desc.u.seg.limit; i += 4) { + VERBOSE(("task_switch: 0x%08x: %08x", task_base + i, + cpu_memoryread_d(task_paddr + i))); } #endif - if (CPU_STAT_PAGING) { - /* task state paging check */ - paging_check(cur_base, CPU_TR_DESC.u.seg.limit, CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER); - paging_check(task_base, task_sel->desc.u.seg.limit, CPU_PAGE_WRITE_DATA|CPU_MODE_SUPERVISER); - } - /* load task state */ - memset(sreg, 0, sizeof(sreg)); if (!task16) { if (CPU_STAT_PAGING) { - cr3 = cpu_kmemoryread_d(task_base + 28); + cr3 = cpu_memoryread_d(task_paddr + 28); } - eip = cpu_kmemoryread_d(task_base + 32); - new_flags = cpu_kmemoryread_d(task_base + 36); + eip = cpu_memoryread_d(task_paddr + 32); + new_flags = cpu_memoryread_d(task_paddr + 36); for (i = 0; i < CPU_REG_NUM; i++) { - regs[i] = cpu_kmemoryread_d(task_base + 40 + i * 4); + regs[i] = cpu_memoryread_d(task_paddr + 40 + i * 4); } for (i = 0; i < CPU_SEGREG_NUM; i++) { - sreg[i] = cpu_kmemoryread_w(task_base + 72 + i * 4); + sreg[i] = cpu_memoryread_w(task_paddr + 72 + i * 4); } - ldtr = cpu_kmemoryread_w(task_base + 96); - t = cpu_kmemoryread_w(task_base + 100); + ldtr = cpu_memoryread_w(task_paddr + 96); + t = cpu_memoryread_w(task_paddr + 100); if (t & 1) { CPU_STAT_BP_EVENT |= CPU_STAT_BP_EVENT_TASK; } - iobase = cpu_kmemoryread_w(task_base + 102); + iobase = cpu_memoryread_w(task_paddr + 102); } else { - eip = cpu_kmemoryread_w(task_base + 14); - new_flags = cpu_kmemoryread_w(task_base + 16); + eip = cpu_memoryread_w(task_paddr + 14); + new_flags = cpu_memoryread_w(task_paddr + 16); for (i = 0; i < CPU_REG_NUM; i++) { - regs[i] = cpu_kmemoryread_w(task_base + 18 + i * 2); + regs[i] = cpu_memoryread_w(task_paddr + 18 + i * 2); } for (i = 0; i < CPU_SEGREG286_NUM; i++) { - sreg[i] = cpu_kmemoryread_w(task_base + 34 + i * 2); + sreg[i] = cpu_memoryread_w(task_paddr + 34 + i * 2); + } + for (; i < CPU_SEGREG_NUM; i++) { + sreg[i] = 0; } - ldtr = cpu_kmemoryread_w(task_base + 42); + ldtr = cpu_memoryread_w(task_paddr + 42); iobase = 0; t = 0; } @@ -269,10 +293,12 @@ task_switch(selector_t *task_sel, task_switch_type_t type) VERBOSE(("task_switch: eip = 0x%08x", CPU_EIP)); VERBOSE(("task_switch: eflags = 0x%08x", old_flags)); for (i = 0; i < CPU_REG_NUM; i++) { - VERBOSE(("task_switch: regs[%d] = 0x%08x", i, CPU_REGS_DWORD(i))); + VERBOSE(("task_switch: %s = 0x%08x", reg32_str[i], + CPU_REGS_DWORD(i))); } for (i = 0; i < CPU_SEGREG_NUM; i++) { - VERBOSE(("task_switch: sreg[%d] = 0x%04x", i, CPU_REGS_SREG(i))); + VERBOSE(("task_switch: %s = 0x%04x", sreg_str[i], + CPU_REGS_SREG(i))); } VERBOSE(("task_switch: ldtr = 0x%04x", CPU_LDTR)); @@ -283,10 +309,10 @@ task_switch(selector_t *task_sel, task_switch_type_t type) VERBOSE(("task_switch: eip = 0x%08x", eip)); VERBOSE(("task_switch: eflags = 0x%08x", new_flags)); for (i = 0; i < CPU_REG_NUM; i++) { - VERBOSE(("task_switch: regs[%d] = 0x%08x", i, regs[i])); + VERBOSE(("task_switch: %s = 0x%08x", reg32_str[i], regs[i])); } for (i = 0; i < CPU_SEGREG_NUM; i++) { - VERBOSE(("task_switch: sreg[%d] = 0x%04x", i, sreg[i])); + VERBOSE(("task_switch: %s = 0x%04x", sreg_str[i], sreg[i])); } VERBOSE(("task_switch: ldtr = 0x%04x", ldtr)); if (!task16) { @@ -304,7 +330,7 @@ task_switch(selector_t *task_sel, task_switch_type_t type) /*FALLTHROUGH*/ case TASK_SWITCH_JMP: /* clear busy flags in current task */ - CPU_SET_TASK_FREE(CPU_TR, &CPU_TR_DESC); + set_task_free(CPU_TR); break; case TASK_SWITCH_CALL: @@ -313,61 +339,61 @@ task_switch(selector_t *task_sel, task_switch_type_t type) break; default: - ia32_panic("task_switch(): task switch type is invalid"); + ia32_panic("task_switch: task switch type is invalid"); break; } - /* save this task state in this task state segment */ + /* store current task state in current TSS */ if (!task16) { - cpu_kmemorywrite_d(cur_base + 32, CPU_EIP); - cpu_kmemorywrite_d(cur_base + 36, old_flags); + cpu_memorywrite_d(cur_paddr + 32, CPU_EIP); + cpu_memorywrite_d(cur_paddr + 36, old_flags); for (i = 0; i < CPU_REG_NUM; i++) { - cpu_kmemorywrite_d(cur_base + 40 + i * 4, CPU_REGS_DWORD(i)); + cpu_memorywrite_d(cur_paddr + 40 + i * 4, + CPU_REGS_DWORD(i)); } for (i = 0; i < CPU_SEGREG_NUM; i++) { - cpu_kmemorywrite_w(cur_base + 72 + i * 4, CPU_REGS_SREG(i)); + cpu_memorywrite_w(cur_paddr + 72 + i * 4, + CPU_REGS_SREG(i)); } } else { - cpu_kmemorywrite_w(cur_base + 14, CPU_IP); - cpu_kmemorywrite_w(cur_base + 16, (UINT16)old_flags); + cpu_memorywrite_w(cur_paddr + 14, CPU_IP); + cpu_memorywrite_w(cur_paddr + 16, (UINT16)old_flags); for (i = 0; i < CPU_REG_NUM; i++) { - cpu_kmemorywrite_w(cur_base + 18 + i * 2, CPU_REGS_WORD(i)); + cpu_memorywrite_w(cur_paddr + 18 + i * 2, + CPU_REGS_WORD(i)); } for (i = 0; i < CPU_SEGREG286_NUM; i++) { - cpu_kmemorywrite_w(cur_base + 34 + i * 2, CPU_REGS_SREG(i)); + cpu_memorywrite_w(cur_paddr + 34 + i * 2, + CPU_REGS_SREG(i)); } } -#if defined(MORE_DEBUG) - { - UINT32 v; - - VERBOSE(("task_switch: current task")); - for (i = 0; i < CPU_TR_DESC.u.seg.limit; i += 4) { - v = cpu_kmemoryread_d(cur_base + i); - VERBOSE(("task_switch: 0x%08x: %08x", cur_base + i, v)); - } - } -#endif - /* set back link selector */ switch (type) { case TASK_SWITCH_CALL: case TASK_SWITCH_INTR: /* set back link selector */ - cpu_kmemorywrite_w(task_base, CPU_TR); + cpu_memorywrite_w(task_paddr, CPU_TR); break; - + case TASK_SWITCH_IRET: case TASK_SWITCH_JMP: /* Nothing to do */ break; default: - ia32_panic("task_switch(): task switch type is invalid"); + ia32_panic("task_switch: task switch type is invalid"); break; } +#if defined(MORE_DEBUG) + VERBOSE(("task_switch: current task")); + for (i = 0; i < CPU_TR_LIMIT; i += 4) { + VERBOSE(("task_switch: 0x%08x: %08x", cur_base + i, + cpu_memoryread_d(cur_paddr + i))); + } +#endif + /* Now task switching! */ /* if CALL, INTR, set EFLAGS image NT_FLAG */ @@ -379,12 +405,12 @@ task_switch(selector_t *task_sel, task_switch_type_t type) new_flags |= NT_FLAG; /*FALLTHROUGH*/ case TASK_SWITCH_JMP: - CPU_SET_TASK_BUSY(task_sel->selector, &task_sel->desc); + set_task_busy(task_sel->selector); break; - + case TASK_SWITCH_IRET: /* check busy flag is active */ - if (task_sel->desc.valid) { + if (SEG_IS_VALID(&task_sel->desc)) { UINT32 h; h = cpu_kmemoryread_d(task_sel->addr + 4); if ((h & CPU_TSS_H_BUSY) == 0) { @@ -394,76 +420,58 @@ task_switch(selector_t *task_sel, task_switch_type_t type) break; default: - ia32_panic("task_switch(): task switch type is invalid"); + ia32_panic("task_switch: task switch type is invalid"); break; } - /* set CR0 image CPU_CR0_TS */ - CPU_CR0 |= CPU_CR0_TS; - /* load task selector to CPU_TR */ CPU_TR = task_sel->selector; CPU_TR_DESC = task_sel->desc; + CPU_TR_DESC.type |= CPU_SYSDESC_TYPE_TSS_BUSY_IND; + + /* set CR0 image CPU_CR0_TS */ + CPU_CR0 |= CPU_CR0_TS; - /* load task state (CR3, EFLAG, EIP, GPR, segreg, LDTR) */ + /* + * load task state (CR3, EIP, GPR, segregs, LDTR, EFLAGS) + */ /* set new CR3 */ if (!task16 && CPU_STAT_PAGING) { - set_CR3(cr3); + set_cr3(cr3); } - /* set new EIP, GPR */ - CPU_PREV_EIP = CPU_EIP = eip; + /* set new EIP, GPR, segregs */ + CPU_EIP = eip; for (i = 0; i < CPU_REG_NUM; i++) { CPU_REGS_DWORD(i) = regs[i]; } for (i = 0; i < CPU_SEGREG_NUM; i++) { - CPU_REGS_SREG(i) = sreg[i]; - CPU_STAT_SREG_INIT(i); + segdesc_init(i, sreg[i], &CPU_STAT_SREG(i)); + /* invalidate segreg descriptor */ + CPU_STAT_SREG(i).valid = 0; } - /* set new EFLAGS */ - set_eflags(new_flags, I_FLAG|IOPL_FLAG|RF_FLAG|VM_FLAG|VIF_FLAG|VIP_FLAG); + CPU_CLEAR_PREV_ESP(); - /* I/O deny bitmap */ - if (!task16) { - if (iobase != 0 && iobase < task_sel->desc.u.seg.limit) { - CPU_STAT_IOLIMIT = (UINT16)(task_sel->desc.u.seg.limit - iobase); - CPU_STAT_IOADDR = task_sel->desc.u.seg.segbase + iobase; - } else { - CPU_STAT_IOLIMIT = 0; - } - } else { - CPU_STAT_IOLIMIT = 0; - } - VERBOSE(("task_switch: ioaddr = %08x, limit = %08x", CPU_STAT_IOADDR, CPU_STAT_IOLIMIT)); - -#if defined(IA32_SUPPORT_DEBUG_REGISTER) - /* check resume flag */ - if (CPU_EFLAG & RF_FLAG) { - CPU_STAT_BP_EVENT |= CPU_STAT_BP_EVENT_RF; - } + /* load new LDTR */ + CPU_LDTR_DESC.valid = 0; + load_ldtr(ldtr, TS_EXCEPTION); - /* clear local break point flags */ - CPU_DR7 &= ~(CPU_DR7_L(0)|CPU_DR7_L(1)|CPU_DR7_L(2)|CPU_DR7_L(3)|CPU_DR7_LE); - CPU_STAT_BP = 0; - for (i = 0; i < CPU_DEBUG_REG_INDEX_NUM; i++) { - if (CPU_DR7 & CPU_DR7_G(i)) { - CPU_STAT_BP |= (1 << i); - } + /* I/O deny bitmap */ + CPU_STAT_IOLIMIT = 0; + if (!task16 && iobase != 0 && iobase < CPU_TR_DESC.u.seg.limit) { + CPU_STAT_IOLIMIT = (UINT16)(CPU_TR_DESC.u.seg.limit - iobase); + CPU_STAT_IOADDR = task_base + iobase; } -#endif + VERBOSE(("task_switch: ioaddr = %08x, limit = %08x", CPU_STAT_IOADDR, + CPU_STAT_IOLIMIT)); - /* load new LDTR */ - load_ldtr(ldtr, TS_EXCEPTION); + /* set new EFLAGS */ + set_eflags(new_flags, I_FLAG|IOPL_FLAG|RF_FLAG|VM_FLAG|VIF_FLAG|VIP_FLAG); /* set new segment register */ if (!CPU_STAT_VM86) { - /* clear segment descriptor cache */ - for (i = 0; i < CPU_SEGREG_NUM; i++) { - CPU_STAT_SREG_CLEAR(i); - } - /* load CS */ rv = parse_selector(&cs_sel, sreg[CPU_CS_INDEX]); if (rv < 0) { @@ -471,20 +479,20 @@ task_switch(selector_t *task_sel, task_switch_type_t type) EXCEPTION(TS_EXCEPTION, cs_sel.idx); } - /* CS register must be code segment */ - if (!cs_sel.desc.s || !cs_sel.desc.u.seg.c) { + /* CS must be code segment */ + if (SEG_IS_SYSTEM(&cs_sel.desc) || SEG_IS_DATA(&cs_sel.desc)) { EXCEPTION(TS_EXCEPTION, cs_sel.idx); } /* check privilege level */ - if (!cs_sel.desc.u.seg.ec) { + if (!SEG_IS_CONFORMING_CODE(&cs_sel.desc)) { /* non-confirming code segment */ if (cs_sel.desc.dpl != cs_sel.rpl) { EXCEPTION(TS_EXCEPTION, cs_sel.idx); } } else { - /* confirming code segment */ - if (cs_sel.desc.dpl < cs_sel.rpl) { + /* conforming code segment */ + if (cs_sel.desc.dpl > cs_sel.rpl) { EXCEPTION(TS_EXCEPTION, cs_sel.idx); } } @@ -495,21 +503,43 @@ task_switch(selector_t *task_sel, task_switch_type_t type) EXCEPTION(NP_EXCEPTION, cs_sel.idx); } - /* Now loading CS register */ - load_cs(cs_sel.selector, &cs_sel.desc, cs_sel.desc.dpl); + /* load SS */ + rv = parse_selector(&ss_sel, sreg[CPU_SS_INDEX]); + if (rv < 0) { + VERBOSE(("task_switch: load SS failure (sel = 0x%04x, rv = %d)", sreg[CPU_SS_INDEX], rv)); + EXCEPTION(TS_EXCEPTION, ss_sel.idx); + } - /* load ES, SS, DS, FS, GS segment register */ - for (i = 0; i < CPU_SEGREG_NUM; i++) { - if (i != CPU_CS_INDEX) { - load_segreg(i, sreg[i], TS_EXCEPTION); - } + /* SS must be writable data segment */ + if (SEG_IS_SYSTEM(&ss_sel.desc) + || SEG_IS_CODE(&ss_sel.desc) + || !SEG_IS_WRITABLE_DATA(&ss_sel.desc)) { + EXCEPTION(TS_EXCEPTION, ss_sel.idx); } - } - /* out of range */ - if (CPU_EIP > CPU_STAT_CS_LIMIT) { - VERBOSE(("task_switch: new_ip is out of range. new_ip = %08x, limit = %08x", CPU_EIP, CPU_STAT_CS_LIMIT)); - EXCEPTION(GP_EXCEPTION, 0); + /* check privilege level */ + if ((ss_sel.desc.dpl != cs_sel.rpl) + || (ss_sel.desc.dpl != ss_sel.rpl)) { + EXCEPTION(TS_EXCEPTION, ss_sel.idx); + } + + /* stack segment is not present */ + rv = selector_is_not_present(&ss_sel); + if (rv < 0) { + EXCEPTION(SS_EXCEPTION, ss_sel.idx); + } + + /* Now loading SS register */ + load_ss(ss_sel.selector, &ss_sel.desc, cs_sel.rpl); + + /* load ES, DS, FS, GS segment register */ + LOAD_SEGREG1(CPU_ES_INDEX, sreg[CPU_ES_INDEX], TS_EXCEPTION); + LOAD_SEGREG1(CPU_DS_INDEX, sreg[CPU_DS_INDEX], TS_EXCEPTION); + LOAD_SEGREG1(CPU_FS_INDEX, sreg[CPU_FS_INDEX], TS_EXCEPTION); + LOAD_SEGREG1(CPU_GS_INDEX, sreg[CPU_GS_INDEX], TS_EXCEPTION); + + /* Now loading CS register */ + load_cs(cs_sel.selector, &cs_sel.desc, cs_sel.rpl); } VERBOSE(("task_switch: done.")); diff --git a/i386c/ia32/task.h b/i386c/ia32/task.h index 82ff8ecf..749859d0 100644 --- a/i386c/ia32/task.h +++ b/i386c/ia32/task.h @@ -1,5 +1,3 @@ -/* $Id: task.h,v 1.7 2005/03/12 12:32:54 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -32,20 +30,19 @@ extern "C" { #endif -void load_tr(UINT16 selector); -void get_stack_pointer_from_tss(UINT pl, UINT16 *new_ss, UINT32 *new_esp); +void CPUCALL load_tr(UINT16 selector); +void CPUCALL get_stack_pointer_from_tss(UINT pl, UINT16 *new_ss, UINT32 *new_esp); UINT16 get_backlink_selector_from_tss(void); /* task_switch type */ -enum task_switch_type { +typedef enum { TASK_SWITCH_JMP, TASK_SWITCH_CALL, TASK_SWITCH_IRET, TASK_SWITCH_INTR -}; -typedef enum task_switch_type task_switch_type_t; +} task_switch_type_t; -void task_switch(selector_t *selector, task_switch_type_t type); +void CPUCALL task_switch(selector_t *selector, task_switch_type_t type); #ifdef __cplusplus } diff --git a/i386c/memory.c b/i386c/memory.c index 32f4c1c8..c0d9ba9e 100644 --- a/i386c/memory.c +++ b/i386c/memory.c @@ -582,7 +582,7 @@ void MEMCALL memp_writes(UINT32 address, const void *dat, UINT leng) { // ---- Logical Space (BIOS) -static UINT32 physicaladdr(UINT32 addr, BOOL wr) { +static UINT32 MEMCALL physicaladdr(UINT32 addr, BOOL wr) { UINT32 a; UINT32 pde; @@ -610,8 +610,8 @@ static UINT32 physicaladdr(UINT32 addr, BOOL wr) { addr = (pte & CPU_PTE_BASEADDR_MASK) + (addr & 0x00000fff); return(addr); -retdummy: - return(0x01000000); // てきとーにメモリが存在しない場所 + retdummy: + return(0x01000000); /* XXX */ } @@ -754,4 +754,3 @@ void MEMCALL memr_writes(UINT seg, UINT off, const void *dat, UINT leng) { } #endif - diff --git a/io/gdc_sub.c b/io/gdc_sub.c index 93843c14..50e8512f 100644 --- a/io/gdc_sub.c +++ b/io/gdc_sub.c @@ -138,7 +138,7 @@ static void calc_gdcslavewait(UINT dots) { gdcsub_setslavewait(clk); } -void gdcsub_setvectl(GDCVECT *vect, int x1, int y1, int x2, int y2) { +void gdcsub_setvectl(GDCVECT *vect, int xx1, int yy1, int xx2, int yy2) { UINT ope; int dy; @@ -146,13 +146,13 @@ void gdcsub_setvectl(GDCVECT *vect, int x1, int y1, int x2, int y2) { int tmp; ope = 0; - dy = y2 - y1; + dy = yy2 - yy1; if (dy < 0) { dy = 0 - dy; } - dx = x2 - x1; + dx = xx2 - xx1; if (dx == 0) { - if (y1 <= y2) { + if (yy1 <= yy2) { ope = 7; } else { @@ -161,14 +161,14 @@ void gdcsub_setvectl(GDCVECT *vect, int x1, int y1, int x2, int y2) { } else { if (dx > 0) { - if (y1 >= y2) { + if (yy1 >= yy2) { ope += 2; } } else { dx = 0 - dx; ope += 4; - if (y1 <= y2) { + if (yy1 <= yy2) { ope += 2; } } diff --git a/io/mouseif.c b/io/mouseif.c index d680df9f..458f028e 100644 --- a/io/mouseif.c +++ b/io/mouseif.c @@ -30,11 +30,11 @@ void mouseif_sync(void) { static void calc_mousexy(void) { - UINT32 clock; + UINT32 clk; SINT32 diff; - clock = CPU_CLOCK + CPU_BASECLOCK + CPU_REMCLOCK; - diff = clock - mouseif.lastc; + clk = CPU_CLOCK + CPU_BASECLOCK + CPU_REMCLOCK; + diff = clk - mouseif.lastc; if (diff >= 2000) { SINT32 dx; SINT32 dy; diff --git a/io/pit.c b/io/pit.c index 9dbdd217..46a749ce 100644 --- a/io/pit.c +++ b/io/pit.c @@ -145,11 +145,11 @@ void rs232ctimer(NEVENTITEM item) { static UINT getcount(const _PITCH *pitch) { - SINT32 clock; + SINT32 clk; switch(pitch->ch) { case 0: - clock = nevent_getremain(NEVENT_ITIMER); + clk = nevent_getremain(NEVENT_ITIMER); break; case 1: @@ -164,24 +164,24 @@ static UINT getcount(const _PITCH *pitch) { return(pitch->value & (~1)); #endif } - clock = nevent_getremain(NEVENT_BEEP); + clk = nevent_getremain(NEVENT_BEEP); #if defined(BEEPCOUNTEREX) - if (clock >= 0) { - clock /= pccore.multiple; + if (clk >= 0) { + clk /= pccore.multiple; if (pitch->value > 2) { - clock %= pitch->value; + clk %= pitch->value; } else { - clock = LOW16(clock); + clk = LOW16(clk); } - return(clock); + return(clk); } #else break; #endif case 2: - clock = nevent_getremain(NEVENT_RS232C); + clk = nevent_getremain(NEVENT_RS232C); break; #if !defined(DISABLE_SOUND) @@ -190,11 +190,11 @@ static UINT getcount(const _PITCH *pitch) { #endif default: - clock = 0; + clk = 0; break; } - if (clock > 0) { - return(clock / pccore.multiple); + if (clk > 0) { + return(clk / pccore.multiple); } return(0); } diff --git a/io/serial.c b/io/serial.c index f582c80c..c85da4f3 100644 --- a/io/serial.c +++ b/io/serial.c @@ -168,13 +168,13 @@ void rs232c_open(void) { void rs232c_callback(void) { - BOOL interrupt; + BOOL intr; - interrupt = FALSE; + intr = FALSE; if ((cm_rs232c) && (cm_rs232c->read(cm_rs232c, &rs232c.data))) { rs232c.result |= 2; if (sysport.c & 1) { - interrupt = TRUE; + intr = TRUE; } } else { @@ -183,10 +183,10 @@ void rs232c_callback(void) { if (sysport.c & 4) { if (rs232c.send) { rs232c.send = 0; - interrupt = TRUE; + intr = TRUE; } } - if (interrupt) { + if (intr) { pic_setirq(4); } } diff --git a/io/x86/iocore.inc b/io/x86/iocore.inc index bcb82273..48831ba9 100644 --- a/io/x86/iocore.inc +++ b/io/x86/iocore.inc @@ -41,11 +41,10 @@ .sreq resb 1 ; 19 .ready resb 1 ; 1a .mask resb 1 ; 1b -.size ; 1c - endstruc + endstruc ; 1c struc dmac_t -.dmach resb (dmach_t.size * 4) +.dmach resb (dmach_t_size * 4) .lh resd 1 .work resb 1 .working resb 1 diff --git a/mem/memvga.h b/mem/memvga.h index 7c6fdd43..6d69e42f 100644 --- a/mem/memvga.h +++ b/mem/memvga.h @@ -5,10 +5,10 @@ extern "C" { #endif -REG8 MEMCALL memvgaf_rd8(UINT32 address) GCC_ATTR_REGPARM; -void MEMCALL memvgaf_wr8(UINT32 address, REG8 value) GCC_ATTR_REGPARM; -REG16 MEMCALL memvgaf_rd16(UINT32 address) GCC_ATTR_REGPARM; -void MEMCALL memvgaf_wr16(UINT32 address, REG16 value) GCC_ATTR_REGPARM; +REG8 MEMCALL memvgaf_rd8(UINT32 address); +void MEMCALL memvgaf_wr8(UINT32 address, REG8 value); +REG16 MEMCALL memvgaf_rd16(UINT32 address); +void MEMCALL memvgaf_wr16(UINT32 address, REG16 value); REG8 MEMCALL memvga0_rd8(UINT32 address); REG8 MEMCALL memvga1_rd8(UINT32 address); diff --git a/mem/x86/dmax86.x86 b/mem/x86/dmax86.x86 index d92a16cb..0ee34eef 100644 --- a/mem/x86/dmax86.x86 +++ b/mem/x86/dmax86.x86 @@ -7,7 +7,6 @@ section .text extern @i286_memoryread@4 extern @i286_memorywrite@8 - align 16 _dmax86: cmp byte [_dmac + dmac_t.working], byte 0 je short .nowork @@ -16,7 +15,7 @@ _dmax86: cmp byte [_dmac + dmac_t.working], byte 0 .sea: test [_dmac + dmac_t.working], cl jne short .hit add cl, cl - add eax, byte dmach_t.size + add eax, byte dmach_t_size test cl, 15 jne short .sea .nowork: ret @@ -55,5 +54,3 @@ _dmax86: cmp byte [_dmac + dmac_t.working], byte 0 pop edi ret - ends - diff --git a/mem/x86/memegc.x86 b/mem/x86/memegc.x86 index 9af5f2d1..25c2cbee 100644 --- a/mem/x86/memegc.x86 +++ b/mem/x86/memegc.x86 @@ -1093,5 +1093,3 @@ egcww_oddr: push dword egc_write mov dl, dh jmp egc_write_m - ends - diff --git a/nevent.c b/nevent.c index c3bcfdcb..aae56032 100644 --- a/nevent.c +++ b/nevent.c @@ -138,26 +138,26 @@ void nevent_waitreset(UINT id) { void nevent_set(UINT id, SINT32 eventclock, NEVENTCB proc, BOOL absolute) { - SINT32 clock; + SINT32 clk; NEVENTITEM item; UINT eventid; UINT i; // TRACEOUT(("event %d - %xclocks", id, eventclock)); - clock = CPU_BASECLOCK - CPU_REMCLOCK; + clk = CPU_BASECLOCK - CPU_REMCLOCK; item = &nevent.item[id]; item->proc = proc; item->flag = 0; if (absolute) { - item->clock = eventclock + clock; + item->clock = eventclock + clk; } else { item->clock += eventclock; } #if 0 - if (item->clock < clock) { - item->clock = clock; + if (item->clock < clk) { + item->clock = clk; } #endif // イベントの削除 @@ -179,9 +179,9 @@ void nevent_set(UINT id, SINT32 eventclock, NEVENTCB proc, BOOL absolute) { // もし最短イベントだったら... if (eventid == 0) { - clock = CPU_BASECLOCK - item->clock; - CPU_BASECLOCK -= clock; - CPU_REMCLOCK -= clock; + clk = CPU_BASECLOCK - item->clock; + CPU_BASECLOCK -= clk; + CPU_REMCLOCK -= clk; // TRACEOUT(("reset nextbase -%d (%d)", clock, CPU_REMCLOCK)); } } diff --git a/pccore.c b/pccore.c index d35ff2e6..113e56da 100644 --- a/pccore.c +++ b/pccore.c @@ -1,3 +1,11 @@ +/** + * @file pccore.c + * @brief emluration core + * + * @author $Author: yui $ + * @date $Date: 2011/02/23 10:11:44 $ + */ + #include "compiler.h" #include "strres.h" #include "dosio.h" @@ -189,7 +197,7 @@ static void pccore_set(const NP2CFG *pConfig) // -------------------------------------------------------------------------- #if !defined(DISABLE_SOUND) -static void sound_init() +static void sound_init(void) { UINT rate; @@ -247,7 +255,7 @@ void pccore_init(void) { fddfile_initialize(); #if !defined(DISABLE_SOUND) - sound_init(&np2cfg); + sound_init(); #endif rs232c_construct(); @@ -315,16 +323,20 @@ void pccore_cfgupdate(void) { } } +/** + * Reset the virtual machine + */ void pccore_reset(void) { int i; + BOOL epson; soundmng_stop(); #if !defined(DISABLE_SOUND) if (soundrenewal) { soundrenewal = 0; sound_term(); - sound_init(&np2cfg); + sound_init(); } #endif ZeroMemory(mem, 0x110000); @@ -348,9 +360,13 @@ void pccore_reset(void) { if (pccore.dipsw[2] & 0x80) { CPU_TYPE = CPUTYPE_V30; } - if (pccore.model & PCMODEL_EPSON) { // RAM ctrl + + epson = (pccore.model & PCMODEL_EPSON) ? TRUE : FALSE; + if (epson) { + /* enable RAM (D0000-DFFFF) */ CPU_RAM_D000 = 0xffff; } + font_setchargraph(epson); // HDDセット diskdrv_hddbind(); @@ -381,7 +397,7 @@ void pccore_reset(void) { cbuscore_reset(&np2cfg); fmboard_reset(&np2cfg, pccore.sound); - MEMM_ARCH((pccore.model & PCMODEL_EPSON)?1:0); + MEMM_ARCH((epson) ? 1 : 0); iocore_build(); iocore_bind(); cbuscore_bind(); diff --git a/sdl/dosio.c b/sdl/dosio.c index 88f2b8fb..0460e74b 100644 --- a/sdl/dosio.c +++ b/sdl/dosio.c @@ -345,7 +345,7 @@ struct stat sb; fli->size = 0; fli->attr = 0; } - mileuc_ncpy(fli->path, de->d_name, sizeof(fli->path)); + milstr_ncpy(fli->path, de->d_name, sizeof(fli->path)); } return(SUCCESS); } diff --git a/sound/beepc.c b/sound/beepc.c index 83e74e61..f37f2556 100644 --- a/sound/beepc.c +++ b/sound/beepc.c @@ -105,7 +105,7 @@ static void beep_eventset(void) { BPEVENT *evt; int enable; - SINT32 clock; + SINT32 clk; enable = beep.low & beep.buz; if (beep.enable != enable) { @@ -128,12 +128,12 @@ static void beep_eventset(void) { } beep.enable = enable; if (beep.events < BEEPEVENT_MAX) { - clock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK; + clk = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK; evt = beep.event + beep.events; beep.events++; - evt->clock = (clock - beep.clock) * beepcfg.samplebase; + evt->clock = (clk - beep.clock) * beepcfg.samplebase; evt->enable = enable; - beep.clock = clock; + beep.clock = clk; } } } diff --git a/sound/beepg.c b/sound/beepg.c index ee128b8a..c36068d7 100644 --- a/sound/beepg.c +++ b/sound/beepg.c @@ -9,7 +9,7 @@ static void oneshot(BEEP bp, SINT32 *pcm, UINT count) { SINT32 vol; const BPEVENT *bev; - SINT32 clock; + SINT32 clk; int event; SINT32 remain; SINT32 samp; @@ -18,34 +18,34 @@ const BPEVENT *bev; bev = bp->event; if (bp->events) { bp->events--; - clock = bev->clock; + clk = bev->clock; event = bev->enable; bev++; } else { - clock = 0x40000000; + clk = 0x40000000; event = bp->lastenable; } do { remain = (1 << 16); samp = 0; - while(remain >= clock) { - remain -= clock; + while(remain >= clk) { + remain -= clk; if (bp->lastenable) { - samp += clock; + samp += clk; } bp->lastenable = event; if (bp->events) { bp->events--; - clock = bev->clock; + clk = bev->clock; event = bev->enable; bev++; } else { - clock = 0x40000000; + clk = 0x40000000; } } - clock -= remain; + clk -= remain; if (bp->lastenable) { samp += remain; } @@ -65,7 +65,7 @@ static void rategenerator(BEEP bp, SINT32 *pcm, UINT count) { const BPEVENT *bev; SINT32 samp; SINT32 remain; - SINT32 clock; + SINT32 clk; int event; UINT r; @@ -73,19 +73,19 @@ const BPEVENT *bev; bev = bp->event; if (bp->events) { bp->events--; - clock = bev->clock; + clk = bev->clock; event = bev->enable; bev++; } else { - clock = 0x40000000; + clk = 0x40000000; event = bp->lastenable; } do { - if (clock >= (1 << 16)) { - r = clock >> 16; + if (clk >= (1 << 16)) { + r = clk >> 16; r = min(r, count); - clock -= r << 16; + clk -= r << 16; count -= r; if (bp->lastenable) { do { @@ -111,24 +111,24 @@ const BPEVENT *bev; else { remain = (1 << 16); samp = 0; - while(remain >= clock) { - remain -= clock; + while(remain >= clk) { + remain -= clk; if (bp->lastenable) { - samp += clock; + samp += clk; } bp->lastenable = event; bp->cnt = 0; if (bp->events) { bp->events--; - clock = bev->clock; + clk = bev->clock; event = bev->enable; bev++; } else { - clock = 0x40000000; + clk = 0x40000000; } } - clock -= remain; + clk -= remain; if (bp->lastenable) { samp += remain; } diff --git a/sound/cs4231c.c b/sound/cs4231c.c index 202526c2..159da96f 100644 --- a/sound/cs4231c.c +++ b/sound/cs4231c.c @@ -169,14 +169,14 @@ static void setdataalign(void) { cs4231.bufdatas &= ~3; } -void cs4231_control(UINT index, REG8 dat) { +void cs4231_control(UINT idx, REG8 dat) { UINT8 modify; DMACH dmach; - modify = ((UINT8 *)&cs4231.reg)[index] ^ dat; - ((UINT8 *)&cs4231.reg)[index] = dat; - switch(index) { + modify = ((UINT8 *)&cs4231.reg)[idx] ^ dat; + ((UINT8 *)&cs4231.reg)[idx] = dat; + switch(idx) { case CS4231REG_PLAYFMT: if (modify & 0xf0) { setdataalign(); diff --git a/sound/opngen.h b/sound/opngen.h index a1a62caa..8a761c4e 100644 --- a/sound/opngen.h +++ b/sound/opngen.h @@ -25,7 +25,7 @@ enum { #define EVC_BITS 10 #define ENV_BITS 16 #define KF_BITS 6 -#define FREQ_BITS 20 +#define FREQ_BITS 21 #define ENVTBL_BIT 14 #define SINTBL_BIT 14 @@ -57,7 +57,7 @@ enum { #define EVC_BITS 10 #define ENV_BITS 16 #define KF_BITS 6 -#define FREQ_BITS 20 +#define FREQ_BITS 21 #define ENVTBL_BIT 14 #define SINTBL_BIT 15 diff --git a/sound/opngenc.c b/sound/opngenc.c index f21534fc..3ca0f4fe 100644 --- a/sound/opngenc.c +++ b/sound/opngenc.c @@ -54,8 +54,10 @@ void opngen_initialize(UINT rate) { UINT ratebit; int i; + char sft; int j; double pom; + long detune; double freq; UINT32 calcrate; @@ -73,7 +75,6 @@ void opngen_initialize(UINT rate) { for (i=0; i= 21) - freq = FREQBASE4096 * dttable[i*32 + j] * - (1 << (FREQ_BITS-21)); -#else - freq = FREQBASE4096 * dttable[i*32 + j] / - (1 << (21-FREQ_BITS)); -#endif - detunetable[i][j] = (long)freq; - detunetable[i+4][j] = (long)-freq; + detune = dttable[i*32 + j]; + sft = ratebit + (FREQ_BITS - 21); + if (sft >= 0) { + detune <<= sft; + } + else { + detune >>= (0 - sft); + } + + detunetable[i][j] = detune; + detunetable[i+4][j] = -detune; } } for (i=0; i<4; i++) { @@ -164,10 +167,10 @@ void opngen_initialize(UINT rate) { decaytable[i] = (long)(freq / OPM_DRRATE); #endif if (attacktable[i] >= EC_DECAY) { - TRACEOUT(("attacktable %d %d %d", i, attacktable[i], EC_DECAY)); + TRACEOUT(("attacktable %d %d %ld", i, attacktable[i], EC_DECAY)); } if (decaytable[i] >= EC_DECAY) { - TRACEOUT(("decaytable %d %d %d", i, decaytable[i], EC_DECAY)); + TRACEOUT(("decaytable %d %d %ld", i, decaytable[i], EC_DECAY)); } } attacktable[62] = EC_DECAY - 1; diff --git a/sound/sound.c b/sound/sound.c index 8f6b4c71..aae8fd3a 100644 --- a/sound/sound.c +++ b/sound/sound.c @@ -242,7 +242,7 @@ void sound_reset(void) { void sound_changeclock(void) { - UINT32 clock; + UINT32 clk; UINT hz; UINT hzmax; @@ -251,19 +251,19 @@ void sound_changeclock(void) { } // とりあえず 25で割り切れる。 - clock = pccore.realclock / 25; + clk = pccore.realclock / 25; hz = soundcfg.rate / 25; // で、クロック数に合せて調整。(64bit演算しろよな的) - hzmax = (1 << (32 - 8)) / (clock >> 8); + hzmax = (1 << (32 - 8)) / (clk >> 8); while(hzmax < hz) { - clock = (clock + 1) >> 1; + clk = (clk + 1) >> 1; hz = (hz + 1) >> 1; } - TRACEOUT(("hzbase/clockbase = %d/%d", hz, clock)); + TRACEOUT(("hzbase/clockbase = %d/%d", hz, clk)); soundcfg.hzbase = hz; - soundcfg.clockbase = clock; - soundcfg.minclock = 2 * clock / hz; + soundcfg.clockbase = clk; + soundcfg.minclock = 2 * clk / hz; soundcfg.lastclock = CPU_CLOCK; } diff --git a/sound/vermouth/midimod.c b/sound/vermouth/midimod.c index 03dc4fd1..ca90bb69 100644 --- a/sound/vermouth/midimod.c +++ b/sound/vermouth/midimod.c @@ -579,12 +579,14 @@ VEXTERN void VEXPORT midimod_loadall(MIDIMOD mod) { } -VEXTERN void VEXPORT midimod_loadallex(MIDIMOD mod, FNMIDIOUTLAEXCB cb, +VEXTERN int VEXPORT midimod_loadallex(MIDIMOD mod, FNMIDIOUTLAEXCB cb, void *userdata) { - MIDIOUTLAEXPARAM param; - UINT b; + int result; + MIDIOUTLAEXPARAM param; + UINT b; + result = MIDIOUT_SUCCESS; if (mod) { ZeroMemory(¶m, sizeof(param)); param.userdata = userdata; @@ -593,8 +595,13 @@ VEXTERN void VEXPORT midimod_loadallex(MIDIMOD mod, FNMIDIOUTLAEXCB cb, } for (b=0; b<(MIDI_BANKS*2); b++) { param.bank = b; - inst_bankloadex(mod, b, cb, ¶m); + result = inst_bankloadex(mod, b, cb, ¶m); + if (result != MIDIOUT_SUCCESS) + { + break; + } } } + return result; } diff --git a/sound/vermouth/midiout.h b/sound/vermouth/midiout.h index 049f8ee3..a3a00e90 100644 --- a/sound/vermouth/midiout.h +++ b/sound/vermouth/midiout.h @@ -140,7 +140,7 @@ VEXTERN void VEXPORT midimod_loadprogram(MIDIMOD mod, UINT num); VEXTERN void VEXPORT midimod_loadrhythm(MIDIMOD mod, UINT num); VEXTERN void VEXPORT midimod_loadgm(MIDIMOD mod); VEXTERN void VEXPORT midimod_loadall(MIDIMOD mod); -VEXTERN void VEXPORT midimod_loadallex(MIDIMOD mod, FNMIDIOUTLAEXCB cb, +VEXTERN int VEXPORT midimod_loadallex(MIDIMOD mod, FNMIDIOUTLAEXCB cb, void *userdata); #ifdef __cplusplus diff --git a/sound/vermouth/midvoice.c b/sound/vermouth/midvoice.c index 75c9e106..39c8101f 100644 --- a/sound/vermouth/midvoice.c +++ b/sound/vermouth/midvoice.c @@ -10,12 +10,12 @@ #define RESAMPLING(d, s, p) { \ int dat1; \ int dat2; \ - int div; \ + int _div; \ dat1 = (s)[(p) >> FREQ_SHIFT]; \ - div = (p) & FREQ_MASK; \ - if (div) { \ + _div = (p) & FREQ_MASK; \ + if (_div) { \ dat2 = (s)[((p) >> FREQ_SHIFT) + 1]; \ - dat1 += ((dat2 - dat1) * div) >> FREQ_SHIFT; \ + dat1 += ((dat2 - dat1) * _div) >> FREQ_SHIFT; \ } \ *(d) = (_SAMPLE)dat1; \ } diff --git a/sound/vermouth/vermouth.h b/sound/vermouth/vermouth.h index 21591cd4..49926b2d 100644 --- a/sound/vermouth/vermouth.h +++ b/sound/vermouth/vermouth.h @@ -30,7 +30,7 @@ typedef struct { UINT bank; UINT num; } MIDIOUTLAEXPARAM; -typedef int (*FNMIDIOUTLAEXCB)(MIDIOUTLAEXPARAM *param); +typedef BRESULT (*FNMIDIOUTLAEXCB)(MIDIOUTLAEXPARAM *param); #ifdef __cplusplus @@ -57,7 +57,7 @@ VEXTERN void VEXPORT midimod_loadprogram(MIDIMOD hdl, UINT num); VEXTERN void VEXPORT midimod_loadrhythm(MIDIMOD hdl, UINT num); VEXTERN void VEXPORT midimod_loadgm(MIDIMOD hdl); VEXTERN void VEXPORT midimod_loadall(MIDIMOD hdl); -VEXTERN void VEXPORT midimod_loadallex(MIDIMOD hdl, FNMIDIOUTLAEXCB cb, void *userdata); +VEXTERN int VEXPORT midimod_loadallex(MIDIMOD hdl, FNMIDIOUTLAEXCB cb, void *userdata); #ifdef __cplusplus } diff --git a/statsave.c b/statsave.c index 618699fe..8563430d 100644 --- a/statsave.c +++ b/statsave.c @@ -398,31 +398,31 @@ static int statflag_writepath(STFLAGH sfh, const OEMCHAR *path, return(statflag_write(sfh, &sp, sizeof(sp))); } -static int statflag_checkpath(STFLAGH sfh, const OEMCHAR *devname) { +static int statflag_checkpath(STFLAGH sfh, const OEMCHAR *dvname) { int ret; STATPATH sp; FILEH fh; OEMCHAR buf[256]; - DOSDATE date; - DOSTIME time; + DOSDATE dosdate; + DOSTIME dostime; ret = statflag_read(sfh, &sp, sizeof(sp)); if (sp.path[0]) { fh = file_open_rb(sp.path); if (fh != FILEH_INVALID) { - file_getdatetime(fh, &date, &time); + file_getdatetime(fh, &dosdate, &dostime); file_close(fh); - if ((memcmp(&sp.date, &date, sizeof(date))) || - (memcmp(&sp.time, &time, sizeof(time)))) { + if ((memcmp(&sp.date, &dosdate, sizeof(dosdate))) || + (memcmp(&sp.time, &dostime, sizeof(dostime)))) { ret |= STATFLAG_DISKCHG; - OEMSPRINTF(buf, str_updated, devname); + OEMSPRINTF(buf, str_updated, dvname); statflag_seterr(sfh, buf); } } else { ret |= STATFLAG_DISKCHG; - OEMSPRINTF(buf, str_notfound, devname); + OEMSPRINTF(buf, str_notfound, dvname); statflag_seterr(sfh, buf); } } diff --git a/update.txt b/update.txt index ce58dbaa..ed5dc5c6 100644 --- a/update.txt +++ b/update.txt @@ -5,20 +5,6 @@  mov SS直後に割り込みが発生するとか不都合があります。  これについては、直す気力があれば(286コードを追っかける時だけだし…) -// ---- IA-32 info - - ・CPU panic や警告表示時に msgbox() という API を使用します。 - compiler.h あたりで適当に定義してください。 - - ・sigsetjmp(3), siglongjmp(3) が無いアーキテクチャは以下の define を - compiler.h あたりに追加してください。 - -------------------------------------------------------------------------------- -#define sigjmp_buf jmp_buf -#define sigsetjmp(env, mask) setjmp(env) -#define siglongjmp(env, val) longjmp(env, val) -------------------------------------------------------------------------------- -  CHARSET_OEMについて   要は毎回Shift-JISに変換せずに OS依存の文字コードで処理しようとする… @@ -83,6 +69,52 @@    フォント関数回りを SJISからOEMコードに移行 +// ---- + + ver0.83 → ver0.84 + ・i386c - rcl, rcr 命令の不具合を修正 + ・i386c - 命令実行中に例外が発生した際にスタックポインタがずれてしまう +   不具合を修正 + ・i386c - 割込みゲート、トラップゲートで不正なエラーコードが設定されてしまう +   不具合を修正 + ・i386c - セグメント有効範囲チェックの不具合を修正 + ・i386c - enter, leave, call, pusha, popa 命令でリアルモード時でもスタック +   サイズチェックで例外が発生してしまう不具合を修正 + ・i386c - セグメントレジスタ設定時の不具合を修正 + ・i386c - タスクゲート処理時のエラーコードプッシュ処理の不具合を修正 + ・i386c - iret 命令で仮想86モードに復帰する際にスタック上の値によっては例外が + 発生してしまう不具合を修正 + ・BIOS - 1F90h A20有効後に戻していない不具合を修正 + ・BIOS - 1Bh メモリアクセスを修正 + + (Win32) +  ・NASM 2.09を使用するように修正 +  ・UNICODE版(np2nt.exe) で hostdrv が利用できないバグを修正 + + (X11) +  ・STATSAVE 用のメニューを作成 +  ・レジューム/STATSAVE のファイル名を変更 +   - レジューム: ${HOME}/.np2/sav/sav → ${HOME}/.np2/sav/np2.sav +   - STATSAVE : ${HOME}/.np2/sav/s00 → ${HOME}/.np2/sav/np2.s00 +  ・フォントパスに設定ファイル名が含まれてしまう不具合を修正 +  ・エミュレーションウィンドウサイズ変更用のメニューを作成 +  ・GLIB, GTK+ の deprecated なインタフェースを使用しない様に修正 +  ・CPU 使用率を軽減する様に修正 +  ・コンフィグ画面からサウンドドライバを変更出切る様に修正 +  ・環境によってサウンドを有効にした場合にプログラムがクラッシュする +   不具合を修正 +  ・GLIB, GTK+ の deprecated なインタフェースを無効化しない様に修正 +  ・ビルド、インストールに Autotools(configure) を使用するように修正 +  ・ファイル保存時に既に同名ファイルが存在した場合、上書き確認ダイアログを +   表示するように修正 (GTK+-2.8 以降のみ有効) +  ・F12 キー機能割り当てに Help キーを追加 +  ・ファイルダイアログの floppy disk image Files にて拡張子が flp のファイル +   を表示する様に修正 +  ・Screen Option の LCD のチェックを外しても外れない不具合を修正 +  ・FDD シーク音が鳴らない不具合を修正 +  ・色深度が 8bpp の場合に配列の範囲外にアクセスしていた不具合を修正 + + // ----  ver0.82 → ver0.83 @@ -167,6 +199,7 @@   ENABLE_TRAPが定義されてなければ見る必要はありません。 +// ----  ver0.79 → ver0.80  ・BIOS - スクロールコマンド修正 diff --git a/vram/scrndraw.c b/vram/scrndraw.c index 0eaa9a6d..58dfdab3 100644 --- a/vram/scrndraw.c +++ b/vram/scrndraw.c @@ -47,7 +47,7 @@ void scrndraw_changepalette(void) { static UINT8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { RGB32 pal[16]; - SINT32 clock; + SINT32 clk; PAL1EVENT *event; PAL1EVENT *eventterm; int nextupdate; @@ -55,12 +55,12 @@ static UINT8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { TRACEOUT(("rasterdraw: maxy = %d", maxy)); CopyMemory(pal, palevent.pal, sizeof(pal)); - clock = maxy; - clock += 2; - clock += np2cfg.realpal; - clock -= 32; - clock += (gdc.m.para[GDC_SYNC + 5] >> 2) & 0x3f; - clock *= gdc.rasterclock; + clk = maxy; + clk += 2; + clk += np2cfg.realpal; + clk -= 32; + clk += (gdc.m.para[GDC_SYNC + 5] >> 2) & 0x3f; + clk *= gdc.rasterclock; event = palevent.event; eventterm = event + palevent.events; nextupdate = 0; @@ -69,7 +69,7 @@ static UINT8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { break; } // お弁当はあった? - if (clock < event->clock) { + if (clk < event->clock) { if (!(np2cfg.LCD_MODE & 1)) { pal_makeanalog(pal, 0xffff); } @@ -85,7 +85,7 @@ static UINT8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { (*sdrawfn)(sdraw, y); nextupdate = y; // お弁当を食べる - while(clock < event->clock) { + while(clk < event->clock) { ((UINT8 *)pal)[event->color] = event->value; event++; if (event >= eventterm) { @@ -93,7 +93,7 @@ static UINT8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { } } } - clock -= 2 * gdc.rasterclock; + clk -= 2 * gdc.rasterclock; } if (nextupdate < maxy) { if (!(np2cfg.LCD_MODE & 1)) { diff --git a/win9x/Makefile b/win9x/Makefile index 2cdc6308..9b3d6d2f 100644 --- a/win9x/Makefile +++ b/win9x/Makefile @@ -1,8 +1,7 @@ # makefile for cygwin -# gcc version 3.3.3 +# gcc version 4.3.4 - -AS = nasmw +AS = nasm CC = gcc RC = windres RM = rm -f @@ -39,6 +38,8 @@ I286CASM = $(I286C)/x86 IOASM = $(IO)/x86 VRAMASM = $(VRAM)/x86 +DXSDKINC = "$(DXSDK_DIR)include" + RESDIR = ./resources/1252 HEADERS = $(TARGET)/compiler.h $(BASE)/common.h $(COMMON)/milstr.h \ @@ -72,13 +73,13 @@ ZLIBS = $(ZLIB)/crc32.h $(ZLIB)/inffast.h $(ZLIB)/inffixed.h \ AOPT = -f win32 COPT = -c -Wall -pipe -O6 -fomit-frame-pointer -fkeep-inline-functions \ - -fsigned-char -mno-cygwin -march=pentium \ + -fsigned-char -mwindows -march=pentium \ -DWIN32 -DNDEBUG -D_WINDOWS \ -I$(BASE) -I$(COMMON) -I$(CODECNV) -I$(I286C) -I$(MEM) -I$(IO) \ -I$(CBUS) -I$(BIOS) -I$(LIO) -I$(VRAM) -I$(SOUND) -I$(VERMOUTH) \ -I$(GETSND) -I$(FDD) -I$(FONT) -I$(GENERIC) -I$(TARGET) \ -I$(DIALOG) -I$(DEBUGUTY) -I$(X86ASM) -I$(ZLIB) -LOPT = -mno-cygwin -lstdc++ +LOPT = -mwindows -lstdc++ NP2OBJ = $(OBJ)/strres.o $(OBJ)/milstr.o $(OBJ)/_memory.o \ $(OBJ)/textfile.o $(OBJ)/profile.o $(OBJ)/rect.o \ @@ -1041,13 +1042,13 @@ $(OBJ)/scrnmng.o : $(TARGET)/scrnmng.cpp $(HEADERS) \ $(TARGET)/mousemng.h $(TARGET)/scrnmng.h \ $(TARGET)/sysmng.h $(TARGET)/dclock.h \ $(TARGET)/menu.h $(VRAM)/scrndraw.h $(VRAM)/palettes.h - $(CC) $(COPT) -o $@ $< + $(CC) $(COPT) -I$(DXSDKINC) -o $@ $< $(OBJ)/soundmng.o : $(TARGET)/soundmng.cpp $(HEADERS) $(COMMON)/parts.h \ $(COMMON)/wavefile.h $(TARGET)/np2.h \ $(TARGET)/soundmng.h $(TARGET)/extromio.h \ $(SOUND)/sound.h $(VERMOUTH)/vermouth.h - $(CC) $(COPT) -o $@ $< + $(CC) $(COPT) -I$(DXSDKINC) -o $@ $< $(OBJ)/sysmng.o : $(TARGET)/sysmng.cpp $(HEADERS) $(PCCORES) \ $(TARGET)/np2.h $(TARGET)/dosio.h $(TARGET)/sysmng.h \ @@ -1097,7 +1098,7 @@ $(OBJ)/ini.o : $(TARGET)/ini.cpp $(HEADERS) $(PCCORES) \ $(CC) $(COPT) -o $@ $< $(OBJ)/dd2.o : $(TARGET)/dd2.cpp $(HEADERS) $(TARGET)/dd2.h - $(CC) $(COPT) -o $@ $< + $(CC) $(COPT) -I$(DXSDKINC) -o $@ $< $(OBJ)/toolwin.o : $(TARGET)/toolwin.cpp $(HEADERS) $(PCCORES) \ $(COMMON)/strres.h $(TARGET)/resource.h \ diff --git a/win9x/board118.c b/win9x/board118.c index fa72fd4d..e8d24fcc 100644 --- a/win9x/board118.c +++ b/win9x/board118.c @@ -210,8 +210,8 @@ static void IOOUTCALL ymfr_o18a(UINT port, REG8 dat) { } S98_put(NORMAL2608, addr, dat); if (addr < 0x10) { - if (addr != 0x0e) { - *((UINT8 *)(&psg1.reg) + addr) = dat; + *((UINT8 *)(&psg1.reg) + addr) = dat; + if (addr < 0x0e) { juliet_YMF288A(addr, dat); if (addr == 0x07) { keydisp_psgmix(&psg1); diff --git a/win9x/cmmidi.cpp b/win9x/cmmidi.cpp index 1880d1eb..9f0816fe 100644 --- a/win9x/cmmidi.cpp +++ b/win9x/cmmidi.cpp @@ -1,18 +1,29 @@ -#include "compiler.h" -#include "np2.h" -#include "mimpidef.h" -#include "commng.h" +/** + * @file cmmidi.cpp + * @brief Communication port manager (MIDI) + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include "np2.h" +#include "mimpidef.h" +#include "commng.h" #if defined(VERMOUTH_LIB) || defined(MT32SOUND_DLL) -#include "sound.h" +#include "sound.h" #endif #if defined(VERMOUTH_LIB) -#include "vermouth.h" +#include "vermouth.h" #endif #if defined(MT32SOUND_DLL) -#include "mt32snd.h" +#include "mt32snd.h" #endif -#include "keydisp.h" +#include "keydisp.h" +#if !defined(__GNUC__) +#pragma comment(lib, "winmm.lib") +#endif // !defined(__GNUC__) #if defined(VERMOUTH_LIB) extern MIDIMOD vermouth_module; diff --git a/win9x/compiler.cpp b/win9x/compiler.cpp new file mode 100644 index 00000000..0a1d7e1e --- /dev/null +++ b/win9x/compiler.cpp @@ -0,0 +1,5 @@ +// compiler.cpp : 標準インクルードファイルを含むソース ファイル +// np2.pch : 生成されるプリコンパイル済ヘッダー +// compiler.obj : 生成されるプリコンパイル済タイプ情報 + +#include "compiler.h" diff --git a/win9x/compiler.h b/win9x/compiler.h index f99eda57..69012cd1 100644 --- a/win9x/compiler.h +++ b/win9x/compiler.h @@ -1,15 +1,29 @@ - -#define _WIN32_IE 0x0200 - -#include -#include -#include -#include -#include +/** + * @file compiler.h + * @brief include file for standard system include files, + * or project specific include files that are used frequently, + * but are changed infrequently + * + * @author $Author: yui $ + * @date $Date: 2011/03/09 00:22:18 $ + */ + +#include "targetver.h" +#include +#if !defined(__GNUC__) +#include +#endif // !defined(__GNUC__) +#include +#include +#include #if defined(TRACE) -#include +#include #endif +#ifndef _T +#define _T(x) TEXT(x) +#endif // !_T + #define BYTESEX_LITTLE #if !defined(OSLANG_UTF8) #if !defined(_UNICODE) @@ -36,7 +50,7 @@ typedef unsigned __int64 UINT64; #define snprintf _snprintf #define vsnprintf _vsnprintf #else -#include +#include typedef signed int SINT; typedef signed char SINT8; typedef unsigned char UINT8; @@ -54,9 +68,11 @@ typedef signed __int64 SINT64; #define STOREINTELDWORD(a, b) *(UINT32 *)(a) = (b) #define STOREINTELWORD(a, b) *(UINT16 *)(a) = (b) +#if !defined(__GNUC__) #define sigjmp_buf jmp_buf #define sigsetjmp(env, mask) setjmp(env) #define siglongjmp(env, val) longjmp(env, val) +#endif // !defined(__GNUC__) #define msgbox(title, msg) __msgbox(title, msg) #define STRCALL __stdcall @@ -74,15 +90,13 @@ typedef signed __int64 SINT64; #define OEMSTRLEN strlen #endif - -#include "common.h" -#include "win32sub.h" -#include "milstr.h" -#include "_memory.h" -#include "rect.h" -#include "lstarray.h" -#include "trace.h" - +#include "common.h" +#include "win32sub.h" +#include "milstr.h" +#include "_memory.h" +#include "rect.h" +#include "lstarray.h" +#include "trace.h" #define GETTICK() GetTickCount() #if defined(TRACE) @@ -162,6 +176,5 @@ typedef signed __int64 SINT64; #define SOUNDRESERVE 20 - #define SUPPORT_TEXTCNV diff --git a/win9x/dclockd.x86 b/win9x/dclockd.x86 index 40766027..014ba793 100644 --- a/win9x/dclockd.x86 +++ b/win9x/dclockd.x86 @@ -13,7 +13,6 @@ DCLOCK_PATMAX equ 13 .drawing resw 1 .clk_x resb 1 .pad resb 1 -.dat endstruc struc dclockpos_t @@ -174,7 +173,7 @@ _dclock_out8: push ebx push ebp mov ecx, [esp+16+4] sub dword [esp+16+8], byte DCLOCK_WIDTH - mov esi, _dclock + dclock_t.dat + mov esi, _dclock + dclock_t_size mov edi, _dclockpal + dclockpal_t.pal8 mov bh, 4 .lp1: mov bl, 3 @@ -208,7 +207,7 @@ _dclock_out16: push ebx push esi push edi push ebp - mov esi, _dclock + dclock_t.dat + mov esi, _dclock + dclock_t_size mov edi, _dclockpal + dclockpal_t.pal16 mov ecx, [esp+16+4] sub dword [esp+16+8], byte (DCLOCK_WIDTH * 2) @@ -244,7 +243,7 @@ _dclock_out24: push ebx push esi push edi push ebp - mov esi, _dclock + dclock_t.dat + mov esi, _dclock + dclock_t_size mov edi, _dclockpal + dclockpal_t.pal32 mov ecx, [esp+16+4] sub dword [esp+16+8], (DCLOCK_WIDTH * 3) @@ -283,7 +282,7 @@ _dclock_out32: push ebx push esi push edi push ebp - mov esi, _dclock + dclock_t.dat + mov esi, _dclock + dclock_t_size mov edi, _dclockpal + dclockpal_t.pal32 mov ecx, [esp+16+4] sub dword [esp+16+8], (DCLOCK_WIDTH * 4) @@ -314,5 +313,3 @@ _dclock_out32: push ebx pop ebx ret - ends - diff --git a/win9x/dd2.cpp b/win9x/dd2.cpp index e9982c33..6a1920b0 100644 --- a/win9x/dd2.cpp +++ b/win9x/dd2.cpp @@ -1,7 +1,19 @@ -#include "compiler.h" -#include -#include "dd2.h" - +/** + * @file dd2.cpp + * @brief DirectDraw 2 surface + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include +#include "dd2.h" + +#if !defined(__GNUC__) +#pragma comment(lib, "ddraw.lib") +#pragma comment(lib, "dxguid.lib") +#endif // !defined(__GNUC__) typedef struct { HWND hwnd; diff --git a/win9x/dialog/d_screen.cpp b/win9x/dialog/d_screen.cpp index 7ab8d56b..5a69840d 100644 --- a/win9x/dialog/d_screen.cpp +++ b/win9x/dialog/d_screen.cpp @@ -1,20 +1,31 @@ -#include "compiler.h" -#include -#include -#include "strres.h" -#include "resource.h" -#include "np2.h" -#include "oemtext.h" -#include "scrnmng.h" -#include "sysmng.h" -#include "np2class.h" -#include "dialog.h" -#include "dialogs.h" -#include "pccore.h" -#include "iocore.h" -#include "scrndraw.h" -#include "palettes.h" - +/** + * @file d_screen.cpp + * @brief Screen configure dialog procedure + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include +#include +#include "strres.h" +#include "resource.h" +#include "np2.h" +#include "oemtext.h" +#include "scrnmng.h" +#include "sysmng.h" +#include "np2class.h" +#include "dialog.h" +#include "dialogs.h" +#include "pccore.h" +#include "iocore.h" +#include "scrndraw.h" +#include "palettes.h" + +#if !defined(__GNUC__) +#pragma comment(lib, "comctl32.lib") +#endif // !defined(__GNUC__) static LRESULT CALLBACK Scropt1DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { diff --git a/win9x/dialog/d_serial.cpp b/win9x/dialog/d_serial.cpp index f0b27ddf..d74f7d2a 100644 --- a/win9x/dialog/d_serial.cpp +++ b/win9x/dialog/d_serial.cpp @@ -1,19 +1,30 @@ -#include "compiler.h" -#include -#include "strres.h" -#include "resource.h" -#include "np2.h" -#include "dosio.h" -#include "commng.h" -#include "sysmng.h" -#include "np2class.h" -#include "dialog.h" -#include "dialogs.h" -#include "pccore.h" -#include "iocore.h" -#include "pc9861k.h" -#include "dipswbmp.h" - +/** + * @file d_serial.cpp + * @brief Serial configure dialog procedure + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include +#include "strres.h" +#include "resource.h" +#include "np2.h" +#include "dosio.h" +#include "commng.h" +#include "sysmng.h" +#include "np2class.h" +#include "dialog.h" +#include "dialogs.h" +#include "pccore.h" +#include "iocore.h" +#include "pc9861k.h" +#include "dipswbmp.h" + +#if !defined(__GNUC__) +#pragma comment(lib, "comctl32.lib") +#endif // !defined(__GNUC__) static const CBPARAM cpPort[] = { diff --git a/win9x/dialog/d_sound.cpp b/win9x/dialog/d_sound.cpp index 98d796e0..060d4093 100644 --- a/win9x/dialog/d_sound.cpp +++ b/win9x/dialog/d_sound.cpp @@ -1,24 +1,35 @@ -#include "compiler.h" -#include -#include -#include "strres.h" -#include "resource.h" -#include "np2.h" -#include "oemtext.h" -#include "dosio.h" -#include "joymng.h" -#include "sysmng.h" -#include "menu.h" -#include "np2class.h" -#include "dialog.h" -#include "dialogs.h" -#include "pccore.h" -#include "iocore.h" -#include "sound.h" -#include "fmboard.h" -#include "s98.h" -#include "dipswbmp.h" - +/** + * @file d_sound.cpp + * @brief Sound configure dialog procedure + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include +#include +#include "strres.h" +#include "resource.h" +#include "np2.h" +#include "oemtext.h" +#include "dosio.h" +#include "joymng.h" +#include "sysmng.h" +#include "menu.h" +#include "np2class.h" +#include "dialog.h" +#include "dialogs.h" +#include "pccore.h" +#include "iocore.h" +#include "sound.h" +#include "fmboard.h" +#include "s98.h" +#include "dipswbmp.h" + +#if !defined(__GNUC__) +#pragma comment(lib, "comctl32.lib") +#endif // !defined(__GNUC__) static const CBPARAM cpIO26[] = { diff --git a/win9x/dialog/dialogs.cpp b/win9x/dialog/dialogs.cpp index 2767d69f..7f88cfe4 100644 --- a/win9x/dialog/dialogs.cpp +++ b/win9x/dialog/dialogs.cpp @@ -1,17 +1,27 @@ -#include "compiler.h" -#include "resource.h" -#include "strres.h" -#include "bmpdata.h" -#include "oemtext.h" -#include "dosio.h" -#include "commng.h" -#include "dialogs.h" -#include "np2.h" +/** + * @file dialogs.cpp + * @brief Dialog subroutines + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include "resource.h" +#include "strres.h" +#include "bmpdata.h" +#include "oemtext.h" +#include "dosio.h" +#include "commng.h" +#include "dialogs.h" +#include "np2.h" #if defined(MT32SOUND_DLL) -#include "mt32snd.h" +#include "mt32snd.h" #endif - +#if !defined(__GNUC__) +#pragma comment(lib, "winmm.lib") +#endif // !defined(__GNUC__) // ---- enable diff --git a/win9x/joymng.cpp b/win9x/joymng.cpp index 8f0263dc..b69a396b 100644 --- a/win9x/joymng.cpp +++ b/win9x/joymng.cpp @@ -1,8 +1,19 @@ -#include "compiler.h" -#include "np2.h" -#include "joymng.h" -#include "menu.h" +/** + * @file joymng.cpp + * @brief Joystick manager + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ +#include "compiler.h" +#include "np2.h" +#include "joymng.h" +#include "menu.h" + +#if !defined(__GNUC__) +#pragma comment(lib, "winmm.lib") +#endif // !defined(__GNUC__) enum { JOY_LEFT_BIT = 0x04, diff --git a/win9x/np2.cpp b/win9x/np2.cpp index 6e5a1806..f667c2a4 100644 --- a/win9x/np2.cpp +++ b/win9x/np2.cpp @@ -1,56 +1,64 @@ -#include "compiler.h" -#include +/** + * @file np2.cpp + * @brief main window + * + * @author $Author: yui $ + * @date $Date: 2011/02/17 10:36:05 $ + */ + +#include "compiler.h" +#include +#include #ifndef __GNUC__ -#include +#include #endif -#include "resource.h" -#include "strres.h" -#include "parts.h" -#include "np2.h" -#include "np2arg.h" -#include "dosio.h" -#include "extromio.h" -#include "commng.h" -#include "joymng.h" -#include "mousemng.h" -#include "scrnmng.h" -#include "soundmng.h" -#include "sysmng.h" -#include "winkbd.h" -#include "ini.h" -#include "menu.h" -#include "winloc.h" -#include "sstp.h" -#include "sstpmsg.h" -#include "toolwin.h" -#include "juliet.h" -#include "np2class.h" -#include "dialog.h" -#include "cpucore.h" -#include "pccore.h" -#include "iocore.h" -#include "pc9861k.h" -#include "mpu98ii.h" -#include "bios.h" -#include "scrndraw.h" -#include "sound.h" -#include "beep.h" -#include "s98.h" -#include "diskdrv.h" -#include "fddfile.h" -#include "timing.h" -#include "keystat.h" -#include "debugsub.h" -#include "subwind.h" -#include "viewer.h" +#include "resource.h" +#include "strres.h" +#include "parts.h" +#include "np2.h" +#include "np2arg.h" +#include "dosio.h" +#include "extromio.h" +#include "commng.h" +#include "joymng.h" +#include "mousemng.h" +#include "scrnmng.h" +#include "soundmng.h" +#include "sysmng.h" +#include "winkbd.h" +#include "ini.h" +#include "menu.h" +#include "winloc.h" +#include "sstp.h" +#include "sstpmsg.h" +#include "toolwin.h" +#include "juliet.h" +#include "np2class.h" +#include "dialog.h" +#include "cpucore.h" +#include "pccore.h" +#include "iocore.h" +#include "pc9861k.h" +#include "mpu98ii.h" +#include "bios.h" +#include "scrndraw.h" +#include "sound.h" +#include "beep.h" +#include "s98.h" +#include "diskdrv.h" +#include "fddfile.h" +#include "timing.h" +#include "keystat.h" +#include "debugsub.h" +#include "subwind.h" +#include "viewer.h" #if !defined(_WIN64) -#include "cputype.h" +#include "cputype.h" #endif #if defined(SUPPORT_DCLOCK) -#include "dclock.h" +#include "dclock.h" #endif - #ifdef BETA_RELEASE #define OPENING_WAIT 1500 #endif diff --git a/win9x/np2.dsp b/win9x/np2.dsp index 60cb376c..13255129 100644 --- a/win9x/np2.dsp +++ b/win9x/np2.dsp @@ -47,7 +47,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"compiler.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" @@ -57,7 +57,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comdlg32.lib comctl32.lib wsock32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 !ELSEIF "$(CFG)" == "np2 - Win32 Release NT" @@ -73,7 +73,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /YX"compiler.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" @@ -83,7 +83,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comdlg32.lib comctl32.lib wsock32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2nt.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2nt.exe" !ELSEIF "$(CFG)" == "np2 - Win32 Trace" @@ -100,7 +100,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "TRACE" /D "MEMTRACE" /D "NP2APPDEV" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "TRACE" /D "MEMTRACE" /D "NP2APPDEV" /YX"compiler.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" @@ -110,7 +110,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comdlg32.lib comctl32.lib wsock32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2t.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2t.exe" !ELSEIF "$(CFG)" == "np2 - Win32 WaveRec" @@ -127,7 +127,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "SUPPORT_WAVEREC" /D "SUPPORT_PX" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "SUPPORT_WAVEREC" /D "SUPPORT_PX" /YX"compiler.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" @@ -137,7 +137,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comdlg32.lib comctl32.lib wsock32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2wr.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2wr.exe" !ELSEIF "$(CFG)" == "np2 - Win32 Trap" @@ -154,7 +154,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "TRACE" /D "MEMTRACE" /D "ENABLE_TRAP" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "TRACE" /D "MEMTRACE" /D "ENABLE_TRAP" /YX"compiler.h" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "NDEBUG" @@ -164,7 +164,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comdlg32.lib comctl32.lib wsock32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2tr.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np2tr.exe" !ELSEIF "$(CFG)" == "np2 - Win32 Debug" @@ -180,7 +180,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "TRACE" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".\\" /I ".\x86" /I ".\dialog" /I ".\debuguty" /I "..\\" /I "..\common" /I "..\codecnv" /I "..\i286x" /I "..\mem" /I "..\io" /I "..\cbus" /I "..\bios" /I "..\lio" /I "..\vram" /I "..\sound" /I "..\sound\vermouth" /I "..\sound\getsnd" /I "..\fdd" /I "..\font" /I "..\generic" /I "..\trap" /I "..\zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "TRACE" /YX"compiler.h" /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x411 /d "_DEBUG" @@ -190,7 +190,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comdlg32.lib comctl32.lib wsock32.lib shell32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\bin/np2d.exe" /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\bin/np2d.exe" /pdbtype:sept !ENDIF @@ -248,7 +248,7 @@ InputPath=.\x86\PARTS.X86 InputName=PARTS "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -260,7 +260,7 @@ InputPath=.\x86\PARTS.X86 InputName=PARTS "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -272,7 +272,7 @@ InputPath=.\x86\PARTS.X86 InputName=PARTS "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -284,7 +284,7 @@ InputPath=.\x86\PARTS.X86 InputName=PARTS "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -296,7 +296,7 @@ InputPath=.\x86\PARTS.X86 InputName=PARTS "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -308,7 +308,7 @@ InputPath=.\x86\PARTS.X86 InputName=PARTS "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -383,7 +383,7 @@ InputPath=..\I286X\MEMORY.X86 InputName=MEMORY "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -395,7 +395,7 @@ InputPath=..\I286X\MEMORY.X86 InputName=MEMORY "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -407,7 +407,7 @@ InputPath=..\I286X\MEMORY.X86 InputName=MEMORY "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -419,7 +419,7 @@ InputPath=..\I286X\MEMORY.X86 InputName=MEMORY "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -431,7 +431,7 @@ InputPath=..\I286X\MEMORY.X86 InputName=MEMORY "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -443,7 +443,7 @@ InputPath=..\I286X\MEMORY.X86 InputName=MEMORY "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -470,7 +470,7 @@ InputPath=..\MEM\x86\DMAX86.X86 InputName=DMAX86 "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -482,7 +482,7 @@ InputPath=..\MEM\x86\DMAX86.X86 InputName=DMAX86 "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -494,7 +494,7 @@ InputPath=..\MEM\x86\DMAX86.X86 InputName=DMAX86 "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -506,7 +506,7 @@ InputPath=..\MEM\x86\DMAX86.X86 InputName=DMAX86 "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -518,7 +518,7 @@ InputPath=..\MEM\x86\DMAX86.X86 InputName=DMAX86 "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -530,7 +530,7 @@ InputPath=..\MEM\x86\DMAX86.X86 InputName=DMAX86 "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -549,7 +549,7 @@ InputPath=..\MEM\x86\MEMEGC.X86 InputName=MEMEGC "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -561,7 +561,7 @@ InputPath=..\MEM\x86\MEMEGC.X86 InputName=MEMEGC "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -573,7 +573,7 @@ InputPath=..\MEM\x86\MEMEGC.X86 InputName=MEMEGC "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -585,7 +585,7 @@ InputPath=..\MEM\x86\MEMEGC.X86 InputName=MEMEGC "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -597,7 +597,7 @@ InputPath=..\MEM\x86\MEMEGC.X86 InputName=MEMEGC "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -609,7 +609,7 @@ InputPath=..\MEM\x86\MEMEGC.X86 InputName=MEMEGC "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -896,7 +896,7 @@ InputPath=.\x86\MAKEGRPH.X86 InputName=MAKEGRPH "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -908,7 +908,7 @@ InputPath=.\x86\MAKEGRPH.X86 InputName=MAKEGRPH "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -920,7 +920,7 @@ InputPath=.\x86\MAKEGRPH.X86 InputName=MAKEGRPH "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -932,7 +932,7 @@ InputPath=.\x86\MAKEGRPH.X86 InputName=MAKEGRPH "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -944,7 +944,7 @@ InputPath=.\x86\MAKEGRPH.X86 InputName=MAKEGRPH "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -956,7 +956,7 @@ InputPath=.\x86\MAKEGRPH.X86 InputName=MAKEGRPH "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj -i.\x86\ -i..\i286x\ -i..\io\x86\ $(InputPath) # End Custom Build @@ -1083,7 +1083,7 @@ InputPath=.\x86\OPNGENG.X86 InputName=OPNGENG "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1095,7 +1095,7 @@ InputPath=.\x86\OPNGENG.X86 InputName=OPNGENG "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1107,7 +1107,7 @@ InputPath=.\x86\OPNGENG.X86 InputName=OPNGENG "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1119,7 +1119,7 @@ InputPath=.\x86\OPNGENG.X86 InputName=OPNGENG "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1131,7 +1131,7 @@ InputPath=.\x86\OPNGENG.X86 InputName=OPNGENG "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1143,7 +1143,7 @@ InputPath=.\x86\OPNGENG.X86 InputName=OPNGENG "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1432,6 +1432,37 @@ SOURCE=.\COMMNG.CPP # End Source File # Begin Source File +SOURCE=.\COMPILER.CPP + +!IF "$(CFG)" == "np2 - Win32 Release" + +# ADD CPP /Yc"compiler.h" + +!ELSEIF "$(CFG)" == "np2 - Win32 Release NT" + +# ADD CPP /Yc"compiler.h" + +!ELSEIF "$(CFG)" == "np2 - Win32 Trace" + +# ADD CPP /Yc"compiler.h" + +!ELSEIF "$(CFG)" == "np2 - Win32 WaveRec" + +# ADD CPP /Yc"compiler.h" + +!ELSEIF "$(CFG)" == "np2 - Win32 Trap" + +# ADD CPP /Yc"compiler.h" + +!ELSEIF "$(CFG)" == "np2 - Win32 Debug" + +# ADD CPP /Yc"compiler.h" + +!ENDIF + +# End Source File +# Begin Source File + SOURCE=.\x86\CPUTYPE.X86 !IF "$(CFG)" == "np2 - Win32 Release" @@ -1442,7 +1473,7 @@ InputPath=.\x86\CPUTYPE.X86 InputName=CPUTYPE "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1454,7 +1485,7 @@ InputPath=.\x86\CPUTYPE.X86 InputName=CPUTYPE "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1466,7 +1497,7 @@ InputPath=.\x86\CPUTYPE.X86 InputName=CPUTYPE "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1478,7 +1509,7 @@ InputPath=.\x86\CPUTYPE.X86 InputName=CPUTYPE "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1490,7 +1521,7 @@ InputPath=.\x86\CPUTYPE.X86 InputName=CPUTYPE "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1502,7 +1533,7 @@ InputPath=.\x86\CPUTYPE.X86 InputName=CPUTYPE "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1525,7 +1556,7 @@ InputPath=.\DCLOCKD.X86 InputName=DCLOCKD "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1537,7 +1568,7 @@ InputPath=.\DCLOCKD.X86 InputName=DCLOCKD "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1549,7 +1580,7 @@ InputPath=.\DCLOCKD.X86 InputName=DCLOCKD "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1561,7 +1592,7 @@ InputPath=.\DCLOCKD.X86 InputName=DCLOCKD "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1573,7 +1604,7 @@ InputPath=.\DCLOCKD.X86 InputName=DCLOCKD "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build @@ -1585,7 +1616,7 @@ InputPath=.\DCLOCKD.X86 InputName=DCLOCKD "$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - nasmw -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) + nasm -f win32 -o $(IntDir)\$(InputName).obj $(InputPath) # End Custom Build diff --git a/win9x/np21.dsp b/win9x/np21.dsp index 684dc5e2..25bfe298 100644 --- a/win9x/np21.dsp +++ b/win9x/np21.dsp @@ -56,7 +56,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /map /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /map /machine:I386 !ELSEIF "$(CFG)" == "np21 - Win32 Release NT" @@ -82,7 +82,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np21nt.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np21nt.exe" !ELSEIF "$(CFG)" == "np21 - Win32 Trace" @@ -109,7 +109,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np21t.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np21t.exe" !ELSEIF "$(CFG)" == "np21 - Win32 Trap" @@ -136,7 +136,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np21trap.exe" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /map /machine:I386 /out:"..\bin/np21trap.exe" !ELSEIF "$(CFG)" == "np21 - Win32 Debug" @@ -162,7 +162,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib dxguid.lib DSOUND.LIB winmm.lib comctl32.lib wsock32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\bin/np21d.exe" /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\bin/np21d.exe" /pdbtype:sept !ENDIF @@ -338,6 +338,10 @@ SOURCE=..\I386C\ia32\instructions\flag_ctrl.c # End Source File # Begin Source File +SOURCE=..\I386C\ia32\instructions\fpu.c +# End Source File +# Begin Source File + SOURCE=..\I386C\ia32\instructions\fpu\fpdummy.c # End Source File # Begin Source File diff --git a/win9x/np21.manifest.xml b/win9x/np21.manifest.xml new file mode 100644 index 00000000..94155ca2 --- /dev/null +++ b/win9x/np21.manifest.xml @@ -0,0 +1,22 @@ + + + + Neko Project 21 + + + + + + diff --git a/win9x/np21.rc b/win9x/np21.rc new file mode 100644 index 00000000..feb0df36 --- /dev/null +++ b/win9x/np21.rc @@ -0,0 +1,1177 @@ +// Generated by ResEdit 1.5.8 +// Copyright (C) 2006-2011 +// http://www.resedit.net + +#include +#include +#include +#include "..\win9x\resource.h" + + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +SEEK1WAV EXTROM "..\\win9x\\resources\\fddseek1.wav" + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +SEEKWAV EXTROM "..\\win9x\\resources\\fddseek.wav" + + + +// +// Bitmap resources +// +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +NP2BMP BITMAP "..\\win9x\\resources\\nekop2.bmp" + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +NP2TOOL BITMAP "..\\win9x\\resources\\np2tool.bmp" + + + +// +// Menu resources +// +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +201 MENU +{ + MENUITEM "&Tool window", 40001 + MENUITEM SEPARATOR + MENUITEM "&Centering", 40005 + MENUITEM "&Window snap", 40006 + MENUITEM "&Background", 40007 + MENUITEM "Back&ground sound", 40008 + MENUITEM SEPARATOR + MENUITEM " 320x200", 40054 + MENUITEM " 480x300", 40056 + MENUITEM " 640x400", 40058 + MENUITEM " 800x500", 40060 + MENUITEM " 960x600", 40062 + MENUITEM "1280x800", 40066 + MENUITEM SEPARATOR +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +202 MENU +{ + MENUITEM "&Key display", 40002 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +203 MENU +{ + MENUITEM "&Soft keyboard", 40003 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +204 MENU +{ + MENUITEM "Memory debug", 40004 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +205 MENU +{ + MENUITEM "Memory dump", 40010 + MENUITEM "Debug utility", 40011 + MENUITEM SEPARATOR +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +211 MENU +{ + POPUP "&Emulate" + { + MENUITEM "&Reset", 40101 + MENUITEM SEPARATOR + MENUITEM "&Configure...", 40102 + MENUITEM "&New disk...", 40103 + MENUITEM "&Font...", 40104 + MENUITEM SEPARATOR + MENUITEM "E&xit", 40105 + } + POPUP "&Screen" + { + MENUITEM "&Window", 40501 + MENUITEM "&Fullscreen", 40502 + MENUITEM SEPARATOR + MENUITEM "Nor&mal", 40503 + MENUITEM "&Left rotated", 40504 + MENUITEM "&Right rotated", 40505 + MENUITEM SEPARATOR + MENUITEM "&Disp vsync", 40506 + MENUITEM "Real &palettes", 40507 + MENUITEM "&No wait", 40508 + MENUITEM "&Auto frame", 40509 + MENUITEM "F&ull frame", 40510 + MENUITEM "1/&2 frame", 40511 + MENUITEM "1/&3 frame", 40512 + MENUITEM "1/&4 frame", 40513 + MENUITEM SEPARATOR + MENUITEM "&Screen option...", 40514 + } + POPUP "&Device" + { + POPUP "&Keyboard" + { + MENUITEM "&Keyboard", 40601 + MENUITEM "JoyKey-&1", 40602 + MENUITEM "JoyKey-&2", 40603 + MENUITEM SEPARATOR + MENUITEM "mechanical &SHIFT", 40611 + MENUITEM "mechanical &CTRL", 40612 + MENUITEM "mechanical &GRPH", 40613 + MENUITEM SEPARATOR + MENUITEM "F12 = &Mouse", 40621 + MENUITEM "F12 = Co&py", 40622 + MENUITEM "F12 = S&top", 40623 + MENUITEM "F12 = tenkey [=]", 40624 + MENUITEM "F12 = tenkey [ , ]", 40625 + MENUITEM "F12 = User1", 40626 + MENUITEM "F12 = User2", 40627 + } + POPUP "&Sound" + { + MENUITEM "Beep &off", 40631 + MENUITEM "Beep &low", 40632 + MENUITEM "Beep &mid", 40633 + MENUITEM "Beep &high", 40634 + MENUITEM SEPARATOR + MENUITEM "&Disable boards", 40641 + MENUITEM "PC-9801-&14", 40642 + MENUITEM "PC-9801-&26K", 40643 + MENUITEM "PC-9801-8&6", 40644 + MENUITEM "PC-9801-26K + 86", 40645 + MENUITEM "PC-9801-86 + &Chibi-oto", 40646 + MENUITEM "PC-9801-11&8", 40647 + MENUITEM "S&peak board", 40648 + MENUITEM "Sp&ark board", 40649 + MENUITEM "&AMD-98", 40652 + MENUITEM "&JastSound", 40653 + MENUITEM SEPARATOR + MENUITEM "&Seek sound", 40654 + } + POPUP "M&emory" + { + MENUITEM "64&0KB", 40661 + MENUITEM "&1.6MB", 40662 + MENUITEM "&3.6MB", 40663 + MENUITEM "&7.6MB", 40664 + MENUITEM "&11.6MB", 40665 + MENUITEM "&13.6MB", 40666 + } + MENUITEM "&Mouse", 40671 + MENUITEM SEPARATOR + MENUITEM "Se&rial option...", 40672 + MENUITEM SEPARATOR + MENUITEM "MIDI &option...", 40673 + MENUITEM "MIDI &panic", 40674 + MENUITEM SEPARATOR + MENUITEM "So&und option...", 40675 + } + POPUP "&Other" + { + MENUITEM "&BMP save...", 40701 + MENUITEM "&S98 logging...", 40702 + MENUITEM "Ca&lendar...", 40704 + POPUP "Shortcut &key" + { + MENUITEM "Alt+Enter", 40721 + MENUITEM "Alt+F4", 40722 + } + MENUITEM "&Clock disp", 40705 + MENUITEM "&Frame disp", 40706 + MENUITEM "Joy re&verse", 40707 + MENUITEM "Joy &rapid", 40708 + MENUITEM "&Mouse rapid", 40709 + MENUITEM "&Use SSTP", 40710 + MENUITEM SEPARATOR + MENUITEM "&Help...", 40712 + MENUITEM "&About...", 40713 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +212 MENU +{ + POPUP "S&tat" + { + MENUITEM "Save 0", 40201 + MENUITEM "Save 1", 40202 + MENUITEM "Save 2", 40203 + MENUITEM "Save 3", 40204 + MENUITEM "Save 4", 40205 + MENUITEM "Save 5", 40206 + MENUITEM "Save 6", 40207 + MENUITEM "Save 7", 40208 + MENUITEM "Save 8", 40209 + MENUITEM "Save 9", 40210 + MENUITEM SEPARATOR + MENUITEM "Load 0", 40251 + MENUITEM "Load 1", 40252 + MENUITEM "Load 2", 40253 + MENUITEM "Load 3", 40254 + MENUITEM "Load 4", 40255 + MENUITEM "Load 5", 40256 + MENUITEM "Load 6", 40257 + MENUITEM "Load 7", 40258 + MENUITEM "Load 8", 40259 + MENUITEM "Load 9", 40260 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +221 MENU +{ + POPUP "FDD&1" + { + MENUITEM "&Open...", 40301 + MENUITEM SEPARATOR + MENUITEM "&Eject", 40311 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +222 MENU +{ + POPUP "FDD&2" + { + MENUITEM "&Open...", 40302 + MENUITEM SEPARATOR + MENUITEM "&Eject", 40312 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +223 MENU +{ + POPUP "FDD&3" + { + MENUITEM "&Open...", 40303 + MENUITEM SEPARATOR + MENUITEM "&Eject", 40313 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +224 MENU +{ + POPUP "FDD&4" + { + MENUITEM "&Open...", 40304 + MENUITEM SEPARATOR + MENUITEM "&Eject", 40314 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +231 MENU +{ + POPUP "IDE #0" + { + MENUITEM "&Open...", 40401 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40411 + } + POPUP "IDE #1" + { + MENUITEM "&Open...", 40402 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40412 + } + POPUP "IDE #2" + { + MENUITEM "&Open...", 40403 + MENUITEM SEPARATOR + MENUITEM "&Eject", 40413 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +232 MENU +{ + POPUP "SASI #0" + { + MENUITEM "&Open...", 40401 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40411 + } + POPUP "SASI #1" + { + MENUITEM "&Open...", 40402 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40412 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +233 MENU +{ + POPUP "SCSI #0" + { + MENUITEM "&Open...", 40421 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40431 + } + POPUP "SCSI #1" + { + MENUITEM "&Open...", 40422 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40432 + } + POPUP "SCSI #2" + { + MENUITEM "&Open...", 40423 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40433 + } + POPUP "SCSI #3" + { + MENUITEM "&Open...", 40424 + MENUITEM SEPARATOR + MENUITEM "&Remove", 40434 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +241 MENU +{ + MENUITEM "Otomi x2", 40650 + MENUITEM "Otomi x2 + 86", 40651 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +251 MENU +{ + MENUITEM "&Wave record", 40703 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +252 MENU +{ + MENUITEM "&i286 save", 40711 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +253 MENU +{ + MENUITEM "&i386 save", 40711 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +301 MENU +{ + MENUITEM "&Close", 41001 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +311 MENU +{ + POPUP "&Skins" + { + MENUITEM "&Select Skin...", 41111 + MENUITEM SEPARATOR + MENUITEM "<&Base Skin>", 41112 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +321 MENU +{ + POPUP "&Module" + { + MENUITEM "&FM", 42001 + MENUITEM "&MIDI", 42002 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +331 MENU +{ + POPUP "&System" + { + MENUITEM "&New window", 43001 + MENUITEM SEPARATOR + MENUITEM "&Close", 43002 + MENUITEM "&All close", 43003 + } + POPUP "&Mode" + { + MENUITEM "&Register", 43011 + MENUITEM "&Dump segment", 43012 + MENUITEM "&Main memory dump", 43013 + MENUITEM "&Unassemble", 43014 + MENUITEM "&Sound register", 43015 + MENUITEM SEPARATOR + MENUITEM "&Lock", 43016 + } + POPUP "&Edit" + { + MENUITEM "Enter &address...", 43021, GRAYED + MENUITEM SEPARATOR + MENUITEM "Seg = &CS", 43022 + MENUITEM "Seg = &DS", 43023 + MENUITEM "Seg = &ES", 43024 + MENUITEM "Seg = &SS", 43025 + MENUITEM "Seg = &TEXT", 43026 + MENUITEM SEPARATOR + MENUITEM "Reload", 43027, GRAYED + } + POPUP "&Memory", GRAYED + { + MENUITEM "VRAM page&0", 43031 + MENUITEM "VRAM page&1", 43032 + MENUITEM SEPARATOR + MENUITEM "&A20 line", 43035 + } +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +341 MENU +{ + MENUITEM "TRACE", 43101 + MENUITEM "VERBOSE", 43102 + MENUITEM SEPARATOR + MENUITEM "Enable", 43103 + MENUITEM "File out", 43104 + MENUITEM "Clear", 43105 + MENUITEM SEPARATOR +} + + + +// +// Dialog resources +// +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +111 DIALOG 0, 0, 182, 200 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Configure" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + GROUPBOX "CPU", -1, 8, 8, 110, 44 + COMBOBOX 11101, 14, 22, 54, 43, WS_GROUP | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "x", -1, 72, 26, 8, 8, SS_LEFT + COMBOBOX 11102, 80, 22, 32, 80, WS_GROUP | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + RTEXT "", 11103, 14, 41, 80, 8, SS_RIGHT + LTEXT "MHz", -1, 96, 41, 16, 8, SS_LEFT + GROUPBOX "Architecture", -1, 8, 56, 166, 28 + AUTORADIOBUTTON "PC-9801VM", 11104, 16, 68, 54, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "PC-9801VX", 11105, 72, 68, 54, 10 + AUTORADIOBUTTON "PC-286", 11106, 128, 68, 44, 10 + GROUPBOX "Sound", -1, 8, 88, 166, 46 + LTEXT "Sampling rate", -1, 14, 101, 50, 8, SS_LEFT + AUTORADIOBUTTON "11KHz", 11107, 66, 100, 34, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "22KHz", 11108, 102, 100, 34, 10 + AUTORADIOBUTTON "44KHz", 11109, 138, 100, 34, 10 + LTEXT "Buffer", -1, 14, 118, 50, 8, SS_LEFT + EDITTEXT 11110, 66, 116, 30, 12, WS_GROUP + LTEXT "ms", -1, 102, 118, 16, 8, SS_LEFT + AUTOCHECKBOX "Allow resize", 11111, 8, 142, 162, 10 + AUTOCHECKBOX "Disable MMX", 11112, 8, 156, 162, 10 + AUTOCHECKBOX "Confirm dialog (on reset/exit)", 11113, 8, 170, 162, 10 + AUTOCHECKBOX "Resume", 11114, 8, 184, 162, 10 + DEFPUSHBUTTON "&OK", 1, 130, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 130, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +112 DIALOG 0, 0, 182, 186 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Configure" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + GROUPBOX "CPU", -1, 8, 8, 110, 44 + COMBOBOX 11101, 14, 22, 54, 43, WS_GROUP | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "x", -1, 72, 26, 8, 8, SS_LEFT + COMBOBOX 11102, 80, 22, 32, 80, WS_GROUP | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + RTEXT "", 11103, 14, 41, 80, 8, SS_RIGHT + LTEXT "MHz", -1, 96, 41, 16, 8, SS_LEFT + GROUPBOX "Architecture", -1, 8, 56, 166, 28 + AUTORADIOBUTTON "PC-9801VM", 11104, 16, 68, 54, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "PC-9801VX", 11105, 72, 68, 54, 10 + AUTORADIOBUTTON "PC-286", 11106, 128, 68, 44, 10 + GROUPBOX "Sound", -1, 8, 88, 166, 46 + LTEXT "Sampling rate", -1, 14, 101, 50, 8, SS_LEFT + AUTORADIOBUTTON "11KHz", 11107, 66, 100, 34, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "22KHz", 11108, 102, 100, 34, 10 + AUTORADIOBUTTON "44KHz", 11109, 138, 100, 34, 10 + LTEXT "Buffer", -1, 14, 118, 50, 8, SS_LEFT + EDITTEXT 11110, 66, 116, 30, 12, WS_GROUP + LTEXT "ms", -1, 102, 118, 16, 8, SS_LEFT + AUTOCHECKBOX "Allow resize", 11111, 8, 142, 162, 10 + AUTOCHECKBOX "Confirm dialog (on reset/exit)", 11113, 8, 156, 162, 10 + AUTOCHECKBOX "Resume", 11114, 8, 170, 162, 10 + DEFPUSHBUTTON "&OK", 1, 130, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 130, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +121 DIALOG 0, 0, 180, 48 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Create new FD image" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + LTEXT "Disk label", -1, 8, 10, 38, 8, SS_LEFT + EDITTEXT 12101, 48, 8, 64, 12, WS_GROUP | ES_AUTOHSCROLL + LTEXT "Disk type", -1, 8, 28, 38, 8, SS_LEFT + AUTORADIOBUTTON "2DD", 12102, 48, 27, 30, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "2HD", 12103, 80, 27, 30, 10 + DEFPUSHBUTTON "&OK", 1, 128, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 128, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +122 DIALOG 0, 0, 160, 48 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Create new HD image" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + LTEXT "HDD size", -1, 8, 10, 38, 8, SS_LEFT + COMBOBOX 12201, 48, 8, 32, 46, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + LTEXT "MB", -1, 86, 10, 16, 8, SS_LEFT + RTEXT "", 12202, 48, 30, 54, 8, SS_RIGHT + DEFPUSHBUTTON "&OK", 1, 108, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 108, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +123 DIALOG 0, 0, 144, 54 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Create new SASI image" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + AUTORADIOBUTTON "5MB", 12301, 8, 8, 38, 10, WS_TABSTOP + AUTORADIOBUTTON "10MB", 12302, 48, 8, 38, 10 + AUTORADIOBUTTON "15MB", 12303, 8, 22, 38, 10 + AUTORADIOBUTTON "20MB", 12304, 48, 22, 38, 10 + AUTORADIOBUTTON "30MB", 12305, 8, 36, 38, 10 + AUTORADIOBUTTON "40MB", 12306, 48, 36, 38, 10 + DEFPUSHBUTTON "&OK", 1, 92, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 92, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +124 DIALOG 0, 0, 196, 48 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Create new FD image" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + LTEXT "Disk label", -1, 8, 10, 38, 8, SS_LEFT + EDITTEXT 12101, 48, 8, 64, 12, WS_GROUP | ES_AUTOHSCROLL + LTEXT "Disk type", -1, 8, 28, 38, 8, SS_LEFT + AUTORADIOBUTTON "2DD", 12102, 48, 27, 30, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "2HD", 12103, 78, 27, 30, 10 + AUTORADIOBUTTON "1.44", 12104, 108, 27, 30, 10 + DEFPUSHBUTTON "&OK", 1, 144, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 144, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +131 DIALOG 0, 0, 172, 96 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Video" +FONT 9, "MS Pゴシック" +{ + AUTOCHECKBOX "Liquid Crystal Display", 13101, 8, 8, 156, 10, WS_GROUP + AUTOCHECKBOX "Reverse", 13102, 20, 24, 144, 10 + AUTOCHECKBOX "Use skipline revisions", 13103, 8, 40, 156, 10, WS_GROUP + LTEXT "Ratio", -1, 20, 55, 22, 8, SS_LEFT + CONTROL "Slider1", 13104, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 44, 55, 96, 10 + RTEXT "", 13105, 144, 54, 20, 10, SS_RIGHT | SS_SUNKEN +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +132 DIALOG 0, 0, 172, 96 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "FullScreen" +FONT 9, "MS Pゴシック" +{ + AUTOCHECKBOX "No change screen colors", 13201, 8, 8, 156, 10, WS_GROUP + AUTOCHECKBOX "No change screen resolution", 13202, 8, 24, 156, 10, WS_GROUP + LTEXT "Zoom", -1, 8, 45, 22, 8, SS_LEFT + COMBOBOX 13203, 40, 42, 96, 80, WS_GROUP | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +133 DIALOG 0, 0, 172, 96 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Chip" +FONT 9, "MS Pゴシック" +{ + GROUPBOX "Graphic Display Controller", -1, 8, 8, 120, 28 + AUTORADIOBUTTON "uPD7220", 13301, 20, 20, 50, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "uPD72020", 13302, 72, 20, 50, 10 + GROUPBOX "Graphic Charger", 13303, 8, 42, 156, 28 + AUTORADIOBUTTON "None", 13304, 20, 54, 34, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "GRCG", 13305, 54, 54, 34, 10 + AUTORADIOBUTTON "GRCG+", 13306, 88, 54, 40, 10 + AUTORADIOBUTTON "EGC", 13307, 128, 54, 34, 10 + AUTOCHECKBOX "&Enable 16color-board (PC-9801-24)", 13308, 16, 80, 148, 10 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +134 DIALOG 0, 0, 172, 96 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Timing" +FONT 9, "MS Pゴシック" +{ + LTEXT "T-RAM", -1, 8, 9, 30, 8, SS_LEFT + CONTROL "Slider1", 13401, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 9, 80, 10 + RTEXT "", 13402, 124, 8, 20, 10, SS_RIGHT | SS_SUNKEN + LTEXT "V-RAM", -1, 8, 25, 30, 8, SS_LEFT + CONTROL "Slider2", 13403, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 25, 80, 10 + RTEXT "", 13404, 124, 24, 20, 10, SS_RIGHT | SS_SUNKEN + LTEXT "GRCG", -1, 8, 41, 30, 8, SS_LEFT + CONTROL "Slider3", 13405, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 41, 80, 10 + RTEXT "", 13406, 124, 40, 20, 10, SS_RIGHT | SS_SUNKEN + LTEXT "clock", -1, 148, 9, 22, 8, SS_LEFT + LTEXT "clock", -1, 148, 25, 22, 8, SS_LEFT + LTEXT "clock", -1, 148, 41, 22, 8, SS_LEFT + LTEXT "Real palettes adjust", -1, 8, 60, 156, 8, SS_LEFT + CONTROL "Slider3", 13407, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 73, 80, 10 + RTEXT "", 13408, 124, 72, 20, 10, SS_RIGHT | SS_SUNKEN +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +141 DIALOG 0, 0, 224, 140 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "COM1" +FONT 9, "MS Pゴシック" +{ + LTEXT "Port", -1, 8, 10, 30, 8, SS_LEFT + COMBOBOX 14101, 40, 8, 48, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Assign", 14102, 8, 28, 132, 84 + LTEXT "Speed", 14103, 16, 45, 40, 8, SS_LEFT + COMBOBOX 14110, 60, 42, 48, 128, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bps", 14104, 112, 45, 26, 8, SS_LEFT + LTEXT "Data bits", 14105, 16, 61, 40, 8, SS_LEFT + COMBOBOX 14111, 60, 58, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bits", 14106, 112, 61, 26, 8, SS_LEFT + LTEXT "Parity", 14107, 16, 77, 40, 8, SS_LEFT + COMBOBOX 14112, 60, 74, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Stop bits", 14108, 16, 93, 40, 8, SS_LEFT + COMBOBOX 14113, 60, 90, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bit(s)", 14109, 112, 93, 26, 8, SS_LEFT + GROUPBOX "Assign", 14114, 8, 28, 186, 84 + LTEXT "Device", 14115, 16, 45, 30, 8, SS_LEFT + COMBOBOX 14117, 50, 42, 136, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Module", 14116, 16, 61, 30, 8, SS_LEFT + COMBOBOX 14118, 50, 58, 136, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + AUTOCHECKBOX "Use program define file (MIMPI define)", 14119, 16, 82, 170, 10 + LTEXT "", 14120, 26, 94, 148, 10, SS_LEFT | SS_SUNKEN + PUSHBUTTON "...", 14121, 176, 94, 10, 10 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +142 DIALOG 0, 0, 224, 140 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "PC-9861K" +FONT 9, "MS Pゴシック" +{ + AUTOCHECKBOX "Enable", 14201, 8, 8, 208, 10 + LTEXT "CH.1", -1, 8, 27, 20, 8, SS_LEFT + RTEXT "Speed", -1, 30, 27, 22, 8, SS_RIGHT + COMBOBOX 14202, 54, 24, 40, 128, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + RTEXT "INT", -1, 100, 27, 12, 8, SS_RIGHT + COMBOBOX 14203, 114, 24, 24, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + RTEXT "Mode", -1, 144, 27, 20, 8, SS_RIGHT + COMBOBOX 14204, 166, 24, 52, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "CH.2", -1, 8, 45, 18, 8, SS_LEFT + RTEXT "Speed", -1, 30, 45, 22, 8, SS_RIGHT + COMBOBOX 14205, 54, 42, 40, 128, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + RTEXT "INT", -1, 100, 45, 12, 8, SS_RIGHT + COMBOBOX 14206, 114, 42, 24, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + RTEXT "Mode", -1, 144, 45, 20, 8, SS_RIGHT + COMBOBOX 14207, 166, 42, 52, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "DIP-SW", -1, 8, 64, 34, 8, SS_LEFT + CONTROL "", 14208, WC_STATIC, SS_ENHMETAFILE | SS_NOTIFY, 44, 64, 172, 68 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +143 DIALOG 0, 0, 224, 140 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "CH.1" +FONT 9, "MS Pゴシック" +{ + LTEXT "Port", -1, 8, 10, 30, 8, SS_LEFT + COMBOBOX 14301, 40, 8, 48, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Assign", 14302, 8, 28, 132, 84 + LTEXT "Speed", 14303, 16, 45, 40, 8, SS_LEFT + COMBOBOX 14310, 60, 42, 48, 128, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bps", 14304, 112, 45, 26, 8, SS_LEFT + LTEXT "Data bits", 14305, 16, 61, 38, 8, SS_LEFT + COMBOBOX 14311, 60, 58, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bits", 14306, 112, 61, 26, 8, SS_LEFT + LTEXT "Parity", 14307, 16, 77, 40, 8, SS_LEFT + COMBOBOX 14312, 60, 74, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Stop bits", 14308, 16, 93, 40, 8, SS_LEFT + COMBOBOX 14313, 60, 90, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bit(s)", 14309, 112, 93, 26, 8, SS_LEFT + GROUPBOX "Assign", 14314, 8, 28, 186, 84 + LTEXT "Device", 14315, 16, 45, 30, 8, SS_LEFT + COMBOBOX 14317, 50, 42, 136, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Module", 14316, 16, 61, 30, 8, SS_LEFT + COMBOBOX 14318, 50, 58, 136, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + AUTOCHECKBOX "Use program define file (MIMPI define)", 14319, 16, 82, 170, 10 + LTEXT "", 14320, 26, 94, 148, 10, SS_LEFT | SS_SUNKEN + PUSHBUTTON "...", 14321, 176, 94, 10, 10 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +144 DIALOG 0, 0, 224, 140 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "CH.2" +FONT 9, "MS Pゴシック" +{ + LTEXT "Port", -1, 8, 10, 30, 8, SS_LEFT + COMBOBOX 14401, 40, 8, 48, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + GROUPBOX "Assign", 14402, 8, 28, 132, 84 + LTEXT "Speed", 14403, 16, 45, 40, 8, SS_LEFT + COMBOBOX 14410, 60, 42, 48, 128, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bps", 14404, 112, 45, 26, 8, SS_LEFT + LTEXT "Data bits", 14405, 16, 61, 40, 8, SS_LEFT + COMBOBOX 14411, 60, 58, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bits", 14406, 112, 61, 26, 8, SS_LEFT + LTEXT "Parity", 14407, 16, 77, 38, 8, SS_LEFT + COMBOBOX 14412, 60, 74, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST + LTEXT "Stop bits", 14408, 16, 93, 40, 8, SS_LEFT + COMBOBOX 14413, 60, 90, 48, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "bit(s)", 14409, 112, 93, 26, 8, SS_LEFT + GROUPBOX "Assign", 14414, 8, 28, 186, 84 + LTEXT "Device", 14415, 16, 45, 30, 8, SS_LEFT + COMBOBOX 14417, 50, 42, 132, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Module", 14416, 16, 61, 30, 8, SS_LEFT + COMBOBOX 14418, 50, 58, 132, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + AUTOCHECKBOX "Use program define file (MIMPI define)", 14419, 16, 82, 170, 10 + LTEXT "", 14420, 26, 94, 148, 10, SS_LEFT | SS_SUNKEN + PUSHBUTTON "...", 14421, 176, 94, 10, 10 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +151 DIALOG 0, 0, 192, 178 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "MPU-PC98II" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + LTEXT "I/O port", -1, 8, 10, 32, 8, SS_LEFT + COMBOBOX 15101, 44, 8, 48, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Interrupt", -1, 8, 26, 32, 8, SS_LEFT + COMBOBOX 15102, 44, 24, 48, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "DIP-SW", -1, 8, 46, 32, 8, SS_LEFT + CONTROL "", 15104, WC_STATIC, SS_ENHMETAFILE | SS_NOTIFY, 44, 46, 94, 26 + GROUPBOX "Assign", -1, 8, 72, 176, 98 + LTEXT "MIDI-OUT", -1, 16, 87, 40, 8, SS_LEFT + COMBOBOX 15106, 60, 84, 116, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "MIDI-IN", -1, 16, 103, 40, 8, SS_LEFT + COMBOBOX 15110, 60, 100, 116, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Module", -1, 16, 119, 40, 8, SS_LEFT + COMBOBOX 15105, 60, 116, 116, 96, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT + AUTOCHECKBOX "Use program define file (MIMPI define)", 15107, 16, 140, 160, 10 + LTEXT "", 15108, 26, 152, 138, 10, SS_LEFT | SS_SUNKEN + PUSHBUTTON "...", 15109, 166, 152, 10, 10 + DEFPUSHBUTTON "&OK", 1, 140, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 140, 26, 44, 14 + PUSHBUTTON "Defaults", 15103, 140, 58, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +152 DIALOGEX 0, 0, 184, 124 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Mixer" +FONT 9, "MS Pゴシック", 0, 0, 1 +{ + LTEXT "FM", -1, 8, 9, 30, 8, SS_LEFT + CONTROL "Slider1", 15201, TRACKBAR_CLASS, WS_GROUP | WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 9, 88, 10 + LTEXT "", 15202, 134, 8, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "PSG", -1, 8, 23, 30, 8, SS_LEFT + CONTROL "Slider16", 15203, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 23, 88, 10 + LTEXT "", 15204, 134, 22, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "ADPCM", -1, 8, 37, 30, 8, SS_LEFT + CONTROL "Slider2", 15205, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 37, 88, 10 + LTEXT "", 15206, 134, 36, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "PCM", -1, 8, 51, 30, 8, SS_LEFT + CONTROL "Slider4", 15207, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 51, 88, 10 + LTEXT "", 15208, 134, 50, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "Rhythm", -1, 8, 65, 30, 8, SS_LEFT + CONTROL "Slider8", 15209, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 65, 88, 10 + LTEXT "", 15210, 134, 64, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + PUSHBUTTON "Defaults", 15211, 136, 102, 40, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +153 DIALOGEX 0, 0, 184, 124 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "PC-9801-14" +FONT 9, "MS Pゴシック", 0, 0, 1 +{ + LTEXT "Left", -1, 8, 9, 30, 8, SS_LEFT + CONTROL "Slider1", 15301, TRACKBAR_CLASS, WS_GROUP | WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 9, 48, 10 + LTEXT "", 15302, 94, 8, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "Right", -1, 8, 23, 30, 8, SS_LEFT + CONTROL "Slider16", 15303, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 23, 48, 10 + LTEXT "", 15304, 94, 22, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "f2", -1, 10, 37, 30, 8, SS_LEFT + CONTROL "Slider2", 15305, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 37, 48, 10 + LTEXT "", 15306, 94, 36, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "f4", -1, 10, 51, 30, 8, SS_LEFT + CONTROL "Slider4", 15307, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 51, 48, 10 + LTEXT "", 15308, 94, 50, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "f8", -1, 10, 65, 30, 8, SS_LEFT + CONTROL "Slider8", 15309, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 65, 48, 10 + LTEXT "", 15310, 94, 64, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT + LTEXT "f16", -1, 10, 79, 30, 8, SS_LEFT + CONTROL "Slider16", 15311, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 40, 79, 48, 10 + LTEXT "", 15312, 94, 78, 16, 10, SS_LEFT | SS_SUNKEN, WS_EX_RIGHT +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +154 DIALOG 0, 0, 184, 124 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "26" +FONT 9, "MS Pゴシック" +{ + LTEXT "I/O port", -1, 8, 10, 30, 8, SS_LEFT + COMBOBOX 15401, 40, 8, 40, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Interrupt", -1, 104, 10, 30, 8, SS_LEFT + COMBOBOX 15402, 136, 8, 40, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "ROM", -1, 8, 28, 30, 8, SS_LEFT + COMBOBOX 15403, 40, 26, 40, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Jumper", -1, 8, 66, 30, 8, SS_LEFT + CONTROL "", 15404, WC_STATIC, SS_ENHMETAFILE | SS_NOTIFY, 40, 66, 136, 34 + PUSHBUTTON "Defaults", 15405, 136, 102, 40, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +155 DIALOG 0, 0, 184, 124 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "86" +FONT 9, "MS Pゴシック" +{ + LTEXT "I/O port", -1, 8, 10, 30, 8, SS_LEFT + COMBOBOX 15501, 40, 8, 40, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "Interrupt", 15502, 94, 9, 40, 10 + COMBOBOX 15503, 136, 8, 40, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Sound ID", -1, 8, 28, 30, 8, SS_LEFT + COMBOBOX 15504, 40, 26, 40, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "ROM", 15505, 94, 27, 40, 10 + LTEXT "DIP-SW", -1, 8, 66, 30, 8, SS_LEFT + CONTROL "", 15506, WC_STATIC, SS_ENHMETAFILE | SS_NOTIFY, 40, 66, 136, 34 + PUSHBUTTON "Defaults", 15507, 136, 102, 40, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +156 DIALOG 0, 0, 184, 124 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "SPB" +FONT 9, "MS Pゴシック" +{ + LTEXT "I/O port", -1, 8, 10, 30, 8, SS_LEFT + COMBOBOX 15601, 40, 8, 40, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "Interrupt", -1, 104, 10, 30, 8, SS_LEFT + COMBOBOX 15602, 136, 8, 40, 52, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + LTEXT "ROM", -1, 8, 28, 30, 8, SS_LEFT + COMBOBOX 15603, 40, 26, 40, 64, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "Reversed channel", 15609, 94, 27, 82, 10 + LTEXT "VR", -1, 8, 46, 30, 8, SS_LEFT + AUTOCHECKBOX "L", 15606, 40, 45, 22, 10 + AUTOCHECKBOX "R", 15607, 64, 45, 22, 10 + RTEXT "Level", -1, 88, 46, 22, 8, SS_RIGHT + CONTROL "Slider16", 15608, TRACKBAR_CLASS, WS_TABSTOP | TBS_BOTH | TBS_NOTICKS, 112, 46, 64, 10 + LTEXT "Jumper", -1, 8, 66, 30, 8, SS_LEFT + CONTROL "", 15604, WC_STATIC, SS_ENHMETAFILE | SS_NOTIFY, 40, 66, 136, 34 + PUSHBUTTON "Defaults", 15605, 136, 102, 40, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +157 DIALOG 0, 0, 184, 124 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "JoyPad" +FONT 9, "MS Pゴシック" +{ + AUTOCHECKBOX "Use JoyPad-1", 15701, 8, 8, 58, 10 + LTEXT "Trigger-1", -1, 24, 27, 40, 8, SS_LEFT + AUTOCHECKBOX "A", 15702, 64, 26, 21, 10, WS_GROUP + AUTOCHECKBOX "B", 15703, 86, 26, 21, 10, NOT WS_TABSTOP + AUTOCHECKBOX "C", 15704, 108, 26, 21, 10, NOT WS_TABSTOP + AUTOCHECKBOX "D", 15705, 130, 26, 21, 10, NOT WS_TABSTOP + LTEXT "Trigger-2", -1, 24, 43, 40, 8, SS_LEFT + AUTOCHECKBOX "A", 15706, 64, 42, 21, 10, WS_GROUP + AUTOCHECKBOX "B", 15707, 86, 42, 21, 10, NOT WS_TABSTOP + AUTOCHECKBOX "C", 15708, 108, 42, 21, 10, NOT WS_TABSTOP + AUTOCHECKBOX "D", 15709, 130, 42, 21, 10, NOT WS_TABSTOP + LTEXT "Rapid", -1, 24, 61, 40, 8, SS_LEFT + AUTOCHECKBOX "A", 15710, 64, 60, 21, 10, WS_GROUP + AUTOCHECKBOX "B", 15711, 86, 60, 21, 10, NOT WS_TABSTOP + AUTOCHECKBOX "C", 15712, 108, 60, 21, 10, NOT WS_TABSTOP + AUTOCHECKBOX "D", 15713, 130, 60, 21, 10, NOT WS_TABSTOP +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +161 DIALOG 0, 0, 164, 80 +STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "Calendar" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + AUTORADIOBUTTON "Real (localtime)", 16101, 8, 8, 96, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "Virtual calendar", 16102, 8, 24, 96, 10 + EDITTEXT 16103, 20, 40, 14, 12, WS_GROUP + CTEXT "/", -1, 34, 42, 8, 8, SS_CENTER + EDITTEXT 16104, 42, 40, 14, 12 + CTEXT "/", -1, 56, 42, 8, 8, SS_CENTER + EDITTEXT 16105, 64, 40, 13, 12 + EDITTEXT 16106, 20, 60, 14, 12 + CTEXT ":", -1, 34, 62, 8, 8, SS_CENTER + EDITTEXT 16107, 42, 60, 14, 12 + CTEXT ":", -1, 56, 62, 8, 8, SS_CENTER + EDITTEXT 16108, 64, 60, 14, 12 + PUSHBUTTON "Now", 16109, 84, 60, 22, 12, WS_GROUP + DEFPUSHBUTTON "&OK", 1, 112, 8, 44, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 112, 26, 44, 14 +} + + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +171 DIALOG 0, 0, 196, 108 +STYLE DS_CENTER | DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU +CAPTION "About" +CLASS "np2dialog" +FONT 9, "MS Pゴシック" +{ + ICON 101, 17101, 8, 8, 20, 20, SS_ICON + LTEXT "", 17102, 36, 16, 102, 8, SS_LEFT + DEFPUSHBUTTON "&OK", 1, 148, 8, 40, 14, WS_GROUP + PUSHBUTTON "More >>", 17103, 148, 26, 40, 14 + EDITTEXT 17104, 8, 52, 180, 48, WS_VSCROLL | ES_MULTILINE | ES_READONLY | ES_WANTRETURN +} + + + +// +// String Table resources +// +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +STRINGTABLE +{ + 30001 "Neko Project II" + 30002 "Neko Project 21" + 30003 "np2.chm" + 30011 "MS ゴシック" + 30012 "MS Pゴシック" + 30013 "MS ゴシック" + 30014 "MS Pゴシック" + 30015 "MS Gothic" + 30016 "MS PGothic" + 30021 "NP2 tool" + 30022 "Key display" + 30023 "Soft keyboard" + 30031 "&Harddisk" + 30041 "Screen option" + 30042 "Sound board option" + 30043 "Serial option" + 30051 " FDD1:%s" + 30052 " FDD2:%s" + 30053 " FDD3:%s" + 30054 " FDD4:%s" + 30055 " - " + 30056 "%sFPS" + 30057 "%sMHz" + 30061 "Couldn't create DirectDraw objects" + 30062 "Reset?" + 30063 "Exit?" + 30064 "Conflict!\n\n%s\nContinue?" + 30065 "Couldn't restart" + 30101 "N/C" + 30111 "1" + 30112 "1.5" + 30113 "2" + 30141 "INT0" + 30142 "INT1" + 30143 "INT2" + 30145 "INT41" + 30146 "INT42" + 30147 "INT5" + 30148 "INT6" + 30159 "C8000" + 30163 "CC000" + 30167 "D0000" + 30171 "D4000" + 30191 "COM1" + 30192 "COM2" + 30193 "COM3" + 30194 "COM4" + 30195 "MIDI" + 30201 "1.9968MHz" + 30202 "2.4576MHz" + 30301 "None" + 30302 "Fixed aspect" + 30303 "Adjust aspect" + 30304 "Full" + 30401 "0088" + 30402 "0188" + 30403 "0288" + 30404 "0388" + 30411 "0x" + 30412 "1x" + 30413 "2x" + 30414 "3x" + 30415 "4x" + 30416 "5x" + 30417 "6x" + 30418 "7x" + 30501 "None" + 30502 "Odd" + 30503 "Even" + 30511 "Sync" + 30512 "Async" + 30513 "Async 16x" + 30514 "Async 64x" + 31001 "Select font file" + 31002 "bmp" + 31003 "PC-98 BMP font (*.bmp)|*.bmp|Virtual98 font|font.rom|All supported files|*.bmp;pc88.fnt;kanji1.rom;kanji2.rom;font.rom;subsys_c.rom;kanji.rom;fnt0808.x1;fnt0816.x1;fnt1616.x1;cgrom.dat|" + 31011 "Save as bitmap file" + 31012 "bmp" + 31013 "1bit-bitmap (*.bmp)|*.bmp|Graphics Interchange Format (*.gif)|*.gif|" + 31014 "4bit-bitmap (*.bmp)|*.bmp|Graphics Interchange Format (*.gif)|*.gif|" + 31015 "8bit-bitmap (*.bmp)|*.bmp|Graphics Interchange Format (*.gif)|*.gif|" + 31016 "24bit-bitmap (*.bmp)|*.bmp|" + 31021 "Open MIMPI define file" + 31022 "def" + 31023 "MIMPI define file(*.def)|*.def|" + 31031 "Select floppy image" + 31032 "d88" + 31033 "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Floppy disk images (*.xdf;*.hdm;*.dup;*.2hd)|*.xdf;*.hdm;*.dup;*.2hd;*.tfd|All supported files|*.d88;*.88d;*.d98;*.98d;*.fdi;*.xdf;*.hdm;*.dup;*.2hd;*.tfd|All files (*.*)|*.*|" + 31041 "Select HD image" + 31042 "thd" + 31043 "Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|All supported files|*.thd;*.nhd;*.hdi|" + 31044 "Select SASI/IDE HDD image" + 31045 "Select IDE HDD image" + 31051 "Select ISO-9660 image" + 31052 "iso" + 31053 "Cue sheets (*.cue)|*.cue|ISO-9660 image files (*.iso)|*.iso;*.img|All supported files|*.cue;*.iso;*.img|All files (*.*)|*.*|" + 31061 "Select SCSI image" + 31062 "hdd" + 31063 "Virtual98 harddisk image files (*.hdd)|*.hdd|" + 31071 "Create disk image" + 31072 "d88" + 31073 "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|Virtual98 harddisk image files (*.hdd)|*.hdd|" + 31074 "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|" + 31081 "Save as S98 log" + 31082 "s98" + 31083 "S98 log (*.s98)|*.s98|" + 31091 "Save as sound" + 31092 "wav" + 31093 "Wave files (*.wav)|*.wav|" + 31101 "Select skin file" + 31102 "ini" + 31103 "ini files (*.ini)|*.ini|text files (*.txt)|*.txt|All files (*.*)|*.*|" +} + + + +// +// Icon resources +// +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +101 ICON "..\\win9x\\resources\\np2.ico" + + +LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN +102 ICON "..\\win9x\\resources\\np2debug.ico" diff --git a/win9x/np21.sln b/win9x/np21.sln new file mode 100644 index 00000000..f8588dc2 --- /dev/null +++ b/win9x/np21.sln @@ -0,0 +1,29 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "np21", "np21.vcxproj", "{24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release NT|Win32 = Release NT|Win32 + Release|Win32 = Release|Win32 + Trace|Win32 = Trace|Win32 + Trap|Win32 = Trap|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Debug|Win32.ActiveCfg = Debug|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Debug|Win32.Build.0 = Debug|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Release NT|Win32.ActiveCfg = Release NT|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Release NT|Win32.Build.0 = Release NT|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Release|Win32.ActiveCfg = Release|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Release|Win32.Build.0 = Release|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Trace|Win32.ActiveCfg = Trace|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Trace|Win32.Build.0 = Trace|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Trap|Win32.ActiveCfg = Trap|Win32 + {24AACB22-5E2F-13DD-AE2E-8121C67CF9FC}.Trap|Win32.Build.0 = Trap|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/win9x/np21.vcproj b/win9x/np21.vcproj index 9e501f93..a282184a 100644 --- a/win9x/np21.vcproj +++ b/win9x/np21.vcproj @@ -441,6 +441,9 @@ + + diff --git a/win9x/np21.vcxproj b/win9x/np21.vcxproj new file mode 100644 index 00000000..dd536059 --- /dev/null +++ b/win9x/np21.vcxproj @@ -0,0 +1,586 @@ +サソ + + + + Debug + Win32 + + + Release NT + Win32 + + + Release + Win32 + + + Trace + Win32 + + + Trap + Win32 + + + + + + + + + Application + MultiByte + + + Application + MultiByte + + + Application + Unicode + + + Application + MultiByte + + + Application + MultiByte + true + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + ..\bin\ + ..\obj\$(ProjectName)\$(Configuration)\ + ..\bin\ + ..\obj\$(ProjectName)\$(Configuration)\ + true + ..\bin\ + ..\obj\$(ProjectName)\$(Configuration)\ + ..\bin\ + ..\obj\$(ProjectName)\$(Configuration)\ + ..\bin\ + ..\obj\$(ProjectName)\$(Configuration)\ + $(DXSDK_DIR)\Include;$(IncludePath) + $(DXSDK_DIR)\Lib\x86;$(LibraryPath) + $(DXSDK_DIR)\Include;$(IncludePath) + $(DXSDK_DIR)\Lib\x86;$(LibraryPath) + $(DXSDK_DIR)\Include;$(IncludePath) + $(DXSDK_DIR)\Lib\x86;$(LibraryPath) + $(DXSDK_DIR)\Include;$(IncludePath) + $(DXSDK_DIR)\Lib\x86;$(LibraryPath) + $(DXSDK_DIR)\Include;$(IncludePath) + $(DXSDK_DIR)\Lib\x86;$(LibraryPath) + + + + ..\win9x;..\win9x\x86;..\win9x\dialog;..\win9x\debuguty;..\;..\common;..\codecnv;..\i386c;..\i386c\ia32;..\i386c\ia32\instructions;..\i386c\ia32\instructions\fpu;..\mem;..\io;..\cbus;..\bios;..\lio;..\vram;..\sound;..\sound\vermouth;..\sound\getsnd;..\fdd;..\font;..\generic;..\trap;..\zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;SUPPORT_PC9821;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + Speed + 4819;4996 + + + ddraw.lib;dxguid.lib;DSOUND.LIB;winmm.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies) + $(OutDir)np21.exe + Windows + true + true + MachineX86 + + + np21.manifest.xml + + + 0x0411 + + + + + Disabled + ..\win9x;..\win9x\x86;..\win9x\dialog;..\win9x\debuguty;..\;..\common;..\codecnv;..\i386c;..\i386c\ia32;..\i386c\ia32\instructions;..\i386c\ia32\instructions\fpu;..\mem;..\io;..\cbus;..\bios;..\lio;..\vram;..\sound;..\sound\vermouth;..\sound\getsnd;..\fdd;..\font;..\generic;..\trap;..\zlib;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_WINDOWS;SUPPORT_PC9821;%(PreprocessorDefinitions) + MultiThreadedDebug + Level3 + EditAndContinue + 4819;4996 + + + ddraw.lib;dxguid.lib;DSOUND.LIB;winmm.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies) + $(OutDir)np21d.exe + Windows + MachineX86 + + + np21.manifest.xml + + + 0x0411 + + + + + ..\win9x;..\win9x\x86;..\win9x\dialog;..\win9x\debuguty;..\;..\common;..\codecnv;..\i386c;..\i386c\ia32;..\i386c\ia32\instructions;..\i386c\ia32\instructions\fpu;..\mem;..\io;..\cbus;..\bios;..\lio;..\vram;..\sound;..\sound\vermouth;..\sound\getsnd;..\fdd;..\font;..\generic;..\trap;..\zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;SUPPORT_PC9821;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + 4819;4996 + + + ddraw.lib;dxguid.lib;DSOUND.LIB;winmm.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies) + $(OutDir)np21nt.exe + Windows + true + true + MachineX86 + + + np21.manifest.xml + + + 0x0411 + + + + + ..\win9x;..\win9x\x86;..\win9x\dialog;..\win9x\debuguty;..\;..\common;..\codecnv;..\i386c;..\i386c\ia32;..\i386c\ia32\instructions;..\i386c\ia32\instructions\fpu;..\mem;..\io;..\cbus;..\bios;..\lio;..\vram;..\sound;..\sound\vermouth;..\sound\getsnd;..\fdd;..\font;..\generic;..\trap;..\zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;SUPPORT_PC9821;TRACE;NP2APPDEV;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + 4819;4996 + + + ddraw.lib;dxguid.lib;DSOUND.LIB;winmm.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies) + $(OutDir)np21t.exe + Windows + true + true + MachineX86 + + + np21.manifest.xml + + + 0x0411 + + + + + ..\win9x;..\win9x\x86;..\win9x\dialog;..\win9x\debuguty;..\;..\common;..\codecnv;..\i386c;..\i386c\ia32;..\i386c\ia32\instructions;..\i386c\ia32\instructions\fpu;..\mem;..\io;..\cbus;..\bios;..\lio;..\vram;..\sound;..\sound\vermouth;..\sound\getsnd;..\fdd;..\font;..\generic;..\trap;..\zlib;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_WINDOWS;SUPPORT_PC9821;TRACE;NP2APPDEV;ENABLE_TRAP;%(PreprocessorDefinitions) + MultiThreaded + + + Level3 + ProgramDatabase + 4819;4996 + + + ddraw.lib;dxguid.lib;DSOUND.LIB;winmm.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies) + $(OutDir)np21tr.exe + Windows + true + true + MachineX86 + + + np21.manifest.xml + + + 0x0411 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + + + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" -i..\win9x\x86\ -i..\i386c\x86\ -i..\io\x86\ "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" -i..\win9x\x86\ -i..\i386c\x86\ -i..\io\x86\ "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" -i..\win9x\x86\ -i..\i386c\x86\ -i..\io\x86\ "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" -i..\win9x\x86\ -i..\i386c\x86\ -i..\io\x86\ "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" -i..\win9x\x86\ -i..\i386c\x86\ -i..\io\x86\ "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + + + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + + + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + + + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + Assembling... %(FullPath) + nasm -f win32 -o "$(IntDir)%(Filename).obj" "%(FullPath)" + + $(IntDir)%(Filename).obj;%(Outputs) + + + + + + + + + diff --git a/win9x/np21x64.vcproj b/win9x/np21x64.vcproj index d0d717b8..f3cc110e 100644 --- a/win9x/np21x64.vcproj +++ b/win9x/np21x64.vcproj @@ -422,6 +422,10 @@ + + diff --git a/win9x/np2vs2005.sln b/win9x/np2vs2005.sln new file mode 100644 index 00000000..690cb7ce --- /dev/null +++ b/win9x/np2vs2005.sln @@ -0,0 +1,26 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "np2", "np2vs2005.vcproj", "{B353D7B7-F739-46A4-A6A7-368073399979}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B353D7B7-F739-46A4-A6A7-368073399979}.Debug|Win32.ActiveCfg = Debug|Win32 + {B353D7B7-F739-46A4-A6A7-368073399979}.Debug|Win32.Build.0 = Debug|Win32 + {B353D7B7-F739-46A4-A6A7-368073399979}.Debug|x64.ActiveCfg = Debug|x64 + {B353D7B7-F739-46A4-A6A7-368073399979}.Debug|x64.Build.0 = Debug|x64 + {B353D7B7-F739-46A4-A6A7-368073399979}.Release|Win32.ActiveCfg = Release|Win32 + {B353D7B7-F739-46A4-A6A7-368073399979}.Release|Win32.Build.0 = Release|Win32 + {B353D7B7-F739-46A4-A6A7-368073399979}.Release|x64.ActiveCfg = Release|x64 + {B353D7B7-F739-46A4-A6A7-368073399979}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/win9x/np2vs2005.vcproj b/win9x/np2vs2005.vcproj new file mode 100644 index 00000000..bd70866b --- /dev/null +++ b/win9x/np2vs2005.vcproj @@ -0,0 +1,3046 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/win9x/np2vs2008.sln b/win9x/np2vs2008.sln new file mode 100644 index 00000000..d773f952 --- /dev/null +++ b/win9x/np2vs2008.sln @@ -0,0 +1,36 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "np2", "np2vs2008.vcproj", "{54B29DEE-A8FC-46B5-840E-9C85794BC4F9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "np2_932", "resources\932\np2vs2008_932.vcproj", "{5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Debug|Win32.ActiveCfg = Debug|Win32 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Debug|Win32.Build.0 = Debug|Win32 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Debug|x64.ActiveCfg = Debug|x64 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Debug|x64.Build.0 = Debug|x64 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Release|Win32.ActiveCfg = Release|Win32 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Release|Win32.Build.0 = Release|Win32 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Release|x64.ActiveCfg = Release|x64 + {54B29DEE-A8FC-46B5-840E-9C85794BC4F9}.Release|x64.Build.0 = Release|x64 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Debug|Win32.ActiveCfg = Debug|Win32 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Debug|Win32.Build.0 = Debug|Win32 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Debug|x64.ActiveCfg = Debug|x64 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Debug|x64.Build.0 = Debug|x64 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Release|Win32.ActiveCfg = Release|Win32 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Release|Win32.Build.0 = Release|Win32 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Release|x64.ActiveCfg = Release|x64 + {5966B2F5-FAF9-4E65-884E-DAFCC6BE44BD}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/win9x/np2vs2008.vcproj b/win9x/np2vs2008.vcproj new file mode 100644 index 00000000..df9d9f65 --- /dev/null +++ b/win9x/np2vs2008.vcproj @@ -0,0 +1,3037 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/win9x/resources/1252/np2.rc b/win9x/resources/1252/np2.rc index f3072bc3..7afcdd9d 100644 --- a/win9x/resources/1252/np2.rc +++ b/win9x/resources/1252/np2.rc @@ -913,7 +913,7 @@ BEGIN MENUITEM "&Reset", IDM_RESET MENUITEM SEPARATOR MENUITEM "&Configure...", IDM_CONFIG - MENUITEM "&NewDisk...", IDM_NEWDISK + MENUITEM "&New disk...", IDM_NEWDISK MENUITEM "&Font...", IDM_CHANGEFONT MENUITEM SEPARATOR MENUITEM "E&xit", IDM_EXIT @@ -1471,7 +1471,7 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_NEWDISKEXT "d88" - IDS_NEWDISKFILTER "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|Virtual98 harddisk image files (*.HDD)|*.hdd|" + IDS_NEWDISKFILTER "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|Virtual98 harddisk image files (*.hdd)|*.hdd|" IDS_NEWDISKFILTER2 "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|" IDS_S98TITLE "Save as S98 log" IDS_S98EXT "s98" diff --git a/win9x/resources/932/np2.rc b/win9x/resources/932/np2.rc index efe20c76..f6dcda1d 100644 --- a/win9x/resources/932/np2.rc +++ b/win9x/resources/932/np2.rc @@ -913,7 +913,7 @@ BEGIN MENUITEM "&Reset", IDM_RESET MENUITEM SEPARATOR MENUITEM "&Configure...", IDM_CONFIG - MENUITEM "&NewDisk...", IDM_NEWDISK + MENUITEM "&New disk...", IDM_NEWDISK MENUITEM "&Font...", IDM_CHANGEFONT MENUITEM SEPARATOR MENUITEM "E&xit", IDM_EXIT @@ -1471,7 +1471,7 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_NEWDISKEXT "d88" - IDS_NEWDISKFILTER "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|Virtual98 harddisk image files (*.HDD)|*.hdd|" + IDS_NEWDISKFILTER "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|Virtual98 harddisk image files (*.hdd)|*.hdd|" IDS_NEWDISKFILTER2 "D88 image files (*.d88;*.d98)|*.d88;*.88d;*.d98;*.98d|Anex86 harddisk image files (*.hdi)|*.hdi|T98 harddisk image files (*.thd)|*.thd|T98-Next harddisk image files (*.nhd)|*.nhd|" IDS_S98TITLE "Save as S98 log" IDS_S98EXT "s98" diff --git a/win9x/resources/932/np2vs2008_932.vcproj b/win9x/resources/932/np2vs2008_932.vcproj new file mode 100644 index 00000000..8e5e0929 --- /dev/null +++ b/win9x/resources/932/np2vs2008_932.vcproj @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/win9x/resources/936/np2.rc2 b/win9x/resources/936/np2.rc2 index fd99b553..3154b583 100644 --- a/win9x/resources/936/np2.rc2 +++ b/win9x/resources/936/np2.rc2 @@ -49,8 +49,13 @@ BEGIN #ifdef _USRDLL VALUE "FileDescription", "PC-98x1マオチミト」ト簇ラハヤエホトシ\0" VALUE "ProductName", "Neko Project II ラハヤエホトシ\0" +#ifdef _WIN64 + VALUE "InternalName", "np2x64_936\0" + VALUE "OriginalFilename", "np2x64_936.dll\0" +#else VALUE "InternalName", "np2_936\0" VALUE "OriginalFilename", "np2_936.dll\0" +#endif #else #ifdef SUPPORT_PC9821 VALUE "FileDescription", "PC-9821マオチミト」ト簇\0" diff --git a/win9x/resources/950/np2.rc2 b/win9x/resources/950/np2.rc2 index 86c4dbd4..f154c445 100644 --- a/win9x/resources/950/np2.rc2 +++ b/win9x/resources/950/np2.rc2 @@ -49,8 +49,13 @@ BEGIN #ifdef _USRDLL VALUE "FileDescription", "PC-98x1 ィtヲCシメタタセケクキスタノ\0" VALUE "ProductName", "Neko Project II クキスタノ\0" +#ifdef _WIN64 + VALUE "InternalName", "np2x64_950\0" + VALUE "OriginalFilename", "np2x64_950.dll\0" +#else VALUE "InternalName", "np2_950\0" VALUE "OriginalFilename", "np2_950.dll\0" +#endif #else #ifdef SUPPORT_PC9821 VALUE "FileDescription", "PC-9821 ィtヲCシメタタセケ\0" diff --git a/win9x/scrnmng.cpp b/win9x/scrnmng.cpp index 746c7fd8..b393d23a 100644 --- a/win9x/scrnmng.cpp +++ b/win9x/scrnmng.cpp @@ -1,24 +1,37 @@ -#include "compiler.h" -#include +/** + * @file scrnmng.cpp + * @brief Screen Manager (DirectDraw2) + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include #ifndef __GNUC__ -#include +#include #endif -#include "resource.h" -#include "np2.h" -#include "winloc.h" -#include "mousemng.h" -#include "scrnmng.h" -#include "sysmng.h" -#include "menu.h" -#include "np2class.h" -#include "pccore.h" -#include "scrndraw.h" -#include "palettes.h" +#include "resource.h" +#include "np2.h" +#include "winloc.h" +#include "mousemng.h" +#include "scrnmng.h" +#include "sysmng.h" +#include "menu.h" +#include "np2class.h" +#include "pccore.h" +#include "scrndraw.h" +#include "palettes.h" #if defined(SUPPORT_DCLOCK) -#include "dclock.h" +#include "dclock.h" #endif +#if !defined(__GNUC__) +#pragma comment(lib, "ddraw.lib") +#pragma comment(lib, "dxguid.lib") +#endif // !defined(__GNUC__) + extern WINLOCEX np2_winlocexallwin(HWND base); diff --git a/win9x/soundmng.cpp b/win9x/soundmng.cpp index 725a28ec..8b155a76 100644 --- a/win9x/soundmng.cpp +++ b/win9x/soundmng.cpp @@ -1,19 +1,31 @@ -#include "compiler.h" -#include -#include "parts.h" -#include "wavefile.h" -#include "np2.h" -#include "soundmng.h" -#include "extromio.h" -#include "sound.h" -#include "juliet.h" +/** + * @file soundmng.cpp + * @brief Sound Manager (DirectSound3) + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include +#include "parts.h" +#include "wavefile.h" +#include "np2.h" +#include "soundmng.h" +#include "extromio.h" +#include "sound.h" +#include "juliet.h" #if defined(VERMOUTH_LIB) -#include "vermouth.h" +#include "vermouth.h" #endif #if defined(MT32SOUND_DLL) -#include "mt32snd.h" +#include "mt32snd.h" #endif +#if !defined(__GNUC__) +#pragma comment(lib, "dsound.lib") +#endif // !defined(__GNUC__) + #if defined(_M_IA64) || defined(_M_AMD64) #define SOUNDBUFFERALIGN (1 << 3) #else diff --git a/win9x/sstp.cpp b/win9x/sstp.cpp index cbe8edc2..f0877e53 100644 --- a/win9x/sstp.cpp +++ b/win9x/sstp.cpp @@ -1,12 +1,24 @@ -#include "compiler.h" -#include -#include "np2.h" -#include "scrnmng.h" -#include "sstp.h" +/** + * @file sstp.cpp + * @brief Sakura Script Transfer Protocol handler + * + * @author $Author: yui $ + * @date $Date: 2011/03/07 09:54:11 $ + */ + +#include "compiler.h" +#include +#include +#include "np2.h" +#include "scrnmng.h" +#include "sstp.h" #if defined(OSLANG_UTF8) || defined(OSLANG_UCS2) -#include "oemtext.h" +#include "oemtext.h" #endif +#if !defined(__GNUC__) +#pragma comment(lib, "wsock32.lib") +#endif // !defined(__GNUC__) static HWND sstphwnd = NULL; static int sstp_stat = SSTP_READY; diff --git a/win9x/targetver.h b/win9x/targetver.h new file mode 100644 index 00000000..9e6f22a0 --- /dev/null +++ b/win9x/targetver.h @@ -0,0 +1,25 @@ +#pragma once + +// The following macros define the minimum required platform. The minimum required platform +// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run +// your application. The macros work by enabling all features available on platform versions up to and +// including the version specified. + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. + +#ifndef WINVER // Specifies that the minimum required platform is Windows 95. +#define WINVER 0x0400 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows NT 4.0. +#define _WIN32_WINNT 0x0400 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 95. +#define _WIN32_WINDOWS 0x0400 // Change this to the appropriate value to target Windows 98 or later. +#endif + +#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 2.0. +#define _WIN32_IE 0x0200 // Change this to the appropriate value to target other versions of IE. +#endif diff --git a/win9x/trace.cpp b/win9x/trace.cpp index 714e61e4..56924537 100644 --- a/win9x/trace.cpp +++ b/win9x/trace.cpp @@ -1,11 +1,12 @@ #include "compiler.h" #include +#include "resource.h" #include "strres.h" #include "textfile.h" #include "oemtext.h" #include "dosio.h" #include "ini.h" - +#include "menu.h" #ifdef TRACE @@ -22,7 +23,8 @@ #define VIEW_TEXT "MS ゴシック" #define VIEW_SIZE 12 -typedef struct { +typedef struct +{ UINT8 en; TEXTFILEH tf; HWND hwnd; @@ -37,29 +39,17 @@ typedef struct { extern HINSTANCE g_hInstance; -enum { - IDM_TRACE1 = 3300, - IDM_TRACE2, - IDM_TRACEEN, - IDM_TRACEFH, - IDM_TRACECL -}; - static const TCHAR ProgTitle[] = _T("console"); static const TCHAR ClassName[] = _T("TRACE-console"); static const TCHAR ClassEdit[] = _T("EDIT"); static const TCHAR viewfont[] = _T(VIEW_TEXT); -static const TCHAR trace1[] = _T("TRACE"); -static const TCHAR trace2[] = _T("VERBOSE"); -static const TCHAR traceen[] = _T("Enable"); -static const TCHAR tracefh[] = _T("File out"); -static const TCHAR tracecl[] = _T("Clear"); + static const OEMCHAR crlf[] = OEMTEXT("\r\n"); static TRACEWIN tracewin; -static HWND hView = NULL; -static HFONT hfView = NULL; -static HBRUSH hBrush = NULL; +static HWND s_hView = NULL; +static HFONT s_hfView = NULL; +static HBRUSH s_hBrush = NULL; static int viewpos; static int viewleng; static TCHAR viewbuf[VIEW_BUFFERSIZE * 2]; @@ -89,7 +79,7 @@ static void View_ClrString(void) { viewpos = 0; viewleng = 0; viewbuf[0] = '\0'; - SetWindowText(hView, viewbuf); + SetWindowText(s_hView, viewbuf); } static void View_AddString(const OEMCHAR *string) { @@ -135,114 +125,119 @@ static void View_AddString(const OEMCHAR *string) { viewbuf[vpos + vlen + 1] = '\n'; viewbuf[vpos + vlen + 2] = '\0'; viewleng = vlen + 2; - SetWindowText(hView, viewbuf + vpos); - View_ScrollToBottom(hView); + SetWindowText(s_hView, viewbuf + vpos); + View_ScrollToBottom(s_hView); } // ---- -static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { - +static LRESULT onCreate(HWND hWnd) +{ + HMENU hMenu; RECT rc; - HMENU hmenu; - switch (msg) { - case WM_CREATE: - hmenu = GetSystemMenu(hWnd, FALSE); - InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING, - IDM_TRACE1, trace1); - InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING, - IDM_TRACE2, trace2); - InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); - InsertMenu(hmenu, 3, MF_BYPOSITION | MF_STRING, - IDM_TRACEEN, traceen); - InsertMenu(hmenu, 4, MF_BYPOSITION | MF_STRING, - IDM_TRACEFH, tracefh); - InsertMenu(hmenu, 5, MF_BYPOSITION | MF_STRING, - IDM_TRACECL, tracecl); - InsertMenu(hmenu, 6, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); - - CheckMenuItem(hmenu, IDM_TRACE1, + hMenu = GetSystemMenu(hWnd, FALSE); + menu_addmenures(hMenu, 0, IDR_TRACE, FALSE); + + CheckMenuItem(hMenu, IDM_TRACE_TRACE, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); - CheckMenuItem(hmenu, IDM_TRACE2, + CheckMenuItem(hMenu, IDM_TRACE_VERBOSE, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); - CheckMenuItem(hmenu, IDM_TRACEEN, + CheckMenuItem(hMenu, IDM_TRACE_ENABLE, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); - GetClientRect(hWnd, &rc); - hView = CreateWindowEx(WS_EX_CLIENTEDGE, + GetClientRect(hWnd, &rc); + s_hView = CreateWindowEx(WS_EX_CLIENTEDGE, ClassEdit, NULL, WS_CHILD | WS_VISIBLE | ES_READONLY | ES_LEFT | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 0, 0, rc.right, rc.bottom, hWnd, (HMENU)IDC_VIEW, g_hInstance, NULL); - if (!hView) { - break; - } - SendMessage(hView, EM_SETLIMITTEXT, (WPARAM)VIEW_BUFFERSIZE, 0); + SendMessage(s_hView, EM_SETLIMITTEXT, (WPARAM)VIEW_BUFFERSIZE, 0); - hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, + s_hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH, viewfont); - if (!hfView) { - break; - } - SendMessage(hView, WM_SETFONT, (WPARAM)hfView, + if (s_hfView) + { + SendMessage(s_hView, WM_SETFONT, (WPARAM)s_hfView, MAKELPARAM(TRUE, 0)); - hBrush = CreateSolidBrush(VIEW_BGCOLOR); - SetFocus(hView); - return(TRUE); + } - case WM_SYSCOMMAND: - switch(wp) { - case IDM_TRACE1: - tracewin.en ^= 1; - hmenu = GetSystemMenu(hWnd, FALSE); - CheckMenuItem(hmenu, IDM_TRACE1, + s_hBrush = CreateSolidBrush(VIEW_BGCOLOR); + SetFocus(s_hView); + + return TRUE; +} + +static LRESULT onSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) +{ + HMENU hMenu; + + hMenu = GetSystemMenu(hWnd, FALSE); + switch(wParam) + { + case IDM_TRACE_TRACE: + tracewin.en ^= 1; + CheckMenuItem(hMenu, IDM_TRACE_TRACE, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); - break; + break; - case IDM_TRACE2: - tracewin.en ^= 2; - hmenu = GetSystemMenu(hWnd, FALSE); - CheckMenuItem(hmenu, IDM_TRACE2, + case IDM_TRACE_VERBOSE: + tracewin.en ^= 2; + CheckMenuItem(hMenu, IDM_TRACE_VERBOSE, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); - break; + break; - case IDM_TRACEEN: - tracewin.en ^= 4; - hmenu = GetSystemMenu(hWnd, FALSE); - CheckMenuItem(hmenu, IDM_TRACEEN, + case IDM_TRACE_ENABLE: + tracewin.en ^= 4; + CheckMenuItem(hMenu, IDM_TRACE_ENABLE, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); - break; - - case IDM_TRACEFH: - if (tracewin.tf != NULL) { - textfile_close(tracewin.tf); - tracewin.tf = NULL; - } - else { - tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), - 0x800); - } - hmenu = GetSystemMenu(hWnd, FALSE); - CheckMenuItem(hmenu, IDM_TRACEFH, - (tracewin.tf)?MF_CHECKED:MF_UNCHECKED); - break; - - case IDM_TRACECL: - View_ClrString(); - break; + break; - default: - return(DefWindowProc(hWnd, msg, wp, lp)); + case IDM_TRACE_FILEOUT: + if (tracewin.tf != NULL) + { + textfile_close(tracewin.tf); + tracewin.tf = NULL; + } + else + { + tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), + 0x800); } + CheckMenuItem(hMenu, IDM_TRACE_FILEOUT, + (tracewin.tf)?MF_CHECKED:MF_UNCHECKED); + break; + + case IDM_TRACE_CLEAR: + View_ClrString(); break; + default: + return DefWindowProc(hWnd, WM_SYSCOMMAND, wParam, lParam); + } + return FALSE; +} + +static LRESULT CALLBACK traceproc(HWND hWnd, UINT uMsg, + WPARAM wParam, LPARAM lParam) +{ + RECT rc; + + switch(uMsg) + { + case WM_CREATE: + return onCreate(hWnd); + + case WM_SYSCOMMAND: + return onSysCommand(hWnd, wParam, lParam); + case WM_MOVE: if (!(GetWindowLong(hWnd, GWL_STYLE) & - (WS_MAXIMIZE | WS_MINIMIZE))) { + (WS_MAXIMIZE | WS_MINIMIZE))) + { GetWindowRect(hWnd, &rc); tracecfg.posx = rc.left; tracecfg.posy = rc.top; @@ -251,34 +246,37 @@ static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { case WM_SIZE: // window resize if (!(GetWindowLong(hWnd, GWL_STYLE) & - (WS_MAXIMIZE | WS_MINIMIZE))) { + (WS_MAXIMIZE | WS_MINIMIZE))) + { GetWindowRect(hWnd, &rc); tracecfg.width = rc.right - rc.left; tracecfg.height = rc.bottom - rc.top; } - MoveWindow(hView, 0, 0, LOWORD(lp), HIWORD(lp), TRUE); - View_ScrollToBottom(hView); + MoveWindow(s_hView, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); + View_ScrollToBottom(s_hView); break; case WM_SETFOCUS: - SetFocus(hView); + SetFocus(s_hView); return(0L); case WM_CTLCOLORSTATIC: case WM_CTLCOLOREDIT: - SetTextColor((HDC)wp, VIEW_FGCOLOR); - SetBkColor((HDC)wp, VIEW_BGCOLOR); - return((LRESULT)hBrush); + SetTextColor((HDC)wParam, VIEW_FGCOLOR); + SetBkColor((HDC)wParam, VIEW_BGCOLOR); + return((LRESULT)s_hBrush); case WM_CLOSE: break; case WM_DESTROY: - if (hBrush) { - DeleteObject(hBrush); + if (s_hBrush) + { + DeleteObject(s_hBrush); } - if (hfView) { - DeleteObject(hfView); + if (s_hfView) + { + DeleteObject(s_hfView); } break; #if 0 @@ -287,16 +285,16 @@ static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { break; case WM_MOVING: - winloc_movingproc((RECT *)lp); + winloc_movingproc((RECT *)lParam); break; case WM_ERASEBKGND: - return(FALSE); + return FALSE; #endif default: - return(DefWindowProc(hWnd, msg, wp, lp)); + return DefWindowProc(hWnd, uMsg, wParam, lParam); } - return(0L); + return FALSE; } @@ -381,7 +379,7 @@ void trace_fmt(const char *fmt, ...) { vsprintf(buf, fmt, ap); #endif va_end(ap); - if ((tracewin.en & 4) && (hView)) { + if ((tracewin.en & 4) && (s_hView)) { View_AddString(buf); } if (tracewin.tf != NULL) { @@ -410,7 +408,7 @@ void trace_fmt2(const char *fmt, ...) { vsprintf(buf, fmt, ap); #endif va_end(ap); - if ((tracewin.en & 4) && (hView)) { + if ((tracewin.en & 4) && (s_hView)) { View_AddString(buf); } if (tracewin.tf != FILEH_INVALID) { @@ -432,7 +430,8 @@ void trace_char(char c) { #else const OEMCHAR *pdevstr = devstr; #endif - if ((tracewin.en & 4) && (hView)) { + if ((tracewin.en & 4) && (s_hView)) + { View_AddString(pdevstr); } if (tracewin.tf != NULL) { diff --git a/win9x/x86/cputype.x86 b/win9x/x86/cputype.x86 index 9c007f65..6900909c 100644 --- a/win9x/x86/cputype.x86 +++ b/win9x/x86/cputype.x86 @@ -23,5 +23,3 @@ _havemmx: pushfd and eax, 00800000h nocpuid: ret - ends - diff --git a/win9x/x86/makegrph.x86 b/win9x/x86/makegrph.x86 index 01bdb31f..c183cf3c 100644 --- a/win9x/x86/makegrph.x86 +++ b/win9x/x86/makegrph.x86 @@ -253,5 +253,3 @@ deldirty_lp: and [ebx], edx popad ret - ends - diff --git a/win9x/x86/opngeng.x86 b/win9x/x86/opngeng.x86 index 5b472d8d..0088b8e5 100644 --- a/win9x/x86/opngeng.x86 +++ b/win9x/x86/opngeng.x86 @@ -7,7 +7,7 @@ SIN_BITS equ 11 EVC_BITS equ 10 ENV_BITS equ 16 KF_BITS equ 6 -FREQ_BITS equ 20 +FREQ_BITS equ 21 ENVTBL_BIT equ 14 SINTBL_BIT equ 14 @@ -50,11 +50,10 @@ EM_OFF equ 0 .env_inc_decay1 resd 1 ; 3c .env_inc_decay2 resd 1 ; 40 .env_inc_rel resd 1 ; 44 -.size endstruc struc ch_t -.slot resb (slot_t.size * 4) +.slot resb (slot_t_size * 4) .algorithm resb 1 .feedback resb 1 .playing resb 1 @@ -72,7 +71,6 @@ EM_OFF equ 0 .extop resb 1 .stereo resb 1 resb 1 -.size endstruc struc opngen_t @@ -238,21 +236,21 @@ og_algchk: cmp byte [esi + ch_t.algorithm], 5 jmp short og_calcslot3 og_calcalg5: mov ebx, [esi + ch_t.connect1] ; case ALG != 5 add [ebx], eax -og_calcslot3: add edi, byte slot_t.size ; slot3 calculate +og_calcslot3: add edi, byte slot_t_size ; slot3 calculate calcenv envcalc2, envret2 jl short og_calcslot2 mov eax, [_opngen + opngen_t.feedback2] op_out mov ebx, [esi + ch_t.connect2] add [ebx], eax -og_calcslot2: add edi, byte slot_t.size ; slot2 calculate +og_calcslot2: add edi, byte slot_t_size ; slot2 calculate calcenv envcalc3, envret3 jl short og_calcslot4 mov eax, [_opngen + opngen_t.feedback3] op_out mov ebx, [esi + ch_t.connect3] add [ebx], eax -og_calcslot4: add edi, byte slot_t.size ; slot4 calculate +og_calcslot4: add edi, byte slot_t_size ; slot4 calculate calcenv envcalc4, envret4 jl short og_calcsloted mov eax, [_opngen + opngen_t.feedback4] @@ -260,7 +258,7 @@ og_calcslot4: add edi, byte slot_t.size ; slot4 calculate mov ebx, [esi + ch_t.connect4] add [ebx], eax og_calcsloted: inc dword [_opngen + opngen_t.playing] -og_calcch_nt: add esi, ch_t.size +og_calcch_nt: add esi, ch_t_size dec ch jne near og_calcch_lp mov eax, [_opngen + opngen_t.outdc] @@ -370,28 +368,28 @@ ogv_algchk: cmp byte [esi + ch_t.algorithm], 5 jmp short ogv_calcslot3 ogv_calcalg5: mov ebx, [esi + ch_t.connect1] ; case ALG != 5 add [ebx], eax -ogv_calcslot3: add edi, byte slot_t.size ; slot3 calculate +ogv_calcslot3: add edi, byte slot_t_size ; slot3 calculate calcenv vrenvcalc2, vrenvret2 jl short ogv_calcslot2 mov eax, [_opngen + opngen_t.feedback2] op_out mov ebx, [esi + ch_t.connect2] add [ebx], eax -ogv_calcslot2: add edi, byte slot_t.size ; slot2 calculate +ogv_calcslot2: add edi, byte slot_t_size ; slot2 calculate calcenv vrenvcalc3, vrenvret3 jl short ogv_calcslot4 mov eax, [_opngen + opngen_t.feedback3] op_out mov ebx, [esi + ch_t.connect3] add [ebx], eax -ogv_calcslot4: add edi, byte slot_t.size ; slot4 calculate +ogv_calcslot4: add edi, byte slot_t_size ; slot4 calculate calcenv vrenvcalc4, vrenvret4 jl short ogv_calcsloted mov eax, [_opngen + opngen_t.feedback4] op_out mov ebx, [esi + ch_t.connect4] add [ebx], eax -ogv_calcsloted: add edi, byte (ch_t.size - (slot_t.size * 3)) +ogv_calcsloted: add edi, byte (ch_t_size - (slot_t_size * 3)) dec ch jne near ogv_calcch_lp mov eax, [_opngen + opngen_t.outdl] @@ -451,5 +449,3 @@ ogv_noupdate: ret 4 setenv vrenvcalc3, vrenvret3, 4 setenv vrenvcalc4, vrenvret4, 8 - ends - diff --git a/win9x/x86/parts.x86 b/win9x/x86/parts.x86 index 62453499..fdd044e0 100644 --- a/win9x/x86/parts.x86 +++ b/win9x/x86/parts.x86 @@ -137,5 +137,3 @@ section .data _randseed dd 1 - ends - diff --git a/win9x/x86/x86.rules b/win9x/x86/x86.rules new file mode 100644 index 00000000..a77386c7 --- /dev/null +++ b/win9x/x86/x86.rules @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + diff --git a/win9xc/dialog/d_disk.cpp b/win9xc/dialog/d_disk.cpp index c479a813..85492e44 100644 --- a/win9xc/dialog/d_disk.cpp +++ b/win9xc/dialog/d_disk.cpp @@ -321,7 +321,13 @@ const TCHAR *ext; if (!dlgs_selectwritefile(hWnd, &newdiskui, path, NELEMENTS(path))) { return; } - hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); + +#if defined(_WIN64) + hinst = reinterpret_cast(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); +#else + hinst = reinterpret_cast(::GetWindowLong(hWnd, GWL_HINSTANCE)); +#endif + ext = file_getext(path); if (!file_cmpname(ext, str_thd)) { hddsize = 0; diff --git a/win9xc/dialog/d_screen.cpp b/win9xc/dialog/d_screen.cpp index 18a97892..1163d6e0 100644 --- a/win9xc/dialog/d_screen.cpp +++ b/win9xc/dialog/d_screen.cpp @@ -258,7 +258,11 @@ void dialog_scropt(HWND hWnd) { PROPSHEETHEADER psh; HPROPSHEETPAGE hpsp[3]; - hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); +#if defined(_WIN64) + hinst = reinterpret_cast(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); +#else + hinst = reinterpret_cast(::GetWindowLong(hWnd, GWL_HINSTANCE)); +#endif ZeroMemory(&psp, sizeof(psp)); psp.dwSize = sizeof(PROPSHEETPAGE); diff --git a/win9xc/dialog/d_sound.cpp b/win9xc/dialog/d_sound.cpp index e61fa22b..b3bbc0c0 100644 --- a/win9xc/dialog/d_sound.cpp +++ b/win9xc/dialog/d_sound.cpp @@ -933,7 +933,11 @@ void dialog_sndopt(HWND hWnd) { PROPSHEETHEADER psh; HPROPSHEETPAGE hpsp[6]; // ver0.29 - hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); +#if defined(_WIN64) + hinst = reinterpret_cast(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); +#else + hinst = reinterpret_cast(::GetWindowLong(hWnd, GWL_HINSTANCE)); +#endif ZeroMemory(&psp, sizeof(psp)); psp.dwSize = sizeof(PROPSHEETPAGE); diff --git a/win9xc/np2.cpp b/win9xc/np2.cpp index 01dc9c69..d611ab44 100644 --- a/win9xc/np2.cpp +++ b/win9xc/np2.cpp @@ -653,15 +653,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); if (np2opening) { - HINSTANCE hinst; + HINSTANCE hinst; RECT rect; int width; int height; - HBITMAP hbmp; - BITMAP bmp; - HDC hmdc; + HBITMAP hbmp; + BITMAP bmp; + HDC hmdc; HBRUSH hbrush; - hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); + +#if defined(_WIN64) + hinst = reinterpret_cast(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); +#else + hinst = reinterpret_cast(::GetWindowLong(hWnd, GWL_HINSTANCE)); +#endif GetClientRect(hWnd, &rect); width = rect.right - rect.left; height = rect.bottom - rect.top; @@ -1133,6 +1138,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, _MEM_USED("report.txt"); dosio_term(); - return(msg.wParam); + return static_cast(msg.wParam); } diff --git a/win9xc/np2c_vs2008.sln b/win9xc/np2c_vs2008.sln new file mode 100644 index 00000000..b522d85b --- /dev/null +++ b/win9xc/np2c_vs2008.sln @@ -0,0 +1,26 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "np2c_vs2008", "np2c_vs2008.vcproj", "{1AD997B3-80C0-404E-8D93-1BA94CF41CAD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Debug|Win32.ActiveCfg = Debug|Win32 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Debug|Win32.Build.0 = Debug|Win32 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Debug|x64.ActiveCfg = Debug|x64 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Debug|x64.Build.0 = Debug|x64 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Release|Win32.ActiveCfg = Release|Win32 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Release|Win32.Build.0 = Release|Win32 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Release|x64.ActiveCfg = Release|x64 + {1AD997B3-80C0-404E-8D93-1BA94CF41CAD}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/win9xc/np2c_vs2008.vcproj b/win9xc/np2c_vs2008.vcproj new file mode 100644 index 00000000..2bbeb1fb --- /dev/null +++ b/win9xc/np2c_vs2008.vcproj @@ -0,0 +1,1899 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/win9xc/np2ia32.dsp b/win9xc/np2ia32.dsp index f73a77ce..808dd9b0 100644 --- a/win9xc/np2ia32.dsp +++ b/win9xc/np2ia32.dsp @@ -219,6 +219,10 @@ SOURCE=..\I386C\ia32\instructions\flag_ctrl.c # End Source File # Begin Source File +SOURCE=..\I386C\ia32\instructions\fpu.c +# End Source File +# Begin Source File + SOURCE=..\I386C\ia32\instructions\fpu\fpdummy.c # End Source File # Begin Source File diff --git a/x11/INSTALL.ja b/x11/INSTALL.ja deleted file mode 100644 index f4e60087..00000000 --- a/x11/INSTALL.ja +++ /dev/null @@ -1,66 +0,0 @@ -Xnp2 - 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネII for X Window System - - -1. タ゚ト・ユ・。・、・ config.tmpl 、ホハヤスク - - 1.1. ・ィ・・ヌ・」・「・ - - CPU 、ヒ PowerPC ナ、ナコワ、キ。「・モ・テ・ー・ィ・・ヌ・」・「・、ヌニーコ、ケ、・ウ・・ヤ・蝪シ・ソ、ヌ - ニーコ、オ、サ、セケ遉ヒ、マ。「ーハイシ、ホケヤ、ホ undef 、 define 、ヒハムケケ、キ、ニ、ッ、タ、オ、、。」 - - #undef BIGENDIAN - - 1.2. ・オ・ヲ・・ノ - - サネヘム、ケ、・オ・ヲ・・ノ・ノ・鬣、・ミ、チェツ、キ、゙、ケ。」、ノ、ホ・オ・ヲ・・ノ・ノ・鬣、・ミ、サネヘム、キ、ニ - ホノ、、、ホ、ォネス、鬢ハ、、セケ遉ヒ、マ SDL_mixer 、サネヘム、ケ、サ、、ェエォ、皃キ、゙、ケ。」 - Xnp2 セ螟ヌイサ、フト、鬢オ、ハ、、、ホ、ヌ、「、、ミ。「、ウ、ホケ猯ワ、マネ、ミ、キ、ニ、ッ、タ、オ、、。」 - - 。ヲSDL ・オ・ヲ・・ノ・ノ・鬣、・ミ - SDL 、ホ・オ・ヲ・・ノオ。ヌス、サネヘム、ケ、・ノ・鬣、・ミ、ヌ、ケ。」 - サネヘム、ケ、セケ遉ヒ、マ。「ーハイシ、ホケヤ、ホ undef 、 define 、ヒハムケケ、キ、ニ、ッ、タ、オ、、。」 - - #undef USE_SDLAUDIO - - 。ヲSDL_mixer ・オ・ヲ・・ノ・ノ・鬣、・ミ - SDL 、ホ・オ・ヲ・・ノオ。ヌス、サネヘム、キ。「・ユ・・テ・ヤ。シ、ホ・キ。シ・ッイサナ、ホ PCM 、ホコニタク、ヒ - ツミア、キ、ソ・ノ・鬣、・ミ、ヌ、ケ。」 - サネヘム、ケ、セケ遉ヒ、マ。「ーハイシ、ホケヤ、ホ undef 、 define 、ヒハムケケ、キ、ニ、ッ、タ、オ、、。」 - - #undef USE_SDLMIXER - - 1.3. ・ク・逾、・ム・テ・ノ、ホ・オ・ン。シ・ネ - - Xnp2 、ヌ・ク・逾、・ム・テ・ノ、サネヘム、ケ、セケ遉ヒ、マ。「SDL ・オ・ヲ・・ノ・ノ・鬣、・ミ、ヘュク、ヒ、ケ、 - ノャヘラ、ャ、「、熙゙、ケ。」SDL ・オ・ヲ・・ノ・ノ・鬣、・ミ、ヘュク、ヒ、ケ、ハヒ。、ヒ、ト、、、ニ、マ 1.2. ケ爨 - サイセネ、キ、ニ、ッ、タ、オ、、。」 - - 1.4. ・ユ・・ケ・ッ・遙シ・ - - イ靂フイチナル、ハムケケ、ケ、・ユ・・ケ・ッ・遙シ・オ。ヌス、ヘュク、ヒ、ケ、セケ遉ヒ、マ。「ーハイシ、ホケヤ、ホ - undef 、 define 、ヒハムケケ、キ、ニ、ッ、タ、オ、、。」 - 、ウ、ホオ。ヌス、ヘュク、キ、ハ、、セケ遉ヌ、箚靂フイチナル、ハムケケ、キ、ハ、、・ユ・・ケ・ッ・遙シ・オ。ヌス、マ - サネヘム、ヌ、ュ、゙、ケ。」 - - #undef USE_XF86VIDMODE - - -2. ・ウ・・ム・、・ - - ーハイシ、ホ・ウ・゙・・ノ、シツケヤ、キ、ニ・ウ・・ム・、・、ケヤ、、、゙、ケ。」 - - $ xmkmf -a - $ make - - -3. ・、・・ケ・ネ。シ・ - - ーハイシ、ホ・ウ・゙・・ノ、シツケヤ、キ、ニ・、・・ケ・ネ。シ・、ケヤ、、、゙、ケ。」 - - $ make install install.man - - ・、・・ケ・ネ。シ・ク螟ホタ゚トナ、ヒ、ト、、、ニ、マ README.ja 、サイセネ、キ、ニ、ッ、タ、オ、、。」 - - --- - $Id: INSTALL.ja,v 1.10 2007/02/04 11:51:13 monaka Exp $ diff --git a/x11/Imakefile b/x11/Imakefile deleted file mode 100644 index f176d109..00000000 --- a/x11/Imakefile +++ /dev/null @@ -1,260 +0,0 @@ -XCOMM $Id: Imakefile,v 1.32 2007/01/23 15:48:20 monaka Exp $ - -XCOMM -XCOMM user config -XCOMM - -#include "config.tmpl" - - -XCOMM -XCOMM Endian -XCOMM - -#if defined(BIGENDIAN) -CFLAGS+= -DWORDS_BIGENDIAN -#endif - - -XCOMM -XCOMM GUI Toolkit -XCOMM - -GTK_CONFIG?= pkg-config gtk+-2.0 -GTK_INCLUDE= `$(GTK_CONFIG) --cflags` -GTK_LIB= `$(GTK_CONFIG) --libs` -GTK_DEFINE= -DUSE_GTK2=1 - -GTKDEPOBJS= gtk2/dialog_about.o gtk2/dialog_calendar.o \ - gtk2/dialog_config.o gtk2/dialog_midi.o gtk2/dialog_newdisk.o \ - gtk2/dialog_screen.o gtk2/dialog_sound.o \ - gtk2/window_keydisp.o gtk2/window_softkbd.o \ - gtk2/gtk_drawmng.o gtk2/gtk_screen.o gtk2/gtk_font.o \ - gtk2/gtk_keyboard.o gtk2/gtk_menu.o gtk2/gtk_mouse.o \ - gtk2/gtk_main.o gtk2/gtk_wrapper.o - - -XCOMM -XCOMM Audio -XCOMM - -#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) -SOUND_DEFINE+= -DUSE_SDLAUDIO -SDL_CONFIG?= sdl-config -SDL_INCLUDE= `$(SDL_CONFIG) --cflags` -SDL_LIB= `$(SDL_CONFIG) --libs` -#if defined(USE_SDLMIXER) -CFLAGS+= -DUSE_SDLMIXER -SDL_LIB+= -lSDL_mixer -#endif -#endif - - -CDEBUGFLAGS+= -fsigned-char - -SYSRESPATH?= $(LIBDIR)/xnp2 - -DEFINES= ShmDefines \ - -DSYSRESPATH=\"$(SYSRESPATH)\" \ - $(SOUND_DEFINE) $(GTK_DEFINE) \ - $(CPUFLAGS) - -SYS_LIBRARIES= -lm - -EXTRA_INCLUDES= -I. -I.. -I./debug -I../common -I../codecnv \ - -I../bios -I../cbus -I../fdd -I../font -I../generic \ - -I../io -I../lio -I../mem \ - -I../sound -I../sound/vermouth -I../sound/getsnd \ - -I../vram \ - $(GTK_INCLUDE) $(SDL_INCLUDE) - -LOCAL_LIBRARIES= $(XLIB) $(GTK_LIB) $(SDL_LIB) - -#define PassCDebugFlags - -#if defined(USE_XF86VIDMODE) -DEPLIBS+= $(DEPXXF86VMLIB) -DEFINES+= -DHAVE_XF86VIDMODE -LOCAL_LIBRARIES+= $(XXF86VMLIB) -#endif - -COMMONOBJS= ../common/strres.o ../common/milstr.o ../common/_memory.o \ - ../common/textfile.o ../common/profile.o ../common/rect.o \ - ../common/lstarray.o ../common/bmpdata.o ../common/mimpidef.o \ - ../common/parts.o ../common/wavefile.o - -CODECNVOBJS= ../codecnv/eucsjis.o ../codecnv/eucucs2.o \ - ../codecnv/sjiseuc.o ../codecnv/sjisucs2.o \ - ../codecnv/ucs2utf8.o ../codecnv/utf8ucs2.o - -BIOSOBJS= ../bios/bios.o ../bios/bios09.o ../bios/bios0c.o \ - ../bios/bios12.o ../bios/bios13.o ../bios/bios18.o \ - ../bios/bios19.o ../bios/bios1a.o ../bios/bios1b.o \ - ../bios/bios1c.o ../bios/bios1f.o \ - ../bios/sxsibios.o - -CBUSOBJS= ../cbus/cbuscore.o ../cbus/pc9861k.o ../cbus/mpu98ii.o \ - ../cbus/amd98.o ../cbus/board118.o ../cbus/board14.o \ - ../cbus/board26k.o ../cbus/board86.o ../cbus/boardspb.o \ - ../cbus/boardx2.o ../cbus/cs4231io.o ../cbus/pcm86io.o \ - ../cbus/sasiio.o ../cbus/scsiio.o ../cbus/scsicmd.o \ - ../cbus/ideio.o ../cbus/atapicmd.o - -FDDOBJS= ../fdd/diskdrv.o ../fdd/newdisk.o ../fdd/fddfile.o \ - ../fdd/fdd_xdf.o ../fdd/fdd_d88.o ../fdd/fdd_mtr.o \ - ../fdd/sxsi.o ../fdd/sxsihdd.o ../fdd/sxsicd.o - -FONTOBJS= ../font/font.o ../font/fontdata.o ../font/fontmake.o \ - ../font/fontpc88.o ../font/fontpc98.o ../font/fontv98.o \ - ../font/fontfm7.o ../font/fontx1.o ../font/fontx68k.o - -GENERICOBJS= ../generic/cmndraw.o ../generic/keydisp.o ../generic/cmjasts.o \ - ../generic/hostdrv.o ../generic/hostdrvs.o ../generic/unasm.o \ - ../generic/np2info.o ../generic/memdbg32.o ../generic/softkbd.o - -IOOBJS= ../io/iocore.o ../io/artic.o ../io/cgrom.o ../io/cpuio.o \ - ../io/crtc.o ../io/dipsw.o ../io/dmac.o ../io/egc.o \ - ../io/emsio.o ../io/fdc.o ../io/fdd320.o ../io/gdc.o \ - ../io/gdc_sub.o ../io/gdc_pset.o ../io/mouseif.o \ - ../io/nmiio.o ../io/np2sysp.o ../io/pic.o ../io/pit.o \ - ../io/printif.o ../io/serial.o ../io/sysport.o ../io/upd4990.o \ - ../io/necio.o ../io/epsonio.o ../io/pcidev.o - -LIOOBJS= ../lio/lio.o ../lio/gscreen.o ../lio/gpset.o ../lio/gline.o \ - ../lio/gcircle.o ../lio/gput1.o - -MEMOBJS= ../mem/dmav30.o ../mem/dmax86.o ../mem/memegc.o \ - ../mem/memems.o ../mem/memepp.o ../mem/memtram.o \ - ../mem/memvga.o ../mem/memvram.o - -NP2OBJS= ../pccore.o ../nevent.o ../calendar.o ../timing.o \ - ../statsave.o ../keystat.o - -SOUNDOBJS= ../sound/sound.o ../sound/soundrom.o ../sound/s98.o \ - ../sound/adpcmc.o ../sound/adpcmg.o \ - ../sound/beepc.o ../sound/beepg.o \ - ../sound/cs4231c.o ../sound/cs4231g.o \ - ../sound/fmboard.o ../sound/fmtimer.o \ - ../sound/opngenc.o ../sound/opngeng.o \ - ../sound/pcm86c.o ../sound/pcm86g.o \ - ../sound/psggenc.o ../sound/psggeng.o \ - ../sound/rhythmc.o ../sound/sndcsec.o \ - ../sound/tms3631c.o ../sound/tms3631g.o - -GETSNDOBJS= ../sound/getsnd/getsnd.o ../sound/getsnd/getsmix.o \ - ../sound/getsnd/getmp3.o ../sound/getsnd/getogg.o \ - ../sound/getsnd/getwave.o - -VERMOUTHOBJS= ../sound/vermouth/midiout.o ../sound/vermouth/midimod.o \ - ../sound/vermouth/midinst.o ../sound/vermouth/midvoice.o \ - ../sound/vermouth/midtable.o - -VRAMOBJS= ../vram/vram.o ../vram/scrndraw.o ../vram/sdraw.o \ - ../vram/dispsync.o ../vram/palettes.o ../vram/maketext.o \ - ../vram/maketgrp.o ../vram/makegrph.o ../vram/scrnbmp.o \ - ../vram/makegrex.o - -X11OBJS= dosio.o ini.o trace.o \ - toolkit.o kdispwin.o skbdwin.o \ - cmmidi.o cmserial.o \ - drawmng.o kbdmng.o \ - commng.o joymng.o soundmng.o sysmng.o taskmng.o timemng.o \ - main.o np2.o - -DEBUGOBJS= debug/viewmem.o - -#if defined(CPUCORE_IA32) - -CPUOBJS= \ - ../i386c/cpucore.o \ - ../i386c/memory.o \ - ../i386c/ia32/interface.o \ - ../i386c/ia32/ia32.o \ - ../i386c/ia32/cpu.o \ - ../i386c/ia32/cpu_io.o \ - ../i386c/ia32/cpu_mem.o \ - ../i386c/ia32/ctrlxfer.o \ - ../i386c/ia32/debug.o \ - ../i386c/ia32/disasm.o \ - ../i386c/ia32/exception.o \ - ../i386c/ia32/groups.o \ - ../i386c/ia32/inst_table.o \ - ../i386c/ia32/paging.o \ - ../i386c/ia32/resolve.o \ - ../i386c/ia32/segments.o \ - ../i386c/ia32/task.o \ - ../i386c/ia32/instructions/bin_arith.o \ - ../i386c/ia32/instructions/bit_byte.o \ - ../i386c/ia32/instructions/ctrl_trans.o \ - ../i386c/ia32/instructions/data_trans.o \ - ../i386c/ia32/instructions/dec_arith.o \ - ../i386c/ia32/instructions/flag_ctrl.o \ - ../i386c/ia32/instructions/logic_arith.o \ - ../i386c/ia32/instructions/misc_inst.o \ - ../i386c/ia32/instructions/seg_reg.o \ - ../i386c/ia32/instructions/shift_rotate.o \ - ../i386c/ia32/instructions/string_inst.o \ - ../i386c/ia32/instructions/system_inst.o \ - ../i386c/ia32/instructions/fpu/fpdummy.o - -CPUFLAGS= -DCPUCORE_IA32 \ - -I../i386c -I../i386c/ia32 \ - -I../i386c/ia32/instructions -I../i386c/ia32/instructions/fpu - -NP2OBJS+= ../debugsub386.o - -#else - -CPUOBJS= ../i286c/i286c.o ../i286c/i286c_mn.o ../i286c/i286c_ea.o \ - ../i286c/i286c_0f.o ../i286c/i286c_8x.o ../i286c/i286c_sf.o \ - ../i286c/i286c_f6.o ../i286c/i286c_fe.o ../i286c/i286c_rp.o \ - ../i286c/memory.o \ - ../i286c/v30patch.o - -CPUFLAGS= -I../i286c - -NP2OBJS+= ../debugsub.o - -#endif - -OBJS= $(COMMONOBJS) $(CODECNVOBJS) \ - $(BIOSOBJS) $(CBUSOBJS) $(FDDOBJS) $(FONTOBJS) \ - $(IOOBJS) $(LIOOBJS) $(NP2OBJS) $(SOUNDOBJS) $(GETSNDOBJS) \ - $(VERMOUTHOBJS) $(VRAMOBJS) $(GENERICOBJS) \ - $(CPUOBJS) $(MEMOBJS) \ - $(X11OBJS) $(DEBUGOBJS) \ - $(GTKDEPOBJS) - -CSRCS= $(COMMONOBJS:.o=.c) $(CODECNVOBJS:.o=.c) \ - $(BIOSOBJS:.o=.c) $(CBUSOBJS:.o=.c) \ - $(FDDOBJS:.o=.c) $(FONTOBJS:.o=.c) $(IOOBJS:.o=.c) \ - $(LIOOBJS:.o=.c) $(NP2OBJS:.o=.c) \ - $(SOUNDOBJS:.o=.c) $(GETSNDOBJS:.o=.c) $(VERMOUTHOBJS:.o=.c) \ - $(VRAMOBJS:.o=.c) $(GENERICOBJS:.o=.c) \ - $(CPUOBJS:.o=.c) $(MEMOBJS:.o=.c) \ - $(DEBUGOBJS:.o=.c) \ - $(X11OBJS:.o=.c) $(GTKDEPOBJS:.o=.c) -SRCS= $(CSRCS) -ALLSRCS= $(ASRCS) $(CSRCS) - -.c.o: - $(CC) -o $@ $(CFLAGS) $(_NOOP_) -c $< - -ComplexProgramTarget(xnp2) - -InstallMultipleFlags(resources/fddseek.wav, $(SYSRESPATH), $(INSTDATFLAGS)) -InstallMultipleFlags(resources/fddseek1.wav, $(SYSRESPATH), $(INSTDATFLAGS)) - -XCOMM -XCOMM for Release -XCOMM -XCOMM InstallMultipleFlags(../np2tool/np2tool.d88, $(SYSRESPATH), $(INSTDATFLAGS)) - -clean:: - $(RM) $(OBJS) - -cpuclean: - $(RM) $(CPUOBJS) - -distclean:: - $(RM) .depend diff --git a/x11/Makefile.am b/x11/Makefile.am new file mode 100644 index 00000000..56bba288 --- /dev/null +++ b/x11/Makefile.am @@ -0,0 +1,312 @@ +real_topsrcdir= $(top_srcdir)/.. + +bin_PROGRAMS= xnp2 + +nodist_man1_MANS= xnp2.1 xnp2.1j +CLEANFILES= $(nodist_man1_MANS) +dist_pkgdata_DATA= $(real_topsrcdir)/x11/resources/fddseek.wav \ + $(real_topsrcdir)/x11/resources/fddseek1.wav +dist_pkgdata_DATA+= $(real_topsrcdir)/np2tool/np2tool.d88 + +xnp2_SOURCES= $(real_topsrcdir)/x11/main.c \ + $(real_topsrcdir)/x11/np2.c \ + $(real_topsrcdir)/x11/dosio.c \ + $(real_topsrcdir)/x11/ini.c \ + $(real_topsrcdir)/x11/oemtext.c \ + $(real_topsrcdir)/x11/trace.c \ + $(real_topsrcdir)/x11/kdispwin.c \ + $(real_topsrcdir)/x11/skbdwin.c \ + $(real_topsrcdir)/x11/cmmidi.c \ + $(real_topsrcdir)/x11/cmserial.c \ + $(real_topsrcdir)/x11/drawmng.c \ + $(real_topsrcdir)/x11/fontmng.c \ + $(real_topsrcdir)/x11/kbdmng.c \ + $(real_topsrcdir)/x11/commng.c \ + $(real_topsrcdir)/x11/joymng.c \ + $(real_topsrcdir)/x11/soundmng.c \ + $(real_topsrcdir)/x11/sysmng.c \ + $(real_topsrcdir)/x11/taskmng.c \ + $(real_topsrcdir)/x11/timemng.c \ + $(real_topsrcdir)/x11/gtk2/dialog_about.c \ + $(real_topsrcdir)/x11/gtk2/dialog_calendar.c \ + $(real_topsrcdir)/x11/gtk2/dialog_config.c \ + $(real_topsrcdir)/x11/gtk2/dialog_midi.c \ + $(real_topsrcdir)/x11/gtk2/dialog_newdisk.c \ + $(real_topsrcdir)/x11/gtk2/dialog_screen.c \ + $(real_topsrcdir)/x11/gtk2/dialog_sound.c \ + $(real_topsrcdir)/x11/gtk2/window_keydisp.c \ + $(real_topsrcdir)/x11/gtk2/window_softkbd.c \ + $(real_topsrcdir)/x11/gtk2/gtk_drawmng.c \ + $(real_topsrcdir)/x11/gtk2/gtk_screen.c \ + $(real_topsrcdir)/x11/gtk2/gtk_font.c \ + $(real_topsrcdir)/x11/gtk2/gtk_keyboard.c \ + $(real_topsrcdir)/x11/gtk2/gtk_menu.c \ + $(real_topsrcdir)/x11/gtk2/gtk_mouse.c \ + $(real_topsrcdir)/x11/gtk2/gtk_main.c \ + $(real_topsrcdir)/x11/gtk2/gtk_wrapper.c \ + $(real_topsrcdir)/x11/debug/viewmem.c \ + \ + $(real_topsrcdir)/pccore.c \ + $(real_topsrcdir)/nevent.c \ + $(real_topsrcdir)/calendar.c \ + $(real_topsrcdir)/timing.c \ + $(real_topsrcdir)/statsave.c \ + $(real_topsrcdir)/keystat.c \ + \ + $(real_topsrcdir)/common/strres.c \ + $(real_topsrcdir)/common/milstr.c \ + $(real_topsrcdir)/common/_memory.c \ + $(real_topsrcdir)/common/textfile.c \ + $(real_topsrcdir)/common/profile.c \ + $(real_topsrcdir)/common/rect.c \ + $(real_topsrcdir)/common/lstarray.c \ + $(real_topsrcdir)/common/bmpdata.c \ + $(real_topsrcdir)/common/mimpidef.c \ + $(real_topsrcdir)/common/parts.c \ + $(real_topsrcdir)/common/wavefile.c \ + \ + $(real_topsrcdir)/codecnv/eucsjis.c \ + $(real_topsrcdir)/codecnv/eucucs2.c \ + $(real_topsrcdir)/codecnv/sjiseuc.c \ + $(real_topsrcdir)/codecnv/sjisucs2.c \ + $(real_topsrcdir)/codecnv/ucs2utf8.c \ + $(real_topsrcdir)/codecnv/utf8ucs2.c \ + \ + $(real_topsrcdir)/bios/bios.c \ + $(real_topsrcdir)/bios/bios09.c \ + $(real_topsrcdir)/bios/bios0c.c \ + $(real_topsrcdir)/bios/bios12.c \ + $(real_topsrcdir)/bios/bios13.c \ + $(real_topsrcdir)/bios/bios18.c \ + $(real_topsrcdir)/bios/bios19.c \ + $(real_topsrcdir)/bios/bios1a.c \ + $(real_topsrcdir)/bios/bios1b.c \ + $(real_topsrcdir)/bios/bios1c.c \ + $(real_topsrcdir)/bios/bios1f.c \ + $(real_topsrcdir)/bios/sxsibios.c \ + \ + $(real_topsrcdir)/cbus/cbuscore.c \ + $(real_topsrcdir)/cbus/pc9861k.c \ + $(real_topsrcdir)/cbus/mpu98ii.c \ + $(real_topsrcdir)/cbus/amd98.c \ + $(real_topsrcdir)/cbus/board118.c \ + $(real_topsrcdir)/cbus/board14.c \ + $(real_topsrcdir)/cbus/board26k.c \ + $(real_topsrcdir)/cbus/board86.c \ + $(real_topsrcdir)/cbus/boardspb.c \ + $(real_topsrcdir)/cbus/boardx2.c \ + $(real_topsrcdir)/cbus/cs4231io.c \ + $(real_topsrcdir)/cbus/pcm86io.c \ + $(real_topsrcdir)/cbus/sasiio.c \ + $(real_topsrcdir)/cbus/scsiio.c \ + $(real_topsrcdir)/cbus/scsicmd.c \ + $(real_topsrcdir)/cbus/ideio.c \ + $(real_topsrcdir)/cbus/atapicmd.c \ + \ + $(real_topsrcdir)/fdd/diskdrv.c \ + $(real_topsrcdir)/fdd/newdisk.c \ + $(real_topsrcdir)/fdd/fddfile.c \ + $(real_topsrcdir)/fdd/fdd_xdf.c \ + $(real_topsrcdir)/fdd/fdd_d88.c \ + $(real_topsrcdir)/fdd/fdd_mtr.c \ + $(real_topsrcdir)/fdd/sxsi.c \ + $(real_topsrcdir)/fdd/sxsihdd.c \ + $(real_topsrcdir)/fdd/sxsicd.c \ + \ + $(real_topsrcdir)/font/font.c \ + $(real_topsrcdir)/font/fontdata.c \ + $(real_topsrcdir)/font/fontmake.c \ + $(real_topsrcdir)/font/fontpc88.c \ + $(real_topsrcdir)/font/fontpc98.c \ + $(real_topsrcdir)/font/fontv98.c \ + $(real_topsrcdir)/font/fontfm7.c \ + $(real_topsrcdir)/font/fontx1.c \ + $(real_topsrcdir)/font/fontx68k.c \ + \ + $(real_topsrcdir)/generic/cmndraw.c \ + $(real_topsrcdir)/generic/keydisp.c \ + $(real_topsrcdir)/generic/cmjasts.c \ + $(real_topsrcdir)/generic/hostdrv.c \ + $(real_topsrcdir)/generic/hostdrvs.c \ + $(real_topsrcdir)/generic/unasm.c \ + $(real_topsrcdir)/generic/np2info.c \ + $(real_topsrcdir)/generic/memdbg32.c \ + $(real_topsrcdir)/generic/softkbd.c \ + \ + $(real_topsrcdir)/io/iocore.c \ + $(real_topsrcdir)/io/artic.c \ + $(real_topsrcdir)/io/cgrom.c \ + $(real_topsrcdir)/io/cpuio.c \ + $(real_topsrcdir)/io/crtc.c \ + $(real_topsrcdir)/io/dipsw.c \ + $(real_topsrcdir)/io/dmac.c \ + $(real_topsrcdir)/io/egc.c \ + $(real_topsrcdir)/io/emsio.c \ + $(real_topsrcdir)/io/fdc.c \ + $(real_topsrcdir)/io/fdd320.c \ + $(real_topsrcdir)/io/gdc.c \ + $(real_topsrcdir)/io/gdc_sub.c \ + $(real_topsrcdir)/io/gdc_pset.c \ + $(real_topsrcdir)/io/mouseif.c \ + $(real_topsrcdir)/io/nmiio.c \ + $(real_topsrcdir)/io/np2sysp.c \ + $(real_topsrcdir)/io/pic.c \ + $(real_topsrcdir)/io/pit.c \ + $(real_topsrcdir)/io/printif.c \ + $(real_topsrcdir)/io/serial.c \ + $(real_topsrcdir)/io/sysport.c \ + $(real_topsrcdir)/io/upd4990.c \ + $(real_topsrcdir)/io/necio.c \ + $(real_topsrcdir)/io/epsonio.c \ + $(real_topsrcdir)/io/pcidev.c \ + \ + $(real_topsrcdir)/lio/lio.c \ + $(real_topsrcdir)/lio/gscreen.c \ + $(real_topsrcdir)/lio/gpset.c \ + $(real_topsrcdir)/lio/gline.c \ + $(real_topsrcdir)/lio/gcircle.c \ + $(real_topsrcdir)/lio/gput1.c \ + \ + $(real_topsrcdir)/mem/dmav30.c \ + $(real_topsrcdir)/mem/dmax86.c \ + $(real_topsrcdir)/mem/memegc.c \ + $(real_topsrcdir)/mem/memems.c \ + $(real_topsrcdir)/mem/memepp.c \ + $(real_topsrcdir)/mem/memtram.c \ + $(real_topsrcdir)/mem/memvga.c \ + $(real_topsrcdir)/mem/memvram.c \ + \ + $(real_topsrcdir)/sound/sound.c \ + $(real_topsrcdir)/sound/soundrom.c \ + $(real_topsrcdir)/sound/s98.c \ + $(real_topsrcdir)/sound/adpcmc.c \ + $(real_topsrcdir)/sound/adpcmg.c \ + $(real_topsrcdir)/sound/beepc.c \ + $(real_topsrcdir)/sound/beepg.c \ + $(real_topsrcdir)/sound/cs4231c.c \ + $(real_topsrcdir)/sound/cs4231g.c \ + $(real_topsrcdir)/sound/fmboard.c \ + $(real_topsrcdir)/sound/fmtimer.c \ + $(real_topsrcdir)/sound/opngenc.c \ + $(real_topsrcdir)/sound/opngeng.c \ + $(real_topsrcdir)/sound/pcm86c.c \ + $(real_topsrcdir)/sound/pcm86g.c \ + $(real_topsrcdir)/sound/psggenc.c \ + $(real_topsrcdir)/sound/psggeng.c \ + $(real_topsrcdir)/sound/rhythmc.c \ + $(real_topsrcdir)/sound/sndcsec.c \ + $(real_topsrcdir)/sound/tms3631c.c \ + $(real_topsrcdir)/sound/tms3631g.c \ + $(real_topsrcdir)/sound/getsnd/getsnd.c \ + $(real_topsrcdir)/sound/getsnd/getsmix.c \ + $(real_topsrcdir)/sound/getsnd/getmp3.c \ + $(real_topsrcdir)/sound/getsnd/getogg.c \ + $(real_topsrcdir)/sound/getsnd/getwave.c \ + $(real_topsrcdir)/sound/vermouth/midiout.c \ + $(real_topsrcdir)/sound/vermouth/midimod.c \ + $(real_topsrcdir)/sound/vermouth/midinst.c \ + $(real_topsrcdir)/sound/vermouth/midvoice.c \ + $(real_topsrcdir)/sound/vermouth/midtable.c \ + \ + $(real_topsrcdir)/vram/vram.c \ + $(real_topsrcdir)/vram/scrndraw.c \ + $(real_topsrcdir)/vram/sdraw.c \ + $(real_topsrcdir)/vram/dispsync.c \ + $(real_topsrcdir)/vram/palettes.c \ + $(real_topsrcdir)/vram/maketext.c \ + $(real_topsrcdir)/vram/maketgrp.c \ + $(real_topsrcdir)/vram/makegrph.c \ + $(real_topsrcdir)/vram/scrnbmp.c \ + $(real_topsrcdir)/vram/makegrex.c + +AM_CPPFLAGS= -I$(real_topsrcdir) \ + -I$(real_topsrcdir)/x11 \ + -I$(real_topsrcdir)/x11/gtk2 \ + -I$(real_topsrcdir)/x11/debug \ + -I$(real_topsrcdir)/common \ + -I$(real_topsrcdir)/codecnv \ + -I$(real_topsrcdir)/bios \ + -I$(real_topsrcdir)/cbus \ + -I$(real_topsrcdir)/fdd \ + -I$(real_topsrcdir)/font \ + -I$(real_topsrcdir)/generic \ + -I$(real_topsrcdir)/io \ + -I$(real_topsrcdir)/lio \ + -I$(real_topsrcdir)/mem \ + -I$(real_topsrcdir)/sound \ + -I$(real_topsrcdir)/sound/getsnd \ + -I$(real_topsrcdir)/sound/vermouth \ + -I$(real_topsrcdir)/vram \ + $(GTK_CFLAGS) $(SDL_CFLAGS) + +if HAVE_GCC +AM_CFLAGS= -fsigned-char +CFLAGS+= -fno-strict-aliasing +endif + +xnp2_LDADD= $(GTK_LIBS) $(SDL_LIBS) \ + $(X_LIBS) $(X_PRE_LIBS) $(XLIB) $(X_EXTRA_LIBS) + +DEFS= @DEFS@ -DSYSRESPATH=\""$(pkgdatadir)"\" + +if CPUCORE_IA32 +xnp2_SOURCES+= $(real_topsrcdir)/i386c/cpucore.c \ + $(real_topsrcdir)/i386c/memory.c \ + $(real_topsrcdir)/i386c/ia32/interface.c \ + $(real_topsrcdir)/i386c/ia32/ia32.c \ + $(real_topsrcdir)/i386c/ia32/cpu.c \ + $(real_topsrcdir)/i386c/ia32/cpu_io.c \ + $(real_topsrcdir)/i386c/ia32/cpu_mem.c \ + $(real_topsrcdir)/i386c/ia32/ctrlxfer.c \ + $(real_topsrcdir)/i386c/ia32/debug.c \ + $(real_topsrcdir)/i386c/ia32/disasm.c \ + $(real_topsrcdir)/i386c/ia32/exception.c \ + $(real_topsrcdir)/i386c/ia32/groups.c \ + $(real_topsrcdir)/i386c/ia32/inst_table.c \ + $(real_topsrcdir)/i386c/ia32/paging.c \ + $(real_topsrcdir)/i386c/ia32/resolve.c \ + $(real_topsrcdir)/i386c/ia32/segments.c \ + $(real_topsrcdir)/i386c/ia32/task.c \ + $(real_topsrcdir)/i386c/ia32/instructions/bin_arith.c \ + $(real_topsrcdir)/i386c/ia32/instructions/bit_byte.c \ + $(real_topsrcdir)/i386c/ia32/instructions/ctrl_trans.c \ + $(real_topsrcdir)/i386c/ia32/instructions/data_trans.c \ + $(real_topsrcdir)/i386c/ia32/instructions/dec_arith.c \ + $(real_topsrcdir)/i386c/ia32/instructions/flag_ctrl.c \ + $(real_topsrcdir)/i386c/ia32/instructions/fpu.c \ + $(real_topsrcdir)/i386c/ia32/instructions/logic_arith.c \ + $(real_topsrcdir)/i386c/ia32/instructions/misc_inst.c \ + $(real_topsrcdir)/i386c/ia32/instructions/seg_reg.c \ + $(real_topsrcdir)/i386c/ia32/instructions/shift_rotate.c \ + $(real_topsrcdir)/i386c/ia32/instructions/string_inst.c \ + $(real_topsrcdir)/i386c/ia32/instructions/system_inst.c \ + $(real_topsrcdir)/i386c/ia32/instructions/fpu/fpdummy.c \ + $(real_topsrcdir)/debugsub386.c + +AM_CPPFLAGS+= -I$(real_topsrcdir)/i386c \ + -I$(real_topsrcdir)/i386c/ia32 \ + -I$(real_topsrcdir)/i386c/ia32/instructions \ + -I$(real_topsrcdir)/i386c/ia32/instructions/fpu +else +xnp2_SOURCES+= $(real_topsrcdir)/i286c/i286c.c \ + $(real_topsrcdir)/i286c/i286c_mn.c \ + $(real_topsrcdir)/i286c/i286c_ea.c \ + $(real_topsrcdir)/i286c/i286c_0f.c \ + $(real_topsrcdir)/i286c/i286c_8x.c \ + $(real_topsrcdir)/i286c/i286c_sf.c \ + $(real_topsrcdir)/i286c/i286c_f6.c \ + $(real_topsrcdir)/i286c/i286c_fe.c \ + $(real_topsrcdir)/i286c/i286c_rp.c \ + $(real_topsrcdir)/i286c/memory.c \ + $(real_topsrcdir)/i286c/v30patch.c \ + $(real_topsrcdir)/debugsub.c + +AM_CPPFLAGS+= -I$(real_topsrcdir)/i286c +endif + +CLEANFILES+= make.log + +cleandir:: distclean + +.man1.1 .jman1.1j: + @sed -e 's;@PKGDATADIR@;${DESTDIR}${pkgdatadir};' < $< > $@ diff --git a/x11/README.ja b/x11/README.ja index 19180f7d..d6820e7a 100644 --- a/x11/README.ja +++ b/x11/README.ja @@ -1,250 +1,257 @@ -Xnp2 - 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネII for X Window System +Xnp2 - 縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝II for X Window System -1. 、マ、ク、皃ヒ +1. 縺ッ縺倥a縺ォ - 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネII 、マ、ラ、ヒ、蟒皃ヒ、隍コタョ、オ、、ソ Windows セ螟ヌニーコ、ケ、 - i286 CPU 、ナ羲ワ、キ、ソ PC-9801 ・キ・遙シ・コ、ホ・ィ・゚・螂。シ・ソ、ヌ、ケ。」 + 縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝II 縺ッ縺キ縺ォ繧豌上↓繧医j菴懈舌&繧後◆ Windows 荳翫〒蜍穂ス懊☆繧 + i286 CPU 繧貞。碑シ峨@縺 PC-9801 繧キ繝ェ繝シ繧コ縺ョ繧ィ繝溘Η繝ャ繝シ繧ソ縺ァ縺吶 - Xnp2 、マ、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネII、 UNIX キマ OS 、ヌニーコ、ケ、ヘヘ、ヒーワソ「、キ、ソ、筅ホ、ヌ、ケ。」 + Xnp2 縺ッ縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝II 繧 UNIX 邉サ OS 縺ァ蜍穂ス懊☆繧区ァ倥↓遘サ讀阪@縺溘b縺ョ縺ァ縺吶 -2. ニーコエトカュ +2. 蜍穂ス懃腸蠅 - X Window System 、ャニーコ、ケ、 UNIX キマ OS 、ヌニーコ、キ、゙、ケ。」 + X Window System 縺悟虚菴懊☆繧 UNIX 邉サ OS 縺ァ蜍穂ス懊@縺セ縺吶 -3. ノャヘラ、ハ・ス・ユ・ネ・ヲ・ァ・「 +3. 蠢隕√↑繧ス繝輔ヨ繧ヲ繧ァ繧「 - 3.1. ・ウ・・ム・、・サ、ヒノャヘラ、ハ・ス・ユ・ネ・ヲ・ァ・「 + 3.1. 繧ウ繝ウ繝代う繝ォ譎ゅ↓蠢隕√↑繧ス繝輔ヨ繧ヲ繧ァ繧「 - 。ヲgcc - 。ヲGTK+ 2.6 ーハケ゚ + 繝サgcc + 繝サGTK+ 2.6 莉・髯 - ーハイシ、マニーコ、ヒ、マノャソワ、ヌ、マ、「、熙゙、サ、、ャ。「イサ、フト、鬢ケセケ酣、ヒノャヘラ、ヒ、ハ、熙゙、ケ。」 + 莉・荳九ッ蜍穂ス懊↓縺ッ蠢鬆医〒縺ッ縺ゅj縺セ縺帙s縺後髻ウ繧帝ウエ繧峨☆蝣エ蜷育ュ峨↓蠢隕√↓縺ェ繧翫∪縺吶 - 。ヲSDL (・オ・ヲ・・ノ。ヲ・ク・逾、・ケ・ニ・」・テ・ッ、サネヘム、ケ、セケ遉ヒノャヘラ、ヌ、ケ。」) - 。ヲSDL_mixer (・ユ・・テ・ヤ。シ、ホ・キ。シ・ッイサナ、ホ PCM 、コニタク、ケ、セケ遉ヒノャヘラ、ヌ、ケ。」) + 繝サSDL (繧オ繧ヲ繝ウ繝峨サ繧ク繝ァ繧、繧ケ繝繧」繝繧ッ繧剃スソ逕ィ縺吶k蝣エ蜷医↓蠢隕√〒縺吶) + 繝サSDL_mixer (繝輔Ο繝繝斐シ縺ョ繧キ繝シ繧ッ髻ウ遲峨ョ PCM 繧貞咲函縺吶k蝣エ蜷医↓蠢隕√〒縺吶) + 繝サXFree86-VidModeExtension (逕サ髱「隗」蜒丞コヲ繧貞、画峩縺吶k繝輔Ν繧ケ繧ッ繝ェ繝シ繝ウ讖溯ス繧剃スソ逕ィ縺吶k蝣エ蜷医↓蠢隕) - 3.2. シツケヤサ、ヒノャヘラ、ハ・ス・ユ・ネ・ヲ・ァ・「 + 3.2. 螳溯。梧凾縺ォ蠢隕√↑繧ス繝輔ヨ繧ヲ繧ァ繧「 - イ靂フイチナル、ハムケケ、キ、ハ、、・ユ・・ケ・ッ・遙シ・オ。ヌス、サネヘム、ケ、セケ遉ヒ、マ。「サネヘム、キ、ニ、、、 - ・ヲ・」・・ノ・ヲ・゙・ヘ。シ・ク・网ャ NETWM オャウハ、ヒス犒、キ、ニ、、、ノャヘラ、ャ、「、熙゙、ケ。」 + 逕サ髱「隗」蜒丞コヲ繧貞、画峩縺励↑縺繝輔Ν繧ケ繧ッ繝ェ繝シ繝ウ讖溯ス繧剃スソ逕ィ縺吶k蝣エ蜷医↓縺ッ縲∽スソ逕ィ縺励※縺繧 + 繧ヲ繧」繝ウ繝峨え繝槭ロ繝シ繧ク繝」縺 NETWM 隕乗シ縺ォ貅匁侠縺励※縺繧句ソ隕√′縺ゅj縺セ縺吶 - NETWM オャウハ、ヒ、ト、、、ニ、マーハイシ、ホ URL 、サイセネ、キ、ニ、ッ、タ、オ、、。」 + NETWM 隕乗シ縺ォ縺、縺縺ヲ縺ッ莉・荳九ョ URL 繧貞盾辣ァ縺励※縺上□縺輔>縲 http://freedesktop.org/wiki/Standards/wm-spec -4. ・、・・ケ・ネ。シ・ハヒ。 +4. 繧、繝ウ繧ケ繝医シ繝ォ - INSTALL.ja 、サイセネ、キ、ニ、ッ、タ、オ、、。」 + Xnp2 縺ョ繧、繝ウ繧ケ繝医シ繝ォ縺ッ繧ウ繝槭Φ繝峨Λ繧、繝ウ縺九i莉・荳九ョ讒倥↓陦後>縺セ縺吶 + $ ./configure + $ make + $ su + # make install -5. シツケヤ + 窶サconfigure 縺ァ謖螳壹〒縺阪k繧ェ繝励す繝ァ繝ウ縺ォ縺、縺縺ヲ縺ッ ./configure --help 繧貞ョ溯。後@縺ヲ + 陦ィ遉コ縺輔l繧九倥Ν繝励r蜿らァ縺励※縺上□縺輔>縲 - 5.1. シツケヤハヒ。 - ・ラ・・ー・鬣爨ホシツケヤ、マ・ウ・゙・・ノ・鬣、・、ォ、魏ハイシ、ホヘヘ、ヒケヤ、、、゙、ケ。」 +5. 螳溯。 + + 5.1. 螳溯。梧婿豕 + + 繝励Ο繧ー繝ゥ繝縺ョ螳溯。後ッ繧ウ繝槭Φ繝峨Λ繧、繝ウ縺九i莉・荳九ョ讒倥↓陦後>縺セ縺吶 $ xnp2 - 、゙、ソ。「オッニーサ、ヒ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・ノ・鬣、・ヨ、ヒ・ヌ・」・ケ・ッ・、・癸シ・ク、ヂニ、キ、ソ、、セケ遑「 - ーハイシ、ホヘヘ、ヒ・ヌ・」・ケ・ッ・、・癸シ・ク、ーソ、ヒサリト熙キ、ニ、ッ、タ、オ、、。」 + 縺セ縺溘∬オキ蜍墓凾縺ォ繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ繝峨Λ繧、繝悶↓繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧呈諺蜈・縺励◆縺蝣エ蜷医 + 莉・荳九ョ讒倥↓繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧貞シ墓焚縺ォ謖螳壹@縺ヲ縺上□縺輔>縲 - ホ: FDD1 、ヒ system.d88。「FDD2 、ヒ data.d88 、ヂニ、キ、ニオッニー + 萓: FDD1 縺ォ system.d88縲:DD2 縺ォ data.d88 繧呈諺蜈・縺励※襍キ蜍 $ xnp2 system.d88 data.d88 - 5.2. ス魘タ゚ト + 5.2. 蛻晄悄險ュ螳 - 1) CPU ・ッ・・テ・ッ、ホタ゚ト - ・皈ヒ・蝪シ、ォ、 [Emulate -> Configure...] 、チェツ、キ。「タ゚ト・タ・、・「・・ー、 - ノスシィ、キ、゙、ケ。」 - CPU ・ッ・・テ・ッ、ホエトテヘ、マ PC-9801VX チナ、ホ 10MHz 、ヒ、ハ、テ、ニ、、、゙、ケ。」 - ス靉ヘ、チ、ャネッタク、キ、ニ、キ、゙、ヲヘヘ、ヌ、キ、ソ、鬘「・ッ・・テ・ッ、ホタ゚ト熙ハムケケ、キ、ニ・ッ・・テ・ッテヘ、 - イシ、イ、ニ、ッ、タ、オ、、。」 + 1) CPU 繧ッ繝ュ繝繧ッ縺ョ險ュ螳 + 繝。繝九Η繝シ縺九i [Emulate -> Configure...] 繧帝∈謚槭@縲∬ィュ螳壹ム繧、繧「繝ュ繧ー繧 + 陦ィ遉コ縺励∪縺吶 + CPU 繧ッ繝ュ繝繧ッ縺ョ譌「螳壼、縺ッ PC-9801VX 逶ク蠖薙ョ 10MHz 縺ォ縺ェ縺」縺ヲ縺縺セ縺吶 + 蜃ヲ逅關ス縺。縺檎匱逕溘@縺ヲ縺励∪縺讒倥〒縺励◆繧峨√け繝ュ繝繧ッ縺ョ險ュ螳壹r螟画峩縺励※繧ッ繝ュ繝繧ッ蛟、繧 + 荳九£縺ヲ縺上□縺輔>縲 - 2) ・オ・ヲ・・ノ、ホタ゚ト (・オ・ヲ・・ノサネヘムサ、ホ、゚) - CPU ・ッ・・テ・ッ、ホタ゚ト熙ネニア、ク・タ・、・「・・ー、ヌタ゚ト熙ヌ、ュ、゙、ケ。」 - ・オ・・ラ・・・ー・。シ・ネ、マス靉ツョナル、ヒヘセヘオ、ャ、「、、ミ 44KHz 、ヒタ゚ト熙キ、ニ、ッ、タ、オ、、。」 - ・オ・ヲ・・ノ・ミ・テ・ユ・。、マス靉、ャトノ、、ノユ、ッコヌト网ホテヘ、タ゚ト熙キ、ニ、ッ、タ、オ、、。」 - エトカュ、ヒ、筅隍熙゙、ケ、ャ。「ツョ、、・゙・キ・、ヌ、「、、ミ 50。チ100 ms。「トフセ、ヌ 200ms ーフ、ャ - フワーツ、ヌ、ケ。」 + 2) 繧オ繧ヲ繝ウ繝峨ョ險ュ螳 (繧オ繧ヲ繝ウ繝我スソ逕ィ譎ゅョ縺ソ) + CPU 繧ッ繝ュ繝繧ッ縺ョ險ュ螳壹→蜷後§繝繧、繧「繝ュ繧ー縺ァ險ュ螳壹〒縺阪∪縺吶 + 繧オ繝ウ繝励Μ繝ウ繧ー繝ャ繝シ繝医ッ蜃ヲ逅騾溷コヲ縺ォ菴呵」輔′縺ゅl縺ー 44KHz 縺ォ險ュ螳壹@縺ヲ縺上□縺輔>縲 + 繧オ繧ヲ繝ウ繝峨ヰ繝繝輔ぃ縺ッ蜃ヲ逅縺瑚ソス縺莉倥¥譛菴弱ョ蛟、繧定ィュ螳壹@縺ヲ縺上□縺輔>縲 + 迺ー蠅縺ォ繧ゅh繧翫∪縺吶′縲騾溘>繝槭す繝ウ縺ァ縺ゅl縺ー 50ス100 ms縲騾壼クク縺ァ 200ms 菴阪′ + 逶ョ螳峨〒縺吶 - 3) タ゚ト熙ホネソアヌ - 1) 。チ 2) 、ケヤ、テ、ソク蝪「[Emulate -> Reset] 、ヌタ゚ト熙ホネソアヌ、ケヤ、、、゙、ケ。」 - ・オ・ヲ・・ノサネヘムサ、ヒオッニーイサ、ャフト、鬢ハ、、セケ遉ヒ、マ。「・ラ・・ー・鬣爨ーテカスェホサ、キ、ニ、ォ、 - コニナルオッニー、キトセ、キ、ニ、ッ、タ、オ、、。」 + 3) 險ュ螳壹ョ蜿肴丐 + 1) ス 2) 繧定。後▲縺溷セ後ーEmulate -> Reset] 縺ァ險ュ螳壹ョ蜿肴丐繧定。後>縺セ縺吶 + 繧オ繧ヲ繝ウ繝我スソ逕ィ譎ゅ↓襍キ蜍暮浹縺碁ウエ繧峨↑縺蝣エ蜷医↓縺ッ縲√励Ο繧ー繝ゥ繝繧剃ク譌ヲ邨ゆコ縺励※縺九i + 蜀榊コヲ襍キ蜍輔@逶エ縺励※縺上□縺輔>縲 - 5.3. チ犲ハヒ。 + 5.3. 謫堺ス懈婿豕 - 5.3.1. ・゙・ヲ・ケ - 3 ・ワ・ソ・・゙・ヲ・ケ、サネヘム、キ、ニ、、、セケ遑「テ讌ワ・ソ・、ホ・ッ・・テ・ッ、ヌ X <-> PC-9801 エヨ、ホ - ・゙・ヲ・ケチ犲、ホタレツリ、ケヤ、、、゙、ケ。」 + 5.3.1. 繝槭え繧ケ + 3 繝懊ち繝ウ繝槭え繧ケ繧剃スソ逕ィ縺励※縺繧句エ蜷医∽クュ繝懊ち繝ウ縺ョ繧ッ繝ェ繝繧ッ縺ァ X <-> PC-9801 髢薙ョ + 繝槭え繧ケ謫堺ス懊ョ蛻譖ソ繧定。後>縺セ縺吶 - 5.3.2. ・ュ。シ・ワ。シ・ノ - ・ュ。シ・ワ。シ・ノ、マニヒワク 106 ・ュ。シ・ワ。シ・ノ、サネヘム、ケ、サ、チロト熙キ、ニ、、、゙、ケ。」 - 、ソ、タ、キ。「PC-9801 ・ュ。シ・ワ。シ・ノ、ネ、マ・ュ。シ・ワ。シ・ノ・・、・「・ヲ・ネ、ャーロ、ハ、ール。「 - ーノ、ホ・ュ。シ、ニ、エケ、ィ、ニ、「、熙゙、ケ。」ニ、エケ、ィ、鬢、ニ、、、・ュ。シ、ヒ、ト、、、ニ、マ - ーハイシ、ホノス、サイセネ、キ、ニ、ッ、タ、オ、、。」 + 5.3.2. 繧ュ繝シ繝懊シ繝 + 繧ュ繝シ繝懊シ繝峨ッ譌・譛ャ隱 106 繧ュ繝シ繝懊シ繝峨r菴ソ逕ィ縺吶k莠九r諠ウ螳壹@縺ヲ縺縺セ縺吶 + 縺溘□縺励 ̄C-9801 繧ュ繝シ繝懊シ繝峨→縺ッ繧ュ繝シ繝懊シ繝峨Ξ繧、繧「繧ヲ繝医′逡ー縺ェ繧狗ぜ縲 + 荳驛ィ縺ョ繧ュ繝シ繧貞・繧梧鋤縺医※縺ゅj縺セ縺吶ょ・繧梧鋤縺医i繧後※縺繧九く繝シ縺ォ縺、縺縺ヲ縺ッ + 莉・荳九ョ陦ィ繧貞盾辣ァ縺励※縺上□縺輔>縲 +-------------------------+----------------------------+ | PC-9801 | 106 | +-------------------------+----------------------------+ - | GRPH | ALT | - | HELP | END | + | GRPH | Alt | + | HELP | End, F12(*) | | CAPS | ScrollLock | - | NFER | フオハムエケ | - | XFER | ハムエケ/チークハ/チエクハ | + | NFER | 辟。螟画鋤 | + | XFER | 螟画鋤/蜑榊呵」/蜈ィ蛟呵」 | | STOP | Pause/Break, F12(*) | | COPY | PrintScreen/SysRq, F12(*) | - | ・ォ・ハ | ・ォ・ソ・ォ・ハ/、メ、鬢ャ、ハ/・。シ・゙サ | - | ・ニ・・ュ。シ、ホ = [・、・ウ。シ・] | F12(*) | - | ・ニ・・ュ。シ、ホ , [・ォ・・゙] | F12(*) | + | 繧ォ繝 | 繧ォ繧ソ繧ォ繝/縺イ繧峨′縺ェ/繝ュ繝シ繝槫ュ | + | 繝繝ウ繧ュ繝シ縺ョ = [繧、繧ウ繝シ繝ォ] | F12(*) | + | 繝繝ウ繧ュ繝シ縺ョ , [繧ォ繝ウ繝枉 | F12(*) | +-------------------------+----------------------------+ - (*) F12 ・ュ。シ、ホ・ュ。シウ荀ナ、ニ、マ・皈ヒ・蝪シ、ォ、鯡ムケケ、ヌ、ュ、゙、ケ。」 + (*) F12 繧ュ繝シ縺ョ繧ュ繝シ蜑イ繧雁ス薙※縺ッ繝。繝九Η繝シ縺九i螟画峩縺ァ縺阪∪縺吶 - ニヒワク 106 ヌロホ、ヌ、マフオ、、・ュ。シ・ワ。シ・ノ、ヌ、マニホマ、ヌ、ュ、ハ、、・ュ。シ、ャ、「、熙゙、ケ、ャ。「 - 、ス、ホセケ遉ヒ、マ・ス・ユ・ネ・ヲ・ァ・「・ュ。シ・ワ。シ・ノ、ォ、鯣ホマ、キ、ニ、ッ、タ、オ、、。」 - ・ス・ユ・ネ・ヲ・ァ・「・ュ。シ・ワ。シ・ノ、マ・皈ヒ・蝪シ、ォ、 Other -> Software Keyboard 、ヌ - ノスシィ、オ、、゙、ケ。」サネ、、スェ、テ、ソ・ス・ユ・ネ・ヲ・ァ・「・ュ。シ・ワ。シ・ノ、マノスシィ、ケ、、ネニア、クシス遉 - コニナルケヤ、ヲサ、ヌノスシィ、オ、、ハ、ッ、ハ、熙゙、ケ。」 + 譌・譛ャ隱 106 驟榊励〒縺ッ辟。縺繧ュ繝シ繝懊シ繝峨〒縺ッ蜈・蜉帙〒縺阪↑縺繧ュ繝シ縺後≠繧翫∪縺吶′縲 + 縺昴ョ蝣エ蜷医↓縺ッ繧ス繝輔ヨ繧ヲ繧ァ繧「繧ュ繝シ繝懊シ繝峨°繧牙・蜉帙@縺ヲ縺上□縺輔>縲 + 繧ス繝輔ヨ繧ヲ繧ァ繧「繧ュ繝シ繝懊シ繝峨ッ繝。繝九Η繝シ縺九i Other -> Software Keyboard 縺ァ + 陦ィ遉コ縺輔l縺セ縺吶ゆスソ縺邨ゅ▲縺溘た繝輔ヨ繧ヲ繧ァ繧「繧ュ繝シ繝懊シ繝峨ッ陦ィ遉コ縺吶k縺ィ蜷後§謇矩繧 + 蜀榊コヲ陦後≧莠九〒陦ィ遉コ縺輔l縺ェ縺上↑繧翫∪縺吶 -6. ・ヌ・」・ケ・ッ・、・癸シ・ク +6. 繝繧」繧ケ繧ッ繧、繝。繝シ繧ク - Xnp2 、ヌ、マ。「トセタワ FDD 、ォ、鬣ヌ。シ・ソ、ホニノ、゚ス、ュ、マケヤ、ハ、、コ、ヒ・ヌ・」・ケ・ッ・、・癸シ・ク、隍 - ・ヌ。シ・ソ、ホニノ、゚ス、ュ、ケヤ、、、゙、ケ。」、゙、ソ。「・マ。シ・ノ・ヌ・」・ケ・ッ、筵ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ、ネ - ニアヘヘ、ヒ・ヌ・」・ケ・ッ・、・癸シ・ク、隍・ヌ。シ・ソ、ニノ、゚ス、ュ、ケヤ、、、゙、ケ。」 + Xnp2 縺ァ縺ッ縲∫峩謗・ FDD 縺九i繝繝シ繧ソ縺ョ隱ュ縺ソ譖ク縺阪ッ陦後↑繧上★縺ォ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧医j + 繝繝シ繧ソ縺ョ隱ュ縺ソ譖ク縺阪r陦後>縺セ縺吶ゅ∪縺溘√ワ繝シ繝峨ョ繧」繧ケ繧ッ繧ゅヵ繝ュ繝繝斐シ繝繧」繧ケ繧ッ縺ィ + 蜷梧ァ倥↓繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧医j繝繝シ繧ソ繧定ェュ縺ソ譖ク縺阪r陦後>縺セ縺吶 - 6.1. ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・、・癸シ・ク + 6.1. 繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク - Xnp2 、ヌ、マ・ル・ソキチシー、ェ、隍モ D88 キチシー、ホ・ユ・ゥ。シ・゙・テ・ネ、ャヘヘム、ヌ、ュ、゙、ケ。」 + Xnp2 縺ァ縺ッ繝吶ち蠖「蠑上♀繧医ウ D88 蠖「蠑上ョ繝輔か繝シ繝槭ャ繝医′蛻ゥ逕ィ縺ァ縺阪∪縺吶 - 6.1.1. ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・、・癸シ・ク、ホサネヘムハヒ。 + 6.1.1. 繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク縺ョ菴ソ逕ィ譁ケ豕 - ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・、・癸シ・ク、サネヘム、ケ、、ヒ、マ。「・皈ヒ・蝪シ、ォ、 - [FDD -> Drive[12] -> Open...] 、チェツ、ケ、、ネノスシィ、オ、、・ユ・。・、・チェツ - ・タ・、・「・・ー、ヌサネヘム、ケ、・ヌ・」・ケ・ッ・、・癸シ・ク、チェツ、キ、ニ、ッ、タ、オ、、。」 + 繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧剃スソ逕ィ縺吶k縺ォ縺ッ縲√Γ繝九Η繝シ縺九i + [FDD -> Drive[12] -> Open...] 繧帝∈謚槭☆繧九→陦ィ遉コ縺輔l繧九ヵ繧。繧、繝ォ驕ク謚 + 繝繧、繧「繝ュ繧ー縺ァ菴ソ逕ィ縺吶k繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧帝∈謚槭@縺ヲ縺上□縺輔>縲 - 6.1.2. ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ、ォ、鬣、・癸シ・クコタョ + 6.1.2. 繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ縺九i繧、繝。繝シ繧ク菴懈 - (テ) ・、・癸シ・ク、コタョ、ケ、コン、ヒ、マ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ、ス、ュケ、゚カリサ゚、ヒ - 、キ、ニ、ッ、タ、オ、、。」 + (豕ィ) 繧、繝。繝シ繧ク繧剃ス懈舌☆繧矩圀縺ォ縺ッ繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ繧呈嶌縺崎セシ縺ソ遖∵ュ「縺ォ + 縺励※縺上□縺輔>縲 - UNIX セ螟ヌ、マ dd 、サネヘム、キ、ニ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ、ォ、鬣ル・ソキチシー、ホ・ヌ・」・ケ・ッ - ・、・癸シ・ク、コタョ、ケ、サ、ャイトヌス、ヌ、ケ。」、ソ、タ、キ 1.25MB 、ホ・ヌ・」・ケ・ッ、ーキ、ヲ、ヒ、マ - ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・ノ・鬣、・ヨ、ネ OS 、ャ 1.25MB ・ユ・ゥ。シ・゙・テ・ネ、ヒツミア、キ、ニ - 、、、サ、ャノャヘラ、ヌ、ケ。」 + UNIX 荳翫〒縺ッ dd 繧剃スソ逕ィ縺励※繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ縺九i繝吶ち蠖「蠑上ョ繝繧」繧ケ繧ッ + 繧、繝。繝シ繧ク繧剃ス懈舌☆繧倶コ九′蜿ッ閭ス縺ァ縺吶ゅ◆縺縺 1.25MB 縺ョ繝繧」繧ケ繧ッ繧呈桶縺縺ォ縺ッ + 繝輔Ο繝繝斐シ繝繧」繧ケ繧ッ繝峨Λ繧、繝悶→ OS 縺 1.25MB 繝輔か繝シ繝槭ャ繝医↓蟇セ蠢懊@縺ヲ + 縺繧倶コ九′蠢隕√〒縺吶 - ーハイシ、ホヘヘ、ハ・ウ・゙・・ノ、ヌ・ユ・・テ・ヤ。シ・ヌ・ミ・、・ケ、ォ、鬣ユ・。・、・、ヒス、ュスミ、ケサ、ヌ - ・ヌ・」・ケ・ッ・、・癸シ・ク、ャコタョ、ヌ、ュ、゙、ケ。」 - (・ユ・・テ・ヤ。シ・ヌ・ミ・、・ケ、ホ・ム・ケ、マウニ OS 、ヌー网ヲ、ホ、ヌ。「サネヘム、キ、ニ、、、 OS 、ホ - ・ヌ・ミ・、・ケ・ム・ケ、ヒテヨ、ュエケ、ィ、ニ、ッ、タ、オ、、。」) + 莉・荳九ョ讒倥↑繧ウ繝槭Φ繝峨〒繝輔Ο繝繝斐シ繝繝舌う繧ケ縺九i繝輔ぃ繧、繝ォ縺ォ譖ク縺榊コ縺吩コ九〒 + 繝繧」繧ケ繧ッ繧、繝。繝シ繧ク縺御ス懈舌〒縺阪∪縺吶 + (繝輔Ο繝繝斐シ繝繝舌う繧ケ縺ョ繝代せ縺ッ蜷 OS 縺ァ驕輔≧縺ョ縺ァ縲∽スソ逕ィ縺励※縺繧 OS 縺ョ + 繝繝舌う繧ケ繝代せ縺ォ鄂ョ縺肴鋤縺医※縺上□縺輔>縲) dd if=/dev/rfd0d of=diskimg.xdf - MS-DOS 、 Windows 、ヌ、ホ・ヌ・」・ケ・ッ・、・癸シ・ク、ホコタョハヒ。、ヒ、ト、、、ニ、マ。「 - ーハイシ、ホセマ、ヌシィ、オ、、ニ、、、・リ・・ラ、サイセネ、キ、ニ、ッ、タ、オ、、。」 + MS-DOS 繧 Windows 縺ァ縺ョ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク縺ョ菴懈先婿豕輔↓縺、縺縺ヲ縺ッ縲 + 莉・荳九ョ遶縺ァ遉コ縺輔l縺ヲ縺繧九倥Ν繝励r蜿らァ縺励※縺上□縺輔>縲 - 6.1.3. ソキオャ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・、・癸シ・クコタョ + 6.1.3. 譁ー隕上ヵ繝ュ繝繝斐シ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク菴懈 - Xnp2 、ホオ。ヌス、サネヘム、ケ、、ネ D88 キチシー、ホ・ヌ・」・ケ・ッ・、・癸シ・ク、コタョ、ヌ、ュ、゙、ケ。」 + Xnp2 縺ョ讖溯ス繧剃スソ逕ィ縺吶k縺ィ D88 蠖「蠑上ョ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧剃ス懈舌〒縺阪∪縺吶 - 1) [Emulate -> New Disk...] 、チェツ、ケ、、ネ。「・ユ・。・、・チェツ・タ・、・「・・ー、ャノスシィ - 、オ、、゙、ケ。」 + 1) [Emulate -> New Disk...] 繧帝∈謚槭☆繧九→縲√ヵ繧。繧、繝ォ驕ク謚槭ム繧、繧「繝ュ繧ー縺瑚。ィ遉コ + 縺輔l縺セ縺吶 - 2) ・ヌ・」・ケ・ッ・、・癸シ・ク、コタョ、ケ、・ヌ・」・・ッ・ネ・熙ネ・ヌ・」・ケ・ッ・、・癸シ・ク・ユ・。・、・フセ、 - タ゚ト熙キ。「。ヨOK。ラ・ワ・ソ・、イ。、キ、゙、ケ。」 + 2) 繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧剃ス懈舌☆繧九ョ繧」繝ャ繧ッ繝医Μ縺ィ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繝輔ぃ繧、繝ォ蜷阪r + 險ュ螳壹@縲√薫K縲阪懊ち繝ウ繧呈款縺励∪縺吶 - 3) ソキオャ・ユ・・テ・ヤ。シ・ヌ・」・ケ・ッ・、・癸シ・ク・タ・、・「・・ー、ャノスシィ、オ、、、ホ、ヌ。「コタョ、ケ、 - ・ヌ・」・ケ・ッ・、・癸シ・ク、ホシハフ、ネ・鬣ル・、タ゚ト熙キ、゙、ケ。」 + 3) 譁ー隕上ヵ繝ュ繝繝斐シ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繝繧、繧「繝ュ繧ー縺瑚。ィ遉コ縺輔l繧九ョ縺ァ縲∽ス懈舌☆繧 + 繝繧」繧ケ繧ッ繧、繝。繝シ繧ク縺ョ遞ョ蛻・縺ィ繝ゥ繝吶Ν繧定ィュ螳壹@縺セ縺吶 - 6.2. ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・ク + 6.2. 繝上シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク - Xnp2 、ヌ、マ THD キチシー(T98)。「NHD キチシー(T98-Next)。「HDI キチシー(Anex86) 、ホ - SASI ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・ク、ャヘヘム、ヌ、ュ、゙、ケ。」 + Xnp2 縺ァ縺ッ THD 蠖「蠑(T98)縲¨HD 蠖「蠑(T98-Next)縲?DI 蠖「蠑(Anex86) 縺ョ + SASI 繝上シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク縺悟茜逕ィ縺ァ縺阪∪縺吶 - 6.2.1. ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・ク、ホサネヘムハヒ。 + 6.2.1. 繝上シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク縺ョ菴ソ逕ィ譁ケ豕 - ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・ク、サネヘム、ケ、、ヒ、マ。「・皈ヒ・蝪シ、ォ、 - [HardDisk -> SASI[12] -> Open...] 、チェツ、ケ、、ネノスシィ、オ、、・ユ・。・、・チェツ - ・タ・、・「・・ー、ヌサネヘム、ケ、・ヌ・」・ケ・ッ・、・癸シ・ク、チェツ、キ、ニ、ッ、タ、オ、、。」 - チェツ、キ、ソ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・クサネヘム、ケ、、ヒ、マ [Emulate -> Reset] 、シツケヤ - 、キ、ニ、ッ、タ、オ、、。」 + 繝上シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク繧剃スソ逕ィ縺吶k縺ォ縺ッ縲√Γ繝九Η繝シ縺九i + [HardDisk -> SASI[12] -> Open...] 繧帝∈謚槭☆繧九→陦ィ遉コ縺輔l繧九ヵ繧。繧、繝ォ驕ク謚 + 繝繧、繧「繝ュ繧ー縺ァ菴ソ逕ィ縺吶k繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧帝∈謚槭@縺ヲ縺上□縺輔>縲 + 驕ク謚槭@縺溘ワ繝シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク菴ソ逕ィ縺吶k縺ォ縺ッ [Emulate -> Reset] 繧貞ョ溯。 + 縺励※縺上□縺輔>縲 - 6.2.2. ソキオャ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・クコタョ + 6.2.2. 譁ー隕上ワ繝シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク菴懈 - Xnp2 、ホオ。ヌス、サネヘム、ケ、、ネ THD キチシー、ホ・ヌ・」・ケ・ッ・、・癸シ・ク、コタョ、ヌ、ュ、゙、ケ。」 + Xnp2 縺ョ讖溯ス繧剃スソ逕ィ縺吶k縺ィ THD 蠖「蠑上ョ繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繧剃ス懈舌〒縺阪∪縺吶 - 1) [Emulate -> New Disk...] 、チェツ、ケ、、ネ。「・ユ・。・、・チェツ・タ・、・「・・ー、ャノスシィ - 、オ、、゙、ケ。」 + 1) [Emulate -> New Disk...] 繧帝∈謚槭☆繧九→縲√ヵ繧。繧、繝ォ驕ク謚槭ム繧、繧「繝ュ繧ー縺瑚。ィ遉コ + 縺輔l縺セ縺吶 - 2) ・ユ・。・、・チェツ・タ・、・「・・ー、ホ [ツセ、ホ・ユ・ゥ・・タ] 、・ッ・・テ・ッ、キ。「・タ・、・「・・ー、 - ウネト・、キ、゙、ケ。」 + 2) 繝輔ぃ繧、繝ォ驕ク謚槭ム繧、繧「繝ュ繧ー縺ョ [莉悶ョ繝輔か繝ォ繝] 繧偵け繝ェ繝繧ッ縺励√ム繧、繧「繝ュ繧ー繧 + 諡。蠑オ縺励∪縺吶 - 3) コタョ、ケ、・ヌ・」・ケ・ッキチシー。「・ヌ・」・ケ・ッ・、・癸シ・ク、コタョ、ケ、・ヌ・」・・ッ・ネ・熙ネ - ・ヌ・」・ケ・ッ・、・癸シ・ク・ユ・。・、・フセ、タ゚ト熙キ。「。ヨOK。ラ・ワ・ソ・、イ。、キ、゙、ケ。」 + 3) 菴懈舌☆繧九ョ繧」繧ケ繧ッ蠖「蠑上√ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク繧剃ス懈舌☆繧九ョ繧」繝ャ繧ッ繝医Μ縺ィ + 繝繧」繧ケ繧ッ繧、繝。繝シ繧ク繝輔ぃ繧、繝ォ蜷阪r險ュ螳壹@縲√薫K縲阪懊ち繝ウ繧呈款縺励∪縺吶 - 4) ソキオャ・マ。シ・ノ・ヌ・」・ケ・ッ・、・癸シ・ク・タ・、・「・・ー、ャノスシィ、オ、、、ホ、ヌ。「コタョ、ケ、 - ・ヌ・」・ケ・ッ・、・癸シ・ク、ホヘニホフ、タ゚ト熙キ、゙、ケ。」 + 4) 譁ー隕上ワ繝シ繝峨ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク繝繧、繧「繝ュ繧ー縺瑚。ィ遉コ縺輔l繧九ョ縺ァ縲∽ス懈舌☆繧 + 繝繧」繧ケ繧ッ繧、繝。繝シ繧ク縺ョ螳ケ驥上r險ュ螳壹@縺セ縺吶 -7. ・ウ・゙・・ノ・鬣、・・ェ・ラ・キ・逾 +7. 繧ウ繝槭Φ繝峨Λ繧、繝ウ繧ェ繝励す繝ァ繝ウ --config-file - オッニーサ、ヒニノ、゚ケ、狢゚ト・ユ・。・、・、サリト熙キ、゙、ケ。」、゙、ソ。「、ウ、ホ・ェ・ラ・キ・逾、ャサリト - 、オ、、、ネ・ロ。シ・爭ヌ・」・・ッ・ネ・熙ネ、キ、ニ。「タ゚ト・ユ・。・、・、ホツクコ゚、ケ、・ヌ・」・・ッ・ネ・ - 、サネヘム、キ、゙、ケ。」ネサリトサ、ヒ、マ $(HOME)/.np2/np2rc 、サネヘム、キ、゙、ケ。」 + 襍キ蜍墓凾縺ォ隱ュ縺ソ霎シ繧險ュ螳壹ヵ繧。繧、繝ォ繧呈欠螳壹@縺セ縺吶ゅ∪縺溘√%縺ョ繧ェ繝励す繝ァ繝ウ縺梧欠螳 + 縺輔l繧九→繝帙シ繝繝繧」繝ャ繧ッ繝医Μ縺ィ縺励※縲∬ィュ螳壹ヵ繧。繧、繝ォ縺ョ蟄伜惠縺吶k繝繧」繝ャ繧ッ繝医Μ + 繧剃スソ逕ィ縺励∪縺吶る撼謖螳壽凾縺ォ縺ッ $(HOME)/.np2/np2rc 繧剃スソ逕ィ縺励∪縺吶 --timidity-config - Xnp2 、ヒニ篦「、オ、、ニ、、、 TiMidity ク゚エケ、ホ・ス・ユ・ネ・ヲ・ァ・「 MIDI イサクサ、ヌサネヘム、ケ、 - イサクサタ゚ト・ユ・。・、・、サリト熙キ、゙、ケ。」ネサリトサ、マ $(HOME)/.np2/timidity.cfg 、 - サネヘム、キ、゙、ケ。」 + Xnp2 縺ォ蜀阡オ縺輔l縺ヲ縺繧 TiMidity 莠呈鋤縺ョ繧ス繝輔ヨ繧ヲ繧ァ繧「 MIDI 髻ウ貅舌〒菴ソ逕ィ縺吶k + 髻ウ貅占ィュ螳壹ヵ繧。繧、繝ォ繧呈欠螳壹@縺セ縺吶る撼謖螳壽凾縺ッ $(HOME)/.np2/timidity.cfg 繧 + 菴ソ逕ィ縺励∪縺吶 + +8. 蛯呵 -8. ネケヘ + 繝サman page 縺後う繝ウ繧ケ繝医シ繝ォ縺輔l縺ヲ縺繧後ー man xnp2 縺ァ繝槭ル繝・繧「繝ォ縺瑚。ィ遉コ縺輔l縺セ縺吶 - 。ヲ、ウ、ホ・゙・ヒ・螂「・、ヒス、ォ、、ニ、、、ーハセ螟ホセハ、ャペ、キ、、セケ遉マーハイシ、ホ URL 、ヒ、「、 - ・リ・・ラ、サイセネ、ケ、、ネ。「クォ、ト、ォ、、ォ、筅キ、、゙、サ、。」 + 繝サ縺薙ョ繝槭ル繝・繧「繝ォ繧 man page 縺ォ譖ク縺九l縺ヲ縺繧倶サ・荳翫ョ諠蝣ア縺梧ャイ縺励>蝣エ蜷医ッ縲 + 莉・荳九ョ URL 縺ォ縺ゅk繝倥Ν繝励r蜿らァ縺吶k縺ィ隕九▽縺九k縺九b縺励l縺セ縺帙s縲 Xnp2 help URL: http://www.asahi-net.or.jp/~aw9k-nnk/np2/html/help/ja/ -9. フ萃ナタ +9. 蝠城。檎せ - 。ヲイチナルハムケケ、、ケ、・ユ・・ケ・ッ・遙シ・オ。ヌス、サネヘム、キ、ニ、、、コン、ヒ。「クオ、ホイ靂フイチナル、ャ - 640x480ーハウー、ホセケ遉ヒイセチロイ靂フ、ャ・ケ・ッ・。シ・、キ、ニ、キ、゙、ヲ。」 + 繝サ隗」蜒丞コヲ螟画峩繧偵☆繧九ヵ繝ォ繧ケ繧ッ繝ェ繝シ繝ウ讖溯ス繧剃スソ逕ィ縺励※縺繧矩圀縺ォ縲∝縺ョ逕サ髱「隗」蜒丞コヲ縺 + 640x480莉・螟悶ョ蝣エ蜷医↓莉ョ諠ウ逕サ髱「縺後せ繧ッ繝ュ繝シ繝ォ縺励※縺励∪縺縲 -10. フネタユサケ爍ヲテコク「 +10. 蜈崎イャ莠矩繝サ闡嶺ス懈ィゥ - 10.1. フネタユサケ + 10.1. 蜈崎イャ莠矩 - Xnp2 、マフオハンセレ、ヌ、ケ。」Xnp2 、ホサネヘム、ヒ、隍テ、ニニタ、鬢、ソ、、、ォ、ハ、ヘアラ。ヲツサウイ、ヒツミ、キ、ニ、 - コシヤ、マタユヌ、、ノ鬢、、゙、サ、。」 + Xnp2 縺ッ辟。菫晁ィシ縺ァ縺吶9np2 縺ョ菴ソ逕ィ縺ォ繧医▲縺ヲ蠕励i繧後◆縺縺九↑繧句茜逶翫サ謳榊ョウ縺ォ蟇セ縺励※繧 + 菴懆縺ッ雋ャ莉サ繧定イ縺縺セ縺帙s縲 - 10.2. テコク「 + 10.2. 闡嶺ス懈ィゥ - ヒワ・ス・ユ・ネ・ヲ・ァ・「、ホテコク「。「、ス、ホツセ、ホテホナェコ篏コク「、マ。「ニヒワヒ。、ヒス犒、ケ、ール。「 - 、ヘ、ウ、オ、ウォネッ、チ。シ、爨ャスヘュ、キ、ニ、、、゙、ケ。」 + 譛ャ繧ス繝輔ヨ繧ヲ繧ァ繧「縺ョ闡嶺ス懈ィゥ縲√◎縺ョ莉悶ョ遏・逧雋。逕」讓ゥ縺ッ縲∵律譛ャ豕輔↓貅匁侠縺吶k轤コ縲 + 縺ュ縺薙&繧馴幕逋コ縺。繝シ繧縺梧園譛峨@縺ヲ縺縺セ縺吶 - 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネ、ホ・ス。シ・ケ・ウ。シ・ノ、マス、タオ BSD ・鬣、・サ・・ケ、ヌ、ケ。」Xnp2 クヌヘュノハャ、ホ - ・ス。シ・ケ・ウ。シ・ノ、篆、タオ BSD ・鬣、・サ・・ケ、ネ、キ、゙、ケ。」コニヌロノロサ、ホテコク「ノスシィ、ホオチフウ、マ - 、「、熙゙、サ、。」 + 縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝医ョ繧ス繝シ繧ケ繧ウ繝シ繝峨ッ菫ョ豁」 BSD 繝ゥ繧、繧サ繝ウ繧ケ縺ァ縺吶9np2 蝗コ譛蛾Κ蛻縺ョ + 繧ス繝シ繧ケ繧ウ繝シ繝峨b菫ョ豁」 BSD 繝ゥ繧、繧サ繝ウ繧ケ縺ィ縺励∪縺吶ょ埼榊ク譎ゅョ闡嶺ス懈ィゥ陦ィ遉コ縺ョ鄒ゥ蜍吶ッ + 縺ゅj縺セ縺帙s縲 -11. マ「ヘタ +11. 騾」邨。蜈 - ヒワ・ス・ユ・ネ・ヲ・ァ・「、ホヌロノロクオ、マ http://www.asahi-net.or.jp/~aw9k-nnk/np2/ 、ヌ、ケ。」 - 、゙、ソ anoncvs 、サネヘム、キ、ニコヌソキ、ホ・ス。シ・ケ、シ霹タ、ヌ、ュ、゙、ケ。」 + 譛ャ繧ス繝輔ヨ繧ヲ繧ァ繧「縺ョ驟榊ク蜈縺ッ http://www.asahi-net.or.jp/~aw9k-nnk/np2/ 縺ァ縺吶 + 縺セ縺 anoncvs 繧剃スソ逕ィ縺励※譛譁ー縺ョ繧ス繝シ繧ケ繧貞叙蠕励〒縺阪∪縺吶 cvs -d :pserver:anonymous@retropc.net:/cvs get np2 - ヒワ・ス・ユ・ネ・ヲ・ァ・「、ヒエリ、ケ、フ荀、ケ遉、サ、マ - NONAKA Kimihiro (ヌクテ貂ヌ) / aw9k-nnk@asahi-net.or.jp - 、゙、ヌナナサメ・癸シ・、ヒ、ニ、ェエ熙、、キ、゙、ケ。」 - - --- - $Id: README.ja,v 1.14 2008/01/27 11:42:44 monaka Exp $ + 譛ャ繧ス繝輔ヨ繧ヲ繧ァ繧「縺ォ髢「縺吶k蝠上>蜷医o縺帙ッ + NONAKA Kimihiro (蝓應クュ蜈ャ蜊) / nonakap@gmail.com + 縺セ縺ァ髮サ蟄舌Γ繝シ繝ォ縺ォ縺ヲ縺企。倥>縺励∪縺吶 diff --git a/x11/autogen.sh b/x11/autogen.sh new file mode 100755 index 00000000..2c9b18a1 --- /dev/null +++ b/x11/autogen.sh @@ -0,0 +1,10 @@ +#!/bin/sh +aclocal +autoheader +automake -aci --foreign +autoconf +rm -f config.h.in~ +./configure "$@" +rm -f ../np2tool/np2tool.d88 +( cd ../np2tool && unzip -j -o np2tool.zip ) +make maintainer-clean > /dev/null 2>&1 diff --git a/x11/cmmidi.c b/x11/cmmidi.c index 059258a8..44771365 100644 --- a/x11/cmmidi.c +++ b/x11/cmmidi.c @@ -6,9 +6,9 @@ #include "mimpidef.h" #include "sound.h" -#if defined(VERMOUTH_LIB) #include "vermouth.h" +#if defined(VERMOUTH_LIB) extern MIDIMOD vermouth_module; const char cmmidi_vermouth[] = "VERMOUTH"; @@ -68,9 +68,7 @@ enum { CMMIDI_MIDIOUT = 0x01, CMMIDI_MIDIIN = 0x02, CMMIDI_MIDIINSTART = 0x04, -#if defined(VERMOUTH_LIB) CMMIDI_VERMOUTH = 0x08, -#endif MIDICTRL_READY = 0, MIDICTRL_2BYTES, @@ -97,9 +95,7 @@ struct _cmmidi { int hmidiin; int hmidiout; struct timeval hmidiout_nextstart; -#if defined(VERMOUTH_LIB) MIDIHDL vermouth; -#endif UINT midictrl; UINT midisyscnt; @@ -256,9 +252,7 @@ static void midiout_none(CMMIDI midi, UINT32 msg, UINT cnt) { - UNUSED(midi); - UNUSED(msg); - UNUSED(cnt); + /* Nothing to do */ } static void @@ -279,8 +273,6 @@ static void midiout_vermouth(CMMIDI midi, UINT32 msg, UINT cnt) { - UNUSED(cnt); - sound_sync(); midiout_shortmsg(midi->vermouth, msg); } @@ -480,7 +472,7 @@ midiwrite(COMMNG self, BYTE data) } break; } - } else { /* Key-on、ホ、゚、ハオ、、ャ、キ、ソ、、タ、ア、ノヒコ、、ソ。ト */ + } else { /* Key-on縺ョ縺ソ縺ェ豌励′縺励◆繧薙□縺代←蠢倥l縺溪ヲ */ /* running status */ midi->buffer[0] = midi->midilast; midi->mpos = 1; @@ -562,7 +554,7 @@ midiwrite(COMMNG self, BYTE data) #endif midi->midictrl = MIDICTRL_READY; return midi->mpos; - } else if (midi->mpos >= MIDI_BUFFER) { // 、ェ。シ、ミ。シ、ユ、。シ + } else if (midi->mpos >= MIDI_BUFFER) { // 縺翫シ縺ー繝シ縺オ繧阪シ midi->midictrl = MIDICTRL_READY; } break; @@ -570,7 +562,7 @@ midiwrite(COMMNG self, BYTE data) case MIDICTRL_TIMECODE: if (midi->mpos >= 2) { if ((data == 0x7e) || (data == 0x7f)) { - // exclusive、ネニア、ク、ヌ、、、、ネヲ。ト + // exclusive縺ィ蜷後§縺ァ縺縺遲遺ヲ midi->midictrl = MIDICTRL_EXCLUSIVE; } else { midi->midictrl = MIDICTRL_READY; @@ -593,8 +585,6 @@ static BYTE midigetstat(COMMNG self) { - UNUSED(self); - return 0x00; } diff --git a/x11/cmmidi.h b/x11/cmmidi.h index 24065e3e..370730dc 100644 --- a/x11/cmmidi.h +++ b/x11/cmmidi.h @@ -3,9 +3,7 @@ // ---- com manager midi for unix -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS extern COMMNG cm_mpu98; @@ -36,8 +34,6 @@ extern const char *cmmidi_mdlname[]; void cmmidi_initailize(void); COMMNG cmmidi_create(const char *midiout, const char *midiin, const char *module); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_CMMIDI_H__ */ diff --git a/x11/cmpara.h b/x11/cmpara.h index 661c380c..86f86263 100644 --- a/x11/cmpara.h +++ b/x11/cmpara.h @@ -1,16 +1,10 @@ -/* $Id: cmpara.h,v 1.1 2004/03/26 13:58:51 monaka Exp $ */ - #ifndef NP2_X11_CMPARA_H__ #define NP2_X11_CMPARA_H__ // ---- com manager parallel for unix -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_CMPARA_H__ */ diff --git a/x11/cmserial.c b/x11/cmserial.c index 34035338..acd7d024 100644 --- a/x11/cmserial.c +++ b/x11/cmserial.c @@ -1,5 +1,3 @@ -/* $Id: cmserial.c,v 1.4 2007/01/21 00:03:02 monaka Exp $ */ - /* * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. @@ -94,6 +92,10 @@ serialgetstat(COMMNG self) int rv; rv = ioctl(serial->hdl, TIOCMGET, &status); + if (rv < 0) { + VERBOSE(("serialgetstat: ioctl: %s", strerror(errno))); + return 0x20; + } if (!(status & TIOCM_DSR)) { VERBOSE(("serialgetstat: DSR is disable")); return 0x20; @@ -134,35 +136,35 @@ print_status(const struct termios *tio) speed_t ispeed = cfgetispeed(tio); speed_t ospeed = cfgetospeed(tio); - fprintf(stderr, " ispeed %d", ispeed); - fprintf(stderr, " ospeed %d", ospeed); - fprintf(stderr, "%s", "\r\n"); - fprintf(stderr, " %cIGNBRK", (tio->c_iflag & IGNBRK) ? '+' : '-'); - fprintf(stderr, " %cBRKINT", (tio->c_iflag & BRKINT) ? '+' : '-'); - fprintf(stderr, " %cIGNPAR", (tio->c_iflag & IGNPAR) ? '+' : '-'); - fprintf(stderr, " %cPARMRK", (tio->c_iflag & PARMRK) ? '+' : '-'); - fprintf(stderr, " %cINPCK", (tio->c_iflag & INPCK) ? '+' : '-'); - fprintf(stderr, " %cISTRIP", (tio->c_iflag & ISTRIP) ? '+' : '-'); - fprintf(stderr, " %cINLCR", (tio->c_iflag & INLCR) ? '+' : '-'); - fprintf(stderr, " %cIGNCR", (tio->c_iflag & IGNCR) ? '+' : '-'); - fprintf(stderr, " %cICRNL", (tio->c_iflag & ICRNL) ? '+' : '-'); - fprintf(stderr, " %cIXON", (tio->c_iflag & IXON) ? '+' : '-'); - fprintf(stderr, " %cIXOFF", (tio->c_iflag & IXOFF) ? '+' : '-'); - fprintf(stderr, " %cIXANY", (tio->c_iflag & IXANY) ? '+' : '-'); - fprintf(stderr, " %cIMAXBEL", (tio->c_iflag & IMAXBEL) ? '+' : '-'); - fprintf(stderr, "%s", "\r\n"); - fprintf(stderr, " %cOPOST", (tio->c_oflag & OPOST) ? '+' : '-'); - fprintf(stderr, " %cONLCR", (tio->c_oflag & ONLCR) ? '+' : '-'); + g_printerr(" ispeed %d", ispeed); + g_printerr(" ospeed %d", ospeed); + g_printerr("%s", "\r\n"); + g_printerr(" %cIGNBRK", (tio->c_iflag & IGNBRK) ? '+' : '-'); + g_printerr(" %cBRKINT", (tio->c_iflag & BRKINT) ? '+' : '-'); + g_printerr(" %cIGNPAR", (tio->c_iflag & IGNPAR) ? '+' : '-'); + g_printerr(" %cPARMRK", (tio->c_iflag & PARMRK) ? '+' : '-'); + g_printerr(" %cINPCK", (tio->c_iflag & INPCK) ? '+' : '-'); + g_printerr(" %cISTRIP", (tio->c_iflag & ISTRIP) ? '+' : '-'); + g_printerr(" %cINLCR", (tio->c_iflag & INLCR) ? '+' : '-'); + g_printerr(" %cIGNCR", (tio->c_iflag & IGNCR) ? '+' : '-'); + g_printerr(" %cICRNL", (tio->c_iflag & ICRNL) ? '+' : '-'); + g_printerr(" %cIXON", (tio->c_iflag & IXON) ? '+' : '-'); + g_printerr(" %cIXOFF", (tio->c_iflag & IXOFF) ? '+' : '-'); + g_printerr(" %cIXANY", (tio->c_iflag & IXANY) ? '+' : '-'); + g_printerr(" %cIMAXBEL", (tio->c_iflag & IMAXBEL) ? '+' : '-'); + g_printerr("%s", "\r\n"); + g_printerr(" %cOPOST", (tio->c_oflag & OPOST) ? '+' : '-'); + g_printerr(" %cONLCR", (tio->c_oflag & ONLCR) ? '+' : '-'); #ifdef OXTABS - fprintf(stderr, " %cOXTABS", (tio->c_oflag & OXTABS) ? '+' : '-'); + g_printerr(" %cOXTABS", (tio->c_oflag & OXTABS) ? '+' : '-'); #endif #ifdef TABDLY - fprintf(stderr, " %cTABDLY", (tio->c_oflag & TABDLY) == XTABS ? '+' : '-'); + g_printerr(" %cTABDLY", (tio->c_oflag & TABDLY) == XTABS ? '+' : '-'); #endif #ifdef ONOEOT - fprintf(stderr, " %cONOEOT", (tio->c_oflag & ONOEOT) ? '+' : '-'); + g_printerr(" %cONOEOT", (tio->c_oflag & ONOEOT) ? '+' : '-'); #endif - fprintf(stderr, "%s", "\r\n"); + g_printerr("%s", "\r\n"); cs = tio->c_cflag & CSIZE; switch (cs) { @@ -186,47 +188,47 @@ print_status(const struct termios *tio) csstr = "?"; break; } - fprintf(stderr, " cs%s", csstr); - fprintf(stderr, " %cCSTOPB", (tio->c_cflag & CSTOPB) ? '+' : '-'); - fprintf(stderr, " %cCREAD", (tio->c_cflag & CREAD) ? '+' : '-'); - fprintf(stderr, " %cPARENB", (tio->c_cflag & PARENB) ? '+' : '-'); - fprintf(stderr, " %cPARODD", (tio->c_cflag & PARODD) ? '+' : '-'); - fprintf(stderr, " %cHUPCL", (tio->c_cflag & HUPCL) ? '+' : '-'); - fprintf(stderr, " %cCLOCAL", (tio->c_cflag & CLOCAL) ? '+' : '-'); + g_printerr(" cs%s", csstr); + g_printerr(" %cCSTOPB", (tio->c_cflag & CSTOPB) ? '+' : '-'); + g_printerr(" %cCREAD", (tio->c_cflag & CREAD) ? '+' : '-'); + g_printerr(" %cPARENB", (tio->c_cflag & PARENB) ? '+' : '-'); + g_printerr(" %cPARODD", (tio->c_cflag & PARODD) ? '+' : '-'); + g_printerr(" %cHUPCL", (tio->c_cflag & HUPCL) ? '+' : '-'); + g_printerr(" %cCLOCAL", (tio->c_cflag & CLOCAL) ? '+' : '-'); #ifdef CCTS_OFLOW - fprintf(stderr, " %cCCTS_OFLOW", (tio->c_cflag & CCTS_OFLOW) ? '+' : '-'); + g_printerr(" %cCCTS_OFLOW", (tio->c_cflag & CCTS_OFLOW) ? '+' : '-'); #endif - fprintf(stderr, " %cCRTSCTS", (tio->c_cflag & CRTSCTS) ? '+' : '-'); + g_printerr(" %cCRTSCTS", (tio->c_cflag & CRTSCTS) ? '+' : '-'); #ifdef CRTS_IFLOW - fprintf(stderr, " %cCRTS_IFLOW", (tio->c_cflag & CRTS_IFLOW) ? '+' : '-'); + g_printerr(" %cCRTS_IFLOW", (tio->c_cflag & CRTS_IFLOW) ? '+' : '-'); #endif #ifdef MDMBUF - fprintf(stderr, " %cMDMBUF", (tio->c_cflag & MDMBUF) ? '+' : '-'); + g_printerr(" %cMDMBUF", (tio->c_cflag & MDMBUF) ? '+' : '-'); #endif - fprintf(stderr, " %cECHOKE", (tio->c_lflag & ECHOKE) ? '+' : '-'); - fprintf(stderr, " %cECHOE", (tio->c_lflag & ECHOE) ? '+' : '-'); - fprintf(stderr, " %cECHO", (tio->c_lflag & ECHO) ? '+' : '-'); - fprintf(stderr, " %cECHONL", (tio->c_lflag & ECHONL) ? '+' : '-'); - fprintf(stderr, " %cECHOPRT", (tio->c_lflag & ECHOPRT) ? '+' : '-'); - fprintf(stderr, " %cECHOCTL", (tio->c_lflag & ECHOCTL) ? '+' : '-'); - fprintf(stderr, " %cISIG", (tio->c_lflag & ISIG) ? '+' : '-'); - fprintf(stderr, " %cICANON", (tio->c_lflag & ICANON) ? '+' : '-'); + g_printerr(" %cECHOKE", (tio->c_lflag & ECHOKE) ? '+' : '-'); + g_printerr(" %cECHOE", (tio->c_lflag & ECHOE) ? '+' : '-'); + g_printerr(" %cECHO", (tio->c_lflag & ECHO) ? '+' : '-'); + g_printerr(" %cECHONL", (tio->c_lflag & ECHONL) ? '+' : '-'); + g_printerr(" %cECHOPRT", (tio->c_lflag & ECHOPRT) ? '+' : '-'); + g_printerr(" %cECHOCTL", (tio->c_lflag & ECHOCTL) ? '+' : '-'); + g_printerr(" %cISIG", (tio->c_lflag & ISIG) ? '+' : '-'); + g_printerr(" %cICANON", (tio->c_lflag & ICANON) ? '+' : '-'); #ifdef ALTWERASE - fprintf(stderr, " %cALTWERASE", (tio->c_lflag & ALTWERASE) ? '+' : '-'); + g_printerr(" %cALTWERASE", (tio->c_lflag & ALTWERASE) ? '+' : '-'); #endif - fprintf(stderr, " %cIEXTEN", (tio->c_lflag & IEXTEN) ? '+' : '-'); - fprintf(stderr, "%s", "\r\n"); + g_printerr(" %cIEXTEN", (tio->c_lflag & IEXTEN) ? '+' : '-'); + g_printerr("%s", "\r\n"); #ifdef EXTPROC - fprintf(stderr, " %cEXTPROC", (tio->c_lflag & EXTPROC) ? '+' : '-'); + g_printerr(" %cEXTPROC", (tio->c_lflag & EXTPROC) ? '+' : '-'); #endif - fprintf(stderr, " %cTOSTOP", (tio->c_lflag & TOSTOP) ? '+' : '-'); - fprintf(stderr, " %cFLUSHO", (tio->c_lflag & FLUSHO) ? '+' : '-'); + g_printerr(" %cTOSTOP", (tio->c_lflag & TOSTOP) ? '+' : '-'); + g_printerr(" %cFLUSHO", (tio->c_lflag & FLUSHO) ? '+' : '-'); #ifdef NOKERNINFO - fprintf(stderr, " %cNOKERNINFO", (tio->c_lflag & NOKERNINFO) ? '+' : '-'); + g_printerr(" %cNOKERNINFO", (tio->c_lflag & NOKERNINFO) ? '+' : '-'); #endif - fprintf(stderr, " %cPENDIN", (tio->c_lflag & PENDIN) ? '+' : '-'); - fprintf(stderr, " %cNOFLSH", (tio->c_lflag & NOFLSH) ? '+' : '-'); - fprintf(stderr, "%s", "\r\n"); + g_printerr(" %cPENDIN", (tio->c_lflag & PENDIN) ? '+' : '-'); + g_printerr(" %cNOFLSH", (tio->c_lflag & NOFLSH) ? '+' : '-'); + g_printerr("%s", "\r\n"); } #endif diff --git a/x11/cmserial.h b/x11/cmserial.h index 0fc9dcb5..ebb82264 100644 --- a/x11/cmserial.h +++ b/x11/cmserial.h @@ -1,13 +1,9 @@ -/* $Id: cmserial.h,v 1.1 2004/03/26 13:58:51 monaka Exp $ */ - #ifndef NP2_X11_CMSERIAL_H__ #define NP2_X11_CMSERIAL_H__ // ---- com manager serial for unix -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS extern const UINT32 cmserial_speed[10]; @@ -19,8 +15,6 @@ COMMNG cmserial_create(UINT port, BYTE param, UINT32 speed); #define MAX_SERIAL_PORT_NUM 1 #endif -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_CMSERIAL_H__ */ diff --git a/x11/commng.c b/x11/commng.c index bd5df247..387313c9 100644 --- a/x11/commng.c +++ b/x11/commng.c @@ -11,9 +11,6 @@ static UINT ncread(COMMNG self, BYTE *data) { - UNUSED(self); - UNUSED(data); - return 0; } @@ -21,9 +18,6 @@ static UINT ncwrite(COMMNG self, BYTE data) { - UNUSED(self); - UNUSED(data); - return 0; } @@ -31,8 +25,6 @@ static BYTE ncgetstat(COMMNG self) { - UNUSED(self); - return 0xf0; } @@ -40,10 +32,6 @@ static long ncmsg(COMMNG self, UINT msg, long param) { - UNUSED(self); - UNUSED(msg); - UNUSED(param); - return 0; } @@ -51,10 +39,10 @@ static void ncrelease(COMMNG self) { - UNUSED(self); + /* Nothing to do */ } -static const _COMMNG com_nc = { +static _COMMNG com_nc = { COMCONNECT_OFF, ncread, ncwrite, ncgetstat, ncmsg, ncrelease }; diff --git a/x11/commng.h b/x11/commng.h index f9b3ed4e..15a57bcf 100644 --- a/x11/commng.h +++ b/x11/commng.h @@ -1,10 +1,10 @@ -/* $Id: commng.h,v 1.2 2004/03/25 15:10:33 monaka Exp $ */ - #ifndef NP2_X11_COMMNG_H__ #define NP2_X11_COMMNG_H__ // ---- com manager interface +G_BEGIN_DECLS + enum { COMCREATE_SERIAL = 0, COMCREATE_PC9861K1, @@ -48,17 +48,9 @@ typedef struct { } _COMFLAG, *COMFLAG; -#ifdef __cplusplus -extern "C" { -#endif - COMMNG commng_create(UINT device); void commng_destroy(COMMNG hdl); -#ifdef __cplusplus -} -#endif - // ---- com manager for unix @@ -86,6 +78,8 @@ enum { void commng_initialize(void); +G_END_DECLS + #include "cmmidi.h" #include "cmserial.h" #include "cmpara.h" diff --git a/x11/compiler.h b/x11/compiler.h index f5988808..42bff12f 100644 --- a/x11/compiler.h +++ b/x11/compiler.h @@ -1,7 +1,5 @@ -/* $Id: compiler.h,v 1.34 2007/01/23 15:48:20 monaka Exp $ */ - /*- - * Copyright (c) 2003, 2004 NONAKA Kimihiro + * Copyright (C) 2003, 2004 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -13,17 +11,16 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NP2_X11_COMPILER_H__ @@ -33,6 +30,25 @@ #include "config.h" #endif +#ifdef ENABLE_NLS +#include +#define _(s) gettext(s) +#ifdef gettext_noop +#define N_(s) gettext_noop(s) +#else +#define N_(s) (s) +#endif +#else /* !ENABLE_NLS */ +#define _(s) (s) +#define N_(s) (s) +#define textdomain(s) (s) +#define gettext(s) (s) +#define dgettext(d,s) (s) +#define dcgettext(d,s,t) (s) +#define bindtextdomain(d,dir) (d) +#define bind_textdomain_codeset(d,c) (c) +#endif /* ENABLE_NLS */ + #ifdef WORDS_BIGENDIAN #define BYTESEX_BIG #else /* !WORDS_BIGENDIAN */ @@ -51,6 +67,7 @@ #include #include +#include #include #include #include @@ -66,8 +83,6 @@ #define OSLANG_EUC #define OSLINEBREAK_LF -#if (USE_GTK2 > 0) - #include typedef gint32 SINT; @@ -91,36 +106,14 @@ typedef gboolean BOOL; #define PTR_TO_UINT32(p) ((UINT32)GPOINTER_TO_UINT(p)) #define UINT32_TO_PTR(v) GUINT_TO_POINTER((UINT32)(v)) -#else /* USE_GTK2 <= 0 */ - -typedef signed int SINT; -typedef unsigned int UINT; - -typedef signed char SINT8; -typedef signed short SINT16; -typedef signed int SINT32; -typedef signed long long SINT64; - -typedef unsigned char UINT8; -typedef unsigned short UINT16; -typedef unsigned int UINT32; -typedef unsigned long long UINT64; - -typedef unsigned char BYTE; -typedef char TCHAR; - -typedef int BOOL; - -#endif /* USE_GTK2 > 0 */ - -#ifndef TRUE -#define TRUE 1 -#endif - #ifndef FALSE #define FALSE 0 #endif +#ifndef TRUE +#define TRUE (!FALSE) +#endif + #ifndef MAX_PATH #define MAX_PATH MAXPATHLEN #endif @@ -146,25 +139,8 @@ typedef int BOOL; #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) #endif -#ifndef UNUSED -#define UNUSED(v) ((void)(v)) -#endif - -#define FASTCALL -#define SOUNDCALL -#define MEMCALL -#define CPUCALL - -#ifdef DEBUG -#define INLINE -#define __ASSERT(s) assert(s) -#else -#ifndef __ASSERT -#define __ASSERT(s) -#endif -#ifndef INLINE -#define INLINE inline -#endif +#ifndef NELEMENTS +#define NELEMENTS(a) ((int)(sizeof(a) / sizeof(a[0]))) #endif /* archtecture */ @@ -179,7 +155,6 @@ typedef int BOOL; #endif /* i386 */ #if defined(__GNUC__) -#define GCC_ATTR_PACKED __attribute__((packed)) #if defined(NP2_CPU_ARCH_IA32) #define GCC_CPU_ARCH_IA32 #endif @@ -188,28 +163,25 @@ typedef int BOOL; #endif #endif /* __GNUC__ */ -#ifndef NELEMENTS -#define NELEMENTS(a) ((int)(sizeof(a) / sizeof(a[0]))) -#endif - UINT32 gettick(void); #define GETTICK() gettick() #define GETRAND() random() #define SPRINTF sprintf #define STRLEN strlen -#define OEMCHAR char +#define OEMCHAR gchar #define OEMTEXT(s) s #define OEMNULLSTR OEMTEXT("") #define OEMSPRINTF sprintf #define OEMSTRLEN strlen #if defined(CPUCORE_IA32) -void toolkit_msgbox(const char *title, const char *msg); -#define msgbox(title, msg) toolkit_msgbox(title, msg); +#define msgbox(title, msg) toolkit_messagebox(title, msg); +#if !defined(DISABLE_PC9821) #define SUPPORT_PC9821 #define SUPPORT_CRT31KHZ +#endif #define SUPPORT_IDEIO #else #define SUPPORT_CRT15KHZ @@ -217,13 +189,13 @@ void toolkit_msgbox(const char *title, const char *msg); #if defined(NP2_CPU_ARCH_IA32) #undef MEMOPTIMIZE -#define LOADINTELDWORD(a) (*((UINT32 *)(a))) -#define LOADINTELWORD(a) (*((UINT16 *)(a))) +#define LOADINTELDWORD(a) (*((const UINT32 *)(a))) +#define LOADINTELWORD(a) (*((const UINT16 *)(a))) #define STOREINTELDWORD(a, b) *(UINT32 *)(a) = (b) #define STOREINTELWORD(a, b) *(UINT16 *)(a) = (b) -#if defined(__GNUC__) && defined(IA32_USE_GCC_ATTR_REGPARM) -#define GCC_ATTR_REGPARM __attribute__((regparm(2))) -#endif +#if !defined(DEBUG) && !defined(NP2_CPU_ARCH_AMD64) +#define FASTCALL __attribute__((regparm(2))) +#endif /* !DEBUG && !NP2_CPU_ARCH_AMD64 */ #elif defined(arm) || defined (__arm__) #define MEMOPTIMIZE 2 #define REG8 UINT @@ -233,6 +205,31 @@ void toolkit_msgbox(const char *title, const char *msg); #define MEMOPTIMIZE 1 #endif +#ifndef FASTCALL +#define FASTCALL +#endif +#define CPUCALL FASTCALL +#define MEMCALL FASTCALL +#define DMACCALL FASTCALL +#define IOOUTCALL FASTCALL +#define IOINPCALL FASTCALL +#define SOUNDCALL FASTCALL +#define VRAMCALL FASTCALL +#define SCRNCALL FASTCALL +#define VERMOUTHCL FASTCALL + +#ifdef DEBUG +#define INLINE +#define __ASSERT(s) assert(s) +#else +#ifndef __ASSERT +#define __ASSERT(s) +#endif +#ifndef INLINE +#define INLINE inline +#endif +#endif + #define SUPPORT_EUC #undef SUPPORT_8BPP @@ -247,27 +244,22 @@ void toolkit_msgbox(const char *title, const char *msg); #define SUPPORT_PC9861K #define SUPPORT_HOSTDRV +#define SUPPORT_RESUME +#define SUPPORT_STATSAVE + #undef SUPPORT_SASI #undef SUPPORT_SCSI -#if (USE_GTK2 > 0) #define SUPPORT_S98 #define SUPPORT_KEYDISP #define SUPPORT_SOFTKBD 0 -#endif -#if (USE_SDL > 0) -#define USE_SYSMENU -#define SCREEN_BPP 16 -#undef SUPPORT_8BPP -#undef SUPPORT_24BPP -#undef SUPPORT_32BPP -#endif +#define SUPPORT_SCREENSIZE -#if (USE_SDL > 0) || defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) #define SUPPORT_JOYSTICK #define USE_SDL_JOYSTICK -#endif /* USE_SDL > 0 || USE_SDLAUDIO || USE_SDLMIXER */ +#endif /* USE_SDLAUDIO || USE_SDLMIXER */ /* * You could specify a complete path, e.g. "/etc/timidity.cfg", and @@ -282,5 +274,6 @@ extern char timidity_cfgfile_path[MAX_PATH]; #include "rect.h" #include "lstarray.h" #include "trace.h" +#include "toolkit.h" #endif /* NP2_X11_COMPILER_H__ */ diff --git a/x11/config.tmpl b/x11/config.tmpl deleted file mode 100644 index 4787cae1..00000000 --- a/x11/config.tmpl +++ /dev/null @@ -1,28 +0,0 @@ -XCOMM $Id: config.tmpl,v 1.11 2007/01/23 15:48:20 monaka Exp $ - -XCOMM -XCOMM Sound -XCOMM - -XCOMM support SDL sound -XCOMM -XCOMM SDL_CONFIG= sdl-config -#undef USE_SDLAUDIO -#undef USE_SDLMIXER - - -XCOMM -XCOMM Misc. -XCOMM - -XCOMM big-endian machine (PowerPC based Macintosh, etc...) -XCOMM -#undef BIGENDIAN - -XCOMM IA-32 CPU core -XCOMM -#undef CPUCORE_IA32 - -XCOMM XF86VidMode Extension (for full-screen mode) -XCOMM -#undef USE_XF86VIDMODE diff --git a/x11/configure.ac b/x11/configure.ac new file mode 100644 index 00000000..543bfee0 --- /dev/null +++ b/x11/configure.ac @@ -0,0 +1,200 @@ +dnl +dnl Configure for Xnp2 +dnl + +dnl require autoconf 2.59 +AC_PREREQ(2.59) +AC_REVISION($Revision: 1.35 $) + +AC_INIT(Xnp2,0.83-20120302,nonakap@gmail.com,xnp2) +AM_INIT_AUTOMAKE([no-define no-dist no-installinfo subdir-objects]) +AC_CONFIG_SRCDIR([../np2ver.h]) +AC_CONFIG_HEADERS(config.h) +AC_CANONICAL_HOST + +dnl +dnl Checks for programs. +dnl +AC_PROG_CC +AM_PROG_CC_C_O +AC_PROG_GCC_TRADITIONAL +AC_PROG_RANLIB +AC_PROG_INSTALL + +dnl +dnl Checks for header files. +dnl +AC_STDC_HEADERS +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS([fcntl.h limits.h malloc.h stddef.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h termios.h unistd.h]) + +dnl +dnl Checks for typedefs, structures, and compiler characteristics. +dnl +AC_C_BIGENDIAN +AC_C_CONST +AC_C_INLINE +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_HEADER_TIME +AC_STRUCT_TM +AC_C_VOLATILE +AC_CHECK_TYPES([ptrdiff_t]) +AC_SYS_LARGEFILE +AC_C_CHAR_UNSIGNED + +dnl +dnl Check GCC +dnl +AM_CONDITIONAL(HAVE_GCC,test x"$GCC" = "xyes") + +dnl +dnl Checks for library functions. +dnl +AC_FUNC_CLOSEDIR_VOID +AC_FUNC_MALLOC +AC_FUNC_MEMCMP +AC_FUNC_STAT +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([gettimeofday memset mkdir strcasecmp strdup strerror strtol]) + +dnl +dnl Checks for math library functions. +dnl +AC_CHECK_FUNCS(floor,,AC_CHECK_LIB(m,floor)) +AC_CHECK_FUNCS(pow,,AC_CHECK_LIB(m,pow)) +AC_CHECK_FUNCS(sqrt,,AC_CHECK_LIB(m,sqrt)) + +dnl +dnl Checks for X +dnl +AC_PATH_X +AC_PATH_XTRA +AC_SUBST(XLIB,"") +if test x"$no_x" != x"yes"; then + XLIB="-lX11" +elif test x"$have_x" = x"no"; then + PKG_CHECK_MODULES([X],[x11 xext],[have_x=yes;no_x=no],[have_x=no;no_x=yes]) +fi + +dnl +dnl Xnp2 configure options. +dnl +AC_ARG_ENABLE(sdl, + AC_HELP_STRING([--enable-sdl],[Use SDL library [default=yes]]),, + [enable_sdl="yes"]) +AC_ARG_ENABLE(sdlmixer, + AC_HELP_STRING([--enable-sdlmixer],[Use SDL_mixer library [default=yes]]),, + [enable_sdlmixer="yes"]) +AC_ARG_ENABLE(xf86vidmode, + AC_HELP_STRING([--enable-xf86vidmode],[Use XF86VidMode extension [default=yes]]),, + [enable_xf86vidmode="yes"]) +AC_ARG_ENABLE(ia32, + AC_HELP_STRING([--enable-ia32],[Use IA-32 emulation [default=no]]),, + [enable_ia32="no"]) +AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug],[Enable debugging [default=no]]),, + [enable_debug="no"]) +AC_ARG_ENABLE(warning, + AC_HELP_STRING([--enable-warning],[Enable warning [default=no]]),, + [enable_warning="no"]) + +dnl +dnl Checks for GTK+ +dnl +AM_PATH_GTK_2_0(2.6.0,, + AC_MSG_ERROR(Test for GTK failed. See the file 'x11/INSTALL.ja' for help)) +AC_SUBST(GTK_CFLAGS) +AC_SUBST(GTK_LIBS) +AC_DEFINE(USE_GTK2,1,[Define to 1 if you have the GTK+-2 library.]) + +dnl +dnl Checks for SDL and SDL_mixer +dnl +if test x"$enable_sdl" = "xyes"; then + AM_PATH_SDL(1.2.0) + if test x"$no_sdl" != "xyes"; then + AC_DEFINE(USE_SDLAUDIO,,[Define if you have the SDL library.]) + if test x"$enable_sdlmixer" = "xyes"; then + AC_CHECK_LIB(SDL_mixer,Mix_OpenAudio, + AC_DEFINE(USE_SDLMIXER,,[Define if you have the SDL_mixer library.]) + SDL_LIBS="$SDL_LIBS -lSDL_mixer",,$SDL_LIBS) + fi + fi +fi + + +dnl +dnl Checks for XF86VidMode extension +dnl +if test x"$enable_xf86vidmode" = "xyes"; then + ac_cv_save_cflags=$CFLAGS + CFLAGS="$CFLAGS $X_CFLAGS" + AC_CHECK_LIB(Xext,XextCreateExtension, + XLIB="-lXext $XLIB",,[$X_LIBS $X_PRE_LIBS $XLIB $X_EXTRA_LIBS]) + AC_CHECK_HEADERS(X11/extensions/xf86vmode.h, + [AC_CHECK_LIB(Xxf86vm,XF86VidModeQueryExtension, + X_PRE_LIBS="$X_PRE_LIBS -lXxf86vm" + AC_DEFINE(HAVE_XF86VIDMODE,1,[Define to 1 if you have the libXxf86vm library.]),, + $X_LIBS $X_PRE_LIBS $XLIB $X_EXTRA_LIBS)], + , + [#include ]) + CFLAGS=$ac_cv_save_cflags +fi + +dnl +dnl Checks for nasm +dnl +AC_CHECK_PROGS(nasm,[nasm nasmw],no) + +dnl +dnl Checks for IA-32 CPU emulation +dnl +AC_MSG_CHECKING([whether to use IA-32 emulation]) +AM_CONDITIONAL(CPUCORE_IA32,test x"$enable_ia32" = "xyes") +if test x"$enable_ia32" = "xyes"; then + AC_DEFINE(CPUCORE_IA32,,[Define if use IA-32 emulation]) +fi +AC_MSG_RESULT($enable_ia32) + +dnl +dnl Checks for debug mode +dnl +AC_MSG_CHECKING([whether to enable debugging]) +if test x"$enable_debug" = "xyes"; then + CFLAGS="$CFLAGS -g -DDEBUG -DTRACE" + CFLAGS="$CFLAGS -Wstack-protector -fstack-protector --param ssp-buffer-size=1" + enable_warning=yes +else + CFLAGS="$CFLAGS -DNDEBUG" +fi +AC_MSG_RESULT($enable_debug) + +dnl +dnl Checks for warning +dnl +AC_MSG_CHECKING([whether to enable warning]) +if test x"$enable_warning" = "xyes"; then + CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith" + CFLAGS="$CFLAGS -Wreturn-type -Wswitch -Wshadow" + CFLAGS="$CFLAGS -Wcast-qual -Wwrite-strings" + CFLAGS="$CFLAGS -Wextra -Wno-unused-parameter" + CFLAGS="$CFLAGS -Wformat=2" +fi +AC_MSG_RESULT($enable_warning) + +dnl +dnl Checks for Xnp2 version +dnl +NP2VER_X11=`echo $PACKAGE_VERSION | $AWK 'BEGIN {FS="-"} NF==2 {print $2}'` +if test x"$NP2VER_X11" != "x"; then + NP2VER_X11="\"-$NP2VER_X11\"" + AC_DEFINE_UNQUOTED(NP2VER_X11,$NP2VER_X11,[Define if Xnp2 version is available]) +fi + +dnl +dnl Output Makefiles +dnl +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/x11/debug/debugwin.h b/x11/debug/debugwin.h index ee58b355..118f2fee 100644 --- a/x11/debug/debugwin.h +++ b/x11/debug/debugwin.h @@ -1,11 +1,13 @@ -/* $Id: debugwin.h,v 1.1 2004/03/23 15:16:43 monaka Exp $ */ - #if defined(SUPPORT_MEMDBG32) +G_BEGIN_DECLS + void debugwin_create(void); void debugwin_destroy(void); void debugwin_process(void); +G_END_DECLS + #else #define debugwin_create() diff --git a/x11/debug/viewer.h b/x11/debug/viewer.h index a39e74a1..250c2aa1 100644 --- a/x11/debug/viewer.h +++ b/x11/debug/viewer.h @@ -3,9 +3,7 @@ #if defined(SUPPORT_VIEWER) -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS #define NP2VIEW_MAX 8 @@ -78,9 +76,7 @@ void viewer_allclose(void); void viewer_allreload(BOOL force); -#ifdef __cplusplus -} -#endif +G_END_DECLS #else /* SUPPORT_VIEWER */ diff --git a/x11/debug/viewmem.c b/x11/debug/viewmem.c index 5ef08c30..fc2593a8 100644 --- a/x11/debug/viewmem.c +++ b/x11/debug/viewmem.c @@ -30,7 +30,7 @@ void viewmem_read(VIEWMEM_T *cfg, UINT32 adrs, BYTE *buf, UINT32 size) { } } - // CG-Windowは無視 + // CG-Window縺ッ辟。隕 if (adrs < 0xa5000) { if ((adrs + size) <= 0xa5000) { ZeroMemory(buf, size); diff --git a/x11/debug/viewmem.h b/x11/debug/viewmem.h index 7590bcd2..2c3be5d9 100644 --- a/x11/debug/viewmem.h +++ b/x11/debug/viewmem.h @@ -1,14 +1,10 @@ #if defined(SUPPORT_VIEWER) -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS void viewmem_read(VIEWMEM_T *cfg, UINT32 adrs, BYTE *buf, UINT32 size); void viewmem_write(VIEWMEM_T *cfg, UINT32 adrs, BYTE *buf, UINT32 size); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif diff --git a/x11/dosio.c b/x11/dosio.c index 536e649a..bee777e4 100644 --- a/x11/dosio.c +++ b/x11/dosio.c @@ -1,5 +1,3 @@ -/* $Id: dosio.c,v 1.15 2007/08/22 15:11:55 monaka Exp $ */ - #include "compiler.h" #include @@ -29,7 +27,7 @@ dosio_term(void) /* nothing to do */ } -/* ・ユ・。・、・チ犲 */ +/* 繝輔ぃ繧、繝ォ謫堺ス */ FILEH file_open(const OEMCHAR *path) { @@ -162,7 +160,7 @@ file_dircreate(const OEMCHAR *path) } -/* ・ォ・・・ネ・ユ・。・、・チ犲 */ +/* 繧ォ繝ャ繝ウ繝医ヵ繧。繧、繝ォ謫堺ス */ void file_setcd(const OEMCHAR *exepath) { @@ -223,7 +221,7 @@ file_attr_c(const OEMCHAR *filename) *curfilep = '\0'; file_catname(curpath, filename, sizeof(curpath)); - return file_attr_c(curpath); + return file_attr(curpath); } FLISTH @@ -352,7 +350,7 @@ file_catname(OEMCHAR *path, const OEMCHAR *filename, int maxlen) } else if (((*path - 0x41) & 0xff) < 26) { *path |= 0x20; } else if (*path == '\\') { - *path = '/'; + *path = G_DIR_SEPARATOR; } } } @@ -376,7 +374,7 @@ file_getname(const OEMCHAR *path) if (*path == '\0') { break; } - } else if (*path == '/') { + } else if (*path == G_DIR_SEPARATOR) { ret = path + 1; } } @@ -405,7 +403,7 @@ file_getext(const OEMCHAR *path) if (q == NULL) { q = p; } - return (char *)q; + return (OEMCHAR *)q; } void @@ -429,7 +427,7 @@ file_cutseparator(OEMCHAR *path) int pos; pos = strlen(path) - 1; - if ((pos > 0) && (path[pos] == '/')) { + if ((pos > 0) && (path[pos] == G_DIR_SEPARATOR)) { path[pos] = '\0'; } } @@ -440,8 +438,8 @@ file_setseparator(OEMCHAR *path, int maxlen) int pos; pos = strlen(path); - if ((pos) && (path[pos-1] != '/') && ((pos + 2) < maxlen)) { - path[pos++] = '/'; + if ((pos) && (path[pos-1] != G_DIR_SEPARATOR) && ((pos + 2) < maxlen)) { + path[pos++] = G_DIR_SEPARATOR; path[pos] = '\0'; } } diff --git a/x11/dosio.h b/x11/dosio.h index eb0b1804..4c8863f7 100644 --- a/x11/dosio.h +++ b/x11/dosio.h @@ -3,6 +3,8 @@ #include +G_BEGIN_DECLS + typedef FILE * FILEH; #define FILEH_INVALID NULL @@ -54,15 +56,11 @@ typedef struct { } FLINFO; -#ifdef __cplusplus -extern "C" { -#endif - -/* DOSIO:エリソ、ホス猜 */ +/* DOSIO:髢「謨ー縺ョ貅門y */ void dosio_init(void); void dosio_term(void); -/* ・ユ・。・、・チ犲 */ +/* 繝輔ぃ繧、繝ォ謫堺ス */ FILEH file_open(const OEMCHAR *path); FILEH file_open_rb(const OEMCHAR *path); FILEH file_create(const OEMCHAR *path); @@ -76,7 +74,7 @@ short file_delete(const OEMCHAR *path); short file_attr(const OEMCHAR *path); short file_dircreate(const OEMCHAR *path); -/* ・ォ・・・ネ・ユ・。・、・チ犲 */ +/* 繧ォ繝ャ繝ウ繝医ヵ繧。繧、繝ォ謫堺ス */ void file_setcd(const OEMCHAR *exepath); char *file_getcd(const OEMCHAR *sjis); FILEH file_open_c(const OEMCHAR *sjis); @@ -99,8 +97,6 @@ void file_cutext(OEMCHAR *path); void file_cutseparator(OEMCHAR *path); void file_setseparator(OEMCHAR *path, int maxlen); -#ifdef __cplusplus -}; -#endif +G_END_DECLS #endif /* NP2_X11_DOSIO_H__ */ diff --git a/x11/drawmng.h b/x11/drawmng.h index a2363c37..42a084c1 100644 --- a/x11/drawmng.h +++ b/x11/drawmng.h @@ -1,5 +1,3 @@ -/* $Id: drawmng.h,v 1.4 2005/03/12 12:36:13 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -32,6 +30,8 @@ #include "cmndraw.h" +G_BEGIN_DECLS + typedef struct { RGB32 mask; BYTE r16b; @@ -53,10 +53,6 @@ typedef struct { BOOL drawing; } _DRAWMNG_HDL, *DRAWMNG_HDL; -#ifdef __cplusplus -extern "C" { -#endif - DRAWMNG_HDL drawmng_create(void *parent, int width, int height); void drawmng_release(DRAWMNG_HDL hdl); CMNVRAM *drawmng_surflock(DRAWMNG_HDL hdl); @@ -69,8 +65,6 @@ void *drawmng_get_widget_handle(DRAWMNG_HDL hdl); void drawmng_make16mask(PAL16MASK *pal16, UINT32 bmask, UINT32 rmask, UINT32 gmask); RGB16 drawmng_makepal16(PAL16MASK *pal16, RGB32 pal32); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_DRAWMNG_H__ */ diff --git a/x11/fontmng.h b/x11/fontmng.h index 83077e73..f6738be4 100644 --- a/x11/fontmng.h +++ b/x11/fontmng.h @@ -1,6 +1,8 @@ #ifndef NP2_X11_FONTMNG_H__ #define NP2_X11_FONTMNG_H__ +G_BEGIN_DECLS + enum { FDAT_BOLD = 0x01, FDAT_PROPORTIONAL = 0x02, @@ -19,10 +21,6 @@ typedef struct { int pitch; } _FNTDAT, *FNTDAT; -#ifdef __cplusplus -extern "C" { -#endif - BOOL fontmng_init(void); void fontmng_terminate(void); void fontmng_setdeffontname(const TCHAR *fontface); @@ -33,8 +31,6 @@ BOOL fontmng_getsize(void *hdl, const char *string, POINT_T *pt); BOOL fontmng_getdrawsize(void *hdl, const char *string, POINT_T *pt); FNTDAT fontmng_get(void *hdl, const char *string); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_FONTMNG_H__ */ diff --git a/x11/gtk2/dialog_about.c b/x11/gtk2/dialog_about.c index 57b631f2..6dd0fe9a 100644 --- a/x11/gtk2/dialog_about.c +++ b/x11/gtk2/dialog_about.c @@ -1,5 +1,3 @@ -/* $Id: dialog_about.c,v 1.4 2007/01/10 15:58:43 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -40,8 +38,6 @@ static void about_destroy(GtkWidget *w, GtkWidget **wp) { - UNUSED(wp); - install_idle_process(); gtk_widget_destroy(w); } @@ -55,9 +51,7 @@ create_about_dialog(void) GtkWidget *ver_label; GtkWidget *ok_button; GtkWidget *neko_image; - GdkColormap *colormap; - GdkPixmap *neko_pixmap; - GdkBitmap *mask; + GdkPixbuf *neko_pixbuf; uninstall_idle_process(); @@ -68,20 +62,15 @@ create_about_dialog(void) gtk_window_set_resizable(GTK_WINDOW(about_dialog), FALSE); gtk_container_set_border_width(GTK_CONTAINER(about_dialog), 10); g_signal_connect(GTK_OBJECT(about_dialog), "destroy", - GTK_SIGNAL_FUNC(about_destroy), NULL); + G_CALLBACK(about_destroy), NULL); main_widget = gtk_hbox_new(FALSE, 3); gtk_widget_show(main_widget); gtk_container_add(GTK_CONTAINER(about_dialog), main_widget); - colormap = gtk_widget_get_colormap(about_dialog); - neko_pixmap = gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, - &mask, NULL, (gchar **)np2_icon); - if (neko_pixmap == NULL) - g_error("Couldn't create replacement pixmap."); - neko_image = gtk_image_new_from_pixmap(neko_pixmap, mask); - g_object_unref(neko_pixmap); - g_object_unref(mask); + neko_pixbuf = gdk_pixbuf_new_from_xpm_data(np2_icon); + neko_image = gtk_image_new_from_pixbuf(neko_pixbuf); + g_object_unref(neko_pixbuf); gtk_widget_show(neko_image); gtk_box_pack_start(GTK_BOX(main_widget), neko_image, FALSE, FALSE, 10); @@ -98,9 +87,9 @@ create_about_dialog(void) gtk_widget_show(ok_button); gtk_box_pack_end(GTK_BOX(main_widget), ok_button, FALSE, TRUE, 0); g_signal_connect_swapped(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(about_dialog)); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(about_dialog)); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_widget_has_default(ok_button); gtk_widget_grab_default(ok_button); gtk_widget_show_all(about_dialog); diff --git a/x11/gtk2/dialog_calendar.c b/x11/gtk2/dialog_calendar.c index c48c786a..13bacd1e 100644 --- a/x11/gtk2/dialog_calendar.c +++ b/x11/gtk2/dialog_calendar.c @@ -1,5 +1,3 @@ -/* $Id: dialog_calendar.c,v 1.2 2005/03/12 12:36:57 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -95,8 +93,6 @@ ok_button_clicked(GtkButton *b, gpointer d) BYTE val; int i; - UNUSED(b); - renewal = FALSE; if (np2cfg.calendar != calendar_kind) { renewal = TRUE; @@ -134,8 +130,6 @@ static void dialog_destroy(GtkWidget *w, GtkWidget **wp) { - UNUSED(wp); - install_idle_process(); gtk_widget_destroy(w); } @@ -165,20 +159,15 @@ static void now_button_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - UNUSED(d); - set_virtual_calendar(FALSE); } static void calendar_radiobutton_clicked(GtkButton *b, gpointer d) { - gint virtual = (gint)d; + gint virtual = GPOINTER_TO_UINT(d); int i; - UNUSED(b); - calendar_kind = virtual ? 0 : 1; for (i = 0; i < NELEMENTS(vircal); i++) { @@ -209,7 +198,7 @@ create_calendar_dialog(void) gtk_container_set_border_width(GTK_CONTAINER(calendar_dialog), 5); g_signal_connect(GTK_OBJECT(calendar_dialog), "destroy", - GTK_SIGNAL_FUNC(dialog_destroy), NULL); + G_CALLBACK(dialog_destroy), NULL); main_widget = gtk_table_new(4, 6, FALSE); gtk_widget_show(main_widget); @@ -219,14 +208,17 @@ create_calendar_dialog(void) * calendar kind radiobutton */ for (i = 0; i < NELEMENTS(calendar_kind_str); i++) { - calendar_radiobutton[i] = gtk_radio_button_new_with_label_from_widget(i > 0 ? GTK_RADIO_BUTTON(calendar_radiobutton[i-1]) : NULL, calendar_kind_str[i]); + calendar_radiobutton[i] = + gtk_radio_button_new_with_label_from_widget( + (i > 0) ? GTK_RADIO_BUTTON(calendar_radiobutton[i-1]) + : NULL, calendar_kind_str[i]); gtk_widget_show(calendar_radiobutton[i]); gtk_table_attach_defaults(GTK_TABLE(main_widget), calendar_radiobutton[i], 0, 3, i, i+1); - GTK_WIDGET_UNSET_FLAGS(calendar_radiobutton[i], GTK_CAN_FOCUS); + gtk_widget_set_can_focus(calendar_radiobutton[i], FALSE); g_signal_connect(GTK_OBJECT(calendar_radiobutton[i]), - "clicked", GTK_SIGNAL_FUNC(calendar_radiobutton_clicked), - (gpointer)i); + "clicked", G_CALLBACK(calendar_radiobutton_clicked), + GUINT_TO_POINTER(i)); } /* @@ -269,7 +261,7 @@ create_calendar_dialog(void) gtk_table_attach_defaults(GTK_TABLE(calendar_widget), now_button, 6, 7, 1, 2); g_signal_connect(GTK_OBJECT(now_button), "clicked", - GTK_SIGNAL_FUNC(now_button_clicked), NULL); + G_CALLBACK(now_button_clicked), NULL); /* update to current state */ set_virtual_calendar(TRUE); @@ -282,10 +274,10 @@ create_calendar_dialog(void) gtk_widget_show(ok_button); gtk_container_set_border_width(GTK_CONTAINER(ok_button), 2); gtk_table_attach_defaults(GTK_TABLE(main_widget),ok_button, 4, 6, 0, 1); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_widget_has_default(ok_button); g_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_button_clicked), (gpointer)calendar_dialog); + G_CALLBACK(ok_button_clicked), (gpointer)calendar_dialog); gtk_widget_grab_default(ok_button); cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); @@ -294,7 +286,7 @@ create_calendar_dialog(void) gtk_table_attach_defaults(GTK_TABLE(main_widget), cancel_button, 4, 6, 1, 2); g_signal_connect_swapped(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(calendar_dialog)); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(calendar_dialog)); gtk_widget_show_all(calendar_dialog); } diff --git a/x11/gtk2/dialog_config.c b/x11/gtk2/dialog_config.c index 5c0d5b78..ba394db4 100644 --- a/x11/gtk2/dialog_config.c +++ b/x11/gtk2/dialog_config.c @@ -1,5 +1,3 @@ -/* $Id: dialog_config.c,v 1.5 2007/01/23 14:17:39 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -65,7 +63,9 @@ static const struct { static GtkWidget *baseclock_entry; static GtkWidget *clockmult_entry; static GtkWidget *buffer_entry; +#if defined(SUPPORT_RESUME) static GtkWidget *resume_checkbutton; +#endif #if defined(GCC_CPU_ARCH_IA32) static GtkWidget *disablemmx_checkbutton; #endif @@ -79,7 +79,9 @@ ok_button_clicked(GtkButton *b, gpointer d) const gchar *bufp = gtk_entry_get_text(GTK_ENTRY(buffer_entry)); const gchar *base = gtk_entry_get_text(GTK_ENTRY(baseclock_entry)); const gchar *multp = gtk_entry_get_text(GTK_ENTRY(clockmult_entry)); +#if defined(SUPPORT_RESUME) gint resume = GTK_TOGGLE_BUTTON(resume_checkbutton)->active; +#endif #if defined(GCC_CPU_ARCH_IA32) gint disablemmx = GTK_TOGGLE_BUTTON(disablemmx_checkbutton)->active; #endif @@ -88,8 +90,6 @@ ok_button_clicked(GtkButton *b, gpointer d) UINT renewal = 0; int i; - UNUSED(b); - if (strcmp(base, "1.9968MHz") == 0) { if (np2cfg.baseclock != PCBASECLOCK20) { np2cfg.baseclock = PCBASECLOCK20; @@ -160,10 +160,12 @@ ok_button_clicked(GtkButton *b, gpointer d) } #endif +#if defined(SUPPORT_RESUME) if (np2oscfg.resume != resume) { np2oscfg.resume = resume; renewal |= SYS_UPDATEOSCFG; } +#endif if (renewal) { sysmng_update(renewal); @@ -176,8 +178,6 @@ static void dialog_destroy(GtkWidget *w, GtkWidget **wp) { - UNUSED(wp); - install_idle_process(); gtk_widget_destroy(w); } @@ -186,8 +186,6 @@ static void arch_radiobutton_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - arch = (char *)d; } @@ -195,8 +193,6 @@ static void rate_radiobutton_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - rate = GPOINTER_TO_INT(d); } @@ -207,17 +203,15 @@ clock_changed(GtkEditable *e, gpointer d) const gchar *multp = gtk_entry_get_text(GTK_ENTRY(clockmult_entry)); guint mult = milstr_solveINT(multp); gchar buf[80]; - gint clock; - - UNUSED(e); + gint clk; if (base[0] == '1') { - clock = PCBASECLOCK20 * mult; + clk = PCBASECLOCK20 * mult; } else { - clock = PCBASECLOCK25 * mult; + clk = PCBASECLOCK25 * mult; } g_snprintf(buf, sizeof(buf), "%2d.%03dMHz", - clock / 1000000U, (clock / 1000) % 1000); + clk / 1000000U, (clk / 1000) % 1000); gtk_label_set_text(GTK_LABEL((GtkWidget*)d), buf); } @@ -261,7 +255,7 @@ create_configure_dialog(void) gtk_container_set_border_width(GTK_CONTAINER(config_dialog), 5); g_signal_connect(GTK_OBJECT(config_dialog), "destroy", - GTK_SIGNAL_FUNC(dialog_destroy), NULL); + G_CALLBACK(dialog_destroy), NULL); main_widget = gtk_vbox_new(FALSE, 0); gtk_widget_show(main_widget); @@ -349,9 +343,9 @@ create_configure_dialog(void) gtk_misc_set_alignment(GTK_MISC(realclock_label), 1.0, 0.5); g_signal_connect(GTK_OBJECT(baseclock_entry), "changed", - GTK_SIGNAL_FUNC(clock_changed), (gpointer)realclock_label); + G_CALLBACK(clock_changed), (gpointer)realclock_label); g_signal_connect(GTK_OBJECT(clockmult_entry), "changed", - GTK_SIGNAL_FUNC(clock_changed), (gpointer)realclock_label); + G_CALLBACK(clock_changed), (gpointer)realclock_label); clock_changed(NULL, realclock_label); /* OK, Cancel button base widget */ @@ -377,9 +371,9 @@ create_configure_dialog(void) arch_radiobutton[i] = gtk_radio_button_new_with_label_from_widget(i > 0 ? GTK_RADIO_BUTTON(arch_radiobutton[i-1]) : NULL, architecture[i].label); gtk_widget_show(arch_radiobutton[i]); gtk_box_pack_start(GTK_BOX(arch_hbox), arch_radiobutton[i], FALSE, FALSE, 0); - GTK_WIDGET_UNSET_FLAGS(arch_radiobutton[i], GTK_CAN_FOCUS); + gtk_widget_set_can_focus(arch_radiobutton[i], FALSE); g_signal_connect(GTK_OBJECT(arch_radiobutton[i]), "clicked", - GTK_SIGNAL_FUNC(arch_radiobutton_clicked), (gpointer)architecture[i].arch); + G_CALLBACK(arch_radiobutton_clicked), (gpointer)architecture[i].arch); } for (i = 0; i < NELEMENTS(architecture); i++) { if (strcmp(np2cfg.model, architecture[i].arch) == 0) { @@ -419,9 +413,9 @@ create_configure_dialog(void) rate_radiobutton[i] = gtk_radio_button_new_with_label_from_widget((i > 0) ? GTK_RADIO_BUTTON(rate_radiobutton[i-1]) : NULL, samplingrate[i].label); gtk_widget_show(rate_radiobutton[i]); gtk_box_pack_start(GTK_BOX(soundrate_hbox), rate_radiobutton[i], FALSE, FALSE, 0); - GTK_WIDGET_UNSET_FLAGS(rate_radiobutton[i], GTK_CAN_FOCUS); + gtk_widget_set_can_focus(rate_radiobutton[i], FALSE); g_signal_connect(GTK_OBJECT(rate_radiobutton[i]), "clicked", - GTK_SIGNAL_FUNC(rate_radiobutton_clicked), GINT_TO_POINTER(samplingrate[i].rate)); + G_CALLBACK(rate_radiobutton_clicked), GINT_TO_POINTER(samplingrate[i].rate)); } if (np2cfg.samplingrate == 11025) { i = 0; @@ -465,6 +459,7 @@ create_configure_dialog(void) gtk_widget_show(ms_label); gtk_box_pack_start(GTK_BOX(soundbuffer_hbox),ms_label, FALSE, FALSE, 0); +#if defined(SUPPORT_RESUME) /* resume */ resume_checkbutton = gtk_check_button_new_with_label("Resume"); gtk_widget_show(resume_checkbutton); @@ -472,8 +467,6 @@ create_configure_dialog(void) if (np2oscfg.resume) { g_signal_emit_by_name(GTK_OBJECT(resume_checkbutton), "clicked"); } -#if defined(CPUCORE_IA32) - gtk_widget_set_sensitive(resume_checkbutton, FALSE); #endif #if defined(GCC_CPU_ARCH_IA32) @@ -494,18 +487,18 @@ create_configure_dialog(void) ok_button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_widget_show(ok_button); gtk_container_add(GTK_CONTAINER(confirm_widget), ok_button); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_widget_has_default(ok_button); g_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_button_clicked), (gpointer)config_dialog); + G_CALLBACK(ok_button_clicked), (gpointer)config_dialog); gtk_widget_grab_default(ok_button); cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_widget_show(cancel_button); gtk_container_add(GTK_CONTAINER(confirm_widget), cancel_button); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(cancel_button, TRUE); g_signal_connect_swapped(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(config_dialog)); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(config_dialog)); gtk_widget_show_all(config_dialog); } diff --git a/x11/gtk2/dialog_midi.c b/x11/gtk2/dialog_midi.c index 474f5fa7..e227e589 100644 --- a/x11/gtk2/dialog_midi.c +++ b/x11/gtk2/dialog_midi.c @@ -1,5 +1,3 @@ -/* $Id: dialog_midi.c,v 1.3 2005/03/12 12:36:57 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -87,8 +85,6 @@ ok_button_clicked(GtkButton *b, gpointer d) UINT update; int i; - UNUSED(b); - update = 0; if (np2cfg.mpuopt != mpuopt) { update |= SYS_UPDATECFG | SYS_UPDATEMIDI; @@ -177,8 +173,6 @@ static void dialog_destroy(GtkWidget *w, GtkWidget **wp) { - UNUSED(wp); - install_idle_process(); gtk_widget_destroy(w); } @@ -190,8 +184,6 @@ mpu98_ioport_entry_changed(GtkEditable *e, gpointer d) gchar *p; BYTE val; - UNUSED(d); - utf8 = gtk_entry_get_text(GTK_ENTRY(e)); if (utf8 != NULL) { p = g_filename_from_utf8(utf8, -1, NULL, NULL, NULL); @@ -213,8 +205,6 @@ mpu98_intr_entry_changed(GtkEditable *e, gpointer d) gchar *p; BYTE val; - UNUSED(d); - utf8 = gtk_entry_get_text(GTK_ENTRY(e)); if (utf8 != NULL) { p = g_filename_from_utf8(utf8, -1, NULL, NULL, NULL); @@ -235,9 +225,6 @@ static void mpu98_default_button_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - UNUSED(d); - gtk_entry_set_text(GTK_ENTRY(mpu98_ioport_entry), "E0D0"); gtk_entry_set_text(GTK_ENTRY(mpu98_intr_entry), "INT2"); } @@ -250,9 +237,6 @@ mpu98_mimpi_def_button_clicked(GtkButton *b, gpointer d) gchar *utf8, *path; struct stat sb; - UNUSED(b); - UNUSED(d); - dialog = gtk_file_chooser_dialog_new("Open MIMPI define file", GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN, GTK_RESPONSE_OK, @@ -342,7 +326,7 @@ create_midi_dialog(void) gtk_window_set_resizable(GTK_WINDOW(midi_dialog), FALSE); g_signal_connect(GTK_OBJECT(midi_dialog), "destroy", - GTK_SIGNAL_FUNC(dialog_destroy), NULL); + G_CALLBACK(dialog_destroy), NULL); main_widget = gtk_table_new(10, 6, FALSE); gtk_container_set_border_width(GTK_CONTAINER(main_widget), 5); @@ -368,7 +352,7 @@ create_midi_dialog(void) mpu98_ioport_entry = GTK_BIN(ioport_combo)->child; gtk_widget_show(mpu98_ioport_entry); g_signal_connect(GTK_OBJECT(mpu98_ioport_entry), "changed", - GTK_SIGNAL_FUNC(mpu98_ioport_entry_changed), NULL); + G_CALLBACK(mpu98_ioport_entry_changed), NULL); gtk_editable_set_editable(GTK_EDITABLE(mpu98_ioport_entry), FALSE); gtk_entry_set_text(GTK_ENTRY(mpu98_ioport_entry), mpu98_ioport_str[(np2cfg.mpuopt >> 4) & 0x0f]); @@ -392,7 +376,7 @@ create_midi_dialog(void) mpu98_intr_entry = GTK_BIN(intr_combo)->child; gtk_widget_show(mpu98_intr_entry); g_signal_connect(GTK_OBJECT(mpu98_intr_entry), "changed", - GTK_SIGNAL_FUNC(mpu98_intr_entry_changed), NULL); + G_CALLBACK(mpu98_intr_entry_changed), NULL); gtk_editable_set_editable(GTK_EDITABLE(mpu98_intr_entry), FALSE); gtk_entry_set_text(GTK_ENTRY(mpu98_intr_entry), mpu98_intr_str[np2cfg.mpuopt & 0x03]); @@ -569,7 +553,7 @@ create_midi_dialog(void) gtk_table_attach(GTK_TABLE(assignframe_widget), mimpi_button, 5, 6, 4, 5, GTK_FILL, GTK_FILL, 3, 3); g_signal_connect(GTK_OBJECT(mimpi_button), "clicked", - GTK_SIGNAL_FUNC(mpu98_mimpi_def_button_clicked), midi_dialog); + G_CALLBACK(mpu98_mimpi_def_button_clicked), midi_dialog); /* * "Default" button @@ -579,7 +563,7 @@ create_midi_dialog(void) gtk_table_attach(GTK_TABLE(main_widget), mpu98_default_button, 2, 3, 1, 2, GTK_SHRINK, GTK_SHRINK, 5, 5); g_signal_connect_swapped(GTK_OBJECT(mpu98_default_button), "clicked", - GTK_SIGNAL_FUNC(mpu98_default_button_clicked), NULL); + G_CALLBACK(mpu98_default_button_clicked), NULL); /* * OK, Cancel button @@ -594,18 +578,18 @@ create_midi_dialog(void) ok_button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_widget_show(ok_button); gtk_container_add(GTK_CONTAINER(confirm_widget), ok_button); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_widget_has_default(ok_button); g_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_button_clicked), (gpointer)midi_dialog); + G_CALLBACK(ok_button_clicked), (gpointer)midi_dialog); gtk_widget_grab_default(ok_button); cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_widget_show(cancel_button); gtk_container_add(GTK_CONTAINER(confirm_widget), cancel_button); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(cancel_button, TRUE); g_signal_connect_swapped(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(midi_dialog)); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(midi_dialog)); gtk_widget_show_all(midi_dialog); } diff --git a/x11/gtk2/dialog_newdisk.c b/x11/gtk2/dialog_newdisk.c index 9d0d6233..82b8e0aa 100644 --- a/x11/gtk2/dialog_newdisk.c +++ b/x11/gtk2/dialog_newdisk.c @@ -1,5 +1,3 @@ -/* $Id: dialog_newdisk.c,v 1.3 2005/03/12 12:36:57 monaka Exp $ */ - /* * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. @@ -33,6 +31,7 @@ #include "np2.h" #include "dosio.h" #include "ini.h" +#include "pccore.h" #include "fddfile.h" #include "newdisk.h" @@ -42,6 +41,8 @@ * create hard disk image */ +static const OEMCHAR *str_hddsize = OEMTEXT(" HDD Size"); + static gint anex_newdisk_dialog(GtkWidget *dialog) { @@ -52,23 +53,32 @@ anex_newdisk_dialog(GtkWidget *dialog) char buf[32]; GtkWidget *dialog_table; GtkWidget *button[NELEMENTS(hddsize)]; + GtkWidget *label; int i; /* dialog table */ - dialog_table = gtk_table_new(3, 2, FALSE); + dialog_table = gtk_table_new(4, 2, FALSE); gtk_table_set_col_spacings(GTK_TABLE(dialog_table), 5); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),dialog_table); gtk_widget_show(dialog_table); - /* HD size radio button */ + /* "HDD Size" label */ + label = gtk_label_new(str_hddsize); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_table_attach(GTK_TABLE(dialog_table), label, 0, 1, 0, 1, + GTK_FILL|GTK_SHRINK, GTK_FILL|GTK_SHRINK, + 0, 5); + gtk_widget_show(label); + + /* HDD Size radio button */ for (i = 0; i < NELEMENTS(hddsize); ++i) { g_snprintf(buf, sizeof(buf), "%dMB", hddsize[i]); button[i] = gtk_radio_button_new_with_label_from_widget( (i > 0) ? GTK_RADIO_BUTTON(button[i-1]) : NULL, buf); gtk_widget_show(button[i]); gtk_table_attach_defaults(GTK_TABLE(dialog_table), - button[i], i % 2, (i % 2) + 1, i / 2, (i / 2) + 1); - GTK_WIDGET_UNSET_FLAGS(button[i], GTK_CAN_FOCUS); + button[i], i % 2, (i % 2) + 1, (i / 2) + 1, (i / 2) + 2); + gtk_widget_set_can_focus(button[i], FALSE); } if (last >= NELEMENTS(hddsize)) { last = 0; @@ -128,7 +138,7 @@ t98_newdisk_dialog(GtkWidget *dialog, const int kind) gtk_widget_show(dialog_table); /* "HDD Size" label */ - label = gtk_label_new(" HDD Size"); + label = gtk_label_new(str_hddsize); gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5); gtk_table_attach_defaults(GTK_TABLE(dialog_table), label, 0, 1, 0, 1); gtk_widget_show(label); @@ -254,8 +264,14 @@ create_newdisk_fd_dialog(const char *filename) GtkWidget *hbox; GtkWidget *button[NELEMENTS(disktype)]; const gchar *p; + int ndisktype; int i; + ndisktype = NELEMENTS(disktype); + if (!np2cfg.usefd144) { + ndisktype--; + } + dialog = gtk_dialog_new_with_buttons("Create new floppy disk image", GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_MODAL, @@ -298,19 +314,19 @@ create_newdisk_fd_dialog(const char *filename) hbox = gtk_hbox_new(FALSE, 3); gtk_table_attach_defaults(GTK_TABLE(dialog_table), hbox, 1, 2, 1, 2); gtk_widget_show(hbox); - for (i = 0; i < NELEMENTS(disktype); ++i) { + for (i = 0; i < ndisktype; ++i) { button[i] = gtk_radio_button_new_with_label_from_widget( (i > 0) ? GTK_RADIO_BUTTON(button[i-1]) : NULL, disktype[i].str); gtk_widget_show(button[i]); gtk_box_pack_start(GTK_BOX(hbox), button[i], FALSE, FALSE, 1); - GTK_WIDGET_UNSET_FLAGS(button[i], GTK_CAN_FOCUS); + gtk_widget_set_can_focus(button[i], FALSE); } - for (i = 0; i < NELEMENTS(disktype); ++i) { + for (i = 0; i < ndisktype; ++i) { if (disktype[i].fdtype == makefdtype) break; } - if (i == NELEMENTS(disktype)) { + if (i == ndisktype) { i = (i <= 1) ? 0 : 1; /* 2HD */ } g_signal_emit_by_name(GTK_OBJECT(button[i]), "clicked"); diff --git a/x11/gtk2/dialog_screen.c b/x11/gtk2/dialog_screen.c index 9a8544ff..ec1be5c9 100644 --- a/x11/gtk2/dialog_screen.c +++ b/x11/gtk2/dialog_screen.c @@ -1,5 +1,3 @@ -/* $Id: dialog_screen.c,v 1.2 2005/03/12 12:36:57 monaka Exp $ */ - /* * Copyright (c) 2002-2003 NONAKA Kimihiro * All rights reserved. @@ -87,8 +85,6 @@ ok_button_clicked(GtkButton *b, gpointer d) BOOL renewal; int i; - UNUSED(b); - /* Video tab */ video_lcd = GTK_TOGGLE_BUTTON(video_lcd_checkbutton)->active; video_lcdrev = GTK_TOGGLE_BUTTON(video_lcd_reverse_checkbutton)->active; @@ -111,7 +107,7 @@ ok_button_clicked(GtkButton *b, gpointer d) video_lcd |= video_lcdrev ? 2 : 0; } if (np2cfg.LCD_MODE != video_lcd) { - np2cfg.LCD_MODE |= video_lcd; + np2cfg.LCD_MODE = video_lcd; pal_makelcdpal(); renewal = TRUE; } @@ -173,8 +169,6 @@ static void dialog_destroy(GtkWidget *w, GtkWidget **wp) { - UNUSED(wp); - install_idle_process(); gtk_widget_destroy(w); } @@ -190,18 +184,14 @@ static void uPD72020_radiobutton_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - - chip_uPD72020 = (gint)d; + chip_uPD72020 = GPOINTER_TO_UINT(d); } static void gc_radiobutton_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - - chip_gc_kind = (gint)d; + chip_gc_kind = GPOINTER_TO_UINT(d); } static GtkWidget* @@ -242,7 +232,7 @@ create_video_note(void) gtk_widget_set_sensitive(video_lcd_reverse_checkbutton, FALSE); } g_signal_connect(GTK_OBJECT(video_lcd_checkbutton), "clicked", - GTK_SIGNAL_FUNC(lcd_checkbutton_clicked), + G_CALLBACK(lcd_checkbutton_clicked), (gpointer)video_lcd_reverse_checkbutton); video_skipline_checkbutton = @@ -277,8 +267,8 @@ create_video_note(void) static GtkWidget* create_chip_note(void) { - static char *gdc_str[] = { "uPD7220", "uPD72020" }; - static char *gc_str[] = { "None", "GRCG", "GRCG+", "EGC" }; + static const char *gdc_str[] = { "uPD7220", "uPD72020" }; + static const char *gc_str[] = { "None", "GRCG", "GRCG+", "EGC" }; GtkWidget *main_widget; GtkWidget *gdc_frame; GtkWidget *gdc_hbox; @@ -305,13 +295,20 @@ create_chip_note(void) gtk_container_add(GTK_CONTAINER(gdc_frame), gdc_hbox); for (i = 0; i < NELEMENTS(gdc_str); i++) { - upd72020_radiobutton[i] = gtk_radio_button_new_with_label_from_widget(i > 0 ? GTK_RADIO_BUTTON(upd72020_radiobutton[i-1]) : NULL, gdc_str[i]); + upd72020_radiobutton[i] = + gtk_radio_button_new_with_label_from_widget( + (i > 0) ? GTK_RADIO_BUTTON(upd72020_radiobutton[i-1]) + : NULL, gdc_str[i]); gtk_widget_show(upd72020_radiobutton[i]); - gtk_box_pack_start(GTK_BOX(gdc_hbox), upd72020_radiobutton[i], TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gdc_hbox), upd72020_radiobutton[i], + TRUE, FALSE, 0); g_signal_connect(GTK_OBJECT(upd72020_radiobutton[i]), "clicked", - GTK_SIGNAL_FUNC(uPD72020_radiobutton_clicked), (gpointer)i); + G_CALLBACK(uPD72020_radiobutton_clicked), + GUINT_TO_POINTER(i)); } - g_signal_emit_by_name(GTK_OBJECT(upd72020_radiobutton[np2cfg.uPD72020 ? 1 : 0]), "clicked"); + g_signal_emit_by_name( + GTK_OBJECT(upd72020_radiobutton[np2cfg.uPD72020 ? 1 : 0]), + "clicked"); /* * Graphic Charger @@ -326,22 +323,30 @@ create_chip_note(void) gtk_container_add(GTK_CONTAINER(gc_frame), gc_hbox); for (i = 0; i < NELEMENTS(gc_str); i++) { - gc_radiobutton[i] = gtk_radio_button_new_with_label_from_widget(i > 0 ? GTK_RADIO_BUTTON(gc_radiobutton[i-1]) : NULL, gc_str[i]); + gc_radiobutton[i] = + gtk_radio_button_new_with_label_from_widget( + (i > 0) ? GTK_RADIO_BUTTON(gc_radiobutton[i-1]) : NULL, + gc_str[i]); gtk_widget_show(gc_radiobutton[i]); - gtk_box_pack_start(GTK_BOX(gc_hbox), gc_radiobutton[i], TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(gc_hbox), gc_radiobutton[i], TRUE, + FALSE, 0); g_signal_connect(GTK_OBJECT(gc_radiobutton[i]), "clicked", - GTK_SIGNAL_FUNC(gc_radiobutton_clicked), (gpointer)i); + G_CALLBACK(gc_radiobutton_clicked), GUINT_TO_POINTER(i)); } - g_signal_emit_by_name(GTK_OBJECT(gc_radiobutton[np2cfg.grcg & 3]), "clicked"); + g_signal_emit_by_name(GTK_OBJECT(gc_radiobutton[np2cfg.grcg & 3]), + "clicked"); /* * Use 16 colors */ - chip_enable_color16_checkbutton = gtk_check_button_new_with_label("Enable 16color (PC-9801-24)"); + chip_enable_color16_checkbutton = + gtk_check_button_new_with_label("Enable 16color (PC-9801-24)"); gtk_widget_show(chip_enable_color16_checkbutton); - gtk_box_pack_start(GTK_BOX(main_widget), chip_enable_color16_checkbutton, FALSE, FALSE, 2); + gtk_box_pack_start(GTK_BOX(main_widget), + chip_enable_color16_checkbutton, FALSE, FALSE, 2); if (np2cfg.color16) { - g_signal_emit_by_name(GTK_OBJECT(chip_enable_color16_checkbutton), "clicked"); + g_signal_emit_by_name( + GTK_OBJECT(chip_enable_color16_checkbutton), "clicked"); } return main_widget; @@ -427,7 +432,7 @@ create_screen_dialog(void) gtk_container_set_border_width(GTK_CONTAINER(screen_dialog), 5); g_signal_connect(GTK_OBJECT(screen_dialog), "destroy", - GTK_SIGNAL_FUNC(dialog_destroy), NULL); + G_CALLBACK(dialog_destroy), NULL); main_widget = gtk_vbox_new(FALSE, 0); gtk_widget_show(main_widget); @@ -460,17 +465,17 @@ create_screen_dialog(void) cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_widget_show(cancel_button); gtk_box_pack_end(GTK_BOX(confirm_widget),cancel_button,FALSE, FALSE, 0); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(cancel_button, FALSE); g_signal_connect_swapped(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(screen_dialog)); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(screen_dialog)); ok_button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_widget_show(ok_button); gtk_box_pack_end(GTK_BOX(confirm_widget), ok_button, FALSE, FALSE, 0); g_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_button_clicked), (gpointer)screen_dialog); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); + G_CALLBACK(ok_button_clicked), (gpointer)screen_dialog); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_widget_has_default(ok_button); gtk_widget_grab_default(ok_button); gtk_widget_show_all(screen_dialog); diff --git a/x11/gtk2/dialog_sound.c b/x11/gtk2/dialog_sound.c index 197c7289..b7c57ca7 100644 --- a/x11/gtk2/dialog_sound.c +++ b/x11/gtk2/dialog_sound.c @@ -1,5 +1,3 @@ -/* $Id: dialog_sound.c,v 1.5 2007/01/23 15:48:20 monaka Exp $ */ - /* * Copyright (c) 2002-2004 NONAKA Kimihiro * All rights reserved. @@ -269,7 +267,7 @@ static const char *joypad_num_str[256] = { "248", "249", "250", "251", "252", "253", "254", "255", }; -static const joymng_devinfo_t **joypad_devlist; +static joymng_devinfo_t **joypad_devlist; static GtkWidget *joypad_use_checkbutton[1]; static GtkWidget *joypad_devlist_combo; static GtkWidget *joypad_axis_combo[JOY_NAXIS]; @@ -279,6 +277,18 @@ static UINT8 joypad_axis[JOY_NAXIS]; static UINT8 joypad_button[JOY_NBUTTON]; +/* + * Driver + */ + +static const char *driver_name[SNDDRV_DRVMAX] = { + "None", + "SDL", +}; + +static int driver_snddrv; + + static void ok_button_clicked(GtkButton *b, gpointer d) { @@ -320,8 +330,6 @@ ok_button_clicked(GtkButton *b, gpointer d) int i; BOOL renewal; - UNUSED(b); - /* Mixer */ renewal = FALSE; for (i = 0; i < NELEMENTS(mixer_vol_tbl); i++) { @@ -560,6 +568,18 @@ ok_button_clicked(GtkButton *b, gpointer d) } } + /* Driver */ + renewal = FALSE; + if (np2oscfg.snddrv != driver_snddrv) { + np2oscfg.snddrv = driver_snddrv; + renewal = TRUE; + } + + if (renewal) { + sysmng_update(SYS_UPDATEOSCFG); + soundrenewal = 1; + } + gtk_widget_destroy((GtkWidget *)d); } @@ -567,8 +587,6 @@ static void dialog_destroy(GtkWidget *w, GtkWidget **wp) { - UNUSED(wp); - install_idle_process(); gtk_widget_destroy(w); } @@ -578,9 +596,6 @@ mixer_default_button_clicked(GtkButton *b, gpointer d) { int i; - UNUSED(b); - UNUSED(d); - for (i = 0; i < NELEMENTS(mixer_vol_tbl); i++) { gtk_adjustment_set_value(GTK_ADJUSTMENT(mixer_adj[i]), 64.0); } @@ -594,9 +609,6 @@ snd14_default_button_clicked(GtkButton *b, gpointer d) }; int i; - UNUSED(b); - UNUSED(d); - for (i = 0; i < NELEMENTS(snd14_adj); i++) { gtk_adjustment_set_value(GTK_ADJUSTMENT(snd14_adj[i]), defval[i]); } @@ -606,9 +618,6 @@ static void snd26_default_button_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - UNUSED(d); - gtk_entry_set_text(GTK_ENTRY(snd26_ioport_entry), "0188"); gtk_entry_set_text(GTK_ENTRY(snd26_int_entry), "INT5"); gtk_entry_set_text(GTK_ENTRY(snd26_romaddr_entry), "CC000"); @@ -618,9 +627,6 @@ static void snd86_default_button_clicked(GtkButton *b, gpointer d) { - UNUSED(b); - UNUSED(d); - gtk_entry_set_text(GTK_ENTRY(snd86_ioport_entry), "0188"); gtk_entry_set_text(GTK_ENTRY(snd86_int_entry), "INT5"); gtk_entry_set_text(GTK_ENTRY(snd86_soundid_entry), "4x"); @@ -635,9 +641,6 @@ spb_default_button_clicked(GtkButton *b, gpointer d) { int i; - UNUSED(b); - UNUSED(d); - gtk_entry_set_text(GTK_ENTRY(spb_ioport_entry), "0188"); gtk_entry_set_text(GTK_ENTRY(spb_int_entry), "INT5"); gtk_entry_set_text(GTK_ENTRY(spb_romaddr_entry), "CC000"); @@ -647,6 +650,13 @@ spb_default_button_clicked(GtkButton *b, gpointer d) } } +static void +driver_radiobutton_clicked(GtkButton *b, gpointer d) +{ + + driver_snddrv = GPOINTER_TO_UINT(d); +} + static GtkWidget * create_mixer_note(void) { @@ -693,7 +703,7 @@ create_mixer_note(void) gtk_widget_show(mixer_default_button); gtk_box_pack_end(GTK_BOX(hbox), mixer_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(mixer_default_button), "clicked", - GTK_SIGNAL_FUNC(mixer_default_button_clicked), NULL); + G_CALLBACK(mixer_default_button_clicked), NULL); return root_widget; } @@ -741,7 +751,7 @@ create_pc9801_14_note(void) gtk_widget_show(snd14_default_button); gtk_box_pack_end(GTK_BOX(hbox), snd14_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(snd14_default_button), "clicked", - GTK_SIGNAL_FUNC(snd14_default_button_clicked), NULL); + G_CALLBACK(snd14_default_button_clicked), NULL); return root_widget; } @@ -835,7 +845,7 @@ create_pc9801_26_note(void) gtk_widget_show(snd26_default_button); gtk_box_pack_end(GTK_BOX(hbox), snd26_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(snd26_default_button), "clicked", - GTK_SIGNAL_FUNC(snd26_default_button_clicked), NULL); + G_CALLBACK(snd26_default_button_clicked), NULL); return root_widget; } @@ -937,7 +947,7 @@ create_pc9801_86_note(void) gtk_widget_show(snd86_default_button); gtk_box_pack_end(GTK_BOX(hbox), snd86_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(snd86_default_button), "clicked", - GTK_SIGNAL_FUNC(snd86_default_button_clicked), NULL); + G_CALLBACK(snd86_default_button_clicked), NULL); return root_widget; } @@ -1065,7 +1075,7 @@ create_spb_note(void) gtk_widget_show(spb_default_button); gtk_box_pack_end(GTK_BOX(hbox), spb_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(spb_default_button), "clicked", - GTK_SIGNAL_FUNC(spb_default_button_clicked), NULL); + G_CALLBACK(spb_default_button_clicked), NULL); return root_widget; } @@ -1075,22 +1085,20 @@ joypad_device_changed(GtkEditable *e, gpointer d) { GtkWidget *axis_entry[JOY_NAXIS]; GtkWidget *button_entry[JOY_NBUTTON]; - const gchar *devname; + const gchar *dvname; int drv; int i, j; - UNUSED(d); - - devname = gtk_entry_get_text(GTK_ENTRY(e)); + dvname = gtk_entry_get_text(GTK_ENTRY(e)); if ((joypad_devlist == NULL) - || (devname == NULL) - || (strcmp(devname, joypad_nodevice_str) == 0)) { + || (dvname == NULL) + || (strcmp(dvname, joypad_nodevice_str) == 0)) { milstr_ncpy(joypad_devname, joypad_nodevice_str, sizeof(joypad_devname)); return; } for (drv = 0; joypad_devlist[drv] != NULL; ++drv) { - if (strcmp(devname, joypad_devlist[drv]->devname) == 0) { + if (strcmp(dvname, joypad_devlist[drv]->devname) == 0) { break; } } @@ -1220,7 +1228,7 @@ create_joypad_note(void) gtk_widget_show(devlist_entry); gtk_editable_set_editable(GTK_EDITABLE(devlist_entry), FALSE); g_signal_connect(GTK_OBJECT(devlist_entry), "changed", - GTK_SIGNAL_FUNC(joypad_device_changed), (gpointer)joypad_devlist_combo); + G_CALLBACK(joypad_device_changed), (gpointer)joypad_devlist_combo); /* Axis */ for (i = 0; i < JOY_NAXIS; ++i) { @@ -1241,7 +1249,7 @@ create_joypad_note(void) gtk_editable_set_editable(GTK_EDITABLE(axis_entry[i]), FALSE); gtk_entry_set_text(GTK_ENTRY(axis_entry[i]), joypad_noconnect_str); g_signal_connect(GTK_OBJECT(axis_entry[i]), "changed", - GTK_SIGNAL_FUNC(joypad_axis_entry_changed), + G_CALLBACK(joypad_axis_entry_changed), (gpointer)(&joypad_axis[i])); } @@ -1264,7 +1272,7 @@ create_joypad_note(void) gtk_editable_set_editable(GTK_EDITABLE(button_entry[i]), FALSE); gtk_entry_set_text(GTK_ENTRY(button_entry[i]), joypad_noconnect_str); g_signal_connect(GTK_OBJECT(button_entry[i]), "changed", - GTK_SIGNAL_FUNC(joypad_button_entry_changed), + G_CALLBACK(joypad_button_entry_changed), (gpointer)(&joypad_button[i])); } @@ -1297,6 +1305,66 @@ create_joypad_note(void) return root_widget; } +static GtkWidget * +create_driver_note(void) +{ + GtkWidget *root_widget; + GtkWidget *driver_frame; + GtkWidget *driver_vbox; + GtkWidget *driver_radiobutton[SNDDRV_DRVMAX]; + GtkWidget *snddrv_hbox; + int i; + + root_widget = gtk_vbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(root_widget), 5); + gtk_widget_show(root_widget); + + driver_frame = gtk_frame_new("Sound driver"); + gtk_widget_show(driver_frame); + gtk_box_pack_start(GTK_BOX(root_widget), driver_frame, TRUE, TRUE, 0); + + driver_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(driver_vbox), 5); + gtk_widget_show(driver_vbox); + gtk_container_add(GTK_CONTAINER(driver_frame), driver_vbox); + + for (i = 0; i < SNDDRV_DRVMAX; i++) { + driver_radiobutton[i] = gtk_radio_button_new_with_label_from_widget(i > 0 ? GTK_RADIO_BUTTON(driver_radiobutton[i-1]) : NULL, driver_name[i]); + gtk_widget_show(driver_radiobutton[i]); + gtk_box_pack_start(GTK_BOX(driver_vbox), driver_radiobutton[i], TRUE, FALSE, 0); + g_signal_connect(GTK_OBJECT(driver_radiobutton[i]), "clicked", + G_CALLBACK(driver_radiobutton_clicked), GINT_TO_POINTER(i)); + } +#if !defined(USE_SDLAUDIO) && !defined(USE_SDLMIXER) + gtk_widget_set_sensitive(driver_radiobutton[SNDDRV_SDL], FALSE); +#endif + + switch (np2oscfg.snddrv) { + case SNDDRV_NODRV: +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) + case SNDDRV_SDL: +#endif + g_signal_emit_by_name(GTK_OBJECT(driver_radiobutton[np2oscfg.snddrv]), "clicked"); + break; + +#if !defined(USE_SDLAUDIO) && !defined(USE_SDLMIXER) + case SNDDRV_SDL: +#endif + case SNDDRV_DRVMAX: + default: + np2oscfg.snddrv = SNDDRV_NODRV; + sysmng_update(SYS_UPDATEOSCFG); + break; + } + + snddrv_hbox = gtk_hbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(snddrv_hbox), 5); + gtk_widget_show(snddrv_hbox); + gtk_box_pack_start(GTK_BOX(root_widget), snddrv_hbox, FALSE, FALSE, 0); + + return root_widget; +} + void create_sound_dialog(void) { @@ -1309,6 +1377,7 @@ create_sound_dialog(void) GtkWidget *pc9801_86_note; GtkWidget *spb_note; GtkWidget *joypad_note; + GtkWidget *driver_note; GtkWidget *confirm_widget; GtkWidget *ok_button; GtkWidget *cancel_button; @@ -1322,7 +1391,7 @@ create_sound_dialog(void) gtk_window_set_resizable(GTK_WINDOW(sound_dialog), FALSE); g_signal_connect(GTK_OBJECT(sound_dialog), "destroy", - GTK_SIGNAL_FUNC(dialog_destroy), NULL); + G_CALLBACK(dialog_destroy), NULL); main_vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(main_vbox); @@ -1356,6 +1425,10 @@ create_sound_dialog(void) joypad_note = create_joypad_note(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), joypad_note, gtk_label_new("JoyPad")); + /* "Driver" note */ + driver_note = create_driver_note(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), driver_note, gtk_label_new("Driver")); + /* * OK, Cancel button */ @@ -1366,17 +1439,17 @@ create_sound_dialog(void) cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_widget_show(cancel_button); gtk_box_pack_end(GTK_BOX(confirm_widget), cancel_button, FALSE, FALSE, 0); - GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); + gtk_widget_set_can_default(cancel_button, TRUE); g_signal_connect_swapped(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(sound_dialog)); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(sound_dialog)); ok_button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_widget_show(ok_button); gtk_box_pack_end(GTK_BOX(confirm_widget), ok_button, FALSE, FALSE, 0); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); - GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); + gtk_widget_set_can_default(ok_button, TRUE); + gtk_widget_has_default(ok_button); g_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_button_clicked), (gpointer)sound_dialog); + G_CALLBACK(ok_button_clicked), (gpointer)sound_dialog); gtk_widget_grab_default(ok_button); gtk_widget_show_all(sound_dialog); diff --git a/x11/gtk2/gtk_drawmng.c b/x11/gtk2/gtk_drawmng.c index d540a7bc..a6809319 100644 --- a/x11/gtk2/gtk_drawmng.c +++ b/x11/gtk2/gtk_drawmng.c @@ -1,5 +1,3 @@ -/* $Id: gtk_drawmng.c,v 1.5 2007/01/10 15:58:58 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -94,7 +92,7 @@ drawmng_create(void *parent, int width, int height) } bytes_per_pixel = fmt.bits_per_pixel / 8; - hdl->d.dest.x = hdl->d.dest.x = 0; + hdl->d.dest.x = hdl->d.dest.y = 0; hdl->d.src.left = hdl->d.src.top = 0; hdl->d.src.right = width; hdl->d.src.bottom = height; @@ -130,7 +128,7 @@ drawmng_create(void *parent, int width, int height) GtkWidget *da = hdl->drawarea; drawmng_release((DRAWMNG_HDL)hdl); if (da) { - gtk_widget_unref(da); + g_object_unref(da); } } return NULL; @@ -176,7 +174,7 @@ drawmng_surfunlock(DRAWMNG_HDL dhdl) GdkGC *gc; if (hdl) { - gc = hdl->drawarea->style->fg_gc[GTK_WIDGET_STATE(hdl->drawarea)]; + gc = hdl->drawarea->style->fg_gc[gtk_widget_get_state(hdl->drawarea)]; gdk_draw_image(hdl->backsurf, gc, hdl->surface, 0, 0, 0, 0, hdl->d.width, hdl->d.height); hdl->d.drawing = FALSE; @@ -193,7 +191,7 @@ drawmng_blt(DRAWMNG_HDL dhdl, RECT_T *sr, POINT_T *dp) int width, height; if (hdl) { - gc = hdl->drawarea->style->fg_gc[GTK_WIDGET_STATE(hdl->drawarea)]; + gc = hdl->drawarea->style->fg_gc[gtk_widget_get_state(hdl->drawarea)]; if (sr || dp) { if (sr) { @@ -270,7 +268,7 @@ gtkdrawmng_getformat(GtkWidget *w, GtkWidget *pw, pixmap_format_t *fmtp) break; default: - fprintf(stderr, "No support visual class.\n"); + g_printerr("No support visual class.\n"); return FALSE; } @@ -292,9 +290,9 @@ gtkdrawmng_getformat(GtkWidget *w, GtkWidget *pw, pixmap_format_t *fmtp) default: if (visual->depth < 8) { - fprintf(stderr, "Too few allocable color.\n"); + g_printerr("Too few allocable color.\n"); } - fprintf(stderr, "No support depth.\n"); + g_printerr("No support depth.\n"); return FALSE; } diff --git a/x11/gtk2/gtk_drawmng.h b/x11/gtk2/gtk_drawmng.h index 0007bf2f..385ca78b 100644 --- a/x11/gtk2/gtk_drawmng.h +++ b/x11/gtk2/gtk_drawmng.h @@ -1,5 +1,3 @@ -/* $Id: gtk_drawmng.h,v 1.3 2005/03/12 12:36:57 monaka Exp $ */ - /* * Copyright (c) 2003, 2004 NONAKA Kimihiro * All rights reserved. @@ -34,6 +32,7 @@ #include "gtk2/xnp2.h" +G_BEGIN_DECLS typedef struct { _DRAWMNG_HDL d; @@ -45,4 +44,6 @@ typedef struct { BOOL gtkdrawmng_getformat(GtkWidget *w, GtkWidget *pw, pixmap_format_t *fmtp); +G_END_DECLS + #endif /* NP2_X11_GTK2_GTKDRAWMNG_H__ */ diff --git a/x11/gtk2/gtk_font.c b/x11/gtk2/gtk_font.c index e01be8be..23bbdb4b 100644 --- a/x11/gtk2/gtk_font.c +++ b/x11/gtk2/gtk_font.c @@ -1,5 +1,3 @@ -/* $Id: gtk_font.c,v 1.6 2007/01/10 15:58:21 monaka Exp $ */ - /* * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. @@ -93,7 +91,7 @@ fontmng_create(int size, UINT type, const TCHAR *fontface) } g_snprintf(buf, sizeof(buf), "%s %s %s %d", - fontface ? (char *)fontface : fontname, + fontface ? (const char *)fontface : fontname, (type & FDAT_BOLD) ? "bold" : "medium", (type & FDAT_PROPORTIONAL) ? "" : "", size); @@ -165,8 +163,6 @@ static void setfdathead(FNTMNG fhdl, FNTDAT fdat, const char *str, int len) { - UNUSED(str); - fdat->width = fhdl->rect.width; fdat->height = fhdl->rect.height; fdat->pitch = fhdl->size; diff --git a/x11/gtk2/gtk_keyboard.c b/x11/gtk2/gtk_keyboard.c index 6dd33e52..7dfd7f91 100644 --- a/x11/gtk2/gtk_keyboard.c +++ b/x11/gtk2/gtk_keyboard.c @@ -192,7 +192,7 @@ static const UINT8 xkeyconv_misc[256] = { NC, NC, NC, NC, NC, NC, NC, NC, /* , , , , , , , ; 0x48 */ NC, NC, NC, NC, NC, NC, NC, NC, - /* HOME, 「ォ, 「ャ, 「ェ, 「ュ,RLDN,RLUP, END ; 0x50 */ + /* HOME, 竊, 竊, 竊, 竊,RLDN,RLUP, END ; 0x50 */ 0x3e,0x3b,0x3a,0x3c,0x3d,0x37,0x36,0x3f, /* , , , , , , , ; 0x58 */ NC, NC, NC, NC, NC, NC, NC, NC, @@ -208,9 +208,9 @@ static const UINT8 xkeyconv_misc[256] = { 0x34, NC, NC, NC, NC, NC, NC, NC, /* ,,<「ャ> ; 0x90 */ + /* , , , , ,,<竊> ; 0x90 */ NC, NC, NC, NC, NC,0x3e,0x3b,0x3a, - /* <「ェ>,<「ュ>,,<竊>, + * Copyright (c) 2004 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -70,10 +68,6 @@ static gboolean destroy_evhandler(GtkWidget *w, GdkEventAny *ev, gpointer p) { - UNUSED(w); - UNUSED(ev); - UNUSED(p); - toolkit_widget_quit(); return TRUE; @@ -87,9 +81,6 @@ static gboolean configure_evhandler(GtkWidget *w, GdkEventConfigure *ev, gpointer p) { - UNUSED(ev); - UNUSED(p); - gdk_draw_rectangle(w->window, w->style->black_gc, TRUE, 0, 0, w->allocation.width, w->allocation.height); return TRUE; @@ -103,9 +94,6 @@ static gboolean expose_evhandler(GtkWidget *w, GdkEventExpose *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if (ev->count == 0) { scrndraw_redraw(); } @@ -120,9 +108,6 @@ static gboolean key_press_evhandler(GtkWidget *w, GdkEventKey *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if (ev->keyval == GDK_F11) { if ((np2oscfg.F11KEY == 1) && (scrnmode & SCRNMODE_FULLSCREEN)) xmenu_toggle_menu(); @@ -143,9 +128,6 @@ static gboolean key_release_evhandler(GtkWidget *w, GdkEventKey *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) gtkkbd_keyup(ev->keyval); return TRUE; @@ -159,9 +141,6 @@ static gboolean button_press_evhandler(GtkWidget *w, GdkEventButton *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - switch (ev->button) { case 1: mouse_btn(MOUSE_LEFTDOWN); @@ -186,9 +165,6 @@ static gboolean button_release_evhandler(GtkWidget *w, GdkEventButton *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - switch (ev->button) { case 1: mouse_btn(MOUSE_LEFTUP); @@ -212,9 +188,6 @@ static gboolean motion_notify_evhandler(GtkWidget *w, GdkEventMotion *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if ((scrnmode & SCRNMODE_FULLSCREEN) && (ev->y < 8.0)) xmenu_show(); @@ -229,8 +202,6 @@ static gint main_loop_quit(gpointer p) { - UNUSED(p); - scrnmng_fullscreen(0); return 0; @@ -278,13 +249,6 @@ uninstall_idle_process(void) /* * toolkit */ -const char * -gui_gtk_get_toolkit(void) -{ - - return "gtk"; -} - BOOL gui_gtk_arginit(int *argcp, char ***argvp) { @@ -349,29 +313,22 @@ gui_gtk_widget_create(void) set_icon_bitmap(main_window); g_signal_connect(GTK_OBJECT(main_window), "destroy", - GTK_SIGNAL_FUNC(destroy_evhandler), "WM destroy"); + G_CALLBACK(destroy_evhandler), (gpointer)"WM destroy"); g_signal_connect(GTK_OBJECT(main_window), "key_press_event", - GTK_SIGNAL_FUNC(key_press_evhandler), NULL); + G_CALLBACK(key_press_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "key_release_event", - GTK_SIGNAL_FUNC(key_release_evhandler), NULL); + G_CALLBACK(key_release_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "button_press_event", - GTK_SIGNAL_FUNC(button_press_evhandler), NULL); + G_CALLBACK(button_press_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "button_release_event", - GTK_SIGNAL_FUNC(button_release_evhandler), NULL); + G_CALLBACK(button_release_evhandler), NULL); g_signal_connect(GTK_OBJECT(main_window), "motion_notify_event", - GTK_SIGNAL_FUNC(motion_notify_evhandler), NULL); + G_CALLBACK(motion_notify_evhandler), NULL); g_signal_connect(GTK_OBJECT(drawarea), "configure_event", - GTK_SIGNAL_FUNC(configure_evhandler), NULL); + G_CALLBACK(configure_evhandler), NULL); g_signal_connect(GTK_OBJECT(drawarea), "expose_event", - GTK_SIGNAL_FUNC(expose_evhandler), NULL); -} - -static void -gui_gtk_terminate(void) -{ - - /* Nothing to do */ + G_CALLBACK(expose_evhandler), NULL); } void @@ -415,23 +372,83 @@ gui_gtk_set_window_title(const char* str) gtk_window_set_title(GTK_WINDOW(main_window), str); } -void -gui_gtk_messagebox(const char *title, const char *msg) +int +gui_gtk_msgbox(const char *title, const char *msg, UINT flags) { + GtkWidget *dialog; + GtkMessageType msgtype; + GtkButtonsType btntype; + int retval; + int rv; - g_message("%s:\n%s", title, msg); -} + uninstall_idle_process(); + + switch (flags & TK_MB_BTN_MASK) { + default: + btntype = GTK_BUTTONS_OK; + break; + + case TK_MB_OK: + btntype = GTK_BUTTONS_OK; + break; -/* toolkit data */ -gui_toolkit_t gtk_toolkit = { - gui_gtk_get_toolkit, - gui_gtk_arginit, - gui_gtk_terminate, - gui_gtk_widget_create, - gui_gtk_widget_show, - gui_gtk_widget_mainloop, - gui_gtk_widget_quit, - gui_gtk_event_process, - gui_gtk_set_window_title, - gui_gtk_messagebox, -}; + case TK_MB_CANCEL: + btntype = GTK_BUTTONS_CANCEL; + break; + + case TK_MB_OKCANCEL: + btntype = GTK_BUTTONS_OK_CANCEL; + break; + + case TK_MB_YESNO: + btntype = GTK_BUTTONS_YES_NO; + break; + } + + if (flags & TK_MB_ICON_INFO) { + msgtype = GTK_MESSAGE_INFO; + } else if (flags & TK_MB_ICON_WARNING) { + msgtype = GTK_MESSAGE_WARNING; + } else if (flags & TK_MB_ICON_ERROR) { + msgtype = GTK_MESSAGE_ERROR; + } else if (flags & TK_MB_ICON_QUESTION) { + msgtype = GTK_MESSAGE_QUESTION; + } else { + msgtype = GTK_MESSAGE_OTHER; + } + + dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), + GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_MODAL, + msgtype, btntype, "%s", msg); + gtk_window_set_title(GTK_WINDOW(dialog), title); + + gtk_widget_show_all(dialog); + + rv = gtk_dialog_run(GTK_DIALOG(dialog)); + switch (rv) { + case GTK_RESPONSE_OK: + retval = TK_MB_OK; + break; + + case GTK_RESPONSE_CANCEL: + retval = TK_MB_CANCEL; + break; + + case GTK_RESPONSE_YES: + retval = TK_MB_YES; + break; + + case GTK_RESPONSE_NO: + retval = TK_MB_NO; + break; + + default: + retval = 0; /* XXX */ + break; + } + + gtk_widget_destroy(dialog); + install_idle_process(); + + return retval; +} diff --git a/x11/gtk2/gtk_menu.c b/x11/gtk2/gtk_menu.c index 11cd190e..884a2613 100644 --- a/x11/gtk2/gtk_menu.c +++ b/x11/gtk2/gtk_menu.c @@ -1,7 +1,5 @@ -/* $Id: gtk_menu.c,v 1.11 2007/08/22 15:20:31 monaka Exp $ */ - /* - * Copyright (c) 2004 NONAKA Kimihiro (aw9k-nnk@asahi-net.or.jp) + * Copyright (c) 2004-2011 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -60,6 +58,9 @@ #include "gtk2/gtk_menu.h" #include "gtk2/gtk_keyboard.h" +#ifndef NSTATSAVE +#define NSTATSAVE 10 +#endif /* normal */ static void cb_bmpsave(GtkAction *action, gpointer user_data); @@ -79,6 +80,10 @@ static void cb_reset(GtkAction *action, gpointer user_data); static void cb_sasiopen(GtkAction *action, gpointer user_data); static void cb_sasiremove(GtkAction *action, gpointer user_data); #endif +#if defined(SUPPORT_STATSAVE) +static void cb_statsave(GtkAction *action, gpointer user_data); +static void cb_statload(GtkAction *action, gpointer user_data); +#endif static void cb_dialog(GtkAction *action, gpointer user_data); static void cb_radio(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data); @@ -91,6 +96,7 @@ static GtkActionEntry menu_entries[] = { { "ScreenMenu", NULL, "Screen", NULL, NULL, NULL }, { "DeviceMenu", NULL, "Device", NULL, NULL, NULL }, { "OtherMenu", NULL, "Other", NULL, NULL, NULL }, +{ "StatMenu", NULL, "Stat", NULL, NULL, NULL }, /* Submenu */ { "Drive1Menu", NULL, "Drive_1", NULL, NULL, NULL }, @@ -147,6 +153,28 @@ static GtkActionEntry menu_entries[] = { { "serialopt", NULL, "Se_rial option...", NULL, NULL, G_CALLBACK(cb_dialog) }, { "soundopt", NULL, "So_und option...", NULL, NULL, G_CALLBACK(cb_dialog) }, { "reset", NULL, "_Reset", NULL, NULL, G_CALLBACK(cb_reset) }, +#if defined(SUPPORT_STATSAVE) +{ "stat00save", NULL, "Save 0", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat01save", NULL, "Save 1", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat02save", NULL, "Save 2", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat03save", NULL, "Save 3", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat04save", NULL, "Save 4", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat05save", NULL, "Save 5", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat06save", NULL, "Save 6", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat07save", NULL, "Save 7", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat08save", NULL, "Save 8", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat09save", NULL, "Save 9", NULL, NULL, G_CALLBACK(cb_statsave), }, +{ "stat00load", NULL, "Load 0", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat01load", NULL, "Load 1", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat02load", NULL, "Load 2", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat03load", NULL, "Load 3", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat04load", NULL, "Load 4", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat05load", NULL, "Load 5", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat06load", NULL, "Load 6", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat07load", NULL, "Load 7", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat08load", NULL, "Load 8", NULL, NULL, G_CALLBACK(cb_statload), }, +{ "stat09load", NULL, "Load 9", NULL, NULL, G_CALLBACK(cb_statload), }, +#endif }; static const guint n_menu_entries = G_N_ELEMENTS(menu_entries); @@ -213,6 +241,7 @@ static GtkRadioActionEntry f12key_entries[] = { { "f12mouse", NULL, "F12 = _Mouse", NULL, NULL, 0 }, { "f12copy", NULL, "F12 = Co_py", NULL, NULL, 1 }, { "f12stop", NULL, "F12 = S_top", NULL, NULL, 2 }, +{ "f12help", NULL, "F12 = _Help", NULL, NULL, 7 }, { "f12equal", NULL, "F12 = tenkey [=]", NULL, NULL, 4 }, { "f12comma", NULL, "F12 = tenkey [,]", NULL, NULL, 3 }, }; @@ -314,6 +343,10 @@ static const gchar *ui_info = " \n" " \n" " \n" +#if defined(SUPPORT_STATSAVE) +" \n" +" \n" +#endif " \n" " \n" " \n" @@ -384,6 +417,7 @@ static const gchar *ui_info = " \n" " \n" " \n" +" \n" " \n" " \n" " \n" @@ -530,9 +564,6 @@ cb_bmpsave(GtkAction *action, gpointer user_data) SCRNBMP bmp = NULL; FILEH fh; - UNUSED(action); - UNUSED(user_data); - uninstall_idle_process(); bmp = scrnbmp(); @@ -547,8 +578,11 @@ cb_bmpsave(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); +#if GTK_MAJOR_VERSION >= 2 && GTK_MINOR_VERSION >= 8 + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), + TRUE); +#endif if (strlen(bmpfilefolder) == 0) { g_strlcpy(bmpfilefolder, modulefile, sizeof(bmpfilefolder)); file_cutname(bmpfilefolder); @@ -580,6 +614,12 @@ cb_bmpsave(GtkAction *action, gpointer user_data) if (utf8) { path = g_filename_from_utf8(utf8, -1, NULL, NULL, NULL); if (path) { + gchar *ext = file_getext(path); + if (strlen(ext) != 3 || file_cmpname(ext, "bmp")) { + gchar *tmp = g_strjoin(".", path, "bmp", NULL); + g_free(path); + path = tmp; + } file_cpyname(bmpfilefolder, path, sizeof(bmpfilefolder)); sysmng_update(SYS_UPDATEOSCFG); fh = file_create(path); @@ -608,9 +648,6 @@ cb_change_font(GtkAction *action, gpointer user_data) gchar *utf8, *path; struct stat sb; - UNUSED(action); - UNUSED(user_data); - uninstall_idle_process(); dialog = gtk_file_chooser_dialog_new("Open a font file", @@ -621,8 +658,7 @@ cb_change_font(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); utf8 = g_filename_to_utf8(np2cfg.fontfile, -1, NULL, NULL, NULL); if (utf8) { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8); @@ -674,8 +710,6 @@ cb_diskeject(GtkAction *action, gpointer user_data) const gchar *name = gtk_action_get_name(action); guint drive; - UNUSED(user_data); - /* name = "disk?eject" */ if ((strlen(name) >= 5) && (g_ascii_isdigit(name[4]))) { drive = g_ascii_digit_value(name[4]) - 1; @@ -696,8 +730,6 @@ cb_diskopen(GtkAction *action, gpointer user_data) const gchar *name = gtk_action_get_name(action); guint drive; - UNUSED(user_data); - if ((strlen(name) < 5) || (!g_ascii_isdigit(name[4]))) return; drive = g_ascii_digit_value(name[4]) - 1; @@ -712,8 +744,7 @@ cb_diskopen(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); utf8 = g_filename_to_utf8(fddfolder, -1, NULL, NULL, NULL); if (utf8) { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8); @@ -739,6 +770,7 @@ cb_diskopen(GtkAction *action, gpointer user_data) gtk_file_filter_add_pattern(filter, "*.2[hH][dD]"); gtk_file_filter_add_pattern(filter, "*.[fF][dD][iI]"); gtk_file_filter_add_pattern(filter, "*.[fF][sS]"); + gtk_file_filter_add_pattern(filter, "*.[fF][lL][pP]"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); } filter = gtk_file_filter_new(); @@ -755,6 +787,7 @@ cb_diskopen(GtkAction *action, gpointer user_data) gtk_file_filter_add_pattern(filter, "*.2[hH][dD]"); gtk_file_filter_add_pattern(filter, "*.[fF][dD][iI]"); gtk_file_filter_add_pattern(filter, "*.[fF][sS]"); + gtk_file_filter_add_pattern(filter, "*.[fF][lL][pP]"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); } gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); @@ -799,8 +832,6 @@ cb_ataopen(GtkAction *action, gpointer user_data) const gchar *name = gtk_action_get_name(action); guint channel, drive; - UNUSED(user_data); - /* "ata??open" */ if ((strlen(name) < 5) || (!g_ascii_isdigit(name[3])) @@ -823,8 +854,7 @@ cb_ataopen(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL); if (utf8) { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8); @@ -876,8 +906,6 @@ cb_ataremove(GtkAction *action, gpointer user_data) const gchar *name = gtk_action_get_name(GTK_ACTION(action)); guint channel, drive; - UNUSED(user_data); - /* "ata??open" */ if ((strlen(name) < 5) || (!g_ascii_isdigit(name[3])) @@ -902,9 +930,6 @@ cb_atapiopen(GtkAction *action, gpointer user_data) gchar *utf8, *path; struct stat sb; - UNUSED(action); - UNUSED(user_data); - uninstall_idle_process(); dialog = gtk_file_chooser_dialog_new("Open a ATAPI CD-ROM image", @@ -915,8 +940,7 @@ cb_atapiopen(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL); if (utf8) { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8); @@ -970,9 +994,6 @@ static void cb_atapiremove(GtkAction *action, gpointer user_data) { - UNUSED(action); - UNUSED(user_data); - sxsi_devclose(0x02); } #endif /* SUPPORT_IDEIO */ @@ -981,9 +1002,6 @@ static void cb_midipanic(GtkAction *action, gpointer user_data) { - UNUSED(action); - UNUSED(user_data); - rs232c_midipanic(); mpu98ii_midipanic(); pc9861k_midipanic(); @@ -1012,9 +1030,6 @@ cb_newdisk(GtkAction *action, gpointer user_data) int kind; int i; - UNUSED(action); - UNUSED(user_data); - uninstall_idle_process(); dialog = gtk_file_chooser_dialog_new("Create new disk image file", @@ -1025,8 +1040,11 @@ cb_newdisk(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); +#if GTK_MAJOR_VERSION >= 2 && GTK_MINOR_VERSION >= 8 + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), + TRUE); +#endif if (strlen(fddfolder) == 0) { g_strlcpy(fddfolder, modulefile, sizeof(fddfolder)); file_cutname(fddfolder); @@ -1044,7 +1062,7 @@ cb_newdisk(GtkAction *action, gpointer user_data) filter[0] = gtk_file_filter_new(); if (filter[0]) { - gtk_file_filter_set_name(filter[0], "D88 floppy disk image"); + gtk_file_filter_set_name(filter[0], "D88 floppy disk image (*.d88,*.d98,*.88d,*.98d)"); gtk_file_filter_add_pattern(filter[0], "*.[dD]88"); gtk_file_filter_add_pattern(filter[0], "*.88[dD]"); gtk_file_filter_add_pattern(filter[0], "*.[dD]98"); @@ -1053,19 +1071,19 @@ cb_newdisk(GtkAction *action, gpointer user_data) } filter[1] = gtk_file_filter_new(); if (filter[1]) { - gtk_file_filter_set_name(filter[1], "Anex86 hard disk image files"); + gtk_file_filter_set_name(filter[1], "Anex86 hard disk image (*.hdi)"); gtk_file_filter_add_pattern(filter[1], "*.[hH][dD][iI]"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[1]); } filter[2] = gtk_file_filter_new(); if (filter[2]) { - gtk_file_filter_set_name(filter[2], "T98 hard disk image files"); + gtk_file_filter_set_name(filter[2], "T98 hard disk image (*.thd)"); gtk_file_filter_add_pattern(filter[2], "*.[tT][hH][dD]"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[2]); } filter[3] = gtk_file_filter_new(); if (filter[3]) { - gtk_file_filter_set_name(filter[3], "T98-Next hard disk image files"); + gtk_file_filter_set_name(filter[3], "T98-Next hard disk image (*.nhd)"); gtk_file_filter_add_pattern(filter[3], "*.[nN][hH][dD]"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter[3]); } @@ -1138,9 +1156,6 @@ static void cb_reset(GtkAction *action, gpointer user_data) { - UNUSED(action); - UNUSED(user_data); - pccore_cfgupdate(); pccore_reset(); } @@ -1156,8 +1171,6 @@ cb_sasiopen(GtkAction *action, gpointer user_data) const gchar *name = gtk_action_get_name(action); guint drive; - UNUSED(user_data); - if ((strlen(name) < 5) || (!g_ascii_isdigit(name[4]))) return; drive = g_ascii_digit_value(name[4]) - 1; @@ -1172,8 +1185,7 @@ cb_sasiopen(GtkAction *action, gpointer user_data) if (dialog == NULL) goto end; - g_object_set(G_OBJECT(dialog), "show-hidden", TRUE, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); + gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); utf8 = g_filename_to_utf8(hddfolder, -1, NULL, NULL, NULL); if (utf8) { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), utf8); @@ -1225,8 +1237,6 @@ cb_sasiremove(GtkAction *action, gpointer user_data) const gchar *name = gtk_action_get_name(GTK_ACTION(action)); guint drive; - UNUSED(user_data); - /* name = "sasi?eject" */ if ((strlen(name) >= 5) && (g_ascii_isdigit(name[4]))) { drive = g_ascii_digit_value(name[4]) - 1; @@ -1237,13 +1247,49 @@ cb_sasiremove(GtkAction *action, gpointer user_data) } #endif /* !SUPPORT_IDEIO */ +#if defined(SUPPORT_STATSAVE) +static void +cb_statsave(GtkAction *action, gpointer user_data) +{ + const gchar *name = gtk_action_get_name(GTK_ACTION(action)); + char ext[4]; + guint n; + + /* name = "stat??save" */ + if ((strlen(name) >= 6) + && (g_ascii_isdigit(name[4])) + && (g_ascii_isdigit(name[5]))) { + n = g_ascii_digit_value(name[4]) * 10; + n += g_ascii_digit_value(name[5]); + g_snprintf(ext, sizeof(ext), np2flagext, n); + flagsave(ext); + } +} + +static void +cb_statload(GtkAction *action, gpointer user_data) +{ + const gchar *name = gtk_action_get_name(GTK_ACTION(action)); + char ext[4]; + guint n; + + /* name = "stat??load" */ + if ((strlen(name) >= 6) + && (g_ascii_isdigit(name[4])) + && (g_ascii_isdigit(name[5]))) { + n = g_ascii_digit_value(name[4]) * 10; + n += g_ascii_digit_value(name[5]); + g_snprintf(ext, sizeof(ext), np2flagext, n); + flagload(ext, "Status Load", TRUE); + } +} +#endif + static void cb_dialog(GtkAction *action, gpointer user_data) { const gchar *name = gtk_action_get_name(action); - UNUSED(user_data); - if (g_ascii_strcasecmp(name, "configure") == 0) { create_configure_dialog(); } else if (g_ascii_strcasecmp(name, "soundopt") == 0) { @@ -1270,8 +1316,6 @@ cb_clockdisp(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.DISPCLK & 1) ^ (b ? 1 : 0); if (f) { np2oscfg.DISPCLK ^= 1; @@ -1287,8 +1331,6 @@ cb_dispvsync(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.DISPSYNC ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2cfg.DISPSYNC = !np2cfg.DISPSYNC; @@ -1302,8 +1344,6 @@ cb_framedisp(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.DISPCLK & 2) ^ (b ? 2 : 0); if (f) { np2oscfg.DISPCLK ^= 2; @@ -1319,8 +1359,6 @@ cb_jastsound(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.jastsnd ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2oscfg.jastsnd = !np2oscfg.jastsnd; @@ -1334,8 +1372,6 @@ cb_joyrapid(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.BTN_RAPID ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2cfg.BTN_RAPID = !np2cfg.BTN_RAPID; @@ -1349,8 +1385,6 @@ cb_joyreverse(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.BTN_MODE ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2cfg.BTN_MODE = !np2cfg.BTN_MODE; @@ -1364,8 +1398,6 @@ cb_keydisplay(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.keydisp ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2oscfg.keydisp = !np2oscfg.keydisp; @@ -1384,8 +1416,6 @@ cb_mousemode(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.MOUSE_SW ? 1 : 0) ^ (b ? 1 : 0); if (f) { mouse_running(MOUSE_XOR); @@ -1400,8 +1430,6 @@ cb_mouserapid(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.MOUSERAPID ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2cfg.MOUSERAPID = !np2cfg.MOUSERAPID; @@ -1415,8 +1443,6 @@ cb_nowait(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.NOWAIT ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2oscfg.NOWAIT = !np2oscfg.NOWAIT; @@ -1430,8 +1456,6 @@ cb_realpalettes(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.RASTER ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2cfg.RASTER = !np2cfg.RASTER; @@ -1447,8 +1471,6 @@ cb_s98logging(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (s98logging ? 1 : 0) ^ (b ? 1 : 0); if (f) { s98logging = !s98logging; @@ -1470,8 +1492,6 @@ cb_seeksound(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.MOTOR ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2cfg.MOTOR = !np2cfg.MOTOR; @@ -1485,8 +1505,6 @@ cb_softkeyboard(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.softkbd ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2oscfg.softkbd = !np2oscfg.softkbd; @@ -1505,8 +1523,6 @@ cb_toolwindow(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2oscfg.toolwin ? 1 : 0) ^ (b ? 1 : 0); if (f) { np2oscfg.toolwin = !np2oscfg.toolwin; @@ -1525,8 +1541,6 @@ cb_xctrlkey(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.XSHIFT & 2) ^ (b ? 2 : 0); if (f) { np2cfg.XSHIFT ^= 2; @@ -1541,8 +1555,6 @@ cb_xgrphkey(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.XSHIFT & 4) ^ (b ? 4 : 0); if (f) { np2cfg.XSHIFT ^= 4; @@ -1557,8 +1569,6 @@ cb_xshiftkey(GtkToggleAction *action, gpointer user_data) gboolean b = gtk_toggle_action_get_active(action); gboolean f; - UNUSED(user_data); - f = (np2cfg.XSHIFT & 1) ^ (b ? 1 : 0); if (f) { np2cfg.XSHIFT ^= 1; @@ -1712,12 +1722,10 @@ cb_soundboard(gint idx) static void cb_radio(GtkRadioAction *action, GtkRadioAction *current, gpointer user_data) { - guint value = (guint)gtk_radio_action_get_current_value(action); + gint value = gtk_radio_action_get_current_value(action); guint menu_idx = (guint)GPOINTER_TO_INT(user_data); gint i; - UNUSED(current); /* emitted item */ - if (menu_idx < n_radiomenu_entries) { for (i = 0; i < radiomenu_entries[menu_idx].count; i++) { if (radiomenu_entries[menu_idx].entry[i].value == value) @@ -1745,8 +1753,6 @@ static gboolean menubar_timeout(gpointer p) { - UNUSED(p); - if (menubar_timerid) { g_source_remove(menubar_timerid); menubar_timerid = 0; @@ -1767,10 +1773,6 @@ static gboolean enter_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p) { - UNUSED(w); - UNUSED(ev); - UNUSED(p); - if (menubar_timerid) { g_source_remove(menubar_timerid); menubar_timerid = 0; @@ -1787,10 +1789,6 @@ static gboolean leave_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p) { - UNUSED(w); - UNUSED(ev); - UNUSED(p); - if (menubar_timerid) { g_source_remove(menubar_timerid); menubar_timerid = 0; @@ -1803,10 +1801,50 @@ leave_notify_evhandler(GtkWidget *w, GdkEventCrossing *ev, gpointer p) return TRUE; } +#if defined(SUPPORT_STATSAVE) +static void +create_menu_statsave(GtkUIManager *ui_manager, int num) +{ + char *name, *action; + guint id; + int i; + + if (num <= 0) + return; + + /* Save %d */ + for (i = 0; i < num; i++) { + id = gtk_ui_manager_new_merge_id(ui_manager); + name = g_strdup_printf("Save %d", i); + action = g_strdup_printf("stat%02dsave", i); + gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/Stat", + name, action, GTK_UI_MANAGER_MENUITEM, FALSE); + g_free(action); + g_free(name); + } + + /* separator */ + id = gtk_ui_manager_new_merge_id(ui_manager); + gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/Stat", + "", "", GTK_UI_MANAGER_SEPARATOR, FALSE); + + /* Load %d */ + for (i = 0; i < num; i++) { + id = gtk_ui_manager_new_merge_id(ui_manager); + name = g_strdup_printf("Load %d", i); + action = g_strdup_printf("stat%02dload", i); + gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/Stat", + name, action, GTK_UI_MANAGER_MENUITEM, FALSE); + g_free(action); + g_free(name); + } +} +#endif + static void equip_fddrive(GtkUIManager *ui_manager, guint no) { - char path[32], name[32], action[32]; + char *path, *name, *action; guint id; if (no >= 4) @@ -1814,23 +1852,32 @@ equip_fddrive(GtkUIManager *ui_manager, guint no) no++; id = gtk_ui_manager_new_merge_id(ui_manager); - g_snprintf(name, sizeof(name), "Drive%d", no); - g_snprintf(action, sizeof(action), "Drive%dMenu", no); + name = g_strdup_printf("Drive%d", no); + action = g_strdup_printf("Drive%dMenu", no); gtk_ui_manager_add_ui(ui_manager, id, "/MainMenu/FDD", name, action, GTK_UI_MANAGER_MENU, FALSE); + g_free(action); + g_free(name); + + path = g_strdup_printf("/MainMenu/FDD/Drive%d", no); - g_snprintf(path, sizeof(path), "/MainMenu/FDD/Drive%d", no); id = gtk_ui_manager_new_merge_id(ui_manager); - g_snprintf(name, sizeof(name), "Drive%dOpen", no); - g_snprintf(action, sizeof(action), "disk%dopen", no); + name = g_strdup_printf("Drive%dOpen", no); + action = g_strdup_printf("disk%dopen", no); gtk_ui_manager_add_ui(ui_manager, id, path, name, action, GTK_UI_MANAGER_MENUITEM, FALSE); + g_free(action); + g_free(name); id = gtk_ui_manager_new_merge_id(ui_manager); - g_snprintf(name, sizeof(name), "Drive%dEject", no); - g_snprintf(action, sizeof(action), "disk%deject", no); + name = g_strdup_printf("Drive%dEject", no); + action = g_strdup_printf("disk%deject", no); gtk_ui_manager_add_ui(ui_manager, id, path, name, action, GTK_UI_MANAGER_MENUITEM, FALSE); + g_free(action); + g_free(name); + + g_free(path); } GtkWidget * @@ -1866,6 +1913,19 @@ create_menu(void) return NULL; } +#if defined(SUPPORT_STATSAVE) + if (np2oscfg.statsave) { + create_menu_statsave(menu_hdl.ui_manager, NSTATSAVE); + } +#endif + if (np2cfg.fddequip) { + for (i = 0; i < 4; i++) { + if (np2cfg.fddequip & (1 << i)) { + equip_fddrive(menu_hdl.ui_manager, i); + } + } + } + xmenu_toggle_item(NULL, "dispvsync", np2cfg.DISPSYNC); xmenu_toggle_item(NULL, "joyrapid", np2cfg.BTN_RAPID); xmenu_toggle_item(NULL, "joyreverse", np2cfg.BTN_MODE); @@ -1895,21 +1955,13 @@ create_menu(void) xmenu_select_screensize(SCREEN_DEFMUL); xmenu_select_soundboard(np2cfg.SOUND_SW); - if (np2cfg.fddequip) { - for (i = 0; i < 4; i++) { - if (np2cfg.fddequip & (1 << i)) { - equip_fddrive(menu_hdl.ui_manager, i); - } - } - } - menubar = gtk_ui_manager_get_widget(menu_hdl.ui_manager, "/MainMenu"); gtk_widget_add_events(menubar, EVENT_MASK); g_signal_connect(GTK_OBJECT(menubar), "enter_notify_event", - GTK_SIGNAL_FUNC(enter_notify_evhandler), NULL); + G_CALLBACK(enter_notify_evhandler), NULL); g_signal_connect(GTK_OBJECT(menubar), "leave_notify_event", - GTK_SIGNAL_FUNC(leave_notify_evhandler), NULL); + G_CALLBACK(leave_notify_evhandler), NULL); return menubar; } @@ -1932,7 +1984,7 @@ void xmenu_toggle_menu(void) { - if (GTK_WIDGET_VISIBLE(menubar)) + if (gtk_widget_get_visible(menubar)) xmenu_hide(); else xmenu_show(); diff --git a/x11/gtk2/gtk_menu.h b/x11/gtk2/gtk_menu.h index 5afcbacc..b6a4dc4c 100644 --- a/x11/gtk2/gtk_menu.h +++ b/x11/gtk2/gtk_menu.h @@ -28,6 +28,8 @@ #include "gtk2/xnp2.h" +G_BEGIN_DECLS + GtkWidget *create_menu(void); void xmenu_hide(void); void xmenu_show(void); @@ -50,4 +52,6 @@ void xmenu_toggle_item(MENU_HDL, const char *, BOOL); void xmenu_toggle_menu(void); void xmenu_select_screen(UINT8 mode); +G_END_DECLS + #endif /* NP2_GTK2_GTKMENU_H__ */ diff --git a/x11/gtk2/gtk_screen.c b/x11/gtk2/gtk_screen.c index 119c0928..f432eca5 100644 --- a/x11/gtk2/gtk_screen.c +++ b/x11/gtk2/gtk_screen.c @@ -1,5 +1,3 @@ -/* $Id: gtk_screen.c,v 1.9 2007/02/04 11:51:14 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -47,15 +45,15 @@ typedef struct { UINT8 scrnmode; volatile int drawing; - int width; /* drawarea 、ホ width */ - int height; /* drawarea 、ホ height */ + int width; /* drawarea 縺ョ width */ + int height; /* drawarea 縺ョ height */ int extend; int clipping; PAL16MASK pal16mask; - RECT_T scrn; /* drawarea ニ筅ホノチイ靜ホー隹フテヨ */ - RECT_T rect; /* drawarea 、ヒノチイ隍ケ、・オ・、・コ */ + RECT_T scrn; /* drawarea 蜀縺ョ謠冗判鬆伜沺菴咲スョ */ + RECT_T rect; /* drawarea 縺ォ謠冗判縺吶k繧オ繧、繧コ */ /* toolkit depend */ GdkPixbuf *drawsurf; @@ -64,7 +62,7 @@ typedef struct { double ratio_w, ratio_h; int interp; - GdkColor pal[24]; + GdkColor pal[NP2PAL_EXTEND]; } DRAWMNG; typedef struct { @@ -89,7 +87,7 @@ GtkWidget *drawarea; #define BYTES_PER_PIXEL 3 /* - * drawarea 、ホ・「・ケ・レ・ッ・ネネ讀 4:3 (640x480) 、ヒ、ケ、。」 + * drawarea 縺ョ繧「繧ケ繝壹け繝域ッ斐r 4:3 (640x480) 縺ォ縺吶k縲 */ static void adapt_aspect(int width, int height, int scrnwidth, int scrnheight) @@ -468,8 +466,6 @@ void scrnmng_setwidth(int posx, int width) { - UNUSED(posx); - scrnstat.width = width; renewal_client_size(); } @@ -478,8 +474,6 @@ void scrnmng_setheight(int posy, int height) { - UNUSED(posy); - scrnstat.height = height; renewal_client_size(); } @@ -542,8 +536,6 @@ void scrnmng_surfunlock(const SCRNSURF *surf) { - UNUSED(surf); - if (drawmng.drawsurf == drawmng.surface) { gdk_pixbuf_scale(drawmng.backsurf, drawmng.surface, 0, 0, drawmng.rect.right, drawmng.rect.bottom, @@ -558,7 +550,7 @@ void scrnmng_update(void) { GdkDrawable *d = drawarea->window; - GdkGC *gc = drawarea->style->fg_gc[GTK_WIDGET_STATE(drawarea)]; + GdkGC *gc = drawarea->style->fg_gc[gtk_widget_get_state(drawarea)]; if (scrnmng.palchanged) { scrnmng.palchanged = FALSE; diff --git a/x11/gtk2/gtk_toolkit.h b/x11/gtk2/gtk_toolkit.h index cea59bd4..6ea369d2 100644 --- a/x11/gtk2/gtk_toolkit.h +++ b/x11/gtk2/gtk_toolkit.h @@ -1,5 +1,3 @@ -/* $Id: gtk_toolkit.h,v 1.2 2005/03/12 12:36:57 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -28,11 +26,7 @@ #ifndef NP2_GTK2_GTKTOOLKIT_H__ #define NP2_GTK2_GTKTOOLKIT_H__ -#ifdef __cplusplus -extern "C" { -#endif - -extern gui_toolkit_t gtk_toolkit; +G_BEGIN_DECLS const char *gui_gtk_get_toolkit(void); BOOL gui_gtk_arginit(int *argcp, char ***argvp); @@ -42,10 +36,8 @@ void gui_gtk_widget_mainloop(void); void gui_gtk_widget_quit(void); void gui_gtk_event_process(void); void gui_gtk_set_window_title(const char* str); -void gui_gtk_messagebox(const char* title, const char *msg); +int gui_gtk_msgbox(const char* title, const char *msg, UINT flags); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_GTK2_GTKTOOLKIT_H__ */ diff --git a/x11/gtk2/gtk_wrapper.c b/x11/gtk2/gtk_wrapper.c index 21e5be5c..e292c495 100644 --- a/x11/gtk2/gtk_wrapper.c +++ b/x11/gtk2/gtk_wrapper.c @@ -1,5 +1,3 @@ -/* $Id: gtk_wrapper.c,v 1.12 2007/02/05 14:58:59 monaka Exp $ */ - /* * Copyright (c) 2002-2004 NONAKA Kimihiro * All rights reserved. @@ -45,9 +43,13 @@ extern int verbose; extern volatile sig_atomic_t np2running; +#ifdef DEBUG #ifndef VERBOSE -#define VERBOSE(s) if (verbose) printf s -#endif +#define VERBOSE(s) if (verbose) g_printerr s +#endif /* !VERBOSE */ +#else /* !DEBUG */ +#define VERBOSE(s) +#endif /* DEBUG */ void gtk_scale_set_default_values(GtkScale *scale) @@ -136,7 +138,6 @@ static int check_xvid(GtkWidget *widget) { gboolean ret = FALSE; - GtkWindow *window; GdkWindow *w; Display *xdisplay; int xscreen; @@ -149,7 +150,6 @@ check_xvid(GtkWidget *widget) g_return_val_if_fail(widget != NULL, FALSE); - window = GTK_WINDOW(widget); w = widget->window; xdisplay = GDK_WINDOW_XDISPLAY(w); xscreen = XDefaultScreen(xdisplay); @@ -232,7 +232,7 @@ check_netwm(GtkWidget *widget) unsigned char *prop; guint32 *data; int rv; - long i; + unsigned long i; g_return_val_if_fail(widget != NULL, 0); @@ -290,11 +290,11 @@ gtk_window_init_fullscreen(GtkWidget *widget) if (verbose) { if (use_xvid) { - printf("Using XF86VidMode extension\n"); + VERBOSE(("Using XF86VidMode extension\n")); } else if (use_netwm) { - printf("Using _NET_WM_STATE_FULLSCREEN\n"); + VERBOSE(("Using _NET_WM_STATE_FULLSCREEN\n")); } else { - printf("not supported\n"); + VERBOSE(("not supported\n")); } } diff --git a/x11/gtk2/window_keydisp.c b/x11/gtk2/window_keydisp.c index 3eedffdf..795d6fda 100644 --- a/x11/gtk2/window_keydisp.c +++ b/x11/gtk2/window_keydisp.c @@ -1,5 +1,3 @@ -/* $Id: window_keydisp.c,v 1.3 2004/07/27 17:07:50 monaka Exp $ */ - #include "compiler.h" #if defined(SUPPORT_KEYDISP) @@ -42,9 +40,6 @@ static void kdispwin_window_destroy(GtkWidget *w, gpointer p) { - UNUSED(w); - UNUSED(p); - if (kdwin.window) kdwin.window = NULL; drawmng_release(kdwin.hdl); @@ -59,10 +54,6 @@ static void close_window(gpointer data, guint action, GtkWidget *w) { - UNUSED(data); - UNUSED(action); - UNUSED(w); - xmenu_toggle_item(kdwin.menuhdl, "keydisp", FALSE); } @@ -70,9 +61,6 @@ static void change_module(gpointer data, guint action, GtkWidget *w) { - UNUSED(data); - UNUSED(w); - if (kdispcfg.mode != action) { kdispcfg.mode = action; sysmng_update(SYS_UPDATEOSCFG); @@ -135,8 +123,6 @@ static gint kdispwin_expose(GtkWidget *w, GdkEventExpose *ev) { - UNUSED(w); - if (ev->type == GDK_EXPOSE) { if (ev->count == 0) { drawkeys(); @@ -154,8 +140,6 @@ static UINT8 getpal8(CMNPALFN *self, UINT num) { - UNUSED(self); - if (num < KEYDISP_PALS) { return kdwinpal[num] >> 24; } @@ -166,8 +150,6 @@ static UINT32 getpal32(CMNPALFN *self, UINT num) { - UNUSED(self); - if (num < KEYDISP_PALS) { return kdwinpal[num] & 0xffffff; } @@ -178,8 +160,6 @@ static UINT16 cnvpal16(CMNPALFN *self, RGB32 pal32) { - UNUSED(self); - return (UINT16)drawmng_makepal16(&kdwin.hdl->pal16mask, pal32); } @@ -249,7 +229,7 @@ kdispwin_create(void) gtk_window_set_title(GTK_WINDOW(kdwin.window), "Key Display"); gtk_window_set_resizable(GTK_WINDOW(kdwin.window), FALSE); g_signal_connect(GTK_OBJECT(kdwin.window), "destroy", - GTK_SIGNAL_FUNC(kdispwin_window_destroy), NULL); + G_CALLBACK(kdispwin_window_destroy), NULL); gtk_widget_realize(kdwin.window); main_widget = gtk_vbox_new(FALSE, 2); @@ -271,7 +251,7 @@ kdispwin_create(void) gtk_box_pack_start(GTK_BOX(main_widget), da, FALSE, TRUE, 0); gtk_widget_show(da); g_signal_connect(GTK_OBJECT(da), "expose_event", - GTK_SIGNAL_FUNC(kdispwin_expose), NULL); + G_CALLBACK(kdispwin_expose), NULL); mode = kdispwin_getmode(kdispcfg.mode); setkeydispmode(mode); diff --git a/x11/gtk2/window_softkbd.c b/x11/gtk2/window_softkbd.c index bbf8b73f..640371ca 100644 --- a/x11/gtk2/window_softkbd.c +++ b/x11/gtk2/window_softkbd.c @@ -1,5 +1,3 @@ -/* $Id: window_softkbd.c,v 1.2 2004/07/27 17:07:50 monaka Exp $ */ - #include "compiler.h" #if defined(SUPPORT_SOFTKBD) @@ -74,9 +72,6 @@ static void skbdwin_window_destroy(GtkWidget *w, gpointer p) { - UNUSED(w); - UNUSED(p); - if (skwin.window) skwin.window = NULL; drawmng_release(skwin.hdl); @@ -87,8 +82,6 @@ static gboolean skbdwin_expose(GtkWidget *w, GdkEventExpose *ev) { - UNUSED(w); - if (ev->type == GDK_EXPOSE) { if (ev->count == 0) { skbdwin_draw(); @@ -102,9 +95,6 @@ static gboolean skbdwin_key_press(GtkWidget *w, GdkEventKey *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if (ev->type == GDK_KEY_PRESS) { if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) gtkkbd_keydown(ev->keyval); @@ -116,9 +106,6 @@ static gboolean skbdwin_key_release(GtkWidget *w, GdkEventKey *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if (ev->type == GDK_KEY_RELEASE) { if ((ev->keyval != GDK_F12) || (np2oscfg.F12KEY != 0)) gtkkbd_keyup(ev->keyval); @@ -131,9 +118,6 @@ static gboolean skbdwin_button_press(GtkWidget *w, GdkEventButton *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if (ev->type == GDK_BUTTON_PRESS) { switch (ev->button) { case 1: @@ -149,9 +133,6 @@ static gboolean skbdwin_button_release(GtkWidget *w, GdkEventButton *ev, gpointer p) { - UNUSED(w); - UNUSED(p); - if (ev->type == GDK_BUTTON_RELEASE) { switch (ev->button) { case 1: @@ -191,7 +172,7 @@ skbdwin_create(void) gtk_window_set_resizable(GTK_WINDOW(skwin.window), FALSE); gtk_widget_add_events(skwin.window, EVENT_MASK); g_signal_connect(GTK_OBJECT(skwin.window), "destroy", - GTK_SIGNAL_FUNC(skbdwin_window_destroy), NULL); + G_CALLBACK(skbdwin_window_destroy), NULL); gtk_widget_realize(skwin.window); main_widget = gtk_vbox_new(FALSE, 2); @@ -208,16 +189,16 @@ skbdwin_create(void) gtk_widget_show(da); g_signal_connect(GTK_OBJECT(skwin.window), "key_press_event", - GTK_SIGNAL_FUNC(skbdwin_key_press), NULL); + G_CALLBACK(skbdwin_key_press), NULL); g_signal_connect(GTK_OBJECT(skwin.window), "key_release_event", - GTK_SIGNAL_FUNC(skbdwin_key_release), NULL); + G_CALLBACK(skbdwin_key_release), NULL); g_signal_connect(GTK_OBJECT(skwin.window), "button_press_event", - GTK_SIGNAL_FUNC(skbdwin_button_press), NULL); + G_CALLBACK(skbdwin_button_press), NULL); g_signal_connect(GTK_OBJECT(skwin.window), "button_release_event", - GTK_SIGNAL_FUNC(skbdwin_button_release), NULL); + G_CALLBACK(skbdwin_button_release), NULL); g_signal_connect(GTK_OBJECT(da), "expose_event", - GTK_SIGNAL_FUNC(skbdwin_expose), NULL); + G_CALLBACK(skbdwin_expose), NULL); gtk_widget_show_all(skwin.window); diff --git a/x11/gtk2/xnp2.h b/x11/gtk2/xnp2.h index f3e50631..973656a0 100644 --- a/x11/gtk2/xnp2.h +++ b/x11/gtk2/xnp2.h @@ -1,5 +1,3 @@ -/* $Id: xnp2.h,v 1.5 2007/02/04 11:51:14 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -28,23 +26,10 @@ #ifndef NP2_GTK2_XNP2_H__ #define NP2_GTK2_XNP2_H__ -#ifndef GLIB_DISABLE_DEPRECATED -#define GLIB_DISABLE_DEPRECATED -#endif - -#ifndef GDK_DISABLE_DEPRECATED -#define GDK_DISABLE_DEPRECATED -#endif -#ifndef GTK_DISABLE_DEPRECATED -#define GTK_DISABLE_DEPRECATED -#endif - #include #include -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS extern GtkWidget *main_window; extern GtkWidget *drawarea; @@ -65,8 +50,6 @@ gboolean gtk_window_init_fullscreen(GtkWidget *widget); void gtk_window_fullscreen_mode(GtkWidget *widget); void gtk_window_restore_mode(GtkWidget *widget); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_GTK2_XNP2_H__ */ diff --git a/x11/ini.c b/x11/ini.c index d5620b12..44005b61 100644 --- a/x11/ini.c +++ b/x11/ini.c @@ -15,8 +15,8 @@ typedef struct { const char *title; - const INITBL *tbl; - const INITBL *tblterm; + INITBL *tbl; + INITBL *tblterm; UINT count; } _INIARG, *INIARG; @@ -43,7 +43,7 @@ inisetbmp(BYTE *ptr, UINT pos, BOOL set) } static void -inirdargs16(const char *src, const INITBL *ini) +inirdargs16(const char *src, INITBL *ini) { SINT16 *dst; int dsize; @@ -71,7 +71,7 @@ inirdargs16(const char *src, const INITBL *ini) } static void -inirdargh8(const char *src, const INITBL *ini) +inirdargh8(const char *src, INITBL *ini) { BYTE *dst; int dsize; @@ -117,7 +117,7 @@ inirdargh8(const char *src, const INITBL *ini) } static void -iniwrsetargh8(char *work, int size, const INITBL *ini) +iniwrsetargh8(char *work, int size, INITBL *ini) { char tmp[8]; const BYTE *ptr; @@ -127,11 +127,11 @@ iniwrsetargh8(char *work, int size, const INITBL *ini) ptr = (BYTE *)(ini->value); arg = ini->arg; if (arg > 0) { - SPRINTF(tmp, "%.2x ", ptr[0]); + g_snprintf(tmp, sizeof(tmp), "%.2x ", ptr[0]); milstr_ncpy(work, tmp, size); } for (i = 1; i < arg; i++) { - SPRINTF(tmp, "%.2x ", ptr[i]); + g_snprintf(tmp, sizeof(tmp), "%.2x ", ptr[i]); milstr_ncat(work, tmp, size); } } @@ -139,7 +139,7 @@ iniwrsetargh8(char *work, int size, const INITBL *ini) /* ----- user */ static void -inirdbyte3(const char *src, const INITBL *ini) +inirdbyte3(const char *src, INITBL *ini) { UINT i; @@ -155,7 +155,7 @@ inirdbyte3(const char *src, const INITBL *ini) } static void -inirdkb(const char *src, const INITBL *ini) +inirdkb(const char *src, INITBL *ini) { if ((!milstr_extendcmp(src, "DOS")) @@ -175,14 +175,14 @@ inirdkb(const char *src, const INITBL *ini) } static void -inirdsnddrv(const char *src, const INITBL *ini) +inirdsnddrv(const char *src, INITBL *ini) { *(UINT8 *)ini->value = snddrv_drv2num(src); } static void -inirdinterp(const char *src, const INITBL *ini) +inirdinterp(const char *src, INITBL *ini) { if (!milstr_cmp(src, "NEAREST")) { @@ -202,7 +202,7 @@ static BOOL inireadcb(void *arg, const char *para, const char *key, const char *data) { char work[512]; - const INITBL *p; + INITBL *p; BOOL rv; if (arg == NULL) { @@ -299,7 +299,7 @@ inireadcb(void *arg, const char *para, const char *key, const char *data) } void -ini_read(const char *path, const char *title, const INITBL *tbl, UINT count) +ini_read(const char *path, const char *title, INITBL *tbl, UINT count) { _INIARG iniarg; @@ -376,13 +376,13 @@ iniwrinterp(UINT8 interp) static BOOL read_iniread_flag(const INITBL *p); void -ini_write(const char *path, const char *title, const INITBL *tbl, UINT count, BOOL create) +ini_write(const char *path, const char *title, INITBL *tbl, UINT count, BOOL create) { - char work[512]; - const INITBL *p; - const INITBL *pterm; - FILEH fh; - BOOL set; + char work[512]; + INITBL *p; + INITBL *pterm; + FILEH fh; + BOOL set; fh = FILEH_INVALID; if (!create) { @@ -425,39 +425,39 @@ ini_write(const char *path, const char *title, const INITBL *tbl, UINT count, BO break; case INITYPE_SINT8: - SPRINTF(work, "%d", *((char *)p->value)); + g_snprintf(work, sizeof(work), "%d", *((char *)p->value)); break; case INITYPE_SINT16: - SPRINTF(work, "%d", *((SINT16 *)p->value)); + g_snprintf(work, sizeof(work), "%d", *((SINT16 *)p->value)); break; case INITYPE_SINT32: - SPRINTF(work, "%d", *((SINT32 *)p->value)); + g_snprintf(work, sizeof(work), "%d", *((SINT32 *)p->value)); break; case INITYPE_UINT8: - SPRINTF(work, "%u", *((BYTE *)p->value)); + g_snprintf(work, sizeof(work), "%u", *((BYTE *)p->value)); break; case INITYPE_UINT16: - SPRINTF(work, "%u", *((UINT16 *)p->value)); + g_snprintf(work, sizeof(work), "%u", *((UINT16 *)p->value)); break; case INITYPE_UINT32: - SPRINTF(work, "%u", *((UINT32 *)p->value)); + g_snprintf(work, sizeof(work), "%u", *((UINT32 *)p->value)); break; case INITYPE_HEX8: - SPRINTF(work, "%x", *((BYTE *)p->value)); + g_snprintf(work, sizeof(work), "%x", *((BYTE *)p->value)); break; case INITYPE_HEX16: - SPRINTF(work, "%x", *((UINT16 *)p->value)); + g_snprintf(work, sizeof(work), "%x", *((UINT16 *)p->value)); break; case INITYPE_HEX32: - SPRINTF(work, "%x", *((UINT32 *)p->value)); + g_snprintf(work, sizeof(work), "%x", *((UINT32 *)p->value)); break; case INITYPE_KB: @@ -468,11 +468,11 @@ ini_write(const char *path, const char *title, const INITBL *tbl, UINT count, BO break; case INITYPE_SNDDRV: - SPRINTF(work, "%s", snddrv_num2drv(*(UINT8 *)p->value)); + g_snprintf(work, sizeof(work), "%s", snddrv_num2drv(*(UINT8 *)p->value)); break; case INITYPE_INTERP: - SPRINTF(work, "%s", iniwrinterp(*(UINT8 *)p->value)); + g_snprintf(work, sizeof(work), "%s", iniwrinterp(*(UINT8 *)p->value)); break; default: @@ -491,9 +491,12 @@ ini_write(const char *path, const char *title, const INITBL *tbl, UINT count, BO file_close(fh); } -extern char modulefile[]; - -static const char ini_title[] = "NekoProjectII"; +static const char ini_title[] = +#if !defined(CPUCORE_IA32) + "NekoProjectII"; +#else + "NekoProjectII_IA32"; +#endif enum { INIRO_STR = INIFLAG_RO | INITYPE_STR, @@ -509,7 +512,7 @@ enum { INIRO_KB = INIFLAG_RO | INITYPE_KB }; -static const INITBL iniitem[] = { +static INITBL iniitem[] = { {"np2title", INIRO_STR, np2oscfg.titles, sizeof(np2oscfg.titles)}, {"paddingx", INIROMAX_SINT32, &np2oscfg.paddingx, 32}, {"paddingy", INIROMAX_SINT32, &np2oscfg.paddingy, 32}, @@ -518,7 +521,7 @@ static const INITBL iniitem[] = { {"HDfolder", INITYPE_STR, hddfolder, MAX_PATH}, {"bmap_Dir", INITYPE_STR, bmpfilefolder, MAX_PATH}, {"fontfile", INITYPE_STR, np2cfg.fontfile, MAX_PATH}, - {"biospath", INITYPE_STR, np2cfg.biospath, MAX_PATH}, + {"biospath", INIRO_STR, np2cfg.biospath, MAX_PATH}, {"hdrvroot", INIRO_STR, np2cfg.hdrvroot, MAX_PATH}, {"hdrv_acc", INIRO_UINT8, &np2cfg.hdrvacc, 0}, @@ -628,8 +631,12 @@ static const INITBL iniitem[] = { {"com3mmdl", INITYPE_STR, np2oscfg.com[2].mdl, 64}, {"com3mdef", INITYPE_STR, np2oscfg.com[2].def, MAX_PATH}, +#if defined(SUPPORT_RESUME) {"e_resume", INITYPE_BOOL, &np2oscfg.resume, 0}, +#endif +#if defined(SUPPORT_STATSAVE) {"STATSAVE", INIRO_BOOL, &np2oscfg.statsave, 0}, +#endif #if defined(GCC_CPU_ARCH_IA32) {"nousemmx", INITYPE_BOOL, &np2oscfg.disablemmx, 0}, #endif @@ -646,6 +653,7 @@ static const INITBL iniitem[] = { {"dinterp_", INITYPE_INTERP, &np2oscfg.drawinterp, 0}, {"fullscrn", INITYPE_UINT32, &ignore_fullscreen_mode,0}, {"F11_KEY_", INITYPE_UINT8, &np2oscfg.F11KEY, 0}, + {"READONLY", INIRO_BOOL, &np2oscfg.cfgreadonly, 0}, {"I286SAVE", INIRO_BOOL, &np2oscfg.I286SAVE, 0}, }; @@ -661,7 +669,7 @@ calc_index(const INITBL *p) UINT idx; if (p) { - offset = (char *)p - (char *)iniitem; + offset = (const char *)p - (const char *)iniitem; if ((offset % sizeof(iniitem[0])) == 0) { idx = offset / sizeof(iniitem[0]); if (idx < INIITEMS) { diff --git a/x11/ini.h b/x11/ini.h index d63a0185..8e229374 100644 --- a/x11/ini.h +++ b/x11/ini.h @@ -1,6 +1,8 @@ #ifndef NP2_X11_INI_H__ #define NP2_X11_INI_H__ +G_BEGIN_DECLS + enum { INITYPE_STR = 0, INITYPE_BOOL, @@ -29,24 +31,18 @@ enum { }; typedef struct { - const char item[10]; - const UINT16 itemtype; - const void *value; - const UINT32 arg; + char item[10]; + UINT16 itemtype; + void *value; + UINT32 arg; } INITBL; -#ifdef __cplusplus -extern "C" { -#endif - -void ini_read(const char *path, const char *title, const INITBL *tbl, UINT count); -void ini_write(const char *path, const char *title, const INITBL *tbl, UINT count, BOOL create); +void ini_read(const char *path, const char *title, INITBL *tbl, UINT count); +void ini_write(const char *path, const char *title, INITBL *tbl, UINT count, BOOL create); void initload(void); void initsave(void); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_INI_H__ */ diff --git a/x11/inputmng.c b/x11/inputmng.c deleted file mode 100644 index 98fa0b8a..00000000 --- a/x11/inputmng.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "compiler.h" - -#if defined(USE_SYSMENU) - -#include "inputmng.h" - -static INPMNG inpmng; - - -void -inputmng_init(void) -{ - INPMNG *im = &inpmng; - - ZeroMemory(im, sizeof(INPMNG)); - im->kbs = nkeybind; - if (im->kbs > 0) { - if (im->kbs > MAX_KEYBIND) - im->kbs = MAX_KEYBIND; - CopyMemory(im->kb, keybind, sizeof(keybind[0]) * im->kbs); - } -} - -void -inputmng_keybind(short key, UINT bit) -{ - INPMNG *im = &inpmng; - UINT i; - - for (i = 0; i < im->kbs; i++) { - if (im->kb[i].key == key) { - im->kb[i].bit = bit; - return; - } - } - if (im->kbs < nkeybind) { - im->kb[im->kbs].key = key; - im->kb[im->kbs].bit = bit; - im->kbs++; - } -} - -UINT -inputmng_getkey(short key) -{ - INPMNG *im = &inpmng; - KEYBIND *kb; - UINT kbs; - - for (kb = im->kb, kbs = im->kbs; kbs--; kb++) { - if (kb->key == key) - return(kb->bit); - } - return 0; -} - -#endif /* USE_SYSMENU */ diff --git a/x11/inputmng.h b/x11/inputmng.h deleted file mode 100644 index d70839b0..00000000 --- a/x11/inputmng.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef NP2_X11_INPUTMNG_H__ -#define NP2_X11_INPUTMNG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(USE_SYSMENU) - -enum { - LBUTTON_BIT = (1 << 0), - RBUTTON_BIT = (1 << 1), - LBUTTON_DOWNBIT = (1 << 2), - RBUTTON_DOWNBIT = (1 << 3), - LBUTTON_UPBIT = (1 << 4), - RBUTTON_UPBIT = (1 << 5), - MOUSE_MOVEBIT = (1 << 6), - - KEY_ENTER = 0x01, - KEY_MENU = 0x02, - KEY_SKIP = 0x04, - KEY_EXT = 0x08, - KEY_UP = 0x10, - KEY_DOWN = 0x20, - KEY_LEFT = 0x40, - KEY_RIGHT = 0x80 -}; - -#define MAX_KEYBIND 32 - -typedef struct { - short key; - UINT bit; -} KEYBIND; - -typedef struct { - UINT kbs; - KEYBIND kb[MAX_KEYBIND]; -} INPMNG; - -extern const KEYBIND keybind[]; -extern const UINT nkeybind; - -void inputmng_init(void); -void inputmng_keybind(short key, UINT bit); -UINT inputmng_getkey(short key); - -#else - -#define inputmng_init() - -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* NP2_X11_INPUTMNG_H__ */ diff --git a/x11/joymng.c b/x11/joymng.c index ea2b3934..022850aa 100644 --- a/x11/joymng.c +++ b/x11/joymng.c @@ -1,7 +1,5 @@ -/* $Id: joymng.c,v 1.3 2007/01/23 15:48:20 monaka Exp $ */ - /*- - * Copyright (c) 2004 NONAKA Kimihiro , + * Copyright (C) 2004 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -13,17 +11,16 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "compiler.h" @@ -38,7 +35,7 @@ static struct { void *hdl; BOOL inited; - const joymng_devinfo_t **devlist; + joymng_devinfo_t **devlist; BYTE pad1btn[NELEMENTS(np2oscfg.JOY1BTN)]; REG8 flag; @@ -57,7 +54,7 @@ typedef struct { BYTE button[JOY_NBUTTON]; } JOYINFO_T; -static const joymng_devinfo_t **joydrv_initialize(void); +static joymng_devinfo_t **joydrv_initialize(void); static void joydrv_terminate(void); static void *joydrv_open(const char *dev); static void joydrv_close(void *hdl); @@ -109,7 +106,7 @@ joymng_deinitialize(void) np2oscfg.JOYPAD1 &= 1; } -const joymng_devinfo_t ** +joymng_devinfo_t ** joymng_get_devinfo_list(void) { @@ -171,7 +168,7 @@ typedef struct { SDL_Joystick *joyhdl; } joydrv_sdl_hdl_t; -const joymng_devinfo_t ** +static joymng_devinfo_t ** joydrv_initialize(void) { char str[32]; @@ -200,7 +197,7 @@ joydrv_initialize(void) memset(devlist, 0, allocsize); for (n = 0, i = 0; i < ndrv; ++i) { - sprintf(str, "%d", i); + g_snprintf(str, sizeof(str), "%d", i); devlist[n] = joydrv_open(str); if (devlist[n] == NULL) { continue; @@ -210,14 +207,15 @@ joydrv_initialize(void) shdl->joyhdl = NULL; n++; } + devlist[n] = NULL; - return (const joymng_devinfo_t **)devlist; + return devlist; sdl_err: if (devlist) { for (i = 0; i < ndrv; ++i) { if (devlist[i]) { - joydrv_sdl_close(devlist[i]); + joydrv_close(devlist[i]); } } _MFREE(devlist); @@ -228,15 +226,15 @@ joydrv_initialize(void) return NULL; } -void +static void joydrv_terminate(void) { SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } -void * -joydrv_open(const char *devname) +static void * +joydrv_open(const char *dvname) { joydrv_sdl_hdl_t *shdl = NULL; joymng_devinfo_t *dev; @@ -250,13 +248,13 @@ joydrv_open(const char *devname) int nbutton; int i; - if (devname == NULL) { + if (dvname == NULL) { goto sdl_err; } errno = 0; - lval = strtol(devname, &endptr, 10); - if (devname[0] == '\0' || *endptr != '\0') { + lval = strtol(dvname, &endptr, 10); + if (dvname[0] == '\0' || *endptr != '\0') { goto sdl_err; } if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) { @@ -331,7 +329,7 @@ joydrv_open(const char *devname) return NULL; } -void +static void joydrv_close(void *hdl) { joydrv_sdl_hdl_t *shdl = (joydrv_sdl_hdl_t *)hdl; @@ -348,7 +346,7 @@ joydrv_close(void *hdl) _MFREE(shdl); } -BOOL +static BOOL joydrv_getstat(void *hdl, JOYINFO_T *ji) { joydrv_sdl_hdl_t *shdl = (joydrv_sdl_hdl_t *)hdl; diff --git a/x11/joymng.h b/x11/joymng.h index 7aaa5106..20b88b79 100644 --- a/x11/joymng.h +++ b/x11/joymng.h @@ -1,7 +1,5 @@ -/* $Id: joymng.h,v 1.3 2007/01/23 15:48:20 monaka Exp $ */ - /*- - * Copyright (c) 2004 NONAKA Kimihiro , + * Copyright (C) 2004 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -13,17 +11,16 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NP2_X11_JOYMNG_H__ @@ -33,9 +30,7 @@ * joystick manager */ -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS #define JOY_NAXIS 2 #define JOY_NBUTTON 4 @@ -73,7 +68,7 @@ REG8 joymng_getstat(void); // -- X11 void joymng_initialize(void); void joymng_deinitialize(void); -const joymng_devinfo_t **joymng_get_devinfo_list(void); +joymng_devinfo_t **joymng_get_devinfo_list(void); void joymng_sync(void); #else /* !SUPPORT_JOYSTICK */ @@ -88,8 +83,6 @@ void joymng_sync(void); #endif /* SUPPORT_JOYSTICK */ -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_JOYMNG_H__ */ diff --git a/x11/kbdmng.c b/x11/kbdmng.c index aedf20bf..d9f32042 100644 --- a/x11/kbdmng.c +++ b/x11/kbdmng.c @@ -31,16 +31,23 @@ #include "kbdmng.h" -static const BYTE kbdmng_f12keys[] = { 0x61, 0x60, 0x4f, 0x4d, 0x76, 0x77 }; - +static const BYTE kbdmng_f12keys[] = { + 0x61, /* Copy */ + 0x60, /* Stop */ + 0x4f, /* tenkey [,] */ + 0x4d, /* tenkey [=] */ + 0x76, /* User1 */ + 0x77, /* User2 */ + 0x3f, /* Help */ +}; BYTE kbdmng_getf12key(void) { int key; - key = np2oscfg.F12KEY - 1; - if (key < NELEMENTS(kbdmng_f12keys)) + key = np2oscfg.F12KEY - 1; /* 0 is Mouse mode */ + if (key >= 0 && key < NELEMENTS(kbdmng_f12keys)) return kbdmng_f12keys[key]; return KEYBOARD_KC_NC; } diff --git a/x11/kbdmng.h b/x11/kbdmng.h index 5b2edb5e..48f0d5a6 100644 --- a/x11/kbdmng.h +++ b/x11/kbdmng.h @@ -28,9 +28,7 @@ #include "keystat.h" -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS enum { KEY_KEY106, @@ -46,8 +44,6 @@ BOOL kbdmng_init(void); BYTE kbdmng_getf12key(void); void kbdmng_resetf12(void); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_KBDMNG_H__ */ diff --git a/x11/kdispwin.c b/x11/kdispwin.c index 05f48cf0..33f0275a 100644 --- a/x11/kdispwin.c +++ b/x11/kdispwin.c @@ -25,7 +25,7 @@ kdispwin_initialize(void) static const char ini_title[] = "NP2 keydisp"; -static const INITBL iniitem[] = { +static INITBL iniitem[] = { {"WindposX", INITYPE_SINT32, &kdispcfg.posx, 0}, {"WindposY", INITYPE_SINT32, &kdispcfg.posy, 0}, {"keydmode", INITYPE_UINT8, &kdispcfg.mode, 0}, diff --git a/x11/kdispwin.h b/x11/kdispwin.h index 46074375..750832b7 100644 --- a/x11/kdispwin.h +++ b/x11/kdispwin.h @@ -5,6 +5,8 @@ #if defined(SUPPORT_KEYDISP) +G_BEGIN_DECLS + enum { KDISPCFG_FM = 0x00, KDISPCFG_MIDI = 0x80 @@ -26,12 +28,14 @@ void kdispwin_draw(BYTE cnt); void kdispwin_readini(void); void kdispwin_writeini(void); +G_END_DECLS + #else /* !SUPPORT_KEYDISP */ #define kdispwin_initialize() #define kdispwin_create() #define kdispwin_destroy() -#define kdispwin_draw(cnt) (void)cnt +#define kdispwin_draw(cnt) #define kdispwin_readini() #define kdispwin_writeini() diff --git a/x11/main.c b/x11/main.c index 9ee7e7ae..2b59c663 100644 --- a/x11/main.c +++ b/x11/main.c @@ -27,8 +27,13 @@ #include #include +#include #include +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) +#include +#endif + #include "np2.h" #include "diskdrv.h" #include "dosio.h" @@ -42,7 +47,6 @@ #include "toolkit.h" #include "kdispwin.h" -#include "sysmenu.h" #include "toolwin.h" #include "viewer.h" #include "debugwin.h" @@ -50,7 +54,6 @@ #include "commng.h" #include "fontmng.h" -#include "inputmng.h" #include "joymng.h" #include "kbdmng.h" #include "mousemng.h" @@ -60,12 +63,6 @@ #include "taskmng.h" -/* - * resume - */ -static const char np2resumeext[] = "sav"; - - /* * failure signale handler */ @@ -88,8 +85,6 @@ static void sighandler(int signo) { - UNUSED(signo); - toolkit_widget_quit(); } @@ -100,9 +95,6 @@ sighandler(int signo) static struct option longopts[] = { { "config", required_argument, 0, 'c' }, { "timidity-config", required_argument, 0, 'C' }, -#if defined(USE_SDL) || defined(USE_SYSMENU) - { "ttfont", required_argument, 0, 't' }, -#endif { "help", no_argument, 0, 'h' }, { 0, 0, 0, 0 }, }; @@ -113,14 +105,11 @@ static void usage(void) { - printf("Usage: %s [options] [[FD1 image] [[FD2 image] [[FD3 image] [FD4 image]]]]\n\n", progname); - printf("options:\n"); - printf("\t--help [-h] : print this message\n"); - printf("\t--config [-c] : specify config file\n"); - printf("\t--timidity-config [-C] : specify timidity config file\n"); -#if defined(USE_SDL) || defined(USE_SYSMENU) - printf("\t--ttfont [-t] : specify TrueType font\n"); -#endif + g_printerr("Usage: %s [options] [[FD1 image] [[FD2 image] [[FD3 image] [FD4 image]]]]\n\n", progname); + g_printerr("options:\n"); + g_printerr("\t--help [-h] : print this message\n"); + g_printerr("\t--config [-c] : specify config file\n"); + g_printerr("\t--timidity-config [-C] : specify timidity config file\n"); exit(1); } @@ -139,6 +128,11 @@ main(int argc, char *argv[]) progname = argv[0]; + setlocale(LC_ALL, ""); + (void) bindtextdomain(np2appname, NP2LOCALEDIR); + (void) bind_textdomain_codeset(np2appname, "UTF-8"); + (void) textdomain(np2appname); + toolkit_initialize(); toolkit_arginit(&argc, &argv); @@ -146,33 +140,21 @@ main(int argc, char *argv[]) switch (ch) { case 'c': if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { - fprintf(stderr, "Can't access %s.\n", optarg); + g_printerr("Can't access %s.\n", optarg); exit(1); } milstr_ncpy(modulefile, optarg, sizeof(modulefile)); - - /* resume/statsave dir */ - file_cpyname(statpath, modulefile, sizeof(statpath)); - file_cutname(statpath); break; case 'C': if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { - fprintf(stderr, "Can't access %s.\n", optarg); + g_printerr("Can't access %s.\n", optarg); exit(1); } milstr_ncpy(timidity_cfgfile_path, optarg, sizeof(timidity_cfgfile_path)); break; - case 't': - if (stat(optarg, &sb) < 0 || !S_ISREG(sb.st_mode)) { - fprintf(stderr, "Can't access %s.\n", optarg); - exit(1); - } - milstr_ncpy(fontfilename, optarg, sizeof(fontfilename)); - break; - case 'v': verbose = 1; break; @@ -191,46 +173,53 @@ main(int argc, char *argv[]) char *env = getenv("HOME"); if (env) { /* base dir */ - snprintf(modulefile, sizeof(modulefile), - "%s/.np2", env); + g_snprintf(modulefile, sizeof(modulefile), + "%s/.%s", env, np2appname); if (stat(modulefile, &sb) < 0) { if (mkdir(modulefile, 0700) < 0) { perror(modulefile); exit(1); } } else if (!S_ISDIR(sb.st_mode)) { - fprintf(stderr, "%s isn't directory.\n", + g_printerr("%s isn't directory.\n", modulefile); exit(1); } - /* font file */ - snprintf(np2cfg.fontfile, sizeof(np2cfg.fontfile), - "%s/font.bmp", modulefile); - - /* resume/statsave dir */ - file_cpyname(statpath, modulefile, sizeof(statpath)); - file_catname(statpath, "/sav/", sizeof(statpath)); - if (stat(statpath, &sb) < 0) { - if (mkdir(statpath, 0700) < 0) { - perror(statpath); - exit(1); - } - } else if (!S_ISDIR(sb.st_mode)) { - fprintf(stderr, "%s isn't directory.\n", - statpath); - exit(1); - } - /* config file */ milstr_ncat(modulefile, "/np2rc", sizeof(modulefile)); if ((stat(modulefile, &sb) >= 0) && !S_ISREG(sb.st_mode)) { - fprintf(stderr, "%s isn't regular file.\n", + g_printerr("%s isn't regular file.\n", modulefile); } } } + if (modulefile[0] != '\0') { + /* font file */ + file_cpyname(np2cfg.fontfile, modulefile, + sizeof(np2cfg.fontfile)); + file_cutname(np2cfg.fontfile); + file_setseparator(np2cfg.fontfile, sizeof(np2cfg.fontfile)); + file_catname(np2cfg.fontfile, "font.bmp", + sizeof(np2cfg.fontfile)); + + /* resume/statsave dir */ + file_cpyname(statpath, modulefile, sizeof(statpath)); + file_cutname(statpath); + file_catname(statpath, "/sav/", sizeof(statpath)); + if (stat(statpath, &sb) < 0) { + if (mkdir(statpath, 0700) < 0) { + perror(statpath); + exit(1); + } + } else if (!S_ISDIR(sb.st_mode)) { + g_printerr("%s isn't directory.\n", + statpath); + exit(1); + } + file_catname(statpath, np2appname, sizeof(statpath)); + } if (timidity_cfgfile_path[0] == '\0') { file_cpyname(timidity_cfgfile_path, modulefile, sizeof(timidity_cfgfile_path)); @@ -248,13 +237,15 @@ main(int argc, char *argv[]) rand_setseed((SINT32)time(NULL)); -#if defined(GCC_CPU_ARCH_IA32) mmxflag = havemmx() ? 0 : MMXFLAG_NOTSUPPORT; mmxflag += np2oscfg.disablemmx ? MMXFLAG_DISABLE : 0; -#endif TRACEINIT(); +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) + SDL_Init(0); +#endif + if (fontmng_init() != SUCCESS) goto fontmng_failure; @@ -265,15 +256,12 @@ main(int argc, char *argv[]) toolkit_widget_create(); scrnmng_initialize(); kbdmng_init(); - inputmng_init(); keystat_initialize(); scrnmode = 0; if (np2cfg.RASTER) { scrnmode |= SCRNMODE_HIGHCOLOR; } - if (sysmenu_create() != SUCCESS) - goto sysmenu_failure; if (scrnmng_create(scrnmode) != SUCCESS) goto scrnmng_failure; @@ -325,7 +313,7 @@ main(int argc, char *argv[]) } } -#if !defined(CPUCORE_IA32) +#if defined(SUPPORT_RESUME) if (np2oscfg.resume) { flagload(np2resumeext, "Resume", FALSE); } @@ -368,13 +356,11 @@ main(int argc, char *argv[]) scrnmng_destroy(); scrnmng_failure: - sysmenu_destroy(); - -sysmenu_failure: fontmng_terminate(); fontmng_failure: - if (sys_updates & (SYS_UPDATECFG|SYS_UPDATEOSCFG)) { + if (!np2oscfg.cfgreadonly + && (sys_updates & (SYS_UPDATECFG|SYS_UPDATEOSCFG))) { initsave(); toolwin_writeini(); kdispwin_writeini(); @@ -383,6 +369,10 @@ main(int argc, char *argv[]) skbdwin_deinitialize(); +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) + SDL_Quit(); +#endif + TRACETERM(); dosio_term(); diff --git a/x11/mousemng.h b/x11/mousemng.h index 9480bd7b..10cc4f97 100644 --- a/x11/mousemng.h +++ b/x11/mousemng.h @@ -1,6 +1,8 @@ #ifndef NP2_X11_MOUSEMNG_H__ #define NP2_X11_MOUSEMNG_H__ +G_BEGIN_DECLS + #define MOUSE_MASK 0x07 #define M_RES 0x00 @@ -23,10 +25,6 @@ #define MOUSE_RIGHTUP 3 -#ifdef __cplusplus -extern "C" { -#endif - BYTE mousemng_getstat(short *x, short *y, int clear); void mousemng_callback(void); @@ -49,8 +47,6 @@ enum { MOUSE_RATIO_100 = 0 }; -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_MOUSEMNG_H__ */ diff --git a/x11/np2.c b/x11/np2.c index 62fb04bf..515c9750 100644 --- a/x11/np2.c +++ b/x11/np2.c @@ -109,6 +109,8 @@ NP2OSCFG np2oscfg = { MMXFLAG_DISABLE, /* disablemmx */ INTERP_NEAREST, /* drawinterp */ 0, /* F11KEY */ + + FALSE, /* cfgreadonly */ }; volatile sig_atomic_t np2running = 0; @@ -128,16 +130,15 @@ char bmpfilefolder[MAX_PATH]; char modulefile[MAX_PATH]; char statpath[MAX_PATH]; +char np2appname[MAX_PATH] = "np2"; +const char np2flagext[] = "s%02d"; +const char np2resumeext[] = "sav"; + #ifndef FONTFACE #define FONTFACE "-misc-fixed-%s-r-normal--%d-*-*-*-*-*-*-*" #endif char fontname[1024] = FONTFACE; -#ifndef FONTNAME_DEFAULT -#define FONTNAME_DEFAULT "./default.ttf" -#endif -char fontfilename[MAX_PATH] = FONTNAME_DEFAULT; - char timidity_cfgfile_path[MAX_PATH]; int verbose = 0; @@ -158,15 +159,17 @@ getstatfilename(char* path, const char* ext, int size) /* * default: - * e.g. resume: "/home/user_name/.np2/sav/sav" - * statpath: "/home/user_name/.np2/sav/s00" + * e.g. resume: "/home/user_name/.np2/sav/np2.sav" + * statpath: "/home/user_name/.np2/sav/np2.s00" + * config: "/home/user_name/.np2/np2rc" * * --config option: - * e.g. resume: "/config_file_path/sav" - * statpath: "/config_file_path/s00" + * e.g. resume: "/config_file_path/sav/np2.sav" + * statpath: "/config_file_path/sav/np2.s00" * config: "/config_file_path/config_file_name" */ file_cpyname(path, statpath, size); + file_catname(path, ".", size); file_catname(path, ext, size); } @@ -204,16 +207,18 @@ flagload(const char* ext, const char* title, BOOL force) int ret; int rv = 0; - UNUSED(title); - getstatfilename(path, ext, sizeof(path)); ret = statsave_check(path, buf, sizeof(buf)); if (ret & (~STATFLAG_DISKCHG)) { - fprintf(stderr, "Couldn't restart\n"); + toolkit_msgbox(title, "Couldn't restart", + TK_MB_OK|TK_MB_ICON_ERROR); rv = 1; } else if ((!force) && (ret & STATFLAG_DISKCHG)) { - fprintf(stderr, "Conflict\n"); - rv = 1; + ret = toolkit_msgbox(title, "Conflict!\nContinue?", + TK_MB_YESNO|TK_MB_ICON_QUESTION); + if (ret != TK_MB_YES) { + rv = 1; + } } if (rv == 0) { statsave_load(path); @@ -307,8 +312,6 @@ int mainloop(void *p) { - UNUSED(p); - if (np2oscfg.NOWAIT) { joymng_sync(); mousemng_callback(); @@ -370,12 +373,14 @@ mainloop(void *p) return TRUE; } -#if defined(GCC_CPU_ARCH_IA32) int mmxflag; int havemmx(void) { +#if !defined(GCC_CPU_ARCH_IA32) + return 0; +#else /* GCC_CPU_ARCH_IA32 */ int rv; #if defined(GCC_CPU_ARCH_AMD64) @@ -403,6 +408,5 @@ havemmx(void) : "=a" (rv)); #endif /* GCC_CPU_ARCH_AMD64 */ return rv; -} - #endif /* GCC_CPU_ARCH_IA32 */ +} diff --git a/x11/np2.h b/x11/np2.h index ded574d0..fe796a9a 100644 --- a/x11/np2.h +++ b/x11/np2.h @@ -5,6 +5,8 @@ #include "joymng.h" +G_BEGIN_DECLS + typedef struct { BYTE port; BYTE def_en; @@ -62,6 +64,8 @@ typedef struct { BYTE disablemmx; BYTE drawinterp; BYTE F11KEY; + + BYTE cfgreadonly; } NP2OSCFG; @@ -85,10 +89,6 @@ enum { INTERP_HYPER = 3 }; -#ifdef __cplusplus -extern "C" { -#endif - /* np2.c */ extern volatile sig_atomic_t np2running; extern NP2OSCFG np2oscfg; @@ -110,7 +110,10 @@ extern char bmpfilefolder[MAX_PATH]; extern char modulefile[MAX_PATH]; extern char statpath[MAX_PATH]; extern char fontname[1024]; -extern char fontfilename[MAX_PATH]; + +extern char np2appname[MAX_PATH]; +extern const char np2flagext[]; +extern const char np2resumeext[]; int flagload(const char* ext, const char* title, BOOL force); int flagsave(const char* ext); @@ -121,13 +124,9 @@ void framereset(UINT cnt); void processwait(UINT cnt); int mainloop(void *); -#if defined(GCC_CPU_ARCH_IA32) extern int mmxflag; int havemmx(void); -#endif -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_NP2_H__ */ diff --git a/x11/oemtext.h b/x11/oemtext.h index 9969d71d..35a5f2ac 100644 --- a/x11/oemtext.h +++ b/x11/oemtext.h @@ -1,19 +1,15 @@ - -#ifdef __cplusplus -extern "C" { -#endif - #include "codecnv.h" #if 1 #define oemtext_sjistooem codecnv_sjistoeuc #define oemtext_oemtosjis codecnv_euctosjis #else + +G_BEGIN_DECLS + UINT oemtext_sjistooem(OEMCHAR *dst, UINT dcnt, const char *src, UINT scnt); UINT oemtext_oemtosjis(char *dst, UINT dcnt, const OEMCHAR *src, UINT scnt); -#endif -#ifdef __cplusplus -} -#endif +G_END_DECLS +#endif diff --git a/x11/scrnmng.h b/x11/scrnmng.h index 5cb0d969..2a574680 100644 --- a/x11/scrnmng.h +++ b/x11/scrnmng.h @@ -1,6 +1,8 @@ #ifndef NP2_X11_SCRNMNG_H__ #define NP2_X11_SCRNMNG_H__ +G_BEGIN_DECLS + enum { RGB24_B = 2, RGB24_G = 1, @@ -40,11 +42,6 @@ typedef struct { BYTE palchanged; } SCRNMNG; - -#ifdef __cplusplus -extern "C" { -#endif - extern SCRNMNG *scrnmngp; void scrnmng_initialize(void); @@ -86,8 +83,6 @@ BOOL scrnmng_entermenu(SCRNMENU *smenu); void scrnmng_leavemenu(void); void scrnmng_menudraw(const RECT_T *rct); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_SCRNMNG_H__ */ diff --git a/x11/sdl/Makefile b/x11/sdl/Makefile deleted file mode 100644 index 7bbef85c..00000000 --- a/x11/sdl/Makefile +++ /dev/null @@ -1,167 +0,0 @@ -PROG?= xnp2 - -SDL_CONFIG?= sdl-config - -CINCLUDES= -I. -I.. -I../.. -I../../common -I../../codecnv \ - -I../../generic -I../debug \ - -I../../i286c \ - -I../../bios -I../../cbus -I../../fdd -I../../font \ - -I../../io -I../../lio -I../../mem \ - -I../../sound -I../../sound/vermouth -I../../sound/getsnd \ - -I../../vram \ - -I../../embed -I../../embed/menu -I../../embed/menubase \ - `$(SDL_CONFIG) --cflags` \ - -DUSE_SDL=1 -COPTS?= -O2 -W -Wall -Wpointer-arith -DUSE_SDLAUDIO -SYSRESPATH?= /usr/X11R6/lib/X11/xnp2 - -CFLAGS= $(COPTS) $(CINCLUDES) -fsigned-char \ - -DSYSRESPATH=\"$(SYSRESPATH)\" -LDFLAGS= - -LIBS= `$(SDL_CONFIG) --libs` -lSDL_ttf - -CPUOBJS= ../../i286c/i286c.o ../../i286c/i286c_mn.o \ - ../../i286c/i286c_ea.o ../../i286c/i286c_0f.o \ - ../../i286c/i286c_8x.o ../../i286c/i286c_sf.o \ - ../../i286c/i286c_f6.o ../../i286c/i286c_fe.o \ - ../../i286c/i286c_rp.o \ - ../../i286c/memory.o \ - ../../i286c/v30patch.o - -CODECNVOBJS= ../../codecnv/eucsjis.o ../../codecnv/eucucs2.o \ - ../../codecnv/sjiseuc.o ../../codecnv/sjisucs2.o \ - ../../codecnv/ucs2utf8.o ../../codecnv/utf8ucs2.o - -COMMONOBJS= ../../common/strres.o ../../common/milstr.o \ - ../../common/_memory.o ../../common/textfile.o \ - ../../common/profile.o ../../common/rect.o \ - ../../common/lstarray.o ../../common/parts.o \ - ../../common/bmpdata.o \ - ../../common/mimpidef.o ../../common/wavefile.o \ - ../../common/resize.o - -BIOSOBJS= ../../bios/bios.o \ - ../../bios/bios09.o ../../bios/bios0c.o ../../bios/bios12.o \ - ../../bios/bios13.o ../../bios/bios18.o ../../bios/bios19.o \ - ../../bios/bios1a.o ../../bios/bios1b.o ../../bios/bios1c.o \ - ../../bios/bios1f.o ../../bios/sxsibios.o - -CBUSOBJS= ../../cbus/cbuscore.o ../../cbus/pc9861k.o \ - ../../cbus/mpu98ii.o ../../cbus/amd98.o \ - ../../cbus/board118.o ../../cbus/board14.o \ - ../../cbus/board26k.o ../../cbus/board86.o \ - ../../cbus/boardspb.o ../../cbus/boardx2.o \ - ../../cbus/cs4231io.o ../../cbus/pcm86io.o \ - ../../cbus/sasiio.o ../../cbus/scsicmd.o ../../cbus/scsiio.o \ - ../../cbus/ideio.o ../../cbus/atapicmd.o - -EMBEDOBJS= ../../embed/vramhdl.o ../../embed/vrammix.o - -MENUOBJS= ../../embed/menu/dlgabout.o \ - ../../embed/menu/dlgcfg.o \ - ../../embed/menu/dlgscr.o \ - ../../embed/menu/filesel.o \ - ../../embed/menu/menustr.o - -MENUBASEOBJS= ../../embed/menubase/menubase.o \ - ../../embed/menubase/menudlg.o \ - ../../embed/menubase/menuicon.o \ - ../../embed/menubase/menumbox.o \ - ../../embed/menubase/menures.o \ - ../../embed/menubase/menusys.o \ - ../../embed/menubase/menuvram.o - -FDDOBJS= ../../fdd/diskdrv.o ../../fdd/newdisk.o ../../fdd/fddfile.o \ - ../../fdd/fdd_xdf.o ../../fdd/fdd_d88.o ../../fdd/fdd_mtr.o \ - ../../fdd/sxsi.o ../../fdd/sxsihdd.o ../../fdd/sxsicd.o - -FONTOBJS= ../../font/font.o ../../font/fontdata.o ../../font/fontmake.o \ - ../../font/fontpc88.o ../../font/fontpc98.o \ - ../../font/fontv98.o ../../font/fontfm7.o ../../font/fontx1.o \ - ../../font/fontx68k.o \ - -GENERICOBJS= ../../generic/cmjasts.o \ - ../../generic/hostdrv.o ../../generic/hostdrvs.o - -IOOBJS= ../../io/iocore.o ../../io/artic.o ../../io/cgrom.o \ - ../../io/cpuio.o ../../io/crtc.o ../../io/dipsw.o \ - ../../io/dmac.o ../../io/egc.o ../../io/emsio.o \ - ../../io/fdc.o ../../io/fdd320.o ../../io/gdc.o \ - ../../io/gdc_sub.o ../../io/gdc_pset.o \ - ../../io/mouseif.o ../../io/nmiio.o ../../io/np2sysp.o \ - ../../io/pic.o ../../io/pit.o ../../io/printif.o \ - ../../io/serial.o ../../io/sysport.o ../../io/upd4990.o \ - ../../io/necio.o ../../io/epsonio.o - -LIOOBJS= ../../lio/lio.o ../../lio/gscreen.o ../../lio/gcircle.o \ - ../../lio/gpset.o ../../lio/gline.o ../../lio/gput1.o - -MEMOBJS= ../../mem/dmav30.o ../../mem/dmax86.o ../../mem/memegc.o \ - ../../mem/memems.o ../../mem/memepp.o ../../mem/memtram.o \ - ../../mem/memvga.o ../../mem/memvram.o - -NP2OBJS= ../../pccore.o ../../nevent.o ../../calendar.o ../../timing.o \ - ../../debugsub.o ../../statsave.o ../../keystat.o - -SOUNDOBJS= ../../sound/sound.o ../../sound/soundrom.o ../../sound/s98.o \ - ../../sound/adpcmc.o ../../sound/adpcmg.o \ - ../../sound/beepc.o ../../sound/beepg.o \ - ../../sound/cs4231c.o ../../sound/cs4231g.o \ - ../../sound/fmboard.o ../../sound/fmtimer.o \ - ../../sound/opngenc.o ../../sound/opngeng.o \ - ../../sound/pcm86c.o ../../sound/pcm86g.o \ - ../../sound/psggenc.o ../../sound/psggeng.o \ - ../../sound/rhythmc.o ../../sound/sndcsec.o \ - ../../sound/tms3631c.o ../../sound/tms3631g.o - -GETSNDOBJS= ../../sound/getsnd/getsnd.o ../../sound/getsnd/getsmix.o \ - ../../sound/getsnd/getmp3.o ../../sound/getsnd/getogg.o \ - ../../sound/getsnd/getwave.o - -VERMOUTHOBJS= ../../sound/vermouth/midiout.o ../../sound/vermouth/midimod.o \ - ../../sound/vermouth/midinst.o ../../sound/vermouth/midvoice.o \ - ../../sound/vermouth/midtable.o - -VRAMOBJS= ../../vram/vram.o ../../vram/scrndraw.o \ - ../../vram/sdraw.o ../../vram/sdrawq16.o \ - ../../vram/dispsync.o ../../vram/palettes.o \ - ../../vram/maketext.o ../../vram/maketgrp.o \ - ../../vram/makegrph.o ../../vram/scrnbmp.o - -SNDDRVOBJS= ../snddrv/esd.o ../snddrv/netbsd.o ../snddrv/oss.o \ - ../snddrv/sdl.o - -JOYDRVOBJS= ../joydrv/sdl.o - -X11OBJS= ../dosio.o ../ini.o ../trace.o ../cmmidi.o ../cmserial.o \ - ../np2.o ../sysmenu.o ../toolkit.o \ - ../drawmng.o ../inputmng.o ../kbdmng.o \ - ../commng.o ../joymng.o ../soundmng.o ../sysmng.o ../taskmng.o \ - ../timemng.o \ - ../main.o - -X11SDLOBJS= sdl_font.o sdl_keyboard.o sdl_mouse.o sdl_screen.o \ - sdl_main.o - -OBJS= $(CPUOBJS) $(COMMONOBJS) $(CODECNVOBJS) \ - $(BIOSOBJS) $(CBUSOBJS) $(FDDOBJS) $(MEMOBJS) \ - $(FONTOBJS) $(IOOBJS) $(LIOOBJS) $(NP2OBJS) \ - $(SOUNDOBJS) $(GETSNDOBJS) \ - $(VERMOUTHOBJS) $(VRAMOBJS) \ - $(EMBEDOBJS) $(MENUOBJS) $(MENUBASEOBJS) \ - $(GENERICOBJS) \ - $(JOYDRVOBJS) $(SNDDRVOBJS) \ - $(X11OBJS) $(X11SDLOBJS) -SRCS= $(OBJS:.o=.c) - -all: $(PROG) - -$(PROG): $(OBJS) - $(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ - -.c.o: - $(CC) -o $@ $(CFLAGS) -c $< - -clean: - -/bin/rm -f $(PROG) $(OBJS) *~ *.bak core.* *.core diff --git a/x11/sdl/sdl_font.c b/x11/sdl/sdl_font.c deleted file mode 100644 index d835f57e..00000000 --- a/x11/sdl/sdl_font.c +++ /dev/null @@ -1,584 +0,0 @@ -#include "compiler.h" -#include -#include "np2.h" -#include "fontmng.h" -#include "codecnv.h" - - -#if !defined(RESOURCE_US) // use TTF - -#define FONTMNG_CACHE 64 - -static const SDL_Color white = {0xff, 0xff, 0xff, 0}; - - -#if defined(FONTMNG_CACHE) -typedef struct { - UINT16 str; - UINT16 next; -} FNTCTBL; -#endif - -typedef struct { - int fontsize; - UINT fonttype; - int ptsize; - int fontalign; - TTF_Font *ttf_font; -#if defined(FONTMNG_CACHE) - UINT caches; - UINT cachehead; - FNTCTBL cache[FONTMNG_CACHE]; -#endif -} _FNTMNG, *FNTMNG; - - -BOOL fontmng_init(void) { - - if (TTF_Init() < 0) { - fprintf(stderr, "Couldn't initialize TTF: %s\n", SDL_GetError()); - return(FAILURE); - } -#ifndef WIN32 - atexit(TTF_Quit); -#endif - return(SUCCESS); -} - -void -fontmng_terminate(void) -{ - - TTF_Quit(); -} - -void fontmng_setdeffontname(const char *name) { - - UNUSED(name); -} - -void *fontmng_create(int size, UINT type, const char *fontface) { - - int ptsize; - int fontalign; - int fontwork; - int allocsize; - FNTMNG ret; - - if (size < 0) { - size = -size; - } - if (size < 6) { - size = 6; - } - else if (size > 128) { - size = 128; - } - - if (size < 10) { - type |= FDAT_ALIAS; - } - else if (size < 16) { - type &= ~FDAT_BOLD; - } - - ptsize = size; - if (type & FDAT_ALIAS) { - ptsize *= 2; - } - - fontalign = sizeof(_FNTDAT) + (size * size); - fontalign = (fontalign + 3) & (~3); -#if defined(FONTMNG_CACHE) - fontwork = fontalign * FONTMNG_CACHE; -#else - fontwork = fontalign; -#endif - - allocsize = sizeof(_FNTMNG) + fontwork; - ret = (FNTMNG)_MALLOC(allocsize, "font mng"); - if (ret == NULL) { - goto fmc_err1; - } - ZeroMemory(ret, allocsize); - ret->fontsize = size; - ret->fonttype = type; - ret->ptsize = ptsize; - ret->fontalign = fontalign; - ret->ttf_font = TTF_OpenFont(fontfilename, ptsize); - if (ret->ttf_font == NULL) { - fprintf(stderr, "Couldn't load %d points font from %s: %s\n", - ptsize, fontname, SDL_GetError()); - goto fmc_err2; - } - return(ret); - -fmc_err2: - _MFREE(ret); - -fmc_err1: - (void)fontface; - return(NULL); -} - -void fontmng_destroy(void *hdl) { - - FNTMNG fnt; - - if (hdl) { - fnt = (FNTMNG)hdl; - TTF_CloseFont(fnt->ttf_font); - _MFREE(hdl); - } -} - -#if defined(FONTMNG_CACHE) -static BOOL fdatgetcache(FNTMNG fhdl, const char *string, FNTDAT *pfdat) { - - BOOL r; - UINT str; - FNTCTBL *fct; - UINT pos; - UINT prev; - UINT cnt; - - r = FALSE; - str = string[0] & 0xff; - str |= (string[1] & 0xff) << 8; - fct = fhdl->cache; - cnt = fhdl->caches; - pos = fhdl->cachehead; - prev = FONTMNG_CACHE; - while(cnt--) { - if (fct[pos].str != str) { - prev = pos; - pos = fct[pos].next; - continue; - } - if (prev < FONTMNG_CACHE) { - fct[prev].next = fct[pos].next; - fct[pos].next = (UINT16)fhdl->cachehead; - fhdl->cachehead = pos; - } - r = TRUE; - break; - } - if (r == FALSE) { - if (fhdl->caches < FONTMNG_CACHE) { - pos = fhdl->caches; - fhdl->caches++; - } - else { - pos = prev; - } - fct[pos].str = (UINT16)str; - fct[pos].next = (UINT16)fhdl->cachehead; - fhdl->cachehead = pos; - } - if (pfdat) { - *pfdat = (FNTDAT)(((UINT8 *)(fhdl + 1)) + (pos * fhdl->fontalign)); - } - return(r); -} -#endif - -static void setfdathead(FNTMNG fhdl, FNTDAT fdat, int length, - SDL_Surface *text) { - - int width; - int pitch; - int height; - - if ((fhdl->fonttype & FDAT_PROPORTIONAL) && (text)) { - width = min(text->w, fhdl->ptsize); - pitch = width; - height = min(text->h, fhdl->ptsize); - if (fhdl->fonttype & FDAT_ALIAS) { - width = (width + 1) >> 1; - pitch = width >> 1; - height = (height + 1) >> 1; - } - fdat->width = width; - fdat->pitch = pitch; - fdat->height = height; - } - else { - if (length < 2) { - fdat->pitch = fhdl->fontsize >> 1; - } - else { - fdat->pitch = fhdl->fontsize; - } - fdat->width = fhdl->fontsize; - fdat->height = fhdl->fontsize; - } -} - -static void getlength1(FNTMNG fhdl, FNTDAT fdat, - const char *string, int length) { - - UINT16 utext[2]; - SDL_Surface *text; - - if (fhdl->fonttype & FDAT_PROPORTIONAL) { - codecnv_euctoucs2(utext, NELEMENTS(utext), string, length); - text = TTF_RenderUNICODE_Solid(fhdl->ttf_font, utext, white); - setfdathead(fhdl, fdat, length, text); - if (text) { - SDL_FreeSurface(text); - } - } - else { - setfdathead(fhdl, fdat, length, NULL); - } -} - -static UINT8 getpixeldepth(SDL_Surface *s, int x, int y) { - - int bpp; -const UINT8 *ptr; - - if ((x >= 0) && (x < s->w) && (y >= 0) && (y < s->h)) { - bpp = s->format->BytesPerPixel; - ptr = (UINT8 *)s->pixels + (y * s->pitch) + (x * bpp); - switch(bpp) { - case 1: - return((ptr[0] != 0)?FDAT_DEPTH:0); - - case 3: - case 4: - return(ptr[0] * FDAT_DEPTH / 255); - } - } - return(0); -} - -static void getfont1(FNTMNG fhdl, FNTDAT fdat, - const char *string, int length) { - - UINT16 utext[2]; - SDL_Surface *text; - UINT8 *dst; - int x; - int y; - int depth; - - codecnv_euctoucs2(utext, NELEMENTS(utext), string, length); - text = TTF_RenderUNICODE_Solid(fhdl->ttf_font, utext, white); - setfdathead(fhdl, fdat, length, text); - dst = (UINT8 *)(fdat + 1); - if (text) { - if (fhdl->fonttype & FDAT_ALIAS) { - for (y=0; yheight; y++) { - for (x=0; xwidth; x++) { - depth = getpixeldepth(text, x*2+0, y*2+0); - depth += getpixeldepth(text, x*2+1, y*2+0); - depth += getpixeldepth(text, x*2+0, y*2+1); - depth += getpixeldepth(text, x*2+1, y*2+1); - *dst++ = (UINT8)((depth + 2) / 4); - } - } - } - else { - for (y=0; yheight; y++) { - for (x=0; xwidth; x++) { - *dst++ = getpixeldepth(text, x, y); - } - } - } - SDL_FreeSurface(text); - } - else { - ZeroMemory(dst, fdat->width * fdat->height); - } -} - -BOOL fontmng_getsize(void *hdl, const char *string, POINT_T *pt) { - - int width; - int leng; - _FNTDAT fdat; - - if ((hdl == NULL) || (string == NULL)) { - goto fmgs_exit; - } - - width = 0; - while(1) { - leng = milstr_charsize(string); - if (!leng) { - break; - } - getlength1((FNTMNG)hdl, &fdat, string, leng); - string += leng; - width += fdat.pitch; - } - - if (pt) { - pt->x = width; - pt->y = ((FNTMNG)hdl)->fontsize; - } - return(SUCCESS); - -fmgs_exit: - return(FAILURE); -} - -BOOL fontmng_getdrawsize(void *hdl, const char *string, POINT_T *pt) { - - int width; - int posx; - int leng; - _FNTDAT fdat; - - if ((hdl == NULL) || (string == NULL)) { - goto fmgds_exit; - } - - width = 0; - posx = 0; - while(1) { - leng = milstr_charsize(string); - if (!leng) { - break; - } - getlength1((FNTMNG)hdl, &fdat, string, leng); - string += leng; - width = posx + max(fdat.width, fdat.pitch); - posx += fdat.pitch; - } - if (pt) { - pt->x = width; - pt->y = ((FNTMNG)hdl)->fontsize; - } - return(SUCCESS); - -fmgds_exit: - return(FAILURE); -} - -FNTDAT fontmng_get(void *hdl, const char *string) { - - FNTMNG fhdl; - FNTDAT fdat; - int leng; - - if ((hdl == NULL) || (string == NULL)) { - goto fmg_err; - } - fhdl = (FNTMNG)hdl; - -#if defined(FONTMNG_CACHE) - if (fdatgetcache(fhdl, string, &fdat)) { - return(fdat); - } -#else - fdat = (FNTDAT)(fhdl + 1); -#endif - - leng = milstr_charsize(string); - getfont1(fhdl, fdat, string, leng); - return(fdat); - -fmg_err: - return(NULL); -} - -#else - -#if defined(SIZE_QVGA) -#include "ank10.res" -#else -#include "ank12.res" -#endif - -typedef struct { - int fontsize; - UINT fonttype; -} _FNTMNG, *FNTMNG; - -BOOL fontmng_init(void) { - - return(SUCCESS); -} - -void fontmng_setdeffontname(const char *name) { - - (void)name; -} - -void *fontmng_create(int size, UINT type, const char *fontface) { - - int fontalign; - int allocsize; - FNTMNG ret; - - if (size < ANKFONTSIZE) { - goto fmc_err1; - } - fontalign = sizeof(_FNTDAT) + (size * size); - fontalign = (fontalign + 3) & (~3); - allocsize = sizeof(_FNTMNG) + fontalign; - ret = (FNTMNG)_MALLOC(allocsize, "font mng"); - if (ret == NULL) { - goto fmc_err1; - } - ZeroMemory(ret, allocsize); - ret->fontsize = size; - ret->fonttype = type; - return(ret); - -fmc_err1: - (void)fontface; - return(NULL); -} - -void fontmng_destroy(void *hdl) { - - if (hdl) { - _MFREE(hdl); - } -} - -static void setfdathead(FNTMNG fhdl, FNTDAT fdat, int width) { - - if (fhdl->fonttype & FDAT_PROPORTIONAL) { - fdat->width = width; - fdat->pitch = width + 1; - fdat->height = fhdl->fontsize; - } - else { - fdat->width = max(width, fhdl->fontsize >> 1); - fdat->pitch = (fhdl->fontsize >> 1) + 1; - fdat->height = fhdl->fontsize; - } -} - -static void getlength1(FNTMNG fhdl, FNTDAT fdat, - const char *string, int length) { - - int c; - - c = string[0] - 0x20; - if ((c < 0) || (c >= 0x60)) { - c = 0x1f; // ? - } - setfdathead(fhdl, fdat, ankfont[c * ANKFONTSIZE]); -} - -static void getfont1(FNTMNG fhdl, FNTDAT fdat, - const char *string, int length) { - - int c; -const UINT8 *src; - int width; - UINT8 *dst; - int x; - int y; - - c = string[0] - 0x20; - if ((c < 0) || (c >= 0x60)) { - c = 0x1f; // ? - } - src = ankfont + (c * ANKFONTSIZE); - width = *src++; - setfdathead(fhdl, fdat, width); - dst = (UINT8 *)(fdat + 1); - ZeroMemory(dst, fdat->width * fdat->height); - dst += ((fdat->height - ANKFONTSIZE) / 2) * fdat->width; - dst += (fdat->width - width) / 2; - for (y=0; y<(ANKFONTSIZE - 1); y++) { - dst += fdat->width; - for (x=0; x> x))?0xff:0x00; - } - src++; - } -} - -BRESULT fontmng_getsize(void *hdl, const char *string, POINT_T *pt) { - - FNTMNG fhdl; - int width; - _FNTDAT fdat; - int leng; - - if ((hdl == NULL) || (string == NULL)) { - goto fmgs_exit; - } - fhdl = (FNTMNG)hdl; - - width = 0; - while(1) { - leng = milstr_charsize(string); - if (!leng) { - break; - } - getlength1((FNTMNG)hdl, &fdat, string, leng); - string += leng; - width += fdat.pitch; - } - if (pt) { - pt->x = width; - pt->y = fhdl->fontsize; - } - return(SUCCESS); - -fmgs_exit: - return(FAILURE); -} - -BRESULT fontmng_getdrawsize(void *hdl, const char *string, POINT_T *pt) { - - FNTMNG fhdl; - _FNTDAT fdat; - int width; - int posx; - int leng; - - if ((hdl == NULL) || (string == NULL)) { - goto fmgds_exit; - } - fhdl = (FNTMNG)hdl; - - width = 0; - posx = 0; - while(1) { - leng = milstr_charsize(string); - if (!leng) { - break; - } - getlength1(fhdl, &fdat, string, leng); - string += leng; - width = posx + max(fdat.width, fdat.pitch); - posx += fdat.pitch; - } - if (pt) { - pt->x = width; - pt->y = fhdl->fontsize; - } - return(SUCCESS); - -fmgds_exit: - return(FAILURE); -} - -FNTDAT fontmng_get(void *hdl, const char *string) { - - FNTMNG fhdl; - FNTDAT fdat; - - if ((hdl == NULL) || (string == NULL)) { - goto fmg_err; - } - fhdl = (FNTMNG)hdl; - fdat = (FNTDAT)(fhdl + 1); - - getfont1(fhdl, fdat, string, milstr_charsize(string)); - return(fdat); - -fmg_err: - return(NULL); -} -#endif - diff --git a/x11/sdl/sdl_keyboard.c b/x11/sdl/sdl_keyboard.c deleted file mode 100644 index 1f842230..00000000 --- a/x11/sdl/sdl_keyboard.c +++ /dev/null @@ -1,213 +0,0 @@ -#include "compiler.h" - -#include "np2.h" -#include "pccore.h" -#include "iocore.h" - -#include "inputmng.h" - -#include "sdl/xnp2.h" -#include "sdl_keyboard.h" - -#include - - -/* - * inputmng - */ -const KEYBIND keybind[] = { - { SDLK_UP, KEY_UP }, - { SDLK_DOWN, KEY_DOWN }, - { SDLK_LEFT, KEY_LEFT }, - { SDLK_RIGHT, KEY_RIGHT }, - { SDLK_RETURN, KEY_ENTER }, - { SDLK_ESCAPE, KEY_MENU }, - { SDLK_TAB, KEY_SKIP } /* とりあえずね… */ -}; -const UINT nkeybind = sizeof(keybind) / sizeof(keybind[0]); - - -/* - * keyboard - */ -typedef struct { - SINT16 sdlkey; - UINT16 keycode; -} SDLKCNV; - -#define NC KEYBOARD_KC_NC - -// 101キーボード -static const SDLKCNV sdlcnv101[] = { - {SDLK_ESCAPE, 0x00}, {SDLK_1, 0x01}, - {SDLK_2, 0x02}, {SDLK_3, 0x03}, - {SDLK_4, 0x04}, {SDLK_5, 0x05}, - {SDLK_6, 0x06}, {SDLK_7, 0x07}, - - {SDLK_8, 0x08}, {SDLK_9, 0x09}, - {SDLK_0, 0x0a}, {SDLK_MINUS, 0x0b}, - {SDLK_EQUALS, 0x0c}, {SDLK_BACKSLASH, 0x0d}, - {SDLK_BACKSPACE, 0x0e}, {SDLK_TAB, 0x0f}, - - {SDLK_q, 0x10}, {SDLK_w, 0x11}, - {SDLK_e, 0x12}, {SDLK_r, 0x13}, - {SDLK_t, 0x14}, {SDLK_y, 0x15}, - {SDLK_u, 0x16}, {SDLK_i, 0x17}, - - {SDLK_o, 0x18}, {SDLK_p, 0x19}, - {SDLK_RETURN, 0x1c}, {SDLK_a, 0x1d}, - {SDLK_s, 0x1e}, {SDLK_d, 0x1f}, - - {SDLK_f, 0x20}, {SDLK_g, 0x21}, - {SDLK_h, 0x22}, {SDLK_j, 0x23}, - {SDLK_k, 0x24}, {SDLK_l, 0x25}, - - {SDLK_z, 0x29}, - {SDLK_x, 0x2a}, {SDLK_c, 0x2b}, - {SDLK_v, 0x2c}, {SDLK_b, 0x2d}, - {SDLK_n, 0x2e}, {SDLK_m, 0x2f}, - - {SDLK_COMMA, 0x30}, {SDLK_PERIOD, 0x31}, - {SDLK_SLASH, 0x32}, - {SDLK_SPACE, 0x34}, - {SDLK_PAGEUP, 0x36}, {SDLK_PAGEDOWN, 0x37}, - - {SDLK_INSERT, 0x38}, {SDLK_DELETE, 0x39}, - {SDLK_UP, 0x3a}, {SDLK_LEFT, 0x3b}, - {SDLK_RIGHT, 0x3c}, {SDLK_DOWN, 0x3d}, - {SDLK_HOME, 0x3e}, {SDLK_END, 0x3f}, - - {SDLK_KP_MINUS, 0x40}, {SDLK_KP_DIVIDE, 0x41}, - {SDLK_KP7, 0x42}, {SDLK_KP8, 0x43}, - {SDLK_KP9, 0x44}, {SDLK_KP_MULTIPLY, 0x45}, - {SDLK_KP4, 0x46}, {SDLK_KP5, 0x47}, - - {SDLK_KP6, 0x48}, {SDLK_KP_PLUS, 0x49}, - {SDLK_KP1, 0x4a}, {SDLK_KP2, 0x4b}, - {SDLK_KP3, 0x4c}, - {SDLK_KP0, 0x4e}, - - {SDLK_KP_PERIOD, 0x50}, - - {SDLK_BREAK, 0x60}, {SDLK_PRINT, 0x61}, - {SDLK_F1, 0x62}, {SDLK_F2, 0x63}, - {SDLK_F3, 0x64}, {SDLK_F4, 0x65}, - {SDLK_F5, 0x66}, {SDLK_F6, 0x67}, - - {SDLK_F7, 0x68}, {SDLK_F8, 0x69}, - {SDLK_F9, 0x6a}, {SDLK_F10, 0x6b}, - - {SDLK_RSHIFT, 0x70}, {SDLK_LSHIFT, 0x70}, - {SDLK_CAPSLOCK, 0x71}, - {SDLK_RALT, 0x73}, {SDLK_LALT, 0x73}, - {SDLK_RCTRL, 0x74}, {SDLK_LCTRL, 0x74}}; - -// {SDLK_KP_EQUALS, 0x4d}, - - -static BYTE keytbl[SDLK_LAST]; - - -BOOL -kbdmng_init(void) -{ - const SDLKCNV *key; - const SDLKCNV *keyterm; - int i; - - for (i = 0; i < SDLK_LAST; i++) { - keytbl[i] = NC; - } - - key = sdlcnv101; - keyterm = key + (sizeof(sdlcnv101) / sizeof(SDLKCNV)); - while (key < keyterm) { - keytbl[key->sdlkey] = (BYTE)key->keycode; - key++; - } - - return SUCCESS; -} - -void -sdlkbd_keydown(UINT key) -{ - BYTE data; - - if (key == SDLK_F12) { - data = kbdmng_getf12key(); - } else if (key < SDLK_LAST) { - data = keytbl[key]; - } else { - data = NC; - } - if (data != NC) { - keystat_senddata(data); - } -} - -void -sdlkbd_keyup(UINT key) -{ - BYTE data; - - if (key == SDLK_F12) { - data = kbdmng_getf12key(); - } else if (key < SDLK_LAST) { - data = keytbl[key]; - } else { - data = NC; - } - if (data != NC) { - keystat_senddata((BYTE)(data | 0x80)); - } -} - -/* - SDLK_NUMLOCK = 300, - SDLK_SCROLLOCK = 302, - SDLK_CLEAR = 12, - SDLK_PAUSE = 19, -// SDLK_EXCLAIM = 33, -// SDLK_QUOTEDBL = 34, -// SDLK_HASH = 35, -// SDLK_DOLLAR = 36, -// SDLK_AMPERSAND = 38, - SDLK_QUOTE = 39, -// SDLK_LEFTPAREN = 40, -// SDLK_RIGHTPAREN = 41, -// SDLK_ASTERISK = 42, -// SDLK_PLUS = 43, -// SDLK_COLON = 58, - SDLK_SEMICOLON = 59, -// SDLK_LESS = 60, -// SDLK_GREATER = 62, -// SDLK_QUESTION = 63, -// SDLK_AT = 64, - // Skip uppercase letters - SDLK_LEFTBRACKET = 91, - SDLK_RIGHTBRACKET = 93, -// SDLK_CARET = 94, -// SDLK_UNDERSCORE = 95, - SDLK_BACKQUOTE = 96, - - // Function keys - SDLK_F11 = 292, - SDLK_F12 = 293, - - // Key state modifier keys -// SDLK_RMETA = 309, -// SDLK_LMETA = 310, - SDLK_LSUPER = 311, - SDLK_RSUPER = 312, -// SDLK_MODE = 313, -// SDLK_COMPOSE = 314, - - // Miscellaneous function keys - SDLK_HELP = 315, -// SDLK_SYSREQ = 317, - SDLK_MENU = 319, -// SDLK_POWER = 320, -// SDLK_EURO = 321, -// SDLK_UNDO = 322, -*/ diff --git a/x11/sdl/sdl_keyboard.h b/x11/sdl/sdl_keyboard.h deleted file mode 100644 index ca4c2fee..00000000 --- a/x11/sdl/sdl_keyboard.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef NP2_X11_SDL_SDLKEYBOARD_H__ -#define NP2_X11_SDL_SDLKEYBOARD_H__ - -#include "kbdmng.h" - -void sdlkbd_keydown(UINT key); -void sdlkbd_keyup(UINT key); - -#endif /* NP2_X11_SDL_SDLKEYBOARD_H__ */ diff --git a/x11/sdl/sdl_main.c b/x11/sdl/sdl_main.c deleted file mode 100644 index 6268591e..00000000 --- a/x11/sdl/sdl_main.c +++ /dev/null @@ -1,171 +0,0 @@ -#include "compiler.h" - -#include "np2.h" -#include "dosio.h" -#include "scrndraw.h" -#include "timing.h" -#include "vramhdl.h" -#include "menubase.h" -#include "sysmenu.h" - -#include "toolkit.h" - -#include "joymng.h" -#include "mousemng.h" -#include "scrnmng.h" -#include "taskmng.h" - -#include "sdl/xnp2.h" -#include "sdl/sdl_keyboard.h" - - -/* - * toolkit - */ -const char * -gui_sdl_get_toolkit(void) -{ - - return "sdl"; -} - -BOOL -gui_sdl_arginit(int *argcp, char ***argvp) -{ - - UNUSED(argcp); - UNUSED(argvp); - - return SUCCESS; -} - -void -gui_sdl_widget_create(void) -{ -} - -void -gui_sdl_terminate(void) -{ - - SDL_Quit(); -} - -void -gui_sdl_widget_show(void) -{ -} - -void -gui_sdl_widget_mainloop(void) -{ - - while (taskmng_isavail()) { - gui_sdl_event_process(); - mainloop(0); - } -} - -void -gui_sdl_widget_quit(void) -{ - - taskmng_exit(); -} - -void -gui_sdl_event_process(void) -{ - SDL_Event e; - - if (!taskmng_isavail() || !SDL_PollEvent(&e)) { - return; - } - - switch (e.type) { - case SDL_MOUSEMOTION: - if (menuvram == NULL) { - } else { - menubase_moving(e.motion.x, e.motion.y, 0); - } - break; - - case SDL_MOUSEBUTTONUP: - switch(e.button.button) { - case SDL_BUTTON_LEFT: - if (menuvram == NULL) { - sysmenu_menuopen(0, e.button.x, e.button.y); - } else { - menubase_moving(e.button.x, e.button.y, 2); - } - break; - - case SDL_BUTTON_RIGHT: - break; - } - break; - - case SDL_MOUSEBUTTONDOWN: - switch(e.button.button) { - case SDL_BUTTON_LEFT: - if (menuvram == NULL) { - } else { - menubase_moving(e.button.x, e.button.y, 1); - } - break; - - case SDL_BUTTON_RIGHT: - break; - } - break; - - case SDL_KEYDOWN: - if (e.key.keysym.sym == SDLK_F11) { - if (menuvram == NULL) { - sysmenu_menuopen(0, 0, 0); - } else { - menubase_close(); - } - } else { - sdlkbd_keydown(e.key.keysym.sym); - } - break; - - case SDL_KEYUP: - sdlkbd_keyup(e.key.keysym.sym); - break; - - case SDL_QUIT: - taskmng_exit(); - break; - } -} - -void -gui_sdl_set_window_title(const char* str) -{ - - SDL_WM_SetCaption(str, str); -} - -void -gui_sdl_messagebox(const char *title, const char *msg) -{ - - printf("%s\n", title); - printf(msg); -} - -/* toolkit data */ -gui_toolkit_t gtk_toolkit = { - gui_sdl_get_toolkit, - gui_sdl_arginit, - gui_sdl_terminate, - gui_sdl_widget_create, - gui_sdl_widget_show, - gui_sdl_widget_mainloop, - gui_sdl_widget_quit, - gui_sdl_event_process, - gui_sdl_set_window_title, - gui_sdl_messagebox, -}; diff --git a/x11/sdl/sdl_mouse.c b/x11/sdl/sdl_mouse.c deleted file mode 100644 index 83bf4178..00000000 --- a/x11/sdl/sdl_mouse.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "compiler.h" - -#include "mousemng.h" - - -int -mousemng_initialize(void) -{ - - return SUCCESS; -} - -void -mouse_running(BYTE flg) -{ - - UNUSED(flg); -} - -void -mousemng_callback(void) -{ -} - -BYTE -mousemng_getstat(SINT16 *x, SINT16 *y, int clear) -{ - - UNUSED(clear); - - *x = 0; - *y = 0; - return 0xa0; -} - diff --git a/x11/sdl/sdl_screen.c b/x11/sdl/sdl_screen.c deleted file mode 100644 index daeddf9f..00000000 --- a/x11/sdl/sdl_screen.c +++ /dev/null @@ -1,389 +0,0 @@ -#include "compiler.h" - -#include "np2.h" - -#include "scrndraw.h" -#include "vramhdl.h" -#include "menubase.h" - -#include "scrnmng.h" - -#include "sdl/xnp2.h" - -typedef struct { - SCRNMNG sm; - - BOOL enable; - - int width; - int height; - - SDL_Surface *surface; - VRAMHDL vram; -} SDLSCRNMNG; - -typedef struct { - int width; - int height; -} SCRNSTAT; - -typedef struct { - int xalign; - int yalign; - int width; - int height; - int srcpos; - int dstpos; -} DRAWRECT; - -static SDLSCRNMNG scrnmng; -static SCRNSTAT scrnstat; -static SCRNSURF scrnsurf; - -SCRNMNG *scrnmngp = &scrnmng.sm; - - -static BOOL -calcdrawrect(SDL_Surface *surface, DRAWRECT *dr, VRAMHDL s, const RECT_T *rt) -{ - int pos; - - dr->xalign = surface->format->BytesPerPixel; - dr->yalign = surface->pitch; - dr->srcpos = 0; - dr->dstpos = 0; - dr->width = min(scrnmng.width, s->width); - dr->height = min(scrnmng.height, s->height); - if (rt) { - pos = max(rt->left, 0); - dr->srcpos += pos; - dr->dstpos += pos * dr->xalign; - dr->width = min(rt->right, dr->width) - pos; - - pos = max(rt->top, 0); - dr->srcpos += pos * s->width; - dr->dstpos += pos * dr->yalign; - dr->height = min(rt->bottom, dr->height) - pos; - } - if ((dr->width <= 0) || (dr->height <= 0)) - return(FAILURE); - return(SUCCESS); -} - -void -scrnmng_initialize(void) -{ - - scrnstat.width = 640; - scrnstat.height = 400; -} - -BOOL -scrnmng_create(BYTE mode) -{ - char s[256]; - const SDL_VideoInfo *vinfo; - SDL_Surface *surface; - SDL_PixelFormat *fmt; - int width = FULLSCREEN_WIDTH; - int height = FULLSCREEN_HEIGHT; - BOOL r; - - if (SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) { - fprintf(stderr, "Error: SDL_Init: %s\n", SDL_GetError()); - return(FAILURE); - } - SDL_WM_SetCaption(np2oscfg.titles, np2oscfg.titles); - - vinfo = SDL_GetVideoInfo(); - if (vinfo == NULL) { - fprintf(stderr,"Error: SDL_GetVideoInfo: %s\n", SDL_GetError()); - return(FAILURE); - } - SDL_VideoDriverName(s, sizeof(s)); - - surface = SDL_SetVideoMode(width, height, vinfo->vfmt->BitsPerPixel, - (mode & SCRNMODE_FULLSCREEN) - ? (SDL_HWSURFACE|SDL_ANYFORMAT|SDL_DOUBLEBUF|SDL_FULLSCREEN) - : (SDL_SWSURFACE|SDL_ANYFORMAT|SDL_DOUBLEBUF)); - if (surface == NULL) { - fprintf(stderr,"Error: SDL_SetVideoMode: %s\n", SDL_GetError()); - return(FAILURE); - } - - r = FALSE; - fmt = surface->format; -#if defined(SUPPORT_8BPP) - if (fmt->BitsPerPixel == 8) { - r = TRUE; - } -#endif -#if defined(SUPPORT_16BPP) - if ((fmt->BitsPerPixel == 16) && (fmt->Rmask == 0xf800) && - (fmt->Gmask == 0x07e0) && (fmt->Bmask == 0x001f)) { - r = TRUE; - } -#endif -#if defined(SUPPORT_24BPP) - if (fmt->BitsPerPixel == 24) { - r = TRUE; - } -#endif -#if defined(SUPPORT_32BPP) - if (fmt->BitsPerPixel == 32) { - r = TRUE; - } -#endif -#if defined(SCREEN_BPP) - if (fmt->BitsPerPixel != SCREEN_BPP) { - r = FALSE; - } -#endif - if (r) { - scrnmng.enable = TRUE; - scrnmng.width = width; - scrnmng.height = height; - scrnmng.sm.bpp = fmt->BitsPerPixel; - return SUCCESS; - } - - fprintf(stderr, "Error: Bad screen mode"); - return FAILURE; -} - -void -scrnmng_destroy(void) -{ - - scrnmng.enable = FALSE; -} - -RGB16 -scrnmng_makepal16(RGB32 pal32) -{ - RGB16 ret; - - ret = (pal32.p.r & 0xf8) << 8; - ret += (pal32.p.g & 0xfc) << 3; - ret += pal32.p.b >> 3; - - return ret; -} - -void -scrnmng_setwidth(int posx, int width) -{ - - UNUSED(posx); - - scrnstat.width = width; -} - -void -scrnmng_setheight(int posy, int height) -{ - - UNUSED(posy); - - scrnstat.height = height; -} - -void -scrnmng_setextend(int extend) -{ - - UNUSED(extend); - - /* nothing to do */ -} - -const SCRNSURF * -scrnmng_surflock(void) -{ - SDL_Surface *surface; - - if (scrnmng.vram == NULL) { - surface = SDL_GetVideoSurface(); - if (surface == NULL) { - return NULL; - } - SDL_LockSurface(surface); - scrnmng.surface = surface; - scrnsurf.ptr = (BYTE *)surface->pixels; - scrnsurf.xalign = surface->format->BytesPerPixel; - scrnsurf.yalign = surface->pitch; - scrnsurf.bpp = surface->format->BitsPerPixel; - } else { - scrnsurf.ptr = scrnmng.vram->ptr; - scrnsurf.xalign = scrnmng.vram->xalign; - scrnsurf.yalign = scrnmng.vram->yalign; - scrnsurf.bpp = scrnmng.vram->bpp; - } - scrnsurf.width = min(scrnstat.width, 640); - scrnsurf.height = min(scrnstat.height, 400); - scrnsurf.extend = 0; - return &scrnsurf; -} - -static void -draw_onmenu(void) -{ - DRAWRECT dr; - RECT_T rt; - SDL_Surface *surface; - const BYTE *p; - BYTE *q; - const BYTE *a; - int salign; - int dalign; - int x; - - rt.left = 0; - rt.top = 0; - rt.right = min(scrnstat.width, 640); - rt.bottom = min(scrnstat.height, 400); - - surface = SDL_GetVideoSurface(); - if (surface == NULL) { - return; - } - SDL_LockSurface(surface); - if (calcdrawrect(surface, &dr, menuvram, &rt) == SUCCESS) { - if (scrnmng.sm.bpp == 16) { - p = scrnmng.vram->ptr + (dr.srcpos * 2); - q = (BYTE *)surface->pixels + dr.dstpos; - a = menuvram->alpha + dr.srcpos; - salign = menuvram->width; - dalign = dr.yalign - (dr.width * dr.xalign); - do { - x = 0; - do { - if (a[x] == 0) { - *(UINT16 *)q = *(UINT16 *)(p + (x * 2)); - } - q += dr.xalign; - } while(++x < dr.width); - p += salign * 2; - q += dalign; - a += salign; - } while(--dr.height); - } - } - SDL_UnlockSurface(surface); - SDL_Flip(surface); -} - -void -scrnmng_surfunlock(const SCRNSURF *surf) -{ - SDL_Surface *surface; - - if (surf) { - if (scrnmng.vram == NULL) { - if (scrnmng.surface != NULL) { - surface = scrnmng.surface; - scrnmng.surface = NULL; - SDL_UnlockSurface(surface); - SDL_Flip(surface); - } - } else { - if (menuvram) { - draw_onmenu(); - } - } - } -} - - -/* - * menu - */ -BOOL -scrnmng_entermenu(SCRNMENU *smenu) -{ - int bpp; - - if (smenu == NULL) { - goto smem_err; - } - bpp = scrnmng.sm.bpp; - if (bpp == 32) { - bpp = 24; - } - vram_destroy(scrnmng.vram); - scrnmng.vram = vram_create(scrnmng.width, scrnmng.height, FALSE, bpp); - if (scrnmng.vram == NULL) { - goto smem_err; - } - scrndraw_redraw(); - - smenu->width = scrnmng.width; - smenu->height = scrnmng.height; - smenu->bpp = bpp; - - return SUCCESS; - -smem_err: - return FAILURE; -} - -void -scrnmng_leavemenu(void) -{ - - VRAM_RELEASE(scrnmng.vram); -} - -void -scrnmng_menudraw(const RECT_T *rct) -{ - DRAWRECT dr; - SDL_Surface *surface; - const BYTE *p; - const BYTE *q; - BYTE *r; - BYTE *a; - int salign; - int dalign; - int x; - - if ((!scrnmng.enable) && (menuvram == NULL)) - return; - - surface = SDL_GetVideoSurface(); - if (surface == NULL) - return; - - SDL_LockSurface(surface); - if (calcdrawrect(surface, &dr, menuvram, rct) == SUCCESS) { - if (scrnmng.sm.bpp == 16) { - p = scrnmng.vram->ptr + (dr.srcpos * 2); - q = menuvram->ptr + (dr.srcpos * 2); - r = (BYTE *)surface->pixels + dr.dstpos; - a = menuvram->alpha + dr.srcpos; - salign = menuvram->width; - dalign = dr.yalign - (dr.width * dr.xalign); - do { - x = 0; - do { - if (a[x]) { - if (a[x] & 2) { - *(UINT16 *)r = *(UINT16 *)(q + (x * 2)); - } - else { - a[x] = 0; - *(UINT16 *)r = *(UINT16 *)(p + (x * 2)); - } - } - r += dr.xalign; - } while (++x < dr.width); - p += salign * 2; - q += salign * 2; - r += dalign; - a += salign; - } while (--dr.height); - } - } - SDL_UnlockSurface(surface); - SDL_Flip(surface); -} diff --git a/x11/sdl/sdl_toolkit.h b/x11/sdl/sdl_toolkit.h deleted file mode 100644 index c8a5a260..00000000 --- a/x11/sdl/sdl_toolkit.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2003 NONAKA Kimihiro - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NP2_SDL_SDLTOOLKIT_H__ -#define NP2_SDL_SDLTOOLKIT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -extern gui_toolkit_t sdl_toolkit; - -const char *gui_sdl_get_toolkit(void); -BOOL gui_sdl_arginit(int *argcp, char ***argvp); -void gui_sdl_widget_create(void); -void gui_sdl_widget_show(void); -void gui_sdl_widget_mainloop(void); -void gui_sdl_widget_quit(void); -void gui_sdl_event_process(void); -void gui_sdl_set_window_title(const char* str); -void gui_sdl_messagebox(const char *title, const char *msg); - -#ifdef __cplusplus -} -#endif - -#endif /* NP2_SDL_SDLTOOLKIT_H__ */ diff --git a/x11/skbdwin.c b/x11/skbdwin.c index 7ba08392..616fc022 100644 --- a/x11/skbdwin.c +++ b/x11/skbdwin.c @@ -32,7 +32,7 @@ skbdwin_deinitialize(void) static const char ini_title[] = "NP2 software keyboard"; -static const INITBL iniitem[] = { +static INITBL iniitem[] = { {"WindposX", INITYPE_SINT32, &skbdcfg.posx, 0}, {"WindposY", INITYPE_SINT32, &skbdcfg.posy, 0}, }; diff --git a/x11/skbdwin.h b/x11/skbdwin.h index db8fbc06..046c0bda 100644 --- a/x11/skbdwin.h +++ b/x11/skbdwin.h @@ -1,5 +1,3 @@ -/* $Id: skbdwin.h,v 1.2 2004/06/18 12:32:51 monaka Exp $ */ - #ifndef NP2_X11_SKBDWIN_H__ #define NP2_X11_SKBDWIN_H__ @@ -7,6 +5,8 @@ #include "softkbd.h" +G_BEGIN_DECLS + typedef struct { int posx; int posy; @@ -23,6 +23,8 @@ void skbdwin_process(void); void skbdwin_readini(void); void skbdwin_writeini(void); +G_END_DECLS + #else /* !SUPPORT_SOFTKBD */ #define skbdwin_initialize() diff --git a/x11/soundmng.c b/x11/soundmng.c index 0d736b4d..acb38b1a 100644 --- a/x11/soundmng.c +++ b/x11/soundmng.c @@ -1,5 +1,3 @@ -/* $Id: soundmng.c,v 1.10 2007/01/23 15:48:20 monaka Exp $ */ - /* * Copyright (c) 2001-2003 NONAKA Kimihiro * All rights reserved. @@ -69,14 +67,27 @@ MIDIMOD vermouth_module = NULL; /* * driver */ -int audio_fd = -1; -snddrv_t snddrv; - +static struct { + BOOL (*drvinit)(UINT rate, UINT samples); + BOOL (*drvterm)(void); + void (*drvlock)(void); + void (*drvunlock)(void); + + void (*sndplay)(void); + void (*sndstop)(void); + + void *(*pcmload)(UINT num, const char *path); + void (*pcmdestroy)(void *cookie, UINT num); + void (*pcmplay)(void *cookie, UINT num, BOOL loop); + void (*pcmstop)(void *cookie, UINT num); + void (*pcmvolume)(void *cookie, UINT num, int volume); +} snddrv; +static int audio_fd = -1; static BOOL opened = FALSE; -static UINT mute = 0; static UINT opna_frame; static BOOL nosound_setup(void); +static BOOL sdlaudio_setup(void); static void PARTSCALL (*fnmix)(SINT16* dst, const SINT32* src, UINT size); @@ -89,24 +100,37 @@ void PARTSCALL saturation_s16mmx(SINT16 *dst, const SINT32 *src, UINT size); /* * PCM */ -static void *pcm_channel[SOUND_MAXPCM]; +typedef struct { + void *cookie; + char *path; + int volume; +} pcm_channel_t; +static pcm_channel_t *pcm_channel[SOUND_MAXPCM]; static void soundmng_pcminit(void); static void soundmng_pcmdestroy(void); +#ifndef PCM_VOULE_DEFAULT +#define PCM_VOULE_DEFAULT 25 +#endif +int pcm_volume_default = PCM_VOULE_DEFAULT; + /* * buffer */ -int sound_nextbuf; -char *sound_event; -char *sound_buffer[NSOUNDBUFFER]; +#ifndef NSOUNDBUFFER +#define NSOUNDBUFFER 2 +#endif +static char *sound_buffer[NSOUNDBUFFER]; +static int sound_nextbuf; +static char *sound_event; static BOOL buffer_init(void); static void buffer_destroy(void); static void buffer_clear(void); -UINT +static UINT calc_blocksize(UINT size) { UINT s = size; @@ -117,16 +141,6 @@ calc_blocksize(UINT size) return s; } -UINT -calc_fragment(UINT size) -{ - UINT f; - - for (f = 0; size > (UINT)(1 << f); f++) - continue; - return f; -} - static void snddrv_setup(void) { @@ -135,23 +149,12 @@ snddrv_setup(void) switch (np2oscfg.snddrv) { #if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) case SNDDRV_SDL: -#if defined(USE_SDLMIXER) - sdlmixer_setup(); -#else sdlaudio_setup(); -#endif return; #endif } } else { -#if defined(USE_SDLMIXER) - if (sdlmixer_setup() == SUCCESS) { - np2oscfg.snddrv = SNDDRV_SDL; - sysmng_update(SYS_UPDATEOSCFG); - return; - } else -#endif -#if defined(USE_SDLAUDIO) +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) if (sdlaudio_setup() == SUCCESS) { np2oscfg.snddrv = SNDDRV_SDL; sysmng_update(SYS_UPDATEOSCFG); @@ -170,10 +173,26 @@ snddrv_setup(void) sysmng_update(SYS_UPDATEOSCFG); } +static void +sounddrv_lock(void) +{ + + (*snddrv.drvlock)(); +} + +static void +sounddrv_unlock(void) +{ + + (*snddrv.drvunlock)(); +} + UINT soundmng_create(UINT rate, UINT bufmsec) { + pcm_channel_t *chan; UINT samples; + int i; if (opened || ((rate != 11025) && (rate != 22050) && (rate != 44100))) { return 0; @@ -184,6 +203,15 @@ soundmng_create(UINT rate, UINT bufmsec) else if (bufmsec > 1000) bufmsec = 1000; + for (i = 0; i < SOUND_MAXPCM; i++) { + chan = pcm_channel[i]; + if (chan != NULL && chan->cookie != NULL) { + soundmng_pcmstop(i); + (*snddrv.pcmdestroy)(chan->cookie, i); + chan->cookie = NULL; + } + } + snddrv_setup(); samples = (rate * bufmsec) / 1000 / 2; @@ -192,6 +220,7 @@ soundmng_create(UINT rate, UINT bufmsec) if ((*snddrv.drvinit)(rate, samples) != SUCCESS) { audio_fd = -1; + nosound_setup(); np2oscfg.snddrv = SNDDRV_NODRV; sysmng_update(SYS_UPDATEOSCFG); return 0; @@ -206,6 +235,15 @@ soundmng_create(UINT rate, UINT bufmsec) buffer_init(); soundmng_reset(); + for (i = 0; i < SOUND_MAXPCM; i++) { + chan = pcm_channel[i]; + if (chan != NULL && chan->path != NULL) { + chan->cookie = (*snddrv.pcmload)(i, chan->path); + if (chan->cookie != NULL) + (*snddrv.pcmvolume)(chan->cookie, i, chan->volume); + } + } + opened = TRUE; return samples; @@ -215,8 +253,10 @@ void soundmng_reset(void) { + sounddrv_lock(); sound_nextbuf = 0; sound_event = NULL; + sounddrv_unlock(); buffer_clear(); } @@ -235,8 +275,6 @@ soundmng_destroy(void) } (*snddrv.sndstop)(); (*snddrv.drvterm)(); - buffer_destroy(); - nosound_setup(); audio_fd = -1; opened = FALSE; } @@ -246,18 +284,14 @@ void soundmng_play(void) { - if (!mute) { - (*snddrv.sndplay)(); - } + (*snddrv.sndplay)(); } void soundmng_stop(void) { - if (!mute) { - (*snddrv.sndstop)(); - } + (*snddrv.sndstop)(); } BOOL @@ -276,6 +310,7 @@ soundmng_deinitialize(void) soundmng_pcmdestroy(); soundmng_destroy(); + buffer_destroy(); } void @@ -285,6 +320,7 @@ soundmng_sync(void) SINT16 *q; if (opened) { + sounddrv_lock(); if (sound_event) { pcm = sound_pcmlock(); q = (SINT16 *)sound_event; @@ -292,6 +328,7 @@ soundmng_sync(void) (*fnmix)(q, pcm, opna_frame); sound_pcmunlock(pcm); } + sounddrv_unlock(); } } @@ -331,7 +368,7 @@ soundmng_setreverse(BOOL reverse) /* * PCM function */ -void +static void soundmng_pcminit(void) { int i; @@ -341,15 +378,24 @@ soundmng_pcminit(void) } } -void +static void soundmng_pcmdestroy(void) { + pcm_channel_t *chan; int i; for (i = 0; i < SOUND_MAXPCM; i++) { - if (pcm_channel[i]) { - (*snddrv.pcmdestroy)(pcm_channel[i], i); + chan = pcm_channel[i]; + if (chan != NULL) { pcm_channel[i] = NULL; + if (chan->cookie != NULL) { + (*snddrv.pcmdestroy)(chan->cookie, i); + chan->cookie = NULL; + } + if (chan->path != NULL) { + _MFREE(chan->path); + chan->path = NULL; + } } } } @@ -357,13 +403,31 @@ soundmng_pcmdestroy(void) BOOL soundmng_pcmload(UINT num, const char *filename) { + pcm_channel_t *chan; + struct stat sb; + int rv; if (num < SOUND_MAXPCM) { - if (pcm_channel[num]) - (*snddrv.pcmdestroy)(pcm_channel[num], num); - pcm_channel[num] = (*snddrv.pcmload)(num, filename); - if (pcm_channel[num]) - return SUCCESS; + rv = stat(filename, &sb); + if (rv < 0) + return FAILURE; + + chan = pcm_channel[num]; + if (chan != NULL) { + if (strcmp(filename, chan->path)) { + _MFREE(chan->path); + chan->path = strdup(filename); + } + } else { + chan = _MALLOC(sizeof(*chan), "pcm channel"); + if (chan == NULL) + return FAILURE; + chan->cookie = NULL; + chan->path = strdup(filename); + chan->volume = pcm_volume_default; + pcm_channel[num] = chan; + } + return SUCCESS; } return FAILURE; } @@ -371,18 +435,28 @@ soundmng_pcmload(UINT num, const char *filename) void soundmng_pcmvolume(UINT num, int volume) { + pcm_channel_t *chan; - if ((num < SOUND_MAXPCM) && (pcm_channel[num])) { - (*snddrv.pcmvolume)(pcm_channel[num], num, volume); + if (num < SOUND_MAXPCM) { + chan = pcm_channel[num]; + if (chan != NULL) { + chan->volume = volume; + if (chan->cookie != NULL) + (*snddrv.pcmvolume)(chan->cookie, num, volume); + } } } BOOL soundmng_pcmplay(UINT num, BOOL loop) { + pcm_channel_t *chan; - if ((num < SOUND_MAXPCM) && (pcm_channel[num])) { - (*snddrv.pcmplay)(pcm_channel[num], num, loop); + if (num < SOUND_MAXPCM) { + chan = pcm_channel[num]; + if (chan != NULL && chan->cookie != NULL) { + (*snddrv.pcmplay)(chan->cookie, num, loop); + } return SUCCESS; } return FAILURE; @@ -391,9 +465,13 @@ soundmng_pcmplay(UINT num, BOOL loop) void soundmng_pcmstop(UINT num) { + pcm_channel_t *chan; - if ((num < SOUND_MAXPCM) && (pcm_channel[num])) { - (*snddrv.pcmstop)(pcm_channel[num], num); + if (num < SOUND_MAXPCM) { + chan = pcm_channel[num]; + if (chan != NULL && chan->cookie != NULL) { + (*snddrv.pcmstop)(chan->cookie, num); + } } } @@ -405,16 +483,19 @@ buffer_init(void) { int i; + sounddrv_lock(); for (i = 0; i < NSOUNDBUFFER; i++) { - if (sound_buffer[i]) { + if (sound_buffer[i] != NULL) { _MFREE(sound_buffer[i]); } sound_buffer[i] = (char *)_MALLOC(opna_frame, "sound buffer"); if (sound_buffer[i] == NULL) { - fprintf(stderr, "buffer_init: can't alloc memory\n"); + g_printerr("buffer_init: can't alloc memory\n"); + sounddrv_unlock(); return FAILURE; } } + sounddrv_unlock(); return SUCCESS; } @@ -423,11 +504,13 @@ buffer_clear(void) { int i; + sounddrv_lock(); for (i = 0; i < NSOUNDBUFFER; i++) { if (sound_buffer[i]) { memset(sound_buffer[i], 0, opna_frame); } } + sounddrv_unlock(); } static void @@ -435,12 +518,14 @@ buffer_destroy(void) { int i; + sounddrv_lock(); for (i = 0; i < NSOUNDBUFFER; i++) { - if (sound_buffer[i]) { + if (sound_buffer[i] != NULL) { _MFREE(sound_buffer[i]); sound_buffer[i] = NULL; } } + sounddrv_unlock(); } /* @@ -450,9 +535,6 @@ static BOOL nosound_drvinit(UINT rate, UINT bufmsec) { - UNUSED(rate); - UNUSED(bufmsec); - return SUCCESS; } @@ -463,6 +545,20 @@ nosound_drvterm(void) return SUCCESS; } +static void +nosound_drvlock(void) +{ + + /* Nothing to do */ +} + +static void +nosound_drvunlock(void) +{ + + /* Nothing to do */ +} + static void nosound_sndplay(void) { @@ -477,55 +573,38 @@ nosound_sndstop(void) /* Nothing to do */ } -void * +static void * nosound_pcmload(UINT num, const char *path) { - UNUSED(num); - UNUSED(path); - return NULL; } -void -nosound_pcmdestroy(void *chanp, UINT num) +static void +nosound_pcmdestroy(void *cookie, UINT num) { - UNUSED(chanp); - UNUSED(num); - /* Nothing to do */ } -void -nosound_pcmplay(void *chanp, UINT num, BOOL loop) +static void +nosound_pcmplay(void *cookie, UINT num, BOOL loop) { - UNUSED(chanp); - UNUSED(num); - UNUSED(loop); - /* Nothing to do */ } -void -nosound_pcmstop(void *chanp, UINT num) +static void +nosound_pcmstop(void *cookie, UINT num) { - UNUSED(chanp); - UNUSED(num); - /* Nothing to do */ } -void -nosound_pcmvolume(void *chanp, UINT num, int volume) +static void +nosound_pcmvolume(void *cookie, UINT num, int volume) { - UNUSED(chanp); - UNUSED(num); - UNUSED(volume); - /* Nothing to do */ } @@ -535,6 +614,8 @@ nosound_setup(void) snddrv.drvinit = nosound_drvinit; snddrv.drvterm = nosound_drvterm; + snddrv.drvlock = nosound_drvlock; + snddrv.drvunlock = nosound_drvunlock; snddrv.sndplay = nosound_sndplay; snddrv.sndstop = nosound_sndstop; snddrv.pcmload = nosound_pcmload; @@ -752,9 +833,13 @@ saturation_s16mmx(SINT16 *dst, const SINT32 *src, UINT size) #include +static void sdlaudio_lock(void); +static void sdlaudio_unlock(void); +static void sdlaudio_play(void); +static void sdlaudio_stop(void); static void sdlaudio_callback(void *, unsigned char *, int); -#if defined(USE_SDLAUDIO) +#if !defined(USE_SDLMIXER) static BOOL sdlaudio_init(UINT rate, UINT samples) @@ -767,18 +852,20 @@ sdlaudio_init(UINT rate, UINT samples) fmt.channels = 2; fmt.samples = samples; fmt.callback = sdlaudio_callback; - fmt.userdata = (void *)(samples * 2 * sizeof(SINT16)); + fmt.userdata = UINT32_TO_PTR(samples * 2 * sizeof(SINT16)); - rv = SDL_Init(SDL_INIT_AUDIO); + rv = SDL_InitSubSystem(SDL_INIT_AUDIO); if (rv < 0) { - fprintf(stderr, "sdlaudio_init: SDL_Init\n"); + g_printerr("sdlaudio_init: SDL_InitSubSystem(): %s\n", + SDL_GetError()); return FAILURE; } audio_fd = SDL_OpenAudio(&fmt, NULL); if (audio_fd < 0) { - fprintf(stderr, "sdlaudio_init: SDL_OpenAudio\n"); - SDL_Quit(); + g_printerr("sdlaudio_init: SDL_OpenAudio(): %s\n", + SDL_GetError()); + SDL_QuitSubSystem(SDL_INIT_AUDIO); return FAILURE; } @@ -789,32 +876,20 @@ static BOOL sdlaudio_term(void) { + SDL_PauseAudio(1); SDL_CloseAudio(); - SDL_Quit(); return SUCCESS; } -static void -sdlaudio_play(void) -{ - - SDL_PauseAudio(0); -} - -static void -sdlaudio_stop(void) -{ - - SDL_PauseAudio(1); -} - -BOOL +static BOOL sdlaudio_setup(void) { snddrv.drvinit = sdlaudio_init; snddrv.drvterm = sdlaudio_term; + snddrv.drvlock = sdlaudio_lock; + snddrv.drvunlock = sdlaudio_unlock; snddrv.sndplay = sdlaudio_play; snddrv.sndstop = sdlaudio_stop; snddrv.pcmload = nosound_pcmload; @@ -826,9 +901,7 @@ sdlaudio_setup(void) return SUCCESS; } -#endif /* USE_SDLAUDIO */ - -#if defined(USE_SDLMIXER) +#else /* USE_SDLMIXER */ #include @@ -837,33 +910,34 @@ sdlmixer_init(UINT rate, UINT samples) { int rv; - rv = SDL_Init(SDL_INIT_AUDIO); + rv = SDL_InitSubSystem(SDL_INIT_AUDIO); if (rv < 0) { - fprintf(stderr, "SDL_Init(): %s\n", SDL_GetError()); + g_printerr("sdlmixer_init: SDL_InitSubSystem(): %s\n", + SDL_GetError()); goto failure; } rv = Mix_OpenAudio(rate, AUDIO_S16SYS, 2, samples); if (rv < 0) { - fprintf(stderr, "Mix_OpenAudio(): %s\n", Mix_GetError()); + g_printerr("sdlmixer_init: Mix_OpenAudio(): %s\n", + Mix_GetError()); goto failure1; } - SDL_PauseAudio(1); rv = Mix_AllocateChannels(SOUND_MAXPCM); if (rv < 0) { - fprintf(stderr, "Mix_AllocateChannels(): %s\n", Mix_GetError()); - goto failure2; + g_printerr("sdlmixer_init: Mix_AllocateChannels(): %s\n", + Mix_GetError()); + goto failure1; } - Mix_HookMusic(sdlaudio_callback, (void*)(samples * 2 * sizeof(SINT16))); + Mix_HookMusic(sdlaudio_callback, + UINT32_TO_PTR(samples * 2 * sizeof(SINT16))); return SUCCESS; -failure2: - Mix_CloseAudio(); failure1: - SDL_Quit(); + Mix_CloseAudio(); failure: return FAILURE; } @@ -872,80 +946,59 @@ static BOOL sdlmixer_term(void) { + SDL_PauseAudio(1); Mix_CloseAudio(); - SDL_Quit(); return SUCCESS; } -static void -sdlmixer_play(void) -{ - - SDL_PauseAudio(0); -} - -static void -sdlmixer_stop(void) -{ - - SDL_PauseAudio(1); -} - static void * sdlmixer_pcmload(UINT num, const char *path) { - Mix_Chunk *chunk; - UNUSED(num); - - chunk = Mix_LoadWAV(path); - return (void *)chunk; + return Mix_LoadWAV(path); } static void -sdlmixer_pcmdestroy(void *chanp, UINT num) +sdlmixer_pcmdestroy(void *cookie, UINT num) { - Mix_Chunk *chunk = (Mix_Chunk *)chanp; + Mix_Chunk *chunk = cookie; - Mix_HaltChannel(num); Mix_FreeChunk(chunk); } static void -sdlmixer_pcmplay(void *chanp, UINT num, BOOL loop) +sdlmixer_pcmplay(void *cookie, UINT num, BOOL loop) { - Mix_Chunk *chunk = (Mix_Chunk *)chanp; + Mix_Chunk *chunk = cookie; Mix_PlayChannel(num, chunk, loop ? -1 : 1); } static void -sdlmixer_pcmstop(void *chanp, UINT num) +sdlmixer_pcmstop(void *cookie, UINT num) { - UNUSED(chanp); - Mix_HaltChannel(num); } static void -sdlmixer_pcmvolume(void *chanp, UINT num, int volume) +sdlmixer_pcmvolume(void *cookie, UINT num, int volume) { - UNUSED(chanp); - Mix_Volume(num, (MIX_MAX_VOLUME * volume) / 100); } -BOOL -sdlmixer_setup(void) +static BOOL +sdlaudio_setup(void) { snddrv.drvinit = sdlmixer_init; snddrv.drvterm = sdlmixer_term; - snddrv.sndplay = sdlmixer_play; - snddrv.sndstop = sdlmixer_stop; + snddrv.drvlock = sdlaudio_lock; + snddrv.drvunlock = sdlaudio_unlock; + snddrv.sndplay = sdlaudio_play; + snddrv.sndstop = sdlaudio_stop; snddrv.pcmload = sdlmixer_pcmload; snddrv.pcmdestroy = sdlmixer_pcmdestroy; snddrv.pcmplay = sdlmixer_pcmplay; @@ -955,22 +1008,48 @@ sdlmixer_setup(void) return SUCCESS; } -#endif /* USE_SDLMIXER */ +#endif /* !USE_SDLMIXER */ + +static void +sdlaudio_lock(void) +{ + + SDL_LockAudio(); +} + +static void +sdlaudio_unlock(void) +{ + + SDL_UnlockAudio(); +} + +static void +sdlaudio_play(void) +{ + + SDL_PauseAudio(0); +} + +static void +sdlaudio_stop(void) +{ + + SDL_PauseAudio(1); +} static void sdlaudio_callback(void *userdata, unsigned char *stream, int len) { - UINT samples = (UINT)userdata; + UINT samples = PTR_TO_UINT32(userdata); int nextbuf = sound_nextbuf; - UNUSED(len); - if (sound_event != NULL) memset(sound_event, 0, samples); sound_nextbuf = (sound_nextbuf + 1) % NSOUNDBUFFER; sound_event = sound_buffer[sound_nextbuf]; - SDL_MixAudio(stream, sound_buffer[nextbuf], samples, + SDL_MixAudio(stream, (const void *)sound_buffer[nextbuf], len, SDL_MIX_MAXVOLUME); } diff --git a/x11/soundmng.h b/x11/soundmng.h index 5633fbc4..15398abb 100644 --- a/x11/soundmng.h +++ b/x11/soundmng.h @@ -1,9 +1,7 @@ #ifndef NP2_X11_SOUNGMNG_H__ #define NP2_X11_SOUNGMNG_H__ -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS enum { SOUND_PCMSEEK, @@ -21,44 +19,6 @@ BYTE snddrv_drv2num(const char *); const char *snddrv_num2drv(BYTE); #if !defined(NOSOUND) - -#ifndef NSOUNDBUFFER -#define NSOUNDBUFFER 2 -#endif - -typedef struct { - BOOL (*drvinit)(UINT rate, UINT samples); - BOOL (*drvterm)(void); - - void (*sndplay)(void); - void (*sndstop)(void); - - void *(*pcmload)(UINT num, const char *path); - void (*pcmdestroy)(void *chanp, UINT num); - void (*pcmplay)(void *chanp, UINT num, BOOL loop); - void (*pcmstop)(void *chanp, UINT num); - void (*pcmvolume)(void *chanp, UINT num, int volume); -} snddrv_t; - -extern int audio_fd; -extern snddrv_t snddrv; - -extern int sound_nextbuf; -extern char *sound_event; -extern char *sound_buffer[NSOUNDBUFFER]; - -UINT calc_blocksize(UINT size); -UINT calc_fragment(UINT size); - -BOOL netbsdaudio_setup(void); -BOOL ossaudio_setup(void); -BOOL esdaudio_setup(void); -BOOL sdlaudio_setup(void); -BOOL sdlmixer_setup(void); - -void snddrv_play(void); -void snddrv_stop(void); - UINT soundmng_create(UINT rate, UINT ms); void soundmng_destroy(void); void soundmng_reset(void); @@ -77,15 +37,12 @@ void soundmng_deinitialize(void); BOOL soundmng_pcmload(UINT num, const char *filename); void soundmng_pcmvolume(UINT num, int volume); -void *nosound_pcmload(UINT num, const char *); -void nosound_pcmdestroy(void *chanp, UINT num); -void nosound_pcmplay(void *chanp, UINT num, BOOL loop); -void nosound_pcmstop(void *chanp, UINT num); -void nosound_pcmvolume(void *chanp, UINT num, int volume); + +extern int pcm_volume_default; #else /* NOSOUND */ -#define soundmng_create(rate, ms) 0, (void)rate, (void)ms +#define soundmng_create(rate, ms) 0 #define soundmng_destroy() #define soundmng_reset() #define soundmng_play() @@ -106,8 +63,6 @@ void nosound_pcmvolume(void *chanp, UINT num, int volume); #endif /* !NOSOUND */ -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_SOUNGMNG_H__ */ diff --git a/x11/sysmenu.c b/x11/sysmenu.c deleted file mode 100644 index 6c3f6394..00000000 --- a/x11/sysmenu.c +++ /dev/null @@ -1,527 +0,0 @@ -#include "compiler.h" - -#if defined(USE_SYSMENU) - -#include "strres.h" -#include "np2.h" -#include "pccore.h" -#include "iocore.h" -#include "pc9861k.h" -#include "mpu98ii.h" -#include "sound.h" -#include "beep.h" -#include "diskdrv.h" -#include "vramhdl.h" -#include "menubase.h" -#include "menustr.h" -#include "sysmenu.h" -#include "sysmenu.res" -#include "sysmenu.str" -#include "filesel.h" -#include "dlgcfg.h" -#include "dlgscr.h" -#include "dlgabout.h" - -#include "fontmng.h" -#include "kbdmng.h" -#include "scrnmng.h" -#include "sysmng.h" -#include "taskmng.h" - - -static void -sys_cmd(MENUID id) -{ - UINT update; - - update = 0; - switch (id) { - case MID_RESET: - pccore_cfgupdate(); - pccore_reset(); - break; - - case MID_CONFIG: - menudlg_create(DLGCFG_WIDTH, DLGCFG_HEIGHT, (char *)mstr_cfg, dlgcfg_cmd); - break; - - case MID_FDD1OPEN: - filesel_fdd(0); - break; - - case MID_FDD1EJECT: - diskdrv_setfdd(0, NULL, 0); - break; - - case MID_FDD2OPEN: - filesel_fdd(1); - break; - - case MID_FDD2EJECT: - diskdrv_setfdd(1, NULL, 0); - break; - - case MID_SASI1OPEN: - filesel_hdd(0x00); - break; - - case MID_SASI1EJECT: - diskdrv_sethdd(0x00, NULL); - break; - - case MID_SASI2OPEN: - filesel_hdd(0x01); - break; - - case MID_SASI2EJECT: - diskdrv_sethdd(0x01, NULL); - break; - -#if defined(SUPPORT_SCSI) - case MID_SCSI0OPEN: - filesel_hdd(0x20); - break; - - case MID_SCSI0EJECT: - diskdrv_sethdd(0x20, NULL); - break; - - case MID_SCSI1OPEN: - filesel_hdd(0x21); - break; - - case MID_SCSI1EJECT: - diskdrv_sethdd(0x21, NULL); - break; - - case MID_SCSI2OPEN: - filesel_hdd(0x22); - break; - - case MID_SCSI2EJECT: - diskdrv_sethdd(0x22, NULL); - break; - - case MID_SCSI3OPEN: - filesel_hdd(0x23); - break; - - case MID_SCSI3EJECT: - diskdrv_sethdd(0x23, NULL); - break -#endif - - case MID_DISPSYNC: - np2cfg.DISPSYNC ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_RASTER: - np2cfg.RASTER ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_NOWAIT: - np2oscfg.NOWAIT ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_AUTOFPS: - np2oscfg.DRAW_SKIP = 0; - update |= SYS_UPDATECFG; - break; - - case MID_60FPS: - np2oscfg.DRAW_SKIP = 1; - update |= SYS_UPDATECFG; - break; - - case MID_30FPS: - np2oscfg.DRAW_SKIP = 2; - update |= SYS_UPDATECFG; - break; - - case MID_20FPS: - np2oscfg.DRAW_SKIP = 3; - update |= SYS_UPDATECFG; - break; - - case MID_15FPS: - np2oscfg.DRAW_SKIP = 4; - update |= SYS_UPDATECFG; - break; - - case MID_SCREENOPT: - menudlg_create(DLGSCR_WIDTH, DLGSCR_HEIGHT, (char *)mstr_scropt, dlgscr_cmd); - break; - - case MID_KEY: - np2cfg.KEY_MODE = 0; - keystat_resetjoykey(); - update |= SYS_UPDATECFG; - break; - - case MID_JOY1: - np2cfg.KEY_MODE = 1; - keystat_resetjoykey(); - update |= SYS_UPDATECFG; - break; - - case MID_JOY2: - np2cfg.KEY_MODE = 2; - keystat_resetjoykey(); - update |= SYS_UPDATECFG; - break; - - case MID_MOUSEKEY: - np2cfg.KEY_MODE = 3; - keystat_resetjoykey(); - update |= SYS_UPDATECFG; - break; - - case MID_XSHIFT: - np2cfg.XSHIFT ^= 1; - keystat_forcerelease(0x70); - update |= SYS_UPDATECFG; - break; - - case MID_XCTRL: - np2cfg.XSHIFT ^= 2; - keystat_forcerelease(0x74); - update |= SYS_UPDATECFG; - break; - - case MID_XGRPH: - np2cfg.XSHIFT ^= 4; - keystat_forcerelease(0x73); - update |= SYS_UPDATECFG; - break; - - case MID_F12MOUSE: - np2oscfg.F12KEY = 0; - kbdmng_resetf12(); - update |= SYS_UPDATEOSCFG; - break; - - case MID_F12COPY: - np2oscfg.F12KEY = 1; - kbdmng_resetf12(); - update |= SYS_UPDATEOSCFG; - break; - - case MID_F12STOP: - np2oscfg.F12KEY = 2; - kbdmng_resetf12(); - update |= SYS_UPDATEOSCFG; - break; - - case MID_F12EQU: - np2oscfg.F12KEY = 3; - kbdmng_resetf12(); - update |= SYS_UPDATEOSCFG; - break; - - case MID_F12COMMA: - np2oscfg.F12KEY = 4; - kbdmng_resetf12(); - update |= SYS_UPDATEOSCFG; - break; - - case MID_BEEPOFF: - np2cfg.BEEP_VOL = 0; - beep_setvol(0); - update |= SYS_UPDATECFG; - break; - - case MID_BEEPLOW: - np2cfg.BEEP_VOL = 1; - beep_setvol(1); - update |= SYS_UPDATECFG; - break; - - case MID_BEEPMID: - np2cfg.BEEP_VOL = 2; - beep_setvol(2); - update |= SYS_UPDATECFG; - break; - - case MID_BEEPHIGH: - np2cfg.BEEP_VOL = 3; - beep_setvol(3); - update |= SYS_UPDATECFG; - break; - - case MID_NOSOUND: - np2cfg.SOUND_SW = 0x00; - update |= SYS_UPDATECFG; - break; - - case MID_PC9801_14: - np2cfg.SOUND_SW = 0x01; - update |= SYS_UPDATECFG; - break; - - case MID_PC9801_26K: - np2cfg.SOUND_SW = 0x02; - update |= SYS_UPDATECFG; - break; - - case MID_PC9801_86: - np2cfg.SOUND_SW = 0x04; - update |= SYS_UPDATECFG; - break; - - case MID_PC9801_26_86: - np2cfg.SOUND_SW = 0x06; - update |= SYS_UPDATECFG; - break; - - case MID_PC9801_86_CB: - np2cfg.SOUND_SW = 0x14; - update |= SYS_UPDATECFG; - break; - - case MID_PC9801_118: - np2cfg.SOUND_SW = 0x08; - update |= SYS_UPDATECFG; - break; - - case MID_SPEAKBOARD: - np2cfg.SOUND_SW = 0x20; - update |= SYS_UPDATECFG; - break; - - case MID_SPARKBOARD: - np2cfg.SOUND_SW = 0x40; - update |= SYS_UPDATECFG; - break; - - case MID_AMD98: - np2cfg.SOUND_SW = 0x80; - update |= SYS_UPDATECFG; - break; - -#if 0 - case IDM_SNDOPT: - winuienter(); - dialog_sndopt(hWnd); - winuileave(); - break; -#endif - - case MID_SEEKSND: - np2cfg.MOTOR ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_MEM640: - np2cfg.EXTMEM = 0; - update |= SYS_UPDATECFG; - break; - - case MID_MEM16: - np2cfg.EXTMEM = 1; - update |= SYS_UPDATECFG; - break; - - case MID_MEM36: - np2cfg.EXTMEM = 3; - update |= SYS_UPDATECFG; - break; - - case MID_MEM76: - np2cfg.EXTMEM = 7; - update |= SYS_UPDATECFG; - break; - -#if 0 - case IDM_MOUSE: - mousemng_toggle(MOUSEPROC_SYSTEM); - xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); - update |= SYS_UPDATECFG; - break; - - case IDM_SERIAL1: - winuienter(); - dialog_serial(hWnd); - winuileave(); - break; - - case IDM_MPUPC98: - winuienter(); - DialogBox(hInst, MAKEINTRESOURCE(IDD_MPUPC98), hWnd, (DLGPROC)MidiDialogProc); - winuileave(); - break; -#endif - - case MID_MIDIPANIC: - rs232c_midipanic(); - mpu98ii_midipanic(); - pc9861k_midipanic(); - break; - -#if 0 - case IDM_BMPSAVE: - winuienter(); - dialog_writebmp(hWnd); - winuileave(); - break; - - case IDM_S98LOGGING: - winuienter(); - dialog_s98(hWnd); - winuileave(); - break; - - case IDM_DISPCLOCK: - xmenu_setdispclk(np2oscfg.DISPCLK ^ 1); - update |= SYS_UPDATECFG; - break; - - case IDM_DISPFRAME: - xmenu_setdispclk(np2oscfg.DISPCLK ^ 2); - update |= SYS_UPDATECFG; - break; - - case IDM_CALENDAR: - winuienter(); - DialogBox(hInst, MAKEINTRESOURCE(IDD_CALENDAR), - hWnd, (DLGPROC)ClndDialogProc); - winuileave(); - break; - - case IDM_ALTENTER: - xmenu_setshortcut(np2oscfg.shortcut ^ 1); - update |= SYS_UPDATECFG; - break; - - case IDM_ALTF4: - xmenu_setshortcut(np2oscfg.shortcut ^ 2); - update |= SYS_UPDATECFG; - break; -#endif - - case MID_JOYX: - np2cfg.BTN_MODE ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_RAPID: - np2cfg.BTN_RAPID ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_MSRAPID: - np2cfg.MOUSERAPID ^= 1; - update |= SYS_UPDATECFG; - break; - - case MID_ABOUT: - menudlg_create(DLGABOUT_WIDTH, DLGABOUT_HEIGHT, - (char *)mstr_about, dlgabout_cmd); - break; - -#if defined(MENU_TASKMINIMIZE) - case SID_MINIMIZE: - taskmng_minimize(); - break; -#endif - - case MID_EXIT: - case SID_CLOSE: - taskmng_exit(); - break; - } - sysmng_update(update); -} - - -// ---- - -BOOL -sysmenu_create(void) -{ - - if (menubase_create() != SUCCESS) { - goto smcre_err; - } - menuicon_regist(MICON_NP2, &np2icon); - if (menusys_create(s_main, sys_cmd, MICON_NP2, str_np2)) { - goto smcre_err; - } - return SUCCESS; - -smcre_err: - return FAILURE; -} - -void -sysmenu_destroy(void) -{ - - menubase_close(); - menubase_destroy(); - menusys_destroy(); -} - -BOOL -sysmenu_menuopen(UINT menutype, int x, int y) -{ - BYTE b; - - UNUSED(menutype); - - menusys_setcheck(MID_DISPSYNC, (np2cfg.DISPSYNC & 1)); - menusys_setcheck(MID_RASTER, (np2cfg.RASTER & 1)); - menusys_setcheck(MID_NOWAIT, (np2oscfg.NOWAIT & 1)); - b = np2oscfg.DRAW_SKIP; - menusys_setcheck(MID_AUTOFPS, (b == 0)); - menusys_setcheck(MID_60FPS, (b == 1)); - menusys_setcheck(MID_30FPS, (b == 2)); - menusys_setcheck(MID_20FPS, (b == 3)); - menusys_setcheck(MID_15FPS, (b == 4)); - b = np2cfg.KEY_MODE; - menusys_setcheck(MID_KEY, (b == 0)); - menusys_setcheck(MID_JOY1, (b == 1)); - menusys_setcheck(MID_JOY2, (b == 2)); - menusys_setcheck(MID_MOUSEKEY, (b == 3)); - b = np2cfg.XSHIFT; - menusys_setcheck(MID_XSHIFT, (b & 1)); - menusys_setcheck(MID_XCTRL, (b & 2)); - menusys_setcheck(MID_XGRPH, (b & 4)); - b = np2oscfg.F12KEY; - menusys_setcheck(MID_F12MOUSE, (b == 0)); - menusys_setcheck(MID_F12COPY, (b == 1)); - menusys_setcheck(MID_F12STOP, (b == 2)); - menusys_setcheck(MID_F12EQU, (b == 3)); - menusys_setcheck(MID_F12COMMA, (b == 4)); - b = np2cfg.BEEP_VOL & 3; - menusys_setcheck(MID_BEEPOFF, (b == 0)); - menusys_setcheck(MID_BEEPLOW, (b == 1)); - menusys_setcheck(MID_BEEPMID, (b == 2)); - menusys_setcheck(MID_BEEPHIGH, (b == 3)); - b = np2cfg.SOUND_SW; - menusys_setcheck(MID_NOSOUND, (b == 0x00)); - menusys_setcheck(MID_PC9801_14, (b == 0x01)); - menusys_setcheck(MID_PC9801_26K, (b == 0x02)); - menusys_setcheck(MID_PC9801_86, (b == 0x04)); - menusys_setcheck(MID_PC9801_26_86, (b == 0x06)); - menusys_setcheck(MID_PC9801_86_CB, (b == 0x14)); - menusys_setcheck(MID_PC9801_118, (b == 0x08)); - menusys_setcheck(MID_SPEAKBOARD, (b == 0x20)); - menusys_setcheck(MID_SPARKBOARD, (b == 0x40)); - menusys_setcheck(MID_AMD98, (b == 0x80)); - menusys_setcheck(MID_SEEKSND, (np2cfg.MOTOR & 1)); - b = np2cfg.EXTMEM; - menusys_setcheck(MID_MEM640, (b == 0)); - menusys_setcheck(MID_MEM16, (b == 1)); - menusys_setcheck(MID_MEM36, (b == 3)); - menusys_setcheck(MID_MEM76, (b == 7)); - menusys_setcheck(MID_JOYX, (np2cfg.BTN_MODE & 1)); - menusys_setcheck(MID_RAPID, (np2cfg.BTN_RAPID & 1)); - menusys_setcheck(MID_MSRAPID, (np2cfg.MOUSERAPID & 1)); - - return menusys_open(x, y); -} - -#endif /* USE_SYSMENU */ diff --git a/x11/sysmenu.h b/x11/sysmenu.h deleted file mode 100644 index 42d522db..00000000 --- a/x11/sysmenu.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef NP2_X11_SYSMENU_H__ -#define NP2_X11_SYSMENU_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - MENUTYPE_NORMAL = 0 -}; - -#if defined(USE_SYSMENU) - -BOOL sysmenu_create(void); -void sysmenu_destroy(void); -BOOL sysmenu_menuopen(UINT menutype, int x, int y); - -#else - -#define sysmenu_create() SUCCESS -#define sysmenu_destroy() -#define sysmenu_menuopen(menutype, x, y) - -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* NP2_X11_SYSMENU_H__ */ diff --git a/x11/sysmenu.res b/x11/sysmenu.res deleted file mode 100644 index fa1d4822..00000000 --- a/x11/sysmenu.res +++ /dev/null @@ -1,100 +0,0 @@ - -enum { - MID_STATIC = 0, - MID_POPUP, - - MID_RESET, - MID_CONFIG, - MID_NEWDISK, - MID_CHANGEFONT, - MID_EXIT, - - MID_FDD1OPEN, - MID_FDD1EJECT, - MID_FDD2OPEN, - MID_FDD2EJECT, - - MID_SASI1OPEN, - MID_SASI1EJECT, - MID_SASI2OPEN, - MID_SASI2EJECT, - - MID_SCSI0OPEN, - MID_SCSI0EJECT, - MID_SCSI1OPEN, - MID_SCSI1EJECT, - MID_SCSI2OPEN, - MID_SCSI2EJECT, - MID_SCSI3OPEN, - MID_SCSI3EJECT, - - MID_WINDOW, - MID_FULLSCREEN, - MID_ROLNORMAL, - MID_ROLLEFT, - MID_ROLRIGHT, - MID_DISPSYNC, - MID_RASTER, - MID_NOWAIT, - MID_AUTOFPS, - MID_60FPS, - MID_30FPS, - MID_20FPS, - MID_15FPS, - MID_SCREENOPT, - - MID_KEY, - MID_JOY1, - MID_JOY2, - MID_MOUSEKEY, - MID_XSHIFT, - MID_XCTRL, - MID_XGRPH, - MID_F12MOUSE, - MID_F12COPY, - MID_F12STOP, - MID_F12EQU, - MID_F12COMMA, - MID_BEEPOFF, - MID_BEEPLOW, - MID_BEEPMID, - MID_BEEPHIGH, - MID_NOSOUND, - MID_PC9801_14, - MID_PC9801_26K, - MID_PC9801_86, - MID_PC9801_26_86, - MID_PC9801_86_CB, - MID_PC9801_118, - MID_SPEAKBOARD, - MID_SPARKBOARD, - MID_AMD98, - MID_JASTSND, - MID_SEEKSND, - MID_MEM640, - MID_MEM16, - MID_MEM36, - MID_MEM76, - MID_MOUSE, - MID_SERIAL1, - MID_MPUPC98, - MID_MIDIPANIC, - MID_SNDOPT, - - MID_BMPSAVE, - MID_S98LOGGING, - MID_CALENDAR, - MID_ALTENTER, - MID_ALTF4, - MID_DISPCLOCK, - MID_DISPFRAME, - MID_JOYX, - MID_RAPID, - MID_MSRAPID, - MID_ABOUT -}; - -enum { - MICON_NP2 = MICON_USER -}; - diff --git a/x11/sysmenu.str b/x11/sysmenu.str deleted file mode 100644 index 82eac2dc..00000000 --- a/x11/sysmenu.str +++ /dev/null @@ -1,265 +0,0 @@ - -static const char str_emulate[] = "Emulate"; -static const char str_reset[] = "Reset"; -static const char str_config[] = "Configure..."; -static const char str_newdisk[] = "NewDisk..."; -static const char str_font[] = "Font..."; -static const char str_exit[] = "Exit"; - -static const char str_fdd1[] = "FDD1"; -static const char str_fdd2[] = "FDD2"; -static const char str_harddisk[] = "HDD"; -static const char str_sasi1[] = "SASI1"; -static const char str_sasi2[] = "SASI2"; -static const char str_open[] = "Open..."; -static const char str_eject[] = "Eject"; -static const char str_remove[] = "Remove"; - -static const char str_screen[] = "Screen"; -static const char str_window[] = "Window"; -static const char str_fullscrn[] = "FullScreen"; -static const char str_normal[] = "Normal"; -static const char str_leftrol[] = "Left Rotated"; -static const char str_rightrol[] = "Right Rotated"; -static const char str_dispsync[] = "Disp Vsync"; -static const char str_realpal[] = "Real Palettes"; -static const char str_nowait[] = "No Wait"; -static const char str_autoframe[] = "Auto frame"; -static const char str_60fps[] = "Full frame"; -static const char str_30fps[] = "1/2 frame"; -static const char str_20fps[] = "1/3 frame"; -static const char str_15fps[] = "1/4 frame"; -static const char str_scropt[] = "Screen option..."; - -static const char str_device[] = "Device"; -static const char str_keyboard[] = "Keyboard"; -static const char str_joykey1[] = "JoyKey-1"; -static const char str_joykey2[] = "JoyKey-2"; -static const char str_mousekey[] = "Mouse-Key"; -static const char str_mecshift[] = "mechanical SHIFT"; -static const char str_mecctrl[] = "mechanical CTRL"; -static const char str_mecgrph[] = "mechanical GRPH"; -static const char str_f12mouse[] = "F12 = Mouse"; -static const char str_f12copy[] = "F12 = Copy"; -static const char str_f12stop[] = "F12 = Stop"; -static const char str_f12equ[] = "F12 = tenkey [=]"; -static const char str_f12comma[] = "F12 = tenkey [ , ]"; - -static const char str_beep[] = "Beep"; -static const char str_off[] = "off"; -static const char str_low[] = "low"; -static const char str_mid[] = "mid"; -static const char str_high[] = "high"; - -static const char str_soundboard[] = "SoundBoard"; -static const char str_nosound[] = "Disable boards"; -static const char str_pc980114[] = "PC-9801-14"; -static const char str_pc980126k[] = "PC-9801-26K"; -static const char str_pc980186[] = "PC-9801-86"; -static const char str_pc980126k86[] = "PC-9801-26K + 86"; -static const char str_pc980186cb[] = "PC-9801-86 + ADPCM"; -static const char str_pc9801118[] = "PC-9801-118"; -static const char str_spreakboard[] = "Speak board"; -static const char str_sparkboard[] = "Spark board"; -static const char str_amd98[] = "AMD-98"; -static const char str_jastsnd[] = "JAST SOUND"; -static const char str_seeksound[] = "Seek Sound"; - -static const char str_memory[] = "Memory"; -static const char str_mem640[] = "640KB"; -static const char str_mem16[] = "1.6MB"; -static const char str_mem36[] = "3.6MB"; -static const char str_mem76[] = "7.6MB"; - -static const char str_mouse[] = "Mouse"; -static const char str_seropt[] = "Serial option..."; -static const char str_midiopt[] = "MIDI option..."; -static const char str_midipanic[] = "MIDI Panic"; -static const char str_sndopt[] = "Sound option..."; - -static const char str_other[] = "Other"; -static const char str_bmpsave[] = "BMP Save..."; -static const char str_s98log[] = "S98 logging..."; -static const char str_calendar[] = "Calendar..."; -static const char str_shortcut[] = "Shortcut Key"; -static const char str_altenter[] = "Alt+Enter"; -static const char str_altf4[] = "Alt+F4"; -static const char str_clockdisp[] = "Clock Disp"; -static const char str_framedisp[] = "Frame Disp"; -static const char str_joyrev[] = "Joy Reverse"; -static const char str_joyrapid[] = "Joy Rapid"; -static const char str_mouserapid[] = "Mouse Rapid"; -static const char str_about[] = "About..."; - -static const MSYSITEM s_emu[] = { - {str_reset, NULL, MID_RESET, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_config, NULL, MID_CONFIG, 0}, - {str_newdisk, NULL, MID_NEWDISK, MENU_GRAY}, - {str_font, NULL, MID_CHANGEFONT, MENU_GRAY}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_exit, NULL, MID_EXIT, MENU_DELETED}}; - -static const MSYSITEM s_fdd1[] = { - {str_open, NULL, MID_FDD1OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_eject, NULL, MID_FDD1EJECT, MENU_DELETED}}; - -static const MSYSITEM s_fdd2[] = { - {str_open, NULL, MID_FDD2OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_eject, NULL, MID_FDD2EJECT, MENU_DELETED}}; - -static const MSYSITEM s_sasi1[] = { - {str_open, NULL, MID_SASI1OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_remove, NULL, MID_SASI1EJECT, MENU_DELETED}}; - -static const MSYSITEM s_sasi2[] = { - {str_open, NULL, MID_SASI2OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_remove, NULL, MID_SASI2EJECT, MENU_DELETED}}; - -#if defined(SUPPORT_SCSI) -static const char str_scsi0[] = "SCSI #0"; -static const char str_scsi1[] = "SCSI #1"; -static const char str_scsi2[] = "SCSI #2"; -static const char str_scsi3[] = "SCSI #3"; - -static const MSYSITEM s_scsi0[] = { - {str_open, NULL, MID_SCSI0OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_remove, NULL, MID_SCSI0EJECT, MENU_DELETED}}; - -static const MSYSITEM s_scsi1[] = { - {str_open, NULL, MID_SCSI1OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_remove, NULL, MID_SCSI1EJECT, MENU_DELETED}}; - -static const MSYSITEM s_scsi2[] = { - {str_open, NULL, MID_SCSI2OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_remove, NULL, MID_SCSI2EJECT, MENU_DELETED}}; - -static const MSYSITEM s_scsi3[] = { - {str_open, NULL, MID_SCSI3OPEN, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_remove, NULL, MID_SCSI3EJECT, MENU_DELETED}}; - -static const MSYSITEM s_hdd[] = { - {str_sasi1, s_sasi1, MID_STATIC, 0}, - {str_sasi2, s_sasi2, MID_STATIC, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_scsi0, s_scsi0, MID_STATIC, 0}, - {str_scsi1, s_scsi1, MID_STATIC, 0}, - {str_scsi2, s_scsi2, MID_STATIC, 0}, - {str_scsi3, s_scsi3, MID_STATIC, MENU_DELETED}}; -#else -static const MSYSITEM s_hdd[] = { - {str_sasi1, s_sasi1, MID_STATIC, 0}, - {str_sasi2, s_sasi2, MID_STATIC, MENU_DELETED}}; -#endif - -static const MSYSITEM s_screen[] = { - {str_window, NULL, MID_WINDOW, MENU_GRAY}, - {str_fullscrn, NULL, MID_FULLSCREEN, MENU_GRAY}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_normal, NULL, MID_ROLNORMAL, MENU_GRAY}, - {str_leftrol, NULL, MID_ROLLEFT, MENU_GRAY}, - {str_rightrol, NULL, MID_ROLRIGHT, MENU_GRAY}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_dispsync, NULL, MID_DISPSYNC, 0}, - {str_realpal, NULL, MID_RASTER, 0}, - {str_nowait, NULL, MID_NOWAIT, 0}, - {str_autoframe, NULL, MID_AUTOFPS, 0}, - {str_60fps, NULL, MID_60FPS, 0}, - {str_30fps, NULL, MID_30FPS, 0}, - {str_20fps, NULL, MID_20FPS, 0}, - {str_15fps, NULL, MID_15FPS, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_scropt, NULL, MID_SCREENOPT, MENU_DELETED}}; - -static const MSYSITEM s_keybd[] = { - {str_keyboard, NULL, MID_KEY, 0}, - {str_joykey1, NULL, MID_JOY1, 0}, - {str_joykey2, NULL, MID_JOY2, 0}, - {str_mousekey, NULL, MID_MOUSEKEY, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_mecshift, NULL, MID_XSHIFT, 0}, - {str_mecctrl, NULL, MID_XCTRL, 0}, - {str_mecgrph, NULL, MID_XGRPH, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_f12mouse, NULL, MID_F12MOUSE, 0}, - {str_f12copy, NULL, MID_F12COPY, 0}, - {str_f12stop, NULL, MID_F12STOP, 0}, - {str_f12equ, NULL, MID_F12EQU, 0}, - {str_f12comma, NULL, MID_F12COMMA, MENU_DELETED}}; - -static const MSYSITEM s_beep[] = { - {str_off, NULL, MID_BEEPOFF, 0}, - {str_low, NULL, MID_BEEPLOW, 0}, - {str_mid, NULL, MID_BEEPMID, 0}, - {str_high, NULL, MID_BEEPHIGH, MENU_DELETED}}; - -static const MSYSITEM s_snd[] = { - {str_nosound, NULL, MID_NOSOUND, 0}, - {str_pc980114, NULL, MID_PC9801_14, 0}, - {str_pc980126k, NULL, MID_PC9801_26K, 0}, - {str_pc980186, NULL, MID_PC9801_86, 0}, - {str_pc980126k86, NULL, MID_PC9801_26_86, 0}, - {str_pc980186cb, NULL, MID_PC9801_86_CB, 0}, - {str_pc9801118, NULL, MID_PC9801_118, 0}, - {str_spreakboard, NULL, MID_SPEAKBOARD, 0}, - {str_sparkboard, NULL, MID_SPARKBOARD, 0}, - {str_amd98, NULL, MID_AMD98, 0}, - {str_jastsnd, NULL, MID_JASTSND, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_seeksound, NULL, MID_SEEKSND, MENU_DELETED}}; - -static const MSYSITEM s_mem[] = { - {str_mem640, NULL, MID_MEM640, 0}, - {str_mem16, NULL, MID_MEM16, 0}, - {str_mem36, NULL, MID_MEM36, 0}, - {str_mem76, NULL, MID_MEM76, MENU_DELETED}}; - -static const MSYSITEM s_device[] = { - {str_keyboard, s_keybd, MID_STATIC, 0}, - {str_beep, s_beep, MID_STATIC, 0}, - {str_soundboard, s_snd, MID_STATIC, 0}, - {str_memory, s_mem, MID_STATIC, 0}, - {str_mouse, NULL, MID_MOUSE, MENU_GRAY}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_seropt, NULL, MID_SERIAL1, MENU_GRAY}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_midiopt, NULL, MID_MPUPC98, MENU_GRAY}, - {str_midipanic, NULL, MID_MIDIPANIC, 0}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_sndopt, NULL, MID_SNDOPT, MENU_GRAY | - MENU_DELETED}}; - -static const MSYSITEM s_sc[] = { - {str_altenter, NULL, MID_ALTENTER, MENU_GRAY}, - {str_altf4, NULL, MID_ALTF4, MENU_DELETED}}; - -static const MSYSITEM s_other[] = { - {str_bmpsave, NULL, MID_BMPSAVE, MENU_GRAY}, - {str_s98log, NULL, MID_S98LOGGING, MENU_GRAY}, - {str_calendar, NULL, MID_CALENDAR, MENU_GRAY}, - {str_shortcut, s_sc, MID_STATIC, MENU_GRAY}, - {str_clockdisp, NULL, MID_DISPCLOCK, MENU_GRAY}, - {str_framedisp, NULL, MID_DISPFRAME, MENU_GRAY}, - {str_joyrev, NULL, MID_JOYX, 0}, - {str_joyrapid, NULL, MID_RAPID, 0}, - {str_mouserapid, NULL, MID_MSRAPID, MENU_GRAY}, - {NULL, NULL, MID_STATIC, MENU_SEPARATOR}, - {str_about, NULL, MID_ABOUT, MENU_DELETED}}; - -static const MSYSITEM s_main[] = { - {str_emulate, s_emu, MID_STATIC, 0}, - {str_fdd1, s_fdd1, MID_STATIC, 0}, - {str_fdd2, s_fdd2, MID_STATIC, 0}, - {str_harddisk, s_hdd, MID_STATIC, 0}, - {str_screen, s_screen, MID_STATIC, 0}, - {str_device, s_device, MID_STATIC, 0}, - {str_other, s_other, MID_STATIC, MENU_DELETED}}; - diff --git a/x11/sysmng.c b/x11/sysmng.c index 564f9a79..3a8a0a7a 100644 --- a/x11/sysmng.c +++ b/x11/sysmng.c @@ -77,14 +77,14 @@ sysmng_updatecaption(BYTE flag) clockstr[0] = '\0'; if (np2oscfg.DISPCLK & 2) { if (workclock.fps) { - SPRINTF(clockstr, " - %u.%1uFPS", workclock.fps / 10, workclock.fps % 10); + g_snprintf(clockstr, sizeof(clockstr), " - %u.%1uFPS", workclock.fps / 10, workclock.fps % 10); } else { milstr_ncpy(clockstr, " - 0FPS", sizeof(clockstr)); } } if (np2oscfg.DISPCLK & 1) { - SPRINTF(work, " %2u.%03uMHz", workclock.khz / 1000, workclock.khz % 1000); + g_snprintf(work, sizeof(work), " %2u.%03uMHz", workclock.khz / 1000, workclock.khz % 1000); if (clockstr[0] == '\0') { milstr_ncpy(clockstr, " -", sizeof(clockstr)); } diff --git a/x11/sysmng.h b/x11/sysmng.h index c62f0151..3ea1e54c 100644 --- a/x11/sysmng.h +++ b/x11/sysmng.h @@ -3,7 +3,9 @@ #include "toolwin.h" -// 、ノ。シ、ヌ、筅、、、トフテホキマ +// 縺ゥ繝シ縺ァ繧ゅ>縺騾夂衍邉サ + +G_BEGIN_DECLS enum { SYS_UPDATECFG = 0x0001, @@ -19,11 +21,6 @@ enum { SYS_UPDATESERIAL1 = 0x0400 }; - -#ifdef __cplusplus -extern "C" { -#endif - extern UINT sys_updates; #define sysmng_initialize() \ @@ -51,8 +48,6 @@ void sysmng_workclockreset(void); BOOL sysmng_workclockrenewal(void); void sysmng_updatecaption(BYTE flag); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_SYSMNG_H__ */ diff --git a/x11/taskmng.c b/x11/taskmng.c index 2afe674c..378ad430 100644 --- a/x11/taskmng.c +++ b/x11/taskmng.c @@ -22,7 +22,7 @@ taskmng_sleep(UINT32 tick) base = GETTICK(); while (taskmng_isavail() && (((now = GETTICK()) - base) < tick)) { toolkit_event_process(); - usleep(tick - (now - base) / 2); + usleep((tick - (now - base) / 2) * 1000); } return taskmng_isavail(); } diff --git a/x11/taskmng.h b/x11/taskmng.h index 2e091312..e4646815 100644 --- a/x11/taskmng.h +++ b/x11/taskmng.h @@ -5,9 +5,7 @@ #include "np2.h" -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS void taskmng_initialize(void); BOOL taskmng_sleep(UINT32 tick); @@ -15,8 +13,6 @@ void taskmng_exit(void); #define taskmng_isavail() np2running -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_TASKMNG_H__ */ diff --git a/x11/timemng.h b/x11/timemng.h index d4ccbb94..392ee230 100644 --- a/x11/timemng.h +++ b/x11/timemng.h @@ -1,7 +1,9 @@ #ifndef NP2_X11_TIMEMNG_H__ #define NP2_X11_TIMEMNG_H__ -// Win32 SYSTEMTIME ・ケ・ネ・鬣ッ・チ・ +G_BEGIN_DECLS + +// Win32 SYSTEMTIME 繧ケ繝医Λ繧ッ繝√Ε typedef struct { UINT16 year; @@ -14,15 +16,8 @@ typedef struct { UINT16 milli; } _SYSTIME; - -#ifdef __cplusplus -extern "C" { -#endif - BOOL timemng_gettime(_SYSTIME *systime); -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_TIMEMNG_H__ */ diff --git a/x11/toolkit.c b/x11/toolkit.c deleted file mode 100644 index e7576f87..00000000 --- a/x11/toolkit.c +++ /dev/null @@ -1,79 +0,0 @@ -/* $Id: toolkit.c,v 1.7 2007/01/10 18:02:21 monaka Exp $ */ - -/* - * Copyright (c) 2003 NONAKA Kimihiro - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "compiler.h" - -#include "np2.h" - -#include "toolkit.h" - -#include "sysmng.h" - -#if (USE_GTK2 + USE_SDL) > 1 - -gui_toolkit_t* toolkitp; - -static struct { - gui_toolkit_t* toolkit; -} toolkit[] = { -#if USE_GTK2 > 0 - { >k_toolkit, }, -#endif -#if USE_SDL > 0 - { &sdl_toolkit, }, -#endif -}; - -void -toolkit_initialize(void) -{ - int i; - - if (NELEMENTS(toolkit) > 0) { - for (i = 0; i < NELEMENTS(toolkit); i++) { - gui_toolkit_t* p = toolkit[i].toolkit; - if (strcasecmp(p->get_toolkit(), np2oscfg.toolkit) == 0) - break; - } - if (i < NELEMENTS(toolkit)) { - toolkitp = toolkit[i].toolkit; - return; - } - sysmng_update(SYS_UPDATEOSCFG); - milstr_ncpy(np2oscfg.toolkit, "gtk", sizeof(np2oscfg.toolkit)); - } - toolkitp = >k_toolkit; -} - -#endif /* USE_GTK2 + USE_SDL > 1 */ - -void -toolkit_msgbox(const char *title, const char *msg) -{ - - toolkit_messagebox(title, msg); -} diff --git a/x11/toolkit.h b/x11/toolkit.h index 0993e35c..5ceaeb99 100644 --- a/x11/toolkit.h +++ b/x11/toolkit.h @@ -1,5 +1,3 @@ -/* $Id: toolkit.h,v 1.11 2007/01/10 18:02:21 monaka Exp $ */ - /* * Copyright (c) 2003 NONAKA Kimihiro * All rights reserved. @@ -28,37 +26,22 @@ #ifndef NP2_X11_TOOLKIT_H__ #define NP2_X11_TOOLKIT_H__ -typedef struct { - const char* (*get_toolkit)(void); - BOOL (*arginit)(int* argc, char*** argv); - void (*terminate)(void); - void (*widget_create)(void); - void (*widget_show)(void); - void (*widget_mainloop)(void); - void (*widget_quit)(void); - void (*event_process)(void); - void (*set_window_title)(const char* str); - void (*messagebox)(const char *title, const char *msg); -} gui_toolkit_t; - -void toolkit_msgbox(const char *title, const char *msg); - -#if (USE_GTK2 + USE_SDL) > 1 - -extern gui_toolkit_t* toolkitp; - -void toolkit_initialize(void); -#define toolkit_terminate() (*toolkitp->terminate)() -#define toolkit_arginit(argcp, argvp) (*toolkitp->arginit)(argcp, argvp) -#define toolkit_widget_create() (*toolkitp->widget_create)() -#define toolkit_widget_show() (*toolkitp->widget_show)() -#define toolkit_widget_mainloop() (*toolkitp->widget_mainloop)() -#define toolkit_widget_quit() (*toolkitp->widget_quit)() -#define toolkit_event_process() (*toolkitp->event_process)() -#define toolkit_set_window_title(s) (*toolkitp->set_window_title)(s) -#define toolkit_messagebox(t,m) (*toolkitp->messagebox)(t,m) - -#elif USE_GTK2 > 0 +/* for toolkit_msgbox() */ +#define TK_MB_OK (1U << 0) +#define TK_MB_CANCEL (1U << 1) +#define TK_MB_YES (1U << 2) +#define TK_MB_NO (1U << 3) +#define TK_MB_OKCANCEL (TK_MB_OK|TK_MB_CANCEL) +#define TK_MB_YESNO (TK_MB_YES|TK_MB_NO) +#define TK_MB_BTN_MASK (TK_MB_OK|TK_MB_CANCEL|TK_MB_YESNO) +#define TK_MB_ICON_INFO (1U << 16) +#define TK_MB_ICON_WARNING (1U << 17) +#define TK_MB_ICON_ERROR (1U << 18) +#define TK_MB_ICON_QUESTION (1U << 19) +#define TK_MB_ICON_MASK (TK_MB_ICON_INFO \ + |TK_MB_ICON_WARNING \ + |TK_MB_ICON_ERROR \ + |TK_MB_ICON_QUESTION) #include "gtk2/gtk_toolkit.h" @@ -71,27 +54,7 @@ void toolkit_initialize(void); #define toolkit_widget_quit() gui_gtk_widget_quit() #define toolkit_event_process() gui_gtk_event_process() #define toolkit_set_window_title(s) gui_gtk_set_window_title(s) -#define toolkit_messagebox(t,m) gui_gtk_messagebox(t,m) - -#elif USE_SDL > 0 - -#include "sdl/sdl_toolkit.h" - -#define toolkit_initialize() -#define toolkit_terminate() -#define toolkit_arginit(argcp, argvp) gui_sdl_arginit(argcp, argvp) -#define toolkit_widget_create() gui_sdl_widget_create() -#define toolkit_widget_show() gui_sdl_widget_show() -#define toolkit_widget_mainloop() gui_sdl_widget_mainloop() -#define toolkit_widget_quit() gui_sdl_widget_quit() -#define toolkit_event_process() gui_sdl_event_process() -#define toolkit_set_window_title(s) gui_sdl_set_window_title(s) -#define toolkit_messagebox(t,m) gui_sdl_messagebox(t,m) - -#else - -#error need to defined USE_GTK2 or USE_SDL !!! - -#endif +#define toolkit_messagebox(t,m) gui_gtk_msgbox(t,m,TK_MB_OK|TK_MB_ICON_INFO) +#define toolkit_msgbox(t,m,f) gui_gtk_msgbox(t,m,f) #endif /* NP2_X11_TOOLKIT_H__ */ diff --git a/x11/toolwin.h b/x11/toolwin.h index 61917bfe..f1467f9f 100644 --- a/x11/toolwin.h +++ b/x11/toolwin.h @@ -1,6 +1,8 @@ #ifndef NP2_X11_TOOLWIN_H__ #define NP2_X11_TOOLWIN_H__ +G_BEGIN_DECLS + enum { SKINMRU_MAX = 4, FDDLIST_DRV = 2, @@ -23,10 +25,6 @@ typedef struct { char skinmru[SKINMRU_MAX][MAX_PATH]; } NP2TOOL; -#ifdef __cplusplus -extern "C" { -#endif - extern NP2TOOL np2tool; #if !defined(SUPPORT_TOOLWINDOW) @@ -57,8 +55,6 @@ void toolwin_writeini(void); #endif /* SUPPORT_TOOLWIN */ -#ifdef __cplusplus -} -#endif +G_END_DECLS #endif /* NP2_X11_TOOLWIN_H__ */ diff --git a/x11/trace.c b/x11/trace.c index bce58cb1..e141c3cd 100644 --- a/x11/trace.c +++ b/x11/trace.c @@ -1,6 +1,5 @@ #include "compiler.h" #include -#include "codecnv.h" int trace_flag = 0; @@ -14,18 +13,10 @@ void trace_term(void) { void trace_fmt(const char *fmt, ...) { va_list ap; - char buf[1024]; -#ifndef WIN32 - char euc[1024]; -#endif + gchar buf[1024]; va_start(ap, fmt); - vsprintf(buf, fmt, ap); + g_vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); -#ifndef WIN32 - codecnv_sjistoeuc(euc, sizeof(euc), buf, sizeof(buf)); - fprintf(stderr, "%s\n", euc); -#else - fprintf(stderr, "%s\n", buf); -#endif + g_printerr("%s\n", buf); } diff --git a/x11/trace.h b/x11/trace.h index 8183acbb..415a2358 100644 --- a/x11/trace.h +++ b/x11/trace.h @@ -1,15 +1,13 @@ #ifndef NP2_X11_TRACE_H__ #define NP2_X11_TRACE_H__ -#ifdef __cplusplus -extern "C" { -#endif +G_BEGIN_DECLS extern int trace_flag; void trace_init(void); void trace_term(void); -void trace_fmt(const char *str, ...); +void trace_fmt(const char *str, ...) G_GNUC_PRINTF(1, 2); #ifndef TRACE @@ -31,8 +29,6 @@ void trace_fmt(const char *str, ...); #endif /* !TRACE */ -#ifdef __cplusplus -}; -#endif +G_END_DECLS #endif /* NP2_X11_TRACE_H__ */ diff --git a/x11/xnp2.jman b/x11/xnp2.jman deleted file mode 100644 index d524df6d..00000000 --- a/x11/xnp2.jman +++ /dev/null @@ -1,122 +0,0 @@ -.TH Xnp2 1 "17 Nov 2003" -.SH NAME -Xnp2 \- PC-9801 ・キ・遙シ・コ・ィ・゚・螂。シ・ソ -.SH SYNOPSIS -.B xnp2 -[ -.B \--config filename -] -[ -.B \--timidity-config filename -] -[ -.B FD1 image -[ -.B FD2 image -[ -.B FD3 image -[ -.B FD4 image -] -] -] -] -.SH DESCRIPTION -.B Xnp2 -、マ UNIX ・ラ・鬣テ・ネ・ユ・ゥ。シ・犧、ア、ホ PC-9801 ・キ・遙シ・コ・ィ・゚・螂。シ・ソ、ヌ、ケ。」 -.SH OPTIONS -.TP -.B \--config -オッニーサ、ヒニノ、゚ケ、狢゚ト・ユ・。・、・、サリト熙キ、゙、ケ。」 -ネサリトサ、マ $(HOME)/.np2/np2rc 、ニノ、゚ケ、゚、゙、ケ。」 -.TP -.B \--timidity-config -.B Xnp2 -、ヒニ篦「、オ、、ニ、、、 TiMidity ク゚エケ、ホ・ス・ユ・ネ・ヲ・ァ・「 MIDI イサクサ、ヌサネヘム、ケ、イサクサタ゚ト -・ユ・。・、・、サリト熙キ、゙、ケ。」 -ネサリトサ、マ $(HOME)/.np2/timidity.cfg 、ニノ、゚ケ、゚、゙、ケ。」 -.SH EXAMPLES -.nf -タ゚ト・ユ・。・、・ np2.cfg 、サリト -.ft B -xnp2 --config np2.cfg -.ft R - -TiMidity イサクサタ゚ト・ユ・。・、・ /usr/local/lib/timidity/timidity.cfg 、サリト -.ft B -xnp2 --timidity-config /usr/local/lib/timidity/timidity.cfg -.ft R - -FDD1 、ヒ・、・癸シ・ク・ユ・。・、・ system.d88。「FDD2 、ヒ data.d88 、ヂニ、キ、ニオッニー -.ft B -xnp2 system.d88 data.d88 -.ft R -.fi -.SH COMMAND -.TP -.B ・゙・ヲ・ケテ讌ワ・ソ・ -X 、ネ Xnp2 エヨ、ホ・゙・ヲ・ケチ犲、ホタレツリ -.SH FILES -.TP -.B $(HOME)/.np2/np2rc -タ゚ト・ユ・。・、・ -.TP -.B $(HOME)/.np2/font.tmp -・ユ・ゥ・・ネ、ャク。スミ、ヌ、ュ、ハ、、セケ遉ヒタクタョ、オ、、・ユ・ゥ・・ネ・モ・テ・ネ・゙・テ・ラ・ユ・。・、・ -.TP -.B $(HOME)/.np2/bios.rom -シツオ。、ホ BIOS ROM -.TP -.B $(HOME)/.np2/font.rom -シツオ。、ホ・ユ・ゥ・・ネ ROM -.TP -.B $(HOME)/.np2/sound.rom -・オ・ヲ・・ノ・ワ。シ・ノ、ヒナコワ、オ、、ニ、、、 BIOS ROM -.TP -.B $(HOME)/.np2/timidity.cfg -ニ篦「 TiMidity ク゚エケ・ス・ユ・ネ・ヲ・ァ・「 MIDI イサクサヘム、ホイサクサタ゚ト・ユ・。・、・ -.TP -.B $(HOME)/.np2/2608_bd.wav -OPNA 、ヒナコワ、オ、、ニ、、、・・コ・犂サクサ (・ミ・ケ・ノ・鬣) -.TP -.B $(HOME)/.np2/2608_sd.wav -OPNA 、ヒナコワ、オ、、ニ、、、・・コ・犂サクサ (・ケ・ヘ・「・ノ・鬣) -.TP -.B $(HOME)/.np2/2608_top.wav -OPNA 、ヒナコワ、オ、、ニ、、、・・コ・犂サクサ (・キ・・ミ・) -.TP -.B $(HOME)/.np2/2608_hh.wav -OPNA 、ヒナコワ、オ、、ニ、、、・・コ・犂サクサ (・マ・、・マ・テ・ネ) -.TP -.B $(HOME)/.np2/2608_tom.wav -OPNA 、ヒナコワ、オ、、ニ、、、・・コ・犂サクサ (・ソ・) -.TP -.B $(HOME)/.np2/2608_rim.wav -OPNA 、ヒナコワ、オ、、ニ、、、・・コ・犂サクサ (・・爭キ・逾テ・ネ) -.TP -.B /usr/X11R6/lib/X11/xnp2/np2tool.d88 -hostdrv オ。ヌス、サネヘム、ケ、、ソ、皃ヒノャヘラ、ハ・ノ・鬣、・ミ、ネ・ノ・ュ・螂皈・ネ、ャニ、テ、ニ、、、 D88 キチシー・ヌ・」・ケ・ッ・、・癸シ・ク -.TP -.B /usr/X11R6/lib/X11/xnp2/fddseek.wav -・ユ・・テ・ヤ。シ・キ。シ・ッサ、ヒコニタク、オ、、 PCM ・ユ・。・、・ -.TP -.B /usr/X11R6/lib/X11/xnp2/fddseek1.wav -・ユ・・テ・ヤ。シ・キ。シ・ッサ、ヒコニタク、オ、、 PCM ・ユ・。・、・ -.SH AUTHOR -Yui , Windows セ螟ヌニーコ、ケ、・ェ・・ク・ハ・、ホ -.B 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネ -、ホウォネッシヤ。」 -、゙、ソ。「MacOS 8.x, MacOS 9 、リ、ホーワソ「、箴ウン、ア、゙、キ、ソ。」 -.br -NONAKA Kimihiro , -.B 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネ -、 UNIX ・ラ・鬣テ・ネ・ユ・ゥ。シ・爨ヒーワソ「、キ、ソ -.B Xnp2 -、ウォネッ、キ、゙、キ、ソ。」 -.br -tk800 , -.B 、ヘ、ウ。シ・ラ・・ク・ァ・ッ・ネ -、 MacOS X 、ヒーワソ「、キ、ソ Neko Project IIx 、ウォネッ、キ、゙、キ、ソ。」 -.SH "SEE ALSO" -.B Xnp2 -、ホコヌソキネヌナ、ホセハ、マ http://www.asahi-net.or.jp/~aw9k-nnk/np2/ 、サイセネ、キ、ニ、ッ、タ、オ、、。」 diff --git a/x11/xnp2.jman1 b/x11/xnp2.jman1 new file mode 100644 index 00000000..fffc39e7 --- /dev/null +++ b/x11/xnp2.jman1 @@ -0,0 +1,122 @@ +.TH Xnp2 1 "17 Nov 2003" +.SH NAME +Xnp2 \- PC-9801 繧キ繝ェ繝シ繧コ繧ィ繝溘Η繝ャ繝シ繧ソ +.SH SYNOPSIS +.B xnp2 +[ +.B \--config filename +] +[ +.B \--timidity-config filename +] +[ +.B FD1 image +[ +.B FD2 image +[ +.B FD3 image +[ +.B FD4 image +] +] +] +] +.SH DESCRIPTION +.B Xnp2 +縺ッ UNIX 繝励Λ繝繝医ヵ繧ゥ繝シ繝蜷代¢縺ョ PC-9801 繧キ繝ェ繝シ繧コ繧ィ繝溘Η繝ャ繝シ繧ソ縺ァ縺吶 +.SH OPTIONS +.TP +.B \--config +襍キ蜍墓凾縺ォ隱ュ縺ソ霎シ繧險ュ螳壹ヵ繧。繧、繝ォ繧呈欠螳壹@縺セ縺吶 +髱樊欠螳壽凾縺ッ $(HOME)/.np2/np2rc 繧定ェュ縺ソ霎シ縺ソ縺セ縺吶 +.TP +.B \--timidity-config +.B Xnp2 +縺ォ蜀阡オ縺輔l縺ヲ縺繧 TiMidity 莠呈鋤縺ョ繧ス繝輔ヨ繧ヲ繧ァ繧「 MIDI 髻ウ貅舌〒菴ソ逕ィ縺吶k髻ウ貅占ィュ螳 +繝輔ぃ繧、繝ォ繧呈欠螳壹@縺セ縺吶 +髱樊欠螳壽凾縺ッ $(HOME)/.np2/timidity.cfg 繧定ェュ縺ソ霎シ縺ソ縺セ縺吶 +.SH EXAMPLES +.nf +險ュ螳壹ヵ繧。繧、繝ォ np2.cfg 繧呈欠螳 +.ft B +xnp2 --config np2.cfg +.ft R + +TiMidity 髻ウ貅占ィュ螳壹ヵ繧。繧、繝ォ /usr/local/lib/timidity/timidity.cfg 繧呈欠螳 +.ft B +xnp2 --timidity-config /usr/local/lib/timidity/timidity.cfg +.ft R + +FDD1 縺ォ繧、繝。繝シ繧ク繝輔ぃ繧、繝ォ system.d88縲:DD2 縺ォ data.d88 繧呈諺蜈・縺励※襍キ蜍 +.ft B +xnp2 system.d88 data.d88 +.ft R +.fi +.SH COMMAND +.TP +.B 繝槭え繧ケ荳ュ繝懊ち繝ウ +X 縺ィ Xnp2 髢薙ョ繝槭え繧ケ謫堺ス懊ョ蛻譖ソ +.SH FILES +.TP +.B $(HOME)/.np2/np2rc +險ュ螳壹ヵ繧。繧、繝ォ +.TP +.B $(HOME)/.np2/font.tmp +繝輔か繝ウ繝医′讀懷コ縺ァ縺阪↑縺蝣エ蜷医↓逕滓舌&繧後k繝輔か繝ウ繝医ン繝繝医槭ャ繝励ヵ繧。繧、繝ォ +.TP +.B $(HOME)/.np2/bios.rom +螳滓ゥ溘ョ BIOS ROM +.TP +.B $(HOME)/.np2/font.rom +螳滓ゥ溘ョ繝輔か繝ウ繝 ROM +.TP +.B $(HOME)/.np2/sound.rom +繧オ繧ヲ繝ウ繝峨懊シ繝峨↓謳ュ霈峨&繧後※縺繧 BIOS ROM +.TP +.B $(HOME)/.np2/timidity.cfg +蜀阡オ TiMidity 莠呈鋤繧ス繝輔ヨ繧ヲ繧ァ繧「 MIDI 髻ウ貅千畑縺ョ髻ウ貅占ィュ螳壹ヵ繧。繧、繝ォ +.TP +.B $(HOME)/.np2/2608_bd.wav +OPNA 縺ォ謳ュ霈峨&繧後※縺繧九Μ繧コ繝髻ウ貅 (繝舌せ繝峨Λ繝) +.TP +.B $(HOME)/.np2/2608_sd.wav +OPNA 縺ォ謳ュ霈峨&繧後※縺繧九Μ繧コ繝髻ウ貅 (繧ケ繝阪い繝峨Λ繝) +.TP +.B $(HOME)/.np2/2608_top.wav +OPNA 縺ォ謳ュ霈峨&繧後※縺繧九Μ繧コ繝髻ウ貅 (繧キ繝ウ繝舌Ν) +.TP +.B $(HOME)/.np2/2608_hh.wav +OPNA 縺ォ謳ュ霈峨&繧後※縺繧九Μ繧コ繝髻ウ貅 (繝上う繝上ャ繝) +.TP +.B $(HOME)/.np2/2608_tom.wav +OPNA 縺ォ謳ュ霈峨&繧後※縺繧九Μ繧コ繝髻ウ貅 (繧ソ繝) +.TP +.B $(HOME)/.np2/2608_rim.wav +OPNA 縺ォ謳ュ霈峨&繧後※縺繧九Μ繧コ繝髻ウ貅 (繝ェ繝繧キ繝ァ繝繝) +.TP +.B @PKGDATADIR@/np2tool.d88 +hostdrv 讖溯ス繧剃スソ逕ィ縺吶k縺溘a縺ォ蠢隕√↑繝峨Λ繧、繝舌→繝峨く繝・繝。繝ウ繝医′蜈・縺」縺ヲ縺繧 D88 蠖「蠑上ョ繧」繧ケ繧ッ繧、繝。繝シ繧ク +.TP +.B @PKGDATADIR@/fddseek.wav +繝輔Ο繝繝斐シ繧キ繝シ繧ッ譎ゅ↓蜀咲函縺輔l繧 PCM 繝輔ぃ繧、繝ォ +.TP +.B @PKGDATADIR@/fddseek1.wav +繝輔Ο繝繝斐シ繧キ繝シ繧ッ譎ゅ↓蜀咲函縺輔l繧 PCM 繝輔ぃ繧、繝ォ +.SH AUTHOR +Yui , Windows 荳翫〒蜍穂ス懊☆繧九が繝ェ繧ク繝翫Ν縺ョ +.B 縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝 +縺ョ髢狗匱閠縲 +縺セ縺溘`acOS 8.x, MacOS 9 縺ク縺ョ遘サ讀阪b謇区寺縺代∪縺励◆縲 +.br +NONAKA Kimihiro , +.B 縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝 +繧 UNIX 繝励Λ繝繝医ヵ繧ゥ繝シ繝縺ォ遘サ讀阪@縺 +.B Xnp2 +繧帝幕逋コ縺励∪縺励◆縲 +.br +tk800 , +.B 縺ュ縺薙シ繝励Ο繧ク繧ァ繧ッ繝 +繧 MacOS X 縺ォ遘サ讀阪@縺 Neko Project IIx 繧帝幕逋コ縺励∪縺励◆縲 +.SH "SEE ALSO" +.B Xnp2 +縺ョ譛譁ー迚育ュ峨ョ諠蝣ア縺ッ http://www.asahi-net.or.jp/~aw9k-nnk/np2/ 繧貞盾辣ァ縺励※縺上□縺輔>縲 diff --git a/x11/xnp2.man b/x11/xnp2.man1 similarity index 92% rename from x11/xnp2.man rename to x11/xnp2.man1 index 28f13f05..719e16a8 100644 --- a/x11/xnp2.man +++ b/x11/xnp2.man1 @@ -91,20 +91,20 @@ OPNA rythm sound source (Tamm) .B $(HOME)/.np2/2608_rim.wav OPNA rythm sound source (Rim shor) .TP -.B /usr/X11R6/lib/X11/xnp2/np2tool.d88 +.B @PKGDATADIR@/np2tool.d88 disk image for hostdrv. .TP -.B /usr/X11R6/lib/X11/xnp2/fddseek.wav +.B @PKGDATADIR@/fddseek.wav floppy disk seek sound file .TP -.B /usr/X11R6/lib/X11/xnp2/fddseek1.wav +.B @PKGDATADIR@/fddseek1.wav another floppy disk seek sound file .SH AUTHOR Yui , is .B Neko Project II main developer, who is maintained for MS-Windows, MacOS 8.x and MacOS 9 version. .br -NONAKA Kimihiro , he is ported +NONAKA Kimihiro , he is ported .B Neko Project II for UNIX platform. .br