(MESS) victor9k: Fixed regression. (nw)

This commit is contained in:
Curt Coder 2013-06-07 18:00:31 +00:00
parent 0319c7ca06
commit d3d3b7f9e6
4 changed files with 141 additions and 60 deletions

View File

@ -85,6 +85,36 @@ READ8_MEMBER( victor9k_state::floppy_p1_r )
}
//-------------------------------------------------
// floppy_p2_r -
//-------------------------------------------------
READ8_MEMBER( victor9k_state::floppy_p2_r )
{
/*
bit description
0
1
2
3
4
5
6 RDY0
7 RDY1
*/
UINT8 data = 0;
data |= m_rdy0 << 6;
data |= m_rdy1 << 7;
return data;
}
//-------------------------------------------------
// floppy_p2_w -
//-------------------------------------------------
@ -101,8 +131,8 @@ WRITE8_MEMBER( victor9k_state::floppy_p2_w )
3 STOP1
4 SEL1
5 SEL0
6 RDY0
7 RDY1
6
7
*/
@ -130,12 +160,6 @@ WRITE8_MEMBER( victor9k_state::floppy_p2_w )
}
m_sel1 = sel1;
m_rdy0 = BIT(data, 6);
m_via5->write_ca2(m_rdy0);
m_rdy1 = BIT(data, 7);
m_via5->write_cb2(m_rdy1);
}
@ -202,8 +226,8 @@ ADDRESS_MAP_END
//-------------------------------------------------
static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor9k_state )
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(floppy_p2_w)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w)
@ -784,6 +808,16 @@ WRITE8_MEMBER( victor9k_state::via4_pb_w )
m_st[1] = data >> 4;
}
READ_LINE_MEMBER( victor9k_state::ds0_r )
{
return m_ds0;
}
READ_LINE_MEMBER( victor9k_state::ds1_r )
{
return m_ds1;
}
WRITE_LINE_MEMBER( victor9k_state::mode_w )
{
}
@ -799,8 +833,8 @@ static const via6522_interface via4_intf =
{
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL, // DS0
DEVCB_NULL, // DS1
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, ds0_r),
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, ds1_r),
DEVCB_NULL,
DEVCB_NULL,
@ -993,8 +1027,10 @@ READ8_MEMBER( victor9k_state::via6_pb_r )
data |= m_rdy1 << 1;
// door B sense
data |= m_ds1 << 3;
// door A sense
data |= m_ds0 << 4;
// single/double sided
data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5;
@ -1070,7 +1106,6 @@ static const via6522_interface via6_intf =
};
//-------------------------------------------------
// VICTOR9K_KEYBOARD_INTERFACE( kb_intf )
//-------------------------------------------------
@ -1082,16 +1117,57 @@ WRITE_LINE_MEMBER( victor9k_state::kbrdy_w )
m_pic->ir6_w(state ? CLEAR_LINE : ASSERT_LINE);
}
static VICTOR9K_KEYBOARD_INTERFACE( kb_intf )
{
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, kbrdy_w)
};
//-------------------------------------------------
// SLOT_INTERFACE( victor9k_floppies )
//-------------------------------------------------
void victor9k_state::ready0_cb(floppy_image_device *device, int state)
{
m_rdy0 = state;
m_via5->write_ca2(m_rdy0);
}
int victor9k_state::load0_cb(floppy_image_device *device)
{
m_ds0 = 0;
m_via4->write_ca1(m_ds0);
return IMAGE_INIT_PASS;
}
void victor9k_state::unload0_cb(floppy_image_device *device)
{
m_ds0 = 1;
m_via4->write_ca1(m_ds0);
}
void victor9k_state::ready1_cb(floppy_image_device *device, int state)
{
m_rdy1 = state;
m_via5->write_cb2(m_rdy1);
}
int victor9k_state::load1_cb(floppy_image_device *device)
{
m_ds1 = 0;
m_via4->write_cb1(m_ds1);
return IMAGE_INIT_PASS;
}
void victor9k_state::unload1_cb(floppy_image_device *device)
{
m_ds1 = 1;
m_via4->write_cb1(m_ds1);
}
static SLOT_INTERFACE_START( victor9k_floppies )
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
SLOT_INTERFACE_END
@ -1139,12 +1215,21 @@ void victor9k_state::machine_start()
// set interrupt callback
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(victor9k_state::victor9k_irq_callback),this));
// set floppy callbacks
m_floppy0->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready0_cb), this));
m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load0_cb), this));
m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload0_cb), this));
m_floppy1->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready1_cb), this));
m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load1_cb), this));
m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload1_cb), this));
// memory banking
address_space &program = m_maincpu->space(AS_PROGRAM);
program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer());
}
//**************************************************************************
// MACHINE CONFIGURATION
//**************************************************************************
@ -1197,7 +1282,7 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", floppy_image_device::default_floppy_formats)
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
MCFG_VICTOR9K_KEYBOARD_ADD(kb_intf)
MCFG_VICTOR9K_KEYBOARD_ADD(WRITELINE(victor9k_state, kbrdy_w))
// internal ram
MCFG_RAM_ADD(RAM_TAG)

View File

@ -74,7 +74,22 @@ public:
m_kb(*this, VICTOR9K_KEYBOARD_TAG),
m_rs232a(*this, RS232_A_TAG),
m_rs232b(*this, RS232_B_TAG),
m_video_ram(*this, "video_ram")
m_video_ram(*this, "video_ram"),
m_da(0),
m_da0(0),
m_da1(0),
m_sel0(0),
m_sel1(0),
m_tach0(0),
m_tach1(0),
m_rdy0(0),
m_rdy1(0),
m_ds0(1),
m_ds1(1),
m_lms(0),
m_brdy(1),
m_sync(1),
m_gcrerr(0)
{ }
required_device<cpu_device> m_maincpu;
@ -125,6 +140,8 @@ public:
DECLARE_WRITE8_MEMBER( via4_pa_w );
DECLARE_WRITE8_MEMBER( via4_pb_w );
DECLARE_READ_LINE_MEMBER( ds0_r );
DECLARE_READ_LINE_MEMBER( ds1_r );
DECLARE_WRITE_LINE_MEMBER( mode_w );
DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
@ -147,6 +164,13 @@ public:
DECLARE_WRITE_LINE_MEMBER( ssda_irq_w );
void ready0_cb(floppy_image_device *, int device);
int load0_cb(floppy_image_device *device);
void unload0_cb(floppy_image_device *device);
void ready1_cb(floppy_image_device *, int device);
int load1_cb(floppy_image_device *device);
void unload1_cb(floppy_image_device *device);
enum
{
LED_A = 0,
@ -177,6 +201,8 @@ public:
int m_tach1;
int m_rdy0;
int m_rdy1;
int m_ds0;
int m_ds1;
UINT8 m_lms; /* motor speed */
int m_st[2]; /* stepper phase */
int m_stp[2]; /* stepper enable */

View File

@ -251,6 +251,7 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig
m_ya(*this, "YA"),
m_yb(*this, "YB"),
m_yc(*this, "YC"),
m_write_kbrdy(*this),
m_y(0),
m_kbrdy(1),
m_kbdata(1),
@ -258,25 +259,6 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig
{
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void victor9k_keyboard_device::device_config_complete()
{
// inherit a copy of the static data
const victor9k_keyboard_interface *intf = reinterpret_cast<const victor9k_keyboard_interface *>(static_config());
if (intf != NULL)
*static_cast<victor9k_keyboard_interface *>(this) = *intf;
// or initialize to defaults if none provided
else
{
memset(&m_out_kbrdy_cb, 0, sizeof(m_out_kbrdy_cb));
}
}
//-------------------------------------------------
// device_start - device-specific startup
@ -285,7 +267,7 @@ void victor9k_keyboard_device::device_config_complete()
void victor9k_keyboard_device::device_start()
{
// resolve callbacks
m_out_kbrdy_func.resolve(m_out_kbrdy_cb, *this);
m_write_kbrdy.resolve_safe();
// state saving
save_item(NAME(m_y));
@ -400,7 +382,7 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
if (m_kbrdy != kbrdy)
{
m_kbrdy = kbrdy;
m_out_kbrdy_func(m_kbrdy);
m_write_kbrdy(m_kbrdy);
}
m_kbdata = BIT(data, 3);

View File

@ -30,13 +30,9 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_VICTOR9K_KEYBOARD_ADD(_config) \
#define MCFG_VICTOR9K_KEYBOARD_ADD(_kbrdy) \
MCFG_DEVICE_ADD(VICTOR9K_KEYBOARD_TAG, VICTOR9K_KEYBOARD, 0) \
MCFG_DEVICE_CONFIG(_config)
#define VICTOR9K_KEYBOARD_INTERFACE(_name) \
const victor9k_keyboard_interface (_name) =
downcast<victor9k_keyboard_device *>(device)->set_kbrdy_callback(DEVCB2_##_kbrdy); \
@ -44,23 +40,16 @@
// TYPE DEFINITIONS
//**************************************************************************
// ======================> victor9k_keyboard_interface
struct victor9k_keyboard_interface
{
devcb_write_line m_out_kbrdy_cb;
};
// ======================> victor9k_keyboard_device
class victor9k_keyboard_device : public device_t,
public victor9k_keyboard_interface
class victor9k_keyboard_device : public device_t
{
public:
// construction/destruction
victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _kbrdy> void set_kbrdy_callback(_kbrdy kbrdy) { m_write_kbrdy.set_callback(kbrdy); }
// optional information overrides
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
@ -80,11 +69,8 @@ protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual void device_config_complete();
private:
devcb_resolved_write_line m_out_kbrdy_func;
required_device<cpu_device> m_maincpu;
required_ioport m_y0;
required_ioport m_y1;
@ -100,6 +86,8 @@ private:
required_ioport m_yb;
required_ioport m_yc;
devcb2_write_line m_write_kbrdy;
UINT8 m_y;
int m_kbrdy;
int m_kbdata;