From 2255a1bfab4c19de7ff080de0922c62199a071f7 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 13 Dec 2024 19:34:22 -0500 Subject: [PATCH 01/40] hd6305y2: Add special function registers to internal map --- src/devices/cpu/m6805/hd6305.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/devices/cpu/m6805/hd6305.cpp b/src/devices/cpu/m6805/hd6305.cpp index b81873be608..2a65ea1cd46 100644 --- a/src/devices/cpu/m6805/hd6305.cpp +++ b/src/devices/cpu/m6805/hd6305.cpp @@ -473,7 +473,20 @@ hd6305y2_device::hd6305y2_device(const machine_config &mconfig, const char *tag, void hd6305y2_device::internal_map(address_map &map) { - // TODO: ports, timer, SCI + map(0x0000, 0x0000).rw(FUNC(hd6305y2_device::port_r<0>), FUNC(hd6305y2_device::port_w<0>)); + map(0x0001, 0x0001).rw(FUNC(hd6305y2_device::port_r<1>), FUNC(hd6305y2_device::port_w<1>)); + map(0x0002, 0x0002).rw(FUNC(hd6305y2_device::port_r<2>), FUNC(hd6305y2_device::port_w<2>)); + map(0x0003, 0x0003).r(FUNC(hd6305y2_device::port_r<3>)); + map(0x0004, 0x0004).w(FUNC(hd6305y2_device::port_ddr_w<0>)); + map(0x0005, 0x0005).w(FUNC(hd6305y2_device::port_ddr_w<1>)); + map(0x0006, 0x0006).w(FUNC(hd6305y2_device::port_ddr_w<2>)); + map(0x0008, 0x0008).rw(FUNC(hd6305y2_device::timer_data_r), FUNC(hd6305y2_device::timer_data_w)); + map(0x0009, 0x0009).rw(FUNC(hd6305y2_device::timer_ctrl_r), FUNC(hd6305y2_device::timer_ctrl_w)); + map(0x000a, 0x000a).rw(FUNC(hd6305y2_device::misc_r), FUNC(hd6305y2_device::misc_w)); + map(0x0010, 0x0010).rw(FUNC(hd6305y2_device::sci_ctrl_r), FUNC(hd6305y2_device::sci_ctrl_w)); + map(0x0011, 0x0011).rw(FUNC(hd6305y2_device::sci_ssr_r), FUNC(hd6305y2_device::sci_ssr_w)); + map(0x0012, 0x0012).rw(FUNC(hd6305y2_device::sci_data_r), FUNC(hd6305y2_device::sci_data_w)); + // All other page zero addresses up to 0x001f are reserved map(0x0040, 0x013f).ram(); } From 9fdfea014e2b685ddf2aa66eba732f600bed42ea Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 10:42:07 +0100 Subject: [PATCH 02/40] hd6305: update header file after prev commit --- src/devices/cpu/m6805/hd6305.cpp | 1 - src/devices/cpu/m6805/hd6305.h | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/devices/cpu/m6805/hd6305.cpp b/src/devices/cpu/m6805/hd6305.cpp index 2a65ea1cd46..2cc866c7494 100644 --- a/src/devices/cpu/m6805/hd6305.cpp +++ b/src/devices/cpu/m6805/hd6305.cpp @@ -7,7 +7,6 @@ Hitachi HD6305 series TODO: - HD6305xx has a 14-bit address space, not 13 (memory_access in m6805.h) - add unimplemented opcodes: STOP, WAIT, DAA, and HD63705Z0 also has MUL -- add HD6305Y2 peripherals (nothing to test it with?) - add HD63705Z0 peripherals */ diff --git a/src/devices/cpu/m6805/hd6305.h b/src/devices/cpu/m6805/hd6305.h index 8847d4b2cb7..2d7cc46bfc5 100644 --- a/src/devices/cpu/m6805/hd6305.h +++ b/src/devices/cpu/m6805/hd6305.h @@ -161,6 +161,14 @@ class hd6305y2_device : public hd6305_device // construction/destruction hd6305y2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + auto read_porta() { return m_read_port [0].bind(); } + auto write_porta() { return m_write_port[0].bind(); } + auto read_portb() { return m_read_port [1].bind(); } + auto write_portb() { return m_write_port[1].bind(); } + auto read_portc() { return m_read_port [2].bind(); } + auto write_portc() { return m_write_port[2].bind(); } + auto read_portd() { return m_read_port [3].bind(); } + private: void internal_map(address_map &map) ATTR_COLD; }; From 33305ee4c2e62660180ac2c9768db41b307f2459 Mon Sep 17 00:00:00 2001 From: wilbertpol Date: Sat, 14 Dec 2024 13:49:29 +0000 Subject: [PATCH 03/40] cpu/upd177x/upd177xd.cpp: Some small fixes (#13083) - Fix disassembly of MVI in the 0x4000 range. - Rename mdi/mdo to md1/md0. - Add STEP_OVER/STEP_OUT to call and ret instrucitons. --- src/devices/cpu/upd177x/upd177xd.cpp | 22 +++++++++++----------- src/devices/cpu/upd177x/upd177xd.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/devices/cpu/upd177x/upd177xd.cpp b/src/devices/cpu/upd177x/upd177xd.cpp index d3ec79e84c7..4ebb647feb9 100644 --- a/src/devices/cpu/upd177x/upd177xd.cpp +++ b/src/devices/cpu/upd177x/upd177xd.cpp @@ -16,9 +16,9 @@ std::string upd177x_disassembler::reg4(u16 opcode) return util::string_format("r%02x", (opcode >> 4) & 0x1f); } -std::string upd177x_disassembler::reg9(u16 opcode) +std::string upd177x_disassembler::reg8(u16 opcode) { - return util::string_format("r%02x", (opcode >> 9) & 0x1f); + return util::string_format("r%02x", (opcode >> 8) & 0x1f); } std::string upd177x_disassembler::imm8(u16 opcode) @@ -72,12 +72,12 @@ std::string upd177x_disassembler::abs4_4(u16 opcode, u16 pc) #define P std::ostream &stream, u16 opcode, u16 pc const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { - { 0x4000, 0xe000, [](P) -> u32 { util::stream_format(stream, "mvi %s, %s", reg9(opcode), imm8(opcode)); return 1; } }, + { 0x4000, 0xe000, [](P) -> u32 { util::stream_format(stream, "mvi %s, %s", reg8(opcode), imm8(opcode)); return 1; } }, { 0x3200, 0xff00, [](P) -> u32 { util::stream_format(stream, "mvi (h), %s", imm8(opcode)); return 1; } }, { 0x3400, 0xff00, [](P) -> u32 { util::stream_format(stream, "mvi a, %s", imm8(opcode)); return 1; } }, { 0x3800, 0xffc0, [](P) -> u32 { util::stream_format(stream, "mvi h, %s", imm6(opcode)); return 1; } }, - { 0x3100, 0xff1f, [](P) -> u32 { util::stream_format(stream, "mvi mdi, %s", imm3_5(opcode)); return 1; } }, - { 0x2100, 0xff80, [](P) -> u32 { util::stream_format(stream, "mvi mdo, %s", imm7(opcode)); return 1; } }, + { 0x3100, 0xff1f, [](P) -> u32 { util::stream_format(stream, "mvi md1, %s", imm3_5(opcode)); return 1; } }, + { 0x2100, 0xff80, [](P) -> u32 { util::stream_format(stream, "mvi md0, %s", imm7(opcode)); return 1; } }, { 0x1201, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "mov %s, a", reg4(opcode)); return 1; } }, { 0x1005, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "mov a, %s", reg4(opcode)); return 1; } }, @@ -105,18 +105,18 @@ const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { { 0x1801, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tblo a, (%s)", reg4(opcode)); return 1; } }, { 0x1802, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tblo x, (%s)", reg4(opcode)); return 1; } }, { 0x1804, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tblo y, (%s)", reg4(opcode)); return 1; } }, - { 0x1808, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "callo (%s)", reg4(opcode)); return 1; } }, + { 0x1808, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "callo (%s)", reg4(opcode)); return 1 | STEP_OVER; } }, { 0x6000, 0xf000, [](P) -> u32 { util::stream_format(stream, "jmp %s", abs12(opcode, pc)); return 1; } }, { 0x2000, 0xff0f, [](P) -> u32 { util::stream_format(stream, "jmp %s", abs4_4(opcode, pc)); return 1; } }, { 0x0501, 0xffff, [](P) -> u32 { util::stream_format(stream, "jmpa"); return 1; } }, { 0x2400, 0xff00, [](P) -> u32 { util::stream_format(stream, "jmpfz %s", abs8(opcode, pc)); return 1; } }, - { 0x7000, 0xf000, [](P) -> u32 { util::stream_format(stream, "call %s", abs12(opcode, pc)); return 1; } }, + { 0x7000, 0xf000, [](P) -> u32 { util::stream_format(stream, "call %s", abs12(opcode, pc)); return 1 | STEP_OVER; } }, - { 0x0800, 0xffff, [](P) -> u32 { util::stream_format(stream, "ret"); return 1; } }, - { 0x0801, 0xffff, [](P) -> u32 { util::stream_format(stream, "rets"); return 1; } }, - { 0x090f, 0xffff, [](P) -> u32 { util::stream_format(stream, "reti"); return 1; } }, + { 0x0800, 0xffff, [](P) -> u32 { util::stream_format(stream, "ret"); return 1 | STEP_OUT; } }, + { 0x0801, 0xffff, [](P) -> u32 { util::stream_format(stream, "rets"); return 1 | STEP_OUT; } }, + { 0x090f, 0xffff, [](P) -> u32 { util::stream_format(stream, "reti"); return 1 | STEP_OUT; } }, { 0x0005, 0xffff, [](P) -> u32 { util::stream_format(stream, "stf"); return 1; } }, { 0x0602, 0xffff, [](P) -> u32 { util::stream_format(stream, "off"); return 1; } }, @@ -279,7 +279,7 @@ const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { { 0x1a01, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tbli a, (%s)", reg4(opcode)); return 1; } }, { 0x1a02, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tbli x, (%s)", reg4(opcode)); return 1; } }, { 0x1a04, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "tbli y, (%s)", reg4(opcode)); return 1; } }, - { 0x1a08, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "calli (%s)", reg4(opcode)); return 1; } }, + { 0x1a08, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "calli (%s)", reg4(opcode)); return 1 | STEP_OVER; } }, { 0x0101, 0xffff, [](P) -> u32 { util::stream_format(stream, "mon"); return 1; } }, diff --git a/src/devices/cpu/upd177x/upd177xd.h b/src/devices/cpu/upd177x/upd177xd.h index 7cefe63aec0..75895fc25be 100644 --- a/src/devices/cpu/upd177x/upd177xd.h +++ b/src/devices/cpu/upd177x/upd177xd.h @@ -27,7 +27,7 @@ class upd177x_disassembler : public util::disasm_interface static const instruction instructions[]; static std::string reg4(u16 opcode); - static std::string reg9(u16 opcode); + static std::string reg8(u16 opcode); static std::string imm8(u16 opcode); static std::string imm7(u16 opcode); static std::string imm6(u16 opcode); From b7853755e48bf28a33afdf50942e124ae19d0015 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 12:52:14 +0100 Subject: [PATCH 04/40] m6502: add g65sc02 subtypes --- src/devices/bus/bbc/internal/stl4m32.cpp | 2 +- src/devices/bus/bbc/tube/tube_6502.cpp | 4 ++-- src/devices/bus/c64/fcc.cpp | 2 +- src/devices/bus/c64/fcc.h | 2 +- src/devices/bus/isa/finalchs.cpp | 2 +- src/devices/bus/isa/finalchs.h | 2 +- src/devices/cpu/m6502/m65sc02.cpp | 28 +++++++++++++++++++--- src/devices/cpu/m6502/m65sc02.h | 30 +++++++++++++++++++----- src/mame/acorn/bbc.cpp | 2 +- src/mame/atari/lynx.cpp | 2 +- src/mame/atari/lynx_m.cpp | 4 ++-- src/mame/commodore/clcd.cpp | 12 ++++++---- src/mame/fidelity/excel.cpp | 2 +- src/mame/funworld/funworld.cpp | 4 ++-- src/mame/funworld/snookr10.cpp | 2 +- src/mame/hegenerglaser/mondial.cpp | 2 +- src/mame/hegenerglaser/mondial2.cpp | 2 +- src/mame/hegenerglaser/risc.cpp | 2 +- src/mame/hegenerglaser/smondial.cpp | 2 +- src/mame/novag/const.cpp | 2 +- src/mame/skeleton/textelcomp.cpp | 4 ++-- 21 files changed, 78 insertions(+), 36 deletions(-) diff --git a/src/devices/bus/bbc/internal/stl4m32.cpp b/src/devices/bus/bbc/internal/stl4m32.cpp index c875f69b0a4..c6d8903a91a 100644 --- a/src/devices/bus/bbc/internal/stl4m32.cpp +++ b/src/devices/bus/bbc/internal/stl4m32.cpp @@ -59,7 +59,7 @@ ROM_END void bbc_stl4m32_device::device_add_mconfig(machine_config &config) { - //M65SC02(config.replace(), m_maincpu, DERIVED_CLOCK(1, 4)); + //G65SC02(config.replace(), m_maincpu, DERIVED_CLOCK(1, 4)); /* 5 x 32K rom sockets */ BBC_ROMSLOT32(config, m_rom[4], bbc_rom_devices, nullptr); diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index 8cb22337e40..1334a8506e9 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -130,7 +130,7 @@ ROM_END void bbc_tube_6502_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 12_MHz_XTAL / 4); // G65SC02 + G65SC02(config, m_maincpu, 12_MHz_XTAL / 4); // G65SC02 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem); TUBE(config, m_ula); @@ -155,7 +155,7 @@ void bbc_tube_6502e_device::device_add_mconfig(machine_config &config) { bbc_tube_6502_device::device_add_mconfig(config); - M65SC02(config.replace(), m_maincpu, 12_MHz_XTAL / 4); // G65SC02 + G65SC02(config.replace(), m_maincpu, 12_MHz_XTAL / 4); // G65SC02 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502e_device::tube_6502e_mem); m_ram->set_default_size("256K").set_default_value(0); diff --git a/src/devices/bus/c64/fcc.cpp b/src/devices/bus/c64/fcc.cpp index 484716a0056..96b0c172c12 100644 --- a/src/devices/bus/c64/fcc.cpp +++ b/src/devices/bus/c64/fcc.cpp @@ -42,7 +42,7 @@ void c64_final_chesscard_device::c64_fcc_map(address_map &map) void c64_final_chesscard_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 5_MHz_XTAL); + G65SC02(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &c64_final_chesscard_device::c64_fcc_map); GENERIC_LATCH_8(config, m_mainlatch).data_pending_callback().set(FUNC(c64_final_chesscard_device::mainlatch_int)); diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h index dffa04c29a0..453603d96f2 100644 --- a/src/devices/bus/c64/fcc.h +++ b/src/devices/bus/c64/fcc.h @@ -48,7 +48,7 @@ class c64_final_chesscard_device : public device_t, virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_mainlatch; required_device m_sublatch; diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp index 2ee3b169371..6fb49bbf5c6 100644 --- a/src/devices/bus/isa/finalchs.cpp +++ b/src/devices/bus/isa/finalchs.cpp @@ -123,7 +123,7 @@ ioport_constructor isa8_finalchs_device::device_input_ports() const void isa8_finalchs_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 5_MHz_XTAL); + G65SC02(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &isa8_finalchs_device::finalchs_mem); GENERIC_LATCH_8(config, m_mainlatch); diff --git a/src/devices/bus/isa/finalchs.h b/src/devices/bus/isa/finalchs.h index b7977b901e1..ba515d59b7d 100644 --- a/src/devices/bus/isa/finalchs.h +++ b/src/devices/bus/isa/finalchs.h @@ -35,7 +35,7 @@ class isa8_finalchs_device : virtual ioport_constructor device_input_ports() const override ATTR_COLD; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_mainlatch; required_device m_sublatch; diff --git a/src/devices/cpu/m6502/m65sc02.cpp b/src/devices/cpu/m6502/m65sc02.cpp index b9245b5fe13..4bea3ff8113 100644 --- a/src/devices/cpu/m6502/m65sc02.cpp +++ b/src/devices/cpu/m6502/m65sc02.cpp @@ -6,14 +6,36 @@ Rockwell-class 65c02 with internal static registers, making clock stoppable? + TODO: + - none of the CPU type differences are currently emulated (eg. BE pin, ML pin), + are any of them meaningful to MAME? + ***************************************************************************/ #include "emu.h" #include "m65sc02.h" -DEFINE_DEVICE_TYPE(M65SC02, m65sc02_device, "m65sc02", "GTE G65SC02") +DEFINE_DEVICE_TYPE(G65SC02, g65sc02_device, "g65sc02", "GTE G65SC02") +DEFINE_DEVICE_TYPE(G65SC12, g65sc12_device, "g65sc12", "GTE G65SC12") +DEFINE_DEVICE_TYPE(G65SC102, g65sc102_device, "g65sc102", "GTE G65SC102") +DEFINE_DEVICE_TYPE(G65SC112, g65sc112_device, "g65sc112", "GTE G65SC112") + +g65sc02_device::g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC02, tag, owner, clock) +{ +} + +g65sc12_device::g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC12, tag, owner, clock) +{ +} + +g65sc102_device::g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC102, tag, owner, clock) +{ +} -m65sc02_device::m65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, M65SC02, tag, owner, clock) +g65sc112_device::g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC112, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/m65sc02.h b/src/devices/cpu/m6502/m65sc02.h index 686411c0b22..147709ea265 100644 --- a/src/devices/cpu/m6502/m65sc02.h +++ b/src/devices/cpu/m6502/m65sc02.h @@ -13,17 +13,35 @@ #include "r65c02.h" -class m65sc02_device : public r65c02_device { +class g65sc02_device : public r65c02_device { public: - m65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc12_device : public r65c02_device { +public: + g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc102_device : public r65c02_device { +public: + g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc112_device : public r65c02_device { +public: + g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; enum { - M65SC02_IRQ_LINE = m6502_device::IRQ_LINE, - M65SC02_NMI_LINE = m6502_device::NMI_LINE, - M65SC02_SET_OVERFLOW = m6502_device::V_LINE + G65SC02_IRQ_LINE = m6502_device::IRQ_LINE, + G65SC02_NMI_LINE = m6502_device::NMI_LINE, + G65SC02_SET_OVERFLOW = m6502_device::V_LINE }; -DECLARE_DEVICE_TYPE(M65SC02, m65sc02_device) +DECLARE_DEVICE_TYPE(G65SC02, g65sc02_device) +DECLARE_DEVICE_TYPE(G65SC12, g65sc12_device) +DECLARE_DEVICE_TYPE(G65SC102, g65sc102_device) +DECLARE_DEVICE_TYPE(G65SC112, g65sc112_device) #endif // MAME_CPU_M6502_M65SC02_H diff --git a/src/mame/acorn/bbc.cpp b/src/mame/acorn/bbc.cpp index 59c81910d97..55e3dd153c2 100644 --- a/src/mame/acorn/bbc.cpp +++ b/src/mame/acorn/bbc.cpp @@ -1624,7 +1624,7 @@ void bbcbp_state::econx25(machine_config &config) void bbcm_state::bbcm(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, 16_MHz_XTAL / 8); + G65SC12(config, m_maincpu, 16_MHz_XTAL / 8); m_maincpu->set_addrmap(AS_PROGRAM, &bbcm_state::bbcm_mem); m_maincpu->set_addrmap(AS_OPCODES, &bbcm_state::bbcm_fetch); m_maincpu->set_periodic_int(FUNC(bbc_state::bbcb_keyscan), attotime::from_hz(1000)); /* scan keyboard */ diff --git a/src/mame/atari/lynx.cpp b/src/mame/atari/lynx.cpp index 473e96dbfbf..a74149d90fe 100644 --- a/src/mame/atari/lynx.cpp +++ b/src/mame/atari/lynx.cpp @@ -78,7 +78,7 @@ void lynx_state::sound_cb() void lynx_state::lynx(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */ + G65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */ m_maincpu->set_addrmap(AS_PROGRAM, &lynx_state::cpu_map); config.set_maximum_quantum(attotime::from_hz(60)); diff --git a/src/mame/atari/lynx_m.cpp b/src/mame/atari/lynx_m.cpp index cacb368fa94..c1ae51a6a81 100644 --- a/src/mame/atari/lynx_m.cpp +++ b/src/mame/atari/lynx_m.cpp @@ -1227,7 +1227,7 @@ void lynx_state::interrupt_set(u8 line) void lynx_state::interrupt_update() { - m_maincpu->set_input_line(M65SC02_IRQ_LINE, (m_mikey.interrupt == 0) ? CLEAR_LINE : ASSERT_LINE); + m_maincpu->set_input_line(G65SC02_IRQ_LINE, (m_mikey.interrupt == 0) ? CLEAR_LINE : ASSERT_LINE); } @@ -1877,7 +1877,7 @@ void lynx_state::machine_reset() m_mikey.interrupt = 0; m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); - m_maincpu->set_input_line(M65SC02_IRQ_LINE, CLEAR_LINE); + m_maincpu->set_input_line(G65SC02_IRQ_LINE, CLEAR_LINE); m_suzy = SUZY(); m_mikey = MIKEY(); diff --git a/src/mame/commodore/clcd.cpp b/src/mame/commodore/clcd.cpp index b3e41efafe4..b7b0396bd0b 100644 --- a/src/mame/commodore/clcd.cpp +++ b/src/mame/commodore/clcd.cpp @@ -13,10 +13,11 @@ #include "emu.h" + #include "bus/cbmiec/cbmiec.h" #include "bus/centronics/ctronics.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/m65sc02.h" #include "machine/6522via.h" #include "machine/bankdev.h" #include "machine/input_merger.h" @@ -25,6 +26,7 @@ #include "machine/ram.h" #include "machine/nvram.h" #include "sound/spkrdev.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -538,7 +540,7 @@ class clcd_state : public driver_device void clcd_banked_mem(address_map &map) ATTR_COLD; void clcd_mem(address_map &map) ATTR_COLD; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_acia; required_device m_via0; required_device m_rtc; @@ -717,10 +719,10 @@ INPUT_PORTS_END void clcd_state::clcd(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, 1000000); + G65SC102(config, m_maincpu, 1000000); m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", g65sc102_device::IRQ_LINE); via6522_device &via0(R65C22(config, "via0", 1000000)); via0.writepa_handler().set(FUNC(clcd_state::via0_pa_w)); @@ -823,4 +825,4 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1985, clcd, 0, 0, clcd, clcd, clcd_state, empty_init, "Commodore Business Machines", "LCD (Prototype)", 0 ) +COMP( 1985, clcd, 0, 0, clcd, clcd, clcd_state, empty_init, "Commodore Business Machines", "LCD (prototype)", 0 ) diff --git a/src/mame/fidelity/excel.cpp b/src/mame/fidelity/excel.cpp index 3b2c0e63ec6..c0e38ae96bb 100644 --- a/src/mame/fidelity/excel.cpp +++ b/src/mame/fidelity/excel.cpp @@ -460,7 +460,7 @@ INPUT_PORTS_END void excel_state::fexcel(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator + G65SC102(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map); auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz diff --git a/src/mame/funworld/funworld.cpp b/src/mame/funworld/funworld.cpp index 6cb43963af1..442381fa68b 100644 --- a/src/mame/funworld/funworld.cpp +++ b/src/mame/funworld/funworld.cpp @@ -3306,7 +3306,7 @@ void lunapark_state::machine_reset() void funworld_state::fw1stpal(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz. + G65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz. m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funworld_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -3470,7 +3470,7 @@ void intergames_state::intrgmes(machine_config &config) { fw1stpal(config); - M65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz. + G65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz. m_maincpu->set_addrmap(AS_PROGRAM, &intergames_state::intergames_map); //m_maincpu->set_periodic_int(FUNC(intergames_state::nmi_line_pulse), attotime::from_hz(60)); diff --git a/src/mame/funworld/snookr10.cpp b/src/mame/funworld/snookr10.cpp index ef67c73c607..6ade37a0fb5 100644 --- a/src/mame/funworld/snookr10.cpp +++ b/src/mame/funworld/snookr10.cpp @@ -1037,7 +1037,7 @@ GFXDECODE_END void snookr10_state::snookr10(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, XTAL(16'000'000) / 8); // 2 MHz (1.999 MHz measured) + G65SC02(config, m_maincpu, XTAL(16'000'000) / 8); // 2 MHz (1.999 MHz measured) m_maincpu->set_addrmap(AS_PROGRAM, &snookr10_state::snookr10_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/hegenerglaser/mondial.cpp b/src/mame/hegenerglaser/mondial.cpp index 0395f4fde7c..a4c134f669b 100644 --- a/src/mame/hegenerglaser/mondial.cpp +++ b/src/mame/hegenerglaser/mondial.cpp @@ -166,7 +166,7 @@ INPUT_PORTS_END void mondial_state::mondial(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 2'000'000); + G65SC02(config, m_maincpu, 2'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &mondial_state::mondial_mem); const attotime irq_period = attotime::from_hz(2'000'000 / 0x1000); diff --git a/src/mame/hegenerglaser/mondial2.cpp b/src/mame/hegenerglaser/mondial2.cpp index 5b77c18e8fd..b3c7bf81b42 100644 --- a/src/mame/hegenerglaser/mondial2.cpp +++ b/src/mame/hegenerglaser/mondial2.cpp @@ -175,7 +175,7 @@ INPUT_PORTS_END void mondial2_state::mondial2(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 2_MHz_XTAL); + G65SC02(config, m_maincpu, 2_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mondial2_state::mondial2_mem); const attotime nmi_period = attotime::from_hz(2_MHz_XTAL / 0x1000); diff --git a/src/mame/hegenerglaser/risc.cpp b/src/mame/hegenerglaser/risc.cpp index 8e81bc87fab..4a7618108c3 100644 --- a/src/mame/hegenerglaser/risc.cpp +++ b/src/mame/hegenerglaser/risc.cpp @@ -145,7 +145,7 @@ INPUT_PORTS_END void risc_state::mrisc(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 10_MHz_XTAL / 4); + G65SC02(config, m_maincpu, 10_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &risc_state::mrisc_mem); const attotime irq_period = attotime::from_hz(10_MHz_XTAL / 0x4000); diff --git a/src/mame/hegenerglaser/smondial.cpp b/src/mame/hegenerglaser/smondial.cpp index 7b26c98209e..21c65fe6695 100644 --- a/src/mame/hegenerglaser/smondial.cpp +++ b/src/mame/hegenerglaser/smondial.cpp @@ -279,7 +279,7 @@ INPUT_PORTS_END void smondialb_state::smondialb(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 4_MHz_XTAL); + G65SC02(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &smondialb_state::smondialb_mem); const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000); diff --git a/src/mame/novag/const.cpp b/src/mame/novag/const.cpp index 2d31e44bf73..b6b6ee0c172 100644 --- a/src/mame/novag/const.cpp +++ b/src/mame/novag/const.cpp @@ -402,7 +402,7 @@ void const_state::nconst36(machine_config &config) nconst(config); // basic machine hardware - M65SC02(config.replace(), m_maincpu, 7.2_MHz_XTAL/2); + G65SC02(config.replace(), m_maincpu, 7.2_MHz_XTAL/2); m_maincpu->set_addrmap(AS_PROGRAM, &const_state::const_map); subdevice("irq_clock")->set_clock(7.2_MHz_XTAL/2 / 0x2000); // ~439Hz (pulse width same as nconst) diff --git a/src/mame/skeleton/textelcomp.cpp b/src/mame/skeleton/textelcomp.cpp index 852bffae17f..6055be8e45e 100644 --- a/src/mame/skeleton/textelcomp.cpp +++ b/src/mame/skeleton/textelcomp.cpp @@ -325,10 +325,10 @@ INPUT_PORTS_END void textelcomp_state::textelcomp(machine_config &config) { - M65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) + G65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) m_maincpu->set_addrmap(AS_PROGRAM, &textelcomp_state::mem_map); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m65sc02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, g65sc02_device::IRQ_LINE); via6522_device &via0(R65C22(config, "via0", 3.6864_MHz_XTAL / 2)); // G65SC22P-2 via0.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); From ef8fcfeb11b51abb4aa93290ba2ac15c989f20d3 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 13:05:47 +0100 Subject: [PATCH 05/40] m6502: rename m65sc02.* to g65sc02.* --- scripts/src/cpu.lua | 6 +++--- src/devices/bus/bbc/tube/tube_6502.h | 2 +- src/devices/bus/c64/fcc.h | 2 +- src/devices/bus/isa/finalchs.h | 2 +- src/devices/cpu/m6502/{m65sc02.cpp => g65sc02.cpp} | 4 ++-- src/devices/cpu/m6502/{m65sc02.h => g65sc02.h} | 8 ++++---- src/devices/cpu/m6502/m6502.txt | 4 ++-- src/mame/acorn/bbc.h | 2 +- src/mame/atari/lynx.cpp | 2 +- src/mame/atari/lynx_m.cpp | 2 +- src/mame/commodore/clcd.cpp | 2 +- src/mame/fidelity/desdis.cpp | 2 +- src/mame/fidelity/excel.cpp | 2 +- src/mame/funworld/funworld.cpp | 2 +- src/mame/funworld/snookr10.cpp | 2 +- src/mame/hegenerglaser/mondial.cpp | 2 +- src/mame/hegenerglaser/mondial2.cpp | 2 +- src/mame/hegenerglaser/risc.cpp | 2 +- src/mame/hegenerglaser/smondial.cpp | 2 +- src/mame/novag/const.cpp | 2 +- src/mame/skeleton/textelcomp.cpp | 2 +- 21 files changed, 28 insertions(+), 28 deletions(-) rename src/devices/cpu/m6502/{m65sc02.cpp => g65sc02.cpp} (97%) rename src/devices/cpu/m6502/{m65sc02.h => g65sc02.h} (91%) diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index f94f56dc077..1f14e6e6bff 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -1738,6 +1738,7 @@ end -------------------------------------------------- -- MOS Technology 6502 and its many derivatives --@src/devices/cpu/m6502/deco16.h,CPUS["M6502"] = true +--@src/devices/cpu/m6502/g65sc02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/gew7.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/gew12.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m3745x.h,CPUS["M6502"] = true @@ -1755,7 +1756,6 @@ end --@src/devices/cpu/m6502/m6510t.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m65ce02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m65c02.h,CPUS["M6502"] = true ---@src/devices/cpu/m6502/m65sc02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m740.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m7501.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m8502.h,CPUS["M6502"] = true @@ -1775,6 +1775,8 @@ if CPUS["M6502"] then files { MAME_DIR .. "src/devices/cpu/m6502/deco16.cpp", MAME_DIR .. "src/devices/cpu/m6502/deco16.h", + MAME_DIR .. "src/devices/cpu/m6502/g65sc02.cpp", + MAME_DIR .. "src/devices/cpu/m6502/g65sc02.h", MAME_DIR .. "src/devices/cpu/m6502/gew7.cpp", MAME_DIR .. "src/devices/cpu/m6502/gew7.h", MAME_DIR .. "src/devices/cpu/m6502/gew12.cpp", @@ -1811,8 +1813,6 @@ if CPUS["M6502"] then MAME_DIR .. "src/devices/cpu/m6502/m65c02.h", MAME_DIR .. "src/devices/cpu/m6502/m65ce02.cpp", MAME_DIR .. "src/devices/cpu/m6502/m65ce02.h", - MAME_DIR .. "src/devices/cpu/m6502/m65sc02.cpp", - MAME_DIR .. "src/devices/cpu/m6502/m65sc02.h", MAME_DIR .. "src/devices/cpu/m6502/m740.cpp", MAME_DIR .. "src/devices/cpu/m6502/m740.h", MAME_DIR .. "src/devices/cpu/m6502/m7501.cpp", diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h index ddfc337109f..0d3ded97a84 100644 --- a/src/devices/bus/bbc/tube/tube_6502.h +++ b/src/devices/bus/bbc/tube/tube_6502.h @@ -18,7 +18,7 @@ #pragma once #include "tube.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/ram.h" #include "machine/tube.h" diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h index 453603d96f2..7123336d64a 100644 --- a/src/devices/bus/c64/fcc.h +++ b/src/devices/bus/c64/fcc.h @@ -12,7 +12,7 @@ #pragma once #include "exp.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/gen_latch.h" diff --git a/src/devices/bus/isa/finalchs.h b/src/devices/bus/isa/finalchs.h index ba515d59b7d..9083f9529a3 100644 --- a/src/devices/bus/isa/finalchs.h +++ b/src/devices/bus/isa/finalchs.h @@ -12,7 +12,7 @@ #pragma once #include "isa.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/gen_latch.h" diff --git a/src/devices/cpu/m6502/m65sc02.cpp b/src/devices/cpu/m6502/g65sc02.cpp similarity index 97% rename from src/devices/cpu/m6502/m65sc02.cpp rename to src/devices/cpu/m6502/g65sc02.cpp index 4bea3ff8113..67b3e742363 100644 --- a/src/devices/cpu/m6502/m65sc02.cpp +++ b/src/devices/cpu/m6502/g65sc02.cpp @@ -2,7 +2,7 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65sc02.cpp + g65sc02.cpp Rockwell-class 65c02 with internal static registers, making clock stoppable? @@ -13,7 +13,7 @@ ***************************************************************************/ #include "emu.h" -#include "m65sc02.h" +#include "g65sc02.h" DEFINE_DEVICE_TYPE(G65SC02, g65sc02_device, "g65sc02", "GTE G65SC02") DEFINE_DEVICE_TYPE(G65SC12, g65sc12_device, "g65sc12", "GTE G65SC12") diff --git a/src/devices/cpu/m6502/m65sc02.h b/src/devices/cpu/m6502/g65sc02.h similarity index 91% rename from src/devices/cpu/m6502/m65sc02.h rename to src/devices/cpu/m6502/g65sc02.h index 147709ea265..a0004dfefdb 100644 --- a/src/devices/cpu/m6502/m65sc02.h +++ b/src/devices/cpu/m6502/g65sc02.h @@ -2,14 +2,14 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65sc02.h + g65sc02.h Rockwell-class 65c02 with internal static registers, making clock stoppable? ***************************************************************************/ -#ifndef MAME_CPU_M6502_M65SC02_H -#define MAME_CPU_M6502_M65SC02_H +#ifndef MAME_CPU_M6502_G65SC02_H +#define MAME_CPU_M6502_G65SC02_H #include "r65c02.h" @@ -44,4 +44,4 @@ DECLARE_DEVICE_TYPE(G65SC12, g65sc12_device) DECLARE_DEVICE_TYPE(G65SC102, g65sc102_device) DECLARE_DEVICE_TYPE(G65SC112, g65sc112_device) -#endif // MAME_CPU_M6502_M65SC02_H +#endif // MAME_CPU_M6502_G65SC02_H diff --git a/src/devices/cpu/m6502/m6502.txt b/src/devices/cpu/m6502/m6502.txt index 788ab6fad3d..c774747a98a 100644 --- a/src/devices/cpu/m6502/m6502.txt +++ b/src/devices/cpu/m6502/m6502.txt @@ -86,11 +86,11 @@ several other CMOS variants additional commands atari lynx bastian schicks bll -integrated m65sc02 cpu core +integrated g65sc02 cpu core no bbr bbs instructions, else m65c02 compatible watara supervision -integrated m65c02 cpu core (or m65sc02 or m65ce02?) +integrated m65c02 cpu core (or g65sc02 or m65ce02?) gte65816 (nintendo snes) diff --git a/src/mame/acorn/bbc.h b/src/mame/acorn/bbc.h index 23b57f386ed..95bf25373e4 100644 --- a/src/mame/acorn/bbc.h +++ b/src/mame/acorn/bbc.h @@ -12,8 +12,8 @@ #pragma once +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65sc02.h" #include "imagedev/floppy.h" #include "machine/74259.h" #include "machine/6522via.h" diff --git a/src/mame/atari/lynx.cpp b/src/mame/atari/lynx.cpp index a74149d90fe..7b8e730278a 100644 --- a/src/mame/atari/lynx.cpp +++ b/src/mame/atari/lynx.cpp @@ -19,7 +19,7 @@ #include "emu.h" #include "lynx.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "softlist_dev.h" #include "speaker.h" diff --git a/src/mame/atari/lynx_m.cpp b/src/mame/atari/lynx_m.cpp index c1ae51a6a81..15b1f26bb70 100644 --- a/src/mame/atari/lynx_m.cpp +++ b/src/mame/atari/lynx_m.cpp @@ -6,7 +6,7 @@ #include "emu.h" #include "lynx.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "corestr.h" #include "render.h" diff --git a/src/mame/commodore/clcd.cpp b/src/mame/commodore/clcd.cpp index b7b0396bd0b..553d43a742a 100644 --- a/src/mame/commodore/clcd.cpp +++ b/src/mame/commodore/clcd.cpp @@ -17,7 +17,7 @@ #include "bus/cbmiec/cbmiec.h" #include "bus/centronics/ctronics.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/6522via.h" #include "machine/bankdev.h" #include "machine/input_merger.h" diff --git a/src/mame/fidelity/desdis.cpp b/src/mame/fidelity/desdis.cpp index 44a40c11b41..227e155db0d 100644 --- a/src/mame/fidelity/desdis.cpp +++ b/src/mame/fidelity/desdis.cpp @@ -37,8 +37,8 @@ Designer Mach IV Master 2325 (model 6129) overview: #include "emu.h" +#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" -#include "cpu/m6502/m65sc02.h" #include "cpu/m68000/m68000.h" #include "cpu/m68000/m68020.h" #include "machine/clock.h" diff --git a/src/mame/fidelity/excel.cpp b/src/mame/fidelity/excel.cpp index c0e38ae96bb..01678da3fe4 100644 --- a/src/mame/fidelity/excel.cpp +++ b/src/mame/fidelity/excel.cpp @@ -177,8 +177,8 @@ CPU D6 to W: (model 6092, tied to VCC otherwise) #include "emu.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/r65c02.h" -#include "cpu/m6502/m65sc02.h" #include "machine/clock.h" #include "machine/sensorboard.h" #include "sound/dac.h" diff --git a/src/mame/funworld/funworld.cpp b/src/mame/funworld/funworld.cpp index 442381fa68b..6ad4b425322 100644 --- a/src/mame/funworld/funworld.cpp +++ b/src/mame/funworld/funworld.cpp @@ -755,7 +755,7 @@ #include "emu.h" #include "funworld.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/r65c02.h" #include "machine/6821pia.h" #include "machine/nvram.h" diff --git a/src/mame/funworld/snookr10.cpp b/src/mame/funworld/snookr10.cpp index 6ade37a0fb5..83b28abddda 100644 --- a/src/mame/funworld/snookr10.cpp +++ b/src/mame/funworld/snookr10.cpp @@ -619,7 +619,7 @@ #include "emu.h" #include "snookr10.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/nvram.h" #include "sound/okim6295.h" #include "screen.h" diff --git a/src/mame/hegenerglaser/mondial.cpp b/src/mame/hegenerglaser/mondial.cpp index a4c134f669b..291f1b0b8b3 100644 --- a/src/mame/hegenerglaser/mondial.cpp +++ b/src/mame/hegenerglaser/mondial.cpp @@ -23,7 +23,7 @@ Hardware notes: #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/sensorboard.h" #include "sound/beep.h" #include "video/pwm.h" diff --git a/src/mame/hegenerglaser/mondial2.cpp b/src/mame/hegenerglaser/mondial2.cpp index b3c7bf81b42..5ea45de82dc 100644 --- a/src/mame/hegenerglaser/mondial2.cpp +++ b/src/mame/hegenerglaser/mondial2.cpp @@ -15,7 +15,7 @@ Hardware notes: #include "emu.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/sensorboard.h" #include "sound/dac.h" #include "video/pwm.h" diff --git a/src/mame/hegenerglaser/risc.cpp b/src/mame/hegenerglaser/risc.cpp index 4a7618108c3..da1bc98c863 100644 --- a/src/mame/hegenerglaser/risc.cpp +++ b/src/mame/hegenerglaser/risc.cpp @@ -23,7 +23,7 @@ Hardware notes: #include "mmboard.h" #include "mmdisplay2.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/74259.h" #include "machine/chessmachine.h" #include "machine/nvram.h" diff --git a/src/mame/hegenerglaser/smondial.cpp b/src/mame/hegenerglaser/smondial.cpp index 21c65fe6695..e50e8b40ad3 100644 --- a/src/mame/hegenerglaser/smondial.cpp +++ b/src/mame/hegenerglaser/smondial.cpp @@ -23,7 +23,7 @@ Undocumented buttons: #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/r65c02.h" #include "machine/74259.h" #include "machine/nvram.h" diff --git a/src/mame/novag/const.cpp b/src/mame/novag/const.cpp index b6b6ee0c172..c9fb6ddc873 100644 --- a/src/mame/novag/const.cpp +++ b/src/mame/novag/const.cpp @@ -70,8 +70,8 @@ than writing 0x08 to control_w. #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "cpu/m6502/g65sc02.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65sc02.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/nvram.h" diff --git a/src/mame/skeleton/textelcomp.cpp b/src/mame/skeleton/textelcomp.cpp index 6055be8e45e..44e98f8a1d3 100644 --- a/src/mame/skeleton/textelcomp.cpp +++ b/src/mame/skeleton/textelcomp.cpp @@ -7,7 +7,7 @@ *******************************************************************************/ #include "emu.h" -#include "cpu/m6502/m65sc02.h" +#include "cpu/m6502/g65sc02.h" #include "machine/input_merger.h" #include "machine/6522via.h" #include "machine/mos6551.h" From d3caef02ac4e896c85533772fb3cfd8b74766d81 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 13:33:19 +0100 Subject: [PATCH 06/40] m6502: add r65c02 subtypes --- src/devices/bus/bbc/tube/tube_6502.cpp | 2 +- src/devices/bus/bbc/tube/tube_6502.h | 1 + src/devices/bus/bbc/tube/tube_matchbox.cpp | 254 ++++++++++----------- src/devices/bus/econet/e01.cpp | 2 +- src/devices/bus/econet/e01.h | 4 +- src/devices/cpu/m6502/r65c02.cpp | 19 +- src/devices/cpu/m6502/r65c02.h | 12 + 7 files changed, 161 insertions(+), 133 deletions(-) diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index 1334a8506e9..dcca3ba692e 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -165,7 +165,7 @@ void bbc_tube_65c102_device::device_add_mconfig(machine_config &config) { bbc_tube_6502_device::device_add_mconfig(config); - R65C02(config.replace(), m_maincpu, 16_MHz_XTAL / 4); // R65C102 + R65C102(config.replace(), m_maincpu, 16_MHz_XTAL / 4); // R65C102 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_65c102_device::tube_6502_mem); } diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h index 0d3ded97a84..367a6ed1623 100644 --- a/src/devices/bus/bbc/tube/tube_6502.h +++ b/src/devices/bus/bbc/tube/tube_6502.h @@ -19,6 +19,7 @@ #include "tube.h" #include "cpu/m6502/g65sc02.h" +#include "cpu/m6502/r65c02.h" #include "machine/ram.h" #include "machine/tube.h" diff --git a/src/devices/bus/bbc/tube/tube_matchbox.cpp b/src/devices/bus/bbc/tube/tube_matchbox.cpp index a2cf0bb009b..01999974492 100644 --- a/src/devices/bus/bbc/tube/tube_matchbox.cpp +++ b/src/devices/bus/bbc/tube/tube_matchbox.cpp @@ -20,7 +20,7 @@ #include "cpu/arm/arm.h" #include "cpu/i86/i286.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/r65c02.h" #include "cpu/m6809/m6809.h" #include "cpu/m68000/m68000.h" #include "cpu/ns32000/ns32000.h" @@ -44,10 +44,10 @@ class bbc_tube_matchbox_device : public device_t, public device_bbc_tube_interfa , m_ram(*this, "ram") , m_soft_dip(0) , m_prst(0) - , m_m65c102(*this, "m65c102") - , m_m65c102_rom(*this, "m65c102_rom") - , m_m65c102_view(*this, "m65c102_view") - , m_m65c102_bank(*this, "m65c102_bank%u", 0) + , m_r65c102(*this, "r65c102") + , m_r65c102_rom(*this, "r65c102_rom") + , m_r65c102_view(*this, "r65c102_view") + , m_r65c102_bank(*this, "r65c102_bank%u", 0) , m_z80(*this, "z80") , m_z80_rom(*this, "z80_rom") , m_z80_view(*this, "z80_view") @@ -98,15 +98,15 @@ class bbc_tube_matchbox_device : public device_t, public device_bbc_tube_interfa int m_prst; // 65C102 - required_device m_m65c102; - required_region_ptr m_m65c102_rom; - memory_passthrough_handler m_m65c102_rom_shadow_tap; - memory_view m_m65c102_view; - required_memory_bank_array<8> m_m65c102_bank; + required_device m_r65c102; + required_region_ptr m_r65c102_rom; + memory_passthrough_handler m_r65c102_rom_shadow_tap; + memory_view m_r65c102_view; + required_memory_bank_array<8> m_r65c102_bank; - void m65c102_mem(address_map &map) ATTR_COLD; - void m65c102_reset(uint8_t dip); - void m65c102_bank_w(offs_t offset, uint8_t data); + void r65c102_mem(address_map &map) ATTR_COLD; + void r65c102_reset(uint8_t dip); + void r65c102_bank_w(offs_t offset, uint8_t data); // Z80 required_device m_z80; @@ -179,23 +179,23 @@ class bbc_tube_matchbox_device : public device_t, public device_bbc_tube_interfa //------------------------------------------------- -// ADDRESS_MAP( m65c102_mem ) +// ADDRESS_MAP( r65c102_mem ) //------------------------------------------------- -void bbc_tube_matchbox_device::m65c102_mem(address_map &map) +void bbc_tube_matchbox_device::r65c102_mem(address_map &map) { - map(0x0000, 0xffff).view(m_m65c102_view); - m_m65c102_view[0](0x0000, 0xffff).rw(m_ram, FUNC(ram_device::read), FUNC(ram_device::write)); - m_m65c102_view[0](0xf800, 0xffff).rom().region("m65c102_rom", 0); - m_m65c102_view[1](0x0000, 0x1fff).bankrw("m65c102_bank0"); - m_m65c102_view[1](0x2000, 0x3fff).bankrw("m65c102_bank1"); - m_m65c102_view[1](0x4000, 0x5fff).bankrw("m65c102_bank2"); - m_m65c102_view[1](0x6000, 0x7fff).bankrw("m65c102_bank3"); - m_m65c102_view[1](0x8000, 0x9fff).bankrw("m65c102_bank4"); - m_m65c102_view[1](0xa000, 0xbfff).bankrw("m65c102_bank5"); - m_m65c102_view[1](0xc000, 0xdfff).bankrw("m65c102_bank6"); - m_m65c102_view[1](0xe000, 0xffff).bankrw("m65c102_bank7"); - m_m65c102_view[1](0xfee0, 0xfee7).w(FUNC(bbc_tube_matchbox_device::m65c102_bank_w)); + map(0x0000, 0xffff).view(m_r65c102_view); + m_r65c102_view[0](0x0000, 0xffff).rw(m_ram, FUNC(ram_device::read), FUNC(ram_device::write)); + m_r65c102_view[0](0xf800, 0xffff).rom().region("r65c102_rom", 0); + m_r65c102_view[1](0x0000, 0x1fff).bankrw("r65c102_bank0"); + m_r65c102_view[1](0x2000, 0x3fff).bankrw("r65c102_bank1"); + m_r65c102_view[1](0x4000, 0x5fff).bankrw("r65c102_bank2"); + m_r65c102_view[1](0x6000, 0x7fff).bankrw("r65c102_bank3"); + m_r65c102_view[1](0x8000, 0x9fff).bankrw("r65c102_bank4"); + m_r65c102_view[1](0xa000, 0xbfff).bankrw("r65c102_bank5"); + m_r65c102_view[1](0xc000, 0xdfff).bankrw("r65c102_bank6"); + m_r65c102_view[1](0xe000, 0xffff).bankrw("r65c102_bank7"); + m_r65c102_view[1](0xfee0, 0xfee7).w(FUNC(bbc_tube_matchbox_device::r65c102_bank_w)); map(0xfef8, 0xfeff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)); } @@ -353,7 +353,7 @@ ioport_constructor bbc_tube_matchbox_device::device_input_ports() const //------------------------------------------------- ROM_START( matchbox ) - ROM_REGION(0x0800, "m65c102_rom", 0) + ROM_REGION(0x0800, "r65c102_rom", 0) ROM_LOAD("client65v2.bin", 0x0000, 0x0800, CRC(866a5b7b) SHA1(40e2de0443e3447483fe6ee43fe66bac87fed1c4)) // latest from https://mdfs.net/Software/Tube/Matchbox/ ROM_REGION(0x1000, "z80_rom", 0) @@ -402,8 +402,8 @@ void bbc_tube_matchbox_device::device_add_mconfig(machine_config &config) RAM(config, m_ram).set_default_size("2MB"); // 65C102 - M65C02(config, m_m65c102, 32_MHz_XTAL); - m_m65c102->set_addrmap(AS_PROGRAM, &bbc_tube_matchbox_device::m65c102_mem); + R65C102(config, m_r65c102, 32_MHz_XTAL); + m_r65c102->set_addrmap(AS_PROGRAM, &bbc_tube_matchbox_device::r65c102_mem); SOFTWARE_LIST(config, "flop_ls_6502").set_original("bbc_flop_6502"); @@ -472,7 +472,7 @@ void bbc_tube_matchbox_device::device_start() void bbc_tube_matchbox_device::device_reset_after_children() { - m_m65c102->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_r65c102->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_z80->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_i80286->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_m6809->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); @@ -486,8 +486,8 @@ void bbc_tube_matchbox_device::device_reset_after_children() switch (m_copro) { case 0x00: case 0x01: case 0x02: case 0x03: - m65c102_reset(m_copro); - m_m65c102->set_input_line(INPUT_LINE_RESET, m_prst); + r65c102_reset(m_copro); + m_r65c102->set_input_line(INPUT_LINE_RESET, m_prst); break; case 0x04: case 0x05: case 0x06: case 0x07: @@ -534,15 +534,15 @@ void bbc_tube_matchbox_device::device_reset_after_children() // device_reset - device-specific reset //------------------------------------------------- -void bbc_tube_matchbox_device::m65c102_reset(uint8_t copro) +void bbc_tube_matchbox_device::r65c102_reset(uint8_t copro) { - address_space &program = m_m65c102->space(AS_PROGRAM); + address_space &program = m_r65c102->space(AS_PROGRAM); // address map during booting - m_m65c102_view.select(0); + m_r65c102_view.select(0); - m_m65c102_rom_shadow_tap.remove(); - m_m65c102_rom_shadow_tap = program.install_read_tap( + m_r65c102_rom_shadow_tap.remove(); + m_r65c102_rom_shadow_tap = program.install_read_tap( 0x0fef8, 0xfeff, "rom_shadow_r", [this](offs_t offset, u8 &data, u8 mem_mask) @@ -550,119 +550,119 @@ void bbc_tube_matchbox_device::m65c102_reset(uint8_t copro) if (!machine().side_effects_disabled()) { // delete this tap - m_m65c102_rom_shadow_tap.remove(); + m_r65c102_rom_shadow_tap.remove(); // address map after booting - m_m65c102_view.select(1); + m_r65c102_view.select(1); } // return the original data return data; }, - &m_m65c102_rom_shadow_tap); + &m_r65c102_rom_shadow_tap); for (int i = 0; i < 8; i++) { - m_m65c102_bank[i]->set_base(m_ram->pointer() + (i * 0x2000)); + m_r65c102_bank[i]->set_base(m_ram->pointer() + (i * 0x2000)); } switch (copro & 3) { case 0: // 3MHz - m_m65c102->set_clock_scale(1.0 / 11); + m_r65c102->set_clock_scale(1.0 / 11); // original startup banner - m_m65c102_rom[0x06f] = '6'; - m_m65c102_rom[0x070] = '5'; - m_m65c102_rom[0x071] = 'C'; - m_m65c102_rom[0x072] = '1'; - m_m65c102_rom[0x073] = '0'; - m_m65c102_rom[0x074] = '2'; - m_m65c102_rom[0x075] = ' '; - m_m65c102_rom[0x076] = 'C'; - m_m65c102_rom[0x077] = 'o'; - m_m65c102_rom[0x078] = '-'; - m_m65c102_rom[0x079] = 'P'; - m_m65c102_rom[0x07a] = 'r'; - m_m65c102_rom[0x07b] = 'o'; - m_m65c102_rom[0x07c] = 'c'; - m_m65c102_rom[0x07d] = 'e'; - m_m65c102_rom[0x07e] = 's'; - m_m65c102_rom[0x07f] = 's'; - m_m65c102_rom[0x080] = 'o'; - m_m65c102_rom[0x081] = 'r'; + m_r65c102_rom[0x06f] = '6'; + m_r65c102_rom[0x070] = '5'; + m_r65c102_rom[0x071] = 'C'; + m_r65c102_rom[0x072] = '1'; + m_r65c102_rom[0x073] = '0'; + m_r65c102_rom[0x074] = '2'; + m_r65c102_rom[0x075] = ' '; + m_r65c102_rom[0x076] = 'C'; + m_r65c102_rom[0x077] = 'o'; + m_r65c102_rom[0x078] = '-'; + m_r65c102_rom[0x079] = 'P'; + m_r65c102_rom[0x07a] = 'r'; + m_r65c102_rom[0x07b] = 'o'; + m_r65c102_rom[0x07c] = 'c'; + m_r65c102_rom[0x07d] = 'e'; + m_r65c102_rom[0x07e] = 's'; + m_r65c102_rom[0x07f] = 's'; + m_r65c102_rom[0x080] = 'o'; + m_r65c102_rom[0x081] = 'r'; break; case 1: // 4MHz - m_m65c102->set_clock_scale(1.0 / 8); + m_r65c102->set_clock_scale(1.0 / 8); // patch startup banner - m_m65c102_rom[0x06f] = '0'; - m_m65c102_rom[0x070] = '4'; - m_m65c102_rom[0x071] = 'M'; - m_m65c102_rom[0x072] = 'H'; - m_m65c102_rom[0x073] = 'z'; - m_m65c102_rom[0x074] = ' '; - m_m65c102_rom[0x075] = '6'; - m_m65c102_rom[0x076] = '5'; - m_m65c102_rom[0x077] = 'C'; - m_m65c102_rom[0x078] = '1'; - m_m65c102_rom[0x079] = '0'; - m_m65c102_rom[0x07a] = '2'; - m_m65c102_rom[0x07b] = ' '; - m_m65c102_rom[0x07c] = 'C'; - m_m65c102_rom[0x07d] = 'o'; - m_m65c102_rom[0x07e] = '-'; - m_m65c102_rom[0x07f] = 'P'; - m_m65c102_rom[0x080] = 'r'; - m_m65c102_rom[0x081] = 'o'; + m_r65c102_rom[0x06f] = '0'; + m_r65c102_rom[0x070] = '4'; + m_r65c102_rom[0x071] = 'M'; + m_r65c102_rom[0x072] = 'H'; + m_r65c102_rom[0x073] = 'z'; + m_r65c102_rom[0x074] = ' '; + m_r65c102_rom[0x075] = '6'; + m_r65c102_rom[0x076] = '5'; + m_r65c102_rom[0x077] = 'C'; + m_r65c102_rom[0x078] = '1'; + m_r65c102_rom[0x079] = '0'; + m_r65c102_rom[0x07a] = '2'; + m_r65c102_rom[0x07b] = ' '; + m_r65c102_rom[0x07c] = 'C'; + m_r65c102_rom[0x07d] = 'o'; + m_r65c102_rom[0x07e] = '-'; + m_r65c102_rom[0x07f] = 'P'; + m_r65c102_rom[0x080] = 'r'; + m_r65c102_rom[0x081] = 'o'; break; case 2: // 16MHz - m_m65c102->set_clock_scale(1.0 / 2); + m_r65c102->set_clock_scale(1.0 / 2); // patch startup banner - m_m65c102_rom[0x06f] = '1'; - m_m65c102_rom[0x070] = '6'; - m_m65c102_rom[0x071] = 'M'; - m_m65c102_rom[0x072] = 'H'; - m_m65c102_rom[0x073] = 'z'; - m_m65c102_rom[0x074] = ' '; - m_m65c102_rom[0x075] = '6'; - m_m65c102_rom[0x076] = '5'; - m_m65c102_rom[0x077] = 'C'; - m_m65c102_rom[0x078] = '1'; - m_m65c102_rom[0x079] = '0'; - m_m65c102_rom[0x07a] = '2'; - m_m65c102_rom[0x07b] = ' '; - m_m65c102_rom[0x07c] = 'C'; - m_m65c102_rom[0x07d] = 'o'; - m_m65c102_rom[0x07e] = '-'; - m_m65c102_rom[0x07f] = 'P'; - m_m65c102_rom[0x080] = 'r'; - m_m65c102_rom[0x081] = 'o'; + m_r65c102_rom[0x06f] = '1'; + m_r65c102_rom[0x070] = '6'; + m_r65c102_rom[0x071] = 'M'; + m_r65c102_rom[0x072] = 'H'; + m_r65c102_rom[0x073] = 'z'; + m_r65c102_rom[0x074] = ' '; + m_r65c102_rom[0x075] = '6'; + m_r65c102_rom[0x076] = '5'; + m_r65c102_rom[0x077] = 'C'; + m_r65c102_rom[0x078] = '1'; + m_r65c102_rom[0x079] = '0'; + m_r65c102_rom[0x07a] = '2'; + m_r65c102_rom[0x07b] = ' '; + m_r65c102_rom[0x07c] = 'C'; + m_r65c102_rom[0x07d] = 'o'; + m_r65c102_rom[0x07e] = '-'; + m_r65c102_rom[0x07f] = 'P'; + m_r65c102_rom[0x080] = 'r'; + m_r65c102_rom[0x081] = 'o'; break; case 3: // 64MHz - m_m65c102->set_clock_scale(1.0 * 2); + m_r65c102->set_clock_scale(1.0 * 2); // patch startup banner - m_m65c102_rom[0x06f] = '6'; - m_m65c102_rom[0x070] = '4'; - m_m65c102_rom[0x071] = 'M'; - m_m65c102_rom[0x072] = 'H'; - m_m65c102_rom[0x073] = 'z'; - m_m65c102_rom[0x074] = ' '; - m_m65c102_rom[0x075] = '6'; - m_m65c102_rom[0x076] = '5'; - m_m65c102_rom[0x077] = 'C'; - m_m65c102_rom[0x078] = '1'; - m_m65c102_rom[0x079] = '0'; - m_m65c102_rom[0x07a] = '2'; - m_m65c102_rom[0x07b] = ' '; - m_m65c102_rom[0x07c] = 'C'; - m_m65c102_rom[0x07d] = 'o'; - m_m65c102_rom[0x07e] = '-'; - m_m65c102_rom[0x07f] = 'P'; - m_m65c102_rom[0x080] = 'r'; - m_m65c102_rom[0x081] = 'o'; + m_r65c102_rom[0x06f] = '6'; + m_r65c102_rom[0x070] = '4'; + m_r65c102_rom[0x071] = 'M'; + m_r65c102_rom[0x072] = 'H'; + m_r65c102_rom[0x073] = 'z'; + m_r65c102_rom[0x074] = ' '; + m_r65c102_rom[0x075] = '6'; + m_r65c102_rom[0x076] = '5'; + m_r65c102_rom[0x077] = 'C'; + m_r65c102_rom[0x078] = '1'; + m_r65c102_rom[0x079] = '0'; + m_r65c102_rom[0x07a] = '2'; + m_r65c102_rom[0x07b] = ' '; + m_r65c102_rom[0x07c] = 'C'; + m_r65c102_rom[0x07d] = 'o'; + m_r65c102_rom[0x07e] = '-'; + m_r65c102_rom[0x07f] = 'P'; + m_r65c102_rom[0x080] = 'r'; + m_r65c102_rom[0x081] = 'o'; break; } } @@ -872,7 +872,7 @@ void bbc_tube_matchbox_device::pnmi_w(int state) switch (m_copro) { case 0x00: case 0x01: case 0x02: case 0x03: - m_m65c102->set_input_line(M65C02_NMI_LINE, state); + m_r65c102->set_input_line(R65C02_NMI_LINE, state); break; case 0x04: case 0x05: case 0x06: case 0x07: m_z80->set_input_line(INPUT_LINE_NMI, state); @@ -904,7 +904,7 @@ void bbc_tube_matchbox_device::pirq_w(int state) switch (m_copro) { case 0x00: case 0x01: case 0x02: case 0x03: - m_m65c102->set_input_line(M65C02_IRQ_LINE, state); + m_r65c102->set_input_line(R65C02_IRQ_LINE, state); break; case 0x04: case 0x05: case 0x06: case 0x07: m_z80->set_input_line(INPUT_LINE_IRQ0, state); @@ -943,12 +943,12 @@ void bbc_tube_matchbox_device::prst_w(int state) // 65C102 //------------------------------------------------- -void bbc_tube_matchbox_device::m65c102_bank_w(offs_t offset, uint8_t data) +void bbc_tube_matchbox_device::r65c102_bank_w(offs_t offset, uint8_t data) { if (BIT(data, 7)) - m_m65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x7f) * 0x2000 + 0x100000); // external RAM + m_r65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x7f) * 0x2000 + 0x100000); // external RAM else - m_m65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x07) * 0x2000); // internal RAM + m_r65c102_bank[offset & 7]->set_base(m_ram->pointer() + (data & 0x07) * 0x2000); // internal RAM } diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index c660cc6f393..2009a80d223 100644 --- a/src/devices/bus/econet/e01.cpp +++ b/src/devices/bus/econet/e01.cpp @@ -245,7 +245,7 @@ void econet_e01_device::e01_mem(address_map &map) void econet_e01_device::device_add_mconfig(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, XTAL(8'000'000)/4); // Rockwell R65C102P3 + R65C102(config, m_maincpu, XTAL(8'000'000)/4); // Rockwell R65C102P3 m_maincpu->set_addrmap(AS_PROGRAM, &econet_e01_device::e01_mem); MC146818(config, m_rtc, 32.768_kHz_XTAL); diff --git a/src/devices/bus/econet/e01.h b/src/devices/bus/econet/e01.h index e99d99c1056..10d556e7700 100644 --- a/src/devices/bus/econet/e01.h +++ b/src/devices/bus/econet/e01.h @@ -14,7 +14,7 @@ #include "econet.h" #include "bus/centronics/ctronics.h" #include "bus/scsi/scsi.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/r65c02.h" #include "imagedev/floppy.h" #include "machine/6522via.h" #include "machine/buffer.h" @@ -81,7 +81,7 @@ class econet_e01_device : public device_t, static void floppy_formats_afs(format_registration &fr); - required_device m_maincpu; + required_device m_maincpu; required_device m_fdc; required_device m_adlc; required_device m_rtc; diff --git a/src/devices/cpu/m6502/r65c02.cpp b/src/devices/cpu/m6502/r65c02.cpp index 80187c5fb83..089d1d56c97 100644 --- a/src/devices/cpu/m6502/r65c02.cpp +++ b/src/devices/cpu/m6502/r65c02.cpp @@ -6,6 +6,9 @@ Rockwell 65c02, CMOS variant with bitwise instructions + TODO: + - are any of the CPU subtype differences meaningful to MAME? + ***************************************************************************/ #include "emu.h" @@ -13,14 +16,26 @@ #include "r65c02d.h" DEFINE_DEVICE_TYPE(R65C02, r65c02_device, "r65c02", "Rockwell R65C02") +DEFINE_DEVICE_TYPE(R65C102, r65c102_device, "r65c102", "Rockwell R65C102") +DEFINE_DEVICE_TYPE(R65C112, r65c112_device, "r65c112", "Rockwell R65C112") + +r65c02_device::r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + m65c02_device(mconfig, type, tag, owner, clock) +{ +} r65c02_device::r65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : r65c02_device(mconfig, R65C02, tag, owner, clock) { } -r65c02_device::r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock) +r65c102_device::r65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, R65C102, tag, owner, clock) +{ +} + +r65c112_device::r65c112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, R65C112, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/r65c02.h b/src/devices/cpu/m6502/r65c02.h index a28ccd9d932..2e929652757 100644 --- a/src/devices/cpu/m6502/r65c02.h +++ b/src/devices/cpu/m6502/r65c02.h @@ -25,6 +25,16 @@ class r65c02_device : public m65c02_device { r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); }; +class r65c102_device : public r65c02_device { +public: + r65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class r65c112_device : public r65c02_device { +public: + r65c112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + enum { R65C02_IRQ_LINE = m6502_device::IRQ_LINE, R65C02_NMI_LINE = m6502_device::NMI_LINE, @@ -32,5 +42,7 @@ enum { }; DECLARE_DEVICE_TYPE(R65C02, r65c02_device) +DECLARE_DEVICE_TYPE(R65C102, r65c102_device) +DECLARE_DEVICE_TYPE(R65C112, r65c112_device) #endif // MAME_CPU_M6502_R65C02_H From 0ad1767ea3df4ffabb59229a6534fc5c446243c7 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 14:40:17 +0100 Subject: [PATCH 07/40] dec0,dec8: correct audiocpu type --- src/devices/cpu/m6502/r65c02.cpp | 1 + src/mame/dataeast/dec0.cpp | 6 +++--- src/mame/dataeast/dec8.cpp | 22 +++++++++++----------- src/mame/dataeast/dec8.h | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/devices/cpu/m6502/r65c02.cpp b/src/devices/cpu/m6502/r65c02.cpp index 089d1d56c97..d9e665d7e4c 100644 --- a/src/devices/cpu/m6502/r65c02.cpp +++ b/src/devices/cpu/m6502/r65c02.cpp @@ -5,6 +5,7 @@ r65c02.cpp Rockwell 65c02, CMOS variant with bitwise instructions + Also licensed to Ricoh, who sold it as RP65C02. TODO: - are any of the CPU subtype differences meaningful to MAME? diff --git a/src/mame/dataeast/dec0.cpp b/src/mame/dataeast/dec0.cpp index e855d482531..2878fc9ce8a 100644 --- a/src/mame/dataeast/dec0.cpp +++ b/src/mame/dataeast/dec0.cpp @@ -370,7 +370,7 @@ DE-0323-4 #include "dec0.h" #include "cpu/m68000/m68000.h" -#include "cpu/m6502/m6502.h" +#include "cpu/m6502/r65c02.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m68705.h" #include "machine/input_merger.h" @@ -1826,7 +1826,7 @@ void dec0_state::dec0(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_map); m_maincpu->set_vblank_int("screen", FUNC(dec0_state::irq6_line_assert)); /* VBL */ - M6502(config, m_audiocpu, XTAL(12'000'000) / 8); + R65C02(config, m_audiocpu, XTAL(12'000'000) / 8); m_audiocpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_s_map); input_merger_device &audio_irq(INPUT_MERGER_ANY_HIGH(config, "audio_irq")); @@ -2289,7 +2289,7 @@ void dec0_state::midresb(machine_config &config) midres(config); m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::midresb_map); - M6502(config.replace(), m_audiocpu, 1500000); + R65C02(config.replace(), m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_s_map); M68705R3(config, m_mcu, XTAL(3'579'545)); diff --git a/src/mame/dataeast/dec8.cpp b/src/mame/dataeast/dec8.cpp index d02c8659a9b..a3e0570ccba 100644 --- a/src/mame/dataeast/dec8.cpp +++ b/src/mame/dataeast/dec8.cpp @@ -44,7 +44,7 @@ To do: #include "emu.h" #include "dec8.h" -#include "cpu/m6502/m6502.h" +#include "cpu/m6502/r65c02.h" #include "cpu/m6809/hd6309.h" #include "cpu/m6809/m6809.h" #include "deco222.h" @@ -200,7 +200,7 @@ void dec8_state_base::sound_w(u8 data) { m_soundlatch->write(data); m_audiocpu->set_input_line(m6502_device::NMI_LINE, ASSERT_LINE); - m_m6502_timer->adjust(m_audiocpu->cycles_to_attotime(3)); + m_6502_timer->adjust(m_audiocpu->cycles_to_attotime(3)); } void csilver_state::adpcm_int(int state) @@ -1797,7 +1797,7 @@ void dec8_state_base::machine_start() uint32_t max_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; m_mainbank->configure_entries(0, max_bank, &ROM[0x10000], 0x4000); - m_m6502_timer = timer_alloc(FUNC(dec8_state_base::audiocpu_nmi_clear), this); + m_6502_timer = timer_alloc(FUNC(dec8_state_base::audiocpu_nmi_clear), this); save_item(NAME(m_coin_state)); @@ -1885,7 +1885,7 @@ void lastmisn_state::lastmisn(machine_config &config) MC6809E(config, m_subcpu, 2000000); m_subcpu->set_addrmap(AS_PROGRAM, &lastmisn_state::lastmisn_sub_map); - M6502(config, m_audiocpu, 1500000); + R65C02(config, m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); /* NMIs are caused by the main CPU */ I8751(config, m_mcu, XTAL(8'000'000)); @@ -1944,7 +1944,7 @@ void lastmisn_state::shackled(machine_config &config) MC6809E(config, m_subcpu, 2000000); m_subcpu->set_addrmap(AS_PROGRAM, &lastmisn_state::shackled_sub_map); - M6502(config, m_audiocpu, 1500000); + R65C02(config, m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); /* NMIs are caused by the main CPU */ I8751(config, m_mcu, XTAL(8'000'000)); @@ -2001,7 +2001,7 @@ void gondo_state::gondo(machine_config &config) HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */ m_maincpu->set_addrmap(AS_PROGRAM, &gondo_state::gondo_map); - M6502(config, m_audiocpu, 1500000); + R65C02(config, m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &gondo_state::oscar_s_map); /* NMIs are caused by the main CPU */ I8751(config, m_mcu, XTAL(8'000'000)); @@ -2056,7 +2056,7 @@ void lastmisn_state::garyoret(machine_config &config) HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */ m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::garyoret_map); - M6502(config, m_audiocpu, 1500000); + R65C02(config, m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::oscar_s_map); /* NMIs are caused by the main CPU */ I8751(config, m_mcu, XTAL(8'000'000)); @@ -2168,7 +2168,7 @@ void lastmisn_state::ghostb(machine_config &config) void lastmisn_state::meikyuh(machine_config &config) { ghostb(config); - M6502(config.replace(), m_audiocpu, 1500000); + R65C02(config.replace(), m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::dec8_s_map); } @@ -2182,7 +2182,7 @@ void csilver_state::csilver(machine_config &config) MC6809E(config, m_subcpu, XTAL(12'000'000)/8); /* verified on pcb */ m_subcpu->set_addrmap(AS_PROGRAM, &csilver_state::sub_map); - M6502(config, m_audiocpu, XTAL(12'000'000)/8); /* verified on pcb */ + R65C02(config, m_audiocpu, XTAL(12'000'000)/8); /* verified on pcb */ m_audiocpu->set_addrmap(AS_PROGRAM, &csilver_state::sound_map); /* NMIs are caused by the main CPU */ config.set_maximum_quantum(attotime::from_hz(6000)); @@ -2299,7 +2299,7 @@ void oscar_state::oscarbl(machine_config &config) { oscar(config); - M6502(config.replace(), m_audiocpu, XTAL(12'000'000)/8); + R65C02(config.replace(), m_audiocpu, XTAL(12'000'000)/8); m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); /* NMIs are caused by the main CPU */ m_audiocpu->set_addrmap(AS_OPCODES, &oscar_state::oscarbl_s_opcodes_map); } @@ -2359,7 +2359,7 @@ void oscar_state::cobracom(machine_config &config) MC6809E(config, m_maincpu, 2000000); /* MC68B09EP */ m_maincpu->set_addrmap(AS_PROGRAM, &oscar_state::cobra_map); - M6502(config, m_audiocpu, 1500000); + R65C02(config, m_audiocpu, 1500000); m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::dec8_s_map); /* NMIs are caused by the main CPU */ /* video hardware */ diff --git a/src/mame/dataeast/dec8.h b/src/mame/dataeast/dec8.h index 9e81437dc6d..01ba23a6df1 100644 --- a/src/mame/dataeast/dec8.h +++ b/src/mame/dataeast/dec8.h @@ -92,7 +92,7 @@ class dec8_state_base : public driver_device /* misc */ bool m_coin_state = false; - emu_timer *m_m6502_timer = nullptr; + emu_timer *m_6502_timer = nullptr; }; // with I8751 MCU From af66ca419ba7092cd791e49ef681567955b8fd2f Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 15:21:05 +0100 Subject: [PATCH 08/40] m6502: rename m65c02 to w65c02 as well --- scripts/src/cpu.lua | 18 +++++------ src/devices/bus/a2bus/a2superdrive.cpp | 17 +++++----- src/devices/bus/a2bus/transwarp.cpp | 10 +++--- src/devices/bus/bbc/tube/tube_6502.cpp | 4 +-- src/devices/bus/bbc/tube/tube_rc6502.cpp | 4 +-- src/devices/bus/cbmiec/fd2000.cpp | 2 +- src/devices/bus/cbmiec/fd2000.h | 4 +-- src/devices/bus/cbmiec/serialbox.cpp | 2 +- src/devices/bus/cbmiec/serialbox.h | 4 +-- .../cpu/m6502/{dm65c02.lst => dw65c02.lst} | 2 +- src/devices/cpu/m6502/gew12.cpp | 10 +++--- src/devices/cpu/m6502/gew12.h | 6 ++-- src/devices/cpu/m6502/gew7.cpp | 10 +++--- src/devices/cpu/m6502/gew7.h | 6 ++-- src/devices/cpu/m6502/m6502.txt | 4 +-- src/devices/cpu/m6502/m65ce02.cpp | 6 ++-- src/devices/cpu/m6502/m65ce02.h | 4 +-- .../cpu/m6502/{om65c02.lst => ow65c02.lst} | 2 +- src/devices/cpu/m6502/r65c02.cpp | 2 +- src/devices/cpu/m6502/r65c02.h | 4 +-- .../cpu/m6502/{m65c02.cpp => w65c02.cpp} | 20 ++++++------ src/devices/cpu/m6502/{m65c02.h => w65c02.h} | 22 ++++++------- .../cpu/m6502/{m65c02d.cpp => w65c02d.cpp} | 10 +++--- .../cpu/m6502/{m65c02d.h => w65c02d.h} | 14 ++++---- src/devices/cpu/m6502/w65c02s.cpp | 2 +- src/devices/cpu/m6502/w65c02s.h | 4 +-- src/mame/apple/apple2e.cpp | 16 +++++----- src/mame/chess/conchess.cpp | 4 +-- src/mame/fidelity/desdis.cpp | 4 +-- src/mame/fidelity/elite.cpp | 1 - src/mame/funtech/supracan.cpp | 4 +-- src/mame/funworld/4roses.cpp | 4 +-- src/mame/hegenerglaser/academy.cpp | 4 +-- src/mame/hegenerglaser/modena.cpp | 4 +-- src/mame/hegenerglaser/montec.cpp | 4 +-- src/mame/hegenerglaser/polgar.cpp | 4 +-- src/mame/misc/rgum.cpp | 4 +-- src/mame/novag/sexpert.cpp | 6 ++-- src/mame/pinball/alvg.cpp | 6 ++-- src/mame/pinball/gts3.cpp | 17 +++------- src/mame/pinball/gts3a.cpp | 25 ++++++--------- src/mame/saitek/corona.cpp | 4 +-- src/mame/saitek/simultano.cpp | 4 +-- src/mame/saitek/stratos.cpp | 4 +-- src/mame/seta/downtown.cpp | 32 +++++++++---------- src/mame/svision/svision.cpp | 6 ++-- src/mame/televideo/tv955.cpp | 4 +-- src/mame/tvgames/elan_eu3a05.cpp | 2 +- src/mame/yamaha/ympsr16.cpp | 4 +-- src/osd/modules/debugger/debuggdbstub.cpp | 2 +- src/tools/unidasm.cpp | 4 +-- 51 files changed, 175 insertions(+), 191 deletions(-) rename src/devices/cpu/m6502/{dm65c02.lst => dw65c02.lst} (99%) rename src/devices/cpu/m6502/{om65c02.lst => ow65c02.lst} (99%) rename src/devices/cpu/m6502/{m65c02.cpp => w65c02.cpp} (54%) rename src/devices/cpu/m6502/{m65c02.h => w65c02.h} (79%) rename src/devices/cpu/m6502/{m65c02d.cpp => w65c02d.cpp} (59%) rename src/devices/cpu/m6502/{m65c02d.h => w65c02d.h} (57%) diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index 1f14e6e6bff..014c27a25d3 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -1755,7 +1755,6 @@ end --@src/devices/cpu/m6502/m6510.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m6510t.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m65ce02.h,CPUS["M6502"] = true ---@src/devices/cpu/m6502/m65c02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m740.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m7501.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/m8502.h,CPUS["M6502"] = true @@ -1765,6 +1764,7 @@ end --@src/devices/cpu/m6502/st2xxx.h,CPUS["ST2XXX"] = true --@src/devices/cpu/m6502/st2204.h,CPUS["ST2XXX"] = true --@src/devices/cpu/m6502/st2205u.h,CPUS["ST2XXX"] = true +--@src/devices/cpu/m6502/w65c02.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/w65c02s.h,CPUS["M6502"] = true --@src/devices/cpu/m6502/xavix.h,CPUS["XAVIX"] = true --@src/devices/cpu/m6502/xavix.h,CPUS["XAVIX2000"] = true @@ -1809,8 +1809,6 @@ if CPUS["M6502"] then MAME_DIR .. "src/devices/cpu/m6502/m6510.h", MAME_DIR .. "src/devices/cpu/m6502/m6510t.cpp", MAME_DIR .. "src/devices/cpu/m6502/m6510t.h", - MAME_DIR .. "src/devices/cpu/m6502/m65c02.cpp", - MAME_DIR .. "src/devices/cpu/m6502/m65c02.h", MAME_DIR .. "src/devices/cpu/m6502/m65ce02.cpp", MAME_DIR .. "src/devices/cpu/m6502/m65ce02.h", MAME_DIR .. "src/devices/cpu/m6502/m740.cpp", @@ -1825,6 +1823,8 @@ if CPUS["M6502"] then MAME_DIR .. "src/devices/cpu/m6502/r65c19.h", MAME_DIR .. "src/devices/cpu/m6502/rp2a03.cpp", MAME_DIR .. "src/devices/cpu/m6502/rp2a03.h", + MAME_DIR .. "src/devices/cpu/m6502/w65c02.cpp", + MAME_DIR .. "src/devices/cpu/m6502/w65c02.h", MAME_DIR .. "src/devices/cpu/m6502/w65c02s.cpp", MAME_DIR .. "src/devices/cpu/m6502/w65c02s.h", } @@ -1833,7 +1833,6 @@ if CPUS["M6502"] then { MAME_DIR .. "src/devices/cpu/m6502/odeco16.lst", GEN_DIR .. "emu/cpu/m6502/deco16.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/ddeco16.lst" }, {"@echo Generating deco16 instruction source file...", PYTHON .. " $(1) s deco16 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om4510.lst", GEN_DIR .. "emu/cpu/m6502/m4510.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm4510.lst" }, {"@echo Generating m4510 instruction source file...", PYTHON .. " $(1) s m4510 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om6502.lst", GEN_DIR .. "emu/cpu/m6502/m6502.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6502.lst" }, {"@echo Generating m6502 instruction source file...", PYTHON .. " $(1) s m6502 $(<) $(2) $(@)" }}, - { MAME_DIR .. "src/devices/cpu/m6502/om65c02.lst", GEN_DIR .. "emu/cpu/m6502/m65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65c02.lst" }, {"@echo Generating m65c02 instruction source file...", PYTHON .. " $(1) s m65c02 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om65ce02.lst", GEN_DIR .. "emu/cpu/m6502/m65ce02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65ce02.lst" }, {"@echo Generating m65ce02 instruction source file...", PYTHON .. " $(1) s m65ce02 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om6509.lst", GEN_DIR .. "emu/cpu/m6502/m6509.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6509.lst" }, {"@echo Generating m6509 instruction source file...", PYTHON .. " $(1) s m6509 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/om6510.lst", GEN_DIR .. "emu/cpu/m6502/m6510.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6510.lst" }, {"@echo Generating m6510 instruction source file...", PYTHON .. " $(1) s m6510 $(<) $(2) $(@)" }}, @@ -1841,6 +1840,7 @@ if CPUS["M6502"] then { MAME_DIR .. "src/devices/cpu/m6502/dr65c02.lst", GEN_DIR .. "emu/cpu/m6502/r65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", }, {"@echo Generating r65c02 instruction source file...", PYTHON .. " $(1) s r65c02 - $(<) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/or65c19.lst", GEN_DIR .. "emu/cpu/m6502/r65c19.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dr65c19.lst" }, {"@echo Generating r65c19 instruction source file...", PYTHON .. " $(1) s r65c19 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/orp2a03.lst", GEN_DIR .. "emu/cpu/m6502/rp2a03.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/drp2a03.lst" }, {"@echo Generating rp2a03 instruction source file...", PYTHON .. " $(1) s rp2a03_core $(<) $(2) $(@)" }}, + { MAME_DIR .. "src/devices/cpu/m6502/ow65c02.lst", GEN_DIR .. "emu/cpu/m6502/w65c02.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dw65c02.lst" }, {"@echo Generating w65c02 instruction source file...", PYTHON .. " $(1) s w65c02 $(<) $(2) $(@)" }}, { MAME_DIR .. "src/devices/cpu/m6502/ow65c02s.lst", GEN_DIR .. "emu/cpu/m6502/w65c02s.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dw65c02s.lst" }, {"@echo Generating w65c02s instruction source file...", PYTHON .. " $(1) s w65c02s $(<) $(2) $(@)" }}, } @@ -1850,12 +1850,12 @@ if CPUS["M6502"] then { MAME_DIR .. "src/devices/cpu/m6502/m6502.cpp", GEN_DIR .. "emu/cpu/m6502/m6502.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m6509.cpp", GEN_DIR .. "emu/cpu/m6502/m6509.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m6510.cpp", GEN_DIR .. "emu/cpu/m6502/m6510.hxx" }, - { MAME_DIR .. "src/devices/cpu/m6502/m65c02.cpp", GEN_DIR .. "emu/cpu/m6502/m65c02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m65ce02.cpp", GEN_DIR .. "emu/cpu/m6502/m65ce02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/m740.cpp", GEN_DIR .. "emu/cpu/m6502/m740.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/r65c02.cpp", GEN_DIR .. "emu/cpu/m6502/r65c02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/r65c19.cpp", GEN_DIR .. "emu/cpu/m6502/r65c19.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/rp2a03.cpp", GEN_DIR .. "emu/cpu/m6502/rp2a03.hxx" }, + { MAME_DIR .. "src/devices/cpu/m6502/w65c02.cpp", GEN_DIR .. "emu/cpu/m6502/w65c02.hxx" }, { MAME_DIR .. "src/devices/cpu/m6502/w65c02s.cpp", GEN_DIR .. "emu/cpu/m6502/w65c02s.hxx" }, } end @@ -1905,7 +1905,6 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/odeco16.lst", GEN_DIR .. "emu/cpu/m6502/deco16d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/ddeco16.lst" }, {"@echo Generating deco16 disassembler source file...", PYTHON .. " $(1) d deco16 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om4510.lst", GEN_DIR .. "emu/cpu/m6502/m4510d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm4510.lst" }, {"@echo Generating m4510 disassembler source file...", PYTHON .. " $(1) d m4510 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om6502.lst", GEN_DIR .. "emu/cpu/m6502/m6502d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6502.lst" }, {"@echo Generating m6502 disassembler source file...", PYTHON .. " $(1) d m6502 $(<) $(2) $(@)" }}) - table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om65c02.lst", GEN_DIR .. "emu/cpu/m6502/m65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65c02.lst" }, {"@echo Generating m65c02 disassembler source file...", PYTHON .. " $(1) d m65c02 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om65ce02.lst", GEN_DIR .. "emu/cpu/m6502/m65ce02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm65ce02.lst" }, {"@echo Generating m65ce02 disassembler source file...", PYTHON .. " $(1) d m65ce02 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om6509.lst", GEN_DIR .. "emu/cpu/m6502/m6509d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6509.lst" }, {"@echo Generating m6509 disassembler source file...", PYTHON .. " $(1) d m6509 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/om6510.lst", GEN_DIR .. "emu/cpu/m6502/m6510d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dm6510.lst" }, {"@echo Generating m6510 disassembler source file...", PYTHON .. " $(1) d m6510 $(<) $(2) $(@)" }}) @@ -1913,18 +1912,19 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/dr65c02.lst", GEN_DIR .. "emu/cpu/m6502/r65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", }, {"@echo Generating r65c02 disassembler source file...", PYTHON .. " $(1) d r65c02 - $(<) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/or65c19.lst", GEN_DIR .. "emu/cpu/m6502/r65c19d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dr65c19.lst" }, {"@echo Generating r65c19 disassembler source file...", PYTHON .. " $(1) d r65c19 $(<) $(2) $(@)" }}) table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/orp2a03.lst", GEN_DIR .. "emu/cpu/m6502/rp2a03d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/drp2a03.lst" }, {"@echo Generating rp2a03 disassembler source file...", PYTHON .. " $(1) d rp2a03 $(<) $(2) $(@)" }}) + table.insert(disasm_custombuildtask, { MAME_DIR .. "src/devices/cpu/m6502/ow65c02.lst", GEN_DIR .. "emu/cpu/m6502/w65c02d.hxx", { MAME_DIR .. "src/devices/cpu/m6502/m6502make.py", MAME_DIR .. "src/devices/cpu/m6502/dw65c02.lst" }, {"@echo Generating w65c02 disassembler source file...", PYTHON .. " $(1) d w65c02 $(<) $(2) $(@)" }}) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/deco16d.cpp", GEN_DIR .. "emu/cpu/m6502/deco16d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m4510d.cpp", GEN_DIR .. "emu/cpu/m6502/m4510d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6502d.cpp", GEN_DIR .. "emu/cpu/m6502/m6502d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6509d.cpp", GEN_DIR .. "emu/cpu/m6502/m6509d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m6510d.cpp", GEN_DIR .. "emu/cpu/m6502/m6510d.hxx" }) - table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/m65c02d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m65ce02d.cpp", GEN_DIR .. "emu/cpu/m6502/m65ce02d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/m740d.cpp", GEN_DIR .. "emu/cpu/m6502/m740d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/r65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/r65c02d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/r65c19d.cpp", GEN_DIR .. "emu/cpu/m6502/r65c19d.hxx" }) table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/rp2a03d.cpp", GEN_DIR .. "emu/cpu/m6502/rp2a03d.hxx" }) + table.insert(disasm_dependency, { MAME_DIR .. "src/devices/cpu/m6502/w65c02d.cpp", GEN_DIR .. "emu/cpu/m6502/w65c02d.hxx" }) table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/deco16d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/deco16d.h") @@ -1936,8 +1936,6 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m6509d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m6510d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m6510d.h") - table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65c02d.cpp") - table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65c02d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65ce02d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m65ce02d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/m740d.cpp") @@ -1948,6 +1946,8 @@ if opt_tool(CPUS, "M6502") then table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/r65c19d.h") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/rp2a03d.cpp") table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/rp2a03d.h") + table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/w65c02d.cpp") + table.insert(disasm_files, MAME_DIR .. "src/devices/cpu/m6502/w65c02d.h") end if opt_tool(CPUS, "XAVIX") then diff --git a/src/devices/bus/a2bus/a2superdrive.cpp b/src/devices/bus/a2bus/a2superdrive.cpp index f9ce022a672..922c9bc0403 100644 --- a/src/devices/bus/a2bus/a2superdrive.cpp +++ b/src/devices/bus/a2bus/a2superdrive.cpp @@ -74,11 +74,10 @@ class a2bus_superdrive_device: virtual void write_c800(uint16_t offset, uint8_t data) override; private: + void w65c02_mem(address_map &map) ATTR_COLD; - void m65c02_mem(address_map &map) ATTR_COLD; - - void m65c02_w(offs_t offset, uint8_t value); - uint8_t m65c02_r(offs_t offset); + void w65c02_w(offs_t offset, uint8_t value); + uint8_t w65c02_r(offs_t offset); void phases_w(uint8_t phases); void sel35_w(int sel35); @@ -111,10 +110,10 @@ const tiny_rom_entry *a2bus_superdrive_device::device_rom_region() const return ROM_NAME( superdrive ); } -void a2bus_superdrive_device::m65c02_mem(address_map &map) +void a2bus_superdrive_device::w65c02_mem(address_map &map) { map(0x0000, 0x7fff).ram().share(m_ram); - map(0x0a00, 0x0aff).rw(FUNC(a2bus_superdrive_device::m65c02_r), FUNC(a2bus_superdrive_device::m65c02_w)); + map(0x0a00, 0x0aff).rw(FUNC(a2bus_superdrive_device::w65c02_r), FUNC(a2bus_superdrive_device::w65c02_w)); map(0x8000, 0xffff).rom().region(SUPERDRIVE_ROM_REGION, 0x0000); } @@ -123,7 +122,7 @@ void a2bus_superdrive_device::device_add_mconfig(machine_config &config) { W65C02S(config, m_65c02, DERIVED_CLOCK(2, 7)); /* ~ 2.046 MHz */ - m_65c02->set_addrmap(AS_PROGRAM, &a2bus_superdrive_device::m65c02_mem); + m_65c02->set_addrmap(AS_PROGRAM, &a2bus_superdrive_device::w65c02_mem); SWIM1(config, m_fdc, C16M); @@ -221,7 +220,7 @@ void a2bus_superdrive_device::write_c800(uint16_t offset, uint8_t data) /* uc 65c02 i/o at $0a00 */ -void a2bus_superdrive_device::m65c02_w(offs_t offset, uint8_t value) +void a2bus_superdrive_device::w65c02_w(offs_t offset, uint8_t value) { // $00-$0f = swim registers // $40 = head sel low @@ -265,7 +264,7 @@ void a2bus_superdrive_device::m65c02_w(offs_t offset, uint8_t value) } } -uint8_t a2bus_superdrive_device::m65c02_r(offs_t offset) +uint8_t a2bus_superdrive_device::w65c02_r(offs_t offset) { floppy_image_device *floppy = nullptr; diff --git a/src/devices/bus/a2bus/transwarp.cpp b/src/devices/bus/a2bus/transwarp.cpp index da737f84e2f..34b3a3305b9 100644 --- a/src/devices/bus/a2bus/transwarp.cpp +++ b/src/devices/bus/a2bus/transwarp.cpp @@ -22,7 +22,7 @@ #include "emu.h" #include "transwarp.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" //************************************************************************** @@ -65,7 +65,7 @@ class a2bus_transwarp_device: uint8_t dma_r(offs_t offset); void dma_w(offs_t offset, uint8_t data); - void m65c02_mem(address_map &map) ATTR_COLD; + void w65c02_mem(address_map &map) ATTR_COLD; void hit_slot(int slot); void hit_slot_joy(); @@ -77,7 +77,7 @@ class a2bus_transwarp_device: DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_TRANSWARP, device_a2bus_card_interface, a2bus_transwarp_device, "a2twarp", "Applied Engineering TransWarp") -void a2bus_transwarp_device::m65c02_mem(address_map &map) +void a2bus_transwarp_device::w65c02_mem(address_map &map) { map(0x0000, 0xffff).rw(FUNC(a2bus_transwarp_device::dma_r), FUNC(a2bus_transwarp_device::dma_w)); } @@ -169,8 +169,8 @@ ioport_constructor a2bus_transwarp_device::device_input_ports() const void a2bus_transwarp_device::device_add_mconfig(machine_config &config) { - M65C02(config, m_ourcpu, DERIVED_CLOCK(1, 2)); - m_ourcpu->set_addrmap(AS_PROGRAM, &a2bus_transwarp_device::m65c02_mem); + W65C02(config, m_ourcpu, DERIVED_CLOCK(1, 2)); + m_ourcpu->set_addrmap(AS_PROGRAM, &a2bus_transwarp_device::w65c02_mem); } //************************************************************************** diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index dcca3ba692e..732fd38775a 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -134,8 +134,8 @@ void bbc_tube_6502_device::device_add_mconfig(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem); TUBE(config, m_ula); - m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE); - m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE); + m_ula->pnmi_handler().set_inputline(m_maincpu, G65SC02_NMI_LINE); + m_ula->pirq_handler().set_inputline(m_maincpu, G65SC02_IRQ_LINE); m_ula->prst_handler().set(FUNC(bbc_tube_6502_device::prst_w)); RAM(config, m_ram).set_default_size("64K").set_default_value(0); diff --git a/src/devices/bus/bbc/tube/tube_rc6502.cpp b/src/devices/bus/bbc/tube/tube_rc6502.cpp index 85f3fce1f11..70a0d1ea2d1 100644 --- a/src/devices/bus/bbc/tube/tube_rc6502.cpp +++ b/src/devices/bus/bbc/tube/tube_rc6502.cpp @@ -135,8 +135,8 @@ void bbc_tube_rc6502_device::device_add_mconfig(machine_config &config) add_common_devices(config); TUBE(config, m_ula); - m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE); - m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE); + m_ula->pnmi_handler().set_inputline(m_maincpu, W65C02_NMI_LINE); + m_ula->pirq_handler().set_inputline(m_maincpu, W65C02_IRQ_LINE); m_ula->prst_handler().set(FUNC(bbc_tube_rc6502_device::prst_w)); } diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp index 4b4834271a1..91b3cc9ae44 100644 --- a/src/devices/bus/cbmiec/fd2000.cpp +++ b/src/devices/bus/cbmiec/fd2000.cpp @@ -219,7 +219,7 @@ void fd2000_device::floppy_formats(format_registration &fr) void fd2000_device::add_common_devices(machine_config &config) { - M65C02(config, m_maincpu, 24_MHz_XTAL / 12); + W65C02(config, m_maincpu, 24_MHz_XTAL / 12); via6522_device &via(R65C22(config, G65SC22P2_TAG, 24_MHz_XTAL / 12)); via.readpa_handler().set(FUNC(fd2000_device::via_pa_r)); diff --git a/src/devices/bus/cbmiec/fd2000.h b/src/devices/bus/cbmiec/fd2000.h index 04ac1264f79..d632e77c11f 100644 --- a/src/devices/bus/cbmiec/fd2000.h +++ b/src/devices/bus/cbmiec/fd2000.h @@ -12,7 +12,7 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "imagedev/floppy.h" #include "machine/6522via.h" #include "machine/upd765.h" @@ -58,7 +58,7 @@ class fd2000_device : public device_t, void add_common_devices(machine_config &config); - required_device m_maincpu; + required_device m_maincpu; required_device m_fdc; required_device m_floppy0; diff --git a/src/devices/bus/cbmiec/serialbox.cpp b/src/devices/bus/cbmiec/serialbox.cpp index 9d9dcc114cf..950cf46b964 100644 --- a/src/devices/bus/cbmiec/serialbox.cpp +++ b/src/devices/bus/cbmiec/serialbox.cpp @@ -71,7 +71,7 @@ void cbm_serial_box_device::serial_box_mem(address_map &map) void cbm_serial_box_device::device_add_mconfig(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000)/4); + W65C02(config, m_maincpu, XTAL(4'000'000)/4); m_maincpu->set_addrmap(AS_PROGRAM, &cbm_serial_box_device::serial_box_mem); } diff --git a/src/devices/bus/cbmiec/serialbox.h b/src/devices/bus/cbmiec/serialbox.h index 4b51d5752ef..268013ffb45 100644 --- a/src/devices/bus/cbmiec/serialbox.h +++ b/src/devices/bus/cbmiec/serialbox.h @@ -12,7 +12,7 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" @@ -43,7 +43,7 @@ class cbm_serial_box_device : public device_t, public device_cbm_iec_interface void cbm_iec_reset(int state) override; private: - required_device m_maincpu; + required_device m_maincpu; void serial_box_mem(address_map &map) ATTR_COLD; }; diff --git a/src/devices/cpu/m6502/dm65c02.lst b/src/devices/cpu/m6502/dw65c02.lst similarity index 99% rename from src/devices/cpu/m6502/dm65c02.lst rename to src/devices/cpu/m6502/dw65c02.lst index cb76456593b..d253cfa2774 100644 --- a/src/devices/cpu/m6502/dm65c02.lst +++ b/src/devices/cpu/m6502/dw65c02.lst @@ -1,6 +1,6 @@ # license:BSD-3-Clause # copyright-holders:Olivier Galibert -# m65c02 +# w65c02 brk_c_imp ora_idx nop_imm nop_c_imp tsb_zpg ora_zpg asl_c_zpg nop_c_imp php_imp ora_imm asl_acc nop_c_imp tsb_aba ora_aba asl_c_aba nop_c_imp bpl_rel ora_idy ora_zpi nop_c_imp trb_zpg ora_zpx asl_c_zpx nop_c_imp clc_imp ora_aby inc_acc nop_c_imp trb_aba ora_abx asl_c_abx nop_c_imp jsr_adr and_idx nop_imm nop_c_imp bit_zpg and_zpg rol_c_zpg nop_c_imp plp_imp and_imm rol_acc nop_c_imp bit_aba and_aba rol_c_aba nop_c_imp diff --git a/src/devices/cpu/m6502/gew12.cpp b/src/devices/cpu/m6502/gew12.cpp index b087b18f43d..2459bb13517 100644 --- a/src/devices/cpu/m6502/gew12.cpp +++ b/src/devices/cpu/m6502/gew12.cpp @@ -19,7 +19,7 @@ DEFINE_DEVICE_TYPE(GEW12, gew12_device, "gew12", "Yamaha YMW728-F (GEW12)") gew12_device::gew12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : m6502_mcu_device_base(mconfig, GEW12, tag, owner, clock) + : m6502_mcu_device_base(mconfig, GEW12, tag, owner, clock) , device_mixer_interface(mconfig, *this, 2) , m_in_cb(*this, 0xff), m_out_cb(*this) , m_rom(*this, DEVICE_SELF) @@ -36,7 +36,7 @@ void gew12_device::device_add_mconfig(machine_config &config) void gew12_device::device_start() { - m65c02_device::device_start(); + w65c02_device::device_start(); m_bank_mask = device_generic_cart_interface::map_non_power_of_two( unsigned(m_rom->bytes() >> 14), @@ -61,7 +61,7 @@ void gew12_device::device_start() void gew12_device::device_reset() { - m6502_mcu_device_base::device_reset(); + m6502_mcu_device_base::device_reset(); internal_update(); m_irq_pending = 0; @@ -142,9 +142,9 @@ void gew12_device::internal_irq(int num, int state) void gew12_device::irq_update() { if (m_irq_pending & m_irq_enable) - set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); + set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); else - set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); + set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); } diff --git a/src/devices/cpu/m6502/gew12.h b/src/devices/cpu/m6502/gew12.h index bc4f2a8ac59..101116c6903 100644 --- a/src/devices/cpu/m6502/gew12.h +++ b/src/devices/cpu/m6502/gew12.h @@ -11,9 +11,9 @@ #define MAME_CPU_M6502_GEW12_H #include "m6502mcu.h" -#include "m65c02.h" +#include "w65c02.h" -class gew12_device : public m6502_mcu_device_base, public device_mixer_interface { +class gew12_device : public m6502_mcu_device_base, public device_mixer_interface { public: gew12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -27,7 +27,7 @@ class gew12_device : public m6502_mcu_device_base, public device_ virtual void device_reset() override ATTR_COLD; virtual void internal_update(u64 current_time) override; - using m6502_mcu_device_base::internal_update; + using m6502_mcu_device_base::internal_update; enum { diff --git a/src/devices/cpu/m6502/gew7.cpp b/src/devices/cpu/m6502/gew7.cpp index 7fd85ad2538..2594a2166ef 100644 --- a/src/devices/cpu/m6502/gew7.cpp +++ b/src/devices/cpu/m6502/gew7.cpp @@ -19,7 +19,7 @@ DEFINE_DEVICE_TYPE(GEW7, gew7_device, "gew7", "Yamaha YMW270-F (GEW7)") gew7_device::gew7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : m6502_mcu_device_base(mconfig, GEW7, tag, owner, clock) + : m6502_mcu_device_base(mconfig, GEW7, tag, owner, clock) , device_mixer_interface(mconfig, *this, 2) , m_in_cb(*this, 0xff), m_out_cb(*this) , m_rom(*this, DEVICE_SELF) @@ -43,7 +43,7 @@ void gew7_device::device_add_mconfig(machine_config &config) void gew7_device::device_start() { - m6502_mcu_device_base::device_start(); + m6502_mcu_device_base::device_start(); m_bank_mask = device_generic_cart_interface::map_non_power_of_two( unsigned(m_rom->bytes() >> 14), @@ -68,7 +68,7 @@ void gew7_device::device_start() void gew7_device::device_reset() { - m6502_mcu_device_base::device_reset(); + m6502_mcu_device_base::device_reset(); internal_update(); m_timer_stat = m_timer_en = 0; @@ -117,7 +117,7 @@ void gew7_device::timer_stat_w(u8 data) m_timer_stat &= ~data; if (!(m_timer_stat & 3)) - set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); + set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); internal_update(); } @@ -165,7 +165,7 @@ u64 gew7_device::timer_update(int num, u64 current_time) if (elapsed > m_timer_count[num]) { m_timer_stat |= (1 << num); - set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); + set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } m_timer_count[num] -= elapsed; diff --git a/src/devices/cpu/m6502/gew7.h b/src/devices/cpu/m6502/gew7.h index 6a2a6de27eb..5c9a891559e 100644 --- a/src/devices/cpu/m6502/gew7.h +++ b/src/devices/cpu/m6502/gew7.h @@ -11,10 +11,10 @@ #define MAME_CPU_M6502_GEW7_H #include "m6502mcu.h" -#include "m65c02.h" +#include "w65c02.h" #include "sound/gew7.h" -class gew7_device : public m6502_mcu_device_base, public device_mixer_interface +class gew7_device : public m6502_mcu_device_base, public device_mixer_interface { public: gew7_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock); @@ -32,7 +32,7 @@ class gew7_device : public m6502_mcu_device_base, public device_m virtual void device_reset() override ATTR_COLD; virtual void internal_update(u64 current_time) override; - using m6502_mcu_device_base::internal_update; + using m6502_mcu_device_base::internal_update; u8 timer_stat_r(); void timer_stat_w(u8 data); diff --git a/src/devices/cpu/m6502/m6502.txt b/src/devices/cpu/m6502/m6502.txt index c774747a98a..2d4564ee0be 100644 --- a/src/devices/cpu/m6502/m6502.txt +++ b/src/devices/cpu/m6502/m6502.txt @@ -87,10 +87,10 @@ additional commands atari lynx bastian schicks bll integrated g65sc02 cpu core -no bbr bbs instructions, else m65c02 compatible +no bbr bbs instructions, else w65c02 compatible watara supervision -integrated m65c02 cpu core (or g65sc02 or m65ce02?) +integrated w65c02 cpu core (or g65sc02 or m65ce02?) gte65816 (nintendo snes) diff --git a/src/devices/cpu/m6502/m65ce02.cpp b/src/devices/cpu/m6502/m65ce02.cpp index a787eb9dcef..22e6bd5f3c5 100644 --- a/src/devices/cpu/m6502/m65ce02.cpp +++ b/src/devices/cpu/m6502/m65ce02.cpp @@ -20,7 +20,7 @@ m65ce02_device::m65ce02_device(const machine_config &mconfig, const char *tag, d } m65ce02_device::m65ce02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock), TMP3(0), Z(0), B(0) + w65c02_device(mconfig, type, tag, owner, clock), TMP3(0), Z(0), B(0) { } @@ -31,7 +31,7 @@ std::unique_ptr m65ce02_device::create_disassembler() void m65ce02_device::init() { - m65c02_device::init(); + w65c02_device::init(); state_add(M65CE02_Z, "Z", Z); state_add(M65CE02_B, "B", B).callimport().formatstr("%2s"); save_item(NAME(B)); @@ -51,7 +51,7 @@ void m65ce02_device::device_start() void m65ce02_device::device_reset() { - m65c02_device::device_reset(); + w65c02_device::device_reset(); Z = 0x00; B = 0x0000; } diff --git a/src/devices/cpu/m6502/m65ce02.h b/src/devices/cpu/m6502/m65ce02.h index 3cf488208a1..cf0a48e9a5b 100644 --- a/src/devices/cpu/m6502/m65ce02.h +++ b/src/devices/cpu/m6502/m65ce02.h @@ -12,9 +12,9 @@ #pragma once -#include "m65c02.h" +#include "w65c02.h" -class m65ce02_device : public m65c02_device { +class m65ce02_device : public w65c02_device { public: m65ce02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/om65c02.lst b/src/devices/cpu/m6502/ow65c02.lst similarity index 99% rename from src/devices/cpu/m6502/om65c02.lst rename to src/devices/cpu/m6502/ow65c02.lst index a3a0d1e6cde..d4debf9f1fc 100644 --- a/src/devices/cpu/m6502/om65c02.lst +++ b/src/devices/cpu/m6502/ow65c02.lst @@ -1,6 +1,6 @@ # license:BSD-3-Clause # copyright-holders:Olivier Galibert -# m65c02 opcodes +# w65c02 opcodes adc_c_aba TMP = read_pc(); diff --git a/src/devices/cpu/m6502/r65c02.cpp b/src/devices/cpu/m6502/r65c02.cpp index d9e665d7e4c..9dc65010c8c 100644 --- a/src/devices/cpu/m6502/r65c02.cpp +++ b/src/devices/cpu/m6502/r65c02.cpp @@ -21,7 +21,7 @@ DEFINE_DEVICE_TYPE(R65C102, r65c102_device, "r65c102", "Rockwell R65C102") DEFINE_DEVICE_TYPE(R65C112, r65c112_device, "r65c112", "Rockwell R65C112") r65c02_device::r65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock) + w65c02_device(mconfig, type, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/r65c02.h b/src/devices/cpu/m6502/r65c02.h index 2e929652757..2a98d4be6ec 100644 --- a/src/devices/cpu/m6502/r65c02.h +++ b/src/devices/cpu/m6502/r65c02.h @@ -11,9 +11,9 @@ #ifndef MAME_CPU_M6502_R65C02_H #define MAME_CPU_M6502_R65C02_H -#include "m65c02.h" +#include "w65c02.h" -class r65c02_device : public m65c02_device { +class r65c02_device : public w65c02_device { public: r65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/m65c02.cpp b/src/devices/cpu/m6502/w65c02.cpp similarity index 54% rename from src/devices/cpu/m6502/m65c02.cpp rename to src/devices/cpu/m6502/w65c02.cpp index e79380fe83d..c482b31d449 100644 --- a/src/devices/cpu/m6502/m65c02.cpp +++ b/src/devices/cpu/m6502/w65c02.cpp @@ -2,7 +2,7 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02.cpp + w65c02.cpp WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones) @@ -10,24 +10,24 @@ ***************************************************************************/ #include "emu.h" -#include "m65c02.h" -#include "m65c02d.h" +#include "w65c02.h" +#include "w65c02d.h" -DEFINE_DEVICE_TYPE(M65C02, m65c02_device, "m65c02", "WDC W65C02") +DEFINE_DEVICE_TYPE(W65C02, w65c02_device, "w65c02", "WDC W65C02") -m65c02_device::m65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - m6502_device(mconfig, M65C02, tag, owner, clock) +w65c02_device::w65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + m6502_device(mconfig, W65C02, tag, owner, clock) { } -m65c02_device::m65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : +w65c02_device::w65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : m6502_device(mconfig, type, tag, owner, clock) { } -std::unique_ptr m65c02_device::create_disassembler() +std::unique_ptr w65c02_device::create_disassembler() { - return std::make_unique(); + return std::make_unique(); } -#include "cpu/m6502/m65c02.hxx" +#include "cpu/m6502/w65c02.hxx" diff --git a/src/devices/cpu/m6502/m65c02.h b/src/devices/cpu/m6502/w65c02.h similarity index 79% rename from src/devices/cpu/m6502/m65c02.h rename to src/devices/cpu/m6502/w65c02.h index 5a89f301236..552565d4203 100644 --- a/src/devices/cpu/m6502/m65c02.h +++ b/src/devices/cpu/m6502/w65c02.h @@ -2,29 +2,29 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02.h + w65c02.h WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones) ***************************************************************************/ -#ifndef MAME_CPU_M6502_M65C02_H -#define MAME_CPU_M6502_M65C02_H +#ifndef MAME_CPU_M6502_W65C02_H +#define MAME_CPU_M6502_W65C02_H #pragma once #include "m6502.h" -class m65c02_device : public m6502_device { +class w65c02_device : public m6502_device { public: - m65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + w65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual std::unique_ptr create_disassembler() override; virtual void do_exec_full() override; virtual void do_exec_partial() override; protected: - m65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + w65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); #define O(o) void o ## _full(); void o ## _partial() @@ -67,11 +67,11 @@ class m65c02_device : public m6502_device { }; enum { - M65C02_IRQ_LINE = m6502_device::IRQ_LINE, - M65C02_NMI_LINE = m6502_device::NMI_LINE, - M65C02_SET_OVERFLOW = m6502_device::V_LINE + W65C02_IRQ_LINE = m6502_device::IRQ_LINE, + W65C02_NMI_LINE = m6502_device::NMI_LINE, + W65C02_SET_OVERFLOW = m6502_device::V_LINE }; -DECLARE_DEVICE_TYPE(M65C02, m65c02_device) +DECLARE_DEVICE_TYPE(W65C02, w65c02_device) -#endif // MAME_CPU_M6502_M65C02_H +#endif // MAME_CPU_M6502_W65C02_H diff --git a/src/devices/cpu/m6502/m65c02d.cpp b/src/devices/cpu/m6502/w65c02d.cpp similarity index 59% rename from src/devices/cpu/m6502/m65c02d.cpp rename to src/devices/cpu/m6502/w65c02d.cpp index 2c7b3b81fc3..919d2ddf6f5 100644 --- a/src/devices/cpu/m6502/m65c02d.cpp +++ b/src/devices/cpu/m6502/w65c02d.cpp @@ -2,17 +2,17 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02d.cpp + w65c02d.cpp - MOS Technology 6502, CMOS variant with some additional instructions + WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones), disassembler ***************************************************************************/ #include "emu.h" -#include "m65c02d.h" -#include "cpu/m6502/m65c02d.hxx" +#include "w65c02d.h" +#include "cpu/m6502/w65c02d.hxx" -m65c02_disassembler::m65c02_disassembler() : m6502_base_disassembler(disasm_entries) +w65c02_disassembler::w65c02_disassembler() : m6502_base_disassembler(disasm_entries) { } diff --git a/src/devices/cpu/m6502/m65c02d.h b/src/devices/cpu/m6502/w65c02d.h similarity index 57% rename from src/devices/cpu/m6502/m65c02d.h rename to src/devices/cpu/m6502/w65c02d.h index 77b134c4b95..1e9edec6a14 100644 --- a/src/devices/cpu/m6502/m65c02d.h +++ b/src/devices/cpu/m6502/w65c02d.h @@ -2,25 +2,25 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - m65c02d.h + w65c02d.h - MOS Technology 6502, CMOS variant with some additional instructions + WDC W65C02, CMOS variant with some additional instructions (but not the bitwise ones), disassembler ***************************************************************************/ -#ifndef MAME_CPU_M6502_M65C02D_H -#define MAME_CPU_M6502_M65C02D_H +#ifndef MAME_CPU_M6502_W65C02D_H +#define MAME_CPU_M6502_W65C02D_H #pragma once #include "m6502d.h" -class m65c02_disassembler : public m6502_base_disassembler +class w65c02_disassembler : public m6502_base_disassembler { public: - m65c02_disassembler(); - virtual ~m65c02_disassembler() = default; + w65c02_disassembler(); + virtual ~w65c02_disassembler() = default; private: static const disasm_entry disasm_entries[0x100]; diff --git a/src/devices/cpu/m6502/w65c02s.cpp b/src/devices/cpu/m6502/w65c02s.cpp index 171db777dc2..17c61bafc4e 100644 --- a/src/devices/cpu/m6502/w65c02s.cpp +++ b/src/devices/cpu/m6502/w65c02s.cpp @@ -21,7 +21,7 @@ w65c02s_device::w65c02s_device(const machine_config &mconfig, const char *tag, d } w65c02s_device::w65c02s_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - m65c02_device(mconfig, type, tag, owner, clock) + w65c02_device(mconfig, type, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/w65c02s.h b/src/devices/cpu/m6502/w65c02s.h index a5848f86e68..7a3da04bcd5 100644 --- a/src/devices/cpu/m6502/w65c02s.h +++ b/src/devices/cpu/m6502/w65c02s.h @@ -12,9 +12,9 @@ #ifndef MAME_CPU_M6502_W65C02S_H #define MAME_CPU_M6502_W65C02S_H -#include "m65c02.h" +#include "w65c02.h" -class w65c02s_device : public m65c02_device { +class w65c02s_device : public w65c02_device { public: w65c02s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/mame/apple/apple2e.cpp b/src/mame/apple/apple2e.cpp index 9a90dfe8353..dfea6c28acd 100644 --- a/src/mame/apple/apple2e.cpp +++ b/src/mame/apple/apple2e.cpp @@ -128,7 +128,7 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele #include "apple2common.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" #include "imagedev/cassette.h" @@ -4954,7 +4954,7 @@ void apple2e_state::apple2e_common(machine_config &config, bool enhanced, bool r /* basic machine hardware */ if (enhanced) { - M65C02(config, m_maincpu, 1021800); + W65C02(config, m_maincpu, 1021800); } else { @@ -5093,7 +5093,7 @@ void apple2e_state::spectred(machine_config &config) void apple2e_state::tk3000(machine_config &config) { apple2e(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::base_map); // z80_device &subcpu(Z80(config, "subcpu", 1021800)); // schematics are illegible on where the clock comes from, but it *seems* to be the same as the 65C02 clock @@ -5226,7 +5226,7 @@ void apple2e_state::apple2c_mem_pal(machine_config &config) void apple2e_state::laser128(machine_config &config) { apple2c(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::laser128_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5261,7 +5261,7 @@ void apple2e_state::laser128(machine_config &config) void apple2e_state::laser128o(machine_config &config) { apple2c(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::laser128_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5297,7 +5297,7 @@ void apple2e_state::laser128o(machine_config &config) void apple2e_state::laser128ex2(machine_config &config) { apple2c(config); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::laser128_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5334,7 +5334,7 @@ void apple2e_state::ace500(machine_config &config) apple2e_common(config, true, false); subdevice("flop_a2_orig")->set_filter("A2C"); // Filter list to compatible disks for this machine. - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::ace500_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); @@ -5376,7 +5376,7 @@ void apple2e_state::ace500(machine_config &config) void apple2e_state::ace2200(machine_config &config) { apple2e_common(config, false, false); - M65C02(config.replace(), m_maincpu, 1021800); + W65C02(config.replace(), m_maincpu, 1021800); m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::ace2200_map); m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline)); diff --git a/src/mame/chess/conchess.cpp b/src/mame/chess/conchess.cpp index 8185c89e4e8..05f858a33ca 100644 --- a/src/mame/chess/conchess.cpp +++ b/src/mame/chess/conchess.cpp @@ -67,8 +67,8 @@ is integrated. #include "bus/generic/carts.h" #include "bus/generic/slot.h" #include "cpu/m6502/m6502.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/sensorboard.h" #include "sound/beep.h" #include "video/pwm.h" @@ -299,7 +299,7 @@ void conchess_state::concvicp(machine_config &config) concams5(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 12.288_MHz_XTAL/2); + W65C02(config.replace(), m_maincpu, 12.288_MHz_XTAL/2); m_maincpu->set_addrmap(AS_PROGRAM, &conchess_state::main_map); const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x4000); diff --git a/src/mame/fidelity/desdis.cpp b/src/mame/fidelity/desdis.cpp index 227e155db0d..6655c8d2769 100644 --- a/src/mame/fidelity/desdis.cpp +++ b/src/mame/fidelity/desdis.cpp @@ -37,8 +37,8 @@ Designer Mach IV Master 2325 (model 6129) overview: #include "emu.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/m68000/m68000.h" #include "cpu/m68000/m68020.h" #include "machine/clock.h" @@ -286,7 +286,7 @@ INPUT_PORTS_END void desdis_state::fdes2100d(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6 + W65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6 m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map); auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz diff --git a/src/mame/fidelity/elite.cpp b/src/mame/fidelity/elite.cpp index a0684166201..6c57bca896a 100644 --- a/src/mame/fidelity/elite.cpp +++ b/src/mame/fidelity/elite.cpp @@ -82,7 +82,6 @@ alternate view (see video options). The EAG conversion is a cloneset of feag. #include "bus/generic/carts.h" #include "bus/generic/slot.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/i8255.h" diff --git a/src/mame/funtech/supracan.cpp b/src/mame/funtech/supracan.cpp index 62fe56948ce..4757c11be54 100644 --- a/src/mame/funtech/supracan.cpp +++ b/src/mame/funtech/supracan.cpp @@ -68,7 +68,7 @@ Super A'Can (c) 1995 Funtech #include "bus/supracan/rom.h" #include "bus/supracan/slot.h" #include "cpu/m68000/m68000.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "emupal.h" #include "screen.h" @@ -2394,7 +2394,7 @@ void supracan_state::supracan(machine_config &config) // TODO: Verify type and actual clock // /4 makes speedyd to fail booting - M65C02(config, m_soundcpu, U13_CLOCK / 6 / 2); + W65C02(config, m_soundcpu, U13_CLOCK / 6 / 2); m_soundcpu->set_addrmap(AS_PROGRAM, &supracan_state::sound_map); config.set_perfect_quantum(m_soundcpu); diff --git a/src/mame/funworld/4roses.cpp b/src/mame/funworld/4roses.cpp index 180825bc93b..571834f7bc4 100644 --- a/src/mame/funworld/4roses.cpp +++ b/src/mame/funworld/4roses.cpp @@ -195,7 +195,7 @@ #include "emu.h" #include "funworld.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/6821pia.h" #include "machine/nvram.h" #include "sound/ay8910.h" @@ -460,7 +460,7 @@ GFXDECODE_END void _4roses_state::_4roses(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, MASTER_CLOCK/8); // 2MHz, guess + W65C02(config, m_maincpu, MASTER_CLOCK/8); // 2MHz, guess m_maincpu->set_addrmap(AS_PROGRAM, &_4roses_state::_4roses_map); m_maincpu->set_addrmap(AS_OPCODES, &_4roses_state::_4roses_opcodes_map); diff --git a/src/mame/hegenerglaser/academy.cpp b/src/mame/hegenerglaser/academy.cpp index 09c9faddda9..d57c0456a76 100644 --- a/src/mame/hegenerglaser/academy.cpp +++ b/src/mame/hegenerglaser/academy.cpp @@ -27,7 +27,7 @@ Academy hardware. Much unused data remains, and the TRAIN button doesn't work. #include "mmboard.h" #include "mmdisplay2.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/74259.h" #include "machine/nvram.h" #include "video/pwm.h" @@ -130,7 +130,7 @@ INPUT_PORTS_END void academy_state::academy(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 4.9152_MHz_XTAL); + W65C02(config, m_maincpu, 4.9152_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &academy_state::main_map); const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / 0x2000); diff --git a/src/mame/hegenerglaser/modena.cpp b/src/mame/hegenerglaser/modena.cpp index 99e1d944a3e..4d74595400c 100644 --- a/src/mame/hegenerglaser/modena.cpp +++ b/src/mame/hegenerglaser/modena.cpp @@ -20,7 +20,7 @@ Hardware notes: #include "mmdisplay1.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/clock.h" #include "machine/nvram.h" #include "machine/sensorboard.h" @@ -170,7 +170,7 @@ INPUT_PORTS_END void modena_state::modena(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 4.194304_MHz_XTAL); + W65C02(config, m_maincpu, 4.194304_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &modena_state::modena_mem); clock_device &nmi_clock(CLOCK(config, "nmi_clock", 4.194304_MHz_XTAL / 0x2000)); // active for 975us diff --git a/src/mame/hegenerglaser/montec.cpp b/src/mame/hegenerglaser/montec.cpp index dc2d72890b0..9904ebb0bb7 100644 --- a/src/mame/hegenerglaser/montec.cpp +++ b/src/mame/hegenerglaser/montec.cpp @@ -23,8 +23,8 @@ Hardware notes: #include "mmboard.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/74259.h" #include "machine/nvram.h" #include "sound/dac.h" @@ -224,7 +224,7 @@ void montec_state::montec4le(machine_config &config) montec4(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 8_MHz_XTAL); + W65C02(config.replace(), m_maincpu, 8_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &montec_state::montec_mem); const attotime irq_period = attotime::from_hz(8_MHz_XTAL / 0x4000); diff --git a/src/mame/hegenerglaser/polgar.cpp b/src/mame/hegenerglaser/polgar.cpp index 4739bd9790c..c49d5b2e098 100644 --- a/src/mame/hegenerglaser/polgar.cpp +++ b/src/mame/hegenerglaser/polgar.cpp @@ -19,8 +19,8 @@ The 10MHz version has a W65C02P-8 @ 9.83MHz. #include "mmboard.h" #include "mmdisplay2.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/74259.h" #include "machine/nvram.h" @@ -134,7 +134,7 @@ void polgar_state::polgar10(machine_config &config) polgar(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 9.8304_MHz_XTAL); + W65C02(config.replace(), m_maincpu, 9.8304_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &polgar_state::polgar_mem); const attotime nmi_period = attotime::from_hz(9.8304_MHz_XTAL / 0x2000); diff --git a/src/mame/misc/rgum.cpp b/src/mame/misc/rgum.cpp index 1cda780c567..1c568ff648b 100644 --- a/src/mame/misc/rgum.cpp +++ b/src/mame/misc/rgum.cpp @@ -23,7 +23,7 @@ Main components */ #include "emu.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/i8255.h" #include "machine/nvram.h" #include "sound/ay8910.h" @@ -289,7 +289,7 @@ GFXDECODE_END void rgum_state::rgum(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 24_MHz_XTAL / 16); // divisor not verified + W65C02(config, m_maincpu, 24_MHz_XTAL / 16); // divisor not verified m_maincpu->set_addrmap(AS_PROGRAM, &rgum_state::main_map); // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // MK48Z08 diff --git a/src/mame/novag/sexpert.cpp b/src/mame/novag/sexpert.cpp index 05d1d96f304..f0d5d61618a 100644 --- a/src/mame/novag/sexpert.cpp +++ b/src/mame/novag/sexpert.cpp @@ -39,7 +39,7 @@ input I followed by Enter. #include "emu.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/clock.h" #include "machine/mos6551.h" #include "machine/nvram.h" @@ -405,7 +405,7 @@ INPUT_PORTS_END void sexpert_state::sexpert(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 10_MHz_XTAL/2); // or 12_MHz_XTAL/2, also seen with R65C02 + W65C02(config, m_maincpu, 10_MHz_XTAL/2); // or 12_MHz_XTAL/2, also seen with R65C02 m_maincpu->set_addrmap(AS_PROGRAM, &sexpert_state::sexpert_map); auto &irq_clock(CLOCK(config, "irq_clock", 32.768_kHz_XTAL/128)); // 256Hz @@ -444,7 +444,7 @@ void sexpert_state::sexpert(machine_config &config) // uart (configure after video) MOS6551(config, m_acia).set_xtal(1.8432_MHz_XTAL); // R65C51P2 - RTS to CTS, DCD to GND - m_acia->irq_handler().set_inputline("maincpu", m65c02_device::NMI_LINE); + m_acia->irq_handler().set_inputline("maincpu", w65c02_device::NMI_LINE); m_acia->rts_handler().set("acia", FUNC(mos6551_device::write_cts)); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_acia->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); diff --git a/src/mame/pinball/alvg.cpp b/src/mame/pinball/alvg.cpp index d0304c881a6..94921587d13 100644 --- a/src/mame/pinball/alvg.cpp +++ b/src/mame/pinball/alvg.cpp @@ -64,7 +64,7 @@ USA Football (redemption) 11 Hold A, hit 1 ****************************************************************************************************/ #include "emu.h" #include "genpin.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/m6809/m6809.h" #include "cpu/mcs51/mcs51.h" #include "machine/6522via.h" @@ -596,7 +596,7 @@ void alvg_state::pca020(machine_config &config) void alvg_state::alvg(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, XTAL(4'000'000) / 2); + W65C02(config, m_maincpu, XTAL(4'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, &alvg_state::main_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -628,7 +628,7 @@ void alvg_state::alvg(machine_config &config) genpin_audio(config); - INPUT_MERGER_ANY_HIGH(config, "cpuirq").output_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "cpuirq").output_handler().set_inputline(m_maincpu, W65C02_IRQ_LINE); } diff --git a/src/mame/pinball/gts3.cpp b/src/mame/pinball/gts3.cpp index 40b710aa986..b5f1f812355 100644 --- a/src/mame/pinball/gts3.cpp +++ b/src/mame/pinball/gts3.cpp @@ -64,7 +64,7 @@ Caribbean Cruise C102 1, enter, hold \ and right until message goes \ #include "gottlieb_a.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/6522via.h" #include "machine/input_merger.h" #include "speaker.h" @@ -105,7 +105,6 @@ class gts3_state : public genpin_class void solenoid_w(offs_t, u8); void u4b_w(u8 data); void u5a_w(u8 data); - void nmi_w(int state); void mem_map(address_map &map) ATTR_COLD; bool m_dispclk = false; @@ -115,7 +114,7 @@ class gts3_state : public genpin_class u8 m_segment[4]{}; u8 m_u4b = 0U; - required_device m_maincpu; + required_device m_maincpu; required_device m_u4; required_device m_u5; optional_device m_p5_sound; @@ -242,12 +241,6 @@ INPUT_CHANGED_MEMBER( gts3_state::test_inp ) m_u4->write_ca1(newval); } -// This trampoline needed; WRITELINE("maincpu", m65c02_device, nmi_line) does not work -void gts3_state::nmi_w(int state) -{ - m_maincpu->set_input_line(INPUT_LINE_NMI, (state) ? CLEAR_LINE : HOLD_LINE); -} - void gts3_state::lampret_w(u8 data) { if (m_row < 12) @@ -348,7 +341,7 @@ void gts3_state::machine_reset() void gts3_state::p0(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000) / 2); + W65C02(config, m_maincpu, XTAL(4'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, >s3_state::mem_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -361,7 +354,7 @@ void gts3_state::p0(machine_config &config) m_u4->readpb_handler().set(FUNC(gts3_state::u4b_r)); m_u4->writepb_handler().set(FUNC(gts3_state::u4b_w)); //m_u4->ca2_handler().set(FUNC(gts3_state::u4ca2_w)); - m_u4->cb2_handler().set(FUNC(gts3_state::nmi_w)); + m_u4->cb2_handler().set_inputline("maincpu", W65C02_NMI_LINE).invert(); R65C22(config, m_u5, XTAL(4'000'000) / 2); m_u5->irq_handler().set("irq", FUNC(input_merger_device::in_w<1>)); @@ -372,7 +365,7 @@ void gts3_state::p0(machine_config &config) //m_u5->cb1_handler().set(FUNC(gts3_state::u5cb1_w)); //m_u5->cb2_handler().set(FUNC(gts3_state::u5cb2_w)); - INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", W65C02_IRQ_LINE); /* Sound */ genpin_audio(config); diff --git a/src/mame/pinball/gts3a.cpp b/src/mame/pinball/gts3a.cpp index 443c9fde0a6..84c6438c82e 100644 --- a/src/mame/pinball/gts3a.cpp +++ b/src/mame/pinball/gts3a.cpp @@ -50,7 +50,7 @@ machinaZOIS Virtual Training Center Hit 1, press LM #include "gottlieb_a.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/6522via.h" #include "machine/input_merger.h" #include "video/mc6845.h" @@ -101,7 +101,6 @@ class gts3a_state : public genpin_class void u5a_w(u8 data); u8 dmd_r(); void dmd_w(u8 data); - void nmi_w(int state); void crtc_vs(int state); MC6845_UPDATE_ROW(crtc_update_row); void palette_init(palette_device &palette); @@ -113,8 +112,8 @@ class gts3a_state : public genpin_class u8 m_segment = 0U; u8 m_u4b = 0U; - required_device m_maincpu; - required_device m_dmdcpu; + required_device m_maincpu; + required_device m_dmdcpu; required_memory_bank m_bank1; required_device m_crtc; required_shared_ptr m_vram; @@ -286,12 +285,6 @@ INPUT_CHANGED_MEMBER( gts3a_state::test_inp ) m_u4->write_ca1(newval); } -// This trampoline needed; WRITELINE("maincpu", m65c02_device, nmi_line) does not work -void gts3a_state::nmi_w(int state) -{ - m_maincpu->set_input_line(INPUT_LINE_NMI, (state) ? CLEAR_LINE : HOLD_LINE); -} - void gts3a_state::lampret_w(u8 data) { if (m_row < 12) @@ -316,7 +309,7 @@ void gts3a_state::solenoid_w(offs_t offset, u8 data) void gts3a_state::segbank_w(u8 data) { m_segment = data; - m_dmdcpu->set_input_line(M65C02_IRQ_LINE, ASSERT_LINE); + m_dmdcpu->set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } void gts3a_state::u4b_w(u8 data) @@ -360,7 +353,7 @@ void gts3a_state::init_gts3a() u8 gts3a_state::dmd_r() { - m_dmdcpu->set_input_line(M65C02_IRQ_LINE, CLEAR_LINE); + m_dmdcpu->set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); return m_segment; } @@ -430,12 +423,12 @@ void gts3a_state::machine_reset() void gts3a_state::p0(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000) / 2); + W65C02(config, m_maincpu, XTAL(4'000'000) / 2); m_maincpu->set_addrmap(AS_PROGRAM, >s3a_state::mem_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 6116LP + DS1210 - M65C02(config, m_dmdcpu, XTAL(3'579'545) / 2); + W65C02(config, m_dmdcpu, XTAL(3'579'545) / 2); m_dmdcpu->set_addrmap(AS_PROGRAM, >s3a_state::dmd_map); // Video @@ -462,7 +455,7 @@ void gts3a_state::p0(machine_config &config) m_u4->readpb_handler().set(FUNC(gts3a_state::u4b_r)); m_u4->writepb_handler().set(FUNC(gts3a_state::u4b_w)); //m_u4->ca2_handler().set(FUNC(gts3a_state::u4ca2_w)); - m_u4->cb2_handler().set(FUNC(gts3a_state::nmi_w)); + m_u4->cb2_handler().set_inputline("maincpu", W65C02_NMI_LINE).invert(); R65C22(config, m_u5, XTAL(4'000'000) / 2); m_u5->irq_handler().set("irq", FUNC(input_merger_device::in_w<1>)); @@ -473,7 +466,7 @@ void gts3a_state::p0(machine_config &config) //m_u5->cb1_Handler().set(FUNC(gts3a_state::u5cb1_w)); //m_u5->cb2_Handler().set(FUNC(gts3a_state::u5cb2_w)); - INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "irq").output_handler().set_inputline("maincpu", W65C02_IRQ_LINE); // Sound genpin_audio(config); diff --git a/src/mame/saitek/corona.cpp b/src/mame/saitek/corona.cpp index 310390a62c8..39dab1bffcd 100644 --- a/src/mame/saitek/corona.cpp +++ b/src/mame/saitek/corona.cpp @@ -13,7 +13,7 @@ different compared to Stratos/Turbo King. #include "emu.h" #include "stratos.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -260,7 +260,7 @@ INPUT_PORTS_END void corona_state::corona(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq + W65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map); m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(183)); diff --git a/src/mame/saitek/simultano.cpp b/src/mame/saitek/simultano.cpp index 8a6b257cd5f..cca07d80e16 100644 --- a/src/mame/saitek/simultano.cpp +++ b/src/mame/saitek/simultano.cpp @@ -31,8 +31,8 @@ programmed by Saitek. Not as a simple rebrand, but with hardware differences: #include "bus/generic/slot.h" #include "bus/generic/carts.h" -#include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -352,7 +352,7 @@ void simultano_state::simultano(machine_config &config) cc2150(config); // basic machine hardware - M65C02(config.replace(), m_maincpu, 5_MHz_XTAL); + W65C02(config.replace(), m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &simultano_state::simultano_map); m_maincpu->set_periodic_int(FUNC(simultano_state::irq0_line_hold), attotime::from_hz(76)); // approximation diff --git a/src/mame/saitek/stratos.cpp b/src/mame/saitek/stratos.cpp index b1a51a7c80f..8ee440c7c38 100644 --- a/src/mame/saitek/stratos.cpp +++ b/src/mame/saitek/stratos.cpp @@ -54,7 +54,7 @@ is engine version C. #include "emu.h" #include "stratos.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -490,7 +490,7 @@ INPUT_PORTS_END void stratos_state::stratos(machine_config &config) { // basic machine hardware - M65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq + W65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq m_maincpu->set_addrmap(AS_PROGRAM, &stratos_state::main_map); m_maincpu->set_periodic_int(FUNC(stratos_state::irq0_line_hold), attotime::from_hz(76)); diff --git a/src/mame/seta/downtown.cpp b/src/mame/seta/downtown.cpp index 97db78bf420..05b2294e507 100644 --- a/src/mame/seta/downtown.cpp +++ b/src/mame/seta/downtown.cpp @@ -293,7 +293,7 @@ P1-049-A #include "emu.h" #include "x1_012.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "cpu/m68000/m68000.h" #include "machine/74157.h" #include "machine/gen_latch.h" @@ -933,7 +933,7 @@ void tndrcade_state::sub_bankswitch_lockout_w(u8 data) seta_coin_lockout_w(data); // 65C02 code doesn't seem to do anything to explicitly acknowledge IRQ; implicitly acknowledging it here seems most likely - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, CLEAR_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); } @@ -1043,7 +1043,7 @@ void downtown_state::calibr50_sub_bankswitch_w(u8 data) // Bit 2: IRQCLR if (!BIT(data, 2)) - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, CLEAR_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, CLEAR_LINE); // Bit 1: /PCMMUTE m_x1snd->set_output_gain(ALL_OUTPUTS, BIT(data, 1) ? 1.0f : 0.0f); @@ -1769,10 +1769,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(downtown_state::seta_sub_interrupt) int scanline = param; if (scanline == 240) - m_subcpu->pulse_input_line(m65c02_device::NMI_LINE, attotime::zero); + m_subcpu->pulse_input_line(W65C02_NMI_LINE, attotime::zero); if (scanline == 112) - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, ASSERT_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } @@ -1785,10 +1785,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(tndrcade_state::tndrcade_sub_interrupt) int scanline = param; if (scanline == 240) - m_subcpu->pulse_input_line(m65c02_device::NMI_LINE, attotime::zero); + m_subcpu->pulse_input_line(W65C02_NMI_LINE, attotime::zero); if ((scanline % 16) == 0) - m_subcpu->set_input_line(m65c02_device::IRQ_LINE, ASSERT_LINE); + m_subcpu->set_input_line(W65C02_IRQ_LINE, ASSERT_LINE); } void tndrcade_state::tndrcade(machine_config &config) @@ -1797,7 +1797,7 @@ void tndrcade_state::tndrcade(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL / 2); // 8 MHz m_maincpu->set_addrmap(AS_PROGRAM, &tndrcade_state::tndrcade_map); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &tndrcade_state::tndrcade_sub_map); TIMER(config, "scantimer").configure_scanline(FUNC(tndrcade_state::tndrcade_sub_interrupt), "screen", 0, 1); @@ -1849,7 +1849,7 @@ void downtown_state::twineagl(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL / 2); // 8 MHz m_maincpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_map); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::twineagl_sub_map); TIMER(config, "s_scantimer").configure_scanline(FUNC(downtown_state::seta_sub_interrupt), "screen", 0, 1); @@ -1900,7 +1900,7 @@ void downtown_state::downtown(machine_config &config) M68000(config, m_maincpu, 16_MHz_XTAL / 2); // verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_map); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_sub_map); TIMER(config, "s_scantimer").configure_scanline(FUNC(downtown_state::seta_sub_interrupt), "screen", 0, 1); @@ -1981,7 +1981,7 @@ void usclssic_state::usclssic(machine_config &config) WATCHDOG_TIMER(config, "watchdog"); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &usclssic_state::calibr50_sub_map); UPD4701A(config, m_upd4701); @@ -2010,7 +2010,7 @@ void usclssic_state::usclssic(machine_config &config) screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1); screen.set_screen_update(FUNC(usclssic_state::screen_update_usclssic)); screen.set_palette(m_palette); - screen.screen_vblank().set_inputline(m_subcpu, m65c02_device::IRQ_LINE, ASSERT_LINE); + screen.screen_vblank().set_inputline(m_subcpu, W65C02_IRQ_LINE, ASSERT_LINE); X1_012(config, m_tiles, m_palette, gfx_usclssic); m_tiles->set_screen(m_screen); @@ -2023,7 +2023,7 @@ void usclssic_state::usclssic(machine_config &config) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch[0]); - m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, m65c02_device::NMI_LINE); + m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, W65C02_NMI_LINE); m_soundlatch[0]->set_separate_acknowledge(true); X1_010(config, m_x1snd, 16_MHz_XTAL); // 16 MHz @@ -2051,7 +2051,7 @@ void downtown_state::calibr50(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - M65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb + W65C02(config, m_subcpu, 16_MHz_XTAL / 8); // verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::calibr50_sub_map); m_subcpu->set_periodic_int(FUNC(downtown_state::irq0_line_assert), attotime::from_hz(4*60)); // IRQ: 4/frame @@ -2088,7 +2088,7 @@ void downtown_state::calibr50(machine_config &config) SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch[0]); - m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, m65c02_device::NMI_LINE); + m_soundlatch[0]->data_pending_callback().set_inputline(m_subcpu, W65C02_NMI_LINE); m_soundlatch[0]->set_separate_acknowledge(true); GENERIC_LATCH_8(config, m_soundlatch[1]); @@ -2110,7 +2110,7 @@ void downtown_state::metafox(machine_config &config) M68000(config, m_maincpu, 16000000/2); // 8 MHz m_maincpu->set_addrmap(AS_PROGRAM, &downtown_state::downtown_map); - M65C02(config, m_subcpu, 16000000/8); // 2 MHz + W65C02(config, m_subcpu, 16000000/8); // 2 MHz m_subcpu->set_addrmap(AS_PROGRAM, &downtown_state::metafox_sub_map); TIMER(config, "s_scantimer").configure_scanline(FUNC(downtown_state::seta_sub_interrupt), "screen", 0, 1); diff --git a/src/mame/svision/svision.cpp b/src/mame/svision/svision.cpp index 573262426f5..2f7c65dd373 100644 --- a/src/mame/svision/svision.cpp +++ b/src/mame/svision/svision.cpp @@ -13,7 +13,7 @@ #include "bus/generic/carts.h" #include "bus/generic/slot.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/timer.h" #include "emupal.h" @@ -207,7 +207,7 @@ void svision_state::check_irq() bool irq = m_timer_shot && BIT(m_reg[BANK], 1); irq = irq || (m_dma_finished && BIT(m_reg[BANK], 2)); - m_maincpu->set_input_line(M65C02_IRQ_LINE, irq ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(W65C02_IRQ_LINE, irq ? ASSERT_LINE : CLEAR_LINE); } TIMER_CALLBACK_MEMBER(svision_state::timer) @@ -712,7 +712,7 @@ void svision_state::svision(machine_config &config) { svision_base(config); - M65C02(config, m_maincpu, 4'000'000); + W65C02(config, m_maincpu, 4'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &svision_state::program_map); SCREEN(config, m_screen, SCREEN_TYPE_LCD); diff --git a/src/mame/televideo/tv955.cpp b/src/mame/televideo/tv955.cpp index e2742322078..870208da10e 100644 --- a/src/mame/televideo/tv955.cpp +++ b/src/mame/televideo/tv955.cpp @@ -9,7 +9,7 @@ Skeleton driver for "third generation" TeleVideo terminals (905, 955, 9220). #include "emu.h" #include "tv955kb.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" #include "machine/input_merger.h" #include "machine/mos6551.h" #include "machine/nvram.h" @@ -146,7 +146,7 @@ INPUT_PORTS_END void tv955_state::tv955(machine_config &config) { - M65C02(config, m_maincpu, 19.3396_MHz_XTAL / 9); + W65C02(config, m_maincpu, 19.3396_MHz_XTAL / 9); m_maincpu->set_addrmap(AS_PROGRAM, &tv955_state::mem_map); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE); diff --git a/src/mame/tvgames/elan_eu3a05.cpp b/src/mame/tvgames/elan_eu3a05.cpp index dcff115046f..5b4d42d4042 100644 --- a/src/mame/tvgames/elan_eu3a05.cpp +++ b/src/mame/tvgames/elan_eu3a05.cpp @@ -211,7 +211,7 @@ Set 5043 bit 0 low #include "elan_eu3a05_a.h" #include "cpu/m6502/m6502.h" -//#include "cpu/m6502/m65c02.h" +//#include "cpu/m6502/w65c02.h" #include "emupal.h" #include "screen.h" #include "softlist_dev.h" diff --git a/src/mame/yamaha/ympsr16.cpp b/src/mame/yamaha/ympsr16.cpp index e0a0bdfa64d..c8a7c57a14a 100644 --- a/src/mame/yamaha/ympsr16.cpp +++ b/src/mame/yamaha/ympsr16.cpp @@ -23,7 +23,7 @@ #include "emu.h" //#include "bus/midi/midi.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/w65c02.h" namespace { @@ -122,7 +122,7 @@ INPUT_PORTS_END void yamaha_psr16_state::psr16(machine_config &config) { - M65C02(config, m_maincpu, 5.5_MHz_XTAL / 4); // XTAL value from PSS-480; internal divider guessed + W65C02(config, m_maincpu, 5.5_MHz_XTAL / 4); // XTAL value from PSS-480; internal divider guessed m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_psr16_state::psr16_map); } diff --git a/src/osd/modules/debugger/debuggdbstub.cpp b/src/osd/modules/debugger/debuggdbstub.cpp index a6519a8e13e..36806dfefba 100644 --- a/src/osd/modules/debugger/debuggdbstub.cpp +++ b/src/osd/modules/debugger/debuggdbstub.cpp @@ -511,9 +511,9 @@ static const std::map gdb_register_maps = { "m6502", gdb_register_map_m6502 }, { "m6507", gdb_register_map_m6502 }, { "m6510", gdb_register_map_m6502 }, - { "m65c02", gdb_register_map_m6502 }, { "m65ce02", gdb_register_map_m6502 }, { "rp2a03", gdb_register_map_m6502 }, + { "w65c02", gdb_register_map_m6502 }, { "w65c02s", gdb_register_map_m6502 }, { "m6809", gdb_register_map_m6809 }, { "score7", gdb_register_map_score7 }, diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index b5c40510865..1d7e9fc6932 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -96,11 +96,11 @@ using util::BIT; #include "cpu/m6502/m6502d.h" #include "cpu/m6502/m6509d.h" #include "cpu/m6502/m6510d.h" -#include "cpu/m6502/m65c02d.h" #include "cpu/m6502/m65ce02d.h" #include "cpu/m6502/m740d.h" #include "cpu/m6502/r65c02d.h" #include "cpu/m6502/r65c19d.h" +#include "cpu/m6502/w65c02d.h" #include "cpu/m6502/xavixd.h" #include "cpu/m6502/xavix2000d.h" #include "cpu/m6800/6800dasm.h" @@ -525,7 +525,6 @@ static const dasm_table_entry dasm_table[] = { "m6502", le, 0, []() -> util::disasm_interface * { return new m6502_disassembler; } }, { "m6509", le, 0, []() -> util::disasm_interface * { return new m6509_disassembler; } }, { "m6510", le, 0, []() -> util::disasm_interface * { return new m6510_disassembler; } }, - { "m65c02", le, 0, []() -> util::disasm_interface * { return new m65c02_disassembler; } }, { "m65ce02", le, 0, []() -> util::disasm_interface * { return new m65ce02_disassembler; } }, { "m6800", be, 0, []() -> util::disasm_interface * { return new m680x_disassembler(6800); } }, { "m68000", be, 0, []() -> util::disasm_interface * { return new m68k_disassembler(m68k_disassembler::TYPE_68000); } }, @@ -727,6 +726,7 @@ static const dasm_table_entry dasm_table[] = { "vt50", le, 0, []() -> util::disasm_interface * { return new vt50_disassembler; } }, { "vt52", le, 0, []() -> util::disasm_interface * { return new vt52_disassembler; } }, { "vt61", le, -1, []() -> util::disasm_interface * { return new vt61_disassembler; } }, + { "w65c02", le, 0, []() -> util::disasm_interface * { return new w65c02_disassembler; } }, { "we32100", be, 0, []() -> util::disasm_interface * { return new we32100_disassembler; } }, { "x86_16", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 16; return new i386_disassembler(&i386_unidasm); } }, { "x86_32", le, 0, []() -> util::disasm_interface * { i386_unidasm.mode = 32; return new i386_disassembler(&i386_unidasm); } }, From 0ccb23840ef611039874db22896e22f56e2986c8 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 15:32:02 +0100 Subject: [PATCH 09/40] g65sc02: correct constructor --- src/devices/cpu/m6502/g65sc02.cpp | 13 +++++++++---- src/devices/cpu/m6502/g65sc02.h | 9 ++++++--- src/mame/skeleton/textelcomp.cpp | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/devices/cpu/m6502/g65sc02.cpp b/src/devices/cpu/m6502/g65sc02.cpp index 67b3e742363..167247c2999 100644 --- a/src/devices/cpu/m6502/g65sc02.cpp +++ b/src/devices/cpu/m6502/g65sc02.cpp @@ -20,22 +20,27 @@ DEFINE_DEVICE_TYPE(G65SC12, g65sc12_device, "g65sc12", "GTE G65SC12") DEFINE_DEVICE_TYPE(G65SC102, g65sc102_device, "g65sc102", "GTE G65SC102") DEFINE_DEVICE_TYPE(G65SC112, g65sc112_device, "g65sc112", "GTE G65SC112") +g65sc02_device::g65sc02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, type, tag, owner, clock) +{ +} + g65sc02_device::g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, G65SC02, tag, owner, clock) + g65sc02_device(mconfig, G65SC02, tag, owner, clock) { } g65sc12_device::g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, G65SC12, tag, owner, clock) + g65sc02_device(mconfig, G65SC12, tag, owner, clock) { } g65sc102_device::g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, G65SC102, tag, owner, clock) + g65sc02_device(mconfig, G65SC102, tag, owner, clock) { } g65sc112_device::g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, G65SC112, tag, owner, clock) + g65sc02_device(mconfig, G65SC112, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/g65sc02.h b/src/devices/cpu/m6502/g65sc02.h index a0004dfefdb..edd24f0f21c 100644 --- a/src/devices/cpu/m6502/g65sc02.h +++ b/src/devices/cpu/m6502/g65sc02.h @@ -16,19 +16,22 @@ class g65sc02_device : public r65c02_device { public: g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + g65sc02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); }; -class g65sc12_device : public r65c02_device { +class g65sc12_device : public g65sc02_device { public: g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; -class g65sc102_device : public r65c02_device { +class g65sc102_device : public g65sc02_device { public: g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; -class g65sc112_device : public r65c02_device { +class g65sc112_device : public g65sc02_device { public: g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; diff --git a/src/mame/skeleton/textelcomp.cpp b/src/mame/skeleton/textelcomp.cpp index 44e98f8a1d3..f68dbf0ba1b 100644 --- a/src/mame/skeleton/textelcomp.cpp +++ b/src/mame/skeleton/textelcomp.cpp @@ -328,7 +328,7 @@ void textelcomp_state::textelcomp(machine_config &config) G65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) m_maincpu->set_addrmap(AS_PROGRAM, &textelcomp_state::mem_map); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, g65sc02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, G65SC02_IRQ_LINE); via6522_device &via0(R65C22(config, "via0", 3.6864_MHz_XTAL / 2)); // G65SC22P-2 via0.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); From 56081bce92d64b964c7a868522f453ca1687b930 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 14 Dec 2024 10:09:10 -0500 Subject: [PATCH 10/40] g65sc02: Remove Rockwell bit opcodes (source comment appears to be mistaken) * g65sc102, r65c102: Add internal clock divider --- src/devices/bus/bbc/tube/tube_6502.cpp | 2 +- src/devices/bus/econet/e01.cpp | 2 +- src/devices/cpu/m6502/g65sc02.cpp | 4 ++-- src/devices/cpu/m6502/g65sc02.h | 10 +++++++--- src/devices/cpu/m6502/r65c02.h | 4 ++++ src/mame/commodore/clcd.cpp | 2 +- src/mame/fidelity/excel.cpp | 2 +- 7 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index 732fd38775a..360362634f7 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -165,7 +165,7 @@ void bbc_tube_65c102_device::device_add_mconfig(machine_config &config) { bbc_tube_6502_device::device_add_mconfig(config); - R65C102(config.replace(), m_maincpu, 16_MHz_XTAL / 4); // R65C102 + R65C102(config.replace(), m_maincpu, 16_MHz_XTAL); // R65C102 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_65c102_device::tube_6502_mem); } diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index 2009a80d223..e46ac49e379 100644 --- a/src/devices/bus/econet/e01.cpp +++ b/src/devices/bus/econet/e01.cpp @@ -245,7 +245,7 @@ void econet_e01_device::e01_mem(address_map &map) void econet_e01_device::device_add_mconfig(machine_config &config) { // basic machine hardware - R65C102(config, m_maincpu, XTAL(8'000'000)/4); // Rockwell R65C102P3 + R65C102(config, m_maincpu, XTAL(8'000'000)); // Rockwell R65C102P3 m_maincpu->set_addrmap(AS_PROGRAM, &econet_e01_device::e01_mem); MC146818(config, m_rtc, 32.768_kHz_XTAL); diff --git a/src/devices/cpu/m6502/g65sc02.cpp b/src/devices/cpu/m6502/g65sc02.cpp index 167247c2999..e9e62cd4880 100644 --- a/src/devices/cpu/m6502/g65sc02.cpp +++ b/src/devices/cpu/m6502/g65sc02.cpp @@ -4,7 +4,7 @@ g65sc02.cpp - Rockwell-class 65c02 with internal static registers, making clock stoppable? + 65c02 with internal static registers, making clock stoppable? TODO: - none of the CPU type differences are currently emulated (eg. BE pin, ML pin), @@ -21,7 +21,7 @@ DEFINE_DEVICE_TYPE(G65SC102, g65sc102_device, "g65sc102", "GTE G65SC102") DEFINE_DEVICE_TYPE(G65SC112, g65sc112_device, "g65sc112", "GTE G65SC112") g65sc02_device::g65sc02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, type, tag, owner, clock) + w65c02_device(mconfig, type, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/g65sc02.h b/src/devices/cpu/m6502/g65sc02.h index edd24f0f21c..e98f068b60d 100644 --- a/src/devices/cpu/m6502/g65sc02.h +++ b/src/devices/cpu/m6502/g65sc02.h @@ -4,16 +4,16 @@ g65sc02.h - Rockwell-class 65c02 with internal static registers, making clock stoppable? + 65c02 with internal static registers, making clock stoppable? ***************************************************************************/ #ifndef MAME_CPU_M6502_G65SC02_H #define MAME_CPU_M6502_G65SC02_H -#include "r65c02.h" +#include "w65c02.h" -class g65sc02_device : public r65c02_device { +class g65sc02_device : public w65c02_device { public: g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -29,6 +29,10 @@ class g65sc12_device : public g65sc02_device { class g65sc102_device : public g65sc02_device { public: g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; } + virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); } }; class g65sc112_device : public g65sc02_device { diff --git a/src/devices/cpu/m6502/r65c02.h b/src/devices/cpu/m6502/r65c02.h index 2a98d4be6ec..d9be47465ee 100644 --- a/src/devices/cpu/m6502/r65c02.h +++ b/src/devices/cpu/m6502/r65c02.h @@ -28,6 +28,10 @@ class r65c02_device : public w65c02_device { class r65c102_device : public r65c02_device { public: r65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; } + virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); } }; class r65c112_device : public r65c02_device { diff --git a/src/mame/commodore/clcd.cpp b/src/mame/commodore/clcd.cpp index 553d43a742a..c7e1642603a 100644 --- a/src/mame/commodore/clcd.cpp +++ b/src/mame/commodore/clcd.cpp @@ -719,7 +719,7 @@ INPUT_PORTS_END void clcd_state::clcd(machine_config &config) { /* basic machine hardware */ - G65SC102(config, m_maincpu, 1000000); + G65SC102(config, m_maincpu, 4000000); m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", g65sc102_device::IRQ_LINE); diff --git a/src/mame/fidelity/excel.cpp b/src/mame/fidelity/excel.cpp index 01678da3fe4..18d60b5ff61 100644 --- a/src/mame/fidelity/excel.cpp +++ b/src/mame/fidelity/excel.cpp @@ -460,7 +460,7 @@ INPUT_PORTS_END void excel_state::fexcel(machine_config &config) { // basic machine hardware - G65SC102(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator + G65SC102(config, m_maincpu, 12_MHz_XTAL); // G65SC102P-3, 12.0M ceramic resonator (divided by 4 internally) m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map); auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz From 28ee3d42020a8fee63977a31910706073a0cfa39 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 15 Dec 2024 04:27:39 +1100 Subject: [PATCH 11/40] dynax/dynax.cpp: Corrected 7jigen DIP switches based on a very blurry photo of the manual. --- src/mame/dynax/ddenlovr.cpp | 2 +- src/mame/dynax/dynax.cpp | 117 +++++++++++++----------------------- 2 files changed, 43 insertions(+), 76 deletions(-) diff --git a/src/mame/dynax/ddenlovr.cpp b/src/mame/dynax/ddenlovr.cpp index 1513496218b..81b897701ed 100644 --- a/src/mame/dynax/ddenlovr.cpp +++ b/src/mame/dynax/ddenlovr.cpp @@ -7772,7 +7772,7 @@ static INPUT_PORTS_START( mjflove ) PORT_DIPSETTING( 0x00, DEF_STR(On) ) // テストモード PORT_START("DSW1") // IN11 - DSW1 - PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:1" ) // 常時OFF (manual appears to be corrected to indicate that this switch should be ON) + PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:1" ) // 常時OFF (recommended settings in manual show this ON, possibly a misprint) PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW2:2" ) // 常時OFF PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW2:3" ) // 常時OFF PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW2:4" ) // 常時OFF diff --git a/src/mame/dynax/dynax.cpp b/src/mame/dynax/dynax.cpp index d76a247c7ed..beef10513ce 100644 --- a/src/mame/dynax/dynax.cpp +++ b/src/mame/dynax/dynax.cpp @@ -2182,7 +2182,7 @@ INPUT_PORTS_END static INPUT_PORTS_START( mjdialq2 ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage ) ) PORT_DIPLOCATION("SW. 1:1,2") // プレイ料金 + PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW. 1:1,2") // プレイ料金 PORT_DIPSETTING( 0x00, DEF_STR(3C_1C) ) // 3コイン 1プレー PORT_DIPSETTING( 0x02, DEF_STR(2C_1C) ) // 2コイン 1プレー PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) ) // 1コイン 1プレー @@ -2640,93 +2640,60 @@ INPUT_PORTS_END static INPUT_PORTS_START( nanajign ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x38, 0x38, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x38, "0" ) - PORT_DIPSETTING( 0x30, "1" ) - PORT_DIPSETTING( 0x28, "2" ) - PORT_DIPSETTING( 0x20, "3" ) - PORT_DIPSETTING( 0x18, "4" ) - PORT_DIPSETTING( 0x10, "5" ) - PORT_DIPSETTING( 0x08, "6" ) - PORT_DIPSETTING( 0x00, "7" ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) //? - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW. 2:1,2") // プレイ料金 + PORT_DIPSETTING( 0x00, DEF_STR(3C_1C) ) // 3コイン 1プレー + PORT_DIPSETTING( 0x02, DEF_STR(2C_1C) ) // 2コイン 1プレー + PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) ) // 1コイン 1プレー + PORT_DIPSETTING( 0x01, DEF_STR(1C_2C) ) // 1コイン 2プレー + PORT_DIPNAME( 0x04, 0x00, "Allow Pinfu with Tsumo") PORT_DIPLOCATION("SW. 2:3") // ルール ピンフ・ツモ複合 + PORT_DIPSETTING( 0x04, DEF_STR(No) ) // 無し + PORT_DIPSETTING( 0x00, DEF_STR(Yes) ) // 有り + PORT_DIPNAME( 0x38, 0x20, DEF_STR(Difficulty) ) PORT_DIPLOCATION("SW. 2:4,5,6") // 難易度 コンピューター + PORT_DIPSETTING( 0x38, "1 (Weak)" ) //   弱い  (1) + PORT_DIPSETTING( 0x30, "2" ) //       (2) + PORT_DIPSETTING( 0x28, "3" ) //       (3) + PORT_DIPSETTING( 0x20, "4 (Normal)" ) // 標準    (4) + PORT_DIPSETTING( 0x18, "5" ) //       (5) + PORT_DIPSETTING( 0x10, "6" ) //       (6) + PORT_DIPSETTING( 0x08, "7" ) //       (7) + PORT_DIPSETTING( 0x00, "8 (Strong)" ) //   強い  (8) + PORT_DIPNAME( 0x40, 0x40, "Auto Reach" ) PORT_DIPLOCATION("SW. 2:7") // オート・ツモ + PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無し + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り + PORT_DIPNAME( 0x80, 0x80, DEF_STR(Flip_Screen) ) PORT_DIPLOCATION("SW. 2:8") // モニター画面反転 + PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 正 + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 逆 PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) //* - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Service_Mode ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds ) ) PORT_DIPLOCATION("SW. 3:1") // デモ・サウンド + PORT_DIPSETTING( 0x01, DEF_STR(Off) ) // 無し + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り + PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW. 3:2" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW. 3:3" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW. 3:4" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW. 3:5" ) // OFF固定 + PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW. 3:6" ) // OFF固定 + PORT_DIPNAME( 0x40, 0x40, "Computer Hand Always Open" ) PORT_DIPLOCATION("SW. 3:7") // OFF固定 + PORT_DIPSETTING( 0x40, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR(Service_Mode) ) PORT_DIPLOCATION("SW. 3:8") // OFF固定 + PORT_DIPSETTING( 0x80, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) PORT_START("COINS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) // Test + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR(Test)) // Test PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // Analyzer PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // Memory Reset PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_INCLUDE( dynax_mahjong_keys ) + PORT_INCLUDE( mahjong_matrix_2p_ff ) - PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_START("DSW2") // not shown in test mode or manual + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END From 82758b1e0daf4e1294a6c17732d3689e7037b7a9 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 18:29:07 +0100 Subject: [PATCH 12/40] clcd: add maincpu xtal --- src/mame/commodore/clcd.cpp | 50 ++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/mame/commodore/clcd.cpp b/src/mame/commodore/clcd.cpp index c7e1642603a..5622dbd39d8 100644 --- a/src/mame/commodore/clcd.cpp +++ b/src/mame/commodore/clcd.cpp @@ -1,13 +1,15 @@ // license:BSD-3-Clause -// copyright-holders:Curt Coder,smf,Mike Naberezny +// copyright-holders:Curt Coder, smf, Mike Naberezny /*************************************************************************** - Commodore LCD prototype +Commodore LCD prototype - GTE G65SC102PI-2 - GTE G65SC51P-1 - Rockwell R65C22P2 x 2 - AMI S3530X Bell 103/V.21 Single chip modem +OSC: 4MHz, 1.8432MHz, 3.579545MHz +GTE G65SC102PI-2 +GTE G65SC51P-1 +Rockwell R65C22P2 x 2 +AMI S3530X Bell 103/V.21 Single chip modem +OKI M5260 x 2 ****************************************************************************/ @@ -103,7 +105,7 @@ class clcd_state : public driver_device void clcd_palette(palette_device &palette) const { palette.set_pen_color(0, rgb_t(124, 149, 143)); - palette.set_pen_color(1, rgb_t(54,64,65)); + palette.set_pen_color(1, rgb_t(54, 64, 65)); } uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) @@ -407,12 +409,12 @@ class clcd_state : public driver_device if (!m_iec->clk_r()) { - data |= 1<<6; + data |= 1 << 6; } if (!m_iec->data_r()) { - data |= 1<<7; + data |= 1 << 7; } return data; @@ -539,6 +541,7 @@ class clcd_state : public driver_device void clcd(machine_config &config); void clcd_banked_mem(address_map &map) ATTR_COLD; void clcd_mem(address_map &map) ATTR_COLD; + private: required_device m_maincpu; required_device m_acia; @@ -718,28 +721,28 @@ INPUT_PORTS_END void clcd_state::clcd(machine_config &config) { - /* basic machine hardware */ - G65SC102(config, m_maincpu, 4000000); + // basic machine hardware + G65SC102(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", g65sc102_device::IRQ_LINE); - via6522_device &via0(R65C22(config, "via0", 1000000)); + via6522_device &via0(R65C22(config, "via0", 4_MHz_XTAL / 4)); via0.writepa_handler().set(FUNC(clcd_state::via0_pa_w)); via0.writepb_handler().set(FUNC(clcd_state::via0_pb_w)); via0.readpb_handler().set(FUNC(clcd_state::via0_pb_r)); via0.cb1_handler().set(FUNC(clcd_state::via0_cb1_w)); via0.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); - via6522_device &via1(R65C22(config, "via1", 1000000)); + via6522_device &via1(R65C22(config, "via1", 4_MHz_XTAL / 4)); via1.writepa_handler().set(FUNC(clcd_state::via1_pa_w)); via1.writepb_handler().set(FUNC(clcd_state::via1_pb_w)); via1.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); via1.ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe)).invert(); via1.cb2_handler().set("speaker", FUNC(speaker_sound_device::level_w)); - MOS6551(config, m_acia, 1000000); - m_acia->set_xtal(XTAL(1'843'200)); + MOS6551(config, m_acia, 4_MHz_XTAL / 4); + m_acia->set_xtal(1.8432_MHz_XTAL); m_acia->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<2>)); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); @@ -763,7 +766,7 @@ void clcd_state::clcd(machine_config &config) bankdev->set_stride(0x400); } - MSM58321(config, m_rtc, XTAL(32'768)); + MSM58321(config, m_rtc, 32.768_kHz_XTAL); m_rtc->d0_handler().set("via1", FUNC(via6522_device::write_pa0)); m_rtc->d1_handler().set("via1", FUNC(via6522_device::write_pa1)); m_rtc->d2_handler().set("via1", FUNC(via6522_device::write_pa2)); @@ -772,7 +775,7 @@ void clcd_state::clcd(machine_config &config) m_rtc->set_year0(1984); m_rtc->set_default_24h(true); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_refresh_hz(80); screen.set_screen_update(FUNC(clcd_state::screen_update)); @@ -796,14 +799,15 @@ void clcd_state::clcd(machine_config &config) ROM_START( clcd ) ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_SYSTEM_BIOS( 0, "apr85", "Bil Herd Prototype" ) - ROMX_LOAD( "ss,calc 13apr.u105", 0x000000, 0x0008000, CRC(88a587a7) SHA1(b08f3169b7cd696bb6a9b6e6e87a077345377ac4), ROM_BIOS(0)) - ROMX_LOAD( "wp,t,m 13apr.u104", 0x008000, 0x0008000, CRC(41028c3c) SHA1(fcab6f0bbeef178eb8e5ecf82d9c348d8f318a8f), ROM_BIOS(0)) - ROMX_LOAD( "s12apr.u103", 0x010000, 0x0008000, CRC(0aa91d9f) SHA1(f0842f370607f95d0a0ec6afafb81bc063c32745), ROM_BIOS(0)) - ROMX_LOAD( "k12apr.u102", 0x018000, 0x0008000, CRC(59103d52) SHA1(e49c20b237a78b54c2cb26b133d5903bb60bd8ef), ROM_BIOS(0)) + ROMX_LOAD( "ss,calc 13apr.u105", 0x000000, 0x008000, CRC(88a587a7) SHA1(b08f3169b7cd696bb6a9b6e6e87a077345377ac4), ROM_BIOS(0) ) + ROMX_LOAD( "wp,t,m 13apr.u104", 0x008000, 0x008000, CRC(41028c3c) SHA1(fcab6f0bbeef178eb8e5ecf82d9c348d8f318a8f), ROM_BIOS(0) ) + ROMX_LOAD( "s12apr.u103", 0x010000, 0x008000, CRC(0aa91d9f) SHA1(f0842f370607f95d0a0ec6afafb81bc063c32745), ROM_BIOS(0) ) + ROMX_LOAD( "k12apr.u102", 0x018000, 0x008000, CRC(59103d52) SHA1(e49c20b237a78b54c2cb26b133d5903bb60bd8ef), ROM_BIOS(0) ) // Patch RTC register table by swapping day & month values - ROMX_FILL(0x1c216, 1, 0x09, ROM_BIOS(0)) - ROMX_FILL(0x1c217, 1, 0x07, ROM_BIOS(0)) + ROMX_FILL( 0x1c216, 1, 0x09, ROM_BIOS(0) ) + ROMX_FILL( 0x1c217, 1, 0x07, ROM_BIOS(0) ) ROM_SYSTEM_BIOS( 1, "may85", "Jeff Porter prototype" ) ROMX_LOAD( "s 3-24-85.u108", 0x000000, 0x008000, CRC(52db0ee9) SHA1(bea1e04fb88d205ebac7a1dbe2f5e98f84e7a3a7), ROM_BIOS(1) ) From 30443ea512da3430d0ea42fc771ada1125c1a584 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 14 Dec 2024 14:57:43 -0500 Subject: [PATCH 13/40] cpc_cass.xml: Metadata updates - Add author, developer and serial fields to many entries (particularly Amsoft games) - Correct a few titles and publishers somewhat, adding diacritics to some French titles --- hash/cpc_cass.xml | 581 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 481 insertions(+), 100 deletions(-) diff --git a/hash/cpc_cass.xml b/hash/cpc_cass.xml index e3a81eed1d7..a5b562bb3d1 100644 --- a/hash/cpc_cass.xml +++ b/hash/cpc_cass.xml @@ -449,6 +449,8 @@ Please stick to using the floppy versions for the time being... 3D Boxing (UK) 1985 Amsoft + + @@ -489,6 +491,8 @@ Please stick to using the floppy versions for the time being... 3D Fight (France) 1985 Loriciels + + @@ -501,6 +505,8 @@ Please stick to using the floppy versions for the time being... 3D Grand Prix (UK) 1985 Amsoft + + @@ -573,6 +579,8 @@ Please stick to using the floppy versions for the time being... 3D Stunt Rider (UK) 1985 Amsoft + + @@ -598,6 +606,8 @@ Please stick to using the floppy versions for the time being... 3D-Invaders (UK) 1985 Amsoft + + @@ -623,6 +633,8 @@ Please stick to using the floppy versions for the time being... 3D-Sub (France) 1985 Loriciels + + @@ -647,6 +659,7 @@ Please stick to using the floppy versions for the time being... 4 Game Pack No. 1 (UK) 1991 Atlantis Software + @@ -664,6 +677,7 @@ Please stick to using the floppy versions for the time being... 4 Game Pack No. 2 (UK) 1992 Atlantis Software + @@ -681,6 +695,7 @@ Please stick to using the floppy versions for the time being... 4 Game Pack No. 3 (UK) 1992 Atlantis Software + @@ -799,7 +814,8 @@ Please stick to using the floppy versions for the time being... 500cc Grand Prix (UK) 1986 - Microids + Microïds + @@ -809,9 +825,11 @@ Please stick to using the floppy versions for the time being... - Le 5eme Axe (France) + Le 5ème Axe (France) 1985 Loriciels + + @@ -915,6 +933,7 @@ Please stick to using the floppy versions for the time being... A 320 (France) 1988 Loriciels + @@ -1227,6 +1246,8 @@ Please stick to using the floppy versions for the time being... Admiral Graf Spee (UK) 1984 Amsoft + + @@ -1240,6 +1261,7 @@ Please stick to using the floppy versions for the time being... Admiral Graf Spee (Spain) 1984 Amsoft + @@ -1250,9 +1272,9 @@ Please stick to using the floppy versions for the time being... - Advanced Destroyer Simulator (Spain) + A.D.S. - Advanced Destroyer Simulator (Spain) 1990 - Loriciels + Futura / Proein Soft Line @@ -1471,6 +1493,8 @@ Please stick to using the floppy versions for the time being... L'Aigle d'Or (France) 1986 Loriciels + + @@ -1485,9 +1509,9 @@ Please stick to using the floppy versions for the time being... - Air Traffic Control (UK) + Heathrow International Air Traffic Control (UK) 1984 - Hewson + Hewson Consultants @@ -1532,6 +1556,8 @@ Please stick to using the floppy versions for the time being... Airwolf (UK) 1985 Amsoft + + @@ -1544,6 +1570,8 @@ Please stick to using the floppy versions for the time being... Airwolf (UK, alt) 1985 Amsoft + + @@ -1636,9 +1664,11 @@ Please stick to using the floppy versions for the time being... - Alex Higgins World Pool (UK) + Alex Higgins' World Pool (UK) 1985 Amsoft + + @@ -1648,9 +1678,11 @@ Please stick to using the floppy versions for the time being... - Alex Higgins World Snooker (UK) + Alex Higgins' World Snooker (UK) 1985 Amsoft + + @@ -1687,6 +1719,8 @@ Please stick to using the floppy versions for the time being... Alien (UK) 1985 Amsoft + + @@ -1723,8 +1757,10 @@ Please stick to using the floppy versions for the time being... Alien Break-In (UK) 1985 Amsoft + + - + @@ -1855,6 +1891,8 @@ Please stick to using the floppy versions for the time being... Alpine Games (UK) 1987 Atlantis Software + + @@ -2098,6 +2136,8 @@ Please stick to using the floppy versions for the time being... American Football (UK) 1984 Amsoft + + @@ -2160,9 +2200,11 @@ Please stick to using the floppy versions for the time being... - Amlettres (France) + Amlettres - Traitement de Textes (France) 1984 Amsoft France + + @@ -2201,9 +2243,10 @@ Please stick to using the floppy versions for the time being... - Amsbase (Spain) + Amsbase - Base de Datos (Spain) 1984 Amsoft + @@ -2242,6 +2285,8 @@ Please stick to using the floppy versions for the time being... AmsGolf (UK) 1984 Amsoft + + @@ -2345,6 +2390,7 @@ Please stick to using the floppy versions for the time being... Amstest 1985 Amsoft + @@ -2537,9 +2583,11 @@ Please stick to using the floppy versions for the time being... - Amstroid (France) + Amstroïd (France) 1985 Sprites + + @@ -2587,7 +2635,7 @@ Please stick to using the floppy versions for the time being... Anarchy (UK) 1988 - Hewson + Hewson Consultants @@ -2693,9 +2741,11 @@ Please stick to using the floppy versions for the time being... - Animal / Vegetable / Mineral (UK) + Animal, Vegetable, Mineral (UK) 1984 Amsoft + + @@ -2705,7 +2755,7 @@ Please stick to using the floppy versions for the time being... - Animal / Vegetal / Mineral (France) + Animal, Vegetal, Mineral (France) 1984 Amsoft @@ -2717,9 +2767,10 @@ Please stick to using the floppy versions for the time being... - Animal / Vegetable / Mineral (Spain) + Animal, Vegetable, Mineral (Spain) 1984 Amsoft + @@ -2872,6 +2923,8 @@ Please stick to using the floppy versions for the time being... L'Apprenti Sorcier (France) 1985 Amsoft + + @@ -3267,6 +3320,8 @@ Please stick to using the floppy versions for the time being... Asalto (Spain) 1985 Amsoft + + @@ -3368,6 +3423,8 @@ Please stick to using the floppy versions for the time being... Astro Attack (UK) 1984 Amsoft + + @@ -3427,7 +3484,7 @@ Please stick to using the floppy versions for the time being... Athlete (France) 1986 - Microids + Microïds @@ -3464,6 +3521,8 @@ Please stick to using the floppy versions for the time being... Atom Smasher (Spain) 1984 Amsoft + + @@ -3476,6 +3535,8 @@ Please stick to using the floppy versions for the time being... Atom Smasher (UK) 1984 Amsoft + + @@ -3488,6 +3549,7 @@ Please stick to using the floppy versions for the time being... Atomic Driver (France) 1988 Loriciels + @@ -3606,6 +3668,9 @@ Please stick to using the floppy versions for the time being... Automec (France) 1985 Loriciels + + + @@ -3795,6 +3860,7 @@ Please stick to using the floppy versions for the time being... Bactron (UK) 1986 Loriciels + @@ -3807,6 +3873,8 @@ Please stick to using the floppy versions for the time being... Bactron (France) 1986 Loriciels + + @@ -4375,7 +4443,7 @@ Please stick to using the floppy versions for the time being... Battle Valley (UK) 1988 - Hewson + Hewson Consultants @@ -4703,6 +4771,8 @@ Please stick to using the floppy versions for the time being... Billar - Snooker (UK) 1984 Amsoft + + @@ -4715,6 +4785,8 @@ Please stick to using the floppy versions for the time being... Billy La Banlieue (France) 1986 Loriciels + + @@ -4726,7 +4798,8 @@ Please stick to using the floppy versions for the time being... Billy La Banlieue (Spain) 1986 - Loriciels + Loriciels / Proein Soft Line + @@ -4848,6 +4921,7 @@ Please stick to using the floppy versions for the time being... Birdie (UK) 1987 Ere Informatique + @@ -4983,6 +5057,8 @@ Please stick to using the floppy versions for the time being... Blagger (UK, AMSoft) 1985 Amsoft + + @@ -5330,6 +5406,8 @@ Please stick to using the floppy versions for the time being... Boinggg! (UK) 1988 Atlantis Software + + @@ -5676,6 +5754,8 @@ Please stick to using the floppy versions for the time being... Braxx Bluff (UK) 1985 Amsoft + + @@ -5773,6 +5853,8 @@ Please stick to using the floppy versions for the time being... Bridge-It (UK) 1984 Amsoft + + @@ -6718,6 +6800,8 @@ Please stick to using the floppy versions for the time being... Catastrophes - Ile Infernale (UK) 1985 Amsoft + + @@ -6802,6 +6886,7 @@ Please stick to using the floppy versions for the time being... Cavemania (UK) 1991 Atlantis Software + @@ -6838,6 +6923,9 @@ Please stick to using the floppy versions for the time being... Centre Court (Spain) 1984 Amsoft + + + @@ -7335,7 +7423,7 @@ Please stick to using the floppy versions for the time being... Chicago 90 (France) 1989 - Microids + Microïds @@ -7360,6 +7448,8 @@ Please stick to using the floppy versions for the time being... Des Chiffres et des Lettres (France) 1987 Loriciels + + @@ -7372,6 +7462,8 @@ Please stick to using the floppy versions for the time being... Les Chiffres Magiques (France) 1984 Amsoft + + @@ -7441,7 +7533,7 @@ Please stick to using the floppy versions for the time being... The Chip Factory Featuring 'Technician Ted' (UK) 1984 - Hewson + Hewson Consultants @@ -7729,7 +7821,7 @@ Please stick to using the floppy versions for the time being... City Slicker (UK) 1986 - Hewson + Hewson Consultants @@ -7742,6 +7834,8 @@ Please stick to using the floppy versions for the time being... Classic Adventure (UK) 1984 Amsoft + + @@ -7868,6 +7962,8 @@ Please stick to using the floppy versions for the time being... Classic Racing (UK) 1985 Amsoft + + @@ -8059,6 +8155,9 @@ Please stick to using the floppy versions for the time being... Codename Mat (UK) 1985 Amsoft + + + @@ -8980,9 +9079,9 @@ Please stick to using the floppy versions for the time being... - Cours de Solfege, Niveau 1 (France) + Cours de Solfège, Niveau 1 (France) 1984 - TMPI + Techni-Musique & Parole Informatique (TMPI) @@ -8992,9 +9091,11 @@ Please stick to using the floppy versions for the time being... - La Course a la Boussole (France) + La Course à la Boussole (France) 1984 Amsoft + + @@ -9089,6 +9190,7 @@ Please stick to using the floppy versions for the time being... Crack-Up (UK) 1989 Atlantis Software + @@ -9173,6 +9275,8 @@ Please stick to using the floppy versions for the time being... Crazy Golf (UK) 1984 Amsoft + + @@ -9196,7 +9300,7 @@ Please stick to using the floppy versions for the time being... Crazy Shot (Spain) 1989 - Loriciels + Loriciels / Proein Soft Line @@ -9291,6 +9395,8 @@ Please stick to using the floppy versions for the time being... Crossfire (UK) 1990 Atlantis Software + + @@ -9385,6 +9491,8 @@ Please stick to using the floppy versions for the time being... Cubit (UK) 1985 Amsoft + + @@ -9556,7 +9664,9 @@ Please stick to using the floppy versions for the time being... Cybernoid (UK) 1988 - Hewson + Hewson Consultants + + @@ -9568,7 +9678,9 @@ Please stick to using the floppy versions for the time being... Cybernoid II (UK) 1988 - Hewson + Hewson Consultants + + @@ -9617,6 +9729,8 @@ Please stick to using the floppy versions for the time being... Cyrus II Chess (UK) 1985 Amsoft + + @@ -10485,7 +10599,7 @@ Please stick to using the floppy versions for the time being... Deliverance (UK) 1990 - Hewson + Hewson Consultants @@ -10498,7 +10612,7 @@ Please stick to using the floppy versions for the time being... Deliverance (Spain) 1990 - Hewson + Hewson Consultants @@ -10691,6 +10805,9 @@ Please stick to using the floppy versions for the time being... Detective (UK) 1984 Amsoft + + + @@ -10763,6 +10880,8 @@ Please stick to using the floppy versions for the time being... DFM 464 (UK) 1984 Amsoft + + @@ -10789,9 +10908,11 @@ Please stick to using the floppy versions for the time being... - Le Diamant de l'Ile Maudite (France) + Le Diamant de l'Île Maudite (France) 1985 Loriciels + + @@ -10833,6 +10954,8 @@ Please stick to using the floppy versions for the time being... Dianne - Mission Rubidiums (France) 1985 Loriciels + + @@ -11360,6 +11483,8 @@ Please stick to using the floppy versions for the time being... Doors of Doom (UK) 1985 Amsoft + + @@ -11691,6 +11816,8 @@ Please stick to using the floppy versions for the time being... Dragon's Gold (UK) 1985 Amsoft + + @@ -11731,7 +11858,8 @@ Please stick to using the floppy versions for the time being... The Dragontorc of Avalon (UK) 1985 - Hewson + Hewson Consultants + @@ -11917,9 +12045,11 @@ Please stick to using the floppy versions for the time being... - Dungeons Amethysts Alchemists (UK) + Dungeons, Amethysts, Alchemists (UK) 1987 Atlantis Software + + @@ -12156,6 +12286,9 @@ Please stick to using the floppy versions for the time being... Easi-Amsword (UK) 1984 Amsoft + + + @@ -12168,6 +12301,9 @@ Please stick to using the floppy versions for the time being... Easi-Amsword (Spain) 1984 Amsoft + + + @@ -12177,9 +12313,11 @@ Please stick to using the floppy versions for the time being... - Easy Topword (Germany) + Easy-Topword - Textverarbeitung (Germany) 1984 - Schneider Computer Software + Schneider Computer Division + + @@ -12273,7 +12411,7 @@ Please stick to using the floppy versions for the time being... Eddie Edwards Super Ski (UK) 1988 - Loriciels + Loriciels / Microïds @@ -12295,9 +12433,12 @@ Please stick to using the floppy versions for the time being... - Edit-Music (France) + Music Edit (France) 1985 Sprites + + + @@ -12426,6 +12567,8 @@ Please stick to using the floppy versions for the time being... Electro Freddy (UK) 1984 Amsoft + + @@ -12485,7 +12628,7 @@ Please stick to using the floppy versions for the time being... Eliminator (UK) 1988 - Hewson + Hewson Consultants @@ -12599,6 +12742,8 @@ Please stick to using the floppy versions for the time being... Empire (France, Loriciels) 1985 Loriciels + + @@ -12898,6 +13043,8 @@ Please stick to using the floppy versions for the time being... Escape From Khoshima (UK) 1986 Atlantis Software + + @@ -13144,7 +13291,8 @@ Please stick to using the floppy versions for the time being... Evening Star (UK) 1987 - Hewson + Hewson Consultants + @@ -13186,7 +13334,7 @@ Please stick to using the floppy versions for the time being... Everyone's A Wally - Meet The Gang (UK, Mikro-Gen) 1985 - Mikro-gen + Mikro-Gen @@ -13234,7 +13382,8 @@ Please stick to using the floppy versions for the time being... Exolon (UK) 1987 - Hewson + Hewson Consultants + @@ -13246,7 +13395,7 @@ Please stick to using the floppy versions for the time being... Exolon (Spain) 1987 - Hewson + Hewson Consultants / Erbe Software @@ -13565,7 +13714,8 @@ Please stick to using the floppy versions for the time being... Fantasia Diamond (UK) 1985 - Hewson + Hewson Consultants + @@ -13623,6 +13773,8 @@ Please stick to using the floppy versions for the time being... The Fantastic Voyage (UK) 1985 Amsoft + + @@ -13632,7 +13784,7 @@ Please stick to using the floppy versions for the time being... - Fantome City (France) + Fantôme City (France) 1986 Coktel Vision @@ -13973,7 +14125,8 @@ Please stick to using the floppy versions for the time being... Firelord (UK) 1986 - Hewson + Hewson Consultants + @@ -14114,6 +14267,8 @@ Please stick to using the floppy versions for the time being... Flash (France) 1987 Loriciels + + @@ -14608,6 +14763,8 @@ Please stick to using the floppy versions for the time being... Frank 'N' Stein (UK) 1985 Amsoft + + @@ -14849,6 +15006,8 @@ Please stick to using the floppy versions for the time being... Fruit Machine (UK) 1984 Amsoft + + @@ -14897,6 +15056,8 @@ Please stick to using the floppy versions for the time being... Fu-Kung In Las Vegas (UK) 1985 Amsoft + + @@ -15076,6 +15237,7 @@ Please stick to using the floppy versions for the time being... Fusion II (France) 1988 Loriciels + @@ -15182,6 +15344,8 @@ Please stick to using the floppy versions for the time being... The Galactic Plague (UK) 1984 Amsoft + + @@ -15235,6 +15399,9 @@ Please stick to using the floppy versions for the time being... The Game of Dragons (UK) 1985 Amsoft + + + @@ -15466,6 +15633,9 @@ Please stick to using the floppy versions for the time being... Gatecrasher (UK) 1986 Amsoft + + + @@ -15686,6 +15856,9 @@ Please stick to using the floppy versions for the time being... Gems of Stradus (UK, Amsoft, BASIC 1.0) 1985 Amsoft + + + @@ -15875,9 +16048,11 @@ Please stick to using the floppy versions for the time being... - Gestion de Fichier CPC 464 (France) + Gestion de Fichier (France) 1984 Sprites + + @@ -16080,6 +16255,8 @@ Please stick to using the floppy versions for the time being... Glen Hoddle Soccer (UK) 1985 Amsoft + + @@ -16293,7 +16470,8 @@ Please stick to using the floppy versions for the time being... Grand Prix 500cc (France) 1986 - Microids + Microïds + @@ -16305,7 +16483,7 @@ Please stick to using the floppy versions for the time being... Grand Prix 500cc (Spain) 1986 - Microids + Microïds / Proein Soft Line @@ -16330,6 +16508,8 @@ Please stick to using the floppy versions for the time being... Grand Prix Driver (UK) 1984 Amsoft + + @@ -16484,6 +16664,8 @@ Please stick to using the floppy versions for the time being... Graphisto (France, BASIC 1.0) 1985 Sprites + + @@ -16777,7 +16959,7 @@ Please stick to using the floppy versions for the time being... Guardians (UK) 1991 - Loriciels + Loriciel @@ -16894,6 +17076,8 @@ Please stick to using the floppy versions for the time being... Gunfighter (UK) 1990 Atlantis Software + + @@ -17129,6 +17313,8 @@ Please stick to using the floppy versions for the time being... Happy Letters (UK) 1984 Amsoft + + @@ -17141,6 +17327,8 @@ Please stick to using the floppy versions for the time being... Happy Numbers (UK) 1984 Amsoft + + @@ -17153,6 +17341,8 @@ Please stick to using the floppy versions for the time being... Happy Writing (UK) 1984 Amsoft + + @@ -17200,7 +17390,7 @@ Please stick to using the floppy versions for the time being... Harricana - Raid International Motoneige (France) 1990 - Loriciels + Loriciel @@ -17213,6 +17403,8 @@ Please stick to using the floppy versions for the time being... Harrier Attack (UK) 1984 Amsoft + + @@ -17273,6 +17465,8 @@ Please stick to using the floppy versions for the time being... Haunted Hedges (UK) 1984 Amsoft + + @@ -17501,6 +17695,8 @@ Please stick to using the floppy versions for the time being... Heliot (France) 1984 Sprites + + @@ -17813,7 +18009,7 @@ Please stick to using the floppy versions for the time being... Hit Sports 1991 - Loriciels + Loriciel @@ -18060,11 +18256,13 @@ Please stick to using the floppy versions for the time being... Loriciels + + @@ -18075,13 +18273,16 @@ Please stick to using the floppy versions for the time being... Les Hits 2 de Loriciels (France) 1987 Loriciels + + + @@ -18128,6 +18329,8 @@ Please stick to using the floppy versions for the time being... Hobgoblin (UK) 1991 Atlantis Software + + @@ -18446,6 +18649,8 @@ Please stick to using the floppy versions for the time being... Hunchback (UK, v1) 1985 Amsoft + + @@ -18458,6 +18663,8 @@ Please stick to using the floppy versions for the time being... Hunchback (UK, v2) 1985 Amsoft + + @@ -18562,6 +18769,8 @@ Please stick to using the floppy versions for the time being... Hunter Killer (UK) 1984 Amsoft + + @@ -18855,7 +19064,8 @@ Please stick to using the floppy versions for the time being... Impossaball (UK) 1987 - Hewson + Hewson Consultants + @@ -19044,6 +19254,8 @@ Please stick to using the floppy versions for the time being... Infernal Runner (France) 1985 Loriciels + + @@ -19448,6 +19660,8 @@ Please stick to using the floppy versions for the time being... Isoleur (France) 1985 Sprites + + @@ -19731,6 +19945,8 @@ Please stick to using the floppy versions for the time being... Jammin (UK) 1985 Amsoft + + @@ -19807,6 +20023,8 @@ Please stick to using the floppy versions for the time being... Jet-Boot Jack (UK) 1984 Amsoft + + @@ -20181,6 +20399,7 @@ Please stick to using the floppy versions for the time being... K.Y.A. (France) 1987 Loriciels + @@ -21027,6 +21246,8 @@ Please stick to using the floppy versions for the time being... Laserwarp (UK) 1985 Amsoft + + @@ -21164,6 +21385,8 @@ Please stick to using the floppy versions for the time being... League Challenge (UK) 1987 Atlantis Software + + @@ -22040,6 +22263,8 @@ Please stick to using the floppy versions for the time being... Macrocosmica (UK) 1986 Amsoft + + @@ -22381,6 +22606,8 @@ Please stick to using the floppy versions for the time being... Manic Miner (UK, Amsoft, BASIC 1.0) 1984 Amsoft + + @@ -22466,6 +22693,8 @@ Please stick to using the floppy versions for the time being... Map Rally (UK) 1984 Amsoft + + @@ -22513,7 +22742,7 @@ Please stick to using the floppy versions for the time being... Marauder (UK) 1988 - Hewson + Hewson Consultants @@ -22574,6 +22803,8 @@ Please stick to using the floppy versions for the time being... Marius Tresor Foot (France) 1985 Loriciels + + @@ -22658,6 +22889,8 @@ Please stick to using the floppy versions for the time being... MasterChess (UK, Amsoft) 1984 Amsoft + + @@ -22951,7 +23184,7 @@ Please stick to using the floppy versions for the time being... Maze Mania (Spain) 1989 - Hewson + Hewson Consultants / Erbe Software @@ -23248,7 +23481,7 @@ Please stick to using the floppy versions for the time being... - Menace sur l'Arctique (France) + Les Aventures du Ka 6 - Menace sur l'Arctique (France) 1987 Chip @@ -23460,7 +23693,7 @@ Please stick to using the floppy versions for the time being... - Meurtre a Grande Vitesse (France) + Meurtre à Grande Vitesse (France) 1985 Cobra Soft @@ -24065,6 +24298,7 @@ Please stick to using the floppy versions for the time being... Mobile Man (France) 1990 Loriciels + @@ -24322,7 +24556,7 @@ Please stick to using the floppy versions for the time being... Moon Blaster (UK) 1990 - Loriciels + Loriciel @@ -24340,6 +24574,7 @@ Please stick to using the floppy versions for the time being... Moontorc (UK) 1991 Atlantis Software + @@ -24608,6 +24843,8 @@ Please stick to using the floppy versions for the time being... Mr. Wong's Loopy Laundry (UK, v2) 1984 Amsoft + + @@ -24620,6 +24857,8 @@ Please stick to using the floppy versions for the time being... Mr. Wong's Loopy Laundry (UK) 1984 Amsoft + + @@ -24855,6 +25094,8 @@ Please stick to using the floppy versions for the time being... Mutant Monty (UK) 1984 Amsoft + + @@ -24922,9 +25163,12 @@ Please stick to using the floppy versions for the time being... - Le Mystere de Kikekankoi (France) + Le Mystère de Kikekankoi (France) 1985 Loriciels + + + @@ -25139,7 +25383,7 @@ Please stick to using the floppy versions for the time being... Nebulus (UK) 1988 - Hewson + Hewson Consultants @@ -25211,7 +25455,8 @@ Please stick to using the floppy versions for the time being... Netherworld (UK) 1988 - Hewson + Hewson Consultants + @@ -25812,6 +26057,8 @@ Please stick to using the floppy versions for the time being... Nuclear Defence (UK) 1986 Amsoft + + @@ -25847,7 +26094,8 @@ Please stick to using the floppy versions for the time being... Number Painter (UK) 1984 - ASK + Applied Systems Knowledge (ASK) + @@ -25961,7 +26209,7 @@ Please stick to using the floppy versions for the time being... Ocean Conqueror (UK) 1988 - Hewson + Hewson Consultants @@ -26039,6 +26287,8 @@ Please stick to using the floppy versions for the time being... Oh Mummy (UK) 1984 Amsoft + + @@ -26051,6 +26301,8 @@ Please stick to using the floppy versions for the time being... Oh Mummy (Spain) 1984 Amsoft + + @@ -26121,9 +26373,10 @@ Please stick to using the floppy versions for the time being... - Olympiad (UK) + Olympiad '86 (UK) 1986 Atlantis Software + @@ -26649,7 +26902,7 @@ Please stick to using the floppy versions for the time being... Panza Kick Boxing (France) 1990 - Loriciels + Futura @@ -26666,7 +26919,7 @@ Please stick to using the floppy versions for the time being... Panza Kick Boxing (Spain) 1990 - Loriciels + Futura / Proein Soft Line @@ -26920,9 +27173,11 @@ Please stick to using the floppy versions for the time being... - Pearl Harbour (France, BASIC 1.0) + Pearl Harbor (France, BASIC 1.0) 1985 Sprites + + @@ -27057,6 +27312,7 @@ Please stick to using the floppy versions for the time being... Periscope Up (UK) 1989 Atlantis Software + @@ -27213,11 +27469,13 @@ Please stick to using the floppy versions for the time being... Loriciels + + @@ -27326,7 +27584,7 @@ Please stick to using the floppy versions for the time being... Pinball Magic (France) 1990 - Loriciels + Loriciel @@ -27463,6 +27721,8 @@ Please stick to using the floppy versions for the time being... Pitman Typing Tutor (UK) 1984 Amsoft + + @@ -27475,6 +27735,8 @@ Please stick to using the floppy versions for the time being... La Plaga Galactica (Spain) 1984 Amsoft + + @@ -27559,9 +27821,11 @@ Please stick to using the floppy versions for the time being... - Planete Base (France) + Planète Base (France) 1985 Loriciels + + @@ -27835,6 +28099,8 @@ Please stick to using the floppy versions for the time being... Pouvoir (France) 1986 Loriciels + + @@ -28138,6 +28404,8 @@ Please stick to using the floppy versions for the time being... The Prize (UK) 1985 Amsoft + + @@ -28150,6 +28418,7 @@ Please stick to using the floppy versions for the time being... Pro Golf (UK) 1987 Atlantis Software + @@ -28598,6 +28867,8 @@ Please stick to using the floppy versions for the time being... Punchy (UK) 1985 Amsoft + + @@ -28651,6 +28922,8 @@ Please stick to using the floppy versions for the time being... Pyjamarama (UK, Amsoft) 1984 Amsoft + + @@ -28728,6 +29001,8 @@ Please stick to using the floppy versions for the time being... Qabbalah (UK) 1986 Amsoft + + @@ -28740,6 +29015,8 @@ Please stick to using the floppy versions for the time being... Quack A Jack (UK) 1984 Amsoft + + @@ -28751,7 +29028,9 @@ Please stick to using the floppy versions for the time being... Quad (Spain) 1987 - Microids + Microïds + + @@ -28763,7 +29042,7 @@ Please stick to using the floppy versions for the time being... Quadrel (France) 1991 - Loriciels + Loriciel @@ -28781,6 +29060,8 @@ Please stick to using the floppy versions for the time being... Quaterne (France) 1985 Sprites + + @@ -29099,6 +29380,8 @@ Please stick to using the floppy versions for the time being... Rally II (France) 1985 Loriciels + + @@ -29108,9 +29391,9 @@ Please stick to using the floppy versions for the time being... - Rally II (UK) + Grand Prix Rally II (UK) 1985 - Loriciels + Loriciels / Amsoft @@ -29218,7 +29501,7 @@ Please stick to using the floppy versions for the time being... Ranarama (Spain) 1987 - Hewson + Hewson Consultants / Erbe Software @@ -29230,7 +29513,8 @@ Please stick to using the floppy versions for the time being... Ranarama (UK) 1987 - Hewson + Hewson Consultants + @@ -29578,6 +29862,8 @@ Please stick to using the floppy versions for the time being... Relief Action (France) 1987 Loriciels + + @@ -29749,6 +30035,7 @@ Please stick to using the floppy versions for the time being... Revenge of the C5 (UK) 1986 Atlantis Software + @@ -29761,6 +30048,8 @@ Please stick to using the floppy versions for the time being... Reversi Champion (France) 1986 Loriciels + + @@ -30366,6 +30655,8 @@ Please stick to using the floppy versions for the time being... Roland Ahoy! (UK) 1984 Amsoft + + @@ -30378,6 +30669,7 @@ Please stick to using the floppy versions for the time being... Roland en el Espacio (Spain) 1984 Indescomp + @@ -30390,6 +30682,8 @@ Please stick to using the floppy versions for the time being... Roland Goes Digging (UK) 1984 Amsoft + + @@ -30402,6 +30696,8 @@ Please stick to using the floppy versions for the time being... Roland Goes Square Bashing (UK) 1984 Amsoft + + @@ -30413,7 +30709,9 @@ Please stick to using the floppy versions for the time being... Roland in the Caves (UK) 1984 - Indescomp + Amsoft + + @@ -30426,6 +30724,8 @@ Please stick to using the floppy versions for the time being... Roland in Time (UK) 1984 Amsoft + + @@ -30437,7 +30737,9 @@ Please stick to using the floppy versions for the time being... Roland on the Ropes (UK) 1984 - Zigurat + Amsoft + + @@ -30450,6 +30752,8 @@ Please stick to using the floppy versions for the time being... Roland on the Run (UK) 1984 Amsoft + + @@ -30915,6 +31219,7 @@ Please stick to using the floppy versions for the time being... Salut l'Artiste (France) 1984 Amsoft + @@ -30999,6 +31304,8 @@ Please stick to using the floppy versions for the time being... Sapiens (France) 1986 Loriciels + + @@ -31035,6 +31342,7 @@ Please stick to using the floppy versions for the time being... S.A.S. Assault Course. (UK) 1986 Atlantis Software + @@ -31117,6 +31425,8 @@ Please stick to using the floppy versions for the time being... Satellite Warrior (UK) 1985 Amsoft + + @@ -31177,9 +31487,10 @@ Please stick to using the floppy versions for the time being... - Schneider Basic-Lehrbuch Teil 1 (Germany) + Schneider BASIC-Lehrbuch Teil 1 (Germany) 1984 - Amsoft + Schneider Computer Division + @@ -31204,9 +31515,10 @@ Please stick to using the floppy versions for the time being... - Schneider Basic-Lehrbuch Teil 2 (Germany) + Schneider BASIC-Lehrbuch Teil 2 (Germany) 1985 - Amsoft + Schneider Computer Division + @@ -31282,6 +31594,8 @@ Please stick to using the floppy versions for the time being... The Scout Steps Out (UK) 1985 Amsoft + + @@ -31419,6 +31733,8 @@ Please stick to using the floppy versions for the time being... Le Secret du Tombeau (France) 1986 Loriciels + + @@ -31430,7 +31746,8 @@ Please stick to using the floppy versions for the time being... El Secreto de la Tumba (Spain) 1986 - Loriciels + Loriciels / Proein Soft Line + @@ -31793,7 +32110,7 @@ Please stick to using the floppy versions for the time being... Sherman M4 (Spain) 1990 - Loriciels + Loriciel @@ -32279,6 +32596,7 @@ Please stick to using the floppy versions for the time being... Skatin' USA (UK) 1990 Atlantis Software + @@ -32343,7 +32661,7 @@ Please stick to using the floppy versions for the time being... Skweek (Spain) 1989 - Loriciels + Loriciels / Proein Soft Line @@ -32488,6 +32806,7 @@ Please stick to using the floppy versions for the time being... Snoball in Hell! (UK) 1989 Atlantis Software + @@ -32925,7 +33244,8 @@ Please stick to using the floppy versions for the time being... Southern Belle (UK) 1985 - Hewson + Hewson Consultants + @@ -33025,6 +33345,8 @@ Please stick to using the floppy versions for the time being... Space Hawks (UK) 1984 Amsoft + + @@ -33037,6 +33359,7 @@ Please stick to using the floppy versions for the time being... Space Racer (France) 1988 Loriciels + @@ -33108,7 +33431,8 @@ Please stick to using the floppy versions for the time being... Space Trader (UK) 1986 - Amsoft + Atlantis Software + @@ -33335,6 +33659,7 @@ Please stick to using the floppy versions for the time being... Spindrone (UK) 1988 Atlantis Software + @@ -33494,6 +33819,8 @@ Please stick to using the floppy versions for the time being... Spooky Castle (UK) 1990 Atlantis Software + + @@ -34163,6 +34490,8 @@ Please stick to using the floppy versions for the time being... Stock-Aid (Spain) 1984 Amsoft + + @@ -34187,6 +34516,8 @@ Please stick to using the floppy versions for the time being... Stockmarket (UK) 1985 Amsoft + + @@ -34270,7 +34601,8 @@ Please stick to using the floppy versions for the time being... Stormlord (UK) 1989 - Hewson + Hewson Consultants + @@ -34789,6 +35121,8 @@ Please stick to using the floppy versions for the time being... Subterranean Stryker (UK) 1986 Amsoft + + @@ -34813,6 +35147,8 @@ Please stick to using the floppy versions for the time being... Sultan's Maze (Spain) 1984 Amsoft + + @@ -34825,6 +35161,8 @@ Please stick to using the floppy versions for the time being... Sultan's Maze (UK, BASIC 1.0) 1984 Amsoft + + @@ -35035,6 +35373,8 @@ Please stick to using the floppy versions for the time being... Super Pipeline II (UK) 1985 Amsoft + + @@ -35143,7 +35483,9 @@ Please stick to using the floppy versions for the time being... Super Ski (France) 1988 - Microids + Microïds + + @@ -35155,7 +35497,7 @@ Please stick to using the floppy versions for the time being... Super Skweek (France) 1990 - Loriciels + Loriciel @@ -35172,7 +35514,7 @@ Please stick to using the floppy versions for the time being... Super Skweek (Spain) 1990 - Loriciels + Loriciels / Proein Soft Line @@ -35327,6 +35669,7 @@ Please stick to using the floppy versions for the time being... Superkid (UK) 1990 Atlantis Software + @@ -35339,6 +35682,7 @@ Please stick to using the floppy versions for the time being... Superkid in Space (UK) 1991 Atlantis Software + @@ -35494,6 +35838,7 @@ Please stick to using the floppy versions for the time being... The Survivors (UK) 1988 Atlantis Software + @@ -35776,6 +36121,8 @@ Please stick to using the floppy versions for the time being... Tank Commander (UK) 1986 Amsoft + + @@ -35836,6 +36183,7 @@ Please stick to using the floppy versions for the time being... Tapper (UK) 1986 Amsoft + @@ -35908,6 +36256,7 @@ Please stick to using the floppy versions for the time being... Tascopy 464 (Spain) 1984 Microbyte + @@ -35937,6 +36286,7 @@ Please stick to using the floppy versions for the time being... Tasprint 464 (Spain) 1984 Microbyte + @@ -35970,7 +36320,7 @@ Please stick to using the floppy versions for the time being... - Teach Yourself Amstrad Basic Part 1 (UK) + Teach Yourself Amstrad BASIC Part 1 (UK) 1984 Amsoft @@ -35987,7 +36337,7 @@ Please stick to using the floppy versions for the time being... - Teach Yourself Amstrad Basic Part 2 (UK) + Teach Yourself Amstrad BASIC Part 2 (UK) 1985 Amsoft @@ -36185,7 +36535,7 @@ Please stick to using the floppy versions for the time being... Le Temps des Heros (Europe?) 1991 - Loriciels + Loriciel @@ -36228,6 +36578,7 @@ Please stick to using the floppy versions for the time being... Ten-Pin Challenge (UK) 1987 Atlantis Software + @@ -36240,6 +36591,9 @@ Please stick to using the floppy versions for the time being... Tennis 3D (France) 1986 Loriciels + + + @@ -36251,7 +36605,7 @@ Please stick to using the floppy versions for the time being... Tennis Cup (France) 1989 - Loriciels + Loriciel @@ -36983,6 +37337,8 @@ Please stick to using the floppy versions for the time being... Tie Break (France) 1985 Sprites + + @@ -37096,6 +37452,8 @@ Please stick to using the floppy versions for the time being... Timeman One (UK) 1984 Amsoft + + @@ -37108,6 +37466,8 @@ Please stick to using the floppy versions for the time being... Timeman Two (UK) 1984 Amsoft + + @@ -37413,6 +37773,8 @@ Please stick to using the floppy versions for the time being... Tombstowne (UK) 1985 Amsoft + + @@ -37449,6 +37811,8 @@ Please stick to using the floppy versions for the time being... Tony Truand (France) 1985 Loriciels + + @@ -37582,6 +37946,8 @@ Please stick to using the floppy versions for the time being... Torann (France) 1985 Loriciels + + @@ -37765,6 +38131,8 @@ Please stick to using the floppy versions for the time being... Traffic (UK) 1985 Amsoft + + @@ -38874,7 +39242,7 @@ Please stick to using the floppy versions for the time being... Uridium (UK) 1987 - Hewson + Hewson Consultants @@ -38899,6 +39267,8 @@ Please stick to using the floppy versions for the time being... Vagan Attack (UK) 1985 Atlantis Software + + @@ -40177,6 +40547,8 @@ Please stick to using the floppy versions for the time being... Wordhang (UK) 1984 Amsoft + + @@ -40411,6 +40783,8 @@ Please stick to using the floppy versions for the time being... World-Wise (UK) 1984 Amsoft + + @@ -40420,9 +40794,11 @@ Please stick to using the floppy versions for the time being... - World-Wise (France) + Le Géographe - France (France) 1984 Amsoft + + @@ -40599,6 +40975,8 @@ Please stick to using the floppy versions for the time being... Xanagrams (UK) 1984 Amsoft + + @@ -40925,7 +41303,7 @@ Please stick to using the floppy versions for the time being... Zapp (UK) 1985 - Hewson + Hewson Consultants @@ -40973,7 +41351,8 @@ Please stick to using the floppy versions for the time being... Zedis II (Spain) 1984 - Amsoft + Microbyte + @@ -41092,6 +41471,8 @@ Please stick to using the floppy versions for the time being... Zox 2099 (France) 1987 Loriciels + + @@ -41115,7 +41496,7 @@ Please stick to using the floppy versions for the time being... Zynaps (UK) 1987 - Hewson + Hewson Consultants @@ -41127,7 +41508,7 @@ Please stick to using the floppy versions for the time being... Zynaps (Spain) 1987 - Hewson + Hewson Consultants / Erbe Software @@ -41139,7 +41520,7 @@ Please stick to using the floppy versions for the time being... Zynaps (UK, alt) 1987 - Hewson + Hewson Consultants From 7b8303b8ee994798211ccb4e6553596e3712fe63 Mon Sep 17 00:00:00 2001 From: m1macrophage <168948267+m1macrophage@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:26:17 -0800 Subject: [PATCH 14/40] Driver for Moog Source, including an interactive layout. No sound. (#12917) * Driver for Moog Source, including an interactive layout. No sound. * moogsource: Fix invalid mirroring. It was a last-minute change from mask() to mirror(), and missed updating map(...). * moog_source.lay: bugfix - attach `interval` input to the button, not the text. * Added checksum. --- src/mame/layout/moog_source.lay | 1178 +++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/moog/source.cpp | 839 ++++++++++++++++++++++ 3 files changed, 2020 insertions(+) create mode 100644 src/mame/layout/moog_source.lay create mode 100644 src/mame/moog/source.cpp diff --git a/src/mame/layout/moog_source.lay b/src/mame/layout/moog_source.lay new file mode 100644 index 00000000000..26a33ffbc92 --- /dev/null +++ b/src/mame/layout/moog_source.lay @@ -0,0 +1,1178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4cc93d55fc4..bed66424af2 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32671,6 +32671,9 @@ sshot // (c) 1979 Model Racing @source:modelracing/subhuntr.cpp subhuntr // 1979 Model Racing +@source:moog/source.cpp +moogsource // Moog Source + @source:morrow/microdec.cpp md2 // md3 // diff --git a/src/mame/moog/source.cpp b/src/mame/moog/source.cpp new file mode 100644 index 00000000000..3af84130486 --- /dev/null +++ b/src/mame/moog/source.cpp @@ -0,0 +1,839 @@ +// license:BSD-3-Clause +// copyright-holders:m1macrophage + +/* +The Moog Source is a CPU-controlled analog monosynth. It lacks knobs and +sliders. Sound parameters are modified by pressing a button for a specific +parameter and using the encoder wheel to modify it. + +The architecture of this synthesizer is typical of digitally-controlled analog +synthesizers. The firmware is responsible for: +* Scanning and reacting to membrane button presses. This is a typical key + matrix setup (see buttons_latch_w(), buttons_a_r(), buttons_b_r()). +* Detecting which key is pressed on the keyboard (see get_keyboard_v()). +* Setting Control Voltages (aka CVs). Detailed info in cv_w(). +* Configuring audio and modulation routing through 4016 switches. See + output_latch_a_w(), output_latch_b_w(). +* Controlling the Loudness and Filter envelope generators (EGs). Starts the + Attack phase when a key is pressed, detects when an EG peaks and transitions + it to the Decay phase, and transitions EGs to the Release phase when a key is + released. +* Controlling the LED displays and cassette I/O. + +The 16 sound programs are stored in battery-backed NVRAM, and can also be stored +to (and loaded from) a cassette. + +This driver is based on the Source's schematics. Most of the circuitry +relevant to this driver is on Board 3 (digital board). Component designations in +comments refer to Board 3, unless otherwise noted. + +This driver attempts to accurately emulate the digital and digital-analog +interface of the synthesizer, including all analog behavior that is relevant to +the firmware. There are still some TODOs left to fully achieve this goal. There +is no attempt to emulate the analogue audio circuit. The driver includes an +interactive layout, and is intended as an educational tool. + +TODO: +- Emulation of MOD input to the CPU. +- Emulation of envelope generator timing. +- Cassette input/output. +*/ + +#include "emu.h" + +#include "cpu/z80/z80.h" +#include "machine/nvram.h" +#include "machine/rescap.h" + +#include "moog_source.lh" + +#define LOG_CV (1U << 1) +#define LOG_BUTTONS (1U << 2) +#define LOG_ENCODER (1U << 3) +#define LOG_KEYBOARD (1U << 4) +#define LOG_CV_KEYBOARD_APPROX (1U << 5) +#define VERBOSE (LOG_GENERAL|LOG_CV) +#define LOG_OUTPUT_FUNC osd_printf_info +#include "logmacro.h" + +namespace +{ + +constexpr const char MAINCPU_TAG[] = "z80"; +constexpr const char NVRAM_TAG[] = "nvram"; + +class source_state : public driver_device +{ +public: + source_state(const machine_config& mconfig, device_type type, + const char* tag) ATTR_COLD + : driver_device(mconfig, type, tag) + , m_maincpu(*this, MAINCPU_TAG) + , m_octave_io(*this, "octave_buttons") + , m_button_a_io(*this, "button_group_a_%d", 0U) + , m_button_b_io(*this, "button_group_b_%d", 0U) + , m_keyboard_io(*this, "keyboard_oct_%d", 1U) + , m_encoder(*this, "incremental_controller") + , m_trigger_io(*this, "trigger_in") + , m_contour_peaked_io(*this, "contour_peaked") + , m_octave_led(*this, "octave_led_%d") + , m_program_display(*this, "program_digit_%d") + , m_edit_display(*this, "edit_digit_%d") + , m_edit_led(*this, "edit_led") + , m_kb_track(*this, "kb_track") + , m_osc_waveform(*this, "osc_%d_waveform", 1U) + , m_sync(*this, "sync") + , m_lfo_to_filter(*this, "lfo_to_filter") + , m_lfo_to_osc(*this, "lfo_to_osc") + , m_lfo_shape(*this, "lfo_shape") + , m_trigger_out(*this, "trigger_out") + , m_cv(static_cast(CV::SIZE), -1) + {} + + void source(machine_config& config) ATTR_COLD; + + void machine_start() override ATTR_COLD; + void machine_reset() override ATTR_COLD; + + DECLARE_INPUT_CHANGED_MEMBER(octave_button_pressed); + DECLARE_INPUT_CHANGED_MEMBER(encoder_moved); + +private: + void update_octave_leds(); + + void edit_latch_w(u8 data); + void output_latch_a_w(u8 data); + void output_latch_b_w(u8 data); + void buttons_latch_w(u8 data); + void program_latch_w(u8 data); + void cassette_w(u8 data); + void cv_w(offs_t offset, u8 data); + + float get_keyboard_v() const; + u8 keyboard_r(); + u8 buttons_r(const required_ioport_array<6>& button_io, const char* name) const; + u8 buttons_a_r(); + u8 buttons_b_r(); + u8 encoder_r(); + + void memory_map(address_map& map) ATTR_COLD; + void io_map(address_map& map) ATTR_COLD; + + required_device m_maincpu; + required_ioport m_octave_io; + required_ioport_array<6> m_button_a_io; + required_ioport_array<6> m_button_b_io; + required_ioport_array<4> m_keyboard_io; + required_ioport m_encoder; + required_ioport m_trigger_io; + required_ioport m_contour_peaked_io; + + output_finder<2> m_octave_led; + output_finder<2> m_program_display; + output_finder<2> m_edit_display; + output_finder<> m_edit_led; + output_finder<> m_kb_track; + output_finder<2> m_osc_waveform; + output_finder<> m_sync; + output_finder<> m_lfo_to_filter; + output_finder<> m_lfo_to_osc; + output_finder<> m_lfo_shape; + output_finder<> m_trigger_out; + + bool m_octave_hi = true; // `true` due to internal pullups of 74LS367 and 7404. + u8 m_button_row_latch = 0xff; + bool m_encoder_incr = false; + + // All MUXes are CD4051B. + // Component designations refer to board 2 (synthesizer board). + // The enum names match the CV labels in the schematic, but some + // abbreviations are expanded. + enum class CV : int + { + // U2 + CUTOFF_COARSE = 0, + AUTO_TUNE_2, + INT_COARSE, + CUTOFF_FINE, + PW_1, + PW_2, + INT_FINE, + OCT_2, + + // U4 + FILTER_CONTOUR_LEVEL, + OCT_1, + GLIDE, + LOUDNESS_COUNTOUR_LEVEL, + OSC_2, + NOISE, + UNUSED, // Sampled in (C22, U10A), but not used. + OSC_1, + + // U5 + EMPHASIS, + NOT_CONNECTED, // U5, Y1 (pin 14) is not connected. + AMT, // Filter contout amount. + RATE, // Modulation (LFO) rate. + KEYBOARD_APPROX, + KEYBOARD_CV, + FILTER_CONTOUR_RATE, + LOUDNESS_CONTOUR_RATE, + + SIZE + }; + std::vector m_cv; + + static constexpr const float MAX_CV = 10; // In Volts. + static constexpr const u8 PATTERNS_7447[16] = + { + 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, + 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0x00, + }; +}; + +void source_state::update_octave_leds() +{ + m_octave_led[0] = m_octave_hi ? 0 : 1; + m_octave_led[1] = m_octave_hi ? 1 : 0; +} + +void source_state::edit_latch_w(u8 data) +{ + // U3 (74LS378) 0-4 (D0-D4) -> U3 (7447, Board 4) A-D -> U4 (MAN 3610A). + // U3 4-5 not connected. + m_edit_display[0] = PATTERNS_7447[data & 0x0f]; + + // U4 (74LS378) 0-4 (D4-D7)-> U5 (7447, Board 4) A-D -> U6 (MAN 3610A). + m_edit_display[1] = PATTERNS_7447[(data >> 4) & 0x0f]; + + // U4 (74LS378) 5, 6 (D0, D7) -> J1-5 (cassette interface, "cassette out"). + // TODO: Add cassette support. +} + +void source_state::output_latch_a_w(u8 data) +{ + // Latch is U11, 74LS378 (Board 3). 6-bit latch, top 2 bits ignored. + // All component designations are for Board 2. + + // Keyboard tracking for filter, bits D0 and D1. + const u8 kb_track = data & 0x03; + if (kb_track == 1) + { + // 1/2 tracking. U36C on and U36B off. + // Keyboard CV mixed in via 342Kohm resistance (2 x 121K: R142, R143). + m_kb_track = 1; + } + else if (kb_track == 2 || kb_track == 3) + { + // Full tracking. + // Only U36B on (kb_track == 2), or both U36B and U36C on + // (kb_track == 3). + // In both cases, keyboard CV is mixed in via a 121KOhm resistor (R142). + m_kb_track = 2; + } + else + { + // Both U36B and U36B are off. Keyboard CV does not make it through. + m_kb_track = 0; + } + + // Osc 2 waveform, bits D2 and D3. + // 0 - Sawtooth (U32A closed, U32B open, U32C closed, U32D closed). + // 1 - Triangle (U32A closed, U32B closed, U32D open, U32C open). + // 2 - Square/pulse (U32A open, U32B closed, U32C open, U32D closed). + // 3 - Mix of Triange and Square/Pulse (probably unused) + // (U32A open, U32B closed, U32C open, U32D open). + m_osc_waveform[1] = (data >> 2) & 0x03; + + // Osc 1 waveform, bits D4 and D5. + // Same swithc configuration as above, but replace U32 with U23. + m_osc_waveform[0] = (data >> 4) & 0x03; +} + +void source_state::output_latch_b_w(u8 data) +{ + // Latch is U12, 74LS378 (Board 3). 6-bit latch, top 2 bits ignored. + + // D0 -> S21-16 -> Sync. Synchronizes osc 2 to osc 1. + // When sync is on, the pitch wheel is only routed to Osc 2. + // When 1, Q2 is "off", U18B and C are off, U18A on, pitch wheel routed + // to osc 2 only. + // When 0, Q2 is "on", U18B is on (routes pitch wheel to central pitch), + // U18C is "on", which turns off U18A (disables direct route to osc 2). + m_sync = BIT(data, 0); + + // D1 -> inverted by U2A (Board 3), and connected to cathode of led. + // The led is active low, but the inverter presents it as active high. + m_edit_led = BIT(data, 1); + + // D2 -> J2 S-TRIG OUT, inverted via Q1, R21, R20 (Board 3). + m_trigger_out = BIT(data, 2) ? 0 : 1; + + // Component designations below refer to Board 2. + + // D3 -> S22-4 -> U46A (inverted and level-shifted to -5-5V through 4007B + // and R213): mod to filter. + m_lfo_to_filter = BIT(data, 3) ? 0 : 1; + + // D4 -> S22-3 -> U18D (inverted and level-shifted to -5-5V through 4007B + // and R61): mod to osc. + m_lfo_to_osc = BIT(data, 4) ? 0 : 1; + + // D5 -> S22-2 (level shifted & inverted to -5-5V through 4007B and R214) + // 0 - Triange (U46C on, U46B on, turns off U46D). -1.5V - 1.5V. + // 1 - Square (U46C off, U46B off, U46D on/off controlled by square + // wave. Translates -14V - 14V wave to 0-5V. + m_lfo_shape = BIT(data, 5); +} + +void source_state::buttons_latch_w(u8 data) +{ + // U5, 74LS378. All output connected to diode cathodes. + // Connected to "Membrane switch interface", P1, "top left". + // (D0, D1, D2, D3, D4, D5) -> (P1-1, P1-5, P1-6, P1-2, P1-4, P1-3) + m_button_row_latch = data & 0x3f; // Only D0-D5 connected. +} + +void source_state::program_latch_w(u8 data) +{ + // U1, 74LS378 + // D0-D3 -> U1 (7447, Board 4) A-D -> right digit of MAN6630. + // D4 -> inverted (U2E, U2D, 7404) -> left 1/2 digit of MAN6630 + // (inputs a and b). + // D5 -> inverted (U2A, 7404) -> HOLD ->"plus" sign of MAN6630. + // Note that MAN6630 has 3 "digits". From right to left: + // - 7-segment digit. + // - 2-segment digit (can represent a "1"). + // - "+" sign. + // Here, we simulate this with two 7-segment digits. + + m_program_display[0] = PATTERNS_7447[data & 0x0f]; + + u8 digit1 = PATTERNS_7447[15]; // All segments off. + if (BIT(data, 4)) + { + digit1 |= PATTERNS_7447[1]; // Turn on segments for "1". + } + if (BIT(data, 5)) + { + // This enables two segments on the MAN6630 that display a "+" symbol. + // Since 7-segment displays don't support that, enable the segment for + // "-" instead. + digit1 |= 0x40; + } + m_program_display[1] = digit1; +} + +void source_state::cassette_w(u8 data) +{ + // Z80 D4 controlls a normally-open relay (K1) through U22A (74LS74). + // A low D4 powers the relay, which connects cassette jack J1-1 to J1-3. + // TODO: Add cassette support. +} + +void source_state::cv_w(offs_t offset, u8 data) +{ + // CVs are generated by writing to an AM6012 12-bit DAC, but only 8 bits are + // used: the 8 MSBs are connected to the data bus, and the 4 LSBs are + // grounded. The DAC is mapped to the Z80's port IO space. + // The DAC and support circuitry convert the 8 bit data (0-255) to a voltage + // (0-10V). That voltage is routed to the Sample & Hold circuit (a + // capacitor and a buffer) of a specific CV, controlled by A0-A4. + + // Interesting tidbit: In most designs, the DAC inputs are + // latched. In the Source, the DAC inputs are directly connected to the data + // bus. This means the DAC output voltage is constantly changing, in an + // attempt to track the data bus. + + if (!machine().side_effects_disabled()) + { + // U14, U15B, U16D,E and U17D generate WAIT states whenever there is + // an IO write. This lasts 32 cycles. + // For the first 8 cycles, no MUX is selected, to allow the DAC to + // settle. Then a specific channel in a specific MUX is enabled (based + // on the port address), and there's a WAIT for another 24 cycles, to + // allow the selected Sample & Hold capacitor to (dis)charge. + m_maincpu->adjust_icount(-(8 + 24)); + } + + // Z80 A0,A1,A2 connected to the A,B,C inputs (respectively) of all MUXes. + // Z80 A3,A4 select which MUX to enable via decoder 74LS155. + // The fourth output of the decoder is not connected. There are 3 muxes. + + if (offset >= static_cast(CV::SIZE)) + return; + + const float cv = MAX_CV * data / 255.0f; + if (cv == m_cv.at(offset)) + return; + m_cv.at(offset) = cv; + + if (offset == static_cast(CV::KEYBOARD_APPROX)) + LOGMASKED(LOG_CV_KEYBOARD_APPROX, + "CV %d: 0x%02x, %f\n", offset, data, cv); + else + LOGMASKED(LOG_CV, "CV %d: 0x%02x, %f\n", offset, data, cv); +} + +float source_state::get_keyboard_v() const +{ + // *** Detect which key is pressed. + + static constexpr const int OCTAVES = 4; + static constexpr const int KEYS_PER_OCTAVE = 12; + static constexpr const int KEYS = 3 * KEYS_PER_OCTAVE + 1; + static constexpr const int OCTAVE_KEYS[4] = + { + KEYS_PER_OCTAVE, KEYS_PER_OCTAVE, KEYS_PER_OCTAVE, 1 + }; + + // The circuit is structure such that the lowest note has priority. + // Scan from lowest, and exit the loop once a pressed key is found. + int pressed_key = -1; + for (int octave = 0; octave < OCTAVES; ++octave) + { + const u32 keys = m_keyboard_io[octave]->read(); + for (int key = 0; key < OCTAVE_KEYS[octave]; ++key) + { + if (BIT(keys, key)) + { + pressed_key = octave * KEYS_PER_OCTAVE + key; + break; + } + } + if (pressed_key >= 0) + break; + } + + // *** Convert pressed key to a voltage. + + static constexpr const float KEYBOARD_VREF = 8.24; // From schematic. + static constexpr const float RKEY = RES_R(100); + static constexpr const float R74 = RES_R(150); + static constexpr const float R76 = RES_K(220); + static constexpr const float R77 = RES_K(2.2); + + float kb_voltage = 0; + if (pressed_key >= 0) + { + // Pressing a key forms a voltage devider consisting of the lower and + // upper resistances as shown below. The resulting voltage is further + // reduced by another voltage divider (R77-R76) before being fed to + // comparator U31A. + const float lower_r = R74 + pressed_key * RKEY; + const float upper_r = (KEYS - pressed_key - 1) * RKEY; + const float v = KEYBOARD_VREF * RES_VOLTAGE_DIVIDER(upper_r, lower_r); + kb_voltage = v * RES_VOLTAGE_DIVIDER(R77, R76); + LOGMASKED(LOG_KEYBOARD, "Key %d - %f - %f\n", pressed_key, v, + kb_voltage); + } + return kb_voltage; +} + +u8 source_state::keyboard_r() +{ + // U32: 74LS367 + // U18: 74LS125 + + // D0 <- U32, KEYBD. + // Output of comparator U31A. Compares the "KYBD APPROX" CV with the voltage + // generated by the keyboad (see get_keyboard_r()). This bit is used by a + // successive approximation algorithm to detect the keyboard voltage. The + // firmware does a binary search by checking the result of the comparison + // and updating the "KYBD APPROX" CV accordingly. + // TODO: Compute keyboard voltage in an input callback. + static constexpr const int KB_APPROX_INDEX = + static_cast(CV::KEYBOARD_APPROX); + const u8 d0 = (get_keyboard_v() >= m_cv.at(KB_APPROX_INDEX)) ? 1 : 0; + + // D1, D2: Loudness and Filter contour peaks. + // D1 <- U32, FILT CNTR <- S22-11: 0 when envolope reaches almost 10V + // (with some hysteresis). + // D2 <- U32, LOUD CNTR <- S22-10: 0 when envelope reaches almost 10V + // (with some hysteresis). + // TODO: Treating as inputs for now, until contour timing is emulated. + const u8 contour_peaked = m_contour_peaked_io->read(); + const u8 d1 = BIT(contour_peaked, 0); + const u8 d2 = BIT(contour_peaked, 1); + + // D3: Octave. <- U32, OCT (P34-2 (octave 0 button) and P34-1 (octave +1 + // button) via U2B and U2C). + const u8 d3 = m_octave_hi ? 1 : 0; + + // D4 <- J1-4, CASSETTE IN (through "cassette return" circuit and U18D). + const u8 d4 = 1; // TODO: Implement. + + // D5 <- U32, MOD (->P34-5) 1 when s22-5 low, otherwise 0. + const u8 d5 = 0; // TODO: Implement. + + // D6 <- J2-5, S-TRIG IN, through U18C, pulled up by R23 and protected by + // R22. + const u8 d6 = BIT(m_trigger_io->read(), 0); + + // D7 <- U32, N.C. <- 1 (data bus is pulled high). + const u8 d7 = 1; + + return (d7 << 7) | (d6 << 6) | (d5 << 5) | (d4 << 4) | + (d3 << 3) | (d2 << 2) | (d1 << 1) | d0; +} + +u8 source_state::buttons_r( + const required_ioport_array<6>& button_io, const char* name) const +{ + // Button presses are active low, but the result is inverted by a CD4502. + // So they look active high to the firmware. + u8 pressed = 0x00; + for (int i = 0; i < 6; ++i) + { + if (!BIT(m_button_row_latch, i)) + pressed |= static_cast(~button_io[i]->read() & 0xff); + } + // Bits 6 and 7 are not connected to the button input and pulled high. + pressed |= 0xc0; + if (pressed & 0x3f) + { + LOGMASKED(LOG_BUTTONS, "Button read %s - %02X: %02X\n", + name, m_button_row_latch, pressed); + } + return pressed; +} + +u8 source_state::buttons_a_r() +{ + // U8, CD4502B (connceted to "Membrane switch interface", P2, "Bottom left") + // (D0, D1, D2, D3, D4, D5) <- (P2-1, P2-3, P2-2, P2-6, P2-5, P2-4) + return buttons_r(m_button_a_io, "A"); +} + +u8 source_state::buttons_b_r() +{ + // U9, CD4502B (connected to "Membrane switch interface", P3, "Bottom right") + // (D0, D1, D2, D3, D4, D5, D6, D7) <- (P3-2, P3-1, P3-3, P3-6, P3-5, P3-4) + return buttons_r(m_button_b_io, "B"); +} + +u8 source_state::encoder_r() +{ + // D0 contains whether the encoder was last incremented or decremented. + LOGMASKED(LOG_ENCODER, + "Encoder read: %d - %d\n", m_encoder->read(), m_encoder_incr); + // Reading the encoder's state also clears /INT (via U21B, U7A and U15A). + if (!machine().side_effects_disabled()) + m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); + return m_encoder_incr ? 1 : 0; +} + +void source_state::memory_map(address_map& map) +{ + // Address decoding done through U26, 74LS138, E1=E2=0, E3=1, + // A0-A2 = Z80 A13-A15. + // Z80 A12 is not connected. + // The signal names below (e.g. "ROM /EN", "RAM /EN") match those in the + // schematics. + + // ROM /EN: 0x0000-0x1fff. + // 1 x 2532 (4K, 8bit) ROM, U23. + map(0x0000, 0x0fff).mirror(0x1000).rom(); + // 2 x 74LS378. Z80 and latch data lines are not connected in order. + map(0x0000, 0x0000).mirror(0x1fff).w(FUNC(source_state::edit_latch_w)); + + // RAM /EN: 0x2000-0x3fff. + // 2 x 6514 (1K, 4bit) NVRAMs. U27: D0-D3, U28: D4-D7. + // Z80 A0-A1 -> RAM A0-A1. Z80 A2-A8 -> RAM A3-A9. Z80 A9 -> RAM A2. + map(0x2000, 0x23ff).mirror(0x1c00).ram().share(NVRAM_TAG); + + // OUTPUT /EN: 0x4000-0x5fff. + // 2 output latches (74LS378, U11 and U12) enabled by 74LS155 (U13B), + // with Z80 A3-A4 as inputs to A0-A1. O2 and O3 are not connected, so + // A4=1 does not enable anything. + map(0x4000, 0x4000).mirror(0x1fe7).w(FUNC(source_state::output_latch_a_w)); + map(0x4008, 0x4008).mirror(0x1fe7).w(FUNC(source_state::output_latch_b_w)); + + // KYBD /EN: 0x6000-0x7fff. + // 74LS367, U32 + map(0x6000, 0x6000).mirror(0x1fff).r(FUNC(source_state::keyboard_r)); + // 74LS74, U22A. D <- Z80 D4. + map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(source_state::cassette_w)); + + // FRONT PANEL /EN1: 0x8000-0x9fff. + // CD4502, U8. + map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(source_state::buttons_a_r)); + // 74LS378, U5. + map(0x8000, 0x8000).mirror(0x1fff).w(FUNC(source_state::buttons_latch_w)); + + // FRONT PANEL /EN2: 0xa000-0xbfff. + // CD4502, U9 + map(0xa000, 0xa000).mirror(0x1fff).r(FUNC(source_state::buttons_b_r)); + + // DISPLAY /EN: 0xc000-0xdfff. + // 74LS378, U1. + map(0xc000, 0xc000).mirror(0x1fff).w(FUNC(source_state::program_latch_w)); + + // CNTRL /EN: 0xe000-0xffff. (typo in schematic: 0xefff-0xffff). + map(0xe000, 0xe000).mirror(0x1fff).r(FUNC(source_state::encoder_r)); +} + +void source_state::io_map(address_map& map) +{ + map.global_mask(0xff); + map(0x00, 0x1f).mirror(0xe0).w(FUNC(source_state::cv_w)); +} + +void source_state::machine_start() +{ + m_octave_led.resolve(); + m_program_display.resolve(); + m_edit_display.resolve(); + m_edit_led.resolve(); + m_kb_track.resolve(); + m_osc_waveform.resolve(); + m_sync.resolve(); + m_lfo_to_filter.resolve(); + m_lfo_to_osc.resolve(); + m_lfo_shape.resolve(); + m_trigger_out.resolve(); + + save_item(NAME(m_octave_hi)); + save_item(NAME(m_button_row_latch)); + save_item(NAME(m_encoder_incr)); + save_item(NAME(m_cv)); +} + +void source_state::machine_reset() +{ + update_octave_leds(); +} + +void source_state::source(machine_config& config) +{ + // /M1, /RFSH not Connected. + // /HALT, /NMI pulled up to 5V, with no other connection. + Z80(config, m_maincpu, 4_MHz_XTAL / 2); // Divided by 2 through U22B. + m_maincpu->set_addrmap(AS_PROGRAM, &source_state::memory_map); + m_maincpu->set_addrmap(AS_IO, &source_state::io_map); + + NVRAM(config, NVRAM_TAG, nvram_device::DEFAULT_ALL_0); // 2x6514: U27, U28. + + config.set_default_layout(layout_moog_source); +} + +DECLARE_INPUT_CHANGED_MEMBER(source_state::octave_button_pressed) +{ + // Inverters U2B and U2C (Board 3) are configured as an SR flip-flop, with + // SW1 and SW2 (Board 5) as Reset and Set respectively. + + // Inputs are active low. + const u8 input = m_octave_io->read(); + const bool octave_0 = (input & 0x01) == 0; // "0", SW1 (Board 5). + const bool octave_p1 = (input & 0x02) == 0; // "+1", SW2 (Board 5). + if (!octave_0 && octave_p1) + { + m_octave_hi = true; + } + else if (octave_0 && !octave_p1) + { + m_octave_hi = false; + } + else if (octave_0 && octave_p1) + { + // The selected octave is undefined in this case, so it is not updated. + // An octave will be selected when one of the two buttons is released. + } + else + { + // No buttons pressed. No change in selected octave. + } + update_octave_leds(); +} + +DECLARE_INPUT_CHANGED_MEMBER(source_state::encoder_moved) +{ + static constexpr const int WRAP_BUFFER = 10; + const bool overflowed = newval <= WRAP_BUFFER && + oldval >= 240 - WRAP_BUFFER; + const bool underflowed = newval >= 240 - WRAP_BUFFER && + oldval <= WRAP_BUFFER; + m_encoder_incr = ((newval > oldval) || overflowed) && !underflowed; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + LOGMASKED(LOG_ENCODER, "Encoder changed: %d %d\n", newval, m_encoder_incr); +} + +INPUT_PORTS_START(source) + PORT_START("button_group_a_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Memory STORE") PORT_CODE(KEYCODE_S) // r2p6 + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 13") // r2p4 + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 12") // r2p5 + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 16") // r2p1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 15") // r2p2 + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 14") // r2p3 + + PORT_START("button_group_b_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Level 2") // r1p5 + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Level 1") //r1p6 + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Decay") //r1p4 + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Amount") //r1p1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Release") //r1p2 + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Sustain") // r1p3 + + PORT_START("button_group_a_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) //NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 3") PORT_CODE(KEYCODE_3) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 2") PORT_CODE(KEYCODE_2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 6") PORT_CODE(KEYCODE_6) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 5") PORT_CODE(KEYCODE_5) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 4") PORT_CODE(KEYCODE_4) + + PORT_START("button_group_b_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Attack") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mixer: OSC 2") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Shape: Pulse") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter KB Track: OFF") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Emphasis") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Cutoff") + + PORT_START("button_group_a_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 10") PORT_CODE(KEYCODE_0) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 11") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 7") PORT_CODE(KEYCODE_7) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 8") PORT_CODE(KEYCODE_8) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 9") PORT_CODE(KEYCODE_9) + + PORT_START("button_group_b_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Decay") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Attack") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD Rate") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Release") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Sustain") + + PORT_START("button_group_a_3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD To Filter: OFF") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Program 1") PORT_CODE(KEYCODE_1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Footage: 32'") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD To Filter: ON") + + PORT_START("button_group_b_3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mixer: NOISE") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Interval") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Shape: Sawtooth") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Shape: Pulse") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter KB Track: 1/2") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter KB Track: FULL") + + PORT_START("button_group_a_4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD to Osc: OFF") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Memory HOLD") PORT_CODE(KEYCODE_H) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("KB Glide") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD Shape: Triangle") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD to Osc: ON") + + PORT_START("button_group_b_4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Shape: Triange") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Footage: 16'") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SYNC: ON") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Footage: 32'") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Footage: 16'") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Mixer: OSC 1") + + PORT_START("button_group_a_5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) // NC + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Trigger MULTI") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Trigger SINGLE") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("MOD Shape: Square") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + + PORT_START("button_group_b_5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 2 Footage: 8'") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) // NC / PROGRAM 1 + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SYNC: OFF") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Footage: 8'") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Shape: Triange") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("OSC 1 Shape: Sawtooth") + + PORT_START("octave_buttons") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Octave 0") // SW1 (Board 5). + PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(source_state::octave_button_pressed), 0x01) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Octave +1") // SW2 (Board 5). + PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(source_state::octave_button_pressed), 0x02) + + PORT_START("incremental_controller") + PORT_BIT(0xff, 0x00, IPT_POSITIONAL) PORT_POSITIONS(240) PORT_WRAPS + PORT_SENSITIVITY(25) PORT_KEYDELTA(3) + PORT_CODE_DEC(KEYCODE_LEFT) PORT_CODE_INC(KEYCODE_RIGHT) PORT_FULL_TURN_COUNT(240) + PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(source_state::encoder_moved), 1) + + PORT_START("keyboard_oct_1") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C1") + PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C#1") + PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D1") + PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D#1") + PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("E1") + PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F1") + PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F#1") + PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G1") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G#1") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A1") + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A#1") + PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B1") + + PORT_START("keyboard_oct_2") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C2") + PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C#2") + PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D2") + PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D#2") + PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("E2") + PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F2") + PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F#2") + PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G2") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G#2") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A2") + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A#2") + PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B2") + + PORT_START("keyboard_oct_3") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C3") + PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C#3") + PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D3") + PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D#3") + PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("E3") + PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F3") + PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("F#3") + PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G3") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("G#3") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A3") + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A#3") + PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B3") + + PORT_START("keyboard_oct_4") + PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C4") + + PORT_START("trigger_in") // External trigger input (see keyboard_r()). + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("S TRIG IN") PORT_CODE(KEYCODE_T) + + // TODO: User can control when contours peak, until those are emulated. + PORT_START("contour_peaked") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Filter Contour Peaked") PORT_CODE(KEYCODE_Z) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Loudness Contour Peaked") PORT_CODE(KEYCODE_X) +INPUT_PORTS_END + +// It seems like the Source was launched with firmware Revision 2.2. +// There was also a Revision 3.2, and the last official firmware release was +// Revision 3.3. +ROM_START(moogsource) + ROM_REGION(0x1000, MAINCPU_TAG, 0) + ROM_DEFAULT_BIOS("r3.3") + + ROM_SYSTEM_BIOS(0, "r3.3", "Rev 3.3") + ROMX_LOAD("3p3.u23", 0x000000, 0x001000, CRC(4211331f) SHA1(8767ef6b1cbb032a89a78bdb77bb7dbc1c187974), ROM_BIOS(0)) +ROM_END + +} // Anonymous namespace. + +SYST(1981, moogsource, 0, 0, source, source, source_state, empty_init, "Moog Music", "Moog Source", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND); + From 73c489ce499e24d926b236b5c5ce061567218f45 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Sun, 15 Dec 2024 01:43:59 +0100 Subject: [PATCH 15/40] New working clones ------------------ Golden Poker Double Up (tearoom*sara hack) [Roberto Fresca, Hammy] --- src/mame/mame.lst | 1 + src/mame/misc/goldnpkr.cpp | 29 ++++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index bed66424af2..5f0ebfd6b31 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -30633,6 +30633,7 @@ goldnpkd // Bootleg goldnpke // Intercoast (bootleg) goldnpkf // Intercoast (bootleg) goldnpkg // Bootleg +goldnpkh // (c) 1981 Bonanza goldnpkr // (c) 1981 Bonanza goodluck // Unknown icproul // bootleg? diff --git a/src/mame/misc/goldnpkr.cpp b/src/mame/misc/goldnpkr.cpp index 3edac386368..917b904f957 100644 --- a/src/mame/misc/goldnpkr.cpp +++ b/src/mame/misc/goldnpkr.cpp @@ -17,6 +17,7 @@ * Golden Poker Double Up (bootleg, set 3), 1983, Intercoast (bootleg). * Golden Poker Double Up (bootleg, set 4), 1983, Intercoast (bootleg). * Golden Poker Double Up (bootleg, set 5), 198?, Bootleg. + * Golden Poker Double Up (tearoom*sara hack), 1981, Bonanza Enterprises, Ltd. * Videotron Poker (cards selector, set 1), 198?, Unknown. * Videotron Poker (cards selector, set 2), 198?, Unknown. * Videotron Poker (normal controls), 198?, Unknown. @@ -165,9 +166,6 @@ * Black jack (Olympic Games, v5.04, upgrade for WC), 1989, Olympic Video Gaming PTY LTD. - Total: 153 sets. - - ************************************************************************************ @@ -5576,6 +5574,30 @@ ROM_START( goldnpkg ) ROM_END +/* Bonanza Golden Poker Double Up. + Original hardware, with tearoom*sara text hack. + + You can play 1-50 credits. + So the hackers removed the "PLAY 1 TO 50" string to put "TEAROOM*SARA" instead. +*/ +ROM_START( goldnpkh ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "spf.12a", 0x4000, 0x4000, CRC(22963c83) SHA1(ac9e66f0c548011aac88b9f32a924995ba3651e4) ) + + ROM_REGION( 0x6000, "gfx1", 0 ) + ROM_FILL( 0x0000, 0x4000, 0x0000 ) // filling the R-G bitplanes + ROM_LOAD( "u38_5a.bin", 0x4000, 0x2000, CRC(32705e1d) SHA1(84f9305af38179985e0224ae2ea54c01dfef6e12) ) // char ROM + + ROM_REGION( 0x6000, "gfx2", 0 ) + ROM_LOAD( "u43_2a.bin", 0x0000, 0x2000, CRC(10b34856) SHA1(52e4cc81b36b4c807b1d4471c0f7bea66108d3fd) ) // cards deck gfx, bitplane1 + ROM_LOAD( "u40_4a.bin", 0x2000, 0x2000, CRC(5fc965ef) SHA1(d9ecd7e9b4915750400e76ca604bec8152df1fe4) ) // cards deck gfx, bitplane2 + ROM_COPY( "gfx1", 0x4800, 0x4000, 0x0800 ) // cards deck gfx, bitplane3. found in the 2nd quarter of the char rom + + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "tbp24s10n.7d", 0x0000, 0x0100, CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) +ROM_END + + /* Videotron Poker. Alternative controls set, with cards selector... */ @@ -13075,6 +13097,7 @@ GAMEL( 198?, goldnpkd, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init GAMEL( 1983, goldnpke, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Intercoast (bootleg)", "Golden Poker Double Up (bootleg, set 3)", 0, layout_goldnpkr ) GAMEL( 1983, goldnpkf, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Intercoast (bootleg)", "Golden Poker Double Up (bootleg, set 4)", 0, layout_goldnpkr ) GAMEL( 1983, goldnpkg, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Golden Poker Double Up (bootleg, set 5)", 0, layout_goldnpkr ) +GAMEL( 1983, goldnpkh, goldnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Bonanza Enterprises, Ltd", "Golden Poker Double Up (tearoom*sara hack)", 0, layout_goldnpkr ) GAMEL( 198?, videtron, 0, goldnpkr, videtron, goldnpkr_state, empty_init, ROT0, "", "Videotron Poker (cards selector, set 1)", 0, layout_goldnpkr ) GAMEL( 198?, videtron2, videtron, goldnpkr, videtron, goldnpkr_state, empty_init, ROT0, "", "Videotron Poker (cards selector, set 2)", 0, layout_goldnpkr ) From b6c88f3e0b8679eb99b1ec8ed8ea4f0440746003 Mon Sep 17 00:00:00 2001 From: Mark Garlanger Date: Sat, 14 Dec 2024 20:43:44 -0600 Subject: [PATCH 16/40] a2bus/4play.cpp: Fix player 4 joystick definition (#13084) Fix an apparent copy-n-paste error. --- src/devices/bus/a2bus/4play.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/devices/bus/a2bus/4play.cpp b/src/devices/bus/a2bus/4play.cpp index d267b5c0059..39f77ddd62c 100644 --- a/src/devices/bus/a2bus/4play.cpp +++ b/src/devices/bus/a2bus/4play.cpp @@ -70,14 +70,14 @@ static INPUT_PORTS_START( a24play ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_START("p4") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(3) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) INPUT_PORTS_END //------------------------------------------------- From 5a02f7b33141511d3503e50ad82cb24829a9cb91 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sun, 15 Dec 2024 09:44:34 +0100 Subject: [PATCH 17/40] New working clones ------------------ Janyou Part II (ver 7.02, July 1 1983) [Hammy] --- src/mame/dynax/royalmah.cpp | 16 +++++++++++++--- src/mame/mame.lst | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp index 98b5d315cfb..840f6e268cd 100644 --- a/src/mame/dynax/royalmah.cpp +++ b/src/mame/dynax/royalmah.cpp @@ -4456,6 +4456,17 @@ ROM_START( janyoup2a ) ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) ROM_END +ROM_START( janyoup2702 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.11a", 0x0000, 0x2000, CRC(d51d8525) SHA1(46a181141c6a64114bf025e6ea5f2e2e23f8ce62) ) + ROM_LOAD( "2.10a", 0x2000, 0x2000, CRC(324426d4) SHA1(409244c8458d9bafa325746c37de9e7b955b3787) ) + ROM_LOAD( "3.8a", 0x4000, 0x2000, CRC(cc4fed44) SHA1(11362654f8a40f594f90b84abf24e624c3e83eb0) ) + ROM_LOAD( "4.7a", 0x6000, 0x1000, CRC(377b8ce9) SHA1(a5efc517ae975e54af5325b8b3f4867e9f449d4c) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +ROM_END + ROM_START( seljan ) // Z80A + HD46505SP + AY891X (a sticker covers the chip type) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "2", 0x0000, 0x2000, CRC(8d26d334) SHA1(4ac0f0961f666954caf59336f8389312db9dc263) ) // ok @@ -5896,14 +5907,12 @@ ROM_START( jangtaku ) ROM_LOAD( "82s123a.6k", 0x0000, 0x0020, CRC(e9598146) SHA1(619e7eb76cc3e882b5b3e55cdd23fe00b0a1fe45) ) ROM_END -ROM_START( rkjanoh2 ) +ROM_START( rkjanoh2 ) // dump confirmed from 2 PCBs, only difference being 0x4b instead of 0x46 at 0x2a22 ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "pf_1", 0x000000, 0x001000, CRC(582e7eda) SHA1(96578b6142051d9452f23c8c1b674e2d8a4c3b62) ) ROM_LOAD( "pf_2", 0x001000, 0x001000, CRC(49e7dc40) SHA1(d6232a82b6927c79dd47884e5e2a6589c5524424) ) ROM_LOAD( "pf_3_1", 0x002000, 0x001000, CRC(a1fdc929) SHA1(27cab4da2365bcf311d7f00d75e8db150183b108) ) ROM_LOAD( "pf_4l", 0x003000, 0x001000, CRC(c9ccdfa0) SHA1(ce6f2df7fb6739ddf0529bcae0596e4593ecc3e0) ) - //ROM_LOAD( "pf_4_fewest", 0x003000, 0x001000, CRC(9a1650a0) SHA1(2da5957879d9f207721fc2f0d63dccc32850cbe2) ) - //ROM_LOAD( "pf_4_middle", 0x003000, 0x001000, CRC(b1a721d8) SHA1(de24ec4bac7ec761c7b25a7ba62b850006444bbc) ) ROM_LOAD( "pf_5", 0x004000, 0x001000, CRC(8a858464) SHA1(55c71ce1c30e908dfc8c21237256dfbb75c55363) ) ROM_LOAD( "pf_6", 0x005000, 0x001000, CRC(5b649918) SHA1(191a221a515c261d90d7432443a7fbc8da71e7ac) ) ROM_LOAD( "pf_7", 0x006000, 0x001000, CRC(c4fdd2ac) SHA1(76c5645534b87dde87acfb4140d0f3ba18c95cd2) ) @@ -6245,6 +6254,7 @@ GAME( 1984?, chalgirl, 0, chalgirl, royalmah, royalmah_prgbank_state, GAME( 1983, seljan, 0, seljan, seljan, royalmah_state, empty_init, ROT0, "Jem / Dyna Corp", "Sel-Jan (Japan)", 0 ) GAME( 1983, janyoup2, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 ) GAME( 1983, janyoup2a, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983, no title screen)",0 ) +GAME( 1983, janyoup2702, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.02, July 1 1983)",0 ) GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_prgbank_state, init_tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17 GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong, set 1)", 0 ) // MT #05392 GAME( 1981, janputera, janputer, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Ever Denshi)", "New Double Bet Mahjong (bootleg of Royal Mahjong, set 2)", 0 ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 5f0ebfd6b31..1b56809c861 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17655,6 +17655,7 @@ janputera // bootleg jansou // (c) 1985 Dyna jansoua // (c) 1985 Dyna janyoup2 // Falcon bootleg +janyoup2702 // janyoup2a // Cosmo jongshin // (c) 1986 Dyna majrjh // "105" (c) 1996 Dynax From fa87a0a4e1361aefa77a2d9de327cae951dc6349 Mon Sep 17 00:00:00 2001 From: MetalliC <0vetal0@gmail.com> Date: Sun, 15 Dec 2024 13:09:42 +0200 Subject: [PATCH 18/40] taito/tnzs.cpp: removed kageki sample playback HLE --- src/mame/taito/tnzs.cpp | 93 ++++++++++++----------------------------- 1 file changed, 26 insertions(+), 67 deletions(-) diff --git a/src/mame/taito/tnzs.cpp b/src/mame/taito/tnzs.cpp index e1f982388cd..5bbb641ffd2 100644 --- a/src/mame/taito/tnzs.cpp +++ b/src/mame/taito/tnzs.cpp @@ -673,7 +673,6 @@ d23f=input port 1 value #include "machine/gen_latch.h" #include "machine/upd4701.h" #include "sound/dac.h" -#include "sound/samples.h" #include "sound/ymopm.h" #include "sound/ymopn.h" @@ -825,10 +824,10 @@ class kageki_state : public insectx_state public: kageki_state(const machine_config &mconfig, device_type type, const char *tag) : insectx_state(mconfig, type, tag) - , m_samples(*this, "samples") , m_dswa(*this, "DSWA") , m_dswb(*this, "DSWB") , m_csport_sel(0) + , m_scpu(*this, "samples") { } void kageki(machine_config &config) ATTR_COLD; @@ -847,20 +846,15 @@ class kageki_state : public insectx_state uint8_t csport_r(); void csport_w(uint8_t data); - SAMPLES_START_CB_MEMBER(init_samples); - void kageki_sub_map(address_map &map) ATTR_COLD; - - required_device m_samples; + void scpu_map(address_map& map) ATTR_COLD; + void scpu_io_map(address_map& map) ATTR_COLD; required_ioport m_dswa; required_ioport m_dswb; - // sound-related - std::unique_ptr m_sampledata[MAX_SAMPLES]; - int m_samplesize[MAX_SAMPLES]{}; - int m_csport_sel; + required_device m_scpu; }; @@ -1422,38 +1416,6 @@ void kabukiz_state::sound_bank_w(uint8_t data) } -SAMPLES_START_CB_MEMBER(kageki_state::init_samples) -{ - uint8_t *src = memregion("samples")->base() + 0x0090; - for (int i = 0; i < MAX_SAMPLES; i++) - { - int start = (src[(i * 2) + 1] * 256) + src[(i * 2)]; - uint8_t *scan = &src[start]; - int size = 0; - - // check sample length - while (*scan++ != 0x00) - size++; - - /* 2009-11 FP: should these be saved? */ - m_sampledata[i] = std::make_unique(size); - m_samplesize[i] = size; - - if (start < 0x100) - start = size = 0; - - // signed 8-bit sample to unsigned 8-bit sample convert - int16_t *dest = m_sampledata[i].get(); - scan = &src[start]; - for (int n = 0; n < size; n++) - { - *dest++ = (int8_t)((*scan++) ^ 0x80) * 256; - } - // logerror("samples num:%02X ofs:%04X lng:%04X\n", i, start, size); - } -} - - uint8_t kageki_state::csport_r() { int dsw, dsw1, dsw2; @@ -1461,7 +1423,7 @@ uint8_t kageki_state::csport_r() dsw1 = m_dswa->read(); dsw2 = m_dswb->read(); - switch (m_csport_sel) + switch (m_csport_sel & 3) { case 0x00: // DSW2 5,1 / DSW1 5,1 dsw = (((dsw2 & 0x10) >> 1) | ((dsw2 & 0x01) << 2) | ((dsw1 & 0x10) >> 3) | ((dsw1 & 0x01) >> 0)); @@ -1485,26 +1447,10 @@ uint8_t kageki_state::csport_r() void kageki_state::csport_w(uint8_t data) { - if (data > 0x3f) - { - // read dipsw port - m_csport_sel = (data & 0x03); - } - else - { - if (data < MAX_SAMPLES) - { - // play samples - m_samples->start_raw(0, m_sampledata[data].get(), m_samplesize[data], 7000); - LOG("VOICE:%02X PLAY", data); - } - else - { - // stop samples - m_samples->stop(0); - LOG("VOICE:%02X STOP", data); - } - } + m_csport_sel = data; + + if (!BIT(data, 6)) + m_scpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } void insectx_state::prompal_main_map(address_map &map) @@ -1590,6 +1536,18 @@ void kageki_state::kageki_sub_map(address_map &map) map(0xc002, 0xc002).portr("IN2"); } +void kageki_state::scpu_map(address_map& map) +{ + map(0x0000, 0xffff).rom(); +} + +void kageki_state::scpu_io_map(address_map& map) +{ + map.global_mask(0xff); + map(0x00, 0xff).w("dac", FUNC(dac_byte_interface::data_w)); + map(0x00, 0xff).lr8(NAME([this]() { return m_csport_sel; })); +} + void insectx_state::insectx_sub_map(address_map &map) { base_sub_map(map); @@ -2415,6 +2373,10 @@ void kageki_state::kageki(machine_config &config) /* basic machine hardware */ m_subcpu->set_addrmap(AS_PROGRAM, &kageki_state::kageki_sub_map); + Z80(config, m_scpu, XTAL(12'000'000) / 4); + m_scpu->set_addrmap(AS_PROGRAM, &kageki_state::scpu_map); + m_scpu->set_addrmap(AS_IO, &kageki_state::scpu_io_map); + /* sound hardware */ ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(12'000'000)/4)); /* verified on pcb */ ymsnd.port_a_read_callback().set(FUNC(kageki_state::csport_r)); @@ -2424,10 +2386,7 @@ void kageki_state::kageki(machine_config &config) ymsnd.add_route(2, "speaker", 0.15); ymsnd.add_route(3, "speaker", 0.35); - SAMPLES(config, m_samples); - m_samples->set_channels(1); - m_samples->set_samples_start_callback(FUNC(kageki_state::init_samples)); - m_samples->add_route(ALL_OUTPUTS, "speaker", 1.0); + DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // HA17408P R2R DAC, TODO: check levels } void tnzsb_state::tnzsb(machine_config &config) From c1097ad5e094b9a264c6aa13f7b475cbb69aa734 Mon Sep 17 00:00:00 2001 From: wilbertpol Date: Sun, 15 Dec 2024 16:21:28 +0000 Subject: [PATCH 19/40] cpu/upd177x/upd177xd.cpp: Fixed disassembly of jpp instruction. (#13087) --- src/devices/cpu/upd177x/upd177xd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devices/cpu/upd177x/upd177xd.cpp b/src/devices/cpu/upd177x/upd177xd.cpp index 4ebb647feb9..d4e9dcd15d7 100644 --- a/src/devices/cpu/upd177x/upd177xd.cpp +++ b/src/devices/cpu/upd177x/upd177xd.cpp @@ -108,7 +108,7 @@ const upd177x_disassembler::instruction upd177x_disassembler::instructions[] { { 0x1808, 0xfe0f, [](P) -> u32 { util::stream_format(stream, "callo (%s)", reg4(opcode)); return 1 | STEP_OVER; } }, { 0x6000, 0xf000, [](P) -> u32 { util::stream_format(stream, "jmp %s", abs12(opcode, pc)); return 1; } }, - { 0x2000, 0xff0f, [](P) -> u32 { util::stream_format(stream, "jmp %s", abs4_4(opcode, pc)); return 1; } }, + { 0x2000, 0xff0f, [](P) -> u32 { util::stream_format(stream, "jpp %s", abs4_4(opcode, pc)); return 1; } }, { 0x0501, 0xffff, [](P) -> u32 { util::stream_format(stream, "jmpa"); return 1; } }, { 0x2400, 0xff00, [](P) -> u32 { util::stream_format(stream, "jmpfz %s", abs8(opcode, pc)); return 1; } }, From 1e0161ceeba5f8faea65dff5a537416a77290915 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Mon, 16 Dec 2024 01:22:25 +0100 Subject: [PATCH 20/40] New working clones ------------------ Jack Potten's Poker (set 16, ICP-1 PCB) [Roberto Fresca, Grull Osgo, Hammy] Jack Potten's Poker (set 17, ICP-1 PCB) [Roberto Fresca, Grull Osgo, Hammy] --- src/mame/mame.lst | 2 + src/mame/misc/goldnpkr.cpp | 83 +++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 1b56809c861..18bf308aae7 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -30671,6 +30671,8 @@ potnpkrk // Bootleg potnpkrl // Bootleg potnpkrm // Bootleg potnpkrn // Bootleg +potnpkro // Bootleg +potnpkrp // Bootleg pottnpkr // Bootleg royale // Unknown royalea // Unknown diff --git a/src/mame/misc/goldnpkr.cpp b/src/mame/misc/goldnpkr.cpp index 917b904f957..08d25b5440b 100644 --- a/src/mame/misc/goldnpkr.cpp +++ b/src/mame/misc/goldnpkr.cpp @@ -34,8 +34,10 @@ * Jack Potten's Poker (set 11, German, W.W.), 198?, Bootleg. * Jack Potten's Poker (set 12, no Double-Up), 198?, Bootleg. * Jack Potten's Poker (set 13, ICP-1 PCB), 198?, Unknown. - * Jack Potten's Poker (set 14, ICP-1 PCB), 198?, Bootleg (PED). - * Jack Potten's Poker (w/fever, ICP-1 PCB), 198?, Bootleg. + * Jack Potten's Poker (set 14, ICP-1 PCB), 198?, Bootleg. + * Jack Potten's Poker (set 15, w/fever, ICP-1 PCB), 198?, Bootleg (PED). + * Jack Potten's Poker (set 16, ICP-1 PCB), 1987, Bootleg (PED). + * Jack Potten's Poker (set 17, ICP-1 PCB), 1987, Bootleg (PED). * Jack Potten's Poker (NGold, set 1), 198?, Unknown. * Jack Potten's Poker (NGold, set 2), 198?, Unknown. * Jack Potten's Poker (NGold, set 3), 198?, Unknown. @@ -980,7 +982,7 @@ TODO: - Missing PIA connections. - - Final cleanup and split the driver. + - Final cleanup. ************************************************************************************/ @@ -4535,6 +4537,25 @@ static INPUT_PORTS_START( glfever ) INPUT_PORTS_END +static INPUT_PORTS_START( potnpkro ) // ICP-1 w/daughterboard + PORT_INCLUDE( goldnpkr ) + + PORT_MODIFY("SW1") + PORT_DIPNAME( 0x10, 0x00, "Coinage Sensitivity" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + /********************************************* * Graphics Layouts * *********************************************/ @@ -6027,6 +6048,55 @@ ROM_START( potnpkrn ) ROM_END +/* + Golden/Potten's Poker + 1986 0415 VER 7.0 1987 06-03 BY PED. + + ICP-1 hardware with daughterboard. + The first set has bookkeeping with DSW test. + The second set is a hack of the first with unknown mods. + +*/ +ROM_START( potnpkro ) // ICP-1 wires hack set. + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "7.16a", 0x6000, 0x1000, CRC(2dc5e372) SHA1(70a251efe879bc1122baa78984251041a355c895) ) + ROM_LOAD( "x.17a", 0x7000, 0x1000, CRC(1694a0d8) SHA1(bb1132d1e75347ad5156d2b3866aad255f7d53ca) ) + + ROM_REGION( 0x1800, "gfx1", 0 ) + ROM_FILL( 0x0000, 0x1000, 0x0000 ) // filling the R-G bitplanes + ROM_LOAD( "0.9a", 0x1000, 0x0800, CRC(1090e7f0) SHA1(26a7fc8853debb9a759811d7fee39410614c3895) ) // char ROM + ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half + + ROM_REGION( 0x1800, "gfx2", 0 ) + ROM_LOAD( "7.4a", 0x0000, 0x0800, CRC(f2f94661) SHA1(f37f7c0dff680fd02897dae64e13e297d0fdb3e7) ) // cards deck gfx, bitplane1 + ROM_LOAD( "8.6a", 0x0800, 0x0800, CRC(6bbb1e2d) SHA1(51ee282219bf84218886ad11a24bc6a8e7337527) ) // cards deck gfx, bitplane2 + ROM_LOAD( "9.7a", 0x1000, 0x0800, CRC(907b21df) SHA1(a6a3968b2ee23ef15ecc8c3b2afbe1b2cc5f42e7) ) // cards deck gfx, bitplane3 + + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "tbp24sa10.bin", 0x0000, 0x0100, BAD_DUMP CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // not dumped for this set +ROM_END + +ROM_START( potnpkrp ) // ICP-1 PROM mod set. + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "6.16a", 0x6000, 0x1000, CRC(2dc5e372) SHA1(70a251efe879bc1122baa78984251041a355c895) ) + ROM_LOAD( "95_09_hn71_7.17a", 0x7000, 0x1000, CRC(2353317a) SHA1(18bf8cfe30aaa4b05207cc250ec1c024bc19ed56) ) + + ROM_REGION( 0x1800, "gfx1", 0 ) + ROM_FILL( 0x0000, 0x1000, 0x0000 ) // filling the R-G bitplanes + ROM_LOAD( "4.9a", 0x1000, 0x0800, CRC(1c080c35) SHA1(cb3ed14973029b3891635a4b05d8d2b9dae8aea8) ) // char ROM + ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half + + ROM_REGION( 0x1800, "gfx2", 0 ) + ROM_LOAD( "1.4a", 0x0000, 0x0800, CRC(f2f94661) SHA1(f37f7c0dff680fd02897dae64e13e297d0fdb3e7) ) // cards deck gfx, bitplane1 + ROM_LOAD( "2.6a", 0x0800, 0x0800, CRC(6bbb1e2d) SHA1(51ee282219bf84218886ad11a24bc6a8e7337527) ) // cards deck gfx, bitplane2 + ROM_LOAD( "3.7a", 0x1000, 0x0800, CRC(77143e12) SHA1(b459f704d89be1dd64de3514c0adc6a5d5364749) ) // cards deck gfx, bitplane3 + ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half + + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "tbp24sa10.bin", 0x0000, 0x0100, BAD_DUMP CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // not dumped for this set +ROM_END + + ROM_START( goodluck ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "goodluck_glh6b.bin", 0x0000, 0x8000, CRC(2cfa4a2c) SHA1(720e2900f3a0ef2632aa201a63b5eba0570e6aa3) ) @@ -11288,6 +11358,7 @@ ROM_START( jkrbonus ) // PC0-009-31 PCB with sub PCB with CPU, its ROM and RAM, ROM_LOAD( "tbp24sa10.bin", 0x0000, 0x0100, BAD_DUMP CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // not dumped for this set ROM_END + /*************************************************************** Casino Poker. @@ -13116,8 +13187,10 @@ GAMEL( 198?, potnpkri, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init GAMEL( 198?, potnpkrj, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 11, German, W.W.)", 0, layout_goldnpkr ) GAMEL( 198?, potnpkrk, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 12, no Double-Up)", 0, layout_goldnpkr ) GAMEL( 198?, potnpkrl, pottnpkr, pottnpkr, potnpkra, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (set 13, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. -GAMEL( 1988, potnpkrm, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 14, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. -GAME ( 198?, potnpkrn, pottnpkr, glfever, glfever, goldnpkr_state, init_glfev, ROT0, "bootleg", "Jack Potten's Poker (w/fever, ICP-1 PCB)", 0 ) +GAMEL( 1988, potnpkrm, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 14, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. +GAME ( 198?, potnpkrn, pottnpkr, glfever, glfever, goldnpkr_state, init_glfev, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 15, w/fever, ICP-1 PCB)", 0 ) +GAMEL( 1987, potnpkro, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 16, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with daughterboard, 1986 0415 VER 7.0 1987 06-03 BY PED. (wires hack) +GAMEL( 1987, potnpkrp, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 17, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with daughterboard, 1986 0415 VER 7.0 1987 06-03 BY PED. (PROM mod) GAMEL( 198?, ngold, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 1)", 0, layout_goldnpkr ) GAMEL( 198?, ngolda, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 2)", 0, layout_goldnpkr ) GAMEL( 198?, ngoldb, pottnpkr, pottnpkr, ngoldb, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 3)", 0, layout_goldnpkr ) From 78e4238437509b43499c05911f438d02ae49b2bd Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Mon, 16 Dec 2024 01:45:23 +0100 Subject: [PATCH 21/40] potnpkro & potnpkrp sets: Corrected docs. --- src/mame/misc/goldnpkr.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mame/misc/goldnpkr.cpp b/src/mame/misc/goldnpkr.cpp index 08d25b5440b..fdc54690591 100644 --- a/src/mame/misc/goldnpkr.cpp +++ b/src/mame/misc/goldnpkr.cpp @@ -6052,7 +6052,7 @@ ROM_END Golden/Potten's Poker 1986 0415 VER 7.0 1987 06-03 BY PED. - ICP-1 hardware with daughterboard. + ICP-1 hardware with modifications. The first set has bookkeeping with DSW test. The second set is a hack of the first with unknown mods. @@ -13189,8 +13189,8 @@ GAMEL( 198?, potnpkrk, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init GAMEL( 198?, potnpkrl, pottnpkr, pottnpkr, potnpkra, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (set 13, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. GAMEL( 1988, potnpkrm, pottnpkr, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "bootleg", "Jack Potten's Poker (set 14, ICP-1 PCB)", 0, layout_goldnpkr ) // unencrypted IPC-1 PCB. GAME ( 198?, potnpkrn, pottnpkr, glfever, glfever, goldnpkr_state, init_glfev, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 15, w/fever, ICP-1 PCB)", 0 ) -GAMEL( 1987, potnpkro, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 16, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with daughterboard, 1986 0415 VER 7.0 1987 06-03 BY PED. (wires hack) -GAMEL( 1987, potnpkrp, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 17, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with daughterboard, 1986 0415 VER 7.0 1987 06-03 BY PED. (PROM mod) +GAMEL( 1987, potnpkro, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 16, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with mods, 1986 0415 VER 7.0 1987 06-03 BY PED. (wires hack) +GAMEL( 1987, potnpkrp, pottnpkr, goldnpkr, potnpkro, goldnpkr_state, empty_init, ROT0, "bootleg (PED)", "Jack Potten's Poker (set 17, ICP-1 PCB)", 0, layout_goldnpkr ) // ICP-1 with mods, 1986 0415 VER 7.0 1987 06-03 BY PED. (PROM mod) GAMEL( 198?, ngold, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 1)", 0, layout_goldnpkr ) GAMEL( 198?, ngolda, pottnpkr, pottnpkr, ngold, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 2)", 0, layout_goldnpkr ) GAMEL( 198?, ngoldb, pottnpkr, pottnpkr, ngoldb, goldnpkr_state, empty_init, ROT0, "", "Jack Potten's Poker (NGold, set 3)", 0, layout_goldnpkr ) From f14f2310b4e2d717327849c0bbc57c836a6d81e7 Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Sun, 15 Dec 2024 18:55:46 -0800 Subject: [PATCH 22/40] hash/ibm5170{,_cdrom}: Original Windows NT 3.1 floppy distribution (#13085) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cleaning up the NT 3.1 entries, the existing floppy set is actually build 528, so simply rename that. Place the original (build 511) floppy set as winnt31o_35. The floppy disk connected to the cdrom set winnt31o2 actually belongs to winnt31o (build 528 instead of 511), and the build 511 3.5" install floppy is now marked as “nodump.” Users can still start the installation from DOS and use the CD-ROM version, but a direct boot from floppy is only an option for 5.25" drives until a dump is made. The old floppy disk connected to cdrom winnt31/winnt31o has been replaced by what was in winnt31o2. The only difference is that this disk has unused sectors filled out with f6 bytes, the same as what happens from Microsoft's format utilities of the day. New working software list items (ibm5170.xml) --------------------------------------------- Windows NT 3.1 (3.10.511.1) [3.5" floppy] [chungy] --- hash/ibm5170.xml | 121 ++++++++++++++++++++++++++++++++++++++++- hash/ibm5170_cdrom.xml | 6 +- 2 files changed, 122 insertions(+), 5 deletions(-) diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml index f5ef4cabfbd..df45744489e 100644 --- a/hash/ibm5170.xml +++ b/hash/ibm5170.xml @@ -4415,8 +4415,8 @@ license:CC0-1.0 - Windows NT 3.1 (3.10.511.1) [3.5" floppy] - 1993 + Windows NT 3.1 (3.10.528.1) [3.5" floppy] + 1994 Microsoft @@ -4531,6 +4531,123 @@ license:CC0-1.0 + + Windows NT 3.1 (3.10.511.1) [3.5" floppy] + 1993 + Microsoft + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Windows NT Advanced Server 3.1 (3.10.511.1) [3.5" floppy] 1993 diff --git a/hash/ibm5170_cdrom.xml b/hash/ibm5170_cdrom.xml index cc59d658ead..63870ca2802 100644 --- a/hash/ibm5170_cdrom.xml +++ b/hash/ibm5170_cdrom.xml @@ -7520,7 +7520,7 @@ Installation and Open Circulation CDs are bootable. - + @@ -7537,7 +7537,7 @@ Installation and Open Circulation CDs are bootable. - + @@ -7554,7 +7554,7 @@ Installation and Open Circulation CDs are bootable. - + From b9059ab29d7004e912557f20806d5f3566b2cd01 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 16 Dec 2024 08:11:40 +0100 Subject: [PATCH 23/40] namco/mappy.cpp: added PLD dumps for phozons, removed PROM not actually present on PCB [Corrado Tomaselli, f205v] --- src/mame/namco/mappy.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mame/namco/mappy.cpp b/src/mame/namco/mappy.cpp index 598435c1b5f..de9de2ec171 100644 --- a/src/mame/namco/mappy.cpp +++ b/src/mame/namco/mappy.cpp @@ -1835,16 +1835,20 @@ ROM_START( phozons ) ROM_REGION( 0x2000, "gfx2", 0 ) ROM_LOAD( "5t.rom", 0x0000, 0x2000, CRC(d50f08f8) SHA1(4e9dda0d5ad1c1b8b3be7edb05b3060f5f63a9c7) ) // sprites - 5t.bin - ROM_REGION( 0x0520, "proms", 0 ) - ROM_LOAD( "red.prm", 0x0000, 0x0100, CRC(a2880667) SHA1(b24d9b3354d20a7ecc02c428245669c6c86bfd61) ) // red palette ROM (4 bits) - ROM_LOAD( "green.prm", 0x0100, 0x0100, CRC(d6e08bef) SHA1(b0ca7f8a77b7208cf974a8cc565fc91b7f40f51f) ) // green palette ROM (4 bits) - ROM_LOAD( "blue.prm", 0x0200, 0x0100, CRC(b2d69c72) SHA1(e7b1ed698ab0e87872cb3a8f3ec102ca3a753259) ) // blue palette ROM (4 bits) - ROM_LOAD( "chr.prm", 0x0300, 0x0100, CRC(429e8fee) SHA1(7b1899ca3f33f4561b572de1f24d9ea9d7d84b59) ) // characters - ROM_LOAD( "sprite.prm", 0x0400, 0x0100, CRC(9061db07) SHA1(4305d37e613e1d15d37539b152c948648189c2cd) ) // sprites - ROM_LOAD( "palette.prm", 0x0500, 0x0020, CRC(60e856ed) SHA1(dcc9a2dfc728b9ca1ab895008de07e20ebed9da3) ) // unused - timing? + ROM_REGION( 0x0500, "proms", 0 ) + ROM_LOAD( "ph1-2.1r", 0x0000, 0x0100, CRC(a2880667) SHA1(b24d9b3354d20a7ecc02c428245669c6c86bfd61) ) // red palette ROM (4 bits) + ROM_LOAD( "ph1-1.1s", 0x0100, 0x0100, CRC(d6e08bef) SHA1(b0ca7f8a77b7208cf974a8cc565fc91b7f40f51f) ) // green palette ROM (4 bits) + ROM_LOAD( "ph1-3.1p", 0x0200, 0x0100, CRC(b2d69c72) SHA1(e7b1ed698ab0e87872cb3a8f3ec102ca3a753259) ) // blue palette ROM (4 bits) + ROM_LOAD( "ph1-5.5l", 0x0300, 0x0100, CRC(429e8fee) SHA1(7b1899ca3f33f4561b572de1f24d9ea9d7d84b59) ) // characters + ROM_LOAD( "ph1-6.6r", 0x0400, 0x0100, CRC(9061db07) SHA1(4305d37e613e1d15d37539b152c948648189c2cd) ) // sprites ROM_REGION( 0x0100, "namco", 0 ) // sound PROMs - ROM_LOAD( "sound.prm", 0x0000, 0x0100, CRC(ad43688f) SHA1(072f427453efb1dda8147da61804fff06e1bc4d5) ) + ROM_LOAD( "ph1-4.3e", 0x0000, 0x0100, CRC(ad43688f) SHA1(072f427453efb1dda8147da61804fff06e1bc4d5) ) + + ROM_REGION( 0x0600, "plds", ROMREGION_ERASE00 ) + ROM_LOAD( "ph1-7.7b", 0x0000, 0x0117, CRC(9a00af9a) SHA1(b5d5a3d8a091e0e3d62b2cce34ae9b8dc1cfcbff) ) + ROM_LOAD( "ph1-8.4b", 0x0200, 0x0117, CRC(fb180f00) SHA1(c0a355fb5287e715b0c39b78eacfdcd00db953b1) ) + ROM_LOAD( "ph1-9.7r", 0x0400, 0x0117, CRC(3b21d560) SHA1(905f9a6b7440b2eeb34475879751748300b42428) ) ROM_END ROM_START( mappy ) From 0e686a5ce8007781b2525c8306e7c5c42412eae3 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 16 Dec 2024 09:48:25 +0100 Subject: [PATCH 24/40] New clones marked not working ----------------------------- Jan Oh (set 3) [Hammy] --- src/mame/dynax/royalmah.cpp | 18 ++++++++++++++++++ src/mame/mame.lst | 1 + 2 files changed, 19 insertions(+) diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp index 840f6e268cd..cf87de977d5 100644 --- a/src/mame/dynax/royalmah.cpp +++ b/src/mame/dynax/royalmah.cpp @@ -58,6 +58,9 @@ Year + Game Board(s) CPU Company Not - mjtensin: random crashes, interrupts related +- janoh, janohb: they do the same bank switching calls as mjsiyoub and kiwako/jongkyo.cpp + but there's no ROM to map there. Missing on the dumped PCBs or something else going on? + Stephh's notes (based on the games Z80 code and some tests) : 1) 'royalmah' @@ -5504,6 +5507,20 @@ ROM_START( janoh ) ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP ) ROM_END +ROM_START( janohb ) // same set was also found with the first 6 ROMs combined in 3 bigger capacity ROMs + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "jo1.1", 0x0000, 0x1000, CRC(8fc19963) SHA1(309e941c059a97b117090fd9dd69a00031aa6109) ) // "1984 JAN OH" + ROM_LOAD( "jo2.2", 0x1000, 0x1000, CRC(13b44a7d) SHA1(30ed6bda1597fb123e0e6104ef87cef48f3039a3) ) + ROM_LOAD( "jo3.3", 0x2000, 0x1000, CRC(6efcaf89) SHA1(e7a8035b1ecd468a6054926a263f22741635e0df) ) // "JANOH TOAPLAN 84" + ROM_LOAD( "jo4.4", 0x3000, 0x1000, CRC(9186f02c) SHA1(b7dc2d6c19e67dd3f841cbb56df9589e3e6941f7) ) + ROM_LOAD( "jo5.5", 0x4000, 0x1000, CRC(3c8d1f2a) SHA1(9e05f310a6d8a485a1005fc35ac2e3a79410a507) ) + ROM_LOAD( "jo6.6", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) ) + ROM_LOAD( "jo7.7", 0x6000, 0x1000, CRC(774cb324) SHA1(930d6643fcd7e479a68811e775144d46f0183636) ) + + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP ) +ROM_END + /*************************************************************************** Mahjong Cafe Break @@ -6262,6 +6279,7 @@ GAME( 1990, akamj, 0, ippatsu, ippatsu, royalmah_state, GAME( 1984, rkjanoh2, 0, rkjanoh2, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "SNK / Dyna Corp", "Royal King Jang Oh 2 (v4.00 1984 Jun 10th)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // never seems to set the palette bank? GAME( 1984, janoh, 0, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 1)", MACHINE_NOT_WORKING ) GAME( 1984, janoha, janoh, janoha, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 2)", MACHINE_NOT_WORKING ) // this one is complete? +GAME( 1984, janohb, janoh, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 3)", MACHINE_NOT_WORKING ) GAME( 1985, jansou, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) GAME( 1985, jansoua, jansou, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (V 1.1)", 0 ) GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jang Taku (V 1.3)", 0 ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 18bf308aae7..22fe3726ce1 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17648,6 +17648,7 @@ ippatsu // 01? (c) 1986 Dyna Electronics jangtaku // (c) 1986 Dyna Computer janoh // (c) 1984 Toaplan janoha // (c) 1984 Toaplan +janohb // (c) 1984 Toaplan janptr96 // "503" (c) 1996 Dynax janptrsp // "511" (c) 1997 Dynax janputer // bootleg From ba493adcfa588be83afd739ee3b8ec32d92c9b9b Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 16 Dec 2024 13:42:45 +0100 Subject: [PATCH 25/40] mconfig: allow sub-mcfg to unset perfect quantum --- src/emu/mconfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emu/mconfig.cpp b/src/emu/mconfig.cpp index 2c8c1aa011b..275a4af46ae 100644 --- a/src/emu/mconfig.cpp +++ b/src/emu/mconfig.cpp @@ -404,6 +404,6 @@ void machine_config::set_perfect_quantum(device_t &device, std::string tag) m_current_device->tag()); } - m_perfect_quantum_device.first = &device; + m_perfect_quantum_device.first = tag.empty() ? nullptr : &device; m_perfect_quantum_device.second = std::move(tag); } From 91b6c78af80ea512721f1877de8f1d54c3aa439c Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 16 Dec 2024 13:45:46 +0100 Subject: [PATCH 26/40] system1: clean up mcfg names, lower sound hw clocks for starjack and upndown --- src/devices/cpu/mcs51/mcs51.h | 2 +- src/mame/dataeast/dec8.cpp | 2 +- src/mame/sega/system1.cpp | 532 ++++++++++++++++++---------------- src/mame/sega/system1.h | 87 +++--- 4 files changed, 323 insertions(+), 300 deletions(-) diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h index a1c8351c856..a81428685c3 100644 --- a/src/devices/cpu/mcs51/mcs51.h +++ b/src/devices/cpu/mcs51/mcs51.h @@ -66,6 +66,7 @@ class mcs51_cpu_device : public cpu_device void program_internal(address_map &map) ATTR_COLD; void data_internal(address_map &map) ATTR_COLD; + protected: // construction/destruction mcs51_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int program_width, int data_width, uint8_t features = 0); @@ -92,7 +93,6 @@ class mcs51_cpu_device : public cpu_device // device_disasm_interface overrides virtual std::unique_ptr create_disassembler() override; -protected: address_space_config m_program_config; address_space_config m_data_config; address_space_config m_io_config; diff --git a/src/mame/dataeast/dec8.cpp b/src/mame/dataeast/dec8.cpp index a3e0570ccba..f805c9bb83c 100644 --- a/src/mame/dataeast/dec8.cpp +++ b/src/mame/dataeast/dec8.cpp @@ -3938,7 +3938,7 @@ GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, lastmisn_state, empty_ini GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 3B?)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB - stalls in demo mode GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, meikyuhbl, ghostb, meikyuh, meikyuh, lastmisn_state, init_meikyuhbl, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, meikyuhbl, ghostb, meikyuh, meikyuh, lastmisn_state, init_meikyuhbl, ROT0, "bootleg", "Meikyuu Hunter G (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, csilver, 0, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, csilverj, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, csilverja, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/sega/system1.cpp b/src/mame/sega/system1.cpp index 17b06281aa7..3443a59d3a3 100644 --- a/src/mame/sega/system1.cpp +++ b/src/mame/sega/system1.cpp @@ -2261,6 +2261,60 @@ void system1_state::sys1pio(machine_config &config) m_pio->out_pb_callback().set(FUNC(system1_state::videomode_w)); } +// reduced visible area for scrolling games +void system1_state::sys1pios(machine_config &config) +{ + sys1pio(config); + m_screen->set_visarea(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1); +} + +// this describes the additional 8751 MCU when present +void system1_state::mcu(machine_config &config) +{ + // basic machine hardware + m_maincpu->remove_vblank_int(); + + I8751(config, m_mcu, SOUND_CLOCK); + m_mcu->set_addrmap(AS_IO, &system1_state::mcu_io_map); + m_mcu->port_out_cb<1>().set(FUNC(system1_state::mcu_control_w)); + + config.set_maximum_quantum(attotime::from_hz(m_maincpu->clock() / 16)); + + // This interrupt is driven by pin 15 of a PAL16R4 (315-5138 on Choplifter), based on the vertical count. + // The actual duty cycle likely differs from VBLANK, which is another output from the same PAL. + m_screen->screen_vblank().set_inputline("mcu", MCS51_INT0_LINE); + + // bus controller INTACK pin clocks MCU T0 + m_maincpu->set_irq_acknowledge_callback(FUNC(system1_state::mcu_t0_callback)); +} + +// System 2 video +void system1_state::sys2(machine_config &config) +{ + sys1ppi(config); + + m_ppi8255->out_pc_callback().set(FUNC(system1_state::sound_control_w)).exor(0x01); + + // video hardware + MCFG_VIDEO_START_OVERRIDE(system1_state,system2) + m_screen->set_screen_update(FUNC(system1_state::screen_update_system2)); +} + +void system1_state::sys2x(machine_config &config) +{ + sys2(config); + MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); + encrypted_sys2_mc8123_maps(config); +} + +// System 2 with rowscroll +void system1_state::sys2row(machine_config &config) +{ + sys2(config); + m_screen->set_screen_update(FUNC(system1_state::screen_update_system2_rowscroll)); +} + +// address map configs void system1_state::encrypted_sys1ppi_maps(machine_config &config) { m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::system1_map); @@ -2288,44 +2342,49 @@ void system1_state::encrypted_sys2_mc8123_maps(machine_config &config) m_maincpu->refresh_cb().set(FUNC(system1_state::adjust_cycles)); } -void system1_state::sys1pioxb(machine_config &config) -{ - sys1pio(config); - MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); - encrypted_sys1pio_maps(config); -} -void system1_state::blockgal(machine_config &config) +// game-specific PPI-based System 1 + +void system1_state::starjack(machine_config &config) { - sys1pioxb(config); - m_maincpu->set_addrmap(AS_IO, &system1_state::blockgal_io_map); + sys1ppis(config); + + // lower sound hw clocks + m_soundcpu->set_clock(MASTER_CLOCK / 8); + m_sn[0]->set_clock(MASTER_CLOCK / 8); + m_sn[1]->set_clock(MASTER_CLOCK / 16); } -void system1_state::sys1ppix_315_5178(machine_config &config) +void system1_state::upndown(machine_config &config) { sys1ppi(config); - segacrp2_z80_device &z80(SEGA_315_5178(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + z80.set_decrypted_tag(":decrypted_opcodes"); + + // lower sound hw clocks (does not apply to unencrypted set) + m_soundcpu->set_clock(MASTER_CLOCK / 8); + m_sn[0]->set_clock(MASTER_CLOCK / 8); + m_sn[1]->set_clock(MASTER_CLOCK / 8); } -void system1_state::sys1ppix_315_5179(machine_config &config) +void system1_state::regulus(machine_config &config) { sys1ppi(config); - segacrp2_z80_device &z80(SEGA_315_5179(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5033(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5051(machine_config &config) +void system1_state::mrviking(machine_config &config) { - sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1ppis(config); + segacrpt_z80_device &z80(SEGA_315_5041(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5048(machine_config &config) +void system1_state::swat(machine_config &config) { sys1ppi(config); segacrpt_z80_device &z80(SEGA_315_5048(config.replace(), m_maincpu, MASTER_CLOCK/5)); @@ -2333,259 +2392,235 @@ void system1_state::sys1ppix_315_5048(machine_config &config) z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5033(machine_config &config) +void system1_state::flickyo(machine_config &config) { sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5033(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5065(machine_config &config) +void system1_state::wmatch(machine_config &config) { - sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1ppis(config); + segacrpt_z80_device &z80(SEGA_315_5064(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1ppix_315_5098(machine_config &config) +void system1_state::bullfgt(machine_config &config) { sys1ppi(config); - segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5177(machine_config &config) +void system1_state::wboy2(machine_config &config) { - sys1pio(config); - segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1pio_maps(config); + sys1ppi(config); + segacrp2_z80_device &z80(SEGA_315_5178(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1piox_315_5162(machine_config &config) +void system1_state::wboy6(machine_config &config) { - sys1pio(config); - segacrp2_z80_device &z80(SEGA_315_5162(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1pio_maps(config); + sys1ppi(config); + segacrp2_z80_device &z80(SEGA_315_5179(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1piox_317_0006(machine_config &config) +void system1_state::nob(machine_config &config) { - sys1pio(config); - segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1pio_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + nobb(config); + + // basic machine hardware + I8751(config, m_mcu, SOUND_CLOCK); + m_mcu->port_in_cb<0>().set(FUNC(system1_state::nob_mcu_latch_r)); + m_mcu->port_out_cb<0>().set(FUNC(system1_state::nob_mcu_latch_w)); + m_mcu->port_out_cb<1>().set(FUNC(system1_state::nob_mcu_status_w)); + m_mcu->port_out_cb<2>().set(FUNC(system1_state::nob_mcu_control_p2_w)); +} + +void system1_state::nobb(machine_config &config) +{ + sys1ppi(config); + + // alternate program map with RAM/collision swapped + m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::nobo_map); m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys1piox_315_5135(machine_config &config) + +// game-specific PIO-based System 1 + +void system1_state::flicky(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5135(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5132(machine_config &config) +void system1_state::thetogyu(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5132(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5155(machine_config &config) +void system1_state::spatter(machine_config &config) { - sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5155(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1pios(config); + segacrpt_z80_device &z80(SEGA_315_5096(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5111(machine_config &config) +void system1_state::spattera(machine_config &config) { - sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5111(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1pios(config); + segacrpt_z80_device &z80(SEGA_315_5099(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } - -void system1_state::sys1piox_315_5110(machine_config &config) +void system1_state::pitfall2(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5110(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5093(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5051(machine_config &config) +void system1_state::seganinj(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5102(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5098(machine_config &config) +void system1_state::seganinja(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5133(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5102(machine_config &config) +void system1_state::nprinceso(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5102(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5133(machine_config &config) +void system1_state::imsorry(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5133(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5110(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5093(machine_config &config) +void system1_state::teddybb(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5093(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5155(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piox_315_5065(machine_config &config) +void system1_state::teddybboa(machine_config &config) { sys1pio(config); - segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5111(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -// reduced visible area for scrolling games -void system1_state::sys1pios(machine_config &config) +void system1_state::myheroj(machine_config &config) { sys1pio(config); - m_screen->set_visarea(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1); -} - -void system1_state::sys1piosx_315_5099(machine_config &config) -{ - sys1pios(config); - segacrpt_z80_device &z80(SEGA_315_5099(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrpt_z80_device &z80(SEGA_315_5132(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -void system1_state::sys1piosx_315_5096(machine_config &config) +void system1_state::_4dwarrio(machine_config &config) { - sys1pios(config); - segacrpt_z80_device &z80(SEGA_315_5096(config.replace(), m_maincpu, MASTER_CLOCK/5)); + sys1pio(config); + segacrp2_z80_device &z80(SEGA_315_5162(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1pio_maps(config); - z80.set_decrypted_tag(":decrypted_opcodes"); + z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1ppisx_315_5064(machine_config &config) +void system1_state::wboy(machine_config &config) { - sys1ppis(config); - segacrpt_z80_device &z80(SEGA_315_5064(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(":decrypted_opcodes"); + sys1pio(config); + segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1pio_maps(config); + z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys1ppisx_315_5041(machine_config &config) +void system1_state::wboyo(machine_config &config) { - sys1ppis(config); - segacrpt_z80_device &z80(SEGA_315_5041(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1ppi_maps(config); + sys1pio(config); + segacrpt_z80_device &z80(SEGA_315_5135(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1pio_maps(config); z80.set_decrypted_tag(":decrypted_opcodes"); } -// this describes the additional 8751 MCU when present -void system1_state::mcu(machine_config &config) +void system1_state::blockgal(machine_config &config) { - // basic machine hardware - m_maincpu->remove_vblank_int(); - - I8751(config, m_mcu, SOUND_CLOCK); - m_mcu->set_addrmap(AS_IO, &system1_state::mcu_io_map); - m_mcu->port_out_cb<1>().set(FUNC(system1_state::mcu_control_w)); - - config.set_maximum_quantum(attotime::from_hz(m_maincpu->clock() / 16)); - - // This interrupt is driven by pin 15 of a PAL16R4 (315-5138 on Choplifter), based on the vertical count. - // The actual duty cycle likely differs from VBLANK, which is another output from the same PAL. - m_screen->screen_vblank().set_inputline("mcu", MCS51_INT0_LINE); - - // bus controller INTACK pin clocks MCU T0 - m_maincpu->set_irq_acknowledge_callback(FUNC(system1_state::mcu_t0_callback)); + sys1pio(config); + MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); + encrypted_sys1pio_maps(config); + m_maincpu->set_addrmap(AS_IO, &system1_state::blockgal_io_map); } -// alternate program map with RAM/collision swapped -void system1_state::nob(machine_config &config) +void system1_state::gardia(machine_config &config) { - sys1ppi(config); - m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::nobo_map); + sys1pio(config); + segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1pio_maps(config); + z80.set_decrypted_tag(m_decrypted_opcodes); m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::nobm(machine_config &config) -{ - nob(config); - // basic machine hardware - I8751(config, m_mcu, SOUND_CLOCK); - m_mcu->port_in_cb<0>().set(FUNC(system1_state::nob_mcu_latch_r)); - m_mcu->port_out_cb<0>().set(FUNC(system1_state::nob_mcu_latch_w)); - m_mcu->port_out_cb<1>().set(FUNC(system1_state::nob_mcu_status_w)); - m_mcu->port_out_cb<2>().set(FUNC(system1_state::nob_mcu_control_p2_w)); -} +// game-specific System 2 -// system2 video -void system1_state::sys2(machine_config &config) +void system1_state::choplift(machine_config &config) { - sys1ppi(config); - - m_ppi8255->out_pc_callback().set(FUNC(system1_state::sound_control_w)).exor(0x01); - - // video hardware - MCFG_VIDEO_START_OVERRIDE(system1_state,system2) - m_screen->set_screen_update(FUNC(system1_state::screen_update_system2)); + sys2row(config); + mcu(config); } -void system1_state::sys2x(machine_config &config) +void shtngmst_state::shtngmst(machine_config &config) { sys2(config); - m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map); + mcu(config); + m_maincpu->set_addrmap(AS_IO, &shtngmst_state::shtngmst_io_map); } -void system1_state::sys2_315_5177(machine_config &config) +void system1_state::gardiab(machine_config &config) { sys2(config); - segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrp2_z80_device &z80(SEGA_317_0007(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); -} -void system1_state::sys2_315_5176(machine_config &config) -{ - sys2(config); - segacrp2_z80_device &z80(SEGA_315_5176(config.replace(), m_maincpu, MASTER_CLOCK/5)); - encrypted_sys1ppi_maps(config); - z80.set_decrypted_tag(m_decrypted_opcodes); + m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys2_317_0006(machine_config &config) +void system1_state::gardiaj(machine_config &config) { sys2(config); segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK/5)); @@ -2595,62 +2630,47 @@ void system1_state::sys2_317_0006(machine_config &config) m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys2_317_0007(machine_config &config) +void system1_state::wboysys2(machine_config &config) { sys2(config); - segacrp2_z80_device &z80(SEGA_317_0007(config.replace(), m_maincpu, MASTER_CLOCK/5)); + segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK/5)); encrypted_sys1ppi_maps(config); z80.set_decrypted_tag(m_decrypted_opcodes); - - m_sn[1]->set_clock(SOUND_CLOCK / 4); } -void system1_state::sys2xb(machine_config &config) +void system1_state::wboysys2a(machine_config &config) { sys2(config); - MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); - encrypted_sys2_mc8123_maps(config); + segacrp2_z80_device &z80(SEGA_315_5176(config.replace(), m_maincpu, MASTER_CLOCK/5)); + encrypted_sys1ppi_maps(config); + z80.set_decrypted_tag(m_decrypted_opcodes); } -void system1_state::sys2xboot(machine_config &config) +void system1_state::wbmlb(machine_config &config) { sys2(config); m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map); } -void shtngmst_state::shtngmst(machine_config &config) -{ - sys2(config); - mcu(config); - m_maincpu->set_addrmap(AS_IO, &shtngmst_state::shtngmst_io_map); -} - -// system2 with rowscroll -void system1_state::sys2row(machine_config &config) +void system1_state::blockgalb(machine_config &config) { sys2(config); - m_screen->set_screen_update(FUNC(system1_state::screen_update_system2_rowscroll)); + m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map); } -void system1_state::sys2rowxb(machine_config &config) +void system1_state::ufosensi(machine_config &config) { sys2row(config); MC8123(config.replace(), m_maincpu, MASTER_CLOCK/5); encrypted_sys2_mc8123_maps(config); } -void system1_state::sys2rowxboot(machine_config &config) +void system1_state::ufosensib(machine_config &config) { sys2row(config); m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map); } -void system1_state::sys2rowm(machine_config &config) -{ - sys2row(config); - mcu(config); -} - /************************************* @@ -5729,101 +5749,101 @@ void system1_state::init_bootsys2d() *************************************/ // PPI-based System 1 -GAME( 1983, starjack, 0, sys1ppis, starjack, system1_state, empty_init, ROT270, "Sega", "Star Jacker (Sega)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, starjacks, starjack, sys1ppis, starjacks, system1_state, empty_init, ROT270, "Sega (Stern Electronics license)", "Star Jacker (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, upndown, 0, sys1ppix_315_5098, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (315-5030)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, upndownu, upndown, sys1ppi, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, regulus, 0, sys1ppix_315_5033, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033, Rev A.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, reguluso, regulus, sys1ppix_315_5033, reguluso, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, regulusu, regulus, sys1ppi, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, mrviking, 0, sys1ppisx_315_5041,mrviking, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, mrvikingj, mrviking, sys1ppisx_315_5041,mrvikingj, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, swat, 0, sys1ppix_315_5048, swat, system1_state, empty_init, ROT270, "Coreland / Sega", "SWAT (315-5048)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, flickyo, flicky, sys1ppix_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/24 -GAME( 1984, flickys1, flicky, sys1ppix_315_5051, flickys1, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/11/26 -GAME( 1984, flickyup, flicky, sys1ppix_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, on Up'n Down boardset, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/17 -GAME( 1984, flickyupa, flicky, sys1ppix_315_5051, flicky, system1_state, empty_init, ROT0, "bootleg", "Flicky (64k Version, on Up'n Down boardset, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/7/05 -GAME( 1984, wmatch, 0, sys1ppisx_315_5064,wmatch, system1_state, empty_init, ROT270, "Sega", "Water Match (315-5064)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, bullfgt, 0, sys1ppix_315_5065, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "Bullfight (315-5065)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprinces, seganinj, sys1ppix_315_5051, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051, 64k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprincesu, seganinj, sys1ppi, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (64k Ver. not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy2, wboy, sys1ppix_315_5178, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5178)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy2u, wboy, sys1ppi, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy6, wboy, sys1ppix_315_5179, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 6, 315-5179)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wbdeluxe, wboy, sys1ppi, wbdeluxe, system1_state, empty_init, ROT0, "hack (Vision Electronics)", "Wonder Boy Deluxe", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, nob, 0, nobm, nob, system1_state, init_nob, ROT270, "Coreland / Data East Corporation", "Noboranka (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, nobb, nob, nob, nob, system1_state, init_nobb, ROT270, "bootleg (Game Electronics)", "Noboranka (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, raflesiau, raflesia, sys1ppi, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, starjack, 0, starjack, starjack, system1_state, empty_init, ROT270, "Sega", "Star Jacker (Sega)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, starjacks, starjack, starjack, starjacks, system1_state, empty_init, ROT270, "Sega (Stern Electronics license)", "Star Jacker (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, upndown, 0, upndown, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (315-5030)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, upndownu, upndown, sys1ppi, upndown, system1_state, empty_init, ROT270, "Sega", "Up'n Down (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, regulus, 0, regulus, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033, Rev A.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, reguluso, regulus, regulus, reguluso, system1_state, empty_init, ROT270, "Sega", "Regulus (315-5033)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, regulusu, regulus, sys1ppi, regulus, system1_state, empty_init, ROT270, "Sega", "Regulus (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, mrviking, 0, mrviking, mrviking, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, mrvikingj, mrviking, mrviking, mrvikingj, system1_state, empty_init, ROT270, "Sega", "Mister Viking (315-5041, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, swat, 0, swat, swat, system1_state, empty_init, ROT270, "Coreland / Sega", "SWAT (315-5048)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, flickyo, flicky, flickyo, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/24 +GAME( 1984, flickys1, flicky, flickyo, flickys1, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, 315-5051, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/11/26 +GAME( 1984, flickyup, flicky, flickyo, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (64k Version, on Up'n Down boardset, set 1)", MACHINE_SUPPORTS_SAVE ) // 84/5/17 +GAME( 1984, flickyupa, flicky, flickyo, flicky, system1_state, empty_init, ROT0, "bootleg", "Flicky (64k Version, on Up'n Down boardset, set 2)", MACHINE_SUPPORTS_SAVE ) // 84/7/05 +GAME( 1984, wmatch, 0, wmatch, wmatch, system1_state, empty_init, ROT270, "Sega", "Water Match (315-5064)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, bullfgt, 0, bullfgt, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "Bullfight (315-5065)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprinces, seganinj, flickyo, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051, 64k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprincesu, seganinj, sys1ppi, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (64k Ver. not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy2, wboy, wboy2, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5178)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy2u, wboy, sys1ppi, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy6, wboy, wboy6, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 6, 315-5179)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wbdeluxe, wboy, sys1ppi, wbdeluxe, system1_state, empty_init, ROT0, "hack (Vision Electronics)", "Wonder Boy Deluxe", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, nob, 0, nob, nob, system1_state, init_nob, ROT270, "Coreland / Data East Corporation", "Noboranka (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, nobb, nob, nobb, nob, system1_state, init_nobb, ROT270, "bootleg (Game Electronics)", "Noboranka (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, raflesiau, raflesia, sys1ppi, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (not encrypted)", MACHINE_SUPPORTS_SAVE ) // PIO-based System 1 -GAME( 1984, flicky, 0, sys1piox_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 -GAME( 1984, flickya, flicky, sys1piox_315_5051, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 -GAME( 1984, flickyb, flicky, sys1piox_315_5051, flickyb, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs, newer)", MACHINE_SUPPORTS_SAVE ) // 1984/10/07 -GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, thetogyu, bullfgt, sys1piox_315_5065, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, spatter, 0, sys1piosx_315_5096,spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5096)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, spattera, spatter, sys1piosx_315_5099,spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5099)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, ssanchan, spatter, sys1piosx_315_5096,spatter, system1_state, empty_init, ROT0, "Sega", "Sanrin San Chan (Japan, 315-5096)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, pitfall2, 0, sys1piox_315_5093, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, pitfall2a, pitfall2, sys1piox_315_5093, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, empty_init, ROT0, "Sega", "Pitfall II (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, seganinj, 0, sys1piox_315_5102, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, seganinja, seganinj, sys1piox_315_5133, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5113)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, ninja, seganinj, sys1piox_315_5102, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprinceso, seganinj, sys1piox_315_5098, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, nprincesb, seganinj, sys1piox_315_5051, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, imsorry, 0, sys1piox_315_5110, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "I'm Sorry (315-5110, US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, imsorryj, imsorry, sys1piox_315_5110, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "Gonbee no I'm Sorry (315-5110, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybb, 0, sys1piox_315_5155, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, New Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybbo, teddybb, sys1piox_315_5155, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, Old Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybboa, teddybb, sys1piox_315_5111, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5111, Old Ver.)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, teddybbobl, teddybb, sys1piox_315_5155, teddybb, system1_state, empty_init, ROT0, "bootleg", "TeddyBoy Blues (Old Ver. bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, myhero, 0, sys1pio, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "My Hero (US, not encrypted)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, sscandal, myhero, sys1piox_315_5132, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "Seishun Scandal (315-5132, Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, myherobl, myhero, sys1piox_315_5132, myhero, system1_state, empty_init, ROT0, "bootleg", "My Hero (bootleg, 315-5132 encryption)", MACHINE_SUPPORTS_SAVE ) // cloned 315-5132 encryption? might be a direct copy of an undumped original set -GAME( 1985, myherok, myhero, sys1piox_315_5132, myhero, system1_state, init_myherok, ROT0, "Coreland / Sega", "Cheongchun Ilbeonji (Korea)", MACHINE_SUPPORTS_SAVE ) // possible bootleg, has extra encryption -GAME( 1985, 4dwarrio, 0, sys1piox_315_5162, 4dwarrio, system1_state, empty_init, ROT0, "Coreland / Sega", "4-D Warriors (315-5162)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, raflesia, 0, sys1piox_315_5162, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (315-5162)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy, 0, sys1piox_315_5177, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyo, wboy, sys1piox_315_5135, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5135)", MACHINE_SUPPORTS_SAVE ) // aka 317-0003 -GAME( 1986, wboy3, wboy, sys1piox_315_5135, wboy3, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 3, 315-5135)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboy4, wboy, sys1piox_315_5162, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (315-5162, 4-D Warriors Conversion)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", MACHINE_SUPPORTS_SAVE ) // appears to be a very early / unfinished version. -GAME( 1986, wboy5, wboy, sys1piox_315_5135, wboy3, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyub, wboy, sys1piox_315_5177, wboy, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (US bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboyblt, wboy, sys1piox_315_5135, wboy3, system1_state, empty_init, ROT0, "bootleg (Tecfri)", "Wonder Boy (Tecfri bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, blockgal, 0, blockgal, blockgal, system1_state, init_blockgal, ROT90, "Sega / Vic Tokai", "Block Gal (MC-8123B, 317-0029)", MACHINE_SUPPORTS_SAVE) +GAME( 1984, flicky, 0, flicky, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 +GAME( 1984, flickya, flicky, flicky, flicky, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs)", MACHINE_SUPPORTS_SAVE ) // 1984/05/24 +GAME( 1984, flickyb, flicky, flicky, flickyb, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, 315-5051, larger ROMs, newer)", MACHINE_SUPPORTS_SAVE ) // 1984/10/07 +GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, empty_init, ROT0, "Sega", "Flicky (128k Version, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, thetogyu, bullfgt, thetogyu, bullfgt, system1_state, empty_init, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, spatter, 0, spatter, spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5096)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, spattera, spatter, spattera, spatter, system1_state, empty_init, ROT0, "Sega", "Spatter (315-5099)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, ssanchan, spatter, spatter, spatter, system1_state, empty_init, ROT0, "Sega", "Sanrin San Chan (Japan, 315-5096)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pitfall2, 0, pitfall2, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pitfall2a, pitfall2, pitfall2, pitfall2, system1_state, empty_init, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, empty_init, ROT0, "Sega", "Pitfall II (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, seganinj, 0, seganinj, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, seganinja, seganinj, seganinja, seganinj, system1_state, empty_init, ROT0, "Sega", "Sega Ninja (315-5113)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, ninja, seganinj, seganinj, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja (315-5102)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprinceso, seganinj, nprinceso, seganinj, system1_state, empty_init, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, nprincesb, seganinj, flicky, seganinj, system1_state, empty_init, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, imsorry, 0, imsorry, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "I'm Sorry (315-5110, US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, imsorryj, imsorry, imsorry, imsorry, system1_state, empty_init, ROT0, "Coreland / Sega", "Gonbee no I'm Sorry (315-5110, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybb, 0, teddybb, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, New Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybbo, teddybb, teddybb, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5115, Old Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybboa, teddybb, teddybboa, teddybb, system1_state, empty_init, ROT0, "Sega", "TeddyBoy Blues (315-5111, Old Ver.)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, teddybbobl, teddybb, teddybb, teddybb, system1_state, empty_init, ROT0, "bootleg", "TeddyBoy Blues (Old Ver. bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, myhero, 0, sys1pio, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "My Hero (US, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, sscandal, myhero, myheroj, myhero, system1_state, empty_init, ROT0, "Coreland / Sega", "Seishun Scandal (315-5132, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, myherobl, myhero, myheroj, myhero, system1_state, empty_init, ROT0, "bootleg", "My Hero (bootleg, 315-5132 encryption)", MACHINE_SUPPORTS_SAVE ) // cloned 315-5132 encryption? might be a direct copy of an undumped original set +GAME( 1985, myherok, myhero, myheroj, myhero, system1_state, init_myherok, ROT0, "Coreland / Sega", "Cheongchun Ilbeonji (Korea)", MACHINE_SUPPORTS_SAVE ) // possible bootleg, has extra encryption +GAME( 1985, 4dwarrio, 0, _4dwarrio, 4dwarrio, system1_state, empty_init, ROT0, "Coreland / Sega", "4-D Warriors (315-5162)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, raflesia, 0, _4dwarrio, raflesia, system1_state, empty_init, ROT270, "Coreland / Sega", "Rafflesia (315-5162)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy, 0, wboy, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyo, wboy, wboyo, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5135)", MACHINE_SUPPORTS_SAVE ) // aka 317-0003 +GAME( 1986, wboy3, wboy, wboyo, wboy3, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (set 3, 315-5135)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboy4, wboy, _4dwarrio, wboy, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (315-5162, 4-D Warriors Conversion)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, empty_init, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", MACHINE_SUPPORTS_SAVE ) // appears to be a very early / unfinished version. +GAME( 1986, wboy5, wboy, wboyo, wboy3, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyub, wboy, wboy, wboy, system1_state, empty_init, ROT0, "bootleg", "Wonder Boy (US bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboyblt, wboy, wboyo, wboy3, system1_state, empty_init, ROT0, "bootleg (Tecfri)", "Wonder Boy (Tecfri bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, blockgal, 0, blockgal, blockgal, system1_state, init_blockgal, ROT90, "Sega / Vic Tokai", "Block Gal (MC-8123B, 317-0029)", MACHINE_SUPPORTS_SAVE) // PIO-based System 1 with ROM banking -GAME( 1985, hvymetal, 0, sys1piox_315_5135, hvymetal, system1_state, init_bank44, ROT0, "Sega", "Heavy Metal (315-5135)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, gardia, 0, sys1piox_317_0006, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (317-0006)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE) -GAME( 1986, brain, 0, sys1pio, brain, system1_state, init_bank44, ROT0, "Coreland / Sega", "Brain", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, hvymetal, 0, wboyo, hvymetal, system1_state, init_bank44, ROT0, "Sega", "Heavy Metal (315-5135)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, gardia, 0, gardia, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (317-0006)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE) +GAME( 1986, brain, 0, sys1pio, brain, system1_state, init_bank44, ROT0, "Coreland / Sega", "Brain", MACHINE_SUPPORTS_SAVE ) // System 2 -GAME( 1985, choplift, 0, sys2rowm, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (8751 315-5151)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, chopliftu, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (unprotected)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, chopliftbl, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "bootleg", "Choplifter (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, shtngmst, 0, shtngmst, shtngmst, shtngmst_state,init_bank0c, ROT0, "Sega", "Shooting Master (8751 315-5159a)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, gardiab, gardia, sys2_317_0007, gardia, system1_state, init_bank44, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1986, gardiaj, gardia, sys2_317_0006, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (Japan, 317-0006)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboysys2, wboy, sys2_315_5177, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, wboysys2a, wboy, sys2_315_5176, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, tokisens, 0, sys2xb, tokisens, system1_state, init_wbml, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, tokisensa, tokisens, sys2, tokisensa, system1_state, init_bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (prototype?)", MACHINE_SUPPORTS_SAVE ) // or bootleg? -GAME( 1987, wbml, 0, sys2xb, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy - Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmljo, wbml, sys2xb, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy - Monster Land (Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmljb, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmlb, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (English bootleg set 1)", MACHINE_SUPPORTS_SAVE) -GAME( 1987, wbmlb2, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (English bootleg set 4)", MACHINE_SUPPORTS_SAVE) -GAME( 1987, wbmlbg, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy - Monster Land (English bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmlbge, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy - Monster Land (English bootleg set 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 2009, wbmlvc, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "Sega", "Wonder Boy - Monster Land (English, Virtual Console)", MACHINE_SUPPORTS_SAVE ) -GAME( 2009, wbmlvcd, wbml, sys2xboot, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy - Monster Land (decrypted bootleg of English, Virtual Console release)", MACHINE_SUPPORTS_SAVE ) // fully decrypted version -GAME( 1987, wbmld, wbml, sys2xboot, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy - Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmljod, wbml, sys2xboot, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy - Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wbmlh, wbml, sys2xboot, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy - Monster Land (English, difficulty hack)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, dakkochn, 0, sys2xb, dakkochn, dakkochn_state,init_wbml, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, blockgalb, blockgal, sys2x, blockgalb, system1_state, init_bootleg, ROT90, "bootleg", "Block Gal (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, ufosensi, 0, sys2rowxb, ufosensi, system1_state, init_wbml, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, ufosensib, ufosensi, sys2rowxboot, ufosensi, system1_state, init_bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, choplift, 0, choplift, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (8751 315-5151)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, chopliftu, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "Sega", "Choplifter (unprotected)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, chopliftbl, choplift, sys2row, choplift, system1_state, init_bank0c, ROT0, "bootleg", "Choplifter (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, shtngmst, 0, shtngmst, shtngmst, shtngmst_state,init_bank0c, ROT0, "Sega", "Shooting Master (8751 315-5159a)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, gardiab, gardia, gardiab, gardia, system1_state, init_bank44, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, gardiaj, gardia, gardiaj, gardia, system1_state, init_bank44, ROT270, "Coreland / Sega", "Gardia (Japan, 317-0006)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboysys2, wboy, wboysys2, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 1, 315-5177)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, wboysys2a, wboy, wboysys2a, wboysys2, system1_state, init_bank0c, ROT0, "Escape (Sega license)", "Wonder Boy (system 2, set 2, 315-5176)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, tokisens, 0, sys2x, tokisens, system1_state, init_wbml, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (MC-8123, 317-0040)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, tokisensa, tokisens, sys2, tokisensa, system1_state, init_bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier (prototype?)", MACHINE_SUPPORTS_SAVE ) // or bootleg? +GAME( 1987, wbml, 0, sys2x, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy: Monster Land (Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmljo, wbml, sys2x, wbml, system1_state, init_wbml, ROT0, "Sega / Westone", "Wonder Boy: Monster Land (Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmljb, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (Japan bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmlb, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (English bootleg set 1)", MACHINE_SUPPORTS_SAVE) +GAME( 1987, wbmlb2, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (English bootleg set 4)", MACHINE_SUPPORTS_SAVE) +GAME( 1987, wbmlbg, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy: Monster Land (English bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmlbge, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy: Monster Land (English bootleg set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 2009, wbmlvc, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "Sega", "Wonder Boy: Monster Land (English, Virtual Console)", MACHINE_SUPPORTS_SAVE ) +GAME( 2009, wbmlvcd, wbml, wbmlb, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy: Monster Land (decrypted bootleg of English, Virtual Console release)", MACHINE_SUPPORTS_SAVE ) // fully decrypted version +GAME( 1987, wbmld, wbml, wbmlb, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy: Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmljod, wbml, wbmlb, wbml, system1_state, init_bootsys2d, ROT0, "bootleg (mpatou)", "Wonder Boy: Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wbmlh, wbml, wbmlb, wbml, system1_state, init_bootsys2, ROT0, "bootleg", "Wonder Boy: Monster Land (English, difficulty hack)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, dakkochn, 0, sys2x, dakkochn, dakkochn_state,init_wbml, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, blockgalb, blockgal, blockgalb, blockgalb, system1_state, init_bootleg, ROT90, "bootleg", "Block Gal (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, ufosensi, 0, ufosensi, ufosensi, system1_state, init_wbml, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, ufosensib, ufosensi, ufosensib, ufosensi, system1_state, init_bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/sega/system1.h b/src/mame/sega/system1.h index d801b78664e..fb8071d058f 100644 --- a/src/mame/sega/system1.h +++ b/src/mame/sega/system1.h @@ -50,52 +50,55 @@ class system1_state : public driver_device m_banked_decrypted_opcodes(nullptr) { } - void sys1ppix_315_5051(machine_config &config); - void sys1ppisx_315_5064(machine_config &config); - void sys2_317_0007(machine_config &config); - void sys1piox_315_5110(machine_config &config); - void sys1piox_315_5111(machine_config &config); - void sys1piox_315_5065(machine_config &config); - void sys1ppix_315_5178(machine_config &config); - void sys1ppix_315_5179(machine_config &config); - void sys1piox_315_5093(machine_config &config); - void sys2_315_5176(machine_config &config); - void sys2(machine_config &config); - void sys2_315_5177(machine_config &config); - void nob(machine_config &config); - void blockgal(machine_config &config); - void sys1ppisx_315_5041(machine_config &config); - void sys1piox_315_5132(machine_config &config); - void sys1piox_315_5162(machine_config &config); - void sys1piox_315_5133(machine_config &config); - void sys1pioxb(machine_config &config); void sys1ppi(machine_config &config); - void sys1piox_315_5135(machine_config &config); - void sys2rowxboot(machine_config &config); - void sys1piox_315_5102(machine_config &config); - void sys1piosx_315_5096(machine_config &config); - void sys2x(machine_config &config); - void sys1piox_315_5051(machine_config &config); - void sys1piox_315_5098(machine_config &config); - void sys1piosx_315_5099(machine_config &config); - void sys2xboot(machine_config &config); - void sys2xb(machine_config &config); - void nobm(machine_config &config); - void mcu(machine_config &config); - void sys2_317_0006(machine_config &config); - void sys1piox_317_0006(machine_config &config); - void sys1ppix_315_5033(machine_config &config); + void sys1ppis(machine_config &config); void sys1pio(machine_config &config); void sys1pios(machine_config &config); - void sys2rowm(machine_config &config); - void sys1ppix_315_5098(machine_config &config); - void sys1ppix_315_5048(machine_config &config); + void mcu(machine_config &config); + void sys2(machine_config &config); + void sys2x(machine_config &config); void sys2row(machine_config &config); - void sys1ppis(machine_config &config); - void sys1ppix_315_5065(machine_config &config); - void sys1piox_315_5177(machine_config &config); - void sys1piox_315_5155(machine_config &config); - void sys2rowxb(machine_config &config); + + void starjack(machine_config &config); + void upndown(machine_config &config); + void regulus(machine_config &config); + void mrviking(machine_config &config); + void swat(machine_config &config); + void flickyo(machine_config &config); + void bullfgt(machine_config &config); + void wmatch(machine_config &config); + void wboy2(machine_config &config); + void wboy6(machine_config &config); + void nob(machine_config &config); + void nobb(machine_config &config); + + void flicky(machine_config &config); + void thetogyu(machine_config &config); + void spatter(machine_config &config); + void spattera(machine_config &config); + void pitfall2(machine_config &config); + void seganinj(machine_config &config); + void seganinja(machine_config &config); + void nprinceso(machine_config &config); + void imsorry(machine_config &config); + void teddybb(machine_config &config); + void teddybboa(machine_config &config); + void myheroj(machine_config &config); + void _4dwarrio(machine_config &config); + void wboy(machine_config &config); + void wboyo(machine_config &config); + void blockgal(machine_config &config); + void gardia(machine_config &config); + + void choplift(machine_config &config); + void gardiab(machine_config &config); + void gardiaj(machine_config &config); + void wboysys2(machine_config &config); + void wboysys2a(machine_config &config); + void wbmlb(machine_config &config); + void blockgalb(machine_config &config); + void ufosensi(machine_config &config); + void ufosensib(machine_config &config); void init_bank0c(); void init_bank44(); From 9999bdf136169b94c879016b917a996460170418 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Mon, 16 Dec 2024 13:42:50 +0100 Subject: [PATCH 27/40] bus/amiga/zorro: Make sure to reset zorro cards on manual calls --- src/devices/bus/amiga/zorro/zorro.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/devices/bus/amiga/zorro/zorro.cpp b/src/devices/bus/amiga/zorro/zorro.cpp index e83f939760e..ed3c60ee7eb 100644 --- a/src/devices/bus/amiga/zorro/zorro.cpp +++ b/src/devices/bus/amiga/zorro/zorro.cpp @@ -199,6 +199,10 @@ void zorro2_bus_device::device_reset() // call base device zorro_bus_device_base::device_reset(); + // reset zorro cards + for (device_zorro2_card_interface &card : m_dev) + card.device().reset(); + // initiate autoconfig m_autoconfig_device = 0; From 18bf443417070906421275aa805323db22d75992 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Mon, 16 Dec 2024 13:45:12 +0100 Subject: [PATCH 28/40] bus/amiga/zorro: Preliminary Picasso II+ support --- scripts/src/bus.lua | 2 + src/devices/bus/amiga/zorro/cards.cpp | 3 + src/devices/bus/amiga/zorro/picasso2.cpp | 212 +++++++++++++++++++++++ src/devices/bus/amiga/zorro/picasso2.h | 63 +++++++ 4 files changed, 280 insertions(+) create mode 100644 src/devices/bus/amiga/zorro/picasso2.cpp create mode 100644 src/devices/bus/amiga/zorro/picasso2.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index bee7a595236..32200b92bd1 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -4688,6 +4688,8 @@ if (BUSES["ZORRO"]~=null) then MAME_DIR .. "src/devices/bus/amiga/zorro/action_replay.h", MAME_DIR .. "src/devices/bus/amiga/zorro/buddha.cpp", MAME_DIR .. "src/devices/bus/amiga/zorro/buddha.h", + MAME_DIR .. "src/devices/bus/amiga/zorro/picasso2.cpp", + MAME_DIR .. "src/devices/bus/amiga/zorro/picasso2.h", MAME_DIR .. "src/devices/bus/amiga/zorro/ripple.cpp", MAME_DIR .. "src/devices/bus/amiga/zorro/ripple.h", MAME_DIR .. "src/devices/bus/amiga/zorro/toccata.cpp", diff --git a/src/devices/bus/amiga/zorro/cards.cpp b/src/devices/bus/amiga/zorro/cards.cpp index 8f90abfaa11..15a530bfb88 100644 --- a/src/devices/bus/amiga/zorro/cards.cpp +++ b/src/devices/bus/amiga/zorro/cards.cpp @@ -16,6 +16,7 @@ #include "a590.h" #include "action_replay.h" #include "buddha.h" +#include "picasso2.h" #include "ripple.h" #include "toccata.h" @@ -47,6 +48,7 @@ void zorro2_cards(device_slot_interface &device) device.option_add("a2091", ZORRO_A2091); device.option_add("a2232", ZORRO_A2232); device.option_add("buddha", ZORRO_BUDDHA); + device.option_add("picasso2p", ZORRO_PICASSO2P); device.option_add("ripple", ZORRO_RIPPLE); device.option_add("toccata", ZORRO_TOCCATA); } @@ -59,6 +61,7 @@ void zorro3_cards(device_slot_interface &device) device.option_add("a2091", ZORRO_A2091); device.option_add("a2232", ZORRO_A2232); device.option_add("buddha", ZORRO_BUDDHA); + device.option_add("picasso2p", ZORRO_PICASSO2P); device.option_add("ripple", ZORRO_RIPPLE); device.option_add("toccata", ZORRO_TOCCATA); } diff --git a/src/devices/bus/amiga/zorro/picasso2.cpp b/src/devices/bus/amiga/zorro/picasso2.cpp new file mode 100644 index 00000000000..0ff61413aa9 --- /dev/null +++ b/src/devices/bus/amiga/zorro/picasso2.cpp @@ -0,0 +1,212 @@ +// license: GPL-2.0+ +// copyright-holders: Dirk Best +/*************************************************************************** + + Village Tronic Picasso II/Picasso II+ + + RTG graphics card for Amiga 2000/3000/4000 + + Hardware: + - Cirrus Logic CL-GD5426 or CL-GD5428 + - 1 or 2 MB RAM + - 25 MHz (only II+) and 14.31818 MHz XTAL + + TODO: + - Not working, VGA core needs work + - Interrupts? + - Segmented mode (jumper setting, autoconfig id 13) + +***************************************************************************/ + +#include "emu.h" +#include "picasso2.h" +#include "screen.h" + +#define VERBOSE (LOG_GENERAL) + +#include "logmacro.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(ZORRO_PICASSO2P, bus::amiga::zorro::picasso2p_device, "zorro_picasso2p", "Picasso II+ RTG") + +namespace bus::amiga::zorro { + +picasso2p_device::picasso2p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, ZORRO_PICASSO2P, tag, owner, clock), + device_memory_interface(mconfig, *this), + device_zorro2_card_interface(mconfig, *this), + m_vga(*this, "vga"), + m_autoconfig_memory_done(false) +{ + m_vga_space_config = address_space_config("vga_regs", ENDIANNESS_BIG, 8, 12, 0, address_map_constructor(FUNC(picasso2p_device::vga_map), this)); +} + + +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void picasso2p_device::mmio_map(address_map &map) +{ + map(0x0000, 0x0fff).rw(FUNC(picasso2p_device::vga0_r), FUNC(picasso2p_device::vga0_w)).umask16(0xffff); + map(0x1000, 0x1fff).rw(FUNC(picasso2p_device::vga1_r), FUNC(picasso2p_device::vga1_w)).umask16(0xffff); + map(0x46e8, 0x46b8).unmaprw(); // TODO +} + +void picasso2p_device::vga_map(address_map &map) +{ + map(0x102, 0x102).unmaprw(); // TODO + map(0x3b0, 0x3df).m(m_vga, FUNC(cirrus_gd5428_vga_device::io_map)); +} + + +//************************************************************************** +// MACHINE DEFINITIONS +//************************************************************************** + +void picasso2p_device::device_add_mconfig(machine_config &config) +{ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480); + screen.set_screen_update(m_vga, FUNC(cirrus_gd5428_vga_device::screen_update)); + + CIRRUS_GD5428_VGA(config, m_vga, 0); + m_vga->set_screen("screen"); + m_vga->set_vram_size(0x200000); +} + + +//************************************************************************** +// MACHINE EMULATION +//************************************************************************** + +void picasso2p_device::device_start() +{ +} + +void picasso2p_device::device_reset() +{ + m_autoconfig_memory_done = false; +} + +device_memory_interface::space_config_vector picasso2p_device::memory_space_config() const +{ + return space_config_vector { + std::make_pair(0, &m_vga_space_config) + }; +} + +uint8_t picasso2p_device::vga0_r(offs_t offset) +{ + LOG("vga0_r: %04x\n", offset); + return space(0).read_byte(offset); +} + +void picasso2p_device::vga0_w(offs_t offset, uint8_t data) +{ + LOG("vga0_w: %04x = %02x\n", offset, data); + space(0).write_byte(offset, data); +} + +uint8_t picasso2p_device::vga1_r(offs_t offset) +{ + LOG("vga1_r: %04x (%04x)\n", offset, offset | 1); + return space(0).read_byte(offset | 1); +} + +void picasso2p_device::vga1_w(offs_t offset, uint8_t data) +{ + LOG("vga1_w: %04x (%04x) = %02x\n", offset, offset | 1, data); + space(0).write_byte(offset | 1, data); +} + + +//************************************************************************** +// AUTOCONFIG +//************************************************************************** + +void picasso2p_device::autoconfig_base_address(offs_t address) +{ + LOG("autoconfig_base_address received: 0x%06x\n", address); + + if (!m_autoconfig_memory_done) + { + LOG("-> installing picasso2p memory\n"); + + m_slot->space().install_readwrite_handler(address, address + 0x1fffff, + emu::rw_delegate(m_vga, FUNC(cirrus_gd5428_vga_device::mem_r)), + emu::rw_delegate(m_vga, FUNC(cirrus_gd5428_vga_device::mem_w)), 0xffffffff); + + m_autoconfig_memory_done = true; + + // configure next + cfgin_w(0); + } + else + { + LOG("-> installing picasso2p registers\n"); + + // install picasso registers + m_slot->space().install_device(address, address + 0x0ffff, *this, &picasso2p_device::mmio_map); + + // stop responding to default autoconfig + m_slot->space().unmap_readwrite(0xe80000, 0xe8007f); + + // we're done + m_slot->cfgout_w(0); + } +} + +void picasso2p_device::cfgin_w(int state) +{ + LOG("configin_w (%d)\n", state); + + if (state != 0) + return; + + if (!m_autoconfig_memory_done) + { + LOG("autoconfig for memory\n"); + + // setup autoconfig for memory + autoconfig_board_type(BOARD_TYPE_ZORRO2); + autoconfig_board_size(BOARD_SIZE_2M); + autoconfig_link_into_memory(false); + autoconfig_rom_vector_valid(false); + autoconfig_multi_device(false); // ? + autoconfig_8meg_preferred(false); + autoconfig_can_shutup(true); // ? + autoconfig_product(11); + autoconfig_manufacturer(2167); + autoconfig_serial(0x00000000); + autoconfig_rom_vector(0x0000); + + // install autoconfig handler + m_slot->space().install_readwrite_handler(0xe80000, 0xe8007f, + read16_delegate(*this, FUNC(amiga_autoconfig::autoconfig_read)), + write16_delegate(*this, FUNC(amiga_autoconfig::autoconfig_write)), 0xffffffff); + } + else + { + LOG("autoconfig for registers\n"); + + // setup autoconfig for registers + autoconfig_board_type(BOARD_TYPE_ZORRO2); + autoconfig_board_size(BOARD_SIZE_64K); + autoconfig_link_into_memory(false); + autoconfig_rom_vector_valid(false); + autoconfig_multi_device(false); // ? + autoconfig_8meg_preferred(false); + autoconfig_can_shutup(true); // ? + autoconfig_product(12); + autoconfig_manufacturer(2167); + autoconfig_serial(0x00000000); + autoconfig_rom_vector(0x0000); + } +} + +} // namespace bus::amiga::zorro diff --git a/src/devices/bus/amiga/zorro/picasso2.h b/src/devices/bus/amiga/zorro/picasso2.h new file mode 100644 index 00000000000..d75d49b6f7b --- /dev/null +++ b/src/devices/bus/amiga/zorro/picasso2.h @@ -0,0 +1,63 @@ +// license: GPL-2.0+ +// copyright-holders: Dirk Best +/*************************************************************************** + + Village Tronic Picasso II/Picasso II+ + + RTG graphics card for Amiga 2000/3000/4000 + +***************************************************************************/ + +#ifndef MAME_BUS_AMIGA_ZORRO_PICASSO2_H +#define MAME_BUS_AMIGA_ZORRO_PICASSO2_H + +#pragma once + +#include "zorro.h" +#include "machine/autoconfig.h" +#include "video/pc_vga_cirrus.h" + + +namespace bus::amiga::zorro { + +class picasso2p_device : public device_t, public device_memory_interface, public device_zorro2_card_interface, public amiga_autoconfig +{ +public: + picasso2p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + + // device_memory_interface + virtual space_config_vector memory_space_config() const override; + + // device_zorro2_card_interface overrides + virtual void cfgin_w(int state) override; + + // amiga_autoconfig overrides + virtual void autoconfig_base_address(offs_t address) override; + +private: + void mmio_map(address_map &map) ATTR_COLD; + void vga_map(address_map &map) ATTR_COLD; + + uint8_t vga0_r(offs_t offset); + void vga0_w(offs_t offset, uint8_t data); + uint8_t vga1_r(offs_t offset); + void vga1_w(offs_t offset, uint8_t data); + + required_device m_vga; + address_space_config m_vga_space_config; + + bool m_autoconfig_memory_done; +}; + +} // namespace bus::amiga::zorro + +// device type declaration +DECLARE_DEVICE_TYPE_NS(ZORRO_PICASSO2P, bus::amiga::zorro, picasso2p_device) + +#endif // MAME_BUS_AMIGA_ZORRO_PICASSO2_H From 5ed763b982096b53049c81bf56b7025868a7bd38 Mon Sep 17 00:00:00 2001 From: angelosa Date: Mon, 16 Dec 2024 15:21:46 +0100 Subject: [PATCH 29/40] video/pc_vga_cirrus: replace cirrus_define_video_mode with VGA arch recompute_params --- src/devices/video/pc_vga.h | 2 +- src/devices/video/pc_vga_cirrus.cpp | 21 +++++++++++++-------- src/devices/video/pc_vga_cirrus.h | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/devices/video/pc_vga.h b/src/devices/video/pc_vga.h index a95642b6e93..d982163bbb0 100644 --- a/src/devices/video/pc_vga.h +++ b/src/devices/video/pc_vga.h @@ -38,7 +38,7 @@ class vga_device : public device_t // $46e8, $56e8, $66e8, $76e8 for ISA bus void mode_setup_w(offs_t offset, uint8_t data); - // $102 / $3c3, MCA bus + // $102 ISA bus / $3c3 MCA bus //void wakeup_w(offs_t offset, uint8_t data); virtual uint8_t mem_r(offs_t offset); diff --git a/src/devices/video/pc_vga_cirrus.cpp b/src/devices/video/pc_vga_cirrus.cpp index 1d669e5d62a..a33eb1edf28 100644 --- a/src/devices/video/pc_vga_cirrus.cpp +++ b/src/devices/video/pc_vga_cirrus.cpp @@ -22,8 +22,9 @@ #define LOG_BLIT (1U << 2) #define LOG_HDAC (1U << 3) // log hidden DAC #define LOG_BANK (1U << 4) // log offset registers +#define LOG_PLL (1U << 5) -#define VERBOSE (LOG_GENERAL | LOG_HDAC | LOG_REG) +#define VERBOSE (LOG_GENERAL | LOG_HDAC | LOG_REG | LOG_PLL) //#define LOG_OUTPUT_FUNC osd_printf_info #include "logmacro.h" @@ -101,7 +102,7 @@ void cirrus_gd5428_vga_device::ramdac_hidden_mask_w(offs_t offset, u8 data) // TODO: '5428 reads do not lock the Hidden DAC m_hidden_dac_mode = data; m_hidden_dac_phase = 0; - cirrus_define_video_mode(); + recompute_params(); LOGMASKED(LOG_HDAC, "CL: Hidden DAC write %02x\n", data); return; } @@ -182,7 +183,7 @@ void cirrus_gd5428_vga_device::crtc_map(address_map &map) NAME([this] (offs_t offset, u8 data) { vga.crtc.vert_blank_end &= ~0x00ff; vga.crtc.vert_blank_end |= data; - cirrus_define_video_mode(); + recompute_params(); }) ); map(0x19, 0x19).lrw8( @@ -203,7 +204,7 @@ void cirrus_gd5428_vga_device::crtc_map(address_map &map) m_cr1a = data; vga.crtc.horz_blank_end = (vga.crtc.horz_blank_end & 0xff3f) | ((data & 0x30) << 2); vga.crtc.vert_blank_end = (vga.crtc.vert_blank_end & 0xfcff) | ((data & 0xc0) << 2); - cirrus_define_video_mode(); + recompute_params(); }) ); map(0x1b, 0x1b).lrw8( @@ -217,7 +218,7 @@ void cirrus_gd5428_vga_device::crtc_map(address_map &map) vga.crtc.start_addr_latch |= ((data & 0x01) << 16); vga.crtc.start_addr_latch |= ((data & 0x0c) << 15); vga.crtc.offset = (vga.crtc.offset & 0x00ff) | ((data & 0x10) << 4); - cirrus_define_video_mode(); + recompute_params(); }) ); // map(0x25, 0x25) PSR Part Status (r/o, "factory testing and internal tracking only") @@ -513,7 +514,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) gc_locked = (data & 0x17) != 0x12; LOG("Cirrus register extensions %s\n", gc_locked ? "unlocked" : "locked"); m_lock_reg = data & 0x17; - cirrus_define_video_mode(); + recompute_params(); }) ); map(0x07, 0x07).lw8( @@ -522,7 +523,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) if((data & 0xf0) != 0) popmessage("pc_vga_cirrus: 1MB framebuffer window enabled at %iMB (%02x)",data >> 4,data); vga.sequencer.data[0x07] = data; - cirrus_define_video_mode(); + recompute_params(); }) ); // TODO: check me @@ -549,6 +550,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) }), NAME([this] (offs_t offset, u8 data) { m_vclk_num[offset] = data; + recompute_params(); }) ); map(0x0f, 0x0f).lrw8( @@ -616,6 +618,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) }), NAME([this] (offs_t offset, u8 data) { m_vclk_denom[offset] = data; + recompute_params(); }) ); } @@ -759,10 +762,11 @@ uint32_t cirrus_gd5428_vga_device::screen_update(screen_device &screen, bitmap_r return 0; } -void cirrus_gd5428_vga_device::cirrus_define_video_mode() +void cirrus_gd5428_vga_device::recompute_params() { uint8_t divisor = 1; float clock; + // TODO: coming from OSC, expose as this->clock() const XTAL xtal = XTAL(14'318'181); uint8_t clocksel = (vga.miscellaneous_output & 0xc) >> 2; @@ -774,6 +778,7 @@ void cirrus_gd5428_vga_device::cirrus_define_video_mode() int denominator = (m_vclk_denom[clocksel] & 0x3e) >> 1; int mul = m_vclk_denom[clocksel] & 0x01 ? 2 : 1; clock = (xtal * numerator / denominator / mul).dvalue(); + LOGMASKED(LOG_PLL, "CL: PLL setting %d num %d denom %d mul %d -> %f\n", clocksel, numerator, denominator, mul, clock); } svga.rgb8_en = svga.rgb15_en = svga.rgb16_en = svga.rgb24_en = svga.rgb32_en = 0; diff --git a/src/devices/video/pc_vga_cirrus.h b/src/devices/video/pc_vga_cirrus.h index 13c2053dbfa..b9ed9f225c8 100644 --- a/src/devices/video/pc_vga_cirrus.h +++ b/src/devices/video/pc_vga_cirrus.h @@ -97,9 +97,9 @@ class cirrus_gd5428_vga_device : public svga_device virtual bool get_interlace_mode() override { return BIT(m_cr1a, 0); } uint8_t offset_select(offs_t offset); + virtual void recompute_params() override; private: - void cirrus_define_video_mode(); void start_bitblt(); void start_reverse_bitblt(); From eeb465186e18f865cb8ac20802d0adcb4ede725c Mon Sep 17 00:00:00 2001 From: angelosa Date: Mon, 16 Dec 2024 15:23:32 +0100 Subject: [PATCH 30/40] hash/mac_cdrom: add sharedfeat for hexen, add spacing between entries --- hash/mac_cdrom.xml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/hash/mac_cdrom.xml b/hash/mac_cdrom.xml index f9746295ab0..a04038bd3af 100644 --- a/hash/mac_cdrom.xml +++ b/hash/mac_cdrom.xml @@ -29,11 +29,13 @@ PPC750 - PowerPC 750 (G3) CPU + Chex Quest 1996 General Mills + @@ -41,24 +43,26 @@ PPC750 - PowerPC 750 (G3) CPU + Hexen: Beyond Heretic 1995 GT Interactive + + + + id Anthology 1996 id Software - @@ -67,6 +71,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.0a9 ("Big Bang" pre-release) 1991 @@ -78,6 +83,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.1 (US English) 1992 @@ -89,6 +95,7 @@ PPC750 - PowerPC 750 (G3) CPU + Performa CD (System 7.1.2P for Quadra 630 and LC/Performa 580) (US English) 1994 @@ -100,6 +107,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.5 (US English) 1994 @@ -111,6 +119,7 @@ PPC750 - PowerPC 750 (G3) CPU + System Software 7.5.3 (US English) 1996 @@ -122,6 +131,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 7.6 (US English) 1997 @@ -134,6 +144,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 7.6 (German) 1997 @@ -146,6 +157,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 7.6.1 (US English) 1997 @@ -158,6 +170,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 8 (Japanese) 1997 @@ -170,6 +183,7 @@ PPC750 - PowerPC 750 (G3) CPU + Mac OS 8.1 (US English) 1998 @@ -182,6 +196,7 @@ PPC750 - PowerPC 750 (G3) CPU + My First Math Adventure: Adding and Subtracting @@ -194,6 +209,7 @@ PPC750 - PowerPC 750 (G3) CPU + Power Macintosh 6100/7100/8100 CD (System Software 7.1.2P) (US English) 1994 @@ -206,6 +222,7 @@ PPC750 - PowerPC 750 (G3) CPU + The Ultimate Doom 1995 From e73e59740a22f186db96622757f9991639057435 Mon Sep 17 00:00:00 2001 From: angelosa Date: Mon, 16 Dec 2024 15:24:12 +0100 Subject: [PATCH 31/40] midcoin/24cdjuke.cpp: update reference URL --- src/mame/midcoin/24cdjuke.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mame/midcoin/24cdjuke.cpp b/src/mame/midcoin/24cdjuke.cpp index b262a4a85e0..e81b0a2be20 100644 --- a/src/mame/midcoin/24cdjuke.cpp +++ b/src/mame/midcoin/24cdjuke.cpp @@ -48,8 +48,7 @@ QTY Type Notes This is the PCB for one of the first ever CD based Juke Box, made in 1988 by Midcoin, some info here: -http://www.tilt.it/deb/i-midcoin.html - +https://www.tilt.it/deb/midcoin-en.html */ From 22c5f8e8e28160dbc47c92016ebfb6afe36bc74d Mon Sep 17 00:00:00 2001 From: ArcadeShadow Date: Mon, 16 Dec 2024 16:58:08 +0000 Subject: [PATCH 32/40] spectrum_cass.xml: Added 50 working items (#13088) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New working software list additions -------------------------------------------- A to Z [Steven Brown, Planeta Sinclair] Answer Back Factfile 500 - Super Sports [Steven Brown, Planeta Sinclair] Antony and Cleopatra [Steven Brown, Planeta Sinclair] Bounce Panic + Hangman [Steven Brown, Planeta Sinclair] Boxform [Planeta Sinclair] Britain in the Age of Total War [Steven Brown, Planeta Sinclair] Crook [Planeta Sinclair] Éditeur de Manoir [Spectrum Computing] Graph [Steven Brown, Planeta Sinclair] Infrared (Elettronica) [Spectrum Computing] Klub Uzivatelu Desktopu 4 [Spectrum Computing] Konami's Tennis (Erbe) [Spectrum Computing] Land of Mire Mare (v1.06, 5678 keys) [Spectrum Computing] Laser Squad (System 4, small case) [Spectrum Computing] Laser Squad (System 4, large case) [Spectrum Computing] Libreria de Software Spectrum № 1 (Febrero 85) (covertape) [Spectrum Computing] Libreria de Software Spectrum № 1 (Febrero 85) (covertape, alt) [Spectrum Computing] Libreria de Software Spectrum № 2 (covertape) [Spectrum Computing] Libreria de Software Spectrum № 2 (covertape, alt) [Spectrum Computing] Libreria de Software Spectrum № 3 (covertape) [Spectrum Computing] Libreria de Software Spectrum № 3 (covertape, alt) [Spectrum Computing] Libreria de Software Spectrum № 4 (covertape) [Spectrum Computing] Libreria de Software Spectrum № 4 (covertape, alt) [Spectrum Computing] Libreria de Software Spectrum № 5 (covertape) [Spectrum Computing] Libreria de Software Spectrum № 5 (covertape, alt) [Spectrum Computing] Micro Drivin' (PD) [Planeta Sinclair] Play for Peace [Planeta Sinclair] Revista de Software VideoSpectrum № 1 (Portuguese release, covertape) [Planeta Sinclair] Revista de Software VideoSpectrum № 2 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 3 (Portuguese release, covertape) [Planeta Sinclair] Revista de Software VideoSpectrum № 3 (Spanish release, covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 4 (Portuguese release, covertape) [Planeta Sinclair] Revista de Software VideoSpectrum № 4 (Spanish release, covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 5 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 6 (Portuguese release, covertape) [Planeta Sinclair] Revista de Software VideoSpectrum № 6 (Spanish release, covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 7 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 8 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 9 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 17 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 25 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 28 (covertape) [Spectrum Computing] Revista de Software VideoSpectrum № 31 (covertape) [Spectrum Computing] Ruleta Parlante [Planeta Sinclair] Space Raiders - Invasores Galácticos (alt) [Planeta Sinclair] Time Warrior (Guild) [Planeta Sinclair] TX-3 [Steven Brown, Planeta Sinclair] The Crystal of Chantie (PD) [Planeta Sinclair] The Final Glide [Steven Brown, Planeta Sinclair] Winning Games on the ZX Spectrum [Planeta Sinclair] Cleanups and fixes: parent/cloneof relationships, descriptions, publishers, years and languages info (information provided by spectrumcomputing.co.uk). --- hash/spectrum_cass.xml | 1862 +++++++++++++++++++++++++++++----------- 1 file changed, 1382 insertions(+), 480 deletions(-) diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml index ede63cf5ad0..083f11535da 100644 --- a/hash/spectrum_cass.xml +++ b/hash/spectrum_cass.xml @@ -5335,6 +5335,35 @@ no loading screen, no custom loader + + Bounce Panic + Hangman + 1983 + Poppy Soft + + + + + + + + + + + + + + + + Boxform + 1988 + Boxoft + + + + + + + Brian vs. The Bullies 2012 @@ -11437,6 +11466,17 @@ Expects you to press a key after the title screen appears, or it will miss the n + + The Final Glide + 1983 + Rickshaw / Softek + + + + + + + Flight Simulation (release 2) 1983 @@ -14531,7 +14571,7 @@ Expects you to press a key after the title screen appears, or it will miss the n International Karate (set 2, Endurance Games) 1985 - System 3 Software + Endurance Games @@ -14546,8 +14586,8 @@ Expects you to press a key after the title screen appears, or it will miss the n International Karate (set 3) - 19?? - <unknown> + 1985 + System 3 Software @@ -14562,8 +14602,8 @@ Expects you to press a key after the title screen appears, or it will miss the n International Karate (set 4, Endurance Games) - 19?? - <unknown> + 1985 + Endurance Games @@ -14623,7 +14663,7 @@ Expects you to press a key after the title screen appears, or it will miss the n Into the Eagle's Nest (Players) 1987 - Pandora / Players + Players Software @@ -14799,8 +14839,8 @@ Expects you to press a key after the title screen appears, or it will miss the n ISO-Copy 2 v2.0 - 19?? - <unknown> + 1984 + Individual Software @@ -14810,8 +14850,8 @@ Expects you to press a key after the title screen appears, or it will miss the n ISO-Copy v1.0 - 19?? - <unknown> + 1984 + Individual Software @@ -15163,7 +15203,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Jet Set Willy Room Designer (Master) + Jet Set Willy Room Designer (master tape) 1985 R.D. Foord Software @@ -15180,8 +15220,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v5 - Development Master) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -15196,8 +15236,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v5, set 1) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -15212,8 +15252,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v5, set 2) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -15223,8 +15263,8 @@ Expects you to press a key after the title screen appears, or it will miss the n Jet Set Willy Room Designer (v1) - 19?? - <unknown> + 1985 + R.D. Foord Software @@ -16455,8 +16495,8 @@ Side B: Laser Shoot (original release) Kokotoni Wilf (Encore) - 1984 - Elite Systems / Encore + 1989 + Encore @@ -16466,7 +16506,7 @@ Side B: Laser Shoot (original release) Kokotoni Wilf (MCM) - 1984 + 1989 MCM Software @@ -16555,8 +16595,9 @@ Side B: Laser Shoot (original release) Kong Strikes Back (set 2, Zafiro) - 19?? - <unknown> + 1985 + Zafi Chip + @@ -16566,8 +16607,8 @@ Side B: Laser Shoot (original release) Kong Strikes Back (set 3) - 19?? - <unknown> + 1984 + Ocean @@ -16577,8 +16618,9 @@ Side B: Laser Shoot (original release) Kong Strikes Back (set 4, Zafiro) - 19?? - <unknown> + 1985 + Zafi Chip + @@ -16588,8 +16630,9 @@ Side B: Laser Shoot (original release) Kliatba Noci (set 1) - 19?? - <unknown> + 1993 + Ultrasoft + @@ -16599,8 +16642,9 @@ Side B: Laser Shoot (original release) Kliatba Noci (set 2) - 19?? - <unknown> + 1993 + Ultrasoft + @@ -17995,6 +18039,22 @@ Side B: Laser Shoot (original release) + + Micro Drivin' (PD) + 1988 + Sprectum PD Adventures + + + + + + + + + + + + Microprose Soccer (release 2 - 128K) 1989 @@ -30454,6 +30514,22 @@ Side B: Laser Shoot (original release) + + TX-3 + 19?? + <unknown> + + + + + + + + + + + + @@ -34015,6 +34091,17 @@ Side B - Game 5 : Grand Prix Drivers + + Crook + 198? + <unknown> + + + + + + + Quattro Adventure @@ -40503,6 +40590,7 @@ Side B - 9 - Confusion (original release) 1987 Hobby Press + @@ -43742,9 +43830,10 @@ Side B: Once Upon a Lily Pad - Abbey of Crime (English Beta) - 19?? + Abbey of Crime (English beta) + 2003 <unknown> + @@ -46949,6 +47038,25 @@ Side B: Once Upon a Lily Pad + + Answer Back Factfile 500 - Super Sports + 1985 + Kosmos Software + + + + + + + + + + + + + + + Answer Back Junior 1985 @@ -46993,7 +47101,7 @@ Side B: Once Upon a Lily Pad - Antennas And Feeders + Antennas and Feeders 1983 PW Publishing @@ -47003,6 +47111,17 @@ Side B: Once Upon a Lily Pad + + Antony and Cleopatra + 1983 + Akadimias + + + + + + + The Anttilis Mission (master tape) 1992 @@ -54426,6 +54545,17 @@ Side B: Once Upon a Lily Pad + + Britain in the Age of Total War + 1984 + Akadimias + + + + + + + Britain Invaded 1985 @@ -65047,6 +65177,22 @@ Side B: Once Upon a Lily Pad + + The Crystal of Chantie (PD) + 198? + Spectrum PD Adventures + + + + + + + + + + + + The Crystal of Power 1989 @@ -72230,6 +72376,18 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) + + + Éditeur de Manoir + 2012 + Gilles Marty + + + + + + + Editor Musical @@ -83349,6 +83507,17 @@ Tape 1 - Side B: + + Graph + 1984 + AVC Software + + + + + + + Graphic Creator 1982 @@ -90169,6 +90338,8 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Inferno (set 1) 1993 Proxima Software + + @@ -90179,7 +90350,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Inferno (set 2, Sintech) 1993 - Proxima Software / Sintech + Sintech + + @@ -90235,11 +90408,13 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) 1982 ACS + + @@ -90248,14 +90423,16 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Infrared (set 2) - 19?? - <unknown> + 1982 + ACS + + @@ -90264,20 +90441,33 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Infrared (set 3) - 19?? - <unknown> + 1982 + ACS + + + + Infrared (Elettronica) + 1983 + Elettronica CS + + + + + + + Ingrid's Back! 1988 @@ -90315,20 +90505,20 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Inheritance (Mikro-Gen) + Inheritance (release 2) 1982 - Mikro-Gen + Hessel Software - + - Inheritance - Release 1 - 19?? - <unknown> + Inheritance (release 1) + 1982 + Hessel Software @@ -90337,12 +90527,12 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Inheritance - Release 2 - 19?? - <unknown> + Inheritance (Mikro-Gen) + 1982 + Mikro-Gen - + @@ -90446,23 +90636,23 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Inside Outing - Double Case (Dro Soft) + Inside Outing 1988 - Dro Soft + The Edge - - + + - - Inside Outing - 19?? - <unknown> + + Inside Outing (Dro Soft, double case) + 1988 + Dro Soft - - + + @@ -90597,33 +90787,35 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Intercepteur Cobalt (Software Center) + Intercepteur Cobalt 1984 - Software Center + ERE Informatique + - - + + - - + + - - Intercepteur Cobalt - 19?? - <unknown> + + Intercepteur Cobalt (Software Center) + 1984 + Software Center + - - + + - - + + @@ -90658,55 +90850,61 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Intermediate English 1 1982 - Rose + Rose Software + + - - Intermediate English 2 - Release 1 - 19?? - <unknown> + + Intermediate English 2 (release 1) + 1982 + Rose Software + + - - Intermediate English 2 - Release 3 - 19?? - <unknown> + + Intermediate English 2 (release 3) + 1982 + Rose Software + + - + Intermediate Level Geography - 19?? - <unknown> + 1985 + Scisoft @@ -90719,10 +90917,10 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - + Intermediate Level Maths - 19?? - <unknown> + 1984 + Scisoft @@ -90959,7 +91157,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) International Manager (set 3, Cult Games) 1986 - D&H Games / Cult Games + Cult Games @@ -91000,7 +91198,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - International Rugby (set 1) + International Rugby (Artic Computing) 1985 Artic Computing @@ -91011,9 +91209,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - International Rugby (set 2, Micro Value) + International Rugby (Micro Value) 1985 - Artic Computing Ltd / Micro Value + Micro Value @@ -91022,9 +91220,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - International Rugby (set 3, Blue Ribbon) + International Rugby (Blue Ribbon) 1985 - Artic Computing Ltd / Blue Ribbon + Blue Ribbon @@ -91142,7 +91340,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Intruder Alert (set 2, Ver.II) + Intruder Alert (set 2, ver.II) 1989 Compass Software @@ -91175,7 +91373,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1982, Artic) (set 1) + Invaders (1982, Artic) 1982 Artic Computing @@ -91186,9 +91384,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1982, Artic) (set 2, Aackosoft) + Invaders (1982, Aackosoft) 1982 - Artic Computing Ltd / Aackosoft + Aackosoft @@ -91197,9 +91395,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1982, Artic) (set 3, ZX Data) + Invaders (1982, ZX Data) 1982 - Artic Computing Ltd / ZX Data + ZX Data @@ -91208,7 +91406,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders (1983, DK'Tronics Ltd) + Invaders (1983, DK'Tronics) 1983 DK'Tronics @@ -91241,7 +91439,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Invaders From Planet X (set 3, Mastering Tape) + Invaders From Planet X (set 3, master tape) 1991 Compass Software @@ -91456,8 +91654,8 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Invincible Island - 19?? - <unknown> + 1983 + Richard Shepherd @@ -91588,7 +91786,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Isotopia - +2a + Isotopia (+2a release) 2007 OCTOCOM @@ -91599,9 +91797,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Isotopia - 128k - 19?? - <unknown> + Isotopia (128K release) + 2007 + OCTOCOM @@ -92287,8 +92485,8 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Jack And The Beanstalk (Zenobi) - 19?? - <unknown> + 1988 + Zenobi Software @@ -92296,10 +92494,10 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - - Jack And The Beanstalk - 19?? - <unknown> + + Jack and the Beanstalk (Thor) + 1984 + Thor Computer Software @@ -94704,8 +94902,8 @@ Created by Mark Jeffries Juggernaut - 19?? - <unknown> + 1985 + CRL Group @@ -94911,10 +95109,10 @@ Created by Mark Jeffries - + Junior Maths Tape 1 - 19?? - <unknown> + 1983 + The Hicks Consortium @@ -95304,7 +95502,7 @@ Created by Mark Jeffries Kat Trap - 1987 + 1986 Streetwise @@ -95315,8 +95513,8 @@ Created by Mark Jeffries Kat Trap (Bug-Byte) - 19?? - <unknown> + 1987 + Bug-Byte Software @@ -95348,8 +95546,8 @@ Created by Mark Jeffries Kempston Toolkit - 19?? - <unknown> + 1987 + Kempston Micro Electronics @@ -95374,7 +95572,7 @@ Created by Mark Jeffries - Kendo Warrior (set 1) + Kendo Warrior 1989 Byte Back @@ -95385,9 +95583,9 @@ Created by Mark Jeffries - Kendo Warrior (set 2, MCM) - 19?? - <unknown> + Kendo Warrior (MCM) + 1989 + MCM Software @@ -95429,7 +95627,7 @@ Created by Mark Jeffries - Kenny Dalglish Soccer Match (set 1) + Kenny Dalglish Soccer Match 1990 Impressions @@ -95440,9 +95638,9 @@ Created by Mark Jeffries - Kenny Dalglish Soccer Match (set 2, EDOS) - 19?? - <unknown> + Kenny Dalglish Soccer Match (EDOS) + 1993 + EDOS @@ -95463,8 +95661,8 @@ Created by Mark Jeffries Kentilla (set 2, Mastertronic) - 19?? - <unknown> + 1986 + Mastertronic @@ -95658,31 +95856,31 @@ Created by Mark Jeffries - Killer Kong (Prism) + Killer Kong (set 2) 1983 - Prism Leisure Corporation + Blaby Computer Games - - + + - - Killer Kong (set 2) - 19?? - <unknown> + + Killer Kong (Prism) + 1983 + Prism Leisure Corporation - - + + Killer Kong - 19?? - <unknown> + 1983 + Blaby Computer Games @@ -95774,8 +95972,8 @@ Created by Mark Jeffries King Otto's Quest - 19?? - <unknown> + 1996 + Stephen Robertson @@ -95795,9 +95993,9 @@ Created by Mark Jeffries - Kingdom (Richard Francis Altwasser) (set 2) - 19?? - <unknown> + Kingdom (type-in from book "Cambridge Colour Collection") + 1982 + Richard Francis Altwasser @@ -95829,8 +96027,8 @@ Created by Mark Jeffries Klub Uzivatelu Desktopu 1 - 19?? - <unknown> + 1993 + Proxima Software @@ -95840,8 +96038,8 @@ Created by Mark Jeffries Klub Uzivatelu Desktopu 2 - 19?? - <unknown> + 1993 + Proxima Software @@ -95852,7 +96050,7 @@ Created by Mark Jeffries Klub Uzivatelu Desktopu 3 1993 - Proxima + Proxima Software @@ -95860,6 +96058,16 @@ Created by Mark Jeffries + + Klub Uzivatelu Desktopu 4 + 1993 + Proxima Software + + + + + + Knight Driver @@ -95873,23 +96081,23 @@ Created by Mark Jeffries - Knight Fall (System 4) + Knight Fall 1987 - System 4 + Pirate Software - - + + - Knight Fall - 19?? - <unknown> + Knight Fall (System 4) + 1987 + System 4 - - + + @@ -95906,23 +96114,23 @@ Created by Mark Jeffries - Knight Life (Zenobi) + Knight Life 1995 - Zenobi Software + Stephen Boyd - - + + - Knight Life - 19?? - <unknown> + Knight Life (Zenobi) + 1995 + Zenobi Software - - + + @@ -95965,8 +96173,8 @@ Created by Mark Jeffries Knockout (Vinsoft) - 19?? - <unknown> + 1989 + Vinsoft @@ -95979,42 +96187,42 @@ Created by Mark Jeffries - - Knockout (Americana) - 19?? - <unknown> + + Knockout (Alligata) + 1985 + Alligata Software - - + + - - + + - - Knockout (Alligata) - 19?? - <unknown> + + Knockout (Americana) + 1985 + Alligata Software - - + + - - + + - + Knockout - 19?? - <unknown> + 1983 + Mikro-Gen @@ -96049,10 +96257,10 @@ Created by Mark Jeffries - + Know Your Own PSI-Q - 19?? - <unknown> + 1985 + Mirrorsoft @@ -96065,10 +96273,10 @@ Created by Mark Jeffries - + Know Your Tables - 19?? - <unknown> + 1983 + Collins Educational @@ -96093,20 +96301,20 @@ Created by Mark Jeffries - Knuckle Busters (Dro Soft) - 1988 - Dro Soft + Knuckle Busters + 1987 + Melbourne House - - + + - + Knuckle Busters (Ricochet) - 19?? - <unknown> + 1987 + Ricochet @@ -96114,13 +96322,13 @@ Created by Mark Jeffries - - Knuckle Busters - 19?? - <unknown> + + Knuckle Busters (Dro Soft) + 1988 + Dro Soft - - + + @@ -96136,21 +96344,21 @@ Created by Mark Jeffries - - Kobyashi Naru (Zenobi) - 19?? - <unknown> + + Kobyashi Naru + 1987 + Mastertronic - - + + - + Kobyashi Naru (set 2) - 19?? - <unknown> + 1987 + Mastertronic @@ -96158,13 +96366,13 @@ Created by Mark Jeffries - - Kobyashi Naru - 19?? - <unknown> + + Kobyashi Naru (Zenobi) + 1992 + Zenobi Software - - + + @@ -96213,10 +96421,10 @@ Created by Mark Jeffries - + Kon - 19?? - <unknown> + 1984 + Anthony P. Hamilton @@ -96242,8 +96450,8 @@ Created by Mark Jeffries Konami's Golf (set 2) - 19?? - <unknown> + 1986 + Imagine Software @@ -96252,6 +96460,17 @@ Created by Mark Jeffries + Konami's Tennis + 1986 + Imagine Software + + + + + + + + Konami's Tennis (The Hit Squad) 1989 The Hit Squad @@ -96262,13 +96481,13 @@ Created by Mark Jeffries - - Konami's Tennis - 19?? - <unknown> + + Konami's Tennis (Erbe) + 1986 + Erbe Software - - + + @@ -96284,7 +96503,7 @@ Created by Mark Jeffries - + Kong (set 2) (Anirog) 1983 Anirog @@ -96295,7 +96514,6 @@ Created by Mark Jeffries - Kong's Revenge 1991 @@ -96356,7 +96574,7 @@ Created by Mark Jeffries - Kopykat - Release 1 + Kopykat (release 1) 1983 Medsoft @@ -96372,9 +96590,9 @@ Created by Mark Jeffries - Kopykat - Release 2 + Kopykat (release 2) 19?? - <unknown> + Medsoft @@ -96388,9 +96606,9 @@ Created by Mark Jeffries - Kopykat - Release 3 (set 2) + Kopykat (release 3, set 2) 19?? - <unknown> + Medsoft @@ -96399,9 +96617,9 @@ Created by Mark Jeffries - Kopykat - Release 3 + Kopykat (release 3, set 1) 19?? - <unknown> + Medsoft @@ -96410,9 +96628,9 @@ Created by Mark Jeffries - Kopykat - Release 4 (set 2) + Kopykat (release 4, set 2) 19?? - <unknown> + Medsoft @@ -96421,9 +96639,9 @@ Created by Mark Jeffries - Kopykat - Release 4 + Kopykat (release 4, set 1) 19?? - <unknown> + Medsoft @@ -96476,31 +96694,20 @@ Created by Mark Jeffries - Krakatoa (Paxman) + Krakatoa 1984 - Paxman Promotions + Abbex Electronics - + - Krakatoa (Profisoft) - 19?? - <unknown> - - - - - - - - - Krakatoa (set 2) - 19?? - <unknown> + Krakatoa (two sides) + 1984 + Abbex Electronics @@ -96513,13 +96720,24 @@ Created by Mark Jeffries - - Krakatoa - 19?? - <unknown> + + Krakatoa (Profisoft) + 1984 + Profisoft - + + + + + + + Krakatoa (Paxman) + 1984 + Paxman Promotions + + + @@ -96585,6 +96803,17 @@ Created by Mark Jeffries + Krazy Kong + 1983 + PSS + + + + + + + + Krazy Kong (Soft & Easy) 1983 Soft & Easy @@ -96595,10 +96824,10 @@ Created by Mark Jeffries - + Krazy Kong (C-Tech) - 19?? - <unknown> + 1982 + C-Tech @@ -96611,17 +96840,6 @@ Created by Mark Jeffries - - Krazy Kong - 19?? - <unknown> - - - - - - - Kriss Kross 19?? @@ -96889,6 +97107,7 @@ Created by Mark Jeffries La Abadia del Crimen (set 1) 1988 Opera Soft + @@ -96900,6 +97119,7 @@ Created by Mark Jeffries La Abadia del Crimen (set 2) 19?? <unknown> + @@ -96911,6 +97131,7 @@ Created by Mark Jeffries La Abadia del Crimen (MCM) 1988 MCM Software + @@ -96922,6 +97143,7 @@ Created by Mark Jeffries La Alhambra 1992 Pepsi Soft + @@ -96933,6 +97155,7 @@ Created by Mark Jeffries La Aventura del Dragon 1991 Pepsi Soft + @@ -96944,6 +97167,7 @@ Created by Mark Jeffries La Aventura Espacial 1990 Aventuras AD + @@ -96960,6 +97184,7 @@ Created by Mark Jeffries La Aventura Espacial (IBSA) 1990 IBSA + @@ -96976,6 +97201,7 @@ Created by Mark Jeffries La Aventura Original 1989 Aventuras AD + @@ -96992,6 +97218,7 @@ Created by Mark Jeffries La Aventura Original (IBSA) 1989 IBSA + @@ -97031,9 +97258,10 @@ Created by Mark Jeffries - La Constitucion Espanola + La Constitucion Española 19?? - <unknown> + Investronica + @@ -97062,6 +97290,7 @@ Created by Mark Jeffries La Corona Magica 1990 OMK Software + @@ -97089,6 +97318,7 @@ Created by Mark Jeffries La Grande Boucle 1985 Sprites + @@ -97101,6 +97331,7 @@ Created by Mark Jeffries 198? Club Soft + @@ -97108,10 +97339,12 @@ Created by Mark Jeffries - + La Historia Interminable II (System 4) 1991 System 4 + + @@ -97123,6 +97356,8 @@ Created by Mark Jeffries La Princesa 1985 Software Center + + @@ -97139,6 +97374,7 @@ Created by Mark Jeffries La Pulga 1983 Investronica + @@ -97176,7 +97412,7 @@ Created by Mark Jeffries Labyrinth (Axis) 1983 - Axis + Axis Software @@ -97184,10 +97420,10 @@ Created by Mark Jeffries - + Labyrinth (Christor Buening) - 19?? - <unknown> + 1983 + Christor Buening @@ -97195,8 +97431,8 @@ Created by Mark Jeffries - - Labyrinth + + Labyrinth (unknown) 19?? <unknown> @@ -97255,10 +97491,21 @@ Created by Mark Jeffries - + + Land of Mire Mare (v1.06, 5678 keys) + 2014 + Luca Bordoni + + + + + + + + Land of Mire Mare (v1.03, QAOPM keys) - 19?? - <unknown> + 2014 + Luca Bordoni @@ -97266,10 +97513,10 @@ Created by Mark Jeffries - + Land of Mire Mare (v1.03, WASDM keys) - 19?? - <unknown> + 2014 + Luca Bordoni @@ -97277,10 +97524,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.03) - 19?? - <unknown> + + Land of Mire Mare (v1.03, 5678 keys) + 2014 + Luca Bordoni @@ -97288,10 +97535,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.05) - 19?? - <unknown> + + Land of Mire Mare (v1.05, QAOPM keys) + 2014 + Luca Bordoni @@ -97299,10 +97546,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.06, Special Edition) - 19?? - <unknown> + + Land of Mire Mare (v1.06, Special Edition, 5678 keys) + 2014 + Luca Bordoni @@ -97310,10 +97557,10 @@ Created by Mark Jeffries - - Land of Mire Mare (v1.06) - 19?? - <unknown> + + Land of Mire Mare (v1.06, cursor keys) + 2014 + Luca Bordoni @@ -97333,9 +97580,9 @@ Created by Mark Jeffries - Lander (R D Foord Software) + Lander (R.D. Foord Software) 19?? - <unknown> + R.D. Foord Software @@ -97435,6 +97682,7 @@ Created by Mark Jeffries Laser Attack 19?? <unknown> + @@ -97534,8 +97782,8 @@ Created by Mark Jeffries Laser Squad (Blade) - 19?? - <unknown> + 1988 + Blade Software @@ -97553,27 +97801,63 @@ Created by Mark Jeffries 1988 Blade Software + + + + + + Laser Squad (System 4, small case) + 1988 + System 4 + + + + + + + + + + + + + + Laser Squad (System 4, large case) + 1990 + System 4 + + + + + + + + + + + + Laser Squad - Expansion Kit One 1988 @@ -97935,9 +98219,9 @@ Created by Mark Jeffries - League Table (Football Follower) - 19?? - <unknown> + League Table (26 Oct) + 1985 + Hobby Software @@ -97946,9 +98230,9 @@ Created by Mark Jeffries - League Table - 19?? - <unknown> + League Table (23 May 85) + 1985 + Hobby Software @@ -98627,6 +98911,7 @@ Lacks game introduction, bad dump or alternate version? Les Diamants de Kheops 19?? Sprites + @@ -98691,7 +98976,7 @@ Lacks game introduction, bad dump or alternate version? Letta-Head 1985 - Bradway + Bradway Software @@ -98704,10 +98989,10 @@ Lacks game introduction, bad dump or alternate version? - + Letta-Head Plus (set 2) - 19?? - <unknown> + 1985 + Bradway Software @@ -98720,10 +99005,10 @@ Lacks game introduction, bad dump or alternate version? - + Letta-Head Plus - 19?? - <unknown> + 1985 + Bradway Software @@ -98738,8 +99023,8 @@ Lacks game introduction, bad dump or alternate version? Letters (Chalksoft) - 19?? - <unknown> + 1984 + Chalksoft @@ -98764,9 +99049,9 @@ Lacks game introduction, bad dump or alternate version? - Liberator (PJ Soft) + Liberator (P.J.) 1989 - P.J. + P.J. Software @@ -98774,10 +99059,10 @@ Lacks game introduction, bad dump or alternate version? - - Liberator - 19?? - <unknown> + + Liberator (Lyversoft) + 1984 + Lyversoft @@ -98790,11 +99075,13 @@ Lacks game introduction, bad dump or alternate version? 1989 Domark + + @@ -118021,6 +118308,20 @@ Nothing happens after loading the cassette + + Play for Peace + 1989 + Top Games + + + + + + + + + + Play It Again Sam 1986 @@ -126865,6 +127166,19 @@ Game 4 - Char-Wallah + + Ruleta Parlante + 1985 + Creativos Editoriales + + + + + + + + + Rulett (128K) 2005 @@ -134396,10 +134710,11 @@ Game 4 - Char-Wallah - - Space Raiders - Invasores Galácticos (Portuguese) + + Space Raiders - Invasores Galácticos 1983 - TMX Portugal Ltda + TMX Portugal + @@ -134407,6 +134722,18 @@ Game 4 - Char-Wallah + + Space Raiders - Invasores Galácticos (alt) + 1983 + TMX Portugal + + + + + + + + Space Resque 1982 @@ -146463,6 +146790,22 @@ Game 4 - Char-Wallah + + Time Warrior (Guild) + 199? + The Guild + + + + + + + + + + + + Time Watch (alt) 1986 @@ -151402,9 +151745,9 @@ Version without loading screen, maybe a pre-release - Videomaster - Master Tape - 19?? - <unknown> + Videomaster (master tape) + 1991 + Chris Brown @@ -151934,56 +152277,90 @@ Version without loading screen, maybe a pre-release - - Vowels of the Earth - 19?? - <unknown> + + Vowels of the Earth: Part 1 - The Quest for 'A' + 1986 + I.E.C. Software + + - + + + + Vowels of the Earth: Part 2 - In Search of 'E' + 1986 + I.E.C. Software + + - + + - + + + + Vowels of the Earth: Part 3 - Discovering 'I' + 1986 + I.E.C. Software + + - + + - + + + + Vowels of the Earth: Part 4 - Go for 'O' + 1986 + I.E.C. Software + + - + + - + + + + Vowels of the Earth: Part 5 - The Hunt for 'U' + 1987 + I.E.C. Software + + - + + @@ -154270,6 +154647,24 @@ Version without loading screen, maybe a pre-release + + Winning Games on the ZX Spectrum + 1984 + Ellis Horwood + + + + + + + + + + + + + + Winter Olympiad (Micro Value) 1988 @@ -160922,6 +161317,24 @@ Side B - Game 2: Superkid in Space (Atlantis Software) + + A to Z + 1984 + I.E.C. Software + + + + + + + + + + + + + + A Toda Maquina 1989 @@ -166860,16 +167273,18 @@ Tape 2 - Side B: Star Wars - + Ian Botham's Test Match & Superfile - 19?? - <unknown> + 1985 + Tynesoft + + @@ -166903,8 +167318,8 @@ Tape 2 - Side B: Star Wars - - Impulsoft Cassette 001 + + Impuls Cassette 001 1982 Impulsoft @@ -166914,10 +167329,10 @@ Tape 2 - Side B: Star Wars - - Impulsoft Cassette 003 - 19?? - <unknown> + + Impuls Cassette 003 + 1982 + Impulsoft @@ -166925,10 +167340,10 @@ Tape 2 - Side B: Star Wars - - Impulsoft Cassette 007 - 19?? - <unknown> + + Impuls Cassette 007 + 1983 + Impulsoft @@ -166998,13 +167413,15 @@ Tape 2 - Side B: Star Wars Interrupt Sound Effects & Characterset Collection 19?? - <unknown> + Sigmasoft + + @@ -167124,8 +167541,8 @@ Tape 2 - Side B: Star Wars Jega Tape 2 - 19?? - <unknown> + 1982 + Jega Software @@ -167180,10 +167597,11 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - - K'set (Issue 01) - 19?? - <unknown> + + K'set № 1 (Octubre 85) + 1985 + Ediciones y Textos + @@ -167196,10 +167614,11 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - - K'set (Issue 02) - 19?? - <unknown> + + K'set № 1 (Noviembre 85) + 1985 + Ediciones y Textos + @@ -167334,7 +167753,7 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Konami's Coin-Op Hits +2 + Konami's Coin-Op Hits (Spectrum +2) 1986 Imagine Software @@ -167361,8 +167780,8 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) Konami's Coin-Op Hits - 19?? - <unknown> + 1986 + Imagine Software @@ -167386,9 +167805,9 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Krazy Kong & Panic Island & Rocket Raider + Krazy Kong + Panic Island + Rocket Raider 19?? - <unknown> + C-Tech @@ -167402,7 +167821,7 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Krazy Kong & Panic Island + Krazy Kong + Panic Island 1982 C-Tech @@ -167427,6 +167846,7 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) La Rana Z-Man 1984 Ventamatic + @@ -167435,19 +167855,18 @@ Tape 2 - Side A - Game 3: Hydrofool (Faster Than Light) - Las Cuatro en Raya & Rescate del Tesoro (set 1) + Las Cuatro en Raya + Rescate del Tesoro (set 1) 1984 Investronica - + + + @@ -167455,19 +167874,18 @@ Side B: Rescate del Tesoro (original release) - Las Cuatro en Raya & Rescate del Tesoro (set 2) - 19?? - <unknown> - + Las Cuatro en Raya + Rescate del Tesoro (set 2) + 1984 + Investronica + + + @@ -167538,26 +167956,30 @@ Side B: Rescate del Tesoro (original release) - + Leaderboard Par 3 - 19?? - <unknown> + 1988 + U.S. Gold + + + + @@ -167710,6 +168132,213 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) + + Libreria de Software Spectrum № 1 (Febrero 85) (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 1 (Febrero 85) (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 2 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 2 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 3 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 3 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 4 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 4 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 4 (covertape, alt 2) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + Libreria de Software Spectrum № 5 (covertape) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + + + Libreria de Software Spectrum № 5 (covertape, alt) + 1985 + Grupo de Trabajo Software + + + + + + + + + + + + + + + Libreria de Software Spectrum (Issue 11) 1986 @@ -167751,10 +168380,11 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) - - Libreria De Software Spectrum (Issue 26) (Gluman) - 19?? - <unknown> + + Libreria de Software Spectrum № 26 (covertape, Gluman) + 1987 + Grupo de Trabajo Software + @@ -167762,22 +168392,6 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) - - Librería De Software Spectrum (Issue 04) - 19?? - <unknown> - - - - - - - - - - - - Lightgun Games (48K) 1989 @@ -176821,10 +177435,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 01) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 1 (Spanish release, covertape) + 1984 + Geasa + @@ -176837,10 +177452,219 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 10) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 1 (Portuguese release, covertape) + 1984 + Edições Latinas + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 2 (covertape) + 1984 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 3 (Spanish release, covertape) + 1984 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 3 (Portuguese release, covertape) + 1984 + Edições Latinas + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 4 (Spanish release, covertape) + 1984 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 4 (Portuguese release, covertape) + 1984 + Edições Latinas + + + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 5 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 6 (Spanish release, covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 6 (Portuguese release, covertape) + 1985 + Edições Latinas + + + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 7 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 8 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 9 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 10 (covertape) + 1985 + Geasa + @@ -176853,10 +177677,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 12) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 12 (covertape) + 1985 + Geasa + @@ -176869,10 +177694,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 14) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 14 (covertape) + 1985 + Geasa + @@ -176885,10 +177711,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 15) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 15 (covertape) + 1985 + Geasa + @@ -176901,10 +177728,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 16) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 16 (covertape) + 1985 + Geasa + @@ -176917,10 +177745,28 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 20) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 17 (covertape) + 1985 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 20 (covertape) + 1986 + Geasa + @@ -176933,10 +177779,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 21) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 21 (covertape) + 1986 + Geasa + @@ -176949,10 +177796,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 22) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 22 (covertape) + 1986 + Geasa + @@ -176965,10 +177813,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 23) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 23 (covertape) + 1986 + Geasa + @@ -176981,10 +177830,11 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 24) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 24 (covertape) + 1986 + Geasa + @@ -176997,10 +177847,28 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) - - Videospectrum (Issue 26) - 19?? - <unknown> + + Revista de Software VideoSpectrum № 25 (covertape) + 1986 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 26 (covertape) + 1986 + Geasa + @@ -177013,10 +177881,44 @@ Side A - Game 4: Space Rocus [Planetoids] (Sinclair Research) + + Revista de Software VideoSpectrum № 28 (covertape) + 1986 + Geasa + + + + + + + + + + + + + + + Revista de Software VideoSpectrum № 31 (covertape) + 1987 + Geasa + + + + + + + + + + + + + View To A Kill Pack - 19?? - <unknown> + 1988 + Paxman Promotions From b0267c4767a7ebb7ad7567c73067e7a703f89154 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 16 Dec 2024 12:11:18 -0500 Subject: [PATCH 33/40] spectrum_cass.xml: Add author and serial fields to Sprites games --- hash/spectrum_cass.xml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml index 083f11535da..bce7a30f176 100644 --- a/hash/spectrum_cass.xml +++ b/hash/spectrum_cass.xml @@ -6572,9 +6572,11 @@ no loading screen, no custom loader - Commando (Loriciels) + Commando (Sprites) 1984 - Loriciels + Sprites + + @@ -81815,7 +81817,9 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) Gestion de Stock 1984 Sprites + + @@ -97318,7 +97322,9 @@ Created by Mark Jeffries La Grande Boucle 1985 Sprites + + @@ -98909,9 +98915,12 @@ Lacks game introduction, bad dump or alternate version? Les Diamants de Kheops - 19?? + 198? Sprites + + + @@ -140559,6 +140568,8 @@ Game 4 - Char-Wallah Super Sabre 1984 Sprites + + From 1af09712d7339870398ea85c8ad17b8e52405fb9 Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 16 Dec 2024 23:33:56 +0100 Subject: [PATCH 34/40] dec8: correct cpu clocks for some games, make mcu-side comms edge-triggered, remove non-existant coin3 on 2 player games (it was service coin in some cases), misc cleanups, ghostb3a: this version expects longer irq trigger, srdarwinb: hook up coin inputs Clones promoted to working -------------------------- The Real Ghostbusters (US 3 Players, revision 2) [hap] SRD: Super Real Darwin (Japan, bootleg) [hap] --- src/mame/dataeast/dec0.cpp | 26 +- src/mame/dataeast/dec0.h | 2 +- src/mame/dataeast/dec8.cpp | 1879 ++++++++++++++++++---------------- src/mame/dataeast/dec8.h | 164 +-- src/mame/dataeast/dec8_v.cpp | 155 ++- src/mame/dataeast/karnov.cpp | 53 +- 6 files changed, 1185 insertions(+), 1094 deletions(-) diff --git a/src/mame/dataeast/dec0.cpp b/src/mame/dataeast/dec0.cpp index 2878fc9ce8a..898c107904d 100644 --- a/src/mame/dataeast/dec0.cpp +++ b/src/mame/dataeast/dec0.cpp @@ -1772,14 +1772,17 @@ static GFXDECODE_START( gfx_secretab ) GFXDECODE_ENTRY( "tiles2", 0, automat_tilelayout2, 0x300, 0x10 ) GFXDECODE_END -/******************************************************************************/ - +/******************************************************************************/ // DECO video CRTC, pixel clock is unverified (actually 24MHz/4?) -void dec0_state::set_screen_raw_params_data_east(machine_config &config) +void dec0_state::set_screen_raw_params(machine_config &config) { - m_screen->set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248); +// m_screen->set_refresh_hz(57.41); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); / 57.41 Hz, 529us Vblank +// m_screen->set_size(32*8, 32*8); +// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_raw(XTAL(12'000'000) / 2, 384, 0, 256, 272, 8, 248); } void dec0_state::dec0_base(machine_config &config) @@ -1788,12 +1791,7 @@ void dec0_state::dec0_base(machine_config &config) BUFFERED_SPRITERAM16(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - set_screen_raw_params_data_east(config); - //m_screen->set_refresh_hz(57.41); - //m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 57.41 Hz, 529us Vblank */ - //m_screen->set_size(32*8, 32*8); - //m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - //screen update callback differs per game + set_screen_raw_params(config); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_dec0); @@ -1930,9 +1928,7 @@ void dec0_automat_state::automat(machine_config &config) BUFFERED_SPRITERAM16(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(57.41); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 57.41 Hz, 529us Vblank */ - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(dec0_automat_state::screen_update_automat)); m_screen->set_palette(m_palette); @@ -2006,9 +2002,7 @@ void dec0_automat_state::secretab(machine_config &config) // all clocks verified BUFFERED_SPRITERAM16(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(57.41); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); // 57.41 Hz, 529us Vblank - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(dec0_automat_state::screen_update_secretab)); m_screen->set_palette(m_palette); diff --git a/src/mame/dataeast/dec0.h b/src/mame/dataeast/dec0.h index 2bd8de67110..9126007b9b8 100644 --- a/src/mame/dataeast/dec0.h +++ b/src/mame/dataeast/dec0.h @@ -84,7 +84,7 @@ class dec0_state : public driver_device void robocop_colpri_cb(u32 &colour, u32 &pri_mask); void baddudes_tile_cb(tile_data &tileinfo, u32 &tile, u32 &colour, u32 &flags); - void set_screen_raw_params_data_east(machine_config &config); + void set_screen_raw_params(machine_config &config); void h6280_decrypt(const char *cputag); void dec0_map(address_map &map) ATTR_COLD; diff --git a/src/mame/dataeast/dec8.cpp b/src/mame/dataeast/dec8.cpp index f805c9bb83c..d92eb54bb4e 100644 --- a/src/mame/dataeast/dec8.cpp +++ b/src/mame/dataeast/dec8.cpp @@ -4,40 +4,44 @@ Various Data East 8 bit games: - Last Mission (rev 6) (c) 1986 Data East USA (2*6809 + I8751) - Last Mission (rev 5) (c) 1986 Data East USA (2*6809 + I8751) - Last Mission (Japan) (c) 1986 Data East Corporation (2*6809 + I8751) - Shackled (c) 1986 Data East USA (2*6809 + I8751) - Breywood (c) 1986 Data East Corporation (2*6809 + I8751) - Gondomania (c) 1987 Data East USA (6809 + I8751) - Makyou Senshi (c) 1987 Data East Corporation (6809 + I8751) - Garyo Retsuden (c) 1987 Data East Corporation (6809 + I8751) - The Real Ghostbusters (2p) (c) 1987 Data East USA (6809 + I8751) - The Real Ghostbusters (3p) (c) 1987 Data East USA (6809 + I8751) - Meikyuu Hunter G (c) 1987 Data East Corporation (6809 + I8751) - Captain Silver (World) (c) 1987 Data East Corporation (2*6809 + I8751) - Captain Silver (Japan) (c) 1987 Data East Corporation (2*6809 + I8751) - Psycho-Nics Oscar (World) (c) 1987 Data East Corporation (2*6809) - Psycho-Nics Oscar (US) (c) 1988 Data East USA (2*6809) - Psycho-Nics Oscar (Japan) (c) 1987 Data East Corporation (2*6809) - Super Real Darwin (World) (c) 1987 Data East Corporation (6809 + I8751) - Super Real Darwin (Japan) (c) 1987 Data East Corporation (6809 + I8751) - Cobra Command (World) (c) 1988 Data East Corporation (6809) - Cobra Command (Japan) (c) 1988 Data East Corporation (6809) - - All games use a 6502 for sound (some are encrypted), all games except Cobracom - and Oscar use an Intel 8751 for protection & coinage. For the games without - (fake) MCU, the coinage dip switch (sometimes based on the manual) is simulated. - - Meikyuu Hunter G was formerly known as Mazehunter. - - Emulation by Bryan McPhail, mish@tendril.co.uk - -To do: - Super Real Darwin 'Double' sprites appearing from the top of the screen are clipped - Strangely coloured butterfly on Garyo Retsuden water levels! - - Thanks to Jose Miguel Morales Farreras for Super Real Darwin information! +Last Mission (rev 6) (c) 1986 Data East USA (2*6809 + I8751) +Last Mission (rev 5) (c) 1986 Data East USA (2*6809 + I8751) +Last Mission (Japan) (c) 1986 Data East Corporation (2*6809 + I8751) +Shackled (c) 1986 Data East USA (2*6809 + I8751) +Breywood (c) 1986 Data East Corporation (2*6809 + I8751) +Gondomania (c) 1987 Data East USA (6809 + I8751) +Makyou Senshi (c) 1987 Data East Corporation (6809 + I8751) +Garyo Retsuden (c) 1987 Data East Corporation (6809 + I8751) +The Real Ghostbusters (2p) (c) 1987 Data East USA (6809 + I8751) +The Real Ghostbusters (3p) (c) 1987 Data East USA (6809 + I8751) +Meikyuu Hunter G (c) 1987 Data East Corporation (6809 + I8751) +Captain Silver (World) (c) 1987 Data East Corporation (2*6809 + I8751) +Captain Silver (Japan) (c) 1987 Data East Corporation (2*6809 + I8751) +Psycho-Nics Oscar (World) (c) 1987 Data East Corporation (2*6809) +Psycho-Nics Oscar (US) (c) 1988 Data East USA (2*6809) +Psycho-Nics Oscar (Japan) (c) 1987 Data East Corporation (2*6809) +Super Real Darwin (World) (c) 1987 Data East Corporation (6809 + I8751) +Super Real Darwin (Japan) (c) 1987 Data East Corporation (6809 + I8751) +Cobra Command (World) (c) 1988 Data East Corporation (6809) +Cobra Command (Japan) (c) 1988 Data East Corporation (6809) + +All games use a 6502 for sound (some are encrypted), all games except Cobracom +and Oscar use an Intel 8751 for protection & coinage. + +Meikyuu Hunter G was formerly known as Mazehunter. + +Emulation by Bryan McPhail, mish@tendril.co.uk +Thanks to Jose Miguel Morales Farreras for Super Real Darwin information! + +TODO: +- shackled continue after game over does not work, see MT0418. It's not that + big of an issue for user-wise, since credits add more health. For breywood, + it appears to work ok after the 1st level. +- srdarwin 'double' sprites appearing from the top of the screen are clipped +- strangely coloured butterfly on Garyo Retsuden water levels! +- gondo 2nd coin doesn't work, probably due to hacked MCU ROM +- ghostb coinage dipswitch +- how does meikyuhbl circumvent the MCU? It won't boot in MAME if MCU is removed ***************************************************************************/ @@ -47,52 +51,43 @@ To do: #include "cpu/m6502/r65c02.h" #include "cpu/m6809/hd6309.h" #include "cpu/m6809/m6809.h" -#include "deco222.h" #include "sound/msm5205.h" #include "sound/ymopn.h" #include "sound/ymopl.h" +#include "deco222.h" #include "speaker.h" /******************************************************************************/ - void dec8_state_base::buffer_spriteram16_w(u8 data) { u8* spriteram = m_spriteram->live(); + // copy to a 16-bit region for the sprite chip - for (int i=0;i<0x800/2;i++) - { - m_buffered_spriteram16[i] = spriteram[(i*2)+1] | (spriteram[(i*2)+0] <<8); - } + for (int i = 0; i < 0x800/2 ; i++) + m_buffered_spriteram16[i] = spriteram[(i * 2) + 1] | (spriteram[(i * 2) + 0] << 8); } -/* Only used by ghostb, gondo, garyoret, other games can control buffering */ -void lastmisn_state::screen_vblank(int state) +// Only used by ghostb, gondo, garyoret, other games can control buffering +void ghostb_state::screen_vblank(int state) { // rising edge if (state) - { buffer_spriteram16_w(0); - } } -u8 dec8_mcu_state_base::i8751_h_r() +u8 dec8_mcu_state_base::i8751_hi_r() { - return m_i8751_return >> 8; /* MSB */ + return m_i8751_return >> 8; // MSB } -u8 dec8_mcu_state_base::i8751_l_r() +u8 dec8_mcu_state_base::i8751_lo_r() { - return m_i8751_return & 0xff; /* LSB */ + return m_i8751_return & 0xff; // LSB } -void dec8_mcu_state_base::i8751_reset_w(u8 data) -{ - // ? reset the actual MCU? - //m_i8751_return = 0; -} /******************************************************************************/ @@ -103,15 +98,14 @@ u8 gondo_state::player_io_r(offs_t offset) switch (offset) { - case 0: /* Rotary low byte */ + case 0: // Rotary low byte return ~(val & 0xff); - case 1: /* Joystick = bottom 4 bits, rotary = top 4 */ + case 1: // Joystick = bottom 4 bits, rotary = top 4 return ((~val >> 4) & 0xf0) | (m_in_io[Which]->read() & 0xf); } return 0xff; } -/******************************************************************************/ /*************************************************** * @@ -119,35 +113,53 @@ u8 gondo_state::player_io_r(offs_t offset) * ***************************************************/ -TIMER_CALLBACK_MEMBER(dec8_mcu_state_base::mcu_irq_clear) +TIMER_CALLBACK_MEMBER(ghostb_state::mcu_irq_clear) { - // The schematics show a clocked LS194 shift register (3A) is used to automatically - // clear the IRQ request. The MCU does not clear it itself. + // Gondomania schematics show a clocked LS194 shift register (3A) is used to + // automatically clear the IRQ request. The MCU does not clear it itself. m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); } -TIMER_CALLBACK_MEMBER(dec8_state_base::audiocpu_nmi_clear) +TIMER_CALLBACK_MEMBER(ghostb_state::audiocpu_nmi_clear) { // Gondomania schematics show a LS194 for the sound IRQ, sharing the 6502 clock // S1=H, S0=L, LSI=H, and QA is the only output connected (to NMI) m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -void dec8_mcu_state_base::i8751_w(offs_t offset, u8 data) +void dec8_mcu_state_base::i8751_lo_w(u8 data) { - switch (offset) - { - case 0: /* High byte - SECIRQ is trigged on activating this latch */ - m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + m_i8751_value = (m_i8751_value & 0xff00) | data; +} + +void dec8_mcu_state_base::i8751_hi_w(u8 data) +{ + m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + + // SECIRQ is triggered on activating this latch + if (m_i8751_p2 & 2) m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); - m_i8751_timer->adjust(m_mcu->clocks_to_attotime(64)); // 64 clocks not confirmed - break; - case 1: /* Low byte */ - m_i8751_value = (m_i8751_value & 0xff00) | data; - break; - } } +void ghostb_state::i8751_hi_w(u8 data) +{ + m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + + // MCU interrupt is still level-triggered, but no ack? + m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); + m_i8751_timer->adjust(attotime::from_ticks(64, 12_MHz_XTAL / 8)); // 64 clocks not confirmed +} + +void ghostb_state::gondo_i8751_hi_w(u8 data) +{ + m_i8751_value = (m_i8751_value & 0xff) | (data << 8); + + // MCU interrupt is edge-triggered + m_mcu->set_input_line(MCS51_INT1_LINE, ASSERT_LINE); + m_i8751_timer->adjust(attotime::from_ticks(4, 12_MHz_XTAL / 8)); +} + + /******************************************************************************/ void oscar_state::bank_w(u8 data) @@ -155,8 +167,8 @@ void oscar_state::bank_w(u8 data) m_mainbank->set_entry(data & 0x0f); } -/* Used by Ghostbusters, Meikyuu Hunter G & Gondomania */ -void lastmisn_state::ghostb_bank_w(u8 data) +// Used by Ghostbusters, Meikyuu Hunter G & Gondomania +void ghostb_state::ghostb_bank_w(u8 data) { /* Bit 0: SECCLR - acknowledge interrupt from I8751 Bit 1: NMI enable/disable @@ -164,7 +176,6 @@ void lastmisn_state::ghostb_bank_w(u8 data) Bit 3: Screen flip Bits 4-7: Bank switch */ - m_mainbank->set_entry(data >> 4); m_secclr = BIT(data, 0); @@ -196,18 +207,18 @@ void csilver_state::control_w(u8 data) m_mainbank->set_entry(data & 0x0f); } -void dec8_state_base::sound_w(u8 data) +void ghostb_state::sound_w(u8 data) { m_soundlatch->write(data); m_audiocpu->set_input_line(m6502_device::NMI_LINE, ASSERT_LINE); - m_6502_timer->adjust(m_audiocpu->cycles_to_attotime(3)); + m_6502_timer->adjust(m_audiocpu->cycles_to_attotime(4)); } void csilver_state::adpcm_int(int state) { m_toggle ^= 1; if (m_toggle) - m_audiocpu->set_input_line(m6502_device::IRQ_LINE, HOLD_LINE); + m_audiocpu->set_input_line(m6502_device::IRQ_LINE, ASSERT_LINE); m_msm->data_w(m_msm5205next >> 4); m_msm5205next <<= 4; @@ -222,6 +233,7 @@ u8 csilver_state::adpcm_reset_r() void csilver_state::adpcm_data_w(u8 data) { m_msm5205next = data; + m_audiocpu->set_input_line(m6502_device::IRQ_LINE, CLEAR_LINE); } void csilver_state::sound_bank_w(u8 data) @@ -229,6 +241,7 @@ void csilver_state::sound_bank_w(u8 data) m_soundbank->set_entry((data & 0x08) >> 3); } + /******************************************************************************/ void dec8_state_base::main_irq_on_w(u8 data) @@ -241,11 +254,6 @@ void dec8_state_base::main_irq_off_w(u8 data) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -void dec8_state_base::main_firq_off_w(u8 data) -{ - m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); -} - void dec8_state_base::sub_irq_on_w(u8 data) { m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); @@ -256,15 +264,15 @@ void dec8_state_base::sub_irq_off_w(u8 data) m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -void dec8_state_base::sub_firq_off_w(u8 data) +void dec8_state_base::both_firq_off_w(u8 data) { + m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); m_subcpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); } -/******************************************************************************/ - void dec8_state_base::flip_screen_w(u8 data) { flip_screen_set(data); } + /******************************************************************************/ void lastmisn_state::lastmisn_map(address_map &map) @@ -274,17 +282,18 @@ void lastmisn_state::lastmisn_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::main_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ - map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_l_r), FUNC(lastmisn_state::flip_screen_w)); - map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); /* Scroll LSB */ - map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); /* Scroll LSB */ - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180d, 0x180d).w(FUNC(lastmisn_state::lastmisn_control_w)); /* Bank switch + Scroll MSB */ - map(0x180e, 0x180f).w(FUNC(lastmisn_state::i8751_w)); + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); + map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_hi_r)); + map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_lo_r), FUNC(lastmisn_state::flip_screen_w)); + map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); + map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180d, 0x180d).w(FUNC(lastmisn_state::lastmisn_control_w)); + map(0x180e, 0x180e).w(FUNC(lastmisn_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(lastmisn_state::i8751_lo_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -300,14 +309,15 @@ void lastmisn_state::lastmisn_sub_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::main_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ - map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_l_r), FUNC(lastmisn_state::flip_screen_w)); - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180e, 0x180f).w(FUNC(lastmisn_state::i8751_w)); + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); + map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_hi_r)); + map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_lo_r), FUNC(lastmisn_state::flip_screen_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180e, 0x180e).w(FUNC(lastmisn_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(lastmisn_state::i8751_lo_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)); map(0x2800, 0x2fff).writeonly().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -322,15 +332,15 @@ void lastmisn_state::shackled_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::sub_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); map(0x1807, 0x1807).w(FUNC(lastmisn_state::flip_screen_w)); - map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); /* Scroll LSB */ - map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); /* Scroll LSB */ - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); /* Bank switch + Scroll MSB */ + map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); + map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -346,17 +356,18 @@ void lastmisn_state::shackled_sub_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN0").w(FUNC(lastmisn_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN1").w(FUNC(lastmisn_state::main_irq_off_w)); - map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::sub_firq_off_w)); + map(0x1802, 0x1802).portr("IN2").w(FUNC(lastmisn_state::both_firq_off_w)); map(0x1803, 0x1803).portr("DSW0").w(FUNC(lastmisn_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(lastmisn_state::sub_irq_on_w)); - map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); /* DMA */ - map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_l_r), FUNC(lastmisn_state::flip_screen_w)); - map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); /* Scroll LSB */ - map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); /* Scroll LSB */ - map(0x180c, 0x180c).w(FUNC(lastmisn_state::sound_w)); - map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); /* Bank switch + Scroll MSB */ - map(0x180e, 0x180f).w(FUNC(lastmisn_state::i8751_w)); + map(0x1805, 0x1805).w(FUNC(lastmisn_state::buffer_spriteram16_w)); + map(0x1806, 0x1806).r(FUNC(lastmisn_state::i8751_hi_r)); + map(0x1807, 0x1807).rw(FUNC(lastmisn_state::i8751_lo_r), FUNC(lastmisn_state::flip_screen_w)); + map(0x1809, 0x1809).w(FUNC(lastmisn_state::lastmisn_scrollx_w)); + map(0x180b, 0x180b).w(FUNC(lastmisn_state::lastmisn_scrolly_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x180d, 0x180d).w(FUNC(lastmisn_state::shackled_control_w)); + map(0x180e, 0x180e).w(FUNC(lastmisn_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(lastmisn_state::i8751_lo_w)); map(0x2000, 0x27ff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -364,6 +375,32 @@ void lastmisn_state::shackled_sub_map(address_map &map) map(0x4000, 0xffff).rom(); } +void ghostb_state::ghostb_map(address_map &map) +{ + map(0x0000, 0x0fff).ram(); + map(0x1000, 0x17ff).ram(); + map(0x1800, 0x1fff).ram().w(FUNC(ghostb_state::videoram_w)).share(m_videoram); + map(0x2000, 0x27ff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_data_8bit_r), FUNC(deco_bac06_device::pf_data_8bit_w)); + map(0x2800, 0x2bff).ram(); // colscroll? mirror? + map(0x2c00, 0x2fff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_rowscroll_8bit_r), FUNC(deco_bac06_device::pf_rowscroll_8bit_w)); + map(0x3000, 0x37ff).ram().share("spriteram"); + map(0x3800, 0x3800).portr("IN0"); + map(0x3800, 0x3800).w(FUNC(ghostb_state::sound_w)); + map(0x3801, 0x3801).portr("IN1"); + map(0x3802, 0x3802).portr("IN2"); + map(0x3803, 0x3803).portr("DSW0"); + map(0x3820, 0x3820).portr("DSW1"); + map(0x3820, 0x3827).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); + map(0x3830, 0x383f).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_r), FUNC(deco_bac06_device::pf_control1_8bit_w)); + map(0x3840, 0x3840).r(FUNC(ghostb_state::i8751_hi_r)); + map(0x3840, 0x3840).w(FUNC(ghostb_state::ghostb_bank_w)); + map(0x3860, 0x3860).r(FUNC(ghostb_state::i8751_lo_r)); + map(0x3860, 0x3860).w(FUNC(ghostb_state::i8751_hi_w)); + map(0x3861, 0x3861).w(FUNC(ghostb_state::i8751_lo_w)); + map(0x4000, 0x7fff).bankr(m_mainbank); + map(0x8000, 0xffff).rom(); +} + void gondo_state::gondo_map(address_map &map) { map(0x0000, 0x17ff).ram(); @@ -371,67 +408,44 @@ void gondo_state::gondo_map(address_map &map) map(0x2000, 0x27ff).rw(FUNC(gondo_state::bg_ram_r), FUNC(gondo_state::bg_ram_w)).share("bg_ram"); map(0x2800, 0x2bff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x2c00, 0x2fff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); - map(0x3000, 0x37ff).ram().share("spriteram"); /* Sprites */ - map(0x3800, 0x3800).portr("DSW0"); /* Dip 1 */ - map(0x3801, 0x3801).portr("DSW1"); /* Dip 2 */ - map(0x380a, 0x380b).r(FUNC(gondo_state::player_io_r<0>)); /* Player 1 rotary */ - map(0x380c, 0x380d).r(FUNC(gondo_state::player_io_r<1>)); /* Player 2 rotary */ - map(0x380e, 0x380e).portr("IN3"); /* VBL */ - map(0x380f, 0x380f).portr("IN2"); /* Fire buttons */ + map(0x3000, 0x37ff).ram().share("spriteram"); + map(0x3800, 0x3800).portr("DSW0"); + map(0x3801, 0x3801).portr("DSW1"); + map(0x380a, 0x380b).r(FUNC(gondo_state::player_io_r<0>)); + map(0x380c, 0x380d).r(FUNC(gondo_state::player_io_r<1>)); + map(0x380e, 0x380e).portr("IN3"); + map(0x380f, 0x380f).portr("IN2"); map(0x3810, 0x3810).w(FUNC(gondo_state::sound_w)); map(0x3818, 0x382f).w(FUNC(gondo_state::gondo_scroll_w)); - map(0x3830, 0x3830).w(FUNC(gondo_state::ghostb_bank_w)); /* Bank + NMI enable */ - map(0x3838, 0x3838).r(FUNC(gondo_state::i8751_h_r)); - map(0x3839, 0x3839).r(FUNC(gondo_state::i8751_l_r)); - map(0x383a, 0x383b).w(FUNC(gondo_state::i8751_w)); + map(0x3830, 0x3830).w(FUNC(gondo_state::ghostb_bank_w)); + map(0x3838, 0x3838).r(FUNC(gondo_state::i8751_hi_r)); + map(0x3839, 0x3839).r(FUNC(gondo_state::i8751_lo_r)); + map(0x383a, 0x383a).w(FUNC(gondo_state::gondo_i8751_hi_w)); + map(0x383b, 0x383b).w(FUNC(gondo_state::i8751_lo_w)); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } -void lastmisn_state::garyoret_map(address_map &map) +void ghostb_state::garyoret_map(address_map &map) { map(0x0000, 0x17ff).ram(); - map(0x1800, 0x1fff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); - map(0x2000, 0x27ff).rw(FUNC(lastmisn_state::bg_ram_r), FUNC(lastmisn_state::bg_ram_w)).share("bg_ram"); + map(0x1800, 0x1fff).ram().w(FUNC(ghostb_state::videoram_w)).share(m_videoram); + map(0x2000, 0x27ff).rw(FUNC(ghostb_state::bg_ram_r), FUNC(ghostb_state::bg_ram_w)).share("bg_ram"); map(0x2800, 0x2bff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x2c00, 0x2fff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); - map(0x3000, 0x37ff).ram().share("spriteram"); /* Sprites */ - map(0x3800, 0x3800).portr("DSW0"); /* Dip 1 */ - map(0x3801, 0x3801).portr("DSW1"); /* Dip 2 */ - map(0x3808, 0x3808).nopr(); /* ? */ - map(0x380a, 0x380a).portr("IN1"); /* Player 2 + VBL */ - map(0x380b, 0x380b).portr("IN0"); /* Player 1 */ - map(0x3810, 0x3810).w(FUNC(lastmisn_state::sound_w)); - map(0x3818, 0x382f).w(FUNC(lastmisn_state::gondo_scroll_w)); - map(0x3830, 0x3830).w(FUNC(lastmisn_state::ghostb_bank_w)); /* Bank + NMI enable */ - map(0x3838, 0x3839).w(FUNC(lastmisn_state::i8751_w)); - map(0x383a, 0x383a).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x383b, 0x383b).r(FUNC(lastmisn_state::i8751_l_r)); - map(0x4000, 0x7fff).bankr(m_mainbank); - map(0x8000, 0xffff).rom(); -} - -void lastmisn_state::meikyuh_map(address_map &map) -{ - map(0x0000, 0x0fff).ram(); - map(0x1000, 0x17ff).ram(); - map(0x1800, 0x1fff).ram().w(FUNC(lastmisn_state::videoram_w)).share(m_videoram); - map(0x2000, 0x27ff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_data_8bit_r), FUNC(deco_bac06_device::pf_data_8bit_w)); - map(0x2800, 0x2bff).ram(); // colscroll? mirror? - map(0x2c00, 0x2fff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_rowscroll_8bit_r), FUNC(deco_bac06_device::pf_rowscroll_8bit_w)); map(0x3000, 0x37ff).ram().share("spriteram"); - map(0x3800, 0x3800).portr("IN0"); /* Player 1 */ - map(0x3800, 0x3800).w(FUNC(lastmisn_state::sound_w)); - map(0x3801, 0x3801).portr("IN1"); /* Player 2 */ - map(0x3802, 0x3802).portr("IN2"); /* Player 3 */ - map(0x3803, 0x3803).portr("DSW0"); /* Start buttons + VBL */ - map(0x3820, 0x3820).portr("DSW1"); /* Dip */ - map(0x3820, 0x3827).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); - map(0x3830, 0x383f).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_r), FUNC(deco_bac06_device::pf_control1_8bit_w)); - map(0x3840, 0x3840).r(FUNC(lastmisn_state::i8751_h_r)); - map(0x3840, 0x3840).w(FUNC(lastmisn_state::ghostb_bank_w)); - map(0x3860, 0x3860).r(FUNC(lastmisn_state::i8751_l_r)); - map(0x3860, 0x3861).w(FUNC(lastmisn_state::i8751_w)); + map(0x3800, 0x3800).portr("DSW0"); + map(0x3801, 0x3801).portr("DSW1"); + map(0x3808, 0x3808).nopr(); // ? + map(0x380a, 0x380a).portr("IN1"); + map(0x380b, 0x380b).portr("IN0"); + map(0x3810, 0x3810).w(FUNC(ghostb_state::sound_w)); + map(0x3818, 0x382f).w(FUNC(ghostb_state::gondo_scroll_w)); + map(0x3830, 0x3830).w(FUNC(ghostb_state::ghostb_bank_w)); + map(0x3838, 0x3838).w(FUNC(ghostb_state::gondo_i8751_hi_w)); + map(0x3839, 0x3839).w(FUNC(ghostb_state::i8751_lo_w)); + map(0x383a, 0x383a).r(FUNC(ghostb_state::i8751_hi_r)); + map(0x383b, 0x383b).r(FUNC(ghostb_state::i8751_lo_r)); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } @@ -443,17 +457,18 @@ void csilver_state::main_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).portr("IN1").w(FUNC(csilver_state::sub_irq_off_w)); map(0x1801, 0x1801).portr("IN0").w(FUNC(csilver_state::main_irq_off_w)); - map(0x1802, 0x1802).w(FUNC(csilver_state::main_firq_off_w)); + map(0x1802, 0x1802).w(FUNC(csilver_state::both_firq_off_w)); map(0x1803, 0x1803).portr("IN2").w(FUNC(csilver_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(csilver_state::sub_irq_on_w)); - map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); /* Dip 1, DMA */ + map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); map(0x1807, 0x1807).w(FUNC(csilver_state::flip_screen_w)); map(0x1808, 0x180b).w(FUNC(csilver_state::scroll_w)); - map(0x180c, 0x180c).w(FUNC(csilver_state::sound_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x180d, 0x180d).w(FUNC(csilver_state::control_w)); - map(0x180e, 0x180f).w(FUNC(csilver_state::i8751_w)); - map(0x1c00, 0x1c00).r(FUNC(csilver_state::i8751_h_r)); - map(0x1e00, 0x1e00).r(FUNC(csilver_state::i8751_l_r)); + map(0x180e, 0x180e).w(FUNC(csilver_state::i8751_hi_w)); + map(0x180f, 0x180f).w(FUNC(csilver_state::i8751_lo_w)); + map(0x1c00, 0x1c00).r(FUNC(csilver_state::i8751_hi_r)); + map(0x1e00, 0x1e00).r(FUNC(csilver_state::i8751_lo_r)); map(0x2000, 0x27ff).ram().w(FUNC(csilver_state::videoram_w)); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -469,11 +484,11 @@ void csilver_state::sub_map(address_map &map) map(0x1400, 0x17ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); map(0x1800, 0x1800).w(FUNC(csilver_state::sub_irq_off_w)); map(0x1801, 0x1801).w(FUNC(csilver_state::main_irq_off_w)); - map(0x1802, 0x1802).w(FUNC(csilver_state::main_firq_off_w)); + map(0x1802, 0x1802).w(FUNC(csilver_state::both_firq_off_w)); map(0x1803, 0x1803).portr("IN2").w(FUNC(csilver_state::main_irq_on_w)); map(0x1804, 0x1804).portr("DSW1").w(FUNC(csilver_state::sub_irq_on_w)); - map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); /* DMA */ - map(0x180c, 0x180c).w(FUNC(csilver_state::sound_w)); + map(0x1805, 0x1805).portr("DSW0").w(FUNC(csilver_state::buffer_spriteram16_w)); + map(0x180c, 0x180c).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x2000, 0x27ff).ram().w(FUNC(csilver_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x37ff).ram().share("share2"); @@ -488,23 +503,23 @@ void oscar_state::oscar_map(address_map &map) map(0x1000, 0x1fff).ram().share("share2"); map(0x2000, 0x27ff).ram().w(FUNC(oscar_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).rw(m_tilegen[0], FUNC(deco_bac06_device::pf_data_8bit_r), FUNC(deco_bac06_device::pf_data_8bit_w)); - map(0x3000, 0x37ff).ram().share("spriteram"); /* Sprites */ + map(0x3000, 0x37ff).ram().share("spriteram"); map(0x3800, 0x3bff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x3c00, 0x3c00).portr("IN0"); map(0x3c01, 0x3c01).portr("IN1"); - map(0x3c02, 0x3c02).portr("IN2"); /* VBL & coins */ - map(0x3c03, 0x3c03).portr("DSW0"); /* Dip 1 */ + map(0x3c02, 0x3c02).portr("IN2"); + map(0x3c03, 0x3c03).portr("DSW0"); map(0x3c04, 0x3c04).portr("DSW1"); map(0x3c00, 0x3c07).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); map(0x3c10, 0x3c1f).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_w)); - map(0x3c80, 0x3c80).w(FUNC(oscar_state::buffer_spriteram16_w)); /* DMA */ - map(0x3d00, 0x3d00).w(FUNC(oscar_state::bank_w)); /* BNKS */ - map(0x3d80, 0x3d80).w(m_soundlatch, FUNC(generic_latch_8_device::write)); /* SOUN */ - map(0x3e00, 0x3e00).w(FUNC(oscar_state::coin_clear_w)); /* COINCL */ - map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); /* IRQ 2 */ - map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); /* IRC 1 */ - map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); /* IRQ 1 */ - map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); /* IRC 2 */ + map(0x3c80, 0x3c80).w(FUNC(oscar_state::buffer_spriteram16_w)); // DMA + map(0x3d00, 0x3d00).w(FUNC(oscar_state::bank_w)); // BNKS + map(0x3d80, 0x3d80).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // SOUN + map(0x3e00, 0x3e00).w(FUNC(oscar_state::coin_clear_w)); // COINCL + map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); // IRQ 2 + map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); // IRC 1 + map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); // IRQ 1 + map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); // IRC 2 map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } @@ -514,10 +529,10 @@ void oscar_state::oscar_sub_map(address_map &map) map(0x0000, 0x0eff).ram().share("share1"); map(0x0f00, 0x0fff).ram(); map(0x1000, 0x1fff).ram().share("share2"); - map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); /* IRQ 2 */ - map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); /* IRC 1 */ - map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); /* IRQ 1 */ - map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); /* IRC 2 */ + map(0x3e80, 0x3e80).w(FUNC(oscar_state::sub_irq_on_w)); // IRQ 2 + map(0x3e81, 0x3e81).w(FUNC(oscar_state::main_irq_off_w)); // IRC 1 + map(0x3e82, 0x3e82).w(FUNC(oscar_state::main_irq_on_w)); // IRQ 1 + map(0x3e83, 0x3e83).w(FUNC(oscar_state::sub_irq_off_w)); // IRC 2 map(0x4000, 0xffff).rom(); } @@ -528,23 +543,32 @@ void srdarwin_state::main_map(address_map &map) map(0x0800, 0x0fff).ram().w(FUNC(srdarwin_state::srdarwin_videoram_w)).share(m_videoram); map(0x1000, 0x13ff).ram(); map(0x1400, 0x17ff).rw(FUNC(srdarwin_state::bg_ram_r), FUNC(srdarwin_state::bg_ram_w)).share("bg_ram"); - map(0x1800, 0x1801).w(FUNC(srdarwin_state::i8751_w)); - map(0x1802, 0x1802).w(FUNC(srdarwin_state::i8751_reset_w)); /* Maybe.. */ - map(0x1803, 0x1803).nopw(); /* NMI ack */ - map(0x1804, 0x1804).w(m_spriteram, FUNC(buffered_spriteram8_device::write)); /* DMA */ - map(0x1805, 0x1806).w(FUNC(srdarwin_state::control_w)); /* Scroll & Bank */ - map(0x2000, 0x2000).rw(FUNC(srdarwin_state::i8751_h_r), FUNC(srdarwin_state::sound_w)); /* Sound */ - map(0x2001, 0x2001).rw(FUNC(srdarwin_state::i8751_l_r), FUNC(srdarwin_state::flip_screen_w)); /* Flipscreen */ + map(0x1800, 0x1800).w(FUNC(srdarwin_state::i8751_hi_w)); + map(0x1801, 0x1801).w(FUNC(srdarwin_state::i8751_lo_w)); + map(0x1803, 0x1803).nopw(); + map(0x1804, 0x1804).w(m_spriteram, FUNC(buffered_spriteram8_device::write)); + map(0x1805, 0x1806).w(FUNC(srdarwin_state::control_w)); + map(0x2000, 0x2000).r(FUNC(srdarwin_state::i8751_hi_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x2001, 0x2001).rw(FUNC(srdarwin_state::i8751_lo_r), FUNC(srdarwin_state::flip_screen_w)); map(0x2800, 0x288f).w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); map(0x3000, 0x308f).w(m_palette, FUNC(deco_rmc3_device::write8_ext)).share("palette_ext"); - map(0x3800, 0x3800).portr("DSW0"); /* Dip 1 */ - map(0x3801, 0x3801).portr("IN0"); /* Player 1 */ - map(0x3802, 0x3802).portr("IN1"); /* Player 2 (cocktail) + VBL */ - map(0x3803, 0x3803).portr("DSW1"); /* Dip 2 */ + map(0x3800, 0x3800).portr("DSW0"); + map(0x3801, 0x3801).portr("IN0"); + map(0x3802, 0x3802).portr("IN1"); + map(0x3803, 0x3803).portr("DSW1"); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } +void srdarwin_state::srdarwinb_map(address_map &map) +{ + srdarwin_state::main_map(map); + + map(0x1800, 0x1801).nopw(); + map(0x2000, 0x2000).unmapr(); + map(0x2001, 0x2001).portr("COIN"); +} + void oscar_state::cobra_map(address_map &map) { map(0x0000, 0x07ff).ram(); @@ -554,26 +578,27 @@ void oscar_state::cobra_map(address_map &map) map(0x2000, 0x27ff).ram().w(FUNC(oscar_state::videoram_w)).share(m_videoram); map(0x2800, 0x2fff).ram().share("spriteram"); map(0x3000, 0x31ff).ram().w(m_palette, FUNC(deco_rmc3_device::write8)).share("palette"); - map(0x3200, 0x37ff).nopw(); /* Unused */ - map(0x3800, 0x3800).portr("IN0"); /* Player 1 */ - map(0x3801, 0x3801).portr("IN1"); /* Player 2 */ - map(0x3802, 0x3802).portr("DSW0"); /* Dip 1 */ - map(0x3803, 0x3803).portr("DSW1"); /* Dip 2 */ + map(0x3200, 0x37ff).nopw(); // Unused + map(0x3800, 0x3800).portr("IN0"); + map(0x3801, 0x3801).portr("IN1"); + map(0x3802, 0x3802).portr("DSW0"); + map(0x3803, 0x3803).portr("DSW1"); map(0x3800, 0x3807).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control0_8bit_w)); map(0x3810, 0x381f).w(m_tilegen[0], FUNC(deco_bac06_device::pf_control1_8bit_w)); - map(0x3a00, 0x3a00).portr("IN2"); /* VBL & coins */ + map(0x3a00, 0x3a00).portr("IN2"); map(0x3a00, 0x3a07).w(m_tilegen[1], FUNC(deco_bac06_device::pf_control0_8bit_w)); map(0x3a10, 0x3a1f).w(m_tilegen[1], FUNC(deco_bac06_device::pf_control1_8bit_w)); map(0x3c00, 0x3c00).w(FUNC(oscar_state::bank_w)); - map(0x3c02, 0x3c02).w(FUNC(oscar_state::buffer_spriteram16_w)); /* DMA */ - map(0x3e00, 0x3e00).w(FUNC(oscar_state::sound_w)); + map(0x3c02, 0x3c02).w(FUNC(oscar_state::buffer_spriteram16_w)); + map(0x3e00, 0x3e00).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0xffff).rom(); } + /******************************************************************************/ -/* Used for Cobra Command, Maze Hunter, Super Real Darwin etc */ +// Used for Cobra Command, Maze Hunter, Super Real Darwin etc void dec8_state_base::dec8_s_map(address_map &map) { map(0x0000, 0x05ff).ram(); @@ -583,7 +608,7 @@ void dec8_state_base::dec8_s_map(address_map &map) map(0x8000, 0xffff).rom(); } -/* Used by Gondomania, Psycho-Nics Oscar & Garyo Retsuden */ +// Used by Gondomania, Psycho-Nics Oscar & Garyo Retsuden void dec8_state_base::oscar_s_map(address_map &map) { map(0x0000, 0x05ff).ram(); @@ -599,7 +624,7 @@ void oscar_state::oscarbl_s_opcodes_map(address_map &map) map(0x8000, 0xffff).rom().region("audiocpu", 0x10000); } -/* Used by Last Mission, Shackled & Breywood */ +// Used by Last Mission, Shackled & Breywood void lastmisn_state::ym3526_s_map(address_map &map) { map(0x0000, 0x05ff).ram(); @@ -609,20 +634,21 @@ void lastmisn_state::ym3526_s_map(address_map &map) map(0x8000, 0xffff).rom(); } -/* Captain Silver - same sound system as Pocket Gal */ +// Captain Silver - same sound system as Pocket Gal void csilver_state::sound_map(address_map &map) { map(0x0000, 0x07ff).ram(); map(0x0800, 0x0801).w("ym1", FUNC(ym2203_device::write)); map(0x1000, 0x1001).w("ym2", FUNC(ym3526_device::write)); - map(0x1800, 0x1800).w(FUNC(csilver_state::adpcm_data_w)); /* ADPCM data for the MSM5205 chip */ + map(0x1800, 0x1800).w(FUNC(csilver_state::adpcm_data_w)); // ADPCM data for the MSM5205 chip map(0x2000, 0x2000).w(FUNC(csilver_state::sound_bank_w)); map(0x3000, 0x3000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); - map(0x3400, 0x3400).r(FUNC(csilver_state::adpcm_reset_r)); /* ? not sure */ + map(0x3400, 0x3400).r(FUNC(csilver_state::adpcm_reset_r)); // ? not sure map(0x4000, 0x7fff).bankr("soundbank"); map(0x8000, 0xffff).rom(); } + /******************************************************************************/ /* @@ -657,132 +683,140 @@ void dec8_mcu_state_base::i8751_port1_w(u8 data) m_i8751_port1 = data; } -void lastmisn_state::gondo_mcu_to_main_w(u8 data) +void ghostb_state::mcu_to_main_w(u8 data) { - // P2 - controls latches for main CPU communication - if ((data&0x10)==0) - m_i8751_port0 = m_i8751_value>>8; - if ((data&0x20)==0) - m_i8751_port1 = m_i8751_value&0xff; - if ((data&0x40)==0) + const u8 fall = ~data & m_i8751_p2; + const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; + + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) + m_i8751_port0 = m_i8751_value >> 8; + if (BIT(fall, 5)) + m_i8751_port1 = m_i8751_value & 0xff; + if (BIT(fall, 6)) m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - if ((data&0x80)==0) + if (BIT(fall, 7)) m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - // P2 - IRQ to main CPU - if (BIT(data, 2) && !BIT(m_i8751_p2, 2) && m_secclr) + // P22: IRQ to main CPU + if (BIT(rise, 2) && m_secclr) m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); - m_i8751_p2 = data; + + // P20,P21: N/C } -void lastmisn_state::shackled_mcu_to_main_w(u8 data) +void lastmisn_state::mcu_to_main_w(u8 data) { - // P2 - controls latches for main CPU communication - if ((data&0x10)==0) + const u8 fall = ~data & m_i8751_p2; + const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; + + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) { - m_i8751_port0 = m_i8751_value>>8; + m_i8751_port0 = m_i8751_value >> 8; - // mcu sets p0 to 0x00 + // lastmisn mcu sets p0 to 0x00 m_mcu->set_port_forced_input(0, m_i8751_port0); } - if ((data&0x20)==0) - m_i8751_port1 = m_i8751_value&0xff; - if ((data&0x40)==0) + if (BIT(fall, 5)) + m_i8751_port1 = m_i8751_value & 0xff; + if (BIT(fall, 6)) m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - if ((data&0x80)==0) + if (BIT(fall, 7)) m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - // P2 - IRQ to main CPU - if (BIT(data, 2) && !BIT(m_i8751_p2, 2)) + // P22: FIRQ to both CPUs + if (BIT(rise, 2)) + { + m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); m_subcpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); + } - if (!BIT(data, 0)) + // P20,P21: clear MCU INT0/1 + if (BIT(~data, 0)) m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE); - if (!BIT(data, 1)) + if (BIT(~data, 1)) m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - - m_i8751_p2 = data; } -/* - Super Real Darwin is similar but only appears to have a single port -*/ - +// Super Real Darwin is similar but only appears to have a single port void srdarwin_state::mcu_to_main_w(u8 data) { - // P2 - controls latches for main CPU communication - if ((data & 0x10) == 0) - { + const u8 fall = ~data & m_i8751_p2; + //const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; + + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) m_i8751_port0 = m_i8751_value >> 8; - } - if ((data & 0x20) == 0) - { - m_i8751_port0 = m_i8751_value & 0xff; - } - if ((data&0x40)==0) + if (BIT(fall, 5)) + m_i8751_port0 = m_i8751_value & 0xff; + if (BIT(fall, 6)) m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - if ((data&0x80)==0) + if (BIT(fall, 7)) m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port0; - // P2 - IRQ to main CPU - if ((data&0x04)==0) - m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); + // P22: maincpu has no IRQ/FIRQ handler - // guess, toggled after above. - if ((data&0x02)==0) - m_maincpu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); + // P21: clear MCU INT1 + if (BIT(~data, 1)) + m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); } void csilver_state::mcu_to_main_w(u8 data) { - if (~data & 0x10) - m_i8751_port0 = m_i8751_value >> 8; + const u8 fall = ~data & m_i8751_p2; + const u8 rise = data & ~m_i8751_p2; + m_i8751_p2 = data; - if (~data & 0x20) + // P24-P27: controls latches for main CPU communication + if (BIT(fall, 4)) + m_i8751_port0 = m_i8751_value >> 8; + if (BIT(fall, 5)) m_i8751_port1 = m_i8751_value & 0xff; + if (BIT(fall, 6)) + m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); + if (BIT(fall, 7)) + m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - if (~data & 0x40) + // P22: FIRQ to both CPUs + if (BIT(rise, 2)) { - m_i8751_return = (m_i8751_return & 0xff) | (m_i8751_port0 << 8); - m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); // FIRQ to main cpu + m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); + m_subcpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); } - if (~data & 0x80) - m_i8751_return = (m_i8751_return & 0xff00) | m_i8751_port1; - - m_i8751_p2 = data; + // P21: clear MCU INT1 + if (BIT(~data, 1)) + m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); } -/******************************************************************************/ - -#define PLAYER1_JOYSTICK /* Player 1 controls */ \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - -#define PLAYER2_JOYSTICK /* Player 2 controls */ \ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL \ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL \ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL \ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL +/******************************************************************************/ -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( lastmisn ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* bomb */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bomb + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL /* bomb */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // bomb + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN2") @@ -795,23 +829,23 @@ static INPUT_PORTS_START( lastmisn ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") + PORT_START("COIN") PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -829,7 +863,7 @@ static INPUT_PORTS_START( lastmisn ) PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") PORT_DIPSETTING( 0x01, "3" ) PORT_DIPSETTING( 0x00, "5" ) - PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") /* tables at 0x82c1 (4 words) and 0xde38 (3 words) in 'lastmisn', 0x82c1 and 0xde17 in 'lastmisno' */ + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") // tables at 0x82c1 (4 words) and 0xde38 (3 words) in 'lastmisn', 0x82c1 and 0xde17 in 'lastmisno' PORT_DIPSETTING( 0x06, "30k 70k 70k+" ) PORT_DIPSETTING( 0x04, "40k 90k 90k+" ) PORT_DIPSETTING( 0x02, "40k and 80k" ) @@ -846,36 +880,42 @@ static INPUT_PORTS_START( lastmisn ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( lastmisnj ) PORT_INCLUDE(lastmisn) PORT_MODIFY("DSW1") - PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") /* tables at 0x82b7 (4 words) and 0xdd29 (3 words) */ + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:2,3") // tables at 0x82b7 (4 words) and 0xdd29 (3 words) PORT_DIPSETTING( 0x06, "30k 50k 50k+" ) PORT_DIPSETTING( 0x04, "30k 70k 70k+" ) PORT_DIPSETTING( 0x02, "50k 100k 100k+" ) PORT_DIPSETTING( 0x00, "50k only" ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:4,5") PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) /* "difficult" */ - PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) /* "very difficult" */ - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) /* "top difficult" */ + PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) // "difficult" + PORT_DIPSETTING( 0x08, DEF_STR( Very_Hard ) ) // "very difficult" + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // "top difficult" PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( shackled ) PORT_START("IN0") - PLAYER1_JOYSTICK + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") - PLAYER2_JOYSTICK + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -891,11 +931,11 @@ static INPUT_PORTS_START( shackled ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") + PORT_START("COIN") PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) PORT_START("DSW0") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1") @@ -904,7 +944,7 @@ static INPUT_PORTS_START( shackled ) PORT_DIPUNUSED( 0x02, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:2") PORT_DIPUNUSED( 0x04, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:3") PORT_DIPUNUSED( 0x08, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:4") - PORT_DIPNAME( 0x10, 0x10, "Leave Off" ) PORT_DIPLOCATION("SW1:5") /* game doesn't boot when this is On - code at 0x401a - related to MCU - "dias" in Dip Switches page */ + PORT_DIPNAME( 0x10, 0x10, "Leave Off" ) PORT_DIPLOCATION("SW1:5") // game doesn't boot when this is On - code at 0x401a - related to MCU - "dias" in Dip Switches page PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:6") @@ -914,8 +954,8 @@ static INPUT_PORTS_START( shackled ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("DSW1") - /* tables in main CPU : 0x859b (Help), 0x85e9 (6-Help), 0x8fbe (Coin), 0x91b6 (Heart) */ - PORT_DIPNAME( 0x07, 0x07, "Coin/Heart/Help/6-Help" ) PORT_DIPLOCATION("SW2:1,2,3") /* name from Dip Switches page */ + // tables in main CPU : 0x859b (Help), 0x85e9 (6-Help), 0x8fbe (Coin), 0x91b6 (Heart) + PORT_DIPNAME( 0x07, 0x07, "Coin/Heart/Help/6-Help" ) PORT_DIPLOCATION("SW2:1,2,3") // name from Dip Switches page PORT_DIPSETTING( 0x00, "2/100/50/200" ) PORT_DIPSETTING( 0x01, "4/100/60/300" ) PORT_DIPSETTING( 0x02, "6/200/70/300" ) @@ -936,12 +976,12 @@ static INPUT_PORTS_START( shackled ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( breywood ) PORT_INCLUDE(shackled) PORT_MODIFY("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, "Power" ) PORT_DIPLOCATION("SW2:1,2,3,4") /* table at 0x41be in sub CPU */ + PORT_DIPNAME( 0x0f, 0x0f, "Power" ) PORT_DIPLOCATION("SW2:1,2,3,4") // table at 0x41be in sub CPU PORT_DIPSETTING( 0x07, "200" ) PORT_DIPSETTING( 0x0b, "300" ) PORT_DIPSETTING( 0x03, "400" ) @@ -961,15 +1001,21 @@ static INPUT_PORTS_START( breywood ) INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( gondo ) PORT_START("IN0") - PLAYER1_JOYSTICK - /* Top 4 bits are rotary controller */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + // Top 4 bits are rotary controller PORT_START("IN1") - PLAYER2_JOYSTICK - /* Top 4 bits are rotary controller */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + // Top 4 bits are rotary controller PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) @@ -991,27 +1037,27 @@ static INPUT_PORTS_START( gondo ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") /* hooked up on the i8751 */ - /* Low 4 bits not connected on schematics */ + PORT_START("COIN") // hooked up on the i8751 + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produces sound but gives 0 credits - coinage not initialised in the MCU */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // produces sound but gives 0 credits - coinage not initialised in the MCU - PORT_START("AN0") /* player 1 12-way rotary control */ + PORT_START("AN0") // player 1 12-way rotary control PORT_BIT( 0x0f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_WRAPS PORT_SENSITIVITY(15) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE PORT_FULL_TURN_COUNT(12) - PORT_START("AN1") /* player 2 12-way rotary control */ + PORT_START("AN1") // player 2 12-way rotary control PORT_BIT( 0x0f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_WRAPS PORT_SENSITIVITY(15) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_N) PORT_CODE_INC(KEYCODE_M) PORT_PLAYER(2) PORT_REVERSE PORT_FULL_TURN_COUNT(12) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* table at 0x01b8 in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") // table at 0x01b8 in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* table at 0x01bc in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") // table at 0x01bc in MCU (4 bytes : coins in 4 MSbits and credits in 4 LSbits) PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) @@ -1023,7 +1069,7 @@ static INPUT_PORTS_START( gondo ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Swap buttons" ) PORT_DIPLOCATION("SW1:8") /* code at 0x8a2b in 'gondo', 0x88c5 in 'makyosen' - undocumented in the manual */ + PORT_DIPNAME( 0x80, 0x80, "Swap buttons" ) PORT_DIPLOCATION("SW1:8") // code at 0x8a2b in 'gondo', 0x88c5 in 'makyosen' - undocumented in the manual PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -1032,7 +1078,7 @@ static INPUT_PORTS_START( gondo ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "5" ) - PORT_DIPSETTING( 0x00, "99 (Cheat)") // gives 99 lives + PORT_DIPSETTING( 0x00, "99 (Cheat)") // gives 99 lives PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) @@ -1047,28 +1093,34 @@ static INPUT_PORTS_START( gondo ) INPUT_PORTS_END -/* verified from HD6309 code - coinage needs further checking when the MCU is available */ +// verified from HD6309 code static INPUT_PORTS_START( garyoret ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* bomb */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // bomb PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* bomb */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // bomb PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - PORT_START("I8751") /* hooked up on the (fake) i8751 */ + PORT_START("COIN") // hooked up on the i8751 PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produces sound but gives 0 credits - coinage not initialised in the (fake) MCU */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // produces sound but gives 0 credits - coinage not initialised in the MCU PORT_START("DSW0") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") @@ -1088,7 +1140,7 @@ static INPUT_PORTS_START( garyoret ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:8") /* not tested - no cocktail when simultaneous players anyway */ + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:8") // not tested - no cocktail when simultaneous players anyway PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1") @@ -1102,26 +1154,32 @@ static INPUT_PORTS_START( garyoret ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPUNUSED( 0x10, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:5") PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:6") - PORT_DIPNAME( 0x40, 0x40, "Leave Off" ) PORT_DIPLOCATION("SW2:7") /* game doesn't boot when this is On - code at 0x807f and test at 0x819e */ + PORT_DIPNAME( 0x40, 0x40, "Leave Off" ) PORT_DIPLOCATION("SW2:7") // game doesn't boot when this is On - code at 0x807f and test at 0x819e PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( ghostb ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* "FIRE" */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* beam / upgradable shot when out of energy */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // "FIRE" + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // beam / upgradable shot when out of energy PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* "FIRE" */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* beam / upgradable shot when out of energy */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // "FIRE" + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // beam / upgradable shot when out of energy PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1135,22 +1193,25 @@ static INPUT_PORTS_START( ghostb ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("I8751") - /* Low 4 bits not connected on schematics */ + PORT_START("COIN") + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produce sound but gives 0 credits - "ANDA" instruction at 0x8a5a */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // produce sound but gives 0 credits - "ANDA" instruction at 0x8a5a PORT_START("DSW0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // Tested on real hardware PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) // 1-2 should be coinage. PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) - // PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - // PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) - // PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // Tested on real hardware + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) + // 1-2 should be coinage. +// PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") +// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) +// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) +// PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) +// PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) - // PORT_DIPLOCATION("SW1:3") // Manual says 'Must Be Off'. Note: Turning on 3+4+5+8 does nothing on real hardware. +// PORT_DIPLOCATION("SW1:3") // Manual says 'Must Be Off'. Note: Turning on 3+4+5+8 does nothing on real hardware. PORT_DIPUNUSED( 0x04, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:4") // Manual says 'Must Be Off'. See note PORT_DIPUNUSED( 0x10, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:5") // Manual says 'Must Be Off'. See note PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6") @@ -1162,17 +1223,17 @@ static INPUT_PORTS_START( ghostb ) PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:8") // not tested - no cocktail when simultaneous players anyway. Manual says 'Must Be Off'. See note PORT_START("DSW1") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") /* lives are added when STARTn is pressed */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") // lives are added when STARTn is pressed PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "5" ) - PORT_DIPSETTING( 0x00, "Invulnerability (Cheat)") // gives 1 life and energy does not decrease + PORT_DIPSETTING( 0x00, "Invulnerability (Cheat)") // gives 1 life and energy does not decrease PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x30, 0x30, "Max Scene Time" ) PORT_DIPLOCATION("SW2:5,6") /* 1:00 is added when STARTn is pressed until max scene time is reached */ + PORT_DIPNAME( 0x30, 0x30, "Max Scene Time" ) PORT_DIPLOCATION("SW2:5,6") // 1:00 is added when STARTn is pressed until max scene time is reached PORT_DIPSETTING( 0x00, "4:00" ) PORT_DIPSETTING( 0x10, "4:30" ) PORT_DIPSETTING( 0x30, "5:00" ) @@ -1180,45 +1241,45 @@ static INPUT_PORTS_START( ghostb ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x40, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") /* energy is set to value each new life */ - PORT_DIPSETTING( 0x80, DEF_STR( None ) ) /* 0x0100 */ - PORT_DIPSETTING( 0x00, "+25%" ) /* 0x0140 */ + PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") // energy is set to value each new life + PORT_DIPSETTING( 0x80, DEF_STR( None ) ) // 0x0100 + PORT_DIPSETTING( 0x00, "+25%" ) // 0x0140 INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( ghostb2a ) PORT_INCLUDE(ghostb) - /* BUTTON1 : upgradable shot - BUTTON2 : beam (provided you have energy) */ + // BUTTON1 : upgradable shot - BUTTON2 : beam (provided you have energy) - PORT_MODIFY("I8751") - /* Low 4 bits not connected on schematics */ + PORT_MODIFY("COIN") + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) /* produce sound but gives 0 lives - "ANDA" instruction at 0x8a20 */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // produce sound but gives 0 lives - "ANDA" instruction at 0x8a20 PORT_MODIFY("DSW0") - /* NO start buttons - to start a game, press any button from any player */ + // NO start buttons - to start a game, press any button from any player PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) -// 1 & 2 should be coinage -// PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") -// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) -// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) -// PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) -// PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) + // 1 & 2 should be coinage +// PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") +// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) +// PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) +// PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) +// PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_MODIFY("DSW1") - /* lives are added when COINn is pressed */ - /* 1:00 is added when COINn is pressed until max scene time is reached */ - PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") /* energy is added when COINn is pressed */ - PORT_DIPSETTING( 0x80, DEF_STR( None ) ) /* 0x0040 */ - PORT_DIPSETTING( 0x00, "+50%" ) /* 0x0060 */ + // lives are added when COINn is pressed + // 1:00 is added when COINn is pressed until max scene time is reached + PORT_DIPNAME( 0x80, 0x80, "Energy Bonus" ) PORT_DIPLOCATION("SW2:8") // energy is added when COINn is pressed + PORT_DIPSETTING( 0x80, DEF_STR( None ) ) // 0x0040 + PORT_DIPSETTING( 0x00, "+50%" ) // 0x0060 INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( ghostb3 ) PORT_INCLUDE(ghostb2a) @@ -1227,11 +1288,11 @@ static INPUT_PORTS_START( ghostb3 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) /* upgradable shot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) /* beam (provided you have energy) */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) // upgradable shot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) // beam (provided you have energy) - PORT_MODIFY("I8751") - /* Low 4 bits not connected on schematics */ + PORT_MODIFY("COIN") + // Low 4 bits not connected on schematics PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -1239,24 +1300,24 @@ static INPUT_PORTS_START( ghostb3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( meikyuh ) PORT_INCLUDE(ghostb) - PORT_MODIFY("I8751") + PORT_MODIFY("COIN") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 ) /* gives 4 credits for 14 coins ! */ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) - /* BUTTON1 : upgradable shot - BUTTON2 : circular fire (provided you have energy) - BUTTON1 + BUTTON2 : beam (provided you have energy) */ + // BUTTON1 : upgradable shot - BUTTON2 : circular fire (provided you have energy) - BUTTON1 + BUTTON2 : beam (provided you have energy) PORT_MODIFY("DSW1") - /* lives are added when STARTn is pressed - 1 extra life is awarded on 2nd credit and after for the same player who gets then 2, 4 or 6 additional lives */ - /* max time scene is always 6:00 at start - 0:30 is subed every 8 levels - 1:00 is added when STARTn is pressed until max scene time is reached */ - PORT_DIPNAME( 0x10, 0x10, "Energy Bonus" ) PORT_DIPLOCATION("SW2:5") /* energy is added when STARTn is pressed */ - PORT_DIPSETTING( 0x10, DEF_STR( None ) ) /* 0x0020 */ - PORT_DIPSETTING( 0x00, "+50%" ) /* 0x0030 */ + // lives are added when STARTn is pressed - 1 extra life is awarded on 2nd credit and after for the same player who gets then 2, 4 or 6 additional lives + // max time scene is always 6:00 at start - 0:30 is subed every 8 levels - 1:00 is added when STARTn is pressed until max scene time is reached + PORT_DIPNAME( 0x10, 0x10, "Energy Bonus" ) PORT_DIPLOCATION("SW2:5") // energy is added when STARTn is pressed + PORT_DIPSETTING( 0x10, DEF_STR( None ) ) // 0x0020 + PORT_DIPSETTING( 0x00, "+50%" ) // 0x0030 PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:6") PORT_DIPNAME( 0x80, 0x80, "Freeze" ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) @@ -1264,19 +1325,25 @@ static INPUT_PORTS_START( meikyuh ) INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( csilver ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* sword */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* jump */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // sword + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // jump PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* sword */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL /* jump */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // sword + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // jump PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1290,13 +1357,20 @@ static INPUT_PORTS_START( csilver ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) + PORT_START("COIN") // hooked up on the i8751 + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) @@ -1327,30 +1401,23 @@ static INPUT_PORTS_START( csilver ) PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:6") - PORT_DIPNAME( 0x40, 0x40, "No Key for Door (Cheat)") PORT_DIPLOCATION("SW2:7") /* code at 0x9816 in sub CPU */ + PORT_DIPNAME( 0x40, 0x40, "No Key for Door (Cheat)") PORT_DIPLOCATION("SW2:7") // code at 0x9816 in sub CPU PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") - - PORT_START("I8751") /* hooked up on the i8751 */ - PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( csilverj ) PORT_INCLUDE(csilver) PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) @@ -1358,26 +1425,31 @@ static INPUT_PORTS_START( csilverj ) INPUT_PORTS_END - -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( oscar ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* jump */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // jump + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* shoot */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL /* jump */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL /* select */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // shoot + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // jump + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // select PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<1>)) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<0>)) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_WRITE_LINE_DEVICE_MEMBER("coin", FUNC(input_merger_device::in_w<2>)) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1386,12 +1458,12 @@ static INPUT_PORTS_START( oscar ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* table at 0xf8e3 (4 * 2 bytes : coins then credits) */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") // table at 0xf8e3 (4 * 2 bytes : coins then credits) PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* table at 0xf8eb (4 * 2 bytes : coins then credits) */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") // table at 0xf8eb (4 * 2 bytes : coins then credits) PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) @@ -1420,12 +1492,12 @@ static INPUT_PORTS_START( oscar ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6") /* tables at 0x82d8 (4 words) and 0xf3fe (3 words) */ + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6") // tables at 0x82d8 (4 words) and 0xf3fe (3 words) PORT_DIPSETTING( 0x30, "40k 100k 60k+" ) PORT_DIPSETTING( 0x20, "60k 160k 100k+" ) PORT_DIPSETTING( 0x10, "90k 240k 150k+" ) PORT_DIPSETTING( 0x00, "50k only" ) - PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:7") /* not when falling into void or water - also gives infinite time */ + PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:7") // not when falling into void or water - also gives infinite time PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8") @@ -1433,27 +1505,27 @@ static INPUT_PORTS_START( oscar ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) INPUT_PORTS_END -/* verified from HD6309 code */ +// verified from HD6309 code static INPUT_PORTS_START( oscarj ) PORT_INCLUDE(oscar) PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* table at 0xf8d6 (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8e6 in 'oscarj2', 0xf8f2 in 'oscaru' */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") // table at 0xf8d6 (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8e6 in 'oscarj2', 0xf8f2 in 'oscaru' PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* table at 0xf8de (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8ee in 'oscarj2', 0xf8fa in 'oscaru' */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") // table at 0xf8de (4 * 2 bytes : coins then credits) in 'oscarj1', 0xf8ee in 'oscarj2', 0xf8fa in 'oscaru' PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) - /* bonus lives : tables at 0x82d8 (4 words) and 0xf3f1 (3 words) in 'oscarj1', 0x82de and 0xf401 in 'orscarj2', 0x82d8 and 0xf412 in 'orscaru' - same as in 'oscar' */ + // bonus lives : tables at 0x82d8 (4 words) and 0xf3f1 (3 words) in 'oscarj1', 0x82de and 0xf401 in 'orscarj2', 0x82d8 and 0xf412 in 'orscaru' - same as in 'oscar' INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( srdarwin ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY @@ -1475,20 +1547,19 @@ static INPUT_PORTS_START( srdarwin ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("I8751") /* hooked up on the i8751 */ - PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_START("COIN") // hooked up on the i8751 + PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) @@ -1516,9 +1587,9 @@ static INPUT_PORTS_START( srdarwin ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5") - PORT_DIPSETTING( 0x10, "Every 50k" ) /* table at 0xab06 - last bonus life at 850k */ - PORT_DIPSETTING( 0x00, "Every 100k" ) /* table at 0xab17 - last bonus life at 900k */ - PORT_DIPNAME( 0x20, 0x20, "After Stage 10" ) PORT_DIPLOCATION("SW2:6") /* code at 0xab94 */ + PORT_DIPSETTING( 0x10, "Every 50k" ) // table at 0xab06 - last bonus life at 850k + PORT_DIPSETTING( 0x00, "Every 100k" ) // table at 0xab17 - last bonus life at 900k + PORT_DIPNAME( 0x20, 0x20, "After Stage 10" ) PORT_DIPLOCATION("SW2:6") // code at 0xab94 PORT_DIPSETTING( 0x20, "Back to Stage 1" ) PORT_DIPSETTING( 0x00, "Game Over" ) PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:7") @@ -1527,17 +1598,17 @@ static INPUT_PORTS_START( srdarwin ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) INPUT_PORTS_END -/* verified from M6809 code - coinage needs further checking when the MCU is available */ +// verified from M6809 code static INPUT_PORTS_START( srdarwinj ) PORT_INCLUDE(srdarwin) PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) @@ -1545,26 +1616,32 @@ static INPUT_PORTS_START( srdarwinj ) INPUT_PORTS_END -/* verified from M6809 code */ +// verified from M6809 code static INPUT_PORTS_START( cobracom ) PORT_START("IN0") - PLAYER1_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* fire */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* missile */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // fire + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // missile PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("IN1") - PLAYER2_JOYSTICK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* fire */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* missile */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // fire + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // missile PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* always adds 1 credit */ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) // always adds 1 credit PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1572,17 +1649,17 @@ static INPUT_PORTS_START( cobracom ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("screen", FUNC(screen_device::vblank)) PORT_START("DSW0") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") /* code at 0x88b7 in 'cobracom', 0x890e in 'cobracomj' */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2") // code at 0x88b7 in 'cobracom', 0x890e in 'cobracomj' PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") /* code at 0x889b in 'cobracom', 0x88f2 in 'cobracomj' */ + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4") // code at 0x889b in 'cobracom', 0x88f2 in 'cobracomj' PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") // Manual says 'Off' + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") // Manual says 'Off' PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6") @@ -1600,7 +1677,7 @@ static INPUT_PORTS_START( cobracom ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x02, "4" ) PORT_DIPSETTING( 0x01, "5" ) - PORT_DIPSETTING( 0x00, "99 (Cheat)") /* lose a life before getting 2nd bonus life ! */ + PORT_DIPSETTING( 0x00, "99 (Cheat)") // lose a life before getting 2nd bonus life ! PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:3,4") PORT_DIPSETTING( 0x08, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) ) @@ -1609,13 +1686,14 @@ static INPUT_PORTS_START( cobracom ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x00, DEF_STR( No ) ) PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:6") /* table at 0xa898 (2* 2 words) in 'cobracomj', 0xa8fe in 'cobracomj' */ + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:6") // table at 0xa898 (2* 2 words) in 'cobracomj', 0xa8fe in 'cobracomj' PORT_DIPSETTING( 0x20, "50k and 150k" ) PORT_DIPSETTING( 0x00, "100k and 200k" ) PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:7") - PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") /* previously "Freeze" : code at 0x8849 in 'cobracomj', 0x88a0 in 'cobracomj' */ + PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW2:8") // previously "Freeze" : code at 0x8849 in 'cobracomj', 0x88a0 in 'cobracomj' INPUT_PORTS_END + /******************************************************************************/ static const gfx_layout charlayout_32k = @@ -1626,7 +1704,7 @@ static const gfx_layout charlayout_32k = { 0x4000*8,0x0000*8 }, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every sprite takes 8 consecutive bytes */ + 8*8 // every sprite takes 8 consecutive bytes }; static const gfx_layout chars_3bpp = @@ -1637,19 +1715,19 @@ static const gfx_layout chars_3bpp = { 0x6000*8,0x4000*8,0x2000*8 }, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every sprite takes 8 consecutive bytes */ + 8*8 // every sprite takes 8 consecutive bytes }; -/* SRDarwin characters - very unusual layout for Data East */ +// SRDarwin characters - very unusual layout for Data East static const gfx_layout charlayout_16k = { - 8,8, /* 8*8 characters */ + 8,8, // 8*8 characters 1024, - 2, /* 2 bits per pixel */ - { 0, 4 }, /* the two bitplanes for 4 pixels are packed into one byte */ + 2, // 2 bits per pixel + { 0, 4 }, // the two bitplanes for 4 pixels are packed into one byte { 0x2000*8+0, 0x2000*8+1, 0x2000*8+2, 0x2000*8+3, 0, 1, 2, 3 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every char takes 8 consecutive bytes */ + 8*8 // every char takes 8 consecutive bytes }; static const gfx_layout oscar_charlayout = @@ -1660,10 +1738,10 @@ static const gfx_layout oscar_charlayout = { 0x3000*8,0x2000*8,0x1000*8 }, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every sprite takes 8 consecutive bytes */ + 8*8 // every sprite takes 8 consecutive bytes }; -/* Darwin sprites - only 3bpp */ +// Darwin sprites - only 3bpp static const gfx_layout sr_sprites = { 16,16, @@ -1687,7 +1765,7 @@ static const gfx_layout srdarwin_tiles = 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+1024*8*8+0, 16*8+1024*8*8+1, 16*8+1024*8*8+2, 16*8+1024*8*8+3 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, - 32*8 /* every tile takes 32 consecutive bytes */ + 32*8 // every tile takes 32 consecutive bytes }; static const gfx_layout tiles = @@ -1702,7 +1780,7 @@ static const gfx_layout tiles = 16*16 }; -/* X flipped on Ghostbusters tiles */ +// X flipped on Ghostbusters tiles static const gfx_layout tiles_r = { 16,16, @@ -1731,7 +1809,7 @@ static GFXDECODE_START( gfx_ghostb ) GFXDECODE_END static GFXDECODE_START( gfx_srdarwin ) - GFXDECODE_ENTRY( "char", 0x00000, charlayout_16k, 128, 4 ) /* Only 1 used so far :/ */ + GFXDECODE_ENTRY( "char", 0x00000, charlayout_16k, 128, 4 ) // Only 1 used so far :/ GFXDECODE_ENTRY( "sprites", 0x00000, sr_sprites, 64, 8 ) GFXDECODE_ENTRY( "tiles1", 0x00000, srdarwin_tiles, 0, 8 ) GFXDECODE_ENTRY( "tiles1", 0x10000, srdarwin_tiles, 0, 8 ) @@ -1740,21 +1818,21 @@ static GFXDECODE_START( gfx_srdarwin ) GFXDECODE_END static GFXDECODE_START( gfx_gondo ) - GFXDECODE_ENTRY( "char", 0, chars_3bpp, 0, 16 ) /* Chars */ - GFXDECODE_ENTRY( "tiles1", 0, tiles, 768, 16 ) /* Tiles */ + GFXDECODE_ENTRY( "char", 0, chars_3bpp, 0, 16 ) // Chars + GFXDECODE_ENTRY( "tiles1", 0, tiles, 768, 16 ) // Tiles GFXDECODE_END static GFXDECODE_START( gfx_gondo_spr ) - GFXDECODE_ENTRY( "sprites", 0, tiles, 256, 32 ) /* Sprites */ + GFXDECODE_ENTRY( "sprites", 0, tiles, 256, 32 ) // Sprites GFXDECODE_END static GFXDECODE_START( gfx_oscar ) - GFXDECODE_ENTRY( "char", 0, oscar_charlayout, 256, 8 ) /* Chars */ - GFXDECODE_ENTRY( "tiles1", 0, tiles, 384, 8 ) /* Tiles */ + GFXDECODE_ENTRY( "char", 0, oscar_charlayout, 256, 8 ) // Chars + GFXDECODE_ENTRY( "tiles1", 0, tiles, 384, 8 ) // Tiles GFXDECODE_END static GFXDECODE_START( gfx_oscar_spr ) - GFXDECODE_ENTRY( "sprites", 0, tiles, 0, 16 ) /* Sprites */ + GFXDECODE_ENTRY( "sprites", 0, tiles, 0, 16 ) // Sprites GFXDECODE_END static GFXDECODE_START( gfx_shackled ) @@ -1766,9 +1844,10 @@ static GFXDECODE_START( gfx_shackled_spr ) GFXDECODE_ENTRY( "sprites", 0, tiles, 256, 16 ) GFXDECODE_END + /******************************************************************************/ -/* Coins generate NMI's */ +// Coins generate NMI's void oscar_state::coin_irq(int state) { if (state && !m_coin_state) @@ -1788,19 +1867,16 @@ void lastmisn_state::shackled_coin_irq(int state) m_coin_state = bool(state); } -/******************************************************************************/ +/******************************************************************************/ void dec8_state_base::machine_start() { u8 *ROM = memregion("maincpu")->base(); - uint32_t max_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; + u32 max_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; m_mainbank->configure_entries(0, max_bank, &ROM[0x10000], 0x4000); - m_6502_timer = timer_alloc(FUNC(dec8_state_base::audiocpu_nmi_clear), this); - save_item(NAME(m_coin_state)); - save_item(NAME(m_scroll)); } @@ -1814,7 +1890,6 @@ void dec8_mcu_state_base::machine_start() { dec8_state_base::machine_start(); - m_i8751_timer = timer_alloc(FUNC(dec8_mcu_state_base::mcu_irq_clear), this); m_i8751_p2 = 0xff; save_item(NAME(m_i8751_p2)); @@ -1833,16 +1908,19 @@ void dec8_mcu_state_base::machine_reset() } -void lastmisn_state::machine_start() +void ghostb_state::machine_start() { - dec8_mcu_state_base::machine_start(); + lastmisn_state::machine_start(); + + m_6502_timer = timer_alloc(FUNC(ghostb_state::audiocpu_nmi_clear), this); + m_i8751_timer = timer_alloc(FUNC(ghostb_state::mcu_irq_clear), this); save_item(NAME(m_secclr)); } -void lastmisn_state::machine_reset() +void ghostb_state::machine_reset() { - dec8_state_base::machine_reset(); + lastmisn_state::machine_reset(); // reset clears LS273 latch, which disables NMI if (m_nmigate.found()) @@ -1871,46 +1949,46 @@ void csilver_state::machine_reset() // DECO video CRTC, unverified -void dec8_state_base::set_screen_raw_params_data_east(machine_config &config) +void dec8_state_base::set_screen_raw_params(machine_config &config) { - m_screen->set_raw(XTAL(12'000'000)/2,384,0,256,272,8,248); +// m_screen->set_refresh_hz(58); +// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); // 58Hz, 529us Vblank duration +// m_screen->set_size(32*8, 32*8); +// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); + m_screen->set_raw(12_MHz_XTAL / 2, 384, 0, 256, 272, 8, 248); } void lastmisn_state::lastmisn(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); // MC68B09EP in schematics m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::lastmisn_map); - MC6809E(config, m_subcpu, 2000000); + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); // MC68B09EP in schematics m_subcpu->set_addrmap(AS_PROGRAM, &lastmisn_state::lastmisn_sub_map); - R65C02(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 12_MHz_XTAL / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::shackled_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); config.set_maximum_quantum(attotime::from_hz(12000)); INPUT_MERGER_ANY_LOW(config, "coin").output_handler().set(FUNC(lastmisn_state::shackled_coin_irq)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_lastmisn)); m_screen->set_palette(m_palette); @@ -1919,58 +1997,58 @@ void lastmisn_state::lastmisn(machine_config &config) MCFG_VIDEO_START_OVERRIDE(lastmisn_state,lastmisn) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } void lastmisn_state::shackled(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::shackled_map); - MC6809E(config, m_subcpu, 2000000); + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); m_subcpu->set_addrmap(AS_PROGRAM, &lastmisn_state::shackled_sub_map); - R65C02(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 12_MHz_XTAL / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::ym3526_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::shackled_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); -// config.set_maximum_quantum(attotime::from_hz(100000)); config.set_perfect_quantum(m_maincpu); // needs heavy sync, otherwise one of the two CPUs will miss an IRQ and cause the game to hang INPUT_MERGER_ANY_LOW(config, "coin").output_handler().set(FUNC(lastmisn_state::shackled_coin_irq)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_shackled)); m_screen->set_palette(m_palette); @@ -1979,54 +2057,58 @@ void lastmisn_state::shackled(machine_config &config) MCFG_VIDEO_START_OVERRIDE(lastmisn_state,shackled) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } void gondo_state::gondo(machine_config &config) { - /* basic machine hardware */ - HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */ + // basic machine hardware + HD6309E(config, m_maincpu, 3'000'000); // HD63C09EP m_maincpu->set_addrmap(AS_PROGRAM, &gondo_state::gondo_map); - R65C02(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &gondo_state::oscar_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &gondo_state::oscar_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(gondo_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(gondo_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(gondo_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(gondo_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(gondo_state::gondo_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_out_cb<2>().set(FUNC(gondo_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); + + config.set_maximum_quantum(attotime::from_hz(6000)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_gondo_spr); m_spritegen_krn->set_colpri_callback(FUNC(gondo_state::gondo_colpri_cb)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529us Vblank duration */); -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(gondo_state::screen_update_gondo)); m_screen->screen_vblank().set(FUNC(gondo_state::screen_vblank)); m_screen->screen_vblank().append(m_nmigate, FUNC(input_merger_device::in_w<1>)); + m_screen->screen_vblank().append_inputline(m_mcu, MCS51_INT0_LINE); m_screen->set_palette(m_palette); INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2034,53 +2116,56 @@ void gondo_state::gondo(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_gondo); DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3526_device &ym2(YM3526(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.50); } -void lastmisn_state::garyoret(machine_config &config) +void ghostb_state::garyoret(machine_config &config) { - /* basic machine hardware */ - HD6309E(config, m_maincpu, 3000000); /* HD63C09EP */ - m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::garyoret_map); + // basic machine hardware + HD6309E(config, m_maincpu, 3'000'000); // HD63C09EP + m_maincpu->set_addrmap(AS_PROGRAM, &ghostb_state::garyoret_map); - R65C02(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::oscar_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &ghostb_state::oscar_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); - m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); - m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); - m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); - m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::gondo_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + I8751(config, m_mcu, 8_MHz_XTAL); + m_mcu->port_in_cb<0>().set(FUNC(ghostb_state::i8751_port0_r)); + m_mcu->port_out_cb<0>().set(FUNC(ghostb_state::i8751_port0_w)); + m_mcu->port_in_cb<1>().set(FUNC(ghostb_state::i8751_port1_r)); + m_mcu->port_out_cb<1>().set(FUNC(ghostb_state::i8751_port1_w)); + m_mcu->port_out_cb<2>().set(FUNC(ghostb_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); + + config.set_maximum_quantum(attotime::from_hz(6000)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_gondo_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529us Vblank duration */); -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); - m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_garyoret)); - m_screen->screen_vblank().set(FUNC(lastmisn_state::screen_vblank)); + set_screen_raw_params(config); + m_screen->set_screen_update(FUNC(ghostb_state::screen_update_garyoret)); + m_screen->screen_vblank().set(FUNC(ghostb_state::screen_vblank)); m_screen->screen_vblank().append(m_nmigate, FUNC(input_merger_device::in_w<1>)); + m_screen->screen_vblank().append_inputline(m_mcu, MCS51_INT0_LINE); m_screen->set_palette(m_palette); INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2088,42 +2173,48 @@ void lastmisn_state::garyoret(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_gondo); DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting - MCFG_VIDEO_START_OVERRIDE(lastmisn_state,garyoret) + MCFG_VIDEO_START_OVERRIDE(ghostb_state,garyoret) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3526_device &ym2(YM3526(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3526_device &ym2(YM3526(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } -void lastmisn_state::ghostb(machine_config &config) +void ghostb_state::ghostb(machine_config &config) { - /* basic machine hardware */ - HD6309E(config, m_maincpu, XTAL(12'000'000) / 4); /* HD63C09EP, clock verified */ - m_maincpu->set_addrmap(AS_PROGRAM, &lastmisn_state::meikyuh_map); + // basic machine hardware + HD6309E(config, m_maincpu, 12_MHz_XTAL / 4); // HD63C09EP, clock verified + m_maincpu->set_addrmap(AS_PROGRAM, &ghostb_state::ghostb_map); - DECO_222(config, m_audiocpu, XTAL(12'000'000) / 8); /* also seen with stock M6502, clock verified */ - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::dec8_s_map); /* NMIs are caused by the main CPU */ + DECO_222(config, m_audiocpu, 12_MHz_XTAL / 8); // also seen with stock M6502, clock verified + m_audiocpu->set_addrmap(AS_PROGRAM, &ghostb_state::dec8_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); /* 8.0MHz OSC next to MCU - clock verified */ - m_mcu->port_in_cb<0>().set(FUNC(lastmisn_state::i8751_port0_r)); - m_mcu->port_out_cb<0>().set(FUNC(lastmisn_state::i8751_port0_w)); - m_mcu->port_in_cb<1>().set(FUNC(lastmisn_state::i8751_port1_r)); - m_mcu->port_out_cb<1>().set(FUNC(lastmisn_state::i8751_port1_w)); - m_mcu->port_out_cb<2>().set(FUNC(lastmisn_state::gondo_mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + I8751(config, m_mcu, 8_MHz_XTAL); // 8.0MHz OSC next to MCU - clock verified + m_mcu->port_in_cb<0>().set(FUNC(ghostb_state::i8751_port0_r)); + m_mcu->port_out_cb<0>().set(FUNC(ghostb_state::i8751_port0_w)); + m_mcu->port_in_cb<1>().set(FUNC(ghostb_state::i8751_port1_r)); + m_mcu->port_out_cb<1>().set(FUNC(ghostb_state::i8751_port1_w)); + m_mcu->port_out_cb<2>().set(FUNC(ghostb_state::mcu_to_main_w)); + m_mcu->port_in_cb<3>().set_ioport("COIN"); + + config.set_maximum_quantum(attotime::from_hz(6000)); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_BAC06(config, m_tilegen[0], 0); @@ -2133,81 +2224,79 @@ void lastmisn_state::ghostb(machine_config &config) DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529) /* 58Hz, 529us Vblank duration */); -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); - m_screen->set_screen_update(FUNC(lastmisn_state::screen_update_ghostb)); - m_screen->screen_vblank().set(FUNC(lastmisn_state::screen_vblank)); + set_screen_raw_params(config); + m_screen->set_screen_update(FUNC(ghostb_state::screen_update_ghostb)); + m_screen->screen_vblank().set(FUNC(ghostb_state::screen_vblank)); m_screen->screen_vblank().append([this] (int state) { if (state && m_nmi_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); }); + m_screen->screen_vblank().append_inputline(m_mcu, MCS51_INT0_LINE); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ghostb); DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting m_palette->set_prom_region("proms"); m_palette->set_init(m_palette, FUNC(deco_rmc3_device::palette_init_proms)); - MCFG_VIDEO_START_OVERRIDE(lastmisn_state,ghostb) + MCFG_VIDEO_START_OVERRIDE(ghostb_state,ghostb) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000) / 8)); // clock verified - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); // clock verified + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3812_device &ym2(YM3812(config, "ym2", XTAL(12'000'000) / 4)); // clock verified - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3812_device &ym2(YM3812(config, "ym2", 12_MHz_XTAL / 4)); // clock verified + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } -void lastmisn_state::meikyuh(machine_config &config) +void ghostb_state::meikyuh(machine_config &config) { ghostb(config); - R65C02(config.replace(), m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &lastmisn_state::dec8_s_map); + + R65C02(config.replace(), m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &ghostb_state::dec8_s_map); } void csilver_state::csilver(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, XTAL(12'000'000)/8); /* verified on pcb */ + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); // verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &csilver_state::main_map); - MC6809E(config, m_subcpu, XTAL(12'000'000)/8); /* verified on pcb */ + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); // verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &csilver_state::sub_map); - R65C02(config, m_audiocpu, XTAL(12'000'000)/8); /* verified on pcb */ - m_audiocpu->set_addrmap(AS_PROGRAM, &csilver_state::sound_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 12_MHz_XTAL / 8); // verified on pcb + m_audiocpu->set_addrmap(AS_PROGRAM, &csilver_state::sound_map); // NMIs are caused by the main CPU config.set_maximum_quantum(attotime::from_hz(6000)); - I8751(config, m_mcu, XTAL(8'000'000)); + I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set(FUNC(csilver_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(csilver_state::i8751_port0_w)); m_mcu->port_in_cb<1>().set(FUNC(csilver_state::i8751_port1_r)); m_mcu->port_out_cb<1>().set(FUNC(csilver_state::i8751_port1_w)); m_mcu->port_out_cb<2>().set(FUNC(csilver_state::mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_in_cb<3>().set_ioport("COIN"); config.set_perfect_quantum(m_maincpu); - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_KARNOVSPRITES(config, m_spritegen_krn, 0, m_palette, gfx_shackled_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(csilver_state::screen_update_lastmisn)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_subcpu, INPUT_LINE_NMI); @@ -2217,44 +2306,44 @@ void csilver_state::csilver(machine_config &config) MCFG_VIDEO_START_OVERRIDE(csilver_state,lastmisn) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000)/8)); /* verified on pcb */ - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); // verified on pcb + ym1.add_route(0, "mono", 0.10); + ym1.add_route(1, "mono", 0.10); + ym1.add_route(2, "mono", 0.10); ym1.add_route(3, "mono", 0.20); - ym3526_device &ym2(YM3526(config, "ym2", XTAL(12'000'000)/4)); /* verified on pcb */ - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); // verified on pcb + ym2.add_route(ALL_OUTPUTS, "mono", 0.40); - MSM5205(config, m_msm, XTAL(384'000)); /* verified on pcb */ - m_msm->vck_legacy_callback().set(FUNC(csilver_state::adpcm_int)); /* interrupt function */ - m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8KHz */ - m_msm->add_route(ALL_OUTPUTS, "mono", 0.88); + MSM5205(config, m_msm, 384_kHz_XTAL); // verified on pcb + m_msm->vck_legacy_callback().set(FUNC(csilver_state::adpcm_int)); // interrupt function + m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8KHz + m_msm->add_route(ALL_OUTPUTS, "mono", 0.80); } void oscar_state::oscar(machine_config &config) { - /* basic machine hardware */ - HD6309(config, m_maincpu, XTAL(12'000'000)/2); /* PCB seen both HD6309EP or MC6809EP, clock verified on pcb */ + // basic machine hardware + MC6809E(config, m_maincpu, 12_MHz_XTAL / 8); // PCB seen both HD6309EP or MC6809EP, clock verified on pcb m_maincpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_map); - HD6309(config, m_subcpu, XTAL(12'000'000)/2); /* PCB seen both HD6309EP or MC6809EP, clock verified on pcb */ + MC6809E(config, m_subcpu, 12_MHz_XTAL / 8); // PCB seen both HD6309EP or MC6809EP, clock verified on pcb m_subcpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_sub_map); - DECO_222(config, m_audiocpu, XTAL(12'000'000)/8); // IC labeled "C10707-1" - m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); /* NMIs are caused by the main CPU */ + DECO_222(config, m_audiocpu, 12_MHz_XTAL / 8); // IC labeled "C10707-1" + m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); // NMIs are caused by the main CPU - config.set_maximum_quantum(attotime::from_hz(2400)); /* 40 CPU slices per frame */ + config.set_maximum_quantum(attotime::from_hz(6000)); INPUT_MERGER_ANY_LOW(config, "coin").output_handler().set(FUNC(oscar_state::coin_irq)); // 1S1588 x3 (D1-D3) + RCDM-I5 - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_BAC06(config, m_tilegen[0], 0); @@ -2265,11 +2354,7 @@ void oscar_state::oscar(machine_config &config) DECO_MXC06(config, m_spritegen_mxc, 0, m_palette, gfx_oscar_spr); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(oscar_state::screen_update_oscar)); m_screen->set_palette(m_palette); @@ -2278,58 +2363,58 @@ void oscar_state::oscar(machine_config &config) MCFG_VIDEO_START_OVERRIDE(oscar_state,oscar) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, m6502_device::NMI_LINE); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000)/8)); /* verified on pcb */ - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3526_device &ym2(YM3526(config, "ym2", XTAL(12'000'000)/4)); /* verified on pcb */ - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8)); // verified on pcb + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3526_device &ym2(YM3526(config, "ym2", 12_MHz_XTAL / 4)); // verified on pcb + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } void oscar_state::oscarbl(machine_config &config) { oscar(config); - R65C02(config.replace(), m_audiocpu, XTAL(12'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); /* NMIs are caused by the main CPU */ + R65C02(config.replace(), m_audiocpu, 12_MHz_XTAL / 8); + m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::oscar_s_map); // NMIs are caused by the main CPU m_audiocpu->set_addrmap(AS_OPCODES, &oscar_state::oscarbl_s_opcodes_map); } void srdarwin_state::srdarwin(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); /* MC68A09EP */ + // basic machine hardware + MC6809E(config, m_maincpu, 1'500'000); // MC68A09EP or HD63?09EP m_maincpu->set_addrmap(AS_PROGRAM, &srdarwin_state::main_map); - DECO_222(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &srdarwin_state::dec8_s_map); /* NMIs are caused by the main CPU */ + DECO_222(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &srdarwin_state::dec8_s_map); // NMIs are caused by the main CPU - I8751(config, m_mcu, XTAL(8'000'000)); /* unknown frequency */ + I8751(config, m_mcu, 8_MHz_XTAL); // unknown frequency m_mcu->port_in_cb<0>().set(FUNC(srdarwin_state::i8751_port0_r)); m_mcu->port_out_cb<0>().set(FUNC(srdarwin_state::i8751_port0_w)); m_mcu->port_out_cb<2>().set(FUNC(srdarwin_state::mcu_to_main_w)); - m_mcu->port_in_cb<3>().set_ioport("I8751"); + m_mcu->port_in_cb<3>().set_ioport("COIN"); - config.set_perfect_quantum(m_maincpu); /* needed for stability with emulated MCU or sometimes commands get missed and game crashes at bosses */ + config.set_perfect_quantum(m_maincpu); // needed for stability with emulated MCU or sometimes commands get missed and game crashes at bosses - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(srdarwin_state::screen_update)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2337,32 +2422,47 @@ void srdarwin_state::srdarwin(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_srdarwin); DECO_RMC3(config, m_palette, 0, 144); // xxxxBBBBGGGGRRRR with custom weighting - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.23); - ym1.add_route(1, "mono", 0.23); - ym1.add_route(2, "mono", 0.23); - ym1.add_route(3, "mono", 0.20); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); + + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); - ym3812_device &ym2(YM3812(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym3812_device &ym2(YM3812(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); +} + +void srdarwin_state::srdarwinb(machine_config &config) +{ + srdarwin(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &srdarwin_state::srdarwinb_map); + + config.device_remove("mcu"); + config.set_perfect_quantum(""); } void oscar_state::cobracom(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_maincpu, 2000000); /* MC68B09EP */ + // basic machine hardware + MC6809E(config, m_maincpu, 1'500'000); // MC68B09EP m_maincpu->set_addrmap(AS_PROGRAM, &oscar_state::cobra_map); - R65C02(config, m_audiocpu, 1500000); - m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::dec8_s_map); /* NMIs are caused by the main CPU */ + R65C02(config, m_audiocpu, 1'500'000); + m_audiocpu->set_addrmap(AS_PROGRAM, &oscar_state::dec8_s_map); // NMIs are caused by the main CPU - /* video hardware */ + // video hardware BUFFERED_SPRITERAM8(config, m_spriteram); DECO_BAC06(config, m_tilegen[0], 0); @@ -2377,11 +2477,7 @@ void oscar_state::cobracom(machine_config &config) m_spritegen_mxc->set_colpri_callback(FUNC(oscar_state::cobracom_colpri_cb)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); -// m_screen->set_refresh_hz(58); -// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529)); /* 58Hz, 529us Vblank duration */ -// m_screen->set_size(32*8, 32*8); -// m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); - set_screen_raw_params_data_east(config); + set_screen_raw_params(config); m_screen->set_screen_update(FUNC(oscar_state::screen_update_cobracom)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); @@ -2391,37 +2487,43 @@ void oscar_state::cobracom(machine_config &config) MCFG_VIDEO_START_OVERRIDE(oscar_state,cobracom) - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2203_device &ym1(YM2203(config, "ym1", 1500000)); - ym1.add_route(0, "mono", 0.53); - ym1.add_route(1, "mono", 0.53); - ym1.add_route(2, "mono", 0.53); - ym1.add_route(3, "mono", 0.50); + INPUT_MERGER_ANY_HIGH(config, m_soundirq); + m_soundirq->output_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym3812_device &ym2(YM3812(config, "ym2", 3000000)); - ym2.irq_handler().set_inputline(m_audiocpu, m6502_device::IRQ_LINE); - ym2.add_route(ALL_OUTPUTS, "mono", 0.70); + ym2203_device &ym1(YM2203(config, "ym1", 1'500'000)); + ym1.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<0>)); + ym1.add_route(0, "mono", 0.20); + ym1.add_route(1, "mono", 0.20); + ym1.add_route(2, "mono", 0.20); + ym1.add_route(3, "mono", 0.40); + + ym3812_device &ym2(YM3812(config, "ym2", 3'000'000)); + ym2.irq_handler().set(m_soundirq, FUNC(input_merger_device::in_w<1>)); + ym2.add_route(ALL_OUTPUTS, "mono", 0.80); } + /******************************************************************************/ ROM_START( lastmisn ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "last_mission_dl03-8.13h", 0x08000, 0x08000, CRC(a4f8d54b) SHA1(4525826fa5d12c22e0f3bc1c3a9673b86a34aad1) ) /* Rev 8 roms */ + ROM_LOAD( "last_mission_dl03-8.13h", 0x08000, 0x08000, CRC(a4f8d54b) SHA1(4525826fa5d12c22e0f3bc1c3a9673b86a34aad1) ) // Rev 8 roms ROM_LOAD( "last_mission_dl04-5.7h", 0x10000, 0x10000, CRC(7dea1552) SHA1(920684413e2ba4313111e79821c5714977b26b1a) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "last_mission_dl02-5.18h", 0x0000, 0x10000, CRC(ec9b5daf) SHA1(86d47bad123676abc82dd7c92943878c54c33075) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "last_mission_dl00-e.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) BAD_DUMP ) /* not verified to be the same data as the "A" MCU dump */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + ROM_LOAD( "last_mission_dl00-e.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) BAD_DUMP ) // not verified to be the same data as the "A" MCU dump ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2441,23 +2543,23 @@ ROM_START( lastmisn ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x0000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( lastmisnu6 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "last_mission_dl03-6.13h", 0x08000, 0x08000, CRC(47751a5e) SHA1(190970a6eb849781e8853f2bed7b34ac44e569ca) ) /* Rev 6 roms */ + ROM_LOAD( "last_mission_dl03-6.13h", 0x08000, 0x08000, CRC(47751a5e) SHA1(190970a6eb849781e8853f2bed7b34ac44e569ca) ) // Rev 6 roms ROM_LOAD( "last_mission_dl04-5.7h", 0x10000, 0x10000, CRC(7dea1552) SHA1(920684413e2ba4313111e79821c5714977b26b1a) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "last_mission_dl02-5.18h", 0x0000, 0x10000, CRC(ec9b5daf) SHA1(86d47bad123676abc82dd7c92943878c54c33075) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) // Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2477,23 +2579,23 @@ ROM_START( lastmisnu6 ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x0000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( lastmisnu5 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "last_mission_dl03-5.13h", 0x08000, 0x08000, CRC(357f5f6b) SHA1(a114aac50db62a6bcb943681e517ad7c88ec47f4) ) /* Rev 5 roms */ + ROM_LOAD( "last_mission_dl03-5.13h", 0x08000, 0x08000, CRC(357f5f6b) SHA1(a114aac50db62a6bcb943681e517ad7c88ec47f4) ) // Rev 5 roms ROM_LOAD( "last_mission_dl04-5.7h", 0x10000, 0x10000, CRC(7dea1552) SHA1(920684413e2ba4313111e79821c5714977b26b1a) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "last_mission_dl02-5.18h", 0x0000, 0x10000, CRC(ec9b5daf) SHA1(86d47bad123676abc82dd7c92943878c54c33075) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) /* Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + ROM_LOAD( "last_mission_dl00-a.18a", 0x0000, 0x1000, CRC(e97481c6) SHA1(5c6b0e3585712c03b1b657c814c502c396ffa333) ) // Hand written "A", some MCUs are known to be labeled DL00-7, it's not verified to be the same data ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2513,8 +2615,8 @@ ROM_START( lastmisnu5 ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x00000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( lastmisnj ) @@ -2522,14 +2624,14 @@ ROM_START( lastmisnj ) ROM_LOAD( "dl03-.13h", 0x08000, 0x08000, CRC(4be5e7e1) SHA1(9f943658663da31947cebdcbcb5f4e2be0714c06) ) ROM_LOAD( "dl04-.7h", 0x10000, 0x10000, CRC(f026adf9) SHA1(4ccd0e714a6eb7cee388c93beee2d5510407c961) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dl02-.18h", 0x0000, 0x10000, CRC(d0de2b5d) SHA1(e0bb34c2a2ef6fc6f05ab9a98bd23a39004c0c05) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "last_mission_dl05-.5h", 0x8000, 0x8000, CRC(1a5df8c0) SHA1(83d36b1d5fb87f50c44f3110804d6bbdbbc0da99) ) - ROM_REGION( 0x1000, "mcu", 0 ) // created from dump of the US version - ROM_LOAD( "last_mission_japan.18a", 0x0000, 0x1000, BAD_DUMP CRC(0d58c3a1) SHA1(184e75324b7ab2de8e6441f0c954046db80b2640) ) /* correct ROM label when real MCU is dumped */ + ROM_REGION( 0x1000, "mcu", 0 ) // created from dump of the US version + ROM_LOAD( "last_mission_japan.18a", 0x0000, 0x1000, BAD_DUMP CRC(0d58c3a1) SHA1(184e75324b7ab2de8e6441f0c954046db80b2640) ) // correct ROM label when real MCU is dumped ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "last_mission_dl01-.2a", 0x00000, 0x2000, CRC(f3787a5d) SHA1(3701df42cb2aca951963703e72c6c7b272eed82b) ) @@ -2549,27 +2651,27 @@ ROM_START( lastmisnj ) ROM_LOAD( "last_mission_dl07-.15k", 0x40000, 0x10000, CRC(1b60604d) SHA1(1ee15cfdac87f7eeb92050766293b894cfad1466) ) ROM_LOAD( "last_mission_dl06-.17k", 0x60000, 0x10000, CRC(c43c26a7) SHA1(896e278935b100edc12cd970469f2e8293eb96cc) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dl-14.9c", 0x00000, 0x100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dl-14.9c", 0x0000, 0x0100, CRC(2e55aa12) SHA1(c0f2b9649467eb9d2c1e47589b5990f5c5e8cc93) ) // Priority (Not yet used) ROM_END ROM_START( shackled ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "dk-02.13h", 0x08000, 0x08000, CRC(87f8fa85) SHA1(1cb93a60eefdb453a3cc6ec9c5cc2e367fb8aeb0) ) ROM_LOAD( "dk-06.7h", 0x10000, 0x10000, CRC(69ad62d1) SHA1(1aa23b12ab4f1908cddd25f091e1f9bd70a5113c) ) - ROM_LOAD( "dk-05.8h", 0x20000, 0x10000, CRC(598dd128) SHA1(10843c5352eef03c8675df6abaf23c9c9c795aa3) ) + ROM_LOAD( "dk-05.9h", 0x20000, 0x10000, CRC(598dd128) SHA1(10843c5352eef03c8675df6abaf23c9c9c795aa3) ) ROM_LOAD( "dk-04.10h", 0x30000, 0x10000, CRC(36d305d4) SHA1(17586c316aff405cf20c1467d69c98fa2a3c2630) ) ROM_LOAD( "dk-03.11h", 0x40000, 0x08000, CRC(6fd90fd1) SHA1(2f8db17e5545c82d243a7e23e7bda2c2a9101360) ) ROM_RELOAD( 0x48000, 0x08000 ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dk-01.18h", 0x00000, 0x10000, CRC(71fe3bda) SHA1(959cce01362b2c670c2e15b03a78a1ff9cea4ee9) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dk-07.5h", 0x08000, 0x08000, CRC(887e4bcc) SHA1(6427396080e9cd8647adff47c8ed04593a14268c) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU (based on 'breywood' with ID byte changed from 00 to 01) */ - ROM_LOAD( "dk-e.18a", 0x0000, 0x1000, CRC(1af06149) SHA1(b9cb2a4986dbcfc78b0cbea2c1e2bdac1db479cd) BAD_DUMP ) /* Hand written "E" */ + ROM_REGION( 0x1000, "mcu", 0 ) // ID8751H (fake) MCU (based on 'breywood' with ID byte changed from 00 to 01) + ROM_LOAD( "dk-e.18a", 0x0000, 0x1000, CRC(1af06149) SHA1(b9cb2a4986dbcfc78b0cbea2c1e2bdac1db479cd) BAD_DUMP ) // Hand written "E" ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dk-00.2a", 0x00000, 0x08000, CRC(69b975aa) SHA1(38cb96768c79ff1aa1b4b190e08ec9155baf698a) ) @@ -2590,26 +2692,26 @@ ROM_START( shackled ) ROM_LOAD( "dk-09.15k", 0x40000, 0x10000, CRC(c1557fac) SHA1(7d39ec793113a48baf45c2ea07abb07e2e48985a) ) ROM_LOAD( "dk-08.17k", 0x60000, 0x10000, CRC(5e54e9f5) SHA1(1ab41a3bde1f2c2be670e89cf402be28001c17d1) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dk-20.9c", 0x00000, 0x100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) /* Priority (Not yet used) BPROM type MB7052 */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dk-20.9c", 0x0000, 0x0100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) // Priority (Not yet used) BPROM type MB7052 ROM_END ROM_START( breywood ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "dj02-2.13h", 0x08000, 0x08000, CRC(c19856b9) SHA1(766994703bb59879c311675353d7231ad27c7c16) ) ROM_LOAD( "dj06-2.7h", 0x10000, 0x10000, CRC(2860ea02) SHA1(7ac090c3ae9d71baa6227ec9555f1c9f2d25ea0d) ) - ROM_LOAD( "dj05-2.8h", 0x20000, 0x10000, CRC(0fdd915e) SHA1(262df956dfc727c710ade28af7f33fddaafd7ee2) ) + ROM_LOAD( "dj05-2.9h", 0x20000, 0x10000, CRC(0fdd915e) SHA1(262df956dfc727c710ade28af7f33fddaafd7ee2) ) ROM_LOAD( "dj04-2.10h", 0x30000, 0x10000, CRC(71036579) SHA1(c58ff3222b5bcd75d58c5f282554e92103e80916) ) ROM_LOAD( "dj03-2.11h", 0x40000, 0x08000, CRC(308f4893) SHA1(539c138ff01c5718cc8a982482b989468d532699) ) ROM_RELOAD( 0x48000, 0x08000 ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dj1-2y.18h", 0x0000, 0x10000, CRC(3d9fb623) SHA1(6e5eaad9bb0a432e2da5da5b18a2ed36617bdde2) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dj07-1.5h", 0x8000, 0x8000, CRC(4a471c38) SHA1(963ed7b6afeefdfc2cf0d65b0998f973330e6495) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dj.18a", 0x0000, 0x1000, CRC(4cb20332) SHA1(e0bbba7be22e7bcff82fb0ae441410e559ec4566) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2631,8 +2733,8 @@ ROM_START( breywood ) ROM_LOAD( "dj09.15k", 0x40000, 0x10000, CRC(e37d5dbe) SHA1(ff79b4f6d8b0a3061e78d15480df0155650f347f) ) ROM_LOAD( "dj08.17k", 0x60000, 0x10000, CRC(beee880f) SHA1(9a818a75cbec425a13f629bda6d50aa341aa1896) ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dk-20.9c", 0x00000, 0x100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) /* Priority (Not yet used) BPROM type MB7052 */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dk-20.9c", 0x0000, 0x0100, CRC(ff3cd588) SHA1(7360a9f046d517885d456d89026d047fb1fd8d5a) ) // Priority (Not yet used) BPROM type MB7052 ROM_END ROM_START( gondo ) @@ -2645,7 +2747,7 @@ ROM_START( gondo ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dt05-e.h5", 0x8000, 0x8000, CRC(ec08aa29) SHA1(ce83974ae095d9518d1ebf9f7e712f0cbc2c1b42) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dt-e.b1", 0x0000, 0x1000, BAD_DUMP CRC(0d0532ec) SHA1(30894f69ff24c1be4b684e07729bbb3e0f353086) ) // hand-crafted from the US version ROM_REGION( 0x08000, "char", 0 ) @@ -2675,8 +2777,8 @@ ROM_START( gondo ) ROM_CONTINUE( 0x70000, 0x08000 ) ROM_LOAD( "dt11.h15", 0x68000, 0x08000, CRC(53e9cf17) SHA1(8cbb45154a60f42f1b1e7299b12d2e92fc194df8) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "ds-23.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) /* BPROM type MB7122E for Priority (Not yet used) */ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "ds-23.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for Priority (Not yet used) ROM_END ROM_START( gondou ) @@ -2689,7 +2791,7 @@ ROM_START( gondou ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dt05.h5", 0x8000, 0x8000, CRC(ec08aa29) SHA1(ce83974ae095d9518d1ebf9f7e712f0cbc2c1b42) ) // == dt05-e.h5 - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dt-a.b1", 0x0000, 0x1000, CRC(03abceeb) SHA1(a16b779d7cea1c1437f85fa6b6e08894a46a5674) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2719,8 +2821,8 @@ ROM_START( gondou ) ROM_CONTINUE( 0x70000, 0x08000 ) ROM_LOAD( "dt11.h15", 0x68000, 0x08000, CRC(53e9cf17) SHA1(8cbb45154a60f42f1b1e7299b12d2e92fc194df8) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "ds-23.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) /* BPROM type MB7122E for Priority (Not yet used) */ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "ds-23.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for Priority (Not yet used) ROM_END ROM_START( makyosen ) @@ -2733,7 +2835,7 @@ ROM_START( makyosen ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ds05.h5", 0x8000, 0x8000, CRC(e6e28ca9) SHA1(3b1f8219331db1910bfb428f8964f8fc1063df6f) ) // == dt05-e.h5 - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "ds.b1", 0x0000, 0x1000, CRC(08f36e35) SHA1(e8913da71704a89fad41d5bfba45682119166681) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2763,13 +2865,13 @@ ROM_START( makyosen ) ROM_CONTINUE( 0x70000, 0x08000 ) ROM_LOAD( "ds11.h15", 0x68000, 0x08000, CRC(53e9cf17) SHA1(8cbb45154a60f42f1b1e7299b12d2e92fc194df8) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "ds-23.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) /* BPROM type MB7122E for Priority (Not yet used) */ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "ds-23.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for Priority (Not yet used) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "pal16r4nc.u10", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */ - ROM_LOAD( "pal16r4nc.g11", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */ - ROM_LOAD( "pal16r4nc.s1", 0x0400, 0x0104, NO_DUMP ) /* PAL is read protected */ + ROM_LOAD( "pal16r4nc.u10", 0x0000, 0x0104, NO_DUMP ) // PAL is read protected + ROM_LOAD( "pal16r4nc.g11", 0x0200, 0x0104, NO_DUMP ) // PAL is read protected + ROM_LOAD( "pal16r4nc.s1", 0x0400, 0x0104, NO_DUMP ) // PAL is read protected ROM_END ROM_START( garyoret ) @@ -2783,11 +2885,11 @@ ROM_START( garyoret ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dv05", 0x08000, 0x08000, CRC(c97c347f) SHA1(a1b22733dc15d524af97db3e608a82503a49b182) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H (fake) MCU based on 'gondo' one */ + ROM_REGION( 0x1000, "mcu", 0 ) // ID8751H (fake) MCU based on 'gondo' one ROM_LOAD( "dv__.mcu", 0x0000, 0x1000, BAD_DUMP CRC(37cacec6) SHA1(d81fe36939ccac784a83a69dfc6898b22a4515ec) ) ROM_REGION( 0x08000, "char", 0 ) - ROM_LOAD( "dv14", 0x00000, 0x08000, CRC(fb2bc581) SHA1(d597976c5ae586166c49051cc3de8cf0c2e5a5e1) ) /* Characters */ + ROM_LOAD( "dv14", 0x00000, 0x08000, CRC(fb2bc581) SHA1(d597976c5ae586166c49051cc3de8cf0c2e5a5e1) ) // Characters ROM_REGION( 0x80000, "sprites", 0 ) ROM_LOAD( "dv22", 0x00000, 0x10000, CRC(cef0367e) SHA1(8beb3a6b91ec0a6ec052243c8f626a581d349f65) ) @@ -2829,10 +2931,10 @@ ROM_START( ghostb ) ROM_LOAD( "dz04-21.6d", 0x30000, 0x10000, CRC(7d46582f) SHA1(22e70675d76e2a93a732370fa42cc4b79381f4b0) ) ROM_LOAD( "dz05-21.7d", 0x40000, 0x10000, CRC(23e1c758) SHA1(c6432682e1d4429d0cfa8de6a05ca0152611b5b1) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2867,10 +2969,10 @@ ROM_START( ghostb2a ) ROM_LOAD( "dz04.6d", 0x30000, 0x10000, CRC(d09bad99) SHA1(bde8e4316cedf1d292f0aed8627b0dc6794c6e07) ) ROM_LOAD( "dz05.7d", 0x40000, 0x10000, CRC(0315f691) SHA1(3bfad18b9f230e64c608a22af20c3b00dca3e6da) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2905,10 +3007,10 @@ ROM_START( ghostb3 ) ROM_LOAD( "dz04-1.6d", 0x30000, 0x10000, CRC(3c3eb09f) SHA1(ae4975992698fa97c68a857a25b470a05539160a) ) ROM_LOAD( "dz05-1.7d", 0x40000, 0x10000, CRC(b4971d33) SHA1(25e052c4b414c7bd7b6e3ae9c211873902afb5f7) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2935,8 +3037,7 @@ ROM_START( ghostb3 ) ROM_LOAD( "dz20a.11d", 0x0400, 0x0400, CRC(d8fe2d99) SHA1(56f8fcf2f871c7d52d4299a5b9988401ada4319d) ) ROM_END -// DZ-1 is the verified correct MCU code for the ghostb3a set below - program ROMs work on a real PCB, but stall here in the demo mode -// Both DZ01-2 & DZ04- ROMs have been verified correct from multiple sources +// DZ-1 is the verified correct MCU code for the ghostb3a set below, both DZ01-2 & DZ04- ROMs have been verified correct from multiple sources ROM_START( ghostb3a ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "dz01-2.1d", 0x08000, 0x08000, CRC(1b16890e) SHA1(eebd253d616b6286937b72cfb64612877f383932) ) @@ -2945,10 +3046,10 @@ ROM_START( ghostb3a ) ROM_LOAD( "dz04-.6d", 0x30000, 0x10000, CRC(490b4525) SHA1(3066b76f8fe99c8f9f1cdf943209883a199a4184) ) ROM_LOAD( "dz05-.7d", 0x40000, 0x10000, CRC(b4971d33) SHA1(25e052c4b414c7bd7b6e3ae9c211873902afb5f7) ) // == dz05-1.7d (ghostb3) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dz06.5f", 0x8000, 0x8000, CRC(798f56df) SHA1(aee33cd0c102015114e17f6cb98945e7cc806f55) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dz-1.1b", 0x0000, 0x1000, CRC(9f5f3cb5) SHA1(5ef2b8a5411dde28277d9364db014763019ecf15) ) ROM_REGION( 0x08000, "char", 0 ) @@ -2976,6 +3077,7 @@ ROM_START( ghostb3a ) ROM_END /* + Meikyuu Hunter G (Data East, 1987) Hardware info by Guru @@ -3019,8 +3121,8 @@ DE-0273-1 VSync - 58Hz HSync - 15.68kHz ROMs - - DW00/DW01/DW05 - 27C256 - DW02/DW03/DW04 \ + DW00/DW01/DW05 - 27C256 + DW02/DW03/DW04 \ DW06/DW07/DW08/DW09 / 27C512 DW18 - Fujitsu MB7132, compatible with Philips 82S181 DW19 - Fujitsu MB7122, compatible with Philips 82S137 @@ -3070,7 +3172,7 @@ ROM_START( meikyuh ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dw05.5f", 0x8000, 0x8000, CRC(c28c4d82) SHA1(ad88506bcbc9763e39d6e6bb25ef2bd6aa929f30) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dw.1b", 0x0000, 0x1000, CRC(28e9ced9) SHA1(a3d6dfa1e44fa93c0f30fa0a88b6dd3d6e5c4dda) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3152,6 +3254,7 @@ There is a small piggyback attached under CPUs PCB full of 74Sxx ALL MEMORIES ARE MASK ROMS! */ + ROM_START( meikyuhbl ) ROM_REGION( 0x40000, "maincpu", 0 ) ROM_LOAD( "27256.1d", 0x08000, 0x08000, CRC(d5b5e8a2) SHA1(0155d1d0ddbd764b960148c3c9ef34223e101659) ) // dw-01-5.1d matched 6.552124% @@ -3162,7 +3265,7 @@ ROM_START( meikyuhbl ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "27256.5f", 0x8000, 0x8000, CRC(c28c4d82) SHA1(ad88506bcbc9763e39d6e6bb25ef2bd6aa929f30) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller - should be unpopulated ROM_LOAD( "dw.1b", 0x0000, 0x1000, CRC(28e9ced9) SHA1(a3d6dfa1e44fa93c0f30fa0a88b6dd3d6e5c4dda) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3196,6 +3299,9 @@ ROM_START( meikyuhbl ) ROM_END /* + +Captain Silver + Main Components --------------- @@ -3242,45 +3348,44 @@ Lower board (DATA EAST DE-0251-2): */ - ROM_START( csilver ) ROM_REGION( 0x48000, "maincpu", 0 ) ROM_LOAD( "dx03-12.18d", 0x08000, 0x08000, CRC(2d926e7c) SHA1(cf38e92904edb1870b0a4965f9049d67efe8cf6a) ) ROM_LOAD( "dx01.12d", 0x10000, 0x10000, CRC(570fb50c) SHA1(3002f53182834a060fc282be1bc5767906e19ba2) ) ROM_LOAD( "dx02.13d", 0x20000, 0x10000, CRC(58625890) SHA1(503a969085f6dcb16687217c48136ea22d07c89f) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - // 017F: B4 4C 0D : cjne a,#$4C,$018F (ID code 0x4c = World version) + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + // 017F: B4 4C 0D : cjne a,#$4C,$018F (ID code 0x4c = World version) ROM_LOAD( "dx-8.19a", 0x0000, 0x1000, CRC(c0266263) SHA1(27ac6fa4af7195f04249c04dec168ab82158704e) ) ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dx00.3d", 0x00000, 0x08000, CRC(f01ef985) SHA1(d5b823bd7c0efcf3137f8643c5d99a260bed5675) ) - ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp + ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp ROM_LOAD( "dx14.15k", 0x00000, 0x10000, CRC(80f07915) SHA1(ea100f12ef3a68110af911fa9beeb73b388f069d) ) - /* 0x10000-0x1ffff empty */ + // 0x10000-0x1ffff empty ROM_LOAD( "dx13.13k", 0x20000, 0x10000, CRC(d32c02e7) SHA1(d0518ec31e9e3f7b4e76fba5d7c05c33c61a9c72) ) - /* 0x30000-0x3ffff empty */ + // 0x30000-0x3ffff empty ROM_LOAD( "dx12.10k", 0x40000, 0x10000, CRC(ac78b76b) SHA1(c2be347fd950894401123ada8b27bfcfce53e66b) ) - /* 0x50000-0x5ffff empty */ - /* 0x60000-0x7ffff empty (no 4th plane) */ + // 0x50000-0x5ffff empty + // 0x60000-0x7ffff empty (no 4th plane) - ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp + ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp ROM_LOAD( "dx06.5f", 0x00000, 0x10000, CRC(b6fb208c) SHA1(027d33f0b5feb6f0433134213cfcef96790eaace) ) ROM_LOAD( "dx07.7f", 0x10000, 0x10000, CRC(ee3e1817) SHA1(013496976a9ffacf1587b3a6fc0f548becb1ab0e) ) ROM_LOAD( "dx08.8f", 0x20000, 0x10000, CRC(705900fe) SHA1(53b9d09f9780a3bf3545bc27a2855ebee3884124) ) ROM_LOAD( "dx09.10f", 0x30000, 0x10000, CRC(3192571d) SHA1(240c6c099f1e6edbf0be7d5a4ec396b056c9f70f) ) - ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) - ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) + ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) + ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "dx-15.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "dx-15.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown ROM_END // There is known to exist an identical ROM set with different PCB locations designated for an alternate ROM board (noted on the right of the ROM definition) @@ -3290,38 +3395,38 @@ ROM_START( csilverj ) ROM_LOAD( "dx01.12d", 0x10000, 0x10000, CRC(570fb50c) SHA1(3002f53182834a060fc282be1bc5767906e19ba2) ) // dx01.a2 ROM_LOAD( "dx02.13d", 0x20000, 0x10000, CRC(58625890) SHA1(503a969085f6dcb16687217c48136ea22d07c89f) ) // dx01.a3 - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) // dx04-1.a5 ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) // dx05.a6 - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller // hand modified version of csilver ROM ROM_LOAD( "id8751h_japan.mcu", 0x0000, 0x1000, BAD_DUMP CRC(6e801217) SHA1(2d8f7ae533dd8146acf8461d61ddd839544adf55) ) ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dx00.3d", 0x00000, 0x08000, CRC(f01ef985) SHA1(d5b823bd7c0efcf3137f8643c5d99a260bed5675) ) // dx00.a1 - ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp + ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp ROM_LOAD( "dx14.15k", 0x00000, 0x10000, CRC(80f07915) SHA1(ea100f12ef3a68110af911fa9beeb73b388f069d) ) // dx14.b5 - /* 0x10000-0x1ffff empty */ + // 0x10000-0x1ffff empty ROM_LOAD( "dx13.13k", 0x20000, 0x10000, CRC(d32c02e7) SHA1(d0518ec31e9e3f7b4e76fba5d7c05c33c61a9c72) ) // dx13.b4 - /* 0x30000-0x3ffff empty */ + // 0x30000-0x3ffff empty ROM_LOAD( "dx12.10k", 0x40000, 0x10000, CRC(ac78b76b) SHA1(c2be347fd950894401123ada8b27bfcfce53e66b) ) // dx12.b3 - /* 0x50000-0x5ffff empty */ - /* 0x60000-0x7ffff empty (no 4th plane) */ + // 0x50000-0x5ffff empty + // 0x60000-0x7ffff empty (no 4th plane) - ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp + ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp ROM_LOAD( "dx06.5f", 0x00000, 0x10000, CRC(b6fb208c) SHA1(027d33f0b5feb6f0433134213cfcef96790eaace) ) // dx06.a7 ROM_LOAD( "dx07.7f", 0x10000, 0x10000, CRC(ee3e1817) SHA1(013496976a9ffacf1587b3a6fc0f548becb1ab0e) ) // dx07.a8 ROM_LOAD( "dx08.8f", 0x20000, 0x10000, CRC(705900fe) SHA1(53b9d09f9780a3bf3545bc27a2855ebee3884124) ) // dx08.a9 ROM_LOAD( "dx09.10f", 0x30000, 0x10000, CRC(3192571d) SHA1(240c6c099f1e6edbf0be7d5a4ec396b056c9f70f) ) // dx09.a10 - ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) // dx10.b1 - ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) // dx11.b2 + ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) // dx10.b1 + ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) // dx11.b2 - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "dx-15.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "dx-15.b10", 0x0000, 0x0400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown ROM_END ROM_START( csilverja ) // DE-0250-3 + DE-0251-2 @@ -3330,38 +3435,38 @@ ROM_START( csilverja ) // DE-0250-3 + DE-0251-2 ROM_LOAD( "dx01.12d", 0x10000, 0x10000, CRC(570fb50c) SHA1(3002f53182834a060fc282be1bc5767906e19ba2) ) ROM_LOAD( "dx02.13d", 0x20000, 0x10000, CRC(58625890) SHA1(503a969085f6dcb16687217c48136ea22d07c89f) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller // hand modified version of csilver ROM ROM_LOAD( "id8751h_japan.mcu", 0x0000, 0x1000, BAD_DUMP CRC(6e801217) SHA1(2d8f7ae533dd8146acf8461d61ddd839544adf55) ) ROM_REGION( 0x08000, "char", 0 ) ROM_LOAD( "dx00.3d", 0x00000, 0x08000, CRC(f01ef985) SHA1(d5b823bd7c0efcf3137f8643c5d99a260bed5675) ) - ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp + ROM_REGION( 0x80000, "sprites", 0 ) // 3bpp ROM_LOAD( "dx14.15k", 0x00000, 0x10000, CRC(80f07915) SHA1(ea100f12ef3a68110af911fa9beeb73b388f069d) ) - /* 0x10000-0x1ffff empty */ + // 0x10000-0x1ffff empty ROM_LOAD( "dx13.13k", 0x20000, 0x10000, CRC(d32c02e7) SHA1(d0518ec31e9e3f7b4e76fba5d7c05c33c61a9c72) ) - /* 0x30000-0x3ffff empty */ + // 0x30000-0x3ffff empty ROM_LOAD( "dx12.10k", 0x40000, 0x10000, CRC(ac78b76b) SHA1(c2be347fd950894401123ada8b27bfcfce53e66b) ) - /* 0x50000-0x5ffff empty */ - /* 0x60000-0x7ffff empty (no 4th plane) */ + // 0x50000-0x5ffff empty + // 0x60000-0x7ffff empty (no 4th plane) - ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp + ROM_REGION( 0x80000, "tiles1", 0 ) // 3bpp ROM_LOAD( "dx06.5f", 0x00000, 0x10000, CRC(b6fb208c) SHA1(027d33f0b5feb6f0433134213cfcef96790eaace) ) ROM_LOAD( "dx07.7f", 0x10000, 0x10000, CRC(ee3e1817) SHA1(013496976a9ffacf1587b3a6fc0f548becb1ab0e) ) ROM_LOAD( "dx08.8f", 0x20000, 0x10000, CRC(705900fe) SHA1(53b9d09f9780a3bf3545bc27a2855ebee3884124) ) ROM_LOAD( "dx09.10f", 0x30000, 0x10000, CRC(3192571d) SHA1(240c6c099f1e6edbf0be7d5a4ec396b056c9f70f) ) - ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) - ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) + ROM_LOAD( "dx10.12f", 0x40000, 0x10000, CRC(3ef77a32) SHA1(97b97c35a6ca994d2e7a6e7a63101eda9709bcb1) ) + ROM_LOAD( "dx11.13f", 0x50000, 0x10000, CRC(9cf3d5b8) SHA1(df4974f8412ab1cf65871b8e4e3dbee478bf4d21) ) - ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "dx-15.b10", 0x00000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "dx-15.b10", 0x0000, 0x400, CRC(dcbfec4e) SHA1(a375caef4575746870e285d90ba991ea7daefad6) ) // BPROM type MB7122E for priority (Not yet used), location on alternate board unknown ROM_END ROM_START( oscar ) @@ -3369,10 +3474,10 @@ ROM_START( oscar ) ROM_LOAD( "du10", 0x08000, 0x08000, CRC(120040d8) SHA1(22d5f84f3ca724cbf39dfc4790f2175ba4945aaf) ) // This label is probably incorrect. The correct label is needed ROM_LOAD( "ed09", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) // for the world set because DU is the code for the Japanese version - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "du11", 0x0000, 0x10000, CRC(ff45c440) SHA1(4769944bcfebcdcba7ed7d5133d4d9f98890d75c) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "ed12", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3391,7 +3496,7 @@ ROM_START( oscar ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) ROM_END -ROM_START( oscarbl ) // very similar to the original, main difference it's it uses a standard M6502 for sound with predecrypted opcodes. +ROM_START( oscarbl ) // very similar to the original, main difference it's it uses a standard M6502 for sound with predecrypted opcodes. ROM_REGION( 0x20000, "maincpu", 0 ) // same as the original ROM_LOAD( "m27c256.3", 0x08000, 0x08000, CRC(120040d8) SHA1(22d5f84f3ca724cbf39dfc4790f2175ba4945aaf) ) ROM_LOAD( "at27c512.2", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) @@ -3423,10 +3528,10 @@ ROM_START( oscaru ) ROM_LOAD( "ed10", 0x08000, 0x08000, CRC(f9b0d4d4) SHA1(dc2aba978ba96f365027c7be5714728d5d7fb802) ) ROM_LOAD( "ed09", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "ed11", 0x0000, 0x10000, CRC(10e5d919) SHA1(13bc3497cb4aaa6dd272853819212ad63656f8a7) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "ed12", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3444,8 +3549,8 @@ ROM_START( oscaru ) ROM_LOAD( "ed00", 0x40000, 0x10000, CRC(ac201f2d) SHA1(77f13eb6a1a44444ca9b25363031451b0d68c988) ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) - ROM_REGION( 512, "proms", 0 ) - ROM_LOAD( "du-13.bin", 0x00000, 0x200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "du-13.bin", 0x0000, 0x0200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) // Priority (Not yet used) ROM_END ROM_START( oscarj1 ) @@ -3453,10 +3558,10 @@ ROM_START( oscarj1 ) ROM_LOAD( "du10-1", 0x08000, 0x08000, CRC(4ebc9f7a) SHA1(df8fdc4b4b203dc1bdd048f069fb6b723bdea0d2) ) ROM_LOAD( "ed09", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "du11", 0x0000, 0x10000, CRC(ff45c440) SHA1(4769944bcfebcdcba7ed7d5133d4d9f98890d75c) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "ed12", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3474,8 +3579,8 @@ ROM_START( oscarj1 ) ROM_LOAD( "ed00", 0x40000, 0x10000, CRC(ac201f2d) SHA1(77f13eb6a1a44444ca9b25363031451b0d68c988) ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) - ROM_REGION( 512, "proms", 0 ) - ROM_LOAD( "du-13.bin", 0x00000, 0x200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "du-13.bin", 0x0000, 0x0200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) // Priority (Not yet used) ROM_END /*************************************************************************** @@ -3554,16 +3659,15 @@ OSCAR 7891-1077 (sticker) ***************************************************************************/ - ROM_START( oscarj2 ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "du10-2.h12", 0x08000, 0x08000, CRC(114e898d) SHA1(1072ccabe6d53c50cdfa1e27d5d848ecdd6559cc) ) ROM_LOAD( "du09.h10", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) - ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ + ROM_REGION( 0x10000, "sub", 0 ) // CPU 2, 1st 16k is empty ROM_LOAD( "du11.h16", 0x0000, 0x10000, CRC(ff45c440) SHA1(4769944bcfebcdcba7ed7d5133d4d9f98890d75c) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "du12.k5", 0x8000, 0x8000, CRC(432031c5) SHA1(af2deea48b98eb0f9e85a4fb1486021f999f9abd) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3581,8 +3685,8 @@ ROM_START( oscarj2 ) ROM_LOAD( "du00.a1", 0x40000, 0x10000, CRC(ac201f2d) SHA1(77f13eb6a1a44444ca9b25363031451b0d68c988) ) ROM_LOAD( "du02.a5", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) - ROM_REGION( 512, "proms", 0 ) - ROM_LOAD( "du-13.c8", 0x00000, 0x200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD( "du-13.c8", 0x0000, 0x0200, CRC(bea1f87e) SHA1(f5215992e4b53c9cd4c7e0b20ff5cfdce3ab6d02) ) // Priority (Not yet used) ROM_END ROM_START( srdarwin ) @@ -3591,11 +3695,11 @@ ROM_START( srdarwin ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "dy_00.b16", 0x10000, 0x10000, CRC(2bf6b461) SHA1(435d922c7b9df7f2b2f774346caed81d330be8a0) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dy_04.d7", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - // 0160: B4 6B 0D : cjne a,#$6B,$0170 (ID code 0x6b = World version) + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller + // 0160: B4 6B 0D : cjne a,#$6B,$0170 (ID code 0x6b = World version) ROM_LOAD( "dy-e.d11", 0x0000, 0x1000, CRC(11cd6ca4) SHA1(ec70f84228e37f9fc1bda85fa52a009f61c500b2) ) ROM_REGION( 0x08000, "char", 0 ) @@ -3619,8 +3723,8 @@ ROM_START( srdarwin ) ROM_CONTINUE( 0x28000, 0x4000 ) ROM_CONTINUE( 0x38000, 0x4000 ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dy_12.f4", 0x00000, 0x100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dy_12.f4", 0x0000, 0x0100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) // Priority (Not yet used) ROM_END ROM_START( srdarwinj ) @@ -3629,10 +3733,10 @@ ROM_START( srdarwinj ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "dy_00.b16", 0x10000, 0x10000, CRC(2bf6b461) SHA1(435d922c7b9df7f2b2f774346caed81d330be8a0) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) /* 64K for sound CPU + 64k for decrypted opcodes */ + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "dy_04.d7", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) ) - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ + ROM_REGION( 0x1000, "mcu", 0 ) // i8751 microcontroller ROM_LOAD( "dy.d11", 0x0000, 0x1000, BAD_DUMP CRC(4ac2ca9d) SHA1(6e07788df9fcf4248a9d3e87b8c5f54776bd269e) ) // hand-modified copy of world version to correct region + coinage ROM_REGION( 0x08000, "char", 0 ) @@ -3656,8 +3760,8 @@ ROM_START( srdarwinj ) ROM_CONTINUE( 0x28000, 0x4000 ) ROM_CONTINUE( 0x38000, 0x4000 ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "dy_12.f4", 0x00000, 0x100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) /* Priority (Not yet used) */ + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "dy_12.f4", 0x0000, 0x0100, CRC(ebfaaed9) SHA1(5723dbfa3eb3fc4df8c8975b320a5c49848309d8) ) // Priority (Not yet used) ROM_END ROM_START( srdarwinb ) @@ -3666,15 +3770,12 @@ ROM_START( srdarwinb ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "4.bin", 0x10000, 0x10000, CRC(2bf6b461) SHA1(435d922c7b9df7f2b2f774346caed81d330be8a0) ) - ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes + ROM_REGION( 2*0x10000, "audiocpu", 0 ) // 64K for sound CPU + 64k for decrypted opcodes ROM_LOAD( "5.bin", 0x8000, 0x8000, CRC(2ae3591c) SHA1(f21b06d84e2c3d3895be0812024641fd006e45cf) ) - ROM_REGION( 0x1000, "mcu", 0 ) // PCB lacks of i8751 microcontroller - ROM_LOAD( "mcu.bin", 0x0000, 0x1000, NO_DUMP ) - ROM_REGION( 0x8000, "char", 0 ) ROM_LOAD( "12.bin", 0x0000, 0x4000, CRC(f5c835cd) SHA1(8b41862dc18ba2e2677c94ecef45a40467aa89ad) ) - ROM_CONTINUE( 0x0000, 0x4000 ) // all data in the 2nd half + ROM_CONTINUE( 0x0000, 0x4000 ) // all data in the 2nd half ROM_REGION( 0x30000, "sprites", 0 ) ROM_LOAD( "6.bin", 0x00000, 0x8000, CRC(3c84a2c6) SHA1(558a7d9acb5af06a7728d010262e3a35c3cdbe25) ) @@ -3694,8 +3795,8 @@ ROM_START( srdarwinb ) ROM_CONTINUE( 0x28000, 0x4000 ) ROM_CONTINUE( 0x38000, 0x4000 ) - ROM_REGION( 256, "proms", 0 ) - ROM_LOAD( "82s123.bin", 0x00000, 0x100, NO_DUMP ) // Priority (Not yet used) + ROM_REGION( 0x0100, "proms", 0 ) + ROM_LOAD( "82s123.bin", 0x0000, 0x0100, NO_DUMP ) // Priority (Not yet used) ROM_END @@ -3775,8 +3876,8 @@ ROM_END ROM_START( cobracomb ) ROM_REGION( 0x30000, "maincpu", 0 ) - ROM_LOAD( "el11.5j", 0x08000, 0x08000, CRC(c6a102e3) SHA1(51d9781d13a8a98c9bbdf34fa79ebfd8a152567e) ) /* "zero" revision - IE: Original version */ - ROM_LOAD( "el12.7j", 0x10000, 0x10000, CRC(72b2dab4) SHA1(ff84a04cfe920a0d8105fbbd1f44ee86822cf0d3) ) /* "zero" revision - IE: Original version */ + ROM_LOAD( "el11.5j", 0x08000, 0x08000, CRC(c6a102e3) SHA1(51d9781d13a8a98c9bbdf34fa79ebfd8a152567e) ) // "zero" revision - IE: Original version + ROM_LOAD( "el12.7j", 0x10000, 0x10000, CRC(72b2dab4) SHA1(ff84a04cfe920a0d8105fbbd1f44ee86822cf0d3) ) // "zero" revision - IE: Original version ROM_LOAD( "el13.9j", 0x20000, 0x10000, CRC(04505acb) SHA1(2220efb277884588859375dab9960f04f07273a7) ) ROM_REGION( 0x10000, "audiocpu", 0 ) @@ -3891,11 +3992,10 @@ ROM_START( cobracomjb ) ROM_END -void lastmisn_state::init_meikyuhbl() +void ghostb_state::init_meikyuhbl() { // this bootleg has the high nibble of the first 0x400 bytes with reversed bits. // Address it here instead of hacking the DECO RM-C3 device. - u8 *proms = memregion("proms")->base(); for (int i = 0; i < 0x400; i++) @@ -3908,53 +4008,52 @@ void srdarwin_state::init_srdarwinb() { // this bootleg has the sprite ROMs with bytes swapped. // just worked here to avoid a new gfxdecode and machine driver. - u8 *rom = memregion("sprites")->base(); - uint8_t byte1; for (int i = 0; i < 0x30000; i += 4) { - byte1 = rom[i + 1]; + u8 byte1 = rom[i + 1]; rom[i + 1] = rom[i + 2]; rom[i + 2] = byte1; } } + /******************************************************************************/ -GAME( 1986, lastmisn, 0, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (World revision 8)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnu6, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 6)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnu5, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnj, lastmisn, lastmisn, lastmisnj, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, shackled, 0, shackled, shackled, lastmisn_state, empty_init, ROT0, "Data East USA", "Shackled (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, breywood, shackled, shackled, breywood, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Breywood (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gondo, 0, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Gondomania (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gondou, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East USA", "Gondomania (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, makyosen, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Makyou Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, garyoret, 0, garyoret, garyoret, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb, 0, ghostb, ghostb, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 3B?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, lastmisn_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB - stalls in demo mode -GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, meikyuhbl, ghostb, meikyuh, meikyuh, lastmisn_state, init_meikyuhbl, ROT0, "bootleg", "Meikyuu Hunter G (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilver, 0, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilverj, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilverja, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscar, 0, oscar, oscar, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarbl, oscar, oscarbl, oscar, oscar_state, empty_init, ROT0, "bootleg", "Psycho-Nics Oscar (World revision 0, bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, oscaru, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarj1, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarj2, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwin, 0, srdarwin, srdarwin, srdarwin_state, empty_init, ROT270, "Data East Corporation", "Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, srdarwin_state, empty_init, ROT270, "Data East Corporation", "Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwinb, srdarwin, srdarwin, srdarwinj, srdarwin_state, init_srdarwinb, ROT270, "bootleg", "Super Real Darwin (Japan, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisn, 0, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (World revision 8)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnu6, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 6)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnu5, lastmisn, lastmisn, lastmisn, lastmisn_state, empty_init, ROT270, "Data East USA", "Last Mission (US revision 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnj, lastmisn, lastmisn, lastmisnj, lastmisn_state, empty_init, ROT270, "Data East Corporation", "Last Mission (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, shackled, 0, shackled, shackled, lastmisn_state, empty_init, ROT0, "Data East USA", "Shackled (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, breywood, shackled, shackled, breywood, lastmisn_state, empty_init, ROT0, "Data East Corporation", "Breywood (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, gondo, 0, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Gondomania (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, gondou, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East USA", "Gondomania (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, makyosen, gondo, gondo, gondo, gondo_state, empty_init, ROT270, "Data East Corporation", "Makyou Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, garyoret, 0, garyoret, garyoret, ghostb_state, empty_init, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb, 0, ghostb, ghostb, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 3B?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, ghostb_state, empty_init, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, ghostb_state, empty_init, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, meikyuhbl, ghostb, meikyuh, meikyuh, ghostb_state, init_meikyuhbl, ROT0, "bootleg", "Meikyuu Hunter G (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilver, 0, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilverj, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilverja, csilver, csilver, csilver, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscar, 0, oscar, oscar, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarbl, oscar, oscarbl, oscar, oscar_state, empty_init, ROT0, "bootleg", "Psycho-Nics Oscar (World revision 0, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, oscaru, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarj1, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarj2, oscar, oscar, oscarj, oscar_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwin, 0, srdarwin, srdarwin, srdarwin_state, empty_init, ROT270, "Data East Corporation", "SRD: Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, srdarwin_state, empty_init, ROT270, "Data East Corporation", "SRD: Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwinb, srdarwin, srdarwinb, srdarwinj, srdarwin_state, init_srdarwinb, ROT270, "bootleg", "SRD: Super Real Darwin (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) // Unlike most Deco games of this period Cobra Command does not seem to have a Data East USA release. Instead the Data East Corporation release // was used in the US as evidenced by boards with the EL romset bearing AAMA seal stickers (American Amusement Machine Association) -GAME( 1988, cobracom, 0, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracoma, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomj, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomjb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "bootleg", "Cobra-Command (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracom, 0, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracoma, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (World/US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomj, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "Data East Corporation", "Cobra-Command (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomjb, cobracom, cobracom, cobracom, oscar_state, empty_init, ROT0, "bootleg", "Cobra-Command (Japan, bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/dataeast/dec8.h b/src/mame/dataeast/dec8.h index 01ba23a6df1..143738d7f17 100644 --- a/src/mame/dataeast/dec8.h +++ b/src/mame/dataeast/dec8.h @@ -32,6 +32,7 @@ class dec8_state_base : public driver_device m_screen(*this, "screen"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_soundirq(*this, "soundirq"), m_soundlatch(*this, "soundlatch"), m_tilegen(*this, "tilegen%u", 1), m_mainbank(*this, "mainbank"), @@ -42,28 +43,24 @@ class dec8_state_base : public driver_device virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; - TIMER_CALLBACK_MEMBER(audiocpu_nmi_clear); - void buffer_spriteram16_w(u8 data); - void sound_w(u8 data); void main_irq_on_w(u8 data); void main_irq_off_w(u8 data); - void main_firq_off_w(u8 data); void sub_irq_on_w(u8 data); void sub_irq_off_w(u8 data); - void sub_firq_off_w(u8 data); + void both_firq_off_w(u8 data); void flip_screen_w(u8 data); void bg_ram_w(offs_t offset, u8 data); u8 bg_ram_r(offs_t offset); void videoram_w(offs_t offset, u8 data); - void set_screen_raw_params_data_east(machine_config &config); + void set_screen_raw_params(machine_config &config); void allocate_buffered_spriteram16(); void dec8_s_map(address_map &map) ATTR_COLD; void oscar_s_map(address_map &map) ATTR_COLD; - /* devices */ + // devices required_device m_maincpu; optional_device m_subcpu; required_device m_audiocpu; @@ -71,28 +68,27 @@ class dec8_state_base : public driver_device required_device m_screen; required_device m_gfxdecode; required_device m_palette; + optional_device m_soundirq; required_device m_soundlatch; optional_device_array m_tilegen; - /* memory regions */ + // memory regions required_memory_bank m_mainbank; - /* memory pointers */ + // memory pointers required_shared_ptr m_videoram; optional_shared_ptr m_bg_ram; std::unique_ptr m_buffered_spriteram16; // for the mxc06 sprite chip emulation (oscar, cobra) - /* video-related */ - tilemap_t *m_bg_tilemap = nullptr; - tilemap_t *m_fix_tilemap = nullptr; - int m_scroll[4]{}; - int m_game_uses_priority = 0; + // video-related + tilemap_t *m_bg_tilemap = nullptr; + tilemap_t *m_fix_tilemap = nullptr; + int m_scroll[4]{}; + int m_game_uses_priority = 0; - /* misc */ - bool m_coin_state = false; - - emu_timer *m_6502_timer = nullptr; + // misc + bool m_coin_state = false; }; // with I8751 MCU @@ -101,40 +97,31 @@ class dec8_mcu_state_base : public dec8_state_base protected: dec8_mcu_state_base(const machine_config &mconfig, device_type type, const char *tag) : dec8_state_base(mconfig, type, tag), - m_mcu(*this, "mcu"), - m_coin_port(*this, "I8751") + m_mcu(*this, "mcu") { } virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; - TIMER_CALLBACK_MEMBER(mcu_irq_clear); - - u8 i8751_h_r(); - u8 i8751_l_r(); - void i8751_w(offs_t offset, u8 data); + u8 i8751_hi_r(); + u8 i8751_lo_r(); + virtual void i8751_hi_w(u8 data); + void i8751_lo_w(u8 data); u8 i8751_port0_r(); void i8751_port0_w(u8 data); u8 i8751_port1_r(); void i8751_port1_w(u8 data); - void i8751_reset_w(u8 data); - - required_device m_mcu; - - /* ports */ - required_ioport m_coin_port; + optional_device m_mcu; // MCU communication - u8 m_i8751_p2 = 0; + u8 m_i8751_p2 = 0; int m_i8751_port0 = 0; int m_i8751_port1 = 0; int m_i8751_return = 0; int m_i8751_value = 0; - - emu_timer *m_i8751_timer = nullptr; }; // with unique sprite hardware @@ -147,6 +134,8 @@ class srdarwin_state : public dec8_mcu_state_base } void srdarwin(machine_config &config); + void srdarwinb(machine_config &config); + void init_srdarwinb(); protected: @@ -160,10 +149,11 @@ class srdarwin_state : public dec8_mcu_state_base TILE_GET_INFO_MEMBER(get_fix_tile_info); TILE_GET_INFO_MEMBER(get_tile_info); - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap); void main_map(address_map &map) ATTR_COLD; + void srdarwinb_map(address_map &map) ATTR_COLD; }; // with 'karnov' sprite hardware @@ -172,16 +162,56 @@ class lastmisn_state : public dec8_mcu_state_base public: lastmisn_state(const machine_config &mconfig, device_type type, const char *tag) : dec8_mcu_state_base(mconfig, type, tag), - m_spritegen_krn(*this, "spritegen_krn"), + m_spritegen_krn(*this, "spritegen_krn") + { + } + + void lastmisn(machine_config &config); + void shackled(machine_config &config); + +protected: + DECLARE_VIDEO_START(lastmisn); + u32 screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + required_device m_spritegen_krn; + +private: + void lastmisn_control_w(u8 data); + void shackled_control_w(u8 data); + void lastmisn_scrollx_w(u8 data); + void lastmisn_scrolly_w(u8 data); + void mcu_to_main_w(u8 data); + + TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows); + TILE_GET_INFO_MEMBER(get_lastmisn_tile_info); + TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info); + + DECLARE_VIDEO_START(shackled); + + u32 screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void shackled_coin_irq(int state); + + void lastmisn_map(address_map &map) ATTR_COLD; + void lastmisn_sub_map(address_map &map) ATTR_COLD; + void shackled_map(address_map &map) ATTR_COLD; + void shackled_sub_map(address_map &map) ATTR_COLD; + void ym3526_s_map(address_map &map) ATTR_COLD; +}; + +// different interrupt handling +class ghostb_state : public lastmisn_state +{ +public: + ghostb_state(const machine_config &mconfig, device_type type, const char *tag) : + lastmisn_state(mconfig, type, tag), m_nmigate(*this, "nmigate") { } void garyoret(machine_config &config); void ghostb(machine_config &config); - void lastmisn(machine_config &config); void meikyuh(machine_config &config); - void shackled(machine_config &config); void init_meikyuhbl(); @@ -189,62 +219,48 @@ class lastmisn_state : public dec8_mcu_state_base virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; + virtual void i8751_hi_w(u8 data) override; + void gondo_i8751_hi_w(u8 data); void ghostb_bank_w(u8 data); void gondo_scroll_w(offs_t offset, u8 data); - void gondo_mcu_to_main_w(u8 data); + void mcu_to_main_w(u8 data); + void sound_w(u8 data); + + TIMER_CALLBACK_MEMBER(audiocpu_nmi_clear); + TIMER_CALLBACK_MEMBER(mcu_irq_clear); TILE_GET_INFO_MEMBER(get_gondo_fix_tile_info); TILE_GET_INFO_MEMBER(get_gondo_tile_info); - DECLARE_VIDEO_START(lastmisn); - uint32_t screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void screen_vblank(int state); - required_device m_spritegen_krn; optional_device m_nmigate; private: - void lastmisn_control_w(u8 data); - void shackled_control_w(u8 data); - void lastmisn_scrollx_w(u8 data); - void lastmisn_scrolly_w(u8 data); - void shackled_mcu_to_main_w(u8 data); - - TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows); - TILE_GET_INFO_MEMBER(get_ghostb_fix_tile_info); - TILE_GET_INFO_MEMBER(get_lastmisn_tile_info); - TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info); DECLARE_VIDEO_START(garyoret); DECLARE_VIDEO_START(ghostb); - DECLARE_VIDEO_START(shackled); - - uint32_t screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void shackled_coin_irq(int state); + u32 screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void lastmisn_map(address_map &map) ATTR_COLD; - void lastmisn_sub_map(address_map &map) ATTR_COLD; + void ghostb_map(address_map &map) ATTR_COLD; void garyoret_map(address_map &map) ATTR_COLD; - void meikyuh_map(address_map &map) ATTR_COLD; - void shackled_map(address_map &map) ATTR_COLD; - void shackled_sub_map(address_map &map) ATTR_COLD; - void ym3526_s_map(address_map &map) ATTR_COLD; - bool m_secclr = false; - bool m_nmi_enable = false; + bool m_secclr = false; + bool m_nmi_enable = false; + + emu_timer *m_6502_timer = nullptr; + emu_timer *m_i8751_timer = nullptr; }; // with rotary joystick -class gondo_state : public lastmisn_state +class gondo_state : public ghostb_state { public: gondo_state(const machine_config &mconfig, device_type type, const char *tag) : - lastmisn_state(mconfig, type, tag), + ghostb_state(mconfig, type, tag), m_analog_io(*this, "AN%u", 0U), m_in_io(*this, "IN%u", 0U) { @@ -258,7 +274,7 @@ class gondo_state : public lastmisn_state private: template u8 player_io_r(offs_t offset); - uint32_t screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void gondo_colpri_cb(u32 &colour, u32 &pri_mask); @@ -291,8 +307,8 @@ class oscar_state : public dec8_state_base DECLARE_VIDEO_START(cobracom); DECLARE_VIDEO_START(oscar); - uint32_t screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void coin_irq(int state); void coin_clear_w(u8 data); @@ -340,8 +356,8 @@ class csilver_state : public lastmisn_state required_device m_msm; required_memory_bank m_soundbank; - int m_toggle = 0; - int m_msm5205next = 0; + int m_toggle = 0; + int m_msm5205next = 0; }; #endif // MAME_DATAEAST_DEC8_H diff --git a/src/mame/dataeast/dec8_v.cpp b/src/mame/dataeast/dec8_v.cpp index 073785c6607..42ad8f11315 100644 --- a/src/mame/dataeast/dec8_v.cpp +++ b/src/mame/dataeast/dec8_v.cpp @@ -8,9 +8,9 @@ Cobra Command: 256 colours, palette generated by ram. The Real Ghostbusters: -1 Deco VSC30 (M60348) (on DE-0259-1 sub board) -1 Deco HMC20 (M60232) (on DE-0259-1 sub board) -1 x BAC06 (on DE-0273-1 board) + 1 Deco VSC30 (M60348) (on DE-0259-1 sub board) + 1 Deco HMC20 (M60232) (on DE-0259-1 sub board) + 1 x BAC06 (on DE-0273-1 board) 1 playfield, same as above, with rowscroll 1024 colours from 2 proms. @@ -21,25 +21,24 @@ Super Real Darwin: Closer to earlier Darwin 4078 board than above games. Last Mission/Shackled: - Has 1 Deco VSC30 (M60348) (From readme file) - Has 1 Deco HMC20 (M60232) (From readme file) + Has 1 Deco VSC30 (M60348) (From readme file) + Has 1 Deco HMC20 (M60232) (From readme file) - 1 playfield - Sprite hardware same as Karnov. - (Shackled) Palettes 8-15 for tiles seem to have priority over sprites. + 1 playfield + Sprite hardware same as Karnov. + (Shackled) Palettes 8-15 for tiles seem to have priority over sprites. Gondomania: - Has two large square surface mount chips: [ DRL 40, 8053, 8649a ] - Has 1 Deco VSC30 (M60348) - Has 1 Deco HMC20 (M60232) - Priority - all tiles with *pens* 8-15 appear over sprites with palettes 8-15. + Has two large square surface mount chips: [ DRL 40, 8053, 8649a ] + Has 1 Deco VSC30 (M60348) + Has 1 Deco HMC20 (M60232) + Priority - all tiles with *pens* 8-15 appear over sprites with palettes 8-15. Oscar: - Uses MXC-06 custom chip for sprites. - Uses BAC-06 custom chip for background. - I can't find what makes the fix chars... - Priority - tiles with palettes 8-15 have their *pens* 8-15 appearing over -sprites. + Uses MXC-06 custom chip for sprites. + Uses BAC-06 custom chip for background. + I can't find what makes the fix chars... + Priority - tiles with palettes 8-15 have their *pens* 8-15 appearing over sprites. ***************************************************************************/ @@ -80,14 +79,14 @@ void srdarwin_state::control_w(offs_t offset, u8 data) { switch (offset) { - case 0: /* Top 3 bits - bank switch, bottom 4 - scroll MSB */ + case 0: // Top 3 bits - bank switch, bottom 4 - scroll MSB m_mainbank->set_entry((data >> 5)); m_scroll[0] = data & 0xf; - return; + break; case 1: m_scroll[1] = data; - return; + break; } } @@ -113,7 +112,7 @@ void lastmisn_state::lastmisn_control_w(u8 data) void lastmisn_state::shackled_control_w(u8 data) { - /* Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs */ + // Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs m_mainbank->set_entry(data & 0x0f); m_scroll[0] = (data >> 5) & 1; @@ -130,20 +129,20 @@ void lastmisn_state::lastmisn_scrolly_w(u8 data) m_scroll[3] = data; } -void lastmisn_state::gondo_scroll_w(offs_t offset, u8 data) +void ghostb_state::gondo_scroll_w(offs_t offset, u8 data) { switch (offset) { case 0x0: - m_scroll[1] = data; /* X LSB */ + m_scroll[1] = data; // X LSB break; case 0x8: - m_scroll[3] = data; /* Y LSB */ + m_scroll[3] = data; // Y LSB break; case 0x10: - m_scroll[0] = (data >> 0) & 1; /* Bit 0: X MSB */ - m_scroll[2] = (data >> 1) & 1; /* Bit 1: Y MSB */ - /* Bit 2 is also used in Gondo & Garyoret */ + m_scroll[0] = (data >> 0) & 1; // Bit 0: X MSB + m_scroll[2] = (data >> 1) & 1; // Bit 1: Y MSB + // Bit 2 is also used in Gondo & Garyoret break; } } @@ -154,14 +153,14 @@ void dec8_state_base::allocate_buffered_spriteram16() save_pointer(NAME(m_buffered_spriteram16), 0x800/2); } -/******************************************************************************/ +/******************************************************************************/ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &primap) { u8 *buffered_spriteram = m_spriteram->buffer(); - /* Sprites */ + // Sprites for (int offs = 0x200 - 4; offs >= 0; offs -= 4) { u32 pri_mask = 0; @@ -185,10 +184,11 @@ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec { sy = 240 - sy; sx = 240 - sx; - if (fx) fx = 0; else fx = 1; + fx = !fx; sy2 = sy - 16; } - else sy2 = sy + 16; + else + sy2 = sy + 16; m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect, code, @@ -204,6 +204,7 @@ void srdarwin_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec } } + /******************************************************************************/ void oscar_state::cobracom_colpri_cb(u32 &colour, u32 &pri_mask) @@ -215,7 +216,7 @@ void oscar_state::cobracom_colpri_cb(u32 &colour, u32 &pri_mask) colour &= 3; } -uint32_t oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0,cliprect); bool flip = m_tilegen[0]->get_flip_state(); @@ -231,8 +232,8 @@ uint32_t oscar_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 return 0; } -/******************************************************************************/ +/******************************************************************************/ TILE_GET_INFO_MEMBER(oscar_state::get_cobracom_fix_tile_info) { @@ -240,10 +241,7 @@ TILE_GET_INFO_MEMBER(oscar_state::get_cobracom_fix_tile_info) int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xe000) >> 13; - tileinfo.set(0, - tile & 0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } VIDEO_START_MEMBER(oscar_state,cobracom) @@ -256,9 +254,10 @@ VIDEO_START_MEMBER(oscar_state,cobracom) m_game_uses_priority = 0; } + /******************************************************************************/ -uint32_t lastmisn_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 ghostb_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_tilegen[0]->deco_bac06_pf_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0); m_spritegen_krn->draw_sprites(screen, bitmap, cliprect, m_buffered_spriteram16.get(), 0x400); @@ -266,22 +265,19 @@ uint32_t lastmisn_state::screen_update_ghostb(screen_device &screen, bitmap_ind1 return 0; } -TILE_GET_INFO_MEMBER(lastmisn_state::get_ghostb_fix_tile_info) +TILE_GET_INFO_MEMBER(ghostb_state::get_ghostb_fix_tile_info) { int offs = tile_index << 1; int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xc00) >> 10; - tileinfo.set(0, - tile & 0x3ff, - color, - 0); + tileinfo.set(0, tile & 0x3ff, color, 0); } -VIDEO_START_MEMBER(lastmisn_state,ghostb) +VIDEO_START_MEMBER(ghostb_state,ghostb) { allocate_buffered_spriteram16(); - m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_ghostb_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_ghostb_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 0; @@ -290,6 +286,7 @@ VIDEO_START_MEMBER(lastmisn_state,ghostb) save_item(NAME(m_nmi_enable)); } + /******************************************************************************/ // we mimic the priority scheme in dec0.cpp, this was originally a bit different, so this could be wrong @@ -299,7 +296,7 @@ void oscar_state::oscar_tile_cb(tile_data &tileinfo, u32 &tile, u32 &colour, u32 colour &= 7; } -uint32_t oscar_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 oscar_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bool flip = m_tilegen[0]->get_flip_state(); m_tilegen[0]->set_flip_screen(flip); @@ -319,10 +316,7 @@ TILE_GET_INFO_MEMBER(oscar_state::get_oscar_fix_tile_info) int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xf000) >> 14; - tileinfo.set(0, - tile&0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } VIDEO_START_MEMBER(oscar_state,oscar) @@ -337,9 +331,10 @@ VIDEO_START_MEMBER(oscar_state,oscar) m_game_uses_priority = 1; } + /******************************************************************************/ -uint32_t lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8)+ m_scroll[1])); m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8)+ m_scroll[3])); @@ -350,7 +345,7 @@ uint32_t lastmisn_state::screen_update_lastmisn(screen_device &screen, bitmap_in return 0; } -uint32_t lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1])); m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8) + m_scroll[3])); @@ -366,7 +361,7 @@ uint32_t lastmisn_state::screen_update_shackled(screen_device &screen, bitmap_in TILEMAP_MAPPER_MEMBER(lastmisn_state::lastmisn_scan_rows) { - /* logical (col,row) -> memory offset */ + // logical (col,row) -> memory offset return ((col & 0x0f) + ((row & 0x0f) << 4)) + ((col & 0x10) << 4) + ((row & 0x10) << 5); } @@ -381,10 +376,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_tile_info) else tileinfo.category = 0; - tileinfo.set(1, - tile & 0xfff, - color, - 0); + tileinfo.set(1, tile & 0xfff, color, 0); } TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_fix_tile_info) @@ -393,10 +385,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_lastmisn_fix_tile_info) int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0xc000) >> 14; - tileinfo.set(0, - tile&0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } VIDEO_START_MEMBER(lastmisn_state,lastmisn) @@ -420,9 +409,10 @@ VIDEO_START_MEMBER(lastmisn_state,shackled) m_game_uses_priority = 1; } + /******************************************************************************/ -uint32_t srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0, cliprect); m_bg_tilemap->set_scrollx(0, (m_scroll[0] << 8) + m_scroll[1]); @@ -437,14 +427,11 @@ uint32_t srdarwin_state::screen_update(screen_device &screen, bitmap_ind16 &bitm TILE_GET_INFO_MEMBER(srdarwin_state::get_fix_tile_info) { int tile = m_videoram[tile_index]; - int color = 0; /* ? */ + int color = 0; // ? tileinfo.category = 0; - tileinfo.set(0, - tile, - color, - 0); + tileinfo.set(0, tile, color, 0); } TILE_GET_INFO_MEMBER(srdarwin_state::get_tile_info) @@ -456,10 +443,7 @@ TILE_GET_INFO_MEMBER(srdarwin_state::get_tile_info) tile = tile & 0x3ff; bank = (tile / 0x100) + 2; - tileinfo.set(bank, - tile, - color, - 0); + tileinfo.set(bank, tile, color, 0); tileinfo.group = color; } @@ -475,6 +459,7 @@ void srdarwin_state::video_start() m_bg_tilemap->set_transmask(3, 0x0000, 0xffff); // draw as foreground only } + /******************************************************************************/ void gondo_state::gondo_colpri_cb(u32 &colour, u32 &pri_mask) @@ -484,7 +469,7 @@ void gondo_state::gondo_colpri_cb(u32 &colour, u32 &pri_mask) pri_mask |= GFX_PMASK_2; // behind foreground, above background } -uint32_t gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0, cliprect); m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1])); @@ -497,7 +482,7 @@ uint32_t gondo_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &b return 0; } -uint32_t lastmisn_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 ghostb_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, ((m_scroll[0] << 8) + m_scroll[1])); m_bg_tilemap->set_scrolly(0, ((m_scroll[2] << 8) + m_scroll[3])); @@ -509,19 +494,16 @@ uint32_t lastmisn_state::screen_update_garyoret(screen_device &screen, bitmap_in return 0; } -TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_fix_tile_info) +TILE_GET_INFO_MEMBER(ghostb_state::get_gondo_fix_tile_info) { int offs = tile_index * 2; int tile = m_videoram[offs + 1] + (m_videoram[offs] << 8); int color = (tile & 0x7000) >> 12; - tileinfo.set(0, - tile&0xfff, - color, - 0); + tileinfo.set(0, tile & 0xfff, color, 0); } -TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_tile_info) +TILE_GET_INFO_MEMBER(ghostb_state::get_gondo_tile_info) { int offs = tile_index * 2; int tile = m_bg_ram[offs + 1] + (m_bg_ram[offs] << 8); @@ -532,10 +514,7 @@ TILE_GET_INFO_MEMBER(lastmisn_state::get_gondo_tile_info) else tileinfo.category = 0; - tileinfo.set(1, - tile&0xfff, - color, - 0); + tileinfo.set(1, tile & 0xfff, color, 0); } void gondo_state::video_start() @@ -545,18 +524,16 @@ void gondo_state::video_start() m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gondo_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_fix_tilemap->set_transparent_pen(0); - m_bg_tilemap->set_transmask(0, 0x00ff, 0xff00); /* Bottom 8 pens */ + m_bg_tilemap->set_transmask(0, 0x00ff, 0xff00); // Bottom 8 pens m_game_uses_priority = 0; } -VIDEO_START_MEMBER(lastmisn_state,garyoret) +VIDEO_START_MEMBER(ghostb_state,garyoret) { allocate_buffered_spriteram16(); - m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_gondo_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(lastmisn_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_gondo_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ghostb_state::get_gondo_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 1; } - -/******************************************************************************/ diff --git a/src/mame/dataeast/karnov.cpp b/src/mame/dataeast/karnov.cpp index c569d0ca1e7..19b3477c8b3 100644 --- a/src/mame/dataeast/karnov.cpp +++ b/src/mame/dataeast/karnov.cpp @@ -87,6 +87,7 @@ Stephh's notes (based on the games M68000 code and some tests) : #include "sound/ymopn.h" #include "sound/ymopl.h" #include "video/bufsprite.h" + #include "deckarn.h" #include "decrmc3.h" #include "screen.h" @@ -96,7 +97,6 @@ Stephh's notes (based on the games M68000 code and some tests) : namespace { - /************************************* * * Type definitions @@ -106,8 +106,8 @@ namespace { class karnov_state : public driver_device { public: - karnov_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + karnov_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_mcu(*this, "mcu"), @@ -169,6 +169,7 @@ class karnov_state : public driver_device void karnovjbl_sound_map(address_map &map) ATTR_COLD; void screen_vblank(int state); + // protection mcu void mcu_coin_irq(int state); void mcu_ack_w(uint16_t data); @@ -234,28 +235,29 @@ void karnov_state::mcu_p2_w(uint8_t data) // ------1- secreq ack // -------0 cinclr - if (BIT(m_mcu_p2, 0) == 1 && BIT(data, 0) == 0) + const u8 fall = ~data & m_mcu_p2; + m_mcu_p2 = data; + + if (BIT(fall, 0)) m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE); - if (BIT(m_mcu_p2, 1) == 1 && BIT(data, 1) == 0) + if (BIT(fall, 1)) m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - if (BIT(m_mcu_p2, 2) == 1 && BIT(data, 2) == 0) + if (BIT(fall, 2)) m_maincpu->set_input_line(6, ASSERT_LINE); - if (BIT(m_mcu_p2, 4) == 1 && BIT(data, 4) == 0) + if (BIT(fall, 4)) m_mcu_p0 = m_maincpu_to_mcu >> 0; - if (BIT(m_mcu_p2, 5) == 1 && BIT(data, 5) == 0) + if (BIT(fall, 5)) m_mcu_p1 = m_maincpu_to_mcu >> 8; - if (BIT(m_mcu_p2, 6) == 1 && BIT(data, 6) == 0) + if (BIT(fall, 6)) m_mcu_to_maincpu = (m_mcu_to_maincpu & 0xff00) | (m_mcu_p0 << 0); - if (BIT(m_mcu_p2, 7) == 1 && BIT(data, 7) == 0) + if (BIT(fall, 7)) m_mcu_to_maincpu = (m_mcu_to_maincpu & 0x00ff) | (m_mcu_p1 << 8); - - m_mcu_p2 = data; } // i8031 for bootleg emulation @@ -294,10 +296,13 @@ void karnov_state::mcu_data_h_w(uint8_t data) void karnov_state::mcubl_p1_w(uint8_t data) { - if (BIT(m_mcu_p1, 0) == 1 && BIT(data, 0) == 0) + const u8 fall = ~data & m_mcu_p1; + m_mcu_p1 = data; + + if (BIT(fall, 0)) m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - if (BIT(m_mcu_p1, 1) == 1 && BIT(data, 1) == 0) + if (BIT(fall, 1)) m_maincpu->set_input_line(6, ASSERT_LINE); m_mcu_p1 = data; @@ -1251,13 +1256,13 @@ ROM_END * *************************************/ -GAME( 1987, karnov, 0, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 6)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, karnova, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, karnovj, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Karnov (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, karnovjbl, karnov, karnovjbl, karnovjbl, karnov_state, empty_init, ROT0, "bootleg (K. J. Corporation)", "Karnov (Japan, bootleg with NEC D8748HD)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, karnov_state, empty_init, ROT270, "Data East Corporation", "Wonder Planet (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnov, 0, karnov, chelnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovu, chelnov, karnov, chelnovu, karnov_state, empty_init, ROT0, "Data East USA", "Chelnov - Atomic Runner (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovj, chelnov, karnov, chelnovj, karnov_state, empty_init, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovjbl, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Chelnov - Atomic Runner (Japan, bootleg with I8031, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chelnovjbla, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Chelnov - Atomic Runner (Japan, bootleg with I8031, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnov, 0, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 6)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnova, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East USA", "Karnov (US, rev 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnovj, karnov, karnov, karnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Karnov (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, karnovjbl, karnov, karnovjbl, karnovjbl, karnov_state, empty_init, ROT0, "bootleg (K. J. Corporation)", "Karnov (Japan, bootleg with NEC D8748HD)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, karnov_state, empty_init, ROT270, "Data East Corporation", "Wonder Planet (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnov, 0, karnov, chelnov, karnov_state, empty_init, ROT0, "Data East Corporation", "Atomic Runner Chelnov (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovu, chelnov, karnov, chelnovu, karnov_state, empty_init, ROT0, "Data East USA", "Atomic Runner Chelnov (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovj, chelnov, karnov, chelnovj, karnov_state, empty_init, ROT0, "Data East Corporation", "Atomic Runner Chelnov (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovjbl, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Atomic Runner Chelnov (Japan, bootleg with I8031, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chelnovjbla, chelnov, chelnovjbl, chelnovjbl, karnov_state, empty_init, ROT0, "bootleg", "Atomic Runner Chelnov (Japan, bootleg with I8031, set 2)", MACHINE_SUPPORTS_SAVE ) From be6c506e9a071b804385f8168c6e3918091e5fa0 Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 17 Dec 2024 01:02:26 +0100 Subject: [PATCH 35/40] cvs: add 0x1884 sound trigger --- src/mame/dataeast/karnov.cpp | 8 ++-- src/mame/misc/cvs.cpp | 89 ++++++++++++++++++++---------------- 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/src/mame/dataeast/karnov.cpp b/src/mame/dataeast/karnov.cpp index 19b3477c8b3..a28ebe84dc1 100644 --- a/src/mame/dataeast/karnov.cpp +++ b/src/mame/dataeast/karnov.cpp @@ -235,7 +235,7 @@ void karnov_state::mcu_p2_w(uint8_t data) // ------1- secreq ack // -------0 cinclr - const u8 fall = ~data & m_mcu_p2; + const uint8_t fall = ~data & m_mcu_p2; m_mcu_p2 = data; if (BIT(fall, 0)) @@ -296,7 +296,7 @@ void karnov_state::mcu_data_h_w(uint8_t data) void karnov_state::mcubl_p1_w(uint8_t data) { - const u8 fall = ~data & m_mcu_p1; + const uint8_t fall = ~data & m_mcu_p1; m_mcu_p1 = data; if (BIT(fall, 0)) @@ -754,9 +754,9 @@ void karnov_state::karnov(machine_config &config) I8751(config, m_mcu, 8_MHz_XTAL); m_mcu->port_in_cb<0>().set([this](){ return m_mcu_p0; }); - m_mcu->port_out_cb<0>().set([this](u8 data){ m_mcu_p0 = data; }); + m_mcu->port_out_cb<0>().set([this](uint8_t data){ m_mcu_p0 = data; }); m_mcu->port_in_cb<1>().set([this](){ return m_mcu_p1; }); - m_mcu->port_out_cb<1>().set([this](u8 data){ m_mcu_p1 = data; }); + m_mcu->port_out_cb<1>().set([this](uint8_t data){ m_mcu_p1 = data; }); m_mcu->port_out_cb<2>().set(FUNC(karnov_state::mcu_p2_w)); m_mcu->port_in_cb<3>().set_ioport("COIN"); diff --git a/src/mame/misc/cvs.cpp b/src/mame/misc/cvs.cpp index af43705fe68..b8e39f0392c 100644 --- a/src/mame/misc/cvs.cpp +++ b/src/mame/misc/cvs.cpp @@ -16,9 +16,10 @@ Additional work by Couriersud, 2009 This worked fine in an older version of MAME since maincpu was twice slower. - diggerc loses speech sound effects (walking, digging) after killing an enemy. - Emulate protection properly in later games (reads area 0x73fx). -- The board most probably has discrete circuits. Possibly 2 beepers (current - frequency is completely guessed), and a pitch sweep sound. No schematics - are available, or even video references. +- The board has discrete sound circuits, see sh_trigger_w: 0x1884 enables an + 8038CCJD, 0x1885 connects to it too. 0x1886 produces a high-pitched whistle, + and 0x1887 produces a low thud sound. The current implementation with the + beeper devices is wrong, but better than nothing. - Improve starfield: density, blink rate, x repeat of 240, and the checkerboard pattern (fast forward MAME to see) are all correct, the RNG is not right? @@ -97,9 +98,9 @@ ADR14 ADR13 | READ | WRITE | D7 = BULLET AND CP1 OR CP2 | ------------+-------------------------------------------+------------------------------- -Main 2650 runs at 1.78MHz (14.318/8). +Main 2650A runs at 1.78MHz (14.318/8). -Sound board 2650s run at 0.89MHz (14.318/16). Also seen with a 15.625MHz XTAL, +Sound board 2650As run at 0.89MHz (14.318/16). Also seen with a 15.625MHz XTAL, which would result in slightly higher DAC sound pitch. Video timing is via a Signetics 2621 (PAL). @@ -148,9 +149,9 @@ class cvs_state : public driver_device , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") , m_palette(*this, "palette") - , m_dac2(*this, "dac2") + , m_dac(*this, "dac%u", 0) , m_beep(*this, "beep%u", 0) - , m_tms5110(*this, "tms") + , m_tms5100(*this, "tms") , m_in(*this, "IN%u", 0U) , m_dsw(*this, "DSW%u", 1U) , m_lamps(*this, "lamp%u", 1U) @@ -160,7 +161,7 @@ class cvs_state : public driver_device , m_character_ram(*this, "character_ram", 3 * 0x800, ENDIANNESS_BIG) , m_bullet_ram(*this, "bullet_ram") , m_4_bit_dac_data(*this, "4bit_dac") - , m_tms5110_ctl_data(*this, "tms5110_ctl") + , m_tms5100_ctl_data(*this, "tms5100_ctl") , m_sh_trigger(*this, "sh_trigger") , m_speech_data_rom(*this, "speechdata") , m_ram_view(*this, "video_color_ram_view") @@ -194,9 +195,9 @@ class cvs_state : public driver_device required_device m_gfxdecode; required_device m_screen; required_device m_palette; - required_device m_dac2; - required_device_array m_beep; - required_device m_tms5110; + required_device_array m_dac; + required_device_array m_beep; + required_device m_tms5100; required_ioport_array<4> m_in; required_ioport_array<3> m_dsw; output_finder<2> m_lamps; @@ -208,7 +209,7 @@ class cvs_state : public driver_device memory_share_creator m_character_ram; // only half is used, but we can use the same gfx_layout like this required_shared_ptr m_bullet_ram; required_shared_ptr m_4_bit_dac_data; - required_shared_ptr m_tms5110_ctl_data; + required_shared_ptr m_tms5100_ctl_data; required_shared_ptr m_sh_trigger; required_region_ptr m_speech_data_rom; @@ -263,6 +264,7 @@ class cvs_state : public driver_device void palette_w(offs_t offset, u8 data) { m_palette_ram[offset & 0x0f] = data; } u8 input_r(offs_t offset); + void _8_bit_dac_data_w(u8 data); void _4_bit_dac_data_w(offs_t offset, u8 data); void sh_trigger_w(offs_t offset, u8 data); @@ -272,8 +274,8 @@ class cvs_state : public driver_device u8 audio_command_r(); void audio_command_w_sync(s32 param); void audio_command_w(u8 data); - void tms5110_ctl_w(offs_t offset, u8 data); - void tms5110_pdc_w(offs_t offset, u8 data); + void tms5100_ctl_w(offs_t offset, u8 data); + void tms5100_pdc_w(offs_t offset, u8 data); int speech_rom_read_bit(); u8 superbik_prot_r(); @@ -641,10 +643,18 @@ u8 cvs_state::input_r(offs_t offset) /************************************* * - * 4-bit DAC + * Sound hardware * *************************************/ +void cvs_state::_8_bit_dac_data_w(u8 data) +{ + m_dac[0]->write(data); + + // data also goes to 8038 oscillator + m_beep[0]->set_clock(data * 4); +} + void cvs_state::_4_bit_dac_data_w(offs_t offset, u8 data) { data = BIT(data, 7); @@ -662,7 +672,7 @@ void cvs_state::_4_bit_dac_data_w(offs_t offset, u8 data) (m_4_bit_dac_data[3] << 3); // output - m_dac2->write(dac_value); + m_dac[1]->write(dac_value); } void cvs_state::sh_trigger_w(offs_t offset, u8 data) @@ -671,7 +681,7 @@ void cvs_state::sh_trigger_w(offs_t offset, u8 data) * offset 2 is used in darkwar, spacefrt, 8ball, superbik, raiders * offset 3 is used in cosmos, darkwar, superbik, raiders * - * offset 1 is only used inadvertedly by logger + * offset 1 is only used inadvertedly(?) by logger */ data &= 1; @@ -682,8 +692,7 @@ void cvs_state::sh_trigger_w(offs_t offset, u8 data) m_sh_trigger[offset] = data; } - if (offset == 2 || offset == 3) - m_beep[offset & 1]->set_state(data); + m_beep[offset]->set_state(data); } @@ -711,30 +720,30 @@ void cvs_state::speech_rom_address_hi_w(u8 data) u8 cvs_state::speech_command_r() { // this was by observation on board, bit 7 is TMS status (active LO) - return ((m_tms5110->ctl_r() ^ 1) << 7) | (m_audio_command & 0x7f); + return ((m_tms5100->ctl_r() ^ 1) << 7) | (m_audio_command & 0x7f); } -void cvs_state::tms5110_ctl_w(offs_t offset, u8 data) +void cvs_state::tms5100_ctl_w(offs_t offset, u8 data) { // offset 0: CS? - m_tms5110_ctl_data[offset] = (~data >> 7) & 0x01; + m_tms5100_ctl_data[offset] = (~data >> 7) & 0x01; u8 const ctl = 0 | // CTL1 - (m_tms5110_ctl_data[1] << 1) | // CTL2 - (m_tms5110_ctl_data[2] << 2) | // CTL4 - (m_tms5110_ctl_data[1] << 3); // CTL8 + (m_tms5100_ctl_data[1] << 1) | // CTL2 + (m_tms5100_ctl_data[2] << 2) | // CTL4 + (m_tms5100_ctl_data[1] << 3); // CTL8 LOGMASKED(LOG_SPEECH, "CVS: Speech CTL = %04x %02x %02x\n", ctl, offset, data); - m_tms5110->ctl_w(ctl); + m_tms5100->ctl_w(ctl); } -void cvs_state::tms5110_pdc_w(offs_t offset, u8 data) +void cvs_state::tms5100_pdc_w(offs_t offset, u8 data) { u8 const out = ((~data) >> 7) & 1; LOGMASKED(LOG_SPEECH, "CVS: Speech PDC = %02x %02x\n", offset, out); - m_tms5110->pdc_w(out); + m_tms5100->pdc_w(out); } @@ -839,7 +848,7 @@ void cvs_state::audio_cpu_map(address_map &map) map(0x0000, 0x0fff).rom(); map(0x1000, 0x107f).ram(); map(0x1800, 0x1800).r(FUNC(cvs_state::audio_command_r)); - map(0x1840, 0x1840).w("dac1", FUNC(dac_byte_interface::data_w)); + map(0x1840, 0x1840).w(FUNC(cvs_state::_8_bit_dac_data_w)); map(0x1880, 0x1883).w(FUNC(cvs_state::_4_bit_dac_data_w)).share(m_4_bit_dac_data); map(0x1884, 0x1887).w(FUNC(cvs_state::sh_trigger_w)).share(m_sh_trigger); } @@ -859,8 +868,8 @@ void cvs_state::speech_cpu_map(address_map &map) map(0x1d00, 0x1d00).w(FUNC(cvs_state::speech_rom_address_lo_w)); map(0x1d40, 0x1d40).w(FUNC(cvs_state::speech_rom_address_hi_w)); map(0x1d80, 0x1d80).r(FUNC(cvs_state::speech_command_r)); - map(0x1ddc, 0x1dde).w(FUNC(cvs_state::tms5110_ctl_w)).share(m_tms5110_ctl_data); - map(0x1ddf, 0x1ddf).w(FUNC(cvs_state::tms5110_pdc_w)); + map(0x1ddc, 0x1dde).w(FUNC(cvs_state::tms5100_ctl_w)).share(m_tms5100_ctl_data); + map(0x1ddf, 0x1ddf).w(FUNC(cvs_state::tms5100_pdc_w)); } @@ -1331,7 +1340,7 @@ void cvs_state::cvs(machine_config &config) S2650(config, m_speechcpu, 14.318181_MHz_XTAL / 16); m_speechcpu->set_addrmap(AS_PROGRAM, &cvs_state::speech_cpu_map); - m_speechcpu->sense_handler().set("tms", FUNC(tms5110_device::romclk_hack_r)); + m_speechcpu->sense_handler().set("tms", FUNC(tms5100_device::romclk_hack_r)); // video hardware GFXDECODE(config, m_gfxdecode, m_palette, gfx_cvs); @@ -1361,15 +1370,17 @@ void cvs_state::cvs(machine_config &config) // audio hardware SPEAKER(config, "speaker").front_center(); - DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.15); // unknown DAC - DAC_4BIT_R2R(config, m_dac2, 0).add_route(ALL_OUTPUTS, "speaker", 0.20); // unknown DAC + DAC_8BIT_R2R(config, m_dac[0], 0).add_route(ALL_OUTPUTS, "speaker", 0.15); // unknown DAC + DAC_4BIT_R2R(config, m_dac[1], 0).add_route(ALL_OUTPUTS, "speaker", 0.20); // unknown DAC - BEEP(config, m_beep[0], 600).add_route(ALL_OUTPUTS, "speaker", 0.15); // placeholder - BEEP(config, m_beep[1], 150).add_route(ALL_OUTPUTS, "speaker", 0.15); // " + BEEP(config, m_beep[0], 0).add_route(ALL_OUTPUTS, "speaker", 0.10); // placeholder + BEEP(config, m_beep[1], 0).add_route(ALL_OUTPUTS, "speaker", 0.10); // " + BEEP(config, m_beep[2], 600).add_route(ALL_OUTPUTS, "speaker", 0.15); // " + BEEP(config, m_beep[3], 150).add_route(ALL_OUTPUTS, "speaker", 0.15); // " - TMS5100(config, m_tms5110, 640_kHz_XTAL); - m_tms5110->data().set(FUNC(cvs_state::speech_rom_read_bit)); - m_tms5110->add_route(ALL_OUTPUTS, "speaker", 0.30); + TMS5100(config, m_tms5100, 640_kHz_XTAL); + m_tms5100->data().set(FUNC(cvs_state::speech_rom_read_bit)); + m_tms5100->add_route(ALL_OUTPUTS, "speaker", 0.30); } From e85d8922eb3b308dd91946845429700c3aa18b0a Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 17 Dec 2024 01:09:40 +0100 Subject: [PATCH 36/40] espial: swap button1/2 --- src/mame/orca/espial.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/mame/orca/espial.cpp b/src/mame/orca/espial.cpp index 614b4e448a1..1432286213b 100644 --- a/src/mame/orca/espial.cpp +++ b/src/mame/orca/espial.cpp @@ -196,10 +196,8 @@ TILE_GET_INFO_MEMBER(espial_state::get_tile_info) uint8_t const code = m_videoram[tile_index]; uint8_t const col = m_colorram[tile_index]; uint8_t const attr = m_attributeram[tile_index]; - tileinfo.set(0, - code | ((attr & 0x03) << 8), - col & 0x3f, - TILE_FLIPYX(attr >> 2)); + + tileinfo.set(0, code | ((attr & 0x03) << 8), col & 0x3f, TILE_FLIPYX(attr >> 2)); } @@ -471,7 +469,7 @@ static INPUT_PORTS_START( espial ) PORT_DIPUNUSED( 0x08, IP_ACTIVE_HIGH ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("DSW1") @@ -507,7 +505,7 @@ static INPUT_PORTS_START( espial ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) @@ -515,8 +513,8 @@ static INPUT_PORTS_START( espial ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY INPUT_PORTS_END From c1a80b2bc3d473df078f41172d38fc3dafdcbbc6 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 16 Dec 2024 21:06:58 -0500 Subject: [PATCH 37/40] gng: Use 4-way joysticks --- src/mame/capcom/gng.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/mame/capcom/gng.cpp b/src/mame/capcom/gng.cpp index ac546934f1d..7271ab3308c 100644 --- a/src/mame/capcom/gng.cpp +++ b/src/mame/capcom/gng.cpp @@ -321,32 +321,29 @@ static INPUT_PORTS_START( gng ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // pin 17 on edge connector PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("DSW1") PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8,7,6,5") From 1aafded4a2dfe999c9a1a4901b5a74883df76c29 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Tue, 17 Dec 2024 04:07:11 +0100 Subject: [PATCH 38/40] potnpkro and potnpkrp sets: Dumped the correct bipolar PROMs, and reproduced the wire hack [Roberto Fresca, Hammy] --- src/mame/misc/goldnpkr.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mame/misc/goldnpkr.cpp b/src/mame/misc/goldnpkr.cpp index fdc54690591..d25e5793337 100644 --- a/src/mame/misc/goldnpkr.cpp +++ b/src/mame/misc/goldnpkr.cpp @@ -6072,8 +6072,8 @@ ROM_START( potnpkro ) // ICP-1 wires hack set. ROM_LOAD( "8.6a", 0x0800, 0x0800, CRC(6bbb1e2d) SHA1(51ee282219bf84218886ad11a24bc6a8e7337527) ) // cards deck gfx, bitplane2 ROM_LOAD( "9.7a", 0x1000, 0x0800, CRC(907b21df) SHA1(a6a3968b2ee23ef15ecc8c3b2afbe1b2cc5f42e7) ) // cards deck gfx, bitplane3 - ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "tbp24sa10.bin", 0x0000, 0x0100, BAD_DUMP CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // not dumped for this set + ROM_REGION( 0x0100, "proms", 0 ) // same as common golden poker + ROM_LOAD( "tbp24s10n_wh.bin", 0x0000, 0x0100, CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) ROM_END ROM_START( potnpkrp ) // ICP-1 PROM mod set. @@ -6092,8 +6092,11 @@ ROM_START( potnpkrp ) // ICP-1 PROM mod set. ROM_LOAD( "3.7a", 0x1000, 0x0800, CRC(77143e12) SHA1(b459f704d89be1dd64de3514c0adc6a5d5364749) ) // cards deck gfx, bitplane3 ROM_IGNORE( 0x0800) // identical halves, discarding the 2nd half - ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "tbp24sa10.bin", 0x0000, 0x0100, BAD_DUMP CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // not dumped for this set + ROM_REGION( 0x0100, "proms", 0 ) // high addressing pin tied to GND. the unused second half turns the background color to magenta. + ROM_LOAD( "tbp24s10n_pm.bin", 0x0000, 0x0080, CRC(1e79c53d) SHA1(8aa5ae1b82c6e8277427a53a54718f72737e4ec3) ) + ROM_IGNORE( 0x0080) + ROM_RELOAD( 0x0080, 0x0080) + ROM_IGNORE( 0x0080) ROM_END From f32a8202fcdd8128eea7d115b824e9eeabd68ad8 Mon Sep 17 00:00:00 2001 From: angelosa Date: Tue, 17 Dec 2024 11:42:45 +0100 Subject: [PATCH 39/40] video/pc_vga_cirrus: workaround crash for zorro/picasso2, fix bit 3 in blitting status --- src/devices/bus/amiga/zorro/picasso2.cpp | 2 +- src/devices/video/pc_vga_cirrus.cpp | 60 +++++++++++++++++++----- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/devices/bus/amiga/zorro/picasso2.cpp b/src/devices/bus/amiga/zorro/picasso2.cpp index 0ff61413aa9..9863b954523 100644 --- a/src/devices/bus/amiga/zorro/picasso2.cpp +++ b/src/devices/bus/amiga/zorro/picasso2.cpp @@ -54,7 +54,7 @@ void picasso2p_device::mmio_map(address_map &map) { map(0x0000, 0x0fff).rw(FUNC(picasso2p_device::vga0_r), FUNC(picasso2p_device::vga0_w)).umask16(0xffff); map(0x1000, 0x1fff).rw(FUNC(picasso2p_device::vga1_r), FUNC(picasso2p_device::vga1_w)).umask16(0xffff); - map(0x46e8, 0x46b8).unmaprw(); // TODO + map(0x46e8, 0x46e8).w(m_vga, FUNC(cirrus_gd5428_vga_device::mode_setup_w)); } void picasso2p_device::vga_map(address_map &map) diff --git a/src/devices/video/pc_vga_cirrus.cpp b/src/devices/video/pc_vga_cirrus.cpp index a33eb1edf28..475018b6a87 100644 --- a/src/devices/video/pc_vga_cirrus.cpp +++ b/src/devices/video/pc_vga_cirrus.cpp @@ -8,6 +8,8 @@ * - Original Acumos AVGA1/2 chipsets (Cirrus Logic eventually bought Acumos and rebranded); * - Fix or implement hidden DAC modes (15bpp + mixed, true color, others); * - bebox: logo at startup is squashed; + * - zorro/picasso2: many blitting errors, verify HW cursor; + * - zorro/picasso2: segmentation fault on exit * - Merge with trs/vis.cpp implementation (CL-GD5200 RAMDAC with custom VGA controller) * */ @@ -24,7 +26,7 @@ #define LOG_BANK (1U << 4) // log offset registers #define LOG_PLL (1U << 5) -#define VERBOSE (LOG_GENERAL | LOG_HDAC | LOG_REG | LOG_PLL) +#define VERBOSE (LOG_GENERAL | LOG_HDAC | LOG_REG | LOG_BLIT) //#define LOG_OUTPUT_FUNC osd_printf_info #include "logmacro.h" @@ -331,6 +333,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_width = (m_blt_width & 0xff00) | data; + LOGMASKED(LOG_BLIT, "CL: blt_width %02x [0] (%04x)\n", data, m_blt_width); }) ); // BLT Width 1 @@ -340,6 +343,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_width = (m_blt_width & 0x00ff) | (data << 8); + LOGMASKED(LOG_BLIT, "CL: blt_width %02x [1] (%04x)\n", data, m_blt_width); }) ); // BLT Height 0 @@ -349,6 +353,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_height = (m_blt_height & 0xff00) | data; + LOGMASKED(LOG_BLIT, "CL: m_blt_height %02x [0] (%04x)\n", data, m_blt_height); }) ); // BLT Height 1 @@ -358,6 +363,7 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_height = (m_blt_height & 0x00ff) | (data << 8); + LOGMASKED(LOG_BLIT, "CL: m_blt_height %02x [1] (%04x)\n", data, m_blt_height); }) ); // BLT Destination Pitch 0 @@ -436,6 +442,8 @@ void cirrus_gd5428_vga_device::gc_map(address_map &map) }), NAME([this](offs_t offset, u8 data) { m_blt_status = data & ~0xf2; + if (BIT(data, 2)) + m_blt_status &= ~9; if(data & 0x02) { if(m_blt_mode & 0x04) // blit source is system memory @@ -625,6 +633,7 @@ void cirrus_gd5428_vga_device::sequencer_map(address_map &map) void cirrus_gd5428_vga_device::device_start() { + svga_device::device_start(); zero(); for (int i = 0; i < 0x100; i++) @@ -634,10 +643,10 @@ void cirrus_gd5428_vga_device::device_start() vga.crtc.maximum_scan_line = 1; // copy over interfaces - vga.memory = std::make_unique(vga.svga_intf.vram_size); - memset(&vga.memory[0], 0, vga.svga_intf.vram_size); + //vga.memory = std::make_unique(vga.svga_intf.vram_size); + //memset(&vga.memory[0], 0, vga.svga_intf.vram_size); - save_pointer(NAME(vga.memory), vga.svga_intf.vram_size); + //save_pointer(NAME(vga.memory), vga.svga_intf.vram_size); save_pointer(vga.crtc.data,"CRTC Registers",0x100); save_pointer(vga.sequencer.data,"Sequencer Registers",0x100); save_pointer(vga.attribute.data,"Attribute Registers", 0x15); @@ -666,7 +675,7 @@ void cirrus_gd5446_vga_device::device_start() void cirrus_gd5428_vga_device::device_reset() { - vga_device::device_reset(); + svga_device::device_reset(); gc_locked = true; gc_mode_ext = 0; gc_bank[0] = gc_bank[1] = 0; @@ -945,7 +954,7 @@ void cirrus_gd5428_vga_device::start_bitblt() m_blt_source_current = m_blt_source + (m_blt_source_pitch*(y+1)); m_blt_dest_current = m_blt_dest + (m_blt_dest_pitch*(y+1)); } - m_blt_status &= ~0x02; + m_blt_status &= ~0x09; } void cirrus_gd5428_vga_device::start_reverse_bitblt() @@ -1020,7 +1029,7 @@ void cirrus_gd5428_vga_device::start_reverse_bitblt() m_blt_source_current = m_blt_source - (m_blt_source_pitch*(y+1)); m_blt_dest_current = m_blt_dest - (m_blt_dest_pitch*(y+1)); } - m_blt_status &= ~0x02; + m_blt_status &= ~0x09; } void cirrus_gd5428_vga_device::start_system_bitblt() @@ -1111,9 +1120,17 @@ void cirrus_gd5428_vga_device::copy_pixel(uint8_t src, uint8_t dst) case 0x0e: // WHITE res = 0xff; break; + case 0x50: // DSna / DPna + // used by picasso2, unknown purpose + res = (dst & (~src)); + break; case 0x59: // SRCINVERT res = src ^ dst; break; + case 0x6d: // SRCPAINT / DSo + // picasso2 on VGA Workbench (upper right icon) + res = src | dst; + break; default: popmessage("pc_vga_cirrus: Unsupported BitBLT ROP mode %02x",m_blt_rop); } @@ -1169,11 +1186,21 @@ uint8_t cirrus_gd5428_vga_device::mem_r(offs_t offset) uint32_t addr; uint8_t cur_mode = pc_vga_choosevideomode(); - if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) - return vga_device::mem_r(offset); - const uint8_t bank = offset_select(offset); + // FIXME: workaround crash behaviour in picasso2 + // it will otherwise provide an offset of 0x1fxxxx in the gc_locked below + // causing a crash during adapter init + if(svga.rgb8_en || svga.rgb15_en || svga.rgb16_en || svga.rgb24_en) + { + return svga_device::mem_linear_r((offset & 0xffff) + bank * 0x10000); + } + + if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) + { + return vga_device::mem_r(offset & 0x1ffff); + } + if(gc_mode_ext & 0x20) // 16kB bank granularity addr = bank * 0x4000; else // 4kB bank granularity @@ -1320,13 +1347,20 @@ void cirrus_gd5428_vga_device::mem_w(offs_t offset, uint8_t data) return; } - if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) + const uint8_t bank = offset_select(offset); + + // FIXME: as above + if(svga.rgb8_en || svga.rgb15_en || svga.rgb16_en || svga.rgb24_en) { - vga_device::mem_w(offset,data); + svga_device::mem_linear_w((offset + bank * 0x10000), data); return; } - const uint8_t bank = offset_select(offset); + if(gc_locked || offset >= 0x10000 || cur_mode == TEXT_MODE || cur_mode == SCREEN_OFF) + { + vga_device::mem_w(offset & 0x1ffff,data); + return; + } if(gc_mode_ext & 0x20) // 16kB bank granularity addr = bank * 0x4000; From 00b8637894d69dd45f9ee79cc24973666a0934c0 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 17 Dec 2024 18:12:07 +0100 Subject: [PATCH 40/40] - dynax/royalmah.cpp: dumped PROM for janohb [Hammy] - igs/goldstar.cpp: verified PROMs for eldoraddob [Hammy] --- src/mame/dynax/royalmah.cpp | 4 ++-- src/mame/igs/goldstar.cpp | 8 ++++---- src/mame/moog/source.cpp | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp index cf87de977d5..1487d453893 100644 --- a/src/mame/dynax/royalmah.cpp +++ b/src/mame/dynax/royalmah.cpp @@ -5504,7 +5504,7 @@ ROM_START( janoh ) ROM_LOAD( "rom7.p6", 0x6000, 0x1000, NO_DUMP ) ROM_REGION( 0x20, "proms", 0 ) - ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP ) + ROM_LOAD( "janoh.color", 0x00, 0x20, NO_DUMP ) ROM_END ROM_START( janohb ) // same set was also found with the first 6 ROMs combined in 3 bigger capacity ROMs @@ -5518,7 +5518,7 @@ ROM_START( janohb ) // same set was also found with the first 6 ROMs combined in ROM_LOAD( "jo7.7", 0x6000, 0x1000, CRC(774cb324) SHA1(930d6643fcd7e479a68811e775144d46f0183636) ) ROM_REGION( 0x20, "proms", 0 ) - ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP ) + ROM_LOAD( "janoh.color", 0x00, 0x20, CRC(74a53e94) SHA1(ca9114bd9b2b07f5abe82616b41ae9fdb9537a4f) ) ROM_END /*************************************************************************** diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index 05a7db7ca9f..42fd86917c1 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -18581,10 +18581,10 @@ ROM_START( eldoraddob ) // String "DYNA ELD3 V2.0D" in program ROM, DYNA D9105B ROM_REGION( 0x100000, "gfx", 0 ) ROM_LOAD( "tc538000p-dyna dm9106.h2", 0x000000, 0x100000, CRC(fa84c372) SHA1(a71e57e76321b7ebb16933d9bc983b9160995b4a) ) - ROM_REGION( 0x300, "proms", 0 ) // not dumped for this set, but GFX ROM matches the one for eldoraddo - ROM_LOAD( "mb7114.e8", 0x000, 0x100, BAD_DUMP CRC(fa274678) SHA1(6712cb1f7ead1a7aa703ec799e7199c33ace857c) ) - ROM_LOAD( "mb7114.e10", 0x100, 0x100, BAD_DUMP CRC(e58877ea) SHA1(30fa873fc05d91610ef68eef54b78f2c7301a62a) ) - ROM_LOAD( "mb7114.e12", 0x200, 0x100, BAD_DUMP CRC(781b2842) SHA1(566667d4f81e93b29bb01dbc51bf144c02dff75d) ) + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "e14", 0x000, 0x100, CRC(fa274678) SHA1(6712cb1f7ead1a7aa703ec799e7199c33ace857c) ) + ROM_LOAD( "e15", 0x100, 0x100, CRC(e58877ea) SHA1(30fa873fc05d91610ef68eef54b78f2c7301a62a) ) + ROM_LOAD( "e16", 0x200, 0x100, CRC(781b2842) SHA1(566667d4f81e93b29bb01dbc51bf144c02dff75d) ) ROM_REGION( 0x400, "plds", 0 ) // available as brute-forced dumps, need to be verified and converted ROM_LOAD( "pal16l8.d13", 0x000, 0x104, NO_DUMP ) diff --git a/src/mame/moog/source.cpp b/src/mame/moog/source.cpp index 3af84130486..490ffa7235b 100644 --- a/src/mame/moog/source.cpp +++ b/src/mame/moog/source.cpp @@ -66,7 +66,7 @@ class source_state : public driver_device { public: source_state(const machine_config& mconfig, device_type type, - const char* tag) ATTR_COLD + const char* tag) ATTR_COLD : driver_device(mconfig, type, tag) , m_maincpu(*this, MAINCPU_TAG) , m_octave_io(*this, "octave_buttons") @@ -371,7 +371,7 @@ void source_state::cv_w(offs_t offset, u8 data) if (offset == static_cast(CV::KEYBOARD_APPROX)) LOGMASKED(LOG_CV_KEYBOARD_APPROX, - "CV %d: 0x%02x, %f\n", offset, data, cv); + "CV %d: 0x%02x, %f\n", offset, data, cv); else LOGMASKED(LOG_CV, "CV %d: 0x%02x, %f\n", offset, data, cv); } @@ -426,7 +426,7 @@ float source_state::get_keyboard_v() const const float v = KEYBOARD_VREF * RES_VOLTAGE_DIVIDER(upper_r, lower_r); kb_voltage = v * RES_VOLTAGE_DIVIDER(R77, R76); LOGMASKED(LOG_KEYBOARD, "Key %d - %f - %f\n", pressed_key, v, - kb_voltage); + kb_voltage); } return kb_voltage; } @@ -494,7 +494,7 @@ u8 source_state::buttons_r( if (pressed & 0x3f) { LOGMASKED(LOG_BUTTONS, "Button read %s - %02X: %02X\n", - name, m_button_row_latch, pressed); + name, m_button_row_latch, pressed); } return pressed; } @@ -517,7 +517,7 @@ u8 source_state::encoder_r() { // D0 contains whether the encoder was last incremented or decremented. LOGMASKED(LOG_ENCODER, - "Encoder read: %d - %d\n", m_encoder->read(), m_encoder_incr); + "Encoder read: %d - %d\n", m_encoder->read(), m_encoder_incr); // Reading the encoder's state also clears /INT (via U21B, U7A and U15A). if (!machine().side_effects_disabled()) m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); @@ -651,9 +651,9 @@ DECLARE_INPUT_CHANGED_MEMBER(source_state::encoder_moved) { static constexpr const int WRAP_BUFFER = 10; const bool overflowed = newval <= WRAP_BUFFER && - oldval >= 240 - WRAP_BUFFER; + oldval >= 240 - WRAP_BUFFER; const bool underflowed = newval >= 240 - WRAP_BUFFER && - oldval <= WRAP_BUFFER; + oldval <= WRAP_BUFFER; m_encoder_incr = ((newval > oldval) || overflowed) && !underflowed; m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); LOGMASKED(LOG_ENCODER, "Encoder changed: %d %d\n", newval, m_encoder_incr); @@ -835,5 +835,5 @@ ROM_END } // Anonymous namespace. -SYST(1981, moogsource, 0, 0, source, source, source_state, empty_init, "Moog Music", "Moog Source", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND); +SYST(1981, moogsource, 0, 0, source, source, source_state, empty_init, "Moog Music", "Moog Source", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND)