Conflict resolution (nw)
@ -1,5 +1,6 @@
|
||||
The source code to MAME is provided under the GNU General Public License version 2 or later as of Git revision 35ccf865aa366845b574e1fdbc71c4866b3d6a0f and the upcoming release of MAME 0.172. Source files may also be licensed as specified in the file header. This license does not apply to prior versions of MAME.
|
||||
<br />MAME is a registered trademark of Nicola Salmoria.
|
||||
The source code to MAME is provided under the GNU General Public License version 2 or later as of Git revision 35ccf865aa366845b574e1fdbc71c4866b3d6a0f and the release of MAME 0.172. Source files may also be licensed as specified in the file header. This license does not apply to prior versions of MAME.
|
||||
|
||||
MAME is a registered trademark of Nicola Salmoria.
|
||||
|
||||
The text of version 2 of the GNU General Public License follows.
|
||||
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.5 KiB |
6
makefile
@ -1436,9 +1436,9 @@ $(GENDIR)/includes/SDL2:
|
||||
-$(call MKDIR,$@)
|
||||
-$(call COPY,3rdparty/SDL2/include/,$(GENDIR)/includes/SDL2)
|
||||
|
||||
$(GENDIR)/%.lh: $(SRC)/%.lay scripts/build/file2str.py | $(GEN_FOLDERS)
|
||||
@echo Converting $<...
|
||||
$(SILENT)$(PYTHON) scripts/build/file2str.py $< $@ layout_$(basename $(notdir $<))
|
||||
$(GENDIR)/%.lh: $(SRC)/%.lay scripts/build/complay.py | $(GEN_FOLDERS)
|
||||
@echo Compressing $<...
|
||||
$(SILENT)$(PYTHON) scripts/build/complay.py $< $@ layout_$(basename $(notdir $<))
|
||||
|
||||
$(SRC)/devices/cpu/m68000/m68kops.cpp: $(SRC)/devices/cpu/m68000/m68k_in.cpp $(SRC)/devices/cpu/m68000/m68kmake.cpp
|
||||
ifeq ($(TARGETOS),asmjs)
|
||||
|
@ -170,12 +170,10 @@ function hiscore.startplugin()
|
||||
|
||||
local function check_scores ( posdata )
|
||||
local r = 0;
|
||||
-- commonly the first entry will be for the entire table
|
||||
-- so it will only trigger a write once a player enters
|
||||
-- his/her name in.
|
||||
local row = positions[1];
|
||||
for i=0,row["size"]-1 do
|
||||
for ri,row in ipairs(posdata) do
|
||||
for i=0,row["size"]-1 do
|
||||
r = r + row["mem"]:read_u8( row["addr"] + i );
|
||||
end
|
||||
end
|
||||
return r;
|
||||
end
|
||||
|
69
scripts/build/complay.py
Normal file
@ -0,0 +1,69 @@
|
||||
#!/usr/bin/python
|
||||
##
|
||||
## license:BSD-3-Clause
|
||||
## copyright-holders:Aaron Giles, Andrew Gardner
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import sys
|
||||
import os
|
||||
import zlib
|
||||
|
||||
if len(sys.argv) < 4:
|
||||
print('Usage:')
|
||||
print(' complay <source.lay> <output.h> <varname>')
|
||||
print('')
|
||||
sys.exit(0)
|
||||
|
||||
srcfile = sys.argv[1]
|
||||
dstfile = sys.argv[2]
|
||||
varname = sys.argv[3]
|
||||
type = 'UINT8'
|
||||
|
||||
try:
|
||||
myfile = open(srcfile, 'rb')
|
||||
except IOError:
|
||||
sys.stderr.write("Unable to open source file '%s'\n" % srcfile)
|
||||
sys.exit(-1)
|
||||
|
||||
byteCount = os.path.getsize(srcfile)
|
||||
compsize = 0
|
||||
compressiontype = 1
|
||||
|
||||
try:
|
||||
dst = open(dstfile,'w')
|
||||
dst.write('const %s %s_data[] =\n{\n\t' % ( type, varname))
|
||||
offs = 0
|
||||
with open(srcfile, "rb") as src:
|
||||
while True:
|
||||
chunk = src.read(byteCount)
|
||||
if chunk:
|
||||
compchunk = bytearray(zlib.compress(chunk, 9))
|
||||
compsize = len(compchunk)
|
||||
for b in compchunk:
|
||||
dst.write('%d' % b)
|
||||
offs += 1
|
||||
if offs != compsize:
|
||||
dst.write(',')
|
||||
else:
|
||||
break
|
||||
dst.write('\n\t')
|
||||
|
||||
dst.write('\n};\n')
|
||||
|
||||
except IOError:
|
||||
sys.stderr.write("Unable to open output file '%s'\n" % dstfile)
|
||||
sys.exit(-1)
|
||||
|
||||
try:
|
||||
dst.write('extern const internal_layout %s;\n' % ( varname ))
|
||||
dst.write('const internal_layout %s = { \n\t' % ( varname ))
|
||||
dst.write('%d,%d,%d,%s_data\n' % ( byteCount, compsize, compressiontype, varname ))
|
||||
dst.write('\n};\n')
|
||||
|
||||
|
||||
dst.close()
|
||||
except IOError:
|
||||
sys.stderr.write("Unable to open output file '%s'\n" % dstfile)
|
||||
sys.exit(-1)
|
||||
|
@ -53,7 +53,7 @@ end
|
||||
|
||||
function layoutbuildtask(_folder, _name)
|
||||
return { MAME_DIR .. "src/".._folder.."/".. _name ..".lay" , GEN_DIR .. _folder .. "/".._name..".lh",
|
||||
{ MAME_DIR .. "scripts/build/file2str.py" }, {"@echo Converting src/".._folder.."/".._name..".lay...", PYTHON .. " $(1) $(<) $(@) layout_".._name }};
|
||||
{ MAME_DIR .. "scripts/build/complay.py" }, {"@echo Compressing src/".._folder.."/".._name..".lay...", PYTHON .. " $(1) $(<) $(@) layout_".._name }};
|
||||
end
|
||||
|
||||
function precompiledheaders()
|
||||
@ -748,17 +748,6 @@ if _OPTIONS["SYMBOLS"]~=nil and _OPTIONS["SYMBOLS"]~="0" then
|
||||
}
|
||||
end
|
||||
|
||||
--# add the optimization flag
|
||||
buildoptions {
|
||||
"-O".. _OPTIONS["OPTIMIZE"],
|
||||
"-fno-strict-aliasing"
|
||||
}
|
||||
configuration { "mingw-clang" }
|
||||
buildoptions {
|
||||
"-O1", -- without this executable crash often
|
||||
}
|
||||
configuration { }
|
||||
|
||||
-- add the error warning flag
|
||||
if _OPTIONS["NOWERROR"]==nil then
|
||||
buildoptions {
|
||||
@ -769,16 +758,9 @@ end
|
||||
-- if we are optimizing, include optimization options
|
||||
if _OPTIONS["OPTIMIZE"] then
|
||||
buildoptions {
|
||||
"-O".. _OPTIONS["OPTIMIZE"],
|
||||
"-fno-strict-aliasing"
|
||||
}
|
||||
if _OPTIONS["ARCHOPTS"] then
|
||||
buildoptions {
|
||||
_OPTIONS["ARCHOPTS"]
|
||||
}
|
||||
linkoptions {
|
||||
_OPTIONS["ARCHOPTS"]
|
||||
}
|
||||
end
|
||||
if _OPTIONS["OPT_FLAGS"] then
|
||||
buildoptions {
|
||||
_OPTIONS["OPT_FLAGS"]
|
||||
@ -831,6 +813,21 @@ if _OPTIONS["OPTIMIZE"] then
|
||||
end
|
||||
end
|
||||
|
||||
configuration { "mingw-clang" }
|
||||
buildoptions {
|
||||
"-O1", -- without this executable crash often
|
||||
}
|
||||
configuration { }
|
||||
|
||||
if _OPTIONS["ARCHOPTS"] then
|
||||
buildoptions {
|
||||
_OPTIONS["ARCHOPTS"]
|
||||
}
|
||||
linkoptions {
|
||||
_OPTIONS["ARCHOPTS"]
|
||||
}
|
||||
end
|
||||
|
||||
if _OPTIONS["SHLIB"] then
|
||||
buildoptions {
|
||||
"-fPIC"
|
||||
|
@ -2084,6 +2084,18 @@ if (MACHINES["TIMEKPR"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/tmc0430.h,MACHINES["TMC0430"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["TMC0430"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/tmc0430.cpp",
|
||||
MAME_DIR .. "src/devices/machine/tmc0430.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/tmp68301.h,MACHINES["TMP68301"] = true
|
||||
|
@ -68,7 +68,7 @@ project "netlist"
|
||||
MAME_DIR .. "src/lib/netlist/analog/nld_opamps.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_solver.cpp",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_solver.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_matrix_solver.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_matrix_solver.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct1.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct2.h",
|
||||
@ -77,6 +77,7 @@ project "netlist"
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_gmres.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/mat_cr.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_sm.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_w.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct_lu.h",
|
||||
MAME_DIR .. "src/lib/netlist/solver/vector_base.h",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp",
|
||||
|
@ -522,6 +522,7 @@ MACHINES["SMPC"] = true
|
||||
MACHINES["STVCD"] = true
|
||||
MACHINES["TC0091LVC"] = true
|
||||
MACHINES["TIMEKPR"] = true
|
||||
MACHINES["TMC0430"] = true
|
||||
MACHINES["TMP68301"] = true
|
||||
MACHINES["TMS5501"] = true
|
||||
MACHINES["TMS6100"] = true
|
||||
|
@ -240,7 +240,7 @@ void tms99xx_device::device_start()
|
||||
void tms99xx_device::device_stop()
|
||||
{
|
||||
int k = 0;
|
||||
if (TRACE_SETUP) logerror("tms99xx: Deleting lookup tables\n");
|
||||
if (TRACE_SETUP) logerror("Deleting lookup tables\n");
|
||||
while (m_lotables[k]!=nullptr) delete[] m_lotables[k++];
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ void tms99xx_device::resolve_lines()
|
||||
*/
|
||||
void tms99xx_device::device_reset()
|
||||
{
|
||||
if (TRACE_EMU) logerror("tms99xx: Device reset by emulator\n");
|
||||
if (TRACE_EMU) logerror("Device reset by emulator\n");
|
||||
m_reset = true;
|
||||
m_check_ready = false;
|
||||
m_wait_state = false;
|
||||
@ -1061,7 +1061,7 @@ void tms99xx_device::build_command_lookup_table()
|
||||
{
|
||||
inst = &s_command[i];
|
||||
table = m_command_lookup_table;
|
||||
if (TRACE_SETUP) logerror("tms99xx: === opcode=%04x, len=%d\n", inst->opcode, format_mask_len[inst->format]);
|
||||
if (TRACE_SETUP) logerror("=== opcode=%04x, len=%d\n", inst->opcode, format_mask_len[inst->format]);
|
||||
bitcount = 4;
|
||||
opcode = inst->opcode;
|
||||
cmdindex = (opcode>>12) & 0x000f;
|
||||
@ -1071,7 +1071,7 @@ void tms99xx_device::build_command_lookup_table()
|
||||
// Descend
|
||||
if (table[cmdindex].next_digit == nullptr)
|
||||
{
|
||||
if (TRACE_SETUP) logerror("tms99xx: create new table at bitcount=%d for index=%d\n", bitcount, cmdindex);
|
||||
if (TRACE_SETUP) logerror("create new table at bitcount=%d for index=%d\n", bitcount, cmdindex);
|
||||
table[cmdindex].next_digit = new lookup_entry[16];
|
||||
m_lotables[k++] = table[cmdindex].next_digit;
|
||||
for (int j=0; j < 16; j++)
|
||||
@ -1082,7 +1082,7 @@ void tms99xx_device::build_command_lookup_table()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_SETUP) logerror("tms99xx: found a table at bitcount=%d\n", bitcount);
|
||||
if (TRACE_SETUP) logerror("found a table at bitcount=%d\n", bitcount);
|
||||
}
|
||||
|
||||
table = table[cmdindex].next_digit;
|
||||
@ -1090,17 +1090,17 @@ void tms99xx_device::build_command_lookup_table()
|
||||
bitcount = bitcount+4;
|
||||
opcode <<= 4;
|
||||
cmdindex = (opcode>>12) & 0x000f;
|
||||
if (TRACE_SETUP) logerror("tms99xx: next index=%x\n", cmdindex);
|
||||
if (TRACE_SETUP) logerror("next index=%x\n", cmdindex);
|
||||
}
|
||||
|
||||
if (TRACE_SETUP) logerror("tms99xx: bitcount=%d\n", bitcount);
|
||||
if (TRACE_SETUP) logerror("bitcount=%d\n", bitcount);
|
||||
// We are at the target level
|
||||
// Need to fill in the same entry for all values in the bitcount
|
||||
// (if a command needs 10 bits we have to copy it four
|
||||
// times for all combinations with 12 bits)
|
||||
for (int j=0; j < (1<<(bitcount-format_mask_len[inst->format])); j++)
|
||||
{
|
||||
if (TRACE_SETUP) logerror("tms99xx: opcode=%04x at position %d\n", inst->opcode, cmdindex+j);
|
||||
if (TRACE_SETUP) logerror("opcode=%04x at position %d\n", inst->opcode, cmdindex+j);
|
||||
table[cmdindex+j].entry = inst;
|
||||
}
|
||||
|
||||
@ -1108,7 +1108,7 @@ void tms99xx_device::build_command_lookup_table()
|
||||
} while (inst->opcode != 0xf000);
|
||||
|
||||
m_lotables[k++] = nullptr;
|
||||
if (TRACE_SETUP) logerror("tms99xx: Allocated %d tables\n", k);
|
||||
if (TRACE_SETUP) logerror("Allocated %d tables\n", k);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1151,7 +1151,7 @@ void tms99xx_device::execute_run()
|
||||
{
|
||||
if (m_reset) service_interrupt();
|
||||
|
||||
if (TRACE_EMU) logerror("tms99xx: calling execute_run for %d cycles\n", m_icount);
|
||||
if (TRACE_EMU) logerror("calling execute_run for %d cycles\n", m_icount);
|
||||
do
|
||||
{
|
||||
// Only when last instruction has completed
|
||||
@ -1159,7 +1159,7 @@ void tms99xx_device::execute_run()
|
||||
{
|
||||
if (m_load_state)
|
||||
{
|
||||
logerror("tms99xx: LOAD interrupt\n");
|
||||
logerror("LOAD interrupt\n");
|
||||
m_irq_level = LOAD_INT;
|
||||
m_irq_state = false;
|
||||
service_interrupt();
|
||||
@ -1177,7 +1177,7 @@ void tms99xx_device::execute_run()
|
||||
|
||||
if (m_program == nullptr && m_idle_state)
|
||||
{
|
||||
if (TRACE_WAIT) logerror("tms99xx: idle state\n");
|
||||
if (TRACE_WAIT) logerror("idle state\n");
|
||||
pulse_clock(1);
|
||||
if (!m_external_operation.isnull())
|
||||
{
|
||||
@ -1196,7 +1196,7 @@ void tms99xx_device::execute_run()
|
||||
m_program[MPC] != MEMORY_READ && m_program[MPC] != MEMORY_WRITE &&
|
||||
m_program[MPC] != REG_READ && m_program[MPC] != REG_WRITE)))
|
||||
{
|
||||
if (TRACE_WAIT) logerror("tms99xx: hold\n");
|
||||
if (TRACE_WAIT) logerror("hold\n");
|
||||
if (!m_hold_acknowledged) acknowledge_hold();
|
||||
pulse_clock(1);
|
||||
}
|
||||
@ -1207,7 +1207,7 @@ void tms99xx_device::execute_run()
|
||||
{
|
||||
// We are in a wait state
|
||||
set_wait_state(true);
|
||||
if (TRACE_WAIT) logerror("tms99xx: wait\n");
|
||||
if (TRACE_WAIT) logerror("wait\n");
|
||||
// The clock output should be used to change the state of an outer
|
||||
// device which operates the READY line
|
||||
pulse_clock(1);
|
||||
@ -1222,7 +1222,7 @@ void tms99xx_device::execute_run()
|
||||
{
|
||||
m_op = m_program[MPC];
|
||||
}
|
||||
if (TRACE_MICRO) logerror("tms99xx: MPC = %d, m_op = %d\n", MPC, m_op);
|
||||
if (TRACE_MICRO) logerror("MPC = %d, m_op = %d\n", MPC, m_op);
|
||||
// Call the operation of the microprogram
|
||||
(this->*s_microoperation[m_op])();
|
||||
// If we have multiple passes (as in the TMS9980)
|
||||
@ -1238,7 +1238,7 @@ void tms99xx_device::execute_run()
|
||||
}
|
||||
}
|
||||
} while (m_icount>0 && !m_reset);
|
||||
if (TRACE_EMU) logerror("tms99xx: cycles expired; will return soon.\n");
|
||||
if (TRACE_EMU) logerror("cycles expired; will return soon.\n");
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
@ -1266,11 +1266,11 @@ void tms99xx_device::execute_set_input(int irqline, int state)
|
||||
if (state==ASSERT_LINE)
|
||||
{
|
||||
m_irq_level = get_intlevel(state);
|
||||
if (TRACE_INT) logerror("tms99xx: /INT asserted, level=%d, ST=%04x\n", m_irq_level, ST);
|
||||
if (TRACE_INT) logerror("/INT asserted, level=%d, ST=%04x\n", m_irq_level, ST);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_INT) logerror("tms99xx: /INT cleared\n");
|
||||
if (TRACE_INT) logerror("/INT cleared\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1321,9 +1321,9 @@ void tms99xx_device::service_interrupt()
|
||||
{
|
||||
switch (m_irq_level)
|
||||
{
|
||||
case RESET_INT: logerror("tms99xx: **** triggered a RESET interrupt\n"); break;
|
||||
case LOAD_INT: logerror("tms99xx: **** triggered a LOAD (NMI) interrupt\n"); break;
|
||||
default: logerror("tms99xx: ** triggered an interrupt on level %d\n", m_irq_level); break;
|
||||
case RESET_INT: logerror("**** triggered a RESET interrupt\n"); break;
|
||||
case LOAD_INT: logerror("**** triggered a LOAD (NMI) interrupt\n"); break;
|
||||
default: logerror("** triggered an interrupt on level %d\n", m_irq_level); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1344,8 +1344,8 @@ void tms99xx_device::pulse_clock(int count)
|
||||
m_icount--; // This is the only location where we count down the cycles.
|
||||
if (TRACE_CLOCK)
|
||||
{
|
||||
if (m_check_ready) logerror("tms99xx: pulse_clock, READY=%d\n", m_ready? 1:0);
|
||||
else logerror("tms99xx: pulse_clock\n");
|
||||
if (m_check_ready) logerror("pulse_clock, READY=%d\n", m_ready? 1:0);
|
||||
else logerror("pulse_clock\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1416,7 +1416,7 @@ void tms99xx_device::decode(UINT16 inst)
|
||||
while (!complete)
|
||||
{
|
||||
index = (opcode >> 12) & 0x000f;
|
||||
if (TRACE_MICRO) logerror("tms99xx: Check next hex digit of instruction %x\n", index);
|
||||
if (TRACE_MICRO) logerror("Check next hex digit of instruction %x\n", index);
|
||||
if (table[index].next_digit != nullptr)
|
||||
{
|
||||
table = table[index].next_digit;
|
||||
@ -1428,7 +1428,7 @@ void tms99xx_device::decode(UINT16 inst)
|
||||
if (decoded == nullptr)
|
||||
{
|
||||
// not found
|
||||
logerror("tms99xx: Illegal opcode %04x\n", inst);
|
||||
logerror("Address %04x: Illegal opcode %04x\n", PC, inst);
|
||||
IR = 0;
|
||||
// This will cause another instruction acquisition in the next machine cycle
|
||||
// with an asserted IAQ line (can be used to indicate this illegal opcode detection).
|
||||
@ -1439,7 +1439,7 @@ void tms99xx_device::decode(UINT16 inst)
|
||||
m_program = decoded->prog;
|
||||
MPC = -1;
|
||||
m_command = decoded->id;
|
||||
if (TRACE_MICRO) logerror("tms99xx: Command decoded as id %d, %s, base opcode %04x\n", m_command, opname[m_command], decoded->opcode);
|
||||
if (TRACE_MICRO) logerror("Command decoded as id %d, %s, base opcode %04x\n", m_command, opname[m_command], decoded->opcode);
|
||||
// Byte operations are either format 1 with the byte flag set
|
||||
// or format 4 (CRU multi bit operations) with 1-8 bits to transfer.
|
||||
m_byteop = ((decoded->format==1 && ((IR & 0x1000)!=0))
|
||||
@ -1467,7 +1467,7 @@ void tms99xx_device::acquire_instruction()
|
||||
if (m_mem_phase == 1)
|
||||
{
|
||||
decode(m_current_value);
|
||||
if (TRACE_EXEC) logerror("tms99xx: %04x: %04x (%s)\n", PC, IR, opname[m_command]);
|
||||
if (TRACE_EXEC) logerror("%04x: %04x (%s)\n", PC, IR, opname[m_command]);
|
||||
debugger_instruction_hook(this, PC);
|
||||
PC = (PC + 2) & 0xfffe & m_prgaddr_mask;
|
||||
// IAQ will be cleared in the main loop
|
||||
@ -1491,7 +1491,7 @@ void tms99xx_device::mem_read()
|
||||
m_check_ready = true;
|
||||
m_mem_phase = 2;
|
||||
m_pass = 2;
|
||||
if (TRACE_ADDRESSBUS) logerror("tms99xx: set address (r) %04x\n", m_address);
|
||||
if (TRACE_ADDRESSBUS) logerror("set address (r) %04x\n", m_address);
|
||||
|
||||
pulse_clock(1); // Concludes the first cycle
|
||||
// If READY has been found to be low, the CPU will now stay in the wait state loop
|
||||
@ -1503,7 +1503,7 @@ void tms99xx_device::mem_read()
|
||||
pulse_clock(1);
|
||||
if (!m_dbin_line.isnull()) m_dbin_line(CLEAR_LINE);
|
||||
m_mem_phase = 1; // reset to phase 1
|
||||
if (TRACE_MEM) logerror("tms99xx: mem r %04x -> %04x\n", m_address, m_current_value);
|
||||
if (TRACE_MEM) logerror("mem r %04x -> %04x\n", m_address, m_current_value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1513,9 +1513,9 @@ void tms99xx_device::mem_write()
|
||||
{
|
||||
if (!m_dbin_line.isnull()) m_dbin_line(CLEAR_LINE);
|
||||
// When writing, the data bus is asserted immediately after the address bus
|
||||
if (TRACE_ADDRESSBUS) logerror("tms99xx: set address (w) %04x\n", m_address);
|
||||
if (TRACE_ADDRESSBUS) logerror("set address (w) %04x\n", m_address);
|
||||
m_prgspace->set_address(m_address & m_prgaddr_mask & 0xfffe);
|
||||
if (TRACE_MEM) logerror("tms99xx: mem w %04x <- %04x\n", m_address, m_current_value);
|
||||
if (TRACE_MEM) logerror("mem w %04x <- %04x\n", m_address, m_current_value);
|
||||
m_prgspace->write_word(m_address & m_prgaddr_mask & 0xfffe, m_current_value);
|
||||
m_check_ready = true;
|
||||
m_mem_phase = 2;
|
||||
@ -1633,7 +1633,7 @@ void tms99xx_device::cru_output_operation()
|
||||
// Write m_count bits from cru_address
|
||||
for (int i=0; i < m_count; i++)
|
||||
{
|
||||
if (TRACE_CRU) logerror("tms99xx: CRU output operation, address %04x, value %d\n", location<<1, value & 0x01);
|
||||
if (TRACE_CRU) logerror("CRU output operation, address %04x, value %d\n", location<<1, value & 0x01);
|
||||
m_cru->write_byte(location, (value & 0x01));
|
||||
value >>= 1;
|
||||
location = (location + 1) & m_cruaddr_mask;
|
||||
@ -1655,7 +1655,7 @@ void tms99xx_device::command_completed()
|
||||
// Pseudo state at the end of the current instruction cycle sequence
|
||||
if (TRACE_CYCLES)
|
||||
{
|
||||
logerror("tms99xx: ------");
|
||||
logerror("------");
|
||||
int cycles = m_first_cycle - m_icount;
|
||||
// Avoid nonsense values due to expired and resumed main loop
|
||||
if (cycles > 0 && cycles < 10000) logerror(" %d cycles", cycles);
|
||||
@ -1721,7 +1721,7 @@ inline void tms99xx_device::compare_and_set_lae(UINT16 value1, UINT16 value2)
|
||||
set_status_bit(ST_EQ, value1 == value2);
|
||||
set_status_bit(ST_LH, value1 > value2);
|
||||
set_status_bit(ST_AGT, (INT16)value1 > (INT16)value2);
|
||||
if (TRACE_STATUS) logerror("tms99xx: ST = %04x (val1=%04x, val2=%04x)\n", ST, value1, value2);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val1=%04x, val2=%04x)\n", ST, value1, value2);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@ -1958,7 +1958,7 @@ void tms99xx_device::alu_f3()
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
}
|
||||
}
|
||||
if (TRACE_STATUS) logerror("tms99xx: ST = %04x\n", ST);
|
||||
if (TRACE_STATUS) logerror("ST = %04x\n", ST);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1977,7 +1977,7 @@ void tms99xx_device::alu_multiply()
|
||||
m_address = ((IR >> 5) & 0x001e) + WP;
|
||||
break;
|
||||
case 1: // After reading the register (multiplier)
|
||||
if (TRACE_ALU) logerror("tms99xx: Multiply %04x by %04x\n", m_current_value, m_source_value);
|
||||
if (TRACE_ALU) logerror("Multiply %04x by %04x\n", m_current_value, m_source_value);
|
||||
result = (m_source_value & 0x0000ffff) * (m_current_value & 0x0000ffff);
|
||||
m_current_value = (result >> 16) & 0xffff;
|
||||
m_value_copy = result & 0xffff;
|
||||
@ -2026,11 +2026,11 @@ void tms99xx_device::alu_divide()
|
||||
// Create full word and perform division
|
||||
uval32 = (m_value_copy << 16) | m_current_value;
|
||||
|
||||
if (TRACE_ALU) logerror("tms99xx: Dividing %08x by %04x\n", uval32, m_source_value);
|
||||
if (TRACE_ALU) logerror("Dividing %08x by %04x\n", uval32, m_source_value);
|
||||
m_current_value = uval32 / m_source_value;
|
||||
m_value_copy = uval32 % m_source_value;
|
||||
|
||||
if (TRACE_ALU) logerror("tms99xx: Quotient %04x, remainder %04x\n", m_current_value, m_value_copy);
|
||||
if (TRACE_ALU) logerror("Quotient %04x, remainder %04x\n", m_current_value, m_value_copy);
|
||||
|
||||
m_address = m_address_copy;
|
||||
|
||||
@ -2056,7 +2056,7 @@ void tms99xx_device::alu_divide()
|
||||
// Prepare to write the remainder
|
||||
m_current_value = m_value_copy;
|
||||
m_address = m_address + 2;
|
||||
if (TRACE_STATUS) logerror("tms99xx: ST = %04x (div)\n", ST);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (div)\n", ST);
|
||||
break;
|
||||
}
|
||||
pulse_clock(2);
|
||||
@ -2206,7 +2206,7 @@ void tms99xx_device::alu_abs()
|
||||
|
||||
void tms99xx_device::alu_x()
|
||||
{
|
||||
if (TRACE_ALU) logerror("tms99xx: Substituting current command by %04x\n", m_current_value);
|
||||
if (TRACE_ALU) logerror("Substituting current command by %04x\n", m_current_value);
|
||||
decode(m_current_value);
|
||||
pulse_clock(2);
|
||||
}
|
||||
@ -2226,7 +2226,7 @@ void tms99xx_device::alu_b()
|
||||
m_current_value = PC;
|
||||
PC = m_address & m_prgaddr_mask & 0xfffe;
|
||||
m_address = WP + 22;
|
||||
if (TRACE_ALU) logerror("tms99xx: Set new PC = %04x\n", PC);
|
||||
if (TRACE_ALU) logerror("Set new PC = %04x\n", PC);
|
||||
pulse_clock(2);
|
||||
}
|
||||
|
||||
@ -2296,7 +2296,7 @@ void tms99xx_device::alu_ldcr()
|
||||
}
|
||||
m_cru_address = m_current_value;
|
||||
m_value = value;
|
||||
if (TRACE_CRU) logerror("tms99xx: Load CRU address %04x (%d bits), value = %04x\n", m_cru_address, m_count, m_value);
|
||||
if (TRACE_CRU) logerror("Load CRU address %04x (%d bits), value = %04x\n", m_cru_address, m_count, m_value);
|
||||
}
|
||||
m_state++;
|
||||
pulse_clock(2);
|
||||
@ -2328,7 +2328,7 @@ void tms99xx_device::alu_stcr()
|
||||
value = m_value & 0xffff;
|
||||
if (m_count < 9)
|
||||
{
|
||||
if (TRACE_CRU) logerror("tms99xx: Store CRU at %04x (%d bits) in %04x, result = %02x\n", m_cru_address, m_count, m_source_address, value);
|
||||
if (TRACE_CRU) logerror("Store CRU at %04x (%d bits) in %04x, result = %02x\n", m_cru_address, m_count, m_source_address, value);
|
||||
set_status_parity((UINT8)(value & 0xff));
|
||||
compare_and_set_lae(value<<8, 0);
|
||||
if (m_source_even)
|
||||
@ -2340,7 +2340,7 @@ void tms99xx_device::alu_stcr()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_CRU) logerror("tms99xx: Store CRU at %04x (%d bits) in %04x, result = %04x\n", m_cru_address, m_count, m_source_address, value);
|
||||
if (TRACE_CRU) logerror("Store CRU at %04x (%d bits) in %04x, result = %04x\n", m_cru_address, m_count, m_source_address, value);
|
||||
m_current_value = value;
|
||||
compare_and_set_lae(value, 0);
|
||||
pulse_clock(2*(5 + (16-m_count)));
|
||||
@ -2386,7 +2386,7 @@ void tms99xx_device::alu_tb()
|
||||
break;
|
||||
case 2:
|
||||
set_status_bit(ST_EQ, m_value!=0);
|
||||
if (TRACE_STATUS) logerror("tms99xx: ST = %04x\n", ST);
|
||||
if (TRACE_STATUS) logerror("ST = %04x\n", ST);
|
||||
break;
|
||||
}
|
||||
m_state++;
|
||||
@ -2444,11 +2444,11 @@ void tms99xx_device::alu_jmp()
|
||||
}
|
||||
if (!cond)
|
||||
{
|
||||
if (TRACE_ALU) logerror("tms99xx: Jump condition false\n");
|
||||
if (TRACE_ALU) logerror("Jump condition false\n");
|
||||
MPC+=1; // skip next ALU call
|
||||
}
|
||||
else
|
||||
if (TRACE_ALU) logerror("tms99xx: Jump condition true\n");
|
||||
if (TRACE_ALU) logerror("Jump condition true\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2489,7 +2489,7 @@ void tms99xx_device::alu_shift()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_ALU) logerror("tms99xx: Shift operation gets count from R0\n");
|
||||
if (TRACE_ALU) logerror("Shift operation gets count from R0\n");
|
||||
pulse_clock(2);
|
||||
}
|
||||
pulse_clock(2);
|
||||
@ -2538,7 +2538,7 @@ void tms99xx_device::alu_shift()
|
||||
set_status_bit(ST_OV, overflow);
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
m_address = m_address_saved; // Register address
|
||||
if (TRACE_STATUS) logerror("tms99xx: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
break;
|
||||
}
|
||||
m_state++;
|
||||
@ -2589,7 +2589,7 @@ void tms99xx_device::alu_lwpi()
|
||||
void tms99xx_device::alu_limi()
|
||||
{
|
||||
ST = (ST & 0xfff0) | (m_current_value & 0x000f);
|
||||
if (TRACE_STATUS) logerror("tms99xx: ST = %04x\n", ST);
|
||||
if (TRACE_STATUS) logerror("ST = %04x\n", ST);
|
||||
pulse_clock(2);
|
||||
}
|
||||
|
||||
@ -2645,7 +2645,7 @@ void tms99xx_device::alu_rtwp()
|
||||
|
||||
void tms99xx_device::alu_int()
|
||||
{
|
||||
if (TRACE_EMU) logerror("tms99xx: INT state %d; irq_level %d\n", m_state, m_irq_level);
|
||||
if (TRACE_EMU) logerror("INT state %d; irq_level %d\n", m_state, m_irq_level);
|
||||
switch (m_state)
|
||||
{
|
||||
case 0:
|
||||
@ -2680,7 +2680,7 @@ void tms99xx_device::alu_int()
|
||||
break;
|
||||
case 4:
|
||||
m_address = (m_address_copy + 2) & 0xfffe & m_prgaddr_mask;
|
||||
if (TRACE_ALU) logerror("tms99xx: read from %04x\n", m_address);
|
||||
if (TRACE_ALU) logerror("read from %04x\n", m_address);
|
||||
break;
|
||||
case 5:
|
||||
PC = m_current_value & m_prgaddr_mask & 0xfffe;
|
||||
|
@ -85,7 +85,6 @@
|
||||
|
||||
TODO:
|
||||
- State save
|
||||
- Test HOLD
|
||||
|
||||
Michael Zapf, June 2012
|
||||
*/
|
||||
@ -275,7 +274,7 @@ void tms9995_device::device_start()
|
||||
void tms9995_device::device_stop()
|
||||
{
|
||||
int k = 0;
|
||||
if (TRACE_CONFIG) logerror("%s: Deleting lookup tables\n", tag());
|
||||
if (TRACE_EMU) logerror("%s: Deleting lookup tables\n", tag());
|
||||
while (m_lotables[k]!=nullptr) delete[] m_lotables[k++];
|
||||
}
|
||||
|
||||
@ -292,6 +291,7 @@ void tms9995_device::device_reset()
|
||||
m_reset = true; // for the main loop
|
||||
m_servicing_interrupt = false; // only for debugging
|
||||
m_request_auto_wait_state = false;
|
||||
m_hold_requested = false;
|
||||
memset(m_flag, 0, sizeof(m_flag));
|
||||
}
|
||||
|
||||
@ -1150,7 +1150,7 @@ void tms9995_device::build_command_lookup_table()
|
||||
{
|
||||
inst = &s_command[i];
|
||||
table = m_command_lookup_table;
|
||||
if (TRACE_EMU) logerror("tms9995: === opcode=%04x, len=%d\n", inst->opcode, format_mask_len[inst->format]);
|
||||
if (TRACE_EMU) logerror("=== opcode=%04x, len=%d\n", inst->opcode, format_mask_len[inst->format]);
|
||||
bitcount = 4;
|
||||
opcode = inst->opcode;
|
||||
cmdindex = (opcode>>12) & 0x000f;
|
||||
@ -1160,7 +1160,7 @@ void tms9995_device::build_command_lookup_table()
|
||||
// Descend
|
||||
if (table[cmdindex].next_digit == nullptr)
|
||||
{
|
||||
if (TRACE_EMU) logerror("tms9995: create new table at bitcount=%d for index=%d\n", bitcount, cmdindex);
|
||||
if (TRACE_EMU) logerror("create new table at bitcount=%d for index=%d\n", bitcount, cmdindex);
|
||||
table[cmdindex].next_digit = new lookup_entry[16];
|
||||
m_lotables[k++] = table[cmdindex].next_digit;
|
||||
for (int j=0; j < 16; j++)
|
||||
@ -1171,7 +1171,7 @@ void tms9995_device::build_command_lookup_table()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_EMU) logerror("tms9995: found a table at bitcount=%d\n", bitcount);
|
||||
if (TRACE_EMU) logerror("found a table at bitcount=%d\n", bitcount);
|
||||
}
|
||||
|
||||
table = table[cmdindex].next_digit;
|
||||
@ -1179,17 +1179,17 @@ void tms9995_device::build_command_lookup_table()
|
||||
bitcount = bitcount+4;
|
||||
opcode <<= 4;
|
||||
cmdindex = (opcode>>12) & 0x000f;
|
||||
if (TRACE_EMU) logerror("tms9995: next index=%x\n", cmdindex);
|
||||
if (TRACE_EMU) logerror("next index=%x\n", cmdindex);
|
||||
}
|
||||
|
||||
if (TRACE_EMU) logerror("tms9995: bitcount=%d\n", bitcount);
|
||||
if (TRACE_EMU) logerror("bitcount=%d\n", bitcount);
|
||||
// We are at the target level
|
||||
// Need to fill in the same entry for all values in the bitcount
|
||||
// (if a command needs 10 bits we have to copy it four
|
||||
// times for all combinations with 12 bits)
|
||||
for (int j=0; j < (1<<(bitcount-format_mask_len[inst->format])); j++)
|
||||
{
|
||||
if (TRACE_EMU) logerror("tms9995: opcode=%04x at position %d\n", inst->opcode, cmdindex+j);
|
||||
if (TRACE_EMU) logerror("opcode=%04x at position %d\n", inst->opcode, cmdindex+j);
|
||||
table[cmdindex+j].entry = inst;
|
||||
}
|
||||
|
||||
@ -1197,7 +1197,7 @@ void tms9995_device::build_command_lookup_table()
|
||||
} while (inst->opcode != 0xf000);
|
||||
|
||||
m_lotables[k++] = nullptr;
|
||||
if (TRACE_EMU) logerror("tms9995: Allocated %d tables\n", k);
|
||||
if (TRACE_EMU) logerror("Allocated %d tables\n", k);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1212,24 +1212,24 @@ void tms9995_device::execute_run()
|
||||
{
|
||||
if (m_reset) service_interrupt();
|
||||
|
||||
if (TRACE_EMU) logerror("tms9995: calling execute_run for %d cycles\n", m_icount);
|
||||
if (TRACE_EMU) logerror("calling execute_run for %d cycles\n", m_icount);
|
||||
do
|
||||
{
|
||||
// Normal operation
|
||||
if (m_check_ready && m_ready == false)
|
||||
{
|
||||
// We are in a wait state
|
||||
if (TRACE_WAITHOLD) logerror("tms9995: wait state\n");
|
||||
if (TRACE_WAITHOLD) logerror("wait state\n");
|
||||
// The clock output should be used to change the state of an outer
|
||||
// device which operates the READY line
|
||||
pulse_clock(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_check_hold && m_hold_state)
|
||||
if (m_check_hold && m_hold_requested)
|
||||
{
|
||||
set_hold_state(true);
|
||||
if (TRACE_WAITHOLD) logerror("tms9995: hold state\n");
|
||||
if (TRACE_WAITHOLD) logerror("HOLD state\n");
|
||||
pulse_clock(1);
|
||||
}
|
||||
else
|
||||
@ -1238,7 +1238,7 @@ void tms9995_device::execute_run()
|
||||
|
||||
m_check_ready = false;
|
||||
|
||||
if (TRACE_MICRO) logerror("tms9995: main loop, operation %s, MPC = %d\n", opname[m_instruction->command], MPC);
|
||||
if (TRACE_MICRO) logerror("main loop, operation %s, MPC = %d\n", opname[m_instruction->command], MPC);
|
||||
(this->*s_microoperation[m_instruction->program[MPC]])();
|
||||
|
||||
// For multi-pass operations where the MPC should not advance
|
||||
@ -1252,7 +1252,8 @@ void tms9995_device::execute_run()
|
||||
}
|
||||
}
|
||||
} while (m_icount>0 && !m_reset);
|
||||
if (TRACE_EMU) logerror("tms9995: cycles expired; will return soon.\n");
|
||||
|
||||
if (TRACE_EMU) logerror("cycles expired; will return soon.\n");
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
@ -1266,49 +1267,61 @@ void tms9995_device::execute_run()
|
||||
*/
|
||||
void tms9995_device::execute_set_input(int irqline, int state)
|
||||
{
|
||||
if (irqline==INT_9995_RESET && state==ASSERT_LINE)
|
||||
if (irqline == INT_9995_RESET)
|
||||
{
|
||||
m_reset = true;
|
||||
if (state == ASSERT_LINE)
|
||||
{
|
||||
logerror("RESET interrupt line; READY=%d\n", m_ready_bufd);
|
||||
m_reset = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (irqline == INPUT_LINE_NMI)
|
||||
{
|
||||
m_nmi_active = (state==ASSERT_LINE);
|
||||
if (TRACE_INT) logerror("tms9995: NMI interrupt line state=%d\n", state);
|
||||
if (TRACE_INT) logerror("NMI interrupt line state=%d\n", state);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (irqline == INT_9995_INT1)
|
||||
{
|
||||
m_int1_active = m_flag[2] = (state==ASSERT_LINE);
|
||||
if (TRACE_INT) logerror("tms9995: Line INT1 state=%d\n", state);
|
||||
if (TRACE_INT) logerror("Line INT1 state=%d\n", state);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (irqline == INT_9995_INT4)
|
||||
{
|
||||
if (TRACE_INT) logerror("tms9995: Line INT4/EC state=%d\n", state);
|
||||
if (TRACE_INT) logerror("Line INT4/EC state=%d\n", state);
|
||||
if (m_flag[0]==false)
|
||||
{
|
||||
if (TRACE_INT) logerror("tms9995: set as interrupt\n");
|
||||
if (TRACE_INT) logerror("set as interrupt\n");
|
||||
m_int4_active = m_flag[4] = (state==ASSERT_LINE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_INT) logerror("tms9995: set as event count\n");
|
||||
if (TRACE_INT) logerror("set as event count\n");
|
||||
trigger_decrementer();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("tms9995: Accessed invalid interrupt line %d\n", irqline);
|
||||
logerror("Accessed invalid interrupt line %d\n", irqline);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Triggers a RESET.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( tms9995_device::reset_line )
|
||||
{
|
||||
if (state==ASSERT_LINE) m_reset = true;
|
||||
}
|
||||
|
||||
/*
|
||||
Issue a pulse on the clock line.
|
||||
*/
|
||||
@ -1322,8 +1335,8 @@ void tms9995_device::pulse_clock(int count)
|
||||
m_icount--; // This is the only location where we count down the cycles.
|
||||
if (TRACE_CLOCK)
|
||||
{
|
||||
if (m_check_ready) logerror("tms9995: pulse_clock, READY=%d, auto_wait=%d\n", m_ready_bufd? 1:0, m_auto_wait? 1:0);
|
||||
else logerror("tms9995: pulse_clock\n");
|
||||
if (m_check_ready) logerror("pulse_clock, READY=%d, auto_wait=%d\n", m_ready_bufd? 1:0, m_auto_wait? 1:0);
|
||||
else logerror("pulse_clock\n");
|
||||
}
|
||||
m_request_auto_wait_state = false;
|
||||
if (m_flag[0] == false && m_flag[1] == true)
|
||||
@ -1339,11 +1352,11 @@ void tms9995_device::pulse_clock(int count)
|
||||
/*
|
||||
Enter the hold state.
|
||||
*/
|
||||
void tms9995_device::set_hold(int state)
|
||||
WRITE_LINE_MEMBER( tms9995_device::hold_line )
|
||||
{
|
||||
m_hold_state = (state==ASSERT_LINE);
|
||||
if (TRACE_WAITHOLD) logerror("tms9995: set HOLD = %d\n", state);
|
||||
if (!m_hold_state)
|
||||
m_hold_requested = (state==ASSERT_LINE);
|
||||
if (TRACE_WAITHOLD) logerror("set HOLD = %d\n", state);
|
||||
if (!m_hold_requested)
|
||||
{
|
||||
if (!m_holda_line.isnull()) m_holda_line(CLEAR_LINE);
|
||||
}
|
||||
@ -1353,10 +1366,14 @@ void tms9995_device::set_hold(int state)
|
||||
Signal READY to the CPU. When cleared, the CPU enters wait states. This
|
||||
becomes effective on a clock pulse.
|
||||
*/
|
||||
void tms9995_device::set_ready(int state)
|
||||
WRITE_LINE_MEMBER( tms9995_device::ready_line )
|
||||
{
|
||||
m_ready_bufd = (state==ASSERT_LINE);
|
||||
if (TRACE_READY) logerror("tms9995: set READY = %d\n", m_ready_bufd? 1 : 0);
|
||||
if (m_reset && (m_ready_bufd != state)) logerror("Ignoring READY=%d change due to pending RESET\n", state);
|
||||
else
|
||||
{
|
||||
m_ready_bufd = (state==ASSERT_LINE);
|
||||
if (TRACE_READY) logerror("set READY = %d\n", m_ready_bufd? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1374,7 +1391,7 @@ void tms9995_device::abort_operation()
|
||||
/*
|
||||
Enter or leave the hold state. We only operate the HOLDA line when there is a change.
|
||||
*/
|
||||
inline void tms9995_device::set_hold_state(bool state)
|
||||
void tms9995_device::set_hold_state(bool state)
|
||||
{
|
||||
if (m_hold_state != state)
|
||||
if (!m_holda_line.isnull()) m_holda_line(state? ASSERT_LINE : CLEAR_LINE);
|
||||
@ -1400,7 +1417,7 @@ void tms9995_device::decode(UINT16 inst)
|
||||
while (!complete)
|
||||
{
|
||||
index = (opcode >> 12) & 0x000f;
|
||||
if (TRACE_EMU) logerror("tms9995: Check next hex digit of instruction %x\n", index);
|
||||
if (TRACE_EMU) logerror("Check next hex digit of instruction %x\n", index);
|
||||
if (table[index].next_digit != nullptr)
|
||||
{
|
||||
table = table[index].next_digit;
|
||||
@ -1412,7 +1429,7 @@ void tms9995_device::decode(UINT16 inst)
|
||||
if (decoded == nullptr)
|
||||
{
|
||||
// not found
|
||||
logerror("tms9995: Undefined opcode %04x at logical address %04x, will trigger MID\n", inst, PC);
|
||||
logerror("Undefined opcode %04x at logical address %04x, will trigger MID\n", inst, PC);
|
||||
m_decoded[dindex].IR = 0;
|
||||
m_decoded[dindex].command = MID;
|
||||
}
|
||||
@ -1423,7 +1440,7 @@ void tms9995_device::decode(UINT16 inst)
|
||||
m_decoded[dindex].program = decoded->prog;
|
||||
m_decoded[dindex].byteop = ((decoded->format == 1) && ((inst & 0x1000)!=0));
|
||||
m_decoded[dindex].state = 0;
|
||||
if (TRACE_EMU) logerror("tms9995: Command decoded as id %d, %s, base opcode %04x\n", decoded->id, opname[decoded->id], decoded->opcode);
|
||||
if (TRACE_EMU) logerror("Command decoded as id %d, %s, base opcode %04x\n", decoded->id, opname[decoded->id], decoded->opcode);
|
||||
m_pass = 1;
|
||||
}
|
||||
}
|
||||
@ -1444,7 +1461,7 @@ void tms9995_device::int_prefetch_and_decode()
|
||||
// Check interrupt lines
|
||||
if (m_nmi_active)
|
||||
{
|
||||
if (TRACE_INT) logerror("tms9995: Checking interrupts ... NMI active\n");
|
||||
if (TRACE_INT) logerror("Checking interrupts ... NMI active\n");
|
||||
m_int_pending |= PENDING_NMI;
|
||||
m_idle_state = false;
|
||||
PC = (PC + 2) & 0xfffe; // we have not prefetched the next instruction
|
||||
@ -1467,19 +1484,19 @@ void tms9995_device::int_prefetch_and_decode()
|
||||
if (m_idle_state)
|
||||
{
|
||||
m_idle_state = false;
|
||||
if (TRACE_INT) logerror("tms9995: Interrupt occurred, terminate IDLE state\n");
|
||||
if (TRACE_INT) logerror("Interrupt occurred, terminate IDLE state\n");
|
||||
}
|
||||
PC = PC + 2; // PC must be advanced (see flow chart), but no prefetch
|
||||
if (TRACE_INT) logerror("tms9995: Interrupts pending; no prefetch; advance PC to %04x\n", PC);
|
||||
if (TRACE_INT) logerror("Interrupts pending; no prefetch; advance PC to %04x\n", PC);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_INT) logerror("tms9995: Checking interrupts ... none pending\n");
|
||||
if (TRACE_INT) logerror("Checking interrupts ... none pending\n");
|
||||
// No pending interrupts
|
||||
if (m_idle_state)
|
||||
{
|
||||
if (TRACE_WAITHOLD) logerror("tms9995: IDLE state\n");
|
||||
if (TRACE_WAITHOLD) logerror("IDLE state\n");
|
||||
// We are IDLE, stay in the loop and do not advance the PC
|
||||
m_pass = 2;
|
||||
pulse_clock(1);
|
||||
@ -1509,7 +1526,7 @@ void tms9995_device::prefetch_and_decode()
|
||||
m_value_copy = m_current_value;
|
||||
if (!m_iaq_line.isnull()) m_iaq_line(ASSERT_LINE);
|
||||
m_address = PC;
|
||||
if (TRACE_OP) logerror("tms9995: **** Prefetching new instruction at %04x ****\n", PC);
|
||||
if (TRACE_OP) logerror("**** Prefetching new instruction at %04x ****\n", PC);
|
||||
}
|
||||
|
||||
word_read(); // changes m_mem_phase
|
||||
@ -1522,7 +1539,7 @@ void tms9995_device::prefetch_and_decode()
|
||||
m_current_value = m_value_copy; // restore m_current_value
|
||||
PC = (PC + 2) & 0xfffe; // advance PC
|
||||
if (!m_iaq_line.isnull()) m_iaq_line(CLEAR_LINE);
|
||||
if (TRACE_OP) logerror("tms9995: ++++ Prefetch done ++++\n");
|
||||
if (TRACE_OP) logerror("++++ Prefetch done ++++\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1549,7 +1566,7 @@ void tms9995_device::next_command()
|
||||
// This is a preset for opcodes which do not need an opcode address derivation
|
||||
m_address = WP + ((m_instruction->IR & 0x000f)<<1);
|
||||
MPC = -1;
|
||||
if (TRACE_OP) logerror("tms9995: ===== Next operation %04x (%s) at %04x =====\n", m_instruction->IR, opname[m_instruction->command], PC-2);
|
||||
if (TRACE_OP) logerror("===== Next operation %04x (%s) at %04x =====\n", m_instruction->IR, opname[m_instruction->command], PC-2);
|
||||
|
||||
if (TRACE_EXEC)
|
||||
{
|
||||
@ -1570,7 +1587,7 @@ void tms9995_device::command_completed()
|
||||
// Pseudo state at the end of the current instruction cycle sequence
|
||||
if (TRACE_CYCLES)
|
||||
{
|
||||
logerror("tms9995: +++++ Instruction %04x (%s) completed", m_instruction->IR, opname[m_instruction->command]);
|
||||
logerror("+++++ Instruction %04x (%s) completed", m_instruction->IR, opname[m_instruction->command]);
|
||||
int cycles = m_first_cycle - m_icount;
|
||||
// Avoid nonsense values due to expired and resumed main loop
|
||||
if (cycles > 0 && cycles < 10000) logerror(", consumed %d cycles", cycles);
|
||||
@ -1607,9 +1624,10 @@ void tms9995_device::service_interrupt()
|
||||
m_intmask = 0; // clear interrupt mask
|
||||
|
||||
m_nmi_state = false;
|
||||
m_hold_requested = false;
|
||||
m_hold_state = false;
|
||||
m_mem_phase = 1;
|
||||
m_check_hold = false;
|
||||
m_check_hold = true;
|
||||
m_word_access = false;
|
||||
m_int1_active = false;
|
||||
m_int4_active = false;
|
||||
@ -1626,7 +1644,7 @@ void tms9995_device::service_interrupt()
|
||||
// The auto-wait state generation is turned on when the READY line is cleared
|
||||
// on RESET.
|
||||
m_auto_wait = !m_ready_bufd;
|
||||
if (TRACE_CONFIG) logerror("tms9995: RESET; automatic wait state creation is %s\n", m_auto_wait? "enabled":"disabled");
|
||||
logerror("RESET; automatic wait state creation is %s\n", m_auto_wait? "enabled":"disabled");
|
||||
// We reset the READY flag, or the CPU will not start
|
||||
m_ready_bufd = true;
|
||||
}
|
||||
@ -1637,7 +1655,7 @@ void tms9995_device::service_interrupt()
|
||||
vectorpos = 0x0008;
|
||||
m_intmask = 0x0001;
|
||||
PC = (PC + 2) & 0xfffe;
|
||||
if (TRACE_INT) logerror("tms9995: ***** MID pending\n");
|
||||
if (TRACE_INT) logerror("***** MID pending\n");
|
||||
m_mid_active = false;
|
||||
}
|
||||
else
|
||||
@ -1647,7 +1665,7 @@ void tms9995_device::service_interrupt()
|
||||
vectorpos = 0xfffc;
|
||||
m_int_pending &= ~PENDING_NMI;
|
||||
m_intmask = 0;
|
||||
if (TRACE_INT) logerror("tms9995: ***** NMI pending\n");
|
||||
if (TRACE_INT) logerror("***** NMI pending\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1657,7 +1675,7 @@ void tms9995_device::service_interrupt()
|
||||
m_int_pending &= ~PENDING_LEVEL1;
|
||||
m_flag[2] = false;
|
||||
m_intmask = 0;
|
||||
if (TRACE_INT) logerror("tms9995: ***** INT1 pending\n");
|
||||
if (TRACE_INT) logerror("***** INT1 pending\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1666,7 +1684,7 @@ void tms9995_device::service_interrupt()
|
||||
vectorpos = 0x0008;
|
||||
m_int_pending &= ~PENDING_OVERFLOW;
|
||||
m_intmask = 0x0001;
|
||||
if (TRACE_INT) logerror("tms9995: ***** OVERFL pending\n");
|
||||
if (TRACE_INT) logerror("***** OVERFL pending\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1677,7 +1695,7 @@ void tms9995_device::service_interrupt()
|
||||
m_int_pending &= ~PENDING_DECR;
|
||||
m_flag[3] = false;
|
||||
m_int_decrementer = false;
|
||||
if (TRACE_DEC) logerror("tms9995: ***** DECR pending\n");
|
||||
if (TRACE_DEC) logerror("***** DECR pending\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1685,7 +1703,7 @@ void tms9995_device::service_interrupt()
|
||||
m_intmask = 0x0003;
|
||||
m_int_pending &= ~PENDING_LEVEL4;
|
||||
m_flag[4] = false;
|
||||
if (TRACE_INT) logerror("tms9995: ***** INT4 pending\n");
|
||||
if (TRACE_INT) logerror("***** INT4 pending\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1693,10 +1711,10 @@ void tms9995_device::service_interrupt()
|
||||
}
|
||||
}
|
||||
|
||||
if (TRACE_INT) logerror("tms9995: ********* triggered an interrupt with vector %04x/%04x\n", vectorpos, vectorpos+2);
|
||||
if (TRACE_INT) logerror("********* triggered an interrupt with vector %04x/%04x\n", vectorpos, vectorpos+2);
|
||||
|
||||
// just for debugging purposes
|
||||
m_servicing_interrupt = true;
|
||||
if (!m_reset) m_servicing_interrupt = true;
|
||||
|
||||
// The microinstructions will do the context switch
|
||||
m_address = vectorpos;
|
||||
@ -1743,7 +1761,7 @@ void tms9995_device::mem_read()
|
||||
|
||||
if ((m_address & 0xfffe)==0xfffa && !m_mp9537)
|
||||
{
|
||||
if (TRACE_DEC) logerror("tms9995: read decrementer\n");
|
||||
if (TRACE_DEC) logerror("read decrementer\n");
|
||||
// Decrementer mapped into the address space
|
||||
m_current_value = m_decrementer_value;
|
||||
if (m_instruction->byteop)
|
||||
@ -1762,7 +1780,7 @@ void tms9995_device::mem_read()
|
||||
// byte operations (e.g. when retrieving the index register)
|
||||
if (m_word_access || !m_instruction->byteop) m_address &= 0xfffe;
|
||||
|
||||
if (TRACE_MEM) logerror("tms9995: read onchip memory (single pass, address %04x)\n", m_address);
|
||||
if (TRACE_MEM) logerror("read onchip memory (single pass, address %04x)\n", m_address);
|
||||
|
||||
// Ignore the READY state
|
||||
m_check_ready = false;
|
||||
@ -1797,7 +1815,7 @@ void tms9995_device::mem_read()
|
||||
else m_pass = 2;
|
||||
|
||||
m_check_hold = false;
|
||||
if (TRACE_ADDRESSBUS) logerror("tms9995: set address bus %04x\n", m_address & ~1);
|
||||
if (TRACE_ADDRESSBUS) logerror("set address bus %04x\n", m_address & ~1);
|
||||
m_prgspace->set_address(address);
|
||||
m_request_auto_wait_state = m_auto_wait;
|
||||
pulse_clock(1);
|
||||
@ -1806,20 +1824,21 @@ void tms9995_device::mem_read()
|
||||
// Sample the value on the data bus (high byte)
|
||||
if (m_word_access || !m_instruction->byteop) address &= 0xfffe;
|
||||
value = m_prgspace->read_byte(address);
|
||||
if (TRACE_MEM) logerror("tms9995: memory read byte %04x -> %02x\n", m_address & ~1, value);
|
||||
if (TRACE_MEM) logerror("memory read byte %04x -> %02x\n", m_address & ~1, value);
|
||||
m_current_value = (value << 8) & 0xff00;
|
||||
break;
|
||||
case 3:
|
||||
// Set address + 1 (unless byte command)
|
||||
if (TRACE_ADDRESSBUS) logerror("tms9995: set address bus %04x\n", m_address | 1);
|
||||
if (TRACE_ADDRESSBUS) logerror("set address bus %04x\n", m_address | 1);
|
||||
m_prgspace->set_address(m_address | 1);
|
||||
m_request_auto_wait_state = m_auto_wait;
|
||||
pulse_clock(1);
|
||||
break;
|
||||
case 4:
|
||||
// Read low byte
|
||||
value = m_prgspace->read_byte(m_address | 1);
|
||||
m_current_value |= value;
|
||||
if (TRACE_MEM) logerror("tms9995: memory read byte %04x -> %02x, complete word = %04x\n", m_address | 1, value, m_current_value);
|
||||
if (TRACE_MEM) logerror("memory read byte %04x -> %02x, complete word = %04x\n", m_address | 1, value, m_current_value);
|
||||
m_check_hold = true;
|
||||
break;
|
||||
}
|
||||
@ -1827,7 +1846,11 @@ void tms9995_device::mem_read()
|
||||
m_mem_phase = (m_mem_phase % 4) +1;
|
||||
|
||||
// Reset to 1 when we are done
|
||||
if (m_pass==1) m_mem_phase = 1;
|
||||
if (m_pass==1)
|
||||
{
|
||||
m_mem_phase = 1;
|
||||
m_check_hold = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1883,7 +1906,7 @@ void tms9995_device::mem_write()
|
||||
{
|
||||
m_starting_count_storage_register = m_decrementer_value = m_current_value;
|
||||
}
|
||||
if (TRACE_DEC) logerror("tms9995: Setting decrementer to %04x, PC=%04x\n", m_current_value, PC);
|
||||
if (TRACE_DEC) logerror("Setting decrementer to %04x, PC=%04x\n", m_current_value, PC);
|
||||
pulse_clock(1);
|
||||
return;
|
||||
}
|
||||
@ -1895,7 +1918,7 @@ void tms9995_device::mem_write()
|
||||
// byte operations (e.g. when retrieving the index register)
|
||||
if (m_word_access || !m_instruction->byteop) m_address &= 0xfffe;
|
||||
|
||||
if (TRACE_MEM) logerror("tms9995: write to onchip memory (single pass, address %04x, value=%04x)\n", m_address, m_current_value);
|
||||
if (TRACE_MEM) logerror("write to onchip memory (single pass, address %04x, value=%04x)\n", m_address, m_current_value);
|
||||
m_check_ready = false;
|
||||
m_onchip_memory[m_address & 0x00ff] = (m_current_value >> 8) & 0xff;
|
||||
if (m_word_access || !m_instruction->byteop)
|
||||
@ -1924,10 +1947,11 @@ void tms9995_device::mem_write()
|
||||
else m_pass = 2;
|
||||
|
||||
m_check_hold = false;
|
||||
if (TRACE_ADDRESSBUS) logerror("tms9995: set address bus %04x\n", address);
|
||||
if (TRACE_ADDRESSBUS) logerror("set address bus %04x\n", address);
|
||||
m_prgspace->set_address(address);
|
||||
if (TRACE_MEM) logerror("tms9995: memory write byte %04x <- %02x\n", address, (m_current_value >> 8)&0xff);
|
||||
if (TRACE_MEM) logerror("memory write byte %04x <- %02x\n", address, (m_current_value >> 8)&0xff);
|
||||
m_prgspace->write_byte(address, (m_current_value >> 8)&0xff);
|
||||
m_request_auto_wait_state = m_auto_wait;
|
||||
pulse_clock(1);
|
||||
break;
|
||||
|
||||
@ -1936,22 +1960,26 @@ void tms9995_device::mem_write()
|
||||
break;
|
||||
case 3:
|
||||
// Set address + 1 (unless byte command)
|
||||
if (TRACE_ADDRESSBUS) logerror("tms9995: set address bus %04x\n", m_address | 1);
|
||||
if (TRACE_ADDRESSBUS) logerror("set address bus %04x\n", m_address | 1);
|
||||
m_prgspace->set_address(m_address | 1);
|
||||
if (TRACE_MEM) logerror("tms9995: memory write byte %04x <- %02x\n", m_address | 1, m_current_value & 0xff);
|
||||
if (TRACE_MEM) logerror("memory write byte %04x <- %02x\n", m_address | 1, m_current_value & 0xff);
|
||||
m_prgspace->write_byte(m_address | 1, m_current_value & 0xff);
|
||||
m_request_auto_wait_state = m_auto_wait;
|
||||
pulse_clock(1);
|
||||
break;
|
||||
case 4:
|
||||
// no action here, just wait for READY
|
||||
m_check_hold = true;
|
||||
break;
|
||||
}
|
||||
|
||||
m_mem_phase = (m_mem_phase % 4) +1;
|
||||
|
||||
// Reset to 1 when we are done
|
||||
if (m_pass==1) m_mem_phase = 1;
|
||||
if (m_pass==1)
|
||||
{
|
||||
m_mem_phase = 1;
|
||||
m_check_hold = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1975,7 +2003,7 @@ void tms9995_device::return_with_address()
|
||||
m_instruction->program = m_caller;
|
||||
MPC = m_caller_MPC; // will be increased on return
|
||||
m_address = m_current_value + m_address_add;
|
||||
if (TRACE_DETAIL) logerror("tms9995: +++ return from operand address derivation +++\n");
|
||||
if (TRACE_DETAIL) logerror("+++ return from operand address derivation +++\n");
|
||||
// no clock pulse
|
||||
}
|
||||
|
||||
@ -1989,7 +2017,7 @@ void tms9995_device::return_with_address_copy()
|
||||
m_instruction->program = m_caller;
|
||||
MPC = m_caller_MPC; // will be increased on return
|
||||
m_address = m_address_saved;
|
||||
if (TRACE_DETAIL) logerror("tms9995: +++ return from operand address derivation (auto inc) +++\n");
|
||||
if (TRACE_DETAIL) logerror("+++ return from operand address derivation (auto inc) +++\n");
|
||||
// no clock pulse
|
||||
}
|
||||
|
||||
@ -2030,7 +2058,7 @@ void tms9995_device::return_with_address_copy()
|
||||
|
||||
void tms9995_device::cru_output_operation()
|
||||
{
|
||||
if (TRACE_CRU) logerror("tms9995: CRU output operation, address %04x, value %d\n", m_cru_address, m_cru_value & 0x01);
|
||||
if (TRACE_CRU) logerror("CRU output operation, address %04x, value %d\n", m_cru_address, m_cru_value & 0x01);
|
||||
|
||||
if (m_cru_address == 0x1fda)
|
||||
{
|
||||
@ -2045,7 +2073,7 @@ void tms9995_device::cru_output_operation()
|
||||
{
|
||||
m_check_ready = false;
|
||||
// FLAG2, FLAG3, and FLAG4 are read-only
|
||||
if (TRACE_CRU) logerror("tms9995: set CRU address %04x to %d\n", m_cru_address, m_cru_value&1);
|
||||
if (TRACE_CRU) logerror("set CRU address %04x to %d\n", m_cru_address, m_cru_value&1);
|
||||
if ((m_cru_address != 0x1ee4) && (m_cru_address != 0x1ee6) && (m_cru_address != 0x1ee8))
|
||||
m_flag[(m_cru_address>>1)&0x000f] = (m_cru_value & 0x01);
|
||||
}
|
||||
@ -2102,7 +2130,7 @@ void tms9995_device::cru_input_operation()
|
||||
// ........ ........ X....... ........
|
||||
//
|
||||
crubyte = m_cru->read_byte((m_cru_address >> 4)& CRUREADMASK);
|
||||
if (TRACE_DETAIL) logerror("tms9995: Need to get next 8 bits (addresses %04x-%04x): %02x\n", (m_cru_address&0xfff0)+14, m_cru_address&0xfff0, crubyte);
|
||||
if (TRACE_DETAIL) logerror("Need to get next 8 bits (addresses %04x-%04x): %02x\n", (m_cru_address&0xfff0)+14, m_cru_address&0xfff0, crubyte);
|
||||
m_cru_read = crubyte << 15;
|
||||
m_cru_bits_left = 8;
|
||||
|
||||
@ -2115,7 +2143,7 @@ void tms9995_device::cru_input_operation()
|
||||
m_cru_first_read = false;
|
||||
m_pass = m_count;
|
||||
}
|
||||
if (TRACE_DETAIL) logerror("tms9995: adjusted value for shift: %06x\n", m_cru_read);
|
||||
if (TRACE_DETAIL) logerror("adjusted value for shift: %06x\n", m_cru_read);
|
||||
}
|
||||
|
||||
crubit = (m_cru_read & 0x8000);
|
||||
@ -2141,7 +2169,7 @@ void tms9995_device::cru_input_operation()
|
||||
}
|
||||
}
|
||||
|
||||
if (TRACE_CRU) logerror("tms9995: CRU input operation, address %04x, value %d\n", m_cru_address, (crubit & 0x8000)>>15);
|
||||
if (TRACE_CRU) logerror("CRU input operation, address %04x, value %d\n", m_cru_address, (crubit & 0x8000)>>15);
|
||||
|
||||
m_cru_value |= crubit;
|
||||
if (crubit!=0) m_parity++;
|
||||
@ -2172,11 +2200,11 @@ void tms9995_device::trigger_decrementer()
|
||||
m_decrementer_value--;
|
||||
if (m_decrementer_value==0)
|
||||
{
|
||||
if (TRACE_DEC) logerror("tms9995: decrementer reached 0\n");
|
||||
if (TRACE_DEC) logerror("decrementer reached 0\n");
|
||||
m_decrementer_value = m_starting_count_storage_register;
|
||||
if (m_flag[1]==true)
|
||||
{
|
||||
if (TRACE_DEC) logerror("tms9995: decrementer flags interrupt\n");
|
||||
if (TRACE_DEC) logerror("decrementer flags interrupt\n");
|
||||
m_flag[3] = true;
|
||||
m_int_decrementer = true;
|
||||
}
|
||||
@ -2225,12 +2253,12 @@ void tms9995_device::operand_address_subprogram()
|
||||
{
|
||||
if (m_regnumber != 0)
|
||||
{
|
||||
if (TRACE_DETAIL) logerror("tms9995: indexed addressing\n");
|
||||
if (TRACE_DETAIL) logerror("indexed addressing\n");
|
||||
MPC = 16; // indexed
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_DETAIL) logerror("tms9995: symbolic addressing\n");
|
||||
if (TRACE_DETAIL) logerror("symbolic addressing\n");
|
||||
m_address = PC;
|
||||
PC = (PC + 2) & 0xfffe;
|
||||
}
|
||||
@ -2240,7 +2268,7 @@ void tms9995_device::operand_address_subprogram()
|
||||
m_mem_phase = 1;
|
||||
m_address_add = 0;
|
||||
MPC--; // will be increased in the mail loop
|
||||
if (TRACE_DETAIL) logerror("tms9995: *** Operand address derivation; address=%04x; index=%d\n", m_address, MPC+1);
|
||||
if (TRACE_DETAIL) logerror("*** Operand address derivation; address=%04x; index=%d\n", m_address, MPC+1);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2382,7 +2410,7 @@ void tms9995_device::alu_add_s_sxc()
|
||||
{
|
||||
set_status_parity((UINT8)(dest_new>>8));
|
||||
}
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
// No clock pulse (will be done by prefetch)
|
||||
}
|
||||
|
||||
@ -2429,7 +2457,7 @@ void tms9995_device::alu_blwp()
|
||||
case 4:
|
||||
PC = m_current_value & 0xfffe;
|
||||
n = 0;
|
||||
if (TRACE_OP) logerror("tms9995: Context switch complete; WP=%04x, PC=%04x, ST=%04x\n", WP, PC, ST);
|
||||
if (TRACE_OP) logerror("Context switch complete; WP=%04x, PC=%04x, ST=%04x\n", WP, PC, ST);
|
||||
break;
|
||||
}
|
||||
m_instruction->state++;
|
||||
@ -2450,7 +2478,7 @@ void tms9995_device::alu_c()
|
||||
set_status_parity((UINT8)(m_source_value>>8));
|
||||
}
|
||||
compare_and_set_lae(m_source_value, m_current_value);
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val1=%04x, val2=%04x)\n", ST, m_source_value, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val1=%04x, val2=%04x)\n", ST, m_source_value, m_current_value);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2461,12 +2489,12 @@ void tms9995_device::alu_ci()
|
||||
// We have the register value in m_source_value, the register address in m_address_saved
|
||||
// and the immediate value in m_current_value
|
||||
compare_and_set_lae(m_source_value, m_current_value);
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val1=%04x, val2=%04x)\n", ST, m_source_value, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val1=%04x, val2=%04x)\n", ST, m_source_value, m_current_value);
|
||||
}
|
||||
|
||||
void tms9995_device::alu_clr_seto()
|
||||
{
|
||||
if (TRACE_OP) logerror("tms9995: clr/seto: Setting values for address %04x\n", m_address);
|
||||
if (TRACE_OP) logerror("clr/seto: Setting values for address %04x\n", m_address);
|
||||
switch (m_instruction->command)
|
||||
{
|
||||
case CLR:
|
||||
@ -2675,14 +2703,14 @@ void tms9995_device::alu_external()
|
||||
|
||||
if (m_instruction->command == IDLE)
|
||||
{
|
||||
if (TRACE_OP) logerror("tms9995: Entering IDLE state\n");
|
||||
if (TRACE_OP) logerror("Entering IDLE state\n");
|
||||
m_idle_state = true;
|
||||
}
|
||||
|
||||
if (m_instruction->command == RSET)
|
||||
{
|
||||
ST &= 0xfff0;
|
||||
if (TRACE_OP) logerror("tms9995: RSET, new ST = %04x\n", ST);
|
||||
if (TRACE_OP) logerror("RSET, new ST = %04x\n", ST);
|
||||
}
|
||||
|
||||
if (!m_external_operation.isnull()) m_external_operation((m_instruction->IR >> 5) & 0x07, 1, 0xff);
|
||||
@ -2723,7 +2751,7 @@ void tms9995_device::alu_f3()
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
}
|
||||
}
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x\n", ST);
|
||||
if (TRACE_STATUS) logerror("ST = %04x\n", ST);
|
||||
break;
|
||||
}
|
||||
m_instruction->state++;
|
||||
@ -2759,7 +2787,7 @@ void tms9995_device::alu_imm_arithm()
|
||||
m_current_value = (UINT16)(dest_new & 0xffff);
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
m_address = m_address_saved;
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2815,11 +2843,11 @@ void tms9995_device::alu_jump()
|
||||
|
||||
if (!cond)
|
||||
{
|
||||
if (TRACE_OP) logerror("tms9995: Jump condition false\n");
|
||||
if (TRACE_OP) logerror("Jump condition false\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_OP) logerror("tms9995: Jump condition true\n");
|
||||
if (TRACE_OP) logerror("Jump condition true\n");
|
||||
PC = (PC + (displacement<<1)) & 0xfffe;
|
||||
}
|
||||
}
|
||||
@ -2839,7 +2867,7 @@ void tms9995_device::alu_ldcr()
|
||||
case 1:
|
||||
// We have read the byte or word into m_current_value.
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (m_instruction->byteop)
|
||||
{
|
||||
m_current_value = (m_current_value>>8) & 0xff;
|
||||
@ -2868,7 +2896,7 @@ void tms9995_device::alu_li()
|
||||
// The immediate value is still in m_current_value
|
||||
m_address = m_address_saved;
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
}
|
||||
|
||||
void tms9995_device::alu_limi_lwpi()
|
||||
@ -2877,13 +2905,13 @@ void tms9995_device::alu_limi_lwpi()
|
||||
if (m_instruction->command == LIMI)
|
||||
{
|
||||
ST = (ST & 0xfff0) | (m_current_value & 0x000f);
|
||||
if (TRACE_OP) logerror("tms9995: LIMI sets ST = %04x\n", ST);
|
||||
if (TRACE_OP) logerror("LIMI sets ST = %04x\n", ST);
|
||||
pulse_clock(1); // needs one more than LWPI
|
||||
}
|
||||
else
|
||||
{
|
||||
WP = m_current_value & 0xfffe;
|
||||
if (TRACE_OP) logerror("tms9995: LWPI sets new WP = %04x\n", WP);
|
||||
if (TRACE_OP) logerror("LWPI sets new WP = %04x\n", WP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2896,13 +2924,13 @@ void tms9995_device::alu_lst_lwp()
|
||||
if (m_instruction->command==LST)
|
||||
{
|
||||
ST = m_current_value;
|
||||
if (TRACE_OP) logerror("tms9995: new ST = %04x\n", ST);
|
||||
if (TRACE_OP) logerror("new ST = %04x\n", ST);
|
||||
pulse_clock(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
WP = m_current_value & 0xfffe;
|
||||
if (TRACE_OP) logerror("tms9995: new WP = %04x\n", WP);
|
||||
if (TRACE_OP) logerror("new WP = %04x\n", WP);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2920,7 +2948,7 @@ void tms9995_device::alu_mov()
|
||||
set_status_parity((UINT8)(m_current_value>>8));
|
||||
}
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
// No clock pulse, as next instruction is prefetch
|
||||
}
|
||||
|
||||
@ -3013,7 +3041,7 @@ void tms9995_device::alu_rtwp()
|
||||
// Just for debugging purposes
|
||||
m_servicing_interrupt = false;
|
||||
|
||||
if (TRACE_OP) logerror("tms9995: RTWP restored old context (WP=%04x, PC=%04x, ST=%04x)\n", WP, PC, ST);
|
||||
if (TRACE_OP) logerror("RTWP restored old context (WP=%04x, PC=%04x, ST=%04x)\n", WP, PC, ST);
|
||||
break;
|
||||
}
|
||||
m_instruction->state++;
|
||||
@ -3066,7 +3094,7 @@ void tms9995_device::alu_shift()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TRACE_DETAIL) logerror("tms9995: Shift operation gets count from R0\n");
|
||||
if (TRACE_DETAIL) logerror("Shift operation gets count from R0\n");
|
||||
}
|
||||
pulse_clock(1);
|
||||
pulse_clock(1);
|
||||
@ -3111,7 +3139,7 @@ void tms9995_device::alu_shift()
|
||||
set_status_bit(ST_OV, overflow);
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
m_address = m_address_saved; // Register address
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
break;
|
||||
}
|
||||
m_instruction->state++;
|
||||
@ -3207,7 +3235,7 @@ void tms9995_device::alu_single_arithm()
|
||||
m_current_value = dest_new & 0xffff;
|
||||
compare_and_set_lae(m_current_value, 0);
|
||||
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
// No clock pulse, as next instruction is prefetch
|
||||
}
|
||||
|
||||
@ -3245,7 +3273,7 @@ void tms9995_device::alu_stcr()
|
||||
m_current_value <<= 8;
|
||||
}
|
||||
else n += 8;
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
if (TRACE_STATUS) logerror("ST = %04x (val=%04x)\n", ST, m_current_value);
|
||||
break;
|
||||
}
|
||||
m_instruction->state++;
|
||||
@ -3285,7 +3313,7 @@ void tms9995_device::alu_tb()
|
||||
break;
|
||||
case 2:
|
||||
set_status_bit(ST_EQ, m_cru_value!=0);
|
||||
if (TRACE_STATUS) logerror("tms9995: ST = %04x\n", ST);
|
||||
if (TRACE_STATUS) logerror("ST = %04x\n", ST);
|
||||
break;
|
||||
}
|
||||
m_instruction->state++;
|
||||
@ -3368,7 +3396,7 @@ void tms9995_device::alu_int()
|
||||
case 0:
|
||||
PC = (PC - 2) & 0xfffe;
|
||||
m_address_saved = m_address;
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (0): Prepare to read vector\n");
|
||||
if (TRACE_INTD) logerror("interrupt service (0): Prepare to read vector\n");
|
||||
break;
|
||||
case 1:
|
||||
pulse = 2; // two cycles (with the one at the end)
|
||||
@ -3376,30 +3404,30 @@ void tms9995_device::alu_int()
|
||||
WP = m_current_value & 0xfffe; // new WP
|
||||
m_current_value = ST;
|
||||
m_address = (WP + 30)&0xfffe;
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (1): Read new WP = %04x, save ST to %04x\n", WP, m_address);
|
||||
if (TRACE_INTD) logerror("interrupt service (1): Read new WP = %04x, save ST to %04x\n", WP, m_address);
|
||||
break;
|
||||
case 2:
|
||||
m_address = (WP + 28)&0xfffe;
|
||||
m_current_value = PC;
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (2): Save PC to %04x\n", m_address);
|
||||
if (TRACE_INTD) logerror("interrupt service (2): Save PC to %04x\n", m_address);
|
||||
break;
|
||||
case 3:
|
||||
m_address = (WP + 26)&0xfffe;
|
||||
m_current_value = m_source_value; // old WP
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (3): Save WP to %04x\n", m_address);
|
||||
if (TRACE_INTD) logerror("interrupt service (3): Save WP to %04x\n", m_address);
|
||||
break;
|
||||
case 4:
|
||||
m_address = (m_address_saved + 2) & 0xfffe;
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (4): Read PC from %04x\n", m_address);
|
||||
if (TRACE_INTD) logerror("interrupt service (4): Read PC from %04x\n", m_address);
|
||||
break;
|
||||
case 5:
|
||||
PC = m_current_value & 0xfffe;
|
||||
ST = (ST & 0xfe00) | m_intmask;
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (5): Context switch complete; WP=%04x, PC=%04x, ST=%04x\n", WP, PC, ST);
|
||||
if (TRACE_INTD) logerror("interrupt service (5): Context switch complete; WP=%04x, PC=%04x, ST=%04x\n", WP, PC, ST);
|
||||
|
||||
if (((m_int_pending & PENDING_MID)!=0) && m_nmi_active)
|
||||
{
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (6): NMI active after context switch\n");
|
||||
if (TRACE_INTD) logerror("interrupt service (6): NMI active after context switch\n");
|
||||
m_int_pending &= ~PENDING_MID;
|
||||
m_address = 0xfffc;
|
||||
m_intmask = 0;
|
||||
@ -3409,7 +3437,7 @@ void tms9995_device::alu_int()
|
||||
{
|
||||
if (m_from_reset)
|
||||
{
|
||||
if (TRACE_INTD) logerror("tms9995: interrupt service (6): RESET completed\n");
|
||||
if (TRACE_INTD) logerror("interrupt service (6): RESET completed\n");
|
||||
// We came from the RESET interrupt
|
||||
m_from_reset = false;
|
||||
ST &= 0x01ff;
|
||||
|
@ -54,12 +54,16 @@ public:
|
||||
// READY input line. When asserted (high), the memory is ready for data exchange.
|
||||
// We chose to use a direct method instead of a delegate to keep performance
|
||||
// footprint low; this method may be called very frequently.
|
||||
void set_ready(int state);
|
||||
DECLARE_WRITE_LINE_MEMBER( ready_line );
|
||||
|
||||
// HOLD input line. When asserted (low), the CPU is requested to release the
|
||||
// data and address bus and enter the HOLD state. The entrance of this state
|
||||
// is acknowledged by the HOLDA output line.
|
||||
void set_hold(int state);
|
||||
DECLARE_WRITE_LINE_MEMBER( hold_line );
|
||||
|
||||
// RESET input line. Unlike the standard set_input_line, this input method
|
||||
// is synchronous and will immediately lead to a reset of the CPU.
|
||||
DECLARE_WRITE_LINE_MEMBER( reset_line );
|
||||
|
||||
// Callbacks
|
||||
template<class _Object> static devcb_base &static_set_extop_callback(device_t &device, _Object object) { return downcast<tms9995_device &>(device).m_external_operation.set_callback(object); }
|
||||
@ -133,6 +137,7 @@ private:
|
||||
bool m_nmi_state;
|
||||
// bool m_irq_state;
|
||||
bool m_hold_state;
|
||||
bool m_hold_requested;
|
||||
|
||||
// READY handling. The READY line is operated before the clock
|
||||
// pulse falls. As the ready line is only set once in this emulation we
|
||||
@ -205,7 +210,7 @@ private:
|
||||
inline void pulse_clock(int count);
|
||||
|
||||
// Signal the hold state via the external line
|
||||
inline void set_hold_state(bool state);
|
||||
void set_hold_state(bool state);
|
||||
|
||||
// Only used for the DIV(S) operations. It seems sufficient to let the
|
||||
// command terminate at this point, so this method just calls command_terminated.
|
||||
|
357
src/devices/machine/tmc0430.cpp
Normal file
@ -0,0 +1,357 @@
|
||||
// license:LGPL-2.1+
|
||||
// copyright-holders:Michael Zapf
|
||||
/***************************************************************************
|
||||
|
||||
Graphics Read Only Memory (GROM, aka TMC0430)
|
||||
|
||||
+----+--+----+
|
||||
AD7 |1 G 16| Vss (-0.8V)
|
||||
AD6 |2 R 15| GR
|
||||
AD5 |3 O 14| Vdd (-5V)
|
||||
AD4 |4 M 13| GRC
|
||||
AD3 |5 12| M
|
||||
AD2 |6 11| MO
|
||||
AD1 |7 10| GS*
|
||||
AD0 |8 9| Vcc (+5V)
|
||||
+------------+
|
||||
|
||||
GR = GROM Ready. Should be connected to processor's READY/HOLD*.
|
||||
GRC = GROM clock. Typically in the range of 400-500 kHz.
|
||||
M = Direction. 1=read, 0=write
|
||||
MO = Mode. 1=address counter access, 0=data access
|
||||
GS* = GROM select. 0=select, 1=deselect
|
||||
|
||||
GROMs are slow ROM devices, which are interfaced via a 8-bit data bus,
|
||||
and which include an internal address pointer which is incremented
|
||||
after each read. This implies that accesses are faster when reading
|
||||
consecutive bytes, although the address pointer can be read and written at any time.
|
||||
|
||||
GROMs are generally used to store programs written in GPL (Graphic Programming
|
||||
Language): a proprietary, interpreted language from Texas Instruments which
|
||||
is the machine language in some kind of virtual machine that is running
|
||||
inside the TI-99/4, TI-99/4A, and TI-99/8 computers.
|
||||
|
||||
Communication with GROM is done by writing and reading data over the
|
||||
AD0-AD7 lines. The M line determines whether the circuit will input or
|
||||
output data over the bus. For GROMs, writing data is only done for setting
|
||||
the internal address register. The MO line must be asserted for accessing
|
||||
this address register; otherwise data from the memory banks can be read.
|
||||
Clearing MO and M means writing data, and although so-called GRAMs were
|
||||
mentioned by Texas Instruments in the specifications and manuals, they
|
||||
were never seen. GROMs ignore this setting.
|
||||
|
||||
Setting the address is done by writing two bytes to the circuit with
|
||||
M=0 and MO=1. In real systems, these lines are usually controlled by
|
||||
address bus lines, which maps the circuit into the memory space at specific
|
||||
addresses.
|
||||
|
||||
The GROM address counter is 13 bits long (8 KiB), and judging from its
|
||||
behavior, the memory is organized as three banks of 2 KiB each:
|
||||
|
||||
00 -> Bank 0
|
||||
01 -> Bank 1
|
||||
10 -> Bank 2
|
||||
11 -> Bank 1 OR Bank 2
|
||||
|
||||
The fourth 2 KiB block seems to be a logical OR of the contents of
|
||||
bank 1 and 2. This means that one GROM delivers a maximum of 6 KiB of data.
|
||||
Nevertheless, the address counter advances into the forbidden bank, and
|
||||
wraps at its end to bank 0.
|
||||
|
||||
8 GROMs can be used to cover a whole 16-bit address space, but only
|
||||
48 KiB of memory can be used. Each GROM has a burnt-in 3 bit identifier
|
||||
which allows us to put 8 GROMs in parallel, each one answering only
|
||||
when its area is currently selected.
|
||||
|
||||
The address that is loaded into the address register contains two parts:
|
||||
|
||||
[ I I I A A A A A A A A A A A A A ]
|
||||
|
||||
The I bits indicate which GROM to use. They are latched inside every GROM,
|
||||
and when the address is read from the register, they are delivered as the
|
||||
most significant three address bits.
|
||||
|
||||
All GROMs are wired in parallel, and only the circuits whose ID matches the
|
||||
prefix actually delivers the data to the outside. Apart from that, all
|
||||
GROMs perform the same internal operations. This means that each one of
|
||||
them holds the same address value and delivers it on request.
|
||||
|
||||
Timing. GROMs have a CPU-bound operation phase and a non-CPU-bound operation
|
||||
phase. After being selected, the READY line is immediately lowered, and
|
||||
it raises as soon as the data is ready for access. After that, a prefetch
|
||||
is done to get the next data byte from the memory banks, advancing the
|
||||
address counter. This prefetch is also done when loading the address.
|
||||
Hence, reading the address register will always deliver a value increased
|
||||
by one.
|
||||
|
||||
[1] Michael L. Bunyard: Hardware Manual for the Texas Instruments 99/4A Home Computer, section 2.5
|
||||
|
||||
Michael Zapf, August 2010
|
||||
January 2012: rewritten as class
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "tmc0430.h"
|
||||
|
||||
#define TRACE_ADDRESS 0
|
||||
#define TRACE_DETAIL 0
|
||||
#define TRACE_CLOCK 0
|
||||
#define TRACE_READY 0
|
||||
#define TRACE_LINE 0
|
||||
|
||||
/*
|
||||
Constructor.
|
||||
*/
|
||||
tmc0430_device::tmc0430_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, TMC0430, "TMC0430 device (GROM)", tag, owner, clock, "grom", __FILE__),
|
||||
m_gromready(*this),
|
||||
m_current_clock_level(CLEAR_LINE),
|
||||
m_current_ident(0),
|
||||
m_phase(0),
|
||||
m_address_mode(false),
|
||||
m_read_mode(false),
|
||||
m_selected(false),
|
||||
m_address_lowbyte(false),
|
||||
m_regionname(nullptr),
|
||||
m_ident(0),
|
||||
m_address(0),
|
||||
m_buffer(0),
|
||||
m_memptr(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// Select lines. We have three lines for the direction, the mode, and
|
||||
// the selection. You can call one function for each of them, but it is
|
||||
// recommended to use the combined set_lines function, in particular when
|
||||
// there are lots of GROMs (see, for example, TI-99/8)
|
||||
// ========================================================================
|
||||
|
||||
/*
|
||||
Direction. When ASSERTed, GROM is set to be read by CPU.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( tmc0430_device::m_line )
|
||||
{
|
||||
m_read_mode = (state==ASSERT_LINE);
|
||||
if (TRACE_LINE) logerror("GROM %d dir %s\n", m_ident>>13, m_read_mode? "READ" : "WRITE");
|
||||
}
|
||||
|
||||
/*
|
||||
Mode. When ASSERTed, the address counter will be accessed (read or write).
|
||||
*/
|
||||
WRITE_LINE_MEMBER( tmc0430_device::mo_line )
|
||||
{
|
||||
m_address_mode = (state==ASSERT_LINE);
|
||||
if (TRACE_LINE) logerror("GROM %d mode %s\n", m_ident>>13, m_address_mode? "ADDR" : "DATA");
|
||||
}
|
||||
|
||||
/*
|
||||
Select. When ASSERTed, the read/write operation is started.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( tmc0430_device::gsq_line )
|
||||
{
|
||||
if (state==ASSERT_LINE && !m_selected) // check for edge
|
||||
{
|
||||
if (TRACE_READY) logerror("GROM %d selected, pulling down READY\n", m_ident>>13);
|
||||
m_gromready(CLEAR_LINE);
|
||||
m_phase = 4; // set for three full GROM clock ticks (and a fraction at the start)
|
||||
}
|
||||
m_selected = (state==ASSERT_LINE);
|
||||
}
|
||||
|
||||
/*
|
||||
Combined select lines. Avoids separate calls to the chip.
|
||||
Address:
|
||||
0 -> MO=0, M=0
|
||||
1 -> MO=0, M=1
|
||||
2 -> MO=1, M=0
|
||||
3 -> MO=1, M=1
|
||||
Data: gsq line (ASSERT, CLEAR)
|
||||
*/
|
||||
WRITE8_MEMBER( tmc0430_device::set_lines )
|
||||
{
|
||||
m_read_mode = ((offset & GROM_M_LINE)!=0);
|
||||
m_address_mode = ((offset & GROM_MO_LINE)!=0);
|
||||
|
||||
if (data!=CLEAR_LINE && !m_selected) // check for edge
|
||||
{
|
||||
if (TRACE_READY) logerror("GROM %d selected, pulling down READY\n", m_ident>>13);
|
||||
m_gromready(CLEAR_LINE);
|
||||
m_phase = 4; // set for three full GROM clock ticks (and a fraction at the start)
|
||||
}
|
||||
m_selected = (data!=CLEAR_LINE);
|
||||
}
|
||||
|
||||
/*
|
||||
Clock in.
|
||||
|
||||
Note about the GREADY line:
|
||||
Inside the TI-99/4A console, the GREADY outputs of all GROMs are directly
|
||||
connected in parallel and pulled up. This implies that the GROMs are
|
||||
open-drain outputs pulling down. There are two options:
|
||||
- Only the currently addressed GROM pulls down the line; all others keep
|
||||
their output open.
|
||||
- All GROMs act strictly in parallel. In the case that some circuits are
|
||||
slightly out of sync, the GREADY line goes up when the last circuit releases
|
||||
the line.
|
||||
|
||||
For the emulation we may assume that all GROMs at the same clock line
|
||||
raise their outputs synchronously.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( tmc0430_device::gclock_in )
|
||||
{
|
||||
int bank = 0;
|
||||
UINT16 baddr = 0;
|
||||
|
||||
// Wait for rising edge
|
||||
line_state oldlevel = m_current_clock_level;
|
||||
m_current_clock_level = (line_state)state;
|
||||
|
||||
if ((m_current_clock_level==CLEAR_LINE) || (oldlevel==ASSERT_LINE))
|
||||
return;
|
||||
|
||||
if (TRACE_CLOCK) logerror("GROMCLK in, phase=%d, m_add=%d\n", m_phase, m_address);
|
||||
|
||||
switch (m_phase)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
// Get the next value into the buffer
|
||||
// 000b b000 0000 0000
|
||||
baddr = m_address & 0x07ff;
|
||||
bank = (m_address & 0x1800)>>11;
|
||||
|
||||
// This is a theory how the behavior of the GROM can be explained
|
||||
// We don't have decapped GROMs (yet)
|
||||
m_buffer = 0;
|
||||
if (bank == 0) m_buffer |= m_memptr[baddr];
|
||||
if (bank & 1) m_buffer |= m_memptr[baddr | 0x0800];
|
||||
if (bank & 2) m_buffer |= m_memptr[baddr | 0x1000];
|
||||
|
||||
if (TRACE_ADDRESS) logerror("G>%04x\n", m_address);
|
||||
if (TRACE_DETAIL) logerror("GROM %d preload %04x (bank %d) -> %02x\n", m_ident>>13, m_address, bank, m_buffer);
|
||||
m_phase = 3;
|
||||
break;
|
||||
case 2: // Do nothing if other ident
|
||||
m_phase = 3;
|
||||
break;
|
||||
case 3:
|
||||
// Increase counter
|
||||
m_address = ((m_address + 1)&0x1fff) | m_current_ident;
|
||||
if (TRACE_DETAIL) logerror("GROM %d increase address to %04x\n", m_ident>>13, m_address);
|
||||
|
||||
// In read mode, READY must have already been raised; in write mode, the ready line is still low
|
||||
m_phase = m_read_mode? 0 : 7;
|
||||
break;
|
||||
|
||||
case 4: // Starting here when the chip is selected
|
||||
m_phase = 5;
|
||||
break;
|
||||
case 5: // Reached only when reading (writing continues at 1 or 2)
|
||||
m_phase = 6;
|
||||
break;
|
||||
case 6:
|
||||
m_phase = 7;
|
||||
break;
|
||||
case 7:
|
||||
if (TRACE_READY) logerror("GROM %d raising READY\n", m_ident>>13);
|
||||
m_gromready(ASSERT_LINE);
|
||||
// m_address_mode = false;
|
||||
// m_read = false;
|
||||
m_phase = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Read operation. For MO=Address, delivers the address register (and destroys its contents).
|
||||
For MO=Data, delivers the byte inside the buffer and prefetches the next one.
|
||||
*/
|
||||
READ8Z_MEMBER( tmc0430_device::readz )
|
||||
{
|
||||
if (!m_selected) return;
|
||||
|
||||
if (m_address_mode)
|
||||
{
|
||||
// Address reading is destructive
|
||||
*value = (m_address & 0xff00)>>8;
|
||||
UINT8 lsb = (m_address & 0x00ff);
|
||||
m_address = (lsb << 8) | lsb; // see [1], section 2.5.3
|
||||
if (TRACE_DETAIL) logerror("GROM %d return address %02x\n", m_ident>>13, *value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deliver the value from the output buffer.
|
||||
if (m_current_ident == m_ident)
|
||||
{
|
||||
*value = m_buffer;
|
||||
m_phase = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_phase = 2;
|
||||
}
|
||||
}
|
||||
m_address_lowbyte = false;
|
||||
}
|
||||
|
||||
/*
|
||||
Write operation. For MO=Address, shifts value in the address register
|
||||
by 8 bits and copies the new value into the low byte. After every two
|
||||
write operations, prefetches the byte from the new location. For MO=Data,
|
||||
do nothing, because GRAMs were never seen in the wild.
|
||||
|
||||
This operation occurs in parallel to phase 4. The real GROM will pick up
|
||||
the value from the data bus some phases later.
|
||||
*/
|
||||
WRITE8_MEMBER( tmc0430_device::write )
|
||||
{
|
||||
if (!m_selected) return;
|
||||
|
||||
if (m_address_mode)
|
||||
{
|
||||
m_address = ((m_address << 8) | data); // [1], section 2.5.7
|
||||
m_current_ident = m_address & 0xe000;
|
||||
if (TRACE_DETAIL) logerror("GROM %d new address %04x (%s)\n", m_ident>>13, m_address, m_address_lowbyte? "complete" : "incomplete");
|
||||
// Toggle the lowbyte flag
|
||||
m_address_lowbyte = !m_address_lowbyte;
|
||||
|
||||
if (!m_address_lowbyte)
|
||||
{
|
||||
// Do a prefetch if addressed, else increase your address
|
||||
m_phase = (m_current_ident == m_ident)? 1 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Check the duration of the access. In sum, both write accesses show correct timing,
|
||||
// but in this implementation, the first one (!m_address_lowbyte) is slower (phase=4-5-6-7-0) while the
|
||||
// second is faster (phase=1-3-7-0 or 1-3-0)
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE FUNCTIONS
|
||||
***************************************************************************/
|
||||
|
||||
void tmc0430_device::device_start(void)
|
||||
{
|
||||
m_gromready.resolve_safe();
|
||||
}
|
||||
|
||||
void tmc0430_device::device_reset(void)
|
||||
{
|
||||
// The memory region must be defined in the owning component
|
||||
m_memptr = owner()->memregion(m_regionname)->base() + m_offset;
|
||||
m_address = 0;
|
||||
m_buffer = 0;
|
||||
m_current_ident = 0;
|
||||
m_address_lowbyte = false;
|
||||
}
|
||||
|
||||
int tmc0430_device::debug_get_address()
|
||||
{
|
||||
return m_address;
|
||||
}
|
||||
|
||||
const device_type TMC0430 = &device_creator<tmc0430_device>;
|
111
src/devices/machine/tmc0430.h
Normal file
@ -0,0 +1,111 @@
|
||||
// license:LGPL-2.1+
|
||||
// copyright-holders:Michael Zapf
|
||||
/***************************************************************************
|
||||
|
||||
GROM emulation
|
||||
See grom.c for documentation,
|
||||
|
||||
Michael Zapf
|
||||
|
||||
February 2012: Rewritten as class
|
||||
|
||||
***************************************************************************/
|
||||
#ifndef __TMC0430__
|
||||
#define __TMC0430__
|
||||
|
||||
extern const device_type TMC0430;
|
||||
|
||||
#ifndef READ8Z_MEMBER
|
||||
#define DECLARE_READ8Z_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 *value, ATTR_UNUSED UINT8 mem_mask = 0xff)
|
||||
#define READ8Z_MEMBER(name) void name(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 *value, ATTR_UNUSED UINT8 mem_mask)
|
||||
#endif
|
||||
|
||||
enum
|
||||
{
|
||||
GROM_M_LINE = 1,
|
||||
GROM_MO_LINE = 2
|
||||
};
|
||||
|
||||
class tmc0430_device : public device_t
|
||||
{
|
||||
public:
|
||||
tmc0430_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _Object> static devcb_base &set_ready_wr_callback(device_t &device, _Object object) { return downcast<tmc0430_device &>(device).m_gromready.set_callback(object); }
|
||||
|
||||
DECLARE_READ8Z_MEMBER(readz);
|
||||
DECLARE_WRITE8_MEMBER(write);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(m_line);
|
||||
DECLARE_WRITE_LINE_MEMBER(mo_line);
|
||||
DECLARE_WRITE_LINE_MEMBER(gsq_line);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(gclock_in);
|
||||
|
||||
DECLARE_WRITE8_MEMBER( set_lines );
|
||||
|
||||
static void set_region_and_ident(device_t &device, const char *regionname, int offset, int ident)
|
||||
{
|
||||
downcast<tmc0430_device &>(device).m_regionname = regionname;
|
||||
downcast<tmc0430_device &>(device).m_offset = offset;
|
||||
downcast<tmc0430_device &>(device).m_ident = ident<<13;
|
||||
}
|
||||
|
||||
int debug_get_address();
|
||||
|
||||
protected:
|
||||
void device_start(void) override;
|
||||
void device_reset(void) override;
|
||||
|
||||
private:
|
||||
// Ready callback. This line is usually connected to the READY pin of the CPU.
|
||||
devcb_write_line m_gromready;
|
||||
|
||||
// Clock line level
|
||||
line_state m_current_clock_level;
|
||||
|
||||
// Currently active GROM ident
|
||||
int m_current_ident;
|
||||
|
||||
// Phase of the state machine
|
||||
int m_phase;
|
||||
|
||||
// Address or data mode?
|
||||
bool m_address_mode;
|
||||
|
||||
// Reading or writing?
|
||||
bool m_read_mode;
|
||||
|
||||
// Selected?
|
||||
bool m_selected;
|
||||
|
||||
// Toggle for address loading
|
||||
bool m_address_lowbyte;
|
||||
|
||||
// Region name
|
||||
const char* m_regionname;
|
||||
|
||||
// Offset in the region. We cannot rely on the ident because the GROMs
|
||||
// in the cartridges begin with ident 3, but start at the beginning of their region.
|
||||
int m_offset;
|
||||
|
||||
// Identification of this GROM (0-7 <<13)
|
||||
int m_ident;
|
||||
|
||||
// The address pointer is always expected to be in the range 0x0000 - 0xffff, even
|
||||
// when this GROM is not addressed.
|
||||
UINT16 m_address;
|
||||
|
||||
/* GROM data buffer. */
|
||||
UINT8 m_buffer;
|
||||
|
||||
/* Pointer to the memory region contained in this GROM. */
|
||||
UINT8 *m_memptr;
|
||||
};
|
||||
|
||||
#define MCFG_GROM_ADD(_tag, _ident, _region, _offset, _ready) \
|
||||
MCFG_DEVICE_ADD(_tag, TMC0430, 0) \
|
||||
tmc0430_device::set_region_and_ident(*device, _region, _offset, _ident); \
|
||||
tmc0430_device::set_ready_wr_callback(*device, DEVCB_##_ready);
|
||||
|
||||
#endif
|
@ -573,6 +573,19 @@ void tms9901_device::device_stop(void)
|
||||
-------------------------------------------------*/
|
||||
|
||||
void tms9901_device::device_reset(void)
|
||||
{
|
||||
do_reset();
|
||||
}
|
||||
|
||||
/*
|
||||
RST1 input line (active low; using ASSERT/CLEAR).
|
||||
*/
|
||||
WRITE_LINE_MEMBER( tms9901_device::rst1_line )
|
||||
{
|
||||
if (state==ASSERT_LINE) do_reset();
|
||||
}
|
||||
|
||||
void tms9901_device::do_reset()
|
||||
{
|
||||
m_timer_int_pending = false;
|
||||
m_enabled_ints = 0;
|
||||
|
@ -60,6 +60,8 @@ public:
|
||||
|
||||
void set_single_int(int pin_number, int state);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( rst1_line );
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
@ -95,6 +97,9 @@ private:
|
||||
void device_stop(void) override;
|
||||
void device_reset(void) override;
|
||||
|
||||
// Common method for device_reset and rst1_line
|
||||
void do_reset();
|
||||
|
||||
// State of the INT1-INT15 lines (must be inverted when queried)
|
||||
// Note that the levels must also be delivered when reading the pins, which
|
||||
// may require to latch the int levels.
|
||||
|
@ -46,7 +46,55 @@
|
||||
Note the standard naming for d* data bits with 7 as MSB and 0 as LSB is in lowercase.
|
||||
TI's naming has D7 as LSB and D0 as MSB and is in uppercase
|
||||
|
||||
TMS5100:
|
||||
|
||||
+-----------------+
|
||||
TST | 1 28 | CS
|
||||
PDC | 2 27 | CTL8
|
||||
ROM CK | 3 26 | ADD8
|
||||
CPU CK | 4 25 | CTL1
|
||||
VDD | 5 24 | ADD1
|
||||
CR OSC | 6 23 | CTL2
|
||||
RC OSC | 7 22 | ADD2
|
||||
T11 | 8 21 | ADD4
|
||||
NC | 9 20 | CTL4
|
||||
I/O | 10 19 | M1
|
||||
SPK1 | 11 18 | NC
|
||||
SPK2 | 12 17 | NC
|
||||
PROM OUT | 13 16 | NC
|
||||
VSS | 14 15 | M0
|
||||
+-----------------+
|
||||
|
||||
T11: Sync for serial data out
|
||||
|
||||
|
||||
M58817
|
||||
|
||||
The following connections could be derived from radar scope schematics.
|
||||
The M58817 is not 100% pin compatible to the 5100, but really close.
|
||||
|
||||
+-----------------+
|
||||
(NC) | 1 28 | CS
|
||||
PDC | 2 27 | CTL8
|
||||
ROM CK | 3 26 | ADD8 (to 58819)
|
||||
(NC) | 4 25 | CTL1
|
||||
(VDD,-5) | 5 24 | ADD1 (to 58819)
|
||||
(GND) | 6 23 | CTL2
|
||||
Xin | 7 22 | ADD2 (to 58819)
|
||||
Xout | 8 21 | ADD4 (to 58819)
|
||||
(NC) | 9 20 | CTL4
|
||||
(VDD,-5) | 10 19 | Status back to CPU
|
||||
(NC) | 11 18 | C1 (to 58819)
|
||||
SPKR | 12 17 | (NC)
|
||||
SPKR | 13 16 | C0 (to 58819)
|
||||
(NC) | 14 15 | (5V)
|
||||
+-----------------+
|
||||
|
||||
TODO:
|
||||
5110:
|
||||
* implement CS
|
||||
* TMS5110_CMD_TEST_TALK is only partially implemented
|
||||
5220:
|
||||
* Samples repeat over and over in the 'eprom' test mode. Needs investigation.
|
||||
* Implement a ready callback for pc interfaces
|
||||
- this will be quite a challenge since for it to be really accurate
|
||||
@ -272,7 +320,7 @@ static INT16 clip_analog(INT16 cliptemp);
|
||||
/* must be defined; if 0, output the waveform as if it was tapped on the speaker pin as usual, if 1, output the waveform as if it was tapped on the i/o pin (volume is much lower in the latter case) */
|
||||
#define FORCE_DIGITAL 0
|
||||
|
||||
/* must be defined; if 1, normal speech (one A cycle, one B cycle per interpolation step); if 0; speak as if SPKSLOW was used (two A cycles, one B cycle per interpolation step) */
|
||||
/* 5220 only; must be defined; if 1, normal speech (one A cycle, one B cycle per interpolation step); if 0; speak as if SPKSLOW was used (two A cycles, one B cycle per interpolation step) */
|
||||
#define FORCE_SUBC_RELOAD 1
|
||||
|
||||
|
||||
@ -280,9 +328,9 @@ static INT16 clip_analog(INT16 cliptemp);
|
||||
#undef VERBOSE
|
||||
// above is general, somewhat obsolete, catch all for debugs which don't fit elsewhere
|
||||
#undef DEBUG_DUMP_INPUT_DATA
|
||||
// above dumps the data input to the tms52xx to stdout, useful for making logged data dumps for real hardware tests
|
||||
// 5220 only; above dumps the data written to the tms52xx to stdout, useful for making logged data dumps for real hardware tests
|
||||
#undef DEBUG_FIFO
|
||||
// above debugs fifo stuff: writes, reads and flag updates
|
||||
// 5220 only; above debugs fifo stuff: writes, reads and flag updates
|
||||
#undef DEBUG_PARSE_FRAME_DUMP
|
||||
// above dumps each frame to stderr: be sure to select one of the options below if you define it!
|
||||
#undef DEBUG_PARSE_FRAME_DUMP_BIN
|
||||
@ -310,18 +358,39 @@ static INT16 clip_analog(INT16 cliptemp);
|
||||
|
||||
#define MAX_SAMPLE_CHUNK 512
|
||||
|
||||
/* Variants */
|
||||
/* 6+4 Variants, from tms5110r.inc */
|
||||
|
||||
#define TMS5220_IS_5220C (4)
|
||||
#define TMS5220_IS_5200 (5)
|
||||
#define TMS5220_IS_5220 (6)
|
||||
#define TMS5220_IS_CD2501ECD (7)
|
||||
#define TMS5220_IS_TMC0281 (1)
|
||||
#define TMS5220_IS_TMC0281D (2)
|
||||
#define TMS5220_IS_CD2801 (3)
|
||||
#define TMS5220_IS_CD2802 (4)
|
||||
#define TMS5220_IS_TMS5110A (5)
|
||||
#define TMS5220_IS_M58817 (6)
|
||||
#define TMS5220_IS_5220C (7)
|
||||
#define TMS5220_IS_5200 (8)
|
||||
#define TMS5220_IS_5220 (9)
|
||||
#define TMS5220_IS_CD2501ECD (10)
|
||||
|
||||
#define TMS5220_IS_CD2501E TMS5220_IS_5200
|
||||
|
||||
// 52xx: decide whether we have rate control or not
|
||||
#define TMS5220_HAS_RATE_CONTROL ((m_variant == TMS5220_IS_5220C) || (m_variant == TMS5220_IS_CD2501ECD))
|
||||
|
||||
// All: decide whether we are a 51xx or a 52xx
|
||||
#define TMS5220_IS_52xx ((m_variant == TMS5220_IS_5220C) || (m_variant == TMS5220_IS_5200) || (m_variant == TMS5220_IS_5220) || (m_variant == TMS5220_IS_CD2501ECD))
|
||||
|
||||
/* 51xx: States for CTL */
|
||||
// ctl bus is input to tms51xx
|
||||
#define CTL_STATE_INPUT (0)
|
||||
// ctl bus is outputting a test talk command on CTL1(bit 0)
|
||||
#define CTL_STATE_TTALK_OUTPUT (1)
|
||||
// ctl bus is switching direction, next will be above
|
||||
#define CTL_STATE_NEXT_TTALK_OUTPUT (2)
|
||||
// ctl bus is outputting a read nybble 'output' command on CTL1,2,4,8 (bits 0-3)
|
||||
#define CTL_STATE_OUTPUT (3)
|
||||
// ctl bus is switching direction, next will be above
|
||||
#define CTL_STATE_NEXT_OUTPUT (4)
|
||||
|
||||
static const UINT8 reload_table[4] = { 0, 2, 4, 6 }; //sample count reload for 5220c and cd2501ecd only; 5200 and 5220 always reload with 0; keep in mind this is loaded on IP=0 PC=12 subcycle=1 so it immediately will increment after one sample, effectively being 1,3,5,7 as in the comments above.
|
||||
|
||||
// Pull in the ROM tables
|
||||
@ -332,6 +401,24 @@ void tms5220_device::set_variant(int variant)
|
||||
{
|
||||
switch (variant)
|
||||
{
|
||||
case TMS5220_IS_TMC0281:
|
||||
m_coeff = &T0280B_0281A_coeff;
|
||||
break;
|
||||
case TMS5220_IS_TMC0281D:
|
||||
m_coeff = &T0280D_0281D_coeff;
|
||||
break;
|
||||
case TMS5220_IS_CD2801:
|
||||
m_coeff = &T0280F_2801A_coeff;
|
||||
break;
|
||||
case TMS5220_IS_M58817:
|
||||
m_coeff = &M58817_coeff;
|
||||
break;
|
||||
case TMS5220_IS_CD2802:
|
||||
m_coeff = &T0280F_2802_coeff;
|
||||
break;
|
||||
case TMS5220_IS_TMS5110A:
|
||||
m_coeff = &tms5110a_coeff;
|
||||
break;
|
||||
case TMS5220_IS_5200:
|
||||
case TMS5220_IS_CD2501ECD:
|
||||
m_coeff = &T0285_2501E_coeff;
|
||||
@ -458,7 +545,59 @@ static void printbits(long data, int num)
|
||||
|
||||
/**********************************************************************************************
|
||||
|
||||
tms5220_data_write -- handle a write to the TMS5220
|
||||
tms5220_device::new_int_write -- wrap a write to the VSM
|
||||
|
||||
***********************************************************************************************/
|
||||
void tms5220_device::new_int_write(UINT8 rc, UINT8 m0, UINT8 m1, UINT8 addr)
|
||||
{
|
||||
if (!m_m0_cb.isnull())
|
||||
m_m0_cb(m0);
|
||||
if (!m_m1_cb.isnull())
|
||||
m_m1_cb(m1);
|
||||
if (!m_addr_cb.isnull())
|
||||
m_addr_cb((offs_t)0, addr);
|
||||
if (!m_romclk_cb.isnull())
|
||||
{
|
||||
//printf("rc %d\n", rc);
|
||||
m_romclk_cb(rc);
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************************************
|
||||
|
||||
tms5220_device::new_int_write_addr -- wrap a 'load address' set of writes to the VSM
|
||||
|
||||
***********************************************************************************************/
|
||||
void tms5220_device::new_int_write_addr(UINT8 addr)
|
||||
{
|
||||
new_int_write(1, 0, 1, addr); // romclk 1, m0 0, m1 1, addr bus nybble = xxxx
|
||||
new_int_write(0, 0, 1, addr); // romclk 0, m0 0, m1 1, addr bus nybble = xxxx
|
||||
new_int_write(1, 0, 0, addr); // romclk 1, m0 0, m1 0, addr bus nybble = xxxx
|
||||
new_int_write(0, 0, 0, addr); // romclk 0, m0 0, m1 0, addr bus nybble = xxxx
|
||||
}
|
||||
|
||||
/**********************************************************************************************
|
||||
|
||||
tms5220_device::new_int_write_addr -- wrap a 'read bit' set of writes to the VSM
|
||||
|
||||
***********************************************************************************************/
|
||||
UINT8 tms5220_device::new_int_read()
|
||||
{
|
||||
new_int_write(1, 1, 0, 0); // romclk 1, m0 1, m1 0, addr bus nybble = 0/open bus
|
||||
new_int_write(0, 1, 0, 0); // romclk 0, m0 1, m1 0, addr bus nybble = 0/open bus
|
||||
new_int_write(1, 0, 0, 0); // romclk 1, m0 0, m1 0, addr bus nybble = 0/open bus
|
||||
new_int_write(0, 0, 0, 0); // romclk 0, m0 0, m1 0, addr bus nybble = 0/open bus
|
||||
if (!m_data_cb.isnull())
|
||||
return m_data_cb();
|
||||
#ifdef VERBOSE
|
||||
logerror("WARNING: CALLBACK MISSING, RETURNING 0!\n");
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**********************************************************************************************
|
||||
|
||||
tms5220_device::data_write -- handle a write to the TMS5220
|
||||
|
||||
***********************************************************************************************/
|
||||
|
||||
@ -626,13 +765,39 @@ int tms5220_device::extract_bits(int count)
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifndef USE_NEW_TMS6100_CODE
|
||||
/** TODO: get rid of this old code */
|
||||
// extract from VSM (speech ROM)
|
||||
if (m_speechrom)
|
||||
val = m_speechrom->read(count);
|
||||
#else
|
||||
while (count--)
|
||||
{
|
||||
val = (val << 1) | new_int_read();
|
||||
#ifdef VERBOSE
|
||||
logerror("bit read: %d\n", val&1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
/** TODO: dummy reads should be auto-done for tms52xx for the first read after an address load, but not tms51xx where they need to be done manually, if needed */
|
||||
void tms5220_device::perform_dummy_read()
|
||||
{
|
||||
if (m_schedule_dummy_read)
|
||||
{
|
||||
#ifdef VERBOSE
|
||||
int data = new_int_read();
|
||||
logerror("TMS5110 performing dummy read; value read = %1i\n", data & 1);
|
||||
#else
|
||||
new_int_read();
|
||||
#endif
|
||||
m_schedule_dummy_read = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************************************
|
||||
|
||||
tms5220_status_read -- read status or data from the TMS5220
|
||||
@ -1470,9 +1635,14 @@ void tms5220_device::device_start()
|
||||
set_variant(TMS5220_IS_5220);
|
||||
m_clock = clock();
|
||||
|
||||
/* resolve irq and readyq line */
|
||||
/* resolve callbacks */
|
||||
m_irq_handler.resolve();
|
||||
m_readyq_handler.resolve();
|
||||
m_m0_cb.resolve();
|
||||
m_m1_cb.resolve();
|
||||
m_romclk_cb.resolve();
|
||||
m_addr_cb.resolve();
|
||||
m_data_cb.resolve();
|
||||
|
||||
/* initialize a stream */
|
||||
m_stream = machine().sound().stream_alloc(*this, 0, 1, clock() / 80);
|
||||
@ -1917,7 +2087,12 @@ tms5220_device::tms5220_device(const machine_config &mconfig, const char *tag, d
|
||||
device_sound_interface(mconfig, *this),
|
||||
m_irq_handler(*this),
|
||||
m_readyq_handler(*this),
|
||||
m_speechrom_tag(nullptr)
|
||||
m_speechrom_tag(nullptr),
|
||||
m_m0_cb(*this),
|
||||
m_m1_cb(*this),
|
||||
m_addr_cb(*this),
|
||||
m_data_cb(*this),
|
||||
m_romclk_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -1926,7 +2101,12 @@ tms5220_device::tms5220_device(const machine_config &mconfig, device_type type,
|
||||
device_sound_interface(mconfig, *this),
|
||||
m_irq_handler(*this),
|
||||
m_readyq_handler(*this),
|
||||
m_speechrom_tag(nullptr)
|
||||
m_speechrom_tag(nullptr),
|
||||
m_m0_cb(*this),
|
||||
m_m1_cb(*this),
|
||||
m_addr_cb(*this),
|
||||
m_data_cb(*this),
|
||||
m_romclk_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -25,9 +25,25 @@
|
||||
#define MCFG_TMS52XX_READYQ_HANDLER(_devcb) \
|
||||
devcb = &tms5220_device::set_readyq_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
/* old VSM handler, remove me! */
|
||||
#define MCFG_TMS52XX_SPEECHROM(_tag) \
|
||||
tms5220_device::set_speechrom_tag(*device, _tag);
|
||||
|
||||
/* new VSM handler */
|
||||
#define MCFG_TMS52XX_M0_CB(_devcb) \
|
||||
devcb = &tms5220_device::set_m0_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_TMS52XX_M1_CB(_devcb) \
|
||||
devcb = &tms5220_device::set_m1_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_TMS52XX_ADDR_CB(_devcb) \
|
||||
devcb = &tms5220_device::set_addr_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_TMS52XX_DATA_CB(_devcb) \
|
||||
devcb = &tms5220_device::set_data_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_TMS52XX_ROMCLK_CB(_devcb) \
|
||||
devcb = &tms5220_device::set_romclk_callback(*device, DEVCB_##_devcb);
|
||||
class tms5220_device : public device_t,
|
||||
public device_sound_interface
|
||||
{
|
||||
@ -38,7 +54,14 @@ public:
|
||||
// static configuration helpers
|
||||
template<class _Object> static devcb_base &set_irq_handler(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_irq_handler.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_readyq_handler(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_readyq_handler.set_callback(object); }
|
||||
// old VSM support, remove me!
|
||||
static void set_speechrom_tag(device_t &device, const char *_tag) { downcast<tms5220_device &>(device).m_speechrom_tag = _tag; }
|
||||
// new VSM support
|
||||
template<class _Object> static devcb_base &set_m0_callback(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_m0_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_m1_callback(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_m1_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_addr_callback(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_addr_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_data_callback(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_data_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_romclk_callback(device_t &device, _Object object) { return downcast<tms5220_device &>(device).m_romclk_cb.set_callback(object); }
|
||||
|
||||
/* Control lines - once written to will switch interface into
|
||||
* "true" timing behaviour.
|
||||
@ -73,6 +96,12 @@ protected:
|
||||
void set_variant(int variant);
|
||||
|
||||
private:
|
||||
// 51xx and VSM related
|
||||
void new_int_write(UINT8 rc, UINT8 m0, UINT8 m1, UINT8 addr);
|
||||
void new_int_write_addr(UINT8 addr);
|
||||
UINT8 new_int_read();
|
||||
void perform_dummy_read();
|
||||
// 52xx or common
|
||||
void register_for_save_states();
|
||||
void data_write(int data);
|
||||
void update_fifo_status_and_ints();
|
||||
@ -96,6 +125,24 @@ private:
|
||||
/* coefficient tables */
|
||||
const struct tms5100_coeffs *m_coeff;
|
||||
|
||||
/* these contain global status bits */
|
||||
UINT8 m_PDC;
|
||||
UINT8 m_CTL_pins;
|
||||
UINT8 m_state;
|
||||
|
||||
/* New VSM interface */
|
||||
UINT32 m_address;
|
||||
UINT8 m_next_is_address;
|
||||
UINT8 m_schedule_dummy_read;
|
||||
UINT8 m_addr_bit;
|
||||
/* read byte */
|
||||
UINT8 m_CTL_buffer;
|
||||
|
||||
/* Old VSM interface; R Nabet : These have been added to emulate speech Roms */
|
||||
//UINT8 m_schedule_dummy_read; /* set after each load address, so that next read operation is preceded by a dummy read */
|
||||
UINT8 m_data_register; /* data register, used by read command */
|
||||
UINT8 m_RDB_flag; /* whether we should read data register or status register */
|
||||
|
||||
/* these contain data that describes the 128-bit data FIFO */
|
||||
UINT8 m_fifo[FIFO_SIZE];
|
||||
UINT8 m_fifo_head;
|
||||
@ -167,11 +214,6 @@ private:
|
||||
UINT16 m_RNG; /* the random noise generator configuration is: 1 + x + x^3 + x^4 + x^13 TODO: no it isn't */
|
||||
INT16 m_excitation_data;
|
||||
|
||||
/* R Nabet : These have been added to emulate speech Roms */
|
||||
UINT8 m_schedule_dummy_read; /* set after each load address, so that next read operation is preceded by a dummy read */
|
||||
UINT8 m_data_register; /* data register, used by read command */
|
||||
UINT8 m_RDB_flag; /* whether we should read data register or status register */
|
||||
|
||||
/* The TMS52xx has two different ways of providing output data: the
|
||||
analog speaker pin (which was usually used) and the Digital I/O pin.
|
||||
The internal DAC used to feed the analog pin is only 8 bits, and has the
|
||||
@ -201,8 +243,18 @@ private:
|
||||
/* callbacks */
|
||||
devcb_write_line m_irq_handler;
|
||||
devcb_write_line m_readyq_handler;
|
||||
// next 2 lines are old speechrom handler, remove me!
|
||||
const char *m_speechrom_tag;
|
||||
speechrom_device *m_speechrom;
|
||||
// next lines are new speechrom handler
|
||||
devcb_write_line m_m0_cb; // the M0 line
|
||||
devcb_write_line m_m1_cb; // the M1 line
|
||||
devcb_write8 m_addr_cb; // Write to ADD1,2,4,8 - 4 address bits
|
||||
devcb_read_line m_data_cb; // Read one bit from ADD8/Data - voice data
|
||||
// On a real chip rom_clk is running all the time
|
||||
// Here, we only use it to properly emulate the protocol.
|
||||
// Do not rely on it to be a timed signal.
|
||||
devcb_write_line m_romclk_cb; // rom clock - Only used to drive the data lines
|
||||
};
|
||||
|
||||
extern const device_type TMS5220;
|
||||
|
@ -59,6 +59,7 @@ tms9928a_device::tms9928a_device( const machine_config &mconfig, device_type typ
|
||||
device_memory_interface(mconfig, *this),
|
||||
device_video_interface(mconfig, *this),
|
||||
m_out_int_line_cb(*this),
|
||||
m_out_gromclk_cb(*this),
|
||||
m_space_config("vram",ENDIANNESS_BIG, 8, 14, 0, nullptr, *ADDRESS_MAP_NAME(memmap))
|
||||
{
|
||||
m_50hz = is_50hz;
|
||||
@ -74,6 +75,7 @@ tms9928a_device::tms9928a_device( const machine_config &mconfig, const char *tag
|
||||
device_video_interface(mconfig, *this),
|
||||
m_vram_size(0),
|
||||
m_out_int_line_cb(*this),
|
||||
m_out_gromclk_cb(*this),
|
||||
m_space_config("vram",ENDIANNESS_BIG, 8, 14, 0, nullptr, *ADDRESS_MAP_NAME(memmap))
|
||||
{
|
||||
m_50hz = false;
|
||||
@ -302,6 +304,15 @@ WRITE8_MEMBER( tms9928a_device::register_write )
|
||||
|
||||
void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
// Handle GROM clock if present
|
||||
if (id==GROMCLK)
|
||||
{
|
||||
// Pulse it
|
||||
m_out_gromclk_cb(ASSERT_LINE);
|
||||
m_out_gromclk_cb(CLEAR_LINE);
|
||||
return;
|
||||
}
|
||||
|
||||
int raw_vpos = m_screen->vpos();
|
||||
int vpos = raw_vpos * m_vertical_size / m_screen->height();
|
||||
UINT16 BackColour = m_Regs[7] & 15;
|
||||
@ -669,6 +680,7 @@ void tms9928a_device::device_start()
|
||||
m_vertical_size = m_50hz ? TMS9928A_TOTAL_VERT_PAL : TMS9928A_TOTAL_VERT_NTSC;
|
||||
|
||||
m_out_int_line_cb.resolve();
|
||||
m_out_gromclk_cb.resolve();
|
||||
|
||||
// Video RAM is allocated as an own address space
|
||||
m_vram_space = &space(AS_DATA);
|
||||
@ -677,6 +689,7 @@ void tms9928a_device::device_start()
|
||||
m_tmpbmp.allocate(TMS9928A_TOTAL_HORZ, TMS9928A_TOTAL_VERT_PAL);
|
||||
|
||||
m_line_timer = timer_alloc(TIMER_LINE);
|
||||
m_gromclk_timer = timer_alloc(GROMCLK);
|
||||
|
||||
set_palette();
|
||||
|
||||
@ -728,4 +741,7 @@ void tms9928a_device::device_reset()
|
||||
m_mode = 0;
|
||||
|
||||
m_line_timer->adjust( m_screen->time_until_pos( 0, TMS9928A_HORZ_DISPLAY_START ) );
|
||||
|
||||
// TODO: Check clock freq settings in all drivers
|
||||
if (!m_out_gromclk_cb.isnull() && m_99) m_gromclk_timer->adjust(attotime::zero, 0, attotime::from_hz(clock()/12));
|
||||
}
|
||||
|
@ -51,6 +51,9 @@
|
||||
|
||||
#define MCFG_TMS9928A_SET_SCREEN MCFG_VIDEO_SET_SCREEN
|
||||
|
||||
#define MCFG_TMS9928A_OUT_GROMCLK_CB(_devcb) \
|
||||
devcb = &tms9928a_device::set_out_gromclk_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
|
||||
#define MCFG_TMS9928A_SCREEN_ADD_NTSC(_screen_tag) \
|
||||
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
|
||||
@ -87,6 +90,7 @@ public:
|
||||
|
||||
static void set_vram_size(device_t &device, int vram_size) { downcast<tms9928a_device &>(device).m_vram_size = vram_size; }
|
||||
template<class _Object> static devcb_base &set_out_int_line_callback(device_t &device, _Object object) { return downcast<tms9928a_device &>(device).m_out_int_line_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_out_gromclk_callback(device_t &device, _Object object) { return downcast<tms9928a_device &>(device).m_out_gromclk_cb.set_callback(object); }
|
||||
|
||||
DECLARE_READ8_MEMBER( vram_read );
|
||||
DECLARE_WRITE8_MEMBER( vram_write );
|
||||
@ -117,9 +121,11 @@ private:
|
||||
void set_palette();
|
||||
|
||||
static const device_timer_id TIMER_LINE = 0;
|
||||
static const device_timer_id GROMCLK = 1;
|
||||
|
||||
int m_vram_size; /* 4K, 8K, or 16K. This should be replaced by fetching data from an address space? */
|
||||
devcb_write_line m_out_int_line_cb; /* Callback is called whenever the state of the INT output changes */
|
||||
devcb_write_line m_out_gromclk_cb; // GROMCLK line is optional; if present, pulse it by XTAL/24 rate
|
||||
|
||||
/* TMS9928A internal settings */
|
||||
UINT8 m_ReadAhead;
|
||||
@ -147,6 +153,7 @@ private:
|
||||
|
||||
bitmap_rgb32 m_tmpbmp;
|
||||
emu_timer *m_line_timer;
|
||||
emu_timer *m_gromclk_timer;
|
||||
UINT8 m_mode;
|
||||
|
||||
/* emulation settings */
|
||||
|
@ -74,7 +74,7 @@ struct game_driver
|
||||
const rom_entry * rom; // pointer to list of ROMs for the game
|
||||
const char * compatible_with;
|
||||
UINT32 flags; // orientation and other flags; see defines below
|
||||
const char * default_layout; // default internally defined layout
|
||||
const internal_layout * default_layout; // default internally defined layout
|
||||
};
|
||||
|
||||
|
||||
@ -95,7 +95,22 @@ struct game_driver
|
||||
|
||||
// standard GAME() macro
|
||||
#define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,CLASS,INIT,MONITOR,COMPANY,FULLNAME,FLAGS) \
|
||||
GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,CLASS,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,((const char *)0))
|
||||
extern const game_driver GAME_NAME(NAME) = \
|
||||
{ \
|
||||
__FILE__, \
|
||||
#PARENT, \
|
||||
#NAME, \
|
||||
FULLNAME, \
|
||||
#YEAR, \
|
||||
COMPANY, \
|
||||
MACHINE_CONFIG_NAME(MACHINE), \
|
||||
INPUT_PORTS_NAME(INPUT), \
|
||||
&driver_device::driver_init_wrapper<CLASS, &CLASS::init_##INIT>, \
|
||||
ROM_NAME(NAME), \
|
||||
nullptr, \
|
||||
(MONITOR)|(FLAGS)|MACHINE_TYPE_ARCADE, \
|
||||
nullptr \
|
||||
};
|
||||
|
||||
// standard macro with additional layout
|
||||
#define GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,CLASS,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,LAYOUT) \
|
||||
@ -111,9 +126,9 @@ extern const game_driver GAME_NAME(NAME) = \
|
||||
INPUT_PORTS_NAME(INPUT), \
|
||||
&driver_device::driver_init_wrapper<CLASS, &CLASS::init_##INIT>, \
|
||||
ROM_NAME(NAME), \
|
||||
NULL, \
|
||||
nullptr, \
|
||||
(MONITOR)|(FLAGS)|MACHINE_TYPE_ARCADE, \
|
||||
&LAYOUT[0] \
|
||||
&LAYOUT \
|
||||
};
|
||||
|
||||
// standard console definition macro
|
||||
@ -132,7 +147,7 @@ extern const game_driver GAME_NAME(NAME) = \
|
||||
ROM_NAME(NAME), \
|
||||
#COMPAT, \
|
||||
ROT0|(FLAGS)|MACHINE_TYPE_CONSOLE, \
|
||||
NULL \
|
||||
nullptr \
|
||||
};
|
||||
|
||||
// standard computer definition macro
|
||||
@ -151,7 +166,7 @@ extern const game_driver GAME_NAME(NAME) = \
|
||||
ROM_NAME(NAME), \
|
||||
#COMPAT, \
|
||||
ROT0|(FLAGS)|MACHINE_TYPE_COMPUTER, \
|
||||
NULL \
|
||||
nullptr \
|
||||
};
|
||||
|
||||
// standard system definition macro
|
||||
@ -170,7 +185,7 @@ extern const game_driver GAME_NAME(NAME) = \
|
||||
ROM_NAME(NAME), \
|
||||
#COMPAT, \
|
||||
ROT0|(FLAGS)|MACHINE_TYPE_OTHER, \
|
||||
NULL \
|
||||
nullptr \
|
||||
};
|
||||
|
||||
|
||||
|
@ -1128,7 +1128,7 @@ void info_xml_creator::output_ports(const ioport_list &portlist)
|
||||
// cycle through ports
|
||||
for (ioport_port &port : portlist)
|
||||
{
|
||||
fprintf(m_output,"\t\t<port tag=\"%s\">\n", port.tag());
|
||||
fprintf(m_output,"\t\t<port tag=\"%s\">\n", xml_normalize_string(port->tag()));
|
||||
for (ioport_field &field : port.fields())
|
||||
{
|
||||
if(field.is_analog())
|
||||
|
@ -36,6 +36,15 @@ struct gfx_decode_entry;
|
||||
class driver_device;
|
||||
class screen_device;
|
||||
|
||||
struct internal_layout
|
||||
{
|
||||
size_t decompressed_size;
|
||||
size_t compressed_size;
|
||||
UINT8 compression_type;
|
||||
const UINT8* data;
|
||||
};
|
||||
|
||||
|
||||
// ======================> machine_config
|
||||
|
||||
// machine configuration definition
|
||||
@ -66,7 +75,7 @@ public:
|
||||
bool m_force_no_drc; // whether or not to force DRC off
|
||||
|
||||
// other parameters
|
||||
const char * m_default_layout; // default layout for this machine
|
||||
const internal_layout * m_default_layout; // default layout for this machine
|
||||
|
||||
// helpers during configuration; not for general use
|
||||
device_t *device_add(device_t *owner, const char *tag, device_type type, UINT32 clock);
|
||||
@ -205,7 +214,7 @@ References an external machine config.
|
||||
|
||||
// core video parameters
|
||||
#define MCFG_DEFAULT_LAYOUT(_layout) \
|
||||
config.m_default_layout = &(_layout)[0];
|
||||
config.m_default_layout = &(_layout);
|
||||
|
||||
// add/remove devices
|
||||
#define MCFG_DEVICE_ADD(_tag, _type, _clock) \
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "drivenum.h"
|
||||
#include "xmlfile.h"
|
||||
#include "ui/ui.h"
|
||||
#include <zlib.h>
|
||||
|
||||
|
||||
|
||||
@ -906,7 +907,7 @@ render_container::user_settings::user_settings()
|
||||
// render_target - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
render_target::render_target(render_manager &manager, const char *layoutfile, UINT32 flags)
|
||||
render_target::render_target(render_manager &manager, const internal_layout *layoutfile, UINT32 flags)
|
||||
: m_next(nullptr),
|
||||
m_manager(manager),
|
||||
m_curview(nullptr),
|
||||
@ -1548,7 +1549,7 @@ void render_target::update_layer_config()
|
||||
// given render target
|
||||
//-------------------------------------------------
|
||||
|
||||
void render_target::load_layout_files(const char *layoutfile, bool singlefile)
|
||||
void render_target::load_layout_files(const internal_layout *layoutfile, bool singlefile)
|
||||
{
|
||||
bool have_default = false;
|
||||
// if there's an explicit file, load that first
|
||||
@ -1587,34 +1588,34 @@ void render_target::load_layout_files(const char *layoutfile, bool singlefile)
|
||||
if (screens == 1)
|
||||
{
|
||||
if (system.flags & ORIENTATION_SWAP_XY)
|
||||
load_layout_file(nullptr, layout_vertical);
|
||||
load_layout_file(nullptr, &layout_vertical);
|
||||
else
|
||||
load_layout_file(nullptr, layout_horizont);
|
||||
load_layout_file(nullptr, &layout_horizont);
|
||||
assert_always(m_filelist.count() > 0, "Couldn't parse default layout??");
|
||||
}
|
||||
if (!have_default)
|
||||
{
|
||||
if (screens == 0)
|
||||
{
|
||||
load_layout_file(nullptr, layout_noscreens);
|
||||
load_layout_file(nullptr, &layout_noscreens);
|
||||
assert_always(m_filelist.count() > 0, "Couldn't parse default layout??");
|
||||
}
|
||||
else
|
||||
if (screens == 2)
|
||||
{
|
||||
load_layout_file(nullptr, layout_dualhsxs);
|
||||
load_layout_file(nullptr, &layout_dualhsxs);
|
||||
assert_always(m_filelist.count() > 0, "Couldn't parse default layout??");
|
||||
}
|
||||
else
|
||||
if (screens == 3)
|
||||
{
|
||||
load_layout_file(nullptr, layout_triphsxs);
|
||||
load_layout_file(nullptr, &layout_triphsxs);
|
||||
assert_always(m_filelist.count() > 0, "Couldn't parse default layout??");
|
||||
}
|
||||
else
|
||||
if (screens == 4)
|
||||
{
|
||||
load_layout_file(nullptr, layout_quadhsxs);
|
||||
load_layout_file(nullptr, &layout_quadhsxs);
|
||||
assert_always(m_filelist.count() > 0, "Couldn't parse default layout??");
|
||||
}
|
||||
}
|
||||
@ -1626,6 +1627,55 @@ void render_target::load_layout_files(const char *layoutfile, bool singlefile)
|
||||
// and append it to our list
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
bool render_target::load_layout_file(const char *dirname, const internal_layout *layout_data)
|
||||
{
|
||||
// +1 to ensure data is terminated for XML parser
|
||||
auto tempout = make_unique_clear<UINT8[]>(layout_data->decompressed_size+1);
|
||||
|
||||
z_stream stream;
|
||||
int zerr;
|
||||
|
||||
/* initialize the stream */
|
||||
memset(&stream, 0, sizeof(stream));
|
||||
stream.next_out = tempout.get();
|
||||
stream.avail_out = layout_data->decompressed_size;
|
||||
|
||||
|
||||
zerr = inflateInit(&stream);
|
||||
if (zerr != Z_OK)
|
||||
{
|
||||
fatalerror("could not inflateInit");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* decompress this chunk */
|
||||
stream.next_in = (unsigned char*)layout_data->data;
|
||||
stream.avail_in = layout_data->compressed_size;
|
||||
zerr = inflate(&stream, Z_NO_FLUSH);
|
||||
|
||||
/* stop at the end of the stream */
|
||||
if (zerr == Z_STREAM_END)
|
||||
{
|
||||
// OK
|
||||
}
|
||||
else if (zerr != Z_OK)
|
||||
{
|
||||
fatalerror("decompression error\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* clean up */
|
||||
zerr = inflateEnd(&stream);
|
||||
if (zerr != Z_OK)
|
||||
{
|
||||
fatalerror("inflateEnd error\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return load_layout_file(dirname, (const char*)tempout.get());
|
||||
}
|
||||
|
||||
bool render_target::load_layout_file(const char *dirname, const char *filename)
|
||||
{
|
||||
// if the first character of the "file" is an open brace, assume it is an XML string
|
||||
@ -2529,7 +2579,7 @@ float render_manager::max_update_rate() const
|
||||
// target_alloc - allocate a new target
|
||||
//-------------------------------------------------
|
||||
|
||||
render_target *render_manager::target_alloc(const char *layoutfile, UINT32 flags)
|
||||
render_target *render_manager::target_alloc(const internal_layout *layoutfile, UINT32 flags)
|
||||
{
|
||||
return &m_targetlist.append(*global_alloc(render_target(*this, layoutfile, flags)));
|
||||
}
|
||||
|
@ -890,7 +890,7 @@ class render_target
|
||||
friend class render_manager;
|
||||
|
||||
// construction/destruction
|
||||
render_target(render_manager &manager, const char *layoutfile = nullptr, UINT32 flags = 0);
|
||||
render_target(render_manager &manager, const internal_layout *layoutfile = nullptr, UINT32 flags = 0);
|
||||
~render_target();
|
||||
|
||||
public:
|
||||
@ -968,8 +968,9 @@ public:
|
||||
private:
|
||||
// internal helpers
|
||||
void update_layer_config();
|
||||
void load_layout_files(const char *layoutfile, bool singlefile);
|
||||
void load_layout_files(const internal_layout *layoutfile, bool singlefile);
|
||||
bool load_layout_file(const char *dirname, const char *filename);
|
||||
bool load_layout_file(const char *dirname, const internal_layout *layout_data);
|
||||
void add_container_primitives(render_primitive_list &list, const object_transform &xform, render_container &container, int blendmode);
|
||||
void add_element_primitives(render_primitive_list &list, const object_transform &xform, layout_element &element, int state, int blendmode);
|
||||
bool map_point_internal(INT32 target_x, INT32 target_y, render_container *container, float &mapped_x, float &mapped_y, ioport_port *&mapped_input_port, ioport_value &mapped_input_mask);
|
||||
@ -1046,7 +1047,7 @@ public:
|
||||
float max_update_rate() const;
|
||||
|
||||
// targets
|
||||
render_target *target_alloc(const char *layoutfile = nullptr, UINT32 flags = 0);
|
||||
render_target *target_alloc(const internal_layout *layoutfile = nullptr, UINT32 flags = 0);
|
||||
void target_free(render_target *target);
|
||||
const auto &targets() const { return m_targetlist; }
|
||||
render_target *first_target() const { return m_targetlist.first(); }
|
||||
|
@ -16,26 +16,26 @@
|
||||
//**************************************************************************
|
||||
|
||||
// no screens layouts
|
||||
extern const char layout_noscreens[]; // for screenless systems
|
||||
extern const internal_layout layout_noscreens; // for screenless systems
|
||||
|
||||
// single screen layouts
|
||||
extern const char layout_horizont[]; // horizontal 4:3 screens
|
||||
extern const char layout_vertical[]; // vertical 4:3 screens
|
||||
extern const internal_layout layout_horizont; // horizontal 4:3 screens
|
||||
extern const internal_layout layout_vertical; // vertical 4:3 screens
|
||||
|
||||
// dual screen layouts
|
||||
extern const char layout_dualhsxs[]; // dual 4:3 screens side-by-side
|
||||
extern const char layout_dualhovu[]; // dual 4:3 screens above and below
|
||||
extern const char layout_dualhuov[]; // dual 4:3 screens below and above
|
||||
extern const internal_layout layout_dualhsxs; // dual 4:3 screens side-by-side
|
||||
extern const internal_layout layout_dualhovu; // dual 4:3 screens above and below
|
||||
extern const internal_layout layout_dualhuov; // dual 4:3 screens below and above
|
||||
|
||||
// triple screen layouts
|
||||
extern const char layout_triphsxs[]; // triple 4:3 screens side-by-side
|
||||
extern const internal_layout layout_triphsxs; // triple 4:3 screens side-by-side
|
||||
|
||||
// quad screen layouts
|
||||
extern const char layout_quadhsxs[]; // quad 4:3 screens side-by-side
|
||||
extern const internal_layout layout_quadhsxs; // quad 4:3 screens side-by-side
|
||||
|
||||
// LCD screen layouts
|
||||
extern const char layout_lcd[]; // generic 1:1 lcd screen layout
|
||||
extern const char layout_lcd_rot[]; // same, for use with ROT90 or ROT270
|
||||
extern const internal_layout layout_lcd; // generic 1:1 lcd screen layout
|
||||
extern const internal_layout layout_lcd_rot; // same, for use with ROT90 or ROT270
|
||||
|
||||
|
||||
#endif // __RENDLAY_H__
|
||||
|
@ -130,7 +130,7 @@ video_manager::video_manager(running_machine &machine)
|
||||
// the native target is hard-coded to our internal layout and has all options disabled
|
||||
if (m_snap_native)
|
||||
{
|
||||
m_snap_target = machine.render().target_alloc(layout_snap, RENDER_CREATE_SINGLE_FILE | RENDER_CREATE_HIDDEN);
|
||||
m_snap_target = machine.render().target_alloc(&layout_snap, RENDER_CREATE_SINGLE_FILE | RENDER_CREATE_HIDDEN);
|
||||
m_snap_target->set_backdrops_enabled(false);
|
||||
m_snap_target->set_overlays_enabled(false);
|
||||
m_snap_target->set_bezels_enabled(false);
|
||||
|
@ -596,7 +596,7 @@ int matrix_solver_w_t<m_N, _storage_N>::solve_non_dynamic(ATTR_UNUSED const bool
|
||||
}
|
||||
/* Back substitution */
|
||||
//inv(H) w = t w = H t
|
||||
nl_double *t=new nl_double[rowcount];
|
||||
nl_double *t = new nl_double[rowcount];
|
||||
for (int j = rowcount - 1; j >= 0; j--)
|
||||
{
|
||||
nl_double tmp = 0;
|
||||
@ -619,6 +619,7 @@ int matrix_solver_w_t<m_N, _storage_N>::solve_non_dynamic(ATTR_UNUSED const bool
|
||||
}
|
||||
new_V[i] -= tmp;
|
||||
}
|
||||
delete[] t;
|
||||
}
|
||||
}
|
||||
m_cnt++;
|
||||
|
@ -66,8 +66,9 @@ The following MCU images were tested on an original Arkanoid PCB using sets
|
||||
(2) MCU image with CRC 0x515d77b6 <- this is a blackbox-reverse engineered bootleg MCU written by pirates
|
||||
|
||||
An MCU found on a Tournament Arkanoid PCB was an unprotected type MC68705P3
|
||||
and when read the CRC matched (1). So we can assume the MCUs for Arkanoid and
|
||||
and when read the CRC matched (1). So we assumed the MCUs for Arkanoid and
|
||||
Tournament Arkanoid are the same.... or are at least interchangeable and work.
|
||||
This turns out not to be the case, in retrospect.
|
||||
|
||||
"Tetris (D.R. Korea)" in MAME is a hack on an original Arkanoid PCB.
|
||||
The hack can be undone and returned to Arkanoid simply by removing the mod
|
||||
|
@ -382,6 +382,54 @@ Thanks to Alex, Mr Mudkips, and Philip Burke for this info.
|
||||
#define LOG_PCI
|
||||
//#define LOG_BASEBOARD
|
||||
|
||||
class ohci_hlean2131qc_device : public ohci_function_device
|
||||
{
|
||||
public:
|
||||
ohci_hlean2131qc_device(running_machine &machine);
|
||||
int handle_nonstandard_request(int endpoint, USBSetupPacket *setup) override;
|
||||
int handle_bulk_pid(int endpoint, int pid, UINT8 *buffer, int size) override;
|
||||
void set_region_base(UINT8 *data);
|
||||
private:
|
||||
static const USBStandardDeviceDescriptor devdesc;
|
||||
static const USBStandardConfigurationDescriptor condesc;
|
||||
static const USBStandardInterfaceDescriptor intdesc;
|
||||
static const USBStandardEndpointDescriptor enddesc01;
|
||||
static const USBStandardEndpointDescriptor enddesc02;
|
||||
static const USBStandardEndpointDescriptor enddesc03;
|
||||
static const USBStandardEndpointDescriptor enddesc04;
|
||||
static const USBStandardEndpointDescriptor enddesc05;
|
||||
static const USBStandardEndpointDescriptor enddesc81;
|
||||
static const USBStandardEndpointDescriptor enddesc82;
|
||||
static const USBStandardEndpointDescriptor enddesc83;
|
||||
static const USBStandardEndpointDescriptor enddesc84;
|
||||
static const USBStandardEndpointDescriptor enddesc85;
|
||||
static const UINT8 strdesc0[];
|
||||
static const UINT8 strdesc1[];
|
||||
static const UINT8 strdesc2[];
|
||||
int maximum_send;
|
||||
UINT8 *region;
|
||||
};
|
||||
|
||||
class ohci_hlean2131sc_device : public ohci_function_device
|
||||
{
|
||||
public:
|
||||
ohci_hlean2131sc_device(running_machine &machine);
|
||||
int handle_nonstandard_request(int endpoint, USBSetupPacket *setup) override;
|
||||
private:
|
||||
static const USBStandardDeviceDescriptor devdesc;
|
||||
static const USBStandardConfigurationDescriptor condesc;
|
||||
static const USBStandardInterfaceDescriptor intdesc;
|
||||
static const USBStandardEndpointDescriptor enddesc01;
|
||||
static const USBStandardEndpointDescriptor enddesc02;
|
||||
static const USBStandardEndpointDescriptor enddesc03;
|
||||
static const USBStandardEndpointDescriptor enddesc81;
|
||||
static const USBStandardEndpointDescriptor enddesc82;
|
||||
static const USBStandardEndpointDescriptor enddesc83;
|
||||
static const UINT8 strdesc0[];
|
||||
static const UINT8 strdesc1[];
|
||||
static const UINT8 strdesc2[];
|
||||
};
|
||||
|
||||
class chihiro_state : public xbox_base_state
|
||||
{
|
||||
public:
|
||||
@ -595,6 +643,151 @@ void chihiro_state::hack_usb()
|
||||
usbhack_counter++;
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// BASE BOARD USB
|
||||
//**************************************************************************
|
||||
|
||||
//ic10
|
||||
const USBStandardDeviceDescriptor ohci_hlean2131qc_device::devdesc = { 0x12,0x01,0x0100,0x60,0x00,0x00,0x40,0x0CA3,0x0002,0x0108,0x01,0x02,0x00,0x01 };
|
||||
const USBStandardConfigurationDescriptor ohci_hlean2131qc_device::condesc = { 0x09,0x02,0x0058,0x01,0x01,0x00,0x80,0x96 };
|
||||
const USBStandardInterfaceDescriptor ohci_hlean2131qc_device::intdesc = { 0x09,0x04,0x00,0x00,0x0A,0xFF,0x00,0x00,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc04 = { 0x07,0x05,0x04,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc05 = { 0x07,0x05,0x05,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc84 = { 0x07,0x05,0x84,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc85 = { 0x07,0x05,0x85,0x02,0x0040,0x00 };
|
||||
const UINT8 ohci_hlean2131qc_device::strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
const UINT8 ohci_hlean2131qc_device::strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
const UINT8 ohci_hlean2131qc_device::strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x03,0xFF,0x0B };
|
||||
|
||||
ohci_hlean2131qc_device::ohci_hlean2131qc_device(running_machine &machine) :
|
||||
ohci_function_device(machine)
|
||||
{
|
||||
add_device_descriptor(devdesc);
|
||||
add_configuration_descriptor(condesc);
|
||||
add_interface_descriptor(intdesc);
|
||||
// it is important to add the endpoints in the same order they are found in the device firmware
|
||||
add_endpoint_descriptor(enddesc01);
|
||||
add_endpoint_descriptor(enddesc02);
|
||||
add_endpoint_descriptor(enddesc03);
|
||||
add_endpoint_descriptor(enddesc04);
|
||||
add_endpoint_descriptor(enddesc05);
|
||||
add_endpoint_descriptor(enddesc81);
|
||||
add_endpoint_descriptor(enddesc82);
|
||||
add_endpoint_descriptor(enddesc83);
|
||||
add_endpoint_descriptor(enddesc84);
|
||||
add_endpoint_descriptor(enddesc85);
|
||||
add_string_descriptor(strdesc0);
|
||||
add_string_descriptor(strdesc1);
|
||||
add_string_descriptor(strdesc2);
|
||||
maximum_send = 0;
|
||||
region = nullptr;
|
||||
}
|
||||
|
||||
void ohci_hlean2131qc_device::set_region_base(UINT8 *data)
|
||||
{
|
||||
region = data;
|
||||
}
|
||||
|
||||
int ohci_hlean2131qc_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
|
||||
{
|
||||
if (endpoint != 0)
|
||||
return -1;
|
||||
printf("Control request: %x %x %x %x %x %x %x\n\r", endpoint, endpoints[endpoint].controldirection, setup->bmRequestType, setup->bRequest, setup->wValue, setup->wIndex, setup->wLength);
|
||||
for (int n = 0; n < setup->wLength; n++)
|
||||
endpoints[endpoint].buffer[n] = 0x50 ^ n;
|
||||
//if ((setup->bRequest == 0x18) && (setup->wValue == 0x8000))
|
||||
if (setup->bRequest == 0x17)
|
||||
{
|
||||
maximum_send = setup->wIndex;
|
||||
if (maximum_send > 0x40)
|
||||
maximum_send = 0x40;
|
||||
endpoints[2].remain = maximum_send;
|
||||
endpoints[2].position = region + 0x2000 + setup->wValue;
|
||||
}
|
||||
if ((setup->bRequest == 0x16) && (setup->wValue == 0x1f00))
|
||||
{
|
||||
endpoints[1].remain = setup->wIndex;
|
||||
endpoints[1].position = region + 0x1f00;
|
||||
}
|
||||
if (setup->bRequest == 0x19) // 19 used to receive jvs packet, 20 to send
|
||||
{
|
||||
endpoints[endpoint].buffer[5] = 0;
|
||||
endpoints[endpoint].buffer[4] = 20;
|
||||
}
|
||||
if (setup->bRequest == 0x20)
|
||||
{
|
||||
printf("\tJvs packet of %d bytes\n\r", setup->wIndex);
|
||||
}
|
||||
|
||||
endpoints[endpoint].buffer[0] = 0;
|
||||
endpoints[endpoint].position = endpoints[endpoint].buffer;
|
||||
endpoints[endpoint].remain = setup->wLength;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ohci_hlean2131qc_device::handle_bulk_pid(int endpoint, int pid, UINT8 *buffer, int size)
|
||||
{
|
||||
printf("Bulk request: %x %d %x\n\r", endpoint, pid, size);
|
||||
if (((endpoint == 1) || (endpoint == 2)) && (pid == InPid))
|
||||
{
|
||||
if (size > endpoints[endpoint].remain)
|
||||
size = endpoints[endpoint].remain;
|
||||
memcpy(buffer, endpoints[endpoint].position, size);
|
||||
endpoints[endpoint].position = endpoints[endpoint].position + size;
|
||||
endpoints[endpoint].remain = endpoints[endpoint].remain - size;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
//pc20
|
||||
const USBStandardDeviceDescriptor ohci_hlean2131sc_device::devdesc = { 0x12,0x01,0x0100,0x60,0x01,0x00,0x40,0x0CA3,0x0003,0x0110,0x01,0x02,0x00,0x01 };
|
||||
const USBStandardConfigurationDescriptor ohci_hlean2131sc_device::condesc = { 0x09,0x02,0x003C,0x01,0x01,0x00,0x80,0x96 };
|
||||
const USBStandardInterfaceDescriptor ohci_hlean2131sc_device::intdesc = { 0x09,0x04,0x00,0x00,0x06,0xFF,0x00,0x00,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
const UINT8 ohci_hlean2131sc_device::strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
const UINT8 ohci_hlean2131sc_device::strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
const UINT8 ohci_hlean2131sc_device::strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x00,0x44,0x00 };
|
||||
|
||||
ohci_hlean2131sc_device::ohci_hlean2131sc_device(running_machine &machine) :
|
||||
ohci_function_device(machine)
|
||||
{
|
||||
add_device_descriptor(devdesc);
|
||||
add_configuration_descriptor(condesc);
|
||||
add_interface_descriptor(intdesc);
|
||||
// it is important to add the endpoints in the same order they are found in the device firmware
|
||||
add_endpoint_descriptor(enddesc01);
|
||||
add_endpoint_descriptor(enddesc02);
|
||||
add_endpoint_descriptor(enddesc03);
|
||||
add_endpoint_descriptor(enddesc81);
|
||||
add_endpoint_descriptor(enddesc82);
|
||||
add_endpoint_descriptor(enddesc83);
|
||||
add_string_descriptor(strdesc0);
|
||||
add_string_descriptor(strdesc1);
|
||||
add_string_descriptor(strdesc2);
|
||||
}
|
||||
|
||||
int ohci_hlean2131sc_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
|
||||
{
|
||||
if (endpoint != 0)
|
||||
return -1;
|
||||
for (int n = 0; n < setup->wLength; n++)
|
||||
endpoints[endpoint].buffer[n] = 0xa0 ^ n;
|
||||
endpoints[endpoint].position = endpoints[endpoint].buffer;
|
||||
endpoints[endpoint].remain = setup->wLength;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ======================> ide_baseboard_device
|
||||
|
||||
class ide_baseboard_device : public ata_mass_storage_device
|
||||
@ -847,6 +1040,9 @@ INPUT_PORTS_END
|
||||
|
||||
void chihiro_state::machine_start()
|
||||
{
|
||||
ohci_hlean2131qc_device *usb_device;
|
||||
//ohci_hlean2131sc_device *usb_device;
|
||||
|
||||
xbox_base_state::machine_start();
|
||||
chihiro_devs.ide = machine().device<bus_master_ide_controller_device>("ide");
|
||||
chihiro_devs.dimmboard = machine().device<naomi_gdrom_board>("rom_board");
|
||||
@ -862,6 +1058,10 @@ void chihiro_state::machine_start()
|
||||
break;
|
||||
}
|
||||
usbhack_counter = 0;
|
||||
usb_device = new ohci_hlean2131qc_device(machine());
|
||||
usb_device->set_region_base(memregion(":others")->base()); // temporary
|
||||
//usb_device = new ohci_hlean2131sc_device(machine());
|
||||
usb_ohci_plug(1, usb_device); // connect
|
||||
// savestates
|
||||
save_item(NAME(usbhack_counter));
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ void cortex_state::machine_reset()
|
||||
{
|
||||
UINT8* ROM = memregion("maincpu")->base();
|
||||
memcpy(m_p_ram, ROM, 0x6000);
|
||||
m_maincpu->set_ready(ASSERT_LINE);
|
||||
m_maincpu->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( cortex, cortex_state )
|
||||
|
@ -89,7 +89,7 @@ void evmbug_state::machine_reset()
|
||||
{
|
||||
m_term_data = 0;
|
||||
// Disable auto wait state generation by raising the READY line on reset
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( evmbug, evmbug_state )
|
||||
|
@ -584,14 +584,14 @@ WRITE_LINE_MEMBER( geneve_state::ext_ready )
|
||||
{
|
||||
if (TRACE_READY) logerror("geneve: READY level (ext) = %02x\n", state);
|
||||
m_ready_line = state;
|
||||
m_cpu->set_ready((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
||||
m_cpu->ready_line((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( geneve_state::mapper_ready )
|
||||
{
|
||||
if (TRACE_READY) logerror("geneve: READY level (mapper) = %02x\n", state);
|
||||
m_ready_line1 = state;
|
||||
m_cpu->set_ready((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
||||
m_cpu->ready_line((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -672,8 +672,8 @@ void geneve_state::machine_reset()
|
||||
m_keyint = CLEAR_LINE;
|
||||
|
||||
// No automatic wait state (auto wait state is enabled with READY=CLEAR at RESET)
|
||||
m_cpu->set_ready(ASSERT_LINE);
|
||||
m_cpu->set_hold(CLEAR_LINE);
|
||||
m_cpu->ready_line(ASSERT_LINE);
|
||||
m_cpu->hold_line(CLEAR_LINE);
|
||||
|
||||
m_ready_line = m_ready_line1 = ASSERT_LINE;
|
||||
|
||||
|
@ -1251,16 +1251,6 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
/*************************** layout ********************************/
|
||||
|
||||
static const char layout_hp48gx[] = "hp48gx";
|
||||
static const char layout_hp48g [] = "hp48g";
|
||||
static const char layout_hp48gp[] = "hp48gp";
|
||||
static const char layout_hp48sx[] = "hp48sx";
|
||||
static const char layout_hp48s [] = "hp48s";
|
||||
static const char layout_hp49g [] = "hp49g";
|
||||
|
||||
|
||||
/*************************** driver ********************************/
|
||||
|
||||
|
||||
@ -1297,7 +1287,6 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hp48gx, hp48_common )
|
||||
MCFG_MACHINE_START_OVERRIDE (hp48_state, hp48gx )
|
||||
MCFG_DEFAULT_LAYOUT ( layout_hp48gx )
|
||||
|
||||
/* expansion ports */
|
||||
MCFG_HP48_PORT_ADD ( "port1", 0, HP48_CE2, 128*1024 )
|
||||
@ -1310,7 +1299,6 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hp48g, hp48_common )
|
||||
MCFG_MACHINE_START_OVERRIDE (hp48_state, hp48g )
|
||||
MCFG_DEFAULT_LAYOUT ( layout_hp48g )
|
||||
|
||||
/* serial I/O */
|
||||
//MCFG_XMODEM_ADD( "rs232_x", hp48_xmodem_rs232_conf )
|
||||
@ -1320,7 +1308,6 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hp48gp, hp48_common )
|
||||
MCFG_MACHINE_START_OVERRIDE (hp48_state, hp48gp )
|
||||
MCFG_DEFAULT_LAYOUT ( layout_hp48gp )
|
||||
|
||||
/* serial I/O */
|
||||
//MCFG_XMODEM_ADD( "rs232_x", hp48_xmodem_rs232_conf )
|
||||
@ -1332,7 +1319,6 @@ static MACHINE_CONFIG_DERIVED( hp48sx, hp48_common )
|
||||
MCFG_CPU_MODIFY ( "maincpu" )
|
||||
MCFG_CPU_CLOCK ( 2000000 )
|
||||
MCFG_MACHINE_START_OVERRIDE (hp48_state, hp48sx )
|
||||
MCFG_DEFAULT_LAYOUT ( layout_hp48sx )
|
||||
|
||||
/* expansion ports */
|
||||
MCFG_HP48_PORT_ADD ( "port1", 0, HP48_CE1, 128*1024)
|
||||
@ -1346,7 +1332,6 @@ static MACHINE_CONFIG_DERIVED( hp48s, hp48_common )
|
||||
MCFG_CPU_MODIFY ( "maincpu" )
|
||||
MCFG_CPU_CLOCK ( 2000000 )
|
||||
MCFG_MACHINE_START_OVERRIDE (hp48_state, hp48s )
|
||||
MCFG_DEFAULT_LAYOUT ( layout_hp48s )
|
||||
|
||||
/* serial I/O */
|
||||
//MCFG_KERMIT_ADD( "rs232_k", hp48_kermit_rs232_conf )
|
||||
@ -1355,7 +1340,6 @@ MACHINE_CONFIG_END
|
||||
static MACHINE_CONFIG_DERIVED( hp49g, hp48_common )
|
||||
MCFG_CPU_MODIFY ( "maincpu" )
|
||||
MCFG_MACHINE_START_OVERRIDE (hp48_state, hp49g )
|
||||
MCFG_DEFAULT_LAYOUT ( layout_hp49g )
|
||||
|
||||
/* serial I/O */
|
||||
//MCFG_XMODEM_ADD( "rs232_x", hp48_xmodem_rs232_conf )
|
||||
|
@ -142,7 +142,7 @@ WRITE8_MEMBER(jpmmps_state::jpmmps_ic22_portc_w)
|
||||
void jpmmps_state::machine_reset()
|
||||
{
|
||||
// Disable auto wait state generation by raising the READY line on reset
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( jpmmps, jpmmps_state )
|
||||
|
@ -75,7 +75,7 @@ INPUT_PORTS_END
|
||||
void jpms80_state::machine_reset()
|
||||
{
|
||||
// Disable auto wait state generation by raising the READY line on reset
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( jpms80, jpms80_state )
|
||||
|
@ -344,7 +344,7 @@ void looping_state::machine_start()
|
||||
void looping_state::machine_reset()
|
||||
{
|
||||
// Disable auto wait state generation by raising the READY line on reset
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
|
@ -102,8 +102,8 @@
|
||||
2800 | D | R | Shield 1 Switch
|
||||
2800 | D | R | Fire 2 Switch
|
||||
2800 | D | R | Shield 2 Switch
|
||||
2800 | D | R | Not Used
|
||||
2800 | D | R | Speech Chip Ready
|
||||
2800 | D | R | N/C (floating, probably reads as 1)
|
||||
2800 | D | R | /TIRDY (Speech Chip Ready)
|
||||
2800 | D | R | Alpha Rcvd Flag
|
||||
2800 | D | R | Alpha Xmtd Flag
|
||||
| | |
|
||||
@ -119,7 +119,7 @@
|
||||
| | |
|
||||
5800 | D D D D D D D D | W | Speech Data Write / Write Strobe Clear
|
||||
5900 | | W | Speech Write Strobe Set
|
||||
| | |
|
||||
| | |
|
||||
6000-61FF | D D D D D D D D | R/W | EEROM
|
||||
8000-BFFF | D D D D D D D D | R | Program ROM (16K)
|
||||
-----------------------------------------------------------------------------
|
||||
|
@ -2701,117 +2701,117 @@ Most games had a revision in early 2007 to meet the standards of the "Government
|
||||
|
||||
|
||||
|
||||
GAME( 2002, goldfish, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gold Fish (020903, prototype)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_3, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021124)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_6, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (030124)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_8, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (030522)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_11, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (031124)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_12, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (040308)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, goldfish, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gold Fish (020903, prototype)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_3, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021124)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_6, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (030124)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_8, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (030522)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_11, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (031124)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_12, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (040308)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2002, mfish_13, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (040316)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
GAME( 2002, windjamr, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Windjammer (021216)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
GAME( 2003, czmon_5, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030421 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_7, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (031110 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_8, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (050120 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_9, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (070315 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, czmon_5, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030421 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_7, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (031110 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_8, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (050120 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_9, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (070315 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, czmon_13, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (100311 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, czmon_15, czmon_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, crzmonent,ROT0, "Igrosoft", "Crazy Monkey (100311 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2003, czmon_16, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (100312 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, czmon_15, czmon_13, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, crzmonent,ROT0, "Igrosoft", "Crazy Monkey (100311 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2003, czmon_16, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (100312 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
GAME( 2003, fcockt_3, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (030623 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_5, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (031111 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_6, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (040216 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_7, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (050118 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_3, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (030623 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_5, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (031111 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_6, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (040216 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_7, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (050118 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_8, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (060111 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, fcockt_9, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070305 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_10, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070517 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_11, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070822 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_12, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070911 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_14, fcockt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, fcocktent,ROT0, "Igrosoft", "Fruit Cocktail (090708 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2003, fcockt_9, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070305 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_10, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070517 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_11, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070822 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_12, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (070911 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, fcockt_14, fcockt_8, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, fcocktent,ROT0, "Igrosoft", "Fruit Cocktail (090708 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2003, lhaunt_2, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (030804 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_4, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (031111 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_5, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (040216 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_2, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (030804 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_4, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (031111 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_5, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (040216 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_6, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (040825 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, lhaunt_7, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (070402 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, lhaunt_8, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (070604 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, lhaunt_10, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, lhauntent,ROT0, "Igrosoft", "Lucky Haunter (090712 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2003, lhaunt_11, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, lhauntent,ROT0, "Igrosoft", "Lucky Haunter (100331 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2003, lhaunt_7, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (070402 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, lhaunt_8, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (070604 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2003, lhaunt_10, lhaunt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, lhauntent,ROT0, "Igrosoft", "Lucky Haunter (090712 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2003, lhaunt_11, lhaunt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, lhauntent,ROT0, "Igrosoft", "Lucky Haunter (100331 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2003, rollfr_2, rollfr_parent, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (040318)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, rollfr_3, rollfr_parent, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (080327)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, rollfr_2, rollfr_4, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (040318)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, rollfr_3, rollfr_4, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (080327)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2003, rollfr_4, 0, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (080331)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
GAME( 2004, garage_4, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040219 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, garage_4, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040219 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, garage_5, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (050311 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, garage_6, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (070213 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, garage_7, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (070329 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, garage_9, garage_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, garageent,ROT0, "Igrosoft", "Garage (090715 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2004, garage_6, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (070213 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, garage_7, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (070329 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, garage_9, garage_5, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, garageent,ROT0, "Igrosoft", "Garage (090715 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2004, rclimb, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (040815 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, rclimb, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (040815 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, rclimb_3, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (040827 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, rclimb_4, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (070322 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, rclimb_5, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (070621 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, rclimb_7, rclimb_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, rclimbent,ROT0, "Igrosoft", "Rock Climber (090716 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2004, rclimb_4, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (070322 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, rclimb_5, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (070621 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, rclimb_7, rclimb_3, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, rclimbent,ROT0, "Igrosoft", "Rock Climber (090716 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2004, sweetl, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Sweet Life (041220 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, sweetl_2, sweetl_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Sweet Life (070412 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, sweetl_2, sweetl, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Sweet Life (070412 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
GAME( 2004, resdnt, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (040415 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, resdnt_2, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (040513 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, resdnt_3, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (070222 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, resdnt, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (040415 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, resdnt_2, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (040513 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, resdnt_3, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (070222 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, resdnt_6, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (100311 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2004, resdnt_8, resdnt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, resdntent,ROT0, "Igrosoft", "Resident (100311 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2004, resdnt_9, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (100316 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2004, resdnt_8, resdnt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, resdntent,ROT0, "Igrosoft", "Resident (100311 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2004, resdnt_9, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (100316 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
GAME( 2005, island, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island (050713 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2005, island_2, island_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island (070409 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2005, island_2, island, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island (070409 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
GAME( 2005, pirate_2, pirate_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (060210 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2005, pirate_2, pirate_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (060210 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2005, pirate_3, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (060803 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2005, pirate_4, pirate_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (070412 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2005, pirate_4, pirate_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (070412 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
GAME( 2006, island2, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (060529 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, island2_3, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (061218 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, island2_4, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (070205 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2006, island2_5, island2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, island2l, ROT0, "Igrosoft", "Island 2 (090528 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2006, island2_6, island2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,island2ent,ROT0, "Igrosoft", "Island 2 (090724 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2006, island2_3, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (061218 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, island2_4, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (070205 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2006, island2_5, island2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, island2l, ROT0, "Igrosoft", "Island 2 (090528 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2006, island2_6, island2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,island2ent,ROT0, "Igrosoft", "Island 2 (090724 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2006, pirate2, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate 2 (061005 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, pirate2_2, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate 2 (070126 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2006, pirate2_3, pirate2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, pirate2l, ROT0, "Igrosoft", "Pirate 2 (090528 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2006, pirate2_4, pirate2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,pirate2ent,ROT0, "Igrosoft", "Pirate 2 (090730 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2006, pirate2_2, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate 2 (070126 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2006, pirate2_3, pirate2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, pirate2l, ROT0, "Igrosoft", "Pirate 2 (090528 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2006, pirate2_4, pirate2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,pirate2ent,ROT0, "Igrosoft", "Pirate 2 (090730 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2006, keks, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Keks (060328 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, keks, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Keks (060328 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, keks_2, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Keks (060403 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2006, keks_3, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Keks (070119 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2006, keks_4, keks_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, keksl, ROT0, "Igrosoft", "Keks (090604 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2006, keks_5, keks_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, keksent, ROT0, "Igrosoft", "Keks (090727 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2006, keks_3, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Keks (070119 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2006, keks_4, keks_2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, keksl, ROT0, "Igrosoft", "Keks (090604 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2006, keks_5, keks_2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, keksent, ROT0, "Igrosoft", "Keks (090727 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2007, gnome, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (070906 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_2, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (071115 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_3, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (080303 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, gnome_4, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (090402 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_5, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (090406 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, gnome_7, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomel, ROT0, "Igrosoft", "Gnome (090708 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2007, gnome, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (070906 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_2, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (071115 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_3, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (080303 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, gnome_4, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (090402 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_5, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (090406 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, gnome_7, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomel, ROT0, "Igrosoft", "Gnome (090708 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2007, gnome_9, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (100326 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, gnome_10, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomel, ROT0, "Igrosoft", "Gnome (100326 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2007, gnome_11, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomeent, ROT0, "Igrosoft", "Gnome (100326 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2007, gnome_12, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (100326 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, gnome_10, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomel, ROT0, "Igrosoft", "Gnome (100326 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2007, gnome_11, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomeent, ROT0, "Igrosoft", "Gnome (100326 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2007, gnome_12, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Gnome (100326 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
GAME( 2007, sweetl2, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Sweet Life 2 (071217 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2007, sweetl2_2, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Sweet Life 2 (080320 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, sweetl2_3, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, sweetl2l, ROT0, "Igrosoft", "Sweet Life 2 (090525 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2007, sweetl2_4, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,sweetl2ent,ROT0, "Igrosoft", "Sweet Life 2 (090812 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2007, sweetl2_2, sweetl2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Sweet Life 2 (080320 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2007, sweetl2_3, sweetl2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, sweetl2l, ROT0, "Igrosoft", "Sweet Life 2 (090525 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2007, sweetl2_4, sweetl2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,sweetl2ent,ROT0, "Igrosoft", "Sweet Life 2 (090812 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2008, fcockt2, 0, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (080707 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2008, fcockt2_3, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (080909 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2008, fcockt2_4, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (081105 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2008, fcockt2_5, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (081106 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2008, fcockt2_6, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, fcockt2l, ROT0, "Igrosoft", "Fruit Cocktail 2 (090528 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2008, fcockt2_7, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,fcockt2ent,ROT0, "Igrosoft", "Fruit Cocktail 2 (090813 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2008, fcockt2_3, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (080909 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2008, fcockt2_4, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (081105 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
GAME( 2008, fcockt2_5, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (081106 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
GAME( 2008, fcockt2_6, fcockt2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, fcockt2l, ROT0, "Igrosoft", "Fruit Cocktail 2 (090528 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2008, fcockt2_7, fcockt2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,fcockt2ent,ROT0, "Igrosoft", "Fruit Cocktail 2 (090813 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
GAME( 2010, crzmon2, 0, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,crzmon2, ROT0, "Igrosoft", "Crazy Monkey 2 (100310)", MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) /* World */ // xored and bitswapped palette and gfx roms
|
||||
GAME( 2010, crzmon2_2, crzmon2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,crzmon2lot,ROT0, "Igrosoft", "Crazy Monkey 2 (100311 Lottery)", MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2010, crzmon2_3, crzmon2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,crzmon2ent,ROT0, "Igrosoft", "Crazy Monkey 2 (100315 Entertainment)", MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
GAME( 2010, crzmon2_2, crzmon2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,crzmon2lot,ROT0, "Igrosoft", "Crazy Monkey 2 (100311 Lottery)", MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
GAME( 2010, crzmon2_3, crzmon2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state,crzmon2ent,ROT0, "Igrosoft", "Crazy Monkey 2 (100315 Entertainment)", MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
@ -1710,128 +1710,128 @@ ROM_START( fcockt2_4f ) // 081105 custom alteras, modified graphics, bank F9, ma
|
||||
ROM_END
|
||||
|
||||
|
||||
GAME( 2002, mfish_3a, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Multi Fish (bootleg, 021124, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2002, mfish_12a, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Multi Fish (bootleg, 040308, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2002, mfish_3a, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Multi Fish (bootleg, 021124, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2002, mfish_12a, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Multi Fish (bootleg, 040308, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
|
||||
GAME( 2003, czmon_7a, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 031110, backdoor set 1)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, czmon_7b, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 031110, backdoor set 2)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 5,5 1,7 3,2 3,3 3,4
|
||||
GAME( 2003, czmon_8a, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, czmon_8b, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070315
|
||||
GAME( 2003, czmon_8c, czmon_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, VIDEO GAME-1 CM01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 CM01"
|
||||
GAME( 2003, czmon_8d, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2003, czmon_8e, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, LOTO PROGRAM V-CM2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-CM2"
|
||||
GAME( 2003, czmon_8f, czmon_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, LOTOS CM01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS CM01"
|
||||
GAME( 2003, czmon_9a, czmon_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 1)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 O01"
|
||||
GAME( 2003, czmon_9b, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "VIDEO GAME-1 O01" (czmon_9a, decoded gfx)
|
||||
GAME( 2003, czmon_9c, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 070315, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // payout percentage 70%
|
||||
GAME( 2003, czmon_7a, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 031110, backdoor set 1)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, czmon_7b, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 031110, backdoor set 2)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 5,5 1,7 3,2 3,3 3,4
|
||||
GAME( 2003, czmon_8a, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, czmon_8b, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070315
|
||||
GAME( 2003, czmon_8c, czmon_13, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, VIDEO GAME-1 CM01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 CM01"
|
||||
GAME( 2003, czmon_8d, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2003, czmon_8e, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, LOTO PROGRAM V-CM2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-CM2"
|
||||
GAME( 2003, czmon_8f, czmon_13, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Crazy Monkey (bootleg, 050120, LOTOS CM01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS CM01"
|
||||
GAME( 2003, czmon_9a, czmon_13, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 1)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 O01"
|
||||
GAME( 2003, czmon_9b, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "VIDEO GAME-1 O01" (czmon_9a, decoded gfx)
|
||||
GAME( 2003, czmon_9c, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Crazy Monkey (bootleg, 070315, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // payout percentage 70%
|
||||
|
||||
GAME( 2003, fcockt_6a, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F8
|
||||
GAME( 2003, fcockt_6b, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, fcockt_6c, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, LotoRossy+)", MACHINE_SUPPORTS_SAVE ) // modified graphics, some code changes, description says "for Lat-02 terminals", older set
|
||||
GAME( 2003, fcockt_6d, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, VIDEO GAME-1 FR01)", MACHINE_SUPPORTS_SAVE ) // modified graphics, some code changes, changed version text to "VIDEO GAME-1 FR01", description says "for Lat-02 terminals", newer set
|
||||
GAME( 2003, fcockt_7a, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, fcockt_7b, fcockt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, VIDEO GAME-1 FR01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 FR01"
|
||||
GAME( 2003, fcockt_7c, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, payout percentage 40)", MACHINE_SUPPORTS_SAVE ) // payout percentage 40%
|
||||
GAME( 2003, fcockt_7d, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, payout percentage 60)", MACHINE_SUPPORTS_SAVE ) // payout percentage 60%
|
||||
GAME( 2003, fcockt_7e, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // payout percentage 70%
|
||||
GAME( 2003, fcockt_7f, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070305
|
||||
GAME( 2003, fcockt_7g, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, LOTO PROGRAM V-FC2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-FC2"
|
||||
GAME( 2003, fcockt_7h, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, LOTOS FR01)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTOS FR01"
|
||||
GAME( 2003, fcockt_8a, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 060111, LOTO COCKTAIL V01-0001)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO COCKTAIL V01-0001"
|
||||
GAME( 2003, fcockt_8b, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 060111, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2003, fcockt_6a, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F8
|
||||
GAME( 2003, fcockt_6b, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, fcockt_6c, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, LotoRossy+)", MACHINE_SUPPORTS_SAVE ) // modified graphics, some code changes, description says "for Lat-02 terminals", older set
|
||||
GAME( 2003, fcockt_6d, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 040216, VIDEO GAME-1 FR01)", MACHINE_SUPPORTS_SAVE ) // modified graphics, some code changes, changed version text to "VIDEO GAME-1 FR01", description says "for Lat-02 terminals", newer set
|
||||
GAME( 2003, fcockt_7a, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, fcockt_7b, fcockt_8, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, VIDEO GAME-1 FR01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 FR01"
|
||||
GAME( 2003, fcockt_7c, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, payout percentage 40)", MACHINE_SUPPORTS_SAVE ) // payout percentage 40%
|
||||
GAME( 2003, fcockt_7d, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, payout percentage 60)", MACHINE_SUPPORTS_SAVE ) // payout percentage 60%
|
||||
GAME( 2003, fcockt_7e, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // payout percentage 70%
|
||||
GAME( 2003, fcockt_7f, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070305
|
||||
GAME( 2003, fcockt_7g, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, LOTO PROGRAM V-FC2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-FC2"
|
||||
GAME( 2003, fcockt_7h, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 050118, LOTOS FR01)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTOS FR01"
|
||||
GAME( 2003, fcockt_8a, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 060111, LOTO COCKTAIL V01-0001)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO COCKTAIL V01-0001"
|
||||
GAME( 2003, fcockt_8b, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail (bootleg, 060111, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
|
||||
GAME( 2003, lhaunt_4a, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 031111, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, lhaunt_5a, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040216, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, lhaunt_6a, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,1 1,5 3,3 3,4
|
||||
GAME( 2003, lhaunt_6b, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, VIDEO GAME-1 PB01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 PB01"
|
||||
GAME( 2003, lhaunt_6c, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070604
|
||||
GAME( 2003, lhaunt_6d, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2003, lhaunt_6e, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, LOTO PROGRAM V-LH2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-LH2"
|
||||
GAME( 2003, lhaunt_6f, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, LOTOS PB01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS PB01"
|
||||
GAME( 2003, lhaunt_4a, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 031111, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, lhaunt_5a, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040216, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2003, lhaunt_6a, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,1 1,5 3,3 3,4
|
||||
GAME( 2003, lhaunt_6b, lhaunt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, VIDEO GAME-1 PB01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 PB01"
|
||||
GAME( 2003, lhaunt_6c, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070604
|
||||
GAME( 2003, lhaunt_6d, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2003, lhaunt_6e, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, LOTO PROGRAM V-LH2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-LH2"
|
||||
GAME( 2003, lhaunt_6f, lhaunt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Lucky Haunter (bootleg, 040825, LOTOS PB01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS PB01"
|
||||
|
||||
GAME( 2004, garage_4a, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 040219, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2004, garage_4b, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 040219, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070329
|
||||
GAME( 2004, garage_4c, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 040219, LOTO PROGRAM V-GG2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-GG2"
|
||||
GAME( 2004, garage_5a, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 050311, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2004, garage_5b, garage_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Garage (bootleg, 050311, VIDEO GAME-1 GA01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 GA01"
|
||||
GAME( 2004, garage_5c, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 050311, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // payout percentage 70%
|
||||
GAME( 2004, garage_5d, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 050311, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2004, garage_5e, garage_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Garage (bootleg, 050311, LOTOS GA01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS GA01"
|
||||
GAME( 2004, garage_4a, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 040219, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2004, garage_4b, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 040219, changed version text)", MACHINE_SUPPORTS_SAVE ) // changed version text to 070329
|
||||
GAME( 2004, garage_4c, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 040219, LOTO PROGRAM V-GG2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-GG2"
|
||||
GAME( 2004, garage_5a, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 050311, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2004, garage_5b, garage_5, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Garage (bootleg, 050311, VIDEO GAME-1 GA01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 GA01"
|
||||
GAME( 2004, garage_5c, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 050311, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // payout percentage 70%
|
||||
GAME( 2004, garage_5d, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Garage (bootleg, 050311, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2004, garage_5e, garage_5, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Garage (bootleg, 050311, LOTOS GA01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS GA01"
|
||||
|
||||
GAME( 2004, rclimb_3a, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Rock Climber (bootleg, 040827, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,1 1,5 3,3 3,4
|
||||
GAME( 2004, rclimb_3b, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Rock Climber (bootleg, 040827, new service menu)", MACHINE_SUPPORTS_SAVE ) // new service menu
|
||||
GAME( 2004, rclimb_3c, rclimb_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Rock Climber (bootleg, 040827, VIDEO GAME-1 SK01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 SK01"
|
||||
GAME( 2004, rclimb_3d, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Rock Climber (bootleg, 040827, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2004, rclimb_3e, rclimb_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Rock Climber (bootleg, 040827, LOTOS SK01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS SK01"
|
||||
GAME( 2004, rclimb_3a, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Rock Climber (bootleg, 040827, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,1 1,5 3,3 3,4
|
||||
GAME( 2004, rclimb_3b, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Rock Climber (bootleg, 040827, new service menu)", MACHINE_SUPPORTS_SAVE ) // new service menu
|
||||
GAME( 2004, rclimb_3c, rclimb_3, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Rock Climber (bootleg, 040827, VIDEO GAME-1 SK01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 SK01"
|
||||
GAME( 2004, rclimb_3d, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Rock Climber (bootleg, 040827, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2004, rclimb_3e, rclimb_3, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Rock Climber (bootleg, 040827, LOTOS SK01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS SK01"
|
||||
|
||||
GAME( 2004, sweetla, sweetl_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life (bootleg, 041220, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,3 1,5 3,3 3,4
|
||||
GAME( 2004, sweetlb, sweetl_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life (bootleg, 041220, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070412
|
||||
GAME( 2004, sweetla, sweetl, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life (bootleg, 041220, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,3 1,5 3,3 3,4
|
||||
GAME( 2004, sweetlb, sweetl, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life (bootleg, 041220, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070412
|
||||
|
||||
GAME( 2004, resdnt_2a, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Resident (bootleg, 040513, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,1 1,5 3,3 3,4
|
||||
GAME( 2004, resdnt_2b, resdnt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 1)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 SE01"
|
||||
GAME( 2004, resdnt_2c, resdnt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 2)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 SE01"
|
||||
GAME( 2004, resdnt_2d, resdnt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 3)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 SE01"
|
||||
GAME( 2004, resdnt_2e, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Resident (bootleg, 040513, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2004, resdnt_2f, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Resident (bootleg, 040513, LOTO PROGRAM V-RS2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-RS2"
|
||||
GAME( 2004, resdnt_2g, resdnt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, LOTOS SE01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS SE01"
|
||||
GAME( 2004, resdnt_2a, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Resident (bootleg, 040513, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,5 9,1 5,1 1,5 3,3 3,4
|
||||
GAME( 2004, resdnt_2b, resdnt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 1)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 SE01"
|
||||
GAME( 2004, resdnt_2c, resdnt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 2)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, changed version text to "VIDEO GAME-1 SE01"
|
||||
GAME( 2004, resdnt_2d, resdnt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 3)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 SE01"
|
||||
GAME( 2004, resdnt_2e, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Resident (bootleg, 040513, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2004, resdnt_2f, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Resident (bootleg, 040513, LOTO PROGRAM V-RS2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, many texts changed, changed version text to "LOTO PROGRAM V-RS2"
|
||||
GAME( 2004, resdnt_2g, resdnt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Resident (bootleg, 040513, LOTOS SE01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS SE01"
|
||||
|
||||
GAME( 2005, islanda, island_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island (bootleg, 050713, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2005, islandb, island_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Island (bootleg, 050713, VIDEO GAME-1 OS01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 OS01"
|
||||
GAME( 2005, islandc, island_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Island (bootleg, 050713, LOTOS OS01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS OS01"
|
||||
GAME( 2005, islanda, island, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island (bootleg, 050713, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2005, islandb, island, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Island (bootleg, 050713, VIDEO GAME-1 OS01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 OS01"
|
||||
GAME( 2005, islandc, island, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Island (bootleg, 050713, LOTOS OS01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS OS01"
|
||||
|
||||
GAME( 2006, island2a, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 060529, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9 (not standart, game not work)
|
||||
GAME( 2006, island2b, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 060529, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070205, skip some start tests
|
||||
GAME( 2006, island2c, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 060529, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2006, island2_3a, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 061218, VIDEO GAME-1 OS2-01)", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "VIDEO GAME-1 OS2-01"
|
||||
GAME( 2006, island2_4a, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 070205, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, island2a, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 060529, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9 (not standart, game not work)
|
||||
GAME( 2006, island2b, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 060529, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070205, skip some start tests
|
||||
GAME( 2006, island2c, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 060529, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2006, island2_3a, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 061218, VIDEO GAME-1 OS2-01)", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "VIDEO GAME-1 OS2-01"
|
||||
GAME( 2006, island2_4a, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Island 2 (bootleg, 070205, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
|
||||
GAME( 2006, pirate2a, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, pirate2b, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9, skip raster beam position check
|
||||
GAME( 2006, pirate2c, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070126
|
||||
GAME( 2006, pirate2d, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070126
|
||||
GAME( 2006, pirate2e, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070126, skip some start tests
|
||||
GAME( 2006, pirate2f, pirate2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 PR01"
|
||||
GAME( 2006, pirate2g, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2006, pirate2h, pirate2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Pirate 2 (bootleg, 061005, LOTOS PR01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS PR01"
|
||||
GAME( 2006, pirate2_2a, pirate2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 070126, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, pirate2a, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, pirate2b, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9, skip raster beam position check
|
||||
GAME( 2006, pirate2c, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070126
|
||||
GAME( 2006, pirate2d, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070126
|
||||
GAME( 2006, pirate2e, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070126, skip some start tests
|
||||
GAME( 2006, pirate2f, pirate2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 PR01"
|
||||
GAME( 2006, pirate2g, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 061005, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2006, pirate2h, pirate2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Pirate 2 (bootleg, 061005, LOTOS PR01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "LOTOS PR01"
|
||||
GAME( 2006, pirate2_2a, pirate2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Pirate 2 (bootleg, 070126, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
|
||||
GAME( 2006, keksa, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060328, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keksb, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060328, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2006, keksc, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060328, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070119
|
||||
GAME( 2006, keks_2a, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keks_2b, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070119
|
||||
GAME( 2006, keks_2c, keks_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 1)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, changed version text to "VIDEO GAME-1 KS01"
|
||||
GAME( 2006, keks_2d, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, bank F9, changed version text to "VIDEO GAME-1 KS01" (keks_2c, decoded gfx)
|
||||
GAME( 2006, keks_2e, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, banking address hack, payout percentage 60)", MACHINE_SUPPORTS_SAVE ) // bank F9, payout percentage 60%
|
||||
GAME( 2006, keks_2f, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2006, keks_2g, keks_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Keks (bootleg, 060403, LOTOS KS01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "LOTOS KS01"
|
||||
GAME( 2006, keks_3a, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 070119, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keks_3b, keks_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 070119, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keksa, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060328, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keksb, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060328, backdoor)", MACHINE_SUPPORTS_SAVE ) // backdoor 1,1 1,3 1,5 1,7 3,3 3,4
|
||||
GAME( 2006, keksc, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060328, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070119
|
||||
GAME( 2006, keks_2a, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keks_2b, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, banking address hack, changed version text)", MACHINE_SUPPORTS_SAVE ) // bank F9, changed version text to 070119
|
||||
GAME( 2006, keks_2c, keks_2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 1)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, changed version text to "VIDEO GAME-1 KS01"
|
||||
GAME( 2006, keks_2d, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 2)", MACHINE_SUPPORTS_SAVE ) // modified graphics, bank F9, changed version text to "VIDEO GAME-1 KS01" (keks_2c, decoded gfx)
|
||||
GAME( 2006, keks_2e, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, banking address hack, payout percentage 60)", MACHINE_SUPPORTS_SAVE ) // bank F9, payout percentage 60%
|
||||
GAME( 2006, keks_2f, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 060403, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2006, keks_2g, keks_2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Keks (bootleg, 060403, LOTOS KS01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "LOTOS KS01"
|
||||
GAME( 2006, keks_3a, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 070119, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2006, keks_3b, keks_2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Keks (bootleg, 070119, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
|
||||
GAME( 2007, gnomea, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 070906, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnomeb, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 070906, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnomec, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 070906, banking address hack set 3)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnomed, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Gnome (bootleg, 070906, VIDEO GAME-1 GN01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 GN01"
|
||||
GAME( 2007, gnomee, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Gnome (bootleg, 070906, LOTOS GN01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "LOTOS GN01"
|
||||
GAME( 2007, gnome_2a, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 071115, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnome_3a, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 080303, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnome_3b, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 080303, banking address hack, payout percentage 45)", MACHINE_SUPPORTS_SAVE ) // bank F9 payout percentage 45%
|
||||
GAME( 2007, gnome_3c, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 080303, banking address hack, payout percentage 60)", MACHINE_SUPPORTS_SAVE ) // bank F9 payout percentage 60%
|
||||
GAME( 2007, gnome_5a, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 090406, banking address hack, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // bank F9, payout percentage 70%
|
||||
GAME( 2007, gnome_5b, gnome_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 090406, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2007, gnomea, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 070906, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnomeb, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 070906, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnomec, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 070906, banking address hack set 3)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnomed, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Gnome (bootleg, 070906, VIDEO GAME-1 GN01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, many texts changed, changed version text to "VIDEO GAME-1 GN01"
|
||||
GAME( 2007, gnomee, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Gnome (bootleg, 070906, LOTOS GN01)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "LOTOS GN01"
|
||||
GAME( 2007, gnome_2a, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 071115, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnome_3a, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 080303, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, gnome_3b, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 080303, banking address hack, payout percentage 45)", MACHINE_SUPPORTS_SAVE ) // bank F9 payout percentage 45%
|
||||
GAME( 2007, gnome_3c, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 080303, banking address hack, payout percentage 60)", MACHINE_SUPPORTS_SAVE ) // bank F9 payout percentage 60%
|
||||
GAME( 2007, gnome_5a, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 090406, banking address hack, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // bank F9, payout percentage 70%
|
||||
GAME( 2007, gnome_5b, gnome_9, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Gnome (bootleg, 090406, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
|
||||
GAME( 2007, sweetl2_2a, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, sweetl2_2b, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9, some fixes
|
||||
GAME( 2007, sweetl2_2c, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01)", MACHINE_SUPPORTS_SAVE ) // modified graphics, bank F9, changed version text to "VIDEO GAME-1 MD01"
|
||||
GAME( 2007, sweetl2_2d, sweetl2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2007, sweetl2_2a, sweetl2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, banking address hack set 1)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2007, sweetl2_2b, sweetl2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, banking address hack set 2)", MACHINE_SUPPORTS_SAVE ) // bank F9, some fixes
|
||||
GAME( 2007, sweetl2_2c, sweetl2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01)", MACHINE_SUPPORTS_SAVE ) // modified graphics, bank F9, changed version text to "VIDEO GAME-1 MD01"
|
||||
GAME( 2007, sweetl2_2d, sweetl2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Sweet Life 2 (bootleg, 080320, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
|
||||
GAME( 2008, fcockt2a, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 080707, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2008, fcockt2_4a, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2008, fcockt2_4b, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, no credit limit)", MACHINE_SUPPORTS_SAVE ) // bank F9, no credit limit, "MaxVin" signature
|
||||
GAME( 2008, fcockt2_4c, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, VIDEO GAME-1 FR02)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "VIDEO GAME-1 FR02"
|
||||
GAME( 2008, fcockt2_4d, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // bank F9, no credit limit, "MaxVin" signature, payout percentage 70%
|
||||
GAME( 2008, fcockt2_4e, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2008, fcockt2_4f, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, LOTOS FR02)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "LOTOS FR02"
|
||||
GAME( 2008, fcockt2a, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 080707, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2008, fcockt2_4a, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, banking address hack)", MACHINE_SUPPORTS_SAVE ) // bank F9
|
||||
GAME( 2008, fcockt2_4b, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, no credit limit)", MACHINE_SUPPORTS_SAVE ) // bank F9, no credit limit, "MaxVin" signature
|
||||
GAME( 2008, fcockt2_4c, fcockt2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, VIDEO GAME-1 FR02)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "VIDEO GAME-1 FR02"
|
||||
GAME( 2008, fcockt2_4d, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, payout percentage 70)", MACHINE_SUPPORTS_SAVE ) // bank F9, no credit limit, "MaxVin" signature, payout percentage 70%
|
||||
GAME( 2008, fcockt2_4e, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, LOTTOGAME (I))", MACHINE_SUPPORTS_SAVE ) // bank F9, modified graphics, changed version text to "MDS_is_the_best_ LOTTOGAME (I)"
|
||||
GAME( 2008, fcockt2_4f, fcockt2, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, customl,ROT0, "bootleg", "Fruit Cocktail 2 (bootleg, 081105, LOTOS FR02)", MACHINE_SUPPORTS_SAVE ) // custom alteras, modified graphics, bank F9, many texts changed, changed version text to "LOTOS FR02"
|
||||
|
||||
|
||||
/* 0x000000 - 0x03ffff Crazy Monkey V03-1110
|
||||
|
@ -575,54 +575,54 @@ ROM_START( fcockt2_2 ) // 080904
|
||||
ROM_LOAD( "fruitcocktail2_old.008", 0x380000, 0x80000, CRC(a27c49a2) SHA1(7c9ee0e01f76ca3ab6716579f5dde7036050970b) )
|
||||
ROM_END
|
||||
|
||||
//GAME( 2002, mfish, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021120)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_2, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021121)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_4, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021219)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_5, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021227)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_7, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (030511)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_9, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (031026)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_10, mfish_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (031117)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021120)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_2, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021121)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_4, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021219)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_5, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (021227)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_7, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (030511)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_9, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (031026)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2002, mfish_10, mfish_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Multi Fish (031117)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
//GAME( 2003, crzmon, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030217 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_2, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030225 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_3, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030227 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_4, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030404 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_6, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (031016 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_10, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (081027 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, czmon_11, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (081113 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, czmon_12, czmon_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, crzmonent,ROT0, "Igrosoft", "Crazy Monkey (090711 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
//GAME( 2003, czmon_14, czmon_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (100311 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, crzmon, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030217 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_2, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030225 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_3, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030227 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_4, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (030404 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_6, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (031016 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, czmon_10, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (081027 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, czmon_11, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (081113 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, czmon_12, czmon_13, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, crzmonent,ROT0, "Igrosoft", "Crazy Monkey (090711 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
//GAME( 2003, czmon_14, czmon_13, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Crazy Monkey (100311 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
|
||||
//GAME( 2003, fcockt, fcockt_parent igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (030505 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, fcockt_2, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (030512 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, fcockt_4, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (031028 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, fcockt_13, fcockt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (081124 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, fcockt, fcockt_8 igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (030505 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, fcockt_2, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (030512 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, fcockt_4, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (031028 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, fcockt_13, fcockt_8, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail (081124 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
|
||||
//GAME( 2003, lhaunt, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (030707 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, lhaunt_3, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (031027 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, lhaunt_9, lhaunt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (081208 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2003, lhaunt, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (030707 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, lhaunt_3, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (031027 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, lhaunt_9, lhaunt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Lucky Haunter (081208 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
|
||||
//GAME( 2003, rollfr, rollfr_parent, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (030821)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2003, rollfr, rollfr_4, rollfr, rollfr, driver_device, 0, ROT0, "Igrosoft", "Roll Fruit (030821)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
//GAME( 2004, garage, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040122 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, garage_2, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040123 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, garage_3, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040216 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, garage_8, garage_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (081229 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2004, garage, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040122 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, garage_2, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040123 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, garage_3, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (040216 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, garage_8, garage_5, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Garage (081229 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
|
||||
//GAME( 2004, rclimb_2, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (040823 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, rclimb_6, rclimb_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (090217 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2004, rclimb_2, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (040823 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2004, rclimb_6, rclimb_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Rock Climber (090217 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
|
||||
//GAME( 2004, resdnt_4, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (090129 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2004, resdnt_5, resdnt_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, resdntent,ROT0, "Igrosoft", "Resident (090722 Entertainment)", GANE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
//GAME( 2004, resdnt_7, resdnt_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (100311 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2004, resdnt_4, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (090129 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2004, resdnt_5, resdnt_6, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, resdntent,ROT0, "Igrosoft", "Resident (090722 Entertainment)", GANE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
//GAME( 2004, resdnt_7, resdnt_6, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Resident (100311 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
|
||||
//GAME( 2005, pirate, pirate_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (051229 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2005, pirate, pirate_3, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Pirate (051229 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
//GAME( 2006, island2_2, island2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (061214 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
//GAME( 2006, island2_2, island2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Island 2 (061214 World)", MACHINE_SUPPORTS_SAVE ) /* World */
|
||||
|
||||
//GAME( 2007, gnome_6, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomel, ROT0, "Igrosoft", "Gnome (090604 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2007, gnome_8, gnome_parent, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomeent, ROT0, "Igrosoft", "Gnome (090810 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
//GAME( 2007, gnome_6, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomel, ROT0, "Igrosoft", "Gnome (090604 Lottery)", MACHINE_SUPPORTS_SAVE ) /* Lottery */
|
||||
//GAME( 2007, gnome_8, gnome_9, igrosoft_gamble, igrosoft_gamble, igrosoft_gamble_state, gnomeent, ROT0, "Igrosoft", "Gnome (090810 Entertainment)", MACHINE_SUPPORTS_SAVE ) /* Entertainment */
|
||||
|
||||
//GAME( 2008, fcockt2_2, fcockt2_parent, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (080904 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
//GAME( 2008, fcockt2_2, fcockt2, igrosoft_gamble, igrosoft_gamble, driver_device, 0, ROT0, "Igrosoft", "Fruit Cocktail 2 (080904 Russia)", MACHINE_SUPPORTS_SAVE ) /* Russia */
|
||||
|
||||
#endif
|
||||
|
@ -322,7 +322,7 @@ rumbling on a subwoofer in the cabinet.)
|
||||
#include "includes/taitoipt.h"
|
||||
#include "includes/ninjaw.h"
|
||||
|
||||
extern const char layout_darius[];
|
||||
extern const internal_layout layout_darius;
|
||||
|
||||
void ninjaw_state::parse_control( ) /* assumes Z80 sandwiched between 68Ks */
|
||||
{
|
||||
|
@ -113,7 +113,7 @@ WRITE8_MEMBER( nsm_state::cru_w )
|
||||
void nsm_state::machine_reset()
|
||||
{
|
||||
// Disable auto wait state generation by raising the READY line on reset
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( nsm, nsm_state )
|
||||
|
@ -399,7 +399,7 @@ GFXDECODE_END
|
||||
void nsmpoker_state::machine_reset()
|
||||
{
|
||||
// Disable auto wait state generation by raising the READY line on reset
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(ASSERT_LINE);
|
||||
}
|
||||
|
||||
/*************************
|
||||
|
@ -317,18 +317,8 @@ READ16_MEMBER(opwolf_state::opwolf_dsw_r)
|
||||
|
||||
READ16_MEMBER(opwolf_state::opwolf_lightgun_r)
|
||||
{
|
||||
int scaled;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* P1X - Have to remap 8 bit input value, into 0-319 visible range */
|
||||
scaled = (ioport(P1X_PORT_TAG)->read() * 320 ) / 256;
|
||||
return (scaled + 0x15 + m_opwolf_gun_xoffs);
|
||||
case 0x01: /* P1Y */
|
||||
return (ioport(P1Y_PORT_TAG)->read() - 0x24 + m_opwolf_gun_yoffs);
|
||||
}
|
||||
|
||||
return 0xff;
|
||||
static const char *const dswname[2] = { "IN2", "IN3" };
|
||||
return ioport(dswname[offset])->read();
|
||||
}
|
||||
|
||||
READ8_MEMBER(opwolf_state::z80_input1_r)
|
||||
@ -400,6 +390,25 @@ static ADDRESS_MAP_START( opwolfb_map, AS_PROGRAM, 16, opwolf_state )
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( opwolfp_map, AS_PROGRAM, 16, opwolf_state )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x107fff) AM_RAM
|
||||
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x380000, 0x380003) AM_READ(opwolf_dsw_r) /* dip switches */
|
||||
AM_RANGE(0x380000, 0x380003) AM_WRITE(opwolf_spritectrl_w) // usually 0x4, changes when you fire
|
||||
AM_RANGE(0x3a0000, 0x3a0003) AM_READ(opwolf_lightgun_r) /* lightgun, read at $11e0/6 (AND INPUTS) */
|
||||
AM_RANGE(0x3c0000, 0x3c0001) AM_WRITENOP /* watchdog ?? */
|
||||
AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_device, master_port_w, 0xff00)
|
||||
AM_RANGE(0x3e0002, 0x3e0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_device, master_comm_r, master_comm_w, 0xff00)
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("pc080sn", pc080sn_device, word_r, word_w)
|
||||
AM_RANGE(0xc10000, 0xc1ffff) AM_WRITEONLY /* error in init code (?) */
|
||||
AM_RANGE(0xc20000, 0xc20003) AM_DEVWRITE("pc080sn", pc080sn_device, yscroll_word_w)
|
||||
AM_RANGE(0xc40000, 0xc40003) AM_DEVWRITE("pc080sn", pc080sn_device, xscroll_word_w)
|
||||
AM_RANGE(0xc50000, 0xc50003) AM_DEVWRITE("pc080sn", pc080sn_device, ctrl_word_w)
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
This extra Z80 substitutes for the c-chip in the bootleg
|
||||
@ -551,6 +560,21 @@ ADDRESS_MAP_END
|
||||
INPUT PORTS, DIPs
|
||||
***********************************************************/
|
||||
|
||||
|
||||
CUSTOM_INPUT_MEMBER(opwolf_state::opwolf_gun_x_r )
|
||||
{
|
||||
/* P1X - Have to remap 8 bit input value, into 0-319 visible range */
|
||||
int scaled = (ioport(P1X_PORT_TAG)->read() * 320 ) / 256;
|
||||
return (scaled + 0x15 + m_opwolf_gun_xoffs);
|
||||
}
|
||||
|
||||
CUSTOM_INPUT_MEMBER(opwolf_state::opwolf_gun_y_r )
|
||||
{
|
||||
return (ioport(P1Y_PORT_TAG)->read() - 0x24 + m_opwolf_gun_yoffs);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( opwolf )
|
||||
/* 0x380000 -> 0x0ff028 (-$fd8,A5) (C-chip) */
|
||||
PORT_START("DSWA")
|
||||
@ -601,15 +625,66 @@ static INPUT_PORTS_START( opwolf )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
/* P1X (span allows you to shoot enemies behind status bar) */
|
||||
PORT_START(P1X_PORT_TAG)
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_BIT( 0x01ff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, opwolf_state, opwolf_gun_x_r, NULL)
|
||||
PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN3")
|
||||
PORT_BIT( 0x01ff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, opwolf_state, opwolf_gun_y_r, NULL)
|
||||
PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START(P1X_PORT_TAG) /* P1X (span allows you to shoot enemies behind status bar) */
|
||||
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
|
||||
|
||||
/* P1Y (span allows you to be slightly offscreen) */
|
||||
PORT_START(P1Y_PORT_TAG)
|
||||
PORT_START(P1Y_PORT_TAG) /* P1Y (span allows you to be slightly offscreen) */
|
||||
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
|
||||
|
||||
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( opwolfp )
|
||||
PORT_INCLUDE( opwolf )
|
||||
|
||||
|
||||
PORT_MODIFY("IN0")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_MODIFY("IN1")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
/* 0x0000 - 0x01ff is GUNX */
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_TILT )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0xc000, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_MODIFY("IN3")
|
||||
/* 0x0000 - 0x01ff is GUNY */
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN2 )
|
||||
PORT_BIT( 0xf800, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_MODIFY("DSWB")
|
||||
PORT_DIPNAME( 0x10, 0x10, "Display Hit Percentage (Cheat)" ) PORT_DIPLOCATION("SW2:5") // probably a cheat / debug feature as it's not in the final game
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( No ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Infinite Health (Cheat)" ) PORT_DIPLOCATION("SW2:6")
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( No ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:8")
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) )
|
||||
PORT_DIPSETTING( 0x00, "English (invalid)" ) // game hangs on course screen (confirmed on hardware)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( opwolfu )
|
||||
PORT_INCLUDE( opwolf )
|
||||
|
||||
@ -751,6 +826,15 @@ static MACHINE_CONFIG_START( opwolf, opwolf_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( opwolfp, opwolf )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu") /* 8 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(opwolfp_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( opwolfb, opwolf_state ) /* OSC clocks unknown for the bootleg, but changed to match original sets */
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -906,6 +990,33 @@ ROM_START( opwolfu ) /* Taito TC0030 C-Chip labeled B20-18 (yes, it has a specif
|
||||
ROM_LOAD( "b20-08.21", 0x00000, 0x80000, CRC(f3e19c64) SHA1(39d48645f776c9c2ade537d959ecc6f9dc6dfa1b) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Prototype board
|
||||
There is no C-CHIP and TC0070RGB module is replaced by three PC040DA DAC, 68000 CPU is socketed as well as RAMs, the PGA customs and YM2151, YM3012 and PC060HA on sound board.
|
||||
Labels on the 68k and Z80 roms are handwritten with checksums, GFX roms are the final MASK roms.
|
||||
*/
|
||||
|
||||
ROM_START( opwolfp )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 256k for 68000 code */
|
||||
ROM_LOAD16_BYTE( "ic40", 0x00000, 0x10000, CRC(81f56008) SHA1(8ff02c088ef325a1920b29651672bad2d2d2a7a2) )
|
||||
ROM_LOAD16_BYTE( "ic30", 0x00001, 0x10000, CRC(d90cebb2) SHA1(c36070c20dfad0e1c56c4ac016a115e9e9601ecb) )
|
||||
ROM_LOAD16_BYTE( "ic39", 0x20000, 0x10000, CRC(aeef5cfc) SHA1(3c75d1df80db6ae2d690fdf23b3c44b21056d24a) )
|
||||
ROM_LOAD16_BYTE( "ic29", 0x20001, 0x10000, CRC(5ce89249) SHA1(be22fd57e29114cde66cf4339c26740b3e0f830f) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
|
||||
ROM_LOAD( "ic10", 0x00000, 0x10000, CRC(684b40dd) SHA1(0546e01cf2c76b9c60730a14835cdeaaec21d26f) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_LOAD( "b20-13.13", 0x00000, 0x80000, CRC(f6acdab1) SHA1(716b94ab3fa330ecf22df576f6a9f47a49c7554a) ) /* SCR tiles (8 x 8) */
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", 0 )
|
||||
ROM_LOAD( "b20-06.ic72", 0x00000, 0x80000, CRC(89f889e5) SHA1(1592f6ce4fbb75e33d6ab957e5b90242a7a7a8c4) ) /* Sprites (16 x 16) */ // same content as b20-14.72 despite different label (confirmed)
|
||||
|
||||
ROM_REGION( 0x80000, "adpcm", 0 ) /* ADPCM samples */
|
||||
ROM_LOAD( "b20-08.21", 0x00000, 0x80000, CRC(f3e19c64) SHA1(39d48645f776c9c2ade537d959ecc6f9dc6dfa1b) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( opwolfb )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 256k for 68000 code */
|
||||
ROM_LOAD16_BYTE( "opwlfb.12", 0x00000, 0x10000, CRC(d87e4405) SHA1(de8a7763acd57293fbbff609e949ecd66c0f9234) )
|
||||
@ -980,10 +1091,24 @@ DRIVER_INIT_MEMBER(opwolf_state,opwolfb)
|
||||
membank("z80bank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(opwolf_state,opwolfp)
|
||||
{
|
||||
UINT16* rom = (UINT16*)memregion("maincpu")->base();
|
||||
|
||||
m_opwolf_region = rom[0x03fffe / 2] & 0xff;
|
||||
|
||||
m_opwolf_gun_xoffs = 5;
|
||||
m_opwolf_gun_yoffs = 30;
|
||||
|
||||
membank("z80bank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* year rom parent machine inp init */
|
||||
GAME( 1987, opwolf, 0, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfa, opwolf, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfj, opwolf, opwolf, opwolfu, opwolf_state, opwolf, ROT0, "Taito Corporation", "Operation Wolf (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolf, 0, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfa, opwolf, opwolf, opwolf, opwolf_state, opwolf, ROT0, "Taito Corporation Japan", "Operation Wolf (World, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfj, opwolf, opwolf, opwolfu, opwolf_state, opwolf, ROT0, "Taito Corporation", "Operation Wolf (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfu, opwolf, opwolf, opwolfu, opwolf_state, opwolf, ROT0, "Taito America Corporation", "Operation Wolf (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfb, opwolf, opwolfb, opwolfb, opwolf_state, opwolfb, ROT0, "bootleg (Bear Corporation Korea)", "Operation Bear (bootleg of Operation Wolf)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, opwolfp, opwolf, opwolfp, opwolfp, opwolf_state, opwolfp, ROT0, "Taito Corporation", "Operation Wolf (Japan, prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // unprotected
|
||||
|
@ -290,7 +290,7 @@ void pachifev_state::machine_reset()
|
||||
{
|
||||
// Pulling down the line on RESET configures the CPU to insert one wait
|
||||
// state on external memory accesses
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(CLEAR_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(CLEAR_LINE);
|
||||
|
||||
m_power=0;
|
||||
m_max_power=0;
|
||||
|
@ -113,8 +113,8 @@ static ADDRESS_MAP_START( pitnrun_map, AS_PROGRAM, 8, pitnrun_state )
|
||||
AM_RANGE(0xc805, 0xc805) AM_WRITE(h_heed_w)
|
||||
AM_RANGE(0xc806, 0xc806) AM_WRITE(v_heed_w)
|
||||
AM_RANGE(0xc807, 0xc807) AM_WRITE(ha_w)
|
||||
AM_RANGE(0xd800, 0xd800) AM_READ(mcu_status_r)
|
||||
AM_RANGE(0xd000, 0xd000) AM_READ(mcu_data_r)
|
||||
AM_RANGE(0xd800, 0xd800) AM_READ(mcu_status_r)
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ(watchdog_reset_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -31,7 +31,9 @@ class spyhuntertec_state : public driver_device
|
||||
public:
|
||||
spyhuntertec_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_analog_timer(*this, "analog_timer"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_spriteram2(*this, "spriteram2"),
|
||||
@ -43,12 +45,17 @@ public:
|
||||
{ }
|
||||
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<timer_device> m_analog_timer;
|
||||
required_shared_ptr<UINT8> m_videoram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
required_shared_ptr<UINT8> m_spriteram2;
|
||||
required_shared_ptr<UINT8> m_paletteram;
|
||||
required_shared_ptr<UINT8> m_spyhunt_alpharam;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -57,9 +64,6 @@ public:
|
||||
UINT32 screen_update_spyhuntertec(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
UINT8 m_spyhunt_sprite_color_mask;
|
||||
INT16 m_spyhunt_scroll_offset;
|
||||
@ -98,9 +102,12 @@ public:
|
||||
TILE_GET_INFO_MEMBER(spyhunt_get_alpha_tile_info);
|
||||
void mcr3_update_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int color_mask, int code_xor, int dx, int dy, int interlaced);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(analog_shift_callback);
|
||||
void reset_analog_timer();
|
||||
|
||||
int m_analog_read_ready;
|
||||
int m_analog_latched_value;
|
||||
UINT8 m_analog_latched_value;
|
||||
UINT8 m_analog_select;
|
||||
int m_analog_read_count;
|
||||
};
|
||||
|
||||
@ -115,7 +122,17 @@ READ8_MEMBER(spyhuntertec_state::ay1_porta_r)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void spyhuntertec_state::reset_analog_timer()
|
||||
{
|
||||
// 555 timer? complete guess
|
||||
m_analog_timer->adjust(attotime::from_nsec(7600));
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(spyhuntertec_state::analog_shift_callback)
|
||||
{
|
||||
m_analog_read_count++;
|
||||
reset_analog_timer();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(spyhuntertec_state::ay2_porta_w)
|
||||
{
|
||||
@ -124,25 +141,17 @@ WRITE8_MEMBER(spyhuntertec_state::ay2_porta_w)
|
||||
// or 81 / 01
|
||||
// depending on which sound command was used
|
||||
// assuming input select
|
||||
|
||||
if (data == 0x80)
|
||||
|
||||
// d7 falling edge
|
||||
if (~data & m_analog_select & 0x80)
|
||||
{
|
||||
m_analog_read_ready = 1;
|
||||
m_analog_read_count = 0;
|
||||
m_analog_latched_value = ioport("PEDAL")->read();
|
||||
}
|
||||
else if (data == 0x81)
|
||||
{
|
||||
m_analog_read_ready = 1;
|
||||
m_analog_read_count = 0;
|
||||
m_analog_latched_value = ioport("PADDLE")->read();
|
||||
|
||||
reset_analog_timer();
|
||||
m_analog_latched_value = ioport((data & 1) ? "PADDLE" : "PEDAL")->read();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
m_analog_select = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(spyhuntertec_state::ay2_porta_r)
|
||||
@ -410,6 +419,7 @@ READ8_MEMBER(spyhuntertec_state::spyhuntertec_in2_r)
|
||||
|
||||
|
||||
*/
|
||||
// printf("%04x spyhuntertec_in2_r\n", space.device().safe_pc());
|
||||
|
||||
UINT8 ret = ioport("IN2")->read()&~0x40;
|
||||
|
||||
@ -421,18 +431,12 @@ READ8_MEMBER(spyhuntertec_state::spyhuntertec_in2_r)
|
||||
m_analog_read_count = 0;
|
||||
m_analog_read_ready = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// ret |= 0x40;
|
||||
m_analog_read_count++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ret |= 0x40;
|
||||
}
|
||||
|
||||
// printf("%04x spyhuntertec_in2_r\n", space.device().safe_pc());
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -617,7 +621,7 @@ static INPUT_PORTS_START( spyhuntertec )
|
||||
PORT_START("PEDAL")
|
||||
PORT_BIT( 0xff, 0x02, IPT_PEDAL ) PORT_MINMAX(0x02,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_REVERSE
|
||||
PORT_START("PADDLE")
|
||||
PORT_BIT( 0xff, 0x02, IPT_PADDLE ) PORT_MINMAX(0x02,0xff) PORT_SENSITIVITY(40) PORT_KEYDELTA(10) PORT_REVERSE
|
||||
PORT_BIT( 0x7f, 0x40, IPT_PADDLE ) PORT_MINMAX(0x30,0x50) PORT_SENSITIVITY(40) PORT_KEYDELTA(3) PORT_REVERSE
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -700,7 +704,8 @@ static MACHINE_CONFIG_START( spyhuntertec, spyhuntertec_state )
|
||||
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/4)
|
||||
MCFG_CPU_PROGRAM_MAP(spyhuntertec_map)
|
||||
MCFG_CPU_IO_MAP(spyhuntertec_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", spyhuntertec_state, irq0_line_hold)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", spyhuntertec_state, irq0_line_hold)
|
||||
MCFG_TIMER_DRIVER_ADD("analog_timer", spyhuntertec_state, analog_shift_callback)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -12,18 +12,19 @@ There is RAM for 512 scroll values (line scroll). Video RAM is mirrored on multi
|
||||
One peculiarity is that video RAM access is split into high and low byte. The former is mapped
|
||||
in program space, the latter in I/O space.
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
Year Game CPU Sound Custom Other
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
1996 Magic Train HD647180* U6295 SS9601, SS9602 HM86171 RAMDAC, Battery
|
||||
1996 Water-Nymph HD647180* U6295 SS9601, SS9602 HM86171 RAMDAC, Battery
|
||||
1998 Express Card AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
1998 Ying Hua Lian AM188-EM M6295 + YM3812? SS9601, SS9602 HM86171 RAMDAC, Battery
|
||||
1999 Bishou Jan H8/3044 SS9904? SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
1999 X-Train AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
2006 X-Plan AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
*SS9600
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
Year Game CPU Sound Custom Other
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
1996 Magic Train HD647180* U6295 SS9601, SS9602 HM86171 RAMDAC, Battery
|
||||
1996 Water-Nymph HD647180* U6295 SS9601, SS9602 HM86171 RAMDAC, Battery
|
||||
1998 Express Card AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
1998 Ying Hua Lian AM188-EM M6295 + YM3812? SS9601, SS9602 HM86171 RAMDAC, Battery
|
||||
1999 Bishou Jan H8/3044** SS9904? SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
1999 X-Train/P-Train AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
2000 New 2001 H8/3044** SS9904? SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
2006 X-Plan AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
*SS9600 **SS9689
|
||||
|
||||
To do:
|
||||
|
||||
@ -101,7 +102,7 @@ public:
|
||||
UINT8 m_dsw_mask;
|
||||
optional_shared_ptr<UINT16> m_outputs16;
|
||||
optional_shared_ptr<UINT8> m_outputs;
|
||||
UINT16 m_bishjan_sel;
|
||||
UINT16 m_bishjan_sound;
|
||||
UINT16 m_bishjan_input;
|
||||
DECLARE_WRITE8_MEMBER(ss9601_byte_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(ss9601_byte_lo2_w);
|
||||
@ -139,11 +140,12 @@ public:
|
||||
DECLARE_READ8_MEMBER(dsw_r);
|
||||
DECLARE_READ8_MEMBER(vblank_bit2_r);
|
||||
DECLARE_READ8_MEMBER(vblank_bit6_r);
|
||||
DECLARE_WRITE16_MEMBER(bishjan_sel_w);
|
||||
DECLARE_WRITE16_MEMBER(bishjan_sound_w);
|
||||
DECLARE_READ16_MEMBER(bishjan_serial_r);
|
||||
DECLARE_WRITE16_MEMBER(bishjan_input_w);
|
||||
DECLARE_READ16_MEMBER(bishjan_input_r);
|
||||
DECLARE_WRITE16_MEMBER(bishjan_outputs_w);
|
||||
DECLARE_WRITE16_MEMBER(new2001_outputs_w);
|
||||
DECLARE_WRITE8_MEMBER(expcard_outputs_w);
|
||||
DECLARE_WRITE8_MEMBER(mtrain_outputs_w);
|
||||
DECLARE_WRITE8_MEMBER(mtrain_videoram_w);
|
||||
@ -155,6 +157,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(oki_bank_bit0_w);
|
||||
DECLARE_WRITE8_MEMBER(oki_bank_bit4_w);
|
||||
DECLARE_DRIVER_INIT(bishjan);
|
||||
DECLARE_DRIVER_INIT(new2001);
|
||||
DECLARE_DRIVER_INIT(xtrain);
|
||||
DECLARE_DRIVER_INIT(expcard);
|
||||
DECLARE_DRIVER_INIT(wtrnymph);
|
||||
@ -600,7 +603,7 @@ VIDEO_START_MEMBER(subsino2_state,subsino2)
|
||||
// SS9601 Regs:
|
||||
|
||||
m_ss9601_tilesize = TILE_8x8;
|
||||
m_ss9601_scrollctrl = 0xfd; // not written by mtrain, default to reels on
|
||||
m_ss9601_scrollctrl = 0xfd; // not written by mtrain, default to reels on
|
||||
m_ss9601_disable = 0x00;
|
||||
|
||||
// SS9601 Layers:
|
||||
@ -861,8 +864,7 @@ INTERRUPT_GEN_MEMBER(subsino2_state::am188em_int0_irq)
|
||||
Bishou Jan
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
WRITE16_MEMBER(subsino2_state::bishjan_sel_w)
|
||||
WRITE16_MEMBER(subsino2_state::bishjan_sound_w)
|
||||
{
|
||||
/*
|
||||
sound writes in service mode:
|
||||
@ -870,14 +872,14 @@ WRITE16_MEMBER(subsino2_state::bishjan_sel_w)
|
||||
02 89 04 0v (v = voice = 0..3)
|
||||
*/
|
||||
if (ACCESSING_BITS_8_15)
|
||||
m_bishjan_sel = data >> 8;
|
||||
m_bishjan_sound = data >> 8;
|
||||
}
|
||||
|
||||
READ16_MEMBER(subsino2_state::bishjan_serial_r)
|
||||
{
|
||||
return
|
||||
(machine().rand() & 0x9800) | // bit 7 - serial communication
|
||||
(((m_bishjan_sel==0x12) ? 0x40:0x00) << 8) |
|
||||
(machine().rand() & 0x9800) | // bit 7 - serial communication
|
||||
(((m_bishjan_sound == 0x12) ? 0x40:0x00) << 8) | // bit 6 - sound communication
|
||||
// (machine.rand() & 0xff);
|
||||
// (((m_screen->frame_number()%60)==0)?0x18:0x00);
|
||||
0x18;
|
||||
@ -899,7 +901,7 @@ READ16_MEMBER(subsino2_state::bishjan_input_r)
|
||||
if (m_bishjan_input & (1 << i))
|
||||
res = ioport(port[i])->read();
|
||||
|
||||
return (res << 8) | // high byte
|
||||
return (res << 8) | // high byte
|
||||
ioport("SYSTEM")->read() | // low byte
|
||||
(machine().device<ticket_dispenser_device>("hopper")->read(space, 0) ? 0x00 : 0x04) // bit 2: hopper sensor
|
||||
;
|
||||
@ -907,7 +909,7 @@ READ16_MEMBER(subsino2_state::bishjan_input_r)
|
||||
|
||||
WRITE16_MEMBER(subsino2_state::bishjan_outputs_w)
|
||||
{
|
||||
m_outputs16[offset] = data;
|
||||
COMBINE_DATA( &m_outputs16[offset] );
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
@ -956,14 +958,13 @@ static ADDRESS_MAP_START( bishjan_map, AS_PROGRAM, 16, subsino2_state )
|
||||
AM_RANGE( 0x436000, 0x436fff ) AM_WRITE8(ss9601_reelram_hi_lo_w, 0xffff )
|
||||
AM_RANGE( 0x437000, 0x4371ff ) AM_WRITE8(ss9601_scrollram_0_hi_lo_w, 0xffff )
|
||||
|
||||
AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE(bishjan_sel_w )
|
||||
AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE(bishjan_sound_w )
|
||||
AM_RANGE( 0x600040, 0x600041 ) AM_WRITE8(ss9601_scrollctrl_w, 0xff00 )
|
||||
AM_RANGE( 0x600060, 0x600063 ) AM_WRITE8(hm86171_colorram_w, 0xffff )
|
||||
AM_RANGE( 0x600080, 0x600081 ) AM_WRITE8(ss9601_tilesize_w, 0xff00 )
|
||||
AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE8(ss9601_byte_lo_w, 0xff00 )
|
||||
|
||||
AM_RANGE( 0xa0001e, 0xa0001f ) AM_WRITE8(ss9601_disable_w, 0x00ff )
|
||||
|
||||
AM_RANGE( 0xa00020, 0xa00025 ) AM_WRITE8(ss9601_scroll_w, 0xffff )
|
||||
|
||||
AM_RANGE( 0xc00000, 0xc00001 ) AM_READ_PORT("DSW") // SW1
|
||||
@ -973,6 +974,92 @@ static ADDRESS_MAP_START( bishjan_map, AS_PROGRAM, 16, subsino2_state )
|
||||
AM_RANGE( 0xc00008, 0xc00009 ) AM_READ_PORT("RESET") AM_WRITE(bishjan_outputs_w ) AM_SHARE("outputs16")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
New 2001
|
||||
***************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(subsino2_state::new2001_outputs_w)
|
||||
{
|
||||
COMBINE_DATA( &m_outputs16[offset] );
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
output().set_led_value(0, data & 0x4000); // record?
|
||||
output().set_led_value(1, data & 0x2000); // shoot now
|
||||
output().set_led_value(2, data & 0x1000); // double
|
||||
output().set_led_value(0, data & 0x0800); // black/red
|
||||
}
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
output().set_led_value(0, data & 0x0080); // start
|
||||
output().set_led_value(0, data & 0x0040); // take
|
||||
output().set_led_value(0, data & 0x0020); // black/red
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x0010); // coin in / key in
|
||||
output().set_led_value(0, data & 0x0004); // ?
|
||||
output().set_led_value(0, data & 0x0002); // ?
|
||||
}
|
||||
break;
|
||||
}
|
||||
popmessage("0: %04x", m_outputs16[0]);
|
||||
}
|
||||
|
||||
// Same as bishjan (except for i/o and lo2 usage like xplan)
|
||||
static ADDRESS_MAP_START( new2001_map, AS_PROGRAM, 16, subsino2_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xffffff)
|
||||
|
||||
AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_REGION("maincpu", 0)
|
||||
AM_RANGE( 0x080000, 0x0fffff ) AM_ROM AM_REGION("maincpu", 0)
|
||||
|
||||
AM_RANGE( 0x200000, 0x207fff ) AM_RAM AM_SHARE("nvram") // battery
|
||||
|
||||
// write both (L1, byte_lo2)
|
||||
AM_RANGE( 0x410000, 0x411fff ) AM_WRITE8(ss9601_videoram_1_hi_lo2_w, 0xffff )
|
||||
// read lo (L1) (only half tilemap?)
|
||||
AM_RANGE( 0x412000, 0x412fff ) AM_READ8(ss9601_videoram_1_lo_r, 0xffff )
|
||||
AM_RANGE( 0x413000, 0x4131ff ) AM_READWRITE8(ss9601_scrollram_1_lo_r, ss9601_scrollram_1_lo_w, 0xffff )
|
||||
// write both (L0 & REEL, byte_lo2)
|
||||
AM_RANGE( 0x414000, 0x415fff ) AM_WRITE8(ss9601_videoram_0_hi_lo2_w, 0xffff )
|
||||
// read lo (REEL)
|
||||
AM_RANGE( 0x416000, 0x416fff ) AM_READ8(ss9601_reelram_lo_r, 0xffff )
|
||||
AM_RANGE( 0x417000, 0x4171ff ) AM_READWRITE8(ss9601_scrollram_0_lo_r, ss9601_scrollram_0_lo_w, 0xffff )
|
||||
|
||||
// read hi (L1)
|
||||
AM_RANGE( 0x422000, 0x422fff ) AM_READ8(ss9601_videoram_1_hi_r, 0xffff )
|
||||
AM_RANGE( 0x423000, 0x4231ff ) AM_READWRITE8(ss9601_scrollram_1_hi_r, ss9601_scrollram_1_hi_w, 0xffff )
|
||||
// read hi (REEL)
|
||||
AM_RANGE( 0x426000, 0x426fff ) AM_READ8(ss9601_reelram_hi_r, 0xffff )
|
||||
AM_RANGE( 0x427000, 0x4271ff ) AM_READWRITE8(ss9601_scrollram_0_hi_r, ss9601_scrollram_0_hi_w, 0xffff )
|
||||
|
||||
// write both (L1, byte_lo)
|
||||
AM_RANGE( 0x430000, 0x431fff ) AM_WRITE8(ss9601_videoram_1_hi_lo_w, 0xffff )
|
||||
AM_RANGE( 0x432000, 0x432fff ) AM_WRITE8(ss9601_videoram_1_hi_lo_w, 0xffff )
|
||||
AM_RANGE( 0x433000, 0x4331ff ) AM_WRITE8(ss9601_scrollram_1_hi_lo_w, 0xffff )
|
||||
// write both (L0 & REEL, byte_lo)
|
||||
AM_RANGE( 0x434000, 0x435fff ) AM_WRITE8(ss9601_videoram_0_hi_lo_w, 0xffff )
|
||||
AM_RANGE( 0x436000, 0x436fff ) AM_WRITE8(ss9601_reelram_hi_lo_w, 0xffff )
|
||||
AM_RANGE( 0x437000, 0x4371ff ) AM_WRITE8(ss9601_scrollram_0_hi_lo_w, 0xffff )
|
||||
|
||||
AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE(bishjan_sound_w )
|
||||
AM_RANGE( 0x600020, 0x600021 ) AM_WRITE8(ss9601_byte_lo2_w, 0xff00 )
|
||||
AM_RANGE( 0x600040, 0x600041 ) AM_WRITE8(ss9601_scrollctrl_w, 0xff00 )
|
||||
AM_RANGE( 0x600060, 0x600063 ) AM_WRITE8(hm86171_colorram_w, 0xffff )
|
||||
AM_RANGE( 0x600080, 0x600081 ) AM_WRITE8(ss9601_tilesize_w, 0xff00 )
|
||||
AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE8(ss9601_byte_lo_w, 0xff00 )
|
||||
|
||||
AM_RANGE( 0xa0001e, 0xa0001f ) AM_WRITE8(ss9601_disable_w, 0x00ff )
|
||||
AM_RANGE( 0xa00020, 0xa00025 ) AM_WRITE8(ss9601_scroll_w, 0xffff )
|
||||
|
||||
AM_RANGE( 0xc00000, 0xc00001 ) AM_READ_PORT("DSW")
|
||||
AM_RANGE( 0xc00002, 0xc00003 ) AM_READ_PORT("IN C")
|
||||
AM_RANGE( 0xc00004, 0xc00005 ) AM_READ_PORT("IN A & B")
|
||||
AM_RANGE( 0xc00006, 0xc00007 ) AM_READ(bishjan_serial_r )
|
||||
AM_RANGE( 0xc00008, 0xc00009 ) AM_WRITE(new2001_outputs_w ) AM_SHARE("outputs16")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
Express Card / Top Card
|
||||
***************************************************************************/
|
||||
@ -1404,30 +1491,16 @@ static INPUT_PORTS_START( bishjan )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
|
||||
|
||||
PORT_START("DSW") // SW1
|
||||
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Controls ) )
|
||||
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Controls ) ) PORT_DIPLOCATION("SW1:1")
|
||||
PORT_DIPSETTING( 0x0001, "Keyboard" )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( Joystick ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
|
||||
|
||||
PORT_START("JOY") // IN C
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("1 Player Start (Joy Mode)") // start (joy)
|
||||
@ -1454,7 +1527,7 @@ static INPUT_PORTS_START( bishjan )
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E ) // e
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) // i
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M ) // m
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // i2
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) // i2 (kan)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 ) // b2 (start)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
@ -1464,7 +1537,7 @@ static INPUT_PORTS_START( bishjan )
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F ) // f
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) // j
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N ) // n
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // l2
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) // l2 (reach)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) // c2 (bet)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
@ -1473,7 +1546,7 @@ static INPUT_PORTS_START( bishjan )
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C ) // c
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G ) // g
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) // k
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // k2
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) // k2 (chi)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // m2
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
@ -1483,7 +1556,7 @@ static INPUT_PORTS_START( bishjan )
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D ) // d
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H ) // h
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) // l
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // j2
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) // j2 (pon)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
@ -1500,6 +1573,54 @@ static INPUT_PORTS_START( bishjan )
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/***************************************************************************
|
||||
New 2001
|
||||
***************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( new2001 )
|
||||
PORT_START("DSW") // c00000
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
|
||||
PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
|
||||
// high byte related to sound communication
|
||||
|
||||
// JAMMA inputs:
|
||||
PORT_START("IN C") // c00002
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
// high byte not read
|
||||
|
||||
PORT_START("IN A & B") // c00004
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) // service mode (press twice for inputs)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Black")
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double Up / Help")
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Red")
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Take")
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet (Shoot)")
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
||||
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats (keep pressed during boot for service mode)
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/***************************************************************************
|
||||
Express Card / Top Card
|
||||
***************************************************************************/
|
||||
@ -2159,6 +2280,15 @@ static MACHINE_CONFIG_START( bishjan, subsino2_state )
|
||||
// SS9904?
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( new2001, bishjan )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP( new2001_map )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_SIZE( 640, 256 )
|
||||
MCFG_SCREEN_VISIBLE_AREA( 0, 640-1, 0, 256-16-1 )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************************************************
|
||||
Magic Train
|
||||
***************************************************************************/
|
||||
@ -2321,7 +2451,7 @@ Notes:
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( bishjan )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 ) // H8/3044
|
||||
ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
|
||||
ROM_LOAD( "1-v203.u21", 0x000000, 0x080000, CRC(1f891d48) SHA1(0b6a5aa8b781ba8fc133289790419aa8ea21c400) )
|
||||
|
||||
ROM_REGION( 0x400000, "tilemap", 0 )
|
||||
@ -2348,6 +2478,76 @@ DRIVER_INIT_MEMBER(subsino2_state,bishjan)
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
New 2001 (Italy, V2.00N)
|
||||
(C)2000 Subsino
|
||||
|
||||
CPU:
|
||||
Subsino SS9689 (TQFP100, U16, H8/3044)
|
||||
|
||||
Video:
|
||||
Subsino SS9601 (TQFP12, U23)
|
||||
Subsino SS9802 9948 (QFP100, U1)
|
||||
Subsino SS9803 (TQFP100, U29)
|
||||
|
||||
Sound:
|
||||
Subsino SS9904 (QFP100, U8)
|
||||
Subsino S-1 (DIP8, U11, audio OP AMP or DAC?)
|
||||
ST324 (U12, Quad Operational Amplifier)
|
||||
TDA1519 (U14, Audio Amplifier)
|
||||
Oscill. 44.100 (OSC48)
|
||||
|
||||
ROMs:
|
||||
27C020 (1)
|
||||
27C4001 (2)
|
||||
4x 27C2001 (3,4,5,6)
|
||||
|
||||
RAMs:
|
||||
2x HM62H256AK-15 (U30,U31)
|
||||
CXK58257AM-10L (U22)
|
||||
RAMDAC HM86171-80 (U35)
|
||||
|
||||
Others:
|
||||
28x2 JAMMA edge connector
|
||||
36x2 edge connector
|
||||
10x2 edge connector
|
||||
6 legs connector
|
||||
pushbutton (SW1)
|
||||
trimmer (volume)(VR1)
|
||||
8x2 switches DIP(DS1)
|
||||
3x 3 legs jumper (JP1,JP2,JP4)
|
||||
battery 3V
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( new2001 )
|
||||
ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
|
||||
ROM_LOAD( "new_2001_italy_1_v200n.u21", 0x00000, 0x40000, CRC(bacc8c01) SHA1(e820bc53fa297c3f543a1d65d47eb7b5ee85a6e2) )
|
||||
ROM_RELOAD( 0x40000, 0x40000 )
|
||||
|
||||
ROM_REGION( 0x100000, "tilemap", 0 )
|
||||
ROM_LOAD32_BYTE( "new_2001_italy_3_v200.0.u25", 0x00000, 0x40000, CRC(621452d6) SHA1(a9654bb98df16b13e8bbc6dd4dada2e63ee05dc9) )
|
||||
ROM_LOAD32_BYTE( "new_2001_italy_4_v200.1.u26", 0x00001, 0x40000, CRC(3073e2d2) SHA1(fb257c625e177d7aa12f1b176a3d1b93d5891cab) )
|
||||
ROM_LOAD32_BYTE( "new_2001_italy_5_v200.2.u27", 0x00002, 0x40000, CRC(d028696b) SHA1(ebb047e7cafaefbdeb479c3877aea4fce0c47ad2) )
|
||||
ROM_LOAD32_BYTE( "new_2001_italy_6_v200.3.u28", 0x00003, 0x40000, CRC(085599e3) SHA1(afd4bed369a96ba12037e6b8cf3a4cab84d12b21) )
|
||||
|
||||
ROM_REGION( 0x80000, "samples", 0 ) // SS9904?
|
||||
ROM_LOAD( "new_2001_italy_2_v200.u9", 0x00000, 0x80000, CRC(9d522d04) SHA1(68f314b077a62598f3de8ef753bdedc93d6eca71) )
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(subsino2_state,new2001)
|
||||
{
|
||||
UINT16 *rom = (UINT16*)memregion("maincpu")->base();
|
||||
|
||||
// patch serial protection test (ERROR 041920 otherwise)
|
||||
rom[0x19A2/2] = 0x4066;
|
||||
|
||||
// rts -> rte
|
||||
rom[0x45E8/2] = 0x5670;
|
||||
rom[0x471C/2] = 0x5670;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Express Card / Top Card
|
||||
(c) 1998 American Alpha
|
||||
|
||||
@ -2794,4 +2994,5 @@ GAME( 1998, saklove, 0, saklove, saklove, subsino2_state, saklove, RO
|
||||
GAME( 1999, xtrain, 0, xtrain, xtrain, subsino2_state, xtrain, ROT0, "Subsino", "X-Train (Ver. 1.3)", 0 )
|
||||
GAME( 1999, ptrain, 0, xtrain, xtrain, subsino2_state, ptrain, ROT0, "Subsino", "Panda Train (Novamatic 1.7)", MACHINE_IMPERFECT_GRAPHICS ) // missing scroll in race screens
|
||||
GAME( 1999, bishjan, 0, bishjan, bishjan, subsino2_state, bishjan, ROT0, "Subsino", "Bishou Jan (Japan, Ver. 2.03)", MACHINE_NO_SOUND )
|
||||
GAME( 2000, new2001, 0, new2001, new2001, subsino2_state, new2001, ROT0, "Subsino", "New 2001 (Italy, Ver. 2.00N)", MACHINE_NO_SOUND )
|
||||
GAME( 2006, xplan, 0, xplan, xplan, subsino2_state, xplan, ROT0, "Subsino", "X-Plan (Ver. 1.01)", 0 )
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
TODO:
|
||||
The entire lispcpu half (more like 3/4) of the machine
|
||||
Framebuffer 1152x864? (lives on the i/o card)
|
||||
Framebuffer 1152x864? 1150x900? (lives on the i/o card)
|
||||
I8274 MPSC (z80dart.cpp) x2
|
||||
1024x4bit SRAM AM2148-50 x6 @F22-F27
|
||||
2048x8bit SRAM @F7 and @G7
|
||||
@ -76,6 +76,13 @@ public:
|
||||
DECLARE_DRIVER_INIT(symbolics);
|
||||
DECLARE_READ16_MEMBER(buserror_r);
|
||||
DECLARE_READ16_MEMBER(fep_paddle_id_prom_r);
|
||||
//DECLARE_READ16_MEMBER(ram_parity_hack_r);
|
||||
//DECLARE_WRITE16_MEMBER(ram_parity_hack_w);
|
||||
//bool m_parity_error_has_occurred[0x20000];
|
||||
|
||||
// overrides
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
//protected:
|
||||
// virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
@ -95,7 +102,34 @@ READ16_MEMBER(symbolics_state::fep_paddle_id_prom_r) // bits 8 and 9 do somethin
|
||||
{
|
||||
return 0x0300;
|
||||
}
|
||||
/*
|
||||
READ16_MEMBER(symbolics_state::ram_parity_hack_r)
|
||||
{
|
||||
UINT16 *ram = (UINT16 *)(memregion("fepdram")->base());
|
||||
//m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE);
|
||||
m_maincpu->set_input_line_and_vector(M68K_IRQ_7, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||
if (!(m_parity_error_has_occurred[offset]))
|
||||
{
|
||||
//m_maincpu->set_input_line(M68K_IRQ_7, ASSERT_LINE);
|
||||
m_maincpu->set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||
m_parity_error_has_occurred[offset] = true;
|
||||
}
|
||||
ram += offset;
|
||||
return *ram;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(symbolics_state::ram_parity_hack_w)
|
||||
{
|
||||
UINT16 *ram = (UINT16 *)(memregion("fepdram")->base());
|
||||
m_maincpu->set_input_line_and_vector(M68K_IRQ_7, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||
if (!(m_parity_error_has_occurred[offset]))
|
||||
{
|
||||
m_maincpu->set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||
m_parity_error_has_occurred[offset] = true;
|
||||
}
|
||||
COMBINE_DATA(&ram[offset]);
|
||||
}
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
@ -192,9 +226,12 @@ static ADDRESS_MAP_START(m68k_mem, AS_PROGRAM, 16, symbolics_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
//AM_RANGE(0x000000, 0x01ffff) AM_ROM /* ROM lives here */
|
||||
AM_RANGE(0x000000, 0x00bfff) AM_ROM
|
||||
// 0x00c000-0x00ffff is open bus but decoded/auto-DTACKed, does not cause bus error
|
||||
AM_RANGE(0x010000, 0x01bfff) AM_ROM
|
||||
//AM_RANGE(0x020000, 0x03ffff) AM_RAM /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
|
||||
// 0x01c000-0x01ffff is open bus but decoded/auto-DTACKed, does not cause bus error
|
||||
AM_RANGE(0x020000, 0x03ffff) AM_RAM AM_REGION("fepdram", 0) /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
|
||||
//AM_RANGE(0x020000, 0x03ffff) AM_READWRITE(ram_parity_hack_r, ram_parity_hack_w)
|
||||
//AM_RANGE(0x020002, 0x03ffff) AM_RAM AM_REGION("fepdram", 0) /* Local FEP ram seems to be here? there are 18 mcm4164s on the pcb which probably map here, plus 2 parity bits? */
|
||||
// 2x AM9128-10PC 2048x8 SRAMs @F7 and @G7 map somewhere
|
||||
// 6x AM2148-50 1024x4bit SRAMs @F22-F27 map somewhere
|
||||
//AM_RANGE(0x040000, 0xffffff) AM_READ(buserror_r);
|
||||
@ -242,13 +279,27 @@ DRIVER_INIT_MEMBER(symbolics_state,symbolics)
|
||||
{
|
||||
}
|
||||
|
||||
/* start */
|
||||
void symbolics_state::machine_start()
|
||||
{
|
||||
//save_item(NAME(m_parity_error_has_occurred));
|
||||
}
|
||||
|
||||
/* reset */
|
||||
void symbolics_state::machine_reset()
|
||||
{
|
||||
/*for(int i=0; i < 0x20000; i++)
|
||||
m_parity_error_has_occurred[i] = false;
|
||||
*/
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( symbolics, symbolics_state )
|
||||
/* basic machine hardware */
|
||||
// per page 159 of http://bitsavers.trailing-edge.com/pdf/symbolics/3600_series/Lisp_Machine_Hardware_Memos.pdf:
|
||||
//XTALS: 16MHz @H11 (68k CPU clock)
|
||||
// 4.9152MHz @J5 (driving the two MPSCs serial clocks)
|
||||
// 66.67MHz @J10 (main lispcpu/system clock)
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) /* MC68000L8 @A27; clock is derived from the 16Mhz xtal @ H11 */
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) /* MC68000L8 @A27; clock is derived from the 16Mhz xtal @ H11, verified from patent */
|
||||
MCFG_CPU_PROGRAM_MAP(m68k_mem)
|
||||
MCFG_CPU_IO_MAP(m68k_io)
|
||||
|
||||
|
@ -100,7 +100,7 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
extern const char layout_dlair[];
|
||||
extern const internal_layout layout_dlair;
|
||||
|
||||
|
||||
|
||||
|
@ -85,9 +85,6 @@
|
||||
|
||||
/**************************** common *******************************/
|
||||
|
||||
/* layout */
|
||||
static const char layout_thomson[] = "thomson";
|
||||
|
||||
#define KEY(pos,name,key) \
|
||||
PORT_BIT ( 1<<(pos), IP_ACTIVE_LOW, IPT_KEYBOARD ) \
|
||||
PORT_NAME ( name ) \
|
||||
@ -630,7 +627,6 @@ static MACHINE_CONFIG_START( to7, thomson_state )
|
||||
MCFG_PALETTE_ADD ( "palette", 4097 ) /* 12-bit color + transparency */
|
||||
MCFG_PALETTE_INIT_OWNER(thomson_state, thom)
|
||||
MCFG_VIDEO_START_OVERRIDE( thomson_state, thom )
|
||||
MCFG_DEFAULT_LAYOUT( layout_thomson )
|
||||
|
||||
/* sound */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -139,7 +139,7 @@ void ti99_2_state::machine_reset()
|
||||
// Configure CPU to insert 1 wait state for each external memory access
|
||||
// by lowering the READY line on reset
|
||||
// TODO: Check with specs
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(CLEAR_LINE);
|
||||
static_cast<tms9995_device*>(machine().device("maincpu"))->ready_line(CLEAR_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(ti99_2_state::ti99_2_vblank_interrupt)
|
||||
|
@ -754,7 +754,7 @@ void ti99_8_state::console_ready_join(int id, int state)
|
||||
}
|
||||
|
||||
m_nready_prev = m_nready_combined;
|
||||
m_cpu->set_ready(m_nready_combined==0);
|
||||
m_cpu->ready_line(m_nready_combined==0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -950,11 +950,11 @@ MACHINE_START_MEMBER(ti99_8_state,ti99_8)
|
||||
|
||||
MACHINE_RESET_MEMBER(ti99_8_state, ti99_8)
|
||||
{
|
||||
m_cpu->set_hold(CLEAR_LINE);
|
||||
m_cpu->hold_line(CLEAR_LINE);
|
||||
|
||||
// Pulling down the line on RESET configures the CPU to insert one wait
|
||||
// state on external memory accesses
|
||||
m_cpu->set_ready(CLEAR_LINE);
|
||||
m_cpu->ready_line(CLEAR_LINE);
|
||||
|
||||
// But we assert the line here so that the system starts running
|
||||
m_nready_combined = 0;
|
||||
|
@ -1,6 +1,6 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap, Jonathan Gevaryahu, Sean Riddle
|
||||
// thanks-to:David Viens
|
||||
// thanks-to:David Viens, Kevin Horton
|
||||
/***************************************************************************
|
||||
|
||||
** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.cpp) **
|
||||
|
@ -261,7 +261,7 @@ void tutor_state::machine_reset()
|
||||
m_centronics_busy = 0;
|
||||
|
||||
// Enable auto wait states by lowering READY during reset
|
||||
m_maincpu->set_ready(CLEAR_LINE);
|
||||
m_maincpu->ready_line(CLEAR_LINE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -93,24 +93,6 @@ public:
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
||||
#define mfish_parent mfish_13
|
||||
#define czmon_parent czmon_13
|
||||
#define fcockt_parent fcockt_8
|
||||
#define lhaunt_parent lhaunt_6
|
||||
#define rollfr_parent rollfr_4
|
||||
#define garage_parent garage_5
|
||||
#define rclimb_parent rclimb_3
|
||||
#define sweetl_parent sweetl
|
||||
#define resdnt_parent resdnt_6
|
||||
#define island_parent island
|
||||
#define pirate_parent pirate_3
|
||||
#define island2_parent island2
|
||||
#define pirate2_parent pirate2
|
||||
#define keks_parent keks_2
|
||||
#define gnome_parent gnome_9
|
||||
#define sweetl2_parent sweetl2
|
||||
#define fcockt2_parent fcockt2
|
||||
#define crzmon2_parent crzmon2
|
||||
|
||||
MACHINE_CONFIG_EXTERN( igrosoft_gamble );
|
||||
MACHINE_CONFIG_EXTERN( rollfr );
|
||||
|
@ -242,7 +242,7 @@ public:
|
||||
|
||||
MACHINE_CONFIG_EXTERN( mw8080bw_root );
|
||||
MACHINE_CONFIG_EXTERN( invaders );
|
||||
extern const char layout_invaders[];
|
||||
extern const internal_layout layout_invaders;
|
||||
|
||||
/*----------- defined in audio/mw8080bw.c -----------*/
|
||||
|
||||
|
@ -89,6 +89,13 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(opwolf_adpcm_c_w);
|
||||
DECLARE_DRIVER_INIT(opwolf);
|
||||
DECLARE_DRIVER_INIT(opwolfb);
|
||||
DECLARE_DRIVER_INIT(opwolfp);
|
||||
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(opwolf_gun_x_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(opwolf_gun_y_r);
|
||||
|
||||
|
||||
virtual void machine_start() override;
|
||||
DECLARE_MACHINE_RESET(opwolf);
|
||||
UINT32 screen_update_opwolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
@ -321,54 +321,6 @@ private:
|
||||
static const USBStandardEndpointDescriptor enddesc02;
|
||||
};
|
||||
|
||||
class ohci_hlean2131qc_device: public ohci_function_device
|
||||
{
|
||||
public:
|
||||
ohci_hlean2131qc_device(running_machine &machine);
|
||||
int handle_nonstandard_request(int endpoint, USBSetupPacket *setup) override;
|
||||
int handle_bulk_pid(int endpoint, int pid, UINT8 *buffer, int size) override;
|
||||
void set_region_base(UINT8 *data);
|
||||
private:
|
||||
static const USBStandardDeviceDescriptor devdesc;
|
||||
static const USBStandardConfigurationDescriptor condesc;
|
||||
static const USBStandardInterfaceDescriptor intdesc;
|
||||
static const USBStandardEndpointDescriptor enddesc01;
|
||||
static const USBStandardEndpointDescriptor enddesc02;
|
||||
static const USBStandardEndpointDescriptor enddesc03;
|
||||
static const USBStandardEndpointDescriptor enddesc04;
|
||||
static const USBStandardEndpointDescriptor enddesc05;
|
||||
static const USBStandardEndpointDescriptor enddesc81;
|
||||
static const USBStandardEndpointDescriptor enddesc82;
|
||||
static const USBStandardEndpointDescriptor enddesc83;
|
||||
static const USBStandardEndpointDescriptor enddesc84;
|
||||
static const USBStandardEndpointDescriptor enddesc85;
|
||||
static const UINT8 strdesc0[];
|
||||
static const UINT8 strdesc1[];
|
||||
static const UINT8 strdesc2[];
|
||||
int maximum_send;
|
||||
UINT8 *region;
|
||||
};
|
||||
|
||||
class ohci_hlean2131sc_device : public ohci_function_device
|
||||
{
|
||||
public:
|
||||
ohci_hlean2131sc_device(running_machine &machine);
|
||||
int handle_nonstandard_request(int endpoint, USBSetupPacket *setup) override;
|
||||
private:
|
||||
static const USBStandardDeviceDescriptor devdesc;
|
||||
static const USBStandardConfigurationDescriptor condesc;
|
||||
static const USBStandardInterfaceDescriptor intdesc;
|
||||
static const USBStandardEndpointDescriptor enddesc01;
|
||||
static const USBStandardEndpointDescriptor enddesc02;
|
||||
static const USBStandardEndpointDescriptor enddesc03;
|
||||
static const USBStandardEndpointDescriptor enddesc81;
|
||||
static const USBStandardEndpointDescriptor enddesc82;
|
||||
static const USBStandardEndpointDescriptor enddesc83;
|
||||
static const UINT8 strdesc0[];
|
||||
static const UINT8 strdesc1[];
|
||||
static const UINT8 strdesc2[];
|
||||
};
|
||||
|
||||
class xbox_base_state : public driver_device
|
||||
{
|
||||
public:
|
||||
|
@ -18,7 +18,7 @@
|
||||
#define LOG_PCI
|
||||
//#define LOG_AUDIO
|
||||
//#define LOG_OHCI
|
||||
//#define USB_ENABLED
|
||||
#define USB_HACK_ENABLED
|
||||
|
||||
static void dump_string_command(running_machine &machine, int ref, int params, const char **param)
|
||||
{
|
||||
@ -534,7 +534,7 @@ READ32_MEMBER(xbox_base_state::usbctrl_r)
|
||||
#endif
|
||||
ret=ohcist.hc_regs[offset];
|
||||
if (offset == 0) { /* hacks needed until usb (and jvs) is implemented */
|
||||
#ifndef USB_ENABLED
|
||||
#ifndef USB_HACK_ENABLED
|
||||
hack_usb();
|
||||
#endif
|
||||
}
|
||||
@ -543,9 +543,7 @@ READ32_MEMBER(xbox_base_state::usbctrl_r)
|
||||
|
||||
WRITE32_MEMBER(xbox_base_state::usbctrl_w)
|
||||
{
|
||||
#ifdef USB_ENABLED
|
||||
UINT32 old = ohcist.hc_regs[offset];
|
||||
#endif
|
||||
|
||||
#ifdef LOG_OHCI
|
||||
if (offset >= 0x54 / 4)
|
||||
@ -553,7 +551,6 @@ WRITE32_MEMBER(xbox_base_state::usbctrl_w)
|
||||
else
|
||||
logerror("usb controller 0 register %s write %08X\n", usbregnames[offset], data);
|
||||
#endif
|
||||
#ifdef USB_ENABLED
|
||||
if (offset == HcRhStatus) {
|
||||
if (data & 0x80000000)
|
||||
ohcist.hc_regs[HcRhStatus] &= ~0x8000;
|
||||
@ -623,7 +620,6 @@ WRITE32_MEMBER(xbox_base_state::usbctrl_w)
|
||||
usb_ohci_interrupts();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
ohcist.hc_regs[offset] = data;
|
||||
}
|
||||
|
||||
@ -1457,132 +1453,6 @@ int ohci_game_controller_device::handle_nonstandard_request(int endpoint, USBSet
|
||||
return -1;
|
||||
}
|
||||
|
||||
//ic10
|
||||
const USBStandardDeviceDescriptor ohci_hlean2131qc_device::devdesc = { 0x12,0x01,0x0100,0x60,0x00,0x00,0x40,0x0CA3,0x0002,0x0108,0x01,0x02,0x00,0x01 };
|
||||
const USBStandardConfigurationDescriptor ohci_hlean2131qc_device::condesc = { 0x09,0x02,0x0058,0x01,0x01,0x00,0x80,0x96 };
|
||||
const USBStandardInterfaceDescriptor ohci_hlean2131qc_device::intdesc = { 0x09,0x04,0x00,0x00,0x0A,0xFF,0x00,0x00,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc04 = { 0x07,0x05,0x04,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc05 = { 0x07,0x05,0x05,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc84 = { 0x07,0x05,0x84,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc85 = { 0x07,0x05,0x85,0x02,0x0040,0x00 };
|
||||
const UINT8 ohci_hlean2131qc_device::strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
const UINT8 ohci_hlean2131qc_device::strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
const UINT8 ohci_hlean2131qc_device::strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x03,0xFF,0x0B };
|
||||
|
||||
ohci_hlean2131qc_device::ohci_hlean2131qc_device(running_machine &machine) :
|
||||
ohci_function_device(machine)
|
||||
{
|
||||
add_device_descriptor(devdesc);
|
||||
add_configuration_descriptor(condesc);
|
||||
add_interface_descriptor(intdesc);
|
||||
// it is important to add the endpoints in the same order they are found in the device firmware
|
||||
add_endpoint_descriptor(enddesc01);
|
||||
add_endpoint_descriptor(enddesc02);
|
||||
add_endpoint_descriptor(enddesc03);
|
||||
add_endpoint_descriptor(enddesc04);
|
||||
add_endpoint_descriptor(enddesc05);
|
||||
add_endpoint_descriptor(enddesc81);
|
||||
add_endpoint_descriptor(enddesc82);
|
||||
add_endpoint_descriptor(enddesc83);
|
||||
add_endpoint_descriptor(enddesc84);
|
||||
add_endpoint_descriptor(enddesc85);
|
||||
add_string_descriptor(strdesc0);
|
||||
add_string_descriptor(strdesc1);
|
||||
add_string_descriptor(strdesc2);
|
||||
maximum_send = 0;
|
||||
region = nullptr;
|
||||
}
|
||||
|
||||
void ohci_hlean2131qc_device::set_region_base(UINT8 *data)
|
||||
{
|
||||
region = data;
|
||||
}
|
||||
|
||||
int ohci_hlean2131qc_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
|
||||
{
|
||||
if (endpoint != 0)
|
||||
return -1;
|
||||
printf("Control request: %x %x %x %x %x %x %x\n\r", endpoint, endpoints[endpoint].controldirection, setup->bmRequestType, setup->bRequest, setup->wValue, setup->wIndex, setup->wLength);
|
||||
//if ((setup->bRequest == 0x18) && (setup->wValue == 0x8000))
|
||||
if (setup->bRequest == 0x17)
|
||||
{
|
||||
maximum_send = setup->wIndex;
|
||||
if (maximum_send > 0x40)
|
||||
maximum_send = 0x40;
|
||||
endpoints[2].remain = maximum_send;
|
||||
endpoints[2].position = region + 0x2000 + setup->wValue;
|
||||
}
|
||||
for (int n = 0; n < setup->wLength; n++)
|
||||
endpoints[endpoint].buffer[n] = 0xa0 ^ n;
|
||||
endpoints[endpoint].buffer[0] = 0;
|
||||
endpoints[endpoint].position = endpoints[endpoint].buffer;
|
||||
endpoints[endpoint].remain = setup->wLength;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ohci_hlean2131qc_device::handle_bulk_pid(int endpoint, int pid, UINT8 *buffer, int size)
|
||||
{
|
||||
printf("Bulk request: %x %d %x\n\r", endpoint, pid, size);
|
||||
if ((endpoint == 2) && (pid == InPid))
|
||||
{
|
||||
if (size > endpoints[2].remain)
|
||||
size = endpoints[2].remain;
|
||||
memcpy(buffer, endpoints[2].position, size);
|
||||
endpoints[2].position = endpoints[3].position + size;
|
||||
endpoints[2].remain = endpoints[3].remain - size;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
//pc20
|
||||
const USBStandardDeviceDescriptor ohci_hlean2131sc_device::devdesc = { 0x12,0x01,0x0100,0x60,0x01,0x00,0x40,0x0CA3,0x0003,0x0110,0x01,0x02,0x00,0x01 };
|
||||
const USBStandardConfigurationDescriptor ohci_hlean2131sc_device::condesc = { 0x09,0x02,0x003C,0x01,0x01,0x00,0x80,0x96 };
|
||||
const USBStandardInterfaceDescriptor ohci_hlean2131sc_device::intdesc = { 0x09,0x04,0x00,0x00,0x06,0xFF,0x00,0x00,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
const USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
const UINT8 ohci_hlean2131sc_device::strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
const UINT8 ohci_hlean2131sc_device::strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
const UINT8 ohci_hlean2131sc_device::strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x00,0x44,0x00 };
|
||||
|
||||
ohci_hlean2131sc_device::ohci_hlean2131sc_device(running_machine &machine) :
|
||||
ohci_function_device(machine)
|
||||
{
|
||||
add_device_descriptor(devdesc);
|
||||
add_configuration_descriptor(condesc);
|
||||
add_interface_descriptor(intdesc);
|
||||
// it is important to add the endpoints in the same order they are found in the device firmware
|
||||
add_endpoint_descriptor(enddesc01);
|
||||
add_endpoint_descriptor(enddesc02);
|
||||
add_endpoint_descriptor(enddesc03);
|
||||
add_endpoint_descriptor(enddesc81);
|
||||
add_endpoint_descriptor(enddesc82);
|
||||
add_endpoint_descriptor(enddesc83);
|
||||
add_string_descriptor(strdesc0);
|
||||
add_string_descriptor(strdesc1);
|
||||
add_string_descriptor(strdesc2);
|
||||
}
|
||||
|
||||
int ohci_hlean2131sc_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
|
||||
{
|
||||
if (endpoint != 0)
|
||||
return -1;
|
||||
for (int n = 0; n < setup->wLength; n++)
|
||||
endpoints[endpoint].buffer[n] = 0xa0 ^ n;
|
||||
endpoints[endpoint].position = endpoints[endpoint].buffer;
|
||||
endpoints[endpoint].remain = setup->wLength;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void xbox_base_state::usb_ohci_interrupts()
|
||||
{
|
||||
if (((ohcist.hc_regs[HcInterruptStatus] & ohcist.hc_regs[HcInterruptEnable]) != 0) && ((ohcist.hc_regs[HcInterruptEnable] & MasterInterruptEnable) != 0))
|
||||
@ -2235,11 +2105,7 @@ ADDRESS_MAP_END
|
||||
|
||||
void xbox_base_state::machine_start()
|
||||
{
|
||||
#ifdef USB_ENABLED
|
||||
//ohci_game_controller_device *usb_device;
|
||||
ohci_hlean2131qc_device *usb_device;
|
||||
//ohci_hlean2131sc_device *usb_device;
|
||||
#endif
|
||||
|
||||
nvidia_nv2a = std::make_unique<nv2a_renderer>(machine());
|
||||
memset(pic16lc_buffer, 0, sizeof(pic16lc_buffer));
|
||||
@ -2269,22 +2135,19 @@ void xbox_base_state::machine_start()
|
||||
pic16lc_buffer[0x1d] = 0x0d;
|
||||
pic16lc_buffer[0x1e] = 0x0e;
|
||||
pic16lc_buffer[0x1f] = 0x0f;
|
||||
// usb
|
||||
ohcist.hc_regs[HcRevision] = 0x10;
|
||||
ohcist.hc_regs[HcFmInterval] = 0x2edf;
|
||||
ohcist.hc_regs[HcLSThreshold] = 0x628;
|
||||
ohcist.hc_regs[HcRhDescriptorA] = 4;
|
||||
#ifdef USB_ENABLED
|
||||
ohcist.interruptbulkratio = 1;
|
||||
ohcist.writebackdonehadcounter = 7;
|
||||
ohcist.space = &m_maincpu->space();
|
||||
ohcist.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xbox_base_state::usb_ohci_timer), this), (void *)"USB OHCI Timer");
|
||||
ohcist.timer->enable(false);
|
||||
//usb_device = new ohci_game_controller_device(machine());
|
||||
usb_device = new ohci_hlean2131qc_device(machine());
|
||||
usb_device->set_region_base(memregion(":others")->base()); // temporary, should be in chihiro
|
||||
//usb_device = new ohci_hlean2131sc_device(machine());
|
||||
usb_ohci_plug(1, usb_device); // test connect
|
||||
#endif
|
||||
//usb_ohci_plug(3, usb_device); // connect top root hub port 3, chihiro needs to use 1 and 2
|
||||
// super-io
|
||||
memset(&superiost, 0, sizeof(superiost));
|
||||
superiost.configuration_mode = false;
|
||||
superiost.registers[0][0x26] = 0x2e; // Configuration port address byte 0
|
||||
|
@ -28575,6 +28575,7 @@ opwolfa // B20 (c) 1987 Taito Corporation Japan (World)
|
||||
opwolfb // bootleg
|
||||
opwolfj // B20 (c) 1987 Taito Corporation (Japan)
|
||||
opwolfu // B20 (c) 1987 Taito America Corporation (US)
|
||||
opwolfp // prototype?
|
||||
|
||||
@source:orao.cpp
|
||||
orao //
|
||||
@ -32949,9 +32950,10 @@ streetsmw // (c) 1989
|
||||
|
||||
@source:snookr10.cpp
|
||||
apple10 // (c) 1998 Sandii'
|
||||
crystalc // 199? unknown
|
||||
snookr10 // (c) 1998 Sandii'
|
||||
tenballs // 1997 unknown
|
||||
crystalc // 1998 JCD srl
|
||||
crystalca // 1998 JCD srl
|
||||
|
||||
@source:snowbros.cpp
|
||||
3in1semi // (c) 1998 SemiCom
|
||||
@ -33540,6 +33542,7 @@ victor6b // (c) 1995 Subsino (Alpha license)
|
||||
bishjan // (c) 1999 Subsino
|
||||
expcard // (c) 1998 American Alpha
|
||||
mtrain // (c) 1996 Subsino
|
||||
new2001 // (c) 2000 Subsino
|
||||
ptrain // (c) 1999 Subsino
|
||||
saklove // (c) 1998 Subsino
|
||||
wtrnymph // (c) 1996 Subsino
|
||||
|
@ -435,6 +435,14 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void exit() override
|
||||
{
|
||||
// unsubscribe for events
|
||||
sdl_event_manager::instance().unsubscribe(this);
|
||||
|
||||
input_module_base::exit();
|
||||
}
|
||||
|
||||
void before_poll(running_machine& machine) override
|
||||
{
|
||||
// Tell the event manager to process events and push them to the devices
|
||||
|
@ -96,12 +96,16 @@ public:
|
||||
std::lock_guard<std::mutex> scope_lock(m_lock);
|
||||
|
||||
// Loop over the entries and find ones that match our subscriber
|
||||
// remove those that match
|
||||
for (auto iter = m_subscription_index.begin(); iter != m_subscription_index.end(); iter++)
|
||||
std::vector<typename std::unordered_multimap<int, TSubscriber*>::iterator> remove;
|
||||
for (auto iter = m_subscription_index.begin(); iter != m_subscription_index.end(); ++iter)
|
||||
{
|
||||
if (iter->second == subscriber)
|
||||
m_subscription_index.erase(iter);
|
||||
remove.push_back(iter);
|
||||
}
|
||||
|
||||
// remove those that matched
|
||||
for (int i = 0; i < remove.size(); i++)
|
||||
m_subscription_index.erase(remove[i]);
|
||||
}
|
||||
|
||||
virtual void process_events(running_machine &machine) = 0;
|
||||
|