*kaypro: added back save state support;

- fixed attributes off by one position;

- removed anonymous timer
This commit is contained in:
Robbbert 2020-10-07 23:48:04 +11:00
parent a9844643c4
commit d6d18f9574
4 changed files with 45 additions and 48 deletions

View File

@ -212,6 +212,8 @@ void kaypro_state::kayproii(machine_config &config)
m_screen->set_screen_update(FUNC(kaypro_state::screen_update_kayproii));
m_screen->set_palette(m_palette);
TIMER(config, m_floppy_timer).configure_generic(FUNC(kaypro_state::floppy_timer));
GFXDECODE(config, "gfxdecode", m_palette, gfx_kayproii);
PALETTE(config, m_palette, palette_device::MONOCHROME);
@ -300,6 +302,8 @@ void kaypro_state::kaypro484(machine_config &config)
m_screen->set_visarea(0,80*8-1,0,25*16-1);
m_screen->set_screen_update(FUNC(kaypro_state::screen_update_kaypro484));
TIMER(config, m_floppy_timer).configure_generic(FUNC(kaypro_state::floppy_timer));
GFXDECODE(config, "gfxdecode", m_palette, gfx_kaypro484);
PALETTE(config, m_palette, FUNC(kaypro_state::kaypro_palette), 3);
@ -385,6 +389,7 @@ void kaypro_state::kaypro284(machine_config &config)
config.device_remove("fdc:1");
FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525ssdd", floppy_image_device::default_floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525ssdd", floppy_image_device::default_floppy_formats).enable_sound(true);
SOFTWARE_LIST(config.replace(), "flop_list").set_original("kayproii");
}
void kaypro_state::init_kaypro()
@ -647,18 +652,18 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
COMP( 1982, kayproii, 0, 0, kayproii, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro II - 2/83" , 0 )
COMP( 1983, kayproiv, kayproii, 0, kayproiv, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro IV - 4/83" , 0 ) // model 81-004
COMP( 1983, kaypro10, 0, 0, kaypro10, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 10 - 1983", 0 )
COMP( 1983, kayproiip88, kayproii, 0, kayproii, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4 plus88 - 4/83" , MACHINE_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom
COMP( 1984, kaypro484, 0, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4/84" , MACHINE_NOT_WORKING ) // model 81-015
COMP( 1984, kaypro284, kaypro484, 0, kaypro284, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 2/84" , MACHINE_NOT_WORKING ) // model 81-015
COMP( 1984, kaypro484p88, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4/84 plus88", MACHINE_NOT_WORKING ) // model 81-015 with an added 8088 daughterboard and rom
COMP( 1984, kaypro1084, kaypro10, 0, kaypro10, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 10" , MACHINE_NOT_WORKING ) // model 81-005
COMP( 1984, robie, 0, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro Robie" , MACHINE_NOT_WORKING )
COMP( 1985, kaypro2x, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 2x" , MACHINE_NOT_WORKING ) // model 81-025
COMP( 1985, kaypronew2, 0, 0, kaypronew2, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro New 2", MACHINE_NOT_WORKING )
COMP( 1985, kaypro4x, robie, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4x" , MACHINE_NOT_WORKING )
COMP( 1986, kaypro1, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 1", MACHINE_NOT_WORKING )
COMP( 198?, omni2, kayproii, 0, omni2, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Omni II Logic Analyzer" , 0 )
COMP( 198?, omni4, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Omni Logic Inc.", "Omni 4 Logic Analyzer" , MACHINE_NOT_WORKING )
COMP( 1982, kayproii, 0, 0, kayproii, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro II - 2/83", MACHINE_SUPPORTS_SAVE )
COMP( 1983, kayproiv, kayproii, 0, kayproiv, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro IV - 4/83", MACHINE_SUPPORTS_SAVE ) // model 81-004
COMP( 1983, kaypro10, 0, 0, kaypro10, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 10 - 1983", MACHINE_SUPPORTS_SAVE )
COMP( 1983, kayproiip88, kayproii, 0, kayproii, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4 plus88 - 4/83" , MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-004 with an added 8088 daughterboard and rom
COMP( 1984, kaypro484, 0, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4/84", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015
COMP( 1984, kaypro284, kaypro484, 0, kaypro284, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 2/84", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015
COMP( 1984, kaypro484p88, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4/84 plus88", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015 with an added 8088 daughterboard and rom
COMP( 1984, kaypro1084, kaypro10, 0, kaypro10, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 10", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-005
COMP( 1984, robie, 0, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro Robie", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1985, kaypro2x, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 2x", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-025
COMP( 1985, kaypronew2, 0, 0, kaypronew2, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro New 2", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1985, kaypro4x, robie, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 4x", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1986, kaypro1, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Kaypro 1", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 198?, omni2, kayproii, 0, omni2, kaypro, kaypro_state, init_kaypro, "Non Linear Systems", "Omni II Logic Analyzer", MACHINE_SUPPORTS_SAVE )
COMP( 198?, omni4, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Omni Logic Inc.", "Omni 4 Logic Analyzer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -14,17 +14,13 @@
#include "sound/beep.h"
#include "video/mc6845.h"
#include "machine/wd_fdc.h"
#include "machine/timer.h"
#include "emupal.h"
#include "screen.h"
class kaypro_state : public driver_device
{
public:
enum
{
TIMER_FLOPPY
};
kaypro_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_palette(*this, "palette")
@ -42,6 +38,7 @@ public:
, m_bankr(*this, "bankr")
, m_bankw(*this, "bankw")
, m_bank3(*this, "bank3")
, m_floppy_timer(*this, "floppy_timer")
{}
void omni2(machine_config &config);
@ -60,6 +57,7 @@ private:
void kayproii_io(address_map &map);
DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
TIMER_DEVICE_CALLBACK_MEMBER(floppy_timer);
u8 kaypro484_87_r();
u8 kaypro484_system_port_r();
u8 kaypro484_status_r();
@ -85,7 +83,6 @@ private:
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
void mc6845_screen_configure();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
u8 m_mc6845_reg[32];
u8 m_mc6845_ind;
@ -115,6 +112,7 @@ private:
required_memory_bank m_bankr;
required_memory_bank m_bankw;
required_memory_bank m_bank3;
required_device<timer_device> m_floppy_timer;
};
#endif // MAME_INCLUDES_KAYPRO_H

View File

@ -176,37 +176,31 @@ void kaypro_state::kaypro484_system_port_w(u8 data)
*************************************************************************************/
void kaypro_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
TIMER_DEVICE_CALLBACK_MEMBER(kaypro_state::floppy_timer)
{
bool halt;
switch (id)
halt = (bool)m_maincpu->state_int(Z80_HALT);
if (m_is_motor_off)
{
case TIMER_FLOPPY:
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:
throw emu_fatalerror("Unknown id in kaypro_state::device_timer");
m_floppy_timer->adjust(attotime::from_hz(10));
return;
}
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;
}
m_floppy_timer->adjust(attotime::from_hz(1e5));
}
WRITE_LINE_MEMBER( kaypro_state::fdc_intrq_w )
{
m_fdc_rq = (m_fdc_rq & 0x82) | state;
@ -249,7 +243,7 @@ void kaypro_state::machine_reset()
m_system_port = 0x80;
m_fdc_rq = 0;
m_maincpu->reset();
timer_set(attotime::from_hz(1), TIMER_FLOPPY); /* kick-start the nmi timer */
m_floppy_timer->adjust(attotime::from_hz(1)); /* kick-start the nmi timer */
}

View File

@ -144,7 +144,7 @@ MC6845_UPDATE_ROW( kaypro_state::kaypro484_update_row )
if (x == cursor_x) inv=0xff;
u16 const mem = (ma + x) & 0x7ff;
u8 const chr = m_vram[mem];
u8 const attr = m_vram[mem | 0x800];
u8 const attr = m_vram[(mem+1) | 0x800];
u8 fg, bg;
if ((attr & 3) == 3)