summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2022-02-13 19:47:33 +1100
committer Vas Crabb <vas@vastheman.com>2022-02-13 19:47:33 +1100
commit2ad2ea02de2abac0370581bfd87b45e8465c4105 (patch)
tree9f6b7f6d7d292feadab95b0f3a45cd236f1b6643
parentce90ea36bcdd8ef72eb5cf62af64d268a5311a63 (diff)
vegas.cpp: Cleanup:
* Combine DUART interrupts. * Disabled SIO logging that had been left on. * Added system LED output and added it to sf0249 layout (hidden by default).
-rw-r--r--src/emu/debug/points.cpp4
-rw-r--r--src/frontend/mame/luaengine_mem.cpp81
-rw-r--r--src/mame/drivers/vegas.cpp73
-rw-r--r--src/mame/layout/sf2049.lay13
4 files changed, 104 insertions, 67 deletions
diff --git a/src/emu/debug/points.cpp b/src/emu/debug/points.cpp
index 418dc7647aa..a19f0ab5619 100644
--- a/src/emu/debug/points.cpp
+++ b/src/emu/debug/points.cpp
@@ -254,8 +254,8 @@ void debug_watchpoint::install(read_or_write mode)
[this, mask](offs_t offset, u16 &data, u16 mem_mask) {
if (mem_mask & mask)
triggered(read_or_write::WRITE, offset, data, mem_mask);
- },
- &m_phw);
+ },
+ &m_phw);
}
break;
diff --git a/src/frontend/mame/luaengine_mem.cpp b/src/frontend/mame/luaengine_mem.cpp
index 8ad5d6300bb..f22d23b0961 100644
--- a/src/frontend/mame/luaengine_mem.cpp
+++ b/src/frontend/mame/luaengine_mem.cpp
@@ -238,7 +238,15 @@ public:
void remove()
{
++m_installing;
- m_handler.remove();
+ try
+ {
+ m_handler.remove();
+ }
+ catch (...)
+ {
+ --m_installing;
+ throw;
+ }
--m_installing;
}
@@ -249,41 +257,48 @@ private:
if (m_installing)
return;
++m_installing;
- m_handler.remove();
+ try
+ {
+ m_handler.remove();
- switch (m_mode)
+ switch (m_mode)
+ {
+ case read_or_write::READ:
+ m_handler = m_space.install_read_tap(
+ m_start,
+ m_end,
+ m_name,
+ [this] (offs_t offset, T &data, T mem_mask)
+ {
+ auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
+ if (result)
+ data = *result;
+ },
+ &m_handler);
+ break;
+ case read_or_write::WRITE:
+ m_handler = m_space.install_write_tap(
+ m_start,
+ m_end,
+ m_name,
+ [this] (offs_t offset, T &data, T mem_mask)
+ {
+ auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
+ if (result)
+ data = *result;
+ },
+ &m_handler);
+ break;
+ case read_or_write::READWRITE:
+ // won't ever get here, but compilers complain about unhandled enum value
+ break;
+ }
+ }
+ catch (...)
{
- case read_or_write::READ:
- m_handler = m_space.install_read_tap(
- m_start,
- m_end,
- m_name,
- [this] (offs_t offset, T &data, T mem_mask)
- {
- auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
- if (result)
- data = *result;
- },
- &m_handler);
- break;
- case read_or_write::WRITE:
- m_handler = m_space.install_write_tap(
- m_start,
- m_end,
- m_name,
- [this] (offs_t offset, T &data, T mem_mask)
- {
- auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >();
- if (result)
- data = *result;
- },
- &m_handler);
- break;
- case read_or_write::READWRITE:
- // won't ever get here, but compilers complain about unhandled enum value
- break;
+ --m_installing;
+ throw;
}
-
--m_installing;
};
diff --git a/src/mame/drivers/vegas.cpp b/src/mame/drivers/vegas.cpp
index 29452e7bdce..c8fe99f630d 100644
--- a/src/mame/drivers/vegas.cpp
+++ b/src/mame/drivers/vegas.cpp
@@ -272,6 +272,7 @@
**************************************************************************/
#include "emu.h"
+
#include "audio/dcs.h"
#include "bus/ata/idehd.h"
@@ -279,14 +280,16 @@
#include "cpu/adsp2100/adsp2100.h"
#include "cpu/mips/mips3.h"
#include "machine/idectrl.h"
+#include "machine/input_merger.h"
#include "machine/ins8250.h"
#include "machine/midwayic.h"
+#include "machine/pci-ide.h"
+#include "machine/pci.h"
#include "machine/smc91c9x.h"
#include "machine/timekpr.h"
-#include "machine/pci.h"
#include "machine/vrc5074.h"
-#include "machine/pci-ide.h"
#include "video/voodoo_pci.h"
+
#include "screen.h"
#include "sf2049.lh"
@@ -301,7 +304,7 @@ namespace {
*************************************/
#define LOG_TIMEKEEPER (0)
-#define LOG_SIO (1)
+#define LOG_SIO (0)
/*************************************
*
@@ -334,6 +337,7 @@ public:
m_io_gearshift(*this, "GEAR"),
m_io_system(*this, "SYSTEM"),
m_io_dips(*this, "DIPS"),
+ m_system_led(*this, "system_led"),
m_wheel_driver(*this, "wheel"),
m_lamps(*this, "lamp%u", 0U),
m_a2d_shift(0)
@@ -405,6 +409,7 @@ private:
optional_ioport m_io_gearshift;
optional_ioport m_io_system;
optional_ioport m_io_dips;
+ output_finder<> m_system_led;
output_finder<1> m_wheel_driver;
output_finder<16> m_lamps;
@@ -480,6 +485,7 @@ void vegas_state::machine_start()
/* set the fastest DRC options, but strict verification */
m_maincpu->mips3drc_set_options(MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
+ m_system_led.resolve();
m_wheel_driver.resolve();
m_lamps.resolve();
@@ -873,34 +879,35 @@ void vegas_state::cpu_io_w(offs_t offset, uint8_t data)
switch (offset) {
case 0:
{
- char digit = 'U';
- switch (data & 0xff) {
- case 0xc0: digit = '0'; break;
- case 0xf9: digit = '1'; break;
- case 0xa4: digit = '2'; break;
- case 0xb0: digit = '3'; break;
- case 0x99: digit = '4'; break;
- case 0x92: digit = '5'; break;
- case 0x82: digit = '6'; break;
- case 0xf8: digit = '7'; break;
- case 0x80: digit = '8'; break;
- case 0x90: digit = '9'; break;
- case 0x88: digit = 'A'; break;
- case 0x83: digit = 'B'; break;
- case 0xc6: digit = 'C'; break;
- case 0xa7: digit = 'c'; break;
- case 0xa1: digit = 'D'; break;
- case 0x86: digit = 'E'; break;
- case 0x87: digit = 'F'; break;
- case 0x7f: digit = '.'; break;
- case 0xf7: digit = '_'; break;
- case 0xbf: digit = '|'; break;
- case 0xfe: digit = '-'; break;
- case 0xff: digit = 'Z'; break;
- }
+ m_system_led = ~data & 0xff;
if (LOG_SIO) {
- popmessage("System LED: %C", digit);
- //logerror("%s: cpu_io_w System LED offset %X = %02X '%c'\n", machine().describe_context(), offset, data, digit);
+ char digit = 'U';
+ switch (data & 0xff) {
+ case 0xc0: digit = '0'; break;
+ case 0xf9: digit = '1'; break;
+ case 0xa4: digit = '2'; break;
+ case 0xb0: digit = '3'; break;
+ case 0x99: digit = '4'; break;
+ case 0x92: digit = '5'; break;
+ case 0x82: digit = '6'; break;
+ case 0xf8: digit = '7'; break;
+ case 0x80: digit = '8'; break;
+ case 0x90: digit = '9'; break;
+ case 0x88: digit = 'A'; break;
+ case 0x83: digit = 'B'; break;
+ case 0xc6: digit = 'C'; break;
+ case 0xa7: digit = 'c'; break;
+ case 0xa1: digit = 'D'; break;
+ case 0x86: digit = 'E'; break;
+ case 0x87: digit = 'F'; break;
+ case 0x7f: digit = '.'; break;
+ case 0xf7: digit = '_'; break;
+ case 0xbf: digit = '|'; break;
+ case 0xfe: digit = '-'; break;
+ case 0xff: digit = 'Z'; break;
+ }
+ //popmessage("System LED: %C", digit);
+ logerror("%s: cpu_io_w System LED offset %X = %02X '%c'\n", machine().describe_context(), offset, data, digit);
}
}
break;
@@ -2006,17 +2013,19 @@ void vegas_state::denver(machine_config &config)
subdevice<generic_voodoo_device>(PCI_ID_VIDEO":voodoo")->vblank_callback().set(FUNC(vegas_state::vblank_assert));
// TL16C552 UART
+ INPUT_MERGER_ANY_HIGH(config, "duart_irq").output_handler().set(FUNC(vegas_state::duart_irq_cb));
+
NS16550(config, m_uart1, XTAL(1'843'200));
m_uart1->out_tx_callback().set("ttys01", FUNC(rs232_port_device::write_txd));
m_uart1->out_dtr_callback().set("ttys01", FUNC(rs232_port_device::write_dtr));
m_uart1->out_rts_callback().set("ttys01", FUNC(rs232_port_device::write_rts));
- m_uart1->out_int_callback().set(FUNC(vegas_state::duart_irq_cb));
+ m_uart1->out_int_callback().set("duart_irq", FUNC(input_merger_device::in_w<0>));
NS16550(config, m_uart2, XTAL(1'843'200));
m_uart2->out_tx_callback().set("ttys02", FUNC(rs232_port_device::write_txd));
m_uart2->out_dtr_callback().set("ttys02", FUNC(rs232_port_device::write_dtr));
m_uart2->out_rts_callback().set("ttys02", FUNC(rs232_port_device::write_rts));
- m_uart2->out_int_callback().set(FUNC(vegas_state::duart_irq_cb));
+ m_uart2->out_int_callback().set("duart_irq", FUNC(input_merger_device::in_w<1>));
rs232_port_device &ttys01(RS232_PORT(config, "ttys01", 0));
ttys01.rxd_handler().set(m_uart1, FUNC(ins8250_uart_device::rx_w));
diff --git a/src/mame/layout/sf2049.lay b/src/mame/layout/sf2049.lay
index f45864627bf..c3d1ac33f04 100644
--- a/src/mame/layout/sf2049.lay
+++ b/src/mame/layout/sf2049.lay
@@ -3,6 +3,12 @@
license:CC0
-->
<mamelayout version="2">
+ <element name="sysled" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.0" blue="0.0" />
+ </led7seg>
+ </element>
+
<element name="abort" defstate="0">
<disk state="0">
<bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
@@ -135,5 +141,12 @@ license:CC0
<element name="lamp8" ref="leader">
<bounds x="1.75" y="3.1" width="0.5" height="0.23" />
</element>
+
+ <collection name="System LED" visible="no">
+ <element name="system_led" ref="sysled">
+ <bounds x="1.3" y="3.1" width="0.2" height="0.3" />
+ </element>
+ </collection>
</view>
+
</mamelayout>