This commit is contained in:
briantro 2016-10-05 23:24:05 -05:00
commit ab826e5594
61 changed files with 2506 additions and 1528 deletions

View File

@ -4502,6 +4502,7 @@ files {
MAME_DIR .. "src/mame/drivers/midas.cpp",
MAME_DIR .. "src/mame/drivers/miniboy7.cpp",
MAME_DIR .. "src/mame/drivers/mirax.cpp",
MAME_DIR .. "src/mame/drivers/mjsenpu.cpp",
MAME_DIR .. "src/mame/drivers/mole.cpp",
MAME_DIR .. "src/mame/drivers/mosaic.cpp",
MAME_DIR .. "src/mame/includes/mosaic.h",

View File

@ -421,7 +421,6 @@ void dsp56k_device::device_reset()
logerror("Dsp56k reset\n");
m_dsp56k_core.interrupt_cycles = 0;
m_dsp56k_core.ppc = 0x0000;
m_dsp56k_core.repFlag = 0;
m_dsp56k_core.repAddr = 0x0000;
@ -431,6 +430,8 @@ void dsp56k_device::device_reset()
agu_reset(&m_dsp56k_core);
alu_reset(&m_dsp56k_core);
m_dsp56k_core.ppc = m_dsp56k_core.PCU.pc;
/* HACK - Put a jump to 0x0000 at 0x0000 - this keeps the CPU locked to the instruction at address 0x0000 */
m_dsp56k_core.program->write_word(0x0000, 0x0124);
}
@ -450,9 +451,10 @@ void dsp56k_device::device_reset()
static size_t execute_one_new(dsp56k_core* cpustate)
{
// For MAME
cpustate->op = ROPCODE(ADDRESS(PC));
cpustate->ppc = PC;
debugger_instruction_hook(cpustate->device, PC);
cpustate->op = ROPCODE(ADDRESS(PC));
UINT16 w0 = ROPCODE(ADDRESS(PC));
UINT16 w1 = ROPCODE(ADDRESS(PC) + ADDRESS(1));

View File

@ -240,9 +240,10 @@ static void execute_one(dsp56k_core* cpustate)
UINT8 cycle_count = 0;
/* For MAME */
cpustate->op = ROPCODE(ADDRESS(PC));
cpustate->ppc = PC;
debugger_instruction_hook(cpustate->device, PC);
cpustate->op = ROPCODE(ADDRESS(PC));
/* The words we're going to be working with */
op = ROPCODE(ADDRESS(PC));
op2 = ROPCODE(ADDRESS(PC) + ADDRESS(1));
@ -2499,10 +2500,7 @@ static size_t dsp56k_op_bcc(dsp56k_core* cpustate, const UINT16 op, const UINT16
{
INT16 offset = (INT16)op2;
PC += 2;
cpustate->ppc = PC;
PC += offset;
PC += offset + 2;
cycles += 4;
return 0;
@ -2527,10 +2525,7 @@ static size_t dsp56k_op_bcc_1(dsp56k_core* cpustate, const UINT16 op, UINT8* cyc
{
INT16 offset = (INT16)assemble_address_from_6bit_signed_relative_short_address(cpustate, BITS(op,0x003f));
PC += 1;
cpustate->ppc = PC;
PC += offset;
PC += offset + 1;
cycles += 4;
return 0;
@ -2572,7 +2567,6 @@ static size_t dsp56k_op_bra_1(dsp56k_core* cpustate, const UINT16 op, UINT8* cyc
PC += 1;
/* Jump */
cpustate->ppc = PC;
PC += branchOffset;
/* S L E U N Z V C */
@ -2597,7 +2591,6 @@ static size_t dsp56k_op_brkcc(dsp56k_core* cpustate, const UINT16 op, UINT8* cyc
if (shouldBreak)
{
/* TODO: I think this PC = LA thing is off-by-1, but it's working this way because its consistently so */
cpustate->ppc = PC;
PC = LA;
SR = SSL; /* TODO: A-83. I believe only the Loop Flag and Forever Flag come back here. */
@ -2637,7 +2630,6 @@ static size_t dsp56k_op_bscc(dsp56k_core* cpustate, const UINT16 op, const UINT1
SSL = SR;
/* Change */
cpustate->ppc = PC;
PC = PC + (INT16)op2;
/* S L E U N Z V C */
@ -2672,7 +2664,6 @@ static size_t dsp56k_op_bsr(dsp56k_core* cpustate, const UINT16 op, const UINT16
SSL = SR;
/* Change */
cpustate->ppc = PC;
PC = PC + (INT16)op2;
/* S L E U N Z V C */
@ -2838,7 +2829,6 @@ static size_t dsp56k_op_do_1(dsp56k_core* cpustate, const UINT16 op, const UINT1
else
{
/* Skip over the contents of the loop */
cpustate->ppc = PC;
PC = PC + 2 + op2;
cycles += 10; /* TODO: + mv oscillator cycles */
@ -2908,7 +2898,6 @@ static size_t dsp56k_op_do_2(dsp56k_core* cpustate, const UINT16 op, const UINT1
else
{
/* Skip over the contents of the loop */
cpustate->ppc = PC;
PC = PC + 2 + op2;
cycles += 10; /* TODO: + mv oscillator cycles */
@ -3048,7 +3037,6 @@ static size_t dsp56k_op_jcc_1(dsp56k_core* cpustate, const UINT16 op, UINT8* cyc
/* JMP : 0000 0001 0011 01-- xxxx xxxx xxxx xxxx : A-110 */
static size_t dsp56k_op_jmp(dsp56k_core* cpustate, const UINT16 op, const UINT16 op2, UINT8* cycles)
{
cpustate->ppc = PC;
PC = op2;
/* S L E U N Z V C */
@ -3064,7 +3052,6 @@ static size_t dsp56k_op_jmp_1(dsp56k_core* cpustate, const UINT16 op, UINT8* cyc
typed_pointer R = { nullptr, DT_BYTE };
decode_RR_table(cpustate, BITS(op,0x0003), &R);
cpustate->ppc = PC;
PC = *((UINT16*)R.addr);
/* S L E U N Z V C */
@ -3091,7 +3078,6 @@ static size_t dsp56k_op_jscc(dsp56k_core* cpustate, const UINT16 op, const UINT1
SSH = PC;
SSL = SR;
cpustate->ppc = PC;
PC = branchOffset;
cycles += 4; /* TODO: +jx oscillator clock cycles */
@ -3133,7 +3119,6 @@ static size_t dsp56k_op_jsr(dsp56k_core* cpustate, const UINT16 op, const UINT16
SSH = cpustate->ppc;
SSL = SR;
cpustate->ppc = cpustate->ppc;
PC = branchOffset;
}
else
@ -3143,7 +3128,6 @@ static size_t dsp56k_op_jsr(dsp56k_core* cpustate, const UINT16 op, const UINT16
SSH = PC;
SSL = SR;
cpustate->ppc = PC;
PC = branchOffset;
}
@ -3863,7 +3847,6 @@ static size_t dsp56k_op_rti(dsp56k_core* cpustate, const UINT16 op, UINT8* cycle
return 0;
}
cpustate->ppc = PC;
PC = SSH;
SR = SSL;
@ -3880,7 +3863,6 @@ static size_t dsp56k_op_rti(dsp56k_core* cpustate, const UINT16 op, UINT8* cycle
static size_t dsp56k_op_rts(dsp56k_core* cpustate, const UINT16 op, UINT8* cycles)
{
/* Pop */
cpustate->ppc = PC;
PC = SSH;
/* SR = SSL; The status register is not affected. */
@ -4586,7 +4568,6 @@ static void dsp56k_process_loop(dsp56k_core* cpustate)
{
LC--;
cpustate->ppc = PC;
PC = SSH;
}
}

View File

@ -273,7 +273,6 @@ void pcu_service_interrupts(dsp56k_core* cpustate)
{
/* TODO: Implement long interrupts & fast interrupts correctly! */
/* Right now they are handled in the JSR & BSR ops. SupahLame. */
cpustate->ppc = PC;
/* Are you anything but the Host Command interrupt? */
if (interrupt_index != 22)

View File

@ -1524,7 +1524,6 @@ public:
}
void evaluate(dsp56k_core* cpustate) override
{
cpustate->ppc = PC;
PC = m_displacement;
/* S L E U N Z V C */
@ -1557,7 +1556,6 @@ public:
}
void evaluate(dsp56k_core* cpustate) override
{
cpustate->ppc = PC;
PC = regValue16(cpustate, m_destination);
/* S L E U N Z V C */

View File

@ -450,8 +450,7 @@ void sh2_device::BFS(UINT32 d)
if ((m_sh2_state->sr & T) == 0)
{
INT32 disp = ((INT32)d << 24) >> 24;
m_delay = m_sh2_state->pc;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_delay = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_sh2_state->icount--;
}
}
@ -467,7 +466,7 @@ void sh2_device::BRA(UINT32 d)
#if BUSY_LOOP_HACKS
if (disp == -2)
{
UINT32 next_opcode = RW( m_sh2_state->ppc & AM );
UINT32 next_opcode = RW(m_sh2_state->pc & AM);
/* BRA $
* NOP
*/
@ -475,8 +474,7 @@ void sh2_device::BRA(UINT32 d)
m_sh2_state->icount %= 3; /* cycles for BRA $ and NOP taken (3) */
}
#endif
m_delay = m_sh2_state->pc;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_delay = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_sh2_state->icount--;
}
@ -486,8 +484,7 @@ void sh2_device::BRA(UINT32 d)
*/
void sh2_device::BRAF(UINT32 m)
{
m_delay = m_sh2_state->pc;
m_sh2_state->pc += m_sh2_state->r[m] + 2;
m_delay = m_sh2_state->pc + m_sh2_state->r[m] + 2;
m_sh2_state->icount--;
}
@ -500,8 +497,7 @@ void sh2_device::BSR(UINT32 d)
INT32 disp = ((INT32)d << 20) >> 20;
m_sh2_state->pr = m_sh2_state->pc + 2;
m_delay = m_sh2_state->pc;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_delay = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_sh2_state->icount--;
}
@ -512,8 +508,7 @@ void sh2_device::BSR(UINT32 d)
void sh2_device::BSRF(UINT32 m)
{
m_sh2_state->pr = m_sh2_state->pc + 2;
m_delay = m_sh2_state->pc;
m_sh2_state->pc += m_sh2_state->r[m] + 2;
m_delay = m_sh2_state->pc + m_sh2_state->r[m] + 2;
m_sh2_state->icount--;
}
@ -540,8 +535,7 @@ void sh2_device::BTS(UINT32 d)
if ((m_sh2_state->sr & T) != 0)
{
INT32 disp = ((INT32)d << 24) >> 24;
m_delay = m_sh2_state->pc;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_delay = m_sh2_state->ea = m_sh2_state->pc + disp * 2 + 2;
m_sh2_state->icount--;
}
}
@ -895,7 +889,7 @@ void sh2_device::DT(UINT32 n)
m_sh2_state->sr &= ~T;
#if BUSY_LOOP_HACKS
{
UINT32 next_opcode = RW( m_sh2_state->ppc & AM );
UINT32 next_opcode = RW(m_sh2_state->pc & AM);
/* DT Rn
* BF $-2
*/
@ -955,17 +949,15 @@ void sh2_device::ILLEGAL()
/* JMP @Rm */
void sh2_device::JMP(UINT32 m)
{
m_delay = m_sh2_state->pc;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->r[m];
m_delay = m_sh2_state->ea = m_sh2_state->r[m];
m_sh2_state->icount--;
}
/* JSR @Rm */
void sh2_device::JSR(UINT32 m)
{
m_delay = m_sh2_state->pc;
m_sh2_state->pr = m_sh2_state->pc + 2;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->r[m];
m_delay = m_sh2_state->ea = m_sh2_state->r[m];
m_sh2_state->icount--;
}
@ -1575,8 +1567,7 @@ void sh2_device::ROTR(UINT32 n)
void sh2_device::RTE()
{
m_sh2_state->ea = m_sh2_state->r[15];
m_delay = m_sh2_state->pc;
m_sh2_state->pc = RL( m_sh2_state->ea );
m_delay = RL( m_sh2_state->ea );
m_sh2_state->r[15] += 4;
m_sh2_state->ea = m_sh2_state->r[15];
m_sh2_state->sr = RL( m_sh2_state->ea ) & FLAGS;
@ -1588,8 +1579,7 @@ void sh2_device::RTE()
/* RTS */
void sh2_device::RTS()
{
m_delay = m_sh2_state->pc;
m_sh2_state->pc = m_sh2_state->ea = m_sh2_state->pr;
m_delay = m_sh2_state->ea = m_sh2_state->pr;
m_sh2_state->icount--;
}
@ -2262,7 +2252,7 @@ void sh2_device::op1111(UINT16 opcode)
void sh2_device::device_reset()
{
m_sh2_state->ppc = m_sh2_state->pc = m_sh2_state->pr = m_sh2_state->sr = m_sh2_state->gbr = m_sh2_state->vbr = m_sh2_state->mach = m_sh2_state->macl = 0;
m_sh2_state->pc = m_sh2_state->pr = m_sh2_state->sr = m_sh2_state->gbr = m_sh2_state->vbr = m_sh2_state->mach = m_sh2_state->macl = 0;
m_sh2_state->evec = m_sh2_state->irqsr = 0;
memset(&m_sh2_state->r[0], 0, sizeof(m_sh2_state->r[0])*16);
m_sh2_state->ea = m_delay = m_cpu_off = m_dvsr = m_dvdnth = m_dvdntl = m_dvcr = 0;
@ -2319,19 +2309,17 @@ void sh2_device::execute_run()
{
UINT32 opcode;
debugger_instruction_hook(this, m_sh2_state->pc & AM);
opcode = m_program->read_word(m_sh2_state->pc & AM);
if (m_delay)
{
opcode = m_program->read_word(((UINT32)(m_delay & AM)));
m_sh2_state->pc -= 2;
m_sh2_state->pc = m_delay;
m_delay = 0;
}
else
opcode = m_program->read_word(((UINT32)(m_sh2_state->pc & AM)));
debugger_instruction_hook(this, m_sh2_state->pc);
m_delay = 0;
m_sh2_state->pc += 2;
m_sh2_state->ppc = m_sh2_state->pc;
m_sh2_state->pc += 2;
switch (opcode & ( 15 << 12))
{
@ -2459,14 +2447,13 @@ void sh2_device::device_start()
state_add( SH2_EA, "EA", m_sh2_state->ea).formatstr("%08X");
state_add( STATE_GENPC, "GENPC", m_sh2_state->pc ).noshow();
state_add( STATE_GENPCBASE, "CURPC", m_sh2_state->ppc ).noshow();
state_add( STATE_GENPCBASE, "CURPC", m_sh2_state->pc ).noshow();
state_add( STATE_GENSP, "GENSP", m_sh2_state->r[15] ).noshow();
state_add( STATE_GENFLAGS, "GENFLAGS", m_sh2_state->sr ).formatstr("%6s").noshow();
m_icountptr = &m_sh2_state->icount;
// Clear state
m_sh2_state->ppc = 0;
m_sh2_state->pc = 0;
m_sh2_state->pr = 0;
m_sh2_state->sr = 0;
@ -2620,7 +2607,7 @@ void sh2_device::state_export(const device_state_entry &entry)
switch (entry.index())
{
case SH2_PC:
m_debugger_temp = (m_delay) ? (m_delay & AM) : (m_sh2_state->pc & AM);
m_debugger_temp = m_sh2_state->pc & AM;
break;
}
}

View File

@ -145,7 +145,6 @@ private:
// Data that needs to be stored close to the generated DRC code
struct internal_sh2_state
{
UINT32 ppc;
UINT32 pc;
UINT32 pr;
UINT32 sr;

View File

@ -533,8 +533,7 @@ inline void sh34_base_device::BFS(const UINT16 opcode)
if ((m_sr & T) == 0)
{
INT32 disp = ((INT32)(opcode&0xff) << 24) >> 24;
m_delay = m_pc;
m_pc = m_ea = m_pc + disp * 2 + 2;
m_delay = m_ea = m_pc + disp * 2 + 2;
m_sh4_icount--;
}
}
@ -550,7 +549,7 @@ inline void sh34_base_device::BRA(const UINT16 opcode)
#if BUSY_LOOP_HACKS
if (disp == -2)
{
UINT32 next_opcode = RW(m_ppc & AM);
UINT32 next_opcode = RW(m_pc & AM);
/* BRA $
* NOP
*/
@ -558,8 +557,7 @@ inline void sh34_base_device::BRA(const UINT16 opcode)
m_sh4_icount %= 3; /* cycles for BRA $ and NOP taken (3) */
}
#endif
m_delay = m_pc;
m_pc = m_ea = m_pc + disp * 2 + 2;
m_delay = m_ea = m_pc + disp * 2 + 2;
m_sh4_icount--;
}
@ -569,8 +567,7 @@ inline void sh34_base_device::BRA(const UINT16 opcode)
*/
inline void sh34_base_device::BRAF(const UINT16 opcode)
{
m_delay = m_pc;
m_pc += m_r[Rn] + 2;
m_delay = m_pc + m_r[Rn] + 2;
m_sh4_icount--;
}
@ -583,8 +580,7 @@ inline void sh34_base_device::BSR(const UINT16 opcode)
INT32 disp = ((INT32)(opcode&0xfff) << 20) >> 20;
m_pr = m_pc + 2;
m_delay = m_pc;
m_pc = m_ea = m_pc + disp * 2 + 2;
m_delay = m_ea = m_pc + disp * 2 + 2;
m_sh4_icount--;
}
@ -595,8 +591,7 @@ inline void sh34_base_device::BSR(const UINT16 opcode)
inline void sh34_base_device::BSRF(const UINT16 opcode)
{
m_pr = m_pc + 2;
m_delay = m_pc;
m_pc += m_r[Rn] + 2;
m_delay = m_pc + m_r[Rn] + 2;
m_sh4_icount--;
}
@ -623,8 +618,7 @@ inline void sh34_base_device::BTS(const UINT16 opcode)
if ((m_sr & T) != 0)
{
INT32 disp = ((INT32)(opcode&0xff) << 24) >> 24;
m_delay = m_pc;
m_pc = m_ea = m_pc + disp * 2 + 2;
m_delay = m_ea = m_pc + disp * 2 + 2;
m_sh4_icount--;
}
}
@ -988,7 +982,7 @@ inline void sh34_base_device::DT(const UINT16 opcode)
m_sr &= ~T;
#if BUSY_LOOP_HACKS
{
UINT32 next_opcode = RW(m_ppc & AM);
UINT32 next_opcode = RW(m_pc & AM);
/* DT Rn
* BF $-2
*/
@ -1031,16 +1025,14 @@ inline void sh34_base_device::EXTUW(const UINT16 opcode)
/* JMP @Rm */
inline void sh34_base_device::JMP(const UINT16 opcode)
{
m_delay = m_pc;
m_pc = m_ea = m_r[Rn];
m_delay = m_ea = m_r[Rn];
}
/* JSR @Rm */
inline void sh34_base_device::JSR(const UINT16 opcode)
{
m_delay = m_pc;
m_pr = m_pc + 2;
m_pc = m_ea = m_r[Rn];
m_delay = m_ea = m_r[Rn];
m_sh4_icount--;
}
@ -1680,8 +1672,7 @@ inline void sh34_base_device::ROTR(const UINT16 opcode)
/* RTE */
inline void sh34_base_device::RTE(const UINT16 opcode)
{
m_delay = m_pc;
m_pc = m_ea = m_spc;
m_delay = m_ea = m_spc;
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
sh4_syncronize_register_bank((m_sr & sRB) >> 29);
if ((m_ssr & sRB) != (m_sr & sRB))
@ -1694,8 +1685,7 @@ inline void sh34_base_device::RTE(const UINT16 opcode)
/* RTS */
inline void sh34_base_device::RTS(const UINT16 opcode)
{
m_delay = m_pc;
m_pc = m_ea = m_pr;
m_delay = m_ea = m_pr;
m_sh4_icount--;
}
@ -3075,7 +3065,6 @@ inline void sh34_base_device::op1111_0x13(UINT16 opcode)
void sh34_base_device::device_reset()
{
m_ppc = 0;
m_spc = 0;
m_pr = 0;
m_sr = 0;
@ -3153,6 +3142,7 @@ void sh34_base_device::device_reset()
m_rtc_timer->adjust(attotime::from_hz(128));
m_pc = 0xa0000000;
m_ppc = m_pc & AM;
m_r[15] = RL(4);
m_sr = 0x700000f0;
m_fpscr = 0x00040001;
@ -3946,37 +3936,24 @@ void sh34_base_device::execute_run()
do
{
m_ppc = m_pc & AM;
debugger_instruction_hook(this, m_pc & AM);
const UINT16 opcode = m_direct->read_word(m_pc & AM, WORD2_XOR_LE(0));
if (m_delay)
{
const UINT16 opcode = m_direct->read_word((UINT32)(m_delay & AM), WORD2_XOR_LE(0));
debugger_instruction_hook(this, (m_pc-2) & AM);
m_pc = m_delay;
m_delay = 0;
m_ppc = m_pc;
execute_one(opcode);
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
}
else
{
const UINT16 opcode = m_direct->read_word((UINT32)(m_pc & AM), WORD2_XOR_LE(0));
debugger_instruction_hook(this, m_pc & AM);
m_pc += 2;
m_ppc = m_pc;
execute_one(opcode);
execute_one(opcode);
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
m_sh4_icount--;
@ -3993,40 +3970,24 @@ void sh3be_device::execute_run()
do
{
m_ppc = m_pc & AM;
debugger_instruction_hook(this, m_pc & AM);
const UINT16 opcode = m_direct->read_word(m_pc & AM, WORD_XOR_LE(6));
if (m_delay)
{
const UINT16 opcode = m_direct->read_word((UINT32)(m_delay & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_delay & AM);
m_pc = m_delay;
m_delay = 0;
m_ppc = m_pc;
execute_one(opcode);
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
}
else
{
const UINT16 opcode = m_direct->read_word((UINT32)(m_pc & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_pc & AM);
m_pc += 2;
m_ppc = m_pc;
execute_one(opcode);
execute_one(opcode);
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
m_sh4_icount--;
@ -4043,40 +4004,24 @@ void sh4be_device::execute_run()
do
{
m_ppc = m_pc & AM;
debugger_instruction_hook(this, m_pc & AM);
const UINT16 opcode = m_direct->read_word(m_pc & AM, WORD_XOR_LE(6));
if (m_delay)
{
const UINT16 opcode = m_direct->read_word((UINT32)(m_delay & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_delay & AM);
m_pc = m_delay;
m_delay = 0;
m_ppc = m_pc;
execute_one(opcode);
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
}
else
{
const UINT16 opcode = m_direct->read_word((UINT32)(m_pc & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_pc & AM);
m_pc += 2;
m_ppc = m_pc;
execute_one(opcode);
execute_one(opcode);
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
if (m_test_irq && !m_delay)
{
sh4_check_pending_irq("mame_sh4_execute");
}
m_sh4_icount--;
@ -4440,9 +4385,9 @@ void sh34_base_device::state_export(const device_state_entry &entry)
{
switch (entry.index())
{
case STATE_GENPC:
m_debugger_temp = (m_delay) ? (m_delay & AM) : (m_pc & AM);
break;
case STATE_GENPC:
m_debugger_temp = (m_pc & AM);
break;
}
}

View File

@ -433,7 +433,8 @@ void dmg_ppu_device::common_start()
save_item(NAME(m_next_state));
save_item(NAME(m_old_curline));
for (int i = 0; i < ARRAY_LENGTH(m_layer); i++) {
for (int i = 0; i < ARRAY_LENGTH(m_layer); i++)
{
save_item(NAME(m_layer[i].enabled), i);
save_item(NAME(m_layer[i].xindex), i);
save_item(NAME(m_layer[i].xshift), i);
@ -468,7 +469,8 @@ void dmg_ppu_device::common_start()
save_item(NAME(m_line.window_enable));
save_item(NAME(m_line.window_enable_index));
save_item(NAME(m_line.window_should_trigger));
for (int i = 0; i < ARRAY_LENGTH(m_line.sprite); i++) {
for (int i = 0; i < ARRAY_LENGTH(m_line.sprite); i++)
{
save_item(NAME(m_line.sprite[i].enabled), i);
save_item(NAME(m_line.sprite[i].x), i);
save_item(NAME(m_line.sprite[i].y), i);
@ -822,7 +824,7 @@ void dmg_ppu_device::update_line_state(UINT64 cycles)
if (m_line.scrollx_to_apply > 0)
{
// TODO: Determine when the scrollx shifts are applied when window-x is <= 0x07
//logerror("scrollx_to_apply: %u\n", m_line.scrollx_to_apply);
LOG(("scrollx_to_apply: %u\n", m_line.scrollx_to_apply));
if (!m_line.window_active)
{
m_line.shift_register <<= 2;
@ -969,6 +971,15 @@ void dmg_ppu_device::update_line_state(UINT64 cycles)
next_tile_cycle = m_line.sprite_delay_cycles == 0 ? 0 : 8;
break;
case 9: // eat scrollx delay cycles before starting window
LOG(("eating scrollx_to_apply: %u\n", m_line.scrollx_to_apply));
m_line.window_compare_position--;
m_line.scrollx_to_apply--;
m_cycles_left++;
m_scrollx_adjust++;
next_tile_cycle = m_line.scrollx_to_apply == 0 ? 0 : 9;
break;
default:
next_tile_cycle &= 7;
break;
@ -1013,7 +1024,7 @@ LOG(("enable window, m_current_line = %u, WNDPOSY = %u, WNDPOSX = %u, m_line.win
m_line.starting = true;
m_line.window_active = true;
m_frame_window_active = true;
m_line.tile_cycle = 0;
m_line.tile_cycle = !m_line.drawing && m_line.scrollx_to_apply > 0 ? 9 : 0;
m_line.tile_count = 0;
m_window_cycles = 6;
m_cycles_left += 6;

View File

@ -77,9 +77,9 @@ device_state_entry::device_state_entry(int index, const char *symbol, void *data
// override well-known symbols
if (index == STATE_GENPC)
m_symbol.assign("CURPC");
m_symbol.assign("GENPC");
else if (index == STATE_GENPCBASE)
m_symbol.assign("CURPCBASE");
m_symbol.assign("CURPC");
else if (index == STATE_GENSP)
m_symbol.assign("CURSP");
else if (index == STATE_GENFLAGS)

View File

@ -45,12 +45,18 @@ const UINT32 MACHINE_TYPE_OTHER = 0x00200000; // any other emul
const UINT32 MACHINE_IMPERFECT_KEYBOARD = 0x00400000; // keyboard is known to be wrong
const UINT32 MACHINE_CLICKABLE_ARTWORK = 0x00800000; // marking that artwork is clickable and require mouse cursor
const UINT32 MACHINE_IS_INCOMPLETE = 0x01000000; // any official game/system with blantantly incomplete HW or SW should be marked with this
const UINT32 MACHINE_NODEVICE_MICROPHONE = 0x02000000; // any game/system that has unemulated recording voice device peripheral
const UINT32 MACHINE_NODEVICE_CAMERA = 0x04000000; // any game/system that has unemulated capturing image device peripheral
const UINT32 MACHINE_NODEVICE_PRINTER = 0x08000000; // any game/system that has unemulated grabbing of screen content device
const UINT32 MACHINE_NODEVICE_LAN = 0x10000000; // any game/system that has unemulated multi-linking capability
const UINT32 MACHINE_NODEVICE_WAN = 0x20000000; // any game/system that has unemulated networking capability
// useful combinations of flags
const UINT32 MACHINE_IS_SKELETON = MACHINE_NO_SOUND | MACHINE_NOT_WORKING; // mask for skelly games
const UINT32 MACHINE_IS_SKELETON_MECHANICAL = MACHINE_IS_SKELETON | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK; // mask for skelly mechanical games
const UINT32 MACHINE_FATAL_FLAGS = MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL; // red disclaimer
const UINT32 MACHINE_WARNING_FLAGS = MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_KEYBOARD | MACHINE_NO_SOUND | MACHINE_NO_COCKTAIL | MACHINE_NODEVICE_MICROPHONE | MACHINE_NODEVICE_CAMERA | MACHINE_NODEVICE_PRINTER | MACHINE_NODEVICE_LAN | MACHINE_NODEVICE_WAN; // yellow disclaimer
const UINT32 MACHINE_BTANB_FLAGS = MACHINE_IS_INCOMPLETE | MACHINE_NO_SOUND_HW; // default disclaimer
//**************************************************************************
// TYPE DEFINITIONS

View File

@ -59,19 +59,7 @@ machine_info::machine_info(running_machine &machine)
std::string machine_info::warnings_string()
{
constexpr UINT32 warning_flags = ( MACHINE_NOT_WORKING |
MACHINE_UNEMULATED_PROTECTION |
MACHINE_MECHANICAL |
MACHINE_WRONG_COLORS |
MACHINE_IMPERFECT_COLORS |
MACHINE_REQUIRES_ARTWORK |
MACHINE_NO_SOUND |
MACHINE_IMPERFECT_SOUND |
MACHINE_IMPERFECT_GRAPHICS |
MACHINE_IMPERFECT_KEYBOARD |
MACHINE_NO_COCKTAIL |
MACHINE_IS_INCOMPLETE |
MACHINE_NO_SOUND_HW );
constexpr UINT32 warning_flags = ( MACHINE_FATAL_FLAGS | MACHINE_WARNING_FLAGS | MACHINE_BTANB_FLAGS );
// if no warnings, nothing to return
if (m_machine.rom_load().warnings() == 0 && m_machine.rom_load().knownbad() == 0 && !(m_machine.system().flags & warning_flags) && m_machine.rom_load().software_load_warnings_message().length() == 0)
@ -120,7 +108,7 @@ std::string machine_info::warnings_string()
// check if external artwork is present before displaying this warning?
if (m_machine.system().flags & MACHINE_REQUIRES_ARTWORK) {
buf << _("The machine requires external artwork files\n");
buf << _("The machine requires external artwork files.\n");
}
if (m_machine.system().flags & MACHINE_IS_INCOMPLETE )
@ -128,13 +116,29 @@ std::string machine_info::warnings_string()
buf << _("This machine was never completed. It may exhibit strange behavior or missing elements that are not bugs in the emulation.\n");
}
if (m_machine.system().flags & MACHINE_NODEVICE_MICROPHONE )
buf << _("This machine has unemulated microphone device.\n");
if (m_machine.system().flags & MACHINE_NODEVICE_CAMERA )
buf << _("This machine has unemulated camera device.\n");
if (m_machine.system().flags & MACHINE_NODEVICE_PRINTER )
buf << _("This machine has unemulated printer device.\n");
if (m_machine.system().flags & MACHINE_NODEVICE_LAN )
buf << _("This machine has unemulated linking capabilities.\n");
if (m_machine.system().flags & MACHINE_NODEVICE_WAN )
buf << _("This machine has unemulated networking capabilities.\n");
if (m_machine.system().flags & MACHINE_NO_SOUND_HW )
{
buf << _("This machine has no sound hardware, MAME will produce no sounds, this is expected behaviour.\n");
}
// if there's a NOT WORKING, UNEMULATED PROTECTION or GAME MECHANICAL warning, make it stronger
if (m_machine.system().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL))
if (m_machine.system().flags & (MACHINE_FATAL_FLAGS))
{
// add the strings for these warnings
if (m_machine.system().flags & MACHINE_UNEMULATED_PROTECTION) {

View File

@ -313,9 +313,10 @@ void mame_ui_manager::display_startup_screens(bool first_time)
if (!messagebox_text.empty())
{
set_handler(ui_callback_type::MODAL, std::bind(&mame_ui_manager::handler_messagebox_anykey, this, _1));
if (machine().system().flags & (MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_KEYBOARD | MACHINE_NO_SOUND))
// TODO: don't think BTANB should be marked yellow? Also move this snippet to specific getter
if (machine().system().flags & (MACHINE_WARNING_FLAGS|MACHINE_BTANB_FLAGS))
messagebox_backcolor = UI_YELLOW_COLOR;
if (machine().system().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL))
if (machine().system().flags & (MACHINE_FATAL_FLAGS))
messagebox_backcolor = UI_RED_COLOR;
}
break;

View File

@ -1735,15 +1735,15 @@ GAME( 1988, asukaj, asuka, asuka, asuka, driver_device, 0, ROT270, "
GAME( 1989, mofflott, 0, mofflott, mofflott, driver_device, 0, ROT270, "Taito Corporation", "Maze of Flott (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadash, 0, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashj, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation", "Cadash (Japan, version 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashj1, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation", "Cadash (Japan, version 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashjo, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation", "Cadash (Japan, oldest version)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashu, cadash, cadash, cadashu, driver_device, 0, ROT0, "Taito America Corporation", "Cadash (US, version 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashi, cadash, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (Italy)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashf, cadash, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (France)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashg, cadash, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (Germany, version 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadashp, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (World, prototype)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cadash, 0, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashj, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation", "Cadash (Japan, version 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashj1, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation", "Cadash (Japan, version 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashjo, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation", "Cadash (Japan, oldest version)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashu, cadash, cadash, cadashu, driver_device, 0, ROT0, "Taito America Corporation", "Cadash (US, version 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashi, cadash, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashf, cadash, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (France)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashg, cadash, cadash, cadash, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (Germany, version 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1989, cadashp, cadash, cadash, cadashj, driver_device, 0, ROT0, "Taito Corporation Japan", "Cadash (World, prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN)
GAME( 1992, galmedes, 0, galmedes, galmedes, driver_device, 0, ROT270, "Visco", "Galmedes (Japan)", MACHINE_SUPPORTS_SAVE )

View File

@ -108,7 +108,7 @@ ROM R 000000-03ffff <
Work RAM RW 0c0000-0c3fff 180000-183fff
Shared RAM RW 040000-047fff 080000-087fff
Road RAM RW 080000-0807ff 100000-1007ff
Whatchdog 100000-100001 200000-200001
Watchdog 100000-100001 200000-200001
----------------------------------------------------------------
----------------------------------------------------------------
@ -218,7 +218,7 @@ static ADDRESS_MAP_START( bigrun_map, AS_PROGRAM, 16, cischeat_state )
Each board expects reads from the other boards and writes to own bank.
Amusingly, if you run the communication test as ID = X then soft reset -> ID = Y, what was at ID = X gets an OK in the second test
so it's likely to be the only thing needed. */
AM_RANGE(0x084000, 0x087fff) AM_RAM // Linking with other units
AM_RANGE(0x084000, 0x0847ff) AM_RAM // Linking with other units
AM_RANGE(0x088000, 0x08bfff) AM_RAM AM_SHARE("share2") // Sharedram with sub CPU#2
AM_RANGE(0x08c000, 0x08ffff) AM_RAM AM_SHARE("share1") // Sharedram with sub CPU#1
@ -268,7 +268,7 @@ static ADDRESS_MAP_START( cischeat_map, AS_PROGRAM, 16, cischeat_state )
AM_RANGE(0x082308, 0x082309) AM_WRITE(cischeat_comms_w)
AM_RANGE(0x082400, 0x082401) AM_WRITE(active_layers_w)
AM_RANGE(0x088000, 0x088fff) AM_RAM // Linking with other units
AM_RANGE(0x088000, 0x0887ff) AM_RAM // Linking with other units
/* Only the first 0x800 bytes are tested but:
CPU #0 PC 0000278c: warning - write 68c0 to unmapped memory address 0009c7fe
@ -330,7 +330,7 @@ static ADDRESS_MAP_START( f1gpstar_map, AS_PROGRAM, 16, cischeat_state )
AM_RANGE(0x082308, 0x082309) AM_READNOP AM_WRITE(f1gpstar_comms_w)
AM_RANGE(0x082400, 0x082401) AM_WRITE(active_layers_w)
AM_RANGE(0x088000, 0x088fff) AM_RAM // Linking with other units
AM_RANGE(0x088000, 0x0883ff) AM_RAM // Linking with other units
AM_RANGE(0x090000, 0x097fff) AM_RAM AM_SHARE("share2") // Sharedram with sub CPU#2
AM_RANGE(0x098000, 0x09ffff) AM_RAM AM_SHARE("share1") // Sharedram with sub CPU#1
@ -351,15 +351,47 @@ ADDRESS_MAP_END
Wild Pilot
**************************************************************************/
// ad stick read select
READ16_MEMBER(cischeat_state::wildplt_xy_r)
{
switch(m_ip_select)
{
case 1: return ioport("P2Y")->read() | (ioport("P2X")->read()<<8);
case 2: return ioport("P1Y")->read() | (ioport("P1X")->read()<<8);
}
return 0xffff;
}
// buttons & sensors are
READ16_MEMBER(cischeat_state::wildplt_mux_r)
{
UINT16 split_in = 0xffff;
switch(m_wildplt_output & 0xc)
{
// case 0: return ioport("IN1")->read();
case 4: split_in = ioport("IN1_1")->read(); break;
case 8: split_in = ioport("IN1_2")->read(); break;
}
return split_in & ioport("IN1_COMMON")->read();
}
WRITE16_MEMBER(cischeat_state::wildplt_mux_w)
{
m_wildplt_output = data & 0xc;
}
// Same as f1gpstar, but vregs are slightly different:
static ADDRESS_MAP_START( wildplt_map, AS_PROGRAM, 16, cischeat_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM
AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0") AM_WRITE(f1gpstr2_io_w) // DSW 1 & 2
AM_RANGE(0x080004, 0x080005) AM_READ_PORT("IN1") AM_WRITE(f1gpstar_motor_w) // Buttons
AM_RANGE(0x080004, 0x080005) AM_READ(wildplt_mux_r) AM_WRITE(wildplt_mux_w) // Buttons
AM_RANGE(0x080008, 0x080009) AM_DEVREAD("soundlatch2", generic_latch_16_device, read) // From sound cpu
AM_RANGE(0x080008, 0x080009) AM_DEVWRITE("soundlatch", generic_latch_16_device, write) // To sound cpu
AM_RANGE(0x08000c, 0x08000d) AM_WRITENOP // 1000, 3000
AM_RANGE(0x080010, 0x080011) AM_READ(wildplt_xy_r) AM_WRITENOP // X, Y
AM_RANGE(0x080010, 0x080011) AM_READ(wildplt_xy_r) AM_WRITE(ip_select_w) // X, Y
AM_RANGE(0x080014, 0x080015) AM_WRITENOP
AM_RANGE(0x080018, 0x080019) AM_READWRITE(f1gpstr2_ioready_r, f1gpstar_soundint_w)
@ -373,7 +405,7 @@ static ADDRESS_MAP_START( wildplt_map, AS_PROGRAM, 16, cischeat_state )
AM_RANGE(0x082308, 0x082309) AM_READNOP AM_WRITE(f1gpstar_comms_w)
AM_RANGE(0x082400, 0x082401) AM_WRITE(active_layers_w)
AM_RANGE(0x088000, 0x088fff) AM_RAM // Linking with other units
// AM_RANGE(0x088000, 0x088fff) AM_RAM // Linking with other units
AM_RANGE(0x090000, 0x097fff) AM_RAM AM_SHARE("share2") // Sharedram with sub CPU#2
AM_RANGE(0x098000, 0x09ffff) AM_RAM AM_SHARE("share1") // Sharedram with sub CPU#1
@ -417,7 +449,8 @@ static ADDRESS_MAP_START( f1gpstr2_map, AS_PROGRAM, 16, cischeat_state )
AM_RANGE(0x082308, 0x082309) AM_READNOP AM_WRITE(f1gpstar_comms_w)
AM_RANGE(0x082400, 0x082401) AM_WRITE(active_layers_w)
AM_RANGE(0x088000, 0x088fff) AM_RAM // Linking with other units
// 0x100 RAM banks instead of 0x200
AM_RANGE(0x088000, 0x0887ff) AM_RAM // Linking with other units
AM_RANGE(0x090000, 0x097fff) AM_RAM AM_SHARE("share2") // Sharedram with sub CPU#2
AM_RANGE(0x098000, 0x09ffff) AM_RAM AM_SHARE("share1") // Sharedram with sub CPU#1
@ -1381,6 +1414,20 @@ static INPUT_PORTS_START( f1gpstar )
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(40) PORT_REVERSE
INPUT_PORTS_END
static INPUT_PORTS_START( f1gpstr2 )
PORT_INCLUDE( f1gpstar )
PORT_MODIFY("IN4")
PORT_DIPNAME( 0x0e, 0x00, "Unit ID" ) PORT_DIPLOCATION("SW03:2,3,4") // -> !f901c
PORT_DIPSETTING( 0x00, "1 (McLaren)" )
PORT_DIPSETTING( 0x02, "2 (Williams)" )
PORT_DIPSETTING( 0x04, "3 (Benetton)" )
PORT_DIPSETTING( 0x06, "4 (Ferrari)" )
PORT_DIPSETTING( 0x08, "5 (Tyrrell)" )
PORT_DIPSETTING( 0x0a, "6 (Lotus)" )
PORT_DIPSETTING( 0x0c, "7 (Jordan)" )
PORT_DIPSETTING( 0x0e, "8 (Ligier)" )
INPUT_PORTS_END
/**************************************************************************
Wild Pilot
@ -1436,29 +1483,44 @@ static INPUT_PORTS_START( wildplt )
PORT_DIPSETTING( 0xc000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x0000, "France?" )
PORT_START("IN1")
PORT_START("IN1_COMMON")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) //service 1 too
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) //start 2 too
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN1_1")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
PORT_BIT( 0xfff3, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN1_2")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Bomb")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Shot")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Missile")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Shot")
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Missile")
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Bomb")
PORT_BIT( 0xfe01, IP_ACTIVE_LOW, IPT_UNKNOWN )
#if 0
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Up Limit SW.
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Dow Limit SW.
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Center SW.
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Senser SW. #1
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Senser SW. #2
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Emergency Button") //E Stop for motors? ( Senser SW. #3 )
#endif
PORT_START("P1Y")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1)
PORT_START("IN2")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_REVERSE
PORT_START("P1X")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1)
PORT_START("IN3")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15)
PORT_START("P2Y")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2)
PORT_START("P2X")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(2)
INPUT_PORTS_END
@ -1819,19 +1881,22 @@ GFXDECODE_END
Big Run, Cisco Heat, F1 GrandPrix Star
**************************************************************************/
/* TODO: this is hackish */
/*
irq 1 is comms related, presumably the bridge chip is capable of sending the irq signal at given times. Wild Pilot of course doesn't need it.
irq 2/4 controls gameplay speed, currently unknown about the timing
*/
TIMER_DEVICE_CALLBACK_MEMBER(cischeat_state::bigrun_scanline)
{
int scanline = param;
if(scanline == 240) // vblank-out irq
m_cpu1->set_input_line(4, HOLD_LINE);
m_cpu1->set_input_line(m_screen->frame_number() & 1 ? 4 : 1, HOLD_LINE);
if(scanline == 154)
if(scanline == 0)
m_cpu1->set_input_line(2, HOLD_LINE);
if(scanline == 69)
m_cpu1->set_input_line(1, HOLD_LINE);
// if(scanline == 69)
// m_cpu1->set_input_line(1, HOLD_LINE);
}
@ -1866,7 +1931,7 @@ static MACHINE_CONFIG_START( bigrun, cischeat_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_REFRESH_RATE(30) //TODO: wrong!
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1)
@ -1874,7 +1939,7 @@ static MACHINE_CONFIG_START( bigrun, cischeat_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bigrun)
MCFG_PALETTE_ADD("palette", 0x4000/2)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x4000/2)
MCFG_PALETTE_ENABLE_SHADOWS()
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
@ -2040,7 +2105,7 @@ static MACHINE_CONFIG_START( scudhamm, cischeat_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", scudhamm)
MCFG_PALETTE_ADD("palette", 0x8000/2)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x8000/2)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
MCFG_PALETTE_ENABLE_SHADOWS()
@ -2129,7 +2194,7 @@ static MACHINE_CONFIG_START( captflag, cischeat_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", scudhamm)
MCFG_PALETTE_ADD("palette", 0x8000/2)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x8000/2)
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
MCFG_PALETTE_ENABLE_SHADOWS()
@ -3451,12 +3516,12 @@ DRIVER_INIT_MEMBER(cischeat_state, captflag)
***************************************************************************/
GAMEL( 1989, bigrun, 0, bigrun, bigrun, cischeat_state, bigrun, ROT0, "Jaleco", "Big Run (11th Rallye version)", MACHINE_IMPERFECT_GRAPHICS, layout_cischeat ) // there's a 13th Rallye version (1991) (only on the SNES?)
GAMEL( 1989, bigrun, 0, bigrun, bigrun, cischeat_state, bigrun, ROT0, "Jaleco", "Big Run (11th Rallye version)", MACHINE_IMPERFECT_GRAPHICS, layout_cischeat ) // there's a 13th Rallye version (1991) (only on the SNES? Could just be updated title, 1989 -> 11th Paris-Dakar ...)
GAMEL( 1990, cischeat, 0, cischeat, cischeat, cischeat_state, cischeat, ROT0, "Jaleco", "Cisco Heat", MACHINE_IMPERFECT_GRAPHICS, layout_cischeat )
GAMEL( 1991, f1gpstar, 0, f1gpstar, f1gpstar, cischeat_state, f1gpstar, ROT0, "Jaleco", "Grand Prix Star", MACHINE_IMPERFECT_GRAPHICS, layout_f1gpstar )
GAME ( 1992, armchmp2, 0, armchmp2, armchmp2, driver_device, 0, ROT270, "Jaleco", "Arm Champs II v2.6", MACHINE_IMPERFECT_GRAPHICS )
GAME ( 1992, armchmp2o,armchmp2, armchmp2, armchmp2, driver_device, 0, ROT270, "Jaleco", "Arm Champs II v1.7", MACHINE_IMPERFECT_GRAPHICS )
GAME ( 1992, wildplt, 0, wildplt, wildplt, cischeat_state, f1gpstar, ROT0, "Jaleco", "Wild Pilot", MACHINE_IMPERFECT_GRAPHICS )
GAMEL( 1993, f1gpstr2, 0, f1gpstr2, f1gpstar, cischeat_state, f1gpstar, ROT0, "Jaleco", "F-1 Grand Prix Star II", MACHINE_IMPERFECT_GRAPHICS, layout_f1gpstar )
GAME ( 1992, wildplt, 0, wildplt, wildplt, cischeat_state, f1gpstar, ROT0, "Jaleco", "Wild Pilot", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // busted timings
GAMEL( 1993, f1gpstr2, 0, f1gpstr2, f1gpstr2, cischeat_state, f1gpstar, ROT0, "Jaleco", "F-1 Grand Prix Star II", MACHINE_IMPERFECT_GRAPHICS, layout_f1gpstar )
GAME ( 1993, captflag, 0, captflag, captflag, cischeat_state, captflag, ROT270, "Jaleco", "Captain Flag (Japan)", MACHINE_IMPERFECT_GRAPHICS )
GAME ( 1994, scudhamm, 0, scudhamm, scudhamm, driver_device, 0, ROT270, "Jaleco", "Scud Hammer", MACHINE_IMPERFECT_GRAPHICS )

View File

@ -158,6 +158,12 @@ WRITE16_MEMBER( cninja_state::cninja_protection_region_0_104_w )
m_deco104->write_data( space, deco146_addr, data, mem_mask, cs );
}
READ16_MEMBER(cninja_state::cninjabl2_sprite_dma_r)
{
m_spriteram->copy();
return 0;
}
static ADDRESS_MAP_START( cninja_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x000000, 0x0bffff) AM_ROM
@ -1009,6 +1015,11 @@ static MACHINE_CONFIG_START( stoneage, cninja_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cninjabl2, stoneage )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(cninja_state, screen_update_cninjabl2)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( cninjabl, cninja_state )
@ -2291,6 +2302,12 @@ DRIVER_INIT_MEMBER(cninja_state,stoneage)
m_maincpu->space(AS_PROGRAM).install_write_handler(0x1bc0a8, 0x1bc0a9, write16_delegate(FUNC(cninja_state::stoneage_sound_w),this));
}
DRIVER_INIT_MEMBER(cninja_state,cninjabl2)
{
m_maincpu->space(AS_PROGRAM).install_ram(0x180000, 0x18ffff);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1b4000, 0x1b4001, read16_delegate(FUNC(cninja_state::cninjabl2_sprite_dma_r),this));
}
DRIVER_INIT_MEMBER(cninja_state,mutantf)
{
const UINT8 *src = memregion("gfx2")->base();
@ -2318,7 +2335,7 @@ GAME( 1991, cninjau, cninja, cninja, cninjau, cninja_state, cninja, ROT0
GAME( 1991, joemac, cninja, cninja, cninja, cninja_state, cninja, ROT0, "Data East Corporation", "Tatakae Genshizin Joe & Mac (Japan ver 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, stoneage, cninja, stoneage, cninja, cninja_state, stoneage, ROT0, "bootleg", "Stoneage (bootleg of Caveman Ninja)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, cninjabl, cninja, cninjabl, cninja, driver_device, 0, ROT0, "bootleg", "Caveman Ninja (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, cninjabl2,cninja, cninjabl, cninja, driver_device, 0, ROT0, "bootleg", "Caveman Ninja (bootleg, alt)", MACHINE_NOT_WORKING )
GAME( 1991, cninjabl2,cninja, cninjabl2,cninja, cninja_state, cninjabl2,ROT0, "bootleg", "Tatakae Genshizin Joe & Mac (Japan, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // tile layers need adjusting, sound is wrong
GAME( 1991, robocop2, 0, robocop2, robocop2, driver_device, 0, ROT0, "Data East Corporation", "Robocop 2 (Euro/Asia v0.10)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, robocop2u,robocop2,robocop2, robocop2, driver_device, 0, ROT0, "Data East Corporation", "Robocop 2 (US v0.10)", MACHINE_SUPPORTS_SAVE )

File diff suppressed because it is too large Load Diff

View File

@ -286,89 +286,99 @@ ADDRESS_MAP_END
Input Ports
******************************************************************************/
static INPUT_PORTS_START( eag )
static INPUT_PORTS_START( cb_magnets )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g1")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f1")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e1")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d1")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c1")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b1")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a1")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h2")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f2")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e2")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d2")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c2")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b2")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a2")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h3")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g3")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e3")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d3")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c3")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b3")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a3")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h4")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g4")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f4")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d4")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c4")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b4")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h5")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g5")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f5")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e5")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c5")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b5")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h6")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g6")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f6")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e6")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d6")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b6")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h7")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g7")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f7")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e7")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d7")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c7")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_START("IN.7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square h8")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square g8")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square f8")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square e8")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square d8")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square c8")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square b8")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Square a8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
INPUT_PORTS_END
static INPUT_PORTS_START( eag )
PORT_INCLUDE( cb_magnets )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_MODIFY("IN.1")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM")
PORT_MODIFY("IN.2")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King")

View File

@ -551,7 +551,7 @@ public:
DECLARE_READ8_MEMBER(vsc_pio_portb_r);
DECLARE_WRITE8_MEMBER(vsc_pio_portb_w);
// VBRC/7014
// VBRC
void vbrc_prepare_display();
DECLARE_WRITE8_MEMBER(vbrc_speech_w);
DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w);
@ -882,17 +882,9 @@ READ8_MEMBER(fidelz80_state::bcc_input_r)
void fidelz80_state::vsc_prepare_display()
{
// 4 7seg leds + H
for (int i = 0; i < 4; i++)
m_display_state[i] = (m_led_select >> i & 1) ? m_7seg_data : 0;
// 8*8 chessboard leds
for (int i = 0; i < 8; i++)
m_display_state[i+4] = (m_led_select >> i & 1) ? m_led_data : 0;
set_display_size(8, 12);
// 4 7seg leds+H, 8*8 chessboard leds
set_display_segmask(0xf, 0x7f);
display_update();
display_matrix(16, 8, m_led_data << 8 | m_7seg_data, m_led_select);
}
@ -963,7 +955,7 @@ WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w)
/******************************************************************************
VBRC/7014
VBRC
******************************************************************************/
// misc handlers
@ -1092,7 +1084,7 @@ static ADDRESS_MAP_START( vsc_io, AS_IO, 8, fidelz80_state )
ADDRESS_MAP_END
// VBRC/7014
// VBRC
WRITE8_MEMBER(fidelz80_state::vbrc_speech_w)
{
@ -1127,6 +1119,8 @@ ADDRESS_MAP_END
Input Ports
******************************************************************************/
// static or boardless games
static INPUT_PORTS_START( vcc_base )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
@ -1241,125 +1235,6 @@ static INPUT_PORTS_START( bcc )
INPUT_PORTS_END
static INPUT_PORTS_START( vsc )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a8")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b8")
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c8")
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d8")
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e8")
PORT_START("IN.5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f8")
PORT_START("IN.6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g8")
PORT_START("IN.7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h8")
PORT_START("IN.8") // buttons on the right
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Rook")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Knight")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Queen")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("King")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE")
PORT_START("IN.9") // buttons beside the display
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("TM")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Speaker")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LV")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("ST")
PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.10") // hardwired (2 diodes)
PORT_CONFNAME( 0x01, 0x00, "Language" )
PORT_CONFSETTING( 0x00, "English" )
PORT_CONFSETTING( 0x01, "Other" )
PORT_CONFNAME( 0x02, 0x00, DEF_STR( Unknown ) )
PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
PORT_CONFSETTING( 0x02, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( vscg )
PORT_INCLUDE( vsc )
PORT_MODIFY("IN.10")
PORT_CONFNAME( 0x01, 0x01, "Language" )
PORT_CONFSETTING( 0x00, "English" )
PORT_CONFSETTING( 0x01, "Other" )
INPUT_PORTS_END
static INPUT_PORTS_START( vbrc )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("A")
@ -1414,6 +1289,131 @@ static INPUT_PORTS_START( vbrc )
INPUT_PORTS_END
// sensory board games
static INPUT_PORTS_START( cb_buttons )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
INPUT_PORTS_END
static INPUT_PORTS_START( vsc )
PORT_INCLUDE( cb_buttons )
PORT_START("IN.8") // buttons on the right
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Rook")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Knight")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Queen")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("King")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE")
PORT_START("IN.9") // buttons beside the display
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("TM")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Speaker")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LV")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("ST")
PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.10") // hardwired (2 diodes)
PORT_CONFNAME( 0x01, 0x00, "Language" )
PORT_CONFSETTING( 0x00, "English" )
PORT_CONFSETTING( 0x01, "Other" )
PORT_CONFNAME( 0x02, 0x00, DEF_STR( Unknown ) )
PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
PORT_CONFSETTING( 0x02, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( vscg )
PORT_INCLUDE( vsc )
PORT_MODIFY("IN.10")
PORT_CONFNAME( 0x01, 0x01, "Language" )
PORT_CONFSETTING( 0x00, "English" )
PORT_CONFSETTING( 0x01, "Other" )
INPUT_PORTS_END
/******************************************************************************
Machine Drivers

View File

@ -1465,6 +1465,19 @@ ROM_START( gepoker2 ) /* v50.02 with control dated 9-30-84 */
ROM_LOAD( "horserace_icb_1-1-87", 0x12000, 0x2000, CRC(6d5092e3) SHA1(ef99d1b858aef3c438c61c2b17e371dc6aca6623) )
ROM_END
ROM_START( gepoker3 ) /* v50.02 with control dated 9-30-84 */
ROM_REGION( 0x1b000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "cont_9-30_m105_pts.2c", 0x00000, 0x2000, CRC(08b996f2) SHA1(5f5efb5015ec9571cc94734c18debfadaa28f585) )
ROM_LOAD( "hrom_6-25_m105_pts.1c", 0x0e000, 0x2000, CRC(6ddc1750) SHA1(ee19206b7f4a98e3e7647414127f4e09b3e9134f) )
/* Banked roms */
ROM_LOAD( "pokr_chig_2-12_m105.1", 0x10000, 0x2000, CRC(a1cbf67b) SHA1(a6cd081bbb19b2dd1a84b7750eac8a5258a663eb) )//not original sticker, twice the size of a regular rom, but still don't match
ROM_CONTINUE( 0x10000, 0x2000) /* Discarding 1nd half, 0xff filled*/
ROM_LOAD( "bljk_9-30_m105_pts.2", 0x12000, 0x2000, CRC(82804184) SHA1(2e2e6a80c99c8eb226dc54c1d32d0bf24de300a4) )
ROM_LOAD( "bone_8-16_m105_pts.3", 0x14000, 0x2000, CRC(52d66cb6) SHA1(57db34906fcafd37f3a361df209dafe080aeac16) )
ROM_LOAD( "slot_9-30_m105_pts.4", 0x16000, 0x2000, CRC(713c3963) SHA1(a9297c04fc44522ca6891516a2c744712132896a) )
ROM_LOAD( "bingo_8-16_m105.5", 0x18000, 0x2000, CRC(de87ed0a) SHA1(4a26d93368c1a39dd38aabe450c34203101f0ef7) ) //not original sticker selftest report 10-7-86 date!!
ROM_END
ROM_START( amuse ) /* v50.08 with most roms for IAM dated 8-16-84 */
ROM_REGION( 0x24000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "control_iam_8-16", 0x00000, 0x4000, CRC(345434b9) SHA1(ec880f6f5e90aa971937e0270701e323f6a83671) ) /* all roms were 27128, twice the size of other sets */
@ -1889,6 +1902,7 @@ GAME( 1983, amuse1a, amuse, amuse1, gepoker, driver_device, 0, ROT0
GAME( 1984, gepoker, 0, gepoker, gepoker, driver_device, 0, ROT0, "Greyhound Electronics", "Poker (Version 50.02 ICB, set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1984, gepoker1, gepoker, gepoker, gepoker, driver_device, 0, ROT0, "Greyhound Electronics", "Poker (Version 50.02 ICB, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1984, gepoker2, gepoker, gepoker, gepoker, driver_device, 0, ROT0, "Greyhound Electronics", "Poker (Version 50.02 ICB, set 3)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1984, gepoker3, gepoker, gepoker, gepoker, driver_device, 0, ROT0, "Greyhound Electronics", "Poker (Version 50.02 ICB, set 4)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1984, gtsers1, 0, getrivia, getrivia, driver_device, 0, ROT0, "Greyhound Electronics", "Trivia (Questions Series 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1984, gtsers2, gtsers1, getrivia, getrivia, driver_device, 0, ROT0, "Greyhound Electronics", "Trivia (Questions Series 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )

View File

@ -6,7 +6,6 @@
TODO:
sound emulation
check sprite priorities
accurate sprite collision
how to play:
@ -16,6 +15,10 @@
test mode:
insert 12 or more coins then press 2 player start
note:
dumped PCB is early game version, have several bugs, possible test/prototype.
later version was seen in St.Petersburg arcade museum.
**************************************************************************/
#include "emu.h"
@ -158,26 +161,27 @@ public:
tilemap_t *m_tilemap;
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT8 m_spr0_ctrl;
UINT8 m_spr1_ctrl;
UINT8 coin_count;
UINT8 m_spr_ctrl[2];
UINT8 m_spr_collision[2];
UINT8 m_spr_xy[8];
UINT8 m_tileram[16];
};
void istrebiteli_state::machine_start()
{
save_item(NAME(m_spr0_ctrl));
save_item(NAME(m_spr1_ctrl));
save_item(NAME(coin_count));
save_item(NAME(m_spr_ctrl));
save_item(NAME(m_spr_collision));
save_item(NAME(m_spr_xy));
save_item(NAME(m_tileram));
}
void istrebiteli_state::machine_reset()
{
m_spr0_ctrl = m_spr1_ctrl = 0;
coin_count = 0;
memset(m_spr_ctrl, 0, sizeof(m_spr_ctrl));
memset(m_spr_collision, 0, sizeof(m_spr_collision));
memset(m_spr_xy, 0, sizeof(m_spr_xy));
memset(m_tileram, 0, sizeof(m_tileram));
}
@ -213,7 +217,7 @@ void istrebiteli_state::video_start()
memcpy(&gfx[offs], &temp[0], 64);
}
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(istrebiteli_state::get_tile_info), this), TILEMAP_SCAN_ROWS_FLIP_X,
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(istrebiteli_state::get_tile_info), this), TILEMAP_SCAN_ROWS,
8, 16, 16, 1);
m_tilemap->set_scrolldx(96, 96);
}
@ -227,21 +231,22 @@ UINT32 istrebiteli_state::screen_update(screen_device &screen, bitmap_ind16 &bit
rect.set_size(16*8, 16);
m_tilemap->draw(screen, bitmap, rect, 0, 0);
m_gfxdecode->gfx(3)->transpen(bitmap, cliprect, (m_spr_ctrl[0] & 0x40) ? 5 : 7, 0, 0, 0, m_spr_xy[4], m_spr_xy[5], 1);
m_gfxdecode->gfx(3)->transpen(bitmap, cliprect, (m_spr_ctrl[1] & 0x40) ? 4 : 6, 0, 0, 0, m_spr_xy[6], m_spr_xy[7], 1);
int spritecode;
spritecode = (m_spr0_ctrl & 0x1f) + ((m_spr0_ctrl & 0x80) >> 2);
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, spritecode, 0, 0, 0, m_spr_xy[7], m_spr_xy[6], 1);
spritecode = (m_spr1_ctrl & 0x1f) + ((m_spr1_ctrl & 0x80) >> 2);
m_gfxdecode->gfx(2)->transpen(bitmap, cliprect, spritecode, 0, 0, 0, m_spr_xy[5], m_spr_xy[4], 1);
m_gfxdecode->gfx(3)->transpen(bitmap, cliprect, (m_spr0_ctrl & 0x40) ? 5:7, 0, 0, 0, m_spr_xy[3], m_spr_xy[2], 1);
m_gfxdecode->gfx(3)->transpen(bitmap, cliprect, (m_spr1_ctrl & 0x40) ? 4:6, 0, 0, 0, m_spr_xy[1], m_spr_xy[0], 1);
spritecode = (m_spr_ctrl[0] & 0x1f) + ((m_spr_ctrl[0] & 0x80) >> 2);
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, spritecode, 0, 0, 0, m_spr_xy[0], m_spr_xy[1], 1);
spritecode = (m_spr_ctrl[1] & 0x1f) + ((m_spr_ctrl[1] & 0x80) >> 2);
m_gfxdecode->gfx(2)->transpen(bitmap, cliprect, spritecode, 0, 0, 0, m_spr_xy[2], m_spr_xy[3], 1);
return 0;
}
WRITE8_MEMBER(istrebiteli_state::tileram_w)
{
offset ^= 15;
m_tileram[offset] = data;
m_tilemap->mark_tile_dirty(offset);
}
@ -273,17 +278,21 @@ WRITE8_MEMBER(istrebiteli_state::sound_w)
WRITE8_MEMBER(istrebiteli_state::spr0_ctrl_w)
{
m_spr0_ctrl = data;
m_spr_ctrl[0] = data;
if (data & 0x80)
m_spr_collision[0] = 0;
}
WRITE8_MEMBER(istrebiteli_state::spr1_ctrl_w)
{
m_spr1_ctrl = data;
m_spr_ctrl[1] = data;
if (data & 0x80)
m_spr_collision[1] = 0;
}
WRITE8_MEMBER(istrebiteli_state::spr_xy_w)
{
m_spr_xy[offset] = data;
m_spr_xy[offset ^ 7] = data;
}
static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, istrebiteli_state)
@ -304,20 +313,19 @@ CUSTOM_INPUT_MEMBER(istrebiteli_state::collision_r)
{
// piece of HACK
// real hardware does per-pixel sprite collision detection
int id = *(int*)&param * 2;
int id = *(int*)&param;
int sx = m_spr_xy[5 + id];
int sy = m_spr_xy[4 + id];
int px = m_spr_xy[3 - id] + 3;
int py = m_spr_xy[2 - id] + 3;
if ((m_spr_ctrl[id] & 0x80) == 0)
{
int sx = m_spr_xy[0 + id * 2];
int sy = m_spr_xy[1 + id * 2];
int px = m_spr_xy[6 - id * 2] + 3;
int py = m_spr_xy[7 - id * 2] + 3;
if (sx < 56)
return 0;
if (px >= sx && px < (sx + 8) && py >= sy && py < (sy + 8))
return 1;
return 0;
if (sx > 56 && px >= sx && px < (sx + 8) && py >= sy && py < (sy + 8))
m_spr_collision[id] |= 1;
}
return m_spr_collision[id];
}
CUSTOM_INPUT_MEMBER(istrebiteli_state::coin_r)
@ -338,7 +346,7 @@ static INPUT_PORTS_START( istreb )
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(1)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(1)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, istrebiteli_state, collision_r, 0)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, istrebiteli_state, collision_r, 1)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
@ -348,7 +356,7 @@ static INPUT_PORTS_START( istreb )
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, istrebiteli_state, collision_r, 1)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, istrebiteli_state, collision_r, 0)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)

View File

@ -0,0 +1,502 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
/********************************************************************
PCB is marked 'Ver 1.8 B/D-' on 2 of the edges
Custom chip marked
ORIENTAL SOFT
SPR800F1
0011E
inputs need finishing off
-- Test Mode Note --
The test mode for this game is very buggy, this is not a MAME bug
the same behavior has been observed on the original PCB.
One example of this is the dipswitch viewer, which should show 3
rows of 8 1/0 values, one for each switch. ie
00000000
00000000
00000000
However..
Instead of properly representing each of the dips, the 1st switch in
each bank ends up turning on/off the entire row display (for rows 2/3
it shifts row 1 by one pixel)
This then means the 2nd switch changes the digit in the 1st position
so
10000000
the 8th switch changes the 7th digit so
10000010
and there's no way at all to change the last digit.
*********************************************************************/
#include "emu.h"
#include "cpu/e132xs/e132xs.h"
#include "sound/okim6295.h"
#include "machine/nvram.h"
class mjsenpu_state : public driver_device
{
public:
mjsenpu_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_oki(*this, "oki"),
m_mainram(*this, "mainram"),
// m_vram(*this, "vram"),
m_palette(*this, "palette")
{
}
/* devices */
required_device<e132xt_device> m_maincpu;
required_device<okim6295_device> m_oki;
required_shared_ptr<UINT32> m_mainram;
// required_shared_ptr<UINT32> m_vram;
UINT8 m_pal[0x200];
UINT32 m_vram0[0x20000 / 4];
UINT32 m_vram1[0x20000 / 4];
UINT8 m_control;
UINT8 m_mux;
DECLARE_READ8_MEMBER(palette_low_r);
DECLARE_READ8_MEMBER(palette_high_r);
DECLARE_WRITE8_MEMBER(palette_low_w);
DECLARE_WRITE8_MEMBER(palette_high_w);
void set_palette(int offset);
DECLARE_WRITE8_MEMBER(control_w);
DECLARE_WRITE8_MEMBER(mux_w);
DECLARE_READ32_MEMBER(muxed_inputs_r);
DECLARE_READ32_MEMBER(mjsenpu_speedup_r);
DECLARE_READ32_MEMBER(vram_r);
DECLARE_WRITE32_MEMBER(vram_w);
DECLARE_DRIVER_INIT(mjsenpu);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
UINT32 screen_update_mjsenpu(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<palette_device> m_palette;
};
READ8_MEMBER(mjsenpu_state::palette_low_r)
{
return m_pal[(offset * 2) + 0];
}
READ8_MEMBER(mjsenpu_state::palette_high_r)
{
return m_pal[(offset * 2) + 1];
}
void mjsenpu_state::set_palette(int offset)
{
UINT16 paldata = (m_pal[(offset * 2) + 0] << 8) | (m_pal[(offset * 2) + 1]);
m_palette->set_pen_color(offset, pal5bit(paldata >> 0), pal5bit(paldata >> 5), pal6bit(paldata >> 10));
}
WRITE8_MEMBER(mjsenpu_state::palette_low_w)
{
m_pal[(offset * 2)+0] = data;
set_palette(offset);
}
WRITE8_MEMBER(mjsenpu_state::palette_high_w)
{
m_pal[(offset * 2)+1] = data;
set_palette(offset);
}
READ32_MEMBER(mjsenpu_state::vram_r)
{
if (m_control & 0x01) return m_vram1[offset];
else return m_vram0[offset];
}
WRITE32_MEMBER(mjsenpu_state::vram_w)
{
if (m_control & 0x01) COMBINE_DATA(&m_vram1[offset]);
else COMBINE_DATA(&m_vram0[offset]);
}
WRITE8_MEMBER(mjsenpu_state::control_w)
{
m_control = data;
// bit 0x80 is always set?
// bit 0x40 not used?
// bit 0x20 not used?
// bit 0x10 is the M6295 bank, samples <26 are the same in both banks and so bank switch isn't written for them, not even in sound test.
m_oki->set_rom_bank((data&0x10)>>4);
// bits 0x08 and 0x04 seem to be hopper/ticket related? different ones get used depending on the dips
// bit 0x02 could be coin counter?
// bit 0x01 alternates frequently, using as video buffer, but that's a complete guess
// if (data &~0x9e)
// printf("control_w %02x\n", data);
}
WRITE8_MEMBER(mjsenpu_state::mux_w)
{
if ((data != 0x80) &&
(data != 0x9e) &&
(data != 0x9d) &&
(data != 0x9b) &&
(data != 0x97) &&
(data != 0x8f))
printf("mux_w %02x\n", data);
m_mux = data;
}
READ32_MEMBER(mjsenpu_state::muxed_inputs_r)
{
switch (m_mux)
{
case 0x80: // not read
break;
case 0x9e:
return ioport("MUX_9E")->read();
case 0x9d:
return ioport("MUX_9D")->read();
case 0x9b:
return ioport("MUX_9B")->read();
case 0x97:
return ioport("MUX_97")->read();
case 0x8f:
return ioport("MUX_8F")->read();
}
logerror("muxed_inputs_r with %02x\n", m_mux);
return 0x00000000;// 0xffffffff;
}
static ADDRESS_MAP_START( mjsenpu_32bit_map, AS_PROGRAM, 32, mjsenpu_state )
AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("mainram")
AM_RANGE(0x40000000, 0x401fffff) AM_ROM AM_REGION("user2",0) // main game rom
AM_RANGE(0x80000000, 0x8001ffff) AM_READWRITE(vram_r,vram_w)
AM_RANGE(0xffc00000, 0xffc000ff) AM_READWRITE8(palette_low_r, palette_low_w, 0xffffffff)
AM_RANGE(0xffd00000, 0xffd000ff) AM_READWRITE8(palette_high_r, palette_high_w, 0xffffffff)
AM_RANGE(0xffe00000, 0xffe007ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0xfff80000, 0xffffffff) AM_ROM AM_REGION("user1",0) // boot rom
ADDRESS_MAP_END
static ADDRESS_MAP_START( mjsenpu_io, AS_IO, 32, mjsenpu_state )
AM_RANGE(0x4000, 0x4003) AM_READ(muxed_inputs_r)
AM_RANGE(0x4010, 0x4013) AM_READ_PORT("IN1")
AM_RANGE(0x4020, 0x4023) AM_WRITE8( control_w, 0x000000ff)
AM_RANGE(0x4030, 0x4033) AM_READ_PORT("DSW1")
AM_RANGE(0x4040, 0x4043) AM_READ_PORT("DSW2")
AM_RANGE(0x4050, 0x4053) AM_READ_PORT("DSW3")
AM_RANGE(0x4060, 0x4063) AM_WRITE8( mux_w, 0x000000ff)
AM_RANGE(0x4070, 0x4073) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x000000ff)
ADDRESS_MAP_END
static INPUT_PORTS_START( mjsenpu )
PORT_START("MUX_8F") // in joystick mode?
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_START1 ) // or button1? seems to have multiple uses
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("MUX_9E")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("MUX_9D")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("MUX_9B")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("MUX_97")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN1")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_COIN1 ) // or maybe service?
PORT_DIPNAME( 0x00000002, 0x00000002, "IN1" )
PORT_DIPSETTING( 0x00000002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000004, 0x00000004, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000008, 0x00000008, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_SERVICE_NO_TOGGLE( 0x00000010, IP_ACTIVE_LOW )
PORT_DIPNAME( 0x00000020, 0x00000020, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) // not on the mahjong panel? used when in Joystick mode
PORT_DIPNAME( 0x00000080, 0x00000080, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00000080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW1")
PORT_DIPNAME( 0x00000003, 0x00000003, DEF_STR( Coin_A ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00000003, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00000002, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x00000001, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x0000000c, 0x0000000c, "Value 1" )
PORT_DIPSETTING( 0x00000000, "100" )
PORT_DIPSETTING( 0x00000004, "50" )
PORT_DIPSETTING( 0x00000008, "10" )
PORT_DIPSETTING( 0x0000000c, "5" )
PORT_DIPNAME( 0x00000030, 0x00000030, "Ratio 2" )
PORT_DIPSETTING( 0x00000000, "1:10" )
PORT_DIPSETTING( 0x00000010, "1:5" )
PORT_DIPSETTING( 0x00000020, "1:2" )
PORT_DIPSETTING( 0x00000030, "1:1" )
PORT_DIPNAME( 0x000000c0, 0x000000c0, "Percentage 1" )
PORT_DIPSETTING( 0x00000000, "96" )
PORT_DIPSETTING( 0x00000040, "92" )
PORT_DIPSETTING( 0x00000080, "88" )
PORT_DIPSETTING( 0x000000c0, "84" )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW2")
PORT_DIPNAME( 0x00000003, 0x00000003, "Value 2" )
PORT_DIPSETTING( 0x00000000, "5" )
PORT_DIPSETTING( 0x00000001, "3" )
PORT_DIPSETTING( 0x00000002, "2" )
PORT_DIPSETTING( 0x00000003, "1" )
PORT_DIPNAME( 0x00000004, 0x00000004, "Value 3" )
PORT_DIPSETTING( 0x00000004, "10" )
PORT_DIPSETTING( 0x00000000, "20" )
PORT_DIPNAME( 0x00000008, 0x00000000, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00000008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x00000010, 0x00000010, DEF_STR( Flip_Screen ) )
PORT_DIPSETTING( 0x00000010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
PORT_DIPNAME( 0x000000e0, 0x000000e0, "Percentage 2" )
PORT_DIPSETTING( 0x00000000, "60" )
PORT_DIPSETTING( 0x00000020, "65" )
PORT_DIPSETTING( 0x00000040, "70" )
PORT_DIPSETTING( 0x00000060, "75" )
PORT_DIPSETTING( 0x00000080, "80" )
PORT_DIPSETTING( 0x000000a0, "85" )
PORT_DIPSETTING( 0x000000c0, "90" )
PORT_DIPSETTING( 0x000000e0, "95" )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW3")
PORT_DIPNAME( 0x00000001, 0x00000001, "Value 4" )
PORT_DIPSETTING( 0x00000001, "100" )
PORT_DIPSETTING( 0x00000000, "500" )
PORT_DIPNAME( 0x00000002, 0x00000002, "Symbol 2" )
PORT_DIPSETTING( 0x00000002, "0" )
PORT_DIPSETTING( 0x00000000, "1" )
PORT_DIPNAME( 0x00000004, 0x00000004, "Symbol 3" )
PORT_DIPSETTING( 0x00000004, "0" )
PORT_DIPSETTING( 0x00000000, "1" )
PORT_DIPNAME( 0x00000008, 0x00000000, "Control Type" )
PORT_DIPSETTING( 0x00000008, "Mahjong Panel" )
PORT_DIPSETTING( 0x00000000, "Joystick" )
PORT_DIPNAME( 0x00000010, 0x00000010, "Symbol 5" )
PORT_DIPSETTING( 0x00000010, "0" )
PORT_DIPSETTING( 0x00000000, "1" )
PORT_DIPNAME( 0x00000060, 0x00000060, "Percentage 3" )
PORT_DIPSETTING( 0x00000000, "92" )
PORT_DIPSETTING( 0x00000020, "88" )
PORT_DIPSETTING( 0x00000040, "84" )
PORT_DIPSETTING( 0x00000060, "80" )
PORT_DIPNAME( 0x00000080, 0x00000080, "Symbol 6" )
PORT_DIPSETTING( 0x00000080, "0" )
PORT_DIPSETTING( 0x00000000, "1" )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
void mjsenpu_state::video_start()
{
}
UINT32 mjsenpu_state::screen_update_mjsenpu(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int x,y,count;
int color;
UINT32* vram;
if (m_control & 0x01) vram = m_vram0;
else vram = m_vram1;
count = 0;
for (y=0;y < 256;y++)
{
for (x=0;x < 512/4;x++)
{
color = vram[count] & 0x000000ff;
bitmap.pix16(y, x*4 + 2) = color;
color = (vram[count] & 0x0000ff00) >> 8;
bitmap.pix16(y, x*4 + 3) = color;
color = (vram[count] & 0x00ff0000) >> 16;
bitmap.pix16(y, x*4 + 0) = color;
color = (vram[count] & 0xff000000) >> 24;
bitmap.pix16(y, x*4 + 1) = color;
count++;
}
}
return 0;
}
void mjsenpu_state::machine_start()
{
save_item(NAME(m_pal));
save_item(NAME(m_vram0));
save_item(NAME(m_vram1));
save_item(NAME(m_control));
save_item(NAME(m_mux));
}
void mjsenpu_state::machine_reset()
{
}
/*
following clocks are on the PCB
22.1184
27.000
1.0000000
*/
static MACHINE_CONFIG_START( mjsenpu, mjsenpu_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", E132XT, 27000000*2) /* ?? Mhz */
MCFG_CPU_PROGRAM_MAP(mjsenpu_32bit_map)
MCFG_CPU_IO_MAP(mjsenpu_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mjsenpu_state, irq0_line_hold)
MCFG_NVRAM_ADD_1FILL("nvram")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-16-1)
MCFG_SCREEN_UPDATE_DRIVER(mjsenpu_state, screen_update_mjsenpu)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1000000, OKIM6295_PIN7_HIGH) /* 1 Mhz? */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MACHINE_CONFIG_END
ROM_START( mjsenpu )
ROM_REGION32_BE( 0x80000, "user1", 0 ) /* Hyperstone CPU Code */
ROM_LOAD( "U1", 0x000000, 0x080000, CRC(ebfb1079) SHA1(9d676c635d5ee464df5730518399e141ebc515ed) )
ROM_REGION32_BE( 0x200000, "user2", 0 ) /* Hyperstone CPU Code */
ROM_LOAD16_WORD_SWAP( "U13", 0x000000, 0x200000, CRC(a803c5a5) SHA1(61c7386a1bb6224b788de01293697d0e896839a8) )
ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "SU2", 0x000000, 0x080000, CRC(848045d5) SHA1(4d32e1a5bd0937069dd8d50dfd8b63d4a45e40e6) )
ROM_END
READ32_MEMBER(mjsenpu_state::mjsenpu_speedup_r)
{
int pc = m_maincpu->pc();
if (pc == 0xadb8)
{
space.device().execute().spin_until_interrupt();
}
else
{
// printf("%08x\n", pc);
}
return m_mainram[0x23468/4];
}
DRIVER_INIT_MEMBER(mjsenpu_state,mjsenpu)
{
/*
0000ADAE: LDHU.D L42, L38, $0
0000ADB2: LDW.A 0, L39, $23468
0000ADB8: ADDI L38, $1
0000ADBA: STHU.D L42, L38, $0
0000ADBE: CMPI L39, $0
0000ADC0: BNE $adae
(loops for 744256 instructions)
*/
// not especially effective, might be wrong.
m_maincpu->space(AS_PROGRAM).install_read_handler(0x23468, 0x2346b, read32_delegate(FUNC(mjsenpu_state::mjsenpu_speedup_r), this));
}
GAME( 2002, mjsenpu, 0, mjsenpu, mjsenpu, mjsenpu_state, mjsenpu, ROT0, "Oriental Soft", "Mahjong Senpu", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

View File

@ -337,7 +337,7 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( mjsister )
PORT_START("DSW1")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:8,7,6")
PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
@ -346,55 +346,31 @@ static INPUT_PORTS_START( mjsister )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
PORT_DIPNAME( 0x08, 0x08, "Unknown 1-4" )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "DSW1:5")
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW1:4,3") // see code at $141C
PORT_DIPSETTING( 0x30, "0" )
PORT_DIPSETTING( 0x20, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Test ) ) PORT_DIPLOCATION("DSW1:2")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Unknown 1-5" )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Unknown 1-6" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* service mode */
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW2")
PORT_DIPNAME( 0x01, 0x01, "Unknown 2-1" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "Unknown 2-2" )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Unknown 2-3" )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "Unknown 2-4" )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Unknown 2-5" )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Unknown 2-6" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "Unknown 2-7" )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Unknown 2-8" )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW2") /* not on PCB */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* memory reset 1 */
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* analyzer */
PORT_SERVICE( 0x08, IP_ACTIVE_HIGH )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* memory reset 2 */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* pay out */
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) PORT_OPTIONAL PORT_NAME("Memory Reset 1") // only tested in service mode?
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK ) PORT_OPTIONAL PORT_NAME("Analyzer") // only tested in service mode?
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_TOGGLE
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SERVICE4 ) PORT_OPTIONAL PORT_NAME("Memory Reset 2") // only tested in service mode?
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_GAMBLE_PAYOUT ) PORT_OPTIONAL // only tested in service mode?
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* hopper */
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Hopper") PORT_CODE(KEYCODE_8) // only tested in service mode?
PORT_START("KEY0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_A )

View File

@ -562,7 +562,7 @@ CUSTOM_INPUT_MEMBER( nbmj8891_state::nb1413m3_outcoin_flag_r )
static INPUT_PORTS_START( hanamomo )
PORT_START("DSWA")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "1 (Easy)" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
@ -571,24 +571,25 @@ static INPUT_PORTS_START( hanamomo )
PORT_DIPSETTING( 0x02, "6" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x00, "8 (Hard)" )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, "Game Sounds" ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPNAME( 0x20, 0x00, "Game Sounds" ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Character Display Test" ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPNAME( 0x80, 0x80, "Character Display Test" ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
/* does not physically exist on PCB */
PORT_START("DSWB")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, nbmj8891_state, nb1413m3_busyflag_r, nullptr) // DRAW BUSY
@ -1854,10 +1855,10 @@ static INPUT_PORTS_START( maiko )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x00, "Oyaken" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPNAME( 0x04, 0x00, "Oyaken" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, "Local Rule" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPNAME( 0x08, 0x00, "Local Rule" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:5")
@ -1901,7 +1902,7 @@ static INPUT_PORTS_START( mmaiko )
// I don't have manual for this game.
PORT_START("DSWA")
PORT_DIPNAME( 0x07, 0x07, "Game Out" )
PORT_DIPNAME( 0x07, 0x07, "Game Out" ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "90% (Easy)" )
PORT_DIPSETTING( 0x06, "85%" )
PORT_DIPSETTING( 0x05, "80%" )
@ -1910,42 +1911,42 @@ static INPUT_PORTS_START( mmaiko )
PORT_DIPSETTING( 0x02, "65%" )
PORT_DIPSETTING( 0x01, "60%" )
PORT_DIPSETTING( 0x00, "55% (Hard)" )
PORT_DIPNAME( 0x18, 0x18, "Bet Min" )
PORT_DIPNAME( 0x18, 0x18, "Bet Min" ) PORT_DIPLOCATION("DSWA:4,5")
PORT_DIPSETTING( 0x18, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x60, 0x60, "Bet Max" )
PORT_DIPNAME( 0x60, 0x60, "Bet Max" ) PORT_DIPLOCATION("DSWA:6,7")
PORT_DIPSETTING( 0x60, "8" )
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPSETTING( 0x20, "12" )
PORT_DIPSETTING( 0x00, "20" )
PORT_DIPNAME( 0x80, 0x00, "DIPSW 1-8" )
PORT_DIPNAME( 0x80, 0x00, "DIPSW 1-8" ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWB:1,2")
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" )
PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" )
PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" )
PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" )
PORT_DIPNAME( 0x20, 0x20, "DIPSW 2-6" ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "Graphic ROM Test" )
PORT_DIPNAME( 0x40, 0x40, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )

View File

@ -537,10 +537,10 @@ INPUT_PORTS_END
static INPUT_PORTS_START( finalbny )
// I don't have manual for this game.
// I don't have manual for this game. (finalbny)
// Lady Maker manual matches this, identical PCB
PORT_START("DSWA")
PORT_DIPNAME( 0x07, 0x07, "Game Out" )
PORT_DIPNAME( 0x07, 0x07, "Game Out" ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, "90% (Easy)" )
PORT_DIPSETTING( 0x06, "85%" )
PORT_DIPSETTING( 0x05, "80%" )
@ -549,43 +549,43 @@ static INPUT_PORTS_START( finalbny )
PORT_DIPSETTING( 0x02, "65%" )
PORT_DIPSETTING( 0x01, "60%" )
PORT_DIPSETTING( 0x00, "55% (Hard)" )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x10, 0x00, "Last Chance" )
PORT_DIPNAME( 0x10, 0x00, "Last Chance" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Last chance needs 1credit" )
PORT_DIPNAME( 0x20, 0x20, "Last chance needs 1credit" ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSWB")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "Graphic ROM Test" )
PORT_DIPNAME( 0x02, 0x02, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Bet1 Only" )
PORT_DIPNAME( 0x04, 0x04, "Bet1 Only" ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x18, 0x18, "Bet Min" )
PORT_DIPNAME( 0x18, 0x18, "Bet Min" ) PORT_DIPLOCATION("DSWB:4,5")
PORT_DIPSETTING( 0x18, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x60, 0x00, "Bet Max" )
PORT_DIPNAME( 0x60, 0x00, "Bet Max" ) PORT_DIPLOCATION("DSWB:6,7")
PORT_DIPSETTING( 0x60, "8" )
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPSETTING( 0x20, "12" )
PORT_DIPSETTING( 0x00, "20" )
PORT_DIPNAME( 0x80, 0x00, "Score Pool" )
PORT_DIPNAME( 0x80, 0x00, "Score Pool" ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@ -604,53 +604,54 @@ INPUT_PORTS_END
static INPUT_PORTS_START( qmhayaku )
PORT_START("DSWA")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2")
PORT_DIPSETTING( 0x03, "1 (Easy)" )
PORT_DIPSETTING( 0x02, "2" )
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x00, "4 (Hard)" )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:3")
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:3")
PORT_DIPSETTING( 0x04, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Game Sounds" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPNAME( 0x10, 0x10, "Game Sounds" ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "Character Display Test" ) PORT_DIPLOCATION("DSWA:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWA:8")
PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWA:8") // manual states this is unused
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
/* manual says this does not exist but it is physically present */
PORT_START("DSWB")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) )
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@ -2127,7 +2128,7 @@ GAME( 1990, pstadium, 0, pstadium, pstadium, driver_device, 0, RO
GAME( 1990, triplew2, 0, triplew2, triplew1, driver_device, 0, ROT180, "Nichibutsu", "Mahjong Triple Wars 2 (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, ntopstar, 0, ntopstar, ntopstar, driver_device, 0, ROT180, "Nichibutsu", "Mahjong Nerae! Top Star (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, mjlstory, 0, mjlstory, mjlstory, driver_device, 0, ROT180, "Nichibutsu", "Mahjong Jikken Love Story (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, ladymakr, mjlstory, mjlstory, mjlstory, driver_device, 0, ROT180, "Nichibutsu", "Lady Maker [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, ladymakr, mjlstory, mjlstory, finalbny, driver_device, 0, ROT180, "Nichibutsu", "Lady Maker [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, vanilla, 0, vanilla, vanilla, driver_device, 0, ROT180, "Nichibutsu", "Mahjong Vanilla Syndrome (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, finalbny, vanilla, finalbny, finalbny, nbmj8991_state, finalbny, ROT180, "Nichibutsu", "Mahjong Final Bunny [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, qmhayaku, 0, qmhayaku, qmhayaku, driver_device, 0, ROT180, "Nichibutsu", "Quiz-Mahjong Hayaku Yatteyo! (Japan)", MACHINE_SUPPORTS_SAVE )

View File

@ -519,7 +519,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( 4psimasy )
PORT_START("DSWA")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSWA:1,2,3")
PORT_DIPSETTING( 0x07, DEF_STR( Easiest ) )
PORT_DIPSETTING( 0x06, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x05, DEF_STR( Medium_Easy ) )
@ -528,27 +528,33 @@ static INPUT_PORTS_START( 4psimasy )
PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x01, DEF_STR( Very_Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x08, 0x00, "Game Sounds" ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPNAME( 0x08, 0x00, "Game Sounds" ) PORT_DIPLOCATION("DSWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSWA:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:7,8")
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSWA:7,8")
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
/* this switch not mentioned by the manual */
PORT_START("DSWB")
PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPNAME( 0x40, 0x40, "Option Test" ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "DSWB:1" )
PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "DSWB:2" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "DSWB:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "DSWB:4" )
PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "DSWB:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "DSWB:6" )
PORT_DIPNAME( 0x40, 0x40, "Option Test" ) PORT_DIPLOCATION("DSWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPNAME( 0x80, 0x80, "Graphic ROM Test" ) PORT_DIPLOCATION("DSWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )

View File

@ -293,100 +293,120 @@ ADDRESS_MAP_END
Input Ports
******************************************************************************/
static INPUT_PORTS_START( supercon )
static INPUT_PORTS_START( cb_buttons )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h8")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g8")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f8")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e8")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d8")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c8")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b8")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_START("IN.7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
INPUT_PORTS_END
static INPUT_PORTS_START( supercon )
PORT_INCLUDE( cb_buttons )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("King / Multi Move / Player/Player")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h7")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g7")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f7")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e7")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d7")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c7")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b7")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a7")
PORT_MODIFY("IN.1")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Verify / Set Up")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Queen / Best Move/Random / Training Level")
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h6")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g6")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f6")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e6")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d6")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c6")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b6")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a6")
PORT_MODIFY("IN.2")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Change Color")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Bishop / Sound / Depth Search")
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h5")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g5")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f5")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e5")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d5")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c5")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b5")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a5")
PORT_MODIFY("IN.3")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Clear Board")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Knight / Solve Mate")
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h4")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g4")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f4")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e4")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d4")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c4")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b4")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a4")
PORT_MODIFY("IN.4")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Print Moves")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Rook / Print Board")
PORT_START("IN.5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h3")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g3")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f3")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e3")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d3")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c3")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b3")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a3")
PORT_MODIFY("IN.5")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Form Size")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Pion / Print List / Acc. Time")
PORT_START("IN.6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h2")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g2")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f2")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e2")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d2")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c2")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b2")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a2")
PORT_MODIFY("IN.6")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Hint")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Set Level")
PORT_START("IN.7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h1")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g1")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f1")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e1")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d1")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c1")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b1")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a1")
PORT_MODIFY("IN.7")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go")
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back")
INPUT_PORTS_END

View File

@ -2521,7 +2521,7 @@ GAME( 1994, puyopuy2, 0, segac2, puyopuy2, segac2_state, puyopuy2, ROT0,
GAME( 1994, zunkyou, 0, segac2, zunkyou, segac2_state, zunkyou, ROT0, "Sega", "Zunzunkyou No Yabou (Japan)", 0 )
/* Atlus Print Club 'Games' (C-2 Hardware, might not be possible to support them because they use camera + printer, really just put here for reference) */
GAME( 1995, pclubj, 0, segac2, pclub, segac2_state, pclub, ROT0, "Atlus", "Print Club (Japan Vol.1)", MACHINE_NOT_WORKING )
GAME( 1995, pclubjv2, pclubj, segac2, pclubjv2, segac2_state, pclubjv2, ROT0, "Atlus", "Print Club (Japan Vol.2)", MACHINE_NOT_WORKING )
GAME( 1996, pclubjv4, pclubj, segac2, pclubjv2, segac2_state, pclubjv4, ROT0, "Atlus", "Print Club (Japan Vol.4)", MACHINE_NOT_WORKING )
GAME( 1996, pclubjv5, pclubj, segac2, pclubjv2, segac2_state, pclubjv5, ROT0, "Atlus", "Print Club (Japan Vol.5)", MACHINE_NOT_WORKING )
GAME( 1995, pclubj, 0, segac2, pclub, segac2_state, pclub, ROT0, "Atlus", "Print Club (Japan Vol.1)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_PRINTER | MACHINE_NODEVICE_CAMERA )
GAME( 1995, pclubjv2, pclubj, segac2, pclubjv2, segac2_state, pclubjv2, ROT0, "Atlus", "Print Club (Japan Vol.2)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_PRINTER | MACHINE_NODEVICE_CAMERA )
GAME( 1996, pclubjv4, pclubj, segac2, pclubjv2, segac2_state, pclubjv4, ROT0, "Atlus", "Print Club (Japan Vol.4)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_PRINTER | MACHINE_NODEVICE_CAMERA )
GAME( 1996, pclubjv5, pclubj, segac2, pclubjv2, segac2_state, pclubjv5, ROT0, "Atlus", "Print Club (Japan Vol.5)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_PRINTER | MACHINE_NODEVICE_CAMERA )

View File

@ -2809,7 +2809,7 @@ GAMEL(1988, pdrift, 0, yboard, pdrift, segaybd_state, pdrift,
GAMEL(1988, pdrifta, pdrift, yboard, pdrift, segaybd_state, pdrift, ROT0, "Sega", "Power Drift (World)", MACHINE_SUPPORTS_SAVE, layout_pdrift )
GAMEL(1988, pdrifte, pdrift, yboard, pdrifte, segaybd_state, pdrift, ROT0, "Sega", "Power Drift (World, Earlier)", MACHINE_SUPPORTS_SAVE, layout_pdrift )
GAMEL(1988, pdriftj, pdrift, yboard, pdriftj, segaybd_state, pdrift, ROT0, "Sega", "Power Drift (Japan)", MACHINE_SUPPORTS_SAVE, layout_pdrift )
GAMEL(1988, pdriftl, pdrift, yboard_link, pdriftl, segaybd_state, pdrift, ROT0, "Sega", "Power Drift (Japan, Link Version)", MACHINE_SUPPORTS_SAVE|MACHINE_NOT_WORKING, layout_pdrift)
GAMEL(1988, pdriftl, pdrift, yboard_link, pdriftl, segaybd_state, pdrift, ROT0, "Sega", "Power Drift (Japan, Link Version)", MACHINE_SUPPORTS_SAVE, layout_pdrift)
GAME( 1991, rchase, 0, yboard, rchase, segaybd_state, rchase, ROT0, "Sega", "Rail Chase (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, rchasej, rchase, yboard, rchase, segaybd_state, rchase, ROT0, "Sega", "Rail Chase (Japan)", MACHINE_SUPPORTS_SAVE )

View File

@ -928,6 +928,35 @@ ROM_START( quaquiz2 )
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
// Dumper's note: I got the pcb with Triv Quiz (trivquiz) question rom pcb, but I don't think that's the correct one.
// If you use Triv Quiz question data the game will boot to playable state
ROM_START( supertr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "u07.bin", 0x00000, 0x01000, CRC(6573d17c) SHA1(0ec4a572312393c9efbf580f015bcf418d867079) )
ROM_LOAD( "u08.bin", 0x01000, 0x01000, CRC(734f7e0a) SHA1(42b4ec0396a7150b78901e0279fc7904abd94d06) )
ROM_LOAD( "u09.bin", 0x02000, 0x01000, CRC(41b9bb46) SHA1(d440ec19c9962b3e35c50e2cc1ba0c218c05c0e1) )
ROM_LOAD( "u10.bin", 0x03000, 0x01000, CRC(2f7b2207) SHA1(2c58fde128824fb553a6ec5336cadbf194ec81b7) )
ROM_REGION( 0x1000, "tiles", ROMREGION_INVERT )
ROM_LOAD( "u36.bin", 0x00000, 0x01000, CRC(01f30203) SHA1(b902845af0e4d96446550539596354d9962d78be) )
ROM_REGION( 0x40000, "questions", 0 )
ROM_LOAD( "q1.rom", 0x00000, 0x08000, NO_DUMP )
ROM_LOAD( "q2.rom", 0x08000, 0x08000, NO_DUMP )
ROM_LOAD( "q3.rom", 0x10000, 0x08000, NO_DUMP )
ROM_LOAD( "q4.rom", 0x18000, 0x08000, NO_DUMP )
ROM_LOAD( "q5.rom", 0x20000, 0x08000, NO_DUMP )
ROM_LOAD( "q6.rom", 0x28000, 0x08000, NO_DUMP )
ROM_LOAD( "q7.rom", 0x30000, 0x08000, NO_DUMP )
ROM_LOAD( "q8.rom", 0x38000, 0x08000, NO_DUMP )
ROM_REGION( 0x0140, "proms", 0 )
ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, verified */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
ROM_START( supertr2 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ast2-1d.rom", 0x00000, 0x01000, CRC(e9f0e271) SHA1(c2bae7d5ef04aed3ce14c403c70d2acc1831b763) )
@ -1152,6 +1181,7 @@ GAME( 1985, statriv2v,statriv2, statriv2v, statriv2, statriv2_state, addr_xlh,
GAME( 1985, statriv4, 0, statriv2, statriv4, statriv2_state, addr_xhl, ROT0, "Status Games", "Triv Four", MACHINE_SUPPORTS_SAVE )
GAME( 1985, sextriv, 0, statriv2, sextriv, statriv2_state, addr_lhx, ROT0, "Status Games", "Sex Triv", MACHINE_SUPPORTS_SAVE )
GAME( 1985, quaquiz2, 0, statriv2, quaquiz2, statriv2_state, addr_lmh, ROT0, "Status Games", "Quadro Quiz II", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
GAME( 1985, supertr, 0, statriv2, supertr2, statriv2_state, addr_lhx, ROT0, "Status Games", "Super Triv Quiz I", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING) // missing questions' ROMs
GAME( 1986, supertr2, 0, statriv2, supertr2, statriv2_state, addr_lmhe, ROT0, "Status Games", "Super Triv II", MACHINE_SUPPORTS_SAVE )
GAME( 1988, supertr3, 0, statriv2, supertr2, statriv2_state, addr_lmh, ROT0, "Status Games", "Super Triv III", MACHINE_SUPPORTS_SAVE )
GAME( 1990, cstripxi, 0, statriv2, funcsino, statriv2_state, laserdisc, ROT0, "Status Games", "Casino Strip XI", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )

View File

@ -3609,7 +3609,7 @@ GAME( 1996, decathlto, decathlt,stv_5838, stv, stv_state, decathlt, ROT
GAME( 1998, twcup98, stvbios, stv_5881, stv, stv_state, twcup98, ROT0, "Tecmo", "Tecmo World Cup '98 (JUET 980410 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // some situations with the GK result in the game stalling, maybe CPU core bug??
GAME( 1998, twsoc98, twcup98, stv_5881, stv, stv_state, twcup98, ROT0, "Tecmo", "Tecmo World Soccer '98 (JUET 980410 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // ^^ (check)
/* Gives I/O errors */
GAME( 1996, magzun, stvbios, stv, stv, stv_state, magzun, ROT0, "Sega", "Magical Zunou Power (J 961031 V1.000)", MACHINE_NOT_WORKING )
GAME( 1996, magzun, stvbios, stv, stv, stv_state, magzun, ROT0, "Sega", "Magical Zunou Power (J 961031 V1.000)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_MICROPHONE )
GAME( 1997, techbowl, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Technical Bowling (J 971212 V1.000)", MACHINE_NOT_WORKING )
GAME( 1999, micrombc, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Microman Battle Charge (J 990326 V1.000)", MACHINE_NOT_WORKING )

View File

@ -24,6 +24,7 @@ public:
m_cpu3(*this, "cpu3"),
m_cpu5(*this, "cpu5"),
m_soundcpu(*this, "soundcpu"),
m_screen(*this, "screen"),
m_watchdog(*this, "watchdog"),
m_oki1(*this, "oki1"),
m_oki2(*this, "oki2"),
@ -54,6 +55,7 @@ public:
int m_armold;
UINT16 m_scudhamm_motor_command;
int m_ip_select;
UINT16 m_wildplt_output;
UINT8 m_drawmode_table[16];
int m_debugsprites;
int m_show_unknown;
@ -90,6 +92,8 @@ public:
DECLARE_READ16_MEMBER(f1gpstar_wheel_r);
DECLARE_READ16_MEMBER(f1gpstr2_ioready_r);
DECLARE_READ16_MEMBER(wildplt_xy_r);
DECLARE_READ16_MEMBER(wildplt_mux_r);
DECLARE_WRITE16_MEMBER(wildplt_mux_w);
DECLARE_WRITE16_MEMBER(f1gpstar_motor_w);
DECLARE_WRITE16_MEMBER(f1gpstar_soundint_w);
DECLARE_WRITE16_MEMBER(f1gpstar_comms_w);
@ -119,6 +123,7 @@ public:
optional_device<cpu_device> m_cpu3;
optional_device<cpu_device> m_cpu5;
optional_device<cpu_device> m_soundcpu;
required_device<screen_device> m_screen;
optional_device<watchdog_timer_device> m_watchdog;
required_device<okim6295_device> m_oki1;
required_device<okim6295_device> m_oki2;

View File

@ -86,12 +86,14 @@ public:
DECLARE_DRIVER_INIT(stoneage);
DECLARE_DRIVER_INIT(mutantf);
DECLARE_DRIVER_INIT(cninja);
DECLARE_DRIVER_INIT(cninjabl2);
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_VIDEO_START(stoneage);
DECLARE_VIDEO_START(mutantf);
UINT32 screen_update_cninja(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_cninjabl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_cninjabl2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_edrandy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_robocop2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_mutantf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@ -115,4 +117,5 @@ public:
DECLARE_READ16_MEMBER( cninja_protection_region_0_104_r );
DECLARE_WRITE16_MEMBER( cninja_protection_region_0_104_w );
DECLARE_READ16_MEMBER(cninjabl2_sprite_dma_r);
};

View File

@ -13,6 +13,10 @@
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</element>
<element name="led2" defstate="0">
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.14" green="0.014" blue="0.02" /></disk>
</element>
<element name="hl" defstate="0">
<text string=" ">
@ -350,15 +354,15 @@
<!-- bottom side -->
<bezel name="8.8" element="led"><bounds x="42" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.9" element="led"><bounds x="45" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.10" element="led"><bounds x="48" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.11" element="led"><bounds x="51" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.12" element="led"><bounds x="54" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.13" element="led"><bounds x="57" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.8" element="led2"><bounds x="42" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.9" element="led2"><bounds x="45" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.10" element="led2"><bounds x="48" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.11" element="led2"><bounds x="51" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.12" element="led2"><bounds x="54" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.13" element="led2"><bounds x="57" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.14" element="led"><bounds x="76.5" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.15" element="led"><bounds x="76.5" y="94" width="1.5" height="1.5" /></bezel>
<bezel name="8.14" element="led2"><bounds x="76.5" y="90" width="1.5" height="1.5" /></bezel>
<bezel name="8.15" element="led2"><bounds x="76.5" y="94" width="1.5" height="1.5" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x01"><bounds x="33.9" y="94" width="1.5" height="1.5" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x02"><bounds x="36.9" y="94" width="1.5" height="1.5" /></bezel>

View File

@ -0,0 +1,375 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="led" defstate="0">
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk>
</element>
<element name="led2" defstate="0">
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.14" green="0.014" blue="0.02" /></disk>
</element>
<element name="hl" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="but" defstate="0">
<disk state="0"><color red="0.17" green="0.15" blue="0.15" /></disk>
<disk state="1"><color red="0.34" green="0.3" blue="0.3" /></disk>
</element>
<element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
<element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
<element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element>
<element name="disk_white"><disk><color red="0.81" green="0.8" blue="0.79" /></disk></element>
<element name="text_1">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="1"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="2"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="3"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_4">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="4"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_5">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="5"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_6">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="6"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_7">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="7"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_8">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="8"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_a">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="A"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_b">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="B"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_c">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="C"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_d">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="D"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_e">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="E"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_f">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="F"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_g">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="G"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_h">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="H"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_l3"><text string="&#x2654;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l4"><text string="&#x2655;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l5"><text string="&#x2656;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l6"><text string="&#x2657;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l7"><text string="&#x2658;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l8"><text string="&#x2659;"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r1"><text string="RE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r2"><text string="CL"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r3"><text string="PB"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r4"><text string="PV"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r5"><text string="LV"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r6"><text string="TB"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r7"><text string="DM"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r8"><text string="RV"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-2" right="98" top="-2" bottom="88" />
<bezel element="static_black">
<bounds left="-2" right="98" top="-2" bottom="88" />
</bezel>
<bezel element="white"><bounds x="-2.5" y="-2.5" width="90.5" height="90.5" /></bezel>
<!-- chessboard coords -->
<bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel>
<bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel>
<bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel>
<bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel>
<bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel>
<bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel>
<bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel>
<bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel>
<bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel>
<bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel>
<bezel element="text_c"><bounds x="27" y="85" width="2" height="2" /></bezel>
<bezel element="text_d"><bounds x="37" y="85" width="2" height="2" /></bezel>
<bezel element="text_e"><bounds x="47" y="85" width="2" height="2" /></bezel>
<bezel element="text_f"><bounds x="57" y="85" width="2" height="2" /></bezel>
<bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel>
<bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel>
<!-- chessboard bezel -->
<bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel>
<bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
<bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
<!-- chessboard leds -->
<bezel name="0.0" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.0" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.0" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.0" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.0" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.0" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.0" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.0" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.1" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.1" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.1" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.1" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.1" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.1" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.1" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.1" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.2" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.2" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.2" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.2" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.2" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.2" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.2" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.2" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.3" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.3" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.3" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.3" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.3" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.3" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.3" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.3" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.4" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.4" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.4" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.4" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.4" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.4" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.4" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.4" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.5" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.5" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.5" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.5" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.5" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.5" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.5" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.5" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.6" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.6" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.6" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.6" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.6" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.6" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.6" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.6" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.7" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.7" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.7" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.7" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.7" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.7" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.7" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.7" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel>
<!-- chessboard sensors -->
<bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<!-- right side -->
<!-- not included here: 2 on/off switches for power and module enable, each with green led when on -->
<bezel element="text_l3"><bounds x="88.25" y="39.75" width="4" height="4" /></bezel>
<bezel element="text_l4"><bounds x="88.25" y="43.75" width="4" height="4" /></bezel>
<bezel element="text_l5"><bounds x="88.25" y="47.75" width="4" height="4" /></bezel>
<bezel element="text_l6"><bounds x="88.25" y="51.75" width="4" height="4" /></bezel>
<bezel element="text_l7"><bounds x="88.25" y="55.75" width="4" height="4" /></bezel>
<bezel element="text_l8"><bounds x="88.25" y="59.75" width="4" height="4" /></bezel>
<bezel element="text_r1"><bounds x="93.25" y="33" width="4" height="2" /></bezel>
<bezel element="text_r2"><bounds x="93.25" y="37" width="4" height="2" /></bezel>
<bezel element="text_r3"><bounds x="93.25" y="41" width="4" height="2" /></bezel>
<bezel element="text_r4"><bounds x="93.25" y="45" width="4" height="2" /></bezel>
<bezel element="text_r5"><bounds x="93.25" y="49" width="4" height="2" /></bezel>
<bezel element="text_r6"><bounds x="93.25" y="53" width="4" height="2" /></bezel>
<bezel element="text_r7"><bounds x="93.25" y="57" width="4" height="2" /></bezel>
<bezel element="text_r8"><bounds x="93.25" y="61" width="4" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x80"><bounds x="91.5" y="33" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x40"><bounds x="91.5" y="37" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x20"><bounds x="91.5" y="41" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x10"><bounds x="91.5" y="45" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x08"><bounds x="91.5" y="49" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x04"><bounds x="91.5" y="53" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x02"><bounds x="91.5" y="57" width="2" height="2" /></bezel>
<bezel element="but" inputtag="IN.8" inputmask="0x01"><bounds x="91.5" y="61" width="2" height="2" /></bezel>
<bezel name="8.7" element="led2"><bounds x="91.75" y="65.25" width="1.5" height="1.5" /></bezel>
</view>
</mamelayout>

View File

@ -252,77 +252,77 @@
<!-- chessboard leds -->
<bezel name="4.7" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.7" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.7" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.7" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.7" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.7" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.7" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.7" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.15" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.15" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.15" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.15" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.15" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.15" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.15" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.15" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.6" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.6" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.6" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.6" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.6" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.6" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.6" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.6" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.14" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.14" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.14" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.14" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.14" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.14" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.14" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.14" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.5" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.5" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.5" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.5" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.5" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.5" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.5" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.5" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.13" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.13" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.13" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.13" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.13" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.13" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.13" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.13" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.4" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.4" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.4" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.4" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.4" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.4" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.4" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.4" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.12" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.12" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.12" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.12" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.12" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.12" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.12" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.12" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.3" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.3" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.3" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.3" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.3" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.3" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.3" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.3" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.11" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.11" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.11" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.11" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.11" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.11" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.11" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.11" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.2" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.2" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.2" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.2" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.2" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.2" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.2" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.2" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.10" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.10" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.10" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.10" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.10" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.10" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.10" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.10" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.1" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.1" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.1" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.1" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.1" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.1" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.1" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.1" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.9" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.9" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.9" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.9" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.9" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.9" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.9" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.9" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.0" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.0" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.0" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.0" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="8.0" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="9.0" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="10.0" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="11.0" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="0.8" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="1.8" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="2.8" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="3.8" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="4.8" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="5.8" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="6.8" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="7.8" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel>
<!-- chessboard sensors -->
@ -486,6 +486,5 @@
<bezel element="text_lv"><bounds x="85.45" y="-8.95" width="4.9" height="2.9" /></bezel>
<bezel element="hlp" inputtag="IN.9" inputmask="0x08"><bounds x="85.4" y="-9" width="5" height="3" /><color alpha="0.25" /></bezel>
</view>
</mamelayout>

View File

@ -12219,6 +12219,7 @@ fexcelp //
fexcelv //
fscc9 //
fscc9b //
fscc9ps //
fscc12 //
reversic //
super9cc // SU9: Super 9 Sensory Chess Challenger (English)
@ -13205,6 +13206,7 @@ geimulti // (c) 1992 Grayhound Electronics
gepoker // (c) 1984 Greyhound Electronics
gepoker1 // (c) 1984 Greyhound Electronics
gepoker2 // (c) 1984 Greyhound Electronics
gepoker3 // (c) 1984 Greyhound Electronics
gs4002 // (c) 1982 G.E.I.
gs4002a // (c) 1982 G.E.I.
gt103a1 // (c) 1984 Greyhound Electronics
@ -20320,6 +20322,9 @@ mits680b //
@source:mjkjidai.cpp
mjkjidai // (c) 1986 Sanritsu
@source:mjsenpu.cpp
mjsenpu
@source:mjsister.cpp
mjsister // (c) 1986 Toaplan
@ -34059,6 +34064,7 @@ statriv2 // (c) 1984 Status Games
statriv2v // (c) 1984 Status Games
statriv4 // (c) 1985 Status Games
statusbj // (c) 1981 Status Games
supertr // (c) 1986 Status Games
supertr2 // (c) 1986 Status Games
supertr3 // (c) 1986 Status Games
tripdraw // (c) 1981 Status Games

View File

@ -270,12 +270,6 @@ READ16_MEMBER(cischeat_state::f1gpstr2_ioready_r)
Wild Pilot
**************************************************************************/
READ16_MEMBER(cischeat_state::wildplt_xy_r)
{
// X, Y
return ioport("IN2")->read() | (ioport("IN3")->read()<<8);
}
WRITE16_MEMBER(cischeat_state::f1gpstar_motor_w)
{

View File

@ -142,6 +142,17 @@ UINT32 cninja_state::screen_update_cninja(screen_device &screen, bitmap_ind16 &b
return 0;
}
UINT32 cninja_state::screen_update_cninjabl2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* force layers to be enabled */
m_deco_tilegen1->set_enable(0, 1 );
m_deco_tilegen1->set_enable(1, 1 );
screen_update_cninja(screen, bitmap, cliprect);
return 0;
}
UINT32 cninja_state::screen_update_cninjabl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
address_space &space = machine().driver_data()->generic_space();

View File

@ -43,7 +43,7 @@ consolewin_info::consolewin_info(debugger_windows_interface &debugger) :
m_devices_menu = CreatePopupMenu();
for (device_image_interface &img : iter)
{
auto tc_buf = tstring_from_utf8(string_format("%s : %s", img.device().name(), img.exists() ? img.filename() : "[no image]").c_str());
osd::text::tstring tc_buf = osd::text::to_tstring(string_format("%s : %s", img.device().name(), img.exists() ? img.filename() : "[no image]"));
AppendMenu(m_devices_menu, MF_ENABLED, 0, tc_buf.c_str());
}
AppendMenu(GetMenu(window()), MF_ENABLED | MF_POPUP, (UINT_PTR)m_devices_menu, TEXT("Images"));
@ -189,7 +189,7 @@ void consolewin_info::update_menu()
AppendMenu(devicesubmenu, flags_for_exists, new_item + DEVOPTION_CASSETTE_FASTFORWARD, TEXT("Fast Forward"));
}
auto tc_buf = tstring_from_utf8(string_format("%s :%s", img.device().name(), img.exists() ? img.filename() : "[empty slot]").c_str());
osd::text::tstring tc_buf = osd::text::to_tstring(string_format("%s :%s", img.device().name(), img.exists() ? img.filename() : "[empty slot]"));
ModifyMenu(m_devices_menu, cnt, MF_BYPOSITION | MF_POPUP, (UINT_PTR)devicesubmenu, tc_buf.c_str());
cnt++;
@ -214,7 +214,7 @@ bool consolewin_info::handle_command(WPARAM wparam, LPARAM lparam)
std::string filter;
build_generic_filter(img, false, filter);
{
auto t_filter = tstring_from_utf8(filter.c_str());
osd::text::tstring t_filter = osd::text::to_tstring(filter);
// convert a pipe-char delimited string into a NUL delimited string
for (int i = 0; t_filter[i] != '\0'; i++)
@ -241,7 +241,7 @@ bool consolewin_info::handle_command(WPARAM wparam, LPARAM lparam)
if (GetOpenFileName(&ofn))
{
auto utf8_buf = utf8_from_tstring(selectedFilename);
auto utf8_buf = osd::text::from_tstring(selectedFilename);
img->load(utf8_buf.c_str());
}
}
@ -252,7 +252,7 @@ bool consolewin_info::handle_command(WPARAM wparam, LPARAM lparam)
std::string filter;
build_generic_filter(img, true, filter);
{
auto t_filter = tstring_from_utf8(filter.c_str());
osd::text::tstring t_filter = osd::text::to_tstring(filter);
// convert a pipe-char delimited string into a NUL delimited string
for (int i = 0; t_filter[i] != '\0'; i++)
{
@ -278,7 +278,7 @@ bool consolewin_info::handle_command(WPARAM wparam, LPARAM lparam)
if (GetSaveFileName(&ofn))
{
auto utf8_buf = utf8_from_tstring(selectedFilename);
auto utf8_buf = osd::text::from_tstring(selectedFilename);
img->create(utf8_buf.c_str(), img->device_get_indexed_creatable_format(0), nullptr);
}
}

View File

@ -268,7 +268,7 @@ HWND debugview_info::create_source_combobox(HWND parent, LONG_PTR userdata)
int const length = strlen(source->name());
if (length > maxlength)
maxlength = length;
auto t_name = tstring_from_utf8(source->name());
auto t_name = osd::text::to_tstring(source->name());
SendMessage(result, CB_ADDSTRING, 0, (LPARAM)t_name.c_str());
}
if (cursource != nullptr)

View File

@ -79,7 +79,7 @@ void editwin_info::set_editwnd_bounds(RECT const &bounds)
void editwin_info::set_editwnd_text(char const *text)
{
auto tc_buffer = tstring_from_utf8(text);
auto tc_buffer = osd::text::to_tstring(text);
SendMessage(m_editwnd, WM_SETTEXT, (WPARAM)0, (LPARAM)tc_buffer.c_str());
}
@ -187,7 +187,7 @@ LRESULT editwin_info::edit_proc(UINT message, WPARAM wparam, LPARAM lparam)
// process
{
auto utf8_buffer = utf8_from_tstring(buffer);
auto utf8_buffer = osd::text::from_tstring(buffer);
process_string(utf8_buffer.c_str());
}
break;

View File

@ -27,7 +27,7 @@ ui_metrics::ui_metrics(osd_options const &options) :
char const *const face = options.debugger_font();
// create a standard font
auto t_face = tstring_from_utf8((!*face || !strcmp(OSDOPTVAL_AUTO, face)) ? "Lucida Console" : face);
auto t_face = osd::text::to_tstring((!*face || !strcmp(OSDOPTVAL_AUTO, face)) ? "Lucida Console" : face);
m_debug_font = CreateFont(-MulDiv((size <= 0) ? 9 : size, GetDeviceCaps(temp_dc, LOGPIXELSY), 72), 0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH, t_face.c_str());

View File

@ -91,7 +91,7 @@ const directory::entry *win_directory::read()
m_is_first = false;
// extract the data
utf8_from_tstring(m_name, m_data.cFileName);
osd::text::from_tstring(m_name, m_data.cFileName);
m_entry.name = m_name.c_str();
m_entry.type = win_attributes_to_entry_type(m_data.dwFileAttributes);
m_entry.size = m_data.nFileSizeLow | (std::uint64_t(m_data.nFileSizeHigh) << 32);
@ -112,7 +112,7 @@ bool win_directory::open_impl(std::string const &dirname)
std::string dirfilter = string_format("%s\\*.*", dirname);
// convert the path to TCHARs
auto t_dirfilter = tstring_from_utf8(dirfilter.c_str());
osd::text::tstring t_dirfilter = osd::text::to_tstring(dirfilter);
// attempt to find the first file
m_find = FindFirstFileEx(t_dirfilter.c_str(), FindExInfoStandard, &m_data, FindExSearchNameMatch, nullptr, 0);

View File

@ -173,7 +173,7 @@ osd_file::error osd_file::open(std::string const &orig_path, UINT32 openflags, p
return win_open_ptty(path, openflags, file, filesize);
// convert path to TCHAR
auto t_path = tstring_from_utf8(path.c_str());
osd::text::tstring t_path = osd::text::to_tstring(path);
// convert the path into something Windows compatible (the actual interesting part appears
// to have been commented out???)
@ -274,7 +274,7 @@ osd_file::error osd_file::openpty(ptr &file, std::string &name)
osd_file::error osd_file::remove(std::string const &filename)
{
auto tempstr = tstring_from_utf8(filename.c_str());
osd::text::tstring tempstr = osd::text::to_tstring(filename);
error filerr = error::NONE;
if (!DeleteFile(tempstr.c_str()))
@ -301,7 +301,7 @@ int osd_get_physical_drive_geometry(const char *filename, UINT32 *cylinders, UIN
return FALSE;
// do a create file on the drive
auto t_filename = tstring_from_utf8(filename);
auto t_filename = osd::text::to_tstring(filename);
file = CreateFile(t_filename.c_str(), GENERIC_READ, FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, nullptr);
if (file == INVALID_HANDLE_VALUE)
return FALSE;
@ -338,7 +338,7 @@ int osd_get_physical_drive_geometry(const char *filename, UINT32 *cylinders, UIN
std::unique_ptr<osd::directory::entry> osd_stat(const std::string &path)
{
// convert the path to TCHARs
auto t_path = tstring_from_utf8(path.c_str());
osd::text::tstring t_path = osd::text::to_tstring(path);
// is this path a root directory (e.g. - C:)?
WIN32_FIND_DATA find_data;
@ -382,7 +382,7 @@ std::unique_ptr<osd::directory::entry> osd_stat(const std::string &path)
osd_file::error osd_get_full_path(std::string &dst, std::string const &path)
{
// convert the path to TCHARs
auto t_path = tstring_from_utf8(path.c_str());
osd::text::tstring t_path = osd::text::to_tstring(path);
// cannonicalize the path
TCHAR buffer[MAX_PATH];
@ -390,7 +390,7 @@ osd_file::error osd_get_full_path(std::string &dst, std::string const &path)
return win_error_to_file_error(GetLastError());
// convert the result back to UTF-8
utf8_from_tstring(dst, buffer);
osd::text::from_tstring(dst, buffer);
return osd_file::error::NONE;
}
@ -402,7 +402,7 @@ osd_file::error osd_get_full_path(std::string &dst, std::string const &path)
bool osd_is_absolute_path(std::string const &path)
{
auto t_path = tstring_from_utf8(path.c_str());
osd::text::tstring t_path = osd::text::to_tstring(path);
return !PathIsRelative(t_path.c_str());
}

View File

@ -87,7 +87,7 @@ bool win_check_ptty_path(std::string const &path)
osd_file::error win_open_ptty(std::string const &path, std::uint32_t openflags, osd_file::ptr &file, std::uint64_t &filesize)
{
auto t_name = tstring_from_utf8(path.c_str());
osd::text::tstring t_name = osd::text::to_tstring(path);
HANDLE pipe = CreateNamedPipe(t_name.c_str(), PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_NOWAIT, 1, 32, 32, 0, nullptr);

View File

@ -362,7 +362,7 @@ public:
bool italic = (strreplace(name, "[I]", "") + strreplace(name, "[i]", "") > 0);
// convert the face name
std::wstring familyName = wstring_from_utf8(name.c_str());
std::wstring familyName = osd::text::to_wstring(name.c_str());
// find the font
HR_RET0(find_font(
@ -757,7 +757,7 @@ public:
std::unique_ptr<WCHAR[]> name = nullptr;
HR_RET0(get_localized_familyname(names, name));
std::string utf8_name = utf8_from_wstring(name.get());
std::string utf8_name = osd::text::from_wstring(name.get());
name.reset();
// Review: should the config name, be unlocalized?

View File

@ -85,7 +85,7 @@ bool osd_font_windows::open(std::string const &font_path, std::string const &_na
logfont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
// copy in the face name
std::basic_string<TCHAR> face = tstring_from_utf8(name.c_str());
osd::text::tstring face = osd::text::to_tstring(name);
_tcsncpy(logfont.lfFaceName, face.c_str(), ARRAY_LENGTH(logfont.lfFaceName));
logfont.lfFaceName[sizeof(logfont.lfFaceName) / sizeof(TCHAR)-1] = 0;
@ -110,7 +110,7 @@ bool osd_font_windows::open(std::string const &font_path, std::string const &_na
}
// if it doesn't match our request, fail
std::string utf = utf8_from_tstring(&realname[0]);
std::string utf = osd::text::from_tstring(&realname[0]);
int result = core_stricmp(utf.c_str(), name.c_str());
// if we didn't match, nuke our font and fall back
@ -300,7 +300,7 @@ private:
static int CALLBACK font_family_callback(LOGFONT const *lpelfe, TEXTMETRIC const *lpntme, DWORD FontType, LPARAM lParam)
{
auto &result = *reinterpret_cast<std::vector<std::pair<std::string, std::string> > *>(lParam);
std::string face = utf8_from_tstring(lpelfe->lfFaceName);
std::string face = osd::text::from_tstring(lpelfe->lfFaceName);
if ((face[0] != '@') && (result.empty() || (result.back().first != face))) result.emplace_back(face, face);
return TRUE;
}

View File

@ -262,14 +262,14 @@ public:
}
// convert the name to utf8
std::string namestring = utf8_from_tstring(instance.tszName);
std::string namestring = osd::text::from_tstring(instance.tszName);
// if no suffix, return as-is
if (suffix == nullptr)
return namestring;
// convert the suffix to utf8
std::string suffix_utf8 = utf8_from_tstring(suffix);
std::string suffix_utf8 = osd::text::from_tstring(suffix);
// Concat the name and suffix
return namestring + " " + suffix_utf8;

View File

@ -79,7 +79,7 @@ public:
HRESULT result;
// convert instance name to utf8
std::string utf8_instance_name = utf8_from_tstring(instance->tszInstanceName);
std::string utf8_instance_name = osd::text::from_tstring(instance->tszInstanceName);
// set device id to name
std::string utf8_instance_id = utf8_instance_name;

View File

@ -573,10 +573,10 @@ protected:
std::wstring name = rawinput_device_improve_name(tname.get());
// convert name to utf8
std::string utf8_name = utf8_from_wstring(name.c_str());
std::string utf8_name = osd::text::from_wstring(name.c_str());
// set device id to raw input name
std::string utf8_id = utf8_from_wstring(tname.get());
std::string utf8_id = osd::text::from_wstring(tname.get());
devinfo = devicelist()->create_device<TDevice>(machine, utf8_name.c_str(), utf8_id.c_str(), *this);
@ -679,7 +679,7 @@ protected:
// generate the name
if (GetKeyNameText(((keynum & 0x7f) << 16) | ((keynum & 0x80) << 17), keyname, ARRAY_LENGTH(keyname)) == 0)
_sntprintf(keyname, ARRAY_LENGTH(keyname), TEXT("Scan%03d"), keynum);
std::string name = utf8_from_tstring(keyname);
std::string name = osd::text::from_tstring(keyname);
// add the item to the device
devinfo->device()->add_item(name.c_str(), itemid, generic_button_get_state<std::uint8_t>, &devinfo->keyboard.state[keynum]);

View File

@ -297,7 +297,7 @@ static char *get_clipboard_text_by_format(UINT format, std::string (*convert)(LP
static std::string convert_wide(LPCVOID data)
{
return utf8_from_wstring((LPCWSTR) data);
return osd::text::from_wstring((LPCWSTR) data);
}
//============================================================
@ -306,7 +306,7 @@ static std::string convert_wide(LPCVOID data)
static std::string convert_ansi(LPCVOID data)
{
return utf8_from_astring((LPCSTR) data);
return osd::text::from_astring((LPCSTR) data);
}
//============================================================
@ -367,7 +367,7 @@ protected:
for (auto const &library : m_libraries)
{
auto tempstr = tstring_from_utf8(library.c_str());
osd::text::tstring tempstr = osd::text::to_tstring(library);
HMODULE module = load_library(tempstr.c_str());
if (module != nullptr)

View File

@ -46,7 +46,7 @@ public:
m_output->GetDesc(&desc);
// fetch the latest info about the monitor
m_name = utf8_from_wstring(desc.DeviceName);
m_name = osd::text::from_wstring(desc.DeviceName);
m_pos_size = RECT_to_osd_rect(desc.DesktopCoordinates);
m_usuable_pos_size = RECT_to_osd_rect(desc.DesktopCoordinates);
@ -139,7 +139,7 @@ protected:
float aspect = float(coords->right - coords->left) / float(coords->bottom - coords->top);
// allocate a new monitor info
std::string devicename = utf8_from_wstring(desc.DeviceName);
std::string devicename = osd::text::from_wstring(desc.DeviceName);
// allocate a new monitor info
auto monitor = std::make_shared<dxgi_monitor_info>(*this, desc.Monitor, devicename.c_str(), aspect, output);

View File

@ -45,7 +45,7 @@ public:
result = GetMonitorInfo(reinterpret_cast<HMONITOR>(oshandle()), static_cast<LPMONITORINFO>(&m_info));
assert(result);
m_name = utf8_from_tstring(m_info.szDevice);
m_name = osd::text::from_tstring(m_info.szDevice);
m_pos_size = RECT_to_osd_rect(m_info.rcMonitor);
m_usuable_pos_size = RECT_to_osd_rect(m_info.rcWork);
@ -122,7 +122,7 @@ private:
float aspect = static_cast<float>(info.rcMonitor.right - info.rcMonitor.left) / static_cast<float>(info.rcMonitor.bottom - info.rcMonitor.top);
// allocate a new monitor info
auto temp = utf8_from_tstring(info.szDevice);
auto temp = osd::text::from_tstring(info.szDevice);
// copy in the data
auto monitor = std::make_shared<win32_monitor_info>(*self, handle, temp.c_str(), aspect);

View File

@ -2589,7 +2589,7 @@ effect::effect(shaders *shadersys, IDirect3DDevice9 *dev, const char *name, cons
char name_cstr[1024];
sprintf(name_cstr, "%s\\%s", path, name);
auto effect_name = tstring_from_utf8(name_cstr);
auto effect_name = osd::text::to_tstring(name_cstr);
HRESULT hr = (*shadersys->d3dx_create_effect_from_file_ptr)(dev, effect_name.c_str(), nullptr, nullptr, 0, nullptr, &m_effect, &buffer_errors);
if (FAILED(hr))

View File

@ -12,122 +12,272 @@
#undef min
#undef max
#include <algorithm>
#include <assert.h>
// MAMEOS headers
#include "strconv.h"
#if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS)
namespace
{
// class designed to provide inputs to WideCharToMultiByte() and MultiByteToWideChar()
template<typename T>
class string_source
{
public:
string_source(const T *str) : m_str(str), m_char_count(-1)
{
assert(str);
}
string_source(const std::basic_string<T> &str) : m_str(str.c_str()), m_char_count((int)str.size() + 1)
{
}
const T *string() const { return m_str; }; // returns pointer to actual characters
int char_count() const { return m_char_count; } // returns the character count (including NUL terminater), or -1 if NUL terminated
private:
const T *m_str;
int m_char_count;
};
};
namespace osd {
namespace text {
//============================================================
// astring_from_utf8
// mbstring_from_wstring
//============================================================
std::string &astring_from_utf8(std::string &dst, const char *s)
static std::string &mbstring_from_wstring(std::string &dst, UINT code_page, const string_source<wchar_t> &src)
{
// convert UTF-16 to the specified code page
int dst_char_count = WideCharToMultiByte(code_page, 0, src.string(), src.char_count(), nullptr, 0, nullptr, nullptr);
dst.resize(dst_char_count - 1);
WideCharToMultiByte(code_page, 0, src.string(), src.char_count(), &dst[0], dst_char_count, nullptr, nullptr);
return dst;
}
//============================================================
// wstring_from_mbstring
//============================================================
static std::wstring &wstring_from_mbstring(std::wstring &dst, const string_source<char> &src, UINT code_page)
{
// convert multibyte string (in specified code page) to UTF-16
int dst_char_count = MultiByteToWideChar(code_page, 0, src.string(), src.char_count(), nullptr, 0);
dst.resize(dst_char_count - 1);
MultiByteToWideChar(CP_UTF8, 0, src.string(), src.char_count(), &dst[0], dst_char_count - 1);
return dst;
}
//============================================================
// to_astring
//============================================================
std::string &to_astring(std::string &dst, const std::string &s)
{
// convert MAME string (UTF-8) to UTF-16
std::basic_string<WCHAR> wstring = wstring_from_utf8(s);
std::wstring wstring = to_wstring(s);
// convert UTF-16 to "ANSI code page" string
int char_count = WideCharToMultiByte(CP_ACP, 0, wstring.c_str(), wstring.size(), nullptr, 0, nullptr, nullptr);
dst.resize(char_count);
WideCharToMultiByte(CP_ACP, 0, wstring.c_str(), wstring.size(), &dst[0], char_count, nullptr, nullptr);
return dst;
return mbstring_from_wstring(dst, CP_ACP, string_source<wchar_t>(wstring));
}
//============================================================
// astring_from_utf8
//============================================================
std::string astring_from_utf8(const char *s)
{
std::string result;
astring_from_utf8(result, s);
return result;
}
//============================================================
// utf8_from_astring
// to_astring
//============================================================
std::string &utf8_from_astring(std::string &dst, const CHAR *s)
{
// convert "ANSI code page" string to UTF-16
int char_count = MultiByteToWideChar(CP_ACP, 0, s, -1, nullptr, 0);
std::wstring wstring(char_count - 1, 0);
MultiByteToWideChar(CP_ACP, 0, s, -1, &wstring[0], char_count - 1);
// convert UTF-16 to MAME string (UTF-8)
return utf8_from_wstring(dst, wstring.c_str());
}
//============================================================
// utf8_from_astring
//============================================================
std::string utf8_from_astring(const CHAR *s)
{
std::string result;
utf8_from_astring(result, s);
return result;
}
//============================================================
// wstring_from_utf8
//============================================================
std::wstring &wstring_from_utf8(std::wstring &dst, const char *s)
std::string &to_astring(std::string &dst, const char *s)
{
// convert MAME string (UTF-8) to UTF-16
int char_count = MultiByteToWideChar(CP_UTF8, 0, s, -1, nullptr, 0);
dst.resize(char_count - 1);
MultiByteToWideChar(CP_UTF8, 0, s, -1, &dst[0], char_count - 1);
std::wstring wstring = to_wstring(s);
return dst;
// convert UTF-16 to "ANSI code page" string
return mbstring_from_wstring(dst, CP_ACP, string_source<wchar_t>(wstring));
}
//============================================================
// wstring_from_utf8
// to_astring
//============================================================
std::wstring wstring_from_utf8(const char *s)
{
std::wstring result;
wstring_from_utf8(result, s);
return result;
}
//============================================================
// utf8_from_wstring
//============================================================
std::string &utf8_from_wstring(std::string &dst, const WCHAR *s)
{
// convert UTF-16 to MAME string (UTF-8)
int char_count = WideCharToMultiByte(CP_UTF8, 0, s, -1, nullptr, 0, nullptr, nullptr);
dst.resize(char_count - 1);
WideCharToMultiByte(CP_UTF8, 0, s, -1, &dst[0], char_count - 1, nullptr, nullptr);
return dst;
}
//============================================================
// utf8_from_wstring
//============================================================
std::string utf8_from_wstring(const WCHAR *s)
std::string to_astring(const std::string &s)
{
std::string result;
utf8_from_wstring(result, s);
to_astring(result, s);
return result;
}
//============================================================
// to_astring
//============================================================
std::string to_astring(const char *s)
{
std::string result;
to_astring(result, s);
return result;
}
//============================================================
// from_astring
//============================================================
std::string &from_astring(std::string &dst, const std::string &s)
{
// convert "ANSI code page" string to UTF-16
std::wstring wstring;
wstring_from_mbstring(wstring, string_source<char>(s), CP_ACP);
// convert UTF-16 to MAME string (UTF-8)
return from_wstring(dst, wstring);
}
//============================================================
// from_astring
//============================================================
std::string &from_astring(std::string &dst, const CHAR *s)
{
// convert "ANSI code page" string to UTF-16
std::wstring wstring;
wstring_from_mbstring(wstring, string_source<char>(s), CP_ACP);
// convert UTF-16 to MAME string (UTF-8)
return from_wstring(dst, wstring);
}
//============================================================
// from_astring
//============================================================
std::string from_astring(const std::string &s)
{
std::string result;
from_astring(result, s);
return result;
}
//============================================================
// from_astring
//============================================================
std::string from_astring(const CHAR *s)
{
std::string result;
from_astring(result, s);
return result;
}
//============================================================
// to_wstring
//============================================================
std::wstring &to_wstring(std::wstring &dst, const std::string &s)
{
// convert MAME string (UTF-8) to UTF-16
return wstring_from_mbstring(dst, string_source<char>(s), CP_UTF8);
}
//============================================================
// to_wstring
//============================================================
std::wstring &to_wstring(std::wstring &dst, const char *s)
{
// convert MAME string (UTF-8) to UTF-16
return wstring_from_mbstring(dst, string_source<char>(s), CP_UTF8);
}
//============================================================
// to_wstring
//============================================================
std::wstring to_wstring(const std::string &s)
{
std::wstring result;
to_wstring(result, s);
return result;
}
//============================================================
// to_wstring
//============================================================
std::wstring to_wstring(const char *s)
{
std::wstring result;
to_wstring(result, s);
return result;
}
//============================================================
// from_wstring
//============================================================
std::string &from_wstring(std::string &dst, const std::wstring &s)
{
// convert UTF-16 to MAME string (UTF-8)
return mbstring_from_wstring(dst, CP_UTF8, string_source<wchar_t>(s));
}
//============================================================
// from_wstring
//============================================================
std::string &from_wstring(std::string &dst, const WCHAR *s)
{
// convert UTF-16 to MAME string (UTF-8)
return mbstring_from_wstring(dst, CP_UTF8, string_source<wchar_t>(s));
}
//============================================================
// from_wstring
//============================================================
std::string from_wstring(const std::wstring &s)
{
std::string result;
from_wstring(result, s);
return result;
}
//============================================================
// from_wstring
//============================================================
std::string from_wstring(const WCHAR *s)
{
std::string result;
from_wstring(result, s);
return result;
}
}; // namespace text
}; // namespace osd
//============================================================
// osd_uchar_from_osdchar
//============================================================
@ -154,6 +304,7 @@ error:
return static_cast<int>(count);
}
#else
#include "unicode.h"
//============================================================

View File

@ -25,26 +25,41 @@
#include <windows.h>
// the result of these functions has to be released with osd_free()
namespace osd
{
namespace text
{
std::string to_astring(const std::string &s);
std::string to_astring(const char *s);
std::string &to_astring(std::string &dst, const std::string &s);
std::string &to_astring(std::string &dst, const char *s);
std::string from_astring(const std::string &s);
std::string from_astring(const CHAR *s);
std::string &from_astring(std::string &dst, const std::string &s);
std::string &from_astring(std::string &dst, const CHAR *s);
std::string astring_from_utf8(const char *s);
std::string &astring_from_utf8(std::string &dst, const char *s);
std::string utf8_from_astring(const CHAR *s);
std::string &utf8_from_astring(std::string &dst, const CHAR *s);
std::wstring wstring_from_utf8(const char *s);
std::wstring &wstring_from_utf8(std::wstring &dst, const char *s);
std::string utf8_from_wstring(const WCHAR *s);
std::string &utf8_from_wstring(std::string &dst, const WCHAR *s);
std::wstring to_wstring(const std::string &s);
std::wstring to_wstring(const char *s);
std::wstring &to_wstring(std::wstring &dst, const std::string &s);
std::wstring &to_wstring(std::wstring &dst, const char *s);
std::string from_wstring(const std::wstring &s);
std::string from_wstring(const WCHAR *s);
std::string &from_wstring(std::string &dst, const std::wstring &s);
std::string &from_wstring(std::string &dst, const WCHAR *s);
#ifdef UNICODE
#define tstring_from_utf8 wstring_from_utf8
#define utf8_from_tstring utf8_from_wstring
typedef std::wstring tstring;
#define to_tstring to_wstring
#define from_tstring from_wstring
#else // !UNICODE
#define tstring_from_utf8 astring_from_utf8
#define utf8_from_tstring utf8_from_astring
typedef std::string tstring;
#define to_tstring to_astring
#define from_tstring from_astring
#endif // UNICODE
}
}
#endif // defined(WIN32)

View File

@ -36,7 +36,7 @@ extern "C" int _tmain(int argc, TCHAR **argv)
// convert arguments to UTF-8
for (i = 0; i < argc; i++)
{
argv_vectors[i] = utf8_from_tstring(argv[i]);
argv_vectors[i] = osd::text::from_tstring(argv[i]);
utf8_argv[i] = (char *) argv_vectors[i].c_str();
}

View File

@ -99,8 +99,8 @@ public:
char buffer[1024];
vsnprintf(buffer, ARRAY_LENGTH(buffer), msg, args);
osd_unique_wstr wcbuffer(wstring_from_utf8(buffer));
osd_unique_wstr wcappname(wstring_from_utf8(emulator_info::get_appname()));
osd_unique_wstr wcbuffer(osd::text::to_wstring(buffer));
osd_unique_wstr wcappname(osd::text::to_wstring(emulator_info::get_appname()));
auto dlg = ref new MessageDialog(ref new Platform::String(wcbuffer.get()), ref new Platform::String(wcappname.get()));
dlg->ShowAsync();

View File

@ -23,7 +23,7 @@
void win_output_debug_string_utf8(const char *string)
{
auto t_string = tstring_from_utf8(string);
auto t_string = osd::text::to_tstring(string);
OutputDebugString(t_string.c_str());
}
@ -42,13 +42,13 @@ int win_message_box_utf8(HWND window, const char *text, const char *caption, UIN
if (text)
{
ts_text = tstring_from_utf8(text);
ts_text = osd::text::to_tstring(text);
t_text = ts_text.c_str();
}
if (caption)
{
ts_caption = tstring_from_utf8(caption);
ts_caption = osd::text::to_tstring(caption);
t_caption = ts_caption.c_str();
}
@ -69,7 +69,7 @@ BOOL win_set_window_text_utf8(HWND window, const char *text)
if (text)
{
ts_text = tstring_from_utf8(text);
ts_text = osd::text::to_tstring(text);
t_text = ts_text.c_str();
}
@ -100,14 +100,14 @@ std::string win_get_window_text_utf8(HWND window)
TCHAR *buffer = (TCHAR *) alloca((length + 1) * sizeof(TCHAR));
GetWindowText(window, buffer, length + 1);
return utf8_from_tstring(buffer);
return osd::text::from_tstring(buffer);
}
#else
{
TCHAR t_buffer[256];
auto title = Windows::UI::ViewManagement::ApplicationView::GetForCurrentView()->Title;
wcsncpy(t_buffer, title->Data(), ARRAY_LENGTH(t_buffer));
return utf8_from_tstring(t_buffer);
return osd::text::from_tstring(t_buffer);
}
#endif
}
@ -122,13 +122,13 @@ HWND win_create_window_ex_utf8(DWORD exstyle, const char* classname, const char*
int x, int y, int width, int height, HWND parent, HMENU menu,
HINSTANCE instance, void* param)
{
std::basic_string<TCHAR> ts_classname = tstring_from_utf8(classname);
std::basic_string<TCHAR> ts_classname = osd::text::to_tstring(classname);
LPCTSTR t_windowname = nullptr;
std::basic_string<TCHAR> ts_windowname;
if (windowname != nullptr)
{
ts_windowname = tstring_from_utf8(windowname);
ts_windowname = osd::text::to_tstring(windowname);
t_windowname = ts_windowname.c_str();
}

View File

@ -106,9 +106,9 @@ void osd_subst_env(std::string &dst, const std::string &src)
{
TCHAR buffer[MAX_PATH];
auto t_src = tstring_from_utf8(src.c_str());
osd::text::tstring t_src = osd::text::to_tstring(src);
ExpandEnvironmentStrings(t_src.c_str(), buffer, ARRAY_LENGTH(buffer));
utf8_from_tstring(dst, buffer);
osd::text::from_tstring(dst, buffer);
}
//-------------------------------------------------