mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
kaypro.cpp: State class split
This commit is contained in:
parent
10832fdb37
commit
7c174a4de1
@ -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 )
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user