diff options
author | 2021-04-06 22:04:40 +1000 | |
---|---|---|
committer | 2021-04-06 22:04:40 +1000 | |
commit | b38799131b529502ed13da57ef24ccee97ceaaf8 (patch) | |
tree | 723eeede8859090b782c3e9c672767657c2db049 /src | |
parent | 880f44cf291eac111af9d5e149320b686584ab7f (diff) |
bus/a2bus: More improvements for Orange Micro buffered Grappler+: [Vas Crabb, Golden Child]
* Fixed another bad bit in microcontroller ROM dump.
* Added rev A variant with 6 MHz microcontroller clock.
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/bus/a2bus/grapplerplus.cpp | 75 | ||||
-rw-r--r-- | src/devices/bus/a2bus/grapplerplus.h | 17 | ||||
-rw-r--r-- | src/mame/drivers/apple2.cpp | 1 | ||||
-rw-r--r-- | src/mame/drivers/apple2e.cpp | 1 | ||||
-rw-r--r-- | src/mame/drivers/apple2gs.cpp | 1 |
5 files changed, 80 insertions, 15 deletions
diff --git a/src/devices/bus/a2bus/grapplerplus.cpp b/src/devices/bus/a2bus/grapplerplus.cpp index e3ff0e8f0a3..f4e95e92b42 100644 --- a/src/devices/bus/a2bus/grapplerplus.cpp +++ b/src/devices/bus/a2bus/grapplerplus.cpp @@ -38,7 +38,7 @@ ROM_START(bufgrapplerplus) // C6N40 B // 95ROM08048 ROM_REGION(0x0400, "mcu", 0) - ROM_LOAD( "95rom08048.u10", 0x0000, 0x0400, CRC(c9c23486) SHA1(c3a9c0fc9bd0ae728ad2aaa50d98b41929ec4a17) BAD_DUMP ) + ROM_LOAD( "95rom08048.u10", 0x0000, 0x0400, CRC(55990f67) SHA1(f0907cf02d8c5dbf1bfacb0d626f2231142f0ff7) ) ROM_END @@ -75,6 +75,7 @@ INPUT_PORTS_END 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") @@ -490,7 +491,13 @@ TIMER_CALLBACK_MEMBER(a2bus_grapplerplus_device::update_strobe) //============================================================== a2bus_buf_grapplerplus_device::a2bus_buf_grapplerplus_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) : - a2bus_grapplerplus_device_base(mconfig, A2BUS_BUFGRAPPLERPLUS, tag, owner, clock), + a2bus_buf_grapplerplus_device(mconfig, A2BUS_BUFGRAPPLERPLUS, tag, owner, clock) +{ +} + + +a2bus_buf_grapplerplus_device::a2bus_buf_grapplerplus_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) : + a2bus_grapplerplus_device_base(mconfig, type, tag, owner, clock), m_mcu(*this, "mcu"), m_ram(), m_ram_row(0xff00), @@ -533,19 +540,8 @@ tiny_rom_entry const *a2bus_buf_grapplerplus_device::device_rom_region() const void a2bus_buf_grapplerplus_device::device_add_mconfig(machine_config &config) { - a2bus_grapplerplus_device_base::device_add_mconfig(config); - - m_printer_conn->ack_handler().set(FUNC(a2bus_buf_grapplerplus_device::buf_ack_w)); - - // 1982 schematics show MCU driven by 7M clock but some boards have a crystal next to the MCU - // P22 is tied high, pulling it low is used for some factory test mode - I8048(config, m_mcu, DERIVED_CLOCK(1, 1)); - m_mcu->set_addrmap(AS_IO, &a2bus_buf_grapplerplus_device::mcu_io); - m_mcu->p2_out_cb().set(FUNC(a2bus_buf_grapplerplus_device::mcu_p2_w)); - m_mcu->t0_in_cb().set([this] () { return busy_in(); }); - m_mcu->t1_in_cb().set([this] () { return m_buf_ack_latch; }); - m_mcu->bus_in_cb().set(FUNC(a2bus_buf_grapplerplus_device::mcu_bus_r)); - m_mcu->bus_out_cb().set(FUNC(a2bus_buf_grapplerplus_device::mcu_bus_w)); + // 1982 schematics show MCU driven by 7M clock + device_add_mconfig(config, DERIVED_CLOCK(1, 1)); } @@ -593,6 +589,29 @@ void a2bus_buf_grapplerplus_device::device_reset() //-------------------------------------------------- +// helpers +//-------------------------------------------------- + +template <typename T> +void a2bus_buf_grapplerplus_device::device_add_mconfig(machine_config &config, T &&mcu_clock) +{ + a2bus_grapplerplus_device_base::device_add_mconfig(config); + + m_printer_conn->ack_handler().set(FUNC(a2bus_buf_grapplerplus_device::buf_ack_w)); + + // P22 is tied high, pulling it low is used for some factory test mode + I8048(config, m_mcu, std::forward<T>(mcu_clock)); + m_mcu->set_addrmap(AS_IO, &a2bus_buf_grapplerplus_device::mcu_io); + m_mcu->p2_out_cb().set(FUNC(a2bus_buf_grapplerplus_device::mcu_p2_w)); + m_mcu->t0_in_cb().set([this] () { return busy_in(); }); + m_mcu->t1_in_cb().set([this] () { return m_buf_ack_latch; }); + m_mcu->bus_in_cb().set(FUNC(a2bus_buf_grapplerplus_device::mcu_bus_r)); + m_mcu->bus_out_cb().set(FUNC(a2bus_buf_grapplerplus_device::mcu_bus_w)); +} + + + +//-------------------------------------------------- // a2bus_grapplerplus_device_base implementation //-------------------------------------------------- @@ -790,3 +809,29 @@ void a2bus_buf_grapplerplus_device::clear_ibusy(void *ptr, s32 param) LOG("IBUSY already clear\n"); } } + + + +//============================================================== +// Buffered Grappler+ rev A implementation +//============================================================== + +a2bus_buf_grapplerplus_reva_device::a2bus_buf_grapplerplus_reva_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) : + a2bus_buf_grapplerplus_device(mconfig, A2BUS_BUFGRAPPLERPLUSA, tag, owner, clock) +{ +} + + + +//-------------------------------------------------- +// device_t implementation +//-------------------------------------------------- + +void a2bus_buf_grapplerplus_reva_device::device_add_mconfig(machine_config &config) +{ + // boards with 6 MHz clock crystal for MCU have been seen with both UVEPROM and mask ROM parts + // ORANGE MICRO INC., 1983 + // ASSY NO, 72 BGP 00001 REV A + // PART NO. 95PCB00003 + a2bus_buf_grapplerplus_device::device_add_mconfig(config, 6_MHz_XTAL); +} diff --git a/src/devices/bus/a2bus/grapplerplus.h b/src/devices/bus/a2bus/grapplerplus.h index 188ebc35b2e..d2bb09ab3cc 100644 --- a/src/devices/bus/a2bus/grapplerplus.h +++ b/src/devices/bus/a2bus/grapplerplus.h @@ -164,6 +164,8 @@ public: virtual u8 read_c0nx(u8 offset) override; protected: + a2bus_buf_grapplerplus_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock); + // device_t implementation virtual tiny_rom_entry const *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; @@ -171,6 +173,9 @@ protected: virtual void device_start() override; virtual void device_reset() override; + // helpers + template <typename T> void device_add_mconfig(machine_config &config, T &&mcu_clock); + private: // a2bus_grapplerplus_device_base implementation virtual void data_latched(u8 data) override; @@ -202,7 +207,19 @@ private: }; +class a2bus_buf_grapplerplus_reva_device : public a2bus_buf_grapplerplus_device +{ +public: + a2bus_buf_grapplerplus_reva_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + +protected: + // device_t implementation + virtual void device_add_mconfig(machine_config &config) override; +}; + + 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) #endif // MAME_BUS_A2BUS_GRAPPLERPLUS_H diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index 39d2328f3ed..ead0452a302 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -1316,6 +1316,7 @@ static void apple2_cards(device_slot_interface &device) device.option_add("parallel", A2BUS_PIC); /* Apple II Parallel 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 */ device.option_add("corvus", A2BUS_CORVUS); /* Corvus flat-cable HDD interface (see notes in a2corvus.c) */ device.option_add("mcms1", A2BUS_MCMS1); /* Mountain Computer Music System, card 1 of 2 */ device.option_add("mcms2", A2BUS_MCMS2); /* Mountain Computer Music System, card 2 of 2. must be in card 1's slot + 1! */ diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 1344605e892..c3a81895bbd 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -4667,6 +4667,7 @@ static void apple2_cards(device_slot_interface &device) device.option_add("parallel", A2BUS_PIC); /* Apple II Parallel 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 */ device.option_add("corvus", A2BUS_CORVUS); /* Corvus flat-cable HDD interface (see notes in a2corvus.c) */ device.option_add("mcms1", A2BUS_MCMS1); /* Mountain Computer Music System, card 1 of 2 */ device.option_add("mcms2", A2BUS_MCMS2); /* Mountain Computer Music System, card 2 of 2. must be in card 1's slot + 1! */ diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index a69007226bb..ff81f3f6d78 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -4765,6 +4765,7 @@ static void apple2_cards(device_slot_interface &device) device.option_add("parallel", A2BUS_PIC); /* Apple Parallel 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 */ device.option_add("corvus", A2BUS_CORVUS); /* Corvus flat-cable HDD interface (see notes in a2corvus.c) */ device.option_add("mcms1", A2BUS_MCMS1); /* Mountain Computer Music System, card 1 of 2 */ device.option_add("mcms2", A2BUS_MCMS2); /* Mountain Computer Music System, card 2 of 2. must be in card 1's slot + 1! */ |