Merge pull request #3883 from pmackinlay/interpro

interpro: cleanup + graphics (nw)
This commit is contained in:
R. Belmont 2018-08-23 11:41:47 -04:00 committed by GitHub
commit 2f9e5b02d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 1217 additions and 916 deletions

View File

@ -496,7 +496,7 @@ MACHINE_CONFIG_START(mpcb849_device::device_add_mconfig)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(164'609'300, 2112, 0, 1664, 1299, 0, 1248)
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, mpcb849_device, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(DEVICE_SELF, device_srx_card_interface, vblank))
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(DEVICE_SELF, device_srx_card_interface, irq3))
RAM(config, "sram").set_default_size("128K").set_default_value(0);
RAM(config, "vram").set_default_size("5120K").set_default_value(0); // size is a guess
@ -566,7 +566,7 @@ MACHINE_CONFIG_START(mpcb896_device::device_add_mconfig)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(164'609'300, 2112, 0, 1664, 1299, 0, 1248)
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, mpcb896_device, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(DEVICE_SELF, device_srx_card_interface, vblank))
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(DEVICE_SELF, device_srx_card_interface, irq3))
RAM(config, "sram").set_default_size("256K").set_default_value(0);
RAM(config, "vram").set_default_size("18M").set_default_value(0);
@ -717,8 +717,8 @@ WRITE_LINE_MEMBER(edge1_device_base::vblank)
if (state)
{
// TODO: set vblank status
m_bus->vblank_w(ASSERT_LINE);
m_bus->vblank_w(CLEAR_LINE);
m_bus->irq3_w(ASSERT_LINE);
m_bus->irq3_w(CLEAR_LINE);
}
else
; // TODO: clear vblank status

File diff suppressed because it is too large Load Diff

View File

@ -9,25 +9,33 @@
#include "screen.h"
#include "video/bt459.h"
#include "video/dp8510.h"
#include "machine/ram.h"
#include "machine/z80scc.h"
#include "bus/rs232/rs232.h"
#include "bus/rs232/loopback.h"
#include "bus/interpro/keyboard/keyboard.h"
#include "bus/interpro/mouse/mouse.h"
class gt_device_base : public device_t
{
protected:
gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const bool double_buffered, const bool masked_reads);
virtual void map(address_map &map);
public:
static const int GT_BUFFER_SIZE = 0x100000; // 1 megabyte
static const u32 GT_BUFFER_MASK = (GT_BUFFER_SIZE - 1);
static constexpr u32 GT_MASK_BITS = 0x80808080; // mask RAM presents on high bit in each pixel/byte
// FIXME: enable delays to pass diagnostic tests
static const bool GT_DIAG = false;
static constexpr bool GT_DIAG = false;
enum control_mask
{
GFX_VERT_BLNK = 0x00000001,
GFX_HILITE_SEL = 0x00000004,
GFX_BUF1_SEL = 0x00000002, // write to buffer 1
GFX_HILITE_SEL = 0x00000004, // select highlight ram
GFX_SOFT_BLNK = 0x00000008,
GFX_DRAW_FIRST = 0x00000010, // draw first point
GFX_BLIT_DIR = 0x00000020, // bitblt addresses decrement
@ -49,37 +57,20 @@ public:
GFX_STEREO_POLRITY_NORMAL = 0x00200000,
GFX_STEREO_GLASSES_EN = 0x00400000,
GFX_FIELD_1 = 0x00800000,
//GFX_MASK_READ = 0x01000000, // enable pixel read mask?
GFX_MASK_READ_ENA = 0x01000000, // enable pixel read mask?
GFX_MONSENSE_MASK = 0x0e000000,
GFX_MONSENSE_60HZ = 0x0e000000
GFX_MONSENSE_60HZ = 0x0e000000,
};
DECLARE_READ32_MEMBER(control_r) { return m_control | (get_gt(0).screen->vblank() ? GFX_VERT_BLNK : 0); }
DECLARE_READ32_MEMBER(control_r) { return m_control | (m_screen[0]->vblank() ? GFX_VERT_BLNK : 0); }
DECLARE_WRITE32_MEMBER(control_w);
DECLARE_READ8_MEMBER(contrast_dac_r) { return m_contrast_dac; }
DECLARE_WRITE8_MEMBER(contrast_dac_w) { m_contrast_dac = data; }
DECLARE_WRITE8_MEMBER(contrast_dac_w);
DECLARE_READ32_MEMBER(blit_src_address_r) { return m_blit_src_address; }
DECLARE_WRITE32_MEMBER(blit_src_address_w) { COMBINE_DATA(&m_blit_src_address); }
DECLARE_READ32_MEMBER(blit_dst_address_r) { return m_blit_dst_address; }
DECLARE_WRITE32_MEMBER(blit_dst_address_w) { COMBINE_DATA(&m_blit_dst_address); }
DECLARE_READ16_MEMBER(blit_width_r) { return m_blit_width; }
DECLARE_WRITE16_MEMBER(blit_width_w);
enum blit_control_mask
{
BLIT0_CONTROL_FS = 0x000000f0,
BLIT1_CONTROL_FS = 0x0000000f,
BLIT0_CONTROL_SN = 0x0000f000,
BLIT1_CONTROL_SN = 0x00000f00,
BLIT0_CONTROL_LM = 0x00f00000,
BLIT1_CONTROL_LM = 0x000f0000,
BLIT0_CONTROL_RM = 0xf0000000,
BLIT1_CONTROL_RM = 0x0f000000
};
virtual DECLARE_WRITE32_MEMBER(blit_control_w) = 0;
DECLARE_READ8_MEMBER(plane_enable_r) { return m_plane_enable; }
DECLARE_WRITE8_MEMBER(plane_enable_w);
DECLARE_READ8_MEMBER(plane_data_r) { return m_plane_data; }
@ -110,25 +101,25 @@ public:
DECLARE_WRITE16_MEMBER(bsga_yin1_w) { COMBINE_DATA(&m_bsga_yin1); m_bsga_yin = m_bsga_yin1; }
DECLARE_WRITE32_MEMBER(bsga_xin1yin1_w);
enum bsga_status_mask
enum bsga_status_mask : u16
{
STATUS_CLIP0_YMAX = 0x1000, // y1 > max y
STATUS_CLIP0_YMIN = 0x0800, // y1 < min y
STATUS_CLIP0_XMAX = 0x0400, // x1 > max x
STATUS_CLIP0_XMIN = 0x0200, // x1 < min x
STATUS_CLIP1_YMAX = 0x0100, // y2 > max y
STATUS_CLIP1_YMIN = 0x0080, // y2 < min y
STATUS_CLIP1_XMAX = 0x0040, // x2 > max x
STATUS_CLIP1_XMIN = 0x0020, // x2 < min x
STATUS_DATA_VALID = 0x0001,
STATUS_COMPLETE = 0x0002,
STATUS_ACCEPT = 0x0004,
STATUS_REJECT = 0x0008,
STATUS_FLOAT_OFLOW = 0x0010,
STATUS_LEFT = 0x0020,
STATUS_RIGHT = 0x0040,
STATUS_ABOVE = 0x0080,
STATUS_BELOW = 0x0100,
STATUS_PREV_LEFT = 0x0200,
STATUS_PREV_RIGHT = 0x0400,
STATUS_PREV_ABOVE = 0x0800,
STATUS_PREV_BELOW = 0x1000,
STATUS_CLIP_BOTH = 0x0008, // set if both inputs fall outside clipping region
STATUS_CLIP_ANY = 0x0004, // set if any input falls outside clipping region
STATUS_CLIP0_MASK = 0x1e00, // x1,y1 clip result
STATUS_CLIP1_MASK = 0x01e0, // x2,y2 clip result
STATUS_CLIP_MASK = 0x1fe0 // both clip results
STATUS_CLIP0_MASK = 0x1e00,
STATUS_CLIP1_MASK = 0x01e0,
STATUS_CLIP_MASK = 0x1fe0
};
DECLARE_READ16_MEMBER(bsga_status_r);
@ -141,75 +132,84 @@ public:
DECLARE_READ16_MEMBER(bsga_xin_r) { return m_bsga_xin; }
DECLARE_READ16_MEMBER(bsga_yin_r) { return m_bsga_yin; }
DECLARE_READ32_MEMBER(ri_initial_distance_r) { return m_ri_initial_distance; }
DECLARE_WRITE32_MEMBER(ri_initial_distance_w) { COMBINE_DATA(&m_ri_initial_distance); }
DECLARE_READ32_MEMBER(ri_distance_both_r) { return m_ri_distance_both; }
DECLARE_WRITE32_MEMBER(ri_distance_both_w) { COMBINE_DATA(&m_ri_distance_both); }
DECLARE_READ32_MEMBER(ri_distance_major_r) { return m_ri_distance_major; }
DECLARE_WRITE32_MEMBER(ri_distance_major_w) { COMBINE_DATA(&m_ri_distance_major); }
DECLARE_READ32_MEMBER(ri_initial_address_r) { return m_ri_initial_address; }
DECLARE_WRITE32_MEMBER(ri_initial_address_w) { COMBINE_DATA(&m_ri_initial_address); }
DECLARE_READ32_MEMBER(ri_address_both_r) { return m_ri_address_both; }
DECLARE_WRITE32_MEMBER(ri_address_both_w) { COMBINE_DATA(&m_ri_address_both); }
DECLARE_READ32_MEMBER(ri_address_major_r) { return m_ri_address_major; }
DECLARE_WRITE32_MEMBER(ri_address_major_w) { COMBINE_DATA(&m_ri_address_major); }
DECLARE_READ32_MEMBER(ri_initial_error_r) { return m_ri_initial_error; }
DECLARE_WRITE32_MEMBER(ri_initial_error_w) { COMBINE_DATA(&m_ri_initial_error); }
DECLARE_READ32_MEMBER(ri_error_both_r) { return m_ri_error_both; }
DECLARE_WRITE32_MEMBER(ri_error_both_w) { COMBINE_DATA(&m_ri_error_both); }
DECLARE_READ32_MEMBER(ri_error_major_r) { return m_ri_error_major; }
DECLARE_WRITE32_MEMBER(ri_error_major_w) { COMBINE_DATA(&m_ri_error_major); }
DECLARE_READ32_MEMBER(ri_stop_count_r) { return m_ri_stop_count; }
DECLARE_WRITE32_MEMBER(ri_stop_count_w) { COMBINE_DATA(&m_ri_stop_count); }
DECLARE_READ32_MEMBER(ri_control_r) { return m_ri_control; }
DECLARE_WRITE32_MEMBER(ri_control_w) { COMBINE_DATA(&m_ri_control); }
DECLARE_READ32_MEMBER(ri_xfer_r) { return m_ri_xfer; }
DECLARE_WRITE32_MEMBER(ri_xfer_w);
DECLARE_WRITE32_MEMBER(bsga_float_w);
protected:
virtual void device_start() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_validity_check(validity_checker &valid) const override;
typedef struct
u32 buffer_r(const offs_t offset);
void buffer_w(const offs_t offset, u32 data, u32 mem_mask);
virtual u32 vram_r(offs_t offset, const bool linear = false) const;
virtual void vram_w(offs_t offset, const u32 data, u32 mem_mask, const bool linear = false) const;
u32 mram_r(const offs_t offset) const;
void mram_w(const offs_t offset, const u32 data, const u32 mem_mask) const;
template <int N> u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
required_device<screen_device> screen;
required_device<bt459_device> ramdac;
required_device<dp8510_device> bpu;
m_ramdac[N]->screen_update(screen, bitmap, cliprect, m_double_buffered && (m_control & (N == 0 ? GFX_SCREEN0_DISP_BUF1 : GFX_SCREEN1_DISP_BUF1)) ?
m_vram[N]->pointer() + (m_vram[N]->size() >> 1) :
m_vram[N]->pointer());
std::unique_ptr<u8[]> buffer;
std::unique_ptr<u8[]> mask;
return 0;
}
gt_t;
virtual const int get_screen_count() const = 0;
virtual gt_t &get_gt(const int number) = 0;
virtual const gt_t &active_gt() const = 0;
u32 buffer_read(const gt_t &gt, const offs_t offset) const;
void buffer_write(const gt_t &gt, const offs_t offset, const u32 data, const u32 mask);
struct bpu_pair_t
{
u16 hi;
u16 lo;
};
TIMER_CALLBACK_MEMBER(blit);
TIMER_CALLBACK_MEMBER(line);
TIMER_CALLBACK_MEMBER(done);
void bsga_clip_status(s16 xin, s16 yin);
bool kuzmin_clip(s16 sx1, s16 sy1, s16 sx2, s16 sy2, s16 wx1, s16 wy1, s16 wx2, s16 wy2);
void bresenham_line(s16 major, s16 minor, s16 major_step, s16 minor_step, int steps, s16 error, s16 error_major, s16 error_minor, bool shallow);
void write_vram(const gt_t &gt, const offs_t offset, const u8 data);
u8 m_contrast_dac;
void bpu_control_w(const u32 data);
void bpu_source_w(const u32 data, const bool fifo_write = true);
void bpu_destination_w(const u32 data, const bool fifo_write = false);
u32 bpu_output_r();
void bpu_reset();
void bpu_barrel_input_select(const int state);
void bpu_left_mask_enable(const int state);
void bpu_right_mask_enable(const int state);
bpu_pair_t bpu_from_u32(const u32 data) const;
u32 bpu_to_u32(bpu_pair_t data) const;
// sub-devices
optional_device_array<screen_device, 2> m_screen;
optional_device_array<bt459_device, 2> m_ramdac;
optional_device_array<ram_device, 2> m_vram;
optional_device_array<ram_device, 2> m_mram;
required_device_array<dp8510_device, 2> m_bpu;
// device state
u32 m_control;
u32 m_blit_src_address;
u32 m_blit_dst_address;
u16 m_blit_width;
u8 m_plane_enable;
u8 m_plane_data;
u32 m_plane_enable;
u32 m_plane_data;
u16 m_bsga_width;
u16 m_bsga_tmp;
@ -242,123 +242,140 @@ protected:
u32 m_ri_control;
u32 m_ri_xfer;
private:
emu_timer *m_blit_timer;
emu_timer *m_line_timer;
emu_timer *m_done_timer;
const bool m_double_buffered;
const bool m_masked_reads;
};
class single_gt_device_base : public gt_device_base
class gt_device : public gt_device_base, public device_cbus_card_interface
{
protected:
single_gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
gt_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const bool double_buffered);
virtual void map(address_map &map) override;
virtual DECLARE_WRITE32_MEMBER(blit_control_w) override;
DECLARE_READ32_MEMBER(buffer_r) { return buffer_read(m_gt[0], offset); }
DECLARE_WRITE32_MEMBER(buffer_w) { buffer_write(m_gt[0], offset, data, mem_mask); }
virtual const int get_screen_count() const override { return GT_SCREEN_COUNT; }
virtual gt_t &get_gt(const int number) override { return m_gt[number]; }
virtual const gt_t &active_gt() const override { return m_gt[0]; }
u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
private:
static const int GT_SCREEN_COUNT = 1;
gt_t m_gt[GT_SCREEN_COUNT];
};
class dual_gt_device_base : public gt_device_base
class gtdb_device : public gt_device_base, public device_srx_card_interface
{
protected:
dual_gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
gtdb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void map(address_map &map) override;
virtual void map_dynamic(address_map &map);
virtual DECLARE_WRITE32_MEMBER(blit_control_w) override;
DECLARE_WRITE_LINE_MEMBER(serial_irq);
DECLARE_WRITE32_MEMBER(mouse_status_w);
DECLARE_WRITE32_MEMBER(srx_mapping_w);
DECLARE_READ32_MEMBER(buffer_r) { return buffer_read(m_gt[(offset & 0x80000) ? 1 : 0], offset); }
DECLARE_WRITE32_MEMBER(buffer_w) { buffer_write(m_gt[(offset & 0x80000) ? 1 : 0], offset, data, mem_mask); }
enum int_status_mask
{
MOUSE_BTN = 0x08,
// MOUSE_MOVED? = 0x10,
MOUSE_X = 0x20,
MOUSE_Y = 0x40,
SERIAL = 0x80,
};
DECLARE_READ32_MEMBER(mouse_int_r) { return m_mouse_int; }
DECLARE_WRITE32_MEMBER(mouse_int_w) { mem_mask &= ~0x7; COMBINE_DATA(&m_mouse_int); }
DECLARE_READ32_MEMBER(mouse_x_r);
DECLARE_READ32_MEMBER(mouse_y_r);
virtual const int get_screen_count() const override { return GT_SCREEN_COUNT; }
virtual gt_t &get_gt(const int number) override { return m_gt[number]; }
virtual const gt_t &active_gt() const override { return m_gt[(m_control & GFX_SCR1_SEL) ? 1 : 0]; }
enum vfifo_control_mask
{
FIFO_LW_ENB = 0x08,
FIFO_LW_INTR = 0x40,
FIFO_HW_INTR = 0x80,
};
DECLARE_READ32_MEMBER(fifo_control_r) { return m_fifo_control; }
u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
u32 screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
//virtual void device_start() override;
virtual void device_add_mconfig(machine_config &config) override;
virtual u32 vram_r(offs_t offset, const bool linear = false) const override;
virtual void vram_w(offs_t offset, const u32 data, u32 mem_mask, const bool linear = false) const override;
optional_device_array<ram_device, 2> m_hram;
required_device<z80scc_device> m_scc;
private:
static const int GT_SCREEN_COUNT = 2;
u8 m_mouse_int;
u32 m_fifo_control;
gt_t m_gt[GT_SCREEN_COUNT];
u8 m_mouse_x;
u8 m_mouse_y;
};
class mpcb963_device : public single_gt_device_base, public device_cbus_card_interface
class mpcb963_device : public gt_device
{
public:
mpcb963_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void map(address_map &map) override { single_gt_device_base::map(map); }
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
class mpcba79_device : public dual_gt_device_base, public device_cbus_card_interface
class mpcba79_device : public gt_device
{
public:
mpcba79_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void map(address_map &map) override { dual_gt_device_base::map(map); }
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
class msmt070_device : public single_gt_device_base, public device_cbus_card_interface
class msmt070_device : public gt_device
{
public:
msmt070_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void map(address_map &map) override { single_gt_device_base::map(map); }
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
class msmt071_device : public dual_gt_device_base, public device_cbus_card_interface
class msmt071_device : public gt_device
{
public:
msmt071_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void map(address_map &map) override { dual_gt_device_base::map(map); }
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
class msmt081_device : public single_gt_device_base, public device_cbus_card_interface
class msmt081_device : public gt_device
{
public:
msmt081_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void map(address_map &map) override { single_gt_device_base::map(map); }
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
class mpcbb92_device : public single_gt_device_base, public device_srx_card_interface
class mpcbb68_device : public gtdb_device
{
public:
mpcbb68_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
class mpcbb92_device : public gtdb_device
{
public:
mpcbb92_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void map(address_map &map) override { single_gt_device_base::map(map); }
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
};
@ -369,6 +386,7 @@ DECLARE_DEVICE_TYPE(MPCBA79, mpcba79_device)
DECLARE_DEVICE_TYPE(MSMT070, msmt070_device)
DECLARE_DEVICE_TYPE(MSMT071, msmt071_device)
DECLARE_DEVICE_TYPE(MSMT081, msmt081_device)
DECLARE_DEVICE_TYPE(MPCBB68, mpcbb68_device)
DECLARE_DEVICE_TYPE(MPCBB92, mpcbb92_device)
#endif // MAME_BUS_INTERPRO_SR_GT_H

View File

@ -274,7 +274,7 @@ void interpro_bus_device::device_resolve_objects()
m_out_irq0_cb.resolve_safe();
m_out_irq1_cb.resolve_safe();
m_out_irq2_cb.resolve_safe();
m_out_vblank_cb.resolve_safe();
m_out_irq3_cb.resolve_safe();
}
cbus_bus_device::cbus_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)

View File

@ -13,12 +13,12 @@ public:
auto out_irq0_cb() { return m_out_irq0_cb.bind(); }
auto out_irq1_cb() { return m_out_irq1_cb.bind(); }
auto out_irq2_cb() { return m_out_irq2_cb.bind(); }
auto out_vblank_cb() { return m_out_vblank_cb.bind(); }
auto out_irq3_cb() { return m_out_irq3_cb.bind(); }
DECLARE_WRITE_LINE_MEMBER(irq0_w) { m_out_irq0_cb(state); }
DECLARE_WRITE_LINE_MEMBER(irq1_w) { m_out_irq1_cb(state); }
DECLARE_WRITE_LINE_MEMBER(irq2_w) { m_out_irq2_cb(state); }
DECLARE_WRITE_LINE_MEMBER(vblank_w) { m_out_vblank_cb(state); }
DECLARE_WRITE_LINE_MEMBER(irq3_w) { m_out_irq3_cb(state); }
protected:
// construction/destruction
@ -30,7 +30,7 @@ protected:
, m_out_irq0_cb(*this)
, m_out_irq1_cb(*this)
, m_out_irq2_cb(*this)
, m_out_vblank_cb(*this)
, m_out_irq3_cb(*this)
{
}
@ -46,7 +46,7 @@ private:
devcb_write_line m_out_irq0_cb;
devcb_write_line m_out_irq1_cb;
devcb_write_line m_out_irq2_cb;
devcb_write_line m_out_vblank_cb;
devcb_write_line m_out_irq3_cb;
};
class device_cbus_card_interface;
@ -133,7 +133,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(irq0) { m_bus->irq0_w(state); }
DECLARE_WRITE_LINE_MEMBER(irq1) { m_bus->irq1_w(state); }
DECLARE_WRITE_LINE_MEMBER(irq2) { m_bus->irq2_w(state); }
DECLARE_WRITE_LINE_MEMBER(vblank) { m_bus->vblank_w(state); }
DECLARE_WRITE_LINE_MEMBER(irq3) { m_bus->irq3_w(state); }
protected:
device_cbus_card_interface(const machine_config &mconfig, device_t &device, const char *idprom_region = "idprom")
@ -251,7 +251,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(irq0) { m_bus->irq0_w(state); }
DECLARE_WRITE_LINE_MEMBER(irq1) { m_bus->irq1_w(state); }
DECLARE_WRITE_LINE_MEMBER(irq2) { m_bus->irq2_w(state); }
DECLARE_WRITE_LINE_MEMBER(vblank) { m_bus->vblank_w(state); }
DECLARE_WRITE_LINE_MEMBER(irq3) { m_bus->irq3_w(state); }
protected:
device_srx_card_interface(const machine_config &mconfig, device_t &device, const char *idprom_region = "idprom")

View File

@ -35,6 +35,7 @@ void srx_cards(device_slot_interface &device)
device.option_add("mpcb849", MPCB849);
device.option_add("mpcb896", MPCB896);
device.option_add("mpcba63", MPCBA63);
device.option_add("mpcbb68", MPCBB68);
device.option_add("mpcbb92", MPCBB92);
device.option_add("msmt094", MSMT094);
}

View File

@ -22,6 +22,9 @@ public:
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_cb() { return m_irq_handler.bind(); }
auto drq_handler_cb() { return m_drq_handler.bind(); }
virtual void map(address_map &map);
DECLARE_READ8_MEMBER(tcounter_lo_r);

View File

@ -702,20 +702,24 @@ FLOPPY_FORMATS_MEMBER(interpro_state::floppy_formats)
FLOPPY_PC_FORMAT
FLOPPY_FORMATS_END
static void interpro_floppies(device_slot_interface &device)
{
device.option_add("525hd", FLOPPY_525_HD);
device.option_add("35hd", FLOPPY_35_HD);
}
void interpro_state::interpro_serial(machine_config &config)
{
/*
* Documentation states that all three serial ports have RxD, TxD, CTS and
* RTS signals connected, and serial port 0 also has RI, DTR and DTS(?).
* Serial diagnostics pass all tests (except internal loopback which is not
* supported by z80scc_device) when a dec_loopback device is installed. The
* diagnostic tests also indicate that DCD is connected on all three ports.
*
* The documentation consistently refers to a DTS signal on serial port 0,
* but this appears to be an error or typo, as it doesn't match any known
* RS-232 signal; possibly it should be DSR?
*/
// scc1 channel A (serial port 1)
rs232_port_device &port1(RS232_PORT(config, INTERPRO_SERIAL_PORT1_TAG, default_rs232_devices, nullptr));
port1.cts_handler().set(m_scc1, FUNC(z80scc_device::ctsa_w));
port1.dcd_handler().set(m_scc1, FUNC(z80scc_device::dcda_w));
port1.rxd_handler().set(m_scc1, FUNC(z80scc_device::rxa_w));
m_scc1->out_dtra_callback().set(port1, FUNC(rs232_port_device::write_dtr));
m_scc1->out_rtsa_callback().set(port1, FUNC(rs232_port_device::write_rts));
m_scc1->out_txda_callback().set(port1, FUNC(rs232_port_device::write_txd));
m_scc1->out_wreqa_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_serial1)).invert();
@ -725,18 +729,12 @@ void interpro_state::interpro_serial(machine_config &config)
port2.cts_handler().set(m_scc1, FUNC(z80scc_device::ctsb_w));
port2.dcd_handler().set(m_scc1, FUNC(z80scc_device::dcdb_w));
port2.rxd_handler().set(m_scc1, FUNC(z80scc_device::rxb_w));
m_scc1->out_dtrb_callback().set(port2, FUNC(rs232_port_device::write_dtr));
m_scc1->out_rtsb_callback().set(port2, FUNC(rs232_port_device::write_rts));
m_scc1->out_txdb_callback().set(port2, FUNC(rs232_port_device::write_txd));
m_scc1->out_wreqb_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_serial2)).invert();
m_scc1->out_int_callback().set(m_ioga, FUNC(interpro_ioga_device::ir11_w));
// scc2 channel A (keyboard)
INTERPRO_KEYBOARD_PORT(config, m_keyboard, interpro_keyboard_devices, nullptr);
m_keyboard->rxd_handler_cb().set(m_scc2, FUNC(z80scc_device::rxa_w));
m_scc2->out_txda_callback().set(m_keyboard, FUNC(interpro_keyboard_port_device::write_txd));
// scc2 channel B (serial port 0)
rs232_port_device &port0(RS232_PORT(config, INTERPRO_SERIAL_PORT0_TAG, default_rs232_devices, nullptr));
port0.cts_handler().set(m_scc2, FUNC(z80scc_device::ctsb_w));
@ -757,28 +755,14 @@ static void interpro_scsi_devices(device_slot_interface &device)
device.option_add("cdrom", NSCSI_CDROM);
}
static void emerald_scsi_devices(device_slot_interface &device)
{
device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A);
}
static void turquoise_scsi_devices(device_slot_interface &device)
{
device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A);
}
static void sapphire_scsi_devices(device_slot_interface &device)
{
device.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C94);
}
void interpro_state::interpro_scsi_adapter(device_t *device)
{
devcb_base *devcb;
(void)devcb;
MCFG_DEVICE_CLOCK(24_MHz_XTAL)
MCFG_NCR5390_IRQ_HANDLER(WRITELINE(":" INTERPRO_IOGA_TAG, interpro_ioga_device, ir0_w))
MCFG_NCR5390_DRQ_HANDLER(WRITELINE(":" INTERPRO_IOGA_TAG, interpro_ioga_device, drq_scsi))
ncr5390_device &adapter = downcast<ncr5390_device &>(*device);
adapter.set_clock(24_MHz_XTAL);
adapter.irq_handler_cb().set(":" INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::ir0_w));
adapter.drq_handler_cb().set(":" INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::drq_scsi));
}
void interpro_state::interpro_cdrom(device_t *device)
@ -810,10 +794,8 @@ void interpro_state::ioga(machine_config &config)
m_ioga->eth_ca_callback().set(m_eth, FUNC(i82586_base_device::ca));
}
static INPUT_PORTS_START(interpro)
INPUT_PORTS_END
MACHINE_CONFIG_START(interpro_state::interpro)
void interpro_state::interpro(machine_config &config)
{
RAM(config, m_ram, 0);
m_ram->set_default_size("16M");
m_ram->set_extra_options("32M,64M,128M,256M");
@ -829,44 +811,48 @@ MACHINE_CONFIG_START(interpro_state::interpro)
// serial
// real-time clock/non-volatile memory
MCFG_DEVICE_ADD(m_rtc, MC146818, 32.768_kHz_XTAL)
MCFG_MC146818_UTC(true)
MCFG_MC146818_IRQ_HANDLER(WRITELINE(m_ioga, interpro_ioga_device, ir9_w))
MC146818(config, m_rtc, 32.768_kHz_XTAL);
m_rtc->set_use_utc(true);
m_rtc->irq_callback().set(m_ioga, FUNC(interpro_ioga_device::ir9_w));
// scsi
MCFG_DEVICE_ADD(m_scsibus, NSCSI_BUS, 0)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":0", interpro_scsi_devices, "harddisk", false)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":1", interpro_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":2", interpro_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":3", interpro_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":4", interpro_scsi_devices, "cdrom", false)
MCFG_SLOT_OPTION_MACHINE_CONFIG("cdrom", interpro_cdrom)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":5", interpro_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":6", interpro_scsi_devices, nullptr, false)
// scsi bus and devices
NSCSI_BUS(config, m_scsibus, 0);
nscsi_connector &harddisk(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":0", 0));
interpro_scsi_devices(harddisk);
harddisk.set_default_option("harddisk");
nscsi_connector &cdrom(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":4", 0));
interpro_scsi_devices(cdrom);
cdrom.set_default_option("cdrom");
cdrom.set_option_machine_config("cdrom", interpro_cdrom);
interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":1", 0));
interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":2", 0));
interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":3", 0));
interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":5", 0));
interpro_scsi_devices(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":6", 0));
// ethernet
// i/o gate array
// mouse
interpro_mouse_port_device &mouse(INTERPRO_MOUSE_PORT(config, INTERPRO_MOUSE_PORT_TAG, interpro_mouse_devices, "interpro_mouse"));
mouse.state_func().set(m_ioga, FUNC(interpro_ioga_device::mouse_status_w));
// system layout
config.set_default_layout(layout_interpro);
// software lists
MCFG_SOFTWARE_LIST_ADD("softlist", "interpro")
MACHINE_CONFIG_END
SOFTWARE_LIST(config, m_softlist).set_type("interpro", SOFTWARE_LIST_ORIGINAL_SYSTEM);
}
MACHINE_CONFIG_START(emerald_state::emerald)
void emerald_state::emerald(machine_config &config)
{
interpro(config);
MCFG_DEVICE_ADD(m_maincpu, CLIPPER_C300, 12.5_MHz_XTAL)
MCFG_DEVICE_ADDRESS_MAP(0, emerald_main_map)
MCFG_DEVICE_ADDRESS_MAP(1, emerald_io_map)
MCFG_DEVICE_ADDRESS_MAP(2, interpro_boot_map)
MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(INTERPRO_IOGA_TAG, interpro_ioga_device, acknowledge_interrupt)
CLIPPER_C300(config, m_maincpu, 12.5_MHz_XTAL); // 40MHz?
m_maincpu->set_addrmap(0, &emerald_state::emerald_main_map);
m_maincpu->set_addrmap(1, &emerald_state::emerald_io_map);
m_maincpu->set_addrmap(2, &emerald_state::interpro_boot_map);
m_maincpu->set_irq_acknowledge_callback(INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::acknowledge_interrupt));
CAMMU_C3(config, m_i_cammu, 0);
m_i_cammu->exception_callback().set(m_maincpu, FUNC(clipper_device::set_exception));
@ -882,23 +868,26 @@ MACHINE_CONFIG_START(emerald_state::emerald)
INTERPRO_MCGA(config, m_mcga, 0);
// floppy controller
MCFG_I82072_ADD(m_fdc, false)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, ir1_w))
MCFG_UPD765_DRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, drq_floppy))
I82072(config, m_fdc, 24_MHz_XTAL);
m_fdc->set_ready_line_connected(false);
m_fdc->intrq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::ir1_w));
m_fdc->drq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_floppy));
// connect a 3.5" drive at id 3
//MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":2", interpro_floppies, "525hd", interpro_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":3", interpro_floppies, "35hd", interpro_state::floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(false)
//FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":2", "525hd", FLOPPY_525_HD, true, interpro_state::floppy_formats).enable_sound(false);
FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":3", "35hd", FLOPPY_35_HD, true, interpro_state::floppy_formats).enable_sound(false);
// serial controllers and ports
SCC85C30(config, m_scc1, 4.9152_MHz_XTAL);
SCC85C30(config, m_scc2, 4.9152_MHz_XTAL);
interpro_serial(config);
// scsi controller
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":7", emerald_scsi_devices, INTERPRO_SCSI_ADAPTER_TAG, true)
MCFG_SLOT_OPTION_MACHINE_CONFIG(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter)
// scsi host adapter
nscsi_connector &adapter(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":7", 0));
adapter.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A);
adapter.set_default_option(INTERPRO_SCSI_ADAPTER_TAG);
adapter.set_fixed(true);
adapter.set_option_machine_config(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter);
// ethernet controller
I82586(config, m_eth, 10_MHz_XTAL);
@ -909,16 +898,25 @@ MACHINE_CONFIG_START(emerald_state::emerald)
EMERALD_IOGA(config, m_ioga, 0);
m_ioga->set_memory(m_maincpu, 0);
ioga(config);
MACHINE_CONFIG_END
MACHINE_CONFIG_START(turquoise_state::turquoise)
// srx bus
SRX_BUS(config, m_bus, 0, m_maincpu);
m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
}
void turquoise_state::turquoise(machine_config &config)
{
interpro(config);
MCFG_DEVICE_ADD(m_maincpu, CLIPPER_C300, 12.5_MHz_XTAL)
MCFG_DEVICE_ADDRESS_MAP(0, turquoise_main_map)
MCFG_DEVICE_ADDRESS_MAP(1, turquoise_io_map)
MCFG_DEVICE_ADDRESS_MAP(2, interpro_boot_map)
MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(INTERPRO_IOGA_TAG, interpro_ioga_device, acknowledge_interrupt)
CLIPPER_C300(config, m_maincpu, 12.5_MHz_XTAL); // 40Mhz?
m_maincpu->set_addrmap(0, &turquoise_state::turquoise_main_map);
m_maincpu->set_addrmap(1, &turquoise_state::turquoise_io_map);
m_maincpu->set_addrmap(2, &turquoise_state::interpro_boot_map);
m_maincpu->set_irq_acknowledge_callback(INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::acknowledge_interrupt));
CAMMU_C3(config, m_i_cammu, 0);
m_i_cammu->exception_callback().set(m_maincpu, FUNC(clipper_device::set_exception));
@ -934,22 +932,34 @@ MACHINE_CONFIG_START(turquoise_state::turquoise)
INTERPRO_MCGA(config, m_mcga, 0);
// floppy controller
MCFG_I82072_ADD(m_fdc, false)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, ir1_w))
MCFG_UPD765_DRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, drq_floppy))
I82072(config, m_fdc, 24_MHz_XTAL);
m_fdc->set_ready_line_connected(false);
m_fdc->intrq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::ir1_w));
m_fdc->drq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_floppy));
// connect a 3.5" drive at id 3
MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":3", interpro_floppies, "35hd", interpro_state::floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(false)
FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":3", "35hd", FLOPPY_35_HD, true, interpro_state::floppy_formats).enable_sound(false);
// serial controllers and ports
SCC85C30(config, m_scc1, 4.9152_MHz_XTAL);
SCC85C30(config, m_scc2, 4.9152_MHz_XTAL);
interpro_serial(config);
// scsi controller
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":7", turquoise_scsi_devices, INTERPRO_SCSI_ADAPTER_TAG, true)
MCFG_SLOT_OPTION_MACHINE_CONFIG(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter)
// keyboard port
INTERPRO_KEYBOARD_PORT(config, m_kbd_port, interpro_keyboard_devices, nullptr);
m_kbd_port->rxd_handler_cb().set(m_scc2, FUNC(z80scc_device::rxa_w));
m_scc2->out_txda_callback().set(m_kbd_port, FUNC(interpro_keyboard_port_device::write_txd));
// mouse port
INTERPRO_MOUSE_PORT(config, m_mse_port, interpro_mouse_devices, nullptr);
m_mse_port->state_func().set(m_ioga, FUNC(interpro_ioga_device::mouse_status_w));
// scsi host adapter
nscsi_connector &adapter(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":7", 0));
adapter.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C90A);
adapter.set_default_option(INTERPRO_SCSI_ADAPTER_TAG);
adapter.set_fixed(true);
adapter.set_option_machine_config(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter);
// ethernet controller
I82586(config, m_eth, 10_MHz_XTAL);
@ -960,15 +970,25 @@ MACHINE_CONFIG_START(turquoise_state::turquoise)
TURQUOISE_IOGA(config, m_ioga, 0);
m_ioga->set_memory(m_maincpu, 0);
ioga(config);
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::sapphire)
// cbus bus
CBUS_BUS(config, m_bus, 0, m_maincpu);
m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
}
void sapphire_state::sapphire(machine_config &config)
{
interpro(config);
MCFG_DEVICE_ADD(m_maincpu, CLIPPER_C400, 12.5_MHz_XTAL)
MCFG_DEVICE_ADDRESS_MAP(0, sapphire_main_map)
MCFG_DEVICE_ADDRESS_MAP(1, sapphire_io_map)
MCFG_DEVICE_ADDRESS_MAP(2, interpro_boot_map)
MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(INTERPRO_IOGA_TAG, interpro_ioga_device, acknowledge_interrupt)
CLIPPER_C400(config, m_maincpu, 12.5_MHz_XTAL);
m_maincpu->set_addrmap(0, &sapphire_state::sapphire_main_map);
m_maincpu->set_addrmap(1, &sapphire_state::sapphire_io_map);
m_maincpu->set_addrmap(2, &sapphire_state::interpro_boot_map);
m_maincpu->set_irq_acknowledge_callback(INTERPRO_IOGA_TAG, FUNC(interpro_ioga_device::acknowledge_interrupt));
// FIXME: 2400/6400 should be C4T cammu?
CAMMU_C4I(config, m_mmu, 0);
@ -978,13 +998,13 @@ MACHINE_CONFIG_START(sapphire_state::sapphire)
INTERPRO_FMCC(config, m_mcga, 0);
// floppy controller
MCFG_N82077AA_ADD(m_fdc, n82077aa_device::MODE_PS2)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, ir1_w))
MCFG_UPD765_DRQ_CALLBACK(WRITELINE(m_ioga, interpro_ioga_device, drq_floppy))
N82077AA(config, m_fdc, 24_MHz_XTAL);
m_fdc->set_mode(n82077aa_device::MODE_PS2);
m_fdc->intrq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::ir1_w));
m_fdc->drq_wr_callback().set(m_ioga, FUNC(interpro_ioga_device::drq_floppy));
// connect a 3.5" drive at id 1
MCFG_FLOPPY_DRIVE_ADD(INTERPRO_FDC_TAG ":1", interpro_floppies, "35hd", interpro_state::floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(false)
FLOPPY_CONNECTOR(config, INTERPRO_FDC_TAG ":1", "35hd", FLOPPY_35_HD, true, interpro_state::floppy_formats).enable_sound(false);
// srx arbiter gate array
INTERPRO_ARBGA(config, m_arbga, 0);
@ -994,9 +1014,12 @@ MACHINE_CONFIG_START(sapphire_state::sapphire)
SCC85C30(config, m_scc2, 4.9152_MHz_XTAL);
interpro_serial(config);
// scsi controller
MCFG_NSCSI_ADD(INTERPRO_SCSI_TAG ":7", sapphire_scsi_devices, INTERPRO_SCSI_ADAPTER_TAG, true)
MCFG_SLOT_OPTION_MACHINE_CONFIG(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter)
// scsi host adapter
nscsi_connector &adapter(NSCSI_CONNECTOR(config, INTERPRO_SCSI_TAG ":7", 0));
adapter.option_add_internal(INTERPRO_SCSI_ADAPTER_TAG, NCR53C94);
adapter.set_default_option(INTERPRO_SCSI_ADAPTER_TAG);
adapter.set_fixed(true);
adapter.set_option_machine_config(INTERPRO_SCSI_ADAPTER_TAG, interpro_scsi_adapter);
// ethernet controller
I82596_LE16(config, m_eth, 20_MHz_XTAL);
@ -1011,217 +1034,193 @@ MACHINE_CONFIG_START(sapphire_state::sapphire)
// flash memory
INTEL_28F010(config, m_flash_lsb);
INTEL_28F010(config, m_flash_msb);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(turquoise_state::ip2000)
void turquoise_state::ip2000(machine_config &config)
{
turquoise(config);
//m_maincpu->set_clock(40_MHz_XTAL);
m_keyboard->set_default_option("lle_en_us");
// default is 2020 with GT graphics
m_kbd_port->set_default_option("lle_en_us");
m_mse_port->set_default_option("interpro_mouse");
// bus and slots (default to 2020 with GT graphics)
cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "mpcb963", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false);
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
m_softlist->set_filter("2000");
}
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "mpcb963", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false);
MCFG_SOFTWARE_LIST_FILTER("softlist", "2000")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::ip2400)
void cbus_sapphire_state::cbus_sapphire(machine_config &config)
{
sapphire(config);
// keyboard port
INTERPRO_KEYBOARD_PORT(config, m_kbd_port, interpro_keyboard_devices, nullptr);
m_kbd_port->rxd_handler_cb().set(m_scc2, FUNC(z80scc_device::rxa_w));
m_scc2->out_txda_callback().set(m_kbd_port, FUNC(interpro_keyboard_port_device::write_txd));
// mouse port
INTERPRO_MOUSE_PORT(config, m_mse_port, interpro_mouse_devices, nullptr);
m_mse_port->state_func().set(m_ioga, FUNC(interpro_ioga_device::mouse_status_w));
// cbus bus
CBUS_BUS(config, m_bus, 0, m_maincpu);
m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
}
void srx_sapphire_state::srx_sapphire(machine_config &config)
{
sapphire(config);
// srx bus
SRX_BUS(config, m_bus, 0, m_maincpu);
m_bus->out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
m_bus->out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
m_bus->out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
m_bus->out_irq3_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
}
void cbus_sapphire_state::ip2400(machine_config &config)
{
cbus_sapphire(config);
//m_maincpu->set_clock(50_MHz_XTAL);
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0);
m_keyboard->set_default_option("lle_en_us");
// default is 2430 with GT+ graphics
m_kbd_port->set_default_option("lle_en_us");
m_mse_port->set_default_option("interpro_mouse");
// bus and slots (default to 2430 with GT+ graphics)
cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false);
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
m_softlist->set_filter("2400");
}
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false);
void cbus_sapphire_state::ip2500(machine_config &config)
{
cbus_sapphire(config);
MCFG_SOFTWARE_LIST_FILTER("softlist", "2400")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::ip2500)
sapphire(config);
//m_maincpu->set_clock(?);
// FIXME: don't know which cammu revision
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0);
m_keyboard->set_default_option("lle_en_us");
// bus and slots (default to 2530 with GT+ graphics)
cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
// GT II graphics (msmt135)?
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false);
MCFG_SOFTWARE_LIST_FILTER("softlist", "2500")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::ip2700)
sapphire(config);
//m_maincpu->set_clock(?);
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2);
m_keyboard->set_default_option("lle_en_us");
// bus and slots (default to 2730 with GT+ graphics)
cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
// GT II graphics (msmt135)?
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false);
MCFG_SOFTWARE_LIST_FILTER("softlist", "2700")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::ip2800)
sapphire(config);
//m_maincpu->set_clock(?);
// FIXME: don't know which cammu revision
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2);
m_keyboard->set_default_option("lle_en_us");
// default is 2530 with GT+ graphics
m_kbd_port->set_default_option("lle_en_us");
m_mse_port->set_default_option("interpro_mouse");
// bus and slots (default to 2830 with GT+ graphics)
cbus_bus_device &bus(CBUS_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false);
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
m_softlist->set_filter("2500");
}
// GT II graphics (msmt135)?
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, cbus_cards, nullptr, false);
void cbus_sapphire_state::ip2700(machine_config &config)
{
cbus_sapphire(config);
MCFG_SOFTWARE_LIST_FILTER("softlist", "2800")
MACHINE_CONFIG_END
//m_maincpu->set_clock(?);
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2);
MACHINE_CONFIG_START(emerald_state::ip6000)
// default is 2730 with GT+ graphics
m_kbd_port->set_default_option("lle_en_us");
m_mse_port->set_default_option("interpro_mouse");
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false);
m_softlist->set_filter("2700");
}
void cbus_sapphire_state::ip2800(machine_config &config)
{
cbus_sapphire(config);
//m_maincpu->set_clock(?);
// FIXME: don't know which cammu revision
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2);
// default is 2830 with GT+ graphics
m_kbd_port->set_default_option("lle_en_us");
m_mse_port->set_default_option("interpro_mouse");
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":0", 0, m_bus, cbus_cards, "msmt070", false);
CBUS_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, cbus_cards, nullptr, false);
m_softlist->set_filter("2800");
}
void emerald_state::ip6000(machine_config &config)
{
emerald(config);
//m_maincpu->set_clock(80_MHz_XTAL / 2);
// bus and slots (default to 6040 with EDGE-1 graphics)
srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
// default is 6040 with EDGE-1 graphics
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcb828", false);
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
m_softlist->set_filter("6000");
}
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "mpcb828", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, nullptr, false);
void srx_sapphire_state::ip6400(machine_config &config)
{
srx_sapphire(config);
MCFG_SOFTWARE_LIST_FILTER("softlist", "6000")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::ip6400)
sapphire(config);
//m_maincpu->set_clock(36_MHz_XTAL);
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR0);
m_keyboard->set_default_option("lle_en_us");
// bus and slots (default to 6450 with GT II graphics)
srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "mpcbb92", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, nullptr, false);
// EDGE systems use graphics keyboard
//m_keyboard->set_default_option(nullptr);
// default is 6450 with GT II graphics
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcbb68", false);
// EDGE-2 graphics (6480)
//SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "mpcb030", false);
//SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, "mpcba63", false);
//SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, "mpcb030", false);
//SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcba63", false);
MCFG_SOFTWARE_LIST_FILTER("softlist", "6400")
MACHINE_CONFIG_END
m_softlist->set_filter("6400");
}
void srx_sapphire_state::ip6700(machine_config &config)
{
srx_sapphire(config);
MACHINE_CONFIG_START(sapphire_state::ip6700)
sapphire(config);
//m_maincpu->set_clock(?);
// FIXME: don't know which cammu revision
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2);
// bus and slots (default to 6780 with EDGE-2 Plus graphics)
srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
// default is 6780 with EDGE-2 Plus graphics
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, "msmt094", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcb896", false);
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
m_softlist->set_filter("6700");
}
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, "msmt094", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, "mpcb896", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, nullptr, false);
void srx_sapphire_state::ip6800(machine_config &config)
{
srx_sapphire(config);
MCFG_SOFTWARE_LIST_FILTER("softlist", "6700")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(sapphire_state::ip6800)
sapphire(config);
//m_maincpu->set_clock(?);
// FIXME: don't know which cammu revision
m_mmu->set_cammu_id(cammu_c4i_device::CID_C4IR2);
// bus and slots (default to 6880 with EDGE-2 Plus graphics)
srx_bus_device &bus(SRX_BUS(config, INTERPRO_SLOT_TAG, 0, m_maincpu));
// default is 6880 with EDGE-2 Plus graphics
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, m_bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, m_bus, srx_cards, "msmt094", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, m_bus, srx_cards, "mpcb896", false);
bus.out_irq0_cb().set(m_ioga, FUNC(interpro_ioga_device::ir3_w));
bus.out_irq1_cb().set(m_ioga, FUNC(interpro_ioga_device::ir4_w));
bus.out_irq2_cb().set(m_ioga, FUNC(interpro_ioga_device::ir5_w));
bus.out_vblank_cb().set(m_ioga, FUNC(interpro_ioga_device::ir6_w));
SRX_SLOT(config, INTERPRO_SLOT_TAG ":1", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":2", 0, bus, srx_cards, nullptr, false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":3", 0, bus, srx_cards, "msmt094", false);
SRX_SLOT(config, INTERPRO_SLOT_TAG ":4", 0, bus, srx_cards, "mpcb896", false);
MCFG_SOFTWARE_LIST_FILTER("softlist", "6800")
MACHINE_CONFIG_END
m_softlist->set_filter("6800");
}
ROM_START(ip2000)
ROM_REGION(0x80, INTERPRO_NODEID_TAG, 0)
@ -1359,13 +1358,13 @@ ROM_START(ip6800)
ROM_LOAD_OPTIONAL("y226.u130", 0x00000, 0x20000, CRC(54d95730) SHA1(a4e114dee1567d8aa31eed770f7cc366588f395c))
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1990, ip2000, 0, 0, ip2000, interpro, turquoise_state,init_common,"Intergraph", "InterPro/InterServe 20x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1992, ip2400, 0, 0, ip2400, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 24x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip2500, 0, 0, ip2500, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 25x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip2700, 0, 0, ip2700, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 27x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1994, ip2800, 0, 0, ip2800, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 28x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1990, ip6000, 0, 0, ip6000, interpro, emerald_state, init_common,"Intergraph", "InterPro/InterServe 60x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1992, ip6400, 0, 0, ip6400, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 64x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip6700, 0, 0, ip6700, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 67x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip6800, 0, 0, ip6800, interpro, sapphire_state, init_common,"Intergraph", "InterPro/InterServe 68x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1990, ip2000, 0, 0, ip2000, 0, turquoise_state, init_common,"Intergraph", "InterPro/InterServe 20x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1992, ip2400, 0, 0, ip2400, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 24x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip2500, 0, 0, ip2500, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 25x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip2700, 0, 0, ip2700, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 27x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1994, ip2800, 0, 0, ip2800, 0, cbus_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 28x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1990, ip6000, 0, 0, ip6000, 0, emerald_state, init_common,"Intergraph", "InterPro/InterServe 60x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1992, ip6400, 0, 0, ip6400, 0, srx_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 64x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip6700, 0, 0, ip6700, 0, srx_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 67x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
COMP( 1993, ip6800, 0, 0, ip6800, 0, srx_sapphire_state, init_common,"Intergraph", "InterPro/InterServe 68x0", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)

View File

@ -79,7 +79,7 @@ public:
, m_scsibus(*this, INTERPRO_SCSI_TAG)
, m_eth(*this, INTERPRO_ETH_TAG)
, m_ioga(*this, INTERPRO_IOGA_TAG)
, m_keyboard(*this, INTERPRO_KEYBOARD_PORT_TAG)
, m_softlist(*this, "softlist")
, m_diag_led(*this, "digit0")
{
}
@ -97,7 +97,7 @@ public:
required_device<i82586_base_device> m_eth;
required_device<interpro_ioga_device> m_ioga;
required_device<interpro_keyboard_port_device> m_keyboard;
required_device<software_list_device> m_softlist;
void init_common();
@ -167,6 +167,7 @@ public:
, m_d_cammu(*this, INTERPRO_MMU_TAG "_d")
, m_i_cammu(*this, INTERPRO_MMU_TAG "_i")
, m_scsi(*this, INTERPRO_SCSI_DEVICE_TAG)
, m_bus(*this, INTERPRO_SLOT_TAG)
{
}
@ -206,6 +207,7 @@ public:
required_device<cammu_c3_device> m_d_cammu;
required_device<cammu_c3_device> m_i_cammu;
required_device<ncr53c90a_device> m_scsi;
required_device<srx_bus_device> m_bus;
void emerald(machine_config &config);
void ip6000(machine_config &config);
@ -230,7 +232,10 @@ public:
: interpro_state(mconfig, type, tag)
, m_d_cammu(*this, INTERPRO_MMU_TAG "_d")
, m_i_cammu(*this, INTERPRO_MMU_TAG "_i")
, m_kbd_port(*this, INTERPRO_KEYBOARD_PORT_TAG)
, m_mse_port(*this, INTERPRO_MOUSE_PORT_TAG)
, m_scsi(*this, INTERPRO_SCSI_DEVICE_TAG)
, m_bus(*this, INTERPRO_SLOT_TAG)
{
}
@ -269,7 +274,10 @@ public:
required_device<cammu_c3_device> m_d_cammu;
required_device<cammu_c3_device> m_i_cammu;
required_device<interpro_keyboard_port_device> m_kbd_port;
required_device<interpro_mouse_port_device> m_mse_port;
required_device<ncr53c90a_device> m_scsi;
required_device<cbus_bus_device> m_bus;
void turquoise(machine_config &config);
void ip2000(machine_config &config);
@ -337,13 +345,6 @@ public:
required_device<intel_28f010_device> m_flash_msb;
void sapphire(machine_config &config);
void ip2500(machine_config &config);
void ip2400(machine_config &config);
void ip2700(machine_config &config);
void ip2800(machine_config &config);
void ip6400(machine_config &config);
void ip6700(machine_config &config);
void ip6800(machine_config &config);
void interpro_82596_map(address_map &map);
void sapphire_base_map(address_map &map);
@ -359,4 +360,47 @@ private:
u16 m_ctrl2;
};
class cbus_sapphire_state : public sapphire_state
{
public:
cbus_sapphire_state(const machine_config &mconfig, device_type type, const char *tag)
: sapphire_state(mconfig, type, tag)
, m_kbd_port(*this, INTERPRO_KEYBOARD_PORT_TAG)
, m_mse_port(*this, INTERPRO_MOUSE_PORT_TAG)
, m_bus(*this, INTERPRO_SLOT_TAG)
{
}
void cbus_sapphire(machine_config &config);
void ip2500(machine_config &config);
void ip2400(machine_config &config);
void ip2700(machine_config &config);
void ip2800(machine_config &config);
protected:
required_device<interpro_keyboard_port_device> m_kbd_port;
required_device<interpro_mouse_port_device> m_mse_port;
required_device<cbus_bus_device> m_bus;
};
class srx_sapphire_state : public sapphire_state
{
public:
srx_sapphire_state(const machine_config &mconfig, device_type type, const char *tag)
: sapphire_state(mconfig, type, tag)
, m_bus(*this, INTERPRO_SLOT_TAG)
{
}
void srx_sapphire(machine_config &config);
void ip6400(machine_config &config);
void ip6700(machine_config &config);
void ip6800(machine_config &config);
protected:
required_device<srx_bus_device> m_bus;
};
#endif // MAME_INCLUDES_INTERPRO_H