(MESS) Kaypro : modernised floppy disk system (still doesn't work). This enables removal of yesterday's patch.

This commit is contained in:
Robbbert 2013-07-28 10:46:38 +00:00
parent 2cbb380d09
commit 0ef85ce1f4
3 changed files with 118 additions and 89 deletions

View File

@ -53,7 +53,7 @@ static ADDRESS_MAP_START( kayproii_io, AS_IO, 8, kaypro_state )
AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w) AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w)
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_g", z80pio_device, read_alt, write_alt) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_g", z80pio_device, read_alt, write_alt)
AM_RANGE(0x0c, 0x0f) AM_DEVWRITE("brg", com8116_device, str_w) AM_RANGE(0x0c, 0x0f) AM_DEVWRITE("brg", com8116_device, str_w)
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_r, wd17xx_w) AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("fdc", fd1793_t, read, write)
AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("z80pio_s", z80pio_device, read_alt, write_alt) AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("z80pio_s", z80pio_device, read_alt, write_alt)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -64,7 +64,7 @@ static ADDRESS_MAP_START( kaypro2x_io, AS_IO, 8, kaypro_state )
AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w) AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w)
AM_RANGE(0x08, 0x0b) AM_DEVWRITE("brg", com8116_device, stt_w) AM_RANGE(0x08, 0x0b) AM_DEVWRITE("brg", com8116_device, stt_w)
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80sio_2x", z80sio_device, read, write) AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80sio_2x", z80sio_device, read, write)
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_r, wd17xx_w) AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("fdc", fd1793_t, read, write)
AM_RANGE(0x14, 0x17) AM_READWRITE(kaypro2x_system_port_r,kaypro2x_system_port_w) AM_RANGE(0x14, 0x17) AM_READWRITE(kaypro2x_system_port_r,kaypro2x_system_port_w)
AM_RANGE(0x18, 0x1b) AM_DEVWRITE("centronics", centronics_device, write) AM_RANGE(0x18, 0x1b) AM_DEVWRITE("centronics", centronics_device, write)
AM_RANGE(0x1c, 0x1c) AM_READWRITE(kaypro2x_status_r,kaypro2x_index_w) AM_RANGE(0x1c, 0x1c) AM_READWRITE(kaypro2x_status_r,kaypro2x_index_w)
@ -176,6 +176,7 @@ static MC6845_INTERFACE( kaypro2x_crtc )
Machine Driver Machine Driver
************************************************************/ ************************************************************/
#if 0
static LEGACY_FLOPPY_OPTIONS_START(kayproii) static LEGACY_FLOPPY_OPTIONS_START(kayproii)
LEGACY_FLOPPY_OPTION(kayproii, "dsk", "Kaypro II disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, LEGACY_FLOPPY_OPTION(kayproii, "dsk", "Kaypro II disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([1]) HEADS([1])
@ -220,9 +221,23 @@ static const floppy_interface kaypro2x_floppy_interface =
NULL NULL
}; };
FLOPPY_FORMATS_MEMBER( kaypro_state::kayproii_floppy_formats )
FLOPPY_KAYPROII_FORMAT
FLOPPY_FORMATS_END
FLOPPY_FORMATS_MEMBER( kaypro_state::kaypro2x_floppy_formats )
FLOPPY_KAYPRO2X_FORMAT
FLOPPY_FORMATS_END
#endif
static SLOT_INTERFACE_START( kaypro_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( kayproii, kaypro_state ) static MACHINE_CONFIG_START( kayproii, kaypro_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_2_5MHz) MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz / 8)
MCFG_CPU_PROGRAM_MAP(kaypro_map) MCFG_CPU_PROGRAM_MAP(kaypro_map)
MCFG_CPU_IO_MAP(kayproii_io) MCFG_CPU_IO_MAP(kayproii_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state, kay_kbd_interrupt) /* this doesn't actually exist, it is to run the keyboard */ MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state, kay_kbd_interrupt) /* this doesn't actually exist, it is to run the keyboard */
@ -250,14 +265,15 @@ static MACHINE_CONFIG_START( kayproii, kaypro_state )
/* devices */ /* devices */
MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kayproii, "com,cpm", 3) MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kayproii, "com,cpm", 3)
MCFG_FD1793_ADD("wd1793", kaypro_wd1793_interface )
MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics) MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics)
MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL) // WD1943, SMC8116 MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL) // WD1943, SMC8116
MCFG_Z80PIO_ADD( "z80pio_g", 2500000, kayproii_pio_g_intf ) MCFG_Z80PIO_ADD( "z80pio_g", 2500000, kayproii_pio_g_intf )
MCFG_Z80PIO_ADD( "z80pio_s", 2500000, kayproii_pio_s_intf ) MCFG_Z80PIO_ADD( "z80pio_s", 2500000, kayproii_pio_s_intf )
MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf ) /* start at 300 baud */ MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf ) /* start at 300 baud */
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(kayproii_floppy_interface) MCFG_FD1793x_ADD("fdc", XTAL_20MHz / 20)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","kayproii") MCFG_SOFTWARE_LIST_ADD("flop_list","kayproii")
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -268,7 +284,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( kaypro2x, kaypro_state ) static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz) MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4)
MCFG_CPU_PROGRAM_MAP(kaypro_map) MCFG_CPU_PROGRAM_MAP(kaypro_map)
MCFG_CPU_IO_MAP(kaypro2x_io) MCFG_CPU_IO_MAP(kaypro2x_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state, kay_kbd_interrupt) MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state, kay_kbd_interrupt)
@ -296,13 +312,13 @@ static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
/* devices */ /* devices */
MCFG_MC6845_ADD("crtc", MC6845, "screen", 2000000, kaypro2x_crtc) /* comes out of ULA - needs to be measured */ MCFG_MC6845_ADD("crtc", MC6845, "screen", 2000000, kaypro2x_crtc) /* comes out of ULA - needs to be measured */
MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro2x, "com,cpm", 3) MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro2x, "com,cpm", 3)
MCFG_FD1793_ADD("wd1793", kaypro_wd1793_interface )
MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics) MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics)
MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL) // WD1943, SMC8116 MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL) // WD1943, SMC8116
MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf ) MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf )
MCFG_Z80SIO_ADD( "z80sio_2x", 4800, kaypro_sio_intf ) /* extra sio for modem and printer */ MCFG_Z80SIO_ADD( "z80sio_2x", 4800, kaypro_sio_intf ) /* extra sio for modem and printer */
MCFG_FD1793x_ADD("fdc", XTAL_16MHz / 16)
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(kaypro2x_floppy_interface) MCFG_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( omni2, kaypro4 ) static MACHINE_CONFIG_DERIVED( omni2, kaypro4 )
@ -310,6 +326,13 @@ static MACHINE_CONFIG_DERIVED( omni2, kaypro4 )
MCFG_SCREEN_UPDATE_DRIVER(kaypro_state, screen_update_omni2) MCFG_SCREEN_UPDATE_DRIVER(kaypro_state, screen_update_omni2)
MACHINE_CONFIG_END MACHINE_CONFIG_END
DRIVER_INIT_MEMBER( kaypro_state, kaypro )
{
m_fdc->setup_intrq_cb(fd1793_t::line_cb(FUNC(kaypro_state::fdc_intrq_w), this));
m_fdc->setup_drq_cb(fd1793_t::line_cb(FUNC(kaypro_state::fdc_drq_w), this));
}
/*********************************************************** /***********************************************************
Game driver Game driver
@ -399,12 +422,12 @@ ROM_START(kaypro10)
ROM_LOAD("81-817.u31", 0x0000, 0x1000, CRC(5f72da5b) SHA1(8a597000cce1a7e184abfb7bebcb564c6bf24fb7) ) ROM_LOAD("81-817.u31", 0x0000, 0x1000, CRC(5f72da5b) SHA1(8a597000cce1a7e184abfb7bebcb564c6bf24fb7) )
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
COMP( 1982, kayproii, 0, 0, kayproii, kay_kbd, driver_device, 0, "Non Linear Systems", "Kaypro II - 2/83" , 0 ) COMP( 1982, kayproii, 0, 0, kayproii, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro II - 2/83" , 0 )
COMP( 1983, kaypro4, kayproii, 0, kaypro4, kay_kbd, driver_device, 0, "Non Linear Systems", "Kaypro 4 - 4/83" , 0 ) // model 81-004 COMP( 1983, kaypro4, kayproii, 0, kaypro4, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/83" , 0 ) // model 81-004
COMP( 1983, kaypro4p88, kayproii, 0, kaypro4, kay_kbd, driver_device, 0, "Non Linear Systems", "Kaypro 4 plus88 - 4/83" , GAME_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom COMP( 1983, kaypro4p88, kayproii, 0, kaypro4, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 plus88 - 4/83" , GAME_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom
COMP( 198?, omni2, kayproii, 0, omni2, kay_kbd, driver_device, 0, "Non Linear Systems", "Omni II" , 0 ) COMP( 198?, omni2, kayproii, 0, omni2, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Omni II" , 0 )
COMP( 1984, kaypro2x, 0, 0, kaypro2x, kay_kbd, driver_device, 0, "Non Linear Systems", "Kaypro 2x" , GAME_NOT_WORKING ) // model 81-025 COMP( 1984, kaypro2x, 0, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 2x" , GAME_NOT_WORKING ) // model 81-025
COMP( 1984, kaypro4a, kaypro2x, 0, kaypro2x, kay_kbd, driver_device, 0, "Non Linear Systems", "Kaypro 4 - 4/84" , GAME_NOT_WORKING ) // model 81-015 COMP( 1984, kaypro4a, kaypro2x, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/84" , GAME_NOT_WORKING ) // model 81-015
// Kaypro 4/84 plus 88 goes here, model 81-015 with an added 8088 daughterboard and rom // Kaypro 4/84 plus 88 goes here, model 81-015 with an added 8088 daughterboard and rom
COMP( 1983, kaypro10, 0, 0, kaypro2x, kay_kbd, driver_device, 0, "Non Linear Systems", "Kaypro 10" , GAME_NOT_WORKING ) // model 81-005 COMP( 1983, kaypro10, 0, 0, kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 10" , GAME_NOT_WORKING ) // model 81-005

View File

@ -5,12 +5,10 @@
#include "machine/z80sio.h" #include "machine/z80sio.h"
#include "machine/com8116.h" #include "machine/com8116.h"
#include "machine/ctronics.h" #include "machine/ctronics.h"
#include "machine/wd17xx.h"
#include "formats/basicdsk.h"
#include "imagedev/snapquik.h" #include "imagedev/snapquik.h"
#include "imagedev/flopdrv.h"
#include "sound/beep.h" #include "sound/beep.h"
#include "video/mc6845.h" #include "video/mc6845.h"
#include "machine/wd_fdc.h"
struct kay_kbd_t; struct kay_kbd_t;
@ -24,26 +22,20 @@ public:
kaypro_state(const machine_config &mconfig, device_type type, const char *tag) kaypro_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_p_videoram(*this, "p_videoram"),
m_pio_g(*this, "z80pio_g"), m_maincpu(*this, "maincpu"),
m_pio_s(*this, "z80pio_s"), m_pio_g(*this, "z80pio_g"),
m_sio(*this, "z80sio"), m_pio_s(*this, "z80pio_s"),
m_sio2x(*this, "z80sio_2x"), m_sio(*this, "z80sio"),
m_centronics(*this, "centronics"), m_sio2x(*this, "z80sio_2x"),
m_fdc(*this, "wd1793"), m_centronics(*this, "centronics"),
m_crtc(*this, "crtc"), m_fdc(*this, "fdc"),
m_beep(*this, "beeper"), m_floppy0(*this, "fdc:0"),
m_p_videoram(*this, "p_videoram"){ } m_floppy1(*this, "fdc:1"),
m_crtc(*this, "crtc"),
m_beep(*this, "beeper")
{}
required_device<cpu_device> m_maincpu;
optional_device<z80pio_device> m_pio_g;
optional_device<z80pio_device> m_pio_s;
required_device<z80sio_device> m_sio;
optional_device<z80sio_device> m_sio2x;
required_device<centronics_device> m_centronics;
required_device<fd1793_device> m_fdc;
optional_device<mc6845_device> m_crtc;
required_device<beep_device> m_beep;
DECLARE_READ8_MEMBER(kaypro2x_87_r); DECLARE_READ8_MEMBER(kaypro2x_87_r);
DECLARE_READ8_MEMBER(kaypro2x_system_port_r); DECLARE_READ8_MEMBER(kaypro2x_system_port_r);
DECLARE_READ8_MEMBER(kaypro2x_status_r); DECLARE_READ8_MEMBER(kaypro2x_status_r);
@ -60,26 +52,14 @@ public:
DECLARE_WRITE_LINE_MEMBER(kaypro_fdc_drq_w); DECLARE_WRITE_LINE_MEMBER(kaypro_fdc_drq_w);
DECLARE_READ8_MEMBER(kaypro_videoram_r); DECLARE_READ8_MEMBER(kaypro_videoram_r);
DECLARE_WRITE8_MEMBER(kaypro_videoram_w); DECLARE_WRITE8_MEMBER(kaypro_videoram_w);
const UINT8 *m_p_chargen;
required_shared_ptr<UINT8> m_p_videoram;
UINT8 m_system_port;
UINT8 m_mc6845_cursor[16];
UINT8 m_mc6845_reg[32];
UINT8 m_mc6845_ind;
UINT8 m_speed;
UINT8 m_flash;
UINT8 m_framecnt;
UINT16 m_cursor;
UINT16 m_mc6845_video_address;
kay_kbd_t *m_kbd;
void mc6845_cursor_configure();
void mc6845_screen_configure();
DECLARE_MACHINE_START(kayproii); DECLARE_MACHINE_START(kayproii);
DECLARE_MACHINE_RESET(kayproii); DECLARE_MACHINE_RESET(kayproii);
DECLARE_VIDEO_START(kaypro); DECLARE_VIDEO_START(kaypro);
DECLARE_MACHINE_RESET(kaypro2x); DECLARE_MACHINE_RESET(kaypro2x);
DECLARE_PALETTE_INIT(kaypro); DECLARE_PALETTE_INIT(kaypro);
DECLARE_MACHINE_RESET(kay_kbd); DECLARE_MACHINE_RESET(kay_kbd);
DECLARE_DRIVER_INIT(kaypro);
DECLARE_FLOPPY_FORMATS(floppy_formats);
UINT32 screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_kaypro2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_kaypro2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
UINT32 screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -87,11 +67,40 @@ public:
DECLARE_WRITE_LINE_MEMBER(kaypro_interrupt); DECLARE_WRITE_LINE_MEMBER(kaypro_interrupt);
DECLARE_READ8_MEMBER(kaypro_sio_r); DECLARE_READ8_MEMBER(kaypro_sio_r);
DECLARE_WRITE8_MEMBER(kaypro_sio_w); DECLARE_WRITE8_MEMBER(kaypro_sio_w);
DECLARE_QUICKLOAD_LOAD_MEMBER(kayproii ); DECLARE_QUICKLOAD_LOAD_MEMBER(kayproii);
DECLARE_QUICKLOAD_LOAD_MEMBER(kaypro2x ); DECLARE_QUICKLOAD_LOAD_MEMBER(kaypro2x);
const UINT8 *m_p_chargen;
UINT8 m_mc6845_cursor[16];
UINT8 m_mc6845_reg[32];
UINT8 m_mc6845_ind;
UINT8 m_speed;
UINT8 m_flash;
UINT8 m_framecnt;
UINT16 m_cursor;
required_shared_ptr<UINT8> m_p_videoram;
protected: protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
private:
UINT8 m_system_port;
UINT16 m_mc6845_video_address;
kay_kbd_t *m_kbd;
floppy_image_device *m_floppy;
void mc6845_cursor_configure();
void mc6845_screen_configure();
void fdc_intrq_w(bool state);
void fdc_drq_w(bool state);
required_device<cpu_device> m_maincpu;
optional_device<z80pio_device> m_pio_g;
optional_device<z80pio_device> m_pio_s;
required_device<z80sio_device> m_sio;
optional_device<z80sio_device> m_sio2x;
required_device<centronics_device> m_centronics;
required_device<fd1793_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
optional_device<mc6845_device> m_crtc;
required_device<beep_device> m_beep;
}; };
@ -110,7 +119,6 @@ extern const z80pio_interface kayproii_pio_g_intf;
extern const z80pio_interface kayproii_pio_s_intf; extern const z80pio_interface kayproii_pio_s_intf;
extern const z80pio_interface kaypro4_pio_s_intf; extern const z80pio_interface kaypro4_pio_s_intf;
extern const z80sio_interface kaypro_sio_intf; extern const z80sio_interface kaypro_sio_intf;
extern const wd17xx_interface kaypro_wd1793_interface;
/*----------- defined in video/kaypro.c -----------*/ /*----------- defined in video/kaypro.c -----------*/

View File

@ -60,22 +60,25 @@ WRITE8_MEMBER( kaypro_state::common_pio_system_w )
membank("bank3")->set_base(memregion("rambank")->base()); membank("bank3")->set_base(memregion("rambank")->base());
} }
wd17xx_dden_w(m_fdc, BIT(data, 5)); m_floppy = NULL;
m_centronics->strobe_w(BIT(data, 4));
if (BIT(data, 0)) if (BIT(data, 0))
wd17xx_set_drive(m_fdc, 0); m_floppy = m_floppy0->get_device();
else
if (BIT(data, 1)) if (BIT(data, 1))
wd17xx_set_drive(m_fdc, 1); m_floppy = m_floppy1->get_device();
m_fdc->set_floppy(m_floppy);
m_fdc->dden_w(BIT(data, 5));
if (m_floppy)
{
m_floppy->mon_w(BIT(data, 6) ? 0 : 1); // motor on
}
output_set_value("ledA", BIT(data, 0)); /* LEDs in artwork */ output_set_value("ledA", BIT(data, 0)); /* LEDs in artwork */
output_set_value("ledB", BIT(data, 1)); output_set_value("ledB", BIT(data, 1));
/* CLEAR_LINE means to turn motors on */ m_centronics->strobe_w(BIT(data, 4));
floppy_mon_w(floppy_get_device(machine(), 0), BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
floppy_mon_w(floppy_get_device(machine(), 1), BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
m_system_port = data; m_system_port = data;
} }
@ -85,7 +88,7 @@ WRITE8_MEMBER( kaypro_state::kayproii_pio_system_w )
common_pio_system_w(space, offset, data); common_pio_system_w(space, offset, data);
/* side select */ /* side select */
wd17xx_set_side(m_fdc, !BIT(data, 2)); m_floppy->ss_w(!BIT(data, 2));
} }
WRITE8_MEMBER( kaypro_state::kaypro4_pio_system_w ) WRITE8_MEMBER( kaypro_state::kaypro4_pio_system_w )
@ -93,7 +96,7 @@ WRITE8_MEMBER( kaypro_state::kaypro4_pio_system_w )
common_pio_system_w(space, offset, data); common_pio_system_w(space, offset, data);
/* side select */ /* side select */
wd17xx_set_side(m_fdc, BIT(data, 2)); m_floppy->ss_w(BIT(data, 2));
} }
const z80pio_interface kayproii_pio_g_intf = const z80pio_interface kayproii_pio_g_intf =
@ -172,25 +175,26 @@ WRITE8_MEMBER( kaypro_state::kaypro2x_system_port_w )
membank("bank3")->set_base(memregion("rambank")->base()); membank("bank3")->set_base(memregion("rambank")->base());
} }
wd17xx_dden_w(m_fdc, BIT(data, 5)); m_floppy = NULL;
m_centronics->strobe_w(BIT(data, 3));
if (BIT(data, 0)) if (BIT(data, 0))
wd17xx_set_drive(m_fdc, 0); m_floppy = m_floppy0->get_device();
else else
if (BIT(data, 1)) if (BIT(data, 1))
wd17xx_set_drive(m_fdc, 1); m_floppy = m_floppy1->get_device();
wd17xx_set_side(m_fdc, BIT(data, 2) ? 0 : 1); m_fdc->set_floppy(m_floppy);
m_fdc->dden_w(BIT(data, 5));
if (m_floppy)
{
m_floppy->mon_w(BIT(data, 6) ? 0 : 1); // motor on
m_floppy->ss_w(BIT(data, 2));
}
output_set_value("ledA", BIT(data, 0)); /* LEDs in artwork */ output_set_value("ledA", BIT(data, 0)); /* LEDs in artwork */
output_set_value("ledB", BIT(data, 1)); output_set_value("ledB", BIT(data, 1));
/* CLEAR_LINE means to turn motors on */ m_centronics->strobe_w(BIT(data, 3));
// commented out because turning the motors on causes an assert... turning them off is ok though??
//floppy_mon_w(floppy_get_device(machine(), 0), BIT(data, 4) ? CLEAR_LINE : ASSERT_LINE);
//floppy_mon_w(floppy_get_device(machine(), 1), BIT(data, 4) ? CLEAR_LINE : ASSERT_LINE);
m_system_port = data; m_system_port = data;
} }
@ -292,7 +296,8 @@ void kaypro_state::device_timer(emu_timer &timer, device_timer_id id, int param,
} }
} }
WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_intrq_w ) void kaypro_state::fdc_intrq_w (bool state)
//WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_intrq_w )
{ {
if (state) if (state)
timer_set(attotime::from_usec(25), TIMER_FLOPPY); timer_set(attotime::from_usec(25), TIMER_FLOPPY);
@ -300,7 +305,8 @@ WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_intrq_w )
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
} }
WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_drq_w ) void kaypro_state::fdc_drq_w (bool state)
//WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_drq_w )
{ {
if (state) if (state)
timer_set(attotime::from_usec(25), TIMER_FLOPPY); timer_set(attotime::from_usec(25), TIMER_FLOPPY);
@ -309,14 +315,6 @@ WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_drq_w )
} }
const wd17xx_interface kaypro_wd1793_interface =
{
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(kaypro_state, kaypro_fdc_intrq_w),
DEVCB_DRIVER_LINE_MEMBER(kaypro_state, kaypro_fdc_drq_w),
{FLOPPY_0, FLOPPY_1, NULL, NULL}
};
/*********************************************************** /***********************************************************