Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rm/rm380z.cpp: Add COS 4.0/F firmware #12195

Merged
merged 4 commits into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/mame/mame.lst
Original file line number Diff line number Diff line change
Expand Up @@ -38423,10 +38423,12 @@ rc702 // 1979 RC702
rc759 // 1984 RC759

@source:rm/rm380z.cpp
rm380z // 1978 RM380z with COS 4.0 firmware
rm380zhrg // 1978 RM380z with COS 4.0 and HRG
rm380z34d // 1978 RM380z with COS 3.4 firmware and casette
rm380z34e // 1978 RM380z with COS 3.4 firmware and casette
rm380z // 1978 RM380z with COS 4.0/M firmware
rm380zhrg // 1978 RM380z with COS 4.0/M and HRG
rm380zf // 1978 RM380z with COS 4.0/F firmware
rm380zfhrg // 1978 RM380z with COS 4.0/F and HRG
rm380z34d // 1978 RM380z with COS 3.4/F firmware and casette
rm380z34e // 1978 RM380z with COS 3.4/M firmware and casette
rm480z // 1981 RM480z
rm480za // 1981 RM480z

Expand Down
85 changes: 50 additions & 35 deletions src/mame/rm/rm380z.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ uint32_t rm380z_state::screen_update_rm380z(screen_device &screen, bitmap_ind16
return 0;
}

void rm380z_state::configure(machine_config &config)
void rm380z_state::base_configure(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 16_MHz_XTAL / 4);
Expand All @@ -269,7 +269,6 @@ void rm380z_state::configure(machine_config &config)

/* floppy disk */
FD1771(config, m_fdc, 16_MHz_XTAL / 16);

FLOPPY_CONNECTOR(config, m_floppy0, rm380z_floppies, "mds", floppy_image_device::default_mfm_floppy_formats).set_fixed(true);
FLOPPY_CONNECTOR(config, m_floppy1, rm380z_floppies, "mds", floppy_image_device::default_mfm_floppy_formats).set_fixed(true);

Expand All @@ -278,9 +277,18 @@ void rm380z_state::configure(machine_config &config)
keyboard.set_keyboard_callback(FUNC(rm380z_state::keyboard_put));
}

void rm380z_state_cos34::configure(machine_config &config)
void rm380z_state::fds_configure()
{
// FDS drives require a 2 MHz square wave clock frequency
m_fdc->set_unscaled_clock(16_MHz_XTAL / 8);
// change media type for floppy connectors
m_floppy0->set_default_option("fds");
m_floppy1->set_default_option("fds");
}

void rm380z_state_cos34::rm380z34e(machine_config &config)
{
rm380z_state::configure(config);
base_configure(config);

/* cassette */
CASSETTE(config, m_cassette);
Expand All @@ -294,34 +302,23 @@ void rm380z_state_cos34::configure(machine_config &config)
m_rocg->set_palette(m_palette);
}

void rm380z_state_cos34::configure_fds(machine_config &config)
void rm380z_state_cos40::rm380z(machine_config &config)
{
rm380z_state_cos34::configure(config);

m_floppy0->set_default_option("fds");
m_floppy1->set_default_option("fds");

// FDS drives require a 2 MHz square wave clock frequency
m_fdc->set_unscaled_clock(16_MHz_XTAL / 8);
}

void rm380z_state_cos40::configure(machine_config &config)
{
rm380z_state::configure(config);
base_configure(config);

SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.80);

m_screen->set_raw(16_MHz_XTAL, 1024, 0, 640, 312, 0, 240);
}

void rm380z_state_cos40_hrg::configure(machine_config &config)
void rm380z_state_cos40_hrg::rm380zhrg(machine_config &config)
{
rm380z_state_cos40::configure(config);
rm380z(config);

m_palette->set_init(FUNC(rm380z_state_cos40_hrg::palette_init)).set_entries(19);
}

void rm480z_state::configure(machine_config &config)
void rm480z_state::rm480z(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 16_MHz_XTAL / 4);
Expand Down Expand Up @@ -359,20 +356,36 @@ ROM_END

ROM_START( rm380z ) // COS 4.0B/M
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
// I'm not sure of how those ROMs have been dumped. I don't know if those are good dumps or not.
ROM_LOAD( "cos40b-m.bin", 0x0000, 0x1000, BAD_DUMP CRC(1f0b3a5c) SHA1(0b29cb2a3b7eaa3770b34f08c4fd42844f42700f) )
ROM_LOAD( "cos40b-m_f600-f9ff.bin", 0x1000, 0x0400, BAD_DUMP CRC(e3397d9d) SHA1(490a0c834b0da392daf782edc7d51ca8f0668b1a) )
ROM_LOAD( "cos40b-m_1c00-1dff.bin", 0x1400, 0x0200, BAD_DUMP CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff) )
ROM_LOAD( "cos40b-m.bin", 0x0000, 0x1000, CRC(1f0b3a5c) SHA1(0b29cb2a3b7eaa3770b34f08c4fd42844f42700f) )
ROM_LOAD( "cos40b-m_f600-f9ff.bin", 0x1000, 0x0400, CRC(e3397d9d) SHA1(490a0c834b0da392daf782edc7d51ca8f0668b1a) )
ROM_LOAD( "cos40b-m_1c00-1dff.bin", 0x1400, 0x0200, CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff) )
ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD( "c-gen-22.bin", 0x0000, 0x0800, CRC(1b67127f) SHA1(289a919871d30c5e832d22244bcac1dcfd544baa) )
ROM_END

ROM_START( rm380zhrg ) // COS 4.0B/M
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
// I'm not sure of how those ROMs have been dumped. I don't know if those are good dumps or not.
ROM_LOAD( "cos40b-m.bin", 0x0000, 0x1000, BAD_DUMP CRC(1f0b3a5c) SHA1(0b29cb2a3b7eaa3770b34f08c4fd42844f42700f) )
ROM_LOAD( "cos40b-m_f600-f9ff.bin", 0x1000, 0x0400, BAD_DUMP CRC(e3397d9d) SHA1(490a0c834b0da392daf782edc7d51ca8f0668b1a) )
ROM_LOAD( "cos40b-m_1c00-1dff.bin", 0x1400, 0x0200, BAD_DUMP CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff) )
ROM_LOAD( "cos40b-m.bin", 0x0000, 0x1000, CRC(1f0b3a5c) SHA1(0b29cb2a3b7eaa3770b34f08c4fd42844f42700f) )
ROM_LOAD( "cos40b-m_f600-f9ff.bin", 0x1000, 0x0400, CRC(e3397d9d) SHA1(490a0c834b0da392daf782edc7d51ca8f0668b1a) )
ROM_LOAD( "cos40b-m_1c00-1dff.bin", 0x1400, 0x0200, CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff) )
ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD( "c-gen-22.bin", 0x0000, 0x0800, CRC(1b67127f) SHA1(289a919871d30c5e832d22244bcac1dcfd544baa) )
ROM_END

ROM_START( rm380zf ) // COS 4.0B/F
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
ROM_LOAD( "cos40b-f.bin", 0x0000, 0x1000, CRC(c4110957) SHA1(08d924c7a152ca102585520a987051bcad3fca3f) )
ROM_LOAD( "cos40b-f_f600-f9ff.bin", 0x1000, 0x0400, CRC(3b983326) SHA1(4a5273ca196cb98f9bb262f3e8f13bf22c9ca11c) )
ROM_LOAD( "cos40b-f_1c00-1dff.bin", 0x1400, 0x0200, CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff) )
ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD( "c-gen-22.bin", 0x0000, 0x0800, CRC(1b67127f) SHA1(289a919871d30c5e832d22244bcac1dcfd544baa) )
ROM_END

ROM_START( rm380zfhrg ) // COS 4.0B/F
ROM_REGION( 0x10000, RM380Z_MAINCPU_TAG, 0 )
ROM_LOAD( "cos40b-f.bin", 0x0000, 0x1000, CRC(c4110957) SHA1(08d924c7a152ca102585520a987051bcad3fca3f) )
ROM_LOAD( "cos40b-f_f600-f9ff.bin", 0x1000, 0x0400, CRC(3b983326) SHA1(4a5273ca196cb98f9bb262f3e8f13bf22c9ca11c) )
ROM_LOAD( "cos40b-f_1c00-1dff.bin", 0x1400, 0x0200, CRC(0f759f44) SHA1(9689c1c1faa62c56def999cbedbbb0c8d928dcff) )
ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD( "c-gen-22.bin", 0x0000, 0x0800, CRC(1b67127f) SHA1(289a919871d30c5e832d22244bcac1dcfd544baa) )
ROM_END
Expand Down Expand Up @@ -401,10 +414,12 @@ ROM_END


/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP(1978, rm380z, 0, 0, configure, rm380z, rm380z_state_cos40, driver_device::empty_init, "Research Machines", "RM-380Z, COS 4.0B", 0)
COMP(1978, rm380zhrg, rm380z, 0, configure, rm380zhrg, rm380z_state_cos40_hrg, driver_device::empty_init, "Research Machines", "RM-380Z, COS 4.0B with HRG", 0)
COMP(1978, rm380z34d, rm380z, 0, configure_fds, rm380z, rm380z_state_cos34, driver_device::empty_init, "Research Machines", "RM-380Z, COS 3.4D", MACHINE_NO_SOUND_HW)
COMP(1978, rm380z34e, rm380z, 0, configure, rm380z, rm380z_state_cos34, driver_device::empty_init, "Research Machines", "RM-380Z, COS 3.4E", MACHINE_NO_SOUND_HW)
COMP(1981, rm480z, rm380z, 0, configure, rm380z, rm480z_state, driver_device::empty_init, "Research Machines", "LINK RM-480Z (set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP(1981, rm480za, rm380z, 0, configure, rm380z, rm480z_state, driver_device::empty_init, "Research Machines", "LINK RM-480Z (set 2)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP(1978, rm380z, 0, 0, rm380z, rm380z, rm380z_state_cos40, driver_device::empty_init, "Research Machines", "RM-380Z, COS 4.0B/M", 0)
COMP(1978, rm380zhrg, rm380z, 0, rm380zhrg, rm380zhrg, rm380z_state_cos40_hrg, driver_device::empty_init, "Research Machines", "RM-380Z, COS 4.0B/M with HRG", 0)
COMP(1978, rm380zf, 0, 0, rm380zf, rm380z, rm380z_state_cos40, driver_device::empty_init, "Research Machines", "RM-380Z, COS 4.0B/F", 0)
COMP(1978, rm380zfhrg, rm380zf, 0, rm380zfhrg, rm380zhrg, rm380z_state_cos40_hrg, driver_device::empty_init, "Research Machines", "RM-380Z, COS 4.0B/F with HRG", 0)
COMP(1978, rm380z34d, rm380z, 0, rm380z34d, rm380z, rm380z_state_cos34, driver_device::empty_init, "Research Machines", "RM-380Z, COS 3.4D/F", MACHINE_NO_SOUND_HW)
COMP(1978, rm380z34e, rm380z, 0, rm380z34e, rm380z, rm380z_state_cos34, driver_device::empty_init, "Research Machines", "RM-380Z, COS 3.4E/M", MACHINE_NO_SOUND_HW)
COMP(1981, rm480z, rm380z, 0, rm480z, rm380z, rm480z_state, driver_device::empty_init, "Research Machines", "LINK RM-480Z (set 1)", MACHINE_IS_SKELETON)
COMP(1981, rm480za, rm380z, 0, rm480za, rm380z, rm480z_state, driver_device::empty_init, "Research Machines", "LINK RM-480Z (set 2)", MACHINE_IS_SKELETON)
16 changes: 10 additions & 6 deletions src/mame/rm/rm380z.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ class rm380z_state : public driver_device
static inline constexpr int RM380Z_SCREENROWS = 24;
static inline constexpr int RM380Z_SCREENCOLS = 40;

void configure(machine_config &config);
void base_configure(machine_config &config);
void fds_configure();

void machine_reset() override;

Expand Down Expand Up @@ -110,8 +111,8 @@ class rm380z_state_cos34 : public rm380z_state
{
}

void configure(machine_config &config);
void configure_fds(machine_config &config);
void rm380z34e(machine_config &config);
void rm380z34d(machine_config &config) { rm380z34e(config); fds_configure(); }

protected:
void machine_reset() override;
Expand Down Expand Up @@ -155,7 +156,8 @@ class rm380z_state_cos40 : public rm380z_state
{
}

void configure(machine_config &config);
void rm380z(machine_config &config);
void rm380zf(machine_config &config) { rm380z(config); fds_configure(); }

protected:
template <int ROWS, int COLS>
Expand Down Expand Up @@ -219,7 +221,8 @@ class rm380z_state_cos40_hrg : public rm380z_state_cos40
{
}

void configure(machine_config &config);
void rm380zhrg(machine_config &config);
void rm380zfhrg(machine_config &config) { rm380zhrg(config); fds_configure(); }

DECLARE_INPUT_CHANGED_MEMBER(monitor_changed);

Expand Down Expand Up @@ -270,7 +273,8 @@ class rm480z_state : public rm380z_state_cos40
{
}

void configure(machine_config &config);
void rm480z(machine_config &config);
void rm480za(machine_config &config) { rm480z(config); }

protected:
void machine_reset() override;
Expand Down
Loading