From 6f3e2c6b56f9f7ec07e27157bc0d3673b6f21abb Mon Sep 17 00:00:00 2001 From: 987123879113 <63495610+987123879113@users.noreply.github.com> Date: Sat, 30 Sep 2023 17:45:47 +0900 Subject: dgpix: Use intelfsh + improvements to sound emulation (#11582) * sound/ks0164: Attempt to fix audio looping issues * cpu/ks0164: swap bges and bles (fixes sound effects), fix some disasm issues, document a new opcode * misc/dgpix: Refactor to use intelfsh, add controls for btplay2k and letsdnce, add sound banking for BMkey PCB --- src/devices/cpu/ks0164/ks0164.cpp | 48 ++- src/devices/cpu/ks0164/ks0164d.cpp | 17 +- src/devices/sound/ks0164.cpp | 34 +- src/devices/sound/ks0164.h | 2 + src/mame/misc/dgpix.cpp | 666 ++++++++++++++++++++++--------------- 5 files changed, 481 insertions(+), 286 deletions(-) diff --git a/src/devices/cpu/ks0164/ks0164.cpp b/src/devices/cpu/ks0164/ks0164.cpp index b66080ba06b..194823474d0 100644 --- a/src/devices/cpu/ks0164/ks0164.cpp +++ b/src/devices/cpu/ks0164/ks0164.cpp @@ -253,8 +253,8 @@ void ks0164_cpu_device::execute_run() case 0x9: cond = !(m_r[R_PSW] & F_Z) && !(m_r[R_PSW] & F_C); break; case 0xa: cond = (m_r[R_PSW] & F_Z) || (m_r[R_PSW] & F_C); break; case 0xb: cond = (!(m_r[R_PSW] & F_Z) && (m_r[R_PSW] & F_N) && (m_r[R_PSW] & F_V)) || (!(m_r[R_PSW] & F_Z) && !(m_r[R_PSW] & F_V) && !(m_r[R_PSW] & F_N)); break; - case 0xc: cond = (m_r[R_PSW] & F_Z) || ((m_r[R_PSW] & F_N) && !(m_r[R_PSW] & F_V)) || ((m_r[R_PSW] & F_V) && !(m_r[R_PSW] & F_N)); break; - case 0xd: cond = ((m_r[R_PSW] & F_N) && (m_r[R_PSW] & F_V)) || (!(m_r[R_PSW] & F_V) && !(m_r[R_PSW] & F_N)); break; + case 0xc: cond = ((m_r[R_PSW] & F_N) && (m_r[R_PSW] & F_V)) || (!(m_r[R_PSW] & F_V) && !(m_r[R_PSW] & F_N)); break; + case 0xd: cond = (m_r[R_PSW] & F_Z) || ((m_r[R_PSW] & F_N) && !(m_r[R_PSW] & F_V)) || ((m_r[R_PSW] & F_V) && !(m_r[R_PSW] & F_N)); break; case 0xe: cond = ((m_r[R_PSW] & F_N) && !(m_r[R_PSW] & F_V)) || ((m_r[R_PSW] & F_V) && !(m_r[R_PSW] & F_N)); break; case 0xf: default: cond = true; break; } @@ -462,7 +462,7 @@ void ks0164_cpu_device::execute_run() case 0x1b: { switch((opcode >> 12) & 3) { case 0: { - // Push all registers + // Pop all registers // 1100 .... .... .011 m_r[0] = m_program.read_word(m_r[R_SP] + 6); @@ -550,7 +550,7 @@ void ks0164_cpu_device::execute_run() case 2: { // Bit clear in register - // 1110 .rrr bbbb .001 + // 1110 .rrr bbbb .100 if(m_r[(opcode >> 8) & 7] & (1 << ((opcode >> 4) & 0xf))) { m_r[(opcode >> 8) & 7] &= ~(1 << ((opcode >> 4) & 0xf)); m_r[R_PSW] &= ~F_Z; @@ -561,6 +561,7 @@ void ks0164_cpu_device::execute_run() case 3: { // Decrement and branch + // 1111 .rrr .... .100 int r = (opcode >> 8) & 7; u16 a = m_program_cache.read_word(m_r[R_PC]); m_r[R_PC] += 2; @@ -643,7 +644,44 @@ void ks0164_cpu_device::execute_run() case 0x1e: { switch((opcode >> 12) & 3) { case 0: { - unk(opcode); + // Rotate without carry? + // 1100 drrr nnnn .110 + /* + From btplay2k flash.u22: + Surrounding code gives some context to usage here? + opcode is sandwiched between other shift/rotate commands + 6E2C: 7010 r0 = 10 + 6E2E: 8817 0001 r0 -= (r1 + 1).bu + 6E32: 0406 beq 6e3a + 6E34: CA1C r2 >>= 1 + 6E36: F004 6E34 dbra r0, 6e34 + ... + 6E52: B017 0001 r0 = (r1 + 1).bu + 6E56: CA1E ?ca1e + 6E58: F004 6E56 dbra r0, 6e56 + */ + + int r = (opcode >> 8) & 7; + int shift = (opcode >> 4) & 0xf; + u16 v1 = m_r[r]; + u16 res; + + if(!shift) { + m_r[R_PSW] = (m_r[R_PSW] & ~F_MASK) | (v1 ? v1 & 0x8000 ? F_N : 0 : F_Z); + res = v1; + } else if(opcode & 0x0800) { + res = (v1 >> shift) | (v1 << (16 - shift)); + u16 f = res ? 0 : F_Z; + if(v1 & (1 << (shift - 1))) + f |= F_C; + m_r[R_PSW] = (m_r[R_PSW] & ~F_MASK) | f; + } else { + res = (v1 << shift) | (v1 >> (16 - shift)); + u16 f = res ? res & 0x8000 ? F_N : 0 : F_Z; + if(v1 & (1 << (16-shift))) + f |= F_C; + m_r[R_PSW] = (m_r[R_PSW] & ~F_MASK) | f; + } + m_r[r] = res; break; } diff --git a/src/devices/cpu/ks0164/ks0164d.cpp b/src/devices/cpu/ks0164/ks0164d.cpp index 21e60bd97f7..192dc7d1221 100644 --- a/src/devices/cpu/ks0164/ks0164d.cpp +++ b/src/devices/cpu/ks0164/ks0164d.cpp @@ -39,8 +39,8 @@ const ks0164_disassembler::instruction ks0164_disassembler::instructions[] { { 0x2400, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bgtu %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, { 0x2800, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bleu %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, { 0x2c00, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bgts %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, - { 0x3000, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bles %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, - { 0x3400, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bges %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, + { 0x3000, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bges %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, + { 0x3400, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bles %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, { 0x3800, 0xfc00, [](P) -> u32 { util::stream_format(stream, "blts %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2 | STEP_COND; } }, { 0x3c00, 0xfc00, [](P) -> u32 { util::stream_format(stream, "bra %04x", (pc + 2 + util::sext(opcode, 10)) & 0xffff); return 2; } }, @@ -177,11 +177,14 @@ const ks0164_disassembler::instruction ks0164_disassembler::instructions[] { { 0xc008, 0xf88f, [](P) -> u32 { util::stream_format(stream, "(%s)+.w = %s", regs[(opcode >> 8) & 7], regs[(opcode >> 4) & 7]); return 2; } }, { 0xc00a, 0xf88f, [](P) -> u32 { util::stream_format(stream, "%s = (%s)+.w", regs[(opcode >> 8) & 7], regs[(opcode >> 4) & 7]); return 2; } }, - { 0xc00c, 0xf80f, [](P) -> u32 { util::stream_format(stream, "%s <<= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, - { 0xc80c, 0xf80f, [](P) -> u32 { util::stream_format(stream, "%s >>= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, - { 0xc80d, 0xf80f, [](P) -> u32 { util::stream_format(stream, "%s >>s= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, - { 0xc00f, 0xf80f, [](P) -> u32 { util::stream_format(stream, "%s <> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, - { 0xc80f, 0xf80f, [](P) -> u32 { util::stream_format(stream, "%s >>c= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc004, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s <<= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, // are these with bit 3 set really all the same? + { 0xc804, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s >>= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc005, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s >>s= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc805, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s >>s= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc006, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s <<<= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc806, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s >>>= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc007, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s <> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, + { 0xc807, 0xf807, [](P) -> u32 { util::stream_format(stream, "%s >>c= %x", regs[(opcode >> 8) & 7], (opcode >> 4) & 0xf); return 2; } }, { 0xd008, 0xf88f, [](P) -> u32 { util::stream_format(stream, "%s = maxu(%s, %04x)", regs[(opcode >> 8) & 7], regs[(opcode >> 4) & 7], opcodes.r16(pc+2)); return 4; } }, { 0xd808, 0xf88f, [](P) -> u32 { util::stream_format(stream, "%s = minu(%s, %04x)", regs[(opcode >> 8) & 7], regs[(opcode >> 4) & 7], opcodes.r16(pc+2)); return 4; } }, diff --git a/src/devices/sound/ks0164.cpp b/src/devices/sound/ks0164.cpp index 42cd4775726..6fe7e6d25bc 100644 --- a/src/devices/sound/ks0164.cpp +++ b/src/devices/sound/ks0164.cpp @@ -54,7 +54,8 @@ ks0164_device::ks0164_device(const machine_config &mconfig, const char *tag, dev m_midi_tx(*this), m_mem_region(*this, DEVICE_SELF), m_cpu(*this, "cpu"), - m_mem_config("mem", ENDIANNESS_BIG, 16, 23) + m_mem_config("mem", ENDIANNESS_BIG, 16, 23), + m_notif_rom_space() { } @@ -89,6 +90,16 @@ void ks0164_device::device_start() space().install_rom(0, rend, ((1 << 23) - 1) ^ rmask, m_mem_region->base()); } + m_notif_rom_space = space().add_change_notifier([this] (read_or_write mode) { + // HACK: If something external changes the ROM space after initial load then reset the CPU because the program code also changed (used by BMkey ROM PCBs) + for(int voice = 0; voice < 0x20; voice++) { + // Disable all voices + m_sregs[voice][0] &= ~1; + } + + m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); + }); + m_stream = stream_alloc(0, 2, clock()/3/2/2/32); space().cache(m_mem_cache); m_timer = timer_alloc(FUNC(ks0164_device::irq_timer_tick), this); @@ -308,7 +319,7 @@ void ks0164_device::bank2_select_w(offs_t, u16 data, u16 mem_mask) u16 ks0164_device::voice_r(offs_t offset) { m_stream->update(); - logerror("voice read %02x.%02x -> %04x (%04x)\n", m_voice_select & 0x1f, offset, m_sregs[m_voice_select & 0x1f][offset], m_cpu->pc()); + // logerror("voice read %02x.%02x -> %04x (%04x)\n", m_voice_select & 0x1f, offset, m_sregs[m_voice_select & 0x1f][offset], m_cpu->pc()); return m_sregs[m_voice_select & 0x1f][offset]; } @@ -321,13 +332,14 @@ void ks0164_device::voice_w(offs_t offset, u16 data, u16 mem_mask) if(m_cpu->pc() < 0x5f94 || m_cpu->pc() > 0x5fc0) logerror("voice %02x.%02x = %04x @ %04x (%04x)\n", m_voice_select & 0x1f, offset, m_sregs[m_voice_select & 0x1f][offset], mem_mask, m_cpu->pc()); if(offset == 0 && (data & 1) && !(old & 1)) - logerror("keyon %02x mode=%04x (%s %c %c %c) cur=%02x%04x.%04x loop=%02x%04x.%04x end=%02x%04x.%04x pitch=%02x.%03x 10=%02x/%02x:%02x/%02x 14=%03x/%03x:%03x/%03x 18=%04x/%04x c=%04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x\n", + logerror("keyon %02x mode=%04x (%s %c %c %c %c) cur=%02x%04x.%04x loop=%02x%04x.%04x end=%02x%04x.%04x pitch=%02x.%03x 10=%02x/%02x:%02x/%02x 14=%03x/%03x:%03x/%03x 18=%04x/%04x c=%04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x\n", m_voice_select, m_sregs[m_voice_select & 0x1f][0x00], - m_sregs[m_voice_select & 0x1f][0x00] & 0x8000 ? " 8" : "16", - m_sregs[m_voice_select & 0x1f][0x00] & 0x0400 ? 'c' : 'l', + m_sregs[m_voice_select & 0x1f][0x00] & 0x8000 ? " 8" : "16", // 8-bit/16-bit samples + m_sregs[m_voice_select & 0x1f][0x00] & 0x0400 ? 'c' : 'l', // compressed/linear samples + m_sregs[m_voice_select & 0x1f][0x00] & 0x0010 ? 'r' : '-', // loop m_sregs[m_voice_select & 0x1f][0x00] & 0x0008 ? '3' : '-', m_sregs[m_voice_select & 0x1f][0x00] & 0x0004 ? '2' : '-', @@ -423,7 +435,7 @@ u8 ks0164_device::voice_select_r() void ks0164_device::voice_select_w(u8 data) { m_voice_select = data; - logerror("voice_select = %02x (%04x)\n", m_voice_select, m_cpu->pc()); + // logerror("voice_select = %02x (%04x)\n", m_voice_select, m_cpu->pc()); } void ks0164_device::cpu_map(address_map &map) @@ -492,9 +504,13 @@ void ks0164_device::sound_stream_update(sound_stream &stream, std::vector= end) { - // Is there a loop enabled flag? - u64 loop = (u64(regs[9]) << 32) | (regs[0xa] << 16) | regs[0xb]; - current = current - end + loop; + // guessed, 1d26 in btplay2k flash.u22 seems to check this flag for something similar to looping but no games use it + if (regs[0] & 0x10) { + u64 loop = (u64(regs[9]) << 32) | (regs[0xa] << 16) | regs[0xb]; + current = current - end + loop; + } else { + regs[0] = ~1; + } } regs[1] = current >> 32; regs[2] = current >> 16; diff --git a/src/devices/sound/ks0164.h b/src/devices/sound/ks0164.h index 3f4a1f30cb7..ae7680c91c9 100644 --- a/src/devices/sound/ks0164.h +++ b/src/devices/sound/ks0164.h @@ -74,6 +74,8 @@ private: u8 m_irqen_76, m_irqen_77; bool m_timer_interrupt; + util::notifier_subscription m_notif_rom_space; + void cpu_map(address_map &map); u16 vec_r(offs_t offset, u16 mem_mask); diff --git a/src/mame/misc/dgpix.cpp b/src/mame/misc/dgpix.cpp index d4cecb6033c..07aa92de0b3 100644 --- a/src/mame/misc/dgpix.cpp +++ b/src/mame/misc/dgpix.cpp @@ -160,8 +160,9 @@ Notes: #include "emu.h" #include "cpu/e132xs/e132xs.h" -#include "sound/ks0164.h" +#include "machine/intelfsh.h" #include "machine/nvram.h" +#include "sound/ks0164.h" #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -174,59 +175,101 @@ class dgpix_state : public driver_device public: dgpix_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_flash(*this, "flash"), m_maincpu(*this, "maincpu"), m_sound(*this, "ks0164"), + m_flash(*this, "flash%u", 0), m_vblank(*this, "VBLANK") { } - void dgpix(machine_config &config); - - void init_elfin(); - void init_jumpjump(); - void init_xfiles(); - void init_xfilesk(); - void init_kdynastg(); - void init_letsdnce(); - void init_btplay2k(); - void init_fmaniac2p(); - void init_fmaniac3(); - protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; -private: - required_shared_ptr m_flash; + void dgpix_base(machine_config &config); + + void base_map(address_map &map); + + u16 flash_r(offs_t offset); + void flash_w(offs_t offset, u16 data, u16 mem_mask = ~0); required_device m_maincpu; required_device m_sound; - required_ioport m_vblank; + optional_device_array m_flash; // up to 8 but not all populated - std::unique_ptr m_vram; - int m_vbuffer; - int m_flash_roms; - int m_old_vbuf; - u32 m_flash_cmd; - s32 m_first_offset; +private: + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void io_map(address_map &map); - u32 flash_r(offs_t offset); - void flash_w(offs_t offset, u32 data, u32 mem_mask = ~0); void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 vram_r(offs_t offset); + void vbuffer_w(u32 data); + void coin_w(u32 data); - u32 vblank_r(); - u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void mem_map(address_map &map); - void io_map(address_map &map); + u32 vblank_r(); void mpu401_data_w(offs_t, u32 data, u32 mem_mask); void mpu401_ctrl_w(offs_t, u32 data, u32 mem_mask); u32 mpu401_data_r(offs_t, u32 mem_mask); u32 mpu401_status_r(); + + u16 flash_raw_rom_r(offs_t offset); + + required_ioport m_vblank; + + std::unique_ptr m_vram; + int m_vbuffer; + int m_old_vbuf; +}; + + +class dgpix_typea_state : public dgpix_state +{ +public: + dgpix_typea_state(const machine_config &mconfig, device_type type, const char *tag) : + dgpix_state(mconfig, type, tag) + { } + + void dgpix(machine_config &config); + void dgpix_kdynastg(machine_config &config); + + void init_elfin(); + void init_jumpjump(); + void init_xfiles(); + void init_xfilesk(); + void init_kdynastg(); + void init_fmaniac2p(); + void init_fmaniac3(); + +private: + void mem_map(address_map &map); +}; + + +class dgpix_bmkey_state : public dgpix_state +{ +public: + dgpix_bmkey_state(const machine_config &mconfig, device_type type, const char *tag) : + dgpix_state(mconfig, type, tag), + m_ks0164_bank(*this, "ks0164_bank") + { } + + void dgpix(machine_config &config); + + void init_letsdnce(); + void init_btplay2k(); + +protected: + virtual void machine_reset() override; + +private: + void mem_map(address_map &map); + + void sound_bank_w(u16 data); + + required_memory_region m_ks0164_bank; }; void dgpix_state::mpu401_data_w(offs_t, u32 data, u32 mem_mask) @@ -253,82 +296,34 @@ u32 dgpix_state::mpu401_status_r() return m_sound->mpu401_status_r(); } -u32 dgpix_state::flash_r(offs_t offset) +u16 dgpix_state::flash_r(offs_t offset) { - u32 *ROM = m_flash; + const auto bank = offset / 0x200000; - if (offset >= (0x2000000 - m_flash_roms * 0x400000) / 4) - { - if (m_flash_cmd == 0x90900000) - { - //read maker ID and chip ID - return 0x00890014; - } - else if (m_flash_cmd == 0x00700000) - { - //read status - return 0x80<<16; - } - else if (m_flash_cmd == 0x70700000) - { - //read status and ? - return 0x82<<16; - } - else if (m_flash_cmd == 0xe8e80000) - { - //read status ? - return 0x80<<16; - } - } + if (!m_flash[bank]) + return 0; - return ROM[offset]; + return m_flash[bank]->read(offset % 0x200000); } -void dgpix_state::flash_w(offs_t offset, u32 data, u32 mem_mask) +void dgpix_state::flash_w(offs_t offset, u16 data, u16 mem_mask) { - if (m_flash_cmd == 0x20200000) - { - // erase game settings - if (data == 0xd0d00000) - { - // point to game settings - u8 *rom = (u8 *)(u32 *)m_flash + offset*4; + const auto bank = offset / 0x200000; - // erase one block - memset(rom, 0xff, 0x10000); + if (!m_flash[bank]) + return; - m_flash_cmd = 0; - } - } - else if (m_flash_cmd == 0x0f0f0000) - { - if (data == 0xd0d00000 && offset == m_first_offset) - { - // finished - m_flash_cmd = 0; - m_first_offset = -1; - } - else - { - u16 *rom = (u16 *)(u32 *)m_flash; + m_flash[bank]->write(offset % 0x200000, data); +} - // write game settings +u16 dgpix_state::flash_raw_rom_r(offs_t offset) +{ + const auto bank = offset / 0x200000; - if (ACCESSING_BITS_0_15) - rom[BYTE_XOR_BE(offset*2 + 1)] = data & 0xffff; - else - rom[BYTE_XOR_BE(offset*2 + 0)] = (data & 0xffff0000) >> 16; - } - } - else - { - m_flash_cmd = data; + if (!m_flash[bank]) + return 0; - if (m_flash_cmd == 0x0f0f0000 && m_first_offset == -1) - { - m_first_offset = offset; - } - } + return swapendian_int16(m_flash[bank]->read_raw(offset % 0x200000)); } void dgpix_state::vram_w(offs_t offset, u16 data, u16 mem_mask) @@ -365,13 +360,40 @@ u32 dgpix_state::vblank_r() return m_vblank->read(); } -void dgpix_state::mem_map(address_map &map) +void dgpix_bmkey_state::sound_bank_w(u16 data) +{ + auto bank_addr = data * 0x400000; + if (bank_addr >= m_ks0164_bank->bytes()) + return; + + // Each flash contains a new program for the CPU, letsdnce's stop audio command + // in the test menu is called "change bank / sound off" so they seem linked. + // Unsure if this is really hooked up to the CPU's reset pin or not or if there + // is some other mechanism for signaling the program changed and to stop sound. + const u32 bank_mask = 0x400000 - 1; + m_sound->space().install_rom(0, bank_mask, ((1 << 23) - 1) ^ bank_mask, m_ks0164_bank->base() + bank_addr); +} + +void dgpix_state::base_map(address_map &map) { map(0x00000000, 0x007fffff).ram(); - map(0x40000000, 0x4003ffff).rw(FUNC(dgpix_state::vram_r), FUNC(dgpix_state::vram_w)); - map(0xe0000000, 0xe1ffffff).rw(FUNC(dgpix_state::flash_r), FUNC(dgpix_state::flash_w)); - map(0xe2000000, 0xe3ffffff).rw(FUNC(dgpix_state::flash_r), FUNC(dgpix_state::flash_w)); - map(0xfe000000, 0xffffffff).rom().share("flash"); + map(0x40000000, 0x4003ffff).rw(FUNC(dgpix_typea_state::vram_r), FUNC(dgpix_typea_state::vram_w)); + map(0xfe000000, 0xffffffff).r(FUNC(dgpix_typea_state::flash_raw_rom_r)); +} + +void dgpix_typea_state::mem_map(address_map &map) +{ + base_map(map); + + map(0xe0000000, 0xe1ffffff).rw(FUNC(dgpix_typea_state::flash_r), FUNC(dgpix_typea_state::flash_w)).mirror(0x02000000); +} + +void dgpix_bmkey_state::mem_map(address_map &map) +{ + base_map(map); + + map(0xe1000000, 0xe1000001).w(FUNC(dgpix_bmkey_state::sound_bank_w)); + map(0xe2000000, 0xe3ffffff).rw(FUNC(dgpix_bmkey_state::flash_r), FUNC(dgpix_bmkey_state::flash_w)); } void dgpix_state::io_map(address_map &map) @@ -419,6 +441,44 @@ static INPUT_PORTS_START( dgpix ) PORT_BIT( 0xff000000, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END +static INPUT_PORTS_START( btplay2k ) + PORT_INCLUDE( dgpix ) + + PORT_MODIFY("INPUTS") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) +INPUT_PORTS_END + +static INPUT_PORTS_START( letsdnce ) + PORT_INCLUDE( dgpix ) + + PORT_MODIFY("INPUTS") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Up") + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Down") + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Left") + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 Right") + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) + PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Up") + PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Down") + PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Left") + PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 Right") + PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) +INPUT_PORTS_END + void dgpix_state::video_start() { m_vram = std::make_unique(0x40000); @@ -446,28 +506,26 @@ u32 dgpix_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, cons void dgpix_state::machine_start() { save_item(NAME(m_vbuffer)); - save_item(NAME(m_flash_cmd)); - save_item(NAME(m_first_offset)); save_item(NAME(m_old_vbuf)); } void dgpix_state::machine_reset() { m_vbuffer = 0; - m_flash_cmd = 0; - m_first_offset = -1; m_old_vbuf = 3; } +void dgpix_bmkey_state::machine_reset() +{ + dgpix_state::machine_reset(); + sound_bank_w(0); +} -void dgpix_state::dgpix(machine_config &config) +void dgpix_state::dgpix_base(machine_config &config) { E132XT(config, m_maincpu, 20000000*4); /* 4x internal multiplier */ - m_maincpu->set_addrmap(AS_PROGRAM, &dgpix_state::mem_map); m_maincpu->set_addrmap(AS_IO, &dgpix_state::io_map); - NVRAM(config, "flash", nvram_device::DEFAULT_NONE); - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); @@ -485,6 +543,29 @@ void dgpix_state::dgpix(machine_config &config) KS0164(config, m_sound, 16.9344_MHz_XTAL); m_sound->add_route(0, "lspeaker", 1.0); m_sound->add_route(1, "rspeaker", 1.0); + + INTEL_28F320J5(config, m_flash[6]); + INTEL_28F320J5(config, m_flash[7]); +} + +void dgpix_typea_state::dgpix(machine_config &config) +{ + dgpix_base(config); + m_maincpu->set_addrmap(AS_PROGRAM, &dgpix_typea_state::mem_map); +} + +void dgpix_typea_state::dgpix_kdynastg(machine_config &config) +{ + dgpix(config); + + INTEL_28F320J5(config, m_flash[4]); + INTEL_28F320J5(config, m_flash[5]); +} + +void dgpix_bmkey_state::dgpix(machine_config &config) +{ + dgpix_base(config); + m_maincpu->set_addrmap(AS_PROGRAM, &dgpix_bmkey_state::mem_map); } @@ -499,13 +580,22 @@ Flash Module Type-A REV2 dgPIX Entertainment Inc. 1999 */ ROM_START( elfin ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u8", 0x1800000, 0x400000, CRC(eb56d7ca) SHA1(7c1cfcc68579cf3bdd9707da7d745a410223b8d9) ) - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1c00000, 0x400000, CRC(cbf64ef4) SHA1(1a231872ee14e6d718c3f8888185ede7483e79dd) ) /* game settings & highscores are saved in here */ + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u8", 0x0000000, 0x400000, CRC(eb56d7ca) SHA1(7c1cfcc68579cf3bdd9707da7d745a410223b8d9) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(cbf64ef4) SHA1(1a231872ee14e6d718c3f8888185ede7483e79dd) ) /* game settings & highscores are saved in here */ ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ - ROM_LOAD16_WORD_SWAP( "flash.u10", 0x000000, 0x400000, CRC(d378fe55) SHA1(5cc7bc5ae258cd48816857793a262e7c6c330795) ) + ROM_LOAD16_WORD_SWAP( "flash.u10", 0x0000000, 0x400000, CRC(d378fe55) SHA1(5cc7bc5ae258cd48816857793a262e7c6c330795) ) ROM_REGION( 0x1000, "cpu2", ROMREGION_ERASEFF ) /* PIC */ ROM_LOAD( "elfin_pic", 0x0000, 0x1000, NO_DUMP ) // protected @@ -522,13 +612,22 @@ Flash Module Type-A REV2 dgPIX Entertainment Inc. 1999 */ ROM_START( jumpjump ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "jumpjump.u8", 0x1800000, 0x400000, CRC(210dfd8b) SHA1(a1aee4ec8c01832e77d2e4e334a62c246d7e3635) ) - ROM_LOAD16_WORD_SWAP( "jumpjump.u9", 0x1c00000, 0x400000, CRC(16d1e352) SHA1(3c43974fb8d90b0c84472dd9f2167eb983142095) ) + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "jumpjump.u8", 0x0000000, 0x400000, CRC(210dfd8b) SHA1(a1aee4ec8c01832e77d2e4e334a62c246d7e3635) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "jumpjump.u9", 0x0000000, 0x400000, CRC(16d1e352) SHA1(3c43974fb8d90b0c84472dd9f2167eb983142095) ) ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ - ROM_LOAD16_WORD_SWAP( "jumpjump.u10", 0x000000, 0x400000, CRC(2152ecce) SHA1(522d389952a07fa0830ca8aaa6de3aacf834e32e) ) + ROM_LOAD16_WORD_SWAP( "jumpjump.u10", 0x0000000, 0x400000, CRC(2152ecce) SHA1(522d389952a07fa0830ca8aaa6de3aacf834e32e) ) ROM_REGION( 0x1000, "cpu2", ROMREGION_ERASEFF ) /* PIC */ ROM_LOAD( "jumpjump_pic", 0x0000, 0x1000, NO_DUMP ) // protected - labeled S831D dgPIX-PR1 @@ -547,10 +646,19 @@ Uncensored World version */ ROM_START( xfiles ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u8", 0x1800000, 0x400000, CRC(231ad82a) SHA1(a1cc5c4122605e564d51137f1dca2afa82616202) ) - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1c00000, 0x400000, CRC(d68994b7) SHA1(c1752d6795f7aaa6beef73643327205a1c32f0f5) ) + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u8", 0x0000000, 0x400000, CRC(231ad82a) SHA1(a1cc5c4122605e564d51137f1dca2afa82616202) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(d68994b7) SHA1(c1752d6795f7aaa6beef73643327205a1c32f0f5) ) ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ ROM_LOAD16_WORD_SWAP( "flash.u10", 0x0000000, 0x400000, CRC(1af33cda) SHA1(9bbcfb07a4a5bcff3efc1c7bcc51bc16c47ca9e6) ) @@ -580,10 +688,19 @@ Korean text on Mode Select screen and the following screen */ ROM_START( xfilesk ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "u8.bin", 0x1800000, 0x400000, CRC(3b2c2bc1) SHA1(1c07fb5bd8a8c9b5fb169e6400fef845f3aee7aa) ) - ROM_LOAD16_WORD_SWAP( "u9.bin", 0x1c00000, 0x400000, CRC(6ecdd1eb) SHA1(e26c9711e589865cc75ec693d382758fa52528b8) ) + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "u8.bin", 0x0000000, 0x400000, CRC(3b2c2bc1) SHA1(1c07fb5bd8a8c9b5fb169e6400fef845f3aee7aa) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "u9.bin", 0x0000000, 0x400000, CRC(6ecdd1eb) SHA1(e26c9711e589865cc75ec693d382758fa52528b8) ) ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ ROM_LOAD16_WORD_SWAP( "u10.bin", 0x0000000, 0x400000, CRC(f2ef1eb9) SHA1(d033d140fce6716d7d78509aa5387829f0a1404c) ) @@ -603,12 +720,23 @@ Flash Module Type-A REV2 dgPIX Entertainment Inc. 1999 */ ROM_START( kdynastg ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x0ffffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u6", 0x1000000, 0x400000, CRC(280dd64e) SHA1(0e23b227b1183fb5591c3a849b5a5fe7faa23cc8) ) - ROM_LOAD16_WORD_SWAP( "flash.u7", 0x1400000, 0x400000, CRC(f9125894) SHA1(abaad31f7a02143ea7029e47e6baf2976365f70c) ) - ROM_LOAD16_WORD_SWAP( "flash.u8", 0x1800000, 0x400000, CRC(1016b61c) SHA1(eab4934e1f41cc26259e5187a94ceebd45888a94) ) - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1c00000, 0x400000, CRC(093d9243) SHA1(2a643acc7144193aaa3606a84b0c67aadb4c543b) ) + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u6", 0x0000000, 0x400000, CRC(280dd64e) SHA1(0e23b227b1183fb5591c3a849b5a5fe7faa23cc8) ) + + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u7", 0x0000000, 0x400000, CRC(f9125894) SHA1(abaad31f7a02143ea7029e47e6baf2976365f70c) ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u8", 0x0000000, 0x400000, CRC(1016b61c) SHA1(eab4934e1f41cc26259e5187a94ceebd45888a94) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(093d9243) SHA1(2a643acc7144193aaa3606a84b0c67aadb4c543b) ) ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ ROM_LOAD16_WORD_SWAP( "flash.u10", 0x0000000, 0x400000, CRC(3f103cb1) SHA1(2ff9bd73f3005f09d872018b81c915b01d6703f5) ) @@ -628,19 +756,27 @@ BMkey Flash Rev2 dgPIX Entertainment 1999 */ ROM_START( letsdnce ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1800000, 0x400000, CRC(90e181d6) SHA1(c698b842c045f95a5f3a5483b5e5d12ca06c8f08) ) - ROM_LOAD16_WORD_SWAP( "flash.u10", 0x1c00000, 0x400000, CRC(1416acb3) SHA1(097b89d5cebeaa29742abec8ed84b50313f0b387) ) - - ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROMs - TODO: banking */ - ROM_LOAD16_WORD_SWAP( "flash.u20", 0x0000000, 0x400000, CRC(e88ccc12) SHA1(6d988fe337a166f6e77ed67e83de7a64688958d1) ) - ROM_LOAD16_WORD_SWAP( "flash.u21", 0x0000000, 0x400000, CRC(ffbbde83) SHA1(a6307d782024cd1b6c9fd83ffeef64c31c6bd22d) ) - ROM_LOAD16_WORD_SWAP( "flash.u22", 0x0000000, 0x400000, CRC(068c376a) SHA1(622db2b76d84d53bc235fd77aea85cdb2d8c286c) ) - ROM_LOAD16_WORD_SWAP( "flash.u23", 0x0000000, 0x400000, CRC(ab033dc7) SHA1(e46c0902bc5cc2608011bbb27fb136d9ccae1789) ) - ROM_LOAD16_WORD_SWAP( "flash.u24", 0x0000000, 0x400000, CRC(23a556d8) SHA1(8ed58febbb1c51f4315494859afa04c916155471) ) - ROM_LOAD16_WORD_SWAP( "flash.u25", 0x0000000, 0x400000, CRC(2a0f0e06) SHA1(9b1d6978a72c354aa1ef97ca4aa5902985f0aaed) ) - ROM_LOAD16_WORD_SWAP( "flash.u26", 0x0000000, 0x400000, CRC(2a0c396b) SHA1(a8eead3de11c85997c930f000ed48c783bcee07c) ) + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(90e181d6) SHA1(c698b842c045f95a5f3a5483b5e5d12ca06c8f08) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u10", 0x0000000, 0x400000, CRC(1416acb3) SHA1(097b89d5cebeaa29742abec8ed84b50313f0b387) ) + + ROM_REGION32_LE( 0x1c00000, "ks0164_bank", 0 ) /* sound ROMs */ + ROM_LOAD( "flash.u20", 0x0000000, 0x400000, CRC(e88ccc12) SHA1(6d988fe337a166f6e77ed67e83de7a64688958d1) ) + ROM_LOAD( "flash.u21", 0x0400000, 0x400000, CRC(ffbbde83) SHA1(a6307d782024cd1b6c9fd83ffeef64c31c6bd22d) ) + ROM_LOAD( "flash.u22", 0x0800000, 0x400000, CRC(068c376a) SHA1(622db2b76d84d53bc235fd77aea85cdb2d8c286c) ) + ROM_LOAD( "flash.u23", 0x0c00000, 0x400000, CRC(ab033dc7) SHA1(e46c0902bc5cc2608011bbb27fb136d9ccae1789) ) + ROM_LOAD( "flash.u24", 0x1000000, 0x400000, CRC(23a556d8) SHA1(8ed58febbb1c51f4315494859afa04c916155471) ) + ROM_LOAD( "flash.u25", 0x1400000, 0x400000, CRC(2a0f0e06) SHA1(9b1d6978a72c354aa1ef97ca4aa5902985f0aaed) ) + ROM_LOAD( "flash.u26", 0x1800000, 0x400000, CRC(2a0c396b) SHA1(a8eead3de11c85997c930f000ed48c783bcee07c) ) ROM_REGION( 0x1000, "cpu2", ROMREGION_ERASEFF ) /* PIC */ ROM_LOAD( "letsdnce_pic", 0x0000, 0x1000, NO_DUMP ) // protected - labeled S831D dgPIX-PR1 @@ -660,19 +796,27 @@ BMkey Flash Rev2 dgPIX Entertainment 1999 */ ROM_START( btplay2k ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1800000, 0x400000, CRC(28d5a2cb) SHA1(69082810849031379018babe6d87c5528e97cfba) ) - ROM_LOAD16_WORD_SWAP( "flash.u10", 0x1c00000, 0x400000, CRC(4f6c963b) SHA1(775df9c33ff73a85bf478e695f09577d3a07c997) ) - - ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROMs - TODO: banking */ - ROM_LOAD16_WORD_SWAP( "flash.u20", 0x0000000, 0x400000, CRC(cbbb5c11) SHA1(dfc9eeadb077efb86277ff73fbd0e51608c2a2eb) ) - ROM_LOAD16_WORD_SWAP( "flash.u21", 0x0000000, 0x400000, CRC(f1dc0d33) SHA1(6e1e4f8da2a8ea59703e8684613c05a05c60d0ac) ) - ROM_LOAD16_WORD_SWAP( "flash.u22", 0x0000000, 0x400000, CRC(b783feb6) SHA1(86ca43262a4ccd64f4bd079ad8eaa0a3c113db1f) ) - ROM_LOAD16_WORD_SWAP( "flash.u23", 0x0000000, 0x400000, CRC(fa298e11) SHA1(9c54d4f37fd2ed367b6f9fdb01c361b25b6f2048) ) - ROM_LOAD16_WORD_SWAP( "flash.u24", 0x0000000, 0x400000, CRC(29827f0c) SHA1(050e6ed33cf38d5ed45b7d05d039e618f06b5c5b) ) - ROM_LOAD16_WORD_SWAP( "flash.u25", 0x0000000, 0x400000, CRC(81b974fa) SHA1(30c11fa926437f144fa6929df2eb85751777bcac) ) - ROM_LOAD16_WORD_SWAP( "flash.u26", 0x0000000, 0x400000, CRC(6ff2f3ec) SHA1(8193851b5fdf5248d328f14c0edc2501d12233f3) ) + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(28d5a2cb) SHA1(69082810849031379018babe6d87c5528e97cfba) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u10", 0x0000000, 0x400000, CRC(4f6c963b) SHA1(775df9c33ff73a85bf478e695f09577d3a07c997) ) + + ROM_REGION32_LE( 0x1c00000, "ks0164_bank", 0 ) + ROM_LOAD( "flash.u20", 0x0000000, 0x400000, CRC(cbbb5c11) SHA1(dfc9eeadb077efb86277ff73fbd0e51608c2a2eb) ) + ROM_LOAD( "flash.u21", 0x0400000, 0x400000, CRC(f1dc0d33) SHA1(6e1e4f8da2a8ea59703e8684613c05a05c60d0ac) ) + ROM_LOAD( "flash.u22", 0x0800000, 0x400000, CRC(b783feb6) SHA1(86ca43262a4ccd64f4bd079ad8eaa0a3c113db1f) ) + ROM_LOAD( "flash.u23", 0x0c00000, 0x400000, CRC(fa298e11) SHA1(9c54d4f37fd2ed367b6f9fdb01c361b25b6f2048) ) + ROM_LOAD( "flash.u24", 0x1000000, 0x400000, CRC(29827f0c) SHA1(050e6ed33cf38d5ed45b7d05d039e618f06b5c5b) ) + ROM_LOAD( "flash.u25", 0x1400000, 0x400000, CRC(81b974fa) SHA1(30c11fa926437f144fa6929df2eb85751777bcac) ) + ROM_LOAD( "flash.u26", 0x1800000, 0x400000, CRC(6ff2f3ec) SHA1(8193851b5fdf5248d328f14c0edc2501d12233f3) ) ROM_REGION( 0x1000, "cpu2", ROMREGION_ERASEFF ) /* PIC */ ROM_LOAD( "btplay2k_pic", 0x0000, 0x1000, NO_DUMP ) // protected - labeled S831D dgPIX-PR1 @@ -695,13 +839,22 @@ U100 18 pin socket for the PIC chip is unused */ ROM_START( fmaniac2p ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u8", 0x1800000, 0x400000, CRC(acc7da30) SHA1(8c4ffbf646777104a0e108c9d1b49446c12adddc) ) - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1c00000, 0x400000, CRC(b7f7079d) SHA1(2c97d106a8a28e6fa2a18fb324412533e24f46cc) ) + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u8", 0x0000000, 0x400000, CRC(acc7da30) SHA1(8c4ffbf646777104a0e108c9d1b49446c12adddc) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(b7f7079d) SHA1(2c97d106a8a28e6fa2a18fb324412533e24f46cc) ) ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ - ROM_LOAD16_WORD_SWAP( "flash.u10", 0x000000, 0x400000, CRC(9a4b15fa) SHA1(64a7c6eff049b15a005a9f2d87b340c81c2ee69c) ) + ROM_LOAD16_WORD_SWAP( "flash.u10", 0x0000000, 0x400000, CRC(9a4b15fa) SHA1(64a7c6eff049b15a005a9f2d87b340c81c2ee69c) ) ROM_REGION( 0x1000, "cpu2", ROMREGION_ERASEFF ) /* PIC */ // not present @@ -720,146 +873,129 @@ U100 18 pin socket for the PIC chip is unused */ ROM_START( fmaniac3 ) - ROM_REGION32_BE( 0x2000000, "flash", ROMREGION_ERASE00 ) /* Hyperstone CPU Code & Data */ - /* 0 - 0x17fffff empty space */ - ROM_LOAD16_WORD_SWAP( "flash.u8", 0x1800000, 0x400000, CRC(dc08a224) SHA1(4d14145eb84ad13674296f81e90b9d60403fa0de) ) - ROM_LOAD16_WORD_SWAP( "flash.u9", 0x1c00000, 0x400000, CRC(c1fee95f) SHA1(0ed5ed9fa18e7da9242a6df2c210c46de25a2281) ) + /* Hyperstone CPU Code & Data */ + ROM_REGION32_LE( 0x400000, "flash0", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash1", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash2", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash3", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash4", ROMREGION_ERASE00 ) + ROM_REGION32_LE( 0x400000, "flash5", ROMREGION_ERASE00 ) + + ROM_REGION32_LE( 0x400000, "flash6", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u8", 0x0000000, 0x400000, CRC(dc08a224) SHA1(4d14145eb84ad13674296f81e90b9d60403fa0de) ) + + ROM_REGION32_LE( 0x400000, "flash7", ROMREGION_ERASE00 ) + ROM_LOAD( "flash.u9", 0x0000000, 0x400000, CRC(c1fee95f) SHA1(0ed5ed9fa18e7da9242a6df2c210c46de25a2281) ) ROM_REGION( 0x400000, "ks0164", 0 ) /* sound ROM */ - ROM_LOAD16_WORD_SWAP( "flash.u10", 0x000000, 0x400000, CRC(dfeb91a0) SHA1(a4a79073c3f6135957ea8a4a66a9c71a3a39893c) ) + ROM_LOAD16_WORD_SWAP( "flash.u10", 0x0000000, 0x400000, CRC(dfeb91a0) SHA1(a4a79073c3f6135957ea8a4a66a9c71a3a39893c) ) ROM_REGION( 0x1000, "cpu2", ROMREGION_ERASEFF ) /* PIC */ // not present ROM_END - - -void dgpix_state::init_elfin() +void dgpix_typea_state::init_elfin() { - u8 *rom = memregion("flash")->base() + 0x1c00000; - - rom[BYTE4_XOR_BE(0x3a9e94)] = 3; - rom[BYTE4_XOR_BE(0x3a9e95)] = 0; - rom[BYTE4_XOR_BE(0x3a9e96)] = 3; - rom[BYTE4_XOR_BE(0x3a9e97)] = 0; - rom[BYTE4_XOR_BE(0x3a9e98)] = 3; - rom[BYTE4_XOR_BE(0x3a9e99)] = 0; - - m_flash_roms = 2; + u8 *rom = memregion("flash7")->base(); + + rom[BYTE4_XOR_LE(0x3a9e94)] = 0; + rom[BYTE4_XOR_LE(0x3a9e95)] = 3; + rom[BYTE4_XOR_LE(0x3a9e96)] = 0; + rom[BYTE4_XOR_LE(0x3a9e97)] = 3; + rom[BYTE4_XOR_LE(0x3a9e98)] = 0; + rom[BYTE4_XOR_LE(0x3a9e99)] = 3; } -void dgpix_state::init_jumpjump() +void dgpix_typea_state::init_jumpjump() { - u8 *rom = memregion("flash")->base() + 0x1c00000; - - rom[BYTE4_XOR_BE(0x3a829a)] = 3; - rom[BYTE4_XOR_BE(0x3a829b)] = 0; - rom[BYTE4_XOR_BE(0x3a829c)] = 3; - rom[BYTE4_XOR_BE(0x3a829d)] = 0; - rom[BYTE4_XOR_BE(0x3a829e)] = 3; - rom[BYTE4_XOR_BE(0x3a829f)] = 0; - - m_flash_roms = 2; + u8 *rom = memregion("flash7")->base(); + + rom[BYTE4_XOR_LE(0x3a829a)] = 0; + rom[BYTE4_XOR_LE(0x3a829b)] = 3; + rom[BYTE4_XOR_LE(0x3a829c)] = 0; + rom[BYTE4_XOR_LE(0x3a829d)] = 3; + rom[BYTE4_XOR_LE(0x3a829e)] = 0; + rom[BYTE4_XOR_LE(0x3a829f)] = 3; } -void dgpix_state::init_xfiles() +void dgpix_typea_state::init_xfiles() { - u8 *rom = memregion("flash")->base() + 0x1c00000; - - rom[BYTE4_XOR_BE(0x3a9a2a)] = 3; - rom[BYTE4_XOR_BE(0x3a9a2b)] = 0; - rom[BYTE4_XOR_BE(0x3a9a2c)] = 3; - rom[BYTE4_XOR_BE(0x3a9a2d)] = 0; - rom[BYTE4_XOR_BE(0x3a9a2e)] = 3; - rom[BYTE4_XOR_BE(0x3a9a2f)] = 0; - - m_flash_roms = 2; + u8 *rom = memregion("flash7")->base(); + + rom[BYTE4_XOR_LE(0x3a9a2a)] = 0; + rom[BYTE4_XOR_LE(0x3a9a2b)] = 3; + rom[BYTE4_XOR_LE(0x3a9a2c)] = 0; + rom[BYTE4_XOR_LE(0x3a9a2d)] = 3; + rom[BYTE4_XOR_LE(0x3a9a2e)] = 0; + rom[BYTE4_XOR_LE(0x3a9a2f)] = 3; } -void dgpix_state::init_xfilesk() +void dgpix_typea_state::init_xfilesk() { - u8 *rom = memregion("flash")->base() + 0x1c00000; + u8 *rom = memregion("flash7")->base(); - rom[BYTE4_XOR_BE(0x3aa92e)] = 3; - rom[BYTE4_XOR_BE(0x3aa92f)] = 0; - rom[BYTE4_XOR_BE(0x3aa930)] = 3; - rom[BYTE4_XOR_BE(0x3aa931)] = 0; - rom[BYTE4_XOR_BE(0x3aa932)] = 3; - rom[BYTE4_XOR_BE(0x3aa933)] = 0; + rom[BYTE4_XOR_LE(0x3aa92e)] = 0; + rom[BYTE4_XOR_LE(0x3aa92f)] = 3; + rom[BYTE4_XOR_LE(0x3aa930)] = 0; + rom[BYTE4_XOR_LE(0x3aa931)] = 3; + rom[BYTE4_XOR_LE(0x3aa932)] = 0; + rom[BYTE4_XOR_LE(0x3aa933)] = 3; // protection related ? // m_maincpu->space(AS_PROGRAM).nop_read(0xf0c8b440, 0xf0c8b447); - - m_flash_roms = 2; } -void dgpix_state::init_kdynastg() +void dgpix_typea_state::init_kdynastg() { - u8 *rom = memregion("flash")->base() + 0x1c00000; + u8 *rom = memregion("flash7")->base(); - rom[BYTE4_XOR_BE(0x3aaa10)] = 3; // 129f0 - nopped call - rom[BYTE4_XOR_BE(0x3aaa11)] = 0; - rom[BYTE4_XOR_BE(0x3aaa12)] = 3; - rom[BYTE4_XOR_BE(0x3aaa13)] = 0; - rom[BYTE4_XOR_BE(0x3aaa14)] = 3; - rom[BYTE4_XOR_BE(0x3aaa15)] = 0; + rom[BYTE4_XOR_LE(0x3aaa10)] = 0; // 129f0 - nopped call + rom[BYTE4_XOR_LE(0x3aaa11)] = 3; + rom[BYTE4_XOR_LE(0x3aaa12)] = 0; + rom[BYTE4_XOR_LE(0x3aaa13)] = 3; + rom[BYTE4_XOR_LE(0x3aaa14)] = 0; + rom[BYTE4_XOR_LE(0x3aaa15)] = 3; - rom[BYTE4_XOR_BE(0x3a45c8)] = 5; // c5a8 - added ret - rom[BYTE4_XOR_BE(0x3a45c9)] = 0; + rom[BYTE4_XOR_LE(0x3a45c8)] = 0; // c5a8 - added ret + rom[BYTE4_XOR_LE(0x3a45c9)] = 5; // protection related ? // m_maincpu->space(AS_PROGRAM).nop_read(0x12341234, 0x12341243); - - m_flash_roms = 4; -} - -void dgpix_state::init_letsdnce() -{ - u8 *rom = memregion("flash")->base() + 0x1c00000; - - rom[BYTE4_XOR_BE(0x3a9eb2)] = 3; - rom[BYTE4_XOR_BE(0x3a9eb3)] = 0; - rom[BYTE4_XOR_BE(0x3a9eb4)] = 3; - rom[BYTE4_XOR_BE(0x3a9eb5)] = 0; - rom[BYTE4_XOR_BE(0x3a9eb6)] = 3; - rom[BYTE4_XOR_BE(0x3a9eb7)] = 0; - - m_flash_roms = 2; -} - -void dgpix_state::init_btplay2k() -{ - u8 *rom = memregion("flash")->base() + 0x1c00000; - - rom[BYTE4_XOR_BE(0x3a7914)] = 3; - rom[BYTE4_XOR_BE(0x3a7915)] = 0; - rom[BYTE4_XOR_BE(0x3a7916)] = 3; - rom[BYTE4_XOR_BE(0x3a7917)] = 0; - rom[BYTE4_XOR_BE(0x3a7918)] = 3; - rom[BYTE4_XOR_BE(0x3a7919)] = 0; - - m_flash_roms = 2; } -void dgpix_state::init_fmaniac2p() +void dgpix_bmkey_state::init_letsdnce() { - m_flash_roms = 2; + u8 *rom = memregion("flash7")->base(); + + rom[BYTE4_XOR_LE(0x3a9eb2)] = 0; + rom[BYTE4_XOR_LE(0x3a9eb3)] = 3; + rom[BYTE4_XOR_LE(0x3a9eb4)] = 0; + rom[BYTE4_XOR_LE(0x3a9eb5)] = 3; + rom[BYTE4_XOR_LE(0x3a9eb6)] = 0; + rom[BYTE4_XOR_LE(0x3a9eb7)] = 3; } -void dgpix_state::init_fmaniac3() +void dgpix_bmkey_state::init_btplay2k() { - m_flash_roms = 2; + u8 *rom = memregion("flash7")->base(); + + rom[BYTE4_XOR_LE(0x3a7914)] = 0; + rom[BYTE4_XOR_LE(0x3a7915)] = 3; + rom[BYTE4_XOR_LE(0x3a7916)] = 0; + rom[BYTE4_XOR_LE(0x3a7917)] = 3; + rom[BYTE4_XOR_LE(0x3a7918)] = 0; + rom[BYTE4_XOR_LE(0x3a7919)] = 3; } } // anonymous namespace -GAME( 1999, elfin, 0, dgpix, dgpix, dgpix_state, init_elfin, ROT0, "dgPIX Entertainment Inc.", "Elfin", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1999, jumpjump, 0, dgpix, dgpix, dgpix_state, init_jumpjump, ROT0, "dgPIX Entertainment Inc.", "Jump Jump", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1999, xfiles, 0, dgpix, dgpix, dgpix_state, init_xfiles, ROT0, "dgPIX Entertainment Inc.", "The X-Files", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1999, xfilesk, xfiles, dgpix, dgpix, dgpix_state, init_xfilesk, ROT0, "dgPIX Entertainment Inc.", "The X-Files (Censored, Korea)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1999, kdynastg, 0, dgpix, dgpix, dgpix_state, init_kdynastg, ROT0, "EZ Graphics", "King of Dynast Gear (version 1.8)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1999, letsdnce, 0, dgpix, dgpix, dgpix_state, init_letsdnce, ROT0, "dgPIX Entertainment Inc.", "Let's Dance", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 2000, btplay2k, 0, dgpix, dgpix, dgpix_state, init_btplay2k, ROT0, "dgPIX Entertainment Inc.", "Beat Player 2000", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 2000, fmaniac2p, 0, dgpix, dgpix, dgpix_state, init_fmaniac2p, ROT0, "Saero Entertainment", "Fishing Maniac 2+", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 2002, fmaniac3, 0, dgpix, dgpix, dgpix_state, init_fmaniac3, ROT0, "Saero Entertainment", "Fishing Maniac 3", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, elfin, 0, dgpix, dgpix, dgpix_typea_state, init_elfin, ROT0, "dgPIX Entertainment Inc.", "Elfin", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, jumpjump, 0, dgpix, dgpix, dgpix_typea_state, init_jumpjump, ROT0, "dgPIX Entertainment Inc.", "Jump Jump", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, xfiles, 0, dgpix, dgpix, dgpix_typea_state, init_xfiles, ROT0, "dgPIX Entertainment Inc.", "The X-Files", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, xfilesk, xfiles, dgpix, dgpix, dgpix_typea_state, init_xfilesk, ROT0, "dgPIX Entertainment Inc.", "The X-Files (Censored, Korea)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, kdynastg, 0, dgpix_kdynastg, dgpix, dgpix_typea_state, init_kdynastg, ROT0, "EZ Graphics", "King of Dynast Gear (version 1.8)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1999, letsdnce, 0, dgpix, letsdnce, dgpix_bmkey_state, init_letsdnce, ROT0, "dgPIX Entertainment Inc.", "Let's Dance", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 2000, btplay2k, 0, dgpix, btplay2k, dgpix_bmkey_state, init_btplay2k, ROT0, "dgPIX Entertainment Inc.", "Beat Player 2000", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 2000, fmaniac2p, 0, dgpix, dgpix, dgpix_typea_state, empty_init, ROT0, "Saero Entertainment", "Fishing Maniac 2+", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 2002, fmaniac3, 0, dgpix, dgpix, dgpix_typea_state, empty_init, ROT0, "Saero Entertainment", "Fishing Maniac 3", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3