summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2021-04-07 04:33:43 +1000
committer Vas Crabb <vas@vastheman.com>2021-04-07 04:33:43 +1000
commit958189731b8e4b0e19c042331901460ef452f601 (patch)
treefb7fabf3d7b75ee4a954f28f878276be711d1346
parent42e49eaf1e33975152257d340297ed58695762fa (diff)
bus/a2bus: Added Orange Micro Grappler printer interface card.
-rw-r--r--scripts/src/bus.lua4
-rw-r--r--src/devices/bus/a2bus/grappler.cpp (renamed from src/devices/bus/a2bus/grapplerplus.cpp)388
-rw-r--r--src/devices/bus/a2bus/grappler.h (renamed from src/devices/bus/a2bus/grapplerplus.h)117
-rw-r--r--src/mame/drivers/apple2.cpp3
-rw-r--r--src/mame/drivers/apple2e.cpp3
-rw-r--r--src/mame/drivers/apple2gs.cpp3
6 files changed, 400 insertions, 118 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 74f601e7499..415826bbfb6 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -2417,8 +2417,8 @@ if (BUSES["A2BUS"]~=null) then
MAME_DIR .. "src/devices/bus/a2bus/corvfdc02.h",
MAME_DIR .. "src/devices/bus/a2bus/ezcgi.cpp",
MAME_DIR .. "src/devices/bus/a2bus/ezcgi.h",
- MAME_DIR .. "src/devices/bus/a2bus/grapplerplus.cpp",
- MAME_DIR .. "src/devices/bus/a2bus/grapplerplus.h",
+ MAME_DIR .. "src/devices/bus/a2bus/grappler.cpp",
+ MAME_DIR .. "src/devices/bus/a2bus/grappler.h",
MAME_DIR .. "src/devices/bus/a2bus/laser128.cpp",
MAME_DIR .. "src/devices/bus/a2bus/laser128.h",
MAME_DIR .. "src/devices/bus/a2bus/mouse.cpp",
diff --git a/src/devices/bus/a2bus/grapplerplus.cpp b/src/devices/bus/a2bus/grappler.cpp
index f4e95e92b42..3b14db16c48 100644
--- a/src/devices/bus/a2bus/grapplerplus.cpp
+++ b/src/devices/bus/a2bus/grappler.cpp
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
#include "emu.h"
-#include "grapplerplus.h"
+#include "grappler.h"
//#define VERBOSE 1
//#define LOG_OUTPUT_FUNC osd_printf_info
@@ -9,6 +9,12 @@
namespace {
+ROM_START(grappler)
+ ROM_REGION(0x0800, "rom", 0)
+ ROM_LOAD( "eps-1_c1981.u6", 0x0000, 0x0800, CRC(862773cb) SHA1(791ebae64a7fad8f42bdfaec36b9e2d34f12ded8) )
+ROM_END
+
+
ROM_START(grapplerplus)
// TODO: add other revisions - 3.3 is known to exist
@@ -73,6 +79,7 @@ INPUT_PORTS_END
+DEFINE_DEVICE_TYPE(A2BUS_GRAPPLER, a2bus_grappler_device, "a2grappler", "Orange Micro Grappler Printer Interface")
DEFINE_DEVICE_TYPE(A2BUS_GRAPPLERPLUS, a2bus_grapplerplus_device, "a2grapplerplus", "Orange Micro Grappler+ Printer Interface")
DEFINE_DEVICE_TYPE(A2BUS_BUFGRAPPLERPLUS, a2bus_buf_grapplerplus_device, "a2bufgrapplerplus", "Orange Micro Buffered Grappler+ Printer Interface")
DEFINE_DEVICE_TYPE(A2BUS_BUFGRAPPLERPLUSA, a2bus_buf_grapplerplus_reva_device, "a2bufgrapplerplusa", "Orange Micro Buffered Grappler+ (rev A) Printer Interface")
@@ -80,19 +87,16 @@ DEFINE_DEVICE_TYPE(A2BUS_BUFGRAPPLERPLUSA, a2bus_buf_grapplerplus_reva_device, "
//==============================================================
-// Grappler+ base
+// Grappler base
//==============================================================
-a2bus_grapplerplus_device_base::a2bus_grapplerplus_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) :
+a2bus_grappler_device_base::a2bus_grappler_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) :
device_t(mconfig, type, tag, owner, clock),
device_a2bus_card_interface(mconfig, *this),
m_printer_conn(*this, "prn"),
m_printer_out(*this, "prn_out"),
- m_s1(*this, "S1"),
m_rom(*this, "rom"),
m_rom_bank(0x0000U),
- m_ack_latch(1U),
- m_ack_in(1U),
m_busy_in(1U),
m_pe_in(1U),
m_slct_in(1U)
@@ -102,21 +106,305 @@ a2bus_grapplerplus_device_base::a2bus_grapplerplus_device_base(machine_config co
//--------------------------------------------------
+// device_a2bus_card_interface implementation
+//--------------------------------------------------
+
+u8 a2bus_grappler_device_base::read_c800(u16 offset)
+{
+ return m_rom[(offset & 0x07ffU) | m_rom_bank];
+}
+
+
+
+//--------------------------------------------------
// device_t implementation
//--------------------------------------------------
-void a2bus_grapplerplus_device_base::device_add_mconfig(machine_config &config)
+void a2bus_grappler_device_base::device_add_mconfig(machine_config &config)
{
CENTRONICS(config, m_printer_conn, centronics_devices, "printer");
- m_printer_conn->busy_handler().set(FUNC(a2bus_grapplerplus_device_base::busy_w));
- m_printer_conn->perror_handler().set(FUNC(a2bus_grapplerplus_device_base::pe_w));
- m_printer_conn->select_handler().set(FUNC(a2bus_grapplerplus_device_base::slct_w));
+ m_printer_conn->busy_handler().set(FUNC(a2bus_grappler_device_base::busy_w));
+ m_printer_conn->perror_handler().set(FUNC(a2bus_grappler_device_base::pe_w));
+ m_printer_conn->select_handler().set(FUNC(a2bus_grappler_device_base::slct_w));
OUTPUT_LATCH(config, m_printer_out);
m_printer_conn->set_output_latch(*m_printer_out);
}
+void a2bus_grappler_device_base::device_start()
+{
+ save_item(NAME(m_rom_bank));
+ save_item(NAME(m_busy_in));
+ save_item(NAME(m_pe_in));
+ save_item(NAME(m_slct_in));
+}
+
+
+
+//--------------------------------------------------
+// printer status inputs
+//--------------------------------------------------
+
+void a2bus_grappler_device_base::set_rom_bank(u16 rom_bank)
+{
+ if (m_rom_bank != rom_bank)
+ LOG("Select ROM bank %04X\n", rom_bank);
+ m_rom_bank = rom_bank;
+}
+
+
+
+//--------------------------------------------------
+// printer status inputs
+//--------------------------------------------------
+
+WRITE_LINE_MEMBER(a2bus_grappler_device_base::busy_w)
+{
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device_base::set_busy_in), this), state ? 1 : 0);
+}
+
+
+WRITE_LINE_MEMBER(a2bus_grappler_device_base::pe_w)
+{
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device_base::set_pe_in), this), state ? 1 : 0);
+}
+
+
+WRITE_LINE_MEMBER(a2bus_grappler_device_base::slct_w)
+{
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device_base::set_slct_in), this), state ? 1 : 0);
+}
+
+
+
+//--------------------------------------------------
+// synchronised printer status inputs
+//--------------------------------------------------
+
+void a2bus_grappler_device_base::set_busy_in(void *ptr, s32 param)
+{
+ if (u32(param) != m_busy_in)
+ {
+ LOG("BUSY=%d\n", param);
+ m_busy_in = u8(u32(param));
+ }
+}
+
+
+void a2bus_grappler_device_base::set_pe_in(void *ptr, s32 param)
+{
+ if (u32(param) != m_pe_in)
+ {
+ LOG("PAPER EMPTY=%d\n", param);
+ m_pe_in = u8(u32(param));
+ }
+}
+
+
+void a2bus_grappler_device_base::set_slct_in(void *ptr, s32 param)
+{
+ if (u32(param) != m_slct_in)
+ {
+ LOG("SELECT=%d\n", param);
+ m_slct_in = u8(u32(param));
+ }
+}
+
+
+
+//==============================================================
+// Grappler implementation
+//==============================================================
+
+a2bus_grappler_device::a2bus_grappler_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ a2bus_grappler_device_base(mconfig, A2BUS_GRAPPLER, tag, owner, clock),
+ m_strobe(1U),
+ m_ack_latch(1U),
+ m_ack_in(1U)
+{
+}
+
+
+
+//--------------------------------------------------
+// device_a2bus_card_interface implementation
+//--------------------------------------------------
+
+u8 a2bus_grappler_device::read_c0nx(u8 offset)
+{
+ LOG("Read C0n%01X\n", offset);
+
+ if (BIT(offset, 1)) // A1 - assert strobe
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 0);
+ else if (BIT(offset, 2)) // A2 - release strobe
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 1);
+
+ if (BIT(offset, 0)) // A0 - printer status
+ {
+ return
+ 0xf0U | // TODO: actually open bus
+ (busy_in() << 3) |
+ (pe_in() << 2) |
+ (slct_in() << 1) |
+ m_ack_latch;
+ }
+ else
+ {
+ return 0xffU; // TODO: actually open bus
+ }
+}
+
+
+void a2bus_grappler_device::write_c0nx(u8 offset, u8 data)
+{
+ LOG("Write C0n%01X=%02X\n", offset, data);
+
+ if (BIT(offset, 0)) // A0 - write data
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_data), this), int(unsigned(data)));
+
+ if (BIT(offset, 1)) // A1 - assert strobe
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 0);
+ else if (BIT(offset, 2)) // A2 - release strobe
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 1);
+}
+
+
+u8 a2bus_grappler_device::read_cnxx(u8 offset)
+{
+ return m_rom[offset | (slotno() << 8)];
+}
+
+
+void a2bus_grappler_device::write_cnxx(u8 offset, u8 data)
+{
+ LOG("Write Cn%02X=%02X (bus conflict)\n", offset, data);
+}
+
+
+
+//--------------------------------------------------
+// device_t implementation
+//--------------------------------------------------
+
+tiny_rom_entry const *a2bus_grappler_device::device_rom_region() const
+{
+ return ROM_NAME(grappler);
+}
+
+
+void a2bus_grappler_device::device_add_mconfig(machine_config &config)
+{
+ a2bus_grappler_device_base::device_add_mconfig(config);
+
+ m_printer_conn->ack_handler().set(FUNC(a2bus_grappler_device::ack_w));
+}
+
+
+void a2bus_grappler_device::device_start()
+{
+ a2bus_grappler_device_base::device_start();
+
+ save_item(NAME(m_strobe));
+ save_item(NAME(m_ack_latch));
+ save_item(NAME(m_ack_in));
+}
+
+
+void a2bus_grappler_device::device_reset()
+{
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 1);
+}
+
+
+
+//--------------------------------------------------
+// printer status inputs
+//--------------------------------------------------
+
+WRITE_LINE_MEMBER(a2bus_grappler_device::ack_w)
+{
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_ack_in), this), state ? 1 : 0);
+}
+
+
+
+//--------------------------------------------------
+// synchronised signals
+//--------------------------------------------------
+
+void a2bus_grappler_device::set_data(void *ptr, s32 param)
+{
+ LOG("Output data %02X\n", u8(u32(param)));
+ m_printer_out->write(u8(u32(param)));
+}
+
+
+void a2bus_grappler_device::set_strobe(void *ptr, s32 param)
+{
+ LOG("Output /STROBE=%d\n", param);
+ m_printer_conn->write_strobe(param);
+ if (m_strobe && !param)
+ {
+ if (m_ack_in)
+ {
+ if (!m_ack_latch)
+ LOG("Clearing acknowledge latch\n");
+ else
+ LOG("Previous data not acknowledged\n");
+ m_ack_latch = 1U;
+ }
+ else
+ {
+ LOG("/ACK asserted, not clearing acknowledge latch\n");
+ }
+ }
+ m_strobe = u8(u32(param));
+}
+
+
+void a2bus_grappler_device::set_ack_in(void *ptr, s32 param)
+{
+ if (u32(param) != m_ack_in)
+ {
+ LOG("/ACK=%d\n", param);
+ m_ack_in = u8(u32(param));
+ if (!param)
+ {
+ if (m_ack_latch)
+ LOG("Set acknowledge latch\n");
+ else
+ LOG("No data written since previous acknowledge\n");
+ m_ack_latch = 0U;
+ }
+ else if (!m_strobe)
+ {
+ LOG("Clearing acknowledge latch\n");
+ m_ack_latch = 1U;
+ }
+ }
+}
+
+
+
+//==============================================================
+// Grappler+ base
+//==============================================================
+
+a2bus_grapplerplus_device_base::a2bus_grapplerplus_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) :
+ a2bus_grappler_device_base(mconfig, type, tag, owner, clock),
+ m_s1(*this, "S1"),
+ m_ack_latch(1U),
+ m_ack_in(1U)
+{
+}
+
+
+
+//--------------------------------------------------
+// device_t implementation
+//--------------------------------------------------
+
ioport_constructor a2bus_grapplerplus_device_base::device_input_ports() const
{
return INPUT_PORTS_NAME(grapplerplus);
@@ -125,12 +413,10 @@ ioport_constructor a2bus_grapplerplus_device_base::device_input_ports() const
void a2bus_grapplerplus_device_base::device_start()
{
- save_item(NAME(m_rom_bank));
+ a2bus_grappler_device_base::device_start();
+
save_item(NAME(m_ack_latch));
save_item(NAME(m_ack_in));
- save_item(NAME(m_busy_in));
- save_item(NAME(m_pe_in));
- save_item(NAME(m_slct_in));
}
@@ -172,24 +458,14 @@ void a2bus_grapplerplus_device_base::write_c0nx(u8 offset, u8 data)
}
if (BIT(offset, 0)) // A0 - select high ROM bank
- {
- if (!m_rom_bank)
- LOG("Select high ROM bank\n");
- else
- LOG("High ROM bank already selected\n");
- m_rom_bank = 0x0800U;
- }
+ set_rom_bank(0x0800U);
}
u8 a2bus_grapplerplus_device_base::read_cnxx(u8 offset)
{
if (!machine().side_effects_disabled())
- {
- if (m_rom_bank)
- LOG("Select low ROM bank\n");
- m_rom_bank = 0x0000U;
- }
+ set_rom_bank(0x0000U);
return m_rom[(!m_ack_latch && BIT(offset, 7)) ? (offset & 0xbfU) : offset];
}
@@ -198,21 +474,13 @@ void a2bus_grapplerplus_device_base::write_cnxx(u8 offset, u8 data)
{
LOG("Write Cn%02X=%02X (bus conflict)\n", offset, data);
- if (m_rom_bank)
- LOG("Select low ROM bank\n");
- m_rom_bank = 0x0000U;
-}
-
-
-u8 a2bus_grapplerplus_device_base::read_c800(u16 offset)
-{
- return m_rom[(offset & 0x07ffU) | m_rom_bank];
+ set_rom_bank(0x0000U);
}
//--------------------------------------------------
-// printer status inputs
+// ACK latch set input
//--------------------------------------------------
WRITE_LINE_MEMBER(a2bus_grapplerplus_device_base::ack_w)
@@ -221,24 +489,6 @@ WRITE_LINE_MEMBER(a2bus_grapplerplus_device_base::ack_w)
}
-WRITE_LINE_MEMBER(a2bus_grapplerplus_device_base::busy_w)
-{
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grapplerplus_device_base::set_busy_in), this), state ? 1 : 0);
-}
-
-
-WRITE_LINE_MEMBER(a2bus_grapplerplus_device_base::pe_w)
-{
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grapplerplus_device_base::set_pe_in), this), state ? 1 : 0);
-}
-
-
-WRITE_LINE_MEMBER(a2bus_grapplerplus_device_base::slct_w)
-{
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grapplerplus_device_base::set_slct_in), this), state ? 1 : 0);
-}
-
-
//--------------------------------------------------
// synchronised printer status inputs
@@ -263,36 +513,6 @@ void a2bus_grapplerplus_device_base::set_ack_in(void *ptr, s32 param)
}
-void a2bus_grapplerplus_device_base::set_busy_in(void *ptr, s32 param)
-{
- if (u32(param) != m_busy_in)
- {
- LOG("BUSY=%d\n", param);
- m_busy_in = u8(u32(param));
- }
-}
-
-
-void a2bus_grapplerplus_device_base::set_pe_in(void *ptr, s32 param)
-{
- if (u32(param) != m_pe_in)
- {
- LOG("PAPER EMPTY=%d\n", param);
- m_pe_in = u8(u32(param));
- }
-}
-
-
-void a2bus_grapplerplus_device_base::set_slct_in(void *ptr, s32 param)
-{
- if (u32(param) != m_slct_in)
- {
- LOG("SELECT=%d\n", param);
- m_slct_in = u8(u32(param));
- }
-}
-
-
//==============================================================
// Grappler+ implementation
diff --git a/src/devices/bus/a2bus/grapplerplus.h b/src/devices/bus/a2bus/grappler.h
index d2bb09ab3cc..8e3857414da 100644
--- a/src/devices/bus/a2bus/grapplerplus.h
+++ b/src/devices/bus/a2bus/grappler.h
@@ -2,13 +2,15 @@
// copyright-holders:Vas Crabb
/***********************************************************************
- Orange Micro Grappler+ Printer Interface
+ Orange Micro Grappler/Grappler+ Printer Interface
- With references to schematic from Grappler™+ Printer Interface
- Series Operators Manual (© Orange Micro, Inc. 1982). This uses
- the IC locations on the "long" version of the card. The newer
- "short" version of the card has slightly different circuitry
- and completely different IC locations.
+ With references to schematics from The Grappler™ Interface
+ Operators Manual (Copyright 1982 Orance Micro, Inc.) and
+ Grappler™+ Printer Interface Series Operators Manual (© Orange
+ Micro, Inc. 1982). This uses the IC locations on the "long"
+ version of the Grappler+ card - the newer "short" version of the
+ card has slightly different circuitry and completely different IC
+ locations.
26-pin two-row header to printer:
@@ -56,7 +58,84 @@
#include "cpu/mcs48/mcs48.h"
-class a2bus_grapplerplus_device_base : public device_t, public device_a2bus_card_interface
+class a2bus_grappler_device_base : public device_t, public device_a2bus_card_interface
+{
+public:
+ // device_a2bus_card_interface implementation
+ virtual u8 read_c800(u16 offset) override;
+
+protected:
+ a2bus_grappler_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock);
+
+ // signal state
+ u8 busy_in() const { return m_busy_in; }
+ u8 pe_in() const { return m_pe_in; }
+ u8 slct_in() const { return m_slct_in; }
+
+ required_device<centronics_device> m_printer_conn;
+ required_device<output_latch_device> m_printer_out;
+ required_region_ptr<u8> m_rom;
+
+protected:
+ // device_t implementation
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+ // helpers
+ void set_rom_bank(u16 rom_bank);
+
+private:
+ // printer status inputs
+ DECLARE_WRITE_LINE_MEMBER(busy_w);
+ DECLARE_WRITE_LINE_MEMBER(pe_w);
+ DECLARE_WRITE_LINE_MEMBER(slct_w);
+
+ // synchronised printer status inputs
+ void set_busy_in(void *ptr, s32 param);
+ void set_pe_in(void *ptr, s32 param);
+ void set_slct_in(void *ptr, s32 param);
+
+ u16 m_rom_bank; // U2D (pin 13)
+ u8 m_busy_in; // printer connector pin 21 (synchronised)
+ u8 m_pe_in; // printer connector pin 23 (synchronised)
+ u8 m_slct_in; // printer connector pin 25 (synchronised)
+};
+
+
+class a2bus_grappler_device : public a2bus_grappler_device_base
+{
+public:
+ a2bus_grappler_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);
+
+ // device_a2bus_card_interface implementation
+ virtual u8 read_c0nx(u8 offset) override;
+ virtual void write_c0nx(u8 offset, u8 data) override;
+ virtual u8 read_cnxx(u8 offset) override;
+ virtual void write_cnxx(u8 offset, u8 data) override;
+
+protected:
+ // device_t implementation
+ virtual tiny_rom_entry const *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ // printer status inputs
+ DECLARE_WRITE_LINE_MEMBER(ack_w);
+
+ // synchronised signals
+ void set_data(void *ptr, s32 param);
+ void set_strobe(void *ptr, s32 param);
+ void set_ack_in(void *ptr, s32 param);
+
+ u8 m_strobe; // U3 (pin 4)
+ u8 m_ack_latch; // U3 (pin 13)
+ u8 m_ack_in; // printer connector pin 19 (synchronised)
+};
+
+
+class a2bus_grapplerplus_device_base : public a2bus_grappler_device_base
{
public:
// DIP switch handlers
@@ -66,13 +145,11 @@ public:
virtual void write_c0nx(u8 offset, u8 data) override;
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
- virtual u8 read_c800(u16 offset) override;
protected:
a2bus_grapplerplus_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock);
// device_t implementation
- virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
virtual void device_reset() override;
@@ -82,39 +159,20 @@ protected:
// signal state
u8 ack_latch() const { return m_ack_latch; }
- u8 busy_in() const { return m_busy_in; }
- u8 pe_in() const { return m_pe_in; }
- u8 slct_in() const { return m_slct_in; }
- required_device<centronics_device> m_printer_conn;
- required_device<output_latch_device> m_printer_out;
- required_ioport m_s1;
+ required_ioport m_s1;
private:
- // printer status inputs
- DECLARE_WRITE_LINE_MEMBER(busy_w);
- DECLARE_WRITE_LINE_MEMBER(pe_w);
- DECLARE_WRITE_LINE_MEMBER(slct_w);
-
// synchronised printer status inputs
void set_ack_in(void *ptr, s32 param);
- void set_busy_in(void *ptr, s32 param);
- void set_pe_in(void *ptr, s32 param);
- void set_slct_in(void *ptr, s32 param);
// for derived devices to implement
virtual void data_latched(u8 data) = 0;
virtual void ack_latch_set() { }
virtual void ack_latch_cleared() { }
- required_region_ptr<u8> m_rom;
-
- u16 m_rom_bank; // U2D (pin 13)
u8 m_ack_latch; // U2C (pin 9)
u8 m_ack_in; // printer connector pin 19 (synchronised)
- u8 m_busy_in; // printer connector pin 21 (synchronised)
- u8 m_pe_in; // printer connector pin 23 (synchronised)
- u8 m_slct_in; // printer connector pin 25 (synchronised)
};
@@ -218,6 +276,7 @@ protected:
};
+DECLARE_DEVICE_TYPE(A2BUS_GRAPPLER, a2bus_grappler_device)
DECLARE_DEVICE_TYPE(A2BUS_GRAPPLERPLUS, a2bus_grapplerplus_device)
DECLARE_DEVICE_TYPE(A2BUS_BUFGRAPPLERPLUS, a2bus_buf_grapplerplus_device)
DECLARE_DEVICE_TYPE(A2BUS_BUFGRAPPLERPLUSA, a2bus_buf_grapplerplus_reva_device)
diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp
index ead0452a302..fe68a98e554 100644
--- a/src/mame/drivers/apple2.cpp
+++ b/src/mame/drivers/apple2.cpp
@@ -85,7 +85,7 @@ II Plus: RAM options reduced to 16/32/48 KB.
#include "bus/a2bus/computereyes2.h"
#include "bus/a2bus/ccs7710.h"
#include "bus/a2bus/ezcgi.h"
-#include "bus/a2bus/grapplerplus.h"
+#include "bus/a2bus/grappler.h"
#include "bus/a2bus/laser128.h"
#include "bus/a2bus/mouse.h"
#include "bus/a2bus/ramcard128k.h"
@@ -1314,6 +1314,7 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("aevm80", A2BUS_AEVIEWMASTER80); /* Applied Engineering ViewMaster 80 */
device.option_add("parprn", A2BUS_PARPRN); /* Apple II Parallel Printer Interface Card */
device.option_add("parallel", A2BUS_PIC); /* Apple II Parallel Interface Card */
+ device.option_add("grappler", A2BUS_GRAPPLER); /* Orange Micro Grappler Printer Interface card */
device.option_add("grapplus", A2BUS_GRAPPLERPLUS); /* Orange Micro Grappler+ Printer Interface card */
device.option_add("bufgrapplus", A2BUS_BUFGRAPPLERPLUS); /* Orange Micro Buffered Grappler+ Printer Interface card */
device.option_add("bufgrapplusa", A2BUS_BUFGRAPPLERPLUSA); /* Orange Micro Buffered Grappler+ (rev A) Printer Interface card */
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index c3a81895bbd..3a8dfa7a8f4 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -173,7 +173,7 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele
#include "bus/a2bus/computereyes2.h"
#include "bus/a2bus/ccs7710.h"
#include "bus/a2bus/ezcgi.h"
-#include "bus/a2bus/grapplerplus.h"
+#include "bus/a2bus/grappler.h"
#include "bus/a2bus/laser128.h"
#include "bus/a2bus/mouse.h"
#include "bus/a2bus/pc_xporter.h"
@@ -4665,6 +4665,7 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("aevm80", A2BUS_AEVIEWMASTER80); /* Applied Engineering ViewMaster 80 */
device.option_add("parprn", A2BUS_PARPRN); /* Apple II Parallel Printer Interface Card */
device.option_add("parallel", A2BUS_PIC); /* Apple II Parallel Interface Card */
+ device.option_add("grappler", A2BUS_GRAPPLER); /* Orange Micro Grappler Printer Interface card */
device.option_add("grapplus", A2BUS_GRAPPLERPLUS); /* Orange Micro Grappler+ Printer Interface card */
device.option_add("bufgrapplus", A2BUS_BUFGRAPPLERPLUS); /* Orange Micro Buffered Grappler+ Printer Interface card */
device.option_add("bufgrapplusa", A2BUS_BUFGRAPPLERPLUSA); /* Orange Micro Buffered Grappler+ (rev A) Printer Interface card */
diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp
index ff81f3f6d78..46bf3640bad 100644
--- a/src/mame/drivers/apple2gs.cpp
+++ b/src/mame/drivers/apple2gs.cpp
@@ -113,7 +113,7 @@
#include "bus/a2bus/ccs7710.h"
#include "bus/a2bus/cmsscsi.h"
#include "bus/a2bus/ezcgi.h"
-#include "bus/a2bus/grapplerplus.h"
+#include "bus/a2bus/grappler.h"
//#include "bus/a2bus/hostram.h"
#include "bus/a2bus/laser128.h"
#include "bus/a2bus/mouse.h"
@@ -4763,6 +4763,7 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("aevm80", A2BUS_AEVIEWMASTER80); /* Applied Engineering ViewMaster 80 */
device.option_add("parprn", A2BUS_PARPRN); /* Apple II Parallel Printer Interface Card */
device.option_add("parallel", A2BUS_PIC); /* Apple Parallel Interface Card */
+ device.option_add("grappler", A2BUS_GRAPPLER); /* Orange Micro Grappler Printer Interface card */
device.option_add("grapplus", A2BUS_GRAPPLERPLUS); /* Orange Micro Grappler+ Printer Interface card */
device.option_add("bufgrapplus", A2BUS_BUFGRAPPLERPLUS); /* Orange Micro Buffered Grappler+ Printer Interface card */
device.option_add("bufgrapplusa", A2BUS_BUFGRAPPLERPLUSA); /* Orange Micro Buffered Grappler+ (rev A) Printer Interface card */