mirror of
https://github.com/holub/mame
synced 2025-04-25 17:56:43 +03:00
(MESS) kaypro: kayproii, kaypro4, omni2 can boot from floppy, marked as working.
Kaypro4p88 and kaypro10 can also boot from floppy but have other issues.
This commit is contained in:
parent
f9ab852d6d
commit
569bd73138
@ -9,14 +9,15 @@
|
||||
telephone cord, complete with modular plug on each end. The keyboard carries
|
||||
its own Intel 87C51 processor and is an intelligent device.
|
||||
|
||||
Things that need doing:
|
||||
ToDo:
|
||||
|
||||
- See about getting keyboard to work as a serial device.
|
||||
- Need dump of 87C51 cpu in the keyboard.
|
||||
|
||||
- Only kayproii boots up, the remainder have floppy-disk problems.
|
||||
|
||||
- The DSK format needs to be supported. It is commented out until the code gets written.
|
||||
- Kaypro 2x, 4a: floppy not working "No operating system present on this disk"
|
||||
- Kaypro 10: Boots from floppy, but B drive not working "Bdos Err on B: Bad Sector"
|
||||
- Kaypro 4p88: works as a normal Kaypro 4, extra hardware not done
|
||||
- Kaypro Robie: has twin 2.6MB 5.25 floppy drives which we don't support, no software available
|
||||
|
||||
- Hard Disk not emulated.
|
||||
The controller is a WD1002 (original version, for Winchester drives).
|
||||
@ -162,16 +163,9 @@ static const z80_daisy_config kaypro2x_daisy_chain[] =
|
||||
|
||||
************************************************************/
|
||||
|
||||
//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
|
||||
|
||||
static SLOT_INTERFACE_START( kaypro_floppies )
|
||||
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
|
||||
SLOT_INTERFACE( "drive0", FLOPPY_525_DD )
|
||||
SLOT_INTERFACE( "drive1", FLOPPY_525_DD )
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
|
||||
@ -180,7 +174,7 @@ static MACHINE_CONFIG_START( kayproii, kaypro_state )
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz / 8)
|
||||
MCFG_CPU_PROGRAM_MAP(kaypro_map)
|
||||
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 */
|
||||
MCFG_CPU_CONFIG(kayproii_daisy_chain)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(kaypro_state, kayproii )
|
||||
@ -230,10 +224,8 @@ static MACHINE_CONFIG_START( kayproii, kaypro_state )
|
||||
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(kaypro_state, fdc_intrq_w))
|
||||
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(kaypro_state, fdc_drq_w))
|
||||
MCFG_WD_FDC_FORCE_READY
|
||||
//MCFG_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "525dd", kaypro_state::kayproii_floppy_formats)
|
||||
//MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "525dd", kaypro_state::kayproii_floppy_formats)
|
||||
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_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "drive0", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "drive1", floppy_image_device::default_floppy_formats)
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list","kayproii")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -250,7 +242,7 @@ static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4)
|
||||
MCFG_CPU_PROGRAM_MAP(kaypro_map)
|
||||
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)
|
||||
MCFG_CPU_CONFIG(kaypro2x_daisy_chain)
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(kaypro_state, kaypro )
|
||||
@ -266,7 +258,7 @@ static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", kaypro2x)
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
MCFG_PALETTE_INIT_OWNER(kaypro_state,kaypro)
|
||||
MCFG_PALETTE_INIT_OWNER(kaypro_state, kaypro)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -295,10 +287,8 @@ static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
|
||||
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(kaypro_state, fdc_intrq_w))
|
||||
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(kaypro_state, fdc_drq_w))
|
||||
MCFG_WD_FDC_FORCE_READY
|
||||
//MCFG_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "525dd", kaypro_state::kaypro2x_floppy_formats)
|
||||
//MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "525dd", kaypro_state::kaypro2x_floppy_formats)
|
||||
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_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "drive0", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "drive1", floppy_image_device::default_floppy_formats)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( omni2, kaypro4 )
|
||||
@ -431,9 +421,9 @@ ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
|
||||
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, kaypro_state, kaypro, "Non Linear Systems", "Kaypro 4 - 4/83" , GAME_NOT_WORKING ) // 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, 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, kaypro_state, kaypro, "Non Linear Systems", "Omni II" , GAME_NOT_WORKING )
|
||||
COMP( 198?, omni2, kayproii, 0, omni2, kay_kbd, kaypro_state, kaypro, "Non Linear Systems", "Omni II Logic Analyzer" , 0 )
|
||||
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, 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
|
||||
|
@ -21,19 +21,19 @@ public:
|
||||
};
|
||||
|
||||
kaypro_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_pio_g(*this, "z80pio_g"),
|
||||
m_pio_s(*this, "z80pio_s"),
|
||||
m_sio(*this, "z80sio"),
|
||||
m_sio2x(*this, "z80sio_2x"),
|
||||
m_centronics(*this, "centronics"),
|
||||
m_fdc(*this, "fdc"),
|
||||
m_floppy0(*this, "fdc:0"),
|
||||
m_floppy1(*this, "fdc:1"),
|
||||
m_crtc(*this, "crtc"),
|
||||
m_beep(*this, "beeper"),
|
||||
m_palette(*this, "palette")
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_palette(*this, "palette")
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_pio_g(*this, "z80pio_g")
|
||||
, m_pio_s(*this, "z80pio_s")
|
||||
, m_sio(*this, "z80sio")
|
||||
, m_sio2x(*this, "z80sio_2x")
|
||||
, m_centronics(*this, "centronics")
|
||||
, m_fdc(*this, "fdc")
|
||||
, m_floppy0(*this, "fdc:0")
|
||||
, m_floppy1(*this, "fdc:1")
|
||||
, m_crtc(*this, "crtc")
|
||||
, m_beep(*this, "beeper")
|
||||
{}
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
|
||||
@ -59,13 +59,10 @@ public:
|
||||
DECLARE_PALETTE_INIT(kaypro);
|
||||
DECLARE_MACHINE_RESET(kay_kbd);
|
||||
DECLARE_DRIVER_INIT(kaypro);
|
||||
DECLARE_FLOPPY_FORMATS(kayproii_floppy_formats);
|
||||
DECLARE_FLOPPY_FORMATS(kaypro2x_floppy_formats);
|
||||
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_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(kay_kbd_interrupt);
|
||||
DECLARE_WRITE_LINE_MEMBER(kaypro_interrupt);
|
||||
DECLARE_READ8_MEMBER(kaypro_sio_r);
|
||||
DECLARE_WRITE8_MEMBER(kaypro_sio_w);
|
||||
MC6845_UPDATE_ROW(kaypro2x_update_row);
|
||||
@ -78,16 +75,17 @@ public:
|
||||
UINT8 *m_p_videoram;
|
||||
kay_kbd_t *m_kbd;
|
||||
int m_centronics_busy;
|
||||
|
||||
protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
private:
|
||||
bool m_is_motor_off;
|
||||
UINT8 m_fdc_rq;
|
||||
UINT8 m_system_port;
|
||||
UINT16 m_mc6845_video_address;
|
||||
floppy_image_device *m_floppy;
|
||||
void mc6845_cursor_configure();
|
||||
void mc6845_screen_configure();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<z80pio_device> m_pio_g;
|
||||
optional_device<z80pio_device> m_pio_s;
|
||||
@ -99,8 +97,6 @@ private:
|
||||
required_device<floppy_connector> m_floppy1;
|
||||
optional_device<mc6845_device> m_crtc;
|
||||
required_device<beep_device> m_beep;
|
||||
public:
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
||||
|
||||
|
@ -13,11 +13,6 @@
|
||||
|
||||
************************************************************/
|
||||
|
||||
WRITE_LINE_MEMBER(kaypro_state::kaypro_interrupt)
|
||||
{
|
||||
m_maincpu->set_input_line(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( kaypro_state::write_centronics_busy )
|
||||
{
|
||||
m_centronics_busy = state;
|
||||
@ -48,6 +43,7 @@ WRITE8_MEMBER( kaypro_state::kayproii_pio_system_w )
|
||||
|
||||
membank("bankr0")->set_entry(BIT(data, 7));
|
||||
membank("bank3")->set_entry(BIT(data, 7));
|
||||
m_is_motor_off = BIT(data, 6);
|
||||
|
||||
m_floppy = NULL;
|
||||
if (BIT(data, 0))
|
||||
@ -62,6 +58,7 @@ WRITE8_MEMBER( kaypro_state::kayproii_pio_system_w )
|
||||
if (m_floppy)
|
||||
{
|
||||
m_floppy->mon_w(BIT(data, 6)); // motor on
|
||||
m_floppy->ss_w(!BIT(data, 2)); // signal exists even though drives are single sided
|
||||
}
|
||||
|
||||
output_set_value("ledA", BIT(data, 0)); /* LEDs in artwork */
|
||||
@ -107,6 +104,7 @@ WRITE8_MEMBER( kaypro_state::kaypro2x_system_port_w )
|
||||
|
||||
membank("bankr0")->set_entry(BIT(data, 7));
|
||||
membank("bank3")->set_entry(BIT(data, 7));
|
||||
m_is_motor_off = !BIT(data, 4);
|
||||
|
||||
m_floppy = NULL;
|
||||
if (!BIT(data, 0))
|
||||
@ -116,7 +114,7 @@ WRITE8_MEMBER( kaypro_state::kaypro2x_system_port_w )
|
||||
m_floppy = m_floppy1->get_device();
|
||||
|
||||
m_fdc->set_floppy(m_floppy);
|
||||
//m_fdc->dden_w(BIT(data, 5)); // not connected
|
||||
m_fdc->dden_w(BIT(data, 5)); // not connected
|
||||
|
||||
if (m_floppy)
|
||||
{
|
||||
@ -195,11 +193,29 @@ WRITE8_MEMBER(kaypro_state::kaypro_sio_w)
|
||||
|
||||
void kaypro_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
bool halt;
|
||||
switch (id)
|
||||
{
|
||||
case TIMER_FLOPPY:
|
||||
if (m_maincpu->state_int(Z80_HALT))
|
||||
halt = (bool)m_maincpu->state_int(Z80_HALT);
|
||||
if (m_is_motor_off)
|
||||
{
|
||||
timer_set(attotime::from_hz(10), TIMER_FLOPPY);
|
||||
break;
|
||||
}
|
||||
if ((halt) && (m_fdc_rq & 3) && (m_fdc_rq < 0x80))
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
m_fdc_rq |= 0x80;
|
||||
}
|
||||
else
|
||||
if ((m_fdc_rq == 0x80) || ((!halt) && BIT(m_fdc_rq, 7)))
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
m_fdc_rq &= 0x7f;
|
||||
}
|
||||
timer_set(attotime::from_hz(1e5), TIMER_FLOPPY);
|
||||
|
||||
break;
|
||||
default:
|
||||
assert_always(FALSE, "Unknown id in kaypro_state::device_timer");
|
||||
@ -208,19 +224,12 @@ void kaypro_state::device_timer(emu_timer &timer, device_timer_id id, int param,
|
||||
|
||||
WRITE_LINE_MEMBER( kaypro_state::fdc_intrq_w )
|
||||
{
|
||||
if (state)
|
||||
timer_set(attotime::zero, TIMER_FLOPPY);
|
||||
else
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
m_fdc_rq = (m_fdc_rq & 0x82) | state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( kaypro_state::fdc_drq_w )
|
||||
{
|
||||
if (state)
|
||||
timer_set(attotime::zero, TIMER_FLOPPY);
|
||||
else
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
|
||||
m_fdc_rq = (m_fdc_rq & 0x81) | (state << 1);
|
||||
}
|
||||
|
||||
|
||||
@ -241,7 +250,9 @@ MACHINE_RESET_MEMBER( kaypro_state,kaypro )
|
||||
membank("bankw0")->set_entry(0); // always write to ram
|
||||
membank("bank3")->set_entry(1); // point at video ram
|
||||
m_system_port = 0x80;
|
||||
m_fdc_rq = 0;
|
||||
m_maincpu->reset();
|
||||
timer_set(attotime::from_hz(1), TIMER_FLOPPY); /* timer for rtc */
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user