Merge pull request #2825 from rsfb/master

Fixes to hcd62121 CPU emulation.
This commit is contained in:
R. Belmont 2017-11-20 19:40:54 -05:00 committed by GitHub
commit 2a502ed088
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 432 additions and 276 deletions

File diff suppressed because it is too large Load Diff

View File

@ -70,9 +70,9 @@ private:
u8 datasize(u8 op); u8 datasize(u8 op);
void read_reg(int size, u8 op1); void read_reg(int size, u8 op1);
void write_reg(int size, u8 op1); void write_reg(int size, u8 op1);
void read_regreg(int size, u8 op1, u8 op2, bool op_is_logical); void read_regreg(int size, u8 op1, u8 op2, bool copy_extend_immediate);
void write_regreg(int size, u8 op1, u8 op2); void write_regreg(int size, u8 op1, u8 op2);
void read_iregreg(int size, u8 op1, u8 op2); void read_iregreg(int size, u8 op1, u8 op2, bool copy_extend_immediate);
void write_iregreg(int size, u8 op1, u8 op2); void write_iregreg(int size, u8 op1, u8 op2);
void write_iregreg2(int size, u8 op1, u8 op2); void write_iregreg2(int size, u8 op1, u8 op2);
bool check_cond(u8 op); bool check_cond(u8 op);
@ -82,12 +82,12 @@ private:
void set_zh_flag(bool is_zh); void set_zh_flag(bool is_zh);
void set_cl_flag(bool is_cl); void set_cl_flag(bool is_cl);
void op_msk(int size); void op_msk(int size);
void op_imsk(int size);
void op_and(int size); void op_and(int size);
void op_or(int size); void op_or(int size);
void op_xor(int size); void op_xor(int size);
void op_add(int size); void op_add(int size);
void op_addb(int size); void op_addb(int size);
void op_subb(int size);
void op_sub(int size); void op_sub(int size);
void op_pushw(u16 source); void op_pushw(u16 source);
u16 op_popw(); u16 op_popw();

View File

@ -31,8 +31,9 @@ enum
ARG_KLO, /* KO1 - KO8 output lines */ ARG_KLO, /* KO1 - KO8 output lines */
ARG_KHI, /* KO9 - KO14(?) output lines */ ARG_KHI, /* KO9 - KO14(?) output lines */
ARG_KI, /* K input lines */ ARG_KI, /* K input lines */
ARG_RS, /* rotate/shift */ ARG_S1, /* shift by 1 */
ARG_RS4 /* nibble rotate/shift */ ARG_S4, /* shift by 4 */
ARG_S8, /* shift by 8 */
}; };
struct hcd62121_dasm struct hcd62121_dasm
@ -46,12 +47,12 @@ struct hcd62121_dasm
static const hcd62121_dasm hcd62121_ops[256] = static const hcd62121_dasm hcd62121_ops[256] =
{ {
/* 0x00 */ /* 0x00 */
{ "ro?b", ARG_REG, ARG_RS4 }, { "ro?w", ARG_REG, ARG_RS4 }, { "sh?b", ARG_REG, ARG_S8 }, { "sh?w", ARG_REG, ARG_S8 },
{ "ro?q", ARG_REG, ARG_RS4 }, { "ro?t", ARG_REG, ARG_RS4 }, { "sh?q", ARG_REG, ARG_S8 }, { "sh?t", ARG_REG, ARG_S8 },
{ "mskb", ARG_REGREG, ARG_NONE }, { "mskw", ARG_REGREG, ARG_NONE }, { "mskb", ARG_REGREG, ARG_NONE }, { "mskw", ARG_REGREG, ARG_NONE },
{ "mskq", ARG_REGREG, ARG_NONE }, { "mskt", ARG_REGREG, ARG_NONE }, { "mskq", ARG_REGREG, ARG_NONE }, { "mskt", ARG_REGREG, ARG_NONE },
{ "sh?b", ARG_REG, ARG_RS4 }, { "sh?w", ARG_REG, ARG_RS4 }, { "sh?b", ARG_REG, ARG_S4 }, { "sh?w", ARG_REG, ARG_S4 },
{ "sh?q", ARG_REG, ARG_RS4 }, { "sh?t", ARG_REG, ARG_RS4 }, { "sh?q", ARG_REG, ARG_S4 }, { "sh?t", ARG_REG, ARG_S4 },
{ "tstb", ARG_REGREG, ARG_NONE }, { "tstw", ARG_REGREG, ARG_NONE }, { "tstb", ARG_REGREG, ARG_NONE }, { "tstw", ARG_REGREG, ARG_NONE },
{ "tstq", ARG_REGREG, ARG_NONE }, { "tstt", ARG_REGREG, ARG_NONE }, { "tstq", ARG_REGREG, ARG_NONE }, { "tstt", ARG_REGREG, ARG_NONE },
@ -62,16 +63,16 @@ static const hcd62121_dasm hcd62121_ops[256] =
{ "cmpq", ARG_REGREG, ARG_NONE }, { "cmpt", ARG_REGREG, ARG_NONE }, { "cmpq", ARG_REGREG, ARG_NONE }, { "cmpt", ARG_REGREG, ARG_NONE },
{ "movb", ARG_REGREG, ARG_NONE }, { "movw", ARG_REGREG, ARG_NONE }, { "movb", ARG_REGREG, ARG_NONE }, { "movw", ARG_REGREG, ARG_NONE },
{ "movq", ARG_REGREG, ARG_NONE }, { "movt", ARG_REGREG, ARG_NONE }, { "movq", ARG_REGREG, ARG_NONE }, { "movt", ARG_REGREG, ARG_NONE },
{ "imskb", ARG_REGREG, ARG_NONE }, { "imskw", ARG_REGREG, ARG_NONE }, { "cmpaddb", ARG_REGREG, ARG_NONE }, { "cmpaddw", ARG_REGREG, ARG_NONE },
{ "imskq", ARG_REGREG, ARG_NONE }, { "imskt", ARG_REGREG, ARG_NONE }, { "cmpaddq", ARG_REGREG, ARG_NONE }, { "cmpaddt", ARG_REGREG, ARG_NONE },
/* 0x20 */ /* 0x20 */
{ "ro?b", ARG_REG, ARG_RS }, { "ro?w", ARG_REG, ARG_RS }, { "shrb", ARG_REG, ARG_S1 }, { "shrw", ARG_REG, ARG_S1 },
{ "ro?q", ARG_REG, ARG_RS }, { "ro?t", ARG_REG, ARG_RS }, { "shrq", ARG_REG, ARG_S1 }, { "shrt", ARG_REG, ARG_S1 },
{ "orb", ARG_REGREG, ARG_NONE }, { "orw", ARG_REGREG, ARG_NONE }, { "orb", ARG_REGREG, ARG_NONE }, { "orw", ARG_REGREG, ARG_NONE },
{ "orq", ARG_REGREG, ARG_NONE }, { "ort", ARG_REGREG, ARG_NONE }, { "orq", ARG_REGREG, ARG_NONE }, { "ort", ARG_REGREG, ARG_NONE },
{ "sh?b", ARG_REG, ARG_RS }, { "sh?w", ARG_REG, ARG_RS }, { "shlb", ARG_REG, ARG_S1 }, { "shlw", ARG_REG, ARG_S1 },
{ "sh?q", ARG_REG, ARG_RS }, { "sh?t", ARG_REG, ARG_RS }, { "shlq", ARG_REG, ARG_S1 }, { "shlt", ARG_REG, ARG_S1 },
{ "andb", ARG_REGREG, ARG_NONE }, { "andw", ARG_REGREG, ARG_NONE }, { "andb", ARG_REGREG, ARG_NONE }, { "andw", ARG_REGREG, ARG_NONE },
{ "andq", ARG_REGREG, ARG_NONE }, { "andt", ARG_REGREG, ARG_NONE }, { "andq", ARG_REGREG, ARG_NONE }, { "andt", ARG_REGREG, ARG_NONE },
@ -86,12 +87,12 @@ static const hcd62121_dasm hcd62121_ops[256] =
{ "addq", ARG_REGREG, ARG_NONE }, { "addt", ARG_REGREG, ARG_NONE }, { "addq", ARG_REGREG, ARG_NONE }, { "addt", ARG_REGREG, ARG_NONE },
/* 0x40 */ /* 0x40 */
{ "ro?b", ARG_IRG, ARG_RS4 }, { "ro?w", ARG_IRG, ARG_RS4 }, { "sh?b", ARG_IRG, ARG_S8 }, { "sh?w", ARG_IRG, ARG_S8 },
{ "ro?q", ARG_IRG, ARG_RS4 }, { "ro?t", ARG_IRG, ARG_RS4 }, { "sh?q", ARG_IRG, ARG_S8 }, { "sh?t", ARG_IRG, ARG_S8 },
{ "mskb", ARG_IRGREG, ARG_NONE }, { "mskw", ARG_IRGREG, ARG_NONE }, { "mskb", ARG_IRGREG, ARG_NONE }, { "mskw", ARG_IRGREG, ARG_NONE },
{ "mskq", ARG_IRGREG, ARG_NONE }, { "mskt", ARG_IRGREG, ARG_NONE }, { "mskq", ARG_IRGREG, ARG_NONE }, { "mskt", ARG_IRGREG, ARG_NONE },
{ "sh?b", ARG_IRG, ARG_RS4 }, { "sh?w", ARG_IRG, ARG_RS4 }, { "sh?b", ARG_IRG, ARG_S4 }, { "sh?w", ARG_IRG, ARG_S4 },
{ "sh?q", ARG_IRG, ARG_RS4 }, { "sh?t", ARG_IRG, ARG_RS4 }, { "sh?q", ARG_IRG, ARG_S4 }, { "sh?t", ARG_IRG, ARG_S4 },
{ "tstb", ARG_IRGREG, ARG_NONE }, { "tstw", ARG_IRGREG, ARG_NONE }, { "tstb", ARG_IRGREG, ARG_NONE }, { "tstw", ARG_IRGREG, ARG_NONE },
{ "tstq", ARG_IRGREG, ARG_NONE }, { "tstt", ARG_IRGREG, ARG_NONE }, { "tstq", ARG_IRGREG, ARG_NONE }, { "tstt", ARG_IRGREG, ARG_NONE },
@ -102,16 +103,16 @@ static const hcd62121_dasm hcd62121_ops[256] =
{ "cmpq", ARG_IRGREG, ARG_NONE }, { "cmpt", ARG_IRGREG, ARG_NONE }, { "cmpq", ARG_IRGREG, ARG_NONE }, { "cmpt", ARG_IRGREG, ARG_NONE },
{ "movb", ARG_IRGREG, ARG_NONE }, { "movw", ARG_IRGREG, ARG_NONE }, { "movb", ARG_IRGREG, ARG_NONE }, { "movw", ARG_IRGREG, ARG_NONE },
{ "movq", ARG_IRGREG, ARG_NONE }, { "movt", ARG_IRGREG, ARG_NONE }, { "movq", ARG_IRGREG, ARG_NONE }, { "movt", ARG_IRGREG, ARG_NONE },
{ "imskb", ARG_IRGREG, ARG_NONE }, { "imskw", ARG_IRGREG, ARG_NONE }, { "cmpaddb", ARG_IRGREG, ARG_NONE }, { "cmpaddw", ARG_IRGREG, ARG_NONE },
{ "imskq", ARG_IRGREG, ARG_NONE }, { "imskt", ARG_IRGREG, ARG_NONE }, { "cmpaddq", ARG_IRGREG, ARG_NONE }, { "cmpaddt", ARG_IRGREG, ARG_NONE },
/* 0x60 */ /* 0x60 */
{ "ro?b", ARG_IRG, ARG_RS }, { "ro?w", ARG_IRG, ARG_RS }, { "shrb", ARG_IRG, ARG_S1 }, { "shrw", ARG_IRG, ARG_S1 },
{ "ro?q", ARG_IRG, ARG_RS }, { "ro?t", ARG_IRG, ARG_RS }, { "shrq", ARG_IRG, ARG_S1 }, { "shrt", ARG_IRG, ARG_S1 },
{ "orb", ARG_IRGREG, ARG_NONE }, { "orw", ARG_IRGREG, ARG_NONE }, { "orb", ARG_IRGREG, ARG_NONE }, { "orw", ARG_IRGREG, ARG_NONE },
{ "orq", ARG_IRGREG, ARG_NONE }, { "ort", ARG_IRGREG, ARG_NONE }, { "orq", ARG_IRGREG, ARG_NONE }, { "ort", ARG_IRGREG, ARG_NONE },
{ "sh?b", ARG_IRG, ARG_RS }, { "sh?w", ARG_IRG, ARG_RS }, { "shlb", ARG_IRG, ARG_S1 }, { "shlw", ARG_IRG, ARG_S1 },
{ "sh?q", ARG_IRG, ARG_RS }, { "sh?t", ARG_IRG, ARG_RS }, { "shlq", ARG_IRG, ARG_S1 }, { "shlt", ARG_IRG, ARG_S1 },
{ "andb", ARG_IRGREG, ARG_NONE }, { "andw", ARG_IRGREG, ARG_NONE }, { "andb", ARG_IRGREG, ARG_NONE }, { "andw", ARG_IRGREG, ARG_NONE },
{ "andq", ARG_IRGREG, ARG_NONE }, { "andt", ARG_IRGREG, ARG_NONE }, { "andq", ARG_IRGREG, ARG_NONE }, { "andt", ARG_IRGREG, ARG_NONE },
@ -132,13 +133,13 @@ static const hcd62121_dasm hcd62121_ops[256] =
{ "un86?", ARG_NONE, ARG_NONE }, { "un87?", ARG_NONE, ARG_NONE }, { "un86?", ARG_NONE, ARG_NONE }, { "un87?", ARG_NONE, ARG_NONE },
{ "jump", ARG_A16, ARG_NONE }, { "jump", ARG_A24, ARG_NONE }, { "jump", ARG_A16, ARG_NONE }, { "jump", ARG_A24, ARG_NONE },
{ "call", ARG_A16, ARG_NONE }, { "un8b?", ARG_NONE, ARG_NONE }, { "call", ARG_A16, ARG_NONE }, { "un8b?", ARG_NONE, ARG_NONE },
{ "un8C?", ARG_NONE, ARG_NONE }, { "un8D?", ARG_NONE, ARG_NONE }, { "bstack_to_dmem", ARG_NONE, ARG_NONE }, { "fstack_to_dmem", ARG_NONE, ARG_NONE },
{ "un8E?", ARG_NONE, ARG_NONE }, { "un8F?", ARG_NONE, ARG_NONE }, { "un8E?", ARG_NONE, ARG_NONE }, { "un8F?", ARG_NONE, ARG_NONE },
/* 0x90 */ /* 0x90 */
{ "retzh", ARG_NONE, ARG_NONE }, { "retzl", ARG_NONE, ARG_NONE }, { "retzh", ARG_NONE, ARG_NONE }, { "retzl", ARG_NONE, ARG_NONE },
{ "retc", ARG_NONE, ARG_NONE }, { "retz", ARG_NONE, ARG_NONE }, { "retc", ARG_NONE, ARG_NONE }, { "retz", ARG_NONE, ARG_NONE },
{ "retzc", ARG_NONE, ARG_NONE }, { "retcl", ARG_NONE, ARG_NONE }, { "retnzh", ARG_NONE, ARG_NONE }, { "retnzl", ARG_NONE, ARG_NONE },
{ "retnc", ARG_NONE, ARG_NONE }, { "retnz", ARG_NONE, ARG_NONE }, { "retnc", ARG_NONE, ARG_NONE }, { "retnz", ARG_NONE, ARG_NONE },
{ "jump", ARG_IRG, ARG_NONE }, { "un99?", ARG_NONE, ARG_NONE }, { "jump", ARG_IRG, ARG_NONE }, { "un99?", ARG_NONE, ARG_NONE },
{ "un9A?", ARG_NONE, ARG_NONE }, { "un9b?", ARG_NONE, ARG_NONE }, { "un9A?", ARG_NONE, ARG_NONE }, { "un9b?", ARG_NONE, ARG_NONE },
@ -148,11 +149,11 @@ static const hcd62121_dasm hcd62121_ops[256] =
/* 0xa0 */ /* 0xa0 */
{ "jmpzh", ARG_A16, ARG_NONE }, { "jmpzl", ARG_A16, ARG_NONE }, { "jmpzh", ARG_A16, ARG_NONE }, { "jmpzl", ARG_A16, ARG_NONE },
{ "jmpc", ARG_A16, ARG_NONE }, { "jmpz", ARG_A16, ARG_NONE }, { "jmpc", ARG_A16, ARG_NONE }, { "jmpz", ARG_A16, ARG_NONE },
{ "jmpzc", ARG_A16, ARG_NONE }, { "jmpcl", ARG_A16, ARG_NONE }, { "jmpnzh", ARG_A16, ARG_NONE }, { "jmpnzl", ARG_A16, ARG_NONE },
{ "jmpnc", ARG_A16, ARG_NONE }, { "jmpnz", ARG_A16, ARG_NONE }, { "jmpnc", ARG_A16, ARG_NONE }, { "jmpnz", ARG_A16, ARG_NONE },
{ "callzh", ARG_A16, ARG_NONE }, { "callzl", ARG_A16, ARG_NONE }, { "callzh", ARG_A16, ARG_NONE }, { "callzl", ARG_A16, ARG_NONE },
{ "callc", ARG_A16, ARG_NONE }, { "callz", ARG_A16, ARG_NONE }, { "callc", ARG_A16, ARG_NONE }, { "callz", ARG_A16, ARG_NONE },
{ "callzc", ARG_A16, ARG_NONE }, { "callcl", ARG_A16, ARG_NONE }, { "callnzh", ARG_A16, ARG_NONE }, { "callnzl", ARG_A16, ARG_NONE },
{ "callnc", ARG_A16, ARG_NONE }, { "callnz", ARG_A16, ARG_NONE }, { "callnc", ARG_A16, ARG_NONE }, { "callnz", ARG_A16, ARG_NONE },
/* 0xb0 */ /* 0xb0 */
@ -161,9 +162,9 @@ static const hcd62121_dasm hcd62121_ops[256] =
{ "out", ARG_KHI, ARG_REG }, { "out", ARG_KHI, ARG_I8 }, { "out", ARG_KHI, ARG_REG }, { "out", ARG_KHI, ARG_I8 },
{ "out", ARG_KLO, ARG_REG }, { "out", ARG_KLO, ARG_I8 }, { "out", ARG_KLO, ARG_REG }, { "out", ARG_KLO, ARG_I8 },
{ "unB8?", ARG_NONE, ARG_NONE }, { "unB9?", ARG_I8, ARG_NONE }, { "unB8?", ARG_NONE, ARG_NONE }, { "unB9?", ARG_I8, ARG_NONE },
{ "unBA?", ARG_NONE, ARG_NONE }, { "jmpcl?", ARG_A16, ARG_NONE }, { "unBA?", ARG_NONE, ARG_NONE }, { "jmpcl", ARG_A16, ARG_NONE },
{ "unBC?", ARG_I8, ARG_NONE }, { "unBD?", ARG_NONE, ARG_NONE }, { "unBC?", ARG_I8, ARG_NONE }, { "unBD?", ARG_NONE, ARG_NONE },
{ "unBE?", ARG_NONE, ARG_NONE }, { "jmpncl?", ARG_A16, ARG_NONE }, { "unBE?", ARG_NONE, ARG_NONE }, { "jmpncl", ARG_A16, ARG_NONE },
/* 0xc0 */ /* 0xc0 */
{ "movb", ARG_REG, ARG_I8 }, { "movw", ARG_REG, ARG_I16 }, { "movb", ARG_REG, ARG_I8 }, { "movw", ARG_REG, ARG_I16 },
@ -183,7 +184,7 @@ static const hcd62121_dasm hcd62121_ops[256] =
{ "movb", ARG_F, ARG_REG }, { "movb", ARG_F, ARG_I8 }, { "movb", ARG_F, ARG_REG }, { "movb", ARG_F, ARG_I8 },
{ "unDA?", ARG_NONE, ARG_NONE }, { "unDb?", ARG_NONE, ARG_NONE }, { "unDA?", ARG_NONE, ARG_NONE }, { "unDb?", ARG_NONE, ARG_NONE },
{ "movb", ARG_DS, ARG_REG }, { "movb", ARG_DS, ARG_I8 }, { "movb", ARG_DS, ARG_REG }, { "movb", ARG_DS, ARG_I8 },
{ "movw", ARG_LAR, ARG_REG }, { "movw?", ARG_LAR, ARG_I8 }, { "movw", ARG_LAR, ARG_REG }, { "movb", ARG_LAR, ARG_I8 },
/* 0xe0 */ /* 0xe0 */
{ "in0", ARG_REG, ARG_NONE }, { "movb", ARG_REG, ARG_OPT }, { "in0", ARG_REG, ARG_NONE }, { "movb", ARG_REG, ARG_OPT },
@ -220,7 +221,7 @@ CPU_DISASSEMBLE(hcd62121)
inst = &hcd62121_ops[op]; inst = &hcd62121_ops[op];
/* Special cases for shift and rotate instructions */ /* Special cases for shift and rotate instructions */
if (inst->arg2 == ARG_RS || inst->arg2 == ARG_RS4) if (inst->arg2 == ARG_S4 || inst->arg2 == ARG_S8)
util::stream_format(stream, "%c%c%c%c ", inst->str[0], inst->str[1], (oprom[pos] & 0x80) ? 'r' : 'l', inst->str[3]); util::stream_format(stream, "%c%c%c%c ", inst->str[0], inst->str[1], (oprom[pos] & 0x80) ? 'r' : 'l', inst->str[3]);
else else
util::stream_format(stream, "%-8s", inst->str); util::stream_format(stream, "%-8s", inst->str);
@ -324,8 +325,16 @@ CPU_DISASSEMBLE(hcd62121)
op2 = oprom[pos++]; op2 = oprom[pos++];
if ((op1 & 0x80) || (op2 & 0x80)) if ((op1 & 0x80) || (op2 & 0x80))
{ {
/* (lar),reg */ if (op1 & 0x80)
util::stream_format(stream, "(%slar%s),r%02x", (op1 & 0x20) ? ((op1 & 0x40) ? "--" : "++") : "", (op1 & 0x20) ? "" : ((op1 & 0x40) ? "--" : "++"), op2 & 0x7f); {
/* (lar),imm */
util::stream_format(stream, "(%slar%s), %02x", (op1 & 0x20) ? ((op1 & 0x40) ? "--" : "++") : "", (op1 & 0x20) ? "" : ((op1 & 0x40) ? "--" : "++"), op2);
}
else
{
/* (lar),reg */
util::stream_format(stream, "(%slar%s),r%02x", (op1 & 0x20) ? ((op1 & 0x40) ? "--" : "++") : "", (op1 & 0x20) ? "" : ((op1 & 0x40) ? "--" : "++"), op2 & 0x7f);
}
} }
else else
{ {
@ -441,9 +450,12 @@ CPU_DISASSEMBLE(hcd62121)
case ARG_KI: case ARG_KI:
util::stream_format(stream, ",KI"); util::stream_format(stream, ",KI");
break; break;
case ARG_RS4: case ARG_S4:
util::stream_format(stream, ",4"); util::stream_format(stream, ",4");
break; break;
case ARG_S8:
util::stream_format(stream, ",8");
break;
default: default:
break; break;
} }

View File

@ -158,7 +158,7 @@ static INPUT_PORTS_START(cfx9850)
PORT_START("KO2") PORT_START("KO2")
/* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXE Enter") PORT_CODE(KEYCODE_ENTER) /* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXE Enter") PORT_CODE(KEYCODE_ENTER)
/* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(-) Ares") PORT_CODE(KEYCODE_MINUS) /* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("(-) Ans") PORT_CODE(KEYCODE_MINUS)
/* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXP Pi") PORT_CODE(KEYCODE_EQUALS) /* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXP Pi") PORT_CODE(KEYCODE_EQUALS)
/* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". SPACE") PORT_CODE(KEYCODE_SPACE) /* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". SPACE") PORT_CODE(KEYCODE_SPACE)
/* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 Z") PORT_CODE(KEYCODE_Z) /* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 Z") PORT_CODE(KEYCODE_Z)
@ -181,37 +181,37 @@ static INPUT_PORTS_START(cfx9850)
PORT_BIT(0x83, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x83, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("KO5") PORT_START("KO5")
/* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL DG") PORT_CODE(KEYCODE_BACKSPACE) /* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL INS") PORT_CODE(KEYCODE_BACKSPACE)
/* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 O") PORT_CODE(KEYCODE_O) /* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 O") PORT_CODE(KEYCODE_O)
/* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 N") PORT_CODE(KEYCODE_N) /* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 N") PORT_CODE(KEYCODE_N)
/* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 M") PORT_CODE(KEYCODE_M) /* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 M") PORT_CODE(KEYCODE_M)
PORT_BIT(0x87, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x87, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("KO6") PORT_START("KO6")
/* KI2 */ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAB L") PORT_CODE(KEYCODE_L) /* KI2 */ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("-> L") PORT_CODE(KEYCODE_L)
/* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(", K") PORT_CODE(KEYCODE_K) /* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(", K") PORT_CODE(KEYCODE_K)
/* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(") x^-1 J") PORT_CODE(KEYCODE_J) /* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(") x^-1 J") PORT_CODE(KEYCODE_J)
/* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("( .. I") PORT_CODE(KEYCODE_I) /* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("( x^(1/3) I") PORT_CODE(KEYCODE_I)
/* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F<=>0 H") PORT_CODE(KEYCODE_H) /* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F<=>D H") PORT_CODE(KEYCODE_H)
/* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("a b/c G") PORT_CODE(KEYCODE_G) /* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("a b/c G") PORT_CODE(KEYCODE_G)
PORT_BIT(0x81, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x81, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("KO7") PORT_START("KO7")
/* KI2 */ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("tan tan^-1 F") PORT_CODE(KEYCODE_F) /* KI2 */ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("tan tan^-1 F") PORT_CODE(KEYCODE_F)
/* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("cos cas^-1 E") PORT_CODE(KEYCODE_E) /* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("cos cos^-1 E") PORT_CODE(KEYCODE_E)
/* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("sin sin^-1 D") PORT_CODE(KEYCODE_D) /* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("sin sin^-1 D") PORT_CODE(KEYCODE_D)
/* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ln e^x C") PORT_CODE(KEYCODE_C) /* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ln e^x C") PORT_CODE(KEYCODE_C)
/* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("log 10^x B") PORT_CODE(KEYCODE_B) /* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("log 10^x B") PORT_CODE(KEYCODE_B)
/* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x,d,t A") PORT_CODE(KEYCODE_A) /* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x,theta,t A") PORT_CODE(KEYCODE_A)
PORT_BIT(0x81, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x81, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("KO8") PORT_START("KO8")
/* KI2 */ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) /* KI2 */ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
/* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) /* KI3 */ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
/* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXIT QUIT") PORT_CODE(KEYCODE_STOP) /* KI4 */ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EXIT QUIT") PORT_CODE(KEYCODE_STOP)
/* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/\\ .. ..") PORT_CODE(KEYCODE_COMMA) /* KI5 */ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^ root theta") PORT_CODE(KEYCODE_COMMA)
/* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^2 sqrt ..") PORT_CODE(KEYCODE_SLASH) /* KI6 */ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("x^2 sqrt ro") PORT_CODE(KEYCODE_SLASH)
/* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALPHA ..-LOCK") PORT_CODE(KEYCODE_CAPSLOCK) /* KI7 */ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALPHA ALPHA-LOCK") PORT_CODE(KEYCODE_CAPSLOCK)
PORT_BIT(0x81, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x81, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("KO9") PORT_START("KO9")