pcd: create omti5100 sasi controller skeleton device

This commit is contained in:
Dirk Best 2014-11-20 16:28:37 +01:00
parent 10335e957e
commit 2622cd71fc
5 changed files with 273 additions and 4 deletions

View File

@ -1219,6 +1219,15 @@ MACHINEOBJS += $(MACHINEOBJ)/nscsi_hd.o
MACHINEOBJS += $(MACHINEOBJ)/nscsi_s1410.o
endif
#-------------------------------------------------
#
#@src/emu/machine/omti5100.h,MACHINES += OMTI5100
#-------------------------------------------------
ifneq ($(filter OMTI5100,$(MACHINES)),)
MACHINEOBJS += $(MACHINEOBJ)/omti5100.o
endif
#-------------------------------------------------
#
#@src/emu/machine/pcf8593.h,MACHINES += PCF8593

153
src/emu/machine/omti5100.c Normal file
View File

@ -0,0 +1,153 @@
/***************************************************************************
SMS OMTI 5100
license: MAME, GPL-2.0+
copyright-holders: Dirk Best
SCSI/SASI Intelligent Data Controller
Note: - Skeleton device
- Supports up to two ST-506/412 hard drives
- Z8681 (Z8)
- 8 KB RAM
- 2 KB Buffer RAM
***************************************************************************/
#include "omti5100.h"
//**************************************************************************
// CONSTANTS
//**************************************************************************
#define VERBOSE 1
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type OMTI5100 = &device_creator<omti5100_device>;
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
ROM_START( omti5100_firmware )
ROM_REGION(0x2000, "firmware", 0)
ROM_LOAD("1002401-n.7a", 0x0000, 0x2000, CRC(d531e25c) SHA1(22e4762a70841b80e843a5d76175c1fdb6838e18))
ROM_END
const rom_entry *omti5100_device::device_rom_region() const
{
return ROM_NAME( omti5100_firmware );
}
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( omti5100_z8 )
// MCFG_CPU_ADD("z8", Z8681, XTAL_20MHz / 3 /* ??? */)
MACHINE_CONFIG_END
machine_config_constructor omti5100_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( omti5100_z8 );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// omti5100_device - constructor
//-------------------------------------------------
omti5100_device::omti5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, OMTI5100, "OMTI 5100 SCSI/SASI Controller", tag, owner, clock, "omti5100", __FILE__),
// m_cpu(*this, "z8"),
m_bsy_w(*this),
m_cd_w(*this),
m_io_w(*this),
m_req_w(*this),
m_msg_w(*this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void omti5100_device::device_start()
{
// resolve callbacks
m_bsy_w.resolve_safe();
m_cd_w.resolve_safe();
m_io_w.resolve_safe();
m_req_w.resolve_safe();
m_msg_w.resolve_safe();
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void omti5100_device::device_reset()
{
}
//**************************************************************************
// IMPLEMENTATION
//**************************************************************************
READ8_MEMBER( omti5100_device::data_r )
{
if (VERBOSE)
logerror("%s: data_r\n", tag());
return 0xff;
}
WRITE8_MEMBER( omti5100_device::data_w )
{
if (VERBOSE)
logerror("%s: rst_w: %02x\n", tag(), data);
}
READ_LINE_MEMBER( omti5100_device::parity_r )
{
if (VERBOSE)
logerror("%s: parity_r\n", tag());
return 1;
}
WRITE_LINE_MEMBER( omti5100_device::parity_w )
{
if (VERBOSE)
logerror("%s: parity_w: %d\n", tag(), state);
}
WRITE_LINE_MEMBER( omti5100_device::rst_w )
{
if (VERBOSE)
logerror("%s: rst_w: %d\n", tag(), state);
}
WRITE_LINE_MEMBER( omti5100_device::sel_w )
{
if (VERBOSE)
logerror("%s: sel_w: %d\n", tag(), state);
}
WRITE_LINE_MEMBER( omti5100_device::ack_w )
{
if (VERBOSE)
logerror("%s: ack_w: %d\n", tag(), state);
}

103
src/emu/machine/omti5100.h Normal file
View File

@ -0,0 +1,103 @@
/***************************************************************************
SMS OMTI 5100
license: MAME, GPL-2.0+
copyright-holders: Dirk Best
SCSI/SASI Intelligent Data Controller
***************************************************************************/
#pragma once
#ifndef __OMTI5100_H__
#define __OMTI5100_H__
#include "emu.h"
#include "cpu/z8/z8.h"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_OMTI5100_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, OMTI5100, 0)
#define MCFG_OMTI5100_BSY_HANDLER(_devcb) \
devcb = &omti5100_device::set_bsy_handler(*device, DEVCB_##_devcb);
#define MCFG_OMTI5100_CD_HANDLER(_devcb) \
devcb = &omti5100_device::set_cd_handler(*device, DEVCB_##_devcb);
#define MCFG_OMTI5100_IO_HANDLER(_devcb) \
devcb = &omti5100_device::set_io_handler(*device, DEVCB_##_devcb);
#define MCFG_OMTI5100_REQ_HANDLER(_devcb) \
devcb = &omti5100_device::set_req_handler(*device, DEVCB_##_devcb);
#define MCFG_OMTI5100_MSG_HANDLER(_devcb) \
devcb = &omti5100_device::set_msg_handler(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> omti5100_device
class omti5100_device : public device_t
{
public:
// construction/destruction
omti5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// callbacks
template<class _Object> static devcb_base &set_bsy_handler(device_t &device, _Object object)
{ return downcast<omti5100_device &>(device).m_bsy_w.set_callback(object); }
template<class _Object> static devcb_base &set_cd_handler(device_t &device, _Object object)
{ return downcast<omti5100_device &>(device).m_cd_w.set_callback(object); }
template<class _Object> static devcb_base &set_io_handler(device_t &device, _Object object)
{ return downcast<omti5100_device &>(device).m_io_w.set_callback(object); }
template<class _Object> static devcb_base &set_req_handler(device_t &device, _Object object)
{ return downcast<omti5100_device &>(device).m_req_w.set_callback(object); }
template<class _Object> static devcb_base &set_msg_handler(device_t &device, _Object object)
{ return downcast<omti5100_device &>(device).m_msg_w.set_callback(object); }
// data
DECLARE_READ8_MEMBER( data_r );
DECLARE_WRITE8_MEMBER( data_w );
DECLARE_READ_LINE_MEMBER( parity_r );
DECLARE_WRITE_LINE_MEMBER( parity_w );
// control
DECLARE_WRITE_LINE_MEMBER( rst_w );
DECLARE_WRITE_LINE_MEMBER( sel_w );
DECLARE_WRITE_LINE_MEMBER( ack_w );
protected:
// device_t overrides
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
virtual void device_start();
virtual void device_reset();
private:
// required_device<z8681_device> m_cpu;
devcb_write_line m_bsy_w;
devcb_write_line m_cd_w;
devcb_write_line m_io_w;
devcb_write_line m_req_w;
devcb_write_line m_msg_w;
};
// device type definition
extern const device_type OMTI5100;
#endif // __OMTI5100_H__

View File

@ -15,6 +15,7 @@
#include "machine/nvram.h"
#include "machine/pic8259.h"
#include "machine/mc2661.h"
#include "machine/omti5100.h"
#include "machine/wd_fdc.h"
#include "machine/mc146818.h"
#include "sound/speaker.h"
@ -33,6 +34,7 @@ public:
m_pic1(*this, "pic1"),
m_pic2(*this, "pic2"),
m_speaker(*this, "speaker"),
m_sasi(*this, "sasi"),
m_fdc(*this, "fdc"),
m_rtc(*this, "rtc")
{ }
@ -55,6 +57,7 @@ private:
required_device<pic8259_device> m_pic1;
required_device<pic8259_device> m_pic2;
required_device<speaker_sound_device> m_speaker;
required_device<omti5100_device> m_sasi;
required_device<wd2793_t> m_fdc;
required_device<mc146818_device> m_rtc;
};
@ -125,6 +128,7 @@ static ADDRESS_MAP_START( pcd_io, AS_IO, 16, pcd_state )
AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0xf840, 0xf841) AM_DEVREADWRITE8("pic1", pic8259_device, read, write, 0xff00)
AM_RANGE(0xf900, 0xf907) AM_DEVREADWRITE8("fdc", wd2793_t, read, write, 0x00ff)
// AM_RANGE(0xf940, 0xf941) // sasi controller here?
AM_RANGE(0xf980, 0xf981) AM_READWRITE8(crt_data_r, crt_data_w, 0x00ff) AM_READ8(crt_status_r, 0xff00)
// AM_RANGE(0xfa00, 0xfa7f) // pcs4-n (peripheral chip select)
ADDRESS_MAP_END
@ -159,6 +163,9 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
// nvram
MCFG_NVRAM_ADD_1FILL("nvram")
// sasi controller
MCFG_OMTI5100_ADD("sasi")
// floppy disk controller
MCFG_WD2793x_ADD("fdc", XTAL_16MHz/2/8)
MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic1", pic8259_device, ir6_w))
@ -196,10 +203,6 @@ ROM_START( pcd )
ROM_LOAD16_BYTE("s26361-d359.d42", 0x0001, 0x2000, CRC(e20244dd) SHA1(0ebc5ddb93baacd9106f1917380de58aac64fe73))
ROM_LOAD16_BYTE("s26361-d359.d43", 0x0000, 0x2000, CRC(e03db2ec) SHA1(fcae8b0c9e7543706817b0a53872826633361fda))
// hdd (omti 5100)
ROM_REGION(0x2000, "hdd", 0)
ROM_LOAD("1002401-n.bin", 0x0000, 0x2000, CRC(d531e25c) SHA1(22e4762a70841b80e843a5d76175c1fdb6838e18))
// gfx card (scn2674 with 8741), to be moved
ROM_REGION(0x400, "graphics", 0)
ROM_LOAD("s36361-d321-v1.bin", 0x000, 0x400, CRC(69baeb2a) SHA1(98b9cd0f38c51b4988a3aed0efcf004bedd115ff))

View File

@ -476,6 +476,7 @@ MACHINES += NCR53C7XX
MACHINES += NMC9306
MACHINES += NSC810
MACHINES += NSCSI
MACHINES += OMTI5100
MACHINES += PC_FDC
MACHINES += PC_LPT
MACHINES += PCCARD