Merge branch 'master' into S11rodlandetc

This commit is contained in:
system11b 2015-06-16 15:26:06 +01:00
commit face90083e
31 changed files with 1504 additions and 631 deletions

View File

@ -3909,7 +3909,7 @@ a certain item) -->
<description>Lemmings 2 - The Tribes (Euro, Prototype)</description>
<year>1994</year>
<publisher>Psygnosis</publisher>
<part name="cart" interface="sms_cart">
<part name="cart" interface="gamegear_cart">
<dataarea name="rom" size="524288">
<rom name="lemmings 2 - the tribes [proto].bin" size="524288" crc="fbc807e1" sha1="ad0ce8fc8ce9e5ef9b68b76fb7f3eced4245d5c4" offset="000000" />
</dataarea>

View File

@ -222,6 +222,12 @@ function mainProject(_target, _subtarget)
{ MAME_DIR .. "src/".._target .."/" .. _subtarget ..".lst" , GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.c", { MAME_DIR .. "src/build/makelist.py" }, {"@echo Building driver list...", PYTHON .. " $(1) $(<) > $(@)" }},
}
configuration { "gmake" }
dependency {
{ ".PHONY", ".FORCE", true },
{ "$(OBJDIR)/src/version.o", ".FORCE", true },
}
configuration { "mingw*" }
custombuildtask {
{ MAME_DIR .. "src/version.c" , GEN_DIR .. "/resource/" .. rctarget .. "vers.rc", { MAME_DIR .. "src/build/verinfo.py" }, {"@echo Emitting " .. rctarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. rctarget .. " $(<) > $(@)" }},

View File

@ -2480,6 +2480,7 @@ files {
MAME_DIR .. "src/mame/video/segas18.c",
MAME_DIR .. "src/mame/drivers/segas24.c",
MAME_DIR .. "src/mame/video/segas24.c",
MAME_DIR .. "src/mame/drivers/segam1.c",
MAME_DIR .. "src/mame/drivers/segas32.c",
MAME_DIR .. "src/mame/machine/segas32.c",
MAME_DIR .. "src/mame/video/segas32.c",

View File

@ -10,7 +10,7 @@
*/
#include "m58846.h"
#include "debugger.h"
//#include "debugger.h"
@ -50,6 +50,7 @@ offs_t m58846_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *o
void m58846_device::device_start()
{
melps4_cpu_device::device_start();
m_timer = timer_alloc(0);
}
@ -61,6 +62,45 @@ void m58846_device::device_start()
void m58846_device::device_reset()
{
melps4_cpu_device::device_reset();
// timer 1 runs continuously
reset_timer();
}
//-------------------------------------------------
// timers
//-------------------------------------------------
void m58846_device::reset_timer()
{
// reset 7-bit prescaler
attotime base = attotime::from_ticks(6 * 128, unscaled_clock());
m_timer->adjust(base);
}
void m58846_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if (id != 0)
return;
// timer 1 overflow
m_irqflag[1] = true;
m_possible_irq = true;
reset_timer();
}
void m58846_device::write_v(UINT8 data)
{
// d0: enable timer 1 irq
// d1: enable timer 2 irq? (TODO)
// d2: ?
// d3: timer 2 enable?
m_tmr_irq_enabled[0] = (data & 1) ? true : false;
m_possible_irq = true;
m_v = data;
}
@ -72,7 +112,7 @@ void m58846_device::device_reset()
void m58846_device::execute_one()
{
// handle one opcode
switch (m_op & 0xf0)
switch (m_op & 0x1f0)
{
case 0x30: op_sey(); break;
case 0x70: op_sp(); break;
@ -82,7 +122,7 @@ void m58846_device::execute_one()
case 0xc0: case 0xd0: case 0xe0: case 0xf0: op_lxy(); break;
default:
switch (m_op & 0xfc)
switch (m_op & 0x1fc)
{
case 0x20: op_szb(); break;
case 0x4c: op_sb(); break;
@ -107,11 +147,11 @@ void m58846_device::execute_one()
case 0x03: op_dey(); break;
case 0x04: op_di(); break;
case 0x05: op_ei(); break;
case 0x09: op_tabe(); break; // undocumented
case 0x0a: op_am(); break;
case 0x0b: op_ose(); break;
case 0x0c: op_tya(); break;
case 0x0f: op_cma(); break;
// 0x18 RAR undocumented?
case 0x10: op_cls(); break;
case 0x11: op_clds(); break;
@ -120,6 +160,8 @@ void m58846_device::execute_one()
case 0x15: op_sd(); break;
case 0x16: op_tepa(); break;
case 0x17: op_ospa(); break;
case 0x18: op_rl(); break; // undocumented
case 0x19: op_rr(); break; // undocumented
case 0x1a: op_teab(); break;
case 0x1b: op_osab(); break;
case 0x1c: op_tba(); break;
@ -154,10 +196,10 @@ void m58846_device::execute_one()
break;
}
break; // 0xff
break; // 0x1ff
}
break; // 0xfc
break; // 0x1fc
} // big switch
}

View File

@ -29,6 +29,13 @@ protected:
// device_disasm_interface overrides
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
// timers
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
virtual void write_v(UINT8 data);
emu_timer *m_timer;
void reset_timer();
};

View File

@ -46,12 +46,15 @@ void melps4_cpu_device::state_string_export(const device_state_entry &entry, std
{
// obviously not from a single flags register, letters are made up
case STATE_GENFLAGS:
strprintf(str, "%c%c%c%c%c",
strprintf(str, "%c%c%c%c%c %c%c%c",
m_intp ? 'P':'p',
m_inte ? 'I':'i',
m_sm ? 'S':'s',
m_cps ? 'D':'d',
m_cy ? 'C':'c'
m_cy ? 'C':'c',
m_irqflag[0] ? 'X':'.', // exf
m_irqflag[1] ? '1':'.', // 1f
m_irqflag[2] ? '2':'.' // 2f
);
break;
@ -111,7 +114,12 @@ void melps4_cpu_device::device_start()
m_skip = false;
m_inte = 0;
m_intp = 1;
m_irqflag[0] = m_irqflag[1] = m_irqflag[2] = false;
m_tmr_irq_enabled[0] = m_tmr_irq_enabled[1] = false;
m_int_state = 0;
m_t_state = 0;
m_prohibit_irq = false;
m_possible_irq = false;
m_a = 0;
m_b = 0;
@ -147,7 +155,12 @@ void melps4_cpu_device::device_start()
save_item(NAME(m_skip));
save_item(NAME(m_inte));
save_item(NAME(m_intp));
save_item(NAME(m_irqflag));
save_item(NAME(m_tmr_irq_enabled));
save_item(NAME(m_int_state));
save_item(NAME(m_t_state));
save_item(NAME(m_prohibit_irq));
save_item(NAME(m_possible_irq));
save_item(NAME(m_a));
save_item(NAME(m_b));
@ -165,7 +178,7 @@ void melps4_cpu_device::device_start()
// register state for debugger
state_add(STATE_GENPC, "curpc", m_pc).formatstr("%04X").noshow();
state_add(STATE_GENFLAGS, "GENFLAGS", m_cy).formatstr("%5s").noshow();
state_add(STATE_GENFLAGS, "GENFLAGS", m_cy).formatstr("%9s").noshow();
state_add(MELPS4_PC, "PC", m_pc).formatstr("%04X");
state_add(MELPS4_A, "A", m_a).formatstr("%2d"); // show in decimal
@ -194,18 +207,20 @@ void melps4_cpu_device::device_reset()
{
m_sm = m_sms = false;
m_ba_flag = false;
m_prohibit_irq = false;
m_skip = false;
m_op = m_prev_op = 0;
m_pc = m_prev_pc = 0;
m_inte = 0;
m_intp = 1;
op_lcps(); // CPS=0
m_v = 0;
m_w = 0;
// clear interrupts
m_inte = 0;
m_intp = 1;
write_v(0);
write_w(0);
m_irqflag[0] = m_irqflag[1] = m_irqflag[2] = false;
m_prohibit_irq = false;
m_possible_irq = false;
// clear ports
write_d_pin(MELPS4_PORTD_CLR, 0);
write_gen_port(MELPS4_PORTS, 0);
@ -291,6 +306,74 @@ void melps4_cpu_device::write_d_pin(int bit, int state)
//-------------------------------------------------
// interrupts
//-------------------------------------------------
void melps4_cpu_device::execute_set_input(int line, int state)
{
state = (state) ? 1 : 0;
switch (line)
{
// external interrupt
case MELPS4_INPUT_LINE_INT:
// irq on rising/falling edge
if (state != m_int_state && state == m_intp)
{
m_irqflag[0] = true;
m_possible_irq = true;
}
m_int_state = state;
break;
// timer input pin
case MELPS4_INPUT_LINE_T:
write_t_in(state);
break;
default:
break;
}
}
void melps4_cpu_device::do_interrupt(int which)
{
m_inte = 0;
m_irqflag[which] = false;
m_icount--;
push_pc();
m_sms = m_sm;
m_sm = false;
m_op = 0; // fake nop
m_pc = m_int_page << 7 | (which * 2);
standard_irq_callback(which);
}
void melps4_cpu_device::check_interrupt()
{
if (!m_inte)
return;
int which = 0;
// assume that lower irq vectors have higher priority
if (m_irqflag[0])
which = 0;
else if (m_irqflag[1] && m_tmr_irq_enabled[0])
which = 1;
else if (m_irqflag[2] && m_tmr_irq_enabled[1])
which = 2;
else
return;
do_interrupt(which);
}
//-------------------------------------------------
// execute
//-------------------------------------------------
@ -314,8 +397,14 @@ void melps4_cpu_device::execute_run()
m_prev_op = m_op;
m_prev_pc = m_pc;
// irq is not accepted during skip or LXY, LA, EI, DI, RT/RTS/RTI or any branch
//..
// Interrupts are not accepted during skips or LXY, LA, EI, DI, RT/RTS/RTI or any branch.
// Documentation is conflicting here: older docs say that it is allowed during skips,
// newer docs specifically say when interrupts are prohibited.
if (m_possible_irq && !m_prohibit_irq && !m_skip)
{
m_possible_irq = false;
check_interrupt();
}
m_prohibit_irq = false;
// fetch next opcode

View File

@ -60,6 +60,12 @@ enum
MELPS4_PORTU
};
enum
{
MELPS4_INPUT_LINE_INT = 0,
MELPS4_INPUT_LINE_T
};
// pinout reference
@ -142,8 +148,9 @@ protected:
virtual UINT64 execute_clocks_to_cycles(UINT64 clocks) const { return (clocks + 6 - 1) / 6; } // 6 t-states per machine cycle
virtual UINT64 execute_cycles_to_clocks(UINT64 cycles) const { return (cycles * 6); } // "
virtual UINT32 execute_min_cycles() const { return 1; }
virtual UINT32 execute_max_cycles() const { return 1; }
virtual UINT32 execute_max_cycles() const { return 1+1; } // max opcode cycles + interrupt duration
virtual UINT32 execute_input_lines() const { return 3; } // up to 3 (some internal)
virtual void execute_set_input(int line, int state);
virtual void execute_run();
virtual void execute_one();
@ -189,14 +196,19 @@ protected:
UINT8 m_port_s; // "
UINT8 m_port_f; // "
bool m_sm, m_sms; // subroutine mode flag + stack
bool m_sm, m_sms; // subroutine mode flag + irq stack
bool m_ba_flag; // temp flag indicates BA opcode was executed
UINT8 m_sp_param; // temp register holding SP opcode parameter
UINT8 m_cps; // DP,CY or DP',CY' selected
bool m_skip; // skip next opcode
UINT8 m_inte; // interrupt enable flag
UINT8 m_intp; // external interrupt polarity ('40 to '44)
int m_intp; // external interrupt polarity ('40 to '44)
bool m_irqflag[3]; // irq flags: exf, 1f, 2f (external, timer 1, timer 2)
bool m_tmr_irq_enabled[2];
int m_int_state; // INT pin state
int m_t_state; // T input pin state
bool m_prohibit_irq; // interrupt is prohibited during certain opcodes
bool m_possible_irq; // indicate that irq needs to be rechecked
// work registers (unless specified, each is 4-bit)
UINT8 m_a; // accumulator
@ -225,6 +237,12 @@ protected:
devcb_write8 m_write_g;
devcb_write8 m_write_u;
devcb_write_line m_write_t;
virtual void write_t_in(int state) { m_t_state = state; }
virtual void write_v(UINT8 data) { m_v = data; }
virtual void write_w(UINT8 data) { m_w = data; }
virtual void do_interrupt(int which);
virtual void check_interrupt();
UINT8 read_gen_port(int port);
void write_gen_port(int port, UINT8 data);
@ -243,6 +261,7 @@ protected:
void op_tay();
void op_tya();
void op_teab();
void op_tabe();
void op_tepa();
void op_txa();
void op_tax();
@ -268,6 +287,8 @@ protected:
void op_rc();
void op_szc();
void op_cma();
void op_rl();
void op_rr();
void op_sb();
void op_rb();

View File

@ -18,10 +18,10 @@
enum e_mnemonics
{
em_ILL,
em_TAB, em_TBA, em_TAY, em_TYA, em_TEAB, em_TEPA, em_TXA, em_TAX,
em_TAB, em_TBA, em_TAY, em_TYA, em_TEAB, em_TABE, em_TEPA, em_TXA, em_TAX,
em_LXY, em_LZ, em_INY, em_DEY, em_LCPS, em_SADR,
em_TAM, em_XAM, em_XAMD, em_XAMI,
em_LA, em_AM, em_AMC, em_AMCS, em_A, em_SC, em_RC, em_SZC, em_CMA,
em_LA, em_AM, em_AMC, em_AMCS, em_A, em_SC, em_RC, em_SZC, em_CMA, em_RL, em_RR,
em_SB, em_RB, em_SZB, em_SEAM, em_SEY,
em_TLA, em_THA, em_TAJ, em_XAL, em_XAH, em_LC7, em_DEC, em_SHL, em_RHL, em_CPA, em_CPAS, em_CPAE, em_SZJ,
em_T1AB, em_TRAB, em_T2AB, em_TAB1, em_TABR, em_TAB2, em_TVA, em_TWA, em_SNZ1, em_SNZ2,
@ -33,10 +33,10 @@ enum e_mnemonics
static const char *const em_name[] =
{
"?",
"TAB", "TBA", "TAY", "TYA", "TEAB", "TEPA", "TXA", "TAX",
"TAB", "TBA", "TAY", "TYA", "TEAB", "TABE", "TEPA", "TXA", "TAX",
"LXY", "LZ", "INY", "DEY", "LCPS", "SADR",
"TAM", "XAM", "XAMD", "XAMI",
"LA", "AM", "AMC", "AMCS", "A", "SC", "RC", "SZC", "CMA",
"LA", "AM", "AMC", "AMCS", "A", "SC", "RC", "SZC", "CMA", "RL", "RR",
"SB", "RB", "SZB", "SEAM", "SEY",
"TLA", "THA", "TAJ", "XAL", "XAH", "LC7", "DEC", "SHL", "RHL", "CPA", "CPAS", "CPAE", "SZJ",
"T1AB", "TRAB", "T2AB", "TAB1", "TABR", "TAB2", "TVA", "TWA", "SNZ1", "SNZ2",
@ -49,10 +49,10 @@ static const char *const em_name[] =
static const UINT8 em_bits[] =
{
0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 1, 0, 0, 1, 2,
2, 2, 2, 2,
4, 0, 0, 0, 4, 0, 0, 0, 0,
4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
2, 2, 2, 0, 4,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -67,10 +67,10 @@ static const UINT8 em_bits[] =
static const UINT32 em_flags[] =
{
0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@ -86,8 +86,8 @@ static const UINT32 em_flags[] =
static const UINT8 m58846_opmap[0xc0] =
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
em_NOP, em_BA, em_INY, em_DEY, em_DI, em_EI, em_RU, em_SU, 0, 0, em_AM, em_OSE, em_TYA, 0, 0, em_CMA, // 0x
em_CLS, em_CLDS, 0, em_CLD, em_RD, em_SD, em_TEPA, em_OSPA, 0, 0, em_TEAB, em_OSAB, em_TBA, em_TAY, em_TAB, 0, // 1x
em_NOP, em_BA, em_INY, em_DEY, em_DI, em_EI, em_RU, em_SU, 0, em_TABE, em_AM, em_OSE, em_TYA, 0, 0, em_CMA, // 0x
em_CLS, em_CLDS, 0, em_CLD, em_RD, em_SD, em_TEPA, em_OSPA, em_RL, em_RR, em_TEAB, em_OSAB, em_TBA, em_TAY, em_TAB, 0, // 1x
em_SZB, em_SZB, em_SZB, em_SZB, 0, 0, em_SEAM, 0, 0, 0, 0, em_SZD, 0, 0, 0, em_SZC, // 2x
em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, // 3x
em_LCPS, em_LCPS, 0, em_AMC, em_RT, em_RTS, em_RTI, 0, em_RC, em_SC, em_LZ, em_LZ, em_SB, em_SB, em_SB, em_SB, // 4x

View File

@ -64,6 +64,13 @@ void melps4_cpu_device::op_teab()
m_e = m_b << 4 | m_a;
}
void melps4_cpu_device::op_tabe()
{
// TABE(undocumented): transfer E to A and B
m_b = m_e >> 4;
m_a = m_e & 0xf;
}
void melps4_cpu_device::op_tepa()
{
// TEPA: decode A by PLA and transfer to E
@ -247,6 +254,22 @@ void melps4_cpu_device::op_cma()
m_a ^= 0xf;
}
void melps4_cpu_device::op_rl()
{
// RL(undocumented): rotate A left through carry
UINT8 c = m_a >> 3 & 1;
m_a = (m_a << 1 | m_cy) & 0xf;
m_cy = c;
}
void melps4_cpu_device::op_rr()
{
// RR(undocumented): rotate A right through carry
UINT8 c = m_a & 1;
m_a = m_a >> 1 | m_cy << 3;
m_cy = c;
}
// Bit operations
@ -395,7 +418,7 @@ void melps4_cpu_device::op_trab()
void melps4_cpu_device::op_t2ab()
{
// T2AB: transfer A and B to timer 2 and timer 2 reload
op_illegal();
//op_illegal();
}
void melps4_cpu_device::op_tab1()
@ -419,25 +442,27 @@ void melps4_cpu_device::op_tab2()
void melps4_cpu_device::op_tva()
{
// TVA: transfer A to timer control V
m_v = m_a;
write_v(m_a);
}
void melps4_cpu_device::op_twa()
{
// TWA: transfer A to timer control W
m_w = m_a;
write_w(m_a);
}
void melps4_cpu_device::op_snz1()
{
// SNZ1: skip next on flag 1F
op_illegal();
m_skip = m_irqflag[1];
m_irqflag[1] = false;
}
void melps4_cpu_device::op_snz2()
{
// SNZ2: skip next on flag 2F
op_illegal();
m_skip = m_irqflag[2];
m_irqflag[2] = false;
}
@ -631,6 +656,7 @@ void melps4_cpu_device::op_ei()
{
// EI: enable interrupt flag
m_prohibit_irq = true;
m_possible_irq = true;
m_inte = 1;
}

View File

@ -374,6 +374,12 @@ void info_xml_creator::output_one_device(device_t &device, const char *devtag)
// output_devices - print the XML info for devices
// with roms and for devices that can be mounted
// in slots
// The current solution works to some extent, but
// it is limited by the fact that devices are only
// acknowledged when attached to a driver (so that
// for instance sub-sub-devices could never appear
// in the xml input if they are not also attached
// directly to a driver as device or sub-device)
//-------------------------------------------------
typedef tagmap_t<FPTR> slot_map;
@ -415,6 +421,17 @@ void info_xml_creator::output_devices()
if (shortnames.add(dev->shortname(), 0, FALSE) != TMERR_DUPLICATE)
output_one_device(*dev, temptag.c_str());
// also, check for subdevices with ROMs (a few devices are missed otherwise, e.g. MPU401)
device_iterator deviter2(*dev);
for (device_t *device = deviter2.first(); device != NULL; device = deviter2.next())
{
if (device->owner() == dev && device->shortname()!= NULL && strlen(device->shortname())!=0)
{
if (shortnames.add(device->shortname(), 0, FALSE) != TMERR_DUPLICATE)
output_one_device(*device, device->tag());
}
}
const_cast<machine_config &>(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), temptag.c_str());
}
}

View File

@ -214,7 +214,7 @@ struct tms5100_coeffs
/* K8 */\
{ -205, -112, -10, 92, 187, 269, 336, 387 },\
/* K9 */\
{ -249, -183, -110, -32, 48, 126, 198, 261 }, /* on patents 4,403,965 and 4,946,391 the 4th entry is -19 which is wrong! should be -32*/\
{ -249, -183, -110, -32, 48, 126, 198, 261 }, /* on patents 4,403,965 and 4,946,391 the 4th entry is 0x3ED (-19) which is a typo of the correct value of 0x3E0 (-32)*/\
/* K10 */\
{ -190, -133, -73, -10, 53, 115, 173, 227 },
@ -390,11 +390,18 @@ static const struct tms5100_coeffs T0280D_0281D_coeff =
Used in the Speak & Math, Speak & Read, and Language Translator
Decapped by Digshadow in 2014 http://siliconpr0n.org/map/ti/tmc0280fnl/
Digitally dumped via PROMOUT by PlgDavid in 2014
The coefficients are exactly the same as the TMS5200
The coefficients also come from US Patents 4,403,965 and 4,946,391 (with one error in the patent);
The Mitsubishi M58817 also seems to work best with these coefficients, so its possible the engineers of that chip copied them from the TI patents, see next entry
***TODO: there are 2 versions of this chip, and the interpolation behavior between the two differs slightly:
* TMC0280NLP // CD2801 with datecodes around 1980 has the same interpolation inhibit behavior as 5100/TMC0281 on unvoiced->silent transition
The coefficients are exactly the same as the TMS5200.
The coefficients also come from US Patents 4,403,965 and 4,946,391 (with
one typo in the patent).
The chirp table is very slightly different from the 4,209,836 patent one,
but matches the table in the 4,403,965 and 4,946,391 patents.
The Mitsubishi M58817 also seems to work best with these coefficients, so
it is possible the engineers of that chip copied them from the TI patents.
***TODO: there are 2 versions of this chip, and the interpolation
behavior between the two differs slightly:
* TMC0280NLP // CD2801 with datecodes around 1980 has the same
interpolation inhibit behavior as 5100/TMC0281 on unvoiced->silent
transition.
* CD2801A-NL with datecodes around 1982 have the 'alternate behavior'
*/
static const struct tms5100_coeffs T0280F_2801A_coeff =
@ -416,7 +423,10 @@ static const struct tms5100_coeffs T0280F_2801A_coeff =
};
/* Mitsubishi M58817
The Mitsubishi M58817 seems to have (partly?) copied the coefficients from the TMC0280/CD2801 above, but has some slight differences to it within the chip: the main accumulator seems to have 1 extra bit and the digital values are tapped 1 bit higher than on the TI chips. This is emulated within tms5110.c
The Mitsubishi M58817 seems to have (partly?) copied the coefficients from the
TMC0280/CD2801 above, but has some slight differences to it within the chip:
the main accumulator seems to have 1 extra bit and the digital values are
tapped 1 bit higher than on the TI chips. This is emulated within tms5110.c
*/
static const struct tms5100_coeffs M58817_coeff =
{
@ -560,16 +570,17 @@ Note that the K coefficients are VERY different from the coefficients given
in the US 4,335,277 patent, which may have been for some sort of prototype or
otherwise intentionally scrambled. The energy and pitch tables, however, are
identical to that patent.
Also note, that the K coefficients are ALMOST identical to the coefficients from the CD2802.
The interpolation coefficients still come from the patents pending verification
of the interpolation counter circuit from the chip decap image.
Also note, that the K coefficients are identical to the coefficients from the
CD2801 (which itself is almost identical to the CD2802).
NOTE FROM DECAP: immediately to the left of each of the K1,2,3,4,5,and 6
coefficients in the LPC rom are extra columns containing the constants
-510, -502, 313, 318, or in hex 0x202, 0x20A, 0x139, 0x13E.
Those EXACT constants DO appear (rather nonsensically) on the lpc table in US
patent 4,335,277. They are likely related to the multiplicative interpolator
described in us patent 4,419,540; whether the 5200/2501E and the 5220 or 5220C
actually implement this interpolator or not is unclear.
actually implement this interpolator or not is unclear. This interpolator
seems intended for chips with variable frame rate, so it may only exist
on the TMS/TSP5220C and CD2501ECD.
*/
static const struct tms5100_coeffs T0285_2501E_coeff =

View File

@ -1465,8 +1465,9 @@ invadrmr // (c) 1978 Model Racing
claybust // (c) 1978 Model Racing
gunchamp // (c) 1980 Model Racing
gunchamps // (c) 1980 Model Racing (sshot.c)
spaceatt // (c) 1978 Video Games GMBH
spaceatt2k // (c) 1978 Video Games GMBH
spaceatt // (c) 1978 Video Games GmbH
spaceattbp // (c) 1978 Video Games GmbH
spaceatt2k // (c) 1978 Video Games GmbH
galmonst // (c) Laguna S.A.
spaceat2 // (c) 1980 Zenitone-Microsec Ltd
spacecom // bootleg
@ -1900,6 +1901,7 @@ geostorm // (c) 1994 Irem (Japan)
airass // (c) 1993 Irem (World)
firebarr // (c) 1993 Irem (Japan)
dsoccr94 // (c) 1994 Irem (Data East Corporation license)
dsoccr94k //
kftgoal // (c) 1994 Jaleco
wpksoc // (c) 1995 Jaleco
@ -2655,7 +2657,7 @@ outzoneb // TP-O18 (c) 1990 Toaplan
outzonec // TP-O18 (c) 1990 Toaplan
vimana // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
vimanaj // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
vimanan // TP-O19 (c) 1991 Toaplan (+ Nova Apparate GMBH & Co license)
vimanan // TP-O19 (c) 1991 Toaplan (+ Nova Apparate GmbH & Co license)
snowbros // MIN16-02 (c) 1990 Toaplan + Romstar license
snowbrosa // MIN16-02 (c) 1990 Toaplan + Romstar license
snowbrosb // MIN16-02 (c) 1990 Toaplan + Romstar license
@ -4607,8 +4609,9 @@ cottonja // (c) 1990 (FD1094)
ddux // (c) 1989 (FD1094)
dduxj // (c) 1989 (FD1094)
ddux1 // (c) 1989 (8751)
dunkshot // (c) 1986 (FD1094)
dunkshoto // (c) 1986 (FD1094)
dunkshot // (c) 1986 (FD1089A)
dunkshota // (c) 1986 (FD1089A)
dunkshoto // (c) 1986 (FD1089A)
eswat // (c) 1989 (FD1094)
eswatu // (c) 1989 (FD1094)
eswatj // (c) 1989 (FD1094)
@ -4841,6 +4844,9 @@ quizmeku // 1993.05 Quiz Mekurumeku Story (Japan)
mahmajn2 // 1994.05 Tokorosan no Mahmahjong 2 (Japan)
qgh // 1994.09 Quiz Ghost Hunter
// M! board
bingpty // ?
// Sega System 32 games
radm // 1991.?? Rad Mobile (World)
radmu // 1991.03 Rad Mobile (US)
@ -7503,6 +7509,7 @@ mechattu // A8002 'MA' (c) 1989
mechattu1 // A8002 'MA' (c) 1989
bbusters // A9003 'BB' (c) 1989
bbustersu // A9003 'BB' (c) 1989
bbustersua // A9003 'BB' (c) 1989
// Electrocoin on early SNK hardware
dmndrby // G4001 'DD' (c) 1986
@ -9479,9 +9486,9 @@ puzzlet // (c) 2000 Yunizu Corporation (Japan)
spcforce // (c) 1980 Venture Line
spcforc2 // bootleg
meteor // (c) 1981 Venture Line
looping // (c) 1982 Video Games GMBH
loopingv // (c) 1982 Video Games GMBH (Venture Line license)
loopingva // (c) 1982 Video Games GMBH (Venture Line license)
looping // (c) 1982 Video Games GmbH
loopingv // (c) 1982 Video Games GmbH (Venture Line license)
loopingva // (c) 1982 Video Games GmbH (Venture Line license)
skybump // (c) 1982 Venture Line
suprridr // (c) 1983 Venture Line + Taito license
@ -12855,7 +12862,7 @@ vpoker // (c) 198?
specfrce // (c) 2002 ICE/Play Mechanix
jnero // (c) 2004 ICE/Play Mechanix
// Amatic Trading GMBH
// Amatic Trading GmbH
suprstar // (c) 1996 Amatic
am_mg24 // (c) 2000 Amatic
am_mg3 // (c) 2000 Amatic

View File

@ -3307,7 +3307,6 @@ ROM_START( searthie )
ROM_LOAD( "searthie.e", 0x1800, 0x0800, CRC(baf949b0) SHA1(bfda97a3ef59fcdf87814afc6918507190c3e315) )
ROM_END
ROM_START( invadrmr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "11.1t", 0x0000, 0x0400, CRC(389d44b6) SHA1(5d2581b8bc0da918ce57cf319e06b5b31989c681) )
@ -3318,7 +3317,6 @@ ROM_START( invadrmr )
ROM_LOAD( "sv06.1g", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
ROM_END
ROM_START( claybust )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "0.a1", 0x0000, 0x0400, CRC(90810582) SHA1(a5c3655bae6f92a3cd0eae3a5a3c25e414d4fdf0) )
@ -3329,7 +3327,6 @@ ROM_START( claybust )
ROM_LOAD( "5.a8", 0x1400, 0x0400, CRC(92cd4da8) SHA1(217e00012a52c479bf0b0cf37ce556387755740d) )
ROM_END
ROM_START( gunchamp )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "251.a1", 0x0000, 0x0400, CRC(f27a8c1e) SHA1(510debd1ac2c0986f99c217e3078208a39d7837c) )
@ -3342,7 +3339,6 @@ ROM_START( gunchamp )
ROM_LOAD( "258.a10", 0x1c00, 0x0400, CRC(471d4052) SHA1(c8ccda2eba44c2ab49f5fc2874fe70c2bdae35d3) )
ROM_END
ROM_START( spaceatt )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "h", 0x0000, 0x0400, CRC(d0c32d72) SHA1(b3bd950b1ba940fbeb5d95e55113ed8f4c311434) ) // == SV01
@ -3353,6 +3349,23 @@ ROM_START( spaceatt )
ROM_LOAD( "a", 0x1c00, 0x0400, CRC(211ac4a3) SHA1(e08e90a4e77cfa30400626a484c9f37c87ea13f9) )
ROM_END
/* SPACE ATTACK set is from Video Game GmbH - 1010 A / Top board shows Video-Games - 6302 LICH - 1034
Roms are set up as 1k bproms (82S137) and data is 1 rom top 4 bits, another bottom 4. This data once assembled matches original spaceatt set */
ROM_START( spaceattbp )
ROM_REGION( 0x10000, "maincpu", 0 )
ROMX_LOAD( "06e.bin", 0x0000, 0x0400, CRC(68301d05) SHA1(b0c33a982b42378da828281e74356d58fbea1d86), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
ROMX_LOAD( "12l.bin", 0x0000, 0x0400, CRC(c5a5228f) SHA1(7861b5567d44e972d728551d47aab9b92d71ffc7), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
ROMX_LOAD( "05de.bin", 0x0400, 0x0400, CRC(42032c14) SHA1(753948e7f52b88655c894b48d419b76de07c14f2), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
ROMX_LOAD( "11hl.bin", 0x0400, 0x0400, CRC(d5d3811a) SHA1(7d2d983fa88b0349a90a6331ca3e18583125d21e), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
ROMX_LOAD( "04d.bin", 0x0800, 0x0400, CRC(5f5e540c) SHA1(9092794a878494dbe34c2f05a212ff7b9d00fc55), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
ROMX_LOAD( "10h.bin", 0x0800, 0x0400, CRC(9d5ef6f1) SHA1(ef584678373375a7f13307d7c4597639a5f6010e), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
ROMX_LOAD( "03b.bin", 0x1400, 0x0400, CRC(89e13008) SHA1(1ad82ae0607af27925b42758f8c86a0e89079620), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
ROMX_LOAD( "09g.bin", 0x1400, 0x0400, CRC(c16f5503) SHA1(cf36beac472c5c405342193b7ef434d32b37a4a8), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
ROMX_LOAD( "02ab.bin", 0x1800, 0x0400, CRC(ffa166c2) SHA1(10496fcbb272130cc200dfb1886808559be8d6ea), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
ROMX_LOAD( "08f.bin", 0x1800, 0x0400, CRC(b5fa1a2b) SHA1(7eab1cb9a9f95520a37ee4fb2b246ef072dedcbd), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
ROMX_LOAD( "01a.bin", 0x1c00, 0x0400, CRC(44f8e99c) SHA1(9adecdadb16edaebde02892e30f9f87fb98f4ae1), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
ROMX_LOAD( "07ef.bin", 0x1c00, 0x0400, CRC(9560880d) SHA1(866d6c3714b939814ce48707be53a69ef8355b34), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
ROM_END
/* SPACE ATTACK set is from Video Games GmbH - Board Typ 1010 C / Top board shows Video-Games - 6302 LICH - 1034B
Contains same data as spaceatt but with added 00 fill to make larger roms (b+a=E1, 00fill+c=F1, f+00fill=G1, h+sv02=H1) */
@ -3382,12 +3395,6 @@ ROM_START( galmonst )
ROM_LOAD( "a.5v", 0x1c00, 0x0400, CRC(05a6806b) SHA1(ea884110d0ea6463801cbc2f87ce9c4921b49e33) )
ROM_END
ROM_START( spacecom )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "1f.ic67", 0x0000, 0x0400, BAD_DUMP CRC(703f2cbe) SHA1(b183f9fbedd8658399555c0ba21ecab6370e86cb) )
@ -4707,6 +4714,7 @@ GAMEL(1979, cosmicm2, invaders, cosmicmo, cosmicmo, driver_device, 0, ROT270
GAMEL(1980?,sinvzen, invaders, invaders, sinvzen, driver_device, 0, ROT270, "Taito / Zenitone-Microsec Ltd.", "Super Invaders (Zenitone-Microsec)", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
GAMEL(1980, ultrainv, invaders, invaders, sicv, driver_device, 0, ROT270, "Taito / Konami", "Ultra Invaders", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
GAMEL(1978, spaceatt, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Video Games GmbH)", "Space Attack (bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders )
GAMEL(1978, spaceattbp, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Video Games GmbH)", "Space Attack (bproms)(bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders )
GAMEL(1978, spaceatt2k, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Video Games GmbH)", "Space Attack (2k roms)(bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders )
GAMEL(1978, galmonst, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Laguna S.A.)", "Galaxy Monsters (Laguna S.A. Spanish bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders )
GAMEL(1980, spaceat2, invaders, invaders, spaceat2, driver_device, 0, ROT270, "bootleg (Video Games UK)", "Space Attack II (bootleg of Super Invaders)", GAME_SUPPORTS_SAVE, layout_invaders ) // bootleg of Zenitone-Microsec Super Invaders

View File

@ -788,10 +788,58 @@ ROM_END
ROM_START( bbustersu )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD16_BYTE( "bbv2-3.k10", 0x000000, 0x20000, CRC(6930088b) SHA1(265f0b584d81b6fdcda5c3a2e0bd15d56443bb35) )
ROM_LOAD16_BYTE( "bbv2-5.k12", 0x000001, 0x20000, CRC(cfdb2c6c) SHA1(54a837dc84b74d12e931f607f3dc9ee06a7e4d31) )
ROM_LOAD16_BYTE( "bb-2.k8", 0x040000, 0x20000, CRC(20141805) SHA1(0958579681bda81bcf48d020a14bc147c1e575f1) )
ROM_LOAD16_BYTE( "bb-4.k11", 0x040001, 0x20000, CRC(d482e0e9) SHA1(e56ca92965e8954b613ba4b0e3975e3a12840c30) )
ROM_LOAD16_BYTE( "bb-ver3-u3.k10", 0x000000, 0x20000, CRC(c80ec3bc) SHA1(81cccc920c6dc58ccd20fb38bfede717f534986f) )
ROM_LOAD16_BYTE( "bb-ver3-u5.k12", 0x000001, 0x20000, CRC(5ded86d1) SHA1(de2ce91b85a1d74e60a7093211c1a7d3c27c1d72) )
ROM_LOAD16_BYTE( "bb-2.k8", 0x040000, 0x20000, CRC(20141805) SHA1(0958579681bda81bcf48d020a14bc147c1e575f1) )
ROM_LOAD16_BYTE( "bb-4.k11", 0x040001, 0x20000, CRC(d482e0e9) SHA1(e56ca92965e8954b613ba4b0e3975e3a12840c30) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "bb-1.e6", 0x000000, 0x10000, CRC(4360f2ee) SHA1(4c6b212f59389bdf4388893d2030493b110ac087) )
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD( "bb-10.l9", 0x000000, 0x20000, CRC(490c0d9b) SHA1(567c25a6d96407259c64061d674305e4117d9fa4) )
ROM_REGION( 0x200000, "gfx2", 0 )
ROM_LOAD( "bb-f11.m16", 0x000000, 0x80000, CRC(39fdf9c0) SHA1(80392947e3a1831c3ee80139f6f3bdc3bafa4f0d) )
ROM_LOAD( "bb-f12.m13", 0x080000, 0x80000, CRC(69ee046b) SHA1(5c0435f1ce76b584fa8d154d7617d73c7ab5f62f) )
ROM_LOAD( "bb-f13.m12", 0x100000, 0x80000, CRC(f5ef840e) SHA1(dd0f630c52076e0d330f47931e68a3ae9a401078) )
ROM_LOAD( "bb-f14.m11", 0x180000, 0x80000, CRC(1a7df3bb) SHA1(1f27a528e6f89fe56a7342c4f1ff733da0a09327) )
ROM_REGION( 0x200000, "gfx3", 0 )
ROM_LOAD( "bb-f21.l10", 0x000000, 0x80000, CRC(530f595b) SHA1(820898693b878c4423de9c244f943d39ea69515e) )
ROM_LOAD( "bb-f22.l12", 0x080000, 0x80000, CRC(889c562e) SHA1(d19172d6515ab9793c98de75d6e41687e61a408d) )
ROM_LOAD( "bb-f23.l13", 0x100000, 0x80000, CRC(c89fe0da) SHA1(92be860a7191e7473c42aa2da981eda873219d3d) )
ROM_LOAD( "bb-f24.l15", 0x180000, 0x80000, CRC(e0d81359) SHA1(2213c17651b6c023a456447f352b0739439f913a) )
ROM_REGION( 0x80000, "gfx4", 0 )
ROM_LOAD( "bb-back1.m4", 0x000000, 0x80000, CRC(b5445313) SHA1(3c99b557b2af30ff0fbc8a7dc6c40448c4f327db) )
ROM_REGION( 0x80000, "gfx5", 0 )
ROM_LOAD( "bb-back2.m6", 0x000000, 0x80000, CRC(8be996f6) SHA1(1e2c56f4c24793f806d7b366b92edc03145ae94c) )
ROM_REGION( 0x10000, "user1", 0 ) /* Zoom table */
/* same rom exists in 4 different locations on the board */
ROM_LOAD( "bb-6.e7", 0x000000, 0x10000, CRC(61f3de03) SHA1(736f9634fe054ea68a2aa90a743bd0dc320f23c9) )
ROM_LOAD( "bb-7.h7", 0x000000, 0x10000, CRC(61f3de03) SHA1(736f9634fe054ea68a2aa90a743bd0dc320f23c9) )
ROM_LOAD( "bb-8.a14", 0x000000, 0x10000, CRC(61f3de03) SHA1(736f9634fe054ea68a2aa90a743bd0dc320f23c9) )
ROM_LOAD( "bb-9.c14", 0x000000, 0x10000, CRC(61f3de03) SHA1(736f9634fe054ea68a2aa90a743bd0dc320f23c9) )
ROM_REGION( 0x80000, "ymsnd", 0 )
ROM_LOAD( "bb-pcma.l5", 0x000000, 0x80000, CRC(44cd5bfe) SHA1(26a612191a0aa614c090203485aba17c99c763ee) )
ROM_REGION( 0x80000, "ymsnd.deltat", 0 )
ROM_LOAD( "bb-pcma.l5", 0x000000, 0x80000, CRC(44cd5bfe) SHA1(26a612191a0aa614c090203485aba17c99c763ee) )
ROM_REGION( 0x100, "eeprom", 0 )
ROM_LOAD( "bbusters-eeprom.bin", 0x00, 0x100, CRC(a52ebd66) SHA1(de04db6f1510700c61bf152799452a80220ae87c) )
ROM_END
ROM_START( bbustersua )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD16_BYTE( "bb-ver2-u3.k10", 0x000000, 0x20000, CRC(6930088b) SHA1(265f0b584d81b6fdcda5c3a2e0bd15d56443bb35) )
ROM_LOAD16_BYTE( "bb-ver2-u5.k12", 0x000001, 0x20000, CRC(cfdb2c6c) SHA1(54a837dc84b74d12e931f607f3dc9ee06a7e4d31) )
ROM_LOAD16_BYTE( "bb-2.k8", 0x040000, 0x20000, CRC(20141805) SHA1(0958579681bda81bcf48d020a14bc147c1e575f1) )
ROM_LOAD16_BYTE( "bb-4.k11", 0x040001, 0x20000, CRC(d482e0e9) SHA1(e56ca92965e8954b613ba4b0e3975e3a12840c30) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "bb-1.e6", 0x000000, 0x10000, CRC(4360f2ee) SHA1(4c6b212f59389bdf4388893d2030493b110ac087) )
@ -1020,10 +1068,11 @@ ROM_END
/******************************************************************************/
// as soon as you calibrate the guns in test mode the game refuses to boot
GAME( 1989, bbusters, 0, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1989, bbusters, 0, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1989, bbustersu, bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 3)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1989, bbustersua, bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1989, mechatt, 0, mechatt, mechatt, driver_device, 0, ROT0, "SNK", "Mechanized Attack (World)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechattj, mechatt, mechatt, mechattj, driver_device, 0, ROT0, "SNK", "Mechanized Attack (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechattu, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechattu1,mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US, Version 1, Single Player)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechatt, 0, mechatt, mechatt, driver_device, 0, ROT0, "SNK", "Mechanized Attack (World)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechattj, mechatt, mechatt, mechattj, driver_device, 0, ROT0, "SNK", "Mechanized Attack (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechattu, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US)", GAME_SUPPORTS_SAVE )
GAME( 1989, mechattu1, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US, Version 1, Single Player)", GAME_SUPPORTS_SAVE )

View File

@ -920,6 +920,34 @@ ROM_START( dsoccr94 )
ROM_LOAD( "ds_da0.ic24", 0x000000, 0x100000, CRC(67fc52fd) SHA1(5771e948115af8fe4a6d3f448c03a2a9b42b6f20) )
ROM_END
ROM_START( dsoccr94k )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "ic59_h0.bin", 0x000001, 0x040000, CRC(7b26d8a3) SHA1(03b4a5f0c7bd72bee24065feb22b837b373d936c) )
ROM_LOAD16_BYTE( "ic61_l0.bin", 0x000000, 0x040000, CRC(b13f0ff4) SHA1(01d4241019abb16364090b2d00b93864d228ab98) )
ROM_LOAD16_BYTE( "ic60_h1.bin", 0x080001, 0x040000, CRC(6109041b) SHA1(063898a88f8a6a9f1510aa55e53a39f037b02903) )
ROM_LOAD16_BYTE( "ic62_l1.bin", 0x080000, 0x040000, CRC(97a01f6b) SHA1(e188e28f880f5f3f4d7b49eca639d643989b1468) )
ROM_REGION( 0x20000, "soundcpu", 0 )
ROM_LOAD16_BYTE( "a3-sh0-c-0.ic31", 0x00001, 0x10000, CRC(23fe6ffc) SHA1(896377961cafc19e44d9d889f9fbfdbaedd556da) )
ROM_LOAD16_BYTE( "a3-sl0-c-0.ic37", 0x00000, 0x10000, CRC(768132e5) SHA1(1bb64516eb58d3b246f08e1c07f091e78085689f) )
ROM_REGION( 0x400000, "gfx1", 0 ) /* chars */
ROM_LOAD16_BYTE( "ds_c00.ic29", 0x000000, 0x100000, CRC(2d31d418) SHA1(6cd0e362bc2e3f2b20d96ee97a04bff46ee3016a) ) /* MASK ROMs with no "official" rom label */
ROM_LOAD16_BYTE( "ds_c10.ic28", 0x000001, 0x100000, CRC(57f7bcd3) SHA1(a38e7cdfdea72d882fba414cae391ba09443e73c) )
ROM_LOAD16_BYTE( "ds_c01.ic21", 0x200000, 0x100000, CRC(9d31a464) SHA1(1e38ac296f64d77fabfc0d5f7921a9b7a8424875) )
ROM_LOAD16_BYTE( "ds_c11.ic20", 0x200001, 0x100000, CRC(a372e79f) SHA1(6b0889cfc2970028832566e25257927ddc461ea6) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* sprites */
ROM_LOAD( "ds_000.ic11", 0x000000, 0x100000, CRC(366b3e29) SHA1(cb016dcbdc6e8ea56c28c00135263666b07df991) ) /* MASK ROMs with no "official" rom label */
ROM_LOAD( "ds_010.ic12", 0x100000, 0x100000, CRC(28a4cc40) SHA1(7f4e1ef995eaadf1945ee22ab3270cb8a21c601d) )
ROM_LOAD( "ds_020.ic13", 0x200000, 0x100000, CRC(5a310f7f) SHA1(21969e4247c8328d27118d00604096deaf6700af) )
ROM_LOAD( "ds_030.ic14", 0x300000, 0x100000, CRC(328b1f45) SHA1(4cbbd4d9be4fc151d426175bdbd35d8481bf2966) )
ROM_REGION( 0x100000, "irem", 0 ) /* ADPCM samples */
ROM_LOAD( "ds_da0.ic24", 0x000000, 0x100000, CRC(67fc52fd) SHA1(5771e948115af8fe4a6d3f448c03a2a9b42b6f20) )
ROM_END
ROM_START( wpksoc )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_BYTE( "pk-h0-eur-d.h0", 0x000001, 0x040000, CRC(b4917788) SHA1(673294c518eaf28354fa6a3058f9325c6d9ddde6) )
@ -1016,6 +1044,7 @@ GAME( 1993, airass, 0, airass, firebarr, m107_state, fireba
GAME( 1993, firebarr, airass, firebarr, firebarr, m107_state, firebarr, ROT270, "Irem", "Fire Barrel (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1994, dsoccr94, 0, dsoccr94, dsoccr94, m107_state, dsoccr94, ROT0, "Irem (Data East Corporation license)", "Dream Soccer '94 (World, M107 hardware)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1994, dsoccr94k, dsoccr94, dsoccr94, dsoccr94, m107_state, dsoccr94, ROT0, "Irem (Data East Corporation license)", "Dream Soccer '94 (Korea, M107 hardware)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // default team selected is Korea, so likely a Korean set
GAME( 1995, wpksoc, 0, wpksoc, wpksoc, m107_state, wpksoc, ROT0, "Jaleco", "World PK Soccer", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL | GAME_SUPPORTS_SAVE )
GAME( 1994, kftgoal, wpksoc, wpksoc, wpksoc, m107_state, wpksoc, ROT0, "Jaleco", "Kick for the Goal", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL | GAME_SUPPORTS_SAVE )

View File

@ -791,7 +791,11 @@ MACHINE_CONFIG_END
ROM_SYSTEM_BIOS( 1, "ver0a", "Ver 0 Rev A" ) \
ROMX_LOAD( "epr-12263a.20", 0x000000, 0x8000, CRC(07c3f423) SHA1(50c28bbc2d4349c820d988ae3f20aae3f808545f), ROM_BIOS(2)) \
ROM_SYSTEM_BIOS( 2, "ver0b", "Ver 0 Rev B" ) \
ROMX_LOAD( "epr-12263b.20", 0x000000, 0x8000, CRC(ca26c87a) SHA1(987a18bede6e54cd73c4434426eb6c302a37cdc5), ROM_BIOS(3))
ROMX_LOAD( "epr-12263b.20", 0x000000, 0x8000, CRC(ca26c87a) SHA1(987a18bede6e54cd73c4434426eb6c302a37cdc5), ROM_BIOS(3)) \
ROM_SYSTEM_BIOS( 3, "ver0aa","Ver 0 Rev B (alt?)" ) \
ROMX_LOAD( "epr-12604a.20", 0x000000, 0x8000, CRC(884e4aa5) SHA1(c9008c431a937c084fb475273093ca0b434b5f47), ROM_BIOS(4))
/* no games */
ROM_START( megatech )
MEGATECH_BIOS

View File

@ -1192,7 +1192,7 @@ static void configure_fast_ram(running_machine &machine)
{
model3_state *state = machine.driver_data<model3_state>();
/* set conservative DRC options */
machine.device<ppc_device>("maincpu")->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS - PPCDRC_ACCURATE_SINGLES);
machine.device<ppc_device>("maincpu")->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
/* configure fast RAM regions for DRC */
machine.device<ppc_device>("maincpu")->ppcdrc_add_fastram(0x00000000, 0x007fffff, FALSE, state->m_work_ram);
@ -1556,7 +1556,7 @@ WRITE64_MEMBER(model3_state::model3_sys_w)
m_crom_bank = data >> 56;
data >>= 56;
data = (~data) & 0x7;
data = (~data) & 0xf;
membank("bank1")->set_base(memregion( "user1" )->base() + 0x800000 + (data * 0x800000)); /* banked CROM */
}
@ -2047,7 +2047,7 @@ INPUT_PORTS_END
#define ROM_LOAD_VROM(name, offset, length, hash) ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(14) )
ROM_START( lemans24 ) /* step 1.5, Sega game ID# is 833-13159, ROM board ID# 834-13160 GAME BD LEMANS 24 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19887b.17", 0x600006, 0x080000, CRC(2842bb87) SHA1(2acabf3f7281acaf6bab4d3bae9701df3909cf81) )
ROM_LOAD64_WORD_SWAP( "epr-19888b.18", 0x600004, 0x080000, CRC(800d763d) SHA1(4f2865a64d6dda638840d359db3bd2f22b6d1404) )
@ -2117,7 +2117,7 @@ ROM_END
ROM_START( scud ) /* step 1.5, Sega game ID# is 833-13041, ROM board ID# 834-13072 SPG COMM AUS */
/* There is known to be a ROM board ID# 834-13034 SPG DX AUS with program roms EPR-19634 to EPR-19637 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19731.17", 0x0600006, 0x80000, CRC(3ee6447e) SHA1(124697791d90c1b352dd6e33bd3b45535aa92bb5) )
ROM_LOAD64_WORD_SWAP( "epr-19732.18", 0x0600004, 0x80000, CRC(23e864bb) SHA1(0f34d963ee681ca1006f3dec12b593d961e3e442) )
@ -2192,7 +2192,7 @@ ROM_START( scud ) /* step 1.5, Sega game ID# is 833-13041, ROM board ID# 834-1
ROM_END
ROM_START( scudj ) /* step 1.5, Sega game ID# is 833-13041, ROM board ID# 12934 SPG DX */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19610.17a", 0x0600006, 0x80000, CRC(53f5cd94) SHA1(e27609165087ef7000b61ce628883561ffe64b22) )
ROM_LOAD64_WORD_SWAP( "epr-19609.18a", 0x0600004, 0x80000, CRC(ec418b68) SHA1(8455db7e174ea00db30b7e61681ac7b7fcd9ba1c) )
@ -2267,7 +2267,7 @@ ROM_START( scudj ) /* step 1.5, Sega game ID# is 833-13041, ROM board ID# 12934
ROM_END
ROM_START( scuda ) /* step 1.5, Sega game ID# is 833-13041, ROM board ID# 834-13042 SPG FOR COMMUNICATION */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19688.17", 0x0600006, 0x80000, CRC(a4c85103) SHA1(b2e57f86d0a49e3e88fa7d6a77bbd99039c034bb) )
ROM_LOAD64_WORD_SWAP( "epr-19689.18", 0x0600004, 0x80000, CRC(cbce6d62) SHA1(b6051af013ee80406cfadb0c8acf24b8825ccaf2) )
@ -2342,7 +2342,7 @@ ROM_START( scuda ) /* step 1.5, Sega game ID# is 833-13041, ROM board ID# 834-1
ROM_END
ROM_START( scudplus ) /* step 1.5, Sega game ID# is 833-13260 SCUD PLUS, ROM board ID# 834-13261 SCUD PLUS */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20092a.17", 0x0600006, 0x80000, CRC(a94ec57e) SHA1(bda1d9cb38e10a25f7cdde38f30ae13541fdbc5e) )
ROM_LOAD64_WORD_SWAP( "epr-20093a.18", 0x0600004, 0x80000, CRC(4ed2e35d) SHA1(ac149b369db9fc80e63e1ed943d42ccd056dab1b) )
@ -2423,7 +2423,7 @@ ROM_START( scudplus ) /* step 1.5, Sega game ID# is 833-13260 SCUD PLUS, ROM b
ROM_END
ROM_START( scudplusa ) /* step 1.5, Sega game ID# is 833-13260 SCUD PLUS, ROM board ID# 834-13261 SCUD PLUS */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20092.17", 0x0600006, 0x80000, CRC(6f9161c1) SHA1(b1c66eeb1bb67664aafa78ad62515204f231f09b) )
ROM_LOAD64_WORD_SWAP( "epr-20093.18", 0x0600004, 0x80000, CRC(9a85c611) SHA1(fb21c29584b205ec14f82318110ecf5821a95c23) )
@ -2504,7 +2504,7 @@ ROM_START( scudplusa ) /* step 1.5, Sega game ID# is 833-13260 SCUD PLUS, ROM b
ROM_END
ROM_START( vf3 ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-12821 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19227c.17", 0x600006, 0x080000, CRC(a7df4d75) SHA1(1b1186227f830556c5e2b6ca4c2bf20673b22f94) )
ROM_LOAD64_WORD_SWAP( "epr-19228c.18", 0x600004, 0x080000, CRC(9c5727e2) SHA1(f9f8b8cf27fdce08ab2975dbaa8c7a03f5c064fb) )
@ -2579,7 +2579,7 @@ ROM_START( vf3 ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-1
ROM_END
ROM_START( vf3a ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-12821 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr19227a.17", 0x600006, 0x080000, CRC(7139931a) SHA1(57eec80361726143017b1adbfaafbeef0bc4109d) )
ROM_LOAD64_WORD_SWAP( "epr19228a.18", 0x600004, 0x080000, CRC(82f17ab5) SHA1(64714d14e64d97ebeedd1c6e1e832969df9e2324) )
@ -2654,7 +2654,7 @@ ROM_START( vf3a ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-1
ROM_END
ROM_START( vf3tb ) /* step 1.0? */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20126.17", 0x600006, 0x080000, CRC(27ecd3b0) SHA1(a9b913294ac925adb501d3b47f346006b70dfcd6) )
ROM_LOAD64_WORD_SWAP( "epr-20127.18", 0x600004, 0x080000, CRC(5c0f694b) SHA1(ca346d6b249bb7a3015f016d25bfb3050360c8ec) )
@ -2729,7 +2729,7 @@ ROM_START( vf3tb ) /* step 1.0? */
ROM_END
ROM_START( bass ) /* step 1.0, Sega game ID# is 833-13317, ROM board ID# 834-13318 BSS */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20643.17", 0x600006, 0x080000, CRC(daf02716) SHA1(b968f8ca602c78b9ca49969ff01f9440f175049a) )
ROM_LOAD64_WORD_SWAP( "epr-20644.18", 0x600004, 0x080000, CRC(c28db2b6) SHA1(0b12fe9e5189714b1aca79c4bba4be57a9e0d5fd) )
@ -2798,7 +2798,7 @@ ROM_START( bass ) /* step 1.0, Sega game ID# is 833-13317, ROM board ID# 834-1
ROM_END
ROM_START( bassdx ) /* step 1.0, Sega game ID# is 833-13476 BSS DX JPN, ROM board ID# 834-13477 BSS DX JPN */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20834.17", 0x600006, 0x080000, CRC(17f466a6) SHA1(2abdc432891cc79733fc29903df87af9eba11b32) )
ROM_LOAD64_WORD_SWAP( "epr-20835.18", 0x600004, 0x080000, CRC(f8f19bb2) SHA1(8f1704e532e494086fb5989d0c358ea0a0f6aae5) )
@ -2892,7 +2892,7 @@ gal16v8d (sega 315-6126)
*/
ROM_START( getbass ) /* step 1.0, Sega game ID# is 833-13416 GET BASS STD, ROM board ID# 834-13417 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20309.17", 0x600006, 0x080000, CRC(a42e1033) SHA1(a834eb973e9529338413220a2d8e66ce98d6cb31) )
ROM_LOAD64_WORD_SWAP( "epr-20310.18", 0x600004, 0x080000, CRC(4efcddc9) SHA1(d1362c2a844b605901083e875a6aad817401eb0a) )
@ -2964,7 +2964,7 @@ ROM_START( getbass ) /* step 1.0, Sega game ID# is 833-13416 GET BASS STD, RO
ROM_END
ROM_START( lostwsga ) /* Step 1.5, PCB cage labeled 834-13172 THE LOST WORLD U/R. Sega game ID# is 833-13171, ROM board ID# 834-13172 REV.A */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19939a.17", 0x600006, 0x080000, CRC(8788b939) SHA1(30932057f763545568526f85977aa0afc4b66e7d) )
ROM_LOAD64_WORD_SWAP( "epr-19938a.18", 0x600004, 0x080000, CRC(38afe27a) SHA1(718a238ee246eeed9fa698b58493806932d0e7cb) )
@ -3039,7 +3039,7 @@ ROM_START( lostwsga ) /* Step 1.5, PCB cage labeled 834-13172 THE LOST WORLD U
ROM_END
ROM_START( vs2 ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20467.17", 0x400006, 0x100000, CRC(25d7ae73) SHA1(433a7c1dac1bd5524b018da2ed09f937d527ac3e) )
ROM_LOAD64_WORD_SWAP( "epr-20468.18", 0x400004, 0x100000, CRC(f0f0b6ea) SHA1(b3f545e5a4dd45b97df938093251cc7845c2a1f9) )
@ -3114,7 +3114,7 @@ ROM_START( vs2 ) /* Step 2.0 */
ROM_END
ROM_START( vs215 ) /* Step 1.5 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19900.17", 0x600006, 0x080000, CRC(8fb6045d) SHA1(88497eafc23ba70ab4a43de552a16caccd8dccbe) )
ROM_LOAD64_WORD_SWAP( "epr-19899.18", 0x600004, 0x080000, CRC(8cc2be9f) SHA1(ec82b1312c8d58adb200f4d7f6f9a9c8214415d5) )
@ -3189,7 +3189,7 @@ ROM_START( vs215 ) /* Step 1.5 */
ROM_END
ROM_START( vs215o ) /* Step 1.5, original release.. might even be for Step 1.0??? */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-19806.17", 0x600006, 0x080000, CRC(95e1b970) SHA1(bcc914088cd08cb0032349b71904757760d947f3) )
ROM_LOAD64_WORD_SWAP( "epr-19805.18", 0x600004, 0x080000, CRC(d9e40606) SHA1(b305e607ffe4226c825a73973a5c8ec1322e8b58) )
@ -3264,7 +3264,7 @@ ROM_START( vs215o ) /* Step 1.5, original release.. might even be for Step 1.0??
ROM_END
ROM_START( vs298 ) /* Step 2.0, Sega ID# 833-13346, ROM board ID# 834-13347 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20917.17", 0x400006, 0x100000, CRC(c3bbb270) SHA1(16b2342031ff72408f2290e775df5c8aa344c2e4) )
ROM_LOAD64_WORD_SWAP( "epr-20918.18", 0x400004, 0x100000, CRC(0e9cdc5b) SHA1(356816d0380c791b9d812ce17fa95123d15bb5e9) )
@ -3342,7 +3342,7 @@ ROM_START( vs298 ) /* Step 2.0, Sega ID# 833-13346, ROM board ID# 834-13347 */
ROM_END
ROM_START( vs29815 ) /* Step 1.5, ROM board ID# 834-13495 VS2 VER98 STEP 1.5 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20909.17", 0x600006, 0x080000, CRC(3dff0d7e) SHA1(c6a6a103f499cd451796ae2480b8c38c3e87a143) )
ROM_LOAD64_WORD_SWAP( "epr-20910.18", 0x600004, 0x080000, CRC(dc75a2e3) SHA1(f1b13674ae20b5b964be593171b9d6008d5a51b7) )
@ -3417,7 +3417,7 @@ ROM_START( vs29815 ) /* Step 1.5, ROM board ID# 834-13495 VS2 VER98 STEP 1.5
ROM_END
ROM_START( vs2v991 ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21535b.17", 0x400006, 0x100000, CRC(76c5fa8e) SHA1(862438198cb7fdd20beeba53e707a7c59e618ad9) )
ROM_LOAD64_WORD_SWAP( "epr-21536b.18", 0x400004, 0x100000, CRC(1f2bd190) SHA1(19843e6c5626de03eba3cba79c03ce9f2471c183) )
@ -3495,7 +3495,7 @@ ROM_START( vs2v991 ) /* Step 2.0 */
ROM_END
ROM_START( vs299b ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21550b.17", 0x400006, 0x100000, CRC(c508e488) SHA1(3134d418beaee9f824a0bd0e5441a997b5911d16) )
ROM_LOAD64_WORD_SWAP( "epr-21551b.18", 0x400004, 0x100000, CRC(0bbc40f7) SHA1(4437c7eab621349b826dcc03d1377731260417e8) )
@ -3573,7 +3573,7 @@ ROM_START( vs299b ) /* Step 2.0 */
ROM_END
ROM_START( vs299a ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21535a.17", 0x400006, 0x100000, CRC(8e4ec341) SHA1(973c71e7a48e728cbcb2465b56e90669fee0ec53) )
ROM_LOAD64_WORD_SWAP( "epr-21536a.18", 0x400004, 0x100000, CRC(95d49d6e) SHA1(80b6655c1ee0f76620e3e2e9425719819a96ccf7) )
@ -3651,7 +3651,7 @@ ROM_START( vs299a ) /* Step 2.0 */
ROM_END
ROM_START( vs299 ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21535.17", 0x400006, 0x100000, CRC(976a00bf) SHA1(d4be52ff59faa877b169f96ac509a2196cefb908) )
ROM_LOAD64_WORD_SWAP( "epr-21536.18", 0x400004, 0x100000, CRC(9af2b0d5) SHA1(6ec296014228782f372611fe774014d252956b63) )
@ -3729,7 +3729,7 @@ ROM_START( vs299 ) /* Step 2.0 */
ROM_END
ROM_START( von2 ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20683b.17", 0x000006, 0x200000, CRC(59d9c974) SHA1(c45594ed474a9e8fd074e0d9d5fa6662bc88dee6) )
ROM_LOAD64_WORD_SWAP( "epr-20684b.18", 0x000004, 0x200000, CRC(1fc15431) SHA1(c68c77dfcf5e2702214d64095ce07076d3702a5e) )
@ -3808,7 +3808,7 @@ ROM_START( von2 ) /* Step 2.0 */
ROM_END
ROM_START( von254g ) /* Step 2.0, Sega game ID# is 833-13789 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21788.17", 0x000006, 0x200000, CRC(97066bcf) SHA1(234c45ee1f23b22f61893825eebf31d867cf420f) )
ROM_LOAD64_WORD_SWAP( "epr-21789.18", 0x000004, 0x200000, CRC(3069108f) SHA1(f4e82da677458423abcf07c9c5a837005ed8f1c4) )
@ -3887,7 +3887,7 @@ ROM_START( von254g ) /* Step 2.0, Sega game ID# is 833-13789 */
ROM_END
ROM_START( skichamp ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20352.17", 0x000006, 0x200000, CRC(c92c2545) SHA1(612c39c935b403484fcda6d36fca50cc5ef726fc) )
ROM_LOAD64_WORD_SWAP( "epr-20353.19", 0x000004, 0x200000, CRC(badf5f04) SHA1(65a502a3fada114a699d0bf22e004d5bf1f5edf5) )
@ -3959,7 +3959,7 @@ ROM_START( skichamp ) /* Step 2.0 */
ROM_END
ROM_START( swtrilgy ) /* Step 2.1, Sega game ID# is 833-13586, ROM board ID# 834-13587 STAR WARS TRILOGY, Security board ID# 837-13588-COM */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21379a.17", 0x000006, 0x200000, CRC(24dc1555) SHA1(0a4b458bb09238de0f38ba2805512b5dbee7d58e) )
ROM_LOAD64_WORD_SWAP( "epr-21380a.18", 0x000004, 0x200000, CRC(780fb4e7) SHA1(6650e114bad0e4c3f67b744599dba9845da82f11) )
@ -4034,7 +4034,7 @@ ROM_START( swtrilgy ) /* Step 2.1, Sega game ID# is 833-13586, ROM board ID# 8
ROM_END
ROM_START( swtrilgya ) /* Step 2.1, Sega game ID# is 833-13586, ROM board ID# 834-13587 STAR WARS TRILOGY, Security board ID# 837-13588-COM */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21379.17", 0x000006, 0x200000, CRC(61ad51d9) SHA1(b27ea929702bb94c86d03d6c1f479af32230b4d0) )
ROM_LOAD64_WORD_SWAP( "epr-21380.18", 0x000004, 0x200000, CRC(49b182f2) SHA1(9a4e3180f2661c95976963ab17e66a5184bca9a3) )
@ -4106,7 +4106,7 @@ ROM_START( swtrilgya ) /* Step 2.1, Sega game ID# is 833-13586, ROM board ID# 8
ROM_END
ROM_START( dirtdvls ) /* Step 2.1 - Export version, Sega game ID# is 833-13427, ROM board ID# 834-13528 DRT */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21062a.17", 0x000006, 0x200000, CRC(64b55254) SHA1(0e5de3786edad77dde08652ac837dc9125e7851c) )
ROM_LOAD64_WORD_SWAP( "epr-21063a.18", 0x000004, 0x200000, CRC(6ab7eb32) SHA1(3a4226d4c786e7b64688af3b8883b4039b8c8407) )
@ -4170,7 +4170,7 @@ ROM_START( dirtdvls ) /* Step 2.1 - Export version, Sega game ID# is 833-13427
ROM_END
ROM_START( dirtdvlsa ) /* Step 2.1 - Australia version */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21058a", 0x000006, 0x200000, CRC(4d7fdc8d) SHA1(c45031b4e3ea65519de671e0e11f87e0965e3c93) )
ROM_LOAD64_WORD_SWAP( "epr-21059a", 0x000004, 0x200000, CRC(f31a2aa4) SHA1(b7398db217372885f763efdb909f3e43ccbac34a) )
@ -4400,7 +4400,7 @@ ROM_START( dayto2pe ) /* Step 2.1, Sega game ID# is 833-13610 DAYTONA USA2 SP,
ROM_END
ROM_START( srally2 ) /* Step 2.0, Sega game ID# is 833-13373, ROM board ID# 834-13374 SRT TWIN */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20632.17", 0x000006, 0x200000, CRC(6829a801) SHA1(2aa3834f6a8c53f5db57ab52994b8ab3fde2d7c2) )
ROM_LOAD64_WORD_SWAP( "epr-20633.18", 0x000004, 0x200000, CRC(f5a24f24) SHA1(6f741bc53d51ff4b5535dbee35aa490f159945ec) )
@ -4472,7 +4472,7 @@ ROM_START( srally2 ) /* Step 2.0, Sega game ID# is 833-13373, ROM board ID# 8
ROM_END
ROM_START( srally2x ) /* Step 2.0 */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20502.17", 0x000006, 0x200000, CRC(af16846d) SHA1(a0babc4dc3809ca1e71eaad4dc2f8c1597575e8b) )
ROM_LOAD64_WORD_SWAP( "epr-20503.18", 0x000004, 0x200000, CRC(6e238b3d) SHA1(78da9abf39a2371d74d6b72b00f2467dfe86c4d5) )
@ -4541,7 +4541,7 @@ ROM_START( srally2x ) /* Step 2.0 */
ROM_END
ROM_START( harley ) /* Step 2.0, Sega game ID# is 833-13325, ROM board ID# 834-13326 HARLEY DAVIDSON */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20393b.17", 0x000006, 0x200000, CRC(7d712105) SHA1(35e0849f498de48fcb357495b6e8039740b8e881) )
ROM_LOAD64_WORD_SWAP( "epr-20394b.18", 0x000004, 0x200000, CRC(b4312135) SHA1(79c4306acd8c20f86d16a18de696783f7da9df84) )
@ -4609,7 +4609,7 @@ ROM_START( harley ) /* Step 2.0, Sega game ID# is 833-13325, ROM board ID# 834-1
ROM_END
ROM_START( harleya ) /* Step 2.0, Sega game ID# is 833-13325, ROM board ID# 834-13326 HARLEY DAVIDSON */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20393a.17", 0x000006, 0x200000, CRC(b5646556) SHA1(4bff0e140e1d1df7459f7194aa4a335bc4592203) )
ROM_LOAD64_WORD_SWAP( "epr-20394a.18", 0x000004, 0x200000, CRC(ce29e2b6) SHA1(482aaf5480b219b8ac6e4e36a6d64359e1834f44) )
@ -4677,7 +4677,7 @@ ROM_START( harleya ) /* Step 2.0, Sega game ID# is 833-13325, ROM board ID# 8
ROM_END
ROM_START( fvipers2 ) /* Step 2.0 - Japan version */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-20596a.17", 0x000006, 0x200000, CRC(969ab801) SHA1(a7a2aa71204d1c38a6a8c0605331fd859cb224f1) )
ROM_LOAD64_WORD_SWAP( "epr-20597a.18", 0x000004, 0x200000, CRC(6fcee322) SHA1(d65303f2551902ac5446a35656241628d67f4a63) )
@ -4915,7 +4915,7 @@ ROM_START( spikeofe ) /* Step 2.1, Sega game ID# is 833-13746, ROM board ID# 8
ROM_END
ROM_START( eca ) /* Step 2.1 Export version */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-22903.17", 0x000006, 0x200000, CRC(53882217) SHA1(163cbc92ff88671882cc1af377ceec80ba9f36db) )
ROM_LOAD64_WORD_SWAP( "epr-22904.18", 0x000004, 0x200000, CRC(0ff828a8) SHA1(2a74414891ceb5989e6ccb6e9d597f7d2e31fec4) ) // == epr-22896.18
@ -4986,7 +4986,7 @@ ROM_START( eca ) /* Step 2.1 Export version */
ROM_END
ROM_START( ecau ) /* Step 2.1, ROM board ID# 834-13946-01 ECA */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-22895.17", 0x000006, 0x200000, CRC(07df16a0) SHA1(a9ad2b229854a5f4f761565141db738adde28720) )
ROM_LOAD64_WORD_SWAP( "epr-22896.18", 0x000004, 0x200000, CRC(0ff828a8) SHA1(2a74414891ceb5989e6ccb6e9d597f7d2e31fec4) )
@ -5057,7 +5057,7 @@ ROM_START( ecau ) /* Step 2.1, ROM board ID# 834-13946-01 ECA */
ROM_END
ROM_START( ecap ) /* Step 2.1 - Proto or Location test - No security dongle */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
// Hand written SEGA labels in this form: TITLE: QQ ROM NO: IC17 CHECK SUM: 551B 9/12-'99
ROM_LOAD64_WORD_SWAP( "qq.ic17", 0x000006, 0x200000, BAD_DUMP CRC(1db889e0) SHA1(b9a5f344685e1d8b5711d8ab426bb886c1008e48) ) /* Check sum: 551B, dated "9/12-'99" */
@ -5131,7 +5131,7 @@ ROM_START( ecap ) /* Step 2.1 - Proto or Location test - No security dongle */
ROM_END
ROM_START( magtruck ) /* Step 2.1, Sega game ID# is 833-13601-01 (Export), ROM board ID# 834-13600-01 RCS EXP (Export), Security board ID# 837-13599-COM */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21435.17", 0x000006, 0x200000, CRC(9b169446) SHA1(285cbe5afd439d83c50f0499a878f71b8e5b94e5) )
ROM_LOAD64_WORD_SWAP( "epr-21433.18", 0x000004, 0x200000, CRC(60aa9d76) SHA1(b27741568a4fd0494b2254e468faea569e2d9fef) )
@ -5261,7 +5261,7 @@ ROM_START( oceanhun ) /* Step 2.0, Sega game ID# is 833-13571, ROM board ID# 8
ROM_END
ROM_START( lamachin ) /* Step 2.0, Sega game ID# is 833-13664, ROM board ID# 834-13665 L.A.MACHINEGUNS, 317-0244-COM security chip (837-13666-COM security board) */
ROM_REGION64_BE( 0x4800000, "user1", 0 ) /* program + data ROMs */
ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */
// CROM
ROM_LOAD64_WORD_SWAP( "epr-21483.17", 0x000006, 0x200000, CRC(940637c2) SHA1(89894b603c17d27f57500ec8030eaa7e0e991479) )
ROM_LOAD64_WORD_SWAP( "epr-21484.18", 0x000004, 0x200000, CRC(58102168) SHA1(38dd9a41f653c0a84ac927b476f014c949454ffa) )
@ -5690,6 +5690,9 @@ DRIVER_INIT_MEMBER(model3_state,scud)
DRIVER_INIT_CALL(model3_15);
/* TODO: network device at 0xC0000000 - FF */
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf9000000, 0xf90000ff, read64_delegate(FUNC(model3_state::scsi_r),this), write64_delegate(FUNC(model3_state::scsi_w),this));
// UINT32 *rom = (UINT32*)memregion("user1")->base();
// rom[(0x799de8^4)/4] = 0x00050208; // secret debug menu
}
DRIVER_INIT_MEMBER(model3_state,scudplus)
@ -5822,6 +5825,15 @@ DRIVER_INIT_MEMBER(model3_state,harley)
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc0000000, 0xc00fffff, read64_delegate(FUNC(model3_state::network_r),this), write64_delegate(FUNC(model3_state::network_w),this));
}
DRIVER_INIT_MEMBER(model3_state,harleya)
{
DRIVER_INIT_CALL(model3_20);
m_network_ram = auto_alloc_array_clear(machine(), UINT64, 0x10000);
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc0000000, 0xc00fffff, read64_delegate(FUNC(model3_state::network_r),this), write64_delegate(FUNC(model3_state::network_w),this));
}
DRIVER_INIT_MEMBER(model3_state,srally2)
{
DRIVER_INIT_CALL(model3_20);
@ -5937,6 +5949,16 @@ DRIVER_INIT_MEMBER(model3_state,eca)
{
DRIVER_INIT_CALL(model3_20);
DRIVER_INIT_CALL(genprot);
// base = 0xffc80000
UINT32 *rom = (UINT32*)memregion("user1")->base();
// cabinet network error
rom[(0x4a45e4^4)/4] = 0x60000000;
// this code sometimes gets stuck waiting for [0x1e0064], changed by the sound irq (sound FIFO overflow?)
rom[(0x5523b4^4)/4] = 0x60000000;
rom[(0x5523d4^4)/4] = 0x60000000;
}
DRIVER_INIT_MEMBER(model3_state,skichamp)
@ -6002,7 +6024,7 @@ GAME( 1998, vs29815, vs298, model3_15, model3, model3_state, vs29815, ROT0
/* Model 3 Step 2.0 */
GAME( 1997, vs2, 0, model3_20, model3, model3_state, vs2, ROT0, "Sega", "Virtua Striker 2 (Step 2.0)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harley, 0, model3_20, harley, model3_state, harley, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision B)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harleya, harley, model3_20, harley, model3_state, harley, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1997, harleya, harley, model3_20, harley, model3_state, harleya, ROT0, "Sega", "Harley-Davidson and L.A. Riders (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, lamachin, 0, model3_20_5881, model3, model3_state, lamachin, ROT0, "Sega", "L.A. Machineguns (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, oceanhun, 0, model3_20_5881, model3, model3_state, oceanhun, ROT0, "Sega", "The Ocean Hunter", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1998, skichamp, 0, model3_20, skichamp, model3_state, skichamp, ROT0, "Sega", "Ski Champ (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )

View File

@ -7386,8 +7386,8 @@ ROM_START( shaktam )
DISK_IMAGE_READONLY( "gds-0002b", 0, SHA1(c656497b44d5ca4743aa1a8d836af2bfa3484dd5) )
ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
// key PIC is missing
ROM_LOAD("317-xxxx-com.pic", 0x00, 0x4000, BAD_DUMP CRC(034b7299) SHA1(45118d5f65b21ae599e3ca8e35df847135708d44) )
// PIC label is unknown
ROM_LOAD("317-xxxx-com.pic", 0x00, 0x4000, CRC(9e1a8971) SHA1(022a1781b5d7346b61defe921dbabf11331834d7) )
ROM_END
ROM_START( sprtjam )

111
src/mame/drivers/segam1.c Normal file
View File

@ -0,0 +1,111 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
/*
Sega M1 hardware (837-7571) (PCB)
Sega Bingo Multicart (837-10675) (Sticker on PCB)
used for redemption / gambling style machines in a satellite setup
based on Caribbean Boule the following hardware setup is used
One X-Board (segaxbd.c) drives a large rear-projection monitor which all players view to see the main game progress.
Multiple M1 boards ("satellite" board) for each player for them to view information privately.
One 'link' board which connects everything together. The link board has audio hardware, a 68K, and a Z80 as
well as a huge bank of UARTS and toslink connectors, but no video. it's possible the main game logic runs
on the 'link' board.
Unfortunately we don't have any dumps of anything other than an M1 board right now.
---
is this related to (or a component of?) bingoc.c, the EPR numbers are much lower there tho
so it's probably an earlier version of the same thing or one of the 'link' boards?
uses s24 style tilemaps (ram based?)
*/
#include "emu.h"
#include "cpu/m68000/m68000.h"
class segam1_state : public driver_device
{
public:
segam1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu")
{ }
virtual void video_start();
UINT32 screen_update_segam1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
};
void segam1_state::video_start()
{
}
UINT32 segam1_state::screen_update_segam1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
}
static ADDRESS_MAP_START( segam1_map, AS_PROGRAM, 16, segam1_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
ADDRESS_MAP_END
static INPUT_PORTS_START( segam1 )
INPUT_PORTS_END
static MACHINE_CONFIG_START( segam1, segam1_state )
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2)
MCFG_CPU_PROGRAM_MAP(segam1_map)
// MCFG_CPU_VBLANK_INT_DRIVER("screen", segam1_state, irq1_line_hold)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_DRIVER(segam1_state, screen_update_segam1)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 0x200)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MACHINE_CONFIG_END
ROM_START( bingpty )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "epr-16648b.bin", 0x00000, 0x20000, CRC(e4fceb4c) SHA1(0a248bb328d2f6d72d540baefbe62838f4b76585) )
ROM_LOAD16_BYTE( "epr-16649b.bin", 0x00001, 0x20000, CRC(736d8bbd) SHA1(c359ad513d4a7693cbb1a27ce26f89849e894d05) )
ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Code */
ROM_LOAD( "epr-14845.bin", 0x00000, 0x20000, CRC(90d47101) SHA1(7bc002c104e3dbde1986aaec54112d5658eab523) )
ROM_REGION( 0x8000, "m1comm", 0 ) /* Z80 Code */
ROM_LOAD( "epr-14221a.bin", 0x00000, 0x8000, CRC(a13e67a4) SHA1(4cd269c7f04a64ae7806c8784f86bf6553a25d85) )
// dumps of the X-Board part, and the LINK PCB are missing.
ROM_END
GAME( 199?, bingpty, 0, segam1, segam1, driver_device, 0, ROT0, "Sega", "Bingo Party Multicart (Rev B) (M1 Satellite board)", GAME_NOT_WORKING | GAME_NO_SOUND )

View File

@ -4538,6 +4538,48 @@ ROM_START( dunkshot )
ROM_LOAD( "317-0022.key", 0x0000, 0x2000, CRC(4eedc66d) SHA1(50588fa13bf25a2d1322579cdc9937450543c978) )
ROM_END
ROM_START( dunkshota ) // several roms had replacement? (different style to others) labels with 'T' markings, content identical.
ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "epr-10520a.a1", 0x000001, 0x8000, CRC(16e213ba) SHA1(efddff17d1802ccbea9eac69cedef62fa6b9a640) )
ROM_LOAD16_BYTE( "epr-10523a.a4", 0x000000, 0x8000, CRC(22e3f074) SHA1(acdb6952308957244355bedb9cc627314a0139ef) )
ROM_LOAD16_BYTE( "epr-10521.a2", 0x010001, 0x8000, CRC(e2d5f97a) SHA1(bf7b4a029580633fee65be89d5c9c83ff76a8484) ) // == epr-10468.a2
ROM_LOAD16_BYTE( "epr-10524.a5", 0x010000, 0x8000, CRC(22777314) SHA1(fbc35505a94c8d4bdb44ee058e9e2e9e9b377c5c) ) // == epr-10471.a5
ROM_LOAD16_BYTE( "epr-10522.a3", 0x020001, 0x8000, CRC(e5b5f754) SHA1(af02c46437e3cf62331753dc405211b7f90e3f62) )
ROM_LOAD16_BYTE( "epr-10525.a6", 0x020000, 0x8000, CRC(7f41f334) SHA1(631f6113f3c0c47f2dd1ee0ea6e7db4321d7366d) )
ROM_REGION( 0x18000, "gfx1", 0 ) // tiles
ROM_LOAD( "epr-10528.b9", 0x00000, 0x8000, CRC(a8a3762d) SHA1(af75df6eda0df903e2b3f9680cd128da4227961d) )
ROM_LOAD( "epr-10529.b10", 0x08000, 0x8000, CRC(80cbff50) SHA1(3641ee337194d56d774bf1be91939d03f3c0f77b) )
ROM_LOAD( "epr-10530.b11", 0x10000, 0x8000, CRC(2dbe1e52) SHA1(a6b74f88e2f47322fbde1f6682cae58caf79f6c8) )
ROM_REGION16_BE( 0x80000, "sprites", 0 ) // sprites
ROM_LOAD16_BYTE( "epr-10481.b5", 0x00000, 0x8000, CRC(feb04bc9) SHA1(233dc8e3b887a88ac114723d58a909a58f0ae771) )
ROM_RELOAD( 0x10000, 0x8000 )
ROM_LOAD16_BYTE( "epr-10477.b1", 0x00001, 0x8000, CRC(f9d3b2cb) SHA1(b530fe16882c718122bfd1de098f39e54993de28) )
ROM_RELOAD( 0x10001, 0x8000 )
ROM_LOAD16_BYTE( "epr-10482.b6", 0x20000, 0x8000, CRC(5bc07618) SHA1(f4c88f81b407d467f958181770ea4fd32aab3daf) )
ROM_RELOAD( 0x30000, 0x8000 )
ROM_LOAD16_BYTE( "epr-10478.b2", 0x20001, 0x8000, CRC(5b5c5c92) SHA1(1c6f1cafa0788678c80ade11560f4a8d8bb7272a) )
ROM_RELOAD( 0x30001, 0x8000 )
ROM_LOAD16_BYTE( "epr-10483.b7", 0x40000, 0x8000, CRC(7cab4f9e) SHA1(2310a9fe604f78d74d84bea301c95e6f0e6a6085) )
ROM_RELOAD( 0x50000, 0x8000 )
ROM_LOAD16_BYTE( "epr-10479.b3", 0x40001, 0x8000, CRC(e84190a0) SHA1(23a8799adf81e1884a8c6b4c55397b8bca2f1850) )
ROM_RELOAD( 0x50001, 0x8000 )
ROM_LOAD16_BYTE( "epr-10527.b8", 0x60000, 0x8000, CRC(39b1a242) SHA1(cf0c0768d006a18345b66dd389acba1e8192ec53) )
ROM_RELOAD( 0x70000, 0x8000 )
ROM_LOAD16_BYTE( "epr-10526.b4", 0x60001, 0x8000, CRC(bf200754) SHA1(60900d80cfea147b011813dde558c1d39fdd274c) )
ROM_RELOAD( 0x70001, 0x8000 )
ROM_REGION( 0x50000, "soundcpu", 0 ) // sound CPU
ROM_LOAD( "epr-10473.a7", 0x00000, 0x08000, CRC(7f1f5a27) SHA1(7ff91b95c883b395ab4ff5e440d78e553a09e623) )
ROM_LOAD( "epr-10474.a8", 0x10000, 0x08000, CRC(419a656e) SHA1(aa734ae835761badeb069f99acc5fded2a19b3a3) )
ROM_LOAD( "epr-10475.a9", 0x20000, 0x08000, CRC(17d55e85) SHA1(0c414bafecbfaa82679cc155f15f5255c186358d) )
ROM_LOAD( "epr-10476.a10", 0x30000, 0x08000, CRC(a6be0956) SHA1(fc4d6e25e0b46679f94fddbb1850fb0b02f8d84b) )
ROM_REGION( 0x2000, "maincpu:key", 0 ) // decryption key
ROM_LOAD( "317-0022.key", 0x0000, 0x2000, CRC(4eedc66d) SHA1(50588fa13bf25a2d1322579cdc9937450543c978) )
ROM_END
ROM_START( dunkshoto )
ROM_REGION( 0x30000, "maincpu", 0 ) // 68000 code
@ -6903,6 +6945,7 @@ GAME( 1988, dduxj, ddux, system16b_fd1094, ddux, segas16b_state,
GAME( 1988, ddux1, ddux, system16b_i8751, ddux, segas16b_state,ddux_5704, ROT0, "Sega", "Dynamite Dux (set 1, 8751 317-0095)", 0 )
GAME( 1987, dunkshot, 0, system16b_fd1089a, dunkshot, segas16b_state,dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev C, FD1089A 317-0022)", 0 )
GAME( 1987, dunkshota, dunkshot, system16b_fd1089a, dunkshot, segas16b_state,dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev A, FD1089A 317-0022)", 0 )
GAME( 1986, dunkshoto, dunkshot, system16b_fd1089a, dunkshot, segas16b_state,dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 )
GAME( 1989, eswat, 0, system16b_fd1094_5797,eswat, segas16b_state,generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 4, World, FD1094 317-0130)", 0 )

View File

@ -2236,7 +2236,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( blswhstl, tmnt_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 16000000) /* 16 MHz */
MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) /* Confirmed */
MCFG_CPU_PROGRAM_MAP(blswhstl_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", tmnt_state, punkshot_interrupt)

View File

@ -22,14 +22,6 @@ struct cached_texture
rgb_t data[1];
};
struct m3_plane
{
float x;
float y;
float z;
float d;
};
struct m3_vertex
{
float x;
@ -47,9 +39,11 @@ struct m3_clip_vertex
float x;
float y;
float z;
float w;
float u;
float v;
float i;
float s;
};
struct m3_triangle
@ -149,7 +143,7 @@ public:
UINT8 m_id_data[32];
INT32 m_id_size;
int m_tdo;
UINT8 m_layer_priority;
UINT16 m_layer_priority;
UINT32 m_layer_modulate_r;
UINT32 m_layer_modulate_g;
UINT32 m_layer_modulate_b;
@ -175,12 +169,13 @@ public:
int m_list_depth;
MATRIX *m_matrix_stack;
MATRIX m_coordinate_system;
float m_viewport_focal_length;
int m_viewport_region_x;
int m_viewport_region_y;
int m_viewport_region_width;
int m_viewport_region_height;
m3_plane m_clip_plane[5];
MATRIX m_projection_matrix;
float m_viewport_x;
float m_viewport_y;
float m_viewport_width;
float m_viewport_height;
float m_viewport_near;
float m_viewport_far;
UINT32 m_matrix_base_address;
cached_texture *m_texcache[2][1024/32][2048/32];
@ -249,6 +244,7 @@ public:
DECLARE_DRIVER_INIT(daytona2);
DECLARE_DRIVER_INIT(eca);
DECLARE_DRIVER_INIT(srally2);
DECLARE_DRIVER_INIT(harleya);
DECLARE_DRIVER_INIT(skichamp);
DECLARE_DRIVER_INIT(spikeofe);
DECLARE_DRIVER_INIT(scud);
@ -302,11 +298,12 @@ public:
void reset_triangle_buffers();
m3_triangle* push_triangle(bool alpha);
void draw_layers(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void draw_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer, int bitdepth, int sx, int sy);
void draw_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer, int sx, int sy, int prio);
void draw_3d_layer(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void invalidate_texture(int page, int texx, int texy, int texwidth, int texheight);
cached_texture *get_texture(int page, int texx, int texy, int texwidth, int texheight, int format);
inline void write_texture16(int xpos, int ypos, int width, int height, int page, UINT16 *data);
inline void write_texture8(int xpos, int ypos, int width, int height, int page, int upper, int lower, UINT16 *data);
void real3d_upload_texture(UINT32 header, UINT32 *data);
void init_matrix_stack();
void get_top_matrix(MATRIX *out);
@ -316,6 +313,7 @@ public:
void translate_matrix_stack(float x, float y, float z);
void draw_model(UINT32 addr);
UINT32 *get_memory_pointer(UINT32 address);
void set_projection(float left, float right, float top, float bottom, float near, float far);
void load_matrix(int matrix_num, MATRIX *out);
void traverse_list4(int lod_num, UINT32 address);
void traverse_list(UINT32 address);

File diff suppressed because it is too large Load Diff

View File

@ -210,6 +210,9 @@
void segas32_state::common_start(int multi32)
{
if(!m_gfxdecode->started())
throw device_missing_dependencies();
int tmap;
/* remember whether or not we are multi32 */

View File

@ -17,6 +17,13 @@ extern bool g_print_verbose;
const options_entry osd_options::s_option_entries[] =
{
{ NULL, NULL, OPTION_HEADER, "OSD KEYBOARD MAPPING OPTIONS" },
#ifdef SDLMAME_MACOSX
{ OSDOPTION_UIMODEKEY, "DEL", OPTION_STRING, "Key to toggle keyboard mode" },
#else
{ OSDOPTION_UIMODEKEY, "SCRLOCK", OPTION_STRING, "Key to toggle keyboard mode" },
#endif // SDLMAME_MACOSX
{ NULL, NULL, OPTION_HEADER, "OSD FONT OPTIONS" },
{ OSD_FONT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for ui font: " },
@ -24,20 +31,17 @@ const options_entry osd_options::s_option_entries[] =
{ OSDCOMMAND_LIST_MIDI_DEVICES ";mlist", "0", OPTION_COMMAND, "list available MIDI I/O devices" },
{ OSDCOMMAND_LIST_NETWORK_ADAPTERS ";nlist", "0", OPTION_COMMAND, "list available network adapters" },
// debugging options
{ NULL, NULL, OPTION_HEADER, "OSD DEBUGGING OPTIONS" },
{ OSDOPTION_DEBUGGER, OSDOPTVAL_AUTO, OPTION_STRING, "debugger used: " },
{ OSDOPTION_DEBUGGER_FONT ";dfont", OSDOPTVAL_AUTO, OPTION_STRING, "specifies the font to use for debugging" },
{ OSDOPTION_DEBUGGER_FONT_SIZE ";dfontsize", "0", OPTION_FLOAT, "specifies the font size to use for debugging" },
{ OSDOPTION_WATCHDOG ";wdog", "0", OPTION_INTEGER, "force the program to terminate if no updates within specified number of seconds" },
// performance options
{ NULL, NULL, OPTION_HEADER, "OSD PERFORMANCE OPTIONS" },
{ OSDOPTION_MULTITHREADING ";mt", "0", OPTION_BOOLEAN, "enable multithreading; this enables rendering and blitting on a separate thread" },
{ OSDOPTION_NUMPROCESSORS ";np", OSDOPTVAL_AUTO, OPTION_STRING, "number of processors; this overrides the number the system reports" },
{ OSDOPTION_BENCH, "0", OPTION_INTEGER, "benchmark for the given number of emulated seconds; implies -video none -sound none -nothrottle" },
// video options
{ NULL, NULL, OPTION_HEADER, "OSD VIDEO OPTIONS" },
// OS X can be trusted to have working hardware OpenGL, so default to it on for the best user experience
{ OSDOPTION_VIDEO, OSDOPTVAL_AUTO, OPTION_STRING, "video output method: " },
@ -85,7 +89,6 @@ const options_entry osd_options::s_option_entries[] =
{ OSDOPTION_PRESCALE, "1", OPTION_INTEGER, "scale screen rendering by this amount in software" },
#if USE_OPENGL
// OpenGL specific options
{ NULL, NULL, OPTION_HEADER, "OpenGL-SPECIFIC OPTIONS" },
{ OSDOPTION_GL_FORCEPOW2TEXTURE, "0", OPTION_BOOLEAN, "force power of two textures (default no)" },
{ OSDOPTION_GL_NOTEXTURERECT, "0", OPTION_BOOLEAN, "don't use OpenGL GL_ARB_texture_rectangle (default on)" },
@ -115,7 +118,6 @@ const options_entry osd_options::s_option_entries[] =
{ OSDOPTION_SHADER_SCREEN "9", OSDOPTVAL_NONE, OPTION_STRING, "custom OpenGL GLSL shader screen bitmap 9" },
#endif
// sound options
{ NULL, NULL, OPTION_HEADER, "OSD SOUND OPTIONS" },
{ OSDOPTION_SOUND, OSDOPTVAL_AUTO, OPTION_STRING, "sound output method: " },
{ OSDOPTION_AUDIO_LATENCY "(1-5)", "2", OPTION_INTEGER, "set audio latency (increase to reduce glitches, decrease for responsiveness)" },

View File

@ -26,6 +26,8 @@
// Defines
//============================================================
#define OSDOPTION_UIMODEKEY "uimodekey"
#define OSDCOMMAND_LIST_MIDI_DEVICES "listmidi"
#define OSDCOMMAND_LIST_NETWORK_ADAPTERS "listnetwork"
@ -54,9 +56,6 @@
#define OSDOPTION_SWITCHRES "switchres"
#define OSDOPTION_SOUND "sound"
#define OSDOPTION_AUDIO_LATENCY "audio_latency"
#define OSDOPTION_FILTER "filter"
#define OSDOPTION_PRESCALE "prescale"
@ -69,6 +68,9 @@
#define OSDOPTION_GL_NOTEXTURERECT "gl_notexturerect"
#define OSDOPTION_GL_FORCEPOW2TEXTURE "gl_forcepow2texture"
#define OSDOPTION_SOUND "sound"
#define OSDOPTION_AUDIO_LATENCY "audio_latency"
#define OSDOPTION_AUDIO_OUTPUT "audio_output"
#define OSDOPTION_AUDIO_EFFECT "audio_effect"
@ -87,6 +89,9 @@ public:
// construction/destruction
osd_options();
// keyboard mapping
const char *ui_mode_key() const { return value(OSDOPTION_UIMODEKEY); }
// debugging options
const char *debugger() const { return value(OSDOPTION_DEBUGGER); }
const char *debugger_font() const { return value(OSDOPTION_DEBUGGER_FONT); }
@ -121,11 +126,7 @@ public:
// full screen options
bool switch_res() const { return bool_value(OSDOPTION_SWITCHRES); }
// sound options
const char *sound() const { return value(OSDOPTION_SOUND); }
int audio_latency() const { return int_value(OSDOPTION_AUDIO_LATENCY); }
// video options
// accelerated video options
bool filter() const { return bool_value(OSDOPTION_FILTER); }
int prescale() const { return int_value(OSDOPTION_PRESCALE); }
@ -139,6 +140,10 @@ public:
const char *shader_mame(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_SHADER_MAME, index); return value(temp.c_str()); }
const char *shader_screen(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_SHADER_SCREEN, index); return value(temp.c_str()); }
// sound options
const char *sound() const { return value(OSDOPTION_SOUND); }
int audio_latency() const { return int_value(OSDOPTION_AUDIO_LATENCY); }
// CoreAudio specific options
const char *audio_output() const { return value(OSDOPTION_AUDIO_OUTPUT); }
const char *audio_effect(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_AUDIO_EFFECT, index); return value(temp.c_str()); }

View File

@ -374,11 +374,6 @@ errout:
int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shader_file, int verbose )
{
int err = 0, i, c;
FILE * file = NULL;
int buffer_len = 8192;
GLcharARB *buffer=NULL;
if(shader==NULL || shader_file==NULL)
{
if(shader==NULL)
@ -388,7 +383,7 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
return -1;
}
file = fopen(shader_file, "r");
FILE *const file = fopen(shader_file, "r");
if(!file)
{
osd_printf_warning("cannot open shader_file: %s\n", shader_file);
@ -397,23 +392,20 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
// get the real file size
fseek(file, 0, SEEK_END);
buffer_len = (int)ftell(file);
int const buffer_len = (int)ftell(file);
fseek(file, 0, SEEK_SET);
buffer = (GLcharARB *) malloc(buffer_len);
memset(buffer, 0, buffer_len);
GLcharARB *const buffer = (GLcharARB *)malloc(buffer_len + 1);
memset(buffer, 0, buffer_len + 1);
/* Load Shader Sources */
i=0;
while( i<buffer_len-1 && EOF!=(c=fgetc(file)) )
buffer[i++]=(char)c;
/* Load Shader Sources */
for( int i = 0, c = 0; i<buffer_len && EOF!=(c=fgetc(file)); i++ )
buffer[i]=(char)c;
fclose(file);
buffer[i]='\0';
err=gl_compile_shader_source(shader, type, buffer, verbose);
if(err) goto errout;
int const err=gl_compile_shader_source(shader, type, buffer, verbose);
free(buffer);
if(err) goto errout;
if(verbose)
osd_printf_warning("shader file: %s\n", shader_file);
@ -421,9 +413,8 @@ int gl_compile_shader_file( GLhandleARB *shader, GLenum type, const char * shade
return 0;
errout:
free(buffer);
osd_printf_warning("failed to process shader_file: %s\n", shader_file);
return err;
return err;
}

View File

@ -2067,7 +2067,7 @@ void sdl_osd_interface::customize_input_type_list(simple_list<input_type_entry>
input_item_id mameid_code;
input_code ui_code;
input_type_entry *entry;
const char* uimode;
const char* uimode;
char fullmode[64];
// loop over the defaults

View File

@ -48,7 +48,6 @@
#define SDLOPTION_SYNCREFRESH "syncrefresh"
#define SDLOPTION_KEYMAP "keymap"
#define SDLOPTION_KEYMAP_FILE "keymap_file"
#define SDLOPTION_UIMODEKEY "uimodekey"
#define SDLOPTION_SIXAXIS "sixaxis"
#define SDLOPTION_JOYINDEX "joy_idx"
@ -118,7 +117,6 @@ public:
// keyboard mapping
bool keymap() const { return bool_value(SDLOPTION_KEYMAP); }
const char *keymap_file() const { return value(SDLOPTION_KEYMAP_FILE); }
const char *ui_mode_key() const { return value(SDLOPTION_UIMODEKEY); }
// joystick mapping
const char *joy_index(int index) const { std::string temp; return value(strformat(temp, "%s%d", SDLOPTION_JOYINDEX, index).c_str()); }

View File

@ -117,11 +117,6 @@ const options_entry sdl_options::s_option_entries[] =
{ NULL, NULL, OPTION_HEADER, "SDL KEYBOARD MAPPING" },
{ SDLOPTION_KEYMAP, "0", OPTION_BOOLEAN, "enable keymap" },
{ SDLOPTION_KEYMAP_FILE, "keymap.dat", OPTION_STRING, "keymap filename" },
#ifdef SDLMAME_MACOSX
{ SDLOPTION_UIMODEKEY, "DEL", OPTION_STRING, "Key to toggle keyboard mode" },
#else
{ SDLOPTION_UIMODEKEY, "SCRLOCK", OPTION_STRING, "Key to toggle keyboard mode" },
#endif // SDLMAME_MACOSX
// joystick mapping
{ NULL, NULL, OPTION_HEADER, "SDL JOYSTICK MAPPING" },

View File

@ -52,11 +52,6 @@ enum
#define MAX_KEYS 256
#define MAME_KEY 0
#define DI_KEY 1
#define VIRTUAL_KEY 2
#define ASCII_KEY 3
//============================================================
@ -270,118 +265,126 @@ static const TCHAR *default_pov_name(int which);
//============================================================
// master keyboard translation table
static const int win_key_trans_table[][4] =
struct key_trans_entry {
input_item_id mame_key;
INT32 di_key;
char virtual_key;
char ascii_key;
char const * mame_key_name;
};
#define KEY_TRANS_ENTRY(mame, di, virtual, ascii) { ITEM_ID_##mame, DIK_##di, virtual, ascii, "ITEM_ID_"#mame }
static const key_trans_entry win_key_trans_table[] =
{
// MAME key dinput key virtual key ascii
{ ITEM_ID_ESC, DIK_ESCAPE, VK_ESCAPE, 27 },
{ ITEM_ID_1, DIK_1, '1', '1' },
{ ITEM_ID_2, DIK_2, '2', '2' },
{ ITEM_ID_3, DIK_3, '3', '3' },
{ ITEM_ID_4, DIK_4, '4', '4' },
{ ITEM_ID_5, DIK_5, '5', '5' },
{ ITEM_ID_6, DIK_6, '6', '6' },
{ ITEM_ID_7, DIK_7, '7', '7' },
{ ITEM_ID_8, DIK_8, '8', '8' },
{ ITEM_ID_9, DIK_9, '9', '9' },
{ ITEM_ID_0, DIK_0, '0', '0' },
{ ITEM_ID_MINUS, DIK_MINUS, VK_OEM_MINUS, '-' },
{ ITEM_ID_EQUALS, DIK_EQUALS, VK_OEM_PLUS, '=' },
{ ITEM_ID_BACKSPACE, DIK_BACK, VK_BACK, 8 },
{ ITEM_ID_TAB, DIK_TAB, VK_TAB, 9 },
{ ITEM_ID_Q, DIK_Q, 'Q', 'Q' },
{ ITEM_ID_W, DIK_W, 'W', 'W' },
{ ITEM_ID_E, DIK_E, 'E', 'E' },
{ ITEM_ID_R, DIK_R, 'R', 'R' },
{ ITEM_ID_T, DIK_T, 'T', 'T' },
{ ITEM_ID_Y, DIK_Y, 'Y', 'Y' },
{ ITEM_ID_U, DIK_U, 'U', 'U' },
{ ITEM_ID_I, DIK_I, 'I', 'I' },
{ ITEM_ID_O, DIK_O, 'O', 'O' },
{ ITEM_ID_P, DIK_P, 'P', 'P' },
{ ITEM_ID_OPENBRACE, DIK_LBRACKET, VK_OEM_4, '[' },
{ ITEM_ID_CLOSEBRACE, DIK_RBRACKET, VK_OEM_6, ']' },
{ ITEM_ID_ENTER, DIK_RETURN, VK_RETURN, 13 },
{ ITEM_ID_LCONTROL, DIK_LCONTROL, VK_LCONTROL, 0 },
{ ITEM_ID_A, DIK_A, 'A', 'A' },
{ ITEM_ID_S, DIK_S, 'S', 'S' },
{ ITEM_ID_D, DIK_D, 'D', 'D' },
{ ITEM_ID_F, DIK_F, 'F', 'F' },
{ ITEM_ID_G, DIK_G, 'G', 'G' },
{ ITEM_ID_H, DIK_H, 'H', 'H' },
{ ITEM_ID_J, DIK_J, 'J', 'J' },
{ ITEM_ID_K, DIK_K, 'K', 'K' },
{ ITEM_ID_L, DIK_L, 'L', 'L' },
{ ITEM_ID_COLON, DIK_SEMICOLON, VK_OEM_1, ';' },
{ ITEM_ID_QUOTE, DIK_APOSTROPHE, VK_OEM_7, '\'' },
{ ITEM_ID_TILDE, DIK_GRAVE, VK_OEM_3, '`' },
{ ITEM_ID_LSHIFT, DIK_LSHIFT, VK_LSHIFT, 0 },
{ ITEM_ID_BACKSLASH, DIK_BACKSLASH, VK_OEM_5, '\\' },
{ ITEM_ID_BACKSLASH2, DIK_OEM_102, VK_OEM_102, '<' },
{ ITEM_ID_Z, DIK_Z, 'Z', 'Z' },
{ ITEM_ID_X, DIK_X, 'X', 'X' },
{ ITEM_ID_C, DIK_C, 'C', 'C' },
{ ITEM_ID_V, DIK_V, 'V', 'V' },
{ ITEM_ID_B, DIK_B, 'B', 'B' },
{ ITEM_ID_N, DIK_N, 'N', 'N' },
{ ITEM_ID_M, DIK_M, 'M', 'M' },
{ ITEM_ID_COMMA, DIK_COMMA, VK_OEM_COMMA, ',' },
{ ITEM_ID_STOP, DIK_PERIOD, VK_OEM_PERIOD, '.' },
{ ITEM_ID_SLASH, DIK_SLASH, VK_OEM_2, '/' },
{ ITEM_ID_RSHIFT, DIK_RSHIFT, VK_RSHIFT, 0 },
{ ITEM_ID_ASTERISK, DIK_MULTIPLY, VK_MULTIPLY, '*' },
{ ITEM_ID_LALT, DIK_LMENU, VK_LMENU, 0 },
{ ITEM_ID_SPACE, DIK_SPACE, VK_SPACE, ' ' },
{ ITEM_ID_CAPSLOCK, DIK_CAPITAL, VK_CAPITAL, 0 },
{ ITEM_ID_F1, DIK_F1, VK_F1, 0 },
{ ITEM_ID_F2, DIK_F2, VK_F2, 0 },
{ ITEM_ID_F3, DIK_F3, VK_F3, 0 },
{ ITEM_ID_F4, DIK_F4, VK_F4, 0 },
{ ITEM_ID_F5, DIK_F5, VK_F5, 0 },
{ ITEM_ID_F6, DIK_F6, VK_F6, 0 },
{ ITEM_ID_F7, DIK_F7, VK_F7, 0 },
{ ITEM_ID_F8, DIK_F8, VK_F8, 0 },
{ ITEM_ID_F9, DIK_F9, VK_F9, 0 },
{ ITEM_ID_F10, DIK_F10, VK_F10, 0 },
{ ITEM_ID_NUMLOCK, DIK_NUMLOCK, VK_NUMLOCK, 0 },
{ ITEM_ID_SCRLOCK, DIK_SCROLL, VK_SCROLL, 0 },
{ ITEM_ID_7_PAD, DIK_NUMPAD7, VK_NUMPAD7, 0 },
{ ITEM_ID_8_PAD, DIK_NUMPAD8, VK_NUMPAD8, 0 },
{ ITEM_ID_9_PAD, DIK_NUMPAD9, VK_NUMPAD9, 0 },
{ ITEM_ID_MINUS_PAD, DIK_SUBTRACT, VK_SUBTRACT, 0 },
{ ITEM_ID_4_PAD, DIK_NUMPAD4, VK_NUMPAD4, 0 },
{ ITEM_ID_5_PAD, DIK_NUMPAD5, VK_NUMPAD5, 0 },
{ ITEM_ID_6_PAD, DIK_NUMPAD6, VK_NUMPAD6, 0 },
{ ITEM_ID_PLUS_PAD, DIK_ADD, VK_ADD, 0 },
{ ITEM_ID_1_PAD, DIK_NUMPAD1, VK_NUMPAD1, 0 },
{ ITEM_ID_2_PAD, DIK_NUMPAD2, VK_NUMPAD2, 0 },
{ ITEM_ID_3_PAD, DIK_NUMPAD3, VK_NUMPAD3, 0 },
{ ITEM_ID_0_PAD, DIK_NUMPAD0, VK_NUMPAD0, 0 },
{ ITEM_ID_DEL_PAD, DIK_DECIMAL, VK_DECIMAL, 0 },
{ ITEM_ID_F11, DIK_F11, VK_F11, 0 },
{ ITEM_ID_F12, DIK_F12, VK_F12, 0 },
{ ITEM_ID_F13, DIK_F13, VK_F13, 0 },
{ ITEM_ID_F14, DIK_F14, VK_F14, 0 },
{ ITEM_ID_F15, DIK_F15, VK_F15, 0 },
{ ITEM_ID_ENTER_PAD, DIK_NUMPADENTER, VK_RETURN, 0 },
{ ITEM_ID_RCONTROL, DIK_RCONTROL, VK_RCONTROL, 0 },
{ ITEM_ID_SLASH_PAD, DIK_DIVIDE, VK_DIVIDE, 0 },
{ ITEM_ID_PRTSCR, DIK_SYSRQ, 0, 0 },
{ ITEM_ID_RALT, DIK_RMENU, VK_RMENU, 0 },
{ ITEM_ID_HOME, DIK_HOME, VK_HOME, 0 },
{ ITEM_ID_UP, DIK_UP, VK_UP, 0 },
{ ITEM_ID_PGUP, DIK_PRIOR, VK_PRIOR, 0 },
{ ITEM_ID_LEFT, DIK_LEFT, VK_LEFT, 0 },
{ ITEM_ID_RIGHT, DIK_RIGHT, VK_RIGHT, 0 },
{ ITEM_ID_END, DIK_END, VK_END, 0 },
{ ITEM_ID_DOWN, DIK_DOWN, VK_DOWN, 0 },
{ ITEM_ID_PGDN, DIK_NEXT, VK_NEXT, 0 },
{ ITEM_ID_INSERT, DIK_INSERT, VK_INSERT, 0 },
{ ITEM_ID_DEL, DIK_DELETE, VK_DELETE, 0 },
{ ITEM_ID_LWIN, DIK_LWIN, VK_LWIN, 0 },
{ ITEM_ID_RWIN, DIK_RWIN, VK_RWIN, 0 },
{ ITEM_ID_MENU, DIK_APPS, VK_APPS, 0 },
{ ITEM_ID_PAUSE, DIK_PAUSE, VK_PAUSE, 0 },
{ ITEM_ID_CANCEL, 0, VK_CANCEL, 0 },
// MAME key dinput key virtual key ascii
KEY_TRANS_ENTRY(ESC, ESCAPE, VK_ESCAPE, 27),
KEY_TRANS_ENTRY(1, 1, '1', '1'),
KEY_TRANS_ENTRY(2, 2, '2', '2'),
KEY_TRANS_ENTRY(3, 3, '3', '3'),
KEY_TRANS_ENTRY(4, 4, '4', '4'),
KEY_TRANS_ENTRY(5, 5, '5', '5'),
KEY_TRANS_ENTRY(6, 6, '6', '6'),
KEY_TRANS_ENTRY(7, 7, '7', '7'),
KEY_TRANS_ENTRY(8, 8, '8', '8'),
KEY_TRANS_ENTRY(9, 9, '9', '9'),
KEY_TRANS_ENTRY(0, 0, '0', '0'),
KEY_TRANS_ENTRY(MINUS, MINUS, VK_OEM_MINUS, '-'),
KEY_TRANS_ENTRY(EQUALS, EQUALS, VK_OEM_PLUS, '='),
KEY_TRANS_ENTRY(BACKSPACE, BACK, VK_BACK, 8),
KEY_TRANS_ENTRY(TAB, TAB, VK_TAB, 9),
KEY_TRANS_ENTRY(Q, Q, 'Q', 'Q'),
KEY_TRANS_ENTRY(W, W, 'W', 'W'),
KEY_TRANS_ENTRY(E, E, 'E', 'E'),
KEY_TRANS_ENTRY(R, R, 'R', 'R'),
KEY_TRANS_ENTRY(T, T, 'T', 'T'),
KEY_TRANS_ENTRY(Y, Y, 'Y', 'Y'),
KEY_TRANS_ENTRY(U, U, 'U', 'U'),
KEY_TRANS_ENTRY(I, I, 'I', 'I'),
KEY_TRANS_ENTRY(O, O, 'O', 'O'),
KEY_TRANS_ENTRY(P, P, 'P', 'P'),
KEY_TRANS_ENTRY(OPENBRACE, LBRACKET, VK_OEM_4, '['),
KEY_TRANS_ENTRY(CLOSEBRACE, RBRACKET, VK_OEM_6, ']'),
KEY_TRANS_ENTRY(ENTER, RETURN, VK_RETURN, 13),
KEY_TRANS_ENTRY(LCONTROL, LCONTROL, VK_LCONTROL, 0),
KEY_TRANS_ENTRY(A, A, 'A', 'A'),
KEY_TRANS_ENTRY(S, S, 'S', 'S'),
KEY_TRANS_ENTRY(D, D, 'D', 'D'),
KEY_TRANS_ENTRY(F, F, 'F', 'F'),
KEY_TRANS_ENTRY(G, G, 'G', 'G'),
KEY_TRANS_ENTRY(H, H, 'H', 'H'),
KEY_TRANS_ENTRY(J, J, 'J', 'J'),
KEY_TRANS_ENTRY(K, K, 'K', 'K'),
KEY_TRANS_ENTRY(L, L, 'L', 'L'),
KEY_TRANS_ENTRY(COLON, SEMICOLON, VK_OEM_1, ';'),
KEY_TRANS_ENTRY(QUOTE, APOSTROPHE, VK_OEM_7, '\''),
KEY_TRANS_ENTRY(TILDE, GRAVE, VK_OEM_3, '`'),
KEY_TRANS_ENTRY(LSHIFT, LSHIFT, VK_LSHIFT, 0),
KEY_TRANS_ENTRY(BACKSLASH, BACKSLASH, VK_OEM_5, '\\'),
KEY_TRANS_ENTRY(BACKSLASH2, OEM_102, VK_OEM_102, '<'),
KEY_TRANS_ENTRY(Z, Z, 'Z', 'Z'),
KEY_TRANS_ENTRY(X, X, 'X', 'X'),
KEY_TRANS_ENTRY(C, C, 'C', 'C'),
KEY_TRANS_ENTRY(V, V, 'V', 'V'),
KEY_TRANS_ENTRY(B, B, 'B', 'B'),
KEY_TRANS_ENTRY(N, N, 'N', 'N'),
KEY_TRANS_ENTRY(M, M, 'M', 'M'),
KEY_TRANS_ENTRY(COMMA, COMMA, VK_OEM_COMMA, ','),
KEY_TRANS_ENTRY(STOP, PERIOD, VK_OEM_PERIOD, '.'),
KEY_TRANS_ENTRY(SLASH, SLASH, VK_OEM_2, '/'),
KEY_TRANS_ENTRY(RSHIFT, RSHIFT, VK_RSHIFT, 0),
KEY_TRANS_ENTRY(ASTERISK, MULTIPLY, VK_MULTIPLY, '*'),
KEY_TRANS_ENTRY(LALT, LMENU, VK_LMENU, 0),
KEY_TRANS_ENTRY(SPACE, SPACE, VK_SPACE, ' '),
KEY_TRANS_ENTRY(CAPSLOCK, CAPITAL, VK_CAPITAL, 0),
KEY_TRANS_ENTRY(F1, F1, VK_F1, 0),
KEY_TRANS_ENTRY(F2, F2, VK_F2, 0),
KEY_TRANS_ENTRY(F3, F3, VK_F3, 0),
KEY_TRANS_ENTRY(F4, F4, VK_F4, 0),
KEY_TRANS_ENTRY(F5, F5, VK_F5, 0),
KEY_TRANS_ENTRY(F6, F6, VK_F6, 0),
KEY_TRANS_ENTRY(F7, F7, VK_F7, 0),
KEY_TRANS_ENTRY(F8, F8, VK_F8, 0),
KEY_TRANS_ENTRY(F9, F9, VK_F9, 0),
KEY_TRANS_ENTRY(F10, F10, VK_F10, 0),
KEY_TRANS_ENTRY(NUMLOCK, NUMLOCK, VK_NUMLOCK, 0),
KEY_TRANS_ENTRY(SCRLOCK, SCROLL, VK_SCROLL, 0),
KEY_TRANS_ENTRY(7_PAD, NUMPAD7, VK_NUMPAD7, 0),
KEY_TRANS_ENTRY(8_PAD, NUMPAD8, VK_NUMPAD8, 0),
KEY_TRANS_ENTRY(9_PAD, NUMPAD9, VK_NUMPAD9, 0),
KEY_TRANS_ENTRY(MINUS_PAD, SUBTRACT, VK_SUBTRACT, 0),
KEY_TRANS_ENTRY(4_PAD, NUMPAD4, VK_NUMPAD4, 0),
KEY_TRANS_ENTRY(5_PAD, NUMPAD5, VK_NUMPAD5, 0),
KEY_TRANS_ENTRY(6_PAD, NUMPAD6, VK_NUMPAD6, 0),
KEY_TRANS_ENTRY(PLUS_PAD, ADD, VK_ADD, 0),
KEY_TRANS_ENTRY(1_PAD, NUMPAD1, VK_NUMPAD1, 0),
KEY_TRANS_ENTRY(2_PAD, NUMPAD2, VK_NUMPAD2, 0),
KEY_TRANS_ENTRY(3_PAD, NUMPAD3, VK_NUMPAD3, 0),
KEY_TRANS_ENTRY(0_PAD, NUMPAD0, VK_NUMPAD0, 0),
KEY_TRANS_ENTRY(DEL_PAD, DECIMAL, VK_DECIMAL, 0),
KEY_TRANS_ENTRY(F11, F11, VK_F11, 0),
KEY_TRANS_ENTRY(F12, F12, VK_F12, 0),
KEY_TRANS_ENTRY(F13, F13, VK_F13, 0),
KEY_TRANS_ENTRY(F14, F14, VK_F14, 0),
KEY_TRANS_ENTRY(F15, F15, VK_F15, 0),
KEY_TRANS_ENTRY(ENTER_PAD, NUMPADENTER, VK_RETURN, 0),
KEY_TRANS_ENTRY(RCONTROL, RCONTROL, VK_RCONTROL, 0),
KEY_TRANS_ENTRY(SLASH_PAD, DIVIDE, VK_DIVIDE, 0),
KEY_TRANS_ENTRY(PRTSCR, SYSRQ, 0, 0),
KEY_TRANS_ENTRY(RALT, RMENU, VK_RMENU, 0),
KEY_TRANS_ENTRY(HOME, HOME, VK_HOME, 0),
KEY_TRANS_ENTRY(UP, UP, VK_UP, 0),
KEY_TRANS_ENTRY(PGUP, PRIOR, VK_PRIOR, 0),
KEY_TRANS_ENTRY(LEFT, LEFT, VK_LEFT, 0),
KEY_TRANS_ENTRY(RIGHT, RIGHT, VK_RIGHT, 0),
KEY_TRANS_ENTRY(END, END, VK_END, 0),
KEY_TRANS_ENTRY(DOWN, DOWN, VK_DOWN, 0),
KEY_TRANS_ENTRY(PGDN, NEXT, VK_NEXT, 0),
KEY_TRANS_ENTRY(INSERT, INSERT, VK_INSERT, 0),
KEY_TRANS_ENTRY(DEL, DELETE, VK_DELETE, 0),
KEY_TRANS_ENTRY(LWIN, LWIN, VK_LWIN, 0),
KEY_TRANS_ENTRY(RWIN, RWIN, VK_RWIN, 0),
KEY_TRANS_ENTRY(MENU, APPS, VK_APPS, 0),
KEY_TRANS_ENTRY(PAUSE, PAUSE, VK_PAUSE, 0),
{ ITEM_ID_CANCEL, 0, VK_CANCEL, 0, "ITEM_ID_CANCEL" },
// New keys introduced in Windows 2000. These have no MAME codes to
// preserve compatibility with old config files that may refer to them
@ -391,18 +394,18 @@ static const int win_key_trans_table[][4] =
// paused). Some codes are missing because the mapping to vkey codes
// isn't clear, and MapVirtualKey is no help.
{ ITEM_ID_OTHER_SWITCH, DIK_MUTE, VK_VOLUME_MUTE, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_VOLUMEDOWN, VK_VOLUME_DOWN, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_VOLUMEUP, VK_VOLUME_UP, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBHOME, VK_BROWSER_HOME, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBSEARCH, VK_BROWSER_SEARCH, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBFAVORITES, VK_BROWSER_FAVORITES, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBREFRESH, VK_BROWSER_REFRESH, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBSTOP, VK_BROWSER_STOP, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBFORWARD, VK_BROWSER_FORWARD, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_WEBBACK, VK_BROWSER_BACK, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_MAIL, VK_LAUNCH_MAIL, 0 },
{ ITEM_ID_OTHER_SWITCH, DIK_MEDIASELECT, VK_LAUNCH_MEDIA_SELECT, 0 },
KEY_TRANS_ENTRY(OTHER_SWITCH, MUTE, VK_VOLUME_MUTE, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, VOLUMEDOWN, VK_VOLUME_DOWN, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, VOLUMEUP, VK_VOLUME_UP, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBHOME, VK_BROWSER_HOME, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBSEARCH, VK_BROWSER_SEARCH, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBFAVORITES, VK_BROWSER_FAVORITES, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBREFRESH, VK_BROWSER_REFRESH, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBSTOP, VK_BROWSER_STOP, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBFORWARD, VK_BROWSER_FORWARD, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, WEBBACK, VK_BROWSER_BACK, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, MAIL, VK_LAUNCH_MAIL, 0),
KEY_TRANS_ENTRY(OTHER_SWITCH, MEDIASELECT, VK_LAUNCH_MEDIA_SELECT, 0),
};
@ -424,8 +427,8 @@ INLINE input_item_id keyboard_map_scancode_to_itemid(int scancode)
// scan the table for a match
for (tablenum = 0; tablenum < ARRAY_LENGTH(win_key_trans_table); tablenum++)
if (win_key_trans_table[tablenum][DI_KEY] == scancode)
return (input_item_id)win_key_trans_table[tablenum][MAME_KEY];
if (win_key_trans_table[tablenum].di_key == scancode)
return (input_item_id)win_key_trans_table[tablenum].mame_key;
// default to an "other" switch
return ITEM_ID_OTHER_SWITCH;
@ -706,13 +709,37 @@ int wininput_vkey_for_mame_code(input_code code)
// scan the table for a match
for (tablenum = 0; tablenum < ARRAY_LENGTH(win_key_trans_table); tablenum++)
if (win_key_trans_table[tablenum][MAME_KEY] == id)
return win_key_trans_table[tablenum][VIRTUAL_KEY];
if (win_key_trans_table[tablenum].mame_key == id)
return win_key_trans_table[tablenum].virtual_key;
}
return 0;
}
//============================================================
// lookup_mame_code
//============================================================
static int lookup_mame_index(const char *scode)
{
for (int i = 0; i < ARRAY_LENGTH(win_key_trans_table); i++)
{
if (!strcmp(scode, win_key_trans_table[i].mame_key_name))
return i;
}
return -1;
}
static input_item_id lookup_mame_code(const char *scode)
{
int const index = lookup_mame_index(scode);
if (index >= 0)
return win_key_trans_table[index].mame_key;
else
return ITEM_ID_INVALID;
}
//============================================================
// customize_input_type_list
//============================================================
@ -720,6 +747,7 @@ int wininput_vkey_for_mame_code(input_code code)
void windows_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist)
{
input_type_entry *entry;
const char* uimode;
// loop over the defaults
for (entry = typelist.first(); entry != NULL; entry = entry->next())
@ -731,6 +759,22 @@ void windows_osd_interface::customize_input_type_list(simple_list<input_type_ent
entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT);
break;
// configurable UI mode switch
case IPT_UI_TOGGLE_UI:
uimode = options().ui_mode_key();
if (strcmp(uimode,"auto"))
{
std::string fullmode = "ITEM_ID_";
fullmode += uimode;
input_item_id const mameid_code = lookup_mame_code(fullmode.c_str());
if (ITEM_ID_INVALID != mameid_code)
{
input_code const ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code));
entry->defseq(SEQ_TYPE_STANDARD).set(ui_code);
}
}
break;
// alt-enter for fullscreen
case IPT_OSD_1:
entry->configure_osd("TOGGLE_FULLSCREEN", "Toggle Fullscreen");
@ -1010,10 +1054,10 @@ static void win32_keyboard_poll(device_info *devinfo)
// iterate over keys
for (keynum = 0; keynum < ARRAY_LENGTH(win_key_trans_table); keynum++)
{
int vk = win_key_trans_table[keynum][VIRTUAL_KEY];
int vk = win_key_trans_table[keynum].virtual_key;
if (vk != 0 && (GetAsyncKeyState(vk) & 0x8000) != 0)
{
int dik = win_key_trans_table[keynum][DI_KEY];
int dik = win_key_trans_table[keynum].di_key;
// conver the VK code to a scancode (DIK code)
if (dik != 0)