mirror of
https://github.com/holub/mame
synced 2025-05-29 09:03:08 +03:00
ns32kdb: additional firmware [Vince Ibeachum]
* serial diagnostic support * corrected timer clock
This commit is contained in:
parent
5e5a969eb8
commit
5c253595c3
@ -11,7 +11,6 @@
|
|||||||
* - clock/timer routing
|
* - clock/timer routing
|
||||||
* - cassette interface
|
* - cassette interface
|
||||||
* - nmi/reset switches, layout
|
* - nmi/reset switches, layout
|
||||||
* - alternative firmware
|
|
||||||
* - multibus interface
|
* - multibus interface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -30,6 +29,7 @@
|
|||||||
#include "machine/pit8253.h"
|
#include "machine/pit8253.h"
|
||||||
|
|
||||||
#include "machine/clock.h"
|
#include "machine/clock.h"
|
||||||
|
#include "machine/74157.h"
|
||||||
|
|
||||||
// busses and connectors
|
// busses and connectors
|
||||||
#include "bus/rs232/rs232.h"
|
#include "bus/rs232/rs232.h"
|
||||||
@ -48,9 +48,10 @@ public:
|
|||||||
, m_fpu(*this, "fpu")
|
, m_fpu(*this, "fpu")
|
||||||
, m_mmu(*this, "mmu")
|
, m_mmu(*this, "mmu")
|
||||||
, m_icu(*this, "icu")
|
, m_icu(*this, "icu")
|
||||||
, m_usart(*this, "usart%u", 0U)
|
, m_pci(*this, "pci%u", 0U)
|
||||||
, m_ppi(*this, "ppi")
|
, m_ppi(*this, "ppi")
|
||||||
, m_pit(*this, "pit")
|
, m_pit(*this, "pit")
|
||||||
|
, m_sdm(*this, "sdm%u", 0U)
|
||||||
, m_cfg(*this, "S3")
|
, m_cfg(*this, "S3")
|
||||||
, m_led(*this, "DS%u", 0U)
|
, m_led(*this, "DS%u", 0U)
|
||||||
{
|
{
|
||||||
@ -74,10 +75,13 @@ protected:
|
|||||||
required_device<ns32082_device> m_mmu;
|
required_device<ns32082_device> m_mmu;
|
||||||
required_device<ns32202_device> m_icu;
|
required_device<ns32202_device> m_icu;
|
||||||
|
|
||||||
required_device_array<i8251_device, 2> m_usart;
|
required_device_array<i8251_device, 2> m_pci;
|
||||||
required_device<i8255_device> m_ppi;
|
required_device<i8255_device> m_ppi;
|
||||||
required_device<pit8253_device> m_pit;
|
required_device<pit8253_device> m_pit;
|
||||||
|
|
||||||
|
// serial port diagnostic multiplexers
|
||||||
|
required_device_array<ls157_device, 2> m_sdm;
|
||||||
|
|
||||||
required_ioport m_cfg;
|
required_ioport m_cfg;
|
||||||
output_finder<4> m_led;
|
output_finder<4> m_led;
|
||||||
};
|
};
|
||||||
@ -93,21 +97,21 @@ void ns32kdb_state::machine_reset()
|
|||||||
|
|
||||||
template <unsigned ST> void ns32kdb_state::cpu_map(address_map &map)
|
template <unsigned ST> void ns32kdb_state::cpu_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x000000, 0x001fff).rom().region("eprom", 0);
|
map(0x000000, 0x007fff).rom().region("eprom", 0);
|
||||||
|
|
||||||
map(0x008000, 0x027fff).ram();
|
map(0x008000, 0x027fff).ram();
|
||||||
//map(0x028000, 0x7fffff); // off-board RAM
|
//map(0x028000, 0x7fffff); // off-board RAM
|
||||||
//map(0x800000, 0x9fffff); // off-board I/O ports
|
//map(0x800000, 0x9fffff); // off-board I/O ports
|
||||||
|
|
||||||
map(0xc00000, 0xc00003).rw(m_usart[0], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
|
map(0xc00000, 0xc00003).rw(m_pci[0], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
|
||||||
|
|
||||||
map(0xc00020, 0xc00027).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
|
map(0xc00020, 0xc00027).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
|
||||||
|
|
||||||
map(0xc00030, 0xc00030).lr8([this]() { return m_cfg->read(); }, "cfg_r");
|
map(0xc00030, 0xc00030).lr8([this]() { return m_cfg->read(); }, "cfg_r");
|
||||||
map(0xc00032, 0xc00037).lw8([this](offs_t offset, u8 data) { m_led[offset ^ 3] = data; }, "led_w").umask16(0x00ff);
|
map(0xc00032, 0xc00037).lw8([this](offs_t offset, u8 data) { m_led[offset ^ 3] = data; }, "led_w").umask16(0x00ff);
|
||||||
//map(0xc00038, 0xc00038); // TODO: serial port diagnostic mode
|
map(0xc00038, 0xc00038).lw8([this](u8 data) { m_sdm[0]->select_w(data); m_sdm[1]->select_w(data); }, "sdm_w");
|
||||||
|
|
||||||
map(0xc00040, 0xc00043).rw(m_usart[1], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
|
map(0xc00040, 0xc00043).rw(m_pci[1], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
|
||||||
|
|
||||||
map(0xc00050, 0xc00057).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
|
map(0xc00050, 0xc00057).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
|
||||||
|
|
||||||
@ -174,41 +178,66 @@ void ns32kdb_state::db32016(machine_config &config)
|
|||||||
I8255(config, m_ppi);
|
I8255(config, m_ppi);
|
||||||
|
|
||||||
PIT8253(config, m_pit);
|
PIT8253(config, m_pit);
|
||||||
m_pit->set_clk<1>(18.432_MHz_XTAL / 150);
|
m_pit->set_clk<0>(18.432_MHz_XTAL / 150);
|
||||||
m_pit->set_clk<1>(18.432_MHz_XTAL / 15);
|
m_pit->set_clk<1>(18.432_MHz_XTAL / 15);
|
||||||
m_pit->set_clk<2>(18.432_MHz_XTAL / 15);
|
m_pit->set_clk<2>(18.432_MHz_XTAL / 15);
|
||||||
|
|
||||||
// HACK: serial clock should configurable from ICU/pit
|
// HACK: serial clock should be configurable from ICU/pit
|
||||||
clock_device &clk(CLOCK(config, "clock", 18.432_MHz_XTAL / 120));
|
clock_device &clk(CLOCK(config, "clock", 18.432_MHz_XTAL / 120));
|
||||||
clk.signal_handler().set(m_usart[0], FUNC(i8251_device::write_txc));
|
clk.signal_handler().set(m_pci[0], FUNC(i8251_device::write_txc));
|
||||||
clk.signal_handler().append(m_usart[0], FUNC(i8251_device::write_rxc));
|
clk.signal_handler().append(m_pci[0], FUNC(i8251_device::write_rxc));
|
||||||
|
clk.signal_handler().append(m_pci[1], FUNC(i8251_device::write_txc));
|
||||||
|
clk.signal_handler().append(m_pci[1], FUNC(i8251_device::write_rxc));
|
||||||
|
|
||||||
// serial port 0 is DCE
|
// serial port 0 is DCE
|
||||||
I8251(config, m_usart[0], 18.432_MHz_XTAL / 10);
|
I8251(config, m_pci[0], 18.432_MHz_XTAL / 10);
|
||||||
rs232_port_device &port0(RS232_PORT(config, "port0", default_rs232_devices, "terminal"));
|
rs232_port_device &j2(RS232_PORT(config, "j2", default_rs232_devices, "terminal"));
|
||||||
m_usart[0]->txd_handler().set(port0, FUNC(rs232_port_device::write_txd));
|
LS157(config, m_sdm[0]);
|
||||||
m_usart[0]->rts_handler().set(port0, FUNC(rs232_port_device::write_rts));
|
m_pci[0]->rts_handler().set(j2, FUNC(rs232_port_device::write_rts));
|
||||||
m_usart[0]->dtr_handler().set(port0, FUNC(rs232_port_device::write_dtr));
|
m_pci[0]->rts_handler().append(m_sdm[0], FUNC(ls157_device::b0_w));
|
||||||
port0.rxd_handler().set(m_usart[0], FUNC(i8251_device::write_rxd));
|
m_pci[0]->txd_handler().set(j2, FUNC(rs232_port_device::write_txd));
|
||||||
port0.cts_handler().set(m_usart[0], FUNC(i8251_device::write_cts));
|
m_pci[0]->txd_handler().append(m_sdm[0], FUNC(ls157_device::b1_w));
|
||||||
port0.dsr_handler().set(m_usart[0], FUNC(i8251_device::write_dsr));
|
m_pci[0]->dtr_handler().set(j2, FUNC(rs232_port_device::write_dtr));
|
||||||
|
|
||||||
|
j2.dsr_handler().set(m_pci[0], FUNC(i8251_device::write_dsr));
|
||||||
|
j2.cts_handler().set(m_sdm[0], FUNC(ls157_device::a0_w));
|
||||||
|
j2.rxd_handler().set(m_sdm[0], FUNC(ls157_device::a1_w));
|
||||||
|
|
||||||
|
m_sdm[0]->out_callback().set(m_pci[0], FUNC(i8251_device::write_cts)).bit(0);
|
||||||
|
m_sdm[0]->out_callback().append(m_pci[0], FUNC(i8251_device::write_rxd)).bit(1);
|
||||||
|
//m_sdm[0]->out_callback().append(m_pci[0], FUNC(i8251_device::write_txc)).bit(2);
|
||||||
|
//m_sdm[0]->out_callback().append(m_pci[0], FUNC(i8251_device::write_rxc)).bit(3);
|
||||||
|
|
||||||
// serial port 1 is DTE
|
// serial port 1 is DTE
|
||||||
I8251(config, m_usart[1], 18.432_MHz_XTAL / 10);
|
I8251(config, m_pci[1], 18.432_MHz_XTAL / 10);
|
||||||
rs232_port_device &port1(RS232_PORT(config, "port1", default_rs232_devices, nullptr));
|
rs232_port_device &j3(RS232_PORT(config, "j3", default_rs232_devices, nullptr));
|
||||||
m_usart[1]->txd_handler().set(port1, FUNC(rs232_port_device::write_txd));
|
LS157(config, m_sdm[1]);
|
||||||
m_usart[1]->rts_handler().set(port1, FUNC(rs232_port_device::write_rts));
|
m_pci[1]->rts_handler().set(j3, FUNC(rs232_port_device::write_rts));
|
||||||
m_usart[1]->dtr_handler().set(port1, FUNC(rs232_port_device::write_dtr));
|
m_pci[1]->rts_handler().append(m_sdm[1], FUNC(ls157_device::b0_w));
|
||||||
port1.rxd_handler().set(m_usart[1], FUNC(i8251_device::write_rxd));
|
m_pci[1]->txd_handler().set(j3, FUNC(rs232_port_device::write_txd));
|
||||||
port1.cts_handler().set(m_usart[1], FUNC(i8251_device::write_cts));
|
m_pci[1]->txd_handler().append(m_sdm[1], FUNC(ls157_device::b1_w));
|
||||||
port1.dsr_handler().set(m_usart[1], FUNC(i8251_device::write_dsr));
|
m_pci[1]->dtr_handler().set(j3, FUNC(rs232_port_device::write_dtr));
|
||||||
|
|
||||||
|
j3.cts_handler().set(m_sdm[1], FUNC(ls157_device::a0_w));
|
||||||
|
j3.rxd_handler().set(m_sdm[1], FUNC(ls157_device::a1_w));
|
||||||
|
|
||||||
|
m_sdm[1]->out_callback().set(m_pci[1], FUNC(i8251_device::write_cts)).bit(0);
|
||||||
|
m_sdm[1]->out_callback().append(m_pci[1], FUNC(i8251_device::write_rxd)).bit(1);
|
||||||
|
//m_sdm[1]->out_callback().append(m_pci[1], FUNC(i8251_device::write_txc)).bit(2);
|
||||||
|
//m_sdm[1]->out_callback().append(m_pci[1], FUNC(i8251_device::write_rxc)).bit(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
ROM_START(db32016)
|
ROM_START(db32016)
|
||||||
ROM_REGION16_LE(0x2000, "eprom", 0)
|
ROM_REGION16_LE(0x8000, "eprom", 0)
|
||||||
ROM_SYSTEM_BIOS(0, "1.1", "National DB16000 Monitor (Rev. 1.1) (tsang) Thu Sep 22 17:16:02 PDT 1983")
|
|
||||||
ROMX_LOAD("u15.bin", 0x0001, 0x1000, CRC(a9955f20) SHA1(2b9780f68c33ee72741472cde7104fb69baabc40), ROM_BIOS(0) | ROM_SKIP(1))
|
ROM_SYSTEM_BIOS(0, "tds16", "Rev 2.00 24-NOV-83 DB32016 Version")
|
||||||
ROMX_LOAD("u18.bin", 0x0000, 0x1000, CRC(05d0c876) SHA1(3e94589bbf30f41b0a704473ad15cffa08997f37), ROM_BIOS(0) | ROM_SKIP(1))
|
ROMX_LOAD("ns-007346-0025.u18", 0x0000, 0x4000, CRC(3d36eff5) SHA1(0a935e6299934a597e2ac24775cb1f082a38c8b3), ROM_BIOS(0) | ROM_SKIP(1))
|
||||||
|
ROMX_LOAD("ns-007346-0018.u15", 0x0001, 0x4000, CRC(58ea003c) SHA1(62d81ff35c3eba8efa60d80326eb8264904676ec), ROM_BIOS(0) | ROM_SKIP(1))
|
||||||
|
|
||||||
|
ROM_SYSTEM_BIOS(1, "1.1", "National DB16000 Monitor (Rev. 1.1) (tsang) Thu Sep 22 17:16:02 PDT 1983")
|
||||||
|
ROMX_FILL(0, 0x8000, 0, ROM_BIOS(1))
|
||||||
|
ROMX_LOAD("u18.bin", 0x0000, 0x1000, CRC(05d0c876) SHA1(3e94589bbf30f41b0a704473ad15cffa08997f37), ROM_BIOS(1) | ROM_SKIP(1))
|
||||||
|
ROMX_LOAD("u15.bin", 0x0001, 0x1000, CRC(a9955f20) SHA1(2b9780f68c33ee72741472cde7104fb69baabc40), ROM_BIOS(1) | ROM_SKIP(1))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user