diff options
Diffstat (limited to 'src')
37 files changed, 2095 insertions, 270 deletions
diff --git a/src/devices/bus/gba/gba_slot.cpp b/src/devices/bus/gba/gba_slot.cpp index 10c5d45a0a8..737ff5fa6ed 100644 --- a/src/devices/bus/gba/gba_slot.cpp +++ b/src/devices/bus/gba/gba_slot.cpp @@ -295,17 +295,17 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) // first detect nvram type based on strings inside the file for (int i = 0; i < len; i++) { - if (!memcmp(&ROM[i], "EEPROM_V", 8)) + if ((i<len-8) && !memcmp(&ROM[i], "EEPROM_V", 8)) chip |= GBA_CHIP_EEPROM; // should be either GBA_CHIP_EEPROM_4K or GBA_CHIP_EEPROM_64K, but it is not yet possible to automatically detect which one - else if ((!memcmp(&ROM[i], "SRAM_V", 6)) || (!memcmp(&ROM[i], "SRAM_F_V", 8))) // || (!memcmp(&data[i], "ADVANCEWARS", 11))) //advance wars 1 & 2 has SRAM, but no "SRAM_" string can be found inside the ROM space + else if (((i<len-6) && !memcmp(&ROM[i], "SRAM_V", 6)) || ((i<len-8) && !memcmp(&ROM[i], "SRAM_F_V", 8))) // || ((i<len-11) && !memcmp(&data[i], "ADVANCEWARS", 11))) //advance wars 1 & 2 has SRAM, but no "SRAM_" string can be found inside the ROM space chip |= GBA_CHIP_SRAM; - else if (!memcmp(&ROM[i], "FLASH1M_V", 9)) + else if ((i<len-9) && !memcmp(&ROM[i], "FLASH1M_V", 9)) chip |= GBA_CHIP_FLASH_1M; - else if (!memcmp(&ROM[i], "FLASH512_V", 10)) + else if ((i<len-10) && !memcmp(&ROM[i], "FLASH512_V", 10)) chip |= GBA_CHIP_FLASH_512; - else if (!memcmp(&ROM[i], "FLASH_V", 7)) + else if ((i<len-7) && !memcmp(&ROM[i], "FLASH_V", 7)) chip |= GBA_CHIP_FLASH; - else if (!memcmp(&ROM[i], "SIIRTC_V", 8)) + else if ((i<len-8) && !memcmp(&ROM[i], "SIIRTC_V", 8)) chip |= GBA_CHIP_RTC; } osd_printf_info("GBA: Detected (ROM) %s\n", gba_chip_string(chip).c_str()); diff --git a/src/devices/bus/isa/trident.cpp b/src/devices/bus/isa/trident.cpp index 4f47bdd7212..85b83d968cc 100644 --- a/src/devices/bus/isa/trident.cpp +++ b/src/devices/bus/isa/trident.cpp @@ -191,6 +191,7 @@ void trident_vga_device::device_reset() // Windows 3.1 TGUI9440AGi drivers do not set the pointer colour registers? tri.cursor_bg = 0x00000000; tri.cursor_fg = 0xffffffff; + tri.pixel_depth = 0x10; //disable 8bpp mode by default } UINT32 trident_vga_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -443,7 +444,6 @@ void trident_vga_device::trident_seq_reg_write(UINT8 index, UINT8 data) } else { - if(LOG) logerror("Trident SR%02X: %s mode write %02x\n",index,tri.new_mode ? "new" : "old",data); switch(index) { case 0x0b: @@ -490,6 +490,7 @@ void trident_vga_device::trident_seq_reg_write(UINT8 index, UINT8 data) if(!LOG) logerror("Trident: Sequencer index %02x read\n",index); } } + if(LOG) logerror("Trident SR%02X: %s mode write %02x\n",index,tri.new_mode ? "new" : "old",data); } UINT8 trident_vga_device::trident_crtc_reg_read(UINT8 index) @@ -605,7 +606,6 @@ void trident_vga_device::trident_crtc_reg_write(UINT8 index, UINT8 data) } else { - if(LOG) logerror("Trident CR%02X: write %02x\n",index,data); switch(index) { case 0x1e: // Module Testing Register @@ -704,6 +704,7 @@ void trident_vga_device::trident_crtc_reg_write(UINT8 index, UINT8 data) break; } } + if(LOG) logerror("Trident CR%02X: write %02x\n",index,data); } UINT8 trident_vga_device::trident_gc_reg_read(UINT8 index) @@ -764,6 +765,7 @@ void trident_vga_device::trident_gc_reg_write(UINT8 index, UINT8 data) break; } } + if(LOG) logerror("Trident GC%02X: write %02x\n",index,data); } READ8_MEMBER(trident_vga_device::port_03c0_r) diff --git a/src/devices/bus/svi3x8/expander/expander.cpp b/src/devices/bus/svi3x8/expander/expander.cpp new file mode 100644 index 00000000000..faddf3f24ac --- /dev/null +++ b/src/devices/bus/svi3x8/expander/expander.cpp @@ -0,0 +1,151 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Expansion Slot + + 50-pin slot + +***************************************************************************/ + +#include "expander.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type SVI_EXPANDER = &device_creator<svi_expander_device>; + + +//************************************************************************** +// SLOT DEVICE +//************************************************************************** + +//------------------------------------------------- +// svi_expander_device - constructor +//------------------------------------------------- + +svi_expander_device::svi_expander_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SVI_EXPANDER, "SVI 318/328 Expander Bus", tag, owner, clock, "svi_expander", __FILE__), + device_slot_interface(mconfig, *this), + m_module(nullptr), + m_int_handler(*this), + m_romdis_handler(*this), + m_ramdis_handler(*this), + m_ctrl1_handler(*this), + m_ctrl2_handler(*this) +{ +} + +//------------------------------------------------- +// svi_expander_device - destructor +//------------------------------------------------- + +svi_expander_device::~svi_expander_device() +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void svi_expander_device::device_start() +{ + // get inserted module + m_module = dynamic_cast<device_svi_expander_interface *>(get_card_device()); + + // resolve callbacks + m_int_handler.resolve_safe(); + m_romdis_handler.resolve_safe(); + m_ramdis_handler.resolve_safe(); + m_ctrl1_handler.resolve_safe(); + m_ctrl2_handler.resolve_safe(); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void svi_expander_device::device_reset() +{ +} + +//------------------------------------------------- +// host to module interface +//------------------------------------------------- + +READ8_MEMBER( svi_expander_device::mreq_r ) +{ + if (m_module) + return m_module->mreq_r(space, offset); + + return 0xff; +} + +WRITE8_MEMBER( svi_expander_device::mreq_w ) +{ + if (m_module) + m_module->mreq_w(space, offset, data); +} + +READ8_MEMBER( svi_expander_device::iorq_r ) +{ + if (m_module) + return m_module->iorq_r(space, offset); + + return 0xff; +} + +WRITE8_MEMBER( svi_expander_device::iorq_w ) +{ + if (m_module) + m_module->iorq_w(space, offset, data); +} + +WRITE_LINE_MEMBER( svi_expander_device::bk21_w ) +{ + if (m_module) + m_module->bk21_w(state); +} + +WRITE_LINE_MEMBER( svi_expander_device::bk22_w ) +{ + if (m_module) + m_module->bk22_w(state); +} + +WRITE_LINE_MEMBER( svi_expander_device::bk31_w ) +{ + if (m_module) + m_module->bk31_w(state); +} + +WRITE_LINE_MEMBER( svi_expander_device::bk32_w ) +{ + if (m_module) + m_module->bk32_w(state); +} + + +//************************************************************************** +// CARTRIDGE INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_svi_expander_interface - constructor +//------------------------------------------------- + +device_svi_expander_interface::device_svi_expander_interface(const machine_config &mconfig, device_t &device) : + device_slot_card_interface(mconfig, device) +{ + m_expander = dynamic_cast<svi_expander_device *>(device.owner()); +} + +//------------------------------------------------- +// ~device_expansion_interface - destructor +//------------------------------------------------- + +device_svi_expander_interface::~device_svi_expander_interface() +{ +} diff --git a/src/devices/bus/svi3x8/expander/expander.h b/src/devices/bus/svi3x8/expander/expander.h new file mode 100644 index 00000000000..a2bed1f609b --- /dev/null +++ b/src/devices/bus/svi3x8/expander/expander.h @@ -0,0 +1,162 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Expander Slot + + 50-pin slot + + 1 +5V 2 /CNTRL2 + 3 +12V 4 -12V + 5 /CNTRL1 6 /WAIT + 7 /RST 8 CPUCLK + 9 A15 10 A14 + 11 A13 12 A12 + 13 A11 14 A10 + 15 A9 16 A8 + 17 A7 18 A6 + 19 A5 20 A4 + 21 A3 22 A2 + 23 A1 24 A0 + 25 /RFSH 26 /EXCSR + 27 /M1 28 /EXCSW + 29 /WR 30 /MREQ + 31 /IORQ 32 /RD + 33 D0 34 D1 + 35 D2 36 D3 + 37 D4 38 D5 + 39 D6 40 D7 + 41 CSOUND 42 /INT + 43 /RAMDIS 44 /ROMDIS + 45 /BK32 46 /BK31 + 47 /BK22 48 /BK21 + 49 GND 50 GND + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_EXPANDER_H__ +#define __SVI3X8_EXPANDER_H__ + +#include "emu.h" + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_SVI_EXPANDER_BUS_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, SVI_EXPANDER, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(svi_expander_modules, NULL, false) \ + +#define MCFG_SVI_EXPANDER_INT_HANDLER(_devcb) \ + devcb = &svi_expander_device::set_int_handler(*device, DEVCB_##_devcb); + +#define MCFG_SVI_EXPANDER_ROMDIS_HANDLER(_devcb) \ + devcb = &svi_expander_device::set_romdis_handler(*device, DEVCB_##_devcb); + +#define MCFG_SVI_EXPANDER_RAMDIS_HANDLER(_devcb) \ + devcb = &svi_expander_device::set_ramdis_handler(*device, DEVCB_##_devcb); + +#define MCFG_SVI_EXPANDER_CTRL1_HANDLER(_devcb) \ + devcb = &svi_expander_device::set_ctrl1_handler(*device, DEVCB_##_devcb); + +#define MCFG_SVI_EXPANDER_CTRL2_HANDLER(_devcb) \ + devcb = &svi_expander_device::set_ctrl2_handler(*device, DEVCB_##_devcb); + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class device_svi_expander_interface; + +// ======================> svi_expander_device + +class svi_expander_device : public device_t, public device_slot_interface +{ +public: + // construction/destruction + svi_expander_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~svi_expander_device(); + + // callbacks + template<class _Object> static devcb_base &set_int_handler(device_t &device, _Object object) + { return downcast<svi_expander_device &>(device).m_int_handler.set_callback(object); } + + template<class _Object> static devcb_base &set_romdis_handler(device_t &device, _Object object) + { return downcast<svi_expander_device &>(device).m_romdis_handler.set_callback(object); } + + template<class _Object> static devcb_base &set_ramdis_handler(device_t &device, _Object object) + { return downcast<svi_expander_device &>(device).m_ramdis_handler.set_callback(object); } + + template<class _Object> static devcb_base &set_ctrl1_handler(device_t &device, _Object object) + { return downcast<svi_expander_device &>(device).m_ctrl1_handler.set_callback(object); } + + template<class _Object> static devcb_base &set_ctrl2_handler(device_t &device, _Object object) + { return downcast<svi_expander_device &>(device).m_ctrl2_handler.set_callback(object); } + + // called from cart device + DECLARE_WRITE_LINE_MEMBER( int_w ) { m_int_handler(state); } + DECLARE_WRITE_LINE_MEMBER( romdis_w ) { m_romdis_handler(state); } + DECLARE_WRITE_LINE_MEMBER( ramdis_w ) { m_ramdis_handler(state); } + DECLARE_WRITE_LINE_MEMBER( ctrl1_w ) { m_ctrl1_handler(state); } + DECLARE_WRITE_LINE_MEMBER( ctrl2_w ) { m_ctrl2_handler(state); } + + // called from host + DECLARE_READ8_MEMBER( mreq_r ); + DECLARE_WRITE8_MEMBER( mreq_w ); + DECLARE_READ8_MEMBER( iorq_r ); + DECLARE_WRITE8_MEMBER( iorq_w ); + + DECLARE_WRITE_LINE_MEMBER( bk21_w ); + DECLARE_WRITE_LINE_MEMBER( bk22_w ); + DECLARE_WRITE_LINE_MEMBER( bk31_w ); + DECLARE_WRITE_LINE_MEMBER( bk32_w ); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + +private: + device_svi_expander_interface *m_module; + + devcb_write_line m_int_handler; + devcb_write_line m_romdis_handler; + devcb_write_line m_ramdis_handler; + devcb_write_line m_ctrl1_handler; + devcb_write_line m_ctrl2_handler; +}; + +// ======================> device_svi_expander_interface + +class device_svi_expander_interface : public device_slot_card_interface +{ +public: + // construction/destruction + device_svi_expander_interface(const machine_config &mconfig, device_t &device); + virtual ~device_svi_expander_interface(); + + virtual DECLARE_READ8_MEMBER( mreq_r ) { return 0xff; }; + virtual DECLARE_WRITE8_MEMBER( mreq_w ){}; + virtual DECLARE_READ8_MEMBER( iorq_r ) { return 0xff; }; + virtual DECLARE_WRITE8_MEMBER( iorq_w ){}; + + virtual void bk21_w(int state) {}; + virtual void bk22_w(int state) {}; + virtual void bk31_w(int state) {}; + virtual void bk32_w(int state) {}; + +protected: + svi_expander_device *m_expander; +}; + +// device type definition +extern const device_type SVI_EXPANDER; + +// include here so drivers don't need to +#include "modules.h" + +#endif // __SVI3X8_EXPANDER_H__ diff --git a/src/devices/bus/svi3x8/expander/modules.cpp b/src/devices/bus/svi3x8/expander/modules.cpp new file mode 100644 index 00000000000..f613dcf4094 --- /dev/null +++ b/src/devices/bus/svi3x8/expander/modules.cpp @@ -0,0 +1,13 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Expander Bus Modules + +***************************************************************************/ + +#include "modules.h" + +SLOT_INTERFACE_START( svi_expander_modules ) + SLOT_INTERFACE("sv601", SV601) +SLOT_INTERFACE_END diff --git a/src/devices/bus/svi3x8/expander/modules.h b/src/devices/bus/svi3x8/expander/modules.h new file mode 100644 index 00000000000..953b7094935 --- /dev/null +++ b/src/devices/bus/svi3x8/expander/modules.h @@ -0,0 +1,19 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Expander Bus Modules + +***************************************************************************/ + +#pragma once + +#ifndef __SVI_EXPANDER_MODULES_H__ +#define __SVI_EXPANDER_MODULES_H__ + +#include "emu.h" +#include "sv601.h" + +SLOT_INTERFACE_EXTERN( svi_expander_modules ); + +#endif // __SVI_EXPANDER_MODULES_H__ diff --git a/src/devices/bus/svi3x8/expander/sv601.cpp b/src/devices/bus/svi3x8/expander/sv601.cpp new file mode 100644 index 00000000000..fadb45f9a26 --- /dev/null +++ b/src/devices/bus/svi3x8/expander/sv601.cpp @@ -0,0 +1,98 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-601 Super Expander for SVI-318/328 + +***************************************************************************/ + +#include "sv601.h" + + +//************************************************************************** +// CONSTANTS/MACROS +//************************************************************************** + +#define VERBOSE 0 + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type SV601 = &device_creator<sv601_device>; + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( sv601 ) + MCFG_SVI_SLOT_BUS_ADD + MCFG_SVI_SLOT_INT_HANDLER(WRITELINE(sv601_device, int_w)) + MCFG_SVI_SLOT_ROMDIS_HANDLER(WRITELINE(sv601_device, romdis_w)) + MCFG_SVI_SLOT_RAMDIS_HANDLER(WRITELINE(sv601_device, ramdis_w)) + MCFG_SVI_SLOT_ADD("0", NULL) + MCFG_SVI_SLOT_ADD("1", NULL) + MCFG_SVI_SLOT_ADD("2", NULL) + MCFG_SVI_SLOT_ADD("3", NULL) + MCFG_SVI_SLOT_ADD("4", NULL) + MCFG_SVI_SLOT_ADD("5", NULL) + MCFG_SVI_SLOT_ADD("6", NULL) +MACHINE_CONFIG_END + +machine_config_constructor sv601_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( sv601 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// sv601_device - constructor +//------------------------------------------------- + +sv601_device::sv601_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SV601, "SV-601 Super Expander", tag, owner, clock, "sv601", __FILE__), + device_svi_expander_interface(mconfig, *this), + m_slotbus(*this, "slotbus") +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sv601_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sv601_device::device_reset() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +WRITE_LINE_MEMBER( sv601_device::int_w ) { m_expander->int_w(state); } +WRITE_LINE_MEMBER( sv601_device::romdis_w ) { m_expander->romdis_w(state); } +WRITE_LINE_MEMBER( sv601_device::ramdis_w ) { m_expander->ramdis_w(state); } + +READ8_MEMBER( sv601_device::mreq_r ) { return m_slotbus->mreq_r(space, offset); } +WRITE8_MEMBER( sv601_device::mreq_w ) { m_slotbus->mreq_w(space, offset, data); } +READ8_MEMBER( sv601_device::iorq_r ) { return m_slotbus->iorq_r(space, offset); } +WRITE8_MEMBER( sv601_device::iorq_w ) { m_slotbus->iorq_w(space, offset, data); } + +void sv601_device::bk21_w(int state) { m_slotbus->bk21_w(state); } +void sv601_device::bk22_w(int state) { m_slotbus->bk22_w(state); } +void sv601_device::bk31_w(int state) { m_slotbus->bk31_w(state); } +void sv601_device::bk32_w(int state) { m_slotbus->bk32_w(state); } diff --git a/src/devices/bus/svi3x8/expander/sv601.h b/src/devices/bus/svi3x8/expander/sv601.h new file mode 100644 index 00000000000..bf1133cfedb --- /dev/null +++ b/src/devices/bus/svi3x8/expander/sv601.h @@ -0,0 +1,59 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-601 Super Expander for SVI-318/328 + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_EXPANDER_SV601_H__ +#define __SVI3X8_EXPANDER_SV601_H__ + +#include "emu.h" +#include "expander.h" +#include "bus/svi3x8/slot/slot.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> sv601_device + +class sv601_device : public device_t, public device_svi_expander_interface +{ +public: + // construction/destruction + sv601_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // from slots + WRITE_LINE_MEMBER( int_w ); + WRITE_LINE_MEMBER( romdis_w ); + WRITE_LINE_MEMBER( ramdis_w ); + + // from host + virtual DECLARE_READ8_MEMBER( mreq_r ) override; + virtual DECLARE_WRITE8_MEMBER( mreq_w ) override; + virtual DECLARE_READ8_MEMBER( iorq_r ) override; + virtual DECLARE_WRITE8_MEMBER( iorq_w ) override; + + virtual void bk21_w(int state) override; + virtual void bk22_w(int state) override; + virtual void bk31_w(int state) override; + virtual void bk32_w(int state) override; + +protected: + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_start() override; + virtual void device_reset() override; + +private: + required_device<svi_slot_bus_device> m_slotbus; +}; + +// device type definition +extern const device_type SV601; + +#endif // __SVI3X8_EXPANDER_SV601_H__ diff --git a/src/devices/bus/svi3x8/slot/cards.cpp b/src/devices/bus/svi3x8/slot/cards.cpp new file mode 100644 index 00000000000..8e60b1ae1d8 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/cards.cpp @@ -0,0 +1,16 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Slot Cards + +***************************************************************************/ + +#include "cards.h" + +SLOT_INTERFACE_START( svi_slot_cards ) + SLOT_INTERFACE("sv801", SV801) + SLOT_INTERFACE("sv803", SV803) + SLOT_INTERFACE("sv806", SV806) + SLOT_INTERFACE("sv807", SV807) +SLOT_INTERFACE_END diff --git a/src/devices/bus/svi3x8/slot/cards.h b/src/devices/bus/svi3x8/slot/cards.h new file mode 100644 index 00000000000..03492742e53 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/cards.h @@ -0,0 +1,22 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Slot Cards + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_SLOT_CARDS_H__ +#define __SVI3X8_SLOT_CARDS_H__ + +#include "emu.h" +#include "sv801.h" +#include "sv803.h" +#include "sv806.h" +#include "sv807.h" + +SLOT_INTERFACE_EXTERN( svi_slot_cards ); + +#endif // __SVI3X8_SLOT_CARDS_H__ diff --git a/src/devices/bus/svi3x8/slot/slot.cpp b/src/devices/bus/svi3x8/slot/slot.cpp new file mode 100644 index 00000000000..5ab951e18f1 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/slot.cpp @@ -0,0 +1,284 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Expansion Slot + +***************************************************************************/ + +#include "slot.h" + + +//************************************************************************** +// SLOT BUS DEVICE +//************************************************************************** + +const device_type SVI_SLOT_BUS = &device_creator<svi_slot_bus_device>; + +//------------------------------------------------- +// svi_slot_bus_device - constructor +//------------------------------------------------- + +svi_slot_bus_device::svi_slot_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SVI_SLOT_BUS, "SVI Slot Bus", tag, owner, clock, "svislotbus", __FILE__), + m_int_handler(*this), + m_romdis_handler(*this), + m_ramdis_handler(*this) +{ +} + +//------------------------------------------------- +// svi_slot_bus_device - destructor +//------------------------------------------------- + +svi_slot_bus_device::~svi_slot_bus_device() +{ + m_dev.detach_all(); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void svi_slot_bus_device::device_start() +{ + // resolve callbacks + m_int_handler.resolve_safe(); + m_romdis_handler.resolve_safe(); + m_ramdis_handler.resolve_safe(); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void svi_slot_bus_device::device_reset() +{ +} + +//------------------------------------------------- +// add_card - add new card to our bus +//------------------------------------------------- + +void svi_slot_bus_device::add_card(device_svi_slot_interface *card) +{ + card->set_bus_device(this); + m_dev.append(*card); +} + +//------------------------------------------------- +// mreq_r - memory read from slot +//------------------------------------------------- + +READ8_MEMBER( svi_slot_bus_device::mreq_r ) +{ + device_svi_slot_interface *entry = m_dev.first(); + UINT8 data = 0xff; + + romdis_w(1); + ramdis_w(1); + + while (entry) + { + data &= entry->mreq_r(space, offset); + entry = entry->next(); + } + + return data; +} + +//------------------------------------------------- +// mreq_w - memory write to slot +//------------------------------------------------- + +WRITE8_MEMBER( svi_slot_bus_device::mreq_w ) +{ + device_svi_slot_interface *entry = m_dev.first(); + + romdis_w(1); + ramdis_w(1); + + while (entry) + { + entry->mreq_w(space, offset, data); + entry = entry->next(); + } +} + +//------------------------------------------------- +// iorq_r - memory read from slot +//------------------------------------------------- + +READ8_MEMBER( svi_slot_bus_device::iorq_r ) +{ + device_svi_slot_interface *entry = m_dev.first(); + UINT8 data = 0xff; + + while (entry) + { + data &= entry->iorq_r(space, offset); + entry = entry->next(); + } + + return data; +} + +//------------------------------------------------- +// iorq_w - memory write to slot +//------------------------------------------------- + +WRITE8_MEMBER( svi_slot_bus_device::iorq_w ) +{ + device_svi_slot_interface *entry = m_dev.first(); + + while (entry) + { + entry->iorq_w(space, offset, data); + entry = entry->next(); + } +} + +//------------------------------------------------- +// bk21_w - signal from host to slots +//------------------------------------------------- + +WRITE_LINE_MEMBER( svi_slot_bus_device::bk21_w ) +{ + device_svi_slot_interface *entry = m_dev.first(); + + while (entry) + { + entry->bk21_w(state); + entry = entry->next(); + } +} + +//------------------------------------------------- +// bk22_w - signal from host to slots +//------------------------------------------------- + +WRITE_LINE_MEMBER( svi_slot_bus_device::bk22_w ) +{ + device_svi_slot_interface *entry = m_dev.first(); + + while (entry) + { + entry->bk22_w(state); + entry = entry->next(); + } +} + +//------------------------------------------------- +// bk31_w - signal from host to slots +//------------------------------------------------- + +WRITE_LINE_MEMBER( svi_slot_bus_device::bk31_w ) +{ + device_svi_slot_interface *entry = m_dev.first(); + + while (entry) + { + entry->bk31_w(state); + entry = entry->next(); + } +} + +//------------------------------------------------- +// bk32_w - signal from host to slots +//------------------------------------------------- + +WRITE_LINE_MEMBER( svi_slot_bus_device::bk32_w ) +{ + device_svi_slot_interface *entry = m_dev.first(); + + while (entry) + { + entry->bk32_w(state); + entry = entry->next(); + } +} + + +//************************************************************************** +// SVI SLOT DEVICE +//************************************************************************** + +const device_type SVI_SLOT = &device_creator<svi_slot_device>; + +//------------------------------------------------- +// svi_slot_device - constructor +//------------------------------------------------- + +svi_slot_device::svi_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SVI_SLOT, "SVI Slot", tag, owner, clock, "svislot", __FILE__), + device_slot_interface(mconfig, *this), + m_bus_tag(nullptr) +{ +} + +//------------------------------------------------- +// set_bus - set owner bus tag +//------------------------------------------------- + +void svi_slot_device::set_bus(device_t &device, device_t *owner, const char *bus_tag) +{ + svi_slot_device &card = dynamic_cast<svi_slot_device &>(device); + card.m_owner = owner; + card.m_bus_tag = bus_tag; +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void svi_slot_device::device_start() +{ + device_svi_slot_interface *dev = dynamic_cast<device_svi_slot_interface *>(get_card_device()); + + if (dev) + { + svi_slot_bus_device *bus = downcast<svi_slot_bus_device *>(m_owner->subdevice(m_bus_tag)); + bus->add_card(dev); + } +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void svi_slot_device::device_reset() +{ +} + + +//************************************************************************** +// CARD INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_svi_slot_interface - constructor +//------------------------------------------------- + +device_svi_slot_interface::device_svi_slot_interface(const machine_config &mconfig, device_t &device) : + device_slot_card_interface(mconfig, device), + m_next(nullptr), + m_bus(nullptr) +{ +} + +//------------------------------------------------- +// ~device_svi_slot_interface - destructor +//------------------------------------------------- + +device_svi_slot_interface::~device_svi_slot_interface() +{ +} + +//------------------------------------------------- +// set_bus_device - set bus we are attached to +//------------------------------------------------- + +void device_svi_slot_interface::set_bus_device(svi_slot_bus_device *bus) +{ + m_bus = bus; +} diff --git a/src/devices/bus/svi3x8/slot/slot.h b/src/devices/bus/svi3x8/slot/slot.h new file mode 100644 index 00000000000..6cea923f6f6 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/slot.h @@ -0,0 +1,178 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SVI 318/328 Expansion Slot + + 50-pin slot + + 1 +5V 2 +5V + 3 +12V 4 -12V + 5 GND 6 /WAIT + 7 /RST 8 CPUCLK + 9 A15 10 A14 + 11 A13 12 A12 + 13 A11 14 A10 + 15 A9 16 A8 + 17 A7 18 A6 + 19 A5 20 A4 + 21 A3 22 A2 + 23 A1 24 A0 + 25 /RFSH 26 GND + 27 /M1 28 GND + 29 /WR 30 /MREQ + 31 /IORQ 32 /RD + 33 D0 34 D1 + 35 D2 36 D3 + 37 D4 38 D5 + 39 D6 40 D7 + 41 CSOUND 42 /INT + 43 /RAMDIS 44 /ROMDIS + 45 /BK32 46 /BK31 + 47 /BK22 48 /BK21 + 49 GND 50 GND + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_SLOT_H__ +#define __SVI3X8_SLOT_H__ + +#include "emu.h" + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_SVI_SLOT_BUS_ADD \ + MCFG_DEVICE_ADD("slotbus", SVI_SLOT_BUS, 0) + +#define MCFG_SVI_SLOT_ADD(_tag, _def_slot) \ + MCFG_DEVICE_ADD(_tag, SVI_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(svi_slot_cards, _def_slot, false) \ + svi_slot_device::set_bus(*device, owner, "slotbus"); + +#define MCFG_SVI_SLOT_INT_HANDLER(_devcb) \ + devcb = &svi_slot_bus_device::set_int_handler(*device, DEVCB_##_devcb); + +#define MCFG_SVI_SLOT_ROMDIS_HANDLER(_devcb) \ + devcb = &svi_slot_bus_device::set_romdis_handler(*device, DEVCB_##_devcb); + +#define MCFG_SVI_SLOT_RAMDIS_HANDLER(_devcb) \ + devcb = &svi_slot_bus_device::set_ramdis_handler(*device, DEVCB_##_devcb); + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class device_svi_slot_interface; + +// ======================> svi_slot_bus_device + +class svi_slot_bus_device : public device_t +{ +public: + // construction/destruction + svi_slot_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~svi_slot_bus_device(); + + // callbacks + template<class _Object> static devcb_base &set_int_handler(device_t &device, _Object object) + { return downcast<svi_slot_bus_device &>(device).m_int_handler.set_callback(object); } + + template<class _Object> static devcb_base &set_romdis_handler(device_t &device, _Object object) + { return downcast<svi_slot_bus_device &>(device).m_romdis_handler.set_callback(object); } + + template<class _Object> static devcb_base &set_ramdis_handler(device_t &device, _Object object) + { return downcast<svi_slot_bus_device &>(device).m_ramdis_handler.set_callback(object); } + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + void add_card(device_svi_slot_interface *card); + + // from slot + DECLARE_WRITE_LINE_MEMBER( romdis_w ) { m_romdis_handler(state); }; + DECLARE_WRITE_LINE_MEMBER( ramdis_w ) { m_ramdis_handler(state); }; + + // from host + DECLARE_READ8_MEMBER( mreq_r ); + DECLARE_WRITE8_MEMBER( mreq_w ); + DECLARE_READ8_MEMBER( iorq_r ); + DECLARE_WRITE8_MEMBER( iorq_w ); + + DECLARE_WRITE_LINE_MEMBER( bk21_w ); + DECLARE_WRITE_LINE_MEMBER( bk22_w ); + DECLARE_WRITE_LINE_MEMBER( bk31_w ); + DECLARE_WRITE_LINE_MEMBER( bk32_w ); + +private: + simple_list<device_svi_slot_interface> m_dev; + + devcb_write_line m_int_handler; + devcb_write_line m_romdis_handler; + devcb_write_line m_ramdis_handler; +}; + +// device type definition +extern const device_type SVI_SLOT_BUS; + +// ======================> svi_slot_device + +class svi_slot_device : public device_t, public device_slot_interface +{ +public: + // construction/destruction + svi_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // inline configuration + static void set_bus(device_t &device, device_t *owner, const char *bus_tag); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // configuration + const char *m_bus_tag; +}; + +// device type definition +extern const device_type SVI_SLOT; + +// ======================> svi_slot_device + +class device_svi_slot_interface : public device_slot_card_interface +{ +public: + // construction/destruction + device_svi_slot_interface(const machine_config &mconfig, device_t &device); + virtual ~device_svi_slot_interface(); + + void set_bus_device(svi_slot_bus_device *bus); + + device_svi_slot_interface *next() const { return m_next; } + device_svi_slot_interface *m_next; + + virtual DECLARE_READ8_MEMBER( mreq_r ) { return 0xff; }; + virtual DECLARE_WRITE8_MEMBER( mreq_w ) {}; + virtual DECLARE_READ8_MEMBER( iorq_r ) { return 0xff; }; + virtual DECLARE_WRITE8_MEMBER( iorq_w ) {}; + + virtual DECLARE_WRITE_LINE_MEMBER( bk21_w ) {}; + virtual DECLARE_WRITE_LINE_MEMBER( bk22_w ) {}; + virtual DECLARE_WRITE_LINE_MEMBER( bk31_w ) {}; + virtual DECLARE_WRITE_LINE_MEMBER( bk32_w ) {}; + +protected: + svi_slot_bus_device *m_bus; +}; + +// include here so drivers don't need to +#include "cards.h" + +#endif // __SVI3X8_SLOT_H__ diff --git a/src/devices/bus/svi3x8/slot/sv801.cpp b/src/devices/bus/svi3x8/slot/sv801.cpp new file mode 100644 index 00000000000..544c68e2988 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv801.cpp @@ -0,0 +1,144 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-801 Disk Controller + +***************************************************************************/ + +#include "sv801.h" +#include "softlist.h" +#include "formats/svi_dsk.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type SV801 = &device_creator<sv801_device>; + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +FLOPPY_FORMATS_MEMBER( sv801_device::floppy_formats ) + FLOPPY_SVI_FORMAT +FLOPPY_FORMATS_END + +static SLOT_INTERFACE_START( svi_floppies ) + SLOT_INTERFACE("dd", FLOPPY_525_DD) +SLOT_INTERFACE_END + +static MACHINE_CONFIG_FRAGMENT( sv801 ) + MCFG_FD1793_ADD("fdc", XTAL_1MHz) + MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(sv801_device, intrq_w)) + MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(sv801_device, drq_w)) + + MCFG_FLOPPY_DRIVE_ADD("fdc:0", svi_floppies, "dd", sv801_device::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:1", svi_floppies, "dd", sv801_device::floppy_formats) + + MCFG_SOFTWARE_LIST_ADD("disk_list", "svi318_flop") +MACHINE_CONFIG_END + +machine_config_constructor sv801_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( sv801 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// sv801_device - constructor +//------------------------------------------------- + +sv801_device::sv801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SV801, "SV-801 Disk Controller", tag, owner, clock, "sv801", __FILE__), + device_svi_slot_interface(mconfig, *this), + m_fdc(*this, "fdc"), + m_floppy0(*this, "fdc:0"), + m_floppy1(*this, "fdc:1"), + m_floppy(nullptr), + m_irq(0), m_drq(0) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sv801_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sv801_device::device_reset() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +WRITE_LINE_MEMBER( sv801_device::intrq_w ) +{ + m_irq = state; +} + +WRITE_LINE_MEMBER( sv801_device::drq_w ) +{ + m_drq = state; +} + +WRITE8_MEMBER( sv801_device::motor_w ) +{ + m_floppy = nullptr; + + if (BIT(data, 0)) m_floppy = m_floppy0->get_device(); + if (BIT(data, 1)) m_floppy = m_floppy1->get_device(); + + m_fdc->set_floppy(m_floppy); + + if (m_floppy0->get_device()) + m_floppy0->get_device()->mon_w(!BIT(data, 2)); + if (m_floppy1->get_device()) + m_floppy1->get_device()->mon_w(!BIT(data, 3)); +} + +READ8_MEMBER( sv801_device::iorq_r ) +{ + switch (offset) + { + case 0x30: return m_fdc->status_r(space, 0); + case 0x31: return m_fdc->track_r(space, 0); + case 0x32: return m_fdc->sector_r(space, 0); + case 0x33: return m_fdc->data_r(space, 0); + case 0x34: return (m_drq << 6) | (m_irq << 7); + } + + return 0xff; +} + +WRITE8_MEMBER( sv801_device::iorq_w ) +{ + switch (offset) + { + case 0x30: m_fdc->cmd_w(space, 0, data); break; + case 0x31: m_fdc->track_w(space, 0, data); break; + case 0x32: m_fdc->sector_w(space, 0, data); break; + case 0x33: m_fdc->data_w(space, 0, data); break; + case 0x34: motor_w(space, 0, data); break; + case 0x38: + m_fdc->dden_w(BIT(data, 0)); + if (m_floppy) + m_floppy->ss_w(BIT(data, 1)); + break; + } +} diff --git a/src/devices/bus/svi3x8/slot/sv801.h b/src/devices/bus/svi3x8/slot/sv801.h new file mode 100644 index 00000000000..2f670f05ad1 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv801.h @@ -0,0 +1,61 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-801 Disk Controller + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_SLOT_SV801_H__ +#define __SVI3X8_SLOT_SV801_H__ + +#include "emu.h" +#include "slot.h" +#include "machine/wd_fdc.h" +#include "imagedev/floppy.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> sv801_device + +class sv801_device : public device_t, public device_svi_slot_interface +{ +public: + // construction/destruction + sv801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + DECLARE_FLOPPY_FORMATS(floppy_formats); + + virtual DECLARE_READ8_MEMBER( iorq_r ) override; + virtual DECLARE_WRITE8_MEMBER( iorq_w ) override; + + DECLARE_WRITE_LINE_MEMBER( intrq_w ); + DECLARE_WRITE_LINE_MEMBER( drq_w ); + +protected: + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_start() override; + virtual void device_reset() override; + +private: + DECLARE_WRITE8_MEMBER( motor_w ); + + required_device<fd1793_t> m_fdc; + required_device<floppy_connector> m_floppy0; + required_device<floppy_connector> m_floppy1; + + floppy_image_device *m_floppy; + + int m_irq; + int m_drq; +}; + +// device type definition +extern const device_type SV801; + +#endif // __SVI3X8_SLOT_SV801_H__ diff --git a/src/devices/bus/svi3x8/slot/sv803.cpp b/src/devices/bus/svi3x8/slot/sv803.cpp new file mode 100644 index 00000000000..7035efeaa7a --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv803.cpp @@ -0,0 +1,68 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-803 16k memory expansion for SVI-318 + +***************************************************************************/ + +#include "sv803.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type SV803 = &device_creator<sv803_device>; + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// sv803_device - constructor +//------------------------------------------------- + +sv803_device::sv803_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SV803, "SV-803 16k RAM Cartridge", tag, owner, clock, "sv803", __FILE__), + device_svi_slot_interface(mconfig, *this) +{ + m_ram = std::make_unique<UINT8[]>(0x4000); + memset(m_ram.get(), 0xff, 0x4000); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sv803_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sv803_device::device_reset() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +READ8_MEMBER( sv803_device::mreq_r ) +{ + if (offset >= 0x8000 && offset <= 0xbfff) + return m_ram[offset - 0x8000]; + + return 0xff; +} + +WRITE8_MEMBER( sv803_device::mreq_w ) +{ + if (offset >= 0x8000 && offset <= 0xbfff) + m_ram[offset - 0x8000] = data; +} diff --git a/src/devices/bus/svi3x8/slot/sv803.h b/src/devices/bus/svi3x8/slot/sv803.h new file mode 100644 index 00000000000..9dea0ea9180 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv803.h @@ -0,0 +1,44 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-803 16k memory expansion for SVI-318 + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_SLOT_SV803_H__ +#define __SVI3X8_SLOT_SV803_H__ + +#include "emu.h" +#include "slot.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> sv803_device + +class sv803_device : public device_t, public device_svi_slot_interface +{ +public: + // construction/destruction + sv803_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual DECLARE_READ8_MEMBER( mreq_r ) override; + virtual DECLARE_WRITE8_MEMBER( mreq_w ) override; + +protected: + virtual void device_start() override; + virtual void device_reset() override; + +private: + std::unique_ptr<UINT8[]> m_ram; +}; + +// device type definition +extern const device_type SV803; + +#endif // __SVI3X8_SLOT_SV803_H__ diff --git a/src/devices/bus/svi3x8/slot/sv806.cpp b/src/devices/bus/svi3x8/slot/sv806.cpp new file mode 100644 index 00000000000..3db7d8ee2a7 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv806.cpp @@ -0,0 +1,150 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-806 80 Column Cartridge for SVI-318/328 + +***************************************************************************/ + +#include "sv806.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type SV806 = &device_creator<sv806_device>; + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +ROM_START( sv806 ) + ROM_REGION(0x1000, "gfx", 0) + ROM_SYSTEM_BIOS(0, "en", "English Character Set") + ROMX_LOAD("sv806.ic27", 0x0000, 0x1000, CRC(850bc232) SHA1(ed45cb0e9bd18a9d7bd74f87e620f016a7ae840f), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(1, "se", "Swedish Character Set") + ROMX_LOAD("sv806se.ic27", 0x0000, 0x1000, CRC(daea8956) SHA1(3f16d5513ad35692488ae7d864f660e76c6e8ed3), ROM_BIOS(2)) +ROM_END + +const rom_entry *sv806_device::device_rom_region() const +{ + return ROM_NAME( sv806 ); +} + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( sv806 ) + MCFG_SCREEN_ADD_MONOCHROME("80col", RASTER, rgb_t::green) + MCFG_SCREEN_RAW_PARAMS((XTAL_12MHz / 6) * 8, 864, 0, 640, 317, 0, 192) + MCFG_SCREEN_UPDATE_DEVICE("crtc", hd6845_device, screen_update) + + MCFG_PALETTE_ADD_MONOCHROME("palette") + + MCFG_MC6845_ADD("crtc", HD6845, "80col", XTAL_12MHz / 6) + MCFG_MC6845_SHOW_BORDER_AREA(false) + MCFG_MC6845_CHAR_WIDTH(8) + MCFG_MC6845_UPDATE_ROW_CB(sv806_device, crtc_update_row) +MACHINE_CONFIG_END + +machine_config_constructor sv806_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( sv806 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// sv806_device - constructor +//------------------------------------------------- + +sv806_device::sv806_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SV806, "SV-806 80 Column Cartridge", tag, owner, clock, "sv806", __FILE__), + device_svi_slot_interface(mconfig, *this), + m_crtc(*this, "crtc"), + m_palette(*this, "palette"), + m_gfx(*this, "gfx"), + m_ram_enabled(0) +{ + m_ram = std::make_unique<UINT8[]>(0x800); + memset(m_ram.get(), 0xff, 0x800); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sv806_device::device_start() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +MC6845_UPDATE_ROW( sv806_device::crtc_update_row ) +{ + const pen_t *pen = m_palette->pens(); + + for (int i = 0; i < x_count; i++) + { + UINT8 data = m_gfx->u8((m_ram[(ma + i) & 0x7ff] << 4) | ra); + + if (i == cursor_x) + data = 0xff; + + bitmap.pix32(y, i * 8 + 0) = pen[BIT(data, 7)]; + bitmap.pix32(y, i * 8 + 1) = pen[BIT(data, 6)]; + bitmap.pix32(y, i * 8 + 2) = pen[BIT(data, 5)]; + bitmap.pix32(y, i * 8 + 3) = pen[BIT(data, 4)]; + bitmap.pix32(y, i * 8 + 4) = pen[BIT(data, 3)]; + bitmap.pix32(y, i * 8 + 5) = pen[BIT(data, 2)]; + bitmap.pix32(y, i * 8 + 6) = pen[BIT(data, 1)]; + bitmap.pix32(y, i * 8 + 7) = pen[BIT(data, 0)]; + } +} + +READ8_MEMBER( sv806_device::mreq_r ) +{ + if (offset >= 0xf000 && m_ram_enabled) + { + m_bus->ramdis_w(0); + return m_ram[offset & 0x7ff]; + } + + return 0xff; +} + +WRITE8_MEMBER( sv806_device::mreq_w ) +{ + if (offset >= 0xf000 && m_ram_enabled) + { + m_bus->ramdis_w(0); + m_ram[offset & 0x7ff] = data; + } +} + +READ8_MEMBER( sv806_device::iorq_r ) +{ + if (offset == 0x51) + return m_crtc->register_r(space, 0); + + return 0xff; +} + +WRITE8_MEMBER( sv806_device::iorq_w ) +{ + switch (offset) + { + case 0x50: m_crtc->address_w(space, 0, data); break; + case 0x51: m_crtc->register_w(space, 0, data); break; + case 0x58: m_ram_enabled = data; break; + } +} diff --git a/src/devices/bus/svi3x8/slot/sv806.h b/src/devices/bus/svi3x8/slot/sv806.h new file mode 100644 index 00000000000..4782faa4812 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv806.h @@ -0,0 +1,55 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-806 80 column card for SVI-318/328 + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_SLOT_SV806_H__ +#define __SVI3X8_SLOT_SV806_H__ + +#include "emu.h" +#include "slot.h" +#include "video/mc6845.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> sv806_device + +class sv806_device : public device_t, public device_svi_slot_interface +{ +public: + // construction/destruction + sv806_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual DECLARE_READ8_MEMBER( mreq_r ) override; + virtual DECLARE_WRITE8_MEMBER( mreq_w ) override; + virtual DECLARE_READ8_MEMBER( iorq_r ) override; + virtual DECLARE_WRITE8_MEMBER( iorq_w ) override; + + MC6845_UPDATE_ROW(crtc_update_row); + +protected: + virtual const rom_entry *device_rom_region() const override; + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_start() override; + +private: + required_device<hd6845_device> m_crtc; + required_device<palette_device> m_palette; + required_memory_region m_gfx; + + std::unique_ptr<UINT8[]> m_ram; + int m_ram_enabled; +}; + +// device type definition +extern const device_type SV806; + +#endif // __SVI3X8_SLOT_SV806_H__ diff --git a/src/devices/bus/svi3x8/slot/sv807.cpp b/src/devices/bus/svi3x8/slot/sv807.cpp new file mode 100644 index 00000000000..14cf5001674 --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv807.cpp @@ -0,0 +1,163 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-807 64k memory expansion for SVI-318/328 + + TODO: + - Switch S6 (but needs to be off for the SVI anyway) + +***************************************************************************/ + +#include "sv807.h" + + +//************************************************************************** +// CONSTANTS / MACROS +//************************************************************************** + +#define BK21_ACTIVE ((m_bk21 == 0) && (m_switch->read() & 0x01)) +#define BK22_ACTIVE ((m_bk22 == 0) && (m_switch->read() & 0x02)) +#define BK31_ACTIVE ((m_bk31 == 0) && (m_switch->read() & 0x04)) +#define BK32_ACTIVE ((m_bk32 == 0) && (m_switch->read() & 0x08)) +#define BK02_ACTIVE (m_switch->read() & 0x10) + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type SV807 = &device_creator<sv807_device>; + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +static INPUT_PORTS_START( sv807_switches ) + PORT_START("S") + PORT_DIPNAME(0x01, 0x00, "Bank/Page 21") + PORT_DIPLOCATION("S:1") + PORT_DIPSETTING(0x00, "Off") + PORT_DIPSETTING(0x01, "On") + PORT_DIPNAME(0x02, 0x02, "Bank/Page 22") + PORT_DIPLOCATION("S:2") + PORT_DIPSETTING(0x00, "Off") + PORT_DIPSETTING(0x02, "On") + PORT_DIPNAME(0x04, 0x04, "Bank/Page 31") + PORT_DIPLOCATION("S:3") + PORT_DIPSETTING(0x00, "Off") + PORT_DIPSETTING(0x04, "On") + PORT_DIPNAME(0x08, 0x00, "Bank/Page 32") + PORT_DIPLOCATION("S:4") + PORT_DIPSETTING(0x00, "Off") + PORT_DIPSETTING(0x08, "On") + PORT_DIPNAME(0x10, 0x00, "Bank/Page 02") + PORT_DIPLOCATION("S:5") + PORT_DIPSETTING(0x00, "Off") + PORT_DIPSETTING(0x10, "On") + PORT_DIPNAME(0x20, 0x00, "48k/32k") + PORT_DIPLOCATION("S:6") + PORT_DIPSETTING(0x00, "Off") + PORT_DIPSETTING(0x20, "On") +INPUT_PORTS_END + +ioport_constructor sv807_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( sv807_switches ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// sv807_device - constructor +//------------------------------------------------- + +sv807_device::sv807_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, SV803, "SV-807 64k RAM Cartridge", tag, owner, clock, "sv807", __FILE__), + device_svi_slot_interface(mconfig, *this), + m_switch(*this, "S"), + m_bk21(1), m_bk22(1), m_bk31(1), m_bk32(1) +{ + m_ram_bank1 = std::make_unique<UINT8[]>(0x8000); + m_ram_bank2 = std::make_unique<UINT8[]>(0x8000); + memset(m_ram_bank1.get(), 0xff, 0x8000); + memset(m_ram_bank2.get(), 0xff, 0x8000); +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sv807_device::device_start() +{ +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sv807_device::device_reset() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +// test setup: S2 = enabled (22), S3 = enabled (31) + +READ8_MEMBER( sv807_device::mreq_r ) +{ + if ((BK21_ACTIVE || BK31_ACTIVE) && offset < 0x8000) + { + m_bus->romdis_w(0); + return m_ram_bank1[offset]; + } + + if ((BK22_ACTIVE || BK32_ACTIVE || BK02_ACTIVE) && offset >= 0x8000) + { + m_bus->ramdis_w(0); + return m_ram_bank2[offset - 0x8000]; + } + + return 0xff; +} + +WRITE8_MEMBER( sv807_device::mreq_w ) +{ + if ((BK21_ACTIVE || BK31_ACTIVE) && offset < 0x8000) + { + m_bus->romdis_w(0); + m_ram_bank1[offset] = data; + } + + if ((BK22_ACTIVE || BK32_ACTIVE || BK02_ACTIVE) && offset >= 0x8000) + { + m_bus->ramdis_w(0); + m_ram_bank2[offset - 0x8000] = data; + } +} + +void sv807_device::bk21_w(int state) +{ + m_bk21 = state; +} + +void sv807_device::bk22_w(int state) +{ + m_bk22 = state; +} + +void sv807_device::bk31_w(int state) +{ + m_bk31 = state; +} + +void sv807_device::bk32_w(int state) +{ + m_bk32 = state; +} diff --git a/src/devices/bus/svi3x8/slot/sv807.h b/src/devices/bus/svi3x8/slot/sv807.h new file mode 100644 index 00000000000..deebb9bf79e --- /dev/null +++ b/src/devices/bus/svi3x8/slot/sv807.h @@ -0,0 +1,60 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + SV-807 64k memory expansion for SVI-318/328 + +***************************************************************************/ + +#pragma once + +#ifndef __SVI3X8_SLOT_SV807_H__ +#define __SVI3X8_SLOT_SV807_H__ + +#include "emu.h" +#include "slot.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> sv807_device + +class sv807_device : public device_t, public device_svi_slot_interface +{ +public: + // construction/destruction + sv807_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual ioport_constructor device_input_ports() const override; + + virtual DECLARE_READ8_MEMBER( mreq_r ) override; + virtual DECLARE_WRITE8_MEMBER( mreq_w ) override; + + virtual void bk21_w(int state) override; + virtual void bk22_w(int state) override; + virtual void bk31_w(int state) override; + virtual void bk32_w(int state) override; + +protected: + virtual void device_start() override; + virtual void device_reset() override; + +private: + required_ioport m_switch; + + std::unique_ptr<UINT8[]> m_ram_bank1; + std::unique_ptr<UINT8[]> m_ram_bank2; + + int m_bk21; + int m_bk22; + int m_bk31; + int m_bk32; +}; + +// device type definition +extern const device_type SV807; + +#endif // __SVI3X8_SLOT_SV807_H__ diff --git a/src/devices/machine/atapicdr.cpp b/src/devices/machine/atapicdr.cpp index 151d8d1bb10..13fd79570dd 100644 --- a/src/devices/machine/atapicdr.cpp +++ b/src/devices/machine/atapicdr.cpp @@ -72,11 +72,15 @@ void atapi_cdrom_device::device_start() m_identify_buffer[ 49 ] = 0x0600; // Word 49=Capabilities, IORDY may be disabled (bit_10), LBA Supported mandatory (bit_9) - m_media_change = true; - atapi_hle_device::device_start(); } +void atapi_cdrom_device::device_reset() +{ + atapi_hle_device::device_reset(); + m_media_change = true; +} + void atapi_cdrom_device::process_buffer() { if(m_cdrom != m_image->get_cdrom_file()) @@ -130,10 +134,10 @@ void atapi_cdrom_device::ExecCommand() } break; case T10SPC_CMD_INQUIRY: + break; case T10SPC_CMD_REQUEST_SENSE: + m_media_change = false; break; } t10mmc::ExecCommand(); - if((command[0] == T10SPC_CMD_REQUEST_SENSE) && m_media_change) - m_media_change = false; } diff --git a/src/devices/machine/atapicdr.h b/src/devices/machine/atapicdr.h index 2c310113c5c..dc5220c000d 100644 --- a/src/devices/machine/atapicdr.h +++ b/src/devices/machine/atapicdr.h @@ -28,6 +28,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; virtual machine_config_constructor device_mconfig_additions() const override; virtual void perform_diagnostic() override; diff --git a/src/emu/attotime.h b/src/emu/attotime.h index 0cdaa424ca0..a0915ae07f2 100644 --- a/src/emu/attotime.h +++ b/src/emu/attotime.h @@ -117,17 +117,6 @@ public: UINT64 as_ticks(UINT32 frequency) const; const char *as_string(int precision = 9) const; - // Needed by gba.c FIXME: this shouldn't be necessary? - - void normalize() - { - while (m_attoseconds >= ATTOSECONDS_PER_SECOND) - { - m_seconds++; - m_attoseconds -= ATTOSECONDS_PER_SECOND; - } - } - attoseconds_t attoseconds() const { return m_attoseconds; } seconds_t seconds() const { return m_seconds; } diff --git a/src/emu/debug/dvdisasm.cpp b/src/emu/debug/dvdisasm.cpp index 6daca107f86..10cb3e75e64 100644 --- a/src/emu/debug/dvdisasm.cpp +++ b/src/emu/debug/dvdisasm.cpp @@ -370,6 +370,7 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines) // allocate disassembly buffer const auto total_bytes = m_total.x * m_total.y; + m_dasm.clear(); m_dasm.reserve(total_bytes).seekp(total_bytes); // iterate over lines @@ -387,6 +388,7 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines) // convert back and set the address of this instruction m_byteaddress[instr] = pcbyte; + m_dasm.clear(); util::stream_format(m_dasm.seekp(base), source.m_space.is_octal() ? " %0*o " : " %0*X ", source.m_space.logaddrchars()/2*char_num, source.m_space.byte_to_address(pcbyte)); diff --git a/src/lib/util/corefile.cpp b/src/lib/util/corefile.cpp index ec1e25340e3..5c16d886fe3 100644 --- a/src/lib/util/corefile.cpp +++ b/src/lib/util/corefile.cpp @@ -611,6 +611,7 @@ int core_text_file::puts(char const *s) int core_text_file::vprintf(util::format_argument_pack<std::ostream> const &args) { + m_printf_buffer.clear(); m_printf_buffer.reserve(1024); m_printf_buffer.seekp(0, ovectorstream::beg); util::stream_format<std::ostream, std::ostream>(m_printf_buffer, args); diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp index abaea79d40d..f2c05930332 100644 --- a/src/mame/drivers/gba.cpp +++ b/src/mame/drivers/gba.cpp @@ -35,8 +35,6 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co } } -#define GBA_ATTOTIME_NORMALIZE(a) a.normalize() - static const UINT32 timer_clks[4] = { 16777216, 16777216/64, 16777216/256, 16777216/1024 }; @@ -343,7 +341,6 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) final = clocksel / rate; m_timer_hz[tmr] = final; time = attotime::from_hz(final); - GBA_ATTOTIME_NORMALIZE(time); m_tmr_timer[tmr]->adjust(time, tmr, time); } @@ -1639,7 +1636,6 @@ WRITE32_MEMBER(gba_state::gba_io_w) if( !(data & 0x40000) ) // if we're not in Count-Up mode { attotime time = attotime::from_hz(final); - GBA_ATTOTIME_NORMALIZE(time); m_tmr_timer[offset]->adjust(time, offset, time); } } diff --git a/src/mame/drivers/igs017.cpp b/src/mame/drivers/igs017.cpp index 1d1d439b3fc..8ab7a8711c2 100644 --- a/src/mame/drivers/igs017.cpp +++ b/src/mame/drivers/igs017.cpp @@ -4245,4 +4245,7 @@ GAME( 1998, slqz2, 0, slqz2, slqz2, igs017_state, slqz2, ROT GAME( 1999?, tarzan, 0, iqblocka, iqblocka, igs017_state, tarzan, ROT0, "IGS", "Tarzan (V109C)", MACHINE_NOT_WORKING ) GAME( 1999?, tarzana, tarzan, iqblocka, iqblocka, igs017_state, tarzana, ROT0, "IGS", "Tarzan (V107)", MACHINE_NOT_WORKING ) GAME( 2000?, starzan, 0, starzan, iqblocka, igs017_state, starzan, ROT0, "IGS / G.F. Gioca", "Super Tarzan (Italy, V100I)", MACHINE_NOT_WORKING ) -GAME( ????, spkrform, spk116it, spkrform, spkrform, igs017_state, spkrform, ROT0, "IGS", "Super Poker (v100xD03) / Formosa", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) + +/* Parent spk306us in driver spoker.cpp. Move this set to that driver? */ +GAME( ????, spkrform, spk306us, spkrform, spkrform, igs017_state, spkrform, ROT0, "IGS", "Super Poker (v100xD03) / Formosa", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) + diff --git a/src/mame/drivers/neogeo_noslot.cpp b/src/mame/drivers/neogeo_noslot.cpp index f3f79953c03..8fc68f9edcf 100644 --- a/src/mame/drivers/neogeo_noslot.cpp +++ b/src/mame/drivers/neogeo_noslot.cpp @@ -683,6 +683,8 @@ ROM_END . NGH-007 NEO-AEG PROG42G / NEO-AEG CHA42G NEO-AEG PROG42G / NEO-AEG CHA-8M + . prototype + NEO-AEG PROG-EP / NEO-AEG CHA-EP ****************************************/ ROM_START( alpham2 ) /* MVS AND AES VERSION */ @@ -707,33 +709,33 @@ ROM_START( alpham2 ) /* MVS AND AES VERSION */ ROM_LOAD16_BYTE( "007-c4.c4", 0x200001, 0x080000, CRC(7d588349) SHA1(a5ed789d7bbc25be5c5b2d99883b64d379c103a2) ) /* Plane 2,3 */ /* TC534200 */ ROM_END -ROM_START( alpham2p ) /* early prototype - all roms were hand labeled with CRCs, dumps verified against them */ +ROM_START( alpham2p ) /* early prototype - all roms were hand labeled with CRCs, dumps verified against them */ /* AES VERSION*/ ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "proto_007-p1.p1", 0x000001, 0x080000, CRC(c763e52a) SHA1(b24acbac255c5ee1a2e92e77cdde6620a24081cf) ) - ROM_LOAD16_BYTE( "proto_007-p2.p2", 0x000000, 0x080000, CRC(7a0b435c) SHA1(40e6f42a92001d9f4e51898dd7489da143b6b74b) ) + ROM_LOAD16_BYTE( "007_p1_faac.p1", 0x000001, 0x080000, CRC(c763e52a) SHA1(b24acbac255c5ee1a2e92e77cdde6620a24081cf) ) + ROM_LOAD16_BYTE( "007_p2_1813.p2", 0x000000, 0x080000, CRC(7a0b435c) SHA1(40e6f42a92001d9f4e51898dd7489da143b6b74b) ) - NEO_SFIX_128K( "proto_007-s1.s1", CRC(efc9ae2e) SHA1(a594826b0082fe5a13191673e8d9aa42517230f5) ) + NEO_SFIX_128K( "007_s1_36f1.s1", CRC(efc9ae2e) SHA1(a594826b0082fe5a13191673e8d9aa42517230f5) ) - NEO_BIOS_AUDIO_128K( "proto_007-m1.m1", CRC(5976b464) SHA1(ec824567ecc3579f6d86c9d9385710cbaeef16a3) ) + NEO_BIOS_AUDIO_128K( "007_m1_9384.m1", CRC(5976b464) SHA1(ec824567ecc3579f6d86c9d9385710cbaeef16a3) ) ROM_REGION( 0x200000, "ymsnd", 0 ) - ROM_LOAD( "proto_007-v11.v11", 0x000000, 0x080000, CRC(18eaa9e1) SHA1(85c94d8660f8a32e4ca8e015f0bd704208482d68) ) - ROM_LOAD( "proto_007-v12.v12", 0x080000, 0x080000, CRC(2487d495) SHA1(49af3c4dc6a38c5158d3641fd8f9a40041b42aa6) ) - ROM_LOAD( "proto_007-v13.v13", 0x100000, 0x080000, CRC(25e60f25) SHA1(d06b0df872372de38fcf90187195070ac5f8c651) ) - ROM_LOAD( "proto_007-v21.v21", 0x180000, 0x080000, CRC(ac44b75a) SHA1(7399a05cd4e2c7ecde4a7323d3e189255afe5fc2) ) + ROM_LOAD( "007_v11_1bb4.v11", 0x000000, 0x080000, CRC(18eaa9e1) SHA1(85c94d8660f8a32e4ca8e015f0bd704208482d68) ) + ROM_LOAD( "007_v12_c8e8.v12", 0x080000, 0x080000, CRC(2487d495) SHA1(49af3c4dc6a38c5158d3641fd8f9a40041b42aa6) ) + ROM_LOAD( "007_v13_09fa.v13", 0x100000, 0x080000, CRC(25e60f25) SHA1(d06b0df872372de38fcf90187195070ac5f8c651) ) + ROM_LOAD( "007_v21_28c2.v21", 0x180000, 0x080000, CRC(ac44b75a) SHA1(7399a05cd4e2c7ecde4a7323d3e189255afe5fc2) ) ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) ROM_COPY( "ymsnd", 0x180000, 0x00000, 0x80000 ) ROM_REGION( 0x400000, "sprites", 0 ) // note, ROM_LOAD32_BYTE - ROM_LOAD32_BYTE( "proto_007-c1.c1", 0x000000, 0x80000, CRC(24841639) SHA1(fcc2a349121dad86ffefc44b9f0e8ba616ce0d30) ) /* Plane 0 */ - ROM_LOAD32_BYTE( "proto_007-c2.c2", 0x000002, 0x80000, CRC(912763ab) SHA1(cedf26d7d85ad140399ee62813c71f35e65498d6) ) /* Plane 2 */ - ROM_LOAD32_BYTE( "proto_007-c3.c3", 0x000001, 0x80000, CRC(0743bde2) SHA1(0d13ad6333909ad3cf10f9ac360f9abf191318de) ) /* Plane 1 */ - ROM_LOAD32_BYTE( "proto_007-c4.c4", 0x000003, 0x80000, CRC(61240212) SHA1(dee36f6604adaeb96e0d761a7256241c066b1cd2) ) /* Plane 3 */ - ROM_LOAD32_BYTE( "proto_007-c5.c5", 0x200000, 0x80000, CRC(cf9f4c53) SHA1(f979c85f83d9f76e554c2617f85f6d4efca6799c) ) /* Plane 0 */ - ROM_LOAD32_BYTE( "proto_007-c6.c6", 0x200002, 0x80000, CRC(3d903b19) SHA1(001a8c762336b855fe1df69fe2e605d30a3f00a1) ) /* Plane 2 */ - ROM_LOAD32_BYTE( "proto_007-c7.c7", 0x200001, 0x80000, CRC(e41e3875) SHA1(730aceb8a66cb33d0194b096568f053ad7dc000a) ) /* Plane 1 */ - ROM_LOAD32_BYTE( "proto_007-c8.c8", 0x200003, 0x80000, CRC(4483e2cf) SHA1(47c3364f5c36ae9dc3a49fe37ca60bcee0e73314) ) /* Plane 3 */ + ROM_LOAD32_BYTE( "007_c1_210e.c11", 0x000000, 0x80000, CRC(24841639) SHA1(fcc2a349121dad86ffefc44b9f0e8ba616ce0d30) ) /* Plane 0 */ + ROM_LOAD32_BYTE( "007_c2_29ae.c12", 0x000002, 0x80000, CRC(912763ab) SHA1(cedf26d7d85ad140399ee62813c71f35e65498d6) ) /* Plane 2 */ + ROM_LOAD32_BYTE( "007_c3_c873.c13", 0x000001, 0x80000, CRC(0743bde2) SHA1(0d13ad6333909ad3cf10f9ac360f9abf191318de) ) /* Plane 1 */ + ROM_LOAD32_BYTE( "007_c4_2462.c14", 0x000003, 0x80000, CRC(61240212) SHA1(dee36f6604adaeb96e0d761a7256241c066b1cd2) ) /* Plane 3 */ + ROM_LOAD32_BYTE( "007_c5_5f16.c15", 0x200000, 0x80000, CRC(cf9f4c53) SHA1(f979c85f83d9f76e554c2617f85f6d4efca6799c) ) /* Plane 0 */ + ROM_LOAD32_BYTE( "007_c6_8abc.c16", 0x200002, 0x80000, CRC(3d903b19) SHA1(001a8c762336b855fe1df69fe2e605d30a3f00a1) ) /* Plane 2 */ + ROM_LOAD32_BYTE( "007_c7_c983.c17", 0x200001, 0x80000, CRC(e41e3875) SHA1(730aceb8a66cb33d0194b096568f053ad7dc000a) ) /* Plane 1 */ + ROM_LOAD32_BYTE( "007_c8_b599.c18", 0x200003, 0x80000, CRC(4483e2cf) SHA1(47c3364f5c36ae9dc3a49fe37ca60bcee0e73314) ) /* Plane 3 */ ROM_END /**************************************** @@ -1023,6 +1025,8 @@ ROM_END NEO-MVS PROG42G / NEO-MVS CHA42G . NGH-018 NEO-AEG PROG42G / NEO-AEG CHA42G + . prototype + NEO-AEG PROG-EP / NEO-AEG CHA-EP ****************************************/ ROM_START( burningf ) /* MVS AND AES VERSION */ @@ -1067,32 +1071,32 @@ ROM_START( burningfh ) /* AES VERSION (US) */ ROM_LOAD16_BYTE( "018-c4.c4", 0x200001, 0x100000, CRC(e2e0aff7) SHA1(1c691c092a6e2787de4f433b0eb9252bfdaa7e16) ) /* Plane 2,3 */ /* HN62408 */ ROM_END -ROM_START( burningfp ) /* early prototype - all roms were hand labeled with CRCs, dumps verified against them */ +ROM_START( burningfp ) /* early prototype - all roms were hand labeled with CRCs, dumps verified against them */ /* AES VERSION */ ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "proto_018-p1.p1", 0x000001, 0x080000, CRC(5b4032e7) SHA1(55df91dad6f484d3d49c28ab5972700bf71a8662) ) - ROM_LOAD16_BYTE( "proto_018-p2.p2", 0x000000, 0x080000, CRC(78762f68) SHA1(12170fc6efe75cb5d32624033d3d341032c97548) ) + ROM_LOAD16_BYTE( "018_p1_9397.p1", 0x000001, 0x080000, CRC(5b4032e7) SHA1(55df91dad6f484d3d49c28ab5972700bf71a8662) ) + ROM_LOAD16_BYTE( "018_p2_e335.p2", 0x000000, 0x080000, CRC(78762f68) SHA1(12170fc6efe75cb5d32624033d3d341032c97548) ) - NEO_SFIX_128K( "proto_018-s1.s1", CRC(f3d130e8) SHA1(2fdeb93f4bb2a60d391cac2822be41661b1e1795) ) + NEO_SFIX_128K( "018_s1_9899.s1", CRC(f3d130e8) SHA1(2fdeb93f4bb2a60d391cac2822be41661b1e1795) ) - NEO_BIOS_AUDIO_128K( "proto_018-m1.m1", CRC(470dd5d4) SHA1(4291811b4aefe45261a1ae3631b6999fcd74fb3f) ) + NEO_BIOS_AUDIO_128K( "018_m1_4586.m1", CRC(470dd5d4) SHA1(4291811b4aefe45261a1ae3631b6999fcd74fb3f) ) ROM_REGION( 0x200000, "ymsnd", 0 ) - ROM_LOAD( "proto_018-v11.v11", 0x000000, 0x080000, CRC(dc07ea3c) SHA1(c3e71aaec44ead7ddc581565d16b90030e6db5fd) ) - ROM_LOAD( "proto_018-v12.v12", 0x080000, 0x080000, CRC(f1ae637c) SHA1(02a4c7d4a544350a314ab7b26d8c9d3baa8f5778) ) - ROM_LOAD( "proto_018-v21.v21", 0x100000, 0x080000, CRC(9f3b4eda) SHA1(7f516923d04daa483b4b99c9babba66505931a34) ) + ROM_LOAD( "018_v11_56ac.v11", 0x000000, 0x080000, CRC(dc07ea3c) SHA1(c3e71aaec44ead7ddc581565d16b90030e6db5fd) ) + ROM_LOAD( "018_v12_db95.v12", 0x080000, 0x080000, CRC(f1ae637c) SHA1(02a4c7d4a544350a314ab7b26d8c9d3baa8f5778) ) + ROM_LOAD( "018_v21_98dd.v21", 0x100000, 0x080000, CRC(9f3b4eda) SHA1(7f516923d04daa483b4b99c9babba66505931a34) ) ROM_REGION( 0x080000, "ymsnd.deltat", 0 ) ROM_COPY( "ymsnd", 0x100000, 0x00000, 0x80000 ) ROM_REGION( 0x400000, "sprites", 0 ) // note, ROM_LOAD32_BYTE - ROM_LOAD32_BYTE( "proto_018-c1.c1", 0x000000, 0x80000, CRC(6569018b) SHA1(25040e0a9c2b72900100a22a2a41de5f6c339d8a) ) /* Plane 0 */ - ROM_LOAD32_BYTE( "proto_018-c2.c2", 0x000002, 0x80000, CRC(6949b501) SHA1(d8ee48837faff6cc849046ee8757b2b94d440303) ) /* Plane 2 */ - ROM_LOAD32_BYTE( "proto_018-c3.c3", 0x000001, 0x80000, CRC(410f653b) SHA1(ce94667721baa7b2c318fc268e3bb9209671c9f5) ) /* Plane 1 */ - ROM_LOAD32_BYTE( "proto_018-c4.c4", 0x000003, 0x80000, CRC(d43bf2a5) SHA1(c27985d8973611d02570f469a0d8cb4f5b63b614) ) /* Plane 3 */ - ROM_LOAD32_BYTE( "proto_018-c5.c5", 0x200000, 0x80000, CRC(837d09d3) SHA1(d3b06931fca6123604549599544b04529ef34c53) ) /* Plane 0 */ - ROM_LOAD32_BYTE( "proto_018-c6.c6", 0x200002, 0x80000, CRC(5fee51e7) SHA1(835c632fa12a1d5b4104cd80b8f686ac80b314a1) ) /* Plane 2 */ - ROM_LOAD32_BYTE( "proto_018-c7.c7", 0x200001, 0x80000, CRC(0f3f0823) SHA1(ec1d681c1795de43d20f30f85956e2473ec39c95) ) /* Plane 1 */ - ROM_LOAD32_BYTE( "proto_018-c8.c8", 0x200003, 0x80000, CRC(67cc9e34) SHA1(dc72a464c1456a4d2f7b992b416a984fb7885e99) ) /* Plane 3 */ + ROM_LOAD32_BYTE( "018_c1_ba06.c11", 0x000000, 0x80000, CRC(6569018b) SHA1(25040e0a9c2b72900100a22a2a41de5f6c339d8a) ) /* Plane 0 */ + ROM_LOAD32_BYTE( "018_c2_d534.c12", 0x000002, 0x80000, CRC(6949b501) SHA1(d8ee48837faff6cc849046ee8757b2b94d440303) ) /* Plane 2 */ + ROM_LOAD32_BYTE( "018_c3_9d70.c13", 0x000001, 0x80000, CRC(410f653b) SHA1(ce94667721baa7b2c318fc268e3bb9209671c9f5) ) /* Plane 1 */ + ROM_LOAD32_BYTE( "018_c4_bf9d.c14", 0x000003, 0x80000, CRC(d43bf2a5) SHA1(c27985d8973611d02570f469a0d8cb4f5b63b614) ) /* Plane 3 */ + ROM_LOAD32_BYTE( "018_c5_ac9d.c15", 0x200000, 0x80000, CRC(837d09d3) SHA1(d3b06931fca6123604549599544b04529ef34c53) ) /* Plane 0 */ + ROM_LOAD32_BYTE( "018_c6_d2a5.c16", 0x200002, 0x80000, CRC(5fee51e7) SHA1(835c632fa12a1d5b4104cd80b8f686ac80b314a1) ) /* Plane 2 */ + ROM_LOAD32_BYTE( "018_c7_d568.c17", 0x200001, 0x80000, CRC(0f3f0823) SHA1(ec1d681c1795de43d20f30f85956e2473ec39c95) ) /* Plane 1 */ + ROM_LOAD32_BYTE( "018_c8_d256.c18", 0x200003, 0x80000, CRC(67cc9e34) SHA1(dc72a464c1456a4d2f7b992b416a984fb7885e99) ) /* Plane 3 */ ROM_END /**************************************** @@ -1287,6 +1291,9 @@ ROM_END . NGM-024 NEO-MVS PROG42G-1 / NEO-MVS CHA42G-1 . NGH-024 + + . prototype + NEO-MVS PROG-EP / NEO-MVS CHA-EPG ****************************************/ ROM_START( lresort ) @@ -1310,32 +1317,32 @@ ROM_START( lresort ) ROM_LOAD16_BYTE( "024-c4.c4", 0x200001, 0x080000, CRC(7382fefb) SHA1(e916dec5bb5462eb9ae9711f08c7388937abb980) ) /* Plane 2,3 */ /* TC534200 */ ROM_END -ROM_START( lresortp ) /* prototype - all roms were hand labeled with CRCs */ +ROM_START( lresortp ) /* prototype - all roms were hand labeled with CRCs */ /* MVS VERSION */ ROM_REGION( 0x100000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "024_p1_5937.bin", 0x000001, 0x080000, CRC(8e6008ee) SHA1(6779663118782207156dc9fa9e24e81e30c6391c) ) - ROM_LOAD16_BYTE( "024_p2_8d37.bin", 0x000000, 0x080000, CRC(6d9ee90f) SHA1(ecd42182988092417bc96db8301ea408e47735f2) ) + ROM_LOAD16_BYTE( "024_p1_5937.podd", 0x000001, 0x080000, CRC(8e6008ee) SHA1(6779663118782207156dc9fa9e24e81e30c6391c) ) + ROM_LOAD16_BYTE( "024_p2_8d37.peven", 0x000000, 0x080000, CRC(6d9ee90f) SHA1(ecd42182988092417bc96db8301ea408e47735f2) ) - NEO_SFIX_128K( "024_s1_22fe.bin", CRC(5cef5cc6) SHA1(9ec305007bdb356e9f8f279beae5e2bcb3f2cf7b) ) + NEO_SFIX_128K( "024_s1_22fe.s1", CRC(5cef5cc6) SHA1(9ec305007bdb356e9f8f279beae5e2bcb3f2cf7b) ) - NEO_BIOS_AUDIO_128K( "024_m1_fc7a.bin", CRC(22122875) SHA1(540c21559163381467679f836cb068adaf526659) ) + NEO_BIOS_AUDIO_128K( "024_m1_fc7a.m1", CRC(22122875) SHA1(540c21559163381467679f836cb068adaf526659) ) ROM_REGION( 0x200000, "ymsnd", 0 ) - ROM_LOAD( "024_v11_b085.bin", 0x000000, 0x080000, CRC(0722da38) SHA1(66a9b463d5277908b3a01c03de82b3de9118f2cb) ) // 024_v11_b085.bin 024-v1.v1 [1/2] IDENTICAL - ROM_LOAD( "024_v12_d3b7.bin", 0x080000, 0x080000, CRC(670ce3ec) SHA1(9004aa85d4a9b0ecf9cf9357b073ed55a98fdb02) ) // 024_v12_d3b7.bin 024-v1.v1 [2/2] IDENTICAL - ROM_LOAD( "024_v13_a31e.bin", 0x100000, 0x080000, CRC(2e39462b) SHA1(b0a9b1a3377bf0369f3020192505c46ca52927d6) ) // 024_v13_a31e.bin 024-v2.v2 [1/2] IDENTICAL - ROM_LOAD( "024_v24_2f0f.bin", 0x180000, 0x080000, CRC(7944754f) SHA1(d42a46c5127c6c62041ebffb0007af8a24abd360) ) // 024_v24_2f0f.bin 024-v2.v2 [2/2] IDENTICAL + ROM_LOAD( "024_v11_b085.v11", 0x000000, 0x080000, CRC(0722da38) SHA1(66a9b463d5277908b3a01c03de82b3de9118f2cb) ) // 024_v11_b085.bin 024-v1.v1 [1/2] IDENTICAL + ROM_LOAD( "024_v12_d3b7.v12", 0x080000, 0x080000, CRC(670ce3ec) SHA1(9004aa85d4a9b0ecf9cf9357b073ed55a98fdb02) ) // 024_v12_d3b7.bin 024-v1.v1 [2/2] IDENTICAL + ROM_LOAD( "024_v13_a31e.v13", 0x100000, 0x080000, CRC(2e39462b) SHA1(b0a9b1a3377bf0369f3020192505c46ca52927d6) ) // 024_v13_a31e.bin 024-v2.v2 [1/2] IDENTICAL + ROM_LOAD( "024_v24_2f0f.v24", 0x180000, 0x080000, CRC(7944754f) SHA1(d42a46c5127c6c62041ebffb0007af8a24abd360) ) // 024_v24_2f0f.bin 024-v2.v2 [2/2] IDENTICAL NO_DELTAT_REGION ROM_REGION( 0x400000, "sprites", 0 ) // note, ROM_LOAD32_BYTE - ROM_LOAD32_BYTE( "024_c1_b764.bin", 0x000000, 0x80000, CRC(677749ec) SHA1(6f94675e037956a380652ab1056e6f1dec605bec) ) /* Plane 0 */ - ROM_LOAD32_BYTE( "024_c2_1951.bin", 0x000002, 0x80000, CRC(104d7b59) SHA1(404e8776ee8df4ca282eb7b747759af8628ddca1) ) /* Plane 2 */ - ROM_LOAD32_BYTE( "024_c3_0f63.bin", 0x000001, 0x80000, CRC(b0965a74) SHA1(e8026dd4f722ccab9c913261d09ab8843ef56a0e) ) /* Plane 1 */ - ROM_LOAD32_BYTE( "024_c4_c5b5.bin", 0x000003, 0x80000, CRC(dcfc3860) SHA1(8443b455ae8de656adab57f3b7e68919f22d3b9d) ) /* Plane 3 */ - ROM_LOAD32_BYTE( "024_c5_dd03.bin", 0x200000, 0x80000, CRC(50322397) SHA1(3308fbe48ad165b9894a52fc3a8d9898bbbc0c0e) ) /* Plane 0 */ - ROM_LOAD32_BYTE( "024_c6_c81a.bin", 0x200002, 0x80000, CRC(c3c93894) SHA1(f23b9d7e2b54d44c96370dde282bdf45cebd9cba) ) /* Plane 2 */ - ROM_LOAD32_BYTE( "024_c7_5edc.bin", 0x200001, 0x80000, CRC(21faf72b) SHA1(00bf257b06180ae6ede57744cea6257b3488d9f0) ) /* Plane 1 */ - ROM_LOAD32_BYTE( "024_c8_0850.bin", 0x200003, 0x80000, CRC(fb57217b) SHA1(607a98da754e8b1dd94a6432b21a36cc38e06a0f) ) /* Plane 3 */ + ROM_LOAD32_BYTE( "024_c1_b764.c1", 0x000000, 0x80000, CRC(677749ec) SHA1(6f94675e037956a380652ab1056e6f1dec605bec) ) /* Plane 0 */ + ROM_LOAD32_BYTE( "024_c2_1951.c2", 0x000002, 0x80000, CRC(104d7b59) SHA1(404e8776ee8df4ca282eb7b747759af8628ddca1) ) /* Plane 2 */ + ROM_LOAD32_BYTE( "024_c3_0f63.c3", 0x000001, 0x80000, CRC(b0965a74) SHA1(e8026dd4f722ccab9c913261d09ab8843ef56a0e) ) /* Plane 1 */ + ROM_LOAD32_BYTE( "024_c4_c5b5.c4", 0x000003, 0x80000, CRC(dcfc3860) SHA1(8443b455ae8de656adab57f3b7e68919f22d3b9d) ) /* Plane 3 */ + ROM_LOAD32_BYTE( "024_c5_dd03.c5", 0x200000, 0x80000, CRC(50322397) SHA1(3308fbe48ad165b9894a52fc3a8d9898bbbc0c0e) ) /* Plane 0 */ + ROM_LOAD32_BYTE( "024_c6_c81a.c6", 0x200002, 0x80000, CRC(c3c93894) SHA1(f23b9d7e2b54d44c96370dde282bdf45cebd9cba) ) /* Plane 2 */ + ROM_LOAD32_BYTE( "024_c7_5edc.c7", 0x200001, 0x80000, CRC(21faf72b) SHA1(00bf257b06180ae6ede57744cea6257b3488d9f0) ) /* Plane 1 */ + ROM_LOAD32_BYTE( "024_c8_0850.c8", 0x200003, 0x80000, CRC(fb57217b) SHA1(607a98da754e8b1dd94a6432b21a36cc38e06a0f) ) /* Plane 3 */ ROM_END diff --git a/src/mame/drivers/ng_aes.cpp b/src/mame/drivers/ng_aes.cpp index 994dfbef4e5..42577544f51 100644 --- a/src/mame/drivers/ng_aes.cpp +++ b/src/mame/drivers/ng_aes.cpp @@ -1523,27 +1523,12 @@ MACHINE_CONFIG_END ROM_START( aes ) ROM_REGION16_BE( 0x20000, "mainbios", 0 ) ROM_SYSTEM_BIOS( 0, "asia", "Asia AES" ) - ROM_LOAD16_WORD_SWAP_BIOS( 0, "neo-epo.bin", 0x00000, 0x020000, CRC(d27a71f1) SHA1(1b3b22092f30c4d1b2c15f04d1670eb1e9fbea07) ) /* AES Console (Asia?) Bios */ + ROM_LOAD16_WORD_SWAP_BIOS( 0, "neo-epo.bin", 0x00000, 0x020000, CRC(d27a71f1) SHA1(1b3b22092f30c4d1b2c15f04d1670eb1e9fbea07) ) /* AES Console (Asia?) Bios */ ROM_SYSTEM_BIOS( 1, "japan", "Japan AES" ) - ROM_LOAD16_WORD_SWAP_BIOS( 1, "neo-po.bin", 0x00000, 0x020000, CRC(16d0c132) SHA1(4e4a440cae46f3889d20234aebd7f8d5f522e22c) ) /* AES Console (Japan) Bios */ + ROM_LOAD16_WORD_SWAP_BIOS( 1, "neo-po.bin", 0x00000, 0x020000, CRC(16d0c132) SHA1(4e4a440cae46f3889d20234aebd7f8d5f522e22c) ) /* AES Console (Japan) Bios */ ROM_SYSTEM_BIOS( 2, "devel", "Development System ROM" ) - ROM_LOAD16_WORD_SWAP_BIOS( 2, "neodebug.rom", 0x00000, 0x020000, CRC(698ebb7d) SHA1(081c49aa8cc7dad5939833dc1b18338321ea0a07) ) /* Official debug (development) ROM, for home-use base board */ - ROM_SYSTEM_BIOS( 3, "unibios31", "Universe Bios (Hack, Ver. 3.1)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 3, "uni-bios_3_1.rom", 0x00000, 0x020000, CRC(0c58093f) SHA1(29329a3448c2505e1ff45ffa75e61e9693165153) ) /* Universe Bios v3.1 (hack) */ - ROM_SYSTEM_BIOS( 4, "unibios30", "Universe Bios (Hack, Ver. 3.0)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 4, "uni-bios_3_0.rom", 0x00000, 0x020000, CRC(a97c89a9) SHA1(97a5eff3b119062f10e31ad6f04fe4b90d366e7f) ) /* Universe Bios v3.0 (hack) */ - ROM_SYSTEM_BIOS( 5, "unibios23", "Universe Bios (Hack, Ver. 2.3)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 5, "uni-bios_2_3.rom", 0x00000, 0x020000, CRC(27664eb5) SHA1(5b02900a3ccf3df168bdcfc98458136fd2b92ac0) ) /* Universe Bios v2.3 (hack) */ - ROM_SYSTEM_BIOS( 6, "unibios23o", "Universe Bios (Hack, Ver. 2.3, older?)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 6, "uni-bios_2_3o.rom", 0x00000, 0x020000, CRC(601720ae) SHA1(1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9) ) /* Universe Bios v2.3 (hack) alt version, withdrawn? */ - ROM_SYSTEM_BIOS( 7, "unibios22", "Universe Bios (Hack, Ver. 2.2)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 7, "uni-bios_2_2.rom", 0x00000, 0x020000, CRC(2d50996a) SHA1(5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c) ) /* Universe Bios v2.2 (hack) */ - ROM_SYSTEM_BIOS( 8, "unibios21", "Universe Bios (Hack, Ver. 2.1)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 8, "uni-bios_2_1.rom", 0x00000, 0x020000, CRC(8dabf76b) SHA1(c23732c4491d966cf0373c65c83c7a4e88f0082c) ) /* Universe Bios v2.1 (hack) */ - ROM_SYSTEM_BIOS( 9, "unibios20", "Universe Bios (Hack, Ver. 2.0)" ) - ROM_LOAD16_WORD_SWAP_BIOS( 9, "uni-bios_2_0.rom", 0x00000, 0x020000, CRC(0c12c2ad) SHA1(37bcd4d30f3892078b46841d895a6eff16dc921e) ) /* Universe Bios v2.0 (hack) */ - ROM_SYSTEM_BIOS(10, "unibios13", "Universe Bios (Hack, Ver. 1.3)" ) - ROM_LOAD16_WORD_SWAP_BIOS(10, "uni-bios_1_3.rom", 0x00000, 0x020000, CRC(b24b44a0) SHA1(eca8851d30557b97c309a0d9f4a9d20e5b14af4e) ) /* Universe Bios v1.3 (hack) - note: versions older than 1.3 don't support AES hardware */ + ROM_LOAD16_WORD_SWAP_BIOS( 2, "neodebug.rom", 0x00000, 0x020000, CRC(698ebb7d) SHA1(081c49aa8cc7dad5939833dc1b18338321ea0a07) ) /* Official debug (development) ROM, for home-use base board */ + NEOGEO_UNIBIOS(3) ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASEFF ) diff --git a/src/mame/drivers/pcat_dyn.cpp b/src/mame/drivers/pcat_dyn.cpp index 00b1a7df54d..baaa94626ee 100644 --- a/src/mame/drivers/pcat_dyn.cpp +++ b/src/mame/drivers/pcat_dyn.cpp @@ -23,7 +23,7 @@ If the output isn't satisfactory, it prints "I/O BOARD FAILURE". #include "emu.h" #include "cpu/i386/i386.h" #include "machine/pcshare.h" -#include "video/pc_vga.h" +#include "bus/isa/trident.h" #include "machine/bankdev.h" #include "machine/ds128x.h" #include "machine/ins8250.h" @@ -56,7 +56,7 @@ WRITE8_MEMBER(pcat_dyn_state::bank2_w) static ADDRESS_MAP_START( pcat_map, AS_PROGRAM, 32, pcat_dyn_state ) AM_RANGE(0x00000000, 0x0009ffff) AM_RAM - AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff) + AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", trident_vga_device, mem_r, mem_w, 0xffffffff) AM_RANGE(0x000c0000, 0x000c7fff) AM_ROM AM_REGION("video_bios", 0) AM_RANGE(0x000d0000, 0x000d0fff) AM_ROM AM_REGION("game_prg", 0x0000) AM_WRITE8(bank1_w, 0xffffffff) AM_RANGE(0x000d1000, 0x000d1fff) AM_ROM AM_REGION("game_prg", 0x1000) AM_WRITE8(bank2_w, 0xffffffff) @@ -70,9 +70,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pcat_io, AS_IO, 32, pcat_dyn_state ) AM_IMPORT_FROM(pcat32_io_common) - AM_RANGE(0x03b0, 0x03bf) AM_DEVREADWRITE8("vga", vga_device, port_03b0_r, port_03b0_w, 0xffffffff) - AM_RANGE(0x03c0, 0x03cf) AM_DEVREADWRITE8("vga", vga_device, port_03c0_r, port_03c0_w, 0xffffffff) - AM_RANGE(0x03d0, 0x03df) AM_DEVREADWRITE8("vga", vga_device, port_03d0_r, port_03d0_w, 0xffffffff) + AM_RANGE(0x03b0, 0x03bf) AM_DEVREADWRITE8("vga", trident_vga_device, port_03b0_r, port_03b0_w, 0xffffffff) + AM_RANGE(0x03c0, 0x03cf) AM_DEVREADWRITE8("vga", trident_vga_device, port_03c0_r, port_03c0_w, 0xffffffff) + AM_RANGE(0x03d0, 0x03df) AM_DEVREADWRITE8("vga", trident_vga_device, port_03d0_r, port_03d0_w, 0xffffffff) AM_RANGE(0x03f8, 0x03ff) AM_DEVREADWRITE8("ns16550", ns16550_device, ins8250_r, ins8250_w, 0xffffffff) ADDRESS_MAP_END @@ -126,7 +126,7 @@ static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state ) MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb) /* video hardware */ - MCFG_FRAGMENT_ADD( pcvideo_vga ) + MCFG_FRAGMENT_ADD( pcvideo_trident_vga ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/ssem.cpp b/src/mame/drivers/ssem.cpp index 278d02518fb..dac314aa9eb 100644 --- a/src/mame/drivers/ssem.cpp +++ b/src/mame/drivers/ssem.cpp @@ -416,6 +416,7 @@ void ssem_state::glyph_print(bitmap_rgb32 &bitmap, INT32 x, INT32 y, Format &&fm { const rectangle &visarea = m_screen->visible_area(); + m_glyph_print_buf.clear(); m_glyph_print_buf.seekp(0, util::ovectorstream::beg); util::stream_format(m_glyph_print_buf, std::forward<Format>(fmt), std::forward<Params>(args)...); m_glyph_print_buf.put('\0'); diff --git a/src/mame/drivers/svi318.cpp b/src/mame/drivers/svi318.cpp index 2529508e2b3..b2a6a2975f3 100644 --- a/src/mame/drivers/svi318.cpp +++ b/src/mame/drivers/svi318.cpp @@ -22,10 +22,18 @@ #include "formats/svi_cas.h" #include "bus/generic/slot.h" #include "bus/generic/carts.h" +#include "bus/svi3x8/expander/expander.h" #include "softlist.h" //************************************************************************** +// CONSTANTS & MACROS +//************************************************************************** + +#define IS_SVI328 (m_ram->size() == 64 * 1024) + + +//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -39,18 +47,32 @@ public: m_basic(*this, "basic"), m_speaker(*this, "speaker"), m_cassette(*this, "cassette"), - m_cart(*this, "cartslot"), + m_cart_rom(*this, "cartslot"), + m_expander(*this, "exp"), m_keyboard(*this, "KEY"), m_buttons(*this, "BUTTONS"), + m_intvdp(0), m_intexp(0), + m_romdis(1), m_ramdis(1), + m_cart(1), m_bk21(1), m_keyboard_row(0) {} DECLARE_READ8_MEMBER( ppi_port_a_r ); DECLARE_READ8_MEMBER( ppi_port_b_r ); DECLARE_WRITE8_MEMBER( ppi_port_c_w ); - DECLARE_WRITE8_MEMBER( psg_port_b_w ); + DECLARE_WRITE8_MEMBER( bank_w ); DECLARE_WRITE_LINE_MEMBER( intvdp_w ); + READ8_MEMBER( page1_r ); + WRITE8_MEMBER( page1_w ); + READ8_MEMBER( page2_r ); + WRITE8_MEMBER( page2_w ); + + // from expander bus + DECLARE_WRITE_LINE_MEMBER( intexp_w ); + DECLARE_WRITE_LINE_MEMBER( romdis_w ); + DECLARE_WRITE_LINE_MEMBER( ramdis_w ); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cartridge); protected: @@ -58,17 +80,23 @@ protected: virtual void machine_reset() override; private: - void reset_memory_configuration(); - required_device<cpu_device> m_maincpu; required_device<ram_device> m_ram; required_memory_region m_basic; required_device<speaker_sound_device> m_speaker; required_device<cassette_image_device> m_cassette; - required_device<generic_slot_device> m_cart; + required_device<generic_slot_device> m_cart_rom; + required_device<svi_expander_device> m_expander; required_ioport_array<16> m_keyboard; required_ioport m_buttons; + int m_intvdp; + int m_intexp; + int m_romdis; + int m_ramdis; + int m_cart; + int m_bk21; + UINT8 m_keyboard_row; }; @@ -79,10 +107,13 @@ private: static ADDRESS_MAP_START( svi3x8_mem, AS_PROGRAM, 8, svi3x8_state ) ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x7fff) AM_READWRITE(page1_r, page1_w) + AM_RANGE(0x8000, 0xffff) AM_READWRITE(page2_r, page2_w) ADDRESS_MAP_END static ADDRESS_MAP_START( svi3x8_io, AS_IO, 8, svi3x8_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x7f) AM_DEVREADWRITE("exp", svi_expander_device, iorq_r, iorq_w) AM_RANGE(0x80, 0x80) AM_MIRROR(0x22) AM_DEVWRITE("vdp", tms9928a_device, vram_write) AM_RANGE(0x81, 0x81) AM_MIRROR(0x22) AM_DEVWRITE("vdp", tms9928a_device, register_write) AM_RANGE(0x84, 0x84) AM_MIRROR(0x22) AM_DEVREAD("vdp", tms9928a_device, vram_read) @@ -261,7 +292,8 @@ WRITE_LINE_MEMBER( svi3x8_state::intvdp_w ) { // note: schematics show a CNTRL line that allows switching between // IRQ and NMI for the interrupt - m_maincpu->set_input_line(INPUT_LINE_IRQ0, state); + m_intvdp = state; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_intvdp || m_intexp) ? ASSERT_LINE : CLEAR_LINE); } @@ -269,69 +301,90 @@ WRITE_LINE_MEMBER( svi3x8_state::intvdp_w ) // MACHINE EMULATION //************************************************************************** -void svi3x8_state::reset_memory_configuration() -{ - m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x7fff, m_basic->base()); - - if (m_ram->size() == 64 * 1024) - { - // SVI-328 - m_maincpu->space(AS_PROGRAM).install_ram(0x8000, 0xffff, m_ram->pointer()); - } - else - { - // SVI-318 - m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x8000, 0xbfff); - m_maincpu->space(AS_PROGRAM).install_ram(0xc000, 0xffff, m_ram->pointer()); - } -} - void svi3x8_state::machine_start() { // register for save states + save_item(NAME(m_intvdp)); + save_item(NAME(m_intexp)); + save_item(NAME(m_romdis)); + save_item(NAME(m_ramdis)); + save_item(NAME(m_cart)); + save_item(NAME(m_bk21)); save_item(NAME(m_keyboard_row)); } void svi3x8_state::machine_reset() { - reset_memory_configuration(); + m_intvdp = 0; + m_intexp = 0; + m_romdis = 1; + m_ramdis = 1; + m_cart = 1; + m_bk21 = 1; } -WRITE8_MEMBER( svi3x8_state::psg_port_b_w ) +READ8_MEMBER( svi3x8_state::page1_r) { - reset_memory_configuration(); + if (m_cart == 0) + return m_cart_rom->exists() ? m_cart_rom->read_rom(space, offset) : 0xff; - // CART - if (BIT(data, 0) == 0) - { - if (m_cart->exists()) - m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x7fff, m_cart->get_rom_base()); - else - m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x0000, 0x7fff); - } - else - { - // BK21 (SV-328) - if (BIT(data, 1) == 0) - { - if (m_ram->size() == 64 * 1024) - m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x7fff, m_ram->pointer() + 0x8000); - else - m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x0000, 0x7fff); - } - - // BK22 (SV-807) - if (BIT(data, 2) == 0) - m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x8000, 0xffff); - - // BK31 (SV-807) - if (BIT(data, 3) == 0) - m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x0000, 0x7fff); - - // BK32 (SV-807) - if (BIT(data, 4) == 0) - m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x8000, 0xffff); - } + UINT8 data = m_expander->mreq_r(space, offset); + + if (m_romdis == 1) + data = m_basic->u8(offset); + + if (m_bk21 == 0 && IS_SVI328) + data = m_ram->read(offset); + + return data; +} + +WRITE8_MEMBER( svi3x8_state::page1_w) +{ + if (m_cart == 0) + return; + + m_expander->mreq_w(space, offset, data); + + if (m_bk21 == 0 && IS_SVI328) + m_ram->write(offset, data); +} + +READ8_MEMBER( svi3x8_state::page2_r) +{ + offset += 0x8000; + + UINT8 data = m_expander->mreq_r(space, offset); + + if (m_ramdis == 1 && (offset >= 0x4000 || IS_SVI328)) + return m_ram->read(IS_SVI328 ? offset : offset - 0xc000); + + return data; +} + +WRITE8_MEMBER( svi3x8_state::page2_w ) +{ + offset += 0x8000; + + m_expander->mreq_w(space, offset, data); + + if (m_ramdis == 1 && (offset >= 0x4000 || IS_SVI328)) + m_ram->write(IS_SVI328 ? offset : offset - 0xc000, data); +} + +WRITE8_MEMBER( svi3x8_state::bank_w ) +{ + logerror("bank_w: %02x\n", data); + + m_cart = BIT(data, 0); + m_bk21 = BIT(data, 1); + + m_expander->bk21_w(BIT(data, 1)); + m_expander->bk22_w(BIT(data, 2)); + m_expander->bk31_w(BIT(data, 3)); + m_expander->bk32_w(BIT(data, 4)); + + // TODO: handle ROM2/ROM3 enable (bit 6 + 7) output().set_value("led_caps_lock", BIT(data, 5)); } @@ -372,6 +425,22 @@ WRITE8_MEMBER( svi3x8_state::ppi_port_c_w ) m_speaker->level_w(BIT(data, 7)); } +WRITE_LINE_MEMBER( svi3x8_state::intexp_w ) +{ + m_intexp = state; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_intvdp || m_intexp) ? ASSERT_LINE : CLEAR_LINE); +} + +WRITE_LINE_MEMBER( svi3x8_state::romdis_w ) +{ + m_romdis = state; +} + +WRITE_LINE_MEMBER( svi3x8_state::ramdis_w ) +{ + m_ramdis = state; +} + //************************************************************************** // CARTRIDGE @@ -379,7 +448,7 @@ WRITE8_MEMBER( svi3x8_state::ppi_port_c_w ) DEVICE_IMAGE_LOAD_MEMBER( svi3x8_state, cartridge ) { - UINT32 size = m_cart->common_get_size("rom"); + UINT32 size = m_cart_rom->common_get_size("rom"); if (size != 0x8000) { @@ -387,8 +456,8 @@ DEVICE_IMAGE_LOAD_MEMBER( svi3x8_state, cartridge ) return IMAGE_INIT_FAIL; } - m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); - m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom"); + m_cart_rom->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); + m_cart_rom->common_load_rom(m_cart_rom->get_rom_base(), size, "rom"); return IMAGE_INIT_PASS; } @@ -427,7 +496,7 @@ static MACHINE_CONFIG_START( svi318, svi3x8_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("psg", AY8910, XTAL_10_738635MHz / 6) MCFG_AY8910_PORT_A_READ_CB(IOPORT("JOY")) - MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi3x8_state, psg_port_b_w)) + MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(svi3x8_state, bank_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) // cassette @@ -442,6 +511,12 @@ static MACHINE_CONFIG_START( svi318, svi3x8_state ) MCFG_GENERIC_EXTENSIONS("bin,rom") MCFG_GENERIC_LOAD(svi3x8_state, cartridge) MCFG_SOFTWARE_LIST_ADD("cart_list", "svi318_cart") + + // expander bus + MCFG_SVI_EXPANDER_BUS_ADD("exp") + MCFG_SVI_EXPANDER_INT_HANDLER(WRITELINE(svi3x8_state, intexp_w)) + MCFG_SVI_EXPANDER_ROMDIS_HANDLER(WRITELINE(svi3x8_state, romdis_w)) + MCFG_SVI_EXPANDER_RAMDIS_HANDLER(WRITELINE(svi3x8_state, ramdis_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( svi318n, svi318 ) diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h index da50cb62765..714d9a1c4ee 100644 --- a/src/mame/includes/neogeo.h +++ b/src/mame/includes/neogeo.h @@ -386,6 +386,34 @@ ADDRESS_MAP_EXTERN(neogeo_main_map,16); #define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \ ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(bios+1)) /* Note '+1' */ +#define NEOGEO_UNIBIOS(x) \ + ROM_SYSTEM_BIOS( x+ 0, "unibios32", "Universe Bios (Hack, Ver. 3.2)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 0, "uni-bios_3_2.rom", 0x00000, 0x020000, CRC(a4e8b9b3) SHA1(c92f18c3f1edda543d264ecd0ea915240e7c8258) ) /* Universe Bios v3.2 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 1, "unibios31", "Universe Bios (Hack, Ver. 3.1)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 1, "uni-bios_3_1.rom", 0x00000, 0x020000, CRC(0c58093f) SHA1(29329a3448c2505e1ff45ffa75e61e9693165153) ) /* Universe Bios v3.1 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 2, "unibios30", "Universe Bios (Hack, Ver. 3.0)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 2, "uni-bios_3_0.rom", 0x00000, 0x020000, CRC(a97c89a9) SHA1(97a5eff3b119062f10e31ad6f04fe4b90d366e7f) ) /* Universe Bios v3.0 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 3, "unibios23", "Universe Bios (Hack, Ver. 2.3)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 3, "uni-bios_2_3.rom", 0x00000, 0x020000, CRC(27664eb5) SHA1(5b02900a3ccf3df168bdcfc98458136fd2b92ac0) ) /* Universe Bios v2.3 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 4, "unibios23o", "Universe Bios (Hack, Ver. 2.3, older?)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 4, "uni-bios_2_3o.rom", 0x00000, 0x020000, CRC(601720ae) SHA1(1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9) ) /* Universe Bios v2.3 (hack) alt version, withdrawn? */ \ + ROM_SYSTEM_BIOS( x+ 5, "unibios22", "Universe Bios (Hack, Ver. 2.2)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 5, "uni-bios_2_2.rom", 0x00000, 0x020000, CRC(2d50996a) SHA1(5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c) ) /* Universe Bios v2.2 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 6, "unibios21", "Universe Bios (Hack, Ver. 2.1)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 6, "uni-bios_2_1.rom", 0x00000, 0x020000, CRC(8dabf76b) SHA1(c23732c4491d966cf0373c65c83c7a4e88f0082c) ) /* Universe Bios v2.1 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 7, "unibios20", "Universe Bios (Hack, Ver. 2.0)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 7, "uni-bios_2_0.rom", 0x00000, 0x020000, CRC(0c12c2ad) SHA1(37bcd4d30f3892078b46841d895a6eff16dc921e) ) /* Universe Bios v2.0 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 8, "unibios13", "Universe Bios (Hack, Ver. 1.3)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 8, "uni-bios_1_3.rom", 0x00000, 0x020000, CRC(b24b44a0) SHA1(eca8851d30557b97c309a0d9f4a9d20e5b14af4e) ) /* Universe Bios v1.3 (hack) */ \ + ROM_SYSTEM_BIOS( x+ 9, "unibios12", "Universe Bios (Hack, Ver. 1.2)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+ 9, "uni-bios_1_2.rom", 0x00000, 0x020000, CRC(4fa698e9) SHA1(682e13ec1c42beaa2d04473967840c88fd52c75a) ) /* Universe Bios v1.2 (hack) */ \ + ROM_SYSTEM_BIOS( x+10, "unibios12o", "Universe Bios (Hack, Ver. 1.2, older)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+10, "uni-bios_1_2o.rom", 0x00000, 0x020000, CRC(e19d3ce9) SHA1(af88ef837f44a3af2d7144bb46a37c8512b67770) ) /* Universe Bios v1.2 (hack) alt version */ \ + ROM_SYSTEM_BIOS( x+11, "unibios11", "Universe Bios (Hack, Ver. 1.1)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+11, "uni-bios_1_1.rom", 0x00000, 0x020000, CRC(5dda0d84) SHA1(4153d533c02926a2577e49c32657214781ff29b7) ) /* Universe Bios v1.1 (hack) */ \ + ROM_SYSTEM_BIOS( x+12, "unibios10", "Universe Bios (Hack, Ver. 1.0)" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( x+12, "uni-bios_1_0.rom", 0x00000, 0x020000, CRC(0ce453a0) SHA1(3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9) ) /* Universe Bios v1.0 (hack) */ + #define NEOGEO_BIOS \ ROM_REGION16_BE( 0x80000, "mainbios", 0 ) \ ROM_SYSTEM_BIOS( 0, "euro", "Europe MVS (Ver. 2)" ) \ @@ -398,7 +426,7 @@ ADDRESS_MAP_EXTERN(neogeo_main_map,16); ROM_SYSTEM_BIOS( 3, "us-e", "US MVS (Ver. 1)" ) \ ROM_LOAD16_WORD_SWAP_BIOS( 3, "sp-e.sp1", 0x00000, 0x020000, CRC(2723a5b5) SHA1(5dbff7531cf04886cde3ef022fb5ca687573dcb8) ) /* US, 6 Slot (V5?) */ \ ROM_SYSTEM_BIOS( 4, "us-v2", "US MVS (4 slot, Ver 2)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(4, "v2.bin", 0x00000, 0x020000, CRC(62f021f4) SHA1(62d372269e1b3161c64ae21123655a0a22ffd1bb) ) /* US, 4 slot */ \ + ROM_LOAD16_WORD_SWAP_BIOS( 4, "v2.bin", 0x00000, 0x020000, CRC(62f021f4) SHA1(62d372269e1b3161c64ae21123655a0a22ffd1bb) ) /* US, 4 slot */ \ \ ROM_SYSTEM_BIOS( 5, "asia", "Asia MVS (Ver. 3)" ) \ ROM_LOAD16_WORD_SWAP_BIOS( 5, "asia-s3.rom", 0x00000, 0x020000, CRC(91b64be3) SHA1(720a3e20d26818632aedf2c2fd16c54f213543e1) ) /* Asia */ \ @@ -412,36 +440,11 @@ ADDRESS_MAP_EXTERN(neogeo_main_map,16); ROM_SYSTEM_BIOS( 9, "mv1c", "NEO-MVH MV1C" ) \ ROM_LOAD16_WORD_SWAP_BIOS( 9, "sp-45.sp1", 0x00000, 0x080000, CRC(03cc9f6a) SHA1(cdf1f49e3ff2bac528c21ed28449cf35b7957dc1) ) /* Latest Asia bios */ \ ROM_SYSTEM_BIOS( 10, "japan-j3", "Japan MVS (J3)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS( 10, "japan-j3.bin", 0x00000, 0x020000, CRC(dff6d41f) SHA1(e92910e20092577a4523a6b39d578a71d4de7085) ) /* Latest Japan bios; correct chip label unknown */ \ - ROM_SYSTEM_BIOS(11, "japan-hotel", "Custom Japanese Hotel" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(11, "sp-1v1_3db8c.bin", 0x00000, 0x020000, CRC(162f0ebe) SHA1(fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271) ) /* 'rare MVS found in japanese hotels' shows v1.3 in test mode */ \ + ROM_LOAD16_WORD_SWAP_BIOS( 10, "japan-j3.bin", 0x00000, 0x020000, CRC(dff6d41f) SHA1(e92910e20092577a4523a6b39d578a71d4de7085) ) /* Latest Japan bios; correct chip label unknown */ \ + ROM_SYSTEM_BIOS( 11, "japan-hotel", "Custom Japanese Hotel" ) \ + ROM_LOAD16_WORD_SWAP_BIOS( 11, "sp-1v1_3db8c.bin", 0x00000, 0x020000, CRC(162f0ebe) SHA1(fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271) ) /* 'rare MVS found in japanese hotels' shows v1.3 in test mode */ \ \ - ROM_SYSTEM_BIOS(12, "unibios31", "Universe Bios (Hack, Ver. 3.1)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(12, "uni-bios_3_1.rom", 0x00000, 0x020000, CRC(0c58093f) SHA1(29329a3448c2505e1ff45ffa75e61e9693165153) ) /* Universe Bios v3.1 (hack) */ \ - ROM_SYSTEM_BIOS(13, "unibios30", "Universe Bios (Hack, Ver. 3.0)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(13, "uni-bios_3_0.rom", 0x00000, 0x020000, CRC(a97c89a9) SHA1(97a5eff3b119062f10e31ad6f04fe4b90d366e7f) ) /* Universe Bios v3.0 (hack) */ \ - ROM_SYSTEM_BIOS(14, "unibios23", "Universe Bios (Hack, Ver. 2.3)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(14, "uni-bios_2_3.rom", 0x00000, 0x020000, CRC(27664eb5) SHA1(5b02900a3ccf3df168bdcfc98458136fd2b92ac0) ) /* Universe Bios v2.3 (hack) */ \ - ROM_SYSTEM_BIOS(15, "unibios23o", "Universe Bios (Hack, Ver. 2.3, older?)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(15, "uni-bios_2_3o.rom", 0x00000, 0x020000, CRC(601720ae) SHA1(1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9) ) /* Universe Bios v2.3 (hack) alt version, withdrawn? */ \ - ROM_SYSTEM_BIOS(16, "unibios22", "Universe Bios (Hack, Ver. 2.2)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(16, "uni-bios_2_2.rom", 0x00000, 0x020000, CRC(2d50996a) SHA1(5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c) ) /* Universe Bios v2.2 (hack) */ \ - ROM_SYSTEM_BIOS(17, "unibios21", "Universe Bios (Hack, Ver. 2.1)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(17, "uni-bios_2_1.rom", 0x00000, 0x020000, CRC(8dabf76b) SHA1(c23732c4491d966cf0373c65c83c7a4e88f0082c) ) /* Universe Bios v2.1 (hack) */ \ - ROM_SYSTEM_BIOS(18, "unibios20", "Universe Bios (Hack, Ver. 2.0)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(18, "uni-bios_2_0.rom", 0x00000, 0x020000, CRC(0c12c2ad) SHA1(37bcd4d30f3892078b46841d895a6eff16dc921e) ) /* Universe Bios v2.0 (hack) */ \ - ROM_SYSTEM_BIOS(19, "unibios13", "Universe Bios (Hack, Ver. 1.3)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(19, "uni-bios_1_3.rom", 0x00000, 0x020000, CRC(b24b44a0) SHA1(eca8851d30557b97c309a0d9f4a9d20e5b14af4e) ) /* Universe Bios v1.3 (hack) */ \ - ROM_SYSTEM_BIOS(20, "unibios12", "Universe Bios (Hack, Ver. 1.2)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(20, "uni-bios_1_2.rom", 0x00000, 0x020000, CRC(4fa698e9) SHA1(682e13ec1c42beaa2d04473967840c88fd52c75a) ) /* Universe Bios v1.2 (hack) */ \ - ROM_SYSTEM_BIOS(21, "unibios12o", "Universe Bios (Hack, Ver. 1.2, older)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(21, "uni-bios_1_2o.rom", 0x00000, 0x020000, CRC(e19d3ce9) SHA1(af88ef837f44a3af2d7144bb46a37c8512b67770) ) /* Universe Bios v1.2 (hack) alt version */ \ - ROM_SYSTEM_BIOS(22, "unibios11", "Universe Bios (Hack, Ver. 1.1)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(22, "uni-bios_1_1.rom", 0x00000, 0x020000, CRC(5dda0d84) SHA1(4153d533c02926a2577e49c32657214781ff29b7) ) /* Universe Bios v1.1 (hack) */ \ - ROM_SYSTEM_BIOS(23, "unibios10", "Universe Bios (Hack, Ver. 1.0)" ) \ - ROM_LOAD16_WORD_SWAP_BIOS(23, "uni-bios_1_0.rom", 0x00000, 0x020000, CRC(0ce453a0) SHA1(3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9) ) /* Universe Bios v1.0 (hack) */ - - + NEOGEO_UNIBIOS(12) #define NEO_BIOS_AUDIO_64K(name, hash) \ diff --git a/src/osd/modules/file/posixsocket.cpp b/src/osd/modules/file/posixsocket.cpp index f6f465dd5d7..d6655e4cf15 100644 --- a/src/osd/modules/file/posixsocket.cpp +++ b/src/osd/modules/file/posixsocket.cpp @@ -50,10 +50,6 @@ public: virtual error read(void *buffer, std::uint64_t offset, std::uint32_t count, std::uint32_t &actual) override { -#if defined(EMSCRIPTEN) - m_listening = false; - return error::FAILURE; // TODO: work out what it dislikes about emscripten -#else fd_set readfds; FD_ZERO(&readfds); FD_SET(m_sock, &readfds); @@ -107,7 +103,6 @@ public: { return error::FAILURE; } -#endif } virtual error write(void const *buffer, std::uint64_t offset, std::uint32_t count, std::uint32_t &actual) override diff --git a/src/osd/modules/font/font_osx.cpp b/src/osd/modules/font/font_osx.cpp index 8e310714649..e1c5137b397 100644 --- a/src/osd/modules/font/font_osx.cpp +++ b/src/osd/modules/font/font_osx.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Olivier Galibert, R. Belmont +// copyright-holders:Olivier Galibert, R. Belmont, Vas Crabb /* * font_osx.c * diff --git a/src/osd/modules/font/font_sdl.cpp b/src/osd/modules/font/font_sdl.cpp index 3c8a69d5d63..bfe3013032e 100644 --- a/src/osd/modules/font/font_sdl.cpp +++ b/src/osd/modules/font/font_sdl.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Olivier Galibert, R. Belmont +// copyright-holders:Olivier Galibert, R. Belmont, Vas Crabb /* * font_sdl.c * @@ -8,15 +8,19 @@ #include "font_module.h" #include "modules/osdmodule.h" -#if defined(SDLMAME_UNIX) && !defined(SDLMAME_MACOSX) && !defined(SDLMAME_SOLARIS) && !defined(SDLMAME_HAIKU) && !defined(SDLMAME_EMSCRIPTEN) +#if defined(SDLMAME_UNIX) && !defined(SDLMAME_MACOSX) && !defined(SDLMAME_SOLARIS) && !defined(SDLMAME_HAIKU) #include "corestr.h" #include "corealloc.h" #include "fileio.h" #include "unicode.h" +#ifdef SDLMAME_EMSCRIPTEN +#include <SDL_ttf.h> +#else #include <SDL2/SDL_ttf.h> -#ifndef SDLMAME_HAIKU +#endif +#if !defined(SDLMAME_HAIKU) && !defined(SDLMAME_EMSCRIPTEN) #include <fontconfig/fontconfig.h> #endif @@ -52,11 +56,11 @@ private: static constexpr double POINT_SIZE = 144.0; -#ifndef SDLMAME_HAIKU - TTF_Font_ptr search_font_config(std::string const &name, bool bold, bool italic, bool underline, bool &bakedstyles); +#if !defined(SDLMAME_HAIKU) && !defined(SDLMAME_EMSCRIPTEN) + TTF_Font_ptr search_font_config(std::string const &family, std::string const &style, bool &bakedstyles); #endif bool BDF_Check_Magic(std::string const &name); - TTF_Font_ptr TTF_OpenFont_Magic(std::string const &name, int fsize); + TTF_Font_ptr TTF_OpenFont_Magic(std::string const &name, int fsize, long index); TTF_Font_ptr m_font; }; @@ -65,42 +69,42 @@ bool osd_font_sdl::open(std::string const &font_path, std::string const &_name, { bool bakedstyles = false; - // accept qualifiers from the name std::string name(_name); if (name.compare("default") == 0) { - name = "Liberation Sans"; + name = "Liberation Sans|Regular"; } - bool const bold = (strreplace(name, "[B]", "") + strreplace(name, "[b]", "") > 0); - bool const italic = (strreplace(name, "[I]", "") + strreplace(name, "[i]", "") > 0); + // accept qualifiers from the name bool const underline = (strreplace(name, "[U]", "") + strreplace(name, "[u]", "") > 0); bool const strike = (strreplace(name, "[S]", "") + strreplace(name, "[s]", "") > 0); + std::string::size_type const separator = name.rfind('|'); + std::string const family(name.substr(0, separator)); + std::string const style((std::string::npos != separator) ? name.substr(separator + 1) : std::string()); // first up, try it as a filename - TTF_Font_ptr font = TTF_OpenFont_Magic(name, POINT_SIZE); + TTF_Font_ptr font = TTF_OpenFont_Magic(family, POINT_SIZE, 0); // if no success, try the font path - if (!font) { - osd_printf_verbose("Searching font %s in -%s\n", name.c_str(), OPTION_FONTPATH); + osd_printf_verbose("Searching font %s in -%s\n", family.c_str(), OPTION_FONTPATH); //emu_file file(options().font_path(), OPEN_FLAG_READ); emu_file file(font_path.c_str(), OPEN_FLAG_READ); - if (file.open(name.c_str()) == osd_file::error::NONE) + if (file.open(family.c_str()) == osd_file::error::NONE) { std::string full_name = file.fullpath(); - font = TTF_OpenFont_Magic(full_name, POINT_SIZE); + font = TTF_OpenFont_Magic(full_name, POINT_SIZE, 0); if (font) osd_printf_verbose("Found font %s\n", full_name.c_str()); } } // if that didn't work, crank up the FontConfig database -#ifndef SDLMAME_HAIKU +#if !defined(SDLMAME_HAIKU) && !defined(SDLMAME_EMSCRIPTEN) if (!font) { - font = search_font_config(name, bold, italic, underline, bakedstyles); + font = search_font_config(family, style, bakedstyles); } #endif @@ -114,21 +118,21 @@ bool osd_font_sdl::open(std::string const &font_path, std::string const &_name, } // apply styles - int style = 0; + int styleflags = 0; if (!bakedstyles) { - style |= bold ? TTF_STYLE_BOLD : 0; - style |= italic ? TTF_STYLE_ITALIC : 0; + if ((style.find("Bold") != std::string::npos) || (style.find("Black") != std::string::npos)) styleflags |= TTF_STYLE_BOLD; + if ((style.find("Italic") != std::string::npos) || (style.find("Oblique") != std::string::npos)) styleflags |= TTF_STYLE_ITALIC; } - style |= underline ? TTF_STYLE_UNDERLINE : 0; + styleflags |= underline ? TTF_STYLE_UNDERLINE : 0; // SDL_ttf 2.0.9 and earlier does not define TTF_STYLE_STRIKETHROUGH #if SDL_VERSIONNUM(TTF_MAJOR_VERSION, TTF_MINOR_VERSION, TTF_PATCHLEVEL) > SDL_VERSIONNUM(2,0,9) - style |= strike ? TTF_STYLE_STRIKETHROUGH : 0; + styleflags |= strike ? TTF_STYLE_STRIKETHROUGH : 0; #else if (strike) osd_printf_warning("Ignoring strikethrough for SDL_TTF older than 2.0.10\n"); #endif // PATCHLEVEL - TTF_SetFontStyle(font.get(), style); + TTF_SetFontStyle(font.get(), styleflags); height = TTF_FontLineSkip(font.get()); @@ -157,9 +161,9 @@ void osd_font_sdl::close() bool osd_font_sdl::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, std::int32_t &width, std::int32_t &xoffs, std::int32_t &yoffs) { SDL_Color const fcol = { 0xff, 0xff, 0xff }; - std::uint16_t ustr[16]; - ustr[utf16_from_uchar(ustr, ARRAY_LENGTH(ustr), chnum)] = 0; - std::unique_ptr<SDL_Surface, void (*)(SDL_Surface *)> const drawsurf(TTF_RenderUNICODE_Solid(m_font.get(), ustr, fcol), &SDL_FreeSurface); + char ustr[16]; + ustr[utf8_from_uchar(ustr, ARRAY_LENGTH(ustr), chnum)] = '\0'; + std::unique_ptr<SDL_Surface, void (*)(SDL_Surface *)> const drawsurf(TTF_RenderUTF8_Solid(m_font.get(), ustr, fcol), &SDL_FreeSurface); // was nothing returned? if (drawsurf) @@ -187,18 +191,26 @@ bool osd_font_sdl::get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, std::in return bitmap.valid(); } -osd_font_sdl::TTF_Font_ptr osd_font_sdl::TTF_OpenFont_Magic(std::string const &name, int fsize) +osd_font_sdl::TTF_Font_ptr osd_font_sdl::TTF_OpenFont_Magic(std::string const &name, int fsize, long index) { emu_file file(OPEN_FLAG_READ); if (file.open(name.c_str()) == osd_file::error::NONE) { - unsigned char const magic[] = { 0x00, 0x01, 0x00, 0x00, 0x00 }; - unsigned char buffer[sizeof(magic)] = { 0xff, 0xff, 0xff, 0xff, 0xff }; - if ((sizeof(magic) != file.read(buffer, sizeof(magic))) || memcmp(buffer, magic, sizeof(magic))) - return TTF_Font_ptr(nullptr, &TTF_CloseFont); + unsigned char const ttf_magic[] = { 0x00, 0x01, 0x00, 0x00, 0x00 }; + unsigned char const ttc1_magic[] = { 0x74, 0x74, 0x63, 0x66, 0x00, 0x01, 0x00, 0x00 }; + unsigned char const ttc2_magic[] = { 0x74, 0x74, 0x63, 0x66, 0x00, 0x02, 0x00, 0x00 }; + unsigned char buffer[std::max({ sizeof(ttf_magic), sizeof(ttc1_magic), sizeof(ttc2_magic) })]; + auto const bytes_read = file.read(buffer, sizeof(buffer)); file.close(); + + if ((bytes_read >= sizeof(ttf_magic)) && !std::memcmp(buffer, ttf_magic, sizeof(ttf_magic))) + return TTF_Font_ptr(TTF_OpenFont(name.c_str(), POINT_SIZE), &TTF_CloseFont); + + if (((bytes_read >= sizeof(ttc1_magic)) && !std::memcmp(buffer, ttc1_magic, sizeof(ttc1_magic))) || + ((bytes_read >= sizeof(ttc2_magic)) && !std::memcmp(buffer, ttc2_magic, sizeof(ttc2_magic)))) + return TTF_Font_ptr(TTF_OpenFontIndex(name.c_str(), POINT_SIZE, index), &TTF_CloseFont); } - return TTF_Font_ptr(TTF_OpenFont(name.c_str(), POINT_SIZE), &TTF_CloseFont); + return TTF_Font_ptr(nullptr, &TTF_CloseFont); } bool osd_font_sdl::BDF_Check_Magic(std::string const &name) @@ -214,36 +226,24 @@ bool osd_font_sdl::BDF_Check_Magic(std::string const &name) return false; } -#ifndef SDLMAME_HAIKU -osd_font_sdl::TTF_Font_ptr osd_font_sdl::search_font_config(std::string const &name, bool bold, bool italic, bool underline, bool &bakedstyles) +#if !defined(SDLMAME_HAIKU) && !defined(SDLMAME_EMSCRIPTEN) +osd_font_sdl::TTF_Font_ptr osd_font_sdl::search_font_config(std::string const &family, std::string const &style, bool &bakedstyles) { TTF_Font_ptr font(nullptr, &TTF_CloseFont); FcConfig *const config = FcConfigGetCurrent(); std::unique_ptr<FcPattern, void (*)(FcPattern *)> pat(FcPatternCreate(), &FcPatternDestroy); std::unique_ptr<FcObjectSet, void (*)(FcObjectSet *)> os(FcObjectSetCreate(), &FcObjectSetDestroy); - FcPatternAddString(pat.get(), FC_FAMILY, (const FcChar8 *)name.c_str()); + FcPatternAddString(pat.get(), FC_FAMILY, (const FcChar8 *)family.c_str()); // try and get a font with the requested styles baked-in - if (bold) - { - if (italic) - FcPatternAddString(pat.get(), FC_STYLE, (const FcChar8 *)"Bold Italic"); - else - FcPatternAddString(pat.get(), FC_STYLE, (const FcChar8 *)"Bold"); - } - else if (italic) - { - FcPatternAddString(pat.get(), FC_STYLE, (const FcChar8 *)"Italic"); - } - else - { - FcPatternAddString(pat.get(), FC_STYLE, (const FcChar8 *)"Regular"); - } + if (!style.empty()) + FcPatternAddString(pat.get(), FC_STYLE, (const FcChar8 *)style.c_str()); FcPatternAddString(pat.get(), FC_FONTFORMAT, (const FcChar8 *)"TrueType"); FcObjectSetAdd(os.get(), FC_FILE); + FcObjectSetAdd(os.get(), FC_INDEX); std::unique_ptr<FcFontSet, void (*)(FcFontSet *)> fontset(FcFontList(config, pat.get(), os.get()), &FcFontSetDestroy); for (int i = 0; (i < fontset->nfont) && !font; i++) @@ -253,8 +253,9 @@ osd_font_sdl::TTF_Font_ptr osd_font_sdl::search_font_config(std::string const &n { osd_printf_verbose("Matching font: %s\n", val.u.s); - std::string match_name((const char*)val.u.s); - font = TTF_OpenFont_Magic(match_name, POINT_SIZE); + std::string const match_name((const char*)val.u.s); + long const index = ((FcPatternGet(fontset->fonts[i], FC_INDEX, 0, &val) == FcResultMatch) && (val.type == FcTypeInteger)) ? val.u.i : 0; + font = TTF_OpenFont_Magic(match_name, POINT_SIZE, index); if (font) bakedstyles = true; @@ -262,12 +263,11 @@ osd_font_sdl::TTF_Font_ptr osd_font_sdl::search_font_config(std::string const &n } // didn't get a font above? try again with no baked-in styles - if (!font) + // note that this simply returns the first match for the family name, which could be regular if you're lucky, but it could be bold oblique or something + if (!font && !style.empty()) { pat.reset(FcPatternCreate()); - FcPatternAddString(pat.get(), FC_FAMILY, (const FcChar8 *)name.c_str()); - //Quite a lot of fonts don't have a "Regular" font type attribute - //FcPatternAddString(pat.get(), FC_STYLE, (const FcChar8 *)"Regular"); + FcPatternAddString(pat.get(), FC_FAMILY, (const FcChar8 *)family.c_str()); FcPatternAddString(pat.get(), FC_FONTFORMAT, (const FcChar8 *)"TrueType"); fontset.reset(FcFontList(config, pat.get(), os.get())); @@ -278,8 +278,12 @@ osd_font_sdl::TTF_Font_ptr osd_font_sdl::search_font_config(std::string const &n { osd_printf_verbose("Matching unstyled font: %s\n", val.u.s); - std::string const match_name((const char *)val.u.s); - font = TTF_OpenFont_Magic(match_name, POINT_SIZE); + std::string const match_name((const char*)val.u.s); + long const index = ((FcPatternGet(fontset->fonts[i], FC_INDEX, 0, &val) == FcResultMatch) && (val.type == FcTypeInteger)) ? val.u.i : 0; + font = TTF_OpenFont_Magic(match_name, POINT_SIZE, index); + + if (font) + bakedstyles = false; } } } @@ -296,12 +300,12 @@ public: { } - osd_font::ptr font_alloc() + osd_font::ptr font_alloc() override { return std::make_unique<osd_font_sdl>(); } - virtual int init(const osd_options &options) + virtual int init(const osd_options &options) override { if (TTF_Init() == -1) { @@ -311,7 +315,7 @@ public: return 0; } - virtual void exit() + virtual void exit() override { TTF_Quit(); } @@ -326,6 +330,7 @@ bool font_sdl::get_font_families(std::string const &font_path, std::vector<std:: // TODO: enumerate TTF files in font path, since we can load them, too +#if !defined(SDLMAME_HAIKU) && !defined(SDLMAME_EMSCRIPTEN) FcConfig *const config = FcConfigGetCurrent(); std::unique_ptr<FcPattern, void (*)(FcPattern *)> pat(FcPatternCreate(), &FcPatternDestroy); FcPatternAddString(pat.get(), FC_FONTFORMAT, (const FcChar8 *)"TrueType"); @@ -333,6 +338,7 @@ bool font_sdl::get_font_families(std::string const &font_path, std::vector<std:: std::unique_ptr<FcObjectSet, void (*)(FcObjectSet *)> os(FcObjectSetCreate(), &FcObjectSetDestroy); FcObjectSetAdd(os.get(), FC_FAMILY); FcObjectSetAdd(os.get(), FC_FILE); + FcObjectSetAdd(os.get(), FC_STYLE); std::unique_ptr<FcFontSet, void (*)(FcFontSet *)> fontset(FcFontList(config, pat.get(), os.get()), &FcFontSetDestroy); for (int i = 0; (i < fontset->nfont); i++) @@ -345,18 +351,30 @@ bool font_sdl::get_font_families(std::string const &font_path, std::vector<std:: { auto const compare_fonts = [](std::pair<std::string, std::string> const &a, std::pair<std::string, std::string> const &b) -> bool { - int const first = core_stricmp(a.first.c_str(), b.first.c_str()); - if (first < 0) return true; - else if (first > 0) return false; - else return core_stricmp(b.second.c_str(), b.second.c_str()) < 0; + int const second = core_stricmp(a.second.c_str(), b.second.c_str()); + if (second < 0) return true; + else if (second > 0) return false; + else return core_stricmp(b.first.c_str(), b.first.c_str()) < 0; }; - std::pair<std::string, std::string> font((const char *)val.u.s, (const char *)val.u.s); + std::string config((const char *)val.u.s); + std::string display(config); + if ((FcPatternGet(fontset->fonts[i], FC_STYLE, 0, &val) == FcResultMatch) && (val.type == FcTypeString)) + { + config.push_back('|'); + config.append((const char *)val.u.s); + display.push_back(' '); + display.append((const char *)val.u.s); + } + std::pair<std::string, std::string> font(std::move(config), std::move(display)); auto const pos = std::lower_bound(result.begin(), result.end(), font, compare_fonts); if ((result.end() == pos) || (pos->first != font.first)) result.emplace(pos, std::move(font)); } } return true; +#else + return false; +#endif } #else /* SDLMAME_UNIX */ diff --git a/src/osd/modules/lib/osdlib_unix.cpp b/src/osd/modules/lib/osdlib_unix.cpp index 9b2721a62cf..fd60db54ba9 100644 --- a/src/osd/modules/lib/osdlib_unix.cpp +++ b/src/osd/modules/lib/osdlib_unix.cpp @@ -14,10 +14,6 @@ #include <sys/types.h> #include <signal.h> -#ifdef SDLMAME_EMSCRIPTEN -#include <emscripten.h> -#endif - // MAME headers #include "osdcore.h" #include "osdlib.h" |