mirror of
https://github.com/holub/mame
synced 2025-04-26 18:23:08 +03:00
mc68000: Centronics support
This commit is contained in:
parent
da23718c91
commit
70a2c92f68
@ -18,7 +18,6 @@
|
|||||||
- Color/brightness levels
|
- Color/brightness levels
|
||||||
- Sound
|
- Sound
|
||||||
- Joysticks
|
- Joysticks
|
||||||
- Centronics
|
|
||||||
- Serial
|
- Serial
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
@ -31,6 +30,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
#include "bus/centronics/ctronics.h"
|
||||||
#include "bus/mc68000/sysbus.h"
|
#include "bus/mc68000/sysbus.h"
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "machine/6522via.h"
|
#include "machine/6522via.h"
|
||||||
@ -67,6 +67,9 @@ public:
|
|||||||
m_crtc(*this, "crtc"),
|
m_crtc(*this, "crtc"),
|
||||||
m_via(*this, "via%u", 0U),
|
m_via(*this, "via%u", 0U),
|
||||||
m_sysbus(*this, "sysbus"),
|
m_sysbus(*this, "sysbus"),
|
||||||
|
m_centronics_latch(*this, "centronics_latch"),
|
||||||
|
m_centronics_error(*this, "centronics_error"),
|
||||||
|
m_centronics(*this, "centronics"),
|
||||||
m_apm_view(*this, "apm"),
|
m_apm_view(*this, "apm"),
|
||||||
m_eprom(*this, "eprom%u", 0U),
|
m_eprom(*this, "eprom%u", 0U),
|
||||||
m_switches(*this, "switches")
|
m_switches(*this, "switches")
|
||||||
@ -85,6 +88,9 @@ private:
|
|||||||
required_device<mc6845_device> m_crtc;
|
required_device<mc6845_device> m_crtc;
|
||||||
required_device_array<via6522_device, 2> m_via;
|
required_device_array<via6522_device, 2> m_via;
|
||||||
required_device<mc68000_sysbus_device> m_sysbus;
|
required_device<mc68000_sysbus_device> m_sysbus;
|
||||||
|
required_device<output_latch_device> m_centronics_latch;
|
||||||
|
required_device<input_merger_device> m_centronics_error;
|
||||||
|
required_device<centronics_device> m_centronics;
|
||||||
memory_view m_apm_view;
|
memory_view m_apm_view;
|
||||||
required_memory_region_array<2> m_eprom;
|
required_memory_region_array<2> m_eprom;
|
||||||
required_ioport m_switches;
|
required_ioport m_switches;
|
||||||
@ -263,7 +269,7 @@ void mc68000_state::memory_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
|||||||
case 3:
|
case 3:
|
||||||
if (ACCESSING_BITS_8_15 && (BIT(offset, 1) == 0))
|
if (ACCESSING_BITS_8_15 && (BIT(offset, 1) == 0))
|
||||||
{
|
{
|
||||||
LOGMASKED(LOG_IO_WRITE, "Centronics latch write\n");
|
m_centronics_latch->write(data >> 8);
|
||||||
|
|
||||||
// a write here also selects switch 0 to be read from cb1
|
// a write here also selects switch 0 to be read from cb1
|
||||||
m_via[1]->write_cb1(1);
|
m_via[1]->write_cb1(1);
|
||||||
@ -377,7 +383,14 @@ MC6845_UPDATE_ROW( mc68000_state::crtc_update_row )
|
|||||||
|
|
||||||
void mc68000_state::uvia_porta_w(uint8_t data)
|
void mc68000_state::uvia_porta_w(uint8_t data)
|
||||||
{
|
{
|
||||||
|
// 7------- centronics error (read)
|
||||||
|
// -6------ centronics strobe
|
||||||
|
// --5----- joystick control
|
||||||
|
// ---43--- color helper bits
|
||||||
|
// -----210 video base address
|
||||||
|
|
||||||
m_uvia_porta = data;
|
m_uvia_porta = data;
|
||||||
|
m_centronics->write_strobe(BIT(data, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
void mc68000_state::addr_decode_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
void mc68000_state::addr_decode_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
||||||
@ -461,6 +474,17 @@ void mc68000_state::mc68000(machine_config &config)
|
|||||||
MC68000_SYSBUS_SLOT(config, "sysbus:6", mc68000_sysbus_cards, nullptr);
|
MC68000_SYSBUS_SLOT(config, "sysbus:6", mc68000_sysbus_cards, nullptr);
|
||||||
MC68000_SYSBUS_SLOT(config, "sysbus:7", mc68000_sysbus_cards, nullptr);
|
MC68000_SYSBUS_SLOT(config, "sysbus:7", mc68000_sysbus_cards, nullptr);
|
||||||
|
|
||||||
|
OUTPUT_LATCH(config, m_centronics_latch); // ic85
|
||||||
|
|
||||||
|
INPUT_MERGER_ANY_LOW(config, m_centronics_error);
|
||||||
|
m_centronics_error->output_handler().set(m_via[1], FUNC(via6522_device::write_pa7)).invert();
|
||||||
|
|
||||||
|
CENTRONICS(config, m_centronics, centronics_devices, "printer");
|
||||||
|
m_centronics->set_output_latch(*m_centronics_latch);
|
||||||
|
m_centronics->ack_handler().set(m_via[1], FUNC(via6522_device::write_ca2)); // alternatively connected to busy
|
||||||
|
m_centronics->fault_handler().set(m_centronics_error, FUNC(input_merger_device::in_w<0>));
|
||||||
|
m_centronics->perror_handler().set(m_centronics_error, FUNC(input_merger_device::in_w<1>)).invert();
|
||||||
|
|
||||||
generic_keyboard_device &kbd(GENERIC_KEYBOARD(config, "kbd", 0));
|
generic_keyboard_device &kbd(GENERIC_KEYBOARD(config, "kbd", 0));
|
||||||
kbd.set_keyboard_callback(FUNC(mc68000_state::kbd_put));
|
kbd.set_keyboard_callback(FUNC(mc68000_state::kbd_put));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user