From 7c174a4de1cf44e07a76af3dc448f7ad304b7935 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 27 May 2023 12:19:56 -0400 Subject: kaypro.cpp: State class split --- src/mame/kaypro/kaypro.cpp | 136 +++++++++++++++++++++---------------------- src/mame/kaypro/kaypro.h | 130 +++++++++++++++++++++++++---------------- src/mame/kaypro/kaypro_m.cpp | 40 ++++++++----- src/mame/kaypro/kaypro_v.cpp | 31 ++++------ 4 files changed, 184 insertions(+), 153 deletions(-) diff --git a/src/mame/kaypro/kaypro.cpp b/src/mame/kaypro/kaypro.cpp index 7aab1830922..c68a599cd79 100644 --- a/src/mame/kaypro/kaypro.cpp +++ b/src/mame/kaypro/kaypro.cpp @@ -62,7 +62,7 @@ #include "speaker.h" -u8 kaypro_state::kaypro484_87_r() { return 0x7f; } /* to bypass unemulated HD controller */ +u8 kaypro84_state::kaypro484_87_r() { return 0x7f; } /* to bypass unemulated HD controller */ /*********************************************************** @@ -77,7 +77,7 @@ void kaypro_state::kaypro_map(address_map &map) map(0x4000, 0xffff).ram(); } -void kaypro_state::kayproii_io(address_map &map) +void kayproii_state::kayproii_io(address_map &map) { map.global_mask(0xff); map.unmap_value_high(); @@ -89,7 +89,7 @@ void kaypro_state::kayproii_io(address_map &map) map(0x1c, 0x1f).rw(m_pio_s, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt)); } -void kaypro_state::kaypro10_io(address_map &map) +void kaypro84_state::kaypro10_io(address_map &map) { map.global_mask(0xff); map.unmap_value_high(); @@ -98,11 +98,11 @@ void kaypro_state::kaypro10_io(address_map &map) map(0x08, 0x0b).w("brg", FUNC(com8116_device::stt_w)); map(0x0c, 0x0f).rw("sio_2", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w)); map(0x10, 0x13).rw(m_fdc, FUNC(fd1793_device::read), FUNC(fd1793_device::write)); - map(0x14, 0x17).rw(FUNC(kaypro_state::kaypro484_system_port_r), FUNC(kaypro_state::kaypro484_system_port_w)); + map(0x14, 0x17).rw(FUNC(kaypro84_state::kaypro484_system_port_r), FUNC(kaypro84_state::kaypro484_system_port_w)); map(0x18, 0x1b).w("cent_data_out", FUNC(output_latch_device::write)); - map(0x1c, 0x1c).rw(FUNC(kaypro_state::kaypro484_status_r), FUNC(kaypro_state::kaypro484_index_w)); - map(0x1d, 0x1d).r(m_crtc, FUNC(mc6845_device::register_r)).w(FUNC(kaypro_state::kaypro484_register_w)); - map(0x1f, 0x1f).rw(FUNC(kaypro_state::kaypro484_videoram_r), FUNC(kaypro_state::kaypro484_videoram_w)); + map(0x1c, 0x1c).rw(FUNC(kaypro84_state::kaypro484_status_r), FUNC(kaypro84_state::kaypro484_index_w)); + map(0x1d, 0x1d).r(m_crtc, FUNC(mc6845_device::register_r)).w(FUNC(kaypro84_state::kaypro484_register_w)); + map(0x1f, 0x1f).rw(FUNC(kaypro84_state::kaypro484_videoram_r), FUNC(kaypro84_state::kaypro484_videoram_w)); /* The below are not emulated */ /* map(0x80, 0x80) Hard drive controller card I/O port - 10MB hard drive only fitted to the Kaypro 10 @@ -114,14 +114,14 @@ void kaypro_state::kaypro10_io(address_map &map) map(0x86, 0x86) Hard Drive Size / Drive / Head register I/O map(0x87, 0x87) Hard Drive READ status register, WRITE command register */ map(0x20, 0x86).noprw(); - map(0x87, 0x87).r(FUNC(kaypro_state::kaypro484_87_r)); + map(0x87, 0x87).r(FUNC(kaypro84_state::kaypro484_87_r)); } -void kaypro_state::kaypro484_io(address_map &map) +void kaypro84_state::kaypro484_io(address_map &map) { kaypro10_io(map); map(0x20, 0x23).rw("z80pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write)); - map(0x24, 0x24).mirror(3).rw(FUNC(kaypro_state::rtc_r), FUNC(kaypro_state::rtc_w)); + map(0x24, 0x24).mirror(3).rw(FUNC(kaypro84_state::rtc_r), FUNC(kaypro84_state::rtc_w)); } @@ -220,21 +220,21 @@ void kaypro_state::floppy_formats(format_registration &fr) fr.add(FLOPPY_KAYPRO2X_FORMAT); } -void kaypro_state::kayproii(machine_config &config) +void kayproii_state::kayproii(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 20_MHz_XTAL / 8); - m_maincpu->set_addrmap(AS_PROGRAM, &kaypro_state::kaypro_map); - m_maincpu->set_addrmap(AS_IO, &kaypro_state::kayproii_io); + m_maincpu->set_addrmap(AS_PROGRAM, &kayproii_state::kaypro_map); + m_maincpu->set_addrmap(AS_IO, &kayproii_state::kayproii_io); m_maincpu->set_daisy_config(kayproii_daisy_chain); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER, rgb_t::green()); m_screen->set_raw(13.9776_MHz_XTAL, 128 * 7, 0, 80 * 7, 260, 0, 240); - m_screen->set_screen_update(FUNC(kaypro_state::screen_update_kayproii)); + m_screen->set_screen_update(FUNC(kayproii_state::screen_update_kayproii)); m_screen->set_palette(m_palette); - TIMER(config, m_floppy_timer).configure_generic(FUNC(kaypro_state::floppy_timer)); + TIMER(config, m_floppy_timer).configure_generic(FUNC(kayproii_state::floppy_timer)); GFXDECODE(config, "gfxdecode", m_palette, gfx_kayproii); PALETTE(config, m_palette, palette_device::MONOCHROME); @@ -244,14 +244,14 @@ void kaypro_state::kayproii(machine_config &config) BEEP(config, m_beep, 950).add_route(ALL_OUTPUTS, "mono", 1.00); /* piezo-device needs to be measured */ /* devices */ - QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(kaypro_state::quickload_cb)); + QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(kayproii_state::quickload_cb)); kaypro_10_keyboard_device &kbd(KAYPRO_10_KEYBOARD(config, "kbd")); kbd.rxd_cb().set("sio", FUNC(z80sio_device::rxb_w)); kbd.rxd_cb().append("sio", FUNC(z80sio_device::syncb_w)); CENTRONICS(config, m_centronics, centronics_devices, "printer"); - m_centronics->busy_handler().set(FUNC(kaypro_state::write_centronics_busy)); + m_centronics->busy_handler().set(FUNC(kayproii_state::write_centronics_busy)); output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out")); m_centronics->set_output_latch(latch); @@ -273,8 +273,8 @@ void kaypro_state::kayproii(machine_config &config) Z80PIO(config, m_pio_s, 20_MHz_XTAL / 8); m_pio_s->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - m_pio_s->in_pa_callback().set(FUNC(kaypro_state::pio_system_r)); - m_pio_s->out_pa_callback().set(FUNC(kaypro_state::kayproii_pio_system_w)); + m_pio_s->in_pa_callback().set(FUNC(kayproii_state::pio_system_r)); + m_pio_s->out_pa_callback().set(FUNC(kayproii_state::kayproii_pio_system_w)); z80sio_device& sio(Z80SIO(config, "sio", 20_MHz_XTAL / 8)); sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); @@ -284,48 +284,48 @@ void kaypro_state::kayproii(machine_config &config) sio.out_txdb_callback().set("kbd", FUNC(kaypro_10_keyboard_device::txd_w)); FD1793(config, m_fdc, 20_MHz_XTAL / 20); - m_fdc->intrq_wr_callback().set(FUNC(kaypro_state::fdc_intrq_w)); - m_fdc->drq_wr_callback().set(FUNC(kaypro_state::fdc_drq_w)); + m_fdc->intrq_wr_callback().set(FUNC(kayproii_state::fdc_intrq_w)); + m_fdc->drq_wr_callback().set(FUNC(kayproii_state::fdc_drq_w)); m_fdc->set_force_ready(true); - FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525ssdd", kaypro_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525ssdd", kaypro_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525ssdd", kayproii_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525ssdd", kayproii_state::floppy_formats).enable_sound(true); SOFTWARE_LIST(config, "flop_list").set_original("kaypro").set_filter("A"); } -void kaypro_state::kayproiv(machine_config &config) +void kayproii_state::kayproiv(machine_config &config) { kayproii(config); - m_pio_s->out_pa_callback().set(FUNC(kaypro_state::kayproiv_pio_system_w)); + m_pio_s->out_pa_callback().set(FUNC(kayproii_state::kayproiv_pio_system_w)); config.device_remove("fdc:0"); config.device_remove("fdc:1"); - FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525dd", kaypro_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525dd", kaypro_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525dd", kayproii_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525dd", kayproii_state::floppy_formats).enable_sound(true); SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("D"); } -void kaypro_state::omni2(machine_config &config) +void kayproii_state::omni2(machine_config &config) { kayproiv(config); - m_screen->set_screen_update(FUNC(kaypro_state::screen_update_omni2)); + m_screen->set_screen_update(FUNC(kayproii_state::screen_update_omni2)); } -void kaypro_state::kaypro484(machine_config &config) +void kaypro84_state::kaypro484(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 16_MHz_XTAL / 4); - m_maincpu->set_addrmap(AS_PROGRAM, &kaypro_state::kaypro_map); - m_maincpu->set_addrmap(AS_IO, &kaypro_state::kaypro484_io); + m_maincpu->set_addrmap(AS_PROGRAM, &kaypro84_state::kaypro_map); + m_maincpu->set_addrmap(AS_IO, &kaypro84_state::kaypro484_io); m_maincpu->set_daisy_config(kaypro484_daisy_chain); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(18_MHz_XTAL, 856, 0, 640, 426, 0, 400); - m_screen->set_screen_update(FUNC(kaypro_state::screen_update_kaypro484)); + m_screen->set_screen_update(FUNC(kaypro84_state::screen_update_kaypro484)); - TIMER(config, m_floppy_timer).configure_generic(FUNC(kaypro_state::floppy_timer)); + TIMER(config, m_floppy_timer).configure_generic(FUNC(kaypro84_state::floppy_timer)); GFXDECODE(config, "gfxdecode", m_palette, gfx_kaypro484); - PALETTE(config, m_palette, FUNC(kaypro_state::kaypro_palette), 3); + PALETTE(config, m_palette, FUNC(kaypro84_state::kaypro_palette), 3); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -336,9 +336,9 @@ void kaypro_state::kaypro484(machine_config &config) m_crtc->set_screen(m_screen); m_crtc->set_show_border_area(false); m_crtc->set_char_width(8); - m_crtc->set_update_row_callback(FUNC(kaypro_state::kaypro484_update_row)); + m_crtc->set_update_row_callback(FUNC(kaypro84_state::kaypro484_update_row)); - QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(kaypro_state::quickload_cb)); + QUICKLOAD(config, "quickload", "com,cpm", attotime::from_seconds(3)).set_load_callback(FUNC(kaypro84_state::quickload_cb)); kaypro_10_keyboard_device &kbd(KAYPRO_10_KEYBOARD(config, "kbd")); kbd.rxd_cb().set("sio_1", FUNC(z80sio_device::rxb_w)); @@ -347,7 +347,7 @@ void kaypro_state::kaypro484(machine_config &config) CLOCK(config, "kbdtxrxc", 16_MHz_XTAL / 16 / 13 / 16).signal_handler().set("sio_1", FUNC(z80sio_device::rxtxcb_w)); CENTRONICS(config, m_centronics, centronics_devices, "printer"); - m_centronics->busy_handler().set(FUNC(kaypro_state::write_centronics_busy)); + m_centronics->busy_handler().set(FUNC(kaypro84_state::write_centronics_busy)); output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out")); m_centronics->set_output_latch(latch); @@ -381,22 +381,22 @@ void kaypro_state::kaypro484(machine_config &config) brg.ft_handler().append("sio_2", FUNC(z80sio_device::txca_w)); FD1793(config, m_fdc, 16_MHz_XTAL / 16); - m_fdc->intrq_wr_callback().set(FUNC(kaypro_state::fdc_intrq_w)); - m_fdc->drq_wr_callback().set(FUNC(kaypro_state::fdc_drq_w)); + m_fdc->intrq_wr_callback().set(FUNC(kaypro84_state::fdc_intrq_w)); + m_fdc->drq_wr_callback().set(FUNC(kaypro84_state::fdc_drq_w)); m_fdc->set_force_ready(true); - FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525dd", kaypro_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525dd", kaypro_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525dd", kaypro84_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525dd", kaypro84_state::floppy_formats).enable_sound(true); SOFTWARE_LIST(config, "flop_list").set_original("kaypro").set_filter("C"); z80pio_device &pio(Z80PIO(config, "z80pio", 16_MHz_XTAL / 4)); pio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - pio.out_pa_callback().set(FUNC(kaypro_state::rtc_address_w)); + pio.out_pa_callback().set(FUNC(kaypro84_state::rtc_address_w)); MM58167(config, m_rtc, 32.768_kHz_XTAL); m_rtc->irq().set("z80pio", FUNC(z80pio_device::pa6_w)); } -void kaypro_state::kaypro4x(machine_config &config) +void kaypro84_state::kaypro4x(machine_config &config) { kaypro484(config); m_fdc->set_clock(16_MHz_XTAL / 8); @@ -404,16 +404,16 @@ void kaypro_state::kaypro4x(machine_config &config) SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("F"); } -void kaypro_state::kaypro1(machine_config &config) +void kaypro84_state::kaypro1(machine_config &config) { kaypro484(config); SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("G"); } -void kaypro_state::kaypro10(machine_config &config) +void kaypro84_state::kaypro10(machine_config &config) { kaypro484(config); - m_maincpu->set_addrmap(AS_IO, &kaypro_state::kaypro10_io); + m_maincpu->set_addrmap(AS_IO, &kaypro84_state::kaypro10_io); m_maincpu->set_daisy_config(kaypro10_daisy_chain); config.device_remove("z80pio"); config.device_remove("rtc"); @@ -422,7 +422,7 @@ void kaypro_state::kaypro10(machine_config &config) SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("E"); } -void kaypro_state::kaypro1084(machine_config &config) +void kaypro84_state::kaypro1084(machine_config &config) { kaypro484(config); config.device_remove("fdc:1"); // only has 1 floppy drive @@ -430,20 +430,20 @@ void kaypro_state::kaypro1084(machine_config &config) SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("E"); } -void kaypro_state::kaypronew2(machine_config &config) +void kaypro84_state::kaypronew2(machine_config &config) { kaypro484(config); config.device_remove("fdc:1"); // only has 1 floppy drive SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("G"); } -void kaypro_state::kaypro284(machine_config &config) +void kaypro84_state::kaypro284(machine_config &config) { kaypro484(config); config.device_remove("fdc:0"); config.device_remove("fdc:1"); - FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525ssdd", kaypro_state::floppy_formats).enable_sound(true); - FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525ssdd", kaypro_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:0", kaypro_floppies, "525ssdd", kaypro84_state::floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", kaypro_floppies, "525ssdd", kaypro84_state::floppy_formats).enable_sound(true); SOFTWARE_LIST(config.replace(), "flop_list").set_original("kaypro").set_filter("B"); } @@ -706,19 +706,19 @@ ROM_START(omni4) 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", 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, "Kaypro Corporation", "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, "Kaypro Corporation", "Kaypro 4/84", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015 -COMP( 1984, kaypro284, kaypro484, 0, kaypro284, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro 2/84", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015 -COMP( 1984, kaypro484p88, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "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, kaypro1084, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro 10", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-005 -COMP( 1984, robie, 0, 0, kaypro4x, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro Robie", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -COMP( 1985, kaypro2x, kaypro484, 0, kaypro484, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro 2x", MACHINE_SUPPORTS_SAVE ) // model 81-025 -COMP( 1985, kaypronew2, 0, 0, kaypronew2, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro New 2", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -COMP( 1985, kaypro4x, robie, 0, kaypro4x, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro 4x", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -COMP( 1986, kaypro1, kaypro484, 0, kaypro1, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Kaypro 1", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -COMP( 198?, omni2, kayproii, 0, omni2, kaypro, kaypro_state, init_kaypro, "Kaypro Corporation", "Omni II Logic Analyzer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -COMP( 198?, omni4, kaypro484, 0, kaypro1, kaypro, kaypro_state, init_kaypro, "Omni Logic Inc.", "Omni 4 Logic Analyzer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ +COMP( 1982, kayproii, 0, 0, kayproii, kaypro, kayproii_state, init_kaypro, "Non-Linear Systems", "Kaypro II - 2/83", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, kayproiv, kayproii, 0, kayproiv, kaypro, kayproii_state, init_kaypro, "Non-Linear Systems", "Kaypro IV - 4/83", MACHINE_SUPPORTS_SAVE ) // model 81-004 +COMP( 1983, kaypro10, 0, 0, kaypro10, kaypro, kaypro84_state, init_kaypro, "Non-Linear Systems", "Kaypro 10 - 1983", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, kayproiip88, kayproii, 0, kayproii, kaypro, kayproii_state, init_kaypro, "Kaypro Corporation", "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, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro 4/84", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015 +COMP( 1984, kaypro284, kaypro484, 0, kaypro284, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro 2/84", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-015 +COMP( 1984, kaypro484p88, kaypro484, 0, kaypro484, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "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, kaypro1084, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro 10", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // model 81-005 +COMP( 1984, robie, 0, 0, kaypro4x, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro Robie", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, kaypro2x, kaypro484, 0, kaypro484, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro 2x", MACHINE_SUPPORTS_SAVE ) // model 81-025 +COMP( 1985, kaypronew2, 0, 0, kaypronew2, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro New 2", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, kaypro4x, robie, 0, kaypro4x, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro 4x", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 1986, kaypro1, kaypro484, 0, kaypro1, kaypro, kaypro84_state, init_kaypro, "Kaypro Corporation", "Kaypro 1", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 198?, omni2, kayproii, 0, omni2, kaypro, kayproii_state, init_kaypro, "Kaypro Corporation", "Omni II Logic Analyzer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 198?, omni4, kaypro484, 0, kaypro1, kaypro, kaypro84_state, init_kaypro, "Omni Logic Inc.", "Omni 4 Logic Analyzer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/kaypro/kaypro.h b/src/mame/kaypro/kaypro.h index 740ab1b0a2d..43d640709ac 100644 --- a/src/mame/kaypro/kaypro.h +++ b/src/mame/kaypro/kaypro.h @@ -28,15 +28,11 @@ public: , m_screen(*this, "screen") , m_maincpu(*this, "maincpu") , m_p_chargen(*this, "chargen") - , m_pio_g(*this, "z80pio_g") - , m_pio_s(*this, "z80pio_s") , 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_rtc(*this, "rtc") , m_bankr(*this, "bankr") , m_bankw(*this, "bankw") , m_bank3(*this, "bank3") @@ -44,62 +40,24 @@ public: , m_leds(*this, "led%c", unsigned('A')) {} - void omni2(machine_config &config); - void kayproiv(machine_config &config); - void kayproii(machine_config &config); - void kaypronew2(machine_config &config); - void kaypro484(machine_config &config); - void kaypro10(machine_config &config); - void kaypro1084(machine_config &config); - void kaypro284(machine_config &config); - void kaypro4x(machine_config &config); - void kaypro1(machine_config &config); - void init_kaypro(); protected: virtual void machine_start() override; virtual void machine_reset() override; -private: - void kaypro10_io(address_map &map); - void kaypro484_io(address_map &map); +//private: void kaypro_map(address_map &map); - 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(); - u8 kaypro484_videoram_r(); - void kaypro484_system_port_w(u8 data); - void kaypro484_index_w(u8 data); - void kaypro484_register_w(u8 data); - void kaypro484_videoram_w(u8 data); - u8 pio_system_r(); - void kayproii_pio_system_w(u8 data); - void kayproiv_pio_system_w(u8 data); DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); DECLARE_WRITE_LINE_MEMBER(fdc_drq_w); - void rtc_address_w(u8 data); - u8 rtc_r(); - void rtc_w(u8 data); - u8 kaypro_videoram_r(offs_t offset); - void kaypro_videoram_w(offs_t offset, u8 data); static void floppy_formats(format_registration &fr); void kaypro_palette(palette_device &palette) const; - uint32_t screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - uint32_t screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - MC6845_UPDATE_ROW(kaypro484_update_row); DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); - void mc6845_screen_configure(); - - u8 m_mc6845_reg[32]{}; - u8 m_mc6845_ind = 0U; u8 m_framecnt = 0U; std::unique_ptr m_ram; std::unique_ptr m_vram; // video ram @@ -108,23 +66,17 @@ private: bool m_is_motor_off = false; u8 m_fdc_rq = 0U; u8 m_system_port = 0U; - u16 m_mc6845_video_address = 0U; floppy_image_device *m_floppy = nullptr; - u8 m_rtc_address = 0U; required_device m_palette; required_device m_screen; required_device m_maincpu; required_region_ptr m_p_chargen; - optional_device m_pio_g; - optional_device m_pio_s; required_device m_centronics; required_device m_fdc; required_device m_floppy0; optional_device m_floppy1; - optional_device m_crtc; required_device m_beep; - optional_device m_rtc; required_memory_bank m_bankr; required_memory_bank m_bankw; required_memory_bank m_bank3; @@ -132,4 +84,84 @@ private: output_finder<2> m_leds; }; +class kayproii_state : public kaypro_state +{ +public: + kayproii_state(const machine_config &mconfig, device_type type, const char *tag) + : kaypro_state(mconfig, type, tag) + , m_pio_g(*this, "z80pio_g") + , m_pio_s(*this, "z80pio_s") + {} + + void omni2(machine_config &config); + void kayproiv(machine_config &config); + void kayproii(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void kayproii_io(address_map &map); + + u8 pio_system_r(); + void kayproii_pio_system_w(u8 data); + void kayproiv_pio_system_w(u8 data); + + uint32_t screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + required_device m_pio_g; + required_device m_pio_s; +}; + +class kaypro84_state : public kaypro_state +{ +public: + kaypro84_state(const machine_config &mconfig, device_type type, const char *tag) + : kaypro_state(mconfig, type, tag) + , m_crtc(*this, "crtc") + , m_rtc(*this, "rtc") + {} + + void kaypronew2(machine_config &config); + void kaypro484(machine_config &config); + void kaypro10(machine_config &config); + void kaypro1084(machine_config &config); + void kaypro284(machine_config &config); + void kaypro4x(machine_config &config); + void kaypro1(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void kaypro10_io(address_map &map); + void kaypro484_io(address_map &map); + + u8 kaypro484_87_r(); + u8 kaypro484_system_port_r(); + u8 kaypro484_status_r(); + u8 kaypro484_videoram_r(); + void kaypro484_system_port_w(u8 data); + void kaypro484_index_w(u8 data); + void kaypro484_register_w(u8 data); + void kaypro484_videoram_w(u8 data); + + void rtc_address_w(u8 data); + u8 rtc_r(); + void rtc_w(u8 data); + + uint32_t screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + MC6845_UPDATE_ROW(kaypro484_update_row); + void mc6845_screen_configure(); + + required_device m_crtc; + optional_device m_rtc; + + u8 m_mc6845_reg[32]{}; + u8 m_mc6845_ind = 0U; + u16 m_mc6845_video_address = 0U; + u8 m_rtc_address = 0U; +}; + #endif // MAME_KAYPRO_KAYPRO_H diff --git a/src/mame/kaypro/kaypro_m.cpp b/src/mame/kaypro/kaypro_m.cpp index d9879ea7321..d934c02d0ac 100644 --- a/src/mame/kaypro/kaypro_m.cpp +++ b/src/mame/kaypro/kaypro_m.cpp @@ -21,7 +21,7 @@ WRITE_LINE_MEMBER( kaypro_state::write_centronics_busy ) m_centronics_busy = state; } -u8 kaypro_state::pio_system_r() +u8 kayproii_state::pio_system_r() { u8 data = 0; @@ -34,7 +34,7 @@ u8 kaypro_state::pio_system_r() return data; } -void kaypro_state::kayproii_pio_system_w(u8 data) +void kayproii_state::kayproii_pio_system_w(u8 data) { /* d7 bank select d6 disk drive motors - (0=on) @@ -73,7 +73,7 @@ void kaypro_state::kayproii_pio_system_w(u8 data) m_system_port = data; } -void kaypro_state::kayproiv_pio_system_w(u8 data) +void kayproii_state::kayproiv_pio_system_w(u8 data) { kayproii_pio_system_w(data); @@ -90,13 +90,13 @@ void kaypro_state::kayproiv_pio_system_w(u8 data) ************************************************************/ -u8 kaypro_state::kaypro484_system_port_r() +u8 kaypro84_state::kaypro484_system_port_r() { u8 data = m_centronics_busy << 6; return (m_system_port & 0xbf) | data; } -void kaypro_state::kaypro484_system_port_w(u8 data) +void kaypro84_state::kaypro484_system_port_w(u8 data) { /* d7 bank select d6 alternate character set (write only) @@ -213,17 +213,17 @@ WRITE_LINE_MEMBER( kaypro_state::fdc_drq_w ) } -void kaypro_state::rtc_address_w(u8 data) +void kaypro84_state::rtc_address_w(u8 data) { m_rtc_address = data & 0x1f; } -u8 kaypro_state::rtc_r() +u8 kaypro84_state::rtc_r() { return m_rtc->read(m_rtc_address); } -void kaypro_state::rtc_w(u8 data) +void kaypro84_state::rtc_w(u8 data) { m_rtc->write(m_rtc_address, data); } @@ -236,27 +236,37 @@ void kaypro_state::rtc_w(u8 data) ************************************************************/ void kaypro_state::machine_start() { - if (m_pio_s) - m_pio_s->strobe_a(0); - m_leds.resolve(); save_pointer(NAME(m_vram), 0x1000); save_pointer(NAME(m_ram), 0x4000); - save_item(NAME(m_mc6845_reg)); - save_item(NAME(m_mc6845_ind)); save_item(NAME(m_framecnt)); save_item(NAME(m_centronics_busy)); save_item(NAME(m_is_motor_off)); save_item(NAME(m_fdc_rq)); save_item(NAME(m_system_port)); + + m_framecnt = 0; +} + +void kayproii_state::machine_start() +{ + kaypro_state::machine_start(); + + m_pio_s->strobe_a(0); +} + +void kaypro84_state::machine_start() +{ + kaypro_state::machine_start(); + + save_item(NAME(m_mc6845_reg)); + save_item(NAME(m_mc6845_ind)); save_item(NAME(m_mc6845_video_address)); if (m_rtc.found()) save_item(NAME(m_rtc_address)); - - m_framecnt = 0; } void kaypro_state::machine_reset() diff --git a/src/mame/kaypro/kaypro_v.cpp b/src/mame/kaypro/kaypro_v.cpp index 4ba47f8ea0b..5ceca65f42f 100644 --- a/src/mame/kaypro/kaypro_v.cpp +++ b/src/mame/kaypro/kaypro_v.cpp @@ -20,7 +20,7 @@ void kaypro_state::kaypro_palette(palette_device &palette) const palette.set_pen_color(2, rgb_t(0, 110, 0)); // low intensity green } -u32 kaypro_state::screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 kayproii_state::screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { /* The display consists of 80 columns and 24 rows. Each row is allocated 128 bytes of ram, but only the first 80 are used. The total video ram therefore is 0x0c00 bytes. @@ -70,7 +70,7 @@ u32 kaypro_state::screen_update_kayproii(screen_device &screen, bitmap_ind16 &bi return 0; } -u32 kaypro_state::screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 kayproii_state::screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u16 sy=0,ma=0; @@ -113,7 +113,7 @@ u32 kaypro_state::screen_update_omni2(screen_device &screen, bitmap_ind16 &bitma return 0; } -u32 kaypro_state::screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +u32 kaypro84_state::screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { m_framecnt++; m_crtc->screen_update(screen, bitmap, cliprect); @@ -133,7 +133,7 @@ u32 kaypro_state::screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &b Not sure how the attributes interact, for example does an underline blink? */ -MC6845_UPDATE_ROW( kaypro_state::kaypro484_update_row ) +MC6845_UPDATE_ROW( kaypro84_state::kaypro484_update_row ) { rgb_t const *const palette = m_palette->palette()->entry_list_raw(); u32 *p = &bitmap.pix(y); @@ -196,7 +196,7 @@ MC6845_UPDATE_ROW( kaypro_state::kaypro484_update_row ) /* Resize the screen within the limits of the hardware. Expand the image to fill the screen area. Standard screen is 640 x 400 = 0x7d0 bytes. */ -void kaypro_state::mc6845_screen_configure() +void kaypro84_state::mc6845_screen_configure() { u16 width = m_mc6845_reg[1]*8-1; // width in pixels u16 height = m_mc6845_reg[6]*(m_mc6845_reg[9]+1)-1; // height in pixels @@ -210,20 +210,20 @@ void kaypro_state::mc6845_screen_configure() /**************************** I/O PORTS *****************************************************************/ -u8 kaypro_state::kaypro484_status_r() +u8 kaypro84_state::kaypro484_status_r() { /* Need bit 7 high or computer hangs */ return 0x80 | m_crtc->register_r(); } -void kaypro_state::kaypro484_index_w(u8 data) +void kaypro84_state::kaypro484_index_w(u8 data) { m_mc6845_ind = data & 0x1f; m_crtc->address_w(data); } -void kaypro_state::kaypro484_register_w(u8 data) +void kaypro84_state::kaypro484_register_w(u8 data) { static const u8 mcmask[32]={0xff,0xff,0xff,0x0f,0x7f,0x1f,0x7f,0x7f,3,0x1f,0x7f,0x1f,0x3f,0xff,0x3f,0xff,0,0}; @@ -241,23 +241,12 @@ void kaypro_state::kaypro484_register_w(u8 data) m_mc6845_video_address = m_mc6845_reg[19] | ((m_mc6845_reg[18] & 0x3f) << 8); /* internal ULA address */ } -u8 kaypro_state::kaypro_videoram_r(offs_t offset) -{ - return m_vram[offset]; -} - -void kaypro_state::kaypro_videoram_w(offs_t offset, u8 data) -{ - m_vram[offset] = data; -} - -u8 kaypro_state::kaypro484_videoram_r() +u8 kaypro84_state::kaypro484_videoram_r() { return m_vram[m_mc6845_video_address]; } -void kaypro_state::kaypro484_videoram_w(u8 data) +void kaypro84_state::kaypro484_videoram_w(u8 data) { m_vram[m_mc6845_video_address] = data; } - -- cgit v1.2.3