From d3d3b7f9e6b695dbee082d6e65e47f6ac7004730 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Fri, 7 Jun 2013 18:00:31 +0000 Subject: [PATCH] (MESS) victor9k: Fixed regression. (nw) --- src/mess/drivers/victor9k.c | 123 +++++++++++++++++++++++++++++------ src/mess/includes/victor9k.h | 28 +++++++- src/mess/machine/victor9kb.c | 24 +------ src/mess/machine/victor9kb.h | 26 ++------ 4 files changed, 141 insertions(+), 60 deletions(-) diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index 4cf29a7112e..49789f65e80 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -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) diff --git a/src/mess/includes/victor9k.h b/src/mess/includes/victor9k.h index dbfc7e51b17..cc1fac5ab56 100644 --- a/src/mess/includes/victor9k.h +++ b/src/mess/includes/victor9k.h @@ -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 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 */ diff --git a/src/mess/machine/victor9kb.c b/src/mess/machine/victor9kb.c index 01291a62385..b8debb92fd9 100644 --- a/src/mess/machine/victor9kb.c +++ b/src/mess/machine/victor9kb.c @@ -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(static_config()); - if (intf != NULL) - *static_cast(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); diff --git a/src/mess/machine/victor9kb.h b/src/mess/machine/victor9kb.h index ad119f79a44..f067320a7ca 100644 --- a/src/mess/machine/victor9kb.h +++ b/src/mess/machine/victor9kb.h @@ -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(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 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 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;