summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2020-10-07 23:48:04 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2020-10-07 23:48:04 +1100
commitd6d18f9574a6c9d15182260acf5e3125e636a7b9 (patch)
treede5dbeb8dea03437f61bff8bec0c5454a902c28b
parenta9844643c461ab4341feecfe76f6a5329c05cc76 (diff)
*kaypro: added back save state support;
- fixed attributes off by one position; - removed anonymous timer
-rw-r--r--src/mame/drivers/kaypro.cpp35
-rw-r--r--src/mame/includes/kaypro.h10
-rw-r--r--src/mame/machine/kaypro.cpp46
-rw-r--r--src/mame/video/kaypro.cpp2
4 files changed, 45 insertions, 48 deletions
diff --git a/src/mame/drivers/kaypro.cpp b/src/mame/drivers/kaypro.cpp
index a72ec49a831..d57bc7ccfa2 100644
--- a/src/mame/drivers/kaypro.cpp
+++ b/src/mame/drivers/kaypro.cpp
@@ -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 )
diff --git a/src/mame/includes/kaypro.h b/src/mame/includes/kaypro.h
index e119ce1b5c7..370ea1d75d1 100644
--- a/src/mame/includes/kaypro.h
+++ b/src/mame/includes/kaypro.h
@@ -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
diff --git a/src/mame/machine/kaypro.cpp b/src/mame/machine/kaypro.cpp
index f3700fa0c9c..decc44dd4c7 100644
--- a/src/mame/machine/kaypro.cpp
+++ b/src/mame/machine/kaypro.cpp
@@ -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 */
}
diff --git a/src/mame/video/kaypro.cpp b/src/mame/video/kaypro.cpp
index b579a0f4484..03ae32f4547 100644
--- a/src/mame/video/kaypro.cpp
+++ b/src/mame/video/kaypro.cpp
@@ -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)