diff options
| author | 2015-10-27 23:30:18 -0300 | |
|---|---|---|
| committer | 2015-10-27 23:30:18 -0300 | |
| commit | 2a3c1175704d54e95994737d60a3d7d37010500e (patch) | |
| tree | 09b2c51fa9b732b4cc2bc4c6630ae8107adb945e | |
| parent | 898b032f994261a0cbf2e63ab2cee959036afec6 (diff) | |
| parent | 9ae5afd70742fec2ef8cd2522b1d98edf96090af (diff) | |
Merge branch 'master' of https://github.com/mamedev/mame
51 files changed, 557 insertions, 178 deletions
diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml index ff39aebd57e..f29457fc8c8 100644 --- a/hash/spectrum_cass.xml +++ b/hash/spectrum_cass.xml @@ -797,9 +797,53 @@ </dataarea> </part> </software> - + <!-- V1.0 doesn't exist in Spanish? or Italian (translations were made after the 1.1 release) --> - + + <!-- what are these? were there unannounced updates at some point? check data, remove if just duplicate --> + <software name="castlvsia" cloneof="castlvsi"> + <description>Castlevania - Spectral Interlude (alt, English, 128K)</description> + <year>2015</year> + <publisher>Rewind</publisher> + <part name="cass" interface="spectrum_cass"> + <dataarea name="cass" size="126416"> + <rom name="castlevania_si_en.tap" size="126416" crc="c7fb2adf" sha1="22fdb537a3e4b3ed05aac82f34103212c179db4a" offset="0"/> + </dataarea> + </part> + </software> + + <software name="castlvsirua" cloneof="castlvsi"> + <description>Castlevania - Spectral Interlude (alt, Russian, 128K)</description> + <year>2015</year> + <publisher>Rewind</publisher> + <part name="cass" interface="spectrum_cass"> + <dataarea name="cass" size="127075"> + <rom name="castlevania_si_ru.tap" size="127075" crc="e4e9bd2a" sha1="8bae5e5d2e310335f3aba96b2a0ed6c5c447eb18" offset="0"/> + </dataarea> + </part> + </software> + + <software name="castlvsipla" cloneof="castlvsi"> + <description>Castlevania - Spectral Interlude (alt, Polish, 128K)</description> + <year>2015</year> + <publisher>Rewind</publisher> + <part name="cass" interface="spectrum_cass"> + <dataarea name="cass" size="127413"> + <rom name="castlevania_si_pl.tap" size="127413" crc="98e2c6a6" sha1="6eb777aa7c0c057cf04f3162e7e80f6c4286e406" offset="0"/> + </dataarea> + </part> + </software> + + <software name="castlvsiesa" cloneof="castlvsi"> + <description>Castlevania - Spectral Interlude (alt, Spanish, 128K)</description> + <year>2015</year> + <publisher>Rewind</publisher> + <part name="cass" interface="spectrum_cass"> + <dataarea name="cass" size="126973"> + <rom name="castlevania_si_es.tap" size="126973" crc="4479be59" sha1="c5c816d4b02526c37ea44cbac8d1836ca03fd2fe" offset="0"/> + </dataarea> + </part> + </software> </softwarelist> diff --git a/src/devices/cpu/avr8/avr8.c b/src/devices/cpu/avr8/avr8.c index ebd880af285..063526ff472 100644 --- a/src/devices/cpu/avr8/avr8.c +++ b/src/devices/cpu/avr8/avr8.c @@ -752,7 +752,6 @@ void avr8_device::device_start() m_io = &space(AS_IO); // register our state for the debugger - std::string tempstr; state_add(STATE_GENPC, "GENPC", m_shifted_pc).noshow(); state_add(STATE_GENFLAGS, "GENFLAGS", m_r[AVR8_REGIDX_SREG]).callimport().callexport().formatstr("%8s").noshow(); state_add(AVR8_SREG, "STATUS", m_r[AVR8_REGIDX_SREG]).mask(0xff); diff --git a/src/devices/cpu/dsp56k/pmove.h b/src/devices/cpu/dsp56k/pmove.h index 8e30a534073..cb1bbe0f6f5 100644 --- a/src/devices/cpu/dsp56k/pmove.h +++ b/src/devices/cpu/dsp56k/pmove.h @@ -315,8 +315,6 @@ public: { INT8 b; reg_id SD; - std::string args; - b = (char)(word0 & 0x00ff); decode_HHH_table(BITSn(word1,0x0e00), SD); assemble_reg_from_W_table(BITSn(word1,0x0100), 'X', SD, b, m_source, m_destination); diff --git a/src/devices/cpu/e132xs/e132xs.c b/src/devices/cpu/e132xs/e132xs.c index f714f6f8a6b..deb7eedc587 100644 --- a/src/devices/cpu/e132xs/e132xs.c +++ b/src/devices/cpu/e132xs/e132xs.c @@ -1562,7 +1562,6 @@ void hyperstone_device::init(int scale_mask) m_clock_scale_mask = scale_mask; // register our state for the debugger - std::string tempstr; state_add(STATE_GENPC, "GENPC", m_global_regs[0]).noshow(); state_add(STATE_GENFLAGS, "GENFLAGS", m_global_regs[1]).callimport().callexport().formatstr("%40s").noshow(); state_add(E132XS_PC, "PC", m_global_regs[0]).mask(0xffffffff); diff --git a/src/devices/cpu/esrip/esrip.c b/src/devices/cpu/esrip/esrip.c index fa7ab139b08..07abb25d053 100644 --- a/src/devices/cpu/esrip/esrip.c +++ b/src/devices/cpu/esrip/esrip.c @@ -193,7 +193,6 @@ void esrip_device::device_start() m_direct = &m_program->direct(); // register our state for the debugger - std::string tempstr; state_add(STATE_GENPC, "GENPC", m_rip_pc).noshow(); state_add(STATE_GENFLAGS, "GENFLAGS", m_status).callimport().callexport().formatstr("%8s").noshow(); state_add(ESRIP_PC, "PC:", m_rip_pc).mask(0xffff); diff --git a/src/devices/cpu/m6805/m6805.c b/src/devices/cpu/m6805/m6805.c index b7fc47c8dfc..f6de7d06351 100644 --- a/src/devices/cpu/m6805/m6805.c +++ b/src/devices/cpu/m6805/m6805.c @@ -424,7 +424,6 @@ void m6805_base_device::device_start() m_icountptr = &m_icount; // register our state for the debugger - std::string tempstr; state_add(STATE_GENPC, "GENPC", m_pc.w.l).noshow(); state_add(STATE_GENFLAGS, "GENFLAGS", m_cc).callimport().callexport().formatstr("%8s").noshow(); state_add(M6805_A, "A", m_a).mask(0xff); diff --git a/src/devices/cpu/ssem/ssem.c b/src/devices/cpu/ssem/ssem.c index aae760aa26d..0b2af498b95 100644 --- a/src/devices/cpu/ssem/ssem.c +++ b/src/devices/cpu/ssem/ssem.c @@ -100,7 +100,6 @@ void ssem_device::device_start() m_program = &space(AS_PROGRAM); // register our state for the debugger - std::string tempstr; state_add(STATE_GENPC, "GENPC", m_pc).noshow(); state_add(STATE_GENFLAGS, "GENFLAGS", m_halt).callimport().callexport().formatstr("%1s").noshow(); state_add(SSEM_PC, "PC", m_shifted_pc).mask(0xffff); diff --git a/src/devices/cpu/upd7725/upd7725.c b/src/devices/cpu/upd7725/upd7725.c index d422eae21b0..ce78b447f59 100644 --- a/src/devices/cpu/upd7725/upd7725.c +++ b/src/devices/cpu/upd7725/upd7725.c @@ -69,7 +69,6 @@ void necdsp_device::device_start() m_direct = &m_program->direct(); // register our state for the debugger - std::string tempstr; state_add(STATE_GENPC, "GENPC", regs.pc).noshow(); state_add(UPD7725_PC, "PC", regs.pc); state_add(UPD7725_RP, "RP", regs.rp); diff --git a/src/devices/machine/atahle.c b/src/devices/machine/atahle.c index 850ab39d34f..4bab8c790f5 100644 --- a/src/devices/machine/atahle.c +++ b/src/devices/machine/atahle.c @@ -470,8 +470,12 @@ void ata_hle_device::read_buffer_empty() if ((multi_word_dma_mode() >= 0) || (ultra_dma_mode() >= 0)) set_dmarq(CLEAR_LINE); - m_buffer_empty_timer->enable(true); - m_buffer_empty_timer->adjust(attotime::zero); + if (ultra_dma_mode() >= 0) { + m_buffer_empty_timer->enable(true); + m_buffer_empty_timer->adjust(attotime::zero); + } + else + fill_buffer(); } void ata_hle_device::write_buffer_full() diff --git a/src/devices/machine/r10696.c b/src/devices/machine/r10696.c index ab20caed731..819d31084e9 100644 --- a/src/devices/machine/r10696.c +++ b/src/devices/machine/r10696.c @@ -154,7 +154,7 @@ READ8_MEMBER( r10696_device::io_r ) io_a = m_iord(0); io_b = m_iord(1); io_c = m_iord(2); - data = (io_a | io_b | io_a) & 0x0f; + data = (io_a | io_b | io_c) & 0x0f; break; case 0x01: // Read Groups B | C io_b = m_iord(1); diff --git a/src/emu/diimage.c b/src/emu/diimage.c index e4c40167114..46544595475 100644 --- a/src/emu/diimage.c +++ b/src/emu/diimage.c @@ -758,7 +758,6 @@ bool device_image_interface::load_software(software_list_device &swlist, const c { std::string locationtag, breakstr("%"); const rom_entry *region; - std::string regiontag; bool retVal = FALSE; int warningcount = 0; for (region = start; region != NULL; region = rom_next_region(region)) diff --git a/src/emu/emuopts.c b/src/emu/emuopts.c index 148facf5cc4..0a71dd3afe5 100644 --- a/src/emu/emuopts.c +++ b/src/emu/emuopts.c @@ -582,7 +582,7 @@ const char *emu_options::sub_value(std::string &buffer, const char *name, const { std::string tmp = std::string(",").append(subname).append("="); buffer = value(name); - int pos = buffer.find(tmp.c_str()); + int pos = buffer.find(tmp); if (pos != -1) { int endpos = buffer.find_first_of(',', pos + 1); diff --git a/src/emu/info.c b/src/emu/info.c index 25ea424130f..8cdf12f1ded 100644 --- a/src/emu/info.c +++ b/src/emu/info.c @@ -645,7 +645,7 @@ void info_xml_creator::output_chips(device_t &device, const char *root_tag) if (strcmp(exec->device().tag(), device.tag())) { std::string newtag(exec->device().tag()), oldtag(":"); - newtag = newtag.substr(newtag.find(oldtag.append(root_tag).c_str()) + oldtag.length()); + newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); fprintf(m_output, "\t\t<chip"); fprintf(m_output, " type=\"cpu\""); @@ -663,7 +663,7 @@ void info_xml_creator::output_chips(device_t &device, const char *root_tag) if (strcmp(sound->device().tag(), device.tag())) { std::string newtag(sound->device().tag()), oldtag(":"); - newtag = newtag.substr(newtag.find(oldtag.append(root_tag).c_str()) + oldtag.length()); + newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); fprintf(m_output, "\t\t<chip"); fprintf(m_output, " type=\"audio\""); @@ -691,7 +691,7 @@ void info_xml_creator::output_display(device_t &device, const char *root_tag) if (strcmp(screendev->tag(), device.tag())) { std::string newtag(screendev->tag()), oldtag(":"); - newtag = newtag.substr(newtag.find(oldtag.append(root_tag).c_str()) + oldtag.length()); + newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); fprintf(m_output, "\t\t<display"); fprintf(m_output, " tag=\"%s\"", xml_normalize_string(newtag.c_str())); @@ -1097,7 +1097,7 @@ void info_xml_creator::output_switches(const ioport_list &portlist, const char * std::string output; std::string newtag(port->tag()), oldtag(":"); - newtag = newtag.substr(newtag.find(oldtag.append(root_tag).c_str()) + oldtag.length()); + newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); // output the switch name information std::string normalized_field_name(xml_normalize_string(field->name())); @@ -1228,7 +1228,7 @@ void info_xml_creator::output_images(device_t &device, const char *root_tag) if (strcmp(imagedev->device().tag(), device.tag())) { std::string newtag(imagedev->device().tag()), oldtag(":"); - newtag = newtag.substr(newtag.find(oldtag.append(root_tag).c_str()) + oldtag.length()); + newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); // print m_output device type fprintf(m_output, "\t\t<device type=\"%s\"", xml_normalize_string(imagedev->image_type_name())); @@ -1286,7 +1286,7 @@ void info_xml_creator::output_slots(device_t &device, const char *root_tag) if (strcmp(slot->device().tag(), device.tag())) { std::string newtag(slot->device().tag()), oldtag(":"); - newtag = newtag.substr(newtag.find(oldtag.append(root_tag).c_str()) + oldtag.length()); + newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); // print m_output device type fprintf(m_output, "\t\t<slot name=\"%s\">\n", xml_normalize_string(newtag.c_str())); diff --git a/src/emu/machine.c b/src/emu/machine.c index ae85784ed46..16f038e6eb9 100644 --- a/src/emu/machine.c +++ b/src/emu/machine.c @@ -206,7 +206,7 @@ TIMER_CALLBACK_MEMBER(running_machine::autoboot_callback) else if (strlen(options().autoboot_command())!=0) { std::string cmd = std::string(options().autoboot_command()); strreplace(cmd, "'", "\\'"); - std::string val = std::string("emu.keypost('").append(cmd.c_str()).append("')").c_str(); + std::string val = std::string("emu.keypost('").append(cmd).append("')"); manager().lua()->load_string(val.c_str()); } } @@ -563,7 +563,7 @@ std::string running_machine::get_statename(const char *option) // handle %d in the template (for image devices) std::string statename_dev("%d_"); - int pos = statename_str.find(statename_dev.c_str()); + int pos = statename_str.find(statename_dev); if (pos != -1) { diff --git a/src/emu/memory.c b/src/emu/memory.c index bf251912004..7a9e3688995 100644 --- a/src/emu/memory.c +++ b/src/emu/memory.c @@ -1929,8 +1929,6 @@ void address_space::populate_from_map(address_map *map) void address_space::populate_map_entry(const address_map_entry &entry, read_or_write readorwrite) { const map_handler_data &data = (readorwrite == ROW_READ) ? entry.m_read : entry.m_write; - std::string fulltag; - // based on the handler type, alter the bits, name, funcptr, and object switch (data.m_type) { diff --git a/src/emu/romload.c b/src/emu/romload.c index fe3104d7f8a..2e64fe20c58 100644 --- a/src/emu/romload.c +++ b/src/emu/romload.c @@ -675,7 +675,7 @@ static int open_rom_file(romload_private *romdata, const char *regiontag, const } // prepare locations where we have to load from: list/parentname & list/clonename - std::string swlist(tag1.c_str()); + std::string swlist(tag1); tag2.assign(swlist.append(tag4)); if (has_parent) { @@ -1076,7 +1076,7 @@ int open_disk_image(emu_options &options, const game_driver *gamedrv, const rom_ } // prepare locations where we have to load from: list/parentname (if any) & list/clonename - std::string swlist(tag1.c_str()); + std::string swlist(tag1); tag2.assign(swlist.append(tag4)); if (has_parent) { diff --git a/src/emu/softlist.c b/src/emu/softlist.c index c2e8dba671a..c90bb6cccdc 100644 --- a/src/emu/softlist.c +++ b/src/emu/softlist.c @@ -158,7 +158,7 @@ bool software_part::is_compatible(const software_list_device &swlistdev) const for (int start = 0, end = filt.find_first_of(',',start); end != -1; start = end + 1, end = filt.find_first_of(',', start)) { std::string token(filt, start, end - start + 1); - if (comp.find(token.c_str()) != -1) + if (comp.find(token) != -1) return true; } return false; @@ -181,7 +181,7 @@ bool software_part::matches_interface(const char *interface_list) const // then add a comma to the end of our interface and return true if we find it in the list string std::string our_interface = std::string(m_interface).append(","); - return (interfaces.find(our_interface.c_str()) != -1); + return (interfaces.find(our_interface) != -1); } diff --git a/src/emu/ui/filemngr.c b/src/emu/ui/filemngr.c index 5e02b657cd0..55070364014 100644 --- a/src/emu/ui/filemngr.c +++ b/src/emu/ui/filemngr.c @@ -104,7 +104,6 @@ void ui_menu_file_manager::populate() { std::string buffer, tmp_inst, tmp_name; bool first_entry = true; - std::string prev_owner; if (!m_warnings.empty()) { diff --git a/src/emu/ui/inputmap.c b/src/emu/ui/inputmap.c index 9aa63fdcec9..375c59075b6 100644 --- a/src/emu/ui/inputmap.c +++ b/src/emu/ui/inputmap.c @@ -91,7 +91,6 @@ void ui_menu_input_general::populate() { input_item_data *itemlist = NULL; int suborder[SEQ_TYPE_TOTAL]; - std::string tempstring; int sortorder = 1; /* create a mini lookup table for sort order based on sequence type */ @@ -154,7 +153,6 @@ void ui_menu_input_specific::populate() { input_item_data *itemlist = NULL; int suborder[SEQ_TYPE_TOTAL]; - std::string tempstring; int port_count = 0; /* create a mini lookup table for sort order based on sequence type */ diff --git a/src/emu/validity.c b/src/emu/validity.c index 7dbe67206a0..45f39ff444f 100644 --- a/src/emu/validity.c +++ b/src/emu/validity.c @@ -196,7 +196,6 @@ bool validity_checker::check_all() // if we had warnings or errors, output if (m_errors > 0 || m_warnings > 0) { - std::string tempstr; output_via_delegate(OSD_OUTPUT_CHANNEL_ERROR, "Core: %d errors, %d warnings\n", m_errors, m_warnings); if (m_errors > 0) { diff --git a/src/emu/video.c b/src/emu/video.c index adc2888b2e7..bdeb0d33faf 100644 --- a/src/emu/video.c +++ b/src/emu/video.c @@ -1126,7 +1126,7 @@ file_error video_manager::open_next(emu_file &file, const char *extension) // handle %d in the template (for image devices) std::string snapdev("%d_"); - int pos = snapstr.find(snapdev.c_str()); + int pos = snapstr.find(snapdev); if (pos != -1) { diff --git a/src/lib/formats/tzx_cas.c b/src/lib/formats/tzx_cas.c index 6037c200122..5c8d79a636c 100644 --- a/src/lib/formats/tzx_cas.c +++ b/src/lib/formats/tzx_cas.c @@ -296,6 +296,44 @@ static int tzx_cas_handle_block( INT16 **buffer, const UINT8 *bytes, int pause, return size; } +static int tzx_handle_direct(INT16 **buffer, const UINT8 *bytes, int pause, int data_size, int tstates, int bits_in_last_byte) +{ + int size = 0; + int samples = tcycles_to_samplecount(tstates); + + /* data */ + for (int data_index = 0; data_index < data_size; data_index++) + { + UINT8 byte = bytes[data_index]; + int bits_to_go = (data_index == (data_size - 1)) ? bits_in_last_byte : 8; + + for ( ; bits_to_go > 0; byte <<= 1, bits_to_go--) + { + if (byte & 0x80) wave_data = WAVE_HIGH; + else wave_data = WAVE_LOW; + + tzx_output_wave(buffer, samples); + size += samples; + + } + } + + /* pause */ + if (pause > 0) + { + int start_pause_samples = millisec_to_samplecount(1); + int rest_pause_samples = millisec_to_samplecount(pause - 1); + + tzx_output_wave(buffer, start_pause_samples); + size += start_pause_samples; + wave_data = WAVE_LOW; + tzx_output_wave(buffer, rest_pause_samples); + size += rest_pause_samples; + } + return size; +} + + static void ascii_block_common_log( const char *block_type_string, UINT8 block_type ) { LOG_FORMATS("%s (type %02x) encountered.\n", block_type_string, block_type); @@ -343,7 +381,7 @@ static int tzx_cas_do_work( INT16 **buffer ) int bit0, bit1, bits_in_last_byte; UINT8 *cur_block = blocks[current_block]; UINT8 block_type = cur_block[0]; - + UINT16 tstates = 0; /* Uncomment this to include into error.log a list of the types each block */ LOG_FORMATS("tzx_cas_fill_wave: block %d, block_type %02x\n", current_block, block_type); @@ -516,9 +554,13 @@ static int tzx_cas_do_work( INT16 **buffer ) current_block++; break; - case 0x15: /* Direct Recording */ + case 0x15: /* Direct Recording */ // used on 'bombscar' in the cpc_cass list // having this missing is fatal - printf("Unsupported block type (0x15 - Direct Recording) encountered.\n"); + tstates = cur_block[1] + (cur_block[2] << 8); + pause_time= cur_block[3] + (cur_block[4] << 8); + bits_in_last_byte = cur_block[5]; + data_size = cur_block[6] + (cur_block[7] << 8) + (cur_block[8] << 16); + size += tzx_handle_direct(buffer, &cur_block[9], pause_time, data_size, tstates, bits_in_last_byte); current_block++; break; diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index cb4b29d79f2..1b3c3c25888 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -2870,6 +2870,7 @@ pacslot // (c) 1996 Namco ppsatan // (c) 1996 <unknown> ddonpach // (c) 1997 Atlus/Cave ddonpachj // (c) 1997 Atlus/Cave +ddonpacha // hack dfeveron // (c) 1998 Cave + Nihon System license feversos // (c) 1998 Cave + Nihon System license esprade // (c) 1998 Atlus/Cave @@ -10185,8 +10186,16 @@ svg // (c) 2003 Spectral vs Generation svgtw svgpcb // ket // (c) 2002 Ketsui +ket1 // keta // ketb // +ketarr // hack +ketarr151 // hack +ketarr15 // hack +ketarr10 // hack +ketarrs151 // hack +ketarrs15 // hack +ketarrf // hack ddpdoj // (c) 2002 DoDonPachi Dai-Ou-Jou ddpdoja // ddpdojb // diff --git a/src/mame/drivers/beathead.c b/src/mame/drivers/beathead.c index 66f981626c4..1d6dbe3335c 100644 --- a/src/mame/drivers/beathead.c +++ b/src/mame/drivers/beathead.c @@ -120,7 +120,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(beathead_state::scanline_callback) int scanline = param; /* update the video */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* on scanline zero, clear any halt condition */ if (scanline == 0) diff --git a/src/mame/drivers/cardline.c b/src/mame/drivers/cardline.c index 8f2dd4c5bad..2eda29b5910 100644 --- a/src/mame/drivers/cardline.c +++ b/src/mame/drivers/cardline.c @@ -139,7 +139,8 @@ WRITE_LINE_MEMBER(cardline_state::hsync_changed) { /* update any video up to the current scanline */ m_hsync_q = (state ? 0x00 : 0x10); - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); } WRITE_LINE_MEMBER(cardline_state::vsync_changed) diff --git a/src/mame/drivers/cave.c b/src/mame/drivers/cave.c index 00cacc0285c..eb3e7f32db7 100644 --- a/src/mame/drivers/cave.c +++ b/src/mame/drivers/cave.c @@ -72,17 +72,6 @@ Versions known to exist but not dumped: PCBs were shown running (and could be played) at a Cave fan show known as Cave Festival 2006. There are videos of the game being played floating around the internet and on YouTube. AKA DDP-CV or DDP BLUE ROM - Dodonpachi Arrange: This version is a hack by trap15 and ment to be a tribute to the game. It is neither a - long lost version or official release from Cave and therefore not suitable for MAME. - - Known rom version 1.1: - File CRC32 SHA1 - --------------------------------------------------------- - u27.bin 44b899ae 798ec437d861b94fcd90c99a7015dd420887c788 - u26.bin 727a09a8 91876386855f19e8a3d8d1df71dfe9b3d98e9ea9 - u51.bin 0f3e5148 3016f4d075940feae691389606cd2aa7ac53849e - u62.bin 42e4c6c5 4d282f7592f5fc5e11839c57f39cae20b8422aa1 - ***************************************************************************/ #include "emu.h" @@ -3162,6 +3151,34 @@ ROM_START( ddonpachj ) ROM_END +ROM_START( ddonpacha ) + ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "arrange_u27.bin", 0x000000, 0x080000, CRC(44b899ae) SHA1(798ec437d861b94fcd90c99a7015dd420887c788) ) + ROM_LOAD16_BYTE( "arrange_u26.bin", 0x000001, 0x080000, CRC(727a09a8) SHA1(91876386855f19e8a3d8d1df71dfe9b3d98e9ea9) ) + + ROM_REGION( 0x800000 * 2, "sprites0", 0 ) /* Sprites: * 2 */ + ROM_LOAD( "u50.bin", 0x000000, 0x200000, CRC(14b260ec) SHA1(33bda210302428d5500115d0c7a839cdfcb67d17) ) + ROM_LOAD( "arrange_u51.bin", 0x200000, 0x200000, CRC(0f3e5148) SHA1(3016f4d075940feae691389606cd2aa7ac53849e) ) + ROM_LOAD( "u52.bin", 0x400000, 0x200000, CRC(02492ee0) SHA1(64d9cc64a4ad189a8b03cf6a749ddb732b4a0014) ) + ROM_LOAD( "u53.bin", 0x600000, 0x200000, CRC(cb4c10f0) SHA1(a622e8bd0c938b5d38b392b247400b744d8be288) ) + + ROM_REGION( 0x200000, "layer0", 0 ) /* Layer 0 */ + ROM_LOAD( "u60.bin", 0x000000, 0x200000, CRC(903096a7) SHA1(a243e903fef7c4a7b71383263e82e42acd869261) ) + + ROM_REGION( 0x200000, "layer1", 0 ) /* Layer 1 */ + ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(d89b7631) SHA1(a66bb4955ca58fab8973ca37a0f971e9a67ce017) ) + + ROM_REGION( 0x200000, "layer2", 0 ) /* Layer 2 */ + ROM_LOAD( "arrange_u62.bin", 0x000000, 0x200000, CRC(42e4c6c5) SHA1(4d282f7592f5fc5e11839c57f39cae20b8422aa1) ) + + ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */ + ROM_LOAD( "u6.bin", 0x000000, 0x200000, CRC(9dfdafaf) SHA1(f5cb450cdc78a20c3a74c6dac05c9ac3cba08327) ) + ROM_LOAD( "u7.bin", 0x200000, 0x200000, CRC(795b17d5) SHA1(cbfc29f1df9600c82e0fdae00edd00da5b73e14c) ) + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "eeprom-ddonpach.bin", 0x0000, 0x0080, CRC(2df16438) SHA1(4881b70589a97e2420feb6d6e6737273beeff303) ) +ROM_END + /*************************************************************************** Donpachi @@ -5043,6 +5060,9 @@ GAME( 1996, ppsatan, 0, ppsatan, ppsatan, cave_state, ppsatan, ROT0 GAME( 1997, ddonpach, 0, ddonpach, cave, cave_state, ddonpach, ROT270, "Cave (Atlus license)", "DoDonPachi (International, Master Ver. 97/02/05)", MACHINE_SUPPORTS_SAVE ) GAME( 1997, ddonpachj, ddonpach, ddonpach, cave, cave_state, ddonpach, ROT270, "Cave (Atlus license)", "DoDonPachi (Japan, Master Ver. 97/02/05)", MACHINE_SUPPORTS_SAVE ) +// NOT an official CAVE release, but several PCBs have been converted to it and used on location. +GAME( 2012, ddonpacha, ddonpach, ddonpach, cave, cave_state, ddonpach, ROT270, "hack (trap15)", "DoDonPachi (2012/02/12 Arrange Ver. 1.1) (hack)", MACHINE_SUPPORTS_SAVE ) + GAME( 1998, dfeveron, feversos, dfeveron, cave, cave_state, dfeveron, ROT270, "Cave (Nihon System license)", "Dangun Feveron (Japan, Ver. 98/09/17)", MACHINE_SUPPORTS_SAVE ) GAME( 1998, feversos, 0, dfeveron, cave, cave_state, feversos, ROT270, "Cave (Nihon System license)", "Fever SOS (International, Ver. 98/09/25)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/cubeqst.c b/src/mame/drivers/cubeqst.c index d11cf9ead2a..837e77c9a9f 100644 --- a/src/mame/drivers/cubeqst.c +++ b/src/mame/drivers/cubeqst.c @@ -101,7 +101,9 @@ void cubeqst_state::video_start() WRITE16_MEMBER(cubeqst_state::palette_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + COMBINE_DATA(&m_generic_paletteram_16[offset]); } diff --git a/src/mame/drivers/firefox.c b/src/mame/drivers/firefox.c index 7d18687fed4..d77ee4b6a39 100644 --- a/src/mame/drivers/firefox.c +++ b/src/mame/drivers/firefox.c @@ -267,7 +267,8 @@ UINT32 firefox_state::screen_update_firefox(screen_device &screen, bitmap_rgb32 TIMER_DEVICE_CALLBACK_MEMBER(firefox_state::video_timer_callback) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE ); } diff --git a/src/mame/drivers/galaxian.c b/src/mame/drivers/galaxian.c index bcd1651c2c7..446e3b310b7 100644 --- a/src/mame/drivers/galaxian.c +++ b/src/mame/drivers/galaxian.c @@ -5235,7 +5235,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(galaxian_state::timefgtr_scanline) // change spriteram base per each 64-line part of the screen if ((split & 0x3f) == 0) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_sprites_base = 0x40 | (split << 2 & 0x300); } } diff --git a/src/mame/drivers/merit.c b/src/mame/drivers/merit.c index 7131d099cc5..2983b49aeac 100644 --- a/src/mame/drivers/merit.c +++ b/src/mame/drivers/merit.c @@ -232,7 +232,8 @@ WRITE8_MEMBER(merit_state::palette_w) { int co; - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); data &= 0x0f; co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07); @@ -305,7 +306,8 @@ MC6845_UPDATE_ROW( merit_state::crtc_update_row ) WRITE_LINE_MEMBER(merit_state::hsync_changed) { /* update any video up to the current scanline */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); } WRITE_LINE_MEMBER(merit_state::vsync_changed) diff --git a/src/mame/drivers/osborne1.c b/src/mame/drivers/osborne1.c index dc9b61bf547..6bc318190c3 100644 --- a/src/mame/drivers/osborne1.c +++ b/src/mame/drivers/osborne1.c @@ -10,28 +10,35 @@ Bank 1 simply consists of 64KB of RAM. The upper 4KB is used for the lower 8 bit of video RAM entries. Bank 2 holds the BIOS ROM and I/O area. Only addresses 0000-3FFF are used -by bank 2. Bank 2 is divided as follows: -3000-3FFF Unused +by bank 2 (4000-FFFF mirrors bank 1). Bank 2 is divided as follows: +3000-3FFF Nominally unused but acts as mirror of 2000-2FFF 2C00-2C03 Video PIA 2A00-2A01 Serial interface 2900-2903 488 PIA +2400-2400 SCREEN-PAC (if present) 2201-2280 Keyboard 2100-2103 Floppy -1000-1FFF Unused +1000-1FFF Nominally unused but acts as read mirror of BIOS ROM 0000-0FFF BIOS ROM +The logic is actually quite sloppy, and will cause bus fighting under many +circumstances since it doesn't actually check all four bits, just that two +are in the desired state. + Bank 3 has the ninth bit needed to complete the full Video RAM. These bits are stored at F000-FFFF. Only the highest bit is used. On bootup bank 2 is active. -The actual banking is done through I/O ports 00-03. -00 - Have both bank 2 and bank 1 active. This seems to be the power up default. -01 - Only have bank 1 active. -02 - Have both bank 2 and bank 3 active. (Not 100% sure, also bank 1 from 4000-EFFF?) -03 - Have both bank 2 and bank 1 active. +Banking is controlled by writes to I/O space. Only two low address bits are +used, and the value on the data bus is completley ignored. +00 - Activate bank 2 (also triggered by CPU reset) +01 - Activate bank 1 +02 - Set BIT 9 signal (map bank 3 into F000-FFFF) +03 - Clear BIT 9 signal (map bank 1/2 into F000-FFFF) TODO: + - Implement serial port - Verify frequency of the beep/audio alarm. ***************************************************************************/ @@ -45,17 +52,16 @@ TODO: static ADDRESS_MAP_START( osborne1_mem, AS_PROGRAM, 8, osborne1_state ) AM_RANGE( 0x0000, 0x0FFF ) AM_READ_BANK("bank1") AM_WRITE( osborne1_0000_w ) AM_RANGE( 0x1000, 0x1FFF ) AM_READ_BANK("bank2") AM_WRITE( osborne1_1000_w ) - AM_RANGE( 0x2000, 0x2FFF ) AM_READWRITE( osborne1_2000_r, osborne1_2000_w ) - AM_RANGE( 0x3000, 0x3FFF ) AM_READ_BANK("bank3") AM_WRITE( osborne1_3000_w ) + AM_RANGE( 0x2000, 0x3FFF ) AM_READWRITE( osborne1_2000_r, osborne1_2000_w ) AM_RANGE( 0x4000, 0xEFFF ) AM_RAM - AM_RANGE( 0xF000, 0xFFFF ) AM_READ_BANK("bank4") AM_WRITE( osborne1_videoram_w ) + AM_RANGE( 0xF000, 0xFFFF ) AM_READ_BANK("bank3") AM_WRITE( osborne1_videoram_w ) ADDRESS_MAP_END static ADDRESS_MAP_START( osborne1_io, AS_IO, 8, osborne1_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE( 0x00, 0x03 ) AM_WRITE( osborne1_bankswitch_w ) + AM_RANGE( 0x00, 0xff ) AM_WRITE( osborne1_bankswitch_w ) ADDRESS_MAP_END diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c index b8a74f70d20..cf117d01f23 100644 --- a/src/mame/drivers/pgm.c +++ b/src/mame/drivers/pgm.c @@ -3904,8 +3904,33 @@ ROM_START( ket ) ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ /* doesn't use a separate BIOS rom */ ROM_LOAD16_WORD_SWAP( "ketsui_v100.u38", 0x000000, 0x200000, CRC(dfe62f3b) SHA1(baa58d1ce47a707f84f65779ac0689894793e9d9) ) - // an alt version of this rom exists with 0xff fill in the unused area after 0x1443bc rather than random data like the one above, there are no code changes. - //ROM_LOAD16_WORD_SWAP( "ketsui_v100.u38", 0x000000, 0x200000, CRC(e140f8a4) SHA1(34fd25f8896935503d7537e89a4cd174e8995070) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + +ROM_START( ket1 ) // only difference between this and ket1 is the rom fill on the unused area + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketsui_v100_alt_fill.u38", 0x000000, 0x200000, CRC(e140f8a4) SHA1(34fd25f8896935503d7537e89a4cd174e8995070) ) ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) @@ -3983,6 +4008,195 @@ ROM_START( ketb ) ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) ROM_END + +ROM_START( ketarr10 ) + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketarr_v100.u38", 0x000000, 0x200000, CRC(d4c7a8ab) SHA1(65d104d17bd4fd03a2b44297a003ba03d746c7ee) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + + +ROM_START( ketarrf ) + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketarrf_v100.u38", 0x000000, 0x200000, CRC(6ad17aa4) SHA1(791bd1a107433a3811c8a79ea26a73e66ddd296f) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + +ROM_START( ketarr15 ) + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketarr15_v100.u38", 0x000000, 0x200000, CRC(552a7d95) SHA1(4f3fb13f34d58a7482e1d26623d38aa0b54ca8dd) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + +ROM_START( ketarrs15 ) + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketarrs15_v100.u38", 0x000000, 0x200000, CRC(a95e71e0) SHA1(182c12e3581ebb20176d8abca41ee62aadcd63e0) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + +ROM_START( ketarr151 ) + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketarr151_v100.u38", 0x000000, 0x200000, CRC(2b7c030d) SHA1(9aaba1242d7ce29915a31d40341da82985927f9d) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + +ROM_START( ketarrs151 ) + ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ + /* doesn't use a separate BIOS rom */ + ROM_LOAD16_WORD_SWAP( "ketarrs151_v100.u38", 0x000000, 0x200000, CRC(35c984e4) SHA1(d4517f318de0c40a3b30e41374f33bb355581434) ) + + ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */ + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) + + ROM_REGION( 0xc00000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */ + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // same as standard PGM text bios - surface scratched to remove details + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) /* Sprite Colour Data */ + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */ + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) /* Samples - (8 bit mono 11025Hz) - */ + /* there is a position for the PGM audio bios rom, but it's unpopulated, and the M of PGM has been scratched off the PCB */ + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + +ROM_START( ketarr ) + ROM_REGION( 0x600000, "maincpu", 0 ) + ROM_LOAD16_WORD_SWAP( "ketarr17_v100.u38", 0x000000, 0x200000, CRC(2cb80b89) SHA1(e1aa072b8344890486e11795e02703aa2d234bb1) ) + + ROM_REGION( 0x4000, "prot", 0 ) + ROM_LOAD( "ket_igs027a.bin", 0x000000, 0x04000, CRC(ab54d286) SHA1(897256b6709e1a4da9daba92b6bde39ccfccd8c1) ) + + ROM_REGION( 0xc00000, "tiles", 0 ) + ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) + ROM_LOAD( "t04701w064.u19", 0x180000, 0x800000, CRC(2665b041) SHA1(fb1107778b66f2af0de77ac82e1ee2902f53a959) ) //text-1 + + ROM_REGION( 0x1000000, "sprcol", 0 ) + ROM_LOAD( "a04701w064.u7", 0x0000000, 0x0800000, CRC(5ef1b94b) SHA1(f10dfa46e0a4d297c3a856aea5b49d648f98935c) ) //image-1 + ROM_LOAD( "a04702w064.u8", 0x0800000, 0x0800000, CRC(26d6da7f) SHA1(f20e07a7994f41b5ed917f8b0119dc5542f3541c) ) //image-2 + + ROM_REGION( 0x0800000, "sprmask", 0 ) + ROM_LOAD( "b04701w064.u1", 0x0000000, 0x0800000, CRC(1bec008d) SHA1(07d117dc2eebb35727fb18a7c563acbaf25a8d36) ) //bitmap-1 + + ROM_REGION( 0x800000, "ics", ROMREGION_ERASE00 ) + ROM_LOAD( "m04701b032.u17", 0x400000, 0x400000, CRC(b46e22d1) SHA1(670853dc485942fb96380568494bdf3235f446ee) ) //music-1 + + ROM_REGION( 0x20000, "sram", 0 ) /* default settings */ + ROM_LOAD( "ket_defaults.nv", 0x0000000, 0x020000, CRC(3ca892d8) SHA1(67430df5217e453ae8140c5653deeadfad8fa684) ) +ROM_END + ROM_START( espgal ) ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */ /* doesn't use a separate BIOS rom */ @@ -4312,10 +4526,31 @@ GAME( 2002, ddpdojblk, ddpdoj, pgm_arm_type1_cave, pgm, pgm_arm_type1_s GAME( 2002, ddpdojblka, ddpdoj, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ddp3, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Ou-Jou (2002.10.07 Black Ver)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // Displays "2002.04.05.Master Ver" (old) or "2002.10.07 Black Ver" (new) // the exact text of the 'version' shows which revision of the game it is; the newest has 2 '.' symbols in the string, the oldest, none. +// the only difference between 'ket' and 'ket1' is the ROM fill at 0x1443bc-0x1c88cd, on ket1 it seems to be randomized / garbage data, on ket it's all 0xff, both have been seen on more than one PCB. GAME( 2002, ket, 0, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "Cave (AMI license)", "Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 2002, ket1, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "Cave (AMI license)", "Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.) (alt rom fill)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 2002, keta, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "Cave (AMI license)", "Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver.)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 2002, ketb, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "Cave (AMI license)", "Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +// these are modern hacks, some of them have been seen on original PCBs, also reportedly on a bootleg PCB with mostly original components but the ARM replaced with a custom chip. +// this is a significantly reworked version of the game +GAME( 2014, ketarr, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2014/07/16 ARRANGE 1.7 VER) (hack)", MACHINE_SUPPORTS_SAVE ) +GAME( 2012, ketarr151, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2012/06/26 ARRANGE 1.51 VER) (hack)", MACHINE_SUPPORTS_SAVE ) // this apparently crashes on an original PGM PCB when displaying the text after starting a game, find out why and reproduce the issue in MAME. +GAME( 2012, ketarr15, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2012/06/26 ARRANGE 1.5 VER) (hack)", MACHINE_SUPPORTS_SAVE ) +GAME( 2012, ketarr10, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2012/04/17 ARRANGE VER) (hack)", MACHINE_SUPPORTS_SAVE ) + +// these simplify the scoring system +GAME( 2012, ketarrs151, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2012/06/27 MR.STOIC 1.51 VER) (hack)", MACHINE_SUPPORTS_SAVE ) +GAME( 2012, ketarrs15, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2012/06/27 MR.STOIC 1.5 VER) (hack)", MACHINE_SUPPORTS_SAVE ) + +// this has the 'programmed slowdown' removed. +GAME( 2012, ketarrf, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "hack (trap15)", "Ketsui: Kizuna Jigoku Tachi (2012/04/17 FAST. VER) (hack)", MACHINE_SUPPORTS_SAVE ) + +// this version is stupid, it just simulates what happens if the protection chip isn't returning proper values +// ROM_LOAD16_WORD_SWAP( "ketarrb_v100.u38", 0x000000, 0x200000, CRC(ec7a4f92) SHA1(6351fb386586956fbdb5f0730c481fb539cc267a) ) +// GAME( 2002, ketarrb, ket, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, ket, ROT270, "trap15", "Ketsui: Kizuna Jigoku Tachi (2012/04/17 BACK. VER)", MACHINE_SUPPORTS_SAVE ) + + GAME( 2003, espgal, 0, pgm_arm_type1_cave, pgm, pgm_arm_type1_state, espgal, ROT270, "Cave (AMI license)", "Espgaluda (2003/10/15 Master Ver)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // protection simulated, but should be correct diff --git a/src/mame/drivers/segac2.c b/src/mame/drivers/segac2.c index 4c0e62c1752..f738901900f 100644 --- a/src/mame/drivers/segac2.c +++ b/src/mame/drivers/segac2.c @@ -937,21 +937,21 @@ static INPUT_PORTS_START( sonicpop ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Relay") // relay (must be ON by default or machine will instantly give an 'assistance' error) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Relay") // relay (must be ON by default or machine will instantly give an 'assistance' error) - pressing this advances the stages of operation (from type select, and during the turning of the wheel) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Coinblock") // coinblock (inverted) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Sensor") // sensor + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Sensor") // sensor - causes an extra animation to play if you press it during attract and 'Sensor Advertise' dip is on PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Cup Select 1") // cup select 2 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Cup Select 2") // cup select 2 - pressing Cup Select 1 and 2 registers as 'Cup Select 3', I presume these are lines from the mechanical part. PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Cup Select 1") // cup select 1 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Handle B") // handle B PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Handle A") // handle A PORT_MODIFY("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Sold Out LED1") // sold out LED 1 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Sold Out LED1") // sold out LED 1 - are these actually output lines? PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_NAME("Sold Out LED2") // sold out LED 2 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_NAME("Sold Out LED3") // sold out LED 3 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Sold Out SW2") // sold out SW 2 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Sold Out SW2") // sold out SW 2 - holding these while coining up will show popcorn as unavailable, pressing all 3 will fault the machine PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Sold Out SW3") // sold out SW 3 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Sold Out SW1") // sold out SW 1 diff --git a/src/mame/drivers/segas24.c b/src/mame/drivers/segas24.c index 7a3a5f76a51..34be9d6ba5d 100644 --- a/src/mame/drivers/segas24.c +++ b/src/mame/drivers/segas24.c @@ -878,8 +878,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_cb) if(irq_allow1 & (1 << IRQ_TIMER)) m_subcpu->set_input_line(IRQ_TIMER+1, ASSERT_LINE); - if(irq_tmode == 1 || irq_tmode == 2) - m_screen->update_now(); + if (irq_tmode == 1 || irq_tmode == 2) + { + // m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } } TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_clear_cb) diff --git a/src/mame/drivers/slotcarn.c b/src/mame/drivers/slotcarn.c index c5f0726a886..b1cedc60b39 100644 --- a/src/mame/drivers/slotcarn.c +++ b/src/mame/drivers/slotcarn.c @@ -82,7 +82,8 @@ WRITE8_MEMBER(slotcarn_state::palette_w) { int co; - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); data &= 0x0f; co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07); @@ -157,7 +158,8 @@ MC6845_UPDATE_ROW( slotcarn_state::crtc_update_row ) WRITE_LINE_MEMBER(slotcarn_state::hsync_changed) { /* update any video up to the current scanline */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); } WRITE_LINE_MEMBER(slotcarn_state::vsync_changed) diff --git a/src/mame/drivers/vicdual.c b/src/mame/drivers/vicdual.c index 73e7682a86e..d180791cf48 100644 --- a/src/mame/drivers/vicdual.c +++ b/src/mame/drivers/vicdual.c @@ -207,14 +207,16 @@ int vicdual_state::is_cabinet_color() WRITE8_MEMBER(vicdual_state::videoram_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_videoram[offset] = data; } WRITE8_MEMBER(vicdual_state::characterram_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_characterram[offset] = data; } diff --git a/src/mame/includes/osborne1.h b/src/mame/includes/osborne1.h index 1c0564b9dbb..2edf952c22c 100644 --- a/src/mame/includes/osborne1.h +++ b/src/mame/includes/osborne1.h @@ -51,7 +51,6 @@ public: m_bank1(*this, "bank1"), m_bank2(*this, "bank2"), m_bank3(*this, "bank3"), - m_bank4(*this, "bank4"), m_region_maincpu(*this, "maincpu") { } virtual void video_start(); @@ -74,7 +73,6 @@ public: DECLARE_WRITE8_MEMBER(osborne1_1000_w); DECLARE_READ8_MEMBER(osborne1_2000_r); DECLARE_WRITE8_MEMBER(osborne1_2000_w); - DECLARE_WRITE8_MEMBER(osborne1_3000_w); DECLARE_WRITE8_MEMBER(osborne1_videoram_w); DECLARE_WRITE8_MEMBER(osborne1_bankswitch_w); DECLARE_WRITE_LINE_MEMBER(ieee_pia_irq_a_func); @@ -87,9 +85,7 @@ public: DECLARE_DIRECT_UPDATE_MEMBER(osborne1_opbase); bool m_bank2_enabled; - bool m_bank3_enabled; - UINT8 *m_bank4_ptr; - UINT8 *m_empty_4K; + UINT8 m_bit_9; /* IRQ states */ bool m_pia_0_irq_state; bool m_pia_1_irq_state; @@ -123,7 +119,6 @@ protected: required_memory_bank m_bank1; required_memory_bank m_bank2; required_memory_bank m_bank3; - required_memory_bank m_bank4; required_memory_region m_region_maincpu; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); diff --git a/src/mame/machine/315-5881_crypt.c b/src/mame/machine/315-5881_crypt.c index 7997000400d..ec07d1c8380 100644 --- a/src/mame/machine/315-5881_crypt.c +++ b/src/mame/machine/315-5881_crypt.c @@ -47,7 +47,7 @@ void sega_315_5881_crypt_device::device_start() save_item(NAME(line_buffer_pos)); save_item(NAME(line_buffer_size)); - std::string skey = parameter("key").c_str(); + std::string skey = parameter("key"); if(!skey.empty()) key = strtoll(skey.c_str(), 0, 16); else diff --git a/src/mame/machine/naomim1.c b/src/mame/machine/naomim1.c index 86f0119f578..84d2db5ecef 100644 --- a/src/mame/machine/naomim1.c +++ b/src/mame/machine/naomim1.c @@ -32,7 +32,7 @@ void naomi_m1_board::device_start() { naomi_board::device_start(); - std::string skey = parameter("key").c_str(); + std::string skey = parameter("key"); if(!skey.empty()) key = strtoll(skey.c_str(), 0, 16); else diff --git a/src/mame/machine/osborne1.c b/src/mame/machine/osborne1.c index 960a6a0f4d5..dbaf276fbbf 100644 --- a/src/mame/machine/osborne1.c +++ b/src/mame/machine/osborne1.c @@ -24,7 +24,7 @@ be written to RAM if RAM was switched in. WRITE8_MEMBER( osborne1_state::osborne1_0000_w ) { /* Check whether regular RAM is enabled */ - if ( ! m_bank2_enabled || ( m_in_irq_handler && m_bankswitch == RAMMODE ) ) + if ( !m_bank2_enabled || ( m_in_irq_handler && m_bankswitch == RAMMODE) ) { m_ram->pointer()[ offset ] = data; } @@ -34,7 +34,7 @@ WRITE8_MEMBER( osborne1_state::osborne1_0000_w ) WRITE8_MEMBER( osborne1_state::osborne1_1000_w ) { /* Check whether regular RAM is enabled */ - if ( ! m_bank2_enabled || ( m_in_irq_handler && m_bankswitch == RAMMODE ) ) + if ( !m_bank2_enabled || ( m_in_irq_handler && m_bankswitch == RAMMODE) ) { m_ram->pointer()[ 0x1000 + offset ] = data; } @@ -46,13 +46,16 @@ READ8_MEMBER( osborne1_state::osborne1_2000_r ) UINT8 data = 0xFF; /* Check whether regular RAM is enabled */ - if ( ! m_bank2_enabled ) + if ( !m_bank2_enabled ) { data = m_ram->pointer()[ 0x2000 + offset ]; } else { - switch( offset & 0x0F00 ) + // This isn't really accurate - bus fighting will occur for many values + // since each peripheral only checks two bits. We just return 0xFF for + // any undocumented address. + switch ( offset & 0x0F00 ) { case 0x100: /* Floppy */ data = m_fdc->read( space, offset & 0x03 ); @@ -79,12 +82,12 @@ READ8_MEMBER( osborne1_state::osborne1_2000_r ) if (m_screen_pac) data &= 0xFB; break; case 0x900: /* IEEE488 PIA */ - data = m_pia0->read(space, offset & 0x03 ); + data = m_pia0->read(space, offset & 0x03); break; case 0xA00: /* Serial */ break; case 0xC00: /* Video PIA */ - data = m_pia1->read(space, offset & 0x03 ); + data = m_pia1->read(space, offset & 0x03); break; } } @@ -95,45 +98,26 @@ READ8_MEMBER( osborne1_state::osborne1_2000_r ) WRITE8_MEMBER( osborne1_state::osborne1_2000_w ) { /* Check whether regular RAM is enabled */ - if ( ! m_bank2_enabled ) + if ( !m_bank2_enabled || (m_in_irq_handler && m_bankswitch == RAMMODE) ) { m_ram->pointer()[ 0x2000 + offset ] = data; } else { - if ( m_in_irq_handler && m_bankswitch == RAMMODE ) - { - m_ram->pointer()[ 0x2000 + offset ] = data; - } /* Handle writes to the I/O area */ - switch( offset & 0x0F00 ) + if ( 0x100 == (offset & 0x900) ) /* Floppy */ + m_fdc->write(space, offset & 0x03, data); + if ( 0x400 == (offset & 0xC00) ) /* SCREEN-PAC */ { - case 0x100: /* Floppy */ - m_fdc->write(space, offset & 0x03, data ); - break; - case 0x400: /* SCREEN-PAC */ m_resolution = data & 0x01; m_hc_left = (data >> 1) & 0x01; - break; - case 0x900: /* IEEE488 PIA */ - m_pia0->write(space, offset & 0x03, data ); - break; - case 0xA00: /* Serial */ - break; - case 0xC00: /* Video PIA */ - m_pia1->write(space, offset & 0x03, data ); - break; } - } -} - - -WRITE8_MEMBER( osborne1_state::osborne1_3000_w ) -{ - /* Check whether regular RAM is enabled */ - if ( ! m_bank2_enabled || ( m_in_irq_handler && m_bankswitch == RAMMODE ) ) - { - m_ram->pointer()[ 0x3000 + offset ] = data; + if ( 0x900 == (offset & 0x900) ) /* IEEE488 PIA */ + m_pia0->write(space, offset & 0x03, data); + if ( 0xA00 == (offset & 0xA00) ) /* Serial */ + /* not implemented */; + if ( 0xC00 == (offset & 0xC00) ) /* Video PIA */ + m_pia1->write(space, offset & 0x03, data); } } @@ -141,49 +125,43 @@ WRITE8_MEMBER( osborne1_state::osborne1_3000_w ) WRITE8_MEMBER( osborne1_state::osborne1_videoram_w ) { /* Check whether the video attribute section is enabled */ - if ( m_bank3_enabled ) + if ( m_bit_9 ) data |= 0x7F; - m_bank4_ptr[offset] = data; + reinterpret_cast<UINT8 *>(m_bank3->base())[offset] = data; } WRITE8_MEMBER( osborne1_state::osborne1_bankswitch_w ) { - switch( offset ) + switch ( offset & 0x03 ) { case 0x00: m_bank2_enabled = 1; - m_bank3_enabled = 0; + m_bankswitch = 0x00; break; case 0x01: m_bank2_enabled = 0; - m_bank3_enabled = 0; + m_bankswitch = 0x01; break; case 0x02: - m_bank2_enabled = 1; - m_bank3_enabled = 1; + m_bit_9 = 1; break; case 0x03: - m_bank2_enabled = 1; - m_bank3_enabled = 0; + m_bit_9 = 0; break; } if ( m_bank2_enabled ) { - m_bank1->set_base(m_region_maincpu->base() ); - m_bank2->set_base(m_empty_4K ); - m_bank3->set_base(m_empty_4K ); + m_bank1->set_base(m_region_maincpu->base()); + m_bank2->set_base(m_region_maincpu->base()); } else { - m_bank1->set_base(m_ram->pointer() ); - m_bank2->set_base(m_ram->pointer() + 0x1000 ); - m_bank3->set_base(m_ram->pointer() + 0x3000 ); + m_bank1->set_base(m_ram->pointer()); + m_bank2->set_base(m_ram->pointer() + 0x1000); } - m_bank4_ptr = m_ram->pointer() + ( ( m_bank3_enabled ) ? 0x10000 : 0xF000 ); - m_bank4->set_base(m_bank4_ptr ); - m_bankswitch = offset; + m_bank3->set_base(m_ram->pointer() + (m_bit_9 ? 0x10000 : 0xF000)); m_in_irq_handler = 0; } @@ -394,7 +372,7 @@ TIMER_CALLBACK_MEMBER(osborne1_state::osborne1_video_callback) } } - if ( (ra==2) || (ra== 6) ) + if ( (ra==2) || (ra==6) ) { m_beep->set_state( m_beep_state ); } @@ -436,9 +414,6 @@ void osborne1_state::machine_reset() DRIVER_INIT_MEMBER(osborne1_state,osborne1) { - m_empty_4K = auto_alloc_array(machine(), UINT8, 0x1000 ); - memset( m_empty_4K, 0xFF, 0x1000 ); - /* Configure the 6850 ACIA */ // acia6850_config( 0, &osborne1_6850_config ); m_video_timer = timer_alloc(TIMER_VIDEO); diff --git a/src/mame/video/btoads.c b/src/mame/video/btoads.c index 8dbdec15400..7bbbfbcd014 100644 --- a/src/mame/video/btoads.c +++ b/src/mame/video/btoads.c @@ -93,7 +93,8 @@ WRITE16_MEMBER( btoads_state::display_control_w ) WRITE16_MEMBER( btoads_state::scroll0_w ) { /* allow multiple changes during display */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* upper bits are Y scroll, lower bits are X scroll */ if (ACCESSING_BITS_8_15) @@ -106,7 +107,8 @@ WRITE16_MEMBER( btoads_state::scroll0_w ) WRITE16_MEMBER( btoads_state::scroll1_w ) { /* allow multiple changes during display */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* upper bits are Y scroll, lower bits are X scroll */ if (ACCESSING_BITS_8_15) diff --git a/src/mame/video/cloak.c b/src/mame/video/cloak.c index f9138f25970..18551ff6b52 100644 --- a/src/mame/video/cloak.c +++ b/src/mame/video/cloak.c @@ -92,7 +92,9 @@ void cloak_state::set_current_bitmap_videoram_pointer() WRITE8_MEMBER(cloak_state::cloak_clearbmp_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + m_bitmap_videoram_selected = data & 0x01; set_current_bitmap_videoram_pointer(); diff --git a/src/mame/video/dkong.c b/src/mame/video/dkong.c index 1f8e700a2f1..484be075692 100644 --- a/src/mame/video/dkong.c +++ b/src/mame/video/dkong.c @@ -876,7 +876,8 @@ TIMER_CALLBACK_MEMBER(dkong_state::scanline_callback) radarscp_scanline(scanline); /* update any video up to the current scanline */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); scanline = (scanline+1) % VTOTAL; /* come back at the next appropriate scanline */ diff --git a/src/mame/video/galaxian.c b/src/mame/video/galaxian.c index ce800e92a83..1e84b9b0a9a 100644 --- a/src/mame/video/galaxian.c +++ b/src/mame/video/galaxian.c @@ -480,7 +480,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_videoram_w) { UINT8 *videoram = m_videoram; /* update any video up to the current scanline */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* store the data and mark the corresponding tile dirty */ videoram[offset] = data; @@ -491,7 +492,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_videoram_w) WRITE8_MEMBER(galaxian_state::galaxian_objram_w) { /* update any video up to the current scanline */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* store the data */ m_spriteram[offset] = data; @@ -641,7 +643,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_flip_screen_x_w) { if (m_flipscreen_x != (data & 0x01)) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* when the direction changes, we count a different number of clocks */ /* per frame, so we need to reset the origin of the stars to the current */ @@ -657,7 +660,9 @@ WRITE8_MEMBER(galaxian_state::galaxian_flip_screen_y_w) { if (m_flipscreen_y != (data & 0x01)) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + m_flipscreen_y = data & 0x01; m_bg_tilemap->set_flip((m_flipscreen_x ? TILEMAP_FLIPX : 0) | (m_flipscreen_y ? TILEMAP_FLIPY : 0)); } @@ -680,7 +685,10 @@ WRITE8_MEMBER(galaxian_state::galaxian_flip_screen_xy_w) WRITE8_MEMBER(galaxian_state::galaxian_stars_enable_w) { if ((m_stars_enabled ^ data) & 0x01) - m_screen->update_now(); + { +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } if (!m_stars_enabled && (data & 0x01)) { @@ -697,7 +705,10 @@ WRITE8_MEMBER(galaxian_state::galaxian_stars_enable_w) WRITE8_MEMBER(galaxian_state::scramble_background_enable_w) { if ((m_background_enable ^ data) & 0x01) - m_screen->update_now(); + { + // m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } m_background_enable = data & 0x01; } @@ -706,7 +717,10 @@ WRITE8_MEMBER(galaxian_state::scramble_background_enable_w) WRITE8_MEMBER(galaxian_state::scramble_background_red_w) { if ((m_background_red ^ data) & 0x01) - m_screen->update_now(); + { + // m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } m_background_red = data & 0x01; } @@ -715,7 +729,10 @@ WRITE8_MEMBER(galaxian_state::scramble_background_red_w) WRITE8_MEMBER(galaxian_state::scramble_background_green_w) { if ((m_background_green ^ data) & 0x01) - m_screen->update_now(); + { + // m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } m_background_green = data & 0x01; } @@ -724,7 +741,10 @@ WRITE8_MEMBER(galaxian_state::scramble_background_green_w) WRITE8_MEMBER(galaxian_state::scramble_background_blue_w) { if ((m_background_blue ^ data) & 0x01) - m_screen->update_now(); + { + // m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } m_background_blue = data & 0x01; } @@ -741,7 +761,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_gfxbank_w) { if (m_gfxbank[offset] != data) { - m_screen->update_now(); + //m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_gfxbank[offset] = data; m_bg_tilemap->mark_all_dirty(); } diff --git a/src/mame/video/gyruss.c b/src/mame/video/gyruss.c index 316a748a971..bf1038ac72b 100644 --- a/src/mame/video/gyruss.c +++ b/src/mame/video/gyruss.c @@ -93,7 +93,8 @@ PALETTE_INIT_MEMBER(gyruss_state, gyruss) WRITE8_MEMBER(gyruss_state::gyruss_spriteram_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_spriteram[offset] = data; } diff --git a/src/mame/video/itech8.c b/src/mame/video/itech8.c index 42a80eb9291..8920c8c423f 100644 --- a/src/mame/video/itech8.c +++ b/src/mame/video/itech8.c @@ -537,7 +537,8 @@ WRITE8_MEMBER(itech8_state::grmatch_palette_w) WRITE8_MEMBER(itech8_state::grmatch_xscroll_w) { /* update the X scroll value */ - m_screen->update_now(); + //m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_grmatch_xscroll = data; } diff --git a/src/mame/video/meadows.c b/src/mame/video/meadows.c index 45d2cedfd3a..d378f15a7cf 100644 --- a/src/mame/video/meadows.c +++ b/src/mame/video/meadows.c @@ -64,7 +64,8 @@ WRITE8_MEMBER(meadows_state::meadows_videoram_w) WRITE8_MEMBER(meadows_state::meadows_spriteram_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_spriteram[offset] = data; } diff --git a/src/mame/video/qix.c b/src/mame/video/qix.c index 53cacf4a472..5bd717ecbc3 100644 --- a/src/mame/video/qix.c +++ b/src/mame/video/qix.c @@ -99,7 +99,8 @@ WRITE8_MEMBER(qix_state::qix_videoram_w) { /* update the screen in case the game is writing "behind" the beam - Zookeeper likes to do this */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* add in the upper bit of the address latch */ offset += (m_videoram_address[0] & 0x80) << 8; @@ -113,7 +114,8 @@ WRITE8_MEMBER(qix_state::slither_videoram_w) { /* update the screen in case the game is writing "behind" the beam - Zookeeper likes to do this */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* add in the upper bit of the address latch */ offset += (m_videoram_address[0] & 0x80) << 8; @@ -150,7 +152,8 @@ READ8_MEMBER(qix_state::qix_addresslatch_r) WRITE8_MEMBER(qix_state::qix_addresslatch_w) { /* update the screen in case the game is writing "behind" the beam */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* compute the value at the address latch */ offset = (m_videoram_address[0] << 8) | m_videoram_address[1]; @@ -163,7 +166,8 @@ WRITE8_MEMBER(qix_state::qix_addresslatch_w) WRITE8_MEMBER(qix_state::slither_addresslatch_w) { /* update the screen in case the game is writing "behind" the beam */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); /* compute the value at the address latch */ offset = (m_videoram_address[0] << 8) | m_videoram_address[1]; @@ -191,7 +195,10 @@ WRITE8_MEMBER(qix_state::qix_paletteram_w) /* trigger an update if a currently visible pen has changed */ if (((offset >> 8) == m_palette_bank) && (old_data != data)) - m_screen->update_now(); + { + // m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } set_pen(offset); } @@ -202,7 +209,8 @@ WRITE8_MEMBER(qix_state::qix_palettebank_w) /* set the bank value */ if (m_palette_bank != (data & 3)) { - m_screen->update_now(); + //m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_palette_bank = data & 3; } diff --git a/src/mame/video/spacefb.c b/src/mame/video/spacefb.c index c663655dc32..94499a825c3 100644 --- a/src/mame/video/spacefb.c +++ b/src/mame/video/spacefb.c @@ -19,14 +19,16 @@ WRITE8_MEMBER(spacefb_state::port_0_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_port_0 = data; } WRITE8_MEMBER(spacefb_state::port_2_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_port_2 = data; } diff --git a/src/mame/video/system1.c b/src/mame/video/system1.c index b731529a82e..e88587e69ea 100644 --- a/src/mame/video/system1.c +++ b/src/mame/video/system1.c @@ -190,19 +190,22 @@ WRITE8_MEMBER(system1_state::system1_videomode_w) READ8_MEMBER(system1_state::system1_mixer_collision_r) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); return m_mix_collide[offset & 0x3f] | 0x7e | (m_mix_collide_summary << 7); } WRITE8_MEMBER(system1_state::system1_mixer_collision_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_mix_collide[offset & 0x3f] = 0; } WRITE8_MEMBER(system1_state::system1_mixer_collision_reset_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_mix_collide_summary = 0; } @@ -216,19 +219,22 @@ WRITE8_MEMBER(system1_state::system1_mixer_collision_reset_w) READ8_MEMBER(system1_state::system1_sprite_collision_r) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); return m_sprite_collide[offset & 0x3ff] | 0x7e | (m_sprite_collide_summary << 7); } WRITE8_MEMBER(system1_state::system1_sprite_collision_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_sprite_collide[offset & 0x3ff] = 0; } WRITE8_MEMBER(system1_state::system1_sprite_collision_reset_w) { - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_sprite_collide_summary = 0; } @@ -274,7 +280,10 @@ WRITE8_MEMBER(system1_state::system1_videoram_w) /* force a partial update if the page is changing */ if (m_tilemap_pages > 2 && offset >= 0x740 && offset < 0x748 && offset % 2 == 0) - m_screen->update_now(); + { + //m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); + } } WRITE8_MEMBER(system1_state::system1_videoram_bank_w) diff --git a/src/mame/video/tp84.c b/src/mame/video/tp84.c index fc2f2196bba..cf95dafbc4f 100644 --- a/src/mame/video/tp84.c +++ b/src/mame/video/tp84.c @@ -106,7 +106,8 @@ PALETTE_INIT_MEMBER(tp84_state, tp84) WRITE8_MEMBER(tp84_state::tp84_spriteram_w) { /* the game multiplexes the sprites, so update now */ - m_screen->update_now(); +// m_screen->update_now(); + m_screen->update_partial(m_screen->vpos()); m_spriteram[offset] = data; } |
