From 670e2062cb0afac2280f9221faab4fc58171c5ea Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 23 Apr 2025 04:25:39 +1000 Subject: [PATCH 01/15] osd: Got rid of the gross globals and functions for manipulating them in the network modules. --- scripts/src/osd/modules.lua | 4 +- src/emu/dinetwork.cpp | 4 +- src/emu/dinetwork.h | 4 +- src/frontend/mame/ui/miscmenu.cpp | 41 +++++---- src/osd/interface/nethandler.h | 25 ++++++ src/osd/modules/lib/osdobj_common.cpp | 30 ++++--- src/osd/modules/lib/osdobj_common.h | 14 ++- src/osd/modules/netdev/netdev_common.cpp | 39 +++++++++ src/osd/modules/netdev/netdev_common.h | 36 ++++++++ src/osd/modules/netdev/netdev_module.h | 9 +- src/osd/modules/netdev/none.cpp | 19 +++- src/osd/modules/netdev/pcap.cpp | 105 ++++++++++++++--------- src/osd/modules/netdev/taptun.cpp | 90 ++++++++++++------- src/osd/osdepend.h | 5 ++ src/osd/osdnet.cpp | 79 ----------------- src/osd/osdnet.h | 61 ------------- 16 files changed, 314 insertions(+), 251 deletions(-) create mode 100644 src/osd/modules/netdev/netdev_common.cpp create mode 100644 src/osd/modules/netdev/netdev_common.h delete mode 100644 src/osd/osdnet.cpp delete mode 100644 src/osd/osdnet.h diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index 0dd3e561731..ca49a2682ca 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -50,8 +50,6 @@ function osdmodulesbuild() } files { - MAME_DIR .. "src/osd/osdnet.cpp", - MAME_DIR .. "src/osd/osdnet.h", MAME_DIR .. "src/osd/watchdog.cpp", MAME_DIR .. "src/osd/watchdog.h", MAME_DIR .. "src/osd/interface/inputcode.h", @@ -111,6 +109,8 @@ function osdmodulesbuild() MAME_DIR .. "src/osd/modules/monitor/monitor_module.h", MAME_DIR .. "src/osd/modules/monitor/monitor_sdl.cpp", MAME_DIR .. "src/osd/modules/monitor/monitor_win32.cpp", + MAME_DIR .. "src/osd/modules/netdev/netdev_common.cpp", + MAME_DIR .. "src/osd/modules/netdev/netdev_common.h", MAME_DIR .. "src/osd/modules/netdev/netdev_module.h", MAME_DIR .. "src/osd/modules/netdev/none.cpp", MAME_DIR .. "src/osd/modules/netdev/pcap.cpp", diff --git a/src/emu/dinetwork.cpp b/src/emu/dinetwork.cpp index fb806d7eba4..30e10361c97 100644 --- a/src/emu/dinetwork.cpp +++ b/src/emu/dinetwork.cpp @@ -4,7 +4,7 @@ #include "emu.h" #include "dinetwork.h" -#include "osdnet.h" +#include "osdepend.h" #include @@ -143,7 +143,7 @@ void device_network_interface::set_interface(int id) if (m_dev) stop_net_device(); - m_dev.reset(open_netdev(id, *this)); + m_dev = device().machine().osd().open_network_device(id, *this); if (m_dev) { if (!m_loopback_control) diff --git a/src/emu/dinetwork.h b/src/emu/dinetwork.h index bd843fb679c..99fc1cb3a88 100644 --- a/src/emu/dinetwork.h +++ b/src/emu/dinetwork.h @@ -6,8 +6,6 @@ #include "interface/nethandler.h" -class osd_network_device; - class device_network_interface : public device_interface, public osd::network_handler { public: @@ -51,7 +49,7 @@ private: void start_net_device(); void stop_net_device(); - std::unique_ptr m_dev; + std::unique_ptr m_dev; emu_timer *m_poll_timer; emu_timer *m_send_timer; emu_timer *m_recv_timer; diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index df5754a380e..377c34ed2d8 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -20,7 +20,6 @@ #include "infoxml.h" #include "mame.h" -#include "osdnet.h" #include "mameopts.h" #include "pluginopts.h" #include "dinetwork.h" @@ -29,6 +28,8 @@ #include "romload.h" #include "uiinput.h" +#include "osdepend.h" + #include "path.h" #include @@ -172,17 +173,17 @@ void menu_network_devices::populate() for (device_network_interface &network : network_interface_enumerator(machine().root_device())) { int curr = network.get_interface(); - const char *title = nullptr; - for (auto &entry : get_netdev_list()) + std::string_view title; + for (auto &entry : machine().osd().list_network_devices()) { - if (entry->id == curr) + if (entry.id == curr) { - title = entry->description; + title = entry.description; break; } } - item_append(network.device().tag(), title ? title : "------", FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&network); + item_append(network.device().tag(), std::string(!title.empty() ? title : "------"), FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&network); } item_append(menu_item_type::SEPARATOR); @@ -200,30 +201,34 @@ bool menu_network_devices::handle(event const *ev) } else if (ev->iptkey == IPT_UI_LEFT || ev->iptkey == IPT_UI_RIGHT) { - // FIXME: this conflates presumably arbitrary interface ID numbers with 0-based indices device_network_interface *const network = (device_network_interface *)ev->itemref; - auto const &interfaces = get_netdev_list(); + auto const interfaces = machine().osd().list_network_devices(); int curr = network->get_interface(); + auto const found = std::find_if( + std::begin(interfaces), + std::end(interfaces), + [curr] (osd::network_device_info const &info) { return info.id == curr; }); + auto index = std::distance(interfaces.begin(), found); if (ev->iptkey == IPT_UI_LEFT) - curr--; - else - curr++; - if (curr == -2) - curr = interfaces.size() - 1; - network->set_interface(curr); + --index; + else if (std::end(interfaces) == found) + index = 0; + else if (std::size(interfaces) <= ++index) + index = -1; + network->set_interface((0 <= index) ? interfaces[index].id : -1); curr = network->get_interface(); - const char *title = nullptr; + std::string_view title; for (auto &entry : interfaces) { - if (entry->id == curr) + if (entry.id == curr) { - title = entry->description; + title = entry.description; break; } } - ev->item->set_subtext(title ? title : "------"); + ev->item->set_subtext(!title.empty() ? title : "------"); return true; } else diff --git a/src/osd/interface/nethandler.h b/src/osd/interface/nethandler.h index ab2854d4f59..9513b158d99 100644 --- a/src/osd/interface/nethandler.h +++ b/src/osd/interface/nethandler.h @@ -15,6 +15,7 @@ #include "osdcomm.h" #include +#include namespace osd { @@ -23,6 +24,7 @@ namespace osd { // TYPE DEFINITIONS //************************************************************************** + // base for virtual network interface handler class network_handler @@ -40,6 +42,29 @@ protected: std::array m_mac; }; + +// interface to network device + +class network_device +{ +public: + virtual ~network_device() = default; + + virtual void start() = 0; + virtual void stop() = 0; + virtual void poll() = 0; + virtual int send(const void *buf, int len) = 0; +}; + + +// description of an available network device + +struct network_device_info +{ + int id; + std::string_view description; +}; + } // namespace osd #endif // MAME_OSD_INTERFACE_NETHANDLER_H diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp index e3c8d63b0d6..eed73f3097b 100644 --- a/src/osd/modules/lib/osdobj_common.cpp +++ b/src/osd/modules/lib/osdobj_common.cpp @@ -15,12 +15,12 @@ #include "modules/font/font_module.h" #include "modules/input/input_module.h" #include "modules/midi/midi_module.h" +#include "modules/netdev/netdev_module.h" #include "modules/monitor/monitor_module.h" #include "modules/netdev/netdev_module.h" #include "modules/render/render_module.h" #include "modules/sound/sound_module.h" -#include "osdnet.h" #include "watchdog.h" #include "emu.h" @@ -208,6 +208,7 @@ osd_common_t::osd_common_t(osd_options &options) , m_sound(nullptr) , m_debugger(nullptr) , m_midi(nullptr) + , m_network(nullptr) , m_keyboard_input(nullptr) , m_mouse_input(nullptr) , m_lightgun_input(nullptr) @@ -615,8 +616,8 @@ bool osd_common_t::execute_command(const char *command) { if (strcmp(command, OSDCOMMAND_LIST_NETWORK_ADAPTERS) == 0) { - osd_module &om = select_module_options(OSD_NETDEV_PROVIDER); - auto const &interfaces = get_netdev_list(); + auto &om = select_module_options(OSD_NETDEV_PROVIDER); + auto const interfaces = om.list_devices(); if (interfaces.empty()) { printf("No supported network interfaces were found\n"); @@ -626,17 +627,17 @@ bool osd_common_t::execute_command(const char *command) printf("Available network interfaces:\n"); for (auto &entry : interfaces) { - printf(" %s\n", entry->description); + printf(" %.*s\n", int(entry.description.length()), entry.description.data()); } } - om.exit(); + dynamic_cast(om).exit(); return true; } else if (strcmp(command, OSDCOMMAND_LIST_MIDI_DEVICES) == 0) { - osd_module &om = select_module_options(OSD_MIDI_PROVIDER); - auto const ports = dynamic_cast(om).list_midi_ports(); + auto &om = select_module_options(OSD_MIDI_PROVIDER); + auto const ports = om.list_midi_ports(); if (ports.empty()) { printf("No MIDI ports were found\n"); @@ -657,7 +658,7 @@ bool osd_common_t::execute_command(const char *command) printf(port.default_output ? "%s (default)\n" : "%s\n", port.name.c_str()); } } - om.exit(); + dynamic_cast(om).exit(); return true; } @@ -697,10 +698,10 @@ void osd_common_t::init_subsystems() m_debugger = &select_module_options(OSD_DEBUG_PROVIDER); - select_module_options(OSD_NETDEV_PROVIDER); - m_midi = &select_module_options(OSD_MIDI_PROVIDER); + m_network = &select_module_options(OSD_NETDEV_PROVIDER); + m_output = &select_module_options(OSD_OUTPUT_PROVIDER); machine().output().set_global_notifier(output_notifier_callback, this); @@ -788,3 +789,12 @@ std::vector osd_common_t::list_midi_ports() return m_midi->list_midi_ports(); } +std::unique_ptr osd_common_t::open_network_device(int id, osd::network_handler &handler) +{ + return m_network->open_device(id, handler); +} + +std::vector osd_common_t::list_network_devices() +{ + return m_network->list_devices(); +} diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h index 820fe3edf21..991ebacfdce 100644 --- a/src/osd/modules/lib/osdobj_common.h +++ b/src/osd/modules/lib/osdobj_common.h @@ -197,6 +197,7 @@ class font_module; class input_module; class midi_module; class monitor_module; +class netdev_module; class osd_watchdog; class osd_window; class output_module; @@ -234,16 +235,22 @@ public: virtual void add_audio_to_recording(const int16_t *buffer, int samples_this_frame) override; virtual std::vector get_slider_list() override; - // command option overrides - virtual bool execute_command(const char *command) override; - + // font interface virtual osd_font::ptr font_alloc() override; virtual bool get_font_families(std::string const &font_path, std::vector > &result) override; + // command option overrides + virtual bool execute_command(const char *command) override; + + // MIDI interface virtual std::unique_ptr create_midi_input(std::string_view name) override; virtual std::unique_ptr create_midi_output(std::string_view name) override; virtual std::vector list_midi_ports() override; + // network interface + virtual std::unique_ptr open_network_device(int id, osd::network_handler &handler) override; + virtual std::vector list_network_devices() override; + // FIXME: everything below seems to be osd specific and not part of // this INTERFACE but part of the osd IMPLEMENTATION @@ -317,6 +324,7 @@ protected: sound_module* m_sound; debug_module* m_debugger; midi_module* m_midi; + netdev_module* m_network; input_module* m_keyboard_input; input_module* m_mouse_input; input_module* m_lightgun_input; diff --git a/src/osd/modules/netdev/netdev_common.cpp b/src/osd/modules/netdev/netdev_common.cpp new file mode 100644 index 00000000000..b6a2328c7a6 --- /dev/null +++ b/src/osd/modules/netdev/netdev_common.cpp @@ -0,0 +1,39 @@ +// license:BSD-3-Clause +// copyright-holders:Carl + +#include "netdev_common.h" + + +namespace osd { + +network_device_base::network_device_base(network_handler &handler) + : m_handler(handler) + , m_stopped(true) +{ +} + +network_device_base::~network_device_base() +{ +} + +void network_device_base::start() +{ + m_stopped = false; +} + +void network_device_base::stop() +{ + m_stopped = true; +} + +void network_device_base::poll() +{ + uint8_t *buf; + int len; + while (!m_stopped && (len = recv_dev(&buf))) + { + m_handler.recv_cb(buf, len); + } +} + +} // namespace osd diff --git a/src/osd/modules/netdev/netdev_common.h b/src/osd/modules/netdev/netdev_common.h new file mode 100644 index 00000000000..95d961a438a --- /dev/null +++ b/src/osd/modules/netdev/netdev_common.h @@ -0,0 +1,36 @@ +// license:BSD-3-Clause +// copyright-holders:Carl +#ifndef MAME_OSD_NETDEV_NETDEV_COMMON_H +#define MAME_OSD_NETDEV_NETDEV_COMMON_H + +#pragma once + +#include "interface/nethandler.h" + +#include + + +namespace osd { + +class network_device_base : public network_device +{ +public: + virtual ~network_device_base(); + + virtual void start() override; + virtual void stop() override; + virtual void poll() override; + +protected: + network_device_base(network_handler &handler); + + virtual int recv_dev(uint8_t **buf) = 0; + +private: + network_handler &m_handler; + bool m_stopped; +}; + +} // namespace osd + +#endif // MAME_OSD_NETDEV_NETDEV_COMMON_H diff --git a/src/osd/modules/netdev/netdev_module.h b/src/osd/modules/netdev/netdev_module.h index b102e56fbb8..3636c3a23cb 100644 --- a/src/osd/modules/netdev/netdev_module.h +++ b/src/osd/modules/netdev/netdev_module.h @@ -9,6 +9,11 @@ #pragma once +#include "interface/nethandler.h" + +#include +#include + //============================================================ // CONSTANTS @@ -20,7 +25,9 @@ class netdev_module { public: virtual ~netdev_module() = default; - // no specific routines below ... may change + + virtual std::unique_ptr open_device(int id, osd::network_handler &handler) = 0; + virtual std::vector list_devices() = 0; }; #endif // MAME_OSD_NETDEV_NETDEV_MODULE_H diff --git a/src/osd/modules/netdev/none.cpp b/src/osd/modules/netdev/none.cpp index 8441c002802..284ff51a962 100644 --- a/src/osd/modules/netdev/none.cpp +++ b/src/osd/modules/netdev/none.cpp @@ -8,6 +8,9 @@ #include "modules/osdmodule.h" +#include +#include + namespace osd { @@ -21,7 +24,21 @@ public: } virtual ~netdev_none() { } - virtual int init(osd_interface &osd, const osd_options &options) override { return 0; } + + virtual int init(osd_interface &osd, const osd_options &options) override + { + return 0; + } + + virtual std::unique_ptr open_device(int id, network_handler &handler) override + { + return std::unique_ptr(); + } + + virtual std::vector list_devices() override + { + return std::vector(); + } }; } // anonymous namespace diff --git a/src/osd/modules/netdev/pcap.cpp b/src/osd/modules/netdev/pcap.cpp index c708c93a358..4fe1b875087 100644 --- a/src/osd/modules/netdev/pcap.cpp +++ b/src/osd/modules/netdev/pcap.cpp @@ -7,12 +7,17 @@ #if defined(OSD_NET_USE_PCAP) +#include "netdev_common.h" + #include "modules/lib/osdlib.h" -#include "osdnet.h" + #include "osdcore.h" // osd_printf_* #include "util/strformat.h" // string_format +#include +#include + #if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) #include #undef interface @@ -47,10 +52,10 @@ typedef int (*pcap_dispatch_fn)(pcap_t *, int, pcap_handler, u_char *); class pcap_module : public osd_module, public netdev_module { public: - pcap_module() - : osd_module(OSD_NETDEV_PROVIDER, "pcap"), netdev_module(), - pcap_findalldevs_dl(nullptr), pcap_open_live_dl(nullptr), pcap_next_ex_dl(nullptr), pcap_compile_dl(nullptr), - pcap_close_dl(nullptr), pcap_setfilter_dl(nullptr), pcap_sendpacket_dl(nullptr), pcap_set_datalink_dl(nullptr), pcap_dispatch_dl(nullptr) + pcap_module() : + osd_module(OSD_NETDEV_PROVIDER, "pcap"), netdev_module(), + pcap_findalldevs_dl(nullptr), pcap_open_live_dl(nullptr), pcap_next_ex_dl(nullptr), pcap_compile_dl(nullptr), + pcap_close_dl(nullptr), pcap_setfilter_dl(nullptr), pcap_sendpacket_dl(nullptr), pcap_set_datalink_dl(nullptr), pcap_dispatch_dl(nullptr) { } @@ -84,6 +89,20 @@ public: return true; } + virtual std::unique_ptr open_device(int id, network_handler &handler) override; + virtual std::vector list_devices() override; + +private: + struct device_info + { + std::string name; + std::string description; + }; + + class netdev_pcap; + + std::vector m_devices; + osd::dynamic_module::ptr pcap_dll; pcap_findalldevs_fn pcap_findalldevs_dl; @@ -97,9 +116,6 @@ public: pcap_dispatch_fn pcap_dispatch_dl; }; -// FIXME: bridge between pcap_module and netdev_pcap -static pcap_module *module = nullptr; - #ifdef SDLMAME_MACOSX struct netdev_pcap_context { @@ -114,18 +130,19 @@ struct netdev_pcap_context }; #endif -class netdev_pcap : public osd_network_device +class pcap_module::netdev_pcap : public network_device_base { public: - netdev_pcap(const char *name, network_handler &ifdev); + netdev_pcap(pcap_module &module, const char *name, network_handler &handler); ~netdev_pcap(); - virtual int send(uint8_t *buf, int len) override; + virtual int send(void const *buf, int len) override; protected: virtual int recv_dev(uint8_t **buf) override; private: + pcap_module &m_module; pcap_t *m_p; #ifdef SDLMAME_MACOSX struct netdev_pcap_context m_ctx; @@ -153,31 +170,33 @@ static void *netdev_pcap_blocker(void *arg) { struct netdev_pcap_context *ctx = (struct netdev_pcap_context*)arg; while(ctx && ctx->p) { - (*module->pcap_dispatch_dl)(ctx->p, 1, netdev_pcap_handler, (u_char*)ctx); + (*m_module.pcap_dispatch_dl)(ctx->p, 1, netdev_pcap_handler, (u_char*)ctx); } return 0; } #endif -netdev_pcap::netdev_pcap(const char *name, network_handler &ifdev) - : osd_network_device(ifdev) +pcap_module::netdev_pcap::netdev_pcap(pcap_module &module, const char *name, network_handler &handler) : + network_device_base(handler), + m_module(module), + m_p(nullptr) { char errbuf[PCAP_ERRBUF_SIZE]; #if defined(SDLMAME_WIN32) || defined(OSD_WINDOWS) - m_p = (*module->pcap_open_live_dl)(name, 65535, 1, -1, errbuf); + m_p = (*m_module.pcap_open_live_dl)(name, 65535, 1, -1, errbuf); #else - m_p = (*module->pcap_open_live_dl)(name, 65535, 1, 1, errbuf); + m_p = (*m_module.pcap_open_live_dl)(name, 65535, 1, 1, errbuf); #endif if(!m_p) { osd_printf_error("Unable to open %s: %s\n", name, errbuf); return; } - if ((*module->pcap_set_datalink_dl)(m_p, DLT_EN10MB) == -1) + if ((*m_module.pcap_set_datalink_dl)(m_p, DLT_EN10MB) == -1) { osd_printf_error("Unable to set %s to ethernet", name); - (*module->pcap_close_dl)(m_p); + (*m_module.pcap_close_dl)(m_p); m_p = nullptr; return; } @@ -190,20 +209,20 @@ netdev_pcap::netdev_pcap(const char *name, network_handler &ifdev) #endif } -int netdev_pcap::send(uint8_t *buf, int len) +int pcap_module::netdev_pcap::send(void const *buf, int len) { int ret; if(!m_p) { printf("send invoked, but no pcap context\n"); return 0; } - ret = (*module->pcap_sendpacket_dl)(m_p, buf, len); + ret = (*m_module.pcap_sendpacket_dl)(m_p, reinterpret_cast(buf), len); printf("sent packet length %d, returned %d\n", len, ret); return ret ? len : 0; - //return (!pcap_sendpacket_dl(m_p, buf, len))?len:0; + //return (!pcap_sendpacket_dl(m_p, reinterpret_cast(buf), len))?len:0; } -int netdev_pcap::recv_dev(uint8_t **buf) +int pcap_module::netdev_pcap::recv_dev(uint8_t **buf) { #ifdef SDLMAME_MACOSX uint8_t pktbuf[2048]; @@ -225,48 +244,35 @@ int netdev_pcap::recv_dev(uint8_t **buf) #else struct pcap_pkthdr *header; if(!m_p) return 0; - return ((*module->pcap_next_ex_dl)(m_p, &header, (const u_char **)buf) == 1)?header->len:0; + return ((*m_module.pcap_next_ex_dl)(m_p, &header, (const u_char **)buf) == 1)?header->len:0; #endif } -netdev_pcap::~netdev_pcap() +pcap_module::netdev_pcap::~netdev_pcap() { #ifdef SDLMAME_MACOSX m_ctx.p = nullptr; pthread_cancel(m_thread); pthread_join(m_thread, nullptr); #endif - if(m_p) (*module->pcap_close_dl)(m_p); + if(m_p) (*m_module.pcap_close_dl)(m_p); m_p = nullptr; } -static CREATE_NETDEV(create_pcap) -{ - auto *dev = new netdev_pcap(ifname, ifdev); - return dynamic_cast(dev); -} - int pcap_module::init(osd_interface &osd, const osd_options &options) { pcap_if_t *devs; char errbuf[PCAP_ERRBUF_SIZE]; - // FIXME: bridge between pcap_module and netdev_pcap - module = this; - if ((*pcap_findalldevs_dl)(&devs, errbuf) == -1) { osd_printf_error("Unable to get network devices: %s\n", errbuf); return 1; } - while(devs) + while (devs) { - if(devs->description) { - add_netdev(devs->name, devs->description, create_pcap); - } else { - add_netdev(devs->name, devs->name, create_pcap); - } + m_devices.emplace_back(device_info{ devs->name, devs->description ? devs->description : devs->name }); devs = devs->next; } return 0; @@ -274,7 +280,24 @@ int pcap_module::init(osd_interface &osd, const osd_options &options) void pcap_module::exit() { - clear_netdev(); + m_devices.clear(); +} + +std::unique_ptr pcap_module::open_device(int id, network_handler &handler) +{ + if ((0 > id) || (m_devices.size() <= id)) + return nullptr; + + return std::make_unique(*this, m_devices[id].name.c_str(), handler); +} + +std::vector pcap_module::list_devices() +{ + std::vector result; + result.reserve(m_devices.size()); + for (int id = 0; m_devices.size() > id; ++id) + result.emplace_back(network_device_info{ id, m_devices[id].description }); + return result; } } // anonymous namespace diff --git a/src/osd/modules/netdev/taptun.cpp b/src/osd/modules/netdev/taptun.cpp index 2e6c5189e60..b765a667ae7 100644 --- a/src/osd/modules/netdev/taptun.cpp +++ b/src/osd/modules/netdev/taptun.cpp @@ -6,6 +6,17 @@ #if defined(OSD_NET_USE_TAPTUN) +#include "netdev_common.h" + +#include "osdcore.h" // osd_printf_verbose +#include "osdfile.h" // PATH_SEPARATOR + +#include "util/hashing.h" // crc32_creator +#include "util/unicode.h" + +#include +#include + #if defined(_WIN32) #include #include @@ -17,13 +28,6 @@ #include #endif -#include "osdcore.h" // osd_printf_verbose -#include "osdfile.h" // PATH_SEPARATOR -#include "osdnet.h" -#include "unicode.h" - -#include "util/hashing.h" // crc32_creator - #ifdef __linux__ #define IFF_TAP 0x0002 #define IFF_NO_PI 0x1000 @@ -52,21 +56,33 @@ public: } virtual ~taptun_module() { } - virtual int init(osd_interface &osd, const osd_options &options); - virtual void exit(); + virtual int init(osd_interface &osd, const osd_options &options) override; + virtual void exit() override; - virtual bool probe() { return true; } + virtual bool probe() override { return true; } + + virtual std::unique_ptr open_device(int id, network_handler &handler) override; + virtual std::vector list_devices() override; + +private: + struct device_info + { + std::string name; + std::string description; + }; + + std::vector m_devices; }; -class netdev_tap : public osd_network_device +class netdev_tap : public network_device_base { public: - netdev_tap(const char *name, network_handler &ifdev); + netdev_tap(const char *name, network_handler &handler); ~netdev_tap(); - int send(uint8_t *buf, int len) override; + int send(void const *buf, int len) override; protected: int recv_dev(uint8_t **buf) override; @@ -83,8 +99,8 @@ private: uint8_t m_buf[2048]; }; -netdev_tap::netdev_tap(const char *name, network_handler &ifdev) - : osd_network_device(ifdev) +netdev_tap::netdev_tap(const char *name, network_handler &handler) + : network_device_base(handler) { #if defined(__linux__) m_fd = -1; @@ -173,7 +189,7 @@ static u32 finalise_frame(u8 buf[], u32 length) } #if defined(_WIN32) -int netdev_tap::send(uint8_t *buf, int len) +int netdev_tap::send(void const *buf, int len) { OVERLAPPED overlapped = {}; @@ -237,7 +253,7 @@ static std::wstring safe_string(WCHAR value[], int length) } // find the friendly name for an adapter in the registry -static std::wstring get_connection_name(std::wstring &id) +static std::wstring get_connection_name(std::wstring const &id) { std::wstring result; @@ -319,7 +335,7 @@ static std::vector get_tap_adapters() return result; } #else -int netdev_tap::send(uint8_t *buf, int len) +int netdev_tap::send(void const *buf, int len) { if(m_fd == -1) return 0; len = write(m_fd, buf, len); @@ -328,7 +344,8 @@ int netdev_tap::send(uint8_t *buf, int len) int netdev_tap::recv_dev(uint8_t **buf) { - if(m_fd == -1) return 0; + if (0 > m_fd) + return 0; int len = read(m_fd, m_buf, sizeof(m_buf)); @@ -336,30 +353,43 @@ int netdev_tap::recv_dev(uint8_t **buf) len = finalise_frame(m_buf, len); *buf = m_buf; - return (len == -1)?0:len; + return (len == -1) ? 0 : len; } #endif -static CREATE_NETDEV(create_tap) -{ - auto *dev = new netdev_tap(ifname, ifdev); - return dynamic_cast(dev); -} - int taptun_module::init(osd_interface &osd, const osd_options &options) { #if defined(_WIN32) - for (std::wstring &id : get_tap_adapters()) - add_netdev(utf8_from_wstring(id).c_str(), utf8_from_wstring(get_connection_name(id)).c_str(), create_tap); + auto const adapters = get_tap_adapters(); + m_devices.reserve(adapters.size()); + for (std::wstring const &id : adapters) + m_devices.emplace_back(device_info{ utf8_from_wstring(id), utf8_from_wstring(get_connection_name(id)) }); #else - add_netdev("tap", "TAP/TUN Device", create_tap); + m_devices.emplace_back(device_info{ "tap", "TUN/TAP Device" }); #endif return 0; } void taptun_module::exit() { - clear_netdev(); + m_devices.clear(); +} + +std::unique_ptr taptun_module::open_device(int id, network_handler &handler) +{ + if ((0 > id) || (m_devices.size() <= id)) + return nullptr; + + return std::make_unique(m_devices[id].name.c_str(), handler); +} + +std::vector taptun_module::list_devices() +{ + std::vector result; + result.reserve(m_devices.size()); + for (int id = 0; m_devices.size() > id; ++id) + result.emplace_back(network_device_info{ id, m_devices[id].description }); + return result; } } // anonymous namespace diff --git a/src/osd/osdepend.h b/src/osd/osdepend.h index 8e9a4be6d7a..ebad7883bbe 100644 --- a/src/osd/osdepend.h +++ b/src/osd/osdepend.h @@ -17,6 +17,7 @@ #include "bitmap.h" #include "interface/midiport.h" +#include "interface/nethandler.h" #include #include @@ -100,6 +101,10 @@ public: virtual std::unique_ptr create_midi_output(std::string_view name) = 0; virtual std::vector list_midi_ports() = 0; + // network interface + virtual std::unique_ptr open_network_device(int id, osd::network_handler &handler) = 0; + virtual std::vector list_network_devices() = 0; + protected: virtual ~osd_interface() { } }; diff --git a/src/osd/osdnet.cpp b/src/osd/osdnet.cpp deleted file mode 100644 index 5dff122bd74..00000000000 --- a/src/osd/osdnet.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Carl - -#include "osdnet.h" - -#include "interface/nethandler.h" - - -static std::vector> netdev_list; - -void add_netdev(const char *name, const char *description, create_netdev func) -{ - auto entry = std::make_unique(); - entry->id = netdev_list.size(); - strncpy(entry->name, name, 255); - entry->name[255] = '\0'; - strncpy(entry->description, (description != nullptr) ? description : "(no name)", 255); - entry->description[255] = '\0'; - entry->func = func; - netdev_list.push_back(std::move(entry)); -} - -void clear_netdev() -{ - netdev_list.clear(); -} - -const std::vector>& get_netdev_list() -{ - return netdev_list; -} - -osd_network_device *open_netdev(int id, osd::network_handler &ifdev) -{ - for(auto &entry : netdev_list) - if(entry->id==id) - return entry->func(entry->name, ifdev); - return nullptr; -} - -osd_network_device::osd_network_device(osd::network_handler &ifdev) - : m_dev(ifdev) - , m_stopped(true) -{ -} - -osd_network_device::~osd_network_device() -{ -} - -void osd_network_device::start() -{ - m_stopped = false; -} - -void osd_network_device::stop() -{ - m_stopped = true; -} - -void osd_network_device::poll() -{ - uint8_t *buf; - int len; - while(!m_stopped && (len = recv_dev(&buf))) - { - m_dev.recv_cb(buf, len); - } -} - -int osd_network_device::send(uint8_t *buf, int len) -{ - return 0; -} - -int osd_network_device::recv_dev(uint8_t **buf) -{ - return 0; -} diff --git a/src/osd/osdnet.h b/src/osd/osdnet.h deleted file mode 100644 index 1d29db6582c..00000000000 --- a/src/osd/osdnet.h +++ /dev/null @@ -1,61 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Carl -#ifndef MAME_OSD_OSDNET_H -#define MAME_OSD_OSDNET_H - -#pragma once - -#include "osdcomm.h" - -#include -#include -#include -#include - - -namespace osd { class network_handler; } -class osd_network_device; - -#define CREATE_NETDEV(name) osd_network_device *name(const char *ifname, osd::network_handler &ifdev) -typedef osd_network_device *(*create_netdev)(const char *ifname, osd::network_handler &ifdev); - -class osd_network_device -{ -public: - struct entry_t - { - entry_t() - { - std::fill(std::begin(name), std::end(name), 0); - std::fill(std::begin(description), std::end(description), 0); - } - - int id = 0; - char name[256]; - char description[256]; - create_netdev func = nullptr; - }; - - osd_network_device(osd::network_handler &ifdev); - virtual ~osd_network_device(); - - void start(); - void stop(); - void poll(); - - virtual int send(uint8_t *buf, int len); - -protected: - virtual int recv_dev(uint8_t **buf); - -private: - osd::network_handler &m_dev; - bool m_stopped; -}; - -osd_network_device *open_netdev(int id, osd::network_handler &ifdev); -void add_netdev(const char *name, const char *description, create_netdev func); -void clear_netdev(); -const std::vector>& get_netdev_list(); - -#endif // MAME_OSD_OSDNET_H From e2acaa460e011a407e3e7823b8d847797b776706 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 23 Apr 2025 06:02:56 +1000 Subject: [PATCH 02/15] netdev/pcap.cpp: Fix build errors. --- src/osd/modules/netdev/pcap.cpp | 81 +++++++++++++++++---------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/src/osd/modules/netdev/pcap.cpp b/src/osd/modules/netdev/pcap.cpp index 4fe1b875087..8b5e20077fc 100644 --- a/src/osd/modules/netdev/pcap.cpp +++ b/src/osd/modules/netdev/pcap.cpp @@ -24,8 +24,8 @@ #define LIB_NAME "wpcap.dll" #elif defined(SDLMAME_MACOSX) +#include #include -#include #define LIB_NAME "libpcap.dylib" #else @@ -116,20 +116,6 @@ private: pcap_dispatch_fn pcap_dispatch_dl; }; -#ifdef SDLMAME_MACOSX -struct netdev_pcap_context -{ - uint8_t *pkt; - int len; - pcap_t *p; - - uint8_t packets[32][1600]; - int packetlens[32]; - int head; - int tail; -}; -#endif - class pcap_module::netdev_pcap : public network_device_base { public: @@ -145,35 +131,49 @@ private: pcap_module &m_module; pcap_t *m_p; #ifdef SDLMAME_MACOSX - struct netdev_pcap_context m_ctx; pthread_t m_thread; + uint8_t *pkt; + int len; + pcap_t *p; + + uint8_t packets[32][1600]; + int packetlens[32]; + std::atomic head; + std::atomic tail; + + static void pcap_handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes); + static void *pcap_blocker(void *arg); #endif }; #ifdef SDLMAME_MACOSX -static void netdev_pcap_handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) +void pcap_module::netdev_pcap::pcap_handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) { - struct netdev_pcap_context *ctx = (struct netdev_pcap_context*)user; + netdev_pcap *const ctx = reinterpret_cast(user); - if(!ctx->p) return; + if (!ctx->p) + return; - if(OSAtomicCompareAndSwapInt((ctx->head+1) & 0x1F, ctx->tail, &ctx->tail)) { + int const curr = ctx->head; + int const next = (curr + 1) & 0x1f; + if (ctx->tail.load(std::memory_order_acquire) == next) + { printf("buffer full, dropping packet\n"); return; } - memcpy(ctx->packets[ctx->head], bytes, h->len); - ctx->packetlens[ctx->head] = h->len; - OSAtomicCompareAndSwapInt(ctx->head, (ctx->head+1) & 0x1F, &ctx->head); + memcpy(ctx->packets[curr], bytes, h->len); + ctx->packetlens[curr] = h->len; + ctx->head.store(next, std::memory_order_release); } -static void *netdev_pcap_blocker(void *arg) { - struct netdev_pcap_context *ctx = (struct netdev_pcap_context*)arg; +void *pcap_module::netdev_pcap::pcap_blocker(void *arg) +{ + netdev_pcap *const ctx = reinterpret_cast(arg); - while(ctx && ctx->p) { - (*m_module.pcap_dispatch_dl)(ctx->p, 1, netdev_pcap_handler, (u_char*)ctx); - } + while (ctx && ctx->p) + (*ctx->m_module.pcap_dispatch_dl)(ctx->p, 1, &netdev_pcap::pcap_handler, reinterpret_cast(ctx)); - return 0; + return nullptr; } #endif @@ -202,10 +202,10 @@ pcap_module::netdev_pcap::netdev_pcap(pcap_module &module, const char *name, net } #ifdef SDLMAME_MACOSX - m_ctx.head = 0; - m_ctx.tail = 0; - m_ctx.p = m_p; - pthread_create(&m_thread, nullptr, netdev_pcap_blocker, &m_ctx); + head = 0; + tail = 0; + p = m_p; + pthread_create(&m_thread, nullptr, &netdev_pcap::pcap_blocker, this); #endif } @@ -232,13 +232,14 @@ int pcap_module::netdev_pcap::recv_dev(uint8_t **buf) if(!m_p) return 0; // Empty - if(OSAtomicCompareAndSwapInt(m_ctx.head, m_ctx.tail, &m_ctx.tail)) { - return 0; - } - memcpy(pktbuf, m_ctx.packets[m_ctx.tail], m_ctx.packetlens[m_ctx.tail]); - ret = m_ctx.packetlens[m_ctx.tail]; - OSAtomicCompareAndSwapInt(m_ctx.tail, (m_ctx.tail+1) & 0x1F, &m_ctx.tail); + int const curr = tail; + if (head.load(std::memory_order_acquire) == curr) + return 0; + + memcpy(pktbuf, packets[curr], packetlens[curr]); + ret = packetlens[curr]; + tail.store((curr + 1) & 0x1f, std::memory_order_release); *buf = pktbuf; return ret; #else @@ -251,7 +252,7 @@ int pcap_module::netdev_pcap::recv_dev(uint8_t **buf) pcap_module::netdev_pcap::~netdev_pcap() { #ifdef SDLMAME_MACOSX - m_ctx.p = nullptr; + p = nullptr; pthread_cancel(m_thread); pthread_join(m_thread, nullptr); #endif From 458d5290078e10ecfecc0ed23b18832c3577e0ee Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Wed, 23 Apr 2025 14:47:39 +0700 Subject: [PATCH 03/15] build: fix msvc build --- scripts/src/3rdparty.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua index 57db32bb887..ad7932afdc2 100755 --- a/scripts/src/3rdparty.lua +++ b/scripts/src/3rdparty.lua @@ -1396,7 +1396,7 @@ project "bimg" "BX_CONFIG_DEBUG=0", } - if not string.find(_OPTIONS["gcc"], "clang") then + if _OPTIONS["gcc"]~=nil and not string.find(_OPTIONS["gcc"], "clang") then -- This is a gross hack. For some reason GitHub Actions MinGW GCC seems to define SSE feature macros for features that are not enabled. local archopts = (_OPTIONS["ARCHOPTS"] or "") .. " " .. (_OPTIONS["ARCHOPTS_CXX"] or "") local ssever = "20" From de28051b3b21d3beeb498d565f86eea06fc8a284 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 23 Apr 2025 11:25:23 +0200 Subject: [PATCH 04/15] bus/cbus: preliminary conversion of MSX style DE-9 ports in -26 and -86 * -86 uses only one port not two; * Remove joystick readback from -118, mounts a DA-15 PC gameport instead; * Remove pc9801_snd_device glue logic; --- scripts/src/bus.lua | 2 - src/devices/bus/cbus/pc9801_118.cpp | 85 +++++++++---------------- src/devices/bus/cbus/pc9801_118.h | 10 ++- src/devices/bus/cbus/pc9801_26.cpp | 91 ++++++++++----------------- src/devices/bus/cbus/pc9801_26.h | 13 ++-- src/devices/bus/cbus/pc9801_86.cpp | 97 ++++++++++++----------------- src/devices/bus/cbus/pc9801_86.h | 15 +++-- src/devices/bus/cbus/pc9801_snd.cpp | 48 -------------- src/devices/bus/cbus/pc9801_snd.h | 33 ---------- 9 files changed, 122 insertions(+), 272 deletions(-) delete mode 100644 src/devices/bus/cbus/pc9801_snd.cpp delete mode 100644 src/devices/bus/cbus/pc9801_snd.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 1b5484abf58..6cf8ff61ef2 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -5310,8 +5310,6 @@ if (BUSES["CBUS"]~=null) then MAME_DIR .. "src/devices/bus/cbus/pc9801_118.h", MAME_DIR .. "src/devices/bus/cbus/pc9801_cbus.cpp", MAME_DIR .. "src/devices/bus/cbus/pc9801_cbus.h", - MAME_DIR .. "src/devices/bus/cbus/pc9801_snd.cpp", - MAME_DIR .. "src/devices/bus/cbus/pc9801_snd.h", MAME_DIR .. "src/devices/bus/cbus/sb16_ct2720.cpp", MAME_DIR .. "src/devices/bus/cbus/sb16_ct2720.h", } diff --git a/src/devices/bus/cbus/pc9801_118.cpp b/src/devices/bus/cbus/pc9801_118.cpp index c1326270ffc..447da320d22 100644 --- a/src/devices/bus/cbus/pc9801_118.cpp +++ b/src/devices/bus/cbus/pc9801_118.cpp @@ -2,21 +2,24 @@ // copyright-holders:Angelo Salese /************************************************************************************************** - NEC PC-9801-118 sound card "CanBe Sound 2" +NEC PC-9801-118 sound card "CanBe Sound 2" - YMF297 + some extra ports, apparently derived from -86. - Introduced around the same time as Windows 95 release, it has various compatibility issues - under DOS (especially when PnP is enabled). - Doesn't have a sound ROM, it also cannot be installed with an environment also sporting a -86. +References: +- https://sammargh.github.io/pc98/ext_card_doc/9801-118.txt - TODO: - - Fix sound chip type (YMF297-F); - - Add CS-4232 support, it's an extended clone of the already emulated AD1848 used on the - Windows Sound System; - - Understand what the obfuscated NEC "ANCHOR" and "MAZE" chips really are; - - PnP interface (missing BIOS); - - verify sound irq; - - test if driver can be installed under Windows 95; +YMF297 + some extra ports, apparently derived from -86. +Introduced around the same time as Windows 95 release, it has various compatibility issues +under DOS (especially when PnP is enabled). +Doesn't have a sound ROM, it also cannot be installed with an environment also sporting a -86. + +TODO: +- Fix sound chip type (YMF297-F); +- Add CS-4232 support, it's an extended clone of the already emulated AD1848 used on the + Windows Sound System; +- Understand what the obfuscated NEC "ANCHOR" and "MAZE" chips really are; +- PnP interface (missing BIOS); +- verify sound irq; +- test if driver can be installed under Windows 95; **************************************************************************************************/ @@ -37,16 +40,6 @@ // device type definition DEFINE_DEVICE_TYPE(PC9801_118, pc9801_118_device, "pc9801_118", "NEC PC-9801-118") -void pc9801_118_device::sound_irq(int state) -{ - // TODO: sometimes misfired irq causes sound or even host hang - m_bus->int_w<5>(state); -} - -//------------------------------------------------- -// device_add_mconfig - add device configuration -//------------------------------------------------- - void pc9801_118_device::device_add_mconfig(machine_config &config) { // TODO: "ANCHOR" & "MAZE" custom NEC chips @@ -58,13 +51,13 @@ void pc9801_118_device::device_add_mconfig(machine_config &config) // actually YMF297-F (YMF288 + OPL3 compatible FM sources), unknown clock / divider // 5B is near both CS-4232 and this YM2608(config, m_opn3, XTAL_5B * 2 / 5); - m_opn3->irq_handler().set(FUNC(pc9801_118_device::sound_irq)); - m_opn3->port_a_read_callback().set(FUNC(pc9801_118_device::opn_porta_r)); - //m_opn3->port_b_read_callback().set(FUNC(pc8801_state::opn_portb_r)); - //m_opn3->port_a_write_callback().set(FUNC(pc8801_state::opn_porta_w)); - m_opn3->port_b_write_callback().set(FUNC(pc9801_118_device::opn_portb_w)); + m_opn3->irq_handler().set([this] (int state) { m_bus->int_w<5>(state); }); +// m_opn3->port_a_read_callback().set(FUNC(pc9801_118_device::opn_porta_r)); +// m_opn3->port_b_write_callback().set(FUNC(pc9801_118_device::opn_portb_w)); m_opn3->add_route(ALL_OUTPUTS, "lspeaker", 1.00); m_opn3->add_route(ALL_OUTPUTS, "rspeaker", 1.00); + + // TODO: DA-15 PC gameport labeled "MIDI / Joystick" } @@ -73,8 +66,6 @@ void pc9801_118_device::device_add_mconfig(machine_config &config) //------------------------------------------------- static INPUT_PORTS_START( pc9801_118 ) - PORT_INCLUDE( pc9801_joy_port ) - // 12 line Jumper settings @ 8F // documented at https://sammargh.github.io/pc98/ext_card_doc/9801-118.txt // TODO: understand how SW can read these @@ -149,35 +140,16 @@ const tiny_rom_entry *pc9801_118_device::device_rom_region() const //------------------------------------------------- pc9801_118_device::pc9801_118_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : pc9801_snd_device(mconfig, PC9801_118, tag, owner, clock), + : device_t(mconfig, PC9801_118, tag, owner, clock), m_bus(*this, DEVICE_SELF_OWNER), m_opn3(*this, "opn3") { } - -//------------------------------------------------- -// device_validity_check - perform validity checks -// on this device -//------------------------------------------------- - -void pc9801_118_device::device_validity_check(validity_checker &valid) const -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -u16 pc9801_118_device::read_io_base() -{ - // hardwired on this board - return 0x0188; -} - void pc9801_118_device::device_start() { - m_io_base = read_io_base(); + // hardwired on this board + const u16 m_io_base = 0x0188; m_bus->install_io(0xa460, 0xa463, read8sm_delegate(*this, FUNC(pc9801_118_device::id_r)), write8sm_delegate(*this, FUNC(pc9801_118_device::ext_w))); m_bus->install_io( @@ -190,17 +162,16 @@ void pc9801_118_device::device_start() save_item(NAME(m_ext_reg)); } - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - void pc9801_118_device::device_reset() { // TODO: is this enabled or disabled at boot? m_ext_reg = 1; } +void pc9801_118_device::device_validity_check(validity_checker &valid) const +{ +} + //************************************************************************** // READ/WRITE HANDLERS diff --git a/src/devices/bus/cbus/pc9801_118.h b/src/devices/bus/cbus/pc9801_118.h index e73872e072a..012b95e846a 100644 --- a/src/devices/bus/cbus/pc9801_118.h +++ b/src/devices/bus/cbus/pc9801_118.h @@ -11,10 +11,9 @@ #pragma once -#include "bus/cbus/pc9801_cbus.h" #include "sound/ymopn.h" -#include "pc9801_snd.h" +#include "pc9801_cbus.h" //************************************************************************** // TYPE DEFINITIONS @@ -22,7 +21,7 @@ // ======================> pc9801_118_device -class pc9801_118_device : public pc9801_snd_device +class pc9801_118_device : public device_t { public: // construction/destruction @@ -44,15 +43,14 @@ protected: virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual ioport_constructor device_input_ports() const override ATTR_COLD; virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; - virtual u16 read_io_base() override; private: required_device m_bus; required_device m_opn3; - uint8_t m_ext_reg; +// u16 m_io_base, m_joy_sel; - void sound_irq(int state); + uint8_t m_ext_reg; }; diff --git a/src/devices/bus/cbus/pc9801_26.cpp b/src/devices/bus/cbus/pc9801_26.cpp index 0c817d3986f..d767b0eeace 100644 --- a/src/devices/bus/cbus/pc9801_26.cpp +++ b/src/devices/bus/cbus/pc9801_26.cpp @@ -2,14 +2,14 @@ // copyright-holders:Angelo Salese /************************************************************************************************** - NEC PC-9801-26 sound card +NEC PC-9801-26 sound card - Legacy sound card for PC-98xx family, composed by a single YM2203 +Legacy sound card for PC-98xx family, composed by a single YM2203 - TODO: - - verify sound irq; - - understand if dips can be read by SW; - - configurable irq level needs a binding flush in C-bus handling; +TODO: +- DE-9 output writes (cfr. page 419 of PC-9801 Bible, needs software testing the functionality) +- understand if dips can be read by SW; +- configurable irq level needs a binding flush in C-bus handling; **************************************************************************************************/ @@ -25,27 +25,31 @@ //************************************************************************** // device type definition -DEFINE_DEVICE_TYPE(PC9801_26, pc9801_26_device, "pc9801_26", "NEC PC-9801-26") +DEFINE_DEVICE_TYPE(PC9801_26, pc9801_26_device, "pc9801_26", "NEC PC-9801-26/K") -void pc9801_26_device::sound_irq(int state) +pc9801_26_device::pc9801_26_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, PC9801_26, tag, owner, clock) + , m_bus(*this, DEVICE_SELF_OWNER) + , m_opn(*this, "opn") + , m_joy(*this, "joy_p%u", 1U) { - m_bus->int_w<5>(state); } - -//------------------------------------------------- -// device_add_mconfig - add device configuration -//------------------------------------------------- - void pc9801_26_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); YM2203(config, m_opn, 15.9744_MHz_XTAL / 4); // divider not verified - m_opn->irq_handler().set(FUNC(pc9801_26_device::sound_irq)); - m_opn->port_a_read_callback().set(FUNC(pc9801_26_device::opn_porta_r)); - //m_opn->port_b_read_callback().set(FUNC(pc8801_state::opn_portb_r)); - //m_opn->port_a_write_callback().set(FUNC(pc8801_state::opn_porta_w)); - m_opn->port_b_write_callback().set(FUNC(pc9801_26_device::opn_portb_w)); + m_opn->irq_handler().set([this] (int state) { m_bus->int_w<5>(state); }); + m_opn->port_a_read_callback().set([this] () { + if(BIT(m_joy_sel, 7)) + return m_joy[BIT(m_joy_sel, 6)]->read(); + + return (u8)0xff; + }); + m_opn->port_b_write_callback().set([this] (u8 data) { + m_joy_sel = data; + }); + // TODO: verify mixing on HW // emerald stage 1 BGM uses ch. 3 for bassline, which sounds way more prominent // than the others combined (0.25 1/4 ratio even?) @@ -53,6 +57,9 @@ void pc9801_26_device::device_add_mconfig(machine_config &config) m_opn->add_route(1, "mono", 0.50); m_opn->add_route(2, "mono", 0.50); m_opn->add_route(3, "mono", 1.00); + + MSX_GENERAL_PURPOSE_PORT(config, m_joy[0], msx_general_purpose_port_devices, "joystick"); + MSX_GENERAL_PURPOSE_PORT(config, m_joy[1], msx_general_purpose_port_devices, "joystick"); } // to load a different bios for slots: @@ -77,13 +84,7 @@ const tiny_rom_entry *pc9801_26_device::device_rom_region() const return ROM_NAME( pc9801_26 ); } -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - static INPUT_PORTS_START( pc9801_26 ) - PORT_INCLUDE( pc9801_joy_port ) - // On-board jumpers // TODO: any way to actually read these from HW? PORT_START("OPN_JP6A1_JP6A3") @@ -112,35 +113,6 @@ ioport_constructor pc9801_26_device::device_input_ports() const return INPUT_PORTS_NAME( pc9801_26 ); } -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// pc9801_26_device - constructor -//------------------------------------------------- - -pc9801_26_device::pc9801_26_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : pc9801_snd_device(mconfig, PC9801_26, tag, owner, clock) - , m_bus(*this, DEVICE_SELF_OWNER) - , m_opn(*this, "opn") -{ -} - - -//------------------------------------------------- -// device_validity_check - perform validity checks -// on this device -//------------------------------------------------- - -void pc9801_26_device::device_validity_check(validity_checker &valid) const -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - u16 pc9801_26_device::read_io_base() { return ((ioport("OPN_JP6A4")->read() & 1) << 8) + 0x0088; @@ -150,13 +122,10 @@ void pc9801_26_device::device_start() { m_rom_base = 0; m_io_base = 0; + + save_item(NAME(m_joy_sel)); } - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - void pc9801_26_device::device_reset() { // install the ROM to the physical program space @@ -203,6 +172,10 @@ void pc9801_26_device::device_reset() // m_irq_level = irq_levels[ioport("OPN_JP6A1_JP6A3")->read() & 3]; } +void pc9801_26_device::device_validity_check(validity_checker &valid) const +{ +} + //************************************************************************** // READ/WRITE HANDLERS diff --git a/src/devices/bus/cbus/pc9801_26.h b/src/devices/bus/cbus/pc9801_26.h index ae7012a6619..2b6bc9e98e7 100644 --- a/src/devices/bus/cbus/pc9801_26.h +++ b/src/devices/bus/cbus/pc9801_26.h @@ -11,9 +11,10 @@ #pragma once -#include "bus/cbus/pc9801_cbus.h" +#include "pc9801_cbus.h" + +#include "bus/msx/ctrl/ctrl.h" #include "sound/ymopn.h" -#include "pc9801_snd.h" //************************************************************************** // TYPE DEFINITIONS @@ -21,7 +22,7 @@ // ======================> pc9801_26_device -class pc9801_26_device : public pc9801_snd_device +class pc9801_26_device : public device_t { public: // construction/destruction @@ -39,14 +40,16 @@ protected: virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; virtual ioport_constructor device_input_ports() const override ATTR_COLD; virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; - virtual u16 read_io_base() override; + u16 read_io_base(); private: required_device m_bus; required_device m_opn; + required_device_array m_joy; - void sound_irq(int state); u32 m_rom_base; + u16 m_io_base; + u8 m_joy_sel; }; diff --git a/src/devices/bus/cbus/pc9801_86.cpp b/src/devices/bus/cbus/pc9801_86.cpp index ffb595cba4b..9b64d450c16 100644 --- a/src/devices/bus/cbus/pc9801_86.cpp +++ b/src/devices/bus/cbus/pc9801_86.cpp @@ -38,24 +38,30 @@ TODO: #define QUEUE_SIZE 32768 -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** -// device type definition DEFINE_DEVICE_TYPE(PC9801_86, pc9801_86_device, "pc9801_86", "NEC PC-9801-86") +DEFINE_DEVICE_TYPE(PC9801_SPEAKBOARD, pc9801_speakboard_device, "pc9801_spb", "NEC PC-9801 SpeakBoard") +DEFINE_DEVICE_TYPE(OTOMICHAN_KAI, otomichan_kai_device, "pc98_otomichan_kai", "MAD Factory Otomi-chan Kai") // 音美(おとみ)ちゃん改 -// only for derived designs? -void pc9801_86_device::opna_map(address_map &map) +pc9801_86_device::pc9801_86_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , m_bus(*this, DEVICE_SELF_OWNER) + , m_opna(*this, "opna") + , m_irqs(*this, "irqs") + , m_ldac(*this, "ldac") + , m_rdac(*this, "rdac") + , m_queue(QUEUE_SIZE) + , m_joy(*this, "joy_port") { - // TODO: confirm it really is ROMless - // TODO: confirm size - map(0x000000, 0x1fffff).ram(); } -//------------------------------------------------- -// device_add_mconfig - add device configuration -//------------------------------------------------- +pc9801_86_device::pc9801_86_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : pc9801_86_device(mconfig, PC9801_86, tag, owner, clock) +{ + +} + + void pc9801_86_device::pc9801_86_config(machine_config &config) { @@ -76,17 +82,26 @@ void pc9801_86_device::pc9801_86_config(machine_config &config) // shouldn't have one // m_opna->set_addrmap(0, &pc9801_86_device::opna_map); m_opna->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>)); - m_opna->port_a_read_callback().set(FUNC(pc9801_86_device::opn_porta_r)); - //m_opna->port_b_read_callback().set(FUNC(pc8801_state::opn_portb_r)); - //m_opna->port_a_write_callback().set(FUNC(pc8801_state::opn_porta_w)); - m_opna->port_b_write_callback().set(FUNC(pc9801_86_device::opn_portb_w)); - m_opna->add_route(0, "lspeaker", 1.00); - m_opna->add_route(0, "rspeaker", 1.00); + m_opna->port_a_read_callback().set([this] () { + if((m_joy_sel & 0xc0) == 0x80) + return m_joy->read(); + + return (u8)0xff; + }); + m_opna->port_b_write_callback().set([this] (u8 data) { + m_joy_sel = data; + }); + // TODO: confirm mixing + m_opna->add_route(0, "lspeaker", 0.25); + m_opna->add_route(0, "rspeaker", 0.25); m_opna->add_route(1, "lspeaker", 1.00); m_opna->add_route(2, "rspeaker", 1.00); DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 1.0); // burr brown pcm61p DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 1.0); // burr brown pcm61p + + // NOTE: 1 DE-9 port only + MSX_GENERAL_PURPOSE_PORT(config, m_joy, msx_general_purpose_port_devices, "joystick"); } void pc9801_86_device::device_add_mconfig(machine_config &config) @@ -98,8 +113,8 @@ void pc9801_86_device::device_add_mconfig(machine_config &config) void pc9801_86_device::opna_reset_routes_config(machine_config &config) { m_opna->reset_routes(); - m_opna->add_route(0, "lspeaker", 0.50); - m_opna->add_route(0, "rspeaker", 0.50); + m_opna->add_route(0, "lspeaker", 0.125); + m_opna->add_route(0, "rspeaker", 0.125); m_opna->add_route(1, "lspeaker", 0.50); m_opna->add_route(2, "rspeaker", 0.50); } @@ -131,8 +146,6 @@ const tiny_rom_entry *pc9801_86_device::device_rom_region() const //------------------------------------------------- static INPUT_PORTS_START( pc9801_86 ) - PORT_INCLUDE( pc9801_joy_port ) - // Single 8-bit DSW bank PORT_START("OPNA_DSW") PORT_DIPNAME( 0x01, 0x00, "PC-9801-86: Port Base" ) PORT_DIPLOCATION("OPNA_SW:!1") @@ -166,29 +179,12 @@ ioport_constructor pc9801_86_device::device_input_ports() const return INPUT_PORTS_NAME( pc9801_86 ); } -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// pc9801_86_device - constructor -//------------------------------------------------- - -pc9801_86_device::pc9801_86_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : pc9801_snd_device(mconfig, type, tag, owner, clock) - , m_bus(*this, DEVICE_SELF_OWNER) - , m_opna(*this, "opna") - , m_irqs(*this, "irqs") - , m_ldac(*this, "ldac") - , m_rdac(*this, "rdac") - , m_queue(QUEUE_SIZE) +// only for derived designs? +void pc9801_86_device::opna_map(address_map &map) { -} - -pc9801_86_device::pc9801_86_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : pc9801_86_device(mconfig, PC9801_86, tag, owner, clock) -{ - + // TODO: confirm it really is ROMless + // TODO: confirm size + map(0x000000, 0x1fffff).ram(); } //------------------------------------------------- @@ -205,10 +201,6 @@ u16 pc9801_86_device::read_io_base() return ((ioport("OPNA_DSW")->read() & 1) << 8) + 0x188; } -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - void pc9801_86_device::device_start() { // TODO: uninstall option from dip @@ -239,11 +231,6 @@ void pc9801_86_device::device_start() save_item(NAME(m_irq_rate)); } - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - void pc9801_86_device::device_reset() { u16 current_io = read_io_base(); @@ -499,8 +486,6 @@ TIMER_CALLBACK_MEMBER(pc9801_86_device::dac_tick) // //************************************************************************** -DEFINE_DEVICE_TYPE(PC9801_SPEAKBOARD, pc9801_speakboard_device, "pc9801_spb", "NEC PC-9801 SpeakBoard") - ROM_START( pc9801_spb ) ROM_REGION( 0x4000, "sound_bios", ROMREGION_ERASEFF ) ROM_LOAD16_BYTE( "spb lh5764 ic21_pink.bin", 0x0001, 0x2000, CRC(5bcefa1f) SHA1(ae88e45d411bf5de1cb42689b12b6fca0146c586) ) @@ -570,8 +555,6 @@ void pc9801_speakboard_device::opna_slave_w(offs_t offset, u8 data) // //************************************************************************** -DEFINE_DEVICE_TYPE(OTOMICHAN_KAI, otomichan_kai_device, "pc98_otomichan_kai", "MAD Factory Otomi-chan Kai") // 音美(おとみ)ちゃん改 - otomichan_kai_device::otomichan_kai_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : pc9801_86_device(mconfig, OTOMICHAN_KAI, tag, owner, clock) , m_opn2c(*this, "opn2c") diff --git a/src/devices/bus/cbus/pc9801_86.h b/src/devices/bus/cbus/pc9801_86.h index 64a2516bb8d..d79cf21b6de 100644 --- a/src/devices/bus/cbus/pc9801_86.h +++ b/src/devices/bus/cbus/pc9801_86.h @@ -11,20 +11,20 @@ #pragma once -#include "bus/cbus/pc9801_cbus.h" +#include "pc9801_cbus.h" + +#include "bus/msx/ctrl/ctrl.h" #include "machine/input_merger.h" #include "sound/dac.h" #include "sound/ymopn.h" -#include "pc9801_snd.h" - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** // ======================> pc9801_86_device -class pc9801_86_device : public pc9801_snd_device +class pc9801_86_device : public device_t { public: // construction/destruction @@ -49,7 +49,7 @@ protected: virtual ioport_constructor device_input_ports() const override ATTR_COLD; virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; void pc9801_86_config(machine_config &config); - virtual u16 read_io_base() override; + u16 read_io_base(); TIMER_CALLBACK_MEMBER(dac_tick); @@ -76,9 +76,14 @@ private: required_device m_ldac; required_device m_rdac; std::vector m_queue; + required_device m_joy; + emu_timer *m_dac_timer; void dac_transfer(); + + u8 m_joy_sel; + u16 m_io_base; }; class pc9801_speakboard_device : public pc9801_86_device diff --git a/src/devices/bus/cbus/pc9801_snd.cpp b/src/devices/bus/cbus/pc9801_snd.cpp deleted file mode 100644 index 3a33cfe6757..00000000000 --- a/src/devices/bus/cbus/pc9801_snd.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Angelo Salese -/*************************************************************************** - - NEC PC-9801 - common functions for C-bus sound boards -26, -86, -118 - -***************************************************************************/ - -#include "emu.h" -#include "pc9801_snd.h" - -pc9801_snd_device::pc9801_snd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, type, tag, owner, clock) -{ -} - -u8 pc9801_snd_device::opn_porta_r() -{ - if(m_joy_sel & 0x80) - return ioport(m_joy_sel & 0x40 ? "PA2" : "PA1")->read(); - - return 0xff; -} - -void pc9801_snd_device::opn_portb_w(u8 data) { m_joy_sel = data; } - -INPUT_PORTS_START(pc9801_joy_port) - PORT_START("PA1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Up") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Down") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Left") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Right") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Joystick Button 1") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Joystick Button 2") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("PA2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Up") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Down") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Left") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Right") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Joystick Button 1") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Joystick Button 2") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END diff --git a/src/devices/bus/cbus/pc9801_snd.h b/src/devices/bus/cbus/pc9801_snd.h deleted file mode 100644 index 0c9c694a4e3..00000000000 --- a/src/devices/bus/cbus/pc9801_snd.h +++ /dev/null @@ -1,33 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Angelo Salese -/*************************************************************************** - - NEC PC-9801 - common functions for CBUS sound boards -26, -86, -118 - -***************************************************************************/ - -#ifndef MAME_BUS_CBUS_PC9801_SND_H -#define MAME_BUS_CBUS_PC9801_SND_H - -#pragma once - -class pc9801_snd_device : public device_t -{ -public: - pc9801_snd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - -protected: - u8 opn_porta_r(); - void opn_portb_w(u8 data); - u16 m_io_base; - virtual u16 read_io_base() = 0; - -private: - u8 m_joy_sel; -}; - -//DECLARE_DEVICE_TYPE(PC9801_SND, pc9801_snd_device) -INPUT_PORTS_EXTERN(pc9801_joy_port); - -#endif From 077fde1f04a330f25799d49fabcd89e803b72f24 Mon Sep 17 00:00:00 2001 From: ArcadeShadow Date: Wed, 23 Apr 2025 11:05:42 +0100 Subject: [PATCH 05/15] sgx.xml: Changed media description (#13606) Replaced "cartridges" to "HuCards" on the software list description. --- hash/sgx.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hash/sgx.xml b/hash/sgx.xml index ad3614d8bfd..f576846cafb 100644 --- a/hash/sgx.xml +++ b/hash/sgx.xml @@ -3,7 +3,7 @@ - + 1941 - Counter Attack 1991 From b8de7b1cbd20d2a1e0e7d776c0e0c2d514b836f7 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 23 Apr 2025 21:18:33 +0200 Subject: [PATCH 06/15] makefile: change windows cpu arch reg query /v to -v --- makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefile b/makefile index 7a44c54e3c1..d9161d2c7a1 100644 --- a/makefile +++ b/makefile @@ -150,7 +150,7 @@ PLATFORM := x86 else ifeq ($(MSYSTEM),CLANGARM64) PLATFORM := arm64 else # MSYSTEM -OSARCH := $(shell reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE) +OSARCH := $(shell reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" -v PROCESSOR_ARCHITECTURE) ifneq ($(findstring ARM64,$(OSARCH)),) PLATFORM := arm64 else # OSARCH From 955ac69f84e1ce366ee2194249de44c6aec6747a Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 23 Apr 2025 22:53:12 +0200 Subject: [PATCH 07/15] ymfm: remove 2608/2610 ssg gain workaround --- src/devices/bus/cbus/pc9801_86.cpp | 4 ++-- src/devices/bus/pc8801/pc8801_23.cpp | 4 ++-- src/devices/sound/ymfm_mame.h | 5 ---- src/mame/metro/metro.cpp | 10 ++++---- src/mame/misc/mcatadv.cpp | 4 ++-- src/mame/nec/pc8801.cpp | 4 ++-- src/mame/nec/pc88va.cpp | 4 ++-- src/mame/neogeo/neogeo.cpp | 6 ++--- src/mame/psikyo/psikyo.cpp | 2 +- src/mame/snk/mechatt.cpp | 4 ++-- src/mame/sony/zn.cpp | 4 ++-- src/mame/taito/2mindril.cpp | 4 ++-- src/mame/taito/asuka.cpp | 2 +- src/mame/taito/bingowav.cpp | 2 +- src/mame/taito/cpzodiac.cpp | 4 ++-- src/mame/taito/heromem.cpp | 8 +++---- src/mame/taito/ninjaw.cpp | 4 ++-- src/mame/taito/othunder.cpp | 4 ++-- src/mame/taito/slapshot.cpp | 8 +++---- src/mame/taito/taito_b.cpp | 26 ++++++++++----------- src/mame/taito/taito_f2.cpp | 4 ++-- src/mame/taito/taito_h.cpp | 2 +- src/mame/taito/taito_l.cpp | 2 +- src/mame/taito/taito_x.cpp | 12 +++++----- src/mame/taito/taito_z.cpp | 34 ++++++++++++++-------------- src/mame/taito/taitoair.cpp | 2 +- src/mame/taito/warriorb.cpp | 6 ++--- src/mame/taito/wgp.cpp | 4 ++-- src/mame/tecmo/wc90.cpp | 6 ++--- src/mame/virtual/vgmplay.cpp | 16 ++++++------- src/mame/vsystem/aerofgt.cpp | 4 ++-- src/mame/vsystem/crshrace.cpp | 4 ++-- src/mame/vsystem/f1gp.cpp | 4 ++-- src/mame/vsystem/fromanc2.cpp | 12 +++++----- src/mame/vsystem/gstriker.cpp | 4 ++-- src/mame/vsystem/inufuku.cpp | 4 ++-- src/mame/vsystem/pipedrm.cpp | 12 +++++----- src/mame/vsystem/pspikes.cpp | 20 ++++++++-------- src/mame/vsystem/suprslam.cpp | 4 ++-- src/mame/vsystem/tail2nos.cpp | 4 ++-- src/mame/vsystem/taotaido.cpp | 4 ++-- src/mame/vsystem/welltris.cpp | 2 +- 42 files changed, 137 insertions(+), 142 deletions(-) diff --git a/src/devices/bus/cbus/pc9801_86.cpp b/src/devices/bus/cbus/pc9801_86.cpp index 9b64d450c16..f3ac1310fb2 100644 --- a/src/devices/bus/cbus/pc9801_86.cpp +++ b/src/devices/bus/cbus/pc9801_86.cpp @@ -92,8 +92,8 @@ void pc9801_86_device::pc9801_86_config(machine_config &config) m_joy_sel = data; }); // TODO: confirm mixing - m_opna->add_route(0, "lspeaker", 0.25); - m_opna->add_route(0, "rspeaker", 0.25); + m_opna->add_route(0, "lspeaker", 0.75); + m_opna->add_route(0, "rspeaker", 0.75); m_opna->add_route(1, "lspeaker", 1.00); m_opna->add_route(2, "rspeaker", 1.00); diff --git a/src/devices/bus/pc8801/pc8801_23.cpp b/src/devices/bus/pc8801/pc8801_23.cpp index 507f4e49c7b..2e171e2f914 100644 --- a/src/devices/bus/pc8801/pc8801_23.cpp +++ b/src/devices/bus/pc8801/pc8801_23.cpp @@ -50,8 +50,8 @@ void pc8801_23_device::device_add_mconfig(machine_config &config) // m_opna->port_a_read_callback().set(FUNC(pc8801_23_device::opn_porta_r)); // m_opna->port_b_read_callback().set_ioport("OPN_PB"); // TODO: per-channel mixing is unconfirmed - m_opna->add_route(0, "^^lspeaker", 0.25); - m_opna->add_route(0, "^^rspeaker", 0.25); + m_opna->add_route(0, "^^lspeaker", 0.75); + m_opna->add_route(0, "^^rspeaker", 0.75); m_opna->add_route(1, "^^lspeaker", 0.75); m_opna->add_route(2, "^^rspeaker", 0.75); } diff --git a/src/devices/sound/ymfm_mame.h b/src/devices/sound/ymfm_mame.h index e6400e76d6c..740ebe51361 100644 --- a/src/devices/sound/ymfm_mame.h +++ b/src/devices/sound/ymfm_mame.h @@ -308,11 +308,6 @@ protected: // wants SSG streams first; to do this, we rotate the outputs // by the number of SSG output channels parent::update_internal(outputs, ChipClass::SSG_OUTPUTS); - - // for the single-output case, also apply boost the gain to better match - // previous version, which summed instead of averaged the outputs - if (ChipClass::SSG_OUTPUTS == 1) - outputs[0].apply_gain(3.0); } }; diff --git a/src/mame/metro/metro.cpp b/src/mame/metro/metro.cpp index 60f94cfdf70..0d23f95c409 100644 --- a/src/mame/metro/metro.cpp +++ b/src/mame/metro/metro.cpp @@ -3486,8 +3486,8 @@ void blzntrnd_state::blzntrnd(machine_config &config) ym2610_device &ymsnd(YM2610(config, m_ymsnd, 16_MHz_XTAL/2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } @@ -3510,9 +3510,9 @@ void blzntrnd_state::gstrik2(machine_config &config) ym2610_device &ymsnd(YM2610(config.replace(), m_ymsnd, 16_MHz_XTAL/2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "mono", 0.5); - ymsnd.add_route(1, "mono", 0.5); - ymsnd.add_route(2, "mono", 0.5); + ymsnd.add_route(0, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); } diff --git a/src/mame/misc/mcatadv.cpp b/src/mame/misc/mcatadv.cpp index 704b532d1bd..ae9fd6986b7 100644 --- a/src/mame/misc/mcatadv.cpp +++ b/src/mame/misc/mcatadv.cpp @@ -746,7 +746,7 @@ void mcatadv_state::mcatadv(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000) / 2)); // verified on PCB ymsnd.irq_handler().set_inputline(m_soundcpu, 0); - ymsnd.add_route(0, "mono", 0.32); + ymsnd.add_route(0, "mono", 1.0); ymsnd.add_route(1, "mono", 0.5); ymsnd.add_route(2, "mono", 0.5); } @@ -760,7 +760,7 @@ void mcatadv_state::nost(machine_config &config) ym2610_device *ymsnd = subdevice("ymsnd"); ymsnd->reset_routes(); - ymsnd->add_route(0, "mono", 0.2); + ymsnd->add_route(0, "mono", 0.6); ymsnd->add_route(1, "mono", 0.5); ymsnd->add_route(2, "mono", 0.5); } diff --git a/src/mame/nec/pc8801.cpp b/src/mame/nec/pc8801.cpp index 1895e6a0ece..42a825c1821 100644 --- a/src/mame/nec/pc8801.cpp +++ b/src/mame/nec/pc8801.cpp @@ -1768,8 +1768,8 @@ void pc8801fh_state::pc8801fh(machine_config &config) m_opna->port_b_write_callback().set(FUNC(pc8801fh_state::opn_portb_w)); // TODO: per-channel mixing is unconfirmed - m_opna->add_route(0, m_lspeaker, 0.25); - m_opna->add_route(0, m_rspeaker, 0.25); + m_opna->add_route(0, m_lspeaker, 0.75); + m_opna->add_route(0, m_rspeaker, 0.75); m_opna->add_route(1, m_lspeaker, 0.75); m_opna->add_route(2, m_rspeaker, 0.75); diff --git a/src/mame/nec/pc88va.cpp b/src/mame/nec/pc88va.cpp index 01c5828c9c6..87e761d39b0 100644 --- a/src/mame/nec/pc88va.cpp +++ b/src/mame/nec/pc88va.cpp @@ -1515,8 +1515,8 @@ void pc88va_state::pc88va(machine_config &config) m_opna->port_b_read_callback().set(FUNC(pc88va_state::opn_portb_r)); m_opna->port_b_write_callback().set(FUNC(pc88va_state::opn_portb_w)); // TODO: per-channel mixing is unconfirmed - m_opna->add_route(0, m_lspeaker, 0.25); - m_opna->add_route(0, m_rspeaker, 0.25); + m_opna->add_route(0, m_lspeaker, 0.75); + m_opna->add_route(0, m_rspeaker, 0.75); m_opna->add_route(1, m_lspeaker, 0.75); m_opna->add_route(2, m_rspeaker, 0.75); diff --git a/src/mame/neogeo/neogeo.cpp b/src/mame/neogeo/neogeo.cpp index 0df3ac24891..84c9c968b82 100644 --- a/src/mame/neogeo/neogeo.cpp +++ b/src/mame/neogeo/neogeo.cpp @@ -1971,8 +1971,8 @@ void neogeo_base_state::neogeo_stereo(machine_config &config) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - m_ym->add_route(0, "lspeaker", 0.28); - m_ym->add_route(0, "rspeaker", 0.28); + m_ym->add_route(0, "lspeaker", 0.84); + m_ym->add_route(0, "rspeaker", 0.84); m_ym->add_route(1, "lspeaker", 0.98); m_ym->add_route(2, "rspeaker", 0.98); } @@ -2009,7 +2009,7 @@ void ngarcade_base_state::neogeo_mono(machine_config &config) { SPEAKER(config, "speaker").front_center(); - m_ym->add_route(0, "speaker", 0.28); + m_ym->add_route(0, "speaker", 0.84); m_ym->add_route(1, "speaker", 0.49); m_ym->add_route(2, "speaker", 0.49); } diff --git a/src/mame/psikyo/psikyo.cpp b/src/mame/psikyo/psikyo.cpp index ba65806cdef..1d15e3c555b 100644 --- a/src/mame/psikyo/psikyo.cpp +++ b/src/mame/psikyo/psikyo.cpp @@ -1130,7 +1130,7 @@ void psikyo_state::gunbird(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(ALL_OUTPUTS, "mono", 0.55); + ymsnd.add_route(ALL_OUTPUTS, "mono", 0.55); GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); diff --git a/src/mame/snk/mechatt.cpp b/src/mame/snk/mechatt.cpp index 3c41ea4117c..40fa134705e 100644 --- a/src/mame/snk/mechatt.cpp +++ b/src/mame/snk/mechatt.cpp @@ -524,8 +524,8 @@ void mechatt_state::mechatt(machine_config &config) ym2608_device &ymsnd(YM2608(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "lspeaker", 0.15); - ymsnd.add_route(0, "rspeaker", 0.15); + ymsnd.add_route(0, "lspeaker", 0.45); + ymsnd.add_route(0, "rspeaker", 0.45); ymsnd.add_route(1, "lspeaker", 0.80); ymsnd.add_route(2, "rspeaker", 0.80); } diff --git a/src/mame/sony/zn.cpp b/src/mame/sony/zn.cpp index e41b67f0dba..eb8c7a536e0 100644 --- a/src/mame/sony/zn.cpp +++ b/src/mame/sony/zn.cpp @@ -966,8 +966,8 @@ public: YM2610B(config, m_ym2610b, 16_MHz_XTAL / 2); m_ym2610b->irq_handler().set_inputline(m_audiocpu, 0); - m_ym2610b->add_route(0, m_speaker[0], 0.25); - m_ym2610b->add_route(0, m_speaker[1], 0.25); + m_ym2610b->add_route(0, m_speaker[0], 0.75); + m_ym2610b->add_route(0, m_speaker[1], 0.75); m_ym2610b->add_route(1, m_speaker[0], 1.0); m_ym2610b->add_route(2, m_speaker[1], 1.0); diff --git a/src/mame/taito/2mindril.cpp b/src/mame/taito/2mindril.cpp index 49e91152f61..3925f937357 100644 --- a/src/mame/taito/2mindril.cpp +++ b/src/mame/taito/2mindril.cpp @@ -379,8 +379,8 @@ void _2mindril_state::drill(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16000000/2)); ymsnd.irq_handler().set(FUNC(_2mindril_state::irqhandler)); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/taito/asuka.cpp b/src/mame/taito/asuka.cpp index d9d5c43d288..b2c86a9d606 100644 --- a/src/mame/taito/asuka.cpp +++ b/src/mame/taito/asuka.cpp @@ -1126,7 +1126,7 @@ void bonzeadv_state::bonzeadv(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); diff --git a/src/mame/taito/bingowav.cpp b/src/mame/taito/bingowav.cpp index d1f793e2bdb..3fab12dbd22 100644 --- a/src/mame/taito/bingowav.cpp +++ b/src/mame/taito/bingowav.cpp @@ -130,7 +130,7 @@ void bingowav_state::bingowav(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); diff --git a/src/mame/taito/cpzodiac.cpp b/src/mame/taito/cpzodiac.cpp index 4fdcc0d2cfb..7c1fbcc8702 100644 --- a/src/mame/taito/cpzodiac.cpp +++ b/src/mame/taito/cpzodiac.cpp @@ -195,8 +195,8 @@ void cpzodiac_state::cpzodiac(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16_MHz_XTAL/2)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); diff --git a/src/mame/taito/heromem.cpp b/src/mame/taito/heromem.cpp index 8e33486f2f7..a4da7409257 100644 --- a/src/mame/taito/heromem.cpp +++ b/src/mame/taito/heromem.cpp @@ -270,15 +270,15 @@ void heromem_state::heromem(machine_config &config) ym2610b_device &ym_l(YM2610B(config, "ym_l", 16000000 / 2)); ym_l.irq_handler().set_inputline("audiocpu_l", 0); - ym_l.add_route(0, "lspeaker", 0.25); - ym_l.add_route(0, "lspeaker", 0.25); + ym_l.add_route(0, "lspeaker", 0.75); + ym_l.add_route(0, "lspeaker", 0.75); ym_l.add_route(1, "lspeaker", 1.0); ym_l.add_route(2, "lspeaker", 1.0); ym2610b_device &ym_r(YM2610B(config, "ym_r", 16000000 / 2)); ym_r.irq_handler().set_inputline("audiocpu_r", 0); - ym_r.add_route(0, "rspeaker", 0.25); - ym_r.add_route(0, "rspeaker", 0.25); + ym_r.add_route(0, "rspeaker", 0.75); + ym_r.add_route(0, "rspeaker", 0.75); ym_r.add_route(1, "rspeaker", 1.0); ym_r.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/taito/ninjaw.cpp b/src/mame/taito/ninjaw.cpp index fbe7c62df0a..9ca7efd01d0 100644 --- a/src/mame/taito/ninjaw.cpp +++ b/src/mame/taito/ninjaw.cpp @@ -980,7 +980,7 @@ void ninjaw_state::ninjaw(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "subwoofer", 0.25); + ymsnd.add_route(0, "subwoofer", 0.75); ymsnd.add_route(1, "2610.1.l", 1.0); ymsnd.add_route(1, "2610.1.r", 1.0); ymsnd.add_route(2, "2610.2.l", 1.0); @@ -1086,7 +1086,7 @@ void ninjaw_state::darius2(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "subwoofer", 0.25); + ymsnd.add_route(0, "subwoofer", 0.75); ymsnd.add_route(1, "2610.1.l", 1.0); ymsnd.add_route(1, "2610.1.r", 1.0); ymsnd.add_route(2, "2610.2.l", 1.0); diff --git a/src/mame/taito/othunder.cpp b/src/mame/taito/othunder.cpp index ea930b3300e..968cef66a03 100644 --- a/src/mame/taito/othunder.cpp +++ b/src/mame/taito/othunder.cpp @@ -631,8 +631,8 @@ void othunder_state::othunder(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "2610.0l", 0.25); - ymsnd.add_route(0, "2610.0r", 0.25); + ymsnd.add_route(0, "2610.0l", 0.75); + ymsnd.add_route(0, "2610.0r", 0.75); ymsnd.add_route(1, "2610.1l", 1.0); ymsnd.add_route(1, "2610.1r", 1.0); ymsnd.add_route(2, "2610.2l", 1.0); diff --git a/src/mame/taito/slapshot.cpp b/src/mame/taito/slapshot.cpp index 8de396dde70..a9f26d200fc 100644 --- a/src/mame/taito/slapshot.cpp +++ b/src/mame/taito/slapshot.cpp @@ -442,8 +442,8 @@ void slapshot_state::slapshot(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 32_MHz_XTAL/4)); /* 8 MHz */ ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); @@ -508,8 +508,8 @@ void slapshot_state::opwolf3(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 32_MHz_XTAL/4)); /* 8 MHz */ ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); diff --git a/src/mame/taito/taito_b.cpp b/src/mame/taito/taito_b.cpp index edda17aa71f..2788dbaffed 100644 --- a/src/mame/taito/taito_b.cpp +++ b/src/mame/taito/taito_b.cpp @@ -1900,7 +1900,7 @@ void taitob_state::rastsag2(machine_config &config) ym2610_device &ymsnd(YM2610(config, m_ym, 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2026,7 +2026,7 @@ void taitob_state::ashura(machine_config &config) ym2610_device &ymsnd(YM2610(config, m_ym, 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2080,7 +2080,7 @@ void taitob_state::crimec(machine_config &config) ym2610_device &ymsnd(YM2610(config, m_ym, 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2193,7 +2193,7 @@ void rambo3_state::rambo3p(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); /* verified on pcb */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2247,7 +2247,7 @@ void rambo3_state::rambo3(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); /* 8 MHz verified on pcb */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2306,7 +2306,7 @@ void taitob_state::pbobble(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2365,7 +2365,7 @@ void taitob_state::spacedx(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2419,7 +2419,7 @@ void taitob_state::spacedxo(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2478,7 +2478,7 @@ void taitob_state::qzshowby(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2591,7 +2591,7 @@ void taitob_state::silentd(machine_config &config) /* ET910000B PCB */ ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2645,7 +2645,7 @@ void taitob_state::selfeena(machine_config &config) /* ET910000A PCB */ ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); /* 8 MHz */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2717,7 +2717,7 @@ void taitob_state::sbm(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); @@ -2775,7 +2775,7 @@ void taitob_c_state::realpunc(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); diff --git a/src/mame/taito/taito_f2.cpp b/src/mame/taito/taito_f2.cpp index 18535603f9a..3d63b38278f 100644 --- a/src/mame/taito/taito_f2.cpp +++ b/src/mame/taito/taito_f2.cpp @@ -2831,8 +2831,8 @@ void taitof2_state::taito_f2(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 24000000/3)); /* Was 16000000/2, but only a 24Mhz OSC */ ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); diff --git a/src/mame/taito/taito_h.cpp b/src/mame/taito/taito_h.cpp index 1faeb78cc30..0127e36ae2f 100644 --- a/src/mame/taito/taito_h.cpp +++ b/src/mame/taito/taito_h.cpp @@ -612,7 +612,7 @@ void taitoh_state::taitoh_base(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); diff --git a/src/mame/taito/taito_l.cpp b/src/mame/taito/taito_l.cpp index 338872d37db..f2990c87cb7 100644 --- a/src/mame/taito/taito_l.cpp +++ b/src/mame/taito/taito_l.cpp @@ -1356,7 +1356,7 @@ void taitol_2cpu_state::raimais(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8_MHz_XTAL)); /* verified on pcb (8Mhz OSC is also for the 2nd z80) */ ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 1.0); ymsnd.add_route(2, "mono", 1.0); diff --git a/src/mame/taito/taito_x.cpp b/src/mame/taito/taito_x.cpp index 99b90a04b05..4c7a435cbf8 100644 --- a/src/mame/taito/taito_x.cpp +++ b/src/mame/taito/taito_x.cpp @@ -1054,8 +1054,8 @@ void taitox_cchip_state::superman(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); // verified on PCB ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); @@ -1139,8 +1139,8 @@ void taitox_state::gigandes(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); @@ -1183,8 +1183,8 @@ void taitox_state::ballbros(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); diff --git a/src/mame/taito/taito_z.cpp b/src/mame/taito/taito_z.cpp index 90a8f529a9f..11f417cb8da 100644 --- a/src/mame/taito/taito_z.cpp +++ b/src/mame/taito/taito_z.cpp @@ -3225,7 +3225,7 @@ void contcirc_state::contcirc(machine_config &config) //OSC: 26.686, 24.000, 16. ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "subwoofer", 0.20); + ymsnd.add_route(0, "subwoofer", 0.60); ymsnd.add_route(1, "2610.1.l", 2.0); ymsnd.add_route(1, "2610.1.r", 2.0); ymsnd.add_route(2, "2610.2.l", 2.0); @@ -3284,7 +3284,7 @@ void chasehq_state::chasehq(machine_config &config) //OSC: 26.686, 24.000, 16.00 ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "subwoofer", 0.20); + ymsnd.add_route(0, "subwoofer", 0.60); ymsnd.add_route(1, "2610.1.l", 1.0); ymsnd.add_route(1, "2610.1.r", 1.0); ymsnd.add_route(2, "2610.2.l", 1.0); @@ -3345,8 +3345,8 @@ void contcirc_state::enforce(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 20.0); ymsnd.add_route(1, "2610.1.r", 20.0); ymsnd.add_route(2, "2610.2.l", 20.0); @@ -3401,8 +3401,8 @@ void taitoz_state::bshark_base(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2)); //ymsnd.irq_handler().set_inputline(m_audiocpu, 0); // DG: this is probably specific to Z80 and wrong? - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 28.0); ymsnd.add_route(1, "2610.1.r", 28.0); ymsnd.add_route(2, "2610.2.l", 28.0); @@ -3476,8 +3476,8 @@ void sci_state::sci(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(32'000'000)/4)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 2.0); ymsnd.add_route(1, "2610.1.r", 2.0); ymsnd.add_route(2, "2610.2.l", 2.0); @@ -3546,7 +3546,7 @@ void nightstr_state::nightstr(machine_config &config) //OSC: 26.686, 24.000, 16. ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "subwoofer", 0.20); + ymsnd.add_route(0, "subwoofer", 0.60); ymsnd.add_route(1, "2610.1.l", 2.0); ymsnd.add_route(1, "2610.1.r", 2.0); ymsnd.add_route(2, "2610.2.l", 2.0); @@ -3606,8 +3606,8 @@ void taitoz_z80_sound_state::aquajack(machine_config &config) //OSC: 26.686, 24. ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 2.0); ymsnd.add_route(1, "2610.1.r", 2.0); ymsnd.add_route(2, "2610.2.l", 2.0); @@ -3673,8 +3673,8 @@ void spacegun_state::spacegun(machine_config &config) //OSC: 26.686, 24.000, 16. ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2)); // 8 MHz //ymsnd.irq_handler().set_inputline(m_audiocpu, 0); // DG: this is probably specific to Z80 and wrong? - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 8.0); ymsnd.add_route(1, "2610.1.r", 8.0); ymsnd.add_route(2, "2610.2.l", 8.0); @@ -3731,8 +3731,8 @@ void taitoz_z80_sound_state::dblaxle(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(32'000'000)/4)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 8.0); ymsnd.add_route(1, "2610.1.r", 8.0); ymsnd.add_route(2, "2610.2.l", 8.0); @@ -3792,8 +3792,8 @@ void sci_state::racingb(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(32'000'000)/4)); // 8 MHz ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 8.0); ymsnd.add_route(1, "2610.1.r", 8.0); ymsnd.add_route(2, "2610.2.l", 8.0); diff --git a/src/mame/taito/taitoair.cpp b/src/mame/taito/taitoair.cpp index 49de1aa3632..8caef50f357 100644 --- a/src/mame/taito/taitoair.cpp +++ b/src/mame/taito/taitoair.cpp @@ -722,7 +722,7 @@ void taitoair_state::airsys(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000) / 2)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.30); + ymsnd.add_route(0, "mono", 0.90); ymsnd.add_route(1, "mono", 0.60); ymsnd.add_route(2, "mono", 0.60); diff --git a/src/mame/taito/warriorb.cpp b/src/mame/taito/warriorb.cpp index 2a0fd4d6c23..1c2ff4ed943 100644 --- a/src/mame/taito/warriorb.cpp +++ b/src/mame/taito/warriorb.cpp @@ -635,7 +635,7 @@ void warriorb_state::darius2d(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16_MHz_XTAL / 2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "subwoofer", 0.25); + ymsnd.add_route(0, "subwoofer", 0.75); ymsnd.add_route(1, "2610.1.l", 1.0); ymsnd.add_route(1, "2610.1.r", 1.0); ymsnd.add_route(2, "2610.2.l", 1.0); @@ -712,8 +712,8 @@ void warriorb_state::warriorb(machine_config &config) ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16_MHz_XTAL / 2)); ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "2610.1.l", 1.0); ymsnd.add_route(1, "2610.1.r", 1.0); ymsnd.add_route(2, "2610.2.l", 1.0); diff --git a/src/mame/taito/wgp.cpp b/src/mame/taito/wgp.cpp index 367b69d60f1..06ebec3dfa8 100644 --- a/src/mame/taito/wgp.cpp +++ b/src/mame/taito/wgp.cpp @@ -900,8 +900,8 @@ void wgp_state::wgp(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); // assumes Z80 sandwiched between 68Ks - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); diff --git a/src/mame/tecmo/wc90.cpp b/src/mame/tecmo/wc90.cpp index cbfc9f26973..64012d08bdd 100644 --- a/src/mame/tecmo/wc90.cpp +++ b/src/mame/tecmo/wc90.cpp @@ -587,9 +587,9 @@ void wc90_state::wc90(machine_config &config) ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); // verified on PCB ymsnd.irq_handler().set_inputline("audiocpu", 0); - ymsnd.add_route(0, "mono", 0.50); - ymsnd.add_route(1, "mono", 1.0); - ymsnd.add_route(2, "mono", 1.0); + ymsnd.add_route(0, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.5); + ymsnd.add_route(2, "mono", 0.5); } void wc90_state::wc90t(machine_config &config) diff --git a/src/mame/virtual/vgmplay.cpp b/src/mame/virtual/vgmplay.cpp index b3180e56271..4371b096cbf 100644 --- a/src/mame/virtual/vgmplay.cpp +++ b/src/mame/virtual/vgmplay.cpp @@ -3726,15 +3726,15 @@ void vgmplay_state::vgmplay(machine_config &config) // TODO: prevent error.log spew YM2608(config, m_ym2608[0], 0); m_ym2608[0]->set_addrmap(0, &vgmplay_state::ym2608_map<0>); - m_ym2608[0]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 0); - m_ym2608[0]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 1); + m_ym2608[0]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 0); + m_ym2608[0]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 1); m_ym2608[0]->add_route(1, m_mixer, 1.00, AUTO_ALLOC_INPUT, 0); m_ym2608[0]->add_route(2, m_mixer, 1.00, AUTO_ALLOC_INPUT, 1); YM2608(config, m_ym2608[1], 0); m_ym2608[1]->set_addrmap(0, &vgmplay_state::ym2608_map<1>); - m_ym2608[1]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 0); - m_ym2608[1]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 1); + m_ym2608[1]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 0); + m_ym2608[1]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 1); m_ym2608[1]->add_route(1, m_mixer, 1.00, AUTO_ALLOC_INPUT, 0); m_ym2608[1]->add_route(2, m_mixer, 1.00, AUTO_ALLOC_INPUT, 1); @@ -3742,16 +3742,16 @@ void vgmplay_state::vgmplay(machine_config &config) YM2610(config, m_ym2610[0], 0); m_ym2610[0]->set_addrmap(0, &vgmplay_state::ym2610_adpcm_a_map<0>); m_ym2610[0]->set_addrmap(1, &vgmplay_state::ym2610_adpcm_b_map<0>); - m_ym2610[0]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 0); - m_ym2610[0]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 1); + m_ym2610[0]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 0); + m_ym2610[0]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 1); m_ym2610[0]->add_route(1, m_mixer, 0.50, AUTO_ALLOC_INPUT, 0); m_ym2610[0]->add_route(2, m_mixer, 0.50, AUTO_ALLOC_INPUT, 1); YM2610(config, m_ym2610[1], 0); m_ym2610[1]->set_addrmap(0, &vgmplay_state::ym2610_adpcm_a_map<1>); m_ym2610[1]->set_addrmap(1, &vgmplay_state::ym2610_adpcm_b_map<1>); - m_ym2610[1]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 0); - m_ym2610[1]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 1); + m_ym2610[1]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 0); + m_ym2610[1]->add_route(0, m_mixer, 0.75, AUTO_ALLOC_INPUT, 1); m_ym2610[1]->add_route(1, m_mixer, 0.50, AUTO_ALLOC_INPUT, 0); m_ym2610[1]->add_route(2, m_mixer, 0.50, AUTO_ALLOC_INPUT, 1); diff --git a/src/mame/vsystem/aerofgt.cpp b/src/mame/vsystem/aerofgt.cpp index 639c34307f0..dc0c4e8245c 100644 --- a/src/mame/vsystem/aerofgt.cpp +++ b/src/mame/vsystem/aerofgt.cpp @@ -409,8 +409,8 @@ void aerofgt_state::aerofgt(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); // verified on pcb ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/crshrace.cpp b/src/mame/vsystem/crshrace.cpp index 78ebe3ad71c..1e4c0c71904 100644 --- a/src/mame/vsystem/crshrace.cpp +++ b/src/mame/vsystem/crshrace.cpp @@ -631,8 +631,8 @@ void crshrace_state::crshrace(machine_config &config) // TODO: PCB sports 32 MHz ym2610_device &ymsnd(YM2610(config, "ymsnd", 8'000'000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/f1gp.cpp b/src/mame/vsystem/f1gp.cpp index 24bb3ce1090..f8687e651d4 100644 --- a/src/mame/vsystem/f1gp.cpp +++ b/src/mame/vsystem/f1gp.cpp @@ -867,8 +867,8 @@ void f1gp_state::f1gp(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/fromanc2.cpp b/src/mame/vsystem/fromanc2.cpp index 256f007a4b5..60177bd1295 100644 --- a/src/mame/vsystem/fromanc2.cpp +++ b/src/mame/vsystem/fromanc2.cpp @@ -532,8 +532,8 @@ void fromanc2_state::fromanc2(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.add_route(0, "mono", 0.50); - ymsnd.add_route(1, "mono", 0.75); - ymsnd.add_route(2, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); } void fromanc2_state::fromancr(machine_config &config) @@ -588,8 +588,8 @@ void fromanc2_state::fromancr(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.add_route(0, "mono", 0.50); - ymsnd.add_route(1, "mono", 0.75); - ymsnd.add_route(2, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); } void fromanc4_state::fromanc4(machine_config &config) @@ -643,8 +643,8 @@ void fromanc4_state::fromanc4(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.add_route(0, "mono", 0.50); - ymsnd.add_route(1, "mono", 0.75); - ymsnd.add_route(2, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); } diff --git a/src/mame/vsystem/gstriker.cpp b/src/mame/vsystem/gstriker.cpp index be9751a8cc8..c30f57c1735 100644 --- a/src/mame/vsystem/gstriker.cpp +++ b/src/mame/vsystem/gstriker.cpp @@ -676,8 +676,8 @@ void gstriker_state::base(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8_MHz_XTAL)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/inufuku.cpp b/src/mame/vsystem/inufuku.cpp index 59ad4213302..b9a60643d13 100644 --- a/src/mame/vsystem/inufuku.cpp +++ b/src/mame/vsystem/inufuku.cpp @@ -592,8 +592,8 @@ void inufuku_state::inufuku(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(32'000'000)/4)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.add_route(0, "mono", 0.50); - ymsnd.add_route(1, "mono", 0.75); - ymsnd.add_route(2, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.25); + ymsnd.add_route(2, "mono", 0.25); } diff --git a/src/mame/vsystem/pipedrm.cpp b/src/mame/vsystem/pipedrm.cpp index 00fb19de3a6..f91fccc6ac4 100644 --- a/src/mame/vsystem/pipedrm.cpp +++ b/src/mame/vsystem/pipedrm.cpp @@ -684,9 +684,9 @@ void pipedrm_state::pipedrm(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8_MHz_XTAL)); ymsnd.irq_handler().set_inputline("sub", 0); - ymsnd.add_route(0, "mono", 0.50); - ymsnd.add_route(1, "mono", 1.0); - ymsnd.add_route(2, "mono", 1.0); + ymsnd.add_route(0, "mono", 0.75); + ymsnd.add_route(1, "mono", 0.5); + ymsnd.add_route(2, "mono", 0.5); } void hatris_state::hatris(machine_config &config) @@ -728,9 +728,9 @@ void hatris_state::hatris(machine_config &config) ym2608_device &ym2608(YM2608(config, "ymsnd", 8_MHz_XTAL)); ym2608.irq_handler().set_inputline("sub", 0); - ym2608.add_route(0, "mono", 0.50); - ym2608.add_route(1, "mono", 1.0); - ym2608.add_route(2, "mono", 1.0); + ym2608.add_route(0, "mono", 0.75); + ym2608.add_route(1, "mono", 0.5); + ym2608.add_route(2, "mono", 0.5); } diff --git a/src/mame/vsystem/pspikes.cpp b/src/mame/vsystem/pspikes.cpp index b42f4302950..846555a9f7b 100644 --- a/src/mame/vsystem/pspikes.cpp +++ b/src/mame/vsystem/pspikes.cpp @@ -2318,8 +2318,8 @@ void pspikes_banked_sound_state::pspikes(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } @@ -2519,8 +2519,8 @@ void pspikes_banked_sound_state::karatblz(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); // verified on pcb ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } @@ -2617,8 +2617,8 @@ void pspikes_banked_sound_state::spinlbrk(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); // verified on pcb ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } @@ -2666,8 +2666,8 @@ void pspikes_banked_sound_state::turbofrc(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); // verified on pcb ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } @@ -2717,8 +2717,8 @@ void pspikes_banked_sound_state::aerofgtb(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/suprslam.cpp b/src/mame/vsystem/suprslam.cpp index 733b85e3f98..d64c43f3d6e 100644 --- a/src/mame/vsystem/suprslam.cpp +++ b/src/mame/vsystem/suprslam.cpp @@ -459,8 +459,8 @@ void suprslam_state::suprslam(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 32_MHz_XTAL / 4)); // not verified ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/tail2nos.cpp b/src/mame/vsystem/tail2nos.cpp index dd6321b6fdc..692cde85dd4 100644 --- a/src/mame/vsystem/tail2nos.cpp +++ b/src/mame/vsystem/tail2nos.cpp @@ -526,8 +526,8 @@ void tail2nos_state::tail2nos(machine_config &config) ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); // verified on PCB ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.port_b_write_callback().set(FUNC(tail2nos_state::sound_bankswitch_w)); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/taotaido.cpp b/src/mame/vsystem/taotaido.cpp index 8c57e990b25..82764ae6490 100644 --- a/src/mame/vsystem/taotaido.cpp +++ b/src/mame/vsystem/taotaido.cpp @@ -609,8 +609,8 @@ void taotaido_state::taotaido(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8'000'000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); + ymsnd.add_route(0, "lspeaker", 0.75); + ymsnd.add_route(0, "rspeaker", 0.75); ymsnd.add_route(1, "lspeaker", 1.0); ymsnd.add_route(2, "rspeaker", 1.0); } diff --git a/src/mame/vsystem/welltris.cpp b/src/mame/vsystem/welltris.cpp index 6e0650f62e4..66f200c1989 100644 --- a/src/mame/vsystem/welltris.cpp +++ b/src/mame/vsystem/welltris.cpp @@ -861,7 +861,7 @@ void welltris_state::welltris(machine_config &config) ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); - ymsnd.add_route(0, "mono", 0.25); + ymsnd.add_route(0, "mono", 0.75); ymsnd.add_route(1, "mono", 0.75); ymsnd.add_route(2, "mono", 0.75); } From ec0e2593c922450d73b13a701a0bef8d173eded4 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 24 Apr 2025 00:56:25 +0200 Subject: [PATCH 08/15] makefile: add note about cpu arch --- makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/makefile b/makefile index d9161d2c7a1..4bb8b68b9fb 100644 --- a/makefile +++ b/makefile @@ -150,6 +150,10 @@ PLATFORM := x86 else ifeq ($(MSYSTEM),CLANGARM64) PLATFORM := arm64 else # MSYSTEM + +# Get system processor architecture. Note that PROCESSOR_ARCHITECTURE local +# environment variable is for the currently running process, so we go through +# the registry instead. OSARCH := $(shell reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" -v PROCESSOR_ARCHITECTURE) ifneq ($(findstring ARM64,$(OSARCH)),) PLATFORM := arm64 @@ -327,8 +331,6 @@ else # windows UNAME := $(shell uname -mps) TARGETOS := $(OS) -ARCHITECTURE := _x86 - ifeq ($(firstword $(filter x86_64,$(UNAME))),x86_64) ARCHITECTURE := _x64 else ifeq ($(firstword $(filter amd64,$(UNAME))),amd64) @@ -341,6 +343,8 @@ else ifeq ($(firstword $(filter powerpc64,$(UNAME))),powerpc64) ARCHITECTURE := _x64 else ifeq ($(firstword $(filter s390x,$(UNAME))),s390x) ARCHITECTURE := _x64 +else +ARCHITECTURE := _x86 endif endif # windows From 1bcaf94d927d3f8de402357d267d4eedf13f13d8 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 24 Apr 2025 01:05:00 +0200 Subject: [PATCH 09/15] tattass: redumped v2.32 (Mar 14 1995) sound roms [ScOULaris] --- src/mame/dataeast/deco32.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/mame/dataeast/deco32.cpp b/src/mame/dataeast/deco32.cpp index cce80c1f347..4631cce663d 100644 --- a/src/mame/dataeast/deco32.cpp +++ b/src/mame/dataeast/deco32.cpp @@ -3622,7 +3622,7 @@ ROM_START( tattass ) ROM_LOAD32_WORD( "pp45.cpu", 0x000002, 0x80000, CRC(d3f30de0) SHA1(5a0aa0f96d29299b3b337b4b51bc84e447eb74d0) ) ROM_REGION(0x10000, "decobsmt:soundcpu", 0 ) // Sound CPU - ROM_LOAD( "u7.snd", 0x00000, 0x10000, CRC(6947be8a) SHA1(4ac6c3c7f54501f23c434708cea6bf327bc8cf95) ) + ROM_LOAD( "u7.snd", 0x00000, 0x10000, CRC(a7228077) SHA1(4d01575e51958a4d4686968008f5ed0a46380d70) ) ROM_REGION( 0x200000, "tiles1", 0 ) ROM_LOAD16_BYTE( "abak_b01.s02", 0x000000, 0x80000, CRC(bc805680) SHA1(ccdbca23fc843ef82a3524020999542f43b3c618) ) @@ -3680,10 +3680,10 @@ ROM_START( tattass ) ROM_LOAD16_BYTE( "ob2_c3.b3", 0x700001, 0x80000, CRC(e3517e6e) SHA1(68ac60570423d8f0d7cff3db1901c9c050d0be91) ) ROM_REGION(0x1000000, "decobsmt:bsmt", 0 ) - ROM_LOAD( "u17.snd", 0x000000, 0x80000, CRC(b945c18d) SHA1(6556bbb4a7057df3680132f24687fa944006c784) ) - ROM_LOAD( "u21.snd", 0x080000, 0x80000, CRC(10b2110c) SHA1(83e5938ed22da2874022e1dc8df76c72d95c448d) ) - ROM_LOAD( "u36.snd", 0x100000, 0x80000, CRC(3b73abe2) SHA1(195096e2302e84123b23b4ccd982fb3ab9afe42c) ) - ROM_LOAD( "u37.snd", 0x180000, 0x80000, CRC(986066b5) SHA1(9dd1a14de81733617cf51293674a8e26fc5cec68) ) + ROM_LOAD( "u17.snd", 0x000000, 0x80000, CRC(49303539) SHA1(3c4b6bbdcb039e355b66f72ed5ffe0bbd363f179) ) + ROM_LOAD( "u21.snd", 0x080000, 0x80000, CRC(0ad8bc18) SHA1(b06654e682080b3baeb7872d3c4eb3a04b22d79b) ) + ROM_LOAD( "u36.snd", 0x100000, 0x80000, CRC(f558947b) SHA1(57c0dc2e23beb388c1cf10a175be7dabf07da458) ) + ROM_LOAD( "u37.snd", 0x180000, 0x80000, CRC(7a3190bc) SHA1(e78b77268e5aa2879e7dcb5e8ff9e5dbed228cb1) ) ROM_REGION( 0x400, "eeprom", 0 ) ROM_LOAD( "eeprom-tattass.bin", 0x0000, 0x0400, CRC(7140f40c) SHA1(4fb7897933046b6adaf00b4626d5fd23d0e8a666) ) @@ -3695,7 +3695,7 @@ ROM_START( tattassa ) ROM_LOAD32_WORD( "rev232a.001", 0x000002, 0x80000, CRC(550245d4) SHA1(c1b2b31768da9becebd907a8622d05aa68ecaa29) ) ROM_REGION(0x10000, "decobsmt:soundcpu", 0 ) // Sound CPU - ROM_LOAD( "u7.snd", 0x00000, 0x10000, CRC(6947be8a) SHA1(4ac6c3c7f54501f23c434708cea6bf327bc8cf95) ) + ROM_LOAD( "u7.snd", 0x00000, 0x10000, CRC(a7228077) SHA1(4d01575e51958a4d4686968008f5ed0a46380d70) ) ROM_REGION( 0x200000, "tiles1", 0 ) ROM_LOAD16_BYTE( "abak_b01.s02", 0x000000, 0x80000, CRC(bc805680) SHA1(ccdbca23fc843ef82a3524020999542f43b3c618) ) @@ -3753,10 +3753,10 @@ ROM_START( tattassa ) ROM_LOAD16_BYTE( "ob2_c3.b3", 0x700001, 0x80000, CRC(e3517e6e) SHA1(68ac60570423d8f0d7cff3db1901c9c050d0be91) ) ROM_REGION(0x1000000, "decobsmt:bsmt", 0 ) - ROM_LOAD( "u17.snd", 0x000000, 0x80000, CRC(b945c18d) SHA1(6556bbb4a7057df3680132f24687fa944006c784) ) - ROM_LOAD( "u21.snd", 0x080000, 0x80000, CRC(10b2110c) SHA1(83e5938ed22da2874022e1dc8df76c72d95c448d) ) - ROM_LOAD( "u36.snd", 0x100000, 0x80000, CRC(3b73abe2) SHA1(195096e2302e84123b23b4ccd982fb3ab9afe42c) ) - ROM_LOAD( "u37.snd", 0x180000, 0x80000, CRC(986066b5) SHA1(9dd1a14de81733617cf51293674a8e26fc5cec68) ) + ROM_LOAD( "u17.snd", 0x000000, 0x80000, CRC(49303539) SHA1(3c4b6bbdcb039e355b66f72ed5ffe0bbd363f179) ) + ROM_LOAD( "u21.snd", 0x080000, 0x80000, CRC(0ad8bc18) SHA1(b06654e682080b3baeb7872d3c4eb3a04b22d79b) ) + ROM_LOAD( "u36.snd", 0x100000, 0x80000, CRC(f558947b) SHA1(57c0dc2e23beb388c1cf10a175be7dabf07da458) ) + ROM_LOAD( "u37.snd", 0x180000, 0x80000, CRC(7a3190bc) SHA1(e78b77268e5aa2879e7dcb5e8ff9e5dbed228cb1) ) ROM_REGION( 0x400, "eeprom", 0 ) ROM_LOAD( "eeprom-tattass.bin", 0x0000, 0x0400, CRC(7140f40c) SHA1(4fb7897933046b6adaf00b4626d5fd23d0e8a666) ) From 82f5829f2dac9534f803d6eb49d68a89fcb2f2a5 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Thu, 24 Apr 2025 08:32:28 +0200 Subject: [PATCH 10/15] New systems marked not working ------------------------------ Super Shanghai 2000 (standard. green board) [Roberto Fresca, Ioannis Bampoulas] Super Shanghai 2000 - Wrestle Fiesta (30% bonus, red board) [Roberto Fresca, Ioannis Bampoulas] --- src/mame/igs/goldstar.cpp | 77 +++++++++++++++++++++++++++++++++++++-- src/mame/mame.lst | 2 + 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index ec058915368..e90edabd633 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -21657,8 +21657,19 @@ ROM_START( fl7_tw ) // Serial 00000050E9B7. ROM_END -// PCB pic is blurred, but main components appear to be: TMPZ84C00AP-8, Winbond WF19054, 5 8-dip banks (dip sheet available) -// it's a 3-reel 5-liner with an extra reel. Puts PATRICK SHANGHAI in NVRAM, so some kind of hack / bootleg +/* + Super Shanghai 2001 + + it's a 3-reel 5-liner with an extra reel. + Puts PATRICK SHANGHAI in NVRAM, so some kind of hack / bootleg + + PCB pic is blurred, but main components appear to be: + + TMPZ84C00AP-8, + Winbond WF19054, + 5 8-dip banks (dip sheet available) + +*/ ROM_START( ss2001 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "9.u26", 0x00000, 0x10000, CRC(9ddb0239) SHA1(15733481996de9becccd5b920e40220c6101becf) ) @@ -21685,6 +21696,64 @@ ROM_START( ss2001 ) ROM_LOAD( "d27hc65d.bin", 0x0000, 0x02000, CRC(af8ce88d) SHA1(59d59b6b739aed4f6ee618db04af9ab9d2873bed) ) // colour data is at 0x1800-0x18ff ROM_END +/* + Super Shanghai 2000 + + PCB pic is blurred, but main components appear to be: + + Zilog Z80, + Winbond WF19054, + 5 8-dip banks (dip sheet available) + +*/ +ROM_START( ss2000 ) // main program (green board) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "main_program_set_2_green_board.bin", 0x00000, 0x10000, CRC(a5017fa0) SHA1(af985a15fe2c6195b3310ece8dc9e431d1b8c673) ) + + ROM_REGION( 0x80000, "gfx", 0 ) // all 27c512, same gfx set as ss2001 but half sized roms + ROM_LOAD( "rom1_m27c512.u1", 0x00000, 0x10000, CRC(52d1914b) SHA1(f8e5e7ba8809006e4109b82dd84e019d0d1e5447) ) + ROM_LOAD( "rom2_m27c512.u2", 0x10000, 0x10000, CRC(d5d50ef8) SHA1(60016d62922b369ce78130b8a94d967585657cd1) ) + ROM_LOAD( "rom3_m27c512.u3", 0x20000, 0x10000, CRC(56e6e11b) SHA1(0a20ef1e05ded62b0aece5a94565736cbc83edf7) ) + ROM_LOAD( "rom4_m27c512.u4", 0x30000, 0x10000, CRC(2cd3eb2d) SHA1(31f804cf9ddcd7dd8501946f9bf2f8a13b5b48f3) ) + ROM_LOAD( "rom5_m27c512.u5", 0x40000, 0x10000, CRC(57328ec5) SHA1(0f5cddb4b45ddef8f6d352220e32cff27edac2b4) ) + ROM_LOAD( "rom6_m27c512.u6", 0x50000, 0x10000, CRC(dd228316) SHA1(2d618758e870224284efc0dc8d3a83f3447d0e48) ) + ROM_LOAD( "rom7_m27c512.u7", 0x60000, 0x10000, CRC(a7c2a38b) SHA1(149ccc4b36bca6a149f3a26f5a580f34f4020ef3) ) + ROM_LOAD( "rom8_m27c512.u8", 0x70000, 0x10000, CRC(f6ef214c) SHA1(1f50ea87214b86416feda58fb5065175eb18df6a) ) + + ROM_REGION( 0x2000, "proms", 0 ) + ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(3ad40503) SHA1(5f7516001ac4286df3ca4f6ab36882a15019546a) ) +ROM_END + +/* + Super Shanghai 2000 + Wrestle Fiesta. + Main program 30% bonus by Vegas (red board) + + PCB pic is blurred, but main components appear to be: + + TMPZ84C00AP-8, + Winbond WF19054, + 5 8-dip banks + +*/ +ROM_START( ss2000a ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "main_program_set_3_red_board.bin", 0x00000, 0x10000, CRC(4aaa348c) SHA1(a33656798807906ce72351a1740f77563c5b2640) ) + + ROM_REGION( 0x80000, "gfx", 0 ) // all 27c512 + ROM_LOAD( "27c512.u1", 0x00000, 0x10000, CRC(26df6ee7) SHA1(3221639174b432ea93e0db33b7554f2ce8125052) ) + ROM_LOAD( "27c512.u2", 0x10000, 0x10000, CRC(5983a654) SHA1(6374e1fb0eda2454370e54d4dd8bf6c82b2f177e) ) + ROM_LOAD( "27c512.u3", 0x20000, 0x10000, CRC(0c2cd067) SHA1(a1c749ee0c0c3d25a80af6d56c41057430646ce9) ) + ROM_LOAD( "27c512.u4", 0x30000, 0x10000, CRC(e3adb317) SHA1(817a885236c28dc5dee02cc1d7e9e1c780560cae) ) + ROM_LOAD( "27c512.u5", 0x40000, 0x10000, CRC(e693e419) SHA1(8834419d02eb0f4f4a1619195a87b00e3f315a39) ) + ROM_LOAD( "27c512.u6", 0x50000, 0x10000, CRC(096c691a) SHA1(59a45ad654981cdfecaa3390253850491baccb9f) ) + ROM_LOAD( "27c512.u7", 0x60000, 0x10000, CRC(f26a3eeb) SHA1(83bbe0b068549f3bceb083d17894fb080e9b58a1) ) + ROM_LOAD( "27c512.u8", 0x70000, 0x10000, CRC(1444ee50) SHA1(6e6137869d4c46762bab92ed54071d9292243532) ) + + ROM_REGION( 0x2000, "proms", 0 ) + ROM_LOAD( "am27s29.bin", 0x0000, 0x0200, CRC(3ad40503) SHA1(5f7516001ac4286df3ca4f6ab36882a15019546a) ) +ROM_END + /*********************************************************************************************************************/ @@ -24042,7 +24111,9 @@ GAME( 1996, cherry96, scmaster, unkch, unkch4, unkch_state, init_un GAME( 1998, rolling, scmaster, rolling, unkch4, unkch_state, empty_init, ROT0, "bootleg", "Rolling", MACHINE_NOT_WORKING ) // inputs, outputs // this has a 4th reel -GAME( 200?, ss2001, 0, ss2001, cmaster, cmaster_state, empty_init, ROT0, "bootleg", "Super Shanghai 2001", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // TODO: everything +GAME( 2001, ss2001, 0, ss2001, cmaster, cmaster_state, empty_init, ROT0, "bootleg", "Super Shanghai 2001", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // TODO: everything +GAME( 2000, ss2000, 0, ss2001, cmaster, cmaster_state, empty_init, ROT0, "bootleg", "Super Shanghai 2000 (standard. green board)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // TODO: everything +GAME( 2000, ss2000a, 0, ss2001, cmaster, cmaster_state, empty_init, ROT0, "bootleg", "Super Shanghai 2000 - Wrestle Fiesta (30% bonus, red board)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // TODO: everything // ******************* Stealth sets ******************* diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 61a60e4b171..9f79bbbf377 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20466,6 +20466,8 @@ skillch skillcha srmagic ss2001 +ss2000 +ss2000a star100 super7 super9 From ea27cf3eeeb8989cf9e16c91f003af8dfbd544a4 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Thu, 24 Apr 2025 08:54:07 +0200 Subject: [PATCH 11/15] sorting mame.lst --- src/mame/mame.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 9f79bbbf377..79da762a128 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20465,9 +20465,9 @@ skill98 skillch skillcha srmagic -ss2001 ss2000 ss2000a +ss2001 star100 super7 super9 From 924cd5def29800e180ea0fe52cd4052186ced827 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 24 Apr 2025 11:02:07 +0200 Subject: [PATCH 12/15] tattass: update prev commit, keeping the old sound roms New working clones ------------------ Tattoo Assassins (US prototype, Mar 14 1995) [ScOULaris] --- src/mame/dataeast/deco32.cpp | 74 ++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 1 + 2 files changed, 75 insertions(+) diff --git a/src/mame/dataeast/deco32.cpp b/src/mame/dataeast/deco32.cpp index 4631cce663d..67da29776bd 100644 --- a/src/mame/dataeast/deco32.cpp +++ b/src/mame/dataeast/deco32.cpp @@ -3689,6 +3689,79 @@ ROM_START( tattass ) ROM_LOAD( "eeprom-tattass.bin", 0x0000, 0x0400, CRC(7140f40c) SHA1(4fb7897933046b6adaf00b4626d5fd23d0e8a666) ) ROM_END +ROM_START( tattasso ) + ROM_REGION(0x100000, "maincpu", 0 ) // ARM 32 bit code + ROM_LOAD32_WORD( "pp44.cpu", 0x000000, 0x80000, CRC(c3ca5b49) SHA1(c6420b0c20df1ae166b279504880ade65b1d8048) ) + ROM_LOAD32_WORD( "pp45.cpu", 0x000002, 0x80000, CRC(d3f30de0) SHA1(5a0aa0f96d29299b3b337b4b51bc84e447eb74d0) ) + + ROM_REGION(0x10000, "decobsmt:soundcpu", 0 ) // Sound CPU + ROM_LOAD( "u7.snd", 0x00000, 0x10000, CRC(6947be8a) SHA1(4ac6c3c7f54501f23c434708cea6bf327bc8cf95) ) + + ROM_REGION( 0x200000, "tiles1", 0 ) + ROM_LOAD16_BYTE( "abak_b01.s02", 0x000000, 0x80000, CRC(bc805680) SHA1(ccdbca23fc843ef82a3524020999542f43b3c618) ) + ROM_LOAD16_BYTE( "abak_b01.s13", 0x000001, 0x80000, CRC(350effcd) SHA1(0452d95be9fc28bd00d846a2cc5828899d69601e) ) + ROM_LOAD16_BYTE( "abak_b23.s02", 0x100000, 0x80000, CRC(91abdc21) SHA1(ba08e59bc0417e863d35ea295cf58cfe8faf57b5) ) + ROM_LOAD16_BYTE( "abak_b23.s13", 0x100001, 0x80000, CRC(80eb50fe) SHA1(abfe1a5417ceff9d6d52372d11993bf9b1db9432) ) + + ROM_REGION( 0x200000, "tiles2", 0 ) + ROM_LOAD16_BYTE( "bbak_b01.s02", 0x000000, 0x80000, CRC(611be9a6) SHA1(86263c8beb562e0607a65aa30fbbe030a044cd75) ) + ROM_LOAD16_BYTE( "bbak_b01.s13", 0x000001, 0x80000, CRC(097e0604) SHA1(6ae241b37b6bb15fc66679cf66f500b8f8a19f44) ) + ROM_LOAD16_BYTE( "bbak_b23.s02", 0x100000, 0x80000, CRC(3836531a) SHA1(57bead820ac396ee0ed8fb2ac5c15929896d75bf) ) + ROM_LOAD16_BYTE( "bbak_b23.s13", 0x100001, 0x80000, CRC(1210485a) SHA1(9edc4c96f389e231066ef164a7b2851cd7ade038) ) + + ROM_REGION( 0xa00000, "sprites1", 0 ) + ROM_LOAD40_BYTE( "ob1_c0.b0", 0x000004, 0x80000, CRC(053fecca) SHA1(319efc71042238d9012d2c3dddab9d11205decc6) ) + ROM_LOAD40_BYTE( "ob1_c1.b0", 0x000003, 0x80000, CRC(e183e6bc) SHA1(d9cce277861967f403a882879e1baefa84696bdc) ) + ROM_LOAD40_BYTE( "ob1_c2.b0", 0x000002, 0x80000, CRC(1314f828) SHA1(6a91543d4e70af30de287ba775c69ffb1cde719d) ) + ROM_LOAD40_BYTE( "ob1_c3.b0", 0x000001, 0x80000, CRC(c63866df) SHA1(a897835d8a33002f1bd54f27d1a6393c4e1864b9) ) + ROM_LOAD40_BYTE( "ob1_c4.b0", 0x000000, 0x80000, CRC(f71cdd1b) SHA1(6fbccdbe460c8ddfeed972ebe766a6f8a2d4c466) ) + + ROM_LOAD40_BYTE( "ob1_c0.b1", 0x280004, 0x80000, CRC(385434b0) SHA1(ea764bd9844e13f5b10207022135dbe07bf0258a) ) + ROM_LOAD40_BYTE( "ob1_c1.b1", 0x280003, 0x80000, CRC(0a3ec489) SHA1(1a2e1252d6acda43019ded5a31ae60bef40e4bd9) ) + ROM_LOAD40_BYTE( "ob1_c2.b1", 0x280002, 0x80000, CRC(52f06081) SHA1(c630f45b110b9423dfb0bf92359fdb28b75c8cf1) ) + ROM_LOAD40_BYTE( "ob1_c3.b1", 0x280001, 0x80000, CRC(a8a5cfbe) SHA1(7afc8f7c7f3826a276e4840e4fc8b8bb645dd3bd) ) + ROM_LOAD40_BYTE( "ob1_c4.b1", 0x280000, 0x80000, CRC(09d0acd6) SHA1(1b162f5b76852e49ae6a24db2031d66ca59d87e9) ) + + ROM_LOAD40_BYTE( "ob1_c0.b2", 0x500004, 0x80000, CRC(946e9f59) SHA1(46a0d35641b381fe553caa00451c30f1950b5dfd) ) + ROM_LOAD40_BYTE( "ob1_c1.b2", 0x500003, 0x80000, CRC(9f66ad54) SHA1(6e6ac6edee2f2dda46e7cd85db8d79c8335c73cd) ) + ROM_LOAD40_BYTE( "ob1_c2.b2", 0x500002, 0x80000, CRC(a8df60eb) SHA1(c971e66eec6accccaf2bdd87dde7adde79322da9) ) + ROM_LOAD40_BYTE( "ob1_c3.b2", 0x500001, 0x80000, CRC(a1a753be) SHA1(1666a32bb69db36dba029a835592d00a21ad8c5e) ) + ROM_LOAD40_BYTE( "ob1_c4.b2", 0x500000, 0x80000, CRC(b65b3c4b) SHA1(f636a682b506e3ce5ca07ba8fd3166158d1ab667) ) + + ROM_LOAD40_BYTE( "ob1_c0.b3", 0x780004, 0x80000, CRC(cbbbc696) SHA1(6f2383655461ac35f3178e0f7c0146cff89c8295) ) + ROM_LOAD40_BYTE( "ob1_c1.b3", 0x780003, 0x80000, CRC(f7b1bdee) SHA1(1d505d8d4ede55246de0b5fbc6ca20f836699b60) ) + ROM_LOAD40_BYTE( "ob1_c2.b3", 0x780002, 0x80000, CRC(97815619) SHA1(b1b694310064971aa5438671d0f9992b7e4bf277) ) + ROM_LOAD40_BYTE( "ob1_c3.b3", 0x780001, 0x80000, CRC(fc3ccb7a) SHA1(4436fcbd830912589bd6c838eb63b7d41a2bb56e) ) + ROM_LOAD40_BYTE( "ob1_c4.b3", 0x780000, 0x80000, CRC(dfdfd0ff) SHA1(79dc686351d41d635359936efe97c7ade305dc84) ) + + ROM_REGION( 0x800000, "sprites2", 0 ) + ROM_LOAD16_BYTE( "ob2_c0.b0", 0x000000, 0x80000, CRC(9080ebe4) SHA1(1cfabe045532e16f203fe054449149451a280f56) ) + ROM_LOAD16_BYTE( "ob2_c1.b0", 0x000001, 0x80000, CRC(c0464970) SHA1(2bd87c9a7ed0742a8f1ee0c0de225e18a0351168) ) + ROM_LOAD16_BYTE( "ob2_c2.b0", 0x400000, 0x80000, CRC(35a2e621) SHA1(ff7687e30c379cbcee4f80c0c737cef891509881) ) + ROM_LOAD16_BYTE( "ob2_c3.b0", 0x400001, 0x80000, CRC(99c7cc2d) SHA1(c761e5b7f1e2afdafef36390f7141ebcb5e8f254) ) + ROM_LOAD16_BYTE( "ob2_c0.b1", 0x100000, 0x80000, CRC(2c2c15c9) SHA1(fdc48fab6dad97d16d4e77479fa77bb320eb3767) ) + ROM_LOAD16_BYTE( "ob2_c1.b1", 0x100001, 0x80000, CRC(d2c49a14) SHA1(49d92233d6d5f77fbbf9d31607c568efef6d94f0) ) + ROM_LOAD16_BYTE( "ob2_c2.b1", 0x500000, 0x80000, CRC(fbe957e8) SHA1(4f0bb0e434771316bcd8796878ffd3e5cafebb2b) ) + ROM_LOAD16_BYTE( "ob2_c3.b1", 0x500001, 0x80000, CRC(d7238829) SHA1(6fef08a518be69251852d3204413b4b8b6615be2) ) + ROM_LOAD16_BYTE( "ob2_c0.b2", 0x200000, 0x80000, CRC(aefa1b01) SHA1(bbd4b432b36d64f80065c56559ea9675acf3151e) ) + ROM_LOAD16_BYTE( "ob2_c1.b2", 0x200001, 0x80000, CRC(4af620ca) SHA1(f3753235b2e72f011c9b94f26a425b9a79577201) ) + ROM_LOAD16_BYTE( "ob2_c2.b2", 0x600000, 0x80000, CRC(8e58be07) SHA1(d8a8662e800da0892d70c628de0ca27ff983006c) ) + ROM_LOAD16_BYTE( "ob2_c3.b2", 0x600001, 0x80000, CRC(1b5188c5) SHA1(4792a36b889a2c2dfab9ec78d848d3d8bf10d20f) ) + ROM_LOAD16_BYTE( "ob2_c0.b3", 0x300000, 0x80000, CRC(a2a5dafd) SHA1(2baadcfe9ae8fa30ae4226caa10fe3d58f8af3e0) ) + ROM_LOAD16_BYTE( "ob2_c1.b3", 0x300001, 0x80000, CRC(6f0afd05) SHA1(6a4bf3466a77d14b3bc18377537f86108774badd) ) + ROM_LOAD16_BYTE( "ob2_c2.b3", 0x700000, 0x80000, CRC(90fe5f4f) SHA1(2149e9eae152556c632ebd4d0b2de49e40916a77) ) + ROM_LOAD16_BYTE( "ob2_c3.b3", 0x700001, 0x80000, CRC(e3517e6e) SHA1(68ac60570423d8f0d7cff3db1901c9c050d0be91) ) + + ROM_REGION(0x1000000, "decobsmt:bsmt", 0 ) + ROM_LOAD( "u17.snd", 0x000000, 0x80000, CRC(b945c18d) SHA1(6556bbb4a7057df3680132f24687fa944006c784) ) + ROM_LOAD( "u21.snd", 0x080000, 0x80000, CRC(10b2110c) SHA1(83e5938ed22da2874022e1dc8df76c72d95c448d) ) + ROM_LOAD( "u36.snd", 0x100000, 0x80000, CRC(3b73abe2) SHA1(195096e2302e84123b23b4ccd982fb3ab9afe42c) ) + ROM_LOAD( "u37.snd", 0x180000, 0x80000, CRC(986066b5) SHA1(9dd1a14de81733617cf51293674a8e26fc5cec68) ) + + ROM_REGION( 0x400, "eeprom", 0 ) + ROM_LOAD( "eeprom-tattass.bin", 0x0000, 0x0400, CRC(7140f40c) SHA1(4fb7897933046b6adaf00b4626d5fd23d0e8a666) ) +ROM_END + ROM_START( tattassa ) ROM_REGION(0x100000, "maincpu", 0 ) // ARM 32 bit code ROM_LOAD32_WORD( "rev232a.000", 0x000000, 0x80000, CRC(1a357112) SHA1(d7f78f90970fd56ca1452a4c138168568b06d868) ) @@ -3963,6 +4036,7 @@ GAME( 1994, nslashers, nslasher, nslasher, nslasher, nslasher_state, init_nsla GAME( 1994, nslasheru, nslasher, nslasheru, nslasher, nslasher_state, init_nslasher, ROT0, "Data East Corporation", "Night Slashers (US Rev 1.2, DE-0395-1 PCB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1994, tattass, 0, tattass, tattass, tattass_state, init_tattass, ROT0, "Data East Pinball", "Tattoo Assassins (US prototype, Mar 14 1995)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1994, tattasso, tattass, tattass, tattass, tattass_state, init_tattass, ROT0, "Data East Pinball", "Tattoo Assassins (US prototype, Mar 14 1995, older sound)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1994, tattassa, tattass, tattass, tattass, tattass_state, init_tattass, ROT0, "Data East Pinball", "Tattoo Assassins (Asia prototype, Mar 14 1995)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // Dragon Gun / Locked 'n Loaded have very different sprite hardware diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 79da762a128..2fc33f421dc 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17059,6 +17059,7 @@ nslashers nslasheru tattass tattassa +tattasso @source:dataeast/deco_ld.cpp begas From 249df925a80912706b3e9e5dd1bfc6847abc3cb3 Mon Sep 17 00:00:00 2001 From: angelosa Date: Thu, 24 Apr 2025 11:04:38 +0200 Subject: [PATCH 13/15] cbus/pc9801_26.cpp: hookup irq select, guesswork for DE-9 output pins --- src/devices/bus/cbus/pc9801_26.cpp | 65 +++++++++++++++++++++--------- src/devices/bus/cbus/pc9801_26.h | 2 + 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/devices/bus/cbus/pc9801_26.cpp b/src/devices/bus/cbus/pc9801_26.cpp index d767b0eeace..e86a276c619 100644 --- a/src/devices/bus/cbus/pc9801_26.cpp +++ b/src/devices/bus/cbus/pc9801_26.cpp @@ -32,6 +32,7 @@ pc9801_26_device::pc9801_26_device(const machine_config &mconfig, const char *ta , m_bus(*this, DEVICE_SELF_OWNER) , m_opn(*this, "opn") , m_joy(*this, "joy_p%u", 1U) + , m_irq_jp(*this, "JP6A1_JP6A3") { } @@ -39,15 +40,41 @@ void pc9801_26_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); YM2203(config, m_opn, 15.9744_MHz_XTAL / 4); // divider not verified - m_opn->irq_handler().set([this] (int state) { m_bus->int_w<5>(state); }); - m_opn->port_a_read_callback().set([this] () { - if(BIT(m_joy_sel, 7)) - return m_joy[BIT(m_joy_sel, 6)]->read(); - - return (u8)0xff; + m_opn->irq_handler().set([this] (int state) { + switch(m_int_level & 3) + { + case 0: m_bus->int_w<0>(state); break; + case 1: m_bus->int_w<4>(state); break; + case 2: m_bus->int_w<6>(state); break; + case 3: m_bus->int_w<5>(state); break; + } }); + /* + * xx-- ---- IRSTx interrupt status 0/1 + * --xx ---- TRIGx Trigger 1/2 + * ---- xxxx + */ + m_opn->port_a_read_callback().set([this] () { + u8 res = (BIT(m_joy_sel, 7)) ? m_joy[BIT(m_joy_sel, 6)]->read() : 0x3f; + res |= m_int_level << 6; + return (u8)res; + }); + /* + * x--- ---- OUTE Output Enable (DDR?) + * -x-- ---- INSL Input Select + * --21 2211 OUTxy x = port / y (2-1) = number (1-3) + */ m_opn->port_b_write_callback().set([this] (u8 data) { m_joy_sel = data; + // TODO: guesswork, verify + if (BIT(data, 7)) + return; + m_joy[0]->pin_6_w(BIT(~data, 0)); + m_joy[0]->pin_7_w(BIT(~data, 1)); + m_joy[1]->pin_6_w(BIT(~data, 2)); + m_joy[1]->pin_7_w(BIT(~data, 3)); + m_joy[0]->pin_8_w(BIT(~data, 4)); + m_joy[1]->pin_8_w(BIT(~data, 5)); }); // TODO: verify mixing on HW @@ -86,15 +113,14 @@ const tiny_rom_entry *pc9801_26_device::device_rom_region() const static INPUT_PORTS_START( pc9801_26 ) // On-board jumpers - // TODO: any way to actually read these from HW? - PORT_START("OPN_JP6A1_JP6A3") - PORT_CONFNAME( 0x03, 0x02, "PC-9801-26: Interrupt level") - PORT_CONFSETTING( 0x00, "IRQ 0" ) // 2-3, 2-3 - PORT_CONFSETTING( 0x01, "IRQ 4" ) // 2-3, 1-2 - PORT_CONFSETTING( 0x02, "IRQ 5" ) // 1-2, 1-2 - PORT_CONFSETTING( 0x03, "IRQ 6" ) // 1-2, 2-3 + PORT_START("JP6A1_JP6A3") + PORT_CONFNAME( 0x03, 0x03, "PC-9801-26: Interrupt level") + PORT_CONFSETTING( 0x00, "INT0 (IRQ3)" ) // 2-3, 2-3 + PORT_CONFSETTING( 0x02, "INT41 (IRQ10)" ) // 2-3, 1-2 + PORT_CONFSETTING( 0x03, "INT5 (IRQ12)" ) // 1-2, 1-2 + PORT_CONFSETTING( 0x01, "INT6 (IRQ13)" ) // 1-2, 2-3 - PORT_START("OPN_JP6A2") + PORT_START("JP6A2") PORT_CONFNAME( 0x07, 0x01, "PC-9801-26: Sound ROM address") PORT_CONFSETTING( 0x00, "0xc8000" ) // 1-10 PORT_CONFSETTING( 0x01, "0xcc000" ) // 2-9 @@ -102,7 +128,7 @@ static INPUT_PORTS_START( pc9801_26 ) PORT_CONFSETTING( 0x03, "0xd4000" ) // 4-7 PORT_CONFSETTING( 0x04, "Disable ROM") // 5-6 - PORT_START("OPN_JP6A4") + PORT_START("JP6A4") PORT_CONFNAME( 0x01, 0x01, "PC-9801-26: Port Base" ) PORT_CONFSETTING( 0x00, "0x088" ) // 1-4 PORT_CONFSETTING( 0x01, "0x188" ) // 2-3 @@ -115,7 +141,7 @@ ioport_constructor pc9801_26_device::device_input_ports() const u16 pc9801_26_device::read_io_base() { - return ((ioport("OPN_JP6A4")->read() & 1) << 8) + 0x0088; + return ((ioport("JP6A4")->read() & 1) << 8) + 0x0088; } void pc9801_26_device::device_start() @@ -129,7 +155,7 @@ void pc9801_26_device::device_start() void pc9801_26_device::device_reset() { // install the ROM to the physical program space - u8 rom_setting = ioport("OPN_JP6A2")->read() & 7; + u8 rom_setting = ioport("JP6A2")->read() & 7; static const u32 rom_addresses[8] = { 0xc8000, 0xcc000, 0xd0000, 0xd4000, 0, 0, 0, 0 }; u32 current_rom = rom_addresses[rom_setting & 7]; memory_region *rom_region = memregion(this->subtag("sound_bios").c_str()); @@ -167,9 +193,8 @@ void pc9801_26_device::device_reset() ); m_io_base = current_io; - // install IRQ line -// static const u8 irq_levels[4] = {0, 4, 5, 6}; -// m_irq_level = irq_levels[ioport("OPN_JP6A1_JP6A3")->read() & 3]; + // read INT line + m_int_level = m_irq_jp->read() & 3; } void pc9801_26_device::device_validity_check(validity_checker &valid) const diff --git a/src/devices/bus/cbus/pc9801_26.h b/src/devices/bus/cbus/pc9801_26.h index 2b6bc9e98e7..c3576e67286 100644 --- a/src/devices/bus/cbus/pc9801_26.h +++ b/src/devices/bus/cbus/pc9801_26.h @@ -46,10 +46,12 @@ private: required_device m_bus; required_device m_opn; required_device_array m_joy; + required_ioport m_irq_jp; u32 m_rom_base; u16 m_io_base; u8 m_joy_sel; + u8 m_int_level; }; From d991883a09cba93870f879a5f327982cff69c768 Mon Sep 17 00:00:00 2001 From: angelosa Date: Thu, 24 Apr 2025 11:40:19 +0200 Subject: [PATCH 14/15] nec/pc98_kbd.cpp: hookup 0x9c command for -119 --- src/mame/nec/pc98_kbd.cpp | 54 ++++++++++++++++++++++++++------------- src/mame/nec/pc98_kbd.h | 2 ++ 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/mame/nec/pc98_kbd.cpp b/src/mame/nec/pc98_kbd.cpp index 2c1a283eabf..5f10547a845 100644 --- a/src/mame/nec/pc98_kbd.cpp +++ b/src/mame/nec/pc98_kbd.cpp @@ -14,6 +14,8 @@ TODO: \- triggered in bokosuka when it starts losing a key break along the way. - key repeat: alternates break and make keys when typematic kicks in, 30ms per swap? \- Most keyboards don't have a method for disabling typematic, depends on RTY? +\- pc9821ap2: specifically wants F3 to be unmapped for calling setup mode with soft reset: + HELP key is recognized but code overrides with the F3 path, any way to avoid it? - Undumped i8048 MCU; - GRPH + SHIFT scancodes; - Subclass keyboard variants (cfr. PC-9801-115 Bungo); @@ -22,7 +24,7 @@ TODO: STOP is correct, verified with branmar2 - Problems with natural keyboard (most nonprinting keys don't work); - pc9801fs: doesn't capture HELP key even with -119, need to mash for entering setup mode (verify) -- slotify +- slotify; **************************************************************************************************/ @@ -382,6 +384,7 @@ void pc98_119_kbd_device::device_start() pc98_kbd_device::device_start(); save_item(NAME(m_cmd_state)); + save_item(NAME(m_key_delay)); save_pointer(NAME(m_repeat_state), 0x80); } @@ -390,6 +393,7 @@ void pc98_119_kbd_device::device_reset() pc98_kbd_device::device_reset(); m_cmd_state = 0; + m_key_delay = 500; std::fill(std::begin(m_repeat_state), std::end(m_repeat_state), 0); } @@ -406,7 +410,7 @@ void pc98_119_kbd_device::key_make(uint8_t row, uint8_t column) if (code == 0x3f) { m_repeat_state[code] = 0; - typematic_start(row, column, attotime::from_msec(500), attotime::from_msec(60)); + typematic_start(row, column, attotime::from_msec(m_key_delay), attotime::from_msec(60)); } } @@ -427,7 +431,7 @@ void pc98_119_kbd_device::received_byte(u8 byte) if (m_cmd_state) { - // ignore same byte, we expect specific signature in 0x9d already + // ignore same byte, we expect a 0 in bit 7 anyway if (m_cmd_state == byte) return; @@ -435,13 +439,29 @@ void pc98_119_kbd_device::received_byte(u8 byte) switch(m_cmd_state) { + // -xx- ---- key delay + // -11- ---- 1000 ms + // -10- ---- 500 ms + // -01- ---- 500 ms (default) + // -00- ---- 250 ms + // ---x xxxx repeat rate (slow 11111 -> 00001 fast) + // win95: sets 0x70 at startup by default, 0x51 at shutdown + case 0x9c: + { + static const u16 key_delay_ms[] = {250, 500, 500, 1000 }; + m_key_delay = key_delay_ms[(byte >> 5) & 3]; + // TODO: repeat rate + send_key(ACK); + break; + } + + // TODO: caps/kana/num lock handling + // 0110 ---- reads back LEDs + // 0111 ---- sets lock state + // ---- x--- Kana lock + // ---- -x-- CAPS lock + // ---- ---x Num lock case 0x9d: - // TODO: caps/kana/num lock handling - // 0110 ---- reads back LEDs - // 0111 ---- sets lock state - // ---- x--- Kana lock - // ---- -x-- CAPS lock - // ---- ---x Num lock send_key(ACK); break; } @@ -465,17 +485,15 @@ void pc98_119_kbd_device::received_byte(u8 byte) // 0x99 // returns 0xfa ACK -> 0xfb (not ready?) - // 0x9c key repeat (expects param byte) - // -xx- ---- key delay - // -11- ---- 1000 ms - // -10- ---- 500 ms - // -01- ---- 500 ms (default) - // -00- ---- 250 ms - // ---x xxxx repeat rate (slow 11111 -> 00001 fast) + case 0x9c: + LOGCOMMAND("\t$9c Key Repeat rate settings\n"); + m_cmd_state = byte; + send_key(ACK); + break; case 0x9d: // NOTE: different for PC-9801NS/T - LOGCOMMAND("\tKeyboard LED settings\n"); + LOGCOMMAND("\t$9d Keyboard LED settings\n"); m_cmd_state = byte; send_key(ACK); break; @@ -483,7 +501,7 @@ void pc98_119_kbd_device::received_byte(u8 byte) // 0x9e ?, assume it returns ACK case 0x9f: - LOGCOMMAND("\tKeyboard Type ID\n"); + LOGCOMMAND("\t$9f Keyboard Type ID\n"); send_key(ACK); send_key(0xa0); send_key(0x80); diff --git a/src/mame/nec/pc98_kbd.h b/src/mame/nec/pc98_kbd.h index c0884c4b2c6..f489fadbe5e 100644 --- a/src/mame/nec/pc98_kbd.h +++ b/src/mame/nec/pc98_kbd.h @@ -83,6 +83,8 @@ protected: private: bool m_repeat_state[0x80]; u8 m_cmd_state; + + u16 m_key_delay; }; From b6df288773a4c7b85c8fdc29a0ef0c3051b46246 Mon Sep 17 00:00:00 2001 From: angelosa Date: Thu, 24 Apr 2025 11:44:29 +0200 Subject: [PATCH 15/15] nec/pc9821.cpp: bump 7220 couple to use A revision * fix win95 overlaying startup text on desktop graphics --- src/devices/video/upd7220.h | 8 +++++++- src/mame/nec/pc9801.cpp | 20 +++++++++++++------- src/mame/nec/pc9801.h | 1 + src/mame/nec/pc9821.cpp | 6 ++++++ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/devices/video/upd7220.h b/src/devices/video/upd7220.h index 41d901bc07f..646d614bca0 100644 --- a/src/devices/video/upd7220.h +++ b/src/devices/video/upd7220.h @@ -69,7 +69,6 @@ public: set_screen(std::forward(screen_tag)); } - template void set_display_pixels(T &&... args) { m_display_cb.set(std::forward(args)...); } template void set_draw_text(T &&... args) { m_draw_text_cb.set(std::forward(args)...); } @@ -233,6 +232,13 @@ public: // construction/destruction upd7220a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template + upd7220a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, T &&screen_tag) + : upd7220a_device(mconfig, tag, owner, clock) + { + set_screen(std::forward(screen_tag)); + } + protected: virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; diff --git a/src/mame/nec/pc9801.cpp b/src/mame/nec/pc9801.cpp index 0d8df345495..cf0960c61e0 100644 --- a/src/mame/nec/pc9801.cpp +++ b/src/mame/nec/pc9801.cpp @@ -2231,6 +2231,18 @@ void pc9801_atapi_devices(device_slot_interface &device) device.option_add("pc98_cd", PC98_CD); } +void pc9801_state::config_video(machine_config &config) +{ + m_hgdc[0]->set_addrmap(0, &pc9801_state::upd7220_1_map); + m_hgdc[0]->set_draw_text(FUNC(pc9801_state::hgdc_draw_text)); + m_hgdc[0]->vsync_wr_callback().set(m_hgdc[1], FUNC(upd7220_device::ext_sync_w)); + m_hgdc[0]->vsync_wr_callback().append(FUNC(pc9801_state::vrtc_irq)); + + m_hgdc[1]->set_addrmap(0, &pc9801_state::upd7220_2_map); + m_hgdc[1]->set_display_pixels(FUNC(pc9801_state::hgdc_display_pixels)); +} + + void pc9801_state::config_keyboard(machine_config &config) { I8251(config, m_sio_kbd, 0); @@ -2432,14 +2444,8 @@ void pc9801_state::pc9801_common(machine_config &config) m_screen->set_screen_update(FUNC(pc9801_state::screen_update)); UPD7220(config, m_hgdc[0], 21.0526_MHz_XTAL / 8, "screen"); - m_hgdc[0]->set_addrmap(0, &pc9801_state::upd7220_1_map); - m_hgdc[0]->set_draw_text(FUNC(pc9801_state::hgdc_draw_text)); - m_hgdc[0]->vsync_wr_callback().set(m_hgdc[1], FUNC(upd7220_device::ext_sync_w)); - m_hgdc[0]->vsync_wr_callback().append(FUNC(pc9801_state::vrtc_irq)); - UPD7220(config, m_hgdc[1], 21.0526_MHz_XTAL / 8, "screen"); - m_hgdc[1]->set_addrmap(0, &pc9801_state::upd7220_2_map); - m_hgdc[1]->set_display_pixels(FUNC(pc9801_state::hgdc_display_pixels)); + config_video(config); SPEAKER(config, "mono").front_center(); diff --git a/src/mame/nec/pc9801.h b/src/mame/nec/pc9801.h index 8e0a45f72ca..b7785127f9d 100644 --- a/src/mame/nec/pc9801.h +++ b/src/mame/nec/pc9801.h @@ -199,6 +199,7 @@ protected: DECLARE_MACHINE_START(pc9801_common); DECLARE_MACHINE_RESET(pc9801_common); + void config_video(machine_config &config); void config_keyboard(machine_config &config); void pc9801_mouse(machine_config &config); void pc9801_cbus(machine_config &config); diff --git a/src/mame/nec/pc9821.cpp b/src/mame/nec/pc9821.cpp index 0fe6f3460f1..a5f0c22a9c6 100644 --- a/src/mame/nec/pc9821.cpp +++ b/src/mame/nec/pc9821.cpp @@ -803,6 +803,12 @@ void pc9821_state::pc9821(machine_config &config) PALETTE(config.replace(), m_palette, FUNC(pc9821_state::pc9801_palette), 16 + 16 + 256); + // win95 expects to be A revision, otherwise it will overlay startup text prompts over desktop GFX + // NOTE: possibly this bump happened around PC-9801BX series + UPD7220A(config.replace(), m_hgdc[0], 21.0526_MHz_XTAL / 8, "screen"); + UPD7220A(config.replace(), m_hgdc[1], 21.0526_MHz_XTAL / 8, "screen"); + config_video(config); + PC98_119_KBD(config.replace(), m_keyb, 0); m_keyb->rxd_callback().set("sio_kbd", FUNC(i8251_device::write_rxd));