Merge pull request #220 from meesokim/patch-1

[MESS] spc1000 added the centronics printer port [meesokim]
This commit is contained in:
R. Belmont 2015-06-24 10:43:01 -04:00
commit 47fe92a260

View File

@ -24,6 +24,7 @@ NOTE: 2014-09-13: added code from someone's modified MESS driver for floppy
2014-10-11: Replaced above code with MESS-compliant code [Meeso Kim]
2015-06-19: Added code for the centronics printer port
IMPORTANT NOTE for tape usage: you *FIRST* press PLAY on the tape drive
(e.g. by pressing F2 in partial emulated keyboard mode) and *THEN* you
@ -140,6 +141,7 @@ IMPORTANT NOTE for tape usage: you *FIRST* press PLAY on the tape drive
#include "video/mc6847.h"
#include "imagedev/cassette.h"
#include "formats/spc1000_cas.h"
#include "bus/centronics/ctronics.h"
#include "bus/spc1000/exp.h"
#include "bus/spc1000/fdd.h"
@ -159,6 +161,7 @@ public:
, m_p_videoram(*this, "videoram")
, m_io_kb(*this, "LINE")
, m_io_joy(*this, "JOY")
, m_centronics(*this, "centronics")
{}
DECLARE_WRITE8_MEMBER(iplk_w);
@ -167,6 +170,7 @@ public:
DECLARE_WRITE8_MEMBER(gmode_w);
DECLARE_READ8_MEMBER(gmode_r);
DECLARE_READ8_MEMBER(porta_r);
DECLARE_WRITE_LINE_MEMBER( centronics_busy_w ) { m_centronics_busy = state; }
DECLARE_READ8_MEMBER(mc6847_videoram_r);
DECLARE_WRITE8_MEMBER(cass_w);
DECLARE_READ8_MEMBER(keyboard_r);
@ -181,6 +185,7 @@ private:
UINT16 m_page;
UINT8 *m_work_ram;
bool m_motor;
bool m_centronics_busy;
virtual void machine_start();
virtual void machine_reset();
required_device<z80_device> m_maincpu;
@ -190,6 +195,7 @@ private:
required_shared_ptr<UINT8> m_p_videoram;
required_ioport_array<10> m_io_kb;
required_ioport m_io_joy;
required_device<centronics_device> m_centronics;
};
static ADDRESS_MAP_START(spc1000_mem, AS_PROGRAM, 8, spc1000_state )
@ -221,6 +227,7 @@ WRITE8_MEMBER( spc1000_state::cass_w )
if (m && !m_motor)
m_cass->change_state(m_cass->get_state() & CASSETTE_MASK_MOTOR ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
m_motor = m;
m_centronics->write_strobe(BIT(data, 2) ? true : false);
}
WRITE8_MEMBER(spc1000_state::gmode_w)
@ -431,7 +438,7 @@ READ8_MEMBER( spc1000_state::porta_r )
data |= (m_cass->input() > 0.0038) ? 0x80 : 0;
data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) != CASSETTE_STOPPED) && ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED) ? 0x00 : 0x40;
data &= ~(m_io_joy->read() & 0x3f);
data &= ~((m_centronics_busy == 0)<< 5);
return data;
}
@ -470,6 +477,7 @@ static MACHINE_CONFIG_START( spc1000, spc1000_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay8910", AY8910, XTAL_4MHz / 1)
MCFG_AY8910_PORT_A_READ_CB(READ8(spc1000_state, porta_r))
MCFG_AY8910_PORT_B_WRITE_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
@ -477,6 +485,11 @@ static MACHINE_CONFIG_START( spc1000, spc1000_state )
MCFG_DEVICE_ADD("ext1", SPC1000_EXP_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(spc1000_exp, NULL, false)
MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(spc1000_state, centronics_busy_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0)
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(spc1000_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_DISABLED)