kaypro.cpp: State class split

This commit is contained in:
AJR 2023-05-27 12:19:56 -04:00
parent 10832fdb37
commit 7c174a4de1
4 changed files with 184 additions and 153 deletions

View File

@ -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 )

View File

@ -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<u8[]> m_ram;
std::unique_ptr<u8[]> 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<palette_device> m_palette;
required_device<screen_device> m_screen;
required_device<z80_device> m_maincpu;
required_region_ptr<u8> m_p_chargen;
optional_device<z80pio_device> m_pio_g;
optional_device<z80pio_device> m_pio_s;
required_device<centronics_device> m_centronics;
required_device<fd1793_device> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;
optional_device<mc6845_device> m_crtc;
required_device<beep_device> m_beep;
optional_device<mm58167_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<z80pio_device> m_pio_g;
required_device<z80pio_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<mc6845_device> m_crtc;
optional_device<mm58167_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

View File

@ -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()

View File

@ -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;
}