mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Merge pull request #3883 from pmackinlay/interpro
interpro: cleanup + graphics (nw)
This commit is contained in:
commit
2f9e5b02d3
@ -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
@ -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 >, const offs_t offset) const;
|
||||
void buffer_write(const gt_t >, 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 >, 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
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user