mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
added SM511 stuff and konami tmnt
This commit is contained in:
parent
936c420654
commit
72365833ef
@ -67,6 +67,7 @@ void sm510_base_device::device_start()
|
||||
m_1s = false;
|
||||
m_k_active = false;
|
||||
m_l = 0;
|
||||
m_x = 0;
|
||||
m_y = 0;
|
||||
m_bp = false;
|
||||
m_bc = false;
|
||||
@ -89,6 +90,7 @@ void sm510_base_device::device_start()
|
||||
save_item(NAME(m_1s));
|
||||
save_item(NAME(m_k_active));
|
||||
save_item(NAME(m_l));
|
||||
save_item(NAME(m_x));
|
||||
save_item(NAME(m_y));
|
||||
save_item(NAME(m_bp));
|
||||
save_item(NAME(m_bc));
|
||||
@ -162,8 +164,8 @@ TIMER_CALLBACK_MEMBER(sm510_base_device::lcd_timer_cb)
|
||||
m_write_segb(h | SM510_PORT_SEGB, get_lcd_row(h, m_lcd_ram_b), 0xffff);
|
||||
m_write_segc(h | SM510_PORT_SEGC, get_lcd_row(h, m_lcd_ram_c), 0xffff);
|
||||
|
||||
// bs output from L and Y regs
|
||||
UINT8 bs = m_l >> h & 1;
|
||||
// bs output from L/X and Y regs
|
||||
UINT8 bs = (m_l >> h & 1) | ((m_x*2) >> h & 2);
|
||||
m_write_segbs(h | SM510_PORT_SEGBS, (m_bc || !m_bp) ? 0 : bs, 0xffff);
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@
|
||||
#define MCFG_SM510_WRITE_SEGC_CB(_devcb) \
|
||||
sm510_base_device::set_write_segc_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
// LCD bs output: same as above, but only data d0 used
|
||||
// LCD bs output: same as above, but only up to 2 bits used
|
||||
#define MCFG_SM510_WRITE_SEGBS_CB(_devcb) \
|
||||
sm510_base_device::set_write_segbs_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
@ -128,7 +128,7 @@ protected:
|
||||
int m_datamask;
|
||||
|
||||
UINT16 m_pc, m_prev_pc;
|
||||
UINT8 m_op, m_prev_op;
|
||||
UINT16 m_op, m_prev_op;
|
||||
UINT8 m_param;
|
||||
int m_stack_levels;
|
||||
UINT16 m_stack[2];
|
||||
@ -147,7 +147,7 @@ protected:
|
||||
optional_shared_ptr<UINT8> m_lcd_ram_a, m_lcd_ram_b, m_lcd_ram_c;
|
||||
devcb_write16 m_write_sega, m_write_segb, m_write_segc, m_write_segbs;
|
||||
emu_timer *m_lcd_timer;
|
||||
UINT8 m_l;
|
||||
UINT8 m_l, m_x;
|
||||
UINT8 m_y;
|
||||
bool m_bp;
|
||||
bool m_bc;
|
||||
@ -176,13 +176,14 @@ protected:
|
||||
// misc internal helpers
|
||||
void increment_pc();
|
||||
virtual void get_opcode_param() { } // -> child class
|
||||
virtual void update_w_latch() { }
|
||||
|
||||
UINT8 ram_r();
|
||||
void ram_w(UINT8 data);
|
||||
void pop_stack();
|
||||
void push_stack();
|
||||
void do_branch(UINT8 pu, UINT8 pm, UINT8 pl);
|
||||
UINT8 bitmask(UINT8 param);
|
||||
UINT8 bitmask(UINT16 param);
|
||||
|
||||
// opcode handlers
|
||||
void op_lb();
|
||||
@ -206,11 +207,13 @@ protected:
|
||||
void op_excd();
|
||||
void op_lda();
|
||||
void op_lax();
|
||||
void op_ptw();
|
||||
void op_wr();
|
||||
void op_ws();
|
||||
|
||||
void op_kta();
|
||||
void op_atbp();
|
||||
void op_atx();
|
||||
void op_atl();
|
||||
void op_atfc();
|
||||
void op_atr();
|
||||
@ -236,6 +239,12 @@ protected:
|
||||
|
||||
void op_rm();
|
||||
void op_sm();
|
||||
|
||||
void op_pre();
|
||||
void op_sme();
|
||||
void op_rme();
|
||||
void op_tmel();
|
||||
|
||||
void op_skip();
|
||||
void op_cend();
|
||||
void op_idiv();
|
||||
@ -253,6 +262,8 @@ protected:
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
|
||||
virtual void execute_one();
|
||||
virtual void get_opcode_param();
|
||||
|
||||
virtual void update_w_latch() { m_write_s(0, m_w, 0xff); } // W is connected directly to S
|
||||
};
|
||||
|
||||
|
||||
|
@ -15,39 +15,45 @@
|
||||
|
||||
enum e_mnemonics
|
||||
{
|
||||
mILL,
|
||||
mILL, mEXT,
|
||||
mLB, mLBL, mSBM, mEXBLA, mINCB, mDECB,
|
||||
mATPL, mRTN0, mRTN1, mTL, mTML, mTM, mT,
|
||||
mEXC, mBDC, mEXCI, mEXCD, mLDA, mLAX, mWR, mWS,
|
||||
mKTA, mATBP, mATL, mATFC, mATR,
|
||||
mEXC, mBDC, mEXCI, mEXCD, mLDA, mLAX, mPTW, mWR, mWS,
|
||||
mKTA, mATBP, mATX, mATL, mATFC, mATR,
|
||||
mADD, mADD11, mADX, mCOMA, mROT, mRC, mSC,
|
||||
mTB, mTC, mTAM, mTMI, mTA0, mTABL, mTIS, mTAL, mTF1, mTF4,
|
||||
mRM, mSM, mSKIP, mCEND, mIDIV
|
||||
mRM, mSM,
|
||||
mPRE, mSME, mRME, mTMEL,
|
||||
mSKIP, mCEND, mIDIV
|
||||
};
|
||||
|
||||
static const char *const s_mnemonics[] =
|
||||
{
|
||||
"?",
|
||||
"?", "",
|
||||
"LB", "LBL", "SBM", "EXBLA", "INCB", "DECB",
|
||||
"ATPL", "RTN0", "RTN1", "TL", "TML", "TM", "T",
|
||||
"EXC", "BDC", "EXCI", "EXCD", "LDA", "LAX", "WR", "WS",
|
||||
"KTA", "ATBP", "ATL", "ATFC", "ATR",
|
||||
"EXC", "BDC", "EXCI", "EXCD", "LDA", "LAX", "PTW", "WR", "WS",
|
||||
"KTA", "ATBP", "ATX", "ATL", "ATFC", "ATR",
|
||||
"ADD", "ADD11", "ADX", "COMA", "ROT", "RC", "SC",
|
||||
"TB", "TC", "TAM", "TMI", "TA0", "TABL", "TIS", "TAL", "TF1", "TF4",
|
||||
"RM", "SM", "SKIP", "CEND", "IDIV"
|
||||
"RM", "SM",
|
||||
"PRE", "SME", "RME", "TMEL",
|
||||
"SKIP", "CEND", "IDIV"
|
||||
};
|
||||
|
||||
// number of bits per opcode parameter, 8 or larger means 2-byte opcode
|
||||
static const UINT8 s_bits[] =
|
||||
{
|
||||
0,
|
||||
0, 8,
|
||||
4, 8, 0, 0, 0, 0,
|
||||
0, 0, 0, 4+8, 2+8, 6, 6,
|
||||
2, 0, 2, 2, 2, 4, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
2, 0, 2, 2, 2, 4, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 4, 0, 0, 0, 0,
|
||||
0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
|
||||
2, 2, 0, 0, 0
|
||||
2, 2,
|
||||
8, 0, 0, 0,
|
||||
0, 0, 0
|
||||
};
|
||||
|
||||
#define _OVER DASMFLAG_STEP_OVER
|
||||
@ -55,14 +61,16 @@ static const UINT8 s_bits[] =
|
||||
|
||||
static const UINT32 s_flags[] =
|
||||
{
|
||||
0,
|
||||
0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, _OUT, _OUT, 0, _OVER, _OVER, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, _OVER, 0
|
||||
0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, _OVER, 0
|
||||
};
|
||||
|
||||
// next program counter in sequence (relative)
|
||||
@ -78,7 +86,7 @@ static const INT8 s_next_pc[0x40] =
|
||||
|
||||
// common disasm
|
||||
|
||||
static offs_t sm510_common_disasm(const UINT8 *lut_mnemonic, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram)
|
||||
static offs_t sm510_common_disasm(const UINT8 *lut_mnemonic, const UINT8 *lut_extended, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram)
|
||||
{
|
||||
// get raw opcode
|
||||
UINT8 op = oprom[0];
|
||||
@ -95,6 +103,11 @@ static offs_t sm510_common_disasm(const UINT8 *lut_mnemonic, char *buffer, offs_
|
||||
param = oprom[s_next_pc[pc & 0x3f]];
|
||||
len++;
|
||||
}
|
||||
|
||||
// extended opcode
|
||||
bool is_extended = (instr == mEXT);
|
||||
if (is_extended)
|
||||
instr = lut_extended[param];
|
||||
|
||||
// disassemble it
|
||||
char *dst = buffer;
|
||||
@ -110,7 +123,8 @@ static offs_t sm510_common_disasm(const UINT8 *lut_mnemonic, char *buffer, offs_
|
||||
}
|
||||
else if (bits <= 8)
|
||||
{
|
||||
dst += sprintf(dst, "$%02X", param);
|
||||
if (!is_extended)
|
||||
dst += sprintf(dst, "$%02X", param);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -155,13 +169,47 @@ static const UINT8 sm510_mnemonic[0x100] =
|
||||
|
||||
CPU_DISASSEMBLE(sm510)
|
||||
{
|
||||
return sm510_common_disasm(sm510_mnemonic, buffer, pc, oprom, opram);
|
||||
return sm510_common_disasm(sm510_mnemonic, NULL, buffer, pc, oprom, opram);
|
||||
}
|
||||
|
||||
|
||||
// SM511 disasm
|
||||
|
||||
static const UINT8 sm511_mnemonic[0x100] =
|
||||
{
|
||||
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||
mROT, 0, mSBM, mATPL, mRM, mRM, mRM, mRM, mADD, mADD11,mCOMA, mEXBLA,mSM, mSM, mSM, mSM, // 0
|
||||
mEXC, mEXC, mEXC, mEXC, mEXCI, mEXCI, mEXCI, mEXCI, mLDA, mLDA, mLDA, mLDA, mEXCD, mEXCD, mEXCD, mEXCD, // 1
|
||||
mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, // 2
|
||||
mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, // 3
|
||||
|
||||
mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, // 4
|
||||
mKTA, mTB, mTC, mTAM, mTMI, mTMI, mTMI, mTMI, mTIS, mATL, mTA0, mTABL, mATX, 0, mTAL, mLBL, // 5
|
||||
mEXT, mPRE, mWR, mWS, mINCB, 0, mRC, mSC, mTML, mTML, mTML, mTML, mDECB, mPTW, mRTN0, mRTN1, // 6
|
||||
mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, mTL, // 7
|
||||
|
||||
mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, // 8
|
||||
mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, // 9
|
||||
mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, // A
|
||||
mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, mT, // B
|
||||
|
||||
mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, // C
|
||||
mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, // D
|
||||
mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, // E
|
||||
mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM, mTM // F
|
||||
};
|
||||
|
||||
static const UINT8 sm511_extended[0x10] =
|
||||
{
|
||||
mRME, mSME, mTMEL, mATFC, mBDC, mATBP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60 3
|
||||
};
|
||||
|
||||
CPU_DISASSEMBLE(sm511)
|
||||
{
|
||||
return sm510_common_disasm(sm510_mnemonic, buffer, pc, oprom, opram);
|
||||
// create extended opcode table
|
||||
UINT8 ext[0x100];
|
||||
memset(ext, 0, 0x100);
|
||||
memcpy(ext + 0x30, sm511_extended, 0x10);
|
||||
|
||||
return sm510_common_disasm(sm511_mnemonic, ext, buffer, pc, oprom, opram);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ void sm510_base_device::do_branch(UINT8 pu, UINT8 pm, UINT8 pl)
|
||||
m_pc = ((pu << 10 & 0xc00) | (pm << 6 & 0x3c0) | (pl & 0x03f)) & m_prgmask;
|
||||
}
|
||||
|
||||
inline UINT8 sm510_base_device::bitmask(UINT8 param)
|
||||
inline UINT8 sm510_base_device::bitmask(UINT16 param)
|
||||
{
|
||||
// bitmask from immediate opcode param
|
||||
return 1 << (param & 3);
|
||||
@ -192,18 +192,24 @@ void sm510_base_device::op_lax()
|
||||
m_acc = m_op & 0xf;
|
||||
}
|
||||
|
||||
void sm510_base_device::op_ptw()
|
||||
{
|
||||
// PTW: output W latch
|
||||
m_write_s(0, m_w, 0xff);
|
||||
}
|
||||
|
||||
void sm510_base_device::op_wr()
|
||||
{
|
||||
// WR: shift 0 into W
|
||||
m_w = m_w << 1 | 0;
|
||||
m_write_s(0, m_w, 0xff);
|
||||
update_w_latch();
|
||||
}
|
||||
|
||||
void sm510_base_device::op_ws()
|
||||
{
|
||||
// WR: shift 1 into W
|
||||
m_w = m_w << 1 | 1;
|
||||
m_write_s(0, m_w, 0xff);
|
||||
update_w_latch();
|
||||
}
|
||||
|
||||
|
||||
@ -221,6 +227,12 @@ void sm510_base_device::op_atbp()
|
||||
m_bp = ((m_acc & 1) != 0);
|
||||
}
|
||||
|
||||
void sm510_base_device::op_atx()
|
||||
{
|
||||
// ATX: output ACC to X
|
||||
m_x = m_acc;
|
||||
}
|
||||
|
||||
void sm510_base_device::op_atl()
|
||||
{
|
||||
// ATL: output ACC to L
|
||||
@ -371,6 +383,33 @@ void sm510_base_device::op_sm()
|
||||
}
|
||||
|
||||
|
||||
// Melody control instructions
|
||||
|
||||
void sm510_base_device::op_pre()
|
||||
{
|
||||
// PRE x: x
|
||||
op_illegal();
|
||||
}
|
||||
|
||||
void sm510_base_device::op_sme()
|
||||
{
|
||||
// SME: x
|
||||
op_illegal();
|
||||
}
|
||||
|
||||
void sm510_base_device::op_rme()
|
||||
{
|
||||
// RME: x
|
||||
op_illegal();
|
||||
}
|
||||
|
||||
void sm510_base_device::op_tmel()
|
||||
{
|
||||
// TMEL: x
|
||||
op_illegal();
|
||||
}
|
||||
|
||||
|
||||
// Special instructions
|
||||
|
||||
void sm510_base_device::op_skip()
|
||||
@ -392,5 +431,5 @@ void sm510_base_device::op_idiv()
|
||||
|
||||
void sm510_base_device::op_illegal()
|
||||
{
|
||||
logerror("%s unknown opcode $%03X at $%04X\n", tag(), m_op, m_prev_pc);
|
||||
logerror("%s unknown opcode $%02X at $%04X\n", tag(), m_op, m_prev_pc);
|
||||
}
|
||||
|
@ -63,8 +63,101 @@ sm512_device::sm512_device(const machine_config &mconfig, const char *tag, devic
|
||||
|
||||
void sm511_device::get_opcode_param()
|
||||
{
|
||||
// LBL, PRE, TL, TML and prefix opcodes are 2 bytes
|
||||
if ((m_op >= 0x5f && m_op <= 0x61) || (m_op & 0xf0) == 0x70 || (m_op & 0xfc) == 0x68)
|
||||
{
|
||||
m_icount--;
|
||||
m_param = m_program->read_byte(m_pc);
|
||||
increment_pc();
|
||||
}
|
||||
}
|
||||
|
||||
void sm511_device::execute_one()
|
||||
{
|
||||
switch (m_op & 0xf0)
|
||||
{
|
||||
case 0x20: op_lax(); break;
|
||||
case 0x30: op_adx(); break;
|
||||
case 0x40: op_lb(); break;
|
||||
case 0x70: op_tl(); break;
|
||||
|
||||
case 0x80: case 0x90: case 0xa0: case 0xb0:
|
||||
op_t(); break;
|
||||
case 0xc0: case 0xd0: case 0xe0: case 0xf0:
|
||||
op_tm(); break;
|
||||
|
||||
default:
|
||||
switch (m_op & 0xfc)
|
||||
{
|
||||
case 0x04: op_rm(); break;
|
||||
case 0x0c: op_sm(); break;
|
||||
case 0x10: op_exc(); break;
|
||||
case 0x14: op_exci(); break;
|
||||
case 0x18: op_lda(); break;
|
||||
case 0x1c: op_excd(); break;
|
||||
case 0x54: op_tmi(); break;
|
||||
case 0x68: op_tml(); break;
|
||||
|
||||
default:
|
||||
switch (m_op)
|
||||
{
|
||||
case 0x00: op_rot(); break;
|
||||
case 0x02: op_sbm(); break;
|
||||
case 0x03: op_atpl(); break;
|
||||
case 0x08: op_add(); break;
|
||||
case 0x09: op_add11(); break;
|
||||
case 0x0a: op_coma(); break;
|
||||
case 0x0b: op_exbla(); break;
|
||||
|
||||
case 0x50: op_kta(); break;
|
||||
case 0x51: op_tb(); break;
|
||||
case 0x52: op_tc(); break;
|
||||
case 0x53: op_tam(); break;
|
||||
case 0x58: op_tis(); break;
|
||||
case 0x59: op_atl(); break;
|
||||
case 0x5a: op_ta0(); break;
|
||||
case 0x5b: op_tabl(); break;
|
||||
case 0x5c: op_atx(); break;
|
||||
// case 0x5d: op_cend(); break;
|
||||
case 0x5e: op_tal(); break;
|
||||
case 0x5f: op_lbl(); break;
|
||||
|
||||
case 0x61: op_pre(); break;
|
||||
case 0x62: op_wr(); break;
|
||||
case 0x63: op_ws(); break;
|
||||
case 0x64: op_incb(); break;
|
||||
// case 0x65: op_idiv(); break;
|
||||
case 0x66: op_rc(); break;
|
||||
case 0x67: op_sc(); break;
|
||||
// case 0x68: op_tf1(); break;
|
||||
// case 0x69: op_tf4(); break;
|
||||
case 0x6c: op_decb(); break;
|
||||
case 0x6d: op_ptw(); break;
|
||||
case 0x6e: op_rtn0(); break;
|
||||
case 0x6f: op_rtn1(); break;
|
||||
|
||||
// extended opcodes
|
||||
case 0x60:
|
||||
m_op = m_op << 8 | m_param;
|
||||
switch (m_param)
|
||||
{
|
||||
case 0x30: op_rme(); break;
|
||||
case 0x31: op_sme(); break;
|
||||
case 0x32: op_tmel(); break;
|
||||
case 0x33: op_atfc(); break;
|
||||
case 0x34: op_bdc(); break;
|
||||
case 0x35: op_atbp(); break;
|
||||
|
||||
default: op_illegal(); break;
|
||||
}
|
||||
break; // 0x60
|
||||
|
||||
default: op_illegal(); break;
|
||||
}
|
||||
break; // 0xff
|
||||
|
||||
}
|
||||
break; // 0xfc
|
||||
|
||||
} // big switch
|
||||
}
|
||||
|
@ -2195,6 +2195,7 @@ maniac // Ideal
|
||||
|
||||
// hh_sm510
|
||||
ktopgun // Konami
|
||||
ktmnt // Konami
|
||||
gnwmndon // Nintendo
|
||||
|
||||
// hh_tms1k
|
||||
|
@ -148,7 +148,11 @@ READ8_MEMBER(hh_sm510_state::input_r)
|
||||
|
||||
Konami Top Gun
|
||||
* PCB label BH003
|
||||
* Sharp SM510 under epoxy (die label K/CM54C 598)
|
||||
* Sharp SM510 under epoxy (die label CMS54C, KMS598)
|
||||
|
||||
The ROM listing "BH003 Top Gun" from patent US5137277 is identical to the
|
||||
released version, except for 2 probable bit errors and filler bytes. Unused
|
||||
pages list data too, of what looks like assembler leftover garbage.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -217,11 +221,88 @@ MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Konami Teenage Mutant Ninja Turtles
|
||||
* Sharp SM511 under epoxy (die label KMS 73B, KMS 774)
|
||||
|
||||
The ROM listing "BH005 TMNT" from patent US5150899 is identical to the
|
||||
released version, excluding filler bytes.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
class ktmnt_state : public hh_sm510_state
|
||||
{
|
||||
public:
|
||||
ktmnt_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: hh_sm510_state(mconfig, type, tag)
|
||||
{
|
||||
m_inp_lines = 3;
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(speaker_w);
|
||||
};
|
||||
|
||||
// handlers
|
||||
|
||||
WRITE8_MEMBER(ktmnt_state::speaker_w)
|
||||
{
|
||||
m_speaker->level_w(data >> 0 & 1);
|
||||
}
|
||||
|
||||
|
||||
// config
|
||||
|
||||
static INPUT_PORTS_START( ktmnt )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_sm510_state, input_changed, NULL)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static MACHINE_CONFIG_START( ktmnt, ktmnt_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", SM511, XTAL_32_768kHz)
|
||||
MCFG_SM510_WRITE_SEGA_CB(WRITE16(hh_sm510_state, lcd_segment_w))
|
||||
MCFG_SM510_WRITE_SEGB_CB(WRITE16(hh_sm510_state, lcd_segment_w))
|
||||
MCFG_SM510_WRITE_SEGBS_CB(WRITE16(hh_sm510_state, lcd_segment_w))
|
||||
MCFG_SM510_READ_K_CB(READ8(hh_sm510_state, input_r))
|
||||
MCFG_SM510_WRITE_S_CB(WRITE8(hh_sm510_state, input_w))
|
||||
MCFG_SM510_WRITE_R_CB(WRITE8(ktmnt_state, speaker_w))
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_hh_sm510_test)
|
||||
|
||||
/* no video! */
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Nintendo Game & Watch: Mickey & Donald (model DM-53)
|
||||
* PCB label DM-53
|
||||
* Sharp SM510 label DM-53 (die label CM54C 565)
|
||||
* Sharp SM510 label DM-53 (die label CMS54C, CMS565)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -294,18 +375,26 @@ MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( ktopgun )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD( "bh003_598", 0x0000, 0x1000, CRC(50870b35) SHA1(cda1260c2e1c180995eced04b7d7ff51616dcef5) )
|
||||
ROM_LOAD( "cms54c_kms598", 0x0000, 0x1000, CRC(50870b35) SHA1(cda1260c2e1c180995eced04b7d7ff51616dcef5) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( ktmnt )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD( "kms_73b_774.music", 0x0000, 0x100, CRC(8270d626) SHA1(bd91ca1d5cd7e2a62eef05c0033b19dcdbe441ca) ) //todo
|
||||
ROM_LOAD( "kms_73b_774.prog", 0x0000, 0x1000, CRC(a1064f87) SHA1(92156c35fbbb414007ee6804fe635128a741d5f1) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( gnwmndon )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD( "dm53_565", 0x0000, 0x1000, CRC(e21fc0f5) SHA1(3b65ccf9f98813319410414e11a3231b787cdee6) )
|
||||
ROM_LOAD( "dm53_cms54c_565", 0x0000, 0x1000, CRC(e21fc0f5) SHA1(3b65ccf9f98813319410414e11a3231b787cdee6) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
|
||||
CONS( 1989, ktopgun, 0, 0, ktopgun, ktopgun, driver_device, 0, "Konami", "Top Gun (Konami)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING )
|
||||
CONS( 1989, ktmnt, 0, 0, ktmnt, ktmnt, driver_device, 0, "Konami", "Teenage Mutant Ninja Turtles (Konami)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING )
|
||||
|
||||
CONS( 1982, gnwmndon, 0, 0, gnwmndon, gnwmndon, driver_device, 0, "Nintendo", "Game & Watch: Mickey & Donald", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING )
|
||||
|
Loading…
Reference in New Issue
Block a user