diff options
Diffstat (limited to 'src/devices/bus/isa')
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 ); |