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).
This commit is contained in:
Vas Crabb 2022-02-13 19:47:33 +11:00
parent ce90ea36bc
commit 2ad2ea02de
4 changed files with 105 additions and 68 deletions

View File

@ -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;

View File

@ -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();
switch (m_mode)
try
{
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_handler.remove();
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 (...)
{
--m_installing;
throw;
}
--m_installing;
};

View File

@ -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));

View File

@ -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>