diff options
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 |
commit | d6d18f9574a6c9d15182260acf5e3125e636a7b9 (patch) | |
tree | de5dbeb8dea03437f61bff8bec0c5454a902c28b /src/mame | |
parent | a9844643c461ab4341feecfe76f6a5329c05cc76 (diff) |
*kaypro: added back save state support;
- fixed attributes off by one position;
- removed anonymous timer
Diffstat (limited to 'src/mame')
-rw-r--r-- | src/mame/drivers/kaypro.cpp | 35 | ||||
-rw-r--r-- | src/mame/includes/kaypro.h | 10 | ||||
-rw-r--r-- | src/mame/machine/kaypro.cpp | 46 | ||||
-rw-r--r-- | src/mame/video/kaypro.cpp | 2 |
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) |