mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Add AHA-1542A, AHA-1542B, and BIOS v1.02 of AHA-1542C ROMs from Adaptec
This commit is contained in:
parent
94b297bc1b
commit
44ea330991
@ -1228,6 +1228,8 @@ if (BUSES["ISA"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/isa/xtide.h",
|
||||
MAME_DIR .. "src/devices/bus/isa/side116.cpp",
|
||||
MAME_DIR .. "src/devices/bus/isa/side116.h",
|
||||
MAME_DIR .. "src/devices/bus/isa/aha1542b.cpp",
|
||||
MAME_DIR .. "src/devices/bus/isa/aha1542b.h",
|
||||
MAME_DIR .. "src/devices/bus/isa/aha1542c.cpp",
|
||||
MAME_DIR .. "src/devices/bus/isa/aha1542c.h",
|
||||
MAME_DIR .. "src/devices/bus/isa/wd1002a_wx1.cpp",
|
||||
|
123
src/devices/bus/isa/aha1542b.cpp
Normal file
123
src/devices/bus/isa/aha1542b.cpp
Normal file
@ -0,0 +1,123 @@
|
||||
// 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_RST75_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("b_bc00.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, "v320g", "AT/SCSI BIOS Version 3.20 (> 1 GB support)")
|
||||
ROMX_LOAD("b_bd00.bin", 0x0000, 0x4000, CRC(2387197b) SHA1(703e1fe1ba924c02d617ac37ec7a20e12bef1cc7), ROM_BIOS(2))
|
||||
ROM_SYSTEM_BIOS(3, "v320gt", "AT/SCSI BIOS Version 3.20 (extended timeout)")
|
||||
ROMX_LOAD("b_b300.bin", 0x0000, 0x4000, CRC(4c5b07d8) SHA1(692e824f916f55519c9905839f5f6609f5e8c0a5), ROM_BIOS(3))
|
||||
ROM_SYSTEM_BIOS(4, "v320a", "AT/SCSI BIOS Version 3.20Alt (port 334h)")
|
||||
ROMX_LOAD("b_ac00.bin", 0x0000, 0x4000, CRC(becd6d08) SHA1(b5e7cbdeb241c1ff57602291e87c58ac0ee72d54), ROM_BIOS(4))
|
||||
|
||||
ROM_REGION(0x4000, "mcode", 0)
|
||||
ROMX_LOAD("m_fc8a.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(0))
|
||||
ROMX_LOAD("m_fc8a.bin", 0x0000, 0x4000, CRC(6801f89e) SHA1(33d36bc93734105b950414e7c433a283032838e9), ROM_BIOS(1)) // assumed compatible with v310a BIOS
|
||||
ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(2))
|
||||
ROMX_LOAD("m_5d98.bin", 0x0000, 0x4000, CRC(f7d51536) SHA1(5ad1bb4bde3e8c30380b05d32ac273c781ab12a8), ROM_BIOS(3)) // also provided with v320g BIOS
|
||||
ROMX_LOAD("m_3054.bin", 0x0000, 0x4000, CRC(461b1885) SHA1(50dc49b0fd88b116b83e3c71f58c758b618d1ddf), ROM_BIOS(4))
|
||||
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);
|
||||
}
|
57
src/devices/bus/isa/aha1542b.h
Normal file
57
src/devices/bus/isa/aha1542b.h
Normal file
@ -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
|
@ -154,10 +154,14 @@ WRITE8_MEMBER( aha1542c_device::aha1542_w )
|
||||
|
||||
ROM_START( aha1542c )
|
||||
ROM_REGION( 0x8000, "aha1542", 0 )
|
||||
ROM_LOAD( "534201-00_d_bios_144c.u15", 0x0000, 0x8000, CRC(35178004) SHA1(2b38f2e40cd02a1b32966ead7b202b0fca130cb8) )
|
||||
ROM_SYSTEM_BIOS( 0, "v101", "AHA-1540C/1542C BIOS v1.01" )
|
||||
ROMX_LOAD( "534201-00_d_bios_144c.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 )
|
||||
ROM_LOAD( "534001-00_d_mcode_a3c2.u5", 0x0000, 0x8000, CRC(220dd5a2) SHA1(4fc51c9dd63b45a50edcd56baa706d61decbef38) )
|
||||
ROMX_LOAD( "534001-00_d_mcode_a3c2.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 )
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "ide.h"
|
||||
#include "xtide.h"
|
||||
#include "side116.h"
|
||||
#include "aha1542b.h"
|
||||
#include "aha1542c.h"
|
||||
#include "wd1002a_wx1.h"
|
||||
#include "wd1007a.h"
|
||||
@ -153,6 +154,8 @@ void pc_isa16_cards(device_slot_interface &device)
|
||||
// 16-bit
|
||||
device.option_add("ide", ISA16_IDE);
|
||||
device.option_add("ne2000", NE2000);
|
||||
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);
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
#include "logmacro.h"
|
||||
|
||||
DEFINE_DEVICE_TYPE(AIC6250, aic6250_device, "aic6250", "Adaptec 6250 High-Performance SCSI Protocol Chip")
|
||||
DEFINE_DEVICE_TYPE(AIC6250, aic6250_device, "aic6250", "Adaptec AIC-6250 High-Performance SCSI Protocol Chip")
|
||||
|
||||
static char const *const nscsi_phase[] = { "DATA OUT", "DATA IN", "COMMAND", "STATUS", "*", "*", "MESSAGE OUT", "MESSAGE IN" };
|
||||
static char const *const aic6250_phase[] = { "DATA OUT", "*", "DATA IN", "*", "COMMAND", "MESSAGE OUT", "STATUS", "MESSAGE IN" };
|
||||
|
Loading…
Reference in New Issue
Block a user