summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa')
-rw-r--r--src/devices/bus/isa/3c503.cpp13
-rw-r--r--src/devices/bus/isa/3c505.cpp4
-rw-r--r--src/devices/bus/isa/adlib.cpp14
-rw-r--r--src/devices/bus/isa/aga.cpp25
-rw-r--r--src/devices/bus/isa/aha1542.cpp200
-rw-r--r--src/devices/bus/isa/aha1542.h54
-rw-r--r--src/devices/bus/isa/aha1542b.cpp126
-rw-r--r--src/devices/bus/isa/aha1542b.h57
-rw-r--r--src/devices/bus/isa/aha1542c.cpp323
-rw-r--r--src/devices/bus/isa/aha1542c.h95
-rw-r--r--src/devices/bus/isa/aha174x.cpp160
-rw-r--r--src/devices/bus/isa/aha174x.h61
-rw-r--r--src/devices/bus/isa/bt54x.cpp201
-rw-r--r--src/devices/bus/isa/bt54x.h74
-rw-r--r--src/devices/bus/isa/cga.cpp43
-rw-r--r--src/devices/bus/isa/cl_sh260.cpp93
-rw-r--r--src/devices/bus/isa/cl_sh260.h64
-rw-r--r--src/devices/bus/isa/dcb.cpp70
-rw-r--r--src/devices/bus/isa/dcb.h43
-rw-r--r--src/devices/bus/isa/dectalk.cpp1
-rw-r--r--src/devices/bus/isa/ega.cpp45
-rw-r--r--src/devices/bus/isa/ega.h2
-rw-r--r--src/devices/bus/isa/eis_sad8852.cpp11
-rw-r--r--src/devices/bus/isa/fdc.cpp5
-rw-r--r--src/devices/bus/isa/fdc.h1
-rw-r--r--src/devices/bus/isa/finalchs.cpp9
-rw-r--r--src/devices/bus/isa/gus.cpp22
-rw-r--r--src/devices/bus/isa/gus.h43
-rw-r--r--src/devices/bus/isa/hdc.cpp32
-rw-r--r--src/devices/bus/isa/hdc.h9
-rw-r--r--src/devices/bus/isa/ibm_mfc.cpp17
-rw-r--r--src/devices/bus/isa/isa.cpp92
-rw-r--r--src/devices/bus/isa/isa.h26
-rw-r--r--src/devices/bus/isa/isa_cards.cpp23
-rw-r--r--src/devices/bus/isa/lbaenhancer.cpp7
-rw-r--r--src/devices/bus/isa/mc1502_fdc.cpp12
-rw-r--r--src/devices/bus/isa/mda.cpp57
-rw-r--r--src/devices/bus/isa/mufdc.cpp5
-rw-r--r--src/devices/bus/isa/mufdc.h1
-rw-r--r--src/devices/bus/isa/ne1000.cpp13
-rw-r--r--src/devices/bus/isa/ne2000.cpp13
-rw-r--r--src/devices/bus/isa/np600.cpp76
-rw-r--r--src/devices/bus/isa/np600.h39
-rw-r--r--src/devices/bus/isa/num9rev.cpp21
-rw-r--r--src/devices/bus/isa/omti8621.cpp5
-rw-r--r--src/devices/bus/isa/omti8621.h1
-rw-r--r--src/devices/bus/isa/p1_fdc.cpp15
-rw-r--r--src/devices/bus/isa/p1_hdc.cpp26
-rw-r--r--src/devices/bus/isa/p1_sound.cpp20
-rw-r--r--src/devices/bus/isa/pc1640_iga.cpp4
-rw-r--r--src/devices/bus/isa/pds.cpp7
-rw-r--r--src/devices/bus/isa/pgc.cpp33
-rw-r--r--src/devices/bus/isa/sb16.cpp6
-rw-r--r--src/devices/bus/isa/sblaster.cpp37
-rw-r--r--src/devices/bus/isa/sc499.cpp7
-rw-r--r--src/devices/bus/isa/ssi2001.cpp2
-rw-r--r--src/devices/bus/isa/stereo_fx.cpp5
-rw-r--r--src/devices/bus/isa/svga_cirrus.cpp28
-rw-r--r--src/devices/bus/isa/svga_s3.cpp56
-rw-r--r--src/devices/bus/isa/svga_trident.cpp16
-rw-r--r--src/devices/bus/isa/svga_tseng.cpp16
-rw-r--r--src/devices/bus/isa/vga.cpp16
-rw-r--r--src/devices/bus/isa/vga_ati.cpp53
-rw-r--r--src/devices/bus/isa/wd1007a.cpp7
-rw-r--r--src/devices/bus/isa/wdxt_gen.cpp10
-rw-r--r--src/devices/bus/isa/wdxt_gen.h1
66 files changed, 1949 insertions, 724 deletions
diff --git a/src/devices/bus/isa/3c503.cpp b/src/devices/bus/isa/3c503.cpp
index 424ce8bb082..34202e2246d 100644
--- a/src/devices/bus/isa/3c503.cpp
+++ b/src/devices/bus/isa/3c503.cpp
@@ -5,12 +5,13 @@
#define SADDR 0xcc000
-MACHINE_CONFIG_START(el2_3c503_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, el2_3c503_device, el2_3c503_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, el2_3c503_device, el2_3c503_mem_r))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, el2_3c503_device, el2_3c503_mem_w))
-MACHINE_CONFIG_END
+void el2_3c503_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(el2_3c503_device::el2_3c503_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(el2_3c503_device::el2_3c503_mem_r));
+ m_dp8390->mem_write_callback().set(FUNC(el2_3c503_device::el2_3c503_mem_w));
+}
DEFINE_DEVICE_TYPE(EL2_3C503, el2_3c503_device, "el2_3c503", "3C503 Network Adapter")
diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp
index 71548dcbdaa..37cd5ef346a 100644
--- a/src/devices/bus/isa/3c505.cpp
+++ b/src/devices/bus/isa/3c505.cpp
@@ -1644,7 +1644,9 @@ READ16_MEMBER(threecom3c505_device::read)
// omit excessive logging
if (data == last_data)
{
- uint32_t pc = space.device().state().pcbase();
+ // FIXME: space.device().state().pcbase() will crash mame with SIGSEGV (since mame0197)
+ uint32_t pc = 0; // space.device().state().pcbase();
+
if (pc == last_pc)
{
return data;
diff --git a/src/devices/bus/isa/adlib.cpp b/src/devices/bus/isa/adlib.cpp
index 814fdeaaf58..6a900b0e09d 100644
--- a/src/devices/bus/isa/adlib.cpp
+++ b/src/devices/bus/isa/adlib.cpp
@@ -20,7 +20,7 @@ READ8_MEMBER( isa8_adlib_device::ym3812_16_r )
uint8_t retVal = 0xff;
switch(offset)
{
- case 0 : retVal = m_ym3812->status_port_r( space, offset ); break;
+ case 0 : retVal = m_ym3812->status_port_r(); break;
}
return retVal;
}
@@ -29,8 +29,8 @@ WRITE8_MEMBER( isa8_adlib_device::ym3812_16_w )
{
switch(offset)
{
- case 0 : m_ym3812->control_port_w( space, offset, data ); break;
- case 1 : m_ym3812->write_port_w( space, offset, data ); break;
+ case 0 : m_ym3812->control_port_w(data); break;
+ case 1 : m_ym3812->write_port_w(data); break;
}
}
@@ -44,11 +44,11 @@ DEFINE_DEVICE_TYPE(ISA8_ADLIB, isa8_adlib_device, "isa_adlib", "Ad Lib Sound Car
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_adlib_device::device_add_mconfig)
+void isa8_adlib_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("ym3812", YM3812, ym3812_StdClock)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 3.00)
-MACHINE_CONFIG_END
+ YM3812(config, m_ym3812, ym3812_StdClock).add_route(ALL_OUTPUTS, "mono", 3.00);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/isa/aga.cpp b/src/devices/bus/isa/aga.cpp
index 9aa2810431b..e1c26328c44 100644
--- a/src/devices/bus/isa/aga.cpp
+++ b/src/devices/bus/isa/aga.cpp
@@ -273,12 +273,13 @@ MC6845_UPDATE_ROW( isa8_aga_device::aga_update_row )
}
-MACHINE_CONFIG_START(isa8_aga_device::device_add_mconfig)
- MCFG_SCREEN_ADD( AGA_SCREEN_NAME, RASTER )
- MCFG_SCREEN_RAW_PARAMS( XTAL(14'318'181),912,0,640,262,0,200 )
- MCFG_SCREEN_UPDATE_DEVICE( AGA_MC6845_NAME, mc6845_device, screen_update )
+void isa8_aga_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, AGA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(14'318'181), 912, 0, 640, 262, 0, 200);
+ screen.set_screen_update(AGA_MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", /* CGA_PALETTE_SETS * 16*/ 65536 )
+ PALETTE(config, m_palette).set_entries(/* CGA_PALETTE_SETS * 16*/ 65536);
MC6845(config, m_mc6845, XTAL(14'318'181)/8);
m_mc6845->set_screen(AGA_SCREEN_NAME);
@@ -287,7 +288,7 @@ MACHINE_CONFIG_START(isa8_aga_device::device_add_mconfig)
m_mc6845->set_update_row_callback(FUNC(isa8_aga_device::aga_update_row), this);
m_mc6845->out_hsync_callback().set(FUNC(isa8_aga_device::hsync_changed));
m_mc6845->out_vsync_callback().set(FUNC(isa8_aga_device::vsync_changed));
-MACHINE_CONFIG_END
+}
/*************************************
@@ -689,7 +690,7 @@ READ8_MEMBER ( isa8_aga_device::pc_aga_mda_r )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_mc6845->register_r(space, offset);
+ data = m_mc6845->register_r();
break;
case 10:
data = m_vsync | 0x08 | m_hsync;
@@ -706,10 +707,10 @@ WRITE8_MEMBER ( isa8_aga_device::pc_aga_mda_w )
switch( offset )
{
case 0: case 2: case 4: case 6:
- m_mc6845->address_w( space, offset, data );
+ m_mc6845->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_mc6845->register_w( space, offset, data );
+ m_mc6845->register_w(data);
break;
case 8:
m_mda_mode_control = data;
@@ -740,7 +741,7 @@ READ8_MEMBER ( isa8_aga_device::pc_aga_cga_r )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_mc6845->register_r( space, offset);
+ data = m_mc6845->register_r();
break;
case 10:
data = m_vsync | ( ( data & 0x40 ) >> 4 ) | m_hsync;
@@ -791,10 +792,10 @@ WRITE8_MEMBER (isa8_aga_device:: pc_aga_cga_w )
if ( m_mode == AGA_COLOR ) {
switch(offset) {
case 0: case 2: case 4: case 6:
- m_mc6845->address_w( space, offset, data );
+ m_mc6845->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_mc6845->register_w( space, offset, data );
+ m_mc6845->register_w(data);
break;
case 8:
m_cga_mode_control = data;
diff --git a/src/devices/bus/isa/aha1542.cpp b/src/devices/bus/isa/aha1542.cpp
deleted file mode 100644
index 8e260347eee..00000000000
--- a/src/devices/bus/isa/aha1542.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Darkstar
-/**********************************************************************
- *
- * Adaptec AHA-1542{,C,CF} SCSI Controller
- *
- **********************************************************************/
-
-/*
- PCB layout
- ----------
- Floppy SCSI
- +-----------+ +------------------+ +-
- +-----+-----------+-+------------------+--+
- | |
- | DIPSW DS1 |\
- | +-----+ | |
- | | | Y1 +---+ TRM TRM | |
- | | U3 | |U5 | |S|
- | U8 +-----+ +---+ |C|
- | +---+ +------+ +-------+ |S|
- | |U13| |U15 | Y2 | | |I|
- | +---+ +------+ | | | |
- | |U16 | |U17 | | |
- | +------+ +-------+ |/
- +-----------------------------------------+
- ||||||||| ||||||||||||||||||||||||| |
-
-
- DIPSW sw1 - sw8
- U3 Intel chip labelled "AHA-1542CF/552800-01 D/9346", probably FDC (82077)
- U5 Z84C0010VEC
- U8 EEPROM(?) labelled 545120A
- U13 CXK5864CM-10LL (64kbit SRAM)
- U15 M27C256B labelled "ADAPTEC INC/553801-00 C/MCODE 563D/(C) 1993"
- U16 M27C256B labelled "ADAPTEC INC/553601-00 C/BIOS C38D/(C) 1993"
- U17 AIC-7970Q
- Y1 XTAL SRX4054 93-38
- Y2 XTAL SRX4053 93-40
- TRM Dallas DS2107AS (SCSI termination)
- DS1 LED
-
-*/
-
-/*
- * The PCB has a couple of DIP switches:
- *
- * sw1 on enable termination
- * off software-controlled termination
- *
- * sw2 sw3 sw4 I/O Port
- * off off off 0x330 - 0x333 (default)
- * on off off 0x334 - 0x337
- * off on off 0x230 - 0x233
- * on on off 0x234 - 0x237
- * off off on 0x130 - 0x133
- * on off on 0x134 - 0x137
- * off on on reserved
- * on on on reserved
- *
- * sw5 on disable floppy interface
- * off enable floppy interface
- *
- * sw6 sw7 sw8 BIOS base address
- * off off off 0xdc000 (default)
- * on off off 0xd8000
- * off on off 0xd4000
- * on on off 0xd0000
- * off off on 0xcc000
- * on off on 0xc8000
- * off on on reserved
- * on on on BIOS disabled
- *
- * source: http://download.adaptec.com/pdfs/installation_guides/1540cfig.pdf
- */
-
-#include "emu.h"
-#include "aha1542.h"
-#include "cpu/z80/z80.h"
-
-// I/O Port interface
-// READ Port x+0: STATUS
-// WRITE Port x+0: CONTROL
-//
-// READ Port x+1: DATA
-// WRITE Port x+1: COMMAND
-//
-// READ Port x+2: INTERRUPT STATUS
-// WRITE Port x+2: (undefined?)
-//
-// R/W Port x+3: (undefined)
-
-// READ STATUS flags
-#define STAT_STST 0x80 // self-test in progress
-#define STAT_DIAGF 0x40 // internal diagnostic failure
-#define STAT_INIT 0x20 // mailbox initialization required
-#define STAT_IDLE 0x10 // HBA is idle
-#define STAT_CDFULL 0x08 // Command/Data output port is full
-#define STAT_DFULL 0x04 // Data input port is full
-#define STAT_INVCMD 0x01 // Invalid command
-
-// READ INTERRUPT STATUS flags
-#define INTR_ANY 0x80 // any interrupt
-#define INTR_SRCD 0x08 // SCSI reset detected
-#define INTR_HACC 0x04 // HA command complete
-#define INTR_MBOA 0x02 // MBO empty
-#define INTR_MBIF 0x01 // MBI full
-
-// WRITE CONTROL commands
-#define CTRL_HRST 0x80 // Hard reset
-#define CTRL_SRST 0x40 // Soft reset
-#define CTRL_IRST 0x20 // interrupt reset
-#define CTRL_SCRST 0x10 // SCSI bus reset
-
-// READ/WRITE DATA commands
-#define CMD_NOP 0x00 // No operation
-#define CMD_MBINIT 0x01 // mailbox initialization
-#define CMD_START_SCSI 0x02 // Start SCSI command
-#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.)
-#define CMD_INQUIRY 0x04 // Adapter inquiry
-#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt
-#define CMD_SELTIMEOUT 0x06 // Set SEL timeout
-#define CMD_BUSON_TIME 0x07 // set bus-On time
-#define CMD_BUSOFF_TIME 0x08 // set bus-off time
-#define CMD_DMASPEED 0x09 // set ISA DMA speed
-#define CMD_RETDEVS 0x0a // return installed devices
-#define CMD_RETCONF 0x0b // return configuration data
-#define CMD_TARGET 0x0c // set HBA to target mode
-#define CMD_RETSETUP 0x0d // return setup data
-#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e)
-
-// these are for 1541C only:
-#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD)
-#define CMD_EXTBIOS 0x28 // return extended BIOS information
-#define CMD_MBENABLE 0x29 // set mailbox interface enable
-
-DEFINE_DEVICE_TYPE(AHA1542, aha1542_device, "aha1542", "AHA1542 SCSI Controller")
-
-#define Z84C0010_TAG "u5"
-
-READ8_MEMBER( aha1542_device::aha1542_r )
-{
- logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset);
- return 0xff;
-}
-
-WRITE8_MEMBER( aha1542_device::aha1542_w )
-{
- logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data);
-}
-
-//-------------------------------------------------
-// ROM( aha1542 )
-//-------------------------------------------------
-
-ROM_START( aha1542 )
- ROM_REGION( 0x8000, "aha1542", 0 )
- ROM_LOAD( "553601-00.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0) ) /* Adaptec 1540CF/1542CF BIOS v2.01 */
-
- ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
- ROM_LOAD( "553801-00.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04) ) /* ADAPTEC, INC MCODE */
-ROM_END
-
-void aha1542_device::z84c0010_mem(address_map &map)
-{
- map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
- map(0x8000, 0x800f).noprw(); // something is mapped there
- map(0x9000, 0xafff).ram(); // 2kb RAM chip
- map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area
- map(0xb000, 0xb000).noprw(); // something?
-}
-
-const tiny_rom_entry *aha1542_device::device_rom_region() const
-{
- return ROM_NAME( aha1542 );
-}
-
-MACHINE_CONFIG_START(aha1542_device::device_add_mconfig)
- MCFG_DEVICE_ADD(Z84C0010_TAG, Z80, XTAL(12'000'000))
- MCFG_DEVICE_PROGRAM_MAP( z84c0010_mem )
-MACHINE_CONFIG_END
-
-aha1542_device::aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, AHA1542, tag, owner, clock),
- device_isa16_card_interface(mconfig, *this)
-{
-}
-
-void aha1542_device::device_start()
-{
- set_isa_device();
- m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
- m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542_device::aha1542_r ), this),
- write8_delegate(FUNC( aha1542_device::aha1542_w ), this) );
-}
-
-
-void aha1542_device::device_reset()
-{
-}
diff --git a/src/devices/bus/isa/aha1542.h b/src/devices/bus/isa/aha1542.h
deleted file mode 100644
index cc84c2ea55b..00000000000
--- a/src/devices/bus/isa/aha1542.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Darkstar
-/**********************************************************************
- *
- * Adaptec AHA-1542{,C,CF} SCSI Controller
- *
- **********************************************************************
-
-
-
- **********************************************************************/
-
-#ifndef MAME_BUS_AHA1542_H
-#define MAME_BUS_AHA1542_H
-
-#pragma once
-
-
-#include "isa.h"
-
-//*********************************************************************
-// TYPE DEFINITIONS
-//*********************************************************************
-
-// ====================> aha1542_device
-
-class aha1542_device : public device_t,
- public device_isa16_card_interface
-{
-public:
- static constexpr feature_type unemulated_features() { return feature::DISK; }
- // construction/destruction
- aha1542_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- DECLARE_READ8_MEMBER( aha1542_r );
- DECLARE_WRITE8_MEMBER( aha1542_w );
-
-protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
- // optional information overrides
- virtual const tiny_rom_entry *device_rom_region() const override;
- virtual void device_add_mconfig(machine_config &config) override;
-
-private:
- void z84c0010_mem(address_map &map);
-};
-
-// device type definition
-DECLARE_DEVICE_TYPE(AHA1542, aha1542_device)
-
-#endif // MAME_BUS_AHA1542_H
diff --git a/src/devices/bus/isa/aha1542b.cpp b/src/devices/bus/isa/aha1542b.cpp
new file mode 100644
index 00000000000..e0073cbbd68
--- /dev/null
+++ b/src/devices/bus/isa/aha1542b.cpp
@@ -0,0 +1,126 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+ The alternate BIOSes using port 334h instead of 330h are provided due
+ to certain MIDI cards requiring the 330h port.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "aha1542b.h"
+
+#include "cpu/i8085/i8085.h"
+#include "machine/aic6250.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_hd.h"
+
+
+DEFINE_DEVICE_TYPE(AHA1542A, aha1542a_device, "aha1542a", "AHA-1542A SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542B, aha1542b_device, "aha1542b", "AHA-1542B SCSI Controller")
+
+
+aha154x_device::aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_fdc(*this, "fdc")
+ , m_bios(*this, "bios")
+{
+}
+
+aha1542a_device::aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha154x_device(mconfig, AHA1542A, tag, owner, clock)
+{
+}
+
+aha1542b_device::aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha154x_device(mconfig, AHA1542B, tag, owner, clock)
+{
+}
+
+void aha154x_device::device_start()
+{
+}
+
+void aha154x_device::i8085_map(address_map &map)
+{
+ map(0x0000, 0x3fff).rom().region("mcode", 0);
+ map(0x8000, 0x800f).m("scsi:7:scsic", FUNC(aic6250_device::map));
+ map(0xe000, 0xe7ff).ram();
+}
+
+static void aha154x_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", AIC6250);
+}
+
+void aha154x_device::scsic_config(device_t *device)
+{
+ device->set_clock(20'000'000);
+ downcast<aic6250_device &>(*device).int_cb().set_inputline("^^localcpu", I8085_RST65_LINE);
+}
+
+void aha154x_device::device_add_mconfig(machine_config &config)
+{
+ i8085a_cpu_device &localcpu(I8085A(config, "localcpu", 10'000'000));
+ localcpu.set_addrmap(AS_PROGRAM, &aha154x_device::i8085_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha154x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha154x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+
+ROM_START(aha1542a)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD("b_9700.bin", 0x0000, 0x4000, CRC(35f546e9) SHA1(f559b08f52044f53836021a83f56f628e32216bd))
+
+ ROM_REGION(0x4000, "mcode", 0)
+ ROM_LOAD("m_e7bc.bin", 0x0000, 0x4000, CRC(985b7a31) SHA1(bba0d84fa1b67ea71905953c25201fa2020cf465))
+ROM_END
+
+ROM_START(aha1542b)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_SYSTEM_BIOS(0, "v310", "AT/SCSI BIOS Version 3.10")
+ ROMX_LOAD("adaptec_inc_420412-00_b_bios_bc00_1990.bin", 0x0000, 0x4000, CRC(bd3f74e7) SHA1(c38d82fd50e5439812fa093e0d4f5fd136c63844), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v310a", "AT/SCSI BIOS Version 3.10A (port 334h)")
+ ROMX_LOAD("154xp334.bin", 0x0000, 0x4000, CRC(4911f232) SHA1(2e24ce380c6f7694c45484019857cb919e2a9965), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "v311", "AT/SCSI BIOS Version 3.11")
+ ROMX_LOAD("bios_c900.u13", 0x0000, 0x4000, CRC(4660d0c1) SHA1(a581291de96836b6f6cc0b6244b8fa1ee333346a), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(3, "v320g", "AT/SCSI BIOS Version 3.20 (> 1 GB support)")
+ ROMX_LOAD("b_bd00.bin", 0x0000, 0x4000, CRC(2387197b) SHA1(703e1fe1ba924c02d617ac37ec7a20e12bef1cc7), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(4, "v320gt", "AT/SCSI BIOS Version 3.20 (extended timeout)")
+ ROMX_LOAD("b_b300.bin", 0x0000, 0x4000, CRC(4c5b07d8) SHA1(692e824f916f55519c9905839f5f6609f5e8c0a5), ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(5, "v320a", "AT/SCSI BIOS Version 3.20Alt (port 334h)")
+ ROMX_LOAD("b_ac00.bin", 0x0000, 0x4000, CRC(becd6d08) SHA1(b5e7cbdeb241c1ff57602291e87c58ac0ee72d54), ROM_BIOS(5))
+
+ ROM_REGION(0x4000, "mcode", 0)
+ ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(0))
+ ROMX_LOAD("adaptec_inc_434108-00_a_mcode_fc8a_1990.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(1)) // assumed compatible with v310a BIOS
+ ROMX_LOAD("firmware_62d3.u12", 0x0000, 0x4000, CRC(6056ca33) SHA1(8dd4aaffcb107dbcc85ac87d878fa6093b904a20), ROM_BIOS(2))
+ ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(3))
+ ROMX_LOAD("m_5d98.bin", 0x0000, 0x4000, CRC(f7d51536) SHA1(5ad1bb4bde3e8c30380b05d32ac273c781ab12a8), ROM_BIOS(4)) // also provided with v320g BIOS
+ ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(5))
+ROM_END
+
+const tiny_rom_entry *aha1542a_device::device_rom_region() const
+{
+ return ROM_NAME(aha1542a);
+}
+
+const tiny_rom_entry *aha1542b_device::device_rom_region() const
+{
+ return ROM_NAME(aha1542b);
+}
diff --git a/src/devices/bus/isa/aha1542b.h b/src/devices/bus/isa/aha1542b.h
new file mode 100644
index 00000000000..95e379cb137
--- /dev/null
+++ b/src/devices/bus/isa/aha1542b.h
@@ -0,0 +1,57 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_AHA1542B_H
+#define MAME_BUS_ISA_AHA1542B_H
+
+#pragma once
+
+#include "isa.h"
+#include "machine/upd765.h"
+
+class aha154x_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ aha154x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ void i8085_map(address_map &map);
+ void scsic_config(device_t *device);
+
+ required_device<upd765_family_device> m_fdc;
+ required_region_ptr<u8> m_bios;
+};
+
+class aha1542a_device : public aha154x_device
+{
+public:
+ aha1542a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class aha1542b_device : public aha154x_device
+{
+public:
+ aha1542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+DECLARE_DEVICE_TYPE(AHA1542A, aha1542a_device)
+DECLARE_DEVICE_TYPE(AHA1542B, aha1542b_device)
+
+#endif // MAME_BUS_ISA_AHA1542B_H
diff --git a/src/devices/bus/isa/aha1542c.cpp b/src/devices/bus/isa/aha1542c.cpp
new file mode 100644
index 00000000000..efb8181061c
--- /dev/null
+++ b/src/devices/bus/isa/aha1542c.cpp
@@ -0,0 +1,323 @@
+// license:BSD-3-Clause
+// copyright-holders:Darkstar
+/**********************************************************************
+ *
+ * Adaptec AHA-1542{C,CF,CP} SCSI Controller
+ *
+ **********************************************************************/
+
+/*
+Hardware info by Guru
+
+Adaptec 1993
+
+PCB Layout
+----------
+
+Adaptec AHA-1542CF/1542CF
+FCC ID: FGT1542CF
+FAB 545107-00 REV C
+ASSY 545106-00
+
+|-------|---------------|---|-------------------|--|
+| J1 | FLOPPY34 | | SCSI50 | |
+| |---------------| |-------------------| |
+| S1 DS1 |
+| |
+| |------| DS2107AS DS2107AS |--|
+| |PC8477| 24MHz Z84C0010 | |
+| PAL |BV-1 | |S |
+| | | |----------| | |
+| |------| | | |C |
+| 93C46.U11 20MHz | | | |
+| UM6264 MCODE.U15 |ADAPTEC | |S |
+| |AIC-7970Q | | |
+| BIOS.U16 | | |I |
+| | | | |
+| |----------| |--|
+| |
+|-| |--| |----|
+ |--------------| |-------------------------|
+
+Notes:
+ J1 - 4-position header for drive activity external LED connection
+ S1 - 8-position DIP Switch (See Table A)
+ PC8477BV-1 - National Semiconductor PC8477BV-1 'SuperFDC' Advanced Floppy Disk Controller (PLCC68)
+ This is software compatible with NEC uPD765 and pin compatible with Intel 82077AA
+ Labelled "AHA-1542CF/552800-01 F/9513"
+ Clock input 24.000MHz
+ SCSI - 50-pin Centronics style external SCSI connector (DDK 57AE-40500-21D)
+ Z84C0010 - Zilog Z84C0010VEC Z80 CPU. Clock input 20/2 [10.000MHz] sourced from AIC-7970Q (PLCC44)
+ 93C46.U11 - Atmel 93C46 128b x8-bit / 64b x16-bit (1kB) EEPROM labelled '545120A' (SOIC8)
+ 6264 - Unicorn Microelectronics UM6264BM-10L 8k x8-bit Static RAM (SOJ28)
+ MCODE.U15 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553801-00 E MCODE 4B81' (DIP28)
+ BIOS.U16 - ST Microelectronics M27C256B 32k x8-bit EPROM labelled 'ADAPTEC INC 553601-00 E BIOS 7600' (DIP28)
+ BIOS 0x7600h is revision 2.10
+ PAL - AMD PALCE16V8H-15JC/4 PAL (SOJ20)
+ AIC-7970Q - Adaptec AIC-7970Q Fast SCSI Controller IC. Clock input 20.000MHz (QFP144)
+ DS2107AS - Dallas DS2107AS SCSI Active Terminator (SOIC16)
+ DS1 - Internal Drive Activity LED
+ SCSI50 - 50-pin Right Angled Flat Cable Connector With Support For Up To 7 SCSI Drives
+ FLOPPY34 - 34-pin Right Angled Flat Cable Connector With Support For Up To 2 Floppy Drives (360kb,720kb,1.2MB,1.44MB)
+
+
+Table A - S1 DIP Switch Description
+-----------------------------------
+
+Default: All DIP Switches OFF (i.e. Settings changed via BIOS and saved in EEPROM)
+Software Defaults = *
+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+
+ | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | SW7 | SW8 |
+----------------------|-----+-----+-----+-----+-----+-----+-----+-----+
+Termination Enabled | ON | | | | | | | |
+ Set In BIOS*| OFF | | | | | | | |
+----------------------+-----+-----+-----+-----+ | | | |
+I/O Port 330H*| | OFF | OFF | OFF | | | | |
+ 334H | | ON | OFF | OFF | | | | |
+ 230H | | OFF | ON | OFF | | | | |
+ 234H | | ON | ON | OFF | | | | |
+ 130H | | OFF | OFF | ON | | | | |
+ 134H | | ON | OFF | ON | | | | |
+ Reserved | | OFF | ON | ON | | | | |
+ Reserved | | ON | ON | ON | | | | |
+----------------------+-----+-----+-----+-----+-----+ | | |
+Enable Floppy Yes*| | OFF | | | |
+ No | | ON | | | |
+----------------------+-----------------------+-----+-----+-----+-----+
+BIOS Address DC000H*| | OFF | OFF | OFF |
+ D8000H | | ON | OFF | OFF |
+ D4000H | | OFF | ON | OFF |
+ D0000H | | ON | ON | OFF |
+ CC000H | | OFF | OFF | ON |
+ C8000H | | ON | OFF | ON |
+ Reserved | | OFF | ON | ON |
+ BIOS Disabled | | ON | ON | ON |
+----------------------+-----------------------------+-----+-----+-----+
+
+Documentation:
+Adaptec AHA-1540CF/1542CF Installation Guide
+http://download.adaptec.com/pdfs/installation_guides/aha1540cf_ig.pdf
+ */
+
+#include "emu.h"
+#include "aha1542c.h"
+#include "cpu/z80/z80.h"
+
+// I/O Port interface
+// READ Port x+0: STATUS
+// WRITE Port x+0: CONTROL
+//
+// READ Port x+1: DATA
+// WRITE Port x+1: COMMAND
+//
+// READ Port x+2: INTERRUPT STATUS
+// WRITE Port x+2: (undefined?)
+//
+// R/W Port x+3: (undefined)
+
+// READ STATUS flags
+#define STAT_STST 0x80 // self-test in progress
+#define STAT_DIAGF 0x40 // internal diagnostic failure
+#define STAT_INIT 0x20 // mailbox initialization required
+#define STAT_IDLE 0x10 // HBA is idle
+#define STAT_CDFULL 0x08 // Command/Data output port is full
+#define STAT_DFULL 0x04 // Data input port is full
+#define STAT_INVCMD 0x01 // Invalid command
+
+// READ INTERRUPT STATUS flags
+#define INTR_ANY 0x80 // any interrupt
+#define INTR_SRCD 0x08 // SCSI reset detected
+#define INTR_HACC 0x04 // HA command complete
+#define INTR_MBOA 0x02 // MBO empty
+#define INTR_MBIF 0x01 // MBI full
+
+// WRITE CONTROL commands
+#define CTRL_HRST 0x80 // Hard reset
+#define CTRL_SRST 0x40 // Soft reset
+#define CTRL_IRST 0x20 // interrupt reset
+#define CTRL_SCRST 0x10 // SCSI bus reset
+
+// READ/WRITE DATA commands
+#define CMD_NOP 0x00 // No operation
+#define CMD_MBINIT 0x01 // mailbox initialization
+#define CMD_START_SCSI 0x02 // Start SCSI command
+#define CMD_BIOSCMD 0x03 // undocumented BIOS conmmand (shadow RAM etc.)
+#define CMD_INQUIRY 0x04 // Adapter inquiry
+#define CMD_EMBOI 0x05 // enable Mailbox Out Interrupt
+#define CMD_SELTIMEOUT 0x06 // Set SEL timeout
+#define CMD_BUSON_TIME 0x07 // set bus-On time
+#define CMD_BUSOFF_TIME 0x08 // set bus-off time
+#define CMD_DMASPEED 0x09 // set ISA DMA speed
+#define CMD_RETDEVS 0x0a // return installed devices
+#define CMD_RETCONF 0x0b // return configuration data
+#define CMD_TARGET 0x0c // set HBA to target mode
+#define CMD_RETSETUP 0x0d // return setup data
+#define CMD_ECHO 0x1f // ECHO command data (NetBSD says it is 0x1e)
+
+// these are for 1541C only:
+#define CMD_RETDEVSHI 0x23 // return devices 8-15 (from NetBSD)
+#define CMD_EXTBIOS 0x28 // return extended BIOS information
+#define CMD_MBENABLE 0x29 // set mailbox interface enable
+
+DEFINE_DEVICE_TYPE(AHA1542C, aha1542c_device, "aha1542c", "AHA-1542C SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542CF, aha1542cf_device, "aha1542cf", "AHA-1542CF SCSI Controller")
+DEFINE_DEVICE_TYPE(AHA1542CP, aha1542cp_device, "aha1542cp", "AHA-1542CP SCSI Controller")
+
+#define Z84C0010_TAG "z84c0010"
+
+READ8_MEMBER( aha1542c_device::aha1542_r )
+{
+ logerror("%s aha1542_r(): offset=%d\n", machine().describe_context(), offset);
+ return 0xff;
+}
+
+WRITE8_MEMBER( aha1542c_device::aha1542_w )
+{
+ logerror("%s aha1542_w(): offset=%d data=0x%02x\n", machine().describe_context(), offset, data);
+}
+
+
+ROM_START( aha1542c )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_SYSTEM_BIOS( 0, "v101", "AHA-1540C/1542C BIOS v1.01" )
+ ROMX_LOAD( "adaptec_inc_534201-00_d_bios_144c_1993.u15", 0x0000, 0x8000, CRC(35178004) SHA1(2b38f2e40cd02a1b32966ead7b202b0fca130cb8), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "v102", "AHA-1540C/1542C BIOS v1.02" )
+ ROMX_LOAD( "b_91c5.bin", 0x0000, 0x8000, CRC(076ac252) SHA1(d640b980e85d07029d8ce11a52fa26ba0f93c5de), ROM_BIOS(1) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROMX_LOAD( "adaptec_inc_534001-00_d_mcode_a3c2_1993.u5", 0x0000, 0x8000, CRC(220dd5a2) SHA1(4fc51c9dd63b45a50edcd56baa706d61decbef38), ROM_BIOS(0) )
+ ROMX_LOAD( "m_866a.bin", 0x0000, 0x8000, CRC(ef09053a) SHA1(ae7900653357d5f32a2734bc13d9ec63bd805597), ROM_BIOS(1) )
+ROM_END
+
+ROM_START( aha1542cf )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_SYSTEM_BIOS( 0, "v201", "Adaptec 1540CF/1542CF BIOS v2.01" )
+ ROMX_LOAD( "adaptec_inc_553601-00_c_bios_c38d_1993.u16", 0x0000, 0x8000, CRC(ab22fc02) SHA1(f9f783e0272fc14ba3de32316997f1f6cadc67d0), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "v210", "Adaptec 1540CF/1542CF BIOS v2.10" )
+ ROMX_LOAD( "adaptec_inc_553601-00_e_bios_7600_1994.u16", 0x0000, 0x8000, CRC(8f3a2692) SHA1(b9dbd49baeec55098195131d0ed1a9bfe8463640), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 2, "v211", "Adaptec 1540CF/1542CF BIOS v2.11" )
+ ROMX_LOAD( "adaptec_inc_553601-00_g_bios_b402_1995.u16", 0x0000, 0x8000, CRC(fddd0b83) SHA1(aabd227cb338d8812e0bb5c17c08ea06c5aedd36), ROM_BIOS(2) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROMX_LOAD( "adaptec_inc_553801-00_c_mcode_563d_1993.u15", 0x0000, 0x8000, CRC(7824397e) SHA1(35bc2c8fab31aad3190a478f2dc8f3a72958cf04), ROM_BIOS(0) )
+ ROMX_LOAD( "adaptec_inc_553801-00_e_mcode_4b81_1994.u15", 0x0000, 0x8000, CRC(dd651476) SHA1(cda508281302be53ebdcf8daa61754c89ad12111), ROM_BIOS(1) )
+ ROMX_LOAD( "adaptec_inc_553801-00_g_mcode_2cde_1995.u15", 0x0000, 0x8000, CRC(896873cd) SHA1(6edbdd9b0b15ef31ca0741cac31556d2d5266b6e), ROM_BIOS(2) )
+ROM_END
+
+ROM_START( aha1542cp )
+ ROM_REGION( 0x8000, "aha1542", 0 )
+ ROM_LOAD( "adaptec_inc_908501-00_d_bios_a91e_1995.u7", 0x0000, 0x8000, CRC(0646c35e) SHA1(3a7c2731abd8295438cfa1f2a525be53e9512b1a) )
+
+ ROM_REGION( 0x8000, Z84C0010_TAG, 0 )
+ ROM_LOAD( "908301-00_f_mcode_17c9.u12", 0x0000, 0x8000, CRC(04494022) SHA1(431dfc26312556ddd24fccc429b2b3e93bac5c2f) )
+ROM_END
+
+
+u8 aha1542c_device::local_status_r()
+{
+ return m_eeprom->do_read() << 7;
+}
+
+void aha1542c_device::local_latch_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 2));
+ m_eeprom->clk_write(BIT(data, 1));
+ m_eeprom->di_write(BIT(data, 0));
+ // TODO: several other bits are used
+}
+
+void aha1542c_device::z84c0010_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
+ map(0x8000, 0x9fff).ram(); // 2kb RAM chip
+ map(0xa000, 0xa000).r(FUNC(aha1542c_device::local_status_r));
+ map(0xb000, 0xb000).w(FUNC(aha1542c_device::local_latch_w));
+ map(0xe000, 0xe0ff).ram(); // probably PC<->Z80 communication area
+ map(0xe003, 0xe003).lr8("e003_r", []() { return 0x20; });
+}
+
+u8 aha1542cp_device::eeprom_r()
+{
+ return m_eeprom->do_read();
+}
+
+void aha1542cp_device::eeprom_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 2));
+ m_eeprom->clk_write(BIT(data, 1));
+ m_eeprom->di_write(BIT(data, 0));
+}
+
+void aha1542cp_device::local_mem(address_map &map)
+{
+ map(0x0000, 0x7fff).rom().region(Z84C0010_TAG, 0);
+ map(0x8000, 0x9fff).ram();
+ map(0xc001, 0xc001).rw(FUNC(aha1542cp_device::eeprom_r), FUNC(aha1542cp_device::eeprom_w));
+ map(0xe003, 0xe003).nopr();
+}
+
+const tiny_rom_entry *aha1542c_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542c );
+}
+
+const tiny_rom_entry *aha1542cf_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542cf );
+}
+
+const tiny_rom_entry *aha1542cp_device::device_rom_region() const
+{
+ return ROM_NAME( aha1542cp );
+}
+
+void aha1542c_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000));
+ cpu.set_addrmap(AS_PROGRAM, &aha1542c_device::z84c0010_mem);
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+}
+
+void aha1542cp_device::device_add_mconfig(machine_config &config)
+{
+ z80_device &cpu(Z80(config, Z84C0010_TAG, 10'000'000));
+ cpu.set_addrmap(AS_PROGRAM, &aha1542cp_device::local_mem);
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+}
+
+aha1542c_device::aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_eeprom(*this, "eeprom")
+{
+}
+
+aha1542c_device::aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542C, tag, owner, clock)
+{
+}
+
+aha1542cf_device::aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542CF, tag, owner, clock)
+{
+}
+
+aha1542cp_device::aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha1542c_device(mconfig, AHA1542CP, tag, owner, clock)
+{
+}
+
+void aha1542c_device::device_start()
+{
+ set_isa_device();
+ m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542");
+ m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542cf_device::aha1542_r ), this),
+ write8_delegate(FUNC( aha1542cf_device::aha1542_w ), this) );
+}
+
+
+void aha1542c_device::device_reset()
+{
+}
diff --git a/src/devices/bus/isa/aha1542c.h b/src/devices/bus/isa/aha1542c.h
new file mode 100644
index 00000000000..2294096bde7
--- /dev/null
+++ b/src/devices/bus/isa/aha1542c.h
@@ -0,0 +1,95 @@
+// license:BSD-3-Clause
+// copyright-holders:Darkstar
+/**********************************************************************
+ *
+ * Adaptec AHA-1542{C,CF,CP} SCSI Controller
+ *
+ **********************************************************************
+
+
+
+ **********************************************************************/
+
+#ifndef MAME_BUS_AHA1542C_H
+#define MAME_BUS_AHA1542C_H
+
+#pragma once
+
+
+#include "isa.h"
+#include "machine/eepromser.h"
+
+//*********************************************************************
+// TYPE DEFINITIONS
+//*********************************************************************
+
+// ====================> aha1542cf_device
+
+class aha1542c_device : public device_t,
+ public device_isa16_card_interface
+{
+public:
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+ // construction/destruction
+ aha1542c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ DECLARE_READ8_MEMBER( aha1542_r );
+ DECLARE_WRITE8_MEMBER( aha1542_w );
+
+protected:
+ aha1542c_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ u8 local_status_r();
+ void local_latch_w(u8 data);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ required_device<eeprom_serial_93cxx_device> m_eeprom;
+
+private:
+ void z84c0010_mem(address_map &map);
+};
+
+// ====================> aha1542cf_device
+
+class aha1542cf_device : public aha1542c_device
+{
+public:
+ // construction/destruction
+ aha1542cf_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+// ====================> aha1542cp_device
+
+class aha1542cp_device : public aha1542c_device
+{
+public:
+ // construction/destruction
+ aha1542cp_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ u8 eeprom_r();
+ void eeprom_w(u8 data);
+
+ void local_mem(address_map &map);
+};
+
+// device type definitions
+DECLARE_DEVICE_TYPE(AHA1542C, aha1542c_device)
+DECLARE_DEVICE_TYPE(AHA1542CF, aha1542cf_device)
+DECLARE_DEVICE_TYPE(AHA1542CP, aha1542cp_device)
+
+#endif // MAME_BUS_AHA1542C_H
diff --git a/src/devices/bus/isa/aha174x.cpp b/src/devices/bus/isa/aha174x.cpp
new file mode 100644
index 00000000000..06b6ddf5f62
--- /dev/null
+++ b/src/devices/bus/isa/aha174x.cpp
@@ -0,0 +1,160 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1740/44 and AHA-1740A/42A Fast SCSI host adapters
+
+ These are actually EISA cards, though they also have a compatibility
+ mode that provides an interface like the older ISA AHA-154X series.
+
+ On the AHA-1740 and AHA-1744, the HPC microcode is stored in an EEPROM
+ (of unknown type), allowing it to be reprogrammed by the host. This is
+ not possible on the AHA-1740A and AHA-1744A, which use a conventional
+ 27C256 EPROM for the microcode. In both cases the HPC copies the code
+ to and then executes it out of RAM.
+
+ Though the AHA-1740 and AHA-1740A have different board layouts, they
+ share the following ICs:
+
+ AIC-565 Bus Auxiliary Interface Chip
+ AIC-575 EISA Configuration Chip
+ AIC-4600 HPC (HPC46003V20)
+ AIC-6251A SCSI Interface and Protocol Chip
+ IDT7201 512x9 FIFO (2 on board)
+ Intel 82355 Bus Master Interface Controller
+
+ AHA-1742A is the same as AHA-1740A, only with the FDC populated.
+
+ AHA-1744 uses the same layout as AHA-1740, but populates the area
+ around the SCSI port with DS36F95J differential drivers.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "aha174x.h"
+
+#include "machine/aic6250.h"
+//#include "machine/i82355.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_hd.h"
+
+DEFINE_DEVICE_TYPE(AHA1740, aha1740_device, "aha1740", "AHA-1740 Fast SCSI Host Adapter")
+DEFINE_DEVICE_TYPE(AHA1742A, aha1742a_device, "aha1742a", "AHA-1742A Fast SCSI Host Adapter")
+
+
+aha174x_device::aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_hpc(*this, "hpc")
+ , m_bios(*this, "bios")
+{
+}
+
+aha1740_device::aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha174x_device(mconfig, AHA1740, tag, owner, clock)
+{
+}
+
+aha1742a_device::aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : aha174x_device(mconfig, AHA1742A, tag, owner, clock)
+ , m_fdc(*this, "fdc")
+{
+}
+
+void aha174x_device::device_start()
+{
+}
+
+
+void aha174x_device::hpc_map(address_map &map)
+{
+ map(0x5000, 0x500f).m("scsi:7:scsic", FUNC(aic6251a_device::map));
+ map(0x8000, 0xffff).rom().region("mcode", 0);
+}
+
+static void aha174x_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", AIC6251A);
+}
+
+void aha174x_device::scsic_config(device_t *device)
+{
+ device->set_clock(40_MHz_XTAL / 2); // divider not verified
+}
+
+void aha1740_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 40_MHz_XTAL / 2);
+ m_hpc->set_addrmap(AS_PROGRAM, &aha1740_device::hpc_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+}
+
+void aha1742a_device::device_add_mconfig(machine_config &config)
+{
+ HPC46003(config, m_hpc, 40_MHz_XTAL / 2);
+ m_hpc->set_addrmap(AS_PROGRAM, &aha1742a_device::hpc_map);
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", aha174x_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", aha174x_scsi_devices, "scsic", true)
+ .set_option_machine_config("scsic", [this] (device_t *device) { scsic_config(device); });
+
+ N82077AA(config, m_fdc, 24_MHz_XTAL);
+}
+
+
+ROM_START(aha1740)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD("b_dc00.bin", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e))
+
+ ROM_REGION16_LE(0x8000, "mcode", 0)
+ ROM_SYSTEM_BIOS(0, "v140st", "BIOS v1.40 (Standard Mode)")
+ ROMX_LOAD("standard.bin", 0x0000, 0x8000, CRC(8c15c6a2) SHA1(77e15b0244e3a814f53f957270e6474a8a839955), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v140en", "BIOS v1.40 (Enhanced Mode)")
+ ROMX_LOAD("enhanced.bin", 0x0000, 0x8000, CRC(84b3df89) SHA1(a718c3ea5443a609b4b20bfe48be18193737ad25), ROM_BIOS(1))
+ // Adaptec's help file claims that "the EEPROM on the board can hold firmware for both modes simultaneously."
+ // The AHA-174XA firmware images obviously have this, but the files provided here do not agree.
+ROM_END
+
+ROM_START(aha1742a)
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_DEFAULT_BIOS("v140")
+ ROM_SYSTEM_BIOS(0, "v134", "BIOS v1.34")
+ ROMX_LOAD("adaptec_inc_450214-00_a_bios_8800_1991.u47", 0x0000, 0x4000, CRC(6cf06151) SHA1(0da45634b12b33fc886920d065cc8ffb2cf376b8), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v140", "BIOS v1.40")
+ ROMX_LOAD("adaptec_inc_450216-00_a_bios_dc00_1992.u47", 0x0000, 0x4000, CRC(056d75ec) SHA1(8ca143adfc7d20ad5d49f14dedabc8276454bf9e), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(2, "v140s", "BIOS v1.40 (Extended Timeout)")
+ ROMX_LOAD("b_f100.bin", 0x0000, 0x4000, CRC(b695acc0) SHA1(683112fafdf83d5eb89237d9215f7d6eacc6eeaf), ROM_BIOS(2))
+
+ ROM_REGION16_LE(0x8000, "mcode", 0)
+ ROMX_LOAD("adaptec_inc_450117-00_c_mcode_23a8_1991.u10", 0x0000, 0x8000, NO_DUMP, ROM_BIOS(0))
+ ROMX_LOAD("adaptec_inc_450113-00_d_mcode_b7d6_1992.u10", 0x0000, 0x8000, CRC(0a55a555) SHA1(ff400f56b33f0ad94e34564d7715a0773b335844), ROM_BIOS(1))
+ ROMX_LOAD("m_c7b8.bin", 0x0000, 0x8000, CRC(21282e86) SHA1(18cb3960dc47f2c14beb88f9680c1f66c4652b04), ROM_BIOS(2))
+ROM_END
+
+const tiny_rom_entry *aha1740_device::device_rom_region() const
+{
+ return ROM_NAME(aha1740);
+}
+
+const tiny_rom_entry *aha1742a_device::device_rom_region() const
+{
+ return ROM_NAME(aha1742a);
+}
diff --git a/src/devices/bus/isa/aha174x.h b/src/devices/bus/isa/aha174x.h
new file mode 100644
index 00000000000..f65ee7de93a
--- /dev/null
+++ b/src/devices/bus/isa/aha174x.h
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Adaptec AHA-1540/42A and AHA-1540/42B SCSI controllers
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_AHA174X_H
+#define MAME_BUS_ISA_AHA174X_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/hpc/hpc.h"
+#include "machine/upd765.h"
+
+class aha174x_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ aha174x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ void hpc_map(address_map &map);
+ void scsic_config(device_t *device);
+
+ required_device<hpc46003_device> m_hpc;
+ required_region_ptr<u8> m_bios;
+};
+
+class aha1740_device : public aha174x_device
+{
+public:
+ aha1740_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class aha1742a_device : public aha174x_device
+{
+public:
+ aha1742a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ required_device<upd765_family_device> m_fdc;
+};
+
+DECLARE_DEVICE_TYPE(AHA1740, aha1740_device)
+DECLARE_DEVICE_TYPE(AHA1742A, aha1742a_device)
+
+#endif // MAME_BUS_ISA_AHA174X_H
diff --git a/src/devices/bus/isa/bt54x.cpp b/src/devices/bus/isa/bt54x.cpp
new file mode 100644
index 00000000000..d8ef31a848f
--- /dev/null
+++ b/src/devices/bus/isa/bt54x.cpp
@@ -0,0 +1,201 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ BusTek/BusLogic BT-54x series PC/AT SCSI host adapters
+
+ The earlier version of the BT-542B, with BusTek labels, has a NCR 86C05
+ bus controller where a later version has the 80C20 ASIC instead. It is
+ believed that these chips are largely compatible with each other, as
+ are the NCR 53CF94 and Emulex FAS216 SCSI controllers.
+
+ 2.41/2.21 is the last BIOS version compatible with revisions A-G of
+ the BT-542B.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "bt54x.h"
+
+#include "machine/ncr5390.h"
+//#include "machine/ncr86c05.h"
+#include "machine/nscsi_cd.h"
+#include "machine/nscsi_hd.h"
+
+DEFINE_DEVICE_TYPE(BT542B, bt542b_device, "bt542b", "BusTek BT-542B SCSI Host Adapter") // Rev. G or earlier
+DEFINE_DEVICE_TYPE(BT542BH, bt542bh_device, "bt542bh", "BusLogic BT-542B SCSI Host Adapter (Rev. H)")
+DEFINE_DEVICE_TYPE(BT545S, bt545s_device, "bt545s", "BusLogic BT-545S Fast SCSI Host Adapter")
+
+bt54x_device::bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_mpu(*this, "mpu")
+ , m_fdc(*this, "fdc")
+ , m_bios(*this, "bios")
+{
+}
+
+bt542b_device::bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT542B, tag, owner, clock)
+{
+}
+
+bt542bh_device::bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT542BH, tag, owner, clock)
+{
+}
+
+bt545s_device::bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : bt54x_device(mconfig, BT545S, tag, owner, clock)
+{
+}
+
+void bt54x_device::device_start()
+{
+}
+
+u8 bt54x_device::local_status_r()
+{
+ return 0;
+}
+
+void bt54x_device::local_map(address_map &map)
+{
+ map(0x00000, 0x01fff).ram();
+ //map(0x02000, 0x0201f).rw("busintf", FUNC(ncr86c05_device::local_read), FUNC(ncr86c05_device::local_write));
+ map(0x02080, 0x0208f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map));
+ map(0x02180, 0x02180).r(FUNC(bt54x_device::local_status_r));
+ map(0xf8000, 0xfffff).rom().region("mpu", 0);
+}
+
+static void scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", NCR53C94);
+}
+
+static void fast_scsi_devices(device_slot_interface &device)
+{
+ device.option_add("cdrom", NSCSI_CDROM);
+ device.option_add("harddisk", NSCSI_HARDDISK);
+ device.option_add_internal("scsic", NCR53CF94); // FAS216
+}
+
+void bt54x_device::asc_config(device_t *device)
+{
+ ncr53c94_device &asc = downcast<ncr53c94_device &>(*device);
+
+ asc.set_clock(25_MHz_XTAL); // not verified; perhaps selectable? (40 MHz XTAL also on board)
+
+ asc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w));
+ //asc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w));
+}
+
+void bt54x_device::fsc_config(device_t *device)
+{
+ ncr53cf94_device &fsc = downcast<ncr53cf94_device &>(*device);
+
+ fsc.set_clock(40_MHz_XTAL);
+
+ fsc.irq_handler_cb().set(m_mpu, FUNC(i80188_cpu_device::int0_w)); // mostly polled on BT-545S
+ //fsc.drq_handler_cb().set("busintf", FUNC(ncr86c05_device::dma_req_w));
+}
+
+void bt54x_device::fsc_base(machine_config &config)
+{
+ //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0));
+ //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w));
+ //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53cf94_device::dma_w));
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", fast_scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", fast_scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { fsc_config(device); });
+}
+
+void bt542b_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 16_MHz_XTAL);
+ m_mpu->set_addrmap(AS_PROGRAM, &bt542b_device::local_map);
+
+ //ncr86c05_device &busintf(NCR86C05(config, "busintf", 0));
+ //busintf.mint_callback().set(m_mpu, FUNC(i80188_cpu_device::int1_w));
+ //busintf.dma_ack_callback().set("scsi:7:scsic", FUNC(ncr53c94_device::dma_w));
+
+ NSCSI_BUS(config, "scsi");
+ NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:2", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr);
+ NSCSI_CONNECTOR(config, "scsi:7", scsi_devices, "scsic", true).set_option_machine_config("scsic", [this] (device_t *device) { asc_config(device); });
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void bt542bh_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 40_MHz_XTAL / 2); // clock guessed
+ m_mpu->set_addrmap(AS_PROGRAM, &bt542bh_device::local_map);
+
+ fsc_base(config);
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void bt545s_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_mpu, 40_MHz_XTAL / 2); // SAB80188-1-N; clock guessed
+ m_mpu->set_addrmap(AS_PROGRAM, &bt545s_device::local_map);
+
+ fsc_base(config);
+
+ PC8477A(config, m_fdc, 24_MHz_XTAL); // actually PC8477BV
+}
+
+ROM_START(bt542b)
+ ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1991 BIOS Version 2.41"
+ ROM_LOAD("1000006-2.41_bustek.u15", 0x0000, 0x4000, CRC(5eb00d0f) SHA1(74a8bbae1c2b42f0c605b0ac98660f1e16ac5c4e))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1991 BusTek Corporation 542B 91/12/14"
+ ROM_LOAD("1000005-2.21_bustek.u2", 0x0000, 0x8000, CRC(c2c66653) SHA1(054ba1ea71b2aaab31ab9dd5aca955d861f5333b))
+ROM_END
+
+ROM_START(bt542bh)
+ ROM_REGION(0x8000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.70M"
+ ROM_LOAD("5000006-4.70_buslogic.u15", 0x0000, 0x8000, CRC(f5a5e116) SHA1(d7b73015532838dc694edf24308ebbab6f4dd5bb))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1992 BusLogic Inc. 542BH93/05/23"
+ ROM_LOAD("5000005-3.35_buslogic.u2", 0x0000, 0x8000, CRC(181966c3) SHA1(b9b327d50cd13f3e5b5b53892b18f233aff065b7))
+ROM_END
+
+ROM_START(bt545s)
+ ROM_REGION(0x4000, "bios", 0) // "(C) Copyright 1992 BIOS Version 4.50"
+ ROM_LOAD("u15_27128_5002026-4.50.bin", 0x0000, 0x4000, CRC(1bd3247b) SHA1(9d46a99f4b3057e94ef422f387218de2c4553c1a))
+
+ ROM_REGION(0x8000, "mpu", 0) // "(C) Copyright 1992 BusLogic Inc. 542BH92/10/05"
+ ROM_LOAD("u2_27256_5002005-3.31.bin", 0x0000, 0x8000, CRC(20473714) SHA1(797a8dba182049949f7a5c14d8bef4b4e908305b))
+ROM_END
+
+const tiny_rom_entry *bt542b_device::device_rom_region() const
+{
+ return ROM_NAME(bt542b);
+}
+
+const tiny_rom_entry *bt542bh_device::device_rom_region() const
+{
+ return ROM_NAME(bt542bh);
+}
+
+const tiny_rom_entry *bt545s_device::device_rom_region() const
+{
+ return ROM_NAME(bt545s);
+}
diff --git a/src/devices/bus/isa/bt54x.h b/src/devices/bus/isa/bt54x.h
new file mode 100644
index 00000000000..dfdd0009416
--- /dev/null
+++ b/src/devices/bus/isa/bt54x.h
@@ -0,0 +1,74 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ BusTek/BusLogic BT-54x series PC/AT SCSI host adapters
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_BT54X_H
+#define MAME_BUS_ISA_BT54X_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/i86/i186.h"
+#include "machine/upd765.h"
+
+class bt54x_device : public device_t, public device_isa16_card_interface
+{
+public:
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ bt54x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ u8 local_status_r();
+
+ void local_map(address_map &map);
+ void asc_config(device_t *device);
+ void fsc_config(device_t *device);
+ void fsc_base(machine_config &config);
+
+ required_device<i80188_cpu_device> m_mpu;
+ required_device<upd765_family_device> m_fdc;
+ required_region_ptr<u8> m_bios;
+};
+
+class bt542b_device : public bt54x_device
+{
+public:
+ bt542b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class bt542bh_device : public bt54x_device
+{
+public:
+ bt542bh_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+class bt545s_device : public bt54x_device
+{
+public:
+ bt545s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+DECLARE_DEVICE_TYPE(BT542B, bt542b_device)
+DECLARE_DEVICE_TYPE(BT542BH, bt542bh_device)
+DECLARE_DEVICE_TYPE(BT545S, bt545s_device)
+
+#endif // MAME_BUS_ISA_BT54X_H
diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp
index f5fb8f185d7..eac981b4100 100644
--- a/src/devices/bus/isa/cga.cpp
+++ b/src/devices/bus/isa/cga.cpp
@@ -261,12 +261,13 @@ DEFINE_DEVICE_TYPE(ISA8_CGA, isa8_cga_device, "cga", "IBM Color/Graphics Monitor
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_cga_device::device_add_mconfig)
- MCFG_SCREEN_ADD(CGA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(14'318'181),912,0,640,262,0,200)
- MCFG_SCREEN_UPDATE_DEVICE( DEVICE_SELF, isa8_cga_device, screen_update )
+void isa8_cga_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, CGA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(14'318'181), 912, 0, 640, 262, 0, 200);
+ screen.set_screen_update(FUNC(isa8_cga_device::screen_update));
- MCFG_PALETTE_ADD("palette", /* CGA_PALETTE_SETS * 16*/ 65536 )
+ PALETTE(config, m_palette).set_entries(/* CGA_PALETTE_SETS * 16*/ 65536);
MC6845(config, m_crtc, XTAL(14'318'181)/16);
m_crtc->set_screen(nullptr);
@@ -276,7 +277,7 @@ MACHINE_CONFIG_START(isa8_cga_device::device_add_mconfig)
m_crtc->out_hsync_callback().set(FUNC(isa8_cga_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_cga_device::vsync_changed));
m_crtc->set_reconfigure_callback(FUNC(isa8_cga_device::reconfigure), this);
-MACHINE_CONFIG_END
+}
ioport_constructor isa8_cga_device::device_input_ports() const
{
@@ -912,7 +913,7 @@ READ8_MEMBER( isa8_cga_device::io_read )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_crtc->register_r( space, offset );
+ data = m_crtc->register_r();
break;
case 10:
data = m_vsync | ( ( data & 0x40 ) >> 4 ) | m_hsync;
@@ -927,10 +928,10 @@ WRITE8_MEMBER( isa8_cga_device::io_write )
{
switch(offset) {
case 0: case 2: case 4: case 6:
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 8:
mode_control_w(data);
@@ -1169,14 +1170,14 @@ WRITE8_MEMBER( isa8_cga_pc1512_device::io_write )
{
case 0: case 2: case 4: case 6:
data &= 0x1F;
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
m_mc6845_address = data;
break;
case 1: case 3: case 5: case 7:
if ( ! m_mc6845_locked_register[m_mc6845_address] )
{
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
if ( isa8_cga_pc1512_device::mc6845_writeonce_register[m_mc6845_address] )
{
m_mc6845_locked_register[m_mc6845_address] = 1;
@@ -1693,13 +1694,13 @@ const tiny_rom_entry *isa8_cga_mc1502_device::device_rom_region() const
DEFINE_DEVICE_TYPE(ISA8_CGA_M24, isa8_cga_m24_device, "cga_m24", "Olivetti M24 CGA")
-MACHINE_CONFIG_START(isa8_cga_m24_device::device_add_mconfig)
+void isa8_cga_m24_device::device_add_mconfig(machine_config &config)
+{
isa8_cga_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY(CGA_SCREEN_NAME)
- MCFG_SCREEN_RAW_PARAMS(XTAL(14'318'181),912,0,640,462,0,400)
+ subdevice<screen_device>(CGA_SCREEN_NAME)->set_raw(XTAL(14'318'181), 912, 0, 640, 462, 0, 400);
m_crtc->set_reconfigure_callback(FUNC(isa8_cga_m24_device::reconfigure), this);
-MACHINE_CONFIG_END
+}
isa8_cga_m24_device::isa8_cga_m24_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
isa8_cga_m24_device(mconfig, ISA8_CGA_M24, tag, owner, clock)
@@ -1746,7 +1747,7 @@ WRITE8_MEMBER( isa8_cga_m24_device::io_write )
{
case 0: case 2: case 4: case 6:
m_index = data;
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
switch(m_index & 0x1f) // TODO: this is handled by a pal and prom
@@ -1765,7 +1766,7 @@ WRITE8_MEMBER( isa8_cga_m24_device::io_write )
data <<= 1;
break;
}
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 0x0e:
m_mode2 = data;
@@ -1886,12 +1887,12 @@ MC6845_UPDATE_ROW( isa8_cga_m24_device::m24_gfx_1bpp_m24_update_row )
DEFINE_DEVICE_TYPE(ISA8_CGA_CPORTIII, isa8_cga_cportiii_device, "cga_cportiii", "Compaq Portable III CGA")
-MACHINE_CONFIG_START(isa8_cga_cportiii_device::device_add_mconfig)
+void isa8_cga_cportiii_device::device_add_mconfig(machine_config &config)
+{
isa8_cga_m24_device::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY(CGA_SCREEN_NAME)
- MCFG_SCREEN_COLOR(rgb_t(255, 125, 0))
-MACHINE_CONFIG_END
+ subdevice<screen_device>(CGA_SCREEN_NAME)->set_color(rgb_t(255, 125, 0));
+}
isa8_cga_cportiii_device::isa8_cga_cportiii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
isa8_cga_m24_device(mconfig, ISA8_CGA_CPORTIII, tag, owner, clock)
diff --git a/src/devices/bus/isa/cl_sh260.cpp b/src/devices/bus/isa/cl_sh260.cpp
new file mode 100644
index 00000000000..f8fb39249f5
--- /dev/null
+++ b/src/devices/bus/isa/cl_sh260.cpp
@@ -0,0 +1,93 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ ISA 16-bit disk controllers based on the Cirrus Logic CL-SH260-15PC-D
+ * Everex EV-346
+ * Joincom Electronic JC-1310
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cl_sh260.h"
+
+#include "cpu/mcs51/mcs51.h"
+
+DEFINE_DEVICE_TYPE(EV346, isa16_ev346_device, "ev346", "Everex EV-346 disk controller")
+DEFINE_DEVICE_TYPE(JC1310, isa16_jc1310_device, "jc1310", "Joincom JC-1310 disk controller")
+
+isa16_cl_sh260_device::isa16_cl_sh260_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_fdc(*this, "fdc")
+{
+}
+
+isa16_ev346_device::isa16_ev346_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : isa16_cl_sh260_device(mconfig, EV346, tag, owner, clock)
+{
+}
+
+isa16_jc1310_device::isa16_jc1310_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : isa16_cl_sh260_device(mconfig, JC1310, tag, owner, clock)
+{
+}
+
+void isa16_cl_sh260_device::device_start()
+{
+}
+
+void isa16_cl_sh260_device::i8031_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("mcu", 0);
+}
+
+void isa16_ev346_device::ext_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0xff).noprw(); // CL-SH260 interface
+}
+
+void isa16_jc1310_device::ext_map(address_map &map)
+{
+ map(0xc000, 0xc0ff).noprw(); // CL-SH260 interface
+}
+
+void isa16_ev346_device::device_add_mconfig(machine_config &config)
+{
+ i8031_device &mcu(I8031(config, "mcu", 12_MHz_XTAL)); // SCN8031HCCN40
+ mcu.set_addrmap(AS_PROGRAM, &isa16_ev346_device::i8031_map);
+ mcu.set_addrmap(AS_IO, &isa16_ev346_device::ext_map);
+
+ DP8473(config, m_fdc, 24_MHz_XTAL);
+}
+
+void isa16_jc1310_device::device_add_mconfig(machine_config &config)
+{
+ i8031_device &mcu(I8031(config, "mcu", 10_MHz_XTAL)); // P8031AH
+ mcu.set_addrmap(AS_PROGRAM, &isa16_jc1310_device::i8031_map);
+ mcu.set_addrmap(AS_IO, &isa16_jc1310_device::ext_map);
+
+ WD37C65C(config, m_fdc, 16_MHz_XTAL); // WD37C65B-PL
+ //m_fdc->set_clock2(9.6_MHz_XTAL);
+}
+
+ROM_START(ev346)
+ ROM_REGION(0x2000, "mcu", 0)
+ ROM_LOAD("everex_ev346_vers_3.2.bin", 0x0000, 0x2000, CRC(49b10ca7) SHA1(ef31b62f5ac38db7cacfc4d30e203a4cc1414913))
+ROM_END
+
+ROM_START(jc1310)
+ ROM_REGION(0x2000, "mcu", 0) // "(C) COPYRIGHT JOINCOM ELECTRONIC CORP. 9/16/1988 JC1310"
+ ROM_LOAD("jc-1310 - apr-c 89.u3", 0x0000, 0x2000, CRC(e044f5e1) SHA1(5a32d2001bb1a489657f9488136b5d621f803703)) // TMS 2764-20JL
+ROM_END
+
+const tiny_rom_entry *isa16_ev346_device::device_rom_region() const
+{
+ return ROM_NAME(ev346);
+}
+
+const tiny_rom_entry *isa16_jc1310_device::device_rom_region() const
+{
+ return ROM_NAME(jc1310);
+}
diff --git a/src/devices/bus/isa/cl_sh260.h b/src/devices/bus/isa/cl_sh260.h
new file mode 100644
index 00000000000..18612ab6456
--- /dev/null
+++ b/src/devices/bus/isa/cl_sh260.h
@@ -0,0 +1,64 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ ISA 16-bit disk controllers based on the Cirrus Logic CL-SH260-15PC-D
+ * Everex EV-346
+ * Joincom Electronic JC-1310
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_CL_SH260_H
+#define MAME_BUS_ISA_CL_SH260_H
+
+#pragma once
+
+#include "isa.h"
+#include "machine/upd765.h"
+
+class isa16_cl_sh260_device : public device_t, public device_isa16_card_interface
+{
+protected:
+ isa16_cl_sh260_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
+
+ void i8031_map(address_map &map);
+
+ required_device<upd765_family_device> m_fdc;
+};
+
+class isa16_ev346_device : public isa16_cl_sh260_device
+{
+public:
+ isa16_ev346_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void ext_map(address_map &map);
+};
+
+class isa16_jc1310_device : public isa16_cl_sh260_device
+{
+public:
+ isa16_jc1310_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void ext_map(address_map &map);
+};
+
+DECLARE_DEVICE_TYPE(EV346, isa16_ev346_device)
+DECLARE_DEVICE_TYPE(JC1310, isa16_jc1310_device)
+
+#endif // MAME_BUS_ISA_CL_SH260_H
diff --git a/src/devices/bus/isa/dcb.cpp b/src/devices/bus/isa/dcb.cpp
new file mode 100644
index 00000000000..db5768d6758
--- /dev/null
+++ b/src/devices/bus/isa/dcb.cpp
@@ -0,0 +1,70 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Novell Disk Coprocessor Board (DCB)
+
+ This special SCSI host adapter, later acquired by ADIC, was designed
+ for use with Novell NetWare.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dcb.h"
+
+DEFINE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device, "novell_dcb", "Novell Disk Coprocessor Board (#738-133-001)")
+
+novell_dcb_device::novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, NOVELL_DCB, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_localcpu(*this, "localcpu")
+ , m_eeprom(*this, "eeprom")
+{
+}
+
+void novell_dcb_device::device_start()
+{
+}
+
+void novell_dcb_device::eeprom_w(u8 data)
+{
+ m_eeprom->cs_write(BIT(data, 5));
+ m_eeprom->clk_write(BIT(data, 6));
+ m_eeprom->di_write(BIT(data, 7));
+}
+
+u8 novell_dcb_device::misc_r()
+{
+ return m_eeprom->do_read() << 7;
+}
+
+void novell_dcb_device::mem_map(address_map &map)
+{
+ map(0x00000, 0x03fff).ram();
+ map(0xfe000, 0xfffff).rom().region("localcpu", 0);
+}
+
+void novell_dcb_device::io_map(address_map &map)
+{
+ map(0x0100, 0x0100).w(FUNC(novell_dcb_device::eeprom_w));
+ map(0x0180, 0x0180).r(FUNC(novell_dcb_device::misc_r));
+}
+
+void novell_dcb_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, m_localcpu, 16_MHz_XTAL);
+ m_localcpu->set_addrmap(AS_PROGRAM, &novell_dcb_device::mem_map);
+ m_localcpu->set_addrmap(AS_IO, &novell_dcb_device::io_map);
+
+ EEPROM_93C06_16BIT(config, m_eeprom); // NMC9306
+}
+
+ROM_START(novell_dcb)
+ ROM_REGION(0x2000, "localcpu", 0)
+ ROM_LOAD("817-186-001_rev_e_5800_11-04-86.bin", 0x0000, 0x2000, CRC(2e2037f4) SHA1(a13c0aab46084a0805256f1d2b8b8beaccc9e253))
+ROM_END
+
+const tiny_rom_entry *novell_dcb_device::device_rom_region() const
+{
+ return ROM_NAME(novell_dcb);
+}
diff --git a/src/devices/bus/isa/dcb.h b/src/devices/bus/isa/dcb.h
new file mode 100644
index 00000000000..fbca0303978
--- /dev/null
+++ b/src/devices/bus/isa/dcb.h
@@ -0,0 +1,43 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Novell Disk Coprocessor Board (DCB)
+
+***************************************************************************/
+
+#ifndef MAME_BUS_ISA_DCB_H
+#define MAME_BUS_ISA_DCB_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/i86/i186.h"
+#include "machine/eepromser.h"
+
+class novell_dcb_device : public device_t, public device_isa16_card_interface
+{
+public:
+ novell_dcb_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_start() override;
+
+private:
+ void eeprom_w(u8 data);
+ u8 misc_r();
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<i80188_cpu_device> m_localcpu;
+ required_device<eeprom_serial_93cxx_device> m_eeprom;
+};
+
+DECLARE_DEVICE_TYPE(NOVELL_DCB, novell_dcb_device)
+
+#endif // MAME_BUS_ISA_DCB_H
diff --git a/src/devices/bus/isa/dectalk.cpp b/src/devices/bus/isa/dectalk.cpp
index d8ad57d57d3..da45a2ec18b 100644
--- a/src/devices/bus/isa/dectalk.cpp
+++ b/src/devices/bus/isa/dectalk.cpp
@@ -172,7 +172,6 @@ void dectalk_isa_device::device_add_mconfig(machine_config &config)
SPEAKER(config, "speaker").front_center();
DAC_12BIT_R2R(config, m_dac, 0).add_route(0, "speaker", 1.0); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
}
diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp
index 01c73066088..5da3c263384 100644
--- a/src/devices/bus/isa/ega.cpp
+++ b/src/devices/bus/isa/ega.cpp
@@ -528,23 +528,24 @@ DEFINE_DEVICE_TYPE(ISA8_EGA, isa8_ega_device, "ega", "IBM Enhanced Graphics Adap
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_ega_device::device_add_mconfig)
- MCFG_SCREEN_ADD(EGA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(16257000,912,0,640,262,0,200)
- MCFG_SCREEN_UPDATE_DEVICE(EGA_CRTC_NAME, crtc_ega_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_PALETTE_ADD( "palette", 64 )
-
- MCFG_DEVICE_ADD(EGA_CRTC_NAME, CRTC_EGA, 16257000/8)
- MCFG_CRTC_EGA_SET_SCREEN(EGA_SCREEN_NAME)
- MCFG_CRTC_EGA_HPIXELS_PER_COLUMN(8)
- MCFG_CRTC_EGA_ROW_UPDATE_CB(isa8_ega_device, ega_update_row)
- MCFG_CRTC_EGA_RES_OUT_DE_CB(WRITELINE(*this, isa8_ega_device, de_changed))
- MCFG_CRTC_EGA_RES_OUT_HSYNC_CB(WRITELINE(*this, isa8_ega_device, hsync_changed))
- MCFG_CRTC_EGA_RES_OUT_VSYNC_CB(WRITELINE(*this, isa8_ega_device, vsync_changed))
- MCFG_CRTC_EGA_RES_OUT_VBLANK_CB(WRITELINE(*this, isa8_ega_device, vblank_changed))
-MACHINE_CONFIG_END
+void isa8_ega_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, EGA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(16.257_MHz_XTAL, 912, 0, 640, 262, 0, 200);
+ screen.set_screen_update(EGA_CRTC_NAME, FUNC(crtc_ega_device::screen_update));
+ screen.set_palette(m_palette);
+
+ PALETTE(config, m_palette).set_entries(64);
+
+ CRTC_EGA(config, m_crtc_ega, 16.257_MHz_XTAL/8);
+ m_crtc_ega->set_screen(EGA_SCREEN_NAME);
+ m_crtc_ega->config_set_hpixels_per_column(8);
+ m_crtc_ega->set_row_update_callback(FUNC(isa8_ega_device::ega_update_row), this);
+ m_crtc_ega->res_out_de_callback().set(FUNC(isa8_ega_device::de_changed));
+ m_crtc_ega->res_out_hsync_callback().set(FUNC(isa8_ega_device::hsync_changed));
+ m_crtc_ega->res_out_vsync_callback().set(FUNC(isa8_ega_device::vsync_changed));
+ m_crtc_ega->res_out_vblank_callback().set(FUNC(isa8_ega_device::vblank_changed));
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -576,7 +577,7 @@ isa8_ega_device::isa8_ega_device(const machine_config &mconfig, const char *tag,
isa8_ega_device::isa8_ega_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_isa8_card_interface(mconfig, *this),
- m_crtc_ega(nullptr), m_videoram(nullptr), m_charA(nullptr), m_charB(nullptr),
+ m_crtc_ega(*this, EGA_CRTC_NAME), m_videoram(nullptr), m_charA(nullptr), m_charB(nullptr),
m_misc_output(0), m_feature_control(0), m_frame_cnt(0), m_hsync(0), m_vsync(0), m_vblank(0), m_display_enable(0), m_video_mode(0),
m_palette(*this, "palette")
{
@@ -626,8 +627,6 @@ void isa8_ega_device::device_start()
m_plane[2] = m_videoram + 0x20000;
m_plane[3] = m_videoram + 0x30000;
- m_crtc_ega = subdevice<crtc_ega_device>(EGA_CRTC_NAME);
-
m_isa->install_rom(this, 0xc0000, 0xc3fff, "ega", "user2");
m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this));
m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this));
@@ -1170,7 +1169,7 @@ READ8_MEMBER( isa8_ega_device::pc_ega8_3X0_r )
/* CRT Controller - data register */
case 1: case 3: case 5: case 7:
- data = m_crtc_ega->register_r( space, offset );
+ data = m_crtc_ega->register_r();
break;
/* Input Status Register 1 */
@@ -1205,12 +1204,12 @@ WRITE8_MEMBER( isa8_ega_device::pc_ega8_3X0_w )
{
/* CRT Controller - address register */
case 0: case 2: case 4: case 6:
- m_crtc_ega->address_w( space, offset, data );
+ m_crtc_ega->address_w(data);
break;
/* CRT Controller - data register */
case 1: case 3: case 5: case 7:
- m_crtc_ega->register_w( space, offset, data );
+ m_crtc_ega->register_w(data);
break;
/* Set Light Pen Flip Flop */
diff --git a/src/devices/bus/isa/ega.h b/src/devices/bus/isa/ega.h
index 4e7bc4394a3..4334604b9a8 100644
--- a/src/devices/bus/isa/ega.h
+++ b/src/devices/bus/isa/ega.h
@@ -58,7 +58,7 @@ private:
CRTC_EGA_ROW_UPDATE(ega_update_row);
public:
- crtc_ega_device *m_crtc_ega;
+ required_device<crtc_ega_device> m_crtc_ega;
void install_banks();
void change_mode();
diff --git a/src/devices/bus/isa/eis_sad8852.cpp b/src/devices/bus/isa/eis_sad8852.cpp
index 4f2b5a0c856..f4d634d1033 100644
--- a/src/devices/bus/isa/eis_sad8852.cpp
+++ b/src/devices/bus/isa/eis_sad8852.cpp
@@ -199,13 +199,14 @@ ioport_constructor isa16_sad8852_device::device_input_ports() const
//-------------------------------------------------
// Board configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_sad8852_device::device_add_mconfig)
- MCFG_DEVICE_ADD(I80188_TAG, I80188, XTAL(12'000'000) / 2) // Chip revision is 6 MHz
- MCFG_DEVICE_PROGRAM_MAP( sad8852_mem )
- MCFG_DEVICE_IO_MAP(sad8852_io)
+void isa16_sad8852_device::device_add_mconfig(machine_config &config)
+{
+ i80188_cpu_device &cpu(I80188(config, I80188_TAG, XTAL(12'000'000) / 2)); // Chip revision is 6 MHz
+ cpu.set_addrmap(AS_PROGRAM, &isa16_sad8852_device::sad8852_mem);
+ cpu.set_addrmap(AS_IO, &isa16_sad8852_device::sad8852_io);
I8274_NEW(config, "terminal", XTAL(12'000'000) / 3); // Needs verification
-MACHINE_CONFIG_END
+}
isa16_sad8852_device::isa16_sad8852_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_SAD8852, tag, owner, clock)
diff --git a/src/devices/bus/isa/fdc.cpp b/src/devices/bus/isa/fdc.cpp
index f31b0f5f9dd..9c9f52d7a1d 100644
--- a/src/devices/bus/isa/fdc.cpp
+++ b/src/devices/bus/isa/fdc.cpp
@@ -72,6 +72,11 @@ void isa8_fdc_device::dack_w(int line, uint8_t data)
return m_fdc->dma_w(data);
}
+void isa8_fdc_device::dack_line_w(int line, int state)
+{
+ //m_fdc->dack_w(state);
+}
+
void isa8_fdc_device::eop_w(int state)
{
m_fdc->tc_w(state == ASSERT_LINE);
diff --git a/src/devices/bus/isa/fdc.h b/src/devices/bus/isa/fdc.h
index 7a1781cdc69..cec5f7dd06e 100644
--- a/src/devices/bus/isa/fdc.h
+++ b/src/devices/bus/isa/fdc.h
@@ -40,6 +40,7 @@ protected:
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
virtual void eop_w(int state) override;
required_device<pc_fdc_interface> m_fdc;
diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp
index e79dee39686..f9e6f37dc8f 100644
--- a/src/devices/bus/isa/finalchs.cpp
+++ b/src/devices/bus/isa/finalchs.cpp
@@ -71,10 +71,11 @@ DEFINE_DEVICE_TYPE(ISA8_FINALCHS, isa8_finalchs_device, "isa_finalchs", "Final C
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_finalchs_device::device_add_mconfig)
- MCFG_DEVICE_ADD("maincpu",M65C02,5000000)
- MCFG_DEVICE_PROGRAM_MAP(finalchs_mem)
-MACHINE_CONFIG_END
+void isa8_finalchs_device::device_add_mconfig(machine_config &config)
+{
+ m65c02_device &cpu(M65C02(config, "maincpu", 5000000));
+ cpu.set_addrmap(AS_PROGRAM, &isa8_finalchs_device::finalchs_mem);
+}
//**************************************************************************
// LIVE DEVICE
diff --git a/src/devices/bus/isa/gus.cpp b/src/devices/bus/isa/gus.cpp
index 99404470140..423c1e3629f 100644
--- a/src/devices/bus/isa/gus.cpp
+++ b/src/devices/bus/isa/gus.cpp
@@ -1250,7 +1250,8 @@ INPUT_PORTS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_gus_device::device_add_mconfig)
+void isa16_gus_device::device_add_mconfig(machine_config &config)
+{
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
GGF1(config, m_gf1, GF1_CLOCK);
@@ -1270,14 +1271,13 @@ MACHINE_CONFIG_START(isa16_gus_device::device_add_mconfig)
m_gf1->drq2_handler().set(FUNC(isa16_gus_device::drq2_w));
m_gf1->nmi_handler().set(FUNC(isa16_gus_device::nmi_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE("gf1", acia6850_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_gf1, FUNC(acia6850_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
- MCFG_DEVICE_ADD("acia_clock", CLOCK, 31250*16)
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, isa16_gus_device, write_acia_clock))
-MACHINE_CONFIG_END
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
+ acia_clock.signal_handler().set(FUNC(isa16_gus_device::write_acia_clock));
+}
ioport_constructor isa16_gus_device::device_input_ports() const
{
@@ -1384,9 +1384,9 @@ READ8_MEMBER(isa16_gus_device::synth_r)
switch(offset)
{
case 0x00:
- return m_gf1->status_r(space,0);
+ return m_gf1->status_r();
case 0x01:
- return m_gf1->data_r(space,0);
+ return m_gf1->data_r();
case 0x02:
case 0x03:
return m_gf1->global_reg_select_r(space,offset-2);
@@ -1407,10 +1407,10 @@ WRITE8_MEMBER(isa16_gus_device::synth_w)
switch(offset)
{
case 0x00:
- m_gf1->control_w(space,0,data);
+ m_gf1->control_w(data);
break;
case 0x01:
- m_gf1->data_w(space,0,data);
+ m_gf1->data_w(data);
break;
case 0x02:
case 0x03:
diff --git a/src/devices/bus/isa/gus.h b/src/devices/bus/isa/gus.h
index 493893a62e0..0009510b81f 100644
--- a/src/devices/bus/isa/gus.h
+++ b/src/devices/bus/isa/gus.h
@@ -45,38 +45,6 @@
#include "isa.h"
#include "machine/6850acia.h"
-#define MCFG_GF1_TXIRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_txirq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_RXIRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_rxirq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_WAVE_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_wave_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_RAMP_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_ramp_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_TIMER1_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_timer1_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_TIMER2_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_timer2_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_SB_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_sb_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_DMA_IRQ_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_dma_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_DRQ1_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_drq1_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_DRQ2_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_drq2_handler(DEVCB_##_devcb);
-
-#define MCFG_GF1_NMI_HANDLER(_devcb) \
- downcast<gf1_device &>(*device).set_nmi_handler(DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
@@ -112,17 +80,6 @@ public:
// construction/destruction
gf1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_txirq_handler(Object &&cb) { return m_txirq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_rxirq_handler(Object &&cb) { return m_rxirq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_wave_irq_handler(Object &&cb) { return m_wave_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_ramp_irq_handler(Object &&cb) { return m_ramp_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_timer1_irq_handler(Object &&cb) { return m_timer1_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_timer2_irq_handler(Object &&cb) { return m_timer2_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_sb_irq_handler(Object &&cb) { return m_sb_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_dma_irq_handler(Object &&cb) { return m_dma_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq1_handler(Object &&cb) { return m_drq1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq2_handler(Object &&cb) { return m_drq2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_nmi_handler(Object &&cb) { return m_nmi_handler.set_callback(std::forward<Object>(cb)); }
auto txirq_handler() { return m_txirq_handler.bind(); }
auto rxirq_handler() { return m_rxirq_handler.bind(); }
auto wave_irq_handler() { return m_wave_irq_handler.bind(); }
diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp
index 040f72f98c3..2492d0eaa89 100644
--- a/src/devices/bus/isa/hdc.cpp
+++ b/src/devices/bus/isa/hdc.cpp
@@ -918,21 +918,23 @@ DEFINE_DEVICE_TYPE(ISA8_HDC_EC1841, isa8_hdc_ec1841_device, "isa_hdc_ec1841", "E
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_hdc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("hdc",XT_HDC,0)
- MCFG_XTHDC_IRQ_HANDLER(WRITELINE(*this, isa8_hdc_device,irq_w))
- MCFG_XTHDC_DRQ_HANDLER(WRITELINE(*this, isa8_hdc_device,drq_w))
- MCFG_HARDDISK_ADD("hdc:primary")
- MCFG_HARDDISK_ADD("hdc:slave")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(isa8_hdc_ec1841_device::device_add_mconfig)
- MCFG_DEVICE_ADD("hdc",EC1841_HDC,0)
- MCFG_XTHDC_IRQ_HANDLER(WRITELINE(*this, isa8_hdc_ec1841_device,irq_w))
- MCFG_XTHDC_DRQ_HANDLER(WRITELINE(*this, isa8_hdc_ec1841_device,drq_w))
- MCFG_HARDDISK_ADD("hdc:primary")
- MCFG_HARDDISK_ADD("hdc:slave")
-MACHINE_CONFIG_END
+void isa8_hdc_device::device_add_mconfig(machine_config &config)
+{
+ XT_HDC(config, m_hdc,0);
+ m_hdc->irq_handler().set(FUNC(isa8_hdc_device::irq_w));
+ m_hdc->drq_handler().set(FUNC(isa8_hdc_device::drq_w));
+ HARDDISK(config, "hdc:primary");
+ HARDDISK(config, "hdc:slave");
+}
+
+void isa8_hdc_ec1841_device::device_add_mconfig(machine_config &config)
+{
+ EC1841_HDC(config, m_hdc,0);
+ m_hdc->irq_handler().set(FUNC(isa8_hdc_ec1841_device::irq_w));
+ m_hdc->drq_handler().set(FUNC(isa8_hdc_ec1841_device::drq_w));
+ HARDDISK(config, "hdc:primary");
+ HARDDISK(config, "hdc:slave");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/hdc.h b/src/devices/bus/isa/hdc.h
index 3e91c57d063..7d60d40b7a5 100644
--- a/src/devices/bus/isa/hdc.h
+++ b/src/devices/bus/isa/hdc.h
@@ -19,11 +19,6 @@
// XT HD controller device
-#define MCFG_XTHDC_IRQ_HANDLER(_devcb) \
- downcast<xt_hdc_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_XTHDC_DRQ_HANDLER(_devcb) \
- downcast<xt_hdc_device &>(*device).set_drq_handler(DEVCB_##_devcb);
class xt_hdc_device :
public device_t
@@ -32,8 +27,8 @@ public:
// construction/destruction
xt_hdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_drq_handler(Object &&cb) { return m_drq_handler.set_callback(std::forward<Object>(cb)); }
+ auto irq_handler() { return m_irq_handler.bind(); }
+ auto drq_handler() { return m_drq_handler.bind(); }
int dack_r();
int dack_rs();
diff --git a/src/devices/bus/isa/ibm_mfc.cpp b/src/devices/bus/isa/ibm_mfc.cpp
index 30a638d1c27..40ce54ff6fc 100644
--- a/src/devices/bus/isa/ibm_mfc.cpp
+++ b/src/devices/bus/isa/ibm_mfc.cpp
@@ -374,10 +374,11 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_ibm_mfc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("ibm_mfc", Z80, XTAL(11'800'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(prg_map)
- MCFG_DEVICE_IO_MAP(io_map)
+void isa8_ibm_mfc_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_cpu, XTAL(11'800'000) / 2);
+ m_cpu->set_addrmap(AS_PROGRAM, &isa8_ibm_mfc_device::prg_map);
+ m_cpu->set_addrmap(AS_IO, &isa8_ibm_mfc_device::io_map);
I8255(config, m_d71055c_0);
m_d71055c_0->in_pa_callback().set(FUNC(isa8_ibm_mfc_device::ppi0_i_a));
@@ -390,10 +391,10 @@ MACHINE_CONFIG_START(isa8_ibm_mfc_device::device_add_mconfig)
m_d71055c_1->in_pb_callback().set(FUNC(isa8_ibm_mfc_device::ppi1_i_b));
m_d71055c_1->out_pc_callback().set(FUNC(isa8_ibm_mfc_device::ppi1_o_c));
- I8251(config, "d71051", 0);
+ I8251(config, m_d71051, 0);
- MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL(4'000'000) / 8) // 500KHz
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(*this, isa8_ibm_mfc_device, write_usart_clock))
+ clock_device &usart_clock(CLOCK(config, "usart_clock", XTAL(4'000'000) / 8)); // 500KHz
+ usart_clock.signal_handler().set(FUNC(isa8_ibm_mfc_device::write_usart_clock));
PIT8253(config, m_d8253, 0);
m_d8253->set_clk<0>(XTAL(4'000'000) / 8);
@@ -409,7 +410,7 @@ MACHINE_CONFIG_START(isa8_ibm_mfc_device::device_add_mconfig)
m_ym2151->irq_handler().set(FUNC(isa8_ibm_mfc_device::ibm_mfc_ym_irq));
m_ym2151->add_route(0, "ymleft", 1.00);
m_ym2151->add_route(1, "ymright", 1.00);
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp
index 417e354180c..92ead5df95b 100644
--- a/src/devices/bus/isa/isa.cpp
+++ b/src/devices/bus/isa/isa.cpp
@@ -111,11 +111,10 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const
m_io_config("ISA 8-bit I/O", ENDIANNESS_LITTLE, 8, 16, 0, address_map_constructor()),
m_mem16_config("ISA 16-bit mem", ENDIANNESS_LITTLE, 16, 24, 0, address_map_constructor()),
m_io16_config("ISA 16-bit I/O", ENDIANNESS_LITTLE, 16, 16, 0, address_map_constructor()),
- m_maincpu(*this, finder_base::DUMMY_TAG),
- m_iospace(nullptr),
- m_memspace(nullptr),
- m_iowidth(0),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1),
+ m_iospace(*this, finder_base::DUMMY_TAG, -1),
m_memwidth(0),
+ m_iowidth(0),
m_allocspaces(false),
m_out_irq2_cb(*this),
m_out_irq3_cb(*this),
@@ -126,7 +125,6 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const
m_out_drq1_cb(*this),
m_out_drq2_cb(*this),
m_out_drq3_cb(*this),
- m_nmi_enabled(false),
m_write_iochck(*this)
{
std::fill(std::begin(m_dma_device), std::end(m_dma_device), nullptr);
@@ -202,10 +200,27 @@ void isa8_device::remap(int space_id, offs_t start, offs_t end)
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_config_complete - - perform any
+// operations now that the configuration is
+// complete
//-------------------------------------------------
-void isa8_device::device_start()
+void isa8_device::device_config_complete()
+{
+ if (m_allocspaces)
+ {
+ m_memspace.set_tag(*this, DEVICE_SELF, AS_ISA_MEM);
+ m_iospace.set_tag(*this, DEVICE_SELF, AS_ISA_IO);
+ }
+}
+
+//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void isa8_device::device_resolve_objects()
{
// resolve callbacks
m_write_iochck.resolve_safe();
@@ -220,20 +235,16 @@ void isa8_device::device_start()
m_out_drq2_cb.resolve_safe();
m_out_drq3_cb.resolve_safe();
- if (m_allocspaces)
- {
- m_iospace = &space(AS_ISA_IO);
- m_memspace = &space(AS_ISA_MEM);
- m_iowidth = m_iospace->data_width();
- m_memwidth = m_memspace->data_width();
- }
- else // use host CPU's program and I/O spaces directly
- {
- m_iospace = &m_maincpu->space(AS_IO);
- m_iowidth = m_maincpu->space_config(AS_IO)->data_width();
- m_memspace = &m_maincpu->space(AS_PROGRAM);
- m_memwidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
- }
+ m_iowidth = m_iospace->data_width();
+ m_memwidth = m_memspace->data_width();
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void isa8_device::device_start()
+{
}
//-------------------------------------------------
@@ -252,12 +263,12 @@ template<typename R, typename W> void isa8_device::install_space(int spacenum, o
if (spacenum == AS_ISA_IO)
{
- space = m_iospace;
+ space = m_iospace.target();
buswidth = m_iowidth;
}
else if (spacenum == AS_ISA_MEM)
{
- space = m_memspace;
+ space = m_memspace.target();
buswidth = m_memwidth;
}
else
@@ -378,12 +389,18 @@ uint8_t isa8_device::dack_r(int line)
return 0xff;
}
-void isa8_device::dack_w(int line,uint8_t data)
+void isa8_device::dack_w(int line, uint8_t data)
{
if (m_dma_device[line])
return m_dma_device[line]->dack_w(line,data);
}
+void isa8_device::dack_line_w(int line, int state)
+{
+ if (m_dma_device[line])
+ m_dma_device[line]->dack_line_w(line, state);
+}
+
void isa8_device::eop_w(int channel, int state)
{
if (m_dma_eop[channel] && m_dma_device[channel])
@@ -392,18 +409,9 @@ void isa8_device::eop_w(int channel, int state)
void isa8_device::nmi()
{
- if (m_write_iochck.isnull())
- {
- if (m_nmi_enabled)
- {
- m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
- }
- }
- else
- {
- m_write_iochck(0);
- m_write_iochck(1);
- }
+ // active low pulse
+ m_write_iochck(0);
+ m_write_iochck(1);
}
//**************************************************************************
@@ -438,9 +446,15 @@ uint8_t device_isa8_card_interface::dack_r(int line)
{
return 0;
}
-void device_isa8_card_interface::dack_w(int line,uint8_t data)
+
+void device_isa8_card_interface::dack_w(int line, uint8_t data)
{
}
+
+void device_isa8_card_interface::dack_line_w(int line, int state)
+{
+}
+
void device_isa8_card_interface::eop_w(int state)
{
}
@@ -593,7 +607,7 @@ uint16_t isa16_device::dack16_r(int line)
return 0xffff;
}
-void isa16_device::dack16_w(int line,uint16_t data)
+void isa16_device::dack16_w(int line, uint16_t data)
{
if (m_dma_device[line])
return dynamic_cast<device_isa16_card_interface *>(m_dma_device[line])->dack16_w(line,data);
@@ -647,6 +661,6 @@ uint16_t device_isa16_card_interface::dack16_r(int line)
return 0;
}
-void device_isa16_card_interface::dack16_w(int line,uint16_t data)
+void device_isa16_card_interface::dack16_w(int line, uint16_t data)
{
}
diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h
index 3dc15c9df59..fff65de82f6 100644
--- a/src/devices/bus/isa/isa.h
+++ b/src/devices/bus/isa/isa.h
@@ -123,7 +123,8 @@ public:
isa8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
- template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); }
+ template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); }
+ template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); }
auto iochck_callback() { return m_write_iochck.bind(); }
auto irq2_callback() { return m_out_irq2_cb.bind(); }
auto irq3_callback() { return m_out_irq3_cb.bind(); }
@@ -156,7 +157,7 @@ public:
bool is_option_rom_space_available(offs_t start, int size);
// FIXME: shouldn't need to expose this
- address_space &memspace() const { return m_maincpu->space(AS_PROGRAM); }
+ address_space &memspace() const { return *m_memspace; }
DECLARE_WRITE_LINE_MEMBER( irq2_w );
DECLARE_WRITE_LINE_MEMBER( irq3_w );
@@ -176,11 +177,11 @@ public:
DECLARE_WRITE8_MEMBER(io_w);
uint8_t dack_r(int line);
- void dack_w(int line,uint8_t data);
+ void dack_w(int line, uint8_t data);
+ void dack_line_w(int line, int state);
void eop_w(int channels, int state);
void nmi();
- void set_nmi_state(bool enabled) { m_nmi_enabled = enabled; }
virtual void set_dma_channel(uint8_t channel, device_isa8_card_interface *dev, bool do_eop);
@@ -196,15 +197,14 @@ protected:
template<typename R, typename W> void install_space(int spacenum, offs_t start, offs_t end, R rhandler, W whandler);
// device-level overrides
+ virtual void device_config_complete() override;
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
- // internal state
- required_device<cpu_device> m_maincpu;
-
// address spaces
- address_space *m_iospace, *m_memspace;
- int m_iowidth, m_memwidth;
+ required_address_space m_memspace, m_iospace;
+ int m_memwidth, m_iowidth;
bool m_allocspaces;
devcb_write_line m_out_irq2_cb;
@@ -219,7 +219,6 @@ protected:
device_isa8_card_interface *m_dma_device[8];
bool m_dma_eop[8];
- bool m_nmi_enabled;
std::forward_list<device_slot_interface *> m_slot_list;
private:
@@ -246,7 +245,8 @@ public:
void set_isa_device();
// configuration access
virtual uint8_t dack_r(int line);
- virtual void dack_w(int line,uint8_t data);
+ virtual void dack_w(int line, uint8_t data);
+ virtual void dack_line_w(int line, int state);
virtual void eop_w(int state);
virtual void remap(int space_id, offs_t start, offs_t end) {}
@@ -325,7 +325,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( drq7_w );
uint16_t dack16_r(int line);
- void dack16_w(int line,uint16_t data);
+ void dack16_w(int line, uint16_t data);
virtual void remap(int space_id, offs_t start, offs_t end) override;
// 16 bit accessors for ISA-defined address spaces
@@ -370,7 +370,7 @@ public:
// construction/destruction
virtual ~device_isa16_card_interface();
virtual uint16_t dack16_r(int line);
- virtual void dack16_w(int line,uint16_t data);
+ virtual void dack16_w(int line, uint16_t data);
void set_isa_device();
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index fbbafc0bc69..8ab0832c03d 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -31,11 +31,16 @@
#include "ide.h"
#include "xtide.h"
#include "side116.h"
-#include "aha1542.h"
+#include "aha1542b.h"
+#include "aha1542c.h"
+#include "aha174x.h"
#include "wd1002a_wx1.h"
#include "wd1007a.h"
#include "mcd.h"
#include "lbaenhancer.h"
+#include "cl_sh260.h"
+#include "bt54x.h"
+#include "dcb.h"
// sound
#include "adlib.h"
@@ -55,6 +60,7 @@
#include "ne2000.h"
#include "3c505.h"
#include "eis_sad8852.h"
+#include "np600.h"
// communication ports
#include "lpt.h"
@@ -150,7 +156,13 @@ void pc_isa16_cards(device_slot_interface &device)
// 16-bit
device.option_add("ide", ISA16_IDE);
device.option_add("ne2000", NE2000);
- device.option_add("aha1542", AHA1542);
+ device.option_add("aha1542a", AHA1542A);
+ device.option_add("aha1542b", AHA1542B);
+ device.option_add("aha1542c", AHA1542C);
+ device.option_add("aha1542cf", AHA1542CF);
+ device.option_add("aha1542cp", AHA1542CP);
+ device.option_add("aha1740", AHA1740); // actually an EISA card
+ device.option_add("aha1742a", AHA1742A); // actually an EISA card
device.option_add("gus",ISA16_GUS);
device.option_add("sblaster_16", ISA16_SOUND_BLASTER_16);
device.option_add("svga_s3", ISA16_SVGA_S3);
@@ -167,5 +179,12 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("sb16_lle", ISA16_SB16);
device.option_add("mcd", ISA16_MCD);
device.option_add("sad8852", ISA16_SAD8852);
+ device.option_add("np600a3", NP600A3);
device.option_add("wd1007a", WD1007A);
+ device.option_add("ev346", EV346);
+ device.option_add("jc1310", JC1310);
+ device.option_add("bt542b", BT542B);
+ device.option_add("bt542bh", BT542BH);
+ device.option_add("bt545s", BT545S);
+ device.option_add("dcb", NOVELL_DCB);
}
diff --git a/src/devices/bus/isa/lbaenhancer.cpp b/src/devices/bus/isa/lbaenhancer.cpp
index 14bd28826ef..f8ebedb130c 100644
--- a/src/devices/bus/isa/lbaenhancer.cpp
+++ b/src/devices/bus/isa/lbaenhancer.cpp
@@ -84,9 +84,10 @@ const tiny_rom_entry *lba_enhancer_device::device_rom_region() const
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START( lba_enhancer_device::device_add_mconfig )
-// MCFG_DEVICE_ADD("lba_enhancer", lba_enhancer, 0)
-MACHINE_CONFIG_END
+void lba_enhancer_device::device_add_mconfig(machine_config &config)
+{
+// lba_enhancer(config, "lba_enhancer", 0);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/mc1502_fdc.cpp b/src/devices/bus/isa/mc1502_fdc.cpp
index 1b04c6be91e..3f85534a72b 100644
--- a/src/devices/bus/isa/mc1502_fdc.cpp
+++ b/src/devices/bus/isa/mc1502_fdc.cpp
@@ -12,18 +12,6 @@
#include "cpu/i86/i86.h"
#include "formats/pc_dsk.h"
-#define VERBOSE_DBG 0
-
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
-
//**************************************************************************
// DEVICE DEFINITIONS
diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp
index 35e382cc981..f1f6cae6257 100644
--- a/src/devices/bus/isa/mda.cpp
+++ b/src/devices/bus/isa/mda.cpp
@@ -22,7 +22,7 @@
#define VERBOSE_MDA 0 /* MDA (Monochrome Display Adapter) */
-#define MDA_CLOCK 16257000
+#define MDA_CLOCK 16.257_MHz_XTAL
#define MDA_LOG(N,M,A) \
do { \
@@ -107,12 +107,13 @@ DEFINE_DEVICE_TYPE(ISA8_MDA, isa8_mda_device, "isa_ibm_mda", "IBM Monochrome Dis
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_mda_device::device_add_mconfig)
- MCFG_SCREEN_ADD( MDA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 882, 0, 720, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( MC6845_NAME, mc6845_device, screen_update )
+void isa8_mda_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MDA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(MDA_CLOCK, 882, 0, 720, 370, 0, 350);
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", 4 )
+ PALETTE(config, m_palette).set_entries(4);
MC6845(config, m_crtc, MDA_CLOCK/9);
m_crtc->set_screen(MDA_SCREEN_NAME);
@@ -122,11 +123,11 @@ MACHINE_CONFIG_START(isa8_mda_device::device_add_mconfig)
m_crtc->out_hsync_callback().set(FUNC(isa8_mda_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_mda_device::vsync_changed));
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pcmda)
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_pcmda);
PC_LPT(config, m_lpt);
m_lpt->irq_handler().set(FUNC(isa8_mda_device::pc_cpu_line));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -462,10 +463,10 @@ WRITE8_MEMBER( isa8_mda_device::io_write)
switch( offset )
{
case 0: case 2: case 4: case 6:
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 8:
mode_control_w(space, offset, data);
@@ -485,7 +486,7 @@ READ8_MEMBER( isa8_mda_device::io_read)
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_crtc->register_r( space, offset );
+ data = m_crtc->register_r();
break;
case 10:
data = status_r(space, offset);
@@ -532,12 +533,13 @@ DEFINE_DEVICE_TYPE(ISA8_HERCULES, isa8_hercules_device, "isa_hercules", "Hercule
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_hercules_device::device_add_mconfig)
- MCFG_SCREEN_ADD( HERCULES_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 882, 0, 720, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( MC6845_NAME, mc6845_device, screen_update )
+void isa8_hercules_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, HERCULES_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(MDA_CLOCK, 882, 0, 720, 370, 0, 350);
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", 4 )
+ PALETTE(config, m_palette).set_entries(4);
MC6845(config, m_crtc, MDA_CLOCK/9);
m_crtc->set_screen(HERCULES_SCREEN_NAME);
@@ -547,11 +549,11 @@ MACHINE_CONFIG_START(isa8_hercules_device::device_add_mconfig)
m_crtc->out_hsync_callback().set(FUNC(isa8_mda_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_mda_device::vsync_changed));
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pcherc)
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_pcherc);
PC_LPT(config, m_lpt);
m_lpt->irq_handler().set(FUNC(isa8_mda_device::pc_cpu_line));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -677,10 +679,10 @@ WRITE8_MEMBER( isa8_hercules_device::io_write )
switch( offset )
{
case 0: case 2: case 4: case 6:
- m_crtc->address_w( space, offset, data );
+ m_crtc->address_w(data);
break;
case 1: case 3: case 5: case 7:
- m_crtc->register_w( space, offset, data );
+ m_crtc->register_w(data);
break;
case 8:
mode_control_w(space, offset, data);
@@ -724,7 +726,7 @@ READ8_MEMBER( isa8_hercules_device::io_read )
/* return last written mc6845 address value here? */
break;
case 1: case 3: case 5: case 7:
- data = m_crtc->register_r( space, offset );
+ data = m_crtc->register_r();
break;
case 10:
data = status_r(space, offset);
@@ -745,12 +747,13 @@ DEFINE_DEVICE_TYPE(ISA8_EC1840_0002, isa8_ec1840_0002_device, "ec1840_0002", "EC
//-------------------------------------------------
// XXX
-MACHINE_CONFIG_START(isa8_ec1840_0002_device::device_add_mconfig)
- MCFG_SCREEN_ADD( MDA_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 792, 0, 640, 370, 0, 350 )
- MCFG_SCREEN_UPDATE_DEVICE( MC6845_NAME, mc6845_device, screen_update )
+void isa8_ec1840_0002_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, MDA_SCREEN_NAME, SCREEN_TYPE_RASTER));
+ screen.set_raw(MDA_CLOCK, 792, 0, 640, 370, 0, 350);
+ screen.set_screen_update(MC6845_NAME, FUNC(mc6845_device::screen_update));
- MCFG_PALETTE_ADD( "palette", 4 )
+ PALETTE(config, m_palette).set_entries(4);
MC6845(config, m_crtc, MDA_CLOCK/8);
m_crtc->set_screen(MDA_SCREEN_NAME);
@@ -759,7 +762,7 @@ MACHINE_CONFIG_START(isa8_ec1840_0002_device::device_add_mconfig)
m_crtc->set_update_row_callback(FUNC(isa8_mda_device::crtc_update_row), this);
m_crtc->out_hsync_callback().set(FUNC(isa8_mda_device::hsync_changed));
m_crtc->out_vsync_callback().set(FUNC(isa8_mda_device::vsync_changed));
-MACHINE_CONFIG_END
+}
//-------------------------------------------------
// isa8_ec1840_0002_device - constructor
diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp
index 8930a080d8f..3e40653e175 100644
--- a/src/devices/bus/isa/mufdc.cpp
+++ b/src/devices/bus/isa/mufdc.cpp
@@ -195,6 +195,11 @@ void mufdc_device::dack_w(int line, uint8_t data)
return m_fdc->dma_w(data);
}
+void mufdc_device::dack_line_w(int line, int state)
+{
+ //m_fdc->dack_w(state);
+}
+
void mufdc_device::eop_w(int state)
{
m_fdc->tc_w(state == ASSERT_LINE);
diff --git a/src/devices/bus/isa/mufdc.h b/src/devices/bus/isa/mufdc.h
index 4d042a58834..2fa000757e4 100644
--- a/src/devices/bus/isa/mufdc.h
+++ b/src/devices/bus/isa/mufdc.h
@@ -47,6 +47,7 @@ protected:
// device_isa8_card_interface
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
virtual void eop_w(int state) override;
private:
diff --git a/src/devices/bus/isa/ne1000.cpp b/src/devices/bus/isa/ne1000.cpp
index 7723ad75a88..1eaef942105 100644
--- a/src/devices/bus/isa/ne1000.cpp
+++ b/src/devices/bus/isa/ne1000.cpp
@@ -6,12 +6,13 @@
DEFINE_DEVICE_TYPE(NE1000, ne1000_device, "ne1000", "NE1000 Network Adapter")
-MACHINE_CONFIG_START(ne1000_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, ne1000_device, ne1000_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, ne1000_device, ne1000_mem_read))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, ne1000_device, ne1000_mem_write))
-MACHINE_CONFIG_END
+void ne1000_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(ne1000_device::ne1000_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(ne1000_device::ne1000_mem_read));
+ m_dp8390->mem_write_callback().set(FUNC(ne1000_device::ne1000_mem_write));
+}
ne1000_device::ne1000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, NE1000, tag, owner, clock),
diff --git a/src/devices/bus/isa/ne2000.cpp b/src/devices/bus/isa/ne2000.cpp
index 5de941accc2..3ad2cc592ef 100644
--- a/src/devices/bus/isa/ne2000.cpp
+++ b/src/devices/bus/isa/ne2000.cpp
@@ -6,12 +6,13 @@
DEFINE_DEVICE_TYPE(NE2000, ne2000_device, "ne2000", "NE2000 Network Adapter")
-MACHINE_CONFIG_START(ne2000_device::device_add_mconfig)
- MCFG_DEVICE_ADD("dp8390d", DP8390D, 0)
- MCFG_DP8390D_IRQ_CB(WRITELINE(*this, ne2000_device, ne2000_irq_w))
- MCFG_DP8390D_MEM_READ_CB(READ8(*this, ne2000_device, ne2000_mem_read))
- MCFG_DP8390D_MEM_WRITE_CB(WRITE8(*this, ne2000_device, ne2000_mem_write))
-MACHINE_CONFIG_END
+void ne2000_device::device_add_mconfig(machine_config &config)
+{
+ DP8390D(config, m_dp8390, 0);
+ m_dp8390->irq_callback().set(FUNC(ne2000_device::ne2000_irq_w));
+ m_dp8390->mem_read_callback().set(FUNC(ne2000_device::ne2000_mem_read));
+ m_dp8390->mem_write_callback().set(FUNC(ne2000_device::ne2000_mem_write));
+}
ne2000_device::ne2000_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
: device_t(mconfig, NE2000, tag, owner, clock),
diff --git a/src/devices/bus/isa/np600.cpp b/src/devices/bus/isa/np600.cpp
new file mode 100644
index 00000000000..064c1d40191
--- /dev/null
+++ b/src/devices/bus/isa/np600.cpp
@@ -0,0 +1,76 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*********************************************************************
+
+ InterLan NP600 Intelligent Protocol Processor
+
+*********************************************************************/
+
+#include "emu.h"
+#include "np600.h"
+
+#include "cpu/i86/i186.h"
+#include "machine/74259.h"
+//#include "machine/i82586.h"
+
+DEFINE_DEVICE_TYPE(NP600A3, np600a3_device, "np600a3", "InterLan NP600A-3 Intelligent Protocol Processor")
+
+np600a3_device::np600a3_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, NP600A3, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_npcpu(*this, "npcpu")
+{
+}
+
+void np600a3_device::device_start()
+{
+}
+
+u16 np600a3_device::status_r()
+{
+ return 0;
+}
+
+void np600a3_device::mem_map(address_map &map)
+{
+ map(0x00000, 0x7ffff).ram(); // GM71256-12 x16
+ map(0xfc000, 0xfffff).rom().region("npcpu", 0);
+}
+
+void np600a3_device::io_map(address_map &map)
+{
+ map(0x0070, 0x007f).w("latch70", FUNC(ls259_device::write_a0));
+ map(0x0080, 0x0081).r(FUNC(np600a3_device::status_r));
+}
+
+void np600a3_device::device_add_mconfig(machine_config &config)
+{
+ I80186(config, m_npcpu, 16_MHz_XTAL);
+ m_npcpu->set_addrmap(AS_PROGRAM, &np600a3_device::mem_map);
+ m_npcpu->set_addrmap(AS_IO, &np600a3_device::io_map);
+
+ LS259(config, "latch70"); // U28
+
+ //I82586(config, "enet", 20_MHz_XTAL);
+}
+
+ROM_START(np600a3)
+ ROM_REGION(0x4000, "npcpu", 0)
+ ROM_LOAD16_BYTE("258-0032-00_rev_ba.u38", 0x0000, 0x2000, CRC(84ccb317) SHA1(3ecc8e265336f5d3b0f276f18dd1b7001778f2c3))
+ ROM_LOAD16_BYTE("258-0033-00_rev_ba.u39", 0x0001, 0x2000, CRC(0e0f726c) SHA1(520773e235a826438b025381cd3861df86d4965d))
+
+ // Undumped small devices (mostly or all PLDs):
+ // 258-0037-00 REV AA (U17, 20 pins)
+ // 258-0027-01 REV AB (U20, 20 pins)
+ // 020701079BFA (U29, 16 pins)
+ // 258-0031-00 REV AC (U34, PAL20xx, 24 pins)
+ // 258-0030-00 REV AA (U36, 20 pins)
+ // 258-0028-01 REV AA (U44, 20 pins)
+ // 258-0029-01 REV AA (U46, 20 pins)
+ // 258-0089-00 REV AA (U48, 20 pins)
+ROM_END
+
+const tiny_rom_entry *np600a3_device::device_rom_region() const
+{
+ return ROM_NAME(np600a3);
+}
diff --git a/src/devices/bus/isa/np600.h b/src/devices/bus/isa/np600.h
new file mode 100644
index 00000000000..7831d804922
--- /dev/null
+++ b/src/devices/bus/isa/np600.h
@@ -0,0 +1,39 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*********************************************************************
+
+ InterLan NP600 Intelligent Protocol Processor
+
+*********************************************************************/
+
+#ifndef MAME_BUS_ISA_NP600_H
+#define MAME_BUS_ISA_NP600_H
+
+#pragma once
+
+#include "isa.h"
+
+class np600a3_device : public device_t, public device_isa16_card_interface
+{
+public:
+ np600a3_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::LAN; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ u16 status_r();
+
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<cpu_device> m_npcpu;
+};
+
+DECLARE_DEVICE_TYPE(NP600A3, np600a3_device)
+
+#endif // MAME_BUS_ISA_NP600_H
diff --git a/src/devices/bus/isa/num9rev.cpp b/src/devices/bus/isa/num9rev.cpp
index baf30cca586..ebe44a379f4 100644
--- a/src/devices/bus/isa/num9rev.cpp
+++ b/src/devices/bus/isa/num9rev.cpp
@@ -53,19 +53,20 @@ UPD7220_DISPLAY_PIXELS_MEMBER( isa8_number_9_rev_device::hgdc_display_pixels )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_number_9_rev_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(512, 448)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 448-1)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_UPDATE_DRIVER(isa8_number_9_rev_device, screen_update)
- MCFG_PALETTE_ADD("palette", 4096)
+void isa8_number_9_rev_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_size(512, 448);
+ screen.set_visarea(0, 512-1, 0, 448-1);
+ screen.set_refresh_hz(60);
+ screen.set_screen_update(FUNC(isa8_number_9_rev_device::screen_update));
+ PALETTE(config, m_palette).set_entries(4096);
UPD7220(config, m_upd7220, XTAL(4'433'619)/2); // unknown clock
m_upd7220->set_addrmap(0, &isa8_number_9_rev_device::upd7220_map);
- m_upd7220->set_display_pixels_callback(FUNC(isa8_number_9_rev_device::hgdc_display_pixels), this);
+ m_upd7220->set_display_pixels(FUNC(isa8_number_9_rev_device::hgdc_display_pixels));
m_upd7220->set_screen("screen");
-MACHINE_CONFIG_END
+}
//**************************************************************************
// LIVE DEVICE
@@ -93,7 +94,7 @@ void isa8_number_9_rev_device::device_start()
{
set_isa_device();
- m_isa->install_memory(0xc0000, 0xc0001, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220));
+ m_isa->install_memory(0xc0000, 0xc0001, read8sm_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8sm_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220));
m_isa->install_memory(0xc0100, 0xc03ff, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this));
m_isa->install_memory(0xc0400, 0xc0401, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this));
m_isa->install_memory(0xc0500, 0xc06ff, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this));
diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp
index 9eebabb188f..bea87f420ee 100644
--- a/src/devices/bus/isa/omti8621.cpp
+++ b/src/devices/bus/isa/omti8621.cpp
@@ -1285,6 +1285,11 @@ void omti8621_device::dack_w(int line, uint8_t data)
return m_fdc->dma_w(data);
}
+void omti8621_device::dack_line_w(int line, int state)
+{
+ //m_fdc->dack_w(state);
+}
+
void omti8621_device::eop_w(int state)
{
m_fdc->tc_w(state == ASSERT_LINE);
diff --git a/src/devices/bus/isa/omti8621.h b/src/devices/bus/isa/omti8621.h
index 070ae2dbe70..1258af71854 100644
--- a/src/devices/bus/isa/omti8621.h
+++ b/src/devices/bus/isa/omti8621.h
@@ -56,6 +56,7 @@ protected:
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
virtual void eop_w(int state) override;
void set_interrupt(enum line_state line_state);
diff --git a/src/devices/bus/isa/p1_fdc.cpp b/src/devices/bus/isa/p1_fdc.cpp
index df53cdb7629..9b62451e65a 100644
--- a/src/devices/bus/isa/p1_fdc.cpp
+++ b/src/devices/bus/isa/p1_fdc.cpp
@@ -12,18 +12,6 @@
#include "cpu/i86/i86.h"
#include "formats/pc_dsk.h"
-#define VERBOSE_DBG 0
-
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
-
//**************************************************************************
// DEVICE DEFINITIONS
@@ -87,7 +75,6 @@ const tiny_rom_entry *p1_fdc_device::device_rom_region() const
uint8_t p1_fdc_device::p1_wd17xx_motor_r()
{
- DBG_LOG(1, "p1_fdc_motor_r", ("R = $%02x\n", 0));
// XXX always on for now
return 0;
}
@@ -118,8 +105,6 @@ uint8_t p1_fdc_device::p1_wd17xx_aux_r()
*/
void p1_fdc_device::p1_wd17xx_aux_w(int data)
{
- DBG_LOG(1, "p1_fdc_aux_w", ("W $%02x\n", data));
-
floppy_image_device *floppy0 = m_fdc->subdevice<floppy_connector>("0")->get_device();
floppy_image_device *floppy1 = m_fdc->subdevice<floppy_connector>("1")->get_device();
floppy_image_device *floppy = ((data & 2) ? floppy1 : floppy0);
diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp
index d0971e6c3c6..129c7a6ce37 100644
--- a/src/devices/bus/isa/p1_hdc.cpp
+++ b/src/devices/bus/isa/p1_hdc.cpp
@@ -14,17 +14,14 @@
// MACROS / CONSTANTS
//**************************************************************************
-#define VERBOSE_DBG 1
+//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already
+#define LOG_DEBUG (1U << 1)
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
+//#define VERBOSE (LOG_DEBUG)
+//#define LOG_OUTPUT_FUNC printf
+#include "logmacro.h"
+
+#define LOGDBG(...) LOGMASKED(LOG_DEBUG, __VA_ARGS__)
//**************************************************************************
@@ -92,20 +89,21 @@ READ8_MEMBER(p1_hdc_device::p1_HDC_r)
switch (offset >> 8)
{
case 8:
- data = m_hdc->read(space, offset & 255);
+ data = m_hdc->read(offset & 255);
}
- DBG_LOG(1, "hdc", ("R $%04x == $%02x\n", offset, data));
+ LOG("hdc R $%04x == $%02x\n", offset, data);
return data;
}
WRITE8_MEMBER(p1_hdc_device::p1_HDC_w)
{
- DBG_LOG(1, "hdc", ("W $%04x <- $%02x\n", offset, data));
+ LOG("hdc W $%04x <- $%02x\n", offset, data);
+
switch (offset >> 8)
{
case 8:
- m_hdc->write(space, offset & 255, data, 0);
+ m_hdc->write(offset & 255, data);
}
}
diff --git a/src/devices/bus/isa/p1_sound.cpp b/src/devices/bus/isa/p1_sound.cpp
index 485dca5205e..b8e37a57368 100644
--- a/src/devices/bus/isa/p1_sound.cpp
+++ b/src/devices/bus/isa/p1_sound.cpp
@@ -29,15 +29,15 @@ DEFINE_DEVICE_TYPE(P1_SOUND, p1_sound_device, "p1_sound", "Poisk-1 sound card (B
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(p1_sound_device::device_add_mconfig)
+void p1_sound_device::device_add_mconfig(machine_config &config)
+{
I8251(config, m_midi, 0);
m_midi->txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_midi->rxrdy_handler().set(":isa", FUNC(isa8_device::irq3_w));
- MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
- MCFG_MIDI_RX_HANDLER(WRITELINE("midi", i8251_device, write_rxd))
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_midi, FUNC(i8251_device::write_rxd));
- MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
PIT8253(config, m_d14, 0);
m_d14->set_clk<0>(XTAL(12'500'000)/10);
@@ -65,12 +65,12 @@ MACHINE_CONFIG_START(p1_sound_device::device_add_mconfig)
// m_d17->out_handler<2>().set(FUNC(XXX));
SPEAKER(config, "speaker").front_center();
- MCFG_DEVICE_ADD("filter", FILTER_RC)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
- MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ FILTER_RC(config, m_filter).add_route(ALL_OUTPUTS, "speaker", 1.0);
+ DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "filter", 0.5); // unknown DAC
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+}
//**************************************************************************
diff --git a/src/devices/bus/isa/pc1640_iga.cpp b/src/devices/bus/isa/pc1640_iga.cpp
index 04ef54c2d42..dfab59f2e76 100644
--- a/src/devices/bus/isa/pc1640_iga.cpp
+++ b/src/devices/bus/isa/pc1640_iga.cpp
@@ -28,8 +28,6 @@
//**************************************************************************
#define PEGA1A_TAG "ic910"
-#define EGA_CRTC_NAME "crtc_ega_ega"
-
//**************************************************************************
@@ -103,8 +101,6 @@ void isa8_pc1640_iga_device::device_start()
m_plane[2] = m_videoram + 0x20000;
m_plane[3] = m_videoram + 0x30000;
- m_crtc_ega = subdevice<crtc_ega_device>(EGA_CRTC_NAME);
-
m_isa->install_rom(this, 0xc0000, 0xc7fff, "ega", "iga");
m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this));
m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this));
diff --git a/src/devices/bus/isa/pds.cpp b/src/devices/bus/isa/pds.cpp
index 45dffd9904e..65a35db2b14 100644
--- a/src/devices/bus/isa/pds.cpp
+++ b/src/devices/bus/isa/pds.cpp
@@ -56,6 +56,7 @@ void isa8_pds_device::device_stop()
{
}
-MACHINE_CONFIG_START(isa8_pds_device::device_add_mconfig)
- MCFG_DEVICE_ADD("pds_ppi", I8255, 0)
-MACHINE_CONFIG_END
+void isa8_pds_device::device_add_mconfig(machine_config &config)
+{
+ I8255(config, m_ppi);
+}
diff --git a/src/devices/bus/isa/pgc.cpp b/src/devices/bus/isa/pgc.cpp
index ab242877e01..d90badaeae7 100644
--- a/src/devices/bus/isa/pgc.cpp
+++ b/src/devices/bus/isa/pgc.cpp
@@ -151,30 +151,31 @@ DEFINE_DEVICE_TYPE(ISA8_PGC, isa8_pgc_device, "isa_ibm_pgc", "IBM Professional G
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_pgc_device::device_add_mconfig)
- MCFG_DEVICE_ADD("maincpu", I8088, XTAL(24'000'000)/3)
- MCFG_DEVICE_PROGRAM_MAP(pgc_map)
+void isa8_pgc_device::device_add_mconfig(machine_config &config)
+{
+ I8088(config, m_cpu, XTAL(24'000'000)/3);
+ m_cpu->set_addrmap(AS_PROGRAM, &isa8_pgc_device::pgc_map);
#if 0
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(isa8_pgc_device, irq_callback)
+ m_cpu->set_irq_acknowledge_callback(FUNC(isa8_pgc_device::irq_callback));
#endif
- MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", isa8_pgc_device, scanline_callback,
- attotime::from_hz(60*PGC_TOTAL_VERT))
- MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL(50'000'000)/(2*PGC_HORZ_START)))
+ timer_device &scantimer(TIMER(config, "scantimer"));
+ scantimer.configure_periodic(FUNC(isa8_pgc_device::scanline_callback), attotime::from_hz(60*PGC_TOTAL_VERT));
+ scantimer.set_start_delay(attotime::from_hz(XTAL(50'000'000)/(2*PGC_HORZ_START)));
- MCFG_SCREEN_ADD(PGC_SCREEN_NAME, RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(50'000'000)/2,
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(XTAL(50'000'000)/2,
PGC_TOTAL_HORZ, PGC_HORZ_START, PGC_HORZ_START+PGC_DISP_HORZ,
- PGC_TOTAL_VERT, PGC_VERT_START, PGC_VERT_START+PGC_DISP_VERT)
- MCFG_SCREEN_UPDATE_DRIVER(isa8_pgc_device, screen_update)
- MCFG_SCREEN_PALETTE("palette")
+ PGC_TOTAL_VERT, PGC_VERT_START, PGC_VERT_START+PGC_DISP_VERT);
+ m_screen->set_screen_update(FUNC(isa8_pgc_device::screen_update));
+ m_screen->set_palette(m_palette);
#if 0
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, isa8_pgc_device, vblank_irq))
+ m_screen->screen_vblank().set(FUNC(isa8_pgc_device::vblank_irq));
#endif
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pgc)
- MCFG_PALETTE_ADD( "palette", 256 )
-MACHINE_CONFIG_END
+ GFXDECODE(config, "gfxdecode", m_palette, gfx_pgc);
+ PALETTE(config, m_palette).set_entries(256);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/sb16.cpp b/src/devices/bus/isa/sb16.cpp
index be8cce9c644..6bce4b4198c 100644
--- a/src/devices/bus/isa/sb16.cpp
+++ b/src/devices/bus/isa/sb16.cpp
@@ -711,9 +711,9 @@ void sb16_lle_device::device_start()
m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb16_lle_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::host_cmd_w), this) );
m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb16_lle_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) );
m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_lle_device::mpu401_r), this), write8_delegate(FUNC(sb16_lle_device::mpu401_w), this));
- m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0388, 0x0389, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0220, 0x0223, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
m_isa->set_dma_channel(1, this, false);
m_isa->set_dma_channel(5, this, false);
m_timer = timer_alloc();
diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp
index 74f1e0f8dd4..d8a47349918 100644
--- a/src/devices/bus/isa/sblaster.cpp
+++ b/src/devices/bus/isa/sblaster.cpp
@@ -66,7 +66,7 @@ static const int m_cmd_fifo_length[256] =
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 6x */
-1, -1, -1, -1, 3, 3, 3, 3, -1, -1, -1, -1, -1, 1, -1, 1, /* 7x */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 8x */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 9x */
+ 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 9x */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* Ax */
4, -1, -1, -1, -1, -1, 4, -1, 4, -1, -1, -1, -1, -1, 4, -1, /* Bx */
4, -1, -1, -1, -1, -1, 4, -1, 4, -1, -1, -1, -1, -1, 4, -1, /* Cx */
@@ -82,7 +82,7 @@ READ8_MEMBER( sb8_device::ym3812_16_r )
uint8_t retVal = 0xff;
switch(offset)
{
- case 0 : retVal = m_ym3812->status_port_r( space, offset ); break;
+ case 0 : retVal = m_ym3812->status_port_r(); break;
}
return retVal;
}
@@ -91,8 +91,8 @@ WRITE8_MEMBER( sb8_device::ym3812_16_w )
{
switch(offset)
{
- case 0 : m_ym3812->control_port_w( space, offset, data ); break;
- case 1 : m_ym3812->write_port_w( space, offset, data ); break;
+ case 0 : m_ym3812->control_port_w(data); break;
+ case 1 : m_ym3812->write_port_w(data); break;
}
}
@@ -356,6 +356,7 @@ void sb_device::process_fifo(uint8_t cmd)
break;
case 0x1c: // 8-bit DMA with autoinit
+ case 0x90: // 8-bit DMA with autoinit, high speed. XXX only on DSP 3.xx
// printf("Start DMA (autoinit, size = %x)\n", m_dsp.dma_length);
m_dsp.dma_transferred = 0;
m_dsp.dma_autoinit = 1;
@@ -583,23 +584,20 @@ void sb_device::process_fifo(uint8_t cmd)
mode = m_dsp.fifo[1];
m_dsp.flags = 0;
m_dsp.dma_length = (m_dsp.fifo[2] + (m_dsp.fifo[3]<<8)) + 1;
- if((cmd & 0xf0) == 0xb0)
- {
- m_dsp.flags |= SIXTEENBIT;
- m_dsp.dma_length <<= 1;
- drq16_w(1);
- }
- else
- drq_w(1);
if(cmd & 0x04)
m_dsp.dma_autoinit = 1;
if(mode & 0x10)
m_dsp.flags |= SIGNED;
if(mode & 0x20)
- {
m_dsp.flags |= STEREO;
+ if((cmd & 0xf0) == 0xb0)
+ {
+ m_dsp.flags |= SIXTEENBIT;
m_dsp.dma_length <<= 1;
+ drq16_w(1);
}
+ else
+ drq_w(1);
m_dsp.dma_transferred = 0;
m_dsp.dma_timer_started = false;
m_dsp.dma_throttled = false;
@@ -1149,7 +1147,6 @@ void sb_device::common(machine_config &config)
DAC_16BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
DAC_16BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
@@ -1263,9 +1260,9 @@ void sb8_device::device_start()
{
ymf262_device *ymf262 = subdevice<ymf262_device>("ymf262");
- m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0388, 0x038b, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0220, 0x0223, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
}
else
{
@@ -1306,9 +1303,9 @@ void sb16_device::device_start()
m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) );
m_isa->install_device(0x0224, 0x0225, read8_delegate(FUNC(sb16_device::mixer_r), this), write8_delegate(FUNC(sb16_device::mixer_w), this));
m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_device::mpu401_r), this), write8_delegate(FUNC(sb16_device::mpu401_w), this));
- m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0388, 0x038b, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0220, 0x0223, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ymf262_device::read), ymf262), write8sm_delegate(FUNC(ymf262_device::write), ymf262));
save_item(NAME(m_mixer.data));
save_item(NAME(m_mixer.status));
diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp
index e9ace1ddb83..92f049f0402 100644
--- a/src/devices/bus/isa/sc499.cpp
+++ b/src/devices/bus/isa/sc499.cpp
@@ -177,9 +177,10 @@ static INPUT_PORTS_START( sc499_port )
INPUT_PORTS_END
-MACHINE_CONFIG_START(sc499_device::device_add_mconfig)
- MCFG_DEVICE_ADD(SC499_CTAPE_TAG, SC499_CTAPE, 0)
-MACHINE_CONFIG_END
+void sc499_device::device_add_mconfig(machine_config &config)
+{
+ SC499_CTAPE(config, m_image, 0);
+}
//**************************************************************************
diff --git a/src/devices/bus/isa/ssi2001.cpp b/src/devices/bus/isa/ssi2001.cpp
index 55adf04b0a2..2c433321847 100644
--- a/src/devices/bus/isa/ssi2001.cpp
+++ b/src/devices/bus/isa/ssi2001.cpp
@@ -30,7 +30,7 @@ void ssi2001_device::device_start()
{
set_isa_device();
m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("pc_joy")));
- m_isa->install_device(0x0280, 0x029F, read8_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581")));
+ m_isa->install_device(0x0280, 0x029F, read8sm_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8sm_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581")));
}
diff --git a/src/devices/bus/isa/stereo_fx.cpp b/src/devices/bus/isa/stereo_fx.cpp
index c38d3aace80..b23a0dbe454 100644
--- a/src/devices/bus/isa/stereo_fx.cpp
+++ b/src/devices/bus/isa/stereo_fx.cpp
@@ -134,7 +134,6 @@ void stereo_fx_device::device_add_mconfig(machine_config &config)
DAC_8BIT_R2R(config, "ldac", 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
DAC_8BIT_R2R(config, "rdac", 0).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
@@ -216,8 +215,8 @@ void stereo_fx_device::device_start()
m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(stereo_fx_device::dsp_data_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) );
m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(stereo_fx_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_cmd_w), this) );
m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(stereo_fx_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) );
- m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812));
- m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812));
+ m_isa->install_device(0x0388, 0x0389, read8sm_delegate(FUNC(ym3812_device::read), ym3812), write8sm_delegate(FUNC(ym3812_device::write), ym3812));
+ m_isa->install_device(0x0228, 0x0229, read8sm_delegate(FUNC(ym3812_device::read), ym3812), write8sm_delegate(FUNC(ym3812_device::write), ym3812));
m_timer = timer_alloc();
m_timer->adjust(attotime::from_hz(2000000), 0, attotime::from_hz(2000000));
m_isa->set_dma_channel(1, this, false);
diff --git a/src/devices/bus/isa/svga_cirrus.cpp b/src/devices/bus/isa/svga_cirrus.cpp
index 444acac7c1a..bcb6b4995a1 100644
--- a/src/devices/bus/isa/svga_cirrus.cpp
+++ b/src/devices/bus/isa/svga_cirrus.cpp
@@ -30,14 +30,14 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_CIRRUS_GD542X, isa16_svga_cirrus_gd542x_device, "c
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_cirrus_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", cirrus_gd5430_device, screen_update)
+void isa16_svga_cirrus_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(cirrus_gd5430_device::screen_update));
- MCFG_DEVICE_ADD("vga", CIRRUS_GD5430, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ CIRRUS_GD5430(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -110,14 +110,14 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_cirrus_gd542x_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", cirrus_gd5428_device, screen_update)
+void isa16_svga_cirrus_gd542x_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(cirrus_gd5428_device::screen_update));
- MCFG_DEVICE_ADD("vga", CIRRUS_GD5428, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ CIRRUS_GD5428(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp
index 1c97abc3b62..d5a2cde30bf 100644
--- a/src/devices/bus/isa/svga_s3.cpp
+++ b/src/devices/bus/isa/svga_s3.cpp
@@ -40,14 +40,14 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_S3, isa16_svga_s3_device, "s3_764", "Number Nine 9
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_s3_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3_vga_device, screen_update)
+void isa16_svga_s3_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3_VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -146,14 +146,14 @@ DEFINE_DEVICE_TYPE(ISA16_S3VIRGE, isa16_s3virge_device, "s3virge", "S3 ViRGE Gra
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_s3virge_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3virge_vga_device, screen_update)
+void isa16_s3virge_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3virge_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3VIRGE, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3VIRGE(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -227,14 +227,14 @@ DEFINE_DEVICE_TYPE(ISA16_S3VIRGEDX, isa16_s3virgedx_device, "s3virgedx", "S3 ViR
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_s3virgedx_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3virgedx_vga_device, screen_update)
+void isa16_s3virgedx_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3virgedx_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3VIRGEDX, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3VIRGEDX(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
@@ -309,14 +309,14 @@ DEFINE_DEVICE_TYPE(ISA16_DMS3D2KPRO, isa16_stealth3d2kpro_device, "dms3d2kp", "D
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_stealth3d2kpro_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", s3virgedx_rev1_vga_device, screen_update)
+void isa16_stealth3d2kpro_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(s3virgedx_rev1_vga_device::screen_update));
- MCFG_DEVICE_ADD("vga", S3VIRGEDX1, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ S3VIRGEDX1(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/svga_trident.cpp b/src/devices/bus/isa/svga_trident.cpp
index 79aa1dfd55f..aa7fc90b489 100644
--- a/src/devices/bus/isa/svga_trident.cpp
+++ b/src/devices/bus/isa/svga_trident.cpp
@@ -30,14 +30,14 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_TGUI9680, isa16_svga_tgui9680_device, "tgui9680",
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_svga_tgui9680_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", trident_vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", TRIDENT_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa16_svga_tgui9680_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(trident_vga_device::screen_update));
+
+ TRIDENT_VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp
index fd232b01d8d..dfe39a39d8e 100644
--- a/src/devices/bus/isa/svga_tseng.cpp
+++ b/src/devices/bus/isa/svga_tseng.cpp
@@ -29,14 +29,14 @@ DEFINE_DEVICE_TYPE(ISA8_SVGA_ET4K, isa8_svga_et4k_device, "et4000", "SVGA Tseng
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_svga_et4k_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", tseng_vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", TSENG_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa8_svga_et4k_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(tseng_vga_device::screen_update));
+
+ TSENG_VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/vga.cpp b/src/devices/bus/isa/vga.cpp
index b8a86adbfe3..0419ecdd255 100644
--- a/src/devices/bus/isa/vga.cpp
+++ b/src/devices/bus/isa/vga.cpp
@@ -27,14 +27,14 @@ DEFINE_DEVICE_TYPE(ISA8_VGA, isa8_vga_device, "ibm_vga", "IBM VGA Graphics Card"
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa8_vga_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa8_vga_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(vga_device::screen_update));
+
+ VGA(config, "vga", 0).set_screen("screen");
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/vga_ati.cpp b/src/devices/bus/isa/vga_ati.cpp
index 650a686d4fc..bad1a47a479 100644
--- a/src/devices/bus/isa/vga_ati.cpp
+++ b/src/devices/bus/isa/vga_ati.cpp
@@ -76,32 +76,33 @@ DEFINE_DEVICE_TYPE(ISA16_SVGA_MACH64, isa16_vga_mach64_device, "mach64
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(isa16_vga_gfxultra_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", ati_vga_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", ATI_VGA, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(isa16_vga_gfxultrapro_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", mach32_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", ATIMACH32, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(isa16_vga_mach64_device::device_add_mconfig)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
- MCFG_SCREEN_UPDATE_DEVICE("vga", mach64_device, screen_update)
-
- MCFG_DEVICE_ADD("vga", ATIMACH64, 0)
- MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+void isa16_vga_gfxultra_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(ati_vga_device::screen_update));
+
+ ATI_VGA(config, "vga", 0).set_screen("screen");
+}
+
+void isa16_vga_gfxultrapro_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(mach32_device::screen_update));
+
+ ATIMACH32(config, "vga", 0).set_screen("screen");
+}
+
+void isa16_vga_mach64_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
+ screen.set_screen_update("vga", FUNC(mach64_device::screen_update));
+
+ ATIMACH64(config, "vga", 0).set_screen("screen");
+}
+
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/isa/wd1007a.cpp b/src/devices/bus/isa/wd1007a.cpp
index 3db2db1d776..22d9863e392 100644
--- a/src/devices/bus/isa/wd1007a.cpp
+++ b/src/devices/bus/isa/wd1007a.cpp
@@ -45,9 +45,10 @@ wd1007a_device::wd1007a_device(const machine_config &mconfig, const char *tag, d
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(wd1007a_device::device_add_mconfig)
- MCFG_DEVICE_ADD("mcu", AM8753, 10_MHz_XTAL)
-MACHINE_CONFIG_END
+void wd1007a_device::device_add_mconfig(machine_config &config)
+{
+ AM8753(config, "mcu", 10_MHz_XTAL);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp
index 690bc161f7f..57dec00af89 100644
--- a/src/devices/bus/isa/wdxt_gen.cpp
+++ b/src/devices/bus/isa/wdxt_gen.cpp
@@ -237,6 +237,16 @@ void wdxt_gen_device::dack_w(int line, uint8_t data)
//-------------------------------------------------
+// dack_line_w -
+//-------------------------------------------------
+
+void wdxt_gen_device::dack_line_w(int line, int state)
+{
+ m_host->dack3_w(state);
+}
+
+
+//-------------------------------------------------
// wd1015_t1_r -
//-------------------------------------------------
diff --git a/src/devices/bus/isa/wdxt_gen.h b/src/devices/bus/isa/wdxt_gen.h
index 89d3aa5774f..d909b7bd155 100644
--- a/src/devices/bus/isa/wdxt_gen.h
+++ b/src/devices/bus/isa/wdxt_gen.h
@@ -52,6 +52,7 @@ protected:
// device_isa8_card_interface
virtual uint8_t dack_r(int line) override;
virtual void dack_w(int line, uint8_t data) override;
+ virtual void dack_line_w(int line, int state) override;
private:
DECLARE_WRITE_LINE_MEMBER( irq5_w );