mirror of
https://github.com/holub/mame
synced 2025-07-05 09:57:47 +03:00
(MESS) victor9k: Fixed regression. (nw)
This commit is contained in:
parent
0319c7ca06
commit
d3d3b7f9e6
@ -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 -
|
// floppy_p2_w -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -101,8 +131,8 @@ WRITE8_MEMBER( victor9k_state::floppy_p2_w )
|
|||||||
3 STOP1
|
3 STOP1
|
||||||
4 SEL1
|
4 SEL1
|
||||||
5 SEL0
|
5 SEL0
|
||||||
6 RDY0
|
6
|
||||||
7 RDY1
|
7
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -130,12 +160,6 @@ WRITE8_MEMBER( victor9k_state::floppy_p2_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_sel1 = sel1;
|
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 )
|
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_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
|
||||||
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(floppy_p2_w)
|
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_T0, MCS48_PORT_T0) AM_READ(tach0_r)
|
||||||
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_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)
|
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;
|
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 )
|
WRITE_LINE_MEMBER( victor9k_state::mode_w )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -799,8 +833,8 @@ static const via6522_interface via4_intf =
|
|||||||
{
|
{
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL, // DS0
|
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, ds0_r),
|
||||||
DEVCB_NULL, // DS1
|
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, ds1_r),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
@ -993,8 +1027,10 @@ READ8_MEMBER( victor9k_state::via6_pb_r )
|
|||||||
data |= m_rdy1 << 1;
|
data |= m_rdy1 << 1;
|
||||||
|
|
||||||
// door B sense
|
// door B sense
|
||||||
|
data |= m_ds1 << 3;
|
||||||
|
|
||||||
// door A sense
|
// door A sense
|
||||||
|
data |= m_ds0 << 4;
|
||||||
|
|
||||||
// single/double sided
|
// single/double sided
|
||||||
data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5;
|
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 )
|
// 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);
|
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 )
|
// 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 )
|
static SLOT_INTERFACE_START( victor9k_floppies )
|
||||||
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
@ -1139,12 +1215,21 @@ void victor9k_state::machine_start()
|
|||||||
// set interrupt callback
|
// set interrupt callback
|
||||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(victor9k_state::victor9k_irq_callback),this));
|
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
|
// memory banking
|
||||||
address_space &program = m_maincpu->space(AS_PROGRAM);
|
address_space &program = m_maincpu->space(AS_PROGRAM);
|
||||||
program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer());
|
program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// MACHINE CONFIGURATION
|
// 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_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_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_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
|
// internal ram
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
|
@ -74,7 +74,22 @@ public:
|
|||||||
m_kb(*this, VICTOR9K_KEYBOARD_TAG),
|
m_kb(*this, VICTOR9K_KEYBOARD_TAG),
|
||||||
m_rs232a(*this, RS232_A_TAG),
|
m_rs232a(*this, RS232_A_TAG),
|
||||||
m_rs232b(*this, RS232_B_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;
|
required_device<cpu_device> m_maincpu;
|
||||||
@ -125,6 +140,8 @@ public:
|
|||||||
|
|
||||||
DECLARE_WRITE8_MEMBER( via4_pa_w );
|
DECLARE_WRITE8_MEMBER( via4_pa_w );
|
||||||
DECLARE_WRITE8_MEMBER( via4_pb_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( mode_w );
|
||||||
DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
|
DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
|
||||||
|
|
||||||
@ -147,6 +164,13 @@ public:
|
|||||||
|
|
||||||
DECLARE_WRITE_LINE_MEMBER( ssda_irq_w );
|
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
|
enum
|
||||||
{
|
{
|
||||||
LED_A = 0,
|
LED_A = 0,
|
||||||
@ -177,6 +201,8 @@ public:
|
|||||||
int m_tach1;
|
int m_tach1;
|
||||||
int m_rdy0;
|
int m_rdy0;
|
||||||
int m_rdy1;
|
int m_rdy1;
|
||||||
|
int m_ds0;
|
||||||
|
int m_ds1;
|
||||||
UINT8 m_lms; /* motor speed */
|
UINT8 m_lms; /* motor speed */
|
||||||
int m_st[2]; /* stepper phase */
|
int m_st[2]; /* stepper phase */
|
||||||
int m_stp[2]; /* stepper enable */
|
int m_stp[2]; /* stepper enable */
|
||||||
|
@ -251,6 +251,7 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig
|
|||||||
m_ya(*this, "YA"),
|
m_ya(*this, "YA"),
|
||||||
m_yb(*this, "YB"),
|
m_yb(*this, "YB"),
|
||||||
m_yc(*this, "YC"),
|
m_yc(*this, "YC"),
|
||||||
|
m_write_kbrdy(*this),
|
||||||
m_y(0),
|
m_y(0),
|
||||||
m_kbrdy(1),
|
m_kbrdy(1),
|
||||||
m_kbdata(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
|
// device_start - device-specific startup
|
||||||
@ -285,7 +267,7 @@ void victor9k_keyboard_device::device_config_complete()
|
|||||||
void victor9k_keyboard_device::device_start()
|
void victor9k_keyboard_device::device_start()
|
||||||
{
|
{
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_out_kbrdy_func.resolve(m_out_kbrdy_cb, *this);
|
m_write_kbrdy.resolve_safe();
|
||||||
|
|
||||||
// state saving
|
// state saving
|
||||||
save_item(NAME(m_y));
|
save_item(NAME(m_y));
|
||||||
@ -400,7 +382,7 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
|
|||||||
if (m_kbrdy != kbrdy)
|
if (m_kbrdy != kbrdy)
|
||||||
{
|
{
|
||||||
m_kbrdy = kbrdy;
|
m_kbrdy = kbrdy;
|
||||||
m_out_kbrdy_func(m_kbrdy);
|
m_write_kbrdy(m_kbrdy);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_kbdata = BIT(data, 3);
|
m_kbdata = BIT(data, 3);
|
||||||
|
@ -30,13 +30,9 @@
|
|||||||
// INTERFACE CONFIGURATION MACROS
|
// 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_ADD(VICTOR9K_KEYBOARD_TAG, VICTOR9K_KEYBOARD, 0) \
|
||||||
MCFG_DEVICE_CONFIG(_config)
|
downcast<victor9k_keyboard_device *>(device)->set_kbrdy_callback(DEVCB2_##_kbrdy); \
|
||||||
|
|
||||||
|
|
||||||
#define VICTOR9K_KEYBOARD_INTERFACE(_name) \
|
|
||||||
const victor9k_keyboard_interface (_name) =
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -44,23 +40,16 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
// ======================> victor9k_keyboard_interface
|
|
||||||
|
|
||||||
struct victor9k_keyboard_interface
|
|
||||||
{
|
|
||||||
devcb_write_line m_out_kbrdy_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> victor9k_keyboard_device
|
// ======================> victor9k_keyboard_device
|
||||||
|
|
||||||
class victor9k_keyboard_device : public device_t,
|
class victor9k_keyboard_device : public device_t
|
||||||
public victor9k_keyboard_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
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
|
// optional information overrides
|
||||||
virtual const rom_entry *device_rom_region() const;
|
virtual const rom_entry *device_rom_region() const;
|
||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
@ -80,11 +69,8 @@ protected:
|
|||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_start();
|
virtual void device_start();
|
||||||
virtual void device_reset();
|
virtual void device_reset();
|
||||||
virtual void device_config_complete();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
devcb_resolved_write_line m_out_kbrdy_func;
|
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_ioport m_y0;
|
required_ioport m_y0;
|
||||||
required_ioport m_y1;
|
required_ioport m_y1;
|
||||||
@ -100,6 +86,8 @@ private:
|
|||||||
required_ioport m_yb;
|
required_ioport m_yb;
|
||||||
required_ioport m_yc;
|
required_ioport m_yc;
|
||||||
|
|
||||||
|
devcb2_write_line m_write_kbrdy;
|
||||||
|
|
||||||
UINT8 m_y;
|
UINT8 m_y;
|
||||||
int m_kbrdy;
|
int m_kbrdy;
|
||||||
int m_kbdata;
|
int m_kbdata;
|
||||||
|
Loading…
Reference in New Issue
Block a user