mirror of
https://github.com/holub/mame
synced 2025-07-03 00:56:03 +03:00
mbee: merged the quickloads
This commit is contained in:
parent
e33183fc28
commit
6c7c3a3388
@ -682,8 +682,7 @@ void mbee_state::mbee(machine_config &config)
|
||||
m_crtc->set_on_update_addr_change_callback(FUNC(mbee_state::crtc_update_addr));
|
||||
m_crtc->out_vsync_callback().set(FUNC(mbee_state::crtc_vs));
|
||||
|
||||
QUICKLOAD(config, "quickload", "mwb,com,bee", attotime::from_seconds(3)).set_load_callback(FUNC(mbee_state::quickload_bee));
|
||||
QUICKLOAD(config, "quickload2", "bin", attotime::from_seconds(3)).set_load_callback(FUNC(mbee_state::quickload_bin));
|
||||
QUICKLOAD(config, "quickload", "mwb,com,bee,bin", attotime::from_seconds(3)).set_load_callback(FUNC(mbee_state::quickload_cb));
|
||||
|
||||
CENTRONICS(config, m_centronics, centronics_devices, nullptr);
|
||||
m_centronics->ack_handler().set(m_pio, FUNC(z80pio_device::strobe_a));
|
||||
@ -737,8 +736,7 @@ void mbee_state::mbeeic(machine_config &config)
|
||||
m_crtc->set_on_update_addr_change_callback(FUNC(mbee_state::crtc_update_addr));
|
||||
m_crtc->out_vsync_callback().set(FUNC(mbee_state::crtc_vs));
|
||||
|
||||
QUICKLOAD(config, "quickload", "mwb,com,bee", attotime::from_seconds(2)).set_load_callback(FUNC(mbee_state::quickload_bee));
|
||||
QUICKLOAD(config, "quickload2", "bin", attotime::from_seconds(2)).set_load_callback(FUNC(mbee_state::quickload_bin));
|
||||
QUICKLOAD(config, "quickload", "mwb,com,bee,bin", attotime::from_seconds(2)).set_load_callback(FUNC(mbee_state::quickload_cb));
|
||||
|
||||
CENTRONICS(config, m_centronics, centronics_devices, "printer");
|
||||
m_centronics->ack_handler().set(m_pio, FUNC(z80pio_device::strobe_a));
|
||||
@ -829,7 +827,6 @@ void mbee_state::mbeett(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &mbee_state::mbeett_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &mbee_state::mbeett_io);
|
||||
config.device_remove("quickload");
|
||||
config.device_remove("quickload2");
|
||||
TIMER(config, "newkb_timer").configure_periodic(FUNC(mbee_state::newkb_timer), attotime::from_hz(50));
|
||||
SCC8530(config, "scc", 4000000); // clock unknown
|
||||
}
|
||||
|
@ -115,8 +115,7 @@ private:
|
||||
void premium_palette(palette_device &palette) const;
|
||||
uint32_t screen_update_mbee(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(newkb_timer);
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_bee);
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_bin);
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
|
||||
WRITE_LINE_MEMBER(rtc_irq_w);
|
||||
WRITE_LINE_MEMBER(fdc_intrq_w);
|
||||
WRITE_LINE_MEMBER(fdc_drq_w);
|
||||
|
@ -574,16 +574,44 @@ bit 4,5 : (banking main ram) 0x10 = 128k; 0x20 = 256k
|
||||
|
||||
Quickload
|
||||
|
||||
These load the standard BIN format, as well
|
||||
This loads the standard BIN format, as well
|
||||
as BEE, COM and MWB files.
|
||||
|
||||
************************************************************/
|
||||
|
||||
QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_bee)
|
||||
QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_cb)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
bool autorun = BIT(m_io_config->read(), 0);
|
||||
if (image.is_filetype("bin"))
|
||||
{
|
||||
uint16_t execute_address, start_addr, end_addr;
|
||||
|
||||
/* load the binary into memory */
|
||||
if (z80bin_load_file(image, space, execute_address, start_addr, end_addr) != image_init_result::PASS)
|
||||
return image_init_result::FAIL;
|
||||
|
||||
/* is this file executable? */
|
||||
if (execute_address != 0xffff)
|
||||
{
|
||||
space.write_word(0xa6, execute_address); /* fix the EXEC command */
|
||||
|
||||
if (autorun)
|
||||
{
|
||||
space.write_word(0xa2, execute_address); /* fix warm-start vector to get around some copy-protections */
|
||||
m_maincpu->set_pc(execute_address);
|
||||
}
|
||||
else
|
||||
{
|
||||
space.write_word(0xa2, 0x8517);
|
||||
}
|
||||
}
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
uint16_t i, j;
|
||||
uint8_t data, sw = m_io_config->read() & 1; /* reading the config switch: 1 = autorun */
|
||||
uint8_t data;
|
||||
|
||||
size_t quickload_size = image.length();
|
||||
if (image.is_filetype("mwb"))
|
||||
@ -608,7 +636,7 @@ QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_bee)
|
||||
}
|
||||
}
|
||||
|
||||
if (sw)
|
||||
if (autorun)
|
||||
{
|
||||
space.write_word(0xa2,0x801e); /* fix warm-start vector to get around some copy-protections */
|
||||
m_maincpu->set_pc(0x801e);
|
||||
@ -616,7 +644,8 @@ QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_bee)
|
||||
else
|
||||
space.write_word(0xa2,0x8517);
|
||||
}
|
||||
else if (image.is_filetype("com"))
|
||||
else
|
||||
if (image.is_filetype("com"))
|
||||
{
|
||||
/* com files - most com files are just machine-language games with a wrapper and don't need cp/m to be present */
|
||||
for (i = 0; i < quickload_size; i++)
|
||||
@ -638,9 +667,11 @@ QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_bee)
|
||||
}
|
||||
}
|
||||
|
||||
if (sw) m_maincpu->set_pc(0x100);
|
||||
if (autorun)
|
||||
m_maincpu->set_pc(0x100);
|
||||
}
|
||||
else if (image.is_filetype("bee"))
|
||||
else
|
||||
if (image.is_filetype("bee"))
|
||||
{
|
||||
/* bee files - machine-language games that start at 0900 */
|
||||
for (i = 0; i < quickload_size; i++)
|
||||
@ -662,45 +693,10 @@ QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_bee)
|
||||
}
|
||||
}
|
||||
|
||||
if (sw) m_maincpu->set_pc(0x900);
|
||||
}
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
QUICKLOAD_LOAD_MEMBER( mbee_state::quickload_bin )
|
||||
-------------------------------------------------*/
|
||||
|
||||
QUICKLOAD_LOAD_MEMBER(mbee_state::quickload_bin)
|
||||
{
|
||||
uint16_t execute_address, start_addr, end_addr;
|
||||
int autorun;
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* load the binary into memory */
|
||||
if (z80bin_load_file(image, space, execute_address, start_addr, end_addr) != image_init_result::PASS)
|
||||
return image_init_result::FAIL;
|
||||
|
||||
/* is this file executable? */
|
||||
if (execute_address != 0xffff)
|
||||
{
|
||||
/* check to see if autorun is on */
|
||||
autorun = m_io_config->read() & 1;
|
||||
|
||||
space.write_word(0xa6, execute_address); /* fix the EXEC command */
|
||||
|
||||
if (autorun)
|
||||
{
|
||||
space.write_word(0xa2, execute_address); /* fix warm-start vector to get around some copy-protections */
|
||||
m_maincpu->set_pc(execute_address);
|
||||
}
|
||||
else
|
||||
{
|
||||
space.write_word(0xa2, 0x8517);
|
||||
}
|
||||
m_maincpu->set_pc(0x900);
|
||||
}
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user