summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2015-06-04 21:42:58 +0200
committer Olivier Galibert <galibert@pobox.com>2015-06-24 08:43:34 +0200
commit88949a5b47798b3c82851c31b6f801e4fb8ca06f (patch)
tree7929d5f4beb47f8f6b61fe2a2b89f2302f3df19c
parentd1583b9850d9fb45470648a515eb734e05fd926f (diff)
memory: Remove support for decrypted bases, use an address space instead [O. Galibert]
-rw-r--r--docs/m6502.txt4
-rw-r--r--src/emu/cpu/8x300/8x300.c2
-rw-r--r--src/emu/cpu/adsp2100/adsp2100.c2
-rw-r--r--src/emu/cpu/alph8201/alph8201.h4
-rw-r--r--src/emu/cpu/am29000/am29000.c4
-rw-r--r--src/emu/cpu/arm/arm.c2
-rw-r--r--src/emu/cpu/arm7/arm7.c4
-rw-r--r--src/emu/cpu/arm7/arm7drc.inc10
-rw-r--r--src/emu/cpu/asap/asap.c2
-rw-r--r--src/emu/cpu/ccpu/ccpu.c2
-rw-r--r--src/emu/cpu/cop400/cop400.c2
-rw-r--r--src/emu/cpu/cosmac/cosmac.c2
-rw-r--r--src/emu/cpu/cubeqcpu/cubeqcpu.c6
-rw-r--r--src/emu/cpu/dsp16/dsp16.c2
-rw-r--r--src/emu/cpu/dsp32/dsp32.c2
-rw-r--r--src/emu/cpu/dsp56k/dsp56k.c2
-rw-r--r--src/emu/cpu/e132xs/e132xs.h2
-rw-r--r--src/emu/cpu/esrip/esrip.c2
-rw-r--r--src/emu/cpu/f8/f8.c12
-rw-r--r--src/emu/cpu/h6280/h6280.c4
-rw-r--r--src/emu/cpu/h8/h8.c2
-rw-r--r--src/emu/cpu/hphybrid/hphybrid.c2
-rw-r--r--src/emu/cpu/i386/i386priv.h6
-rw-r--r--src/emu/cpu/i4004/i4004.c6
-rw-r--r--src/emu/cpu/i8008/i8008.c4
-rw-r--r--src/emu/cpu/i8085/i8085.c8
-rw-r--r--src/emu/cpu/i86/i186.c4
-rw-r--r--src/emu/cpu/i86/i286.c4
-rw-r--r--src/emu/cpu/i86/i86.c4
-rw-r--r--src/emu/cpu/i960/i960.c10
-rw-r--r--src/emu/cpu/ie15/ie15.c4
-rw-r--r--src/emu/cpu/jaguar/jaguar.c2
-rw-r--r--src/emu/cpu/lc8670/lc8670.c2
-rw-r--r--src/emu/cpu/lh5801/5801tbl.inc134
-rw-r--r--src/emu/cpu/m37710/m37710cm.h4
-rw-r--r--src/emu/cpu/m6502/deco16.c8
-rw-r--r--src/emu/cpu/m6502/m4510.c19
-rw-r--r--src/emu/cpu/m6502/m4510.h8
-rw-r--r--src/emu/cpu/m6502/m6502.c42
-rw-r--r--src/emu/cpu/m6502/m6502.h24
-rwxr-xr-xsrc/emu/cpu/m6502/m6502make.py4
-rw-r--r--src/emu/cpu/m6502/m6504.c17
-rw-r--r--src/emu/cpu/m6502/m6504.h8
-rw-r--r--src/emu/cpu/m6502/m6509.c16
-rw-r--r--src/emu/cpu/m6502/m6509.h8
-rw-r--r--src/emu/cpu/m6502/m6510.c26
-rw-r--r--src/emu/cpu/m6502/m6510.h8
-rw-r--r--src/emu/cpu/m6502/n2a03.c14
-rw-r--r--src/emu/cpu/m6502/n2a03.h8
-rw-r--r--src/emu/cpu/m6502/odeco16.lst12
-rw-r--r--src/emu/cpu/m6502/om6502.lst28
-rw-r--r--src/emu/cpu/m6502/om65c02.lst10
-rw-r--r--src/emu/cpu/m6502/om65ce02.lst8
-rw-r--r--src/emu/cpu/m6502/om740.lst14
-rw-r--r--src/emu/cpu/m6800/m6800.c19
-rw-r--r--src/emu/cpu/m6800/m6800.h7
-rw-r--r--src/emu/cpu/m68000/m68000.h22
-rw-r--r--src/emu/cpu/m68000/m68kcpu.c86
-rw-r--r--src/emu/cpu/m68000/m68kcpu.h15
-rw-r--r--src/emu/cpu/m6805/m6805.c4
-rw-r--r--src/emu/cpu/m6809/hd6309.ops3
-rw-r--r--src/emu/cpu/m6809/m6809.c40
-rw-r--r--src/emu/cpu/m6809/m6809.h38
-rw-r--r--src/emu/cpu/m6809/m6809.ops3
-rw-r--r--src/emu/cpu/m6809/m6809inl.h42
-rw-r--r--src/emu/cpu/mb86233/mb86233.c2
-rw-r--r--src/emu/cpu/mb88xx/mb88xx.c2
-rw-r--r--src/emu/cpu/mc68hc11/mc68hc11.c4
-rw-r--r--src/emu/cpu/mcs48/mcs48.c4
-rw-r--r--src/emu/cpu/mcs51/mcs51.c6
-rw-r--r--src/emu/cpu/mcs96/mcs96.h2
-rw-r--r--src/emu/cpu/mips/mips3.c2
-rw-r--r--src/emu/cpu/mips/mips3drc.c12
-rw-r--r--src/emu/cpu/mips/mips3fe.c2
-rw-r--r--src/emu/cpu/mips/r3000.c2
-rw-r--r--src/emu/cpu/nec/nec.c4
-rw-r--r--src/emu/cpu/nec/v25.c4
-rw-r--r--src/emu/cpu/pic16c5x/pic16c5x.c2
-rw-r--r--src/emu/cpu/pic16c62x/pic16c62x.c2
-rw-r--r--src/emu/cpu/powerpc/ppcdrc.c8
-rw-r--r--src/emu/cpu/powerpc/ppcfe.c2
-rw-r--r--src/emu/cpu/pps4/pps4.c4
-rw-r--r--src/emu/cpu/psx/psx.c8
-rw-r--r--src/emu/cpu/rsp/rspdrc.c10
-rw-r--r--src/emu/cpu/rsp/rspfe.c2
-rw-r--r--src/emu/cpu/s2650/s2650.c4
-rw-r--r--src/emu/cpu/saturn/satops.inc4
-rw-r--r--src/emu/cpu/sc61860/scops.inc8
-rw-r--r--src/emu/cpu/scmp/scmp.c4
-rw-r--r--src/emu/cpu/score/score.c2
-rw-r--r--src/emu/cpu/se3208/se3208.c2
-rw-r--r--src/emu/cpu/sh2/sh2.c14
-rw-r--r--src/emu/cpu/sh2/sh2.h6
-rw-r--r--src/emu/cpu/sh2/sh2drc.c8
-rw-r--r--src/emu/cpu/sh2/sh2fe.c2
-rw-r--r--src/emu/cpu/sh4/sh4.c12
-rw-r--r--src/emu/cpu/ssp1601/ssp1601.c2
-rw-r--r--src/emu/cpu/t11/t11.c2
-rw-r--r--src/emu/cpu/tms32010/tms32010.c4
-rw-r--r--src/emu/cpu/tms32025/tms32025.c4
-rw-r--r--src/emu/cpu/tms32031/tms32031.c2
-rw-r--r--src/emu/cpu/tms32051/tms32051.c2
-rw-r--r--src/emu/cpu/tms32082/tms32082.c2
-rw-r--r--src/emu/cpu/tms34010/34010ops.c6
-rw-r--r--src/emu/cpu/tms34010/tms34010.c10
-rw-r--r--src/emu/cpu/tms7000/tms7000.c2
-rw-r--r--src/emu/cpu/tms7000/tms7000.h4
-rw-r--r--src/emu/cpu/upd7725/upd7725.c2
-rw-r--r--src/emu/cpu/upd7810/upd7810_macros.h4
-rw-r--r--src/emu/cpu/v30mz/v30mz.c4
-rw-r--r--src/emu/cpu/v60/v60.c20
-rw-r--r--src/emu/cpu/v810/v810.c2
-rw-r--r--src/emu/cpu/z180/z180.c15
-rw-r--r--src/emu/cpu/z180/z180.h5
-rw-r--r--src/emu/cpu/z180/z180dd.inc2
-rw-r--r--src/emu/cpu/z180/z180ed.inc2
-rw-r--r--src/emu/cpu/z180/z180ops.h6
-rw-r--r--src/emu/cpu/z8/z8.c2
-rw-r--r--src/emu/cpu/z8/z8ops.inc4
-rw-r--r--src/emu/cpu/z80/z80.c25
-rw-r--r--src/emu/cpu/z80/z80.h7
-rw-r--r--src/emu/debug/debugcmd.c18
-rw-r--r--src/emu/debug/debugcpu.c40
-rw-r--r--src/emu/debug/debugcpu.h2
-rw-r--r--src/emu/debug/dvdisasm.c21
-rw-r--r--src/emu/debug/dvdisasm.h1
-rw-r--r--src/emu/devcpu.h1
-rw-r--r--src/emu/dimemory.h8
-rw-r--r--src/emu/machine/6821pia.c2
-rw-r--r--src/emu/machine/68307.c2
-rw-r--r--src/emu/mconfig.h3
-rw-r--r--src/emu/memory.c122
-rw-r--r--src/emu/memory.h113
-rw-r--r--src/emu/sound/bsmt2000.c2
-rw-r--r--src/emu/sound/c352.c4
-rw-r--r--src/emu/sound/es5503.c4
-rw-r--r--src/emu/sound/multipcm.c4
-rw-r--r--src/emu/sound/okim6295.c14
-rw-r--r--src/emu/sound/okim9810.c34
-rw-r--r--src/emu/sound/qs1000.c44
-rw-r--r--src/emu/sound/ymf278b.c18
-rw-r--r--src/emu/validity.c2
-rw-r--r--src/mame/audio/seibu.c99
-rw-r--r--src/mame/audio/seibu.h27
-rw-r--r--src/mame/audio/turrett.c2
-rw-r--r--src/mame/drivers/angelkds.c21
-rw-r--r--src/mame/drivers/appoooh.c50
-rw-r--r--src/mame/drivers/boogwing.c6
-rw-r--r--src/mame/drivers/cabal.c36
-rw-r--r--src/mame/drivers/calorie.c18
-rw-r--r--src/mame/drivers/cbasebal.c14
-rw-r--r--src/mame/drivers/cclimber.c176
-rw-r--r--src/mame/drivers/chinsan.c19
-rw-r--r--src/mame/drivers/circusc.c3
-rw-r--r--src/mame/drivers/commando.c49
-rw-r--r--src/mame/drivers/cps1.c21
-rw-r--r--src/mame/drivers/cps2.c13
-rw-r--r--src/mame/drivers/cps3.c57
-rw-r--r--src/mame/drivers/cshooter.c34
-rw-r--r--src/mame/drivers/darkmist.c11
-rw-r--r--src/mame/drivers/dblewing.c11
-rw-r--r--src/mame/drivers/deadang.c3
-rw-r--r--src/mame/drivers/dietgo.c7
-rw-r--r--src/mame/drivers/dynduke.c2
-rw-r--r--src/mame/drivers/finalizr.c3
-rw-r--r--src/mame/drivers/freekick.c80
-rw-r--r--src/mame/drivers/funworld.c6
-rw-r--r--src/mame/drivers/galaxian.c41
-rw-r--r--src/mame/drivers/gyruss.c3
-rw-r--r--src/mame/drivers/hyperspt.c3
-rw-r--r--src/mame/drivers/igs017.c18
-rw-r--r--src/mame/drivers/jack.c27
-rw-r--r--src/mame/drivers/jailbrek.c4
-rw-r--r--src/mame/drivers/jongkyo.c47
-rw-r--r--src/mame/drivers/junofrst.c5
-rw-r--r--src/mame/drivers/kchamp.c30
-rw-r--r--src/mame/drivers/ladybug.c18
-rw-r--r--src/mame/drivers/liberate.c32
-rw-r--r--src/mame/drivers/megazone.c3
-rw-r--r--src/mame/drivers/mitchell.c76
-rw-r--r--src/mame/drivers/mouser.c20
-rw-r--r--src/mame/drivers/mustache.c4
-rw-r--r--src/mame/drivers/ninjakd2.c23
-rw-r--r--src/mame/drivers/pacman.c77
-rw-r--r--src/mame/drivers/pbaction.c55
-rw-r--r--src/mame/drivers/pengo.c49
-rw-r--r--src/mame/drivers/pktgaldx.c7
-rw-r--r--src/mame/drivers/raiden.c16
-rw-r--r--src/mame/drivers/rocnrope.c7
-rw-r--r--src/mame/drivers/sbasketb.c18
-rw-r--r--src/mame/drivers/scramble.c6
-rw-r--r--src/mame/drivers/segae.c124
-rw-r--r--src/mame/drivers/segag80r.c64
-rw-r--r--src/mame/drivers/segahang.c22
-rw-r--r--src/mame/drivers/segaorun.c2
-rw-r--r--src/mame/drivers/segas16a.c65
-rw-r--r--src/mame/drivers/segas16b.c50
-rw-r--r--src/mame/drivers/segas18.c14
-rw-r--r--src/mame/drivers/seicross.c54
-rw-r--r--src/mame/drivers/senjyo.c96
-rw-r--r--src/mame/drivers/sg1000a.c47
-rw-r--r--src/mame/drivers/stfight.c6
-rw-r--r--src/mame/drivers/suna8.c49
-rw-r--r--src/mame/drivers/suprloco.c35
-rw-r--r--src/mame/drivers/system1.c944
-rw-r--r--src/mame/drivers/system16.c41
-rw-r--r--src/mame/drivers/tcl.c3
-rw-r--r--src/mame/drivers/toki.c29
-rw-r--r--src/mame/drivers/trackfld.c19
-rw-r--r--src/mame/drivers/turbo.c30
-rw-r--r--src/mame/drivers/wiz.c56
-rw-r--r--src/mame/drivers/zaxxon.c133
-rw-r--r--src/mame/includes/angelkds.h4
-rw-r--r--src/mame/includes/appoooh.h4
-rw-r--r--src/mame/includes/boogwing.h4
-rw-r--r--src/mame/includes/cclimber.h6
-rw-r--r--src/mame/includes/commando.h4
-rw-r--r--src/mame/includes/cps1.h5
-rw-r--r--src/mame/includes/cps3.h10
-rw-r--r--src/mame/includes/darkmist.h4
-rw-r--r--src/mame/includes/decocrpt.h2
-rw-r--r--src/mame/includes/dietgo.h4
-rw-r--r--src/mame/includes/freekick.h5
-rw-r--r--src/mame/includes/galaxian.h4
-rw-r--r--src/mame/includes/jack.h4
-rw-r--r--src/mame/includes/kchamp.h6
-rw-r--r--src/mame/includes/ladybug.h4
-rw-r--r--src/mame/includes/liberate.h4
-rw-r--r--src/mame/includes/mitchell.h4
-rw-r--r--src/mame/includes/mouser.h4
-rw-r--r--src/mame/includes/ninjakd2.h4
-rw-r--r--src/mame/includes/pacman.h4
-rw-r--r--src/mame/includes/pbaction.h4
-rw-r--r--src/mame/includes/pktgaldx.h4
-rw-r--r--src/mame/includes/segag80r.h4
-rw-r--r--src/mame/includes/segahang.h4
-rw-r--r--src/mame/includes/segas16a.h2
-rw-r--r--src/mame/includes/segas16b.h4
-rw-r--r--src/mame/includes/seicross.h4
-rw-r--r--src/mame/includes/senjyo.h4
-rw-r--r--src/mame/includes/stfight.h4
-rw-r--r--src/mame/includes/suprloco.h4
-rw-r--r--src/mame/includes/system1.h14
-rw-r--r--src/mame/includes/system16.h4
-rw-r--r--src/mame/includes/turbo.h2
-rw-r--r--src/mame/includes/wiz.h4
-rw-r--r--src/mame/includes/zaxxon.h4
-rw-r--r--src/mame/machine/cclimber.c9
-rw-r--r--src/mame/machine/cps2crpt.c13
-rw-r--r--src/mame/machine/deco102.c12
-rw-r--r--src/mame/machine/deco222.c8
-rw-r--r--src/mame/machine/deco222.h4
-rw-r--r--src/mame/machine/decocpu6.c6
-rw-r--r--src/mame/machine/decocpu6.h2
-rw-r--r--src/mame/machine/decocpu7.c4
-rw-r--r--src/mame/machine/decocpu7.h2
-rw-r--r--src/mame/machine/fd1089.c15
-rw-r--r--src/mame/machine/fd1089.h2
-rw-r--r--src/mame/machine/fd1094.c32
-rw-r--r--src/mame/machine/fd1094.h2
-rw-r--r--src/mame/machine/fddebug.c2
-rw-r--r--src/mame/machine/kabuki.c73
-rw-r--r--src/mame/machine/kabuki.h30
-rw-r--r--src/mame/machine/konami1.c72
-rw-r--r--src/mame/machine/konami1.h27
-rw-r--r--src/mame/machine/mc8123.c39
-rw-r--r--src/mame/machine/mc8123.h6
-rw-r--r--src/mame/machine/scramble.c4
-rw-r--r--src/mame/machine/segacrp2.c204
-rw-r--r--src/mame/machine/segacrp2.h13
-rw-r--r--src/mame/machine/segacrpt.c843
-rw-r--r--src/mame/machine/segacrpt.h27
-rw-r--r--src/mame/machine/segaic16.c18
-rw-r--r--src/mame/machine/segaic16.h8
-rw-r--r--src/mame/machine/slapstic.c2
-rw-r--r--src/mame/machine/stfight.c6
276 files changed, 3441 insertions, 3018 deletions
diff --git a/docs/m6502.txt b/docs/m6502.txt
index c4517a4329a..d09954719bd 100644
--- a/docs/m6502.txt
+++ b/docs/m6502.txt
@@ -233,8 +233,8 @@ subclass has been created. It's called memory_interface, declared in
m6502_device, and provides the following accessors:
- UINT8 read(UINT16 adr) - normal read
-- UINT8 read_direct(UINT16 adr) - direct read
-- UINT8 read_decrypted(UINT16 adr) - decrypted data read
+- UINT8 read_sync(UINT16 adr) - opcode read with sync active (first byte of opcode)
+- UINT8 read_arg(UINT16 adr) - opcode read with sync inactive (rest of opcode)
- void write(UINT16 adr, UINT8 val) - normal write
- UINT8 read_9(UINT16 adr) - special y-indexed 6509 read, defaults to read()
diff --git a/src/emu/cpu/8x300/8x300.c b/src/emu/cpu/8x300/8x300.c
index 0bbc7eec3d6..bf6a5148ca5 100644
--- a/src/emu/cpu/8x300/8x300.c
+++ b/src/emu/cpu/8x300/8x300.c
@@ -12,7 +12,7 @@
#include "debugger.h"
#include "8x300.h"
-#define FETCHOP(a) (m_direct->read_decrypted_word(a))
+#define FETCHOP(a) (m_direct->read_word(a))
#define CYCLES(x) do { m_icount -= (x); } while (0)
#define READPORT(a) (m_io->read_byte(a))
#define WRITEPORT(a,v) (m_io->write_byte((a), (v)))
diff --git a/src/emu/cpu/adsp2100/adsp2100.c b/src/emu/cpu/adsp2100/adsp2100.c
index 3c3a5e7049c..8142a6a7a34 100644
--- a/src/emu/cpu/adsp2100/adsp2100.c
+++ b/src/emu/cpu/adsp2100/adsp2100.c
@@ -811,7 +811,7 @@ inline void adsp21xx_device::program_write(UINT32 addr, UINT32 data)
inline UINT32 adsp21xx_device::opcode_read()
{
- return m_direct->read_decrypted_dword(m_pc << 2);
+ return m_direct->read_dword(m_pc << 2);
}
diff --git a/src/emu/cpu/alph8201/alph8201.h b/src/emu/cpu/alph8201/alph8201.h
index 3431627a6ee..16555803988 100644
--- a/src/emu/cpu/alph8201/alph8201.h
+++ b/src/emu/cpu/alph8201/alph8201.h
@@ -72,8 +72,8 @@ protected:
UINT8 M_RDMEM(UINT16 A) { return m_program->read_byte(A); }
void M_WRMEM(UINT16 A,UINT8 V) { m_program->write_byte(A, V); }
- UINT8 M_RDOP(UINT16 A) { return m_direct->read_decrypted_byte(A); }
- UINT8 M_RDOP_ARG(UINT16 A) { return m_direct->read_raw_byte(A); }
+ UINT8 M_RDOP(UINT16 A) { return m_direct->read_byte(A); }
+ UINT8 M_RDOP_ARG(UINT16 A) { return m_direct->read_byte(A); }
UINT8 RD_REG(UINT8 x) { return m_RAM[(m_regPtr<<3)+(x)]; }
void WR_REG(UINT8 x, UINT8 d) { m_RAM[(m_regPtr<<3)+(x)]=(d); }
diff --git a/src/emu/cpu/am29000/am29000.c b/src/emu/cpu/am29000/am29000.c
index ee0dd825a60..27924fa163f 100644
--- a/src/emu/cpu/am29000/am29000.c
+++ b/src/emu/cpu/am29000/am29000.c
@@ -479,7 +479,7 @@ UINT32 am29000_cpu_device::read_program_word(UINT32 address)
{
/* TODO: ROM enable? */
if (m_cps & CPS_PI || m_cps & CPS_RE)
- return m_direct->read_decrypted_dword(address);
+ return m_direct->read_dword(address);
else
{
fatalerror("Am29000 instruction MMU translation enabled!\n");
@@ -626,7 +626,7 @@ void am29000_cpu_device::execute_run()
if (m_cfg & CFG_VF)
{
UINT32 vaddr = m_vab | m_exception_queue[0] * 4;
- UINT32 vect = m_datadirect->read_decrypted_dword(vaddr);
+ UINT32 vect = m_datadirect->read_dword(vaddr);
m_pc = vect & ~3;
m_next_pc = m_pc;
diff --git a/src/emu/cpu/arm/arm.c b/src/emu/cpu/arm/arm.c
index 3b2b410bf58..8d9b420486d 100644
--- a/src/emu/cpu/arm/arm.c
+++ b/src/emu/cpu/arm/arm.c
@@ -345,7 +345,7 @@ void arm_cpu_device::execute_run()
/* load instruction */
pc = R15;
- insn = m_direct->read_decrypted_dword( pc & ADDRESS_MASK );
+ insn = m_direct->read_dword( pc & ADDRESS_MASK );
switch (insn >> INSN_COND_SHIFT)
{
diff --git a/src/emu/cpu/arm7/arm7.c b/src/emu/cpu/arm7/arm7.c
index 65125f265f6..65cae0871ac 100644
--- a/src/emu/cpu/arm7/arm7.c
+++ b/src/emu/cpu/arm7/arm7.c
@@ -641,7 +641,7 @@ void arm7_cpu_device::execute_run()
}
}
- insn = m_direct->read_decrypted_word(raddr);
+ insn = m_direct->read_word(raddr);
(this->*thumb_handler[(insn & 0xffc0) >> 6])(pc, insn);
}
@@ -672,7 +672,7 @@ void arm7_cpu_device::execute_run()
}
#endif
- insn = m_direct->read_decrypted_dword(raddr);
+ insn = m_direct->read_dword(raddr);
/* process condition codes for this instruction */
switch (insn >> INSN_COND_SHIFT)
diff --git a/src/emu/cpu/arm7/arm7drc.inc b/src/emu/cpu/arm7/arm7drc.inc
index fc97e35da1f..c30ee7a6de4 100644
--- a/src/emu/cpu/arm7/arm7drc.inc
+++ b/src/emu/cpu/arm7/arm7drc.inc
@@ -1203,12 +1203,12 @@ void arm7_cpu_device::generate_checksum_block(drcuml_block *block, compiler_stat
if (!(seqhead->flags & OPFLAG_VIRTUAL_NOOP))
{
UINT32 sum = seqhead->opptr.l[0];
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, uml::I0, base, 0, uml::SIZE_DWORD, uml::SCALE_x4); // load i0,base,0,dword
if (seqhead->delay.first() != NULL && seqhead->physpc != seqhead->delay.first()->physpc)
{
- base = m_direct->read_decrypted_ptr(seqhead->delay.first()->physpc);
+ base = m_direct->read_ptr(seqhead->delay.first()->physpc);
UML_LOAD(block, uml::I1, base, 0, uml::SIZE_DWORD, uml::SCALE_x4); // load i1,base,dword
UML_ADD(block, uml::I0, uml::I0, uml::I1); // add i0,i0,i1
@@ -1224,20 +1224,20 @@ void arm7_cpu_device::generate_checksum_block(drcuml_block *block, compiler_stat
else
{
UINT32 sum = 0;
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, uml::I0, base, 0, uml::SIZE_DWORD, uml::SCALE_x4); // load i0,base,0,dword
sum += seqhead->opptr.l[0];
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc);
+ base = m_direct->read_ptr(curdesc->physpc);
UML_LOAD(block, uml::I1, base, 0, uml::SIZE_DWORD, uml::SCALE_x4); // load i1,base,dword
UML_ADD(block, uml::I0, uml::I0, uml::I1); // add i0,i0,i1
sum += curdesc->opptr.l[0];
if (curdesc->delay.first() != NULL && (curdesc == seqlast || (curdesc->next() != NULL && curdesc->next()->physpc != curdesc->delay.first()->physpc)))
{
- base = m_direct->read_decrypted_ptr(curdesc->delay.first()->physpc);
+ base = m_direct->read_ptr(curdesc->delay.first()->physpc);
UML_LOAD(block, uml::I1, base, 0, uml::SIZE_DWORD, uml::SCALE_x4); // load i1,base,dword
UML_ADD(block, uml::I0, uml::I0, uml::I1); // add i0,i0,i1
sum += curdesc->delay.first()->opptr.l[0];
diff --git a/src/emu/cpu/asap/asap.c b/src/emu/cpu/asap/asap.c
index 1402ef8e442..21133e46975 100644
--- a/src/emu/cpu/asap/asap.c
+++ b/src/emu/cpu/asap/asap.c
@@ -343,7 +343,7 @@ offs_t asap_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *opr
inline UINT32 asap_device::readop(offs_t pc)
{
- return m_direct->read_decrypted_dword(pc);
+ return m_direct->read_dword(pc);
}
diff --git a/src/emu/cpu/ccpu/ccpu.c b/src/emu/cpu/ccpu/ccpu.c
index a06ac8e003e..e8893580f0c 100644
--- a/src/emu/cpu/ccpu/ccpu.c
+++ b/src/emu/cpu/ccpu/ccpu.c
@@ -22,7 +22,7 @@ const device_type CCPU = &device_creator<ccpu_cpu_device>;
MACROS
***************************************************************************/
-#define READOP(a) (m_direct->read_decrypted_byte(a))
+#define READOP(a) (m_direct->read_byte(a))
#define RDMEM(a) (m_data->read_word((a) * 2) & 0xfff)
#define WRMEM(a,v) (m_data->write_word((a) * 2, (v)))
diff --git a/src/emu/cpu/cop400/cop400.c b/src/emu/cpu/cop400/cop400.c
index c52c1d18299..eca60705b2c 100644
--- a/src/emu/cpu/cop400/cop400.c
+++ b/src/emu/cpu/cop400/cop400.c
@@ -97,7 +97,7 @@ const device_type COP445 = &device_creator<cop445_cpu_device>;
MACROS
***************************************************************************/
-#define ROM(a) m_direct->read_decrypted_byte(a)
+#define ROM(a) m_direct->read_byte(a)
#define RAM_R(a) m_data->read_byte(a)
#define RAM_W(a, v) m_data->write_byte(a, v)
diff --git a/src/emu/cpu/cosmac/cosmac.c b/src/emu/cpu/cosmac/cosmac.c
index f33e5869725..f011e37a47a 100644
--- a/src/emu/cpu/cosmac/cosmac.c
+++ b/src/emu/cpu/cosmac/cosmac.c
@@ -533,7 +533,7 @@ offs_t cdp1802_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *
inline UINT8 cosmac_device::read_opcode(offs_t pc)
{
- return m_direct->read_decrypted_byte(pc);
+ return m_direct->read_byte(pc);
}
diff --git a/src/emu/cpu/cubeqcpu/cubeqcpu.c b/src/emu/cpu/cubeqcpu/cubeqcpu.c
index 7b79940c998..2e263b6bac4 100644
--- a/src/emu/cpu/cubeqcpu/cubeqcpu.c
+++ b/src/emu/cpu/cubeqcpu/cubeqcpu.c
@@ -520,7 +520,7 @@ void cquestsnd_cpu_device::execute_run()
do
{
/* Decode the instruction */
- UINT64 inst = m_direct->read_decrypted_qword(SND_PC << 3);
+ UINT64 inst = m_direct->read_qword(SND_PC << 3);
UINT32 inslow = inst & 0xffffffff;
UINT32 inshig = inst >> 32;
@@ -776,7 +776,7 @@ void cquestrot_cpu_device::execute_run()
do
{
/* Decode the instruction */
- UINT64 inst = m_direct->read_decrypted_qword(ROT_PC << 3);
+ UINT64 inst = m_direct->read_qword(ROT_PC << 3);
UINT32 inslow = inst & 0xffffffff;
UINT32 inshig = inst >> 32;
@@ -1196,7 +1196,7 @@ void cquestlin_cpu_device::execute_run()
int prog = (m_clkcnt & 3) ? BACKGROUND : FOREGROUND;
m_curpc = LINE_PC;
- UINT64 inst = m_direct->read_decrypted_qword(LINE_PC << 3);
+ UINT64 inst = m_direct->read_qword(LINE_PC << 3);
UINT32 inslow = inst & 0xffffffff;
UINT32 inshig = inst >> 32;
diff --git a/src/emu/cpu/dsp16/dsp16.c b/src/emu/cpu/dsp16/dsp16.c
index 565377eb714..9f1de0c79f6 100644
--- a/src/emu/cpu/dsp16/dsp16.c
+++ b/src/emu/cpu/dsp16/dsp16.c
@@ -373,7 +373,7 @@ inline void dsp16_device::data_write(const UINT16& addr, const UINT16& data)
inline UINT32 dsp16_device::opcode_read(const UINT8 pcOffset)
{
const UINT16 readPC = m_pc + pcOffset;
- return m_direct->read_decrypted_dword(readPC << 1);
+ return m_direct->read_dword(readPC << 1);
}
diff --git a/src/emu/cpu/dsp32/dsp32.c b/src/emu/cpu/dsp32/dsp32.c
index 2de5e6f50d6..21de1f18a74 100644
--- a/src/emu/cpu/dsp32/dsp32.c
+++ b/src/emu/cpu/dsp32/dsp32.c
@@ -437,7 +437,7 @@ offs_t dsp32c_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *o
inline UINT32 dsp32c_device::ROPCODE(offs_t pc)
{
- return m_direct->read_decrypted_dword(pc);
+ return m_direct->read_dword(pc);
}
inline UINT8 dsp32c_device::RBYTE(offs_t addr)
diff --git a/src/emu/cpu/dsp56k/dsp56k.c b/src/emu/cpu/dsp56k/dsp56k.c
index 408521ea8fc..6855b46a97d 100644
--- a/src/emu/cpu/dsp56k/dsp56k.c
+++ b/src/emu/cpu/dsp56k/dsp56k.c
@@ -144,7 +144,7 @@ DIRECT_UPDATE_MEMBER( dsp56k_device::dsp56k_direct_handler )
/***************************************************************************
MEMORY ACCESSORS
***************************************************************************/
-#define ROPCODE(pc) cpustate->direct->read_decrypted_word(pc)
+#define ROPCODE(pc) cpustate->direct->read_word(pc)
/***************************************************************************
diff --git a/src/emu/cpu/e132xs/e132xs.h b/src/emu/cpu/e132xs/e132xs.h
index f10c9983d50..c8f43641ff5 100644
--- a/src/emu/cpu/e132xs/e132xs.h
+++ b/src/emu/cpu/e132xs/e132xs.h
@@ -199,7 +199,7 @@ extern unsigned dasm_hyperstone(char *buffer, unsigned pc, const UINT8 *oprom, u
#define IO_WRITE_W(addr, data) m_io->write_dword(((addr) >> 11) & 0x7ffc, data)
-#define READ_OP(addr) m_direct->read_decrypted_word((addr), m_opcodexor)
+#define READ_OP(addr) m_direct->read_word((addr), m_opcodexor)
//**************************************************************************
// TYPE DEFINITIONS
diff --git a/src/emu/cpu/esrip/esrip.c b/src/emu/cpu/esrip/esrip.c
index 22570346fc8..482a1ddec8d 100644
--- a/src/emu/cpu/esrip/esrip.c
+++ b/src/emu/cpu/esrip/esrip.c
@@ -1901,7 +1901,7 @@ void esrip_device::execute_run()
m_pl7 = m_l7;
/* Latch instruction */
- inst = m_direct->read_decrypted_qword(RIP_PC << 3);
+ inst = m_direct->read_qword(RIP_PC << 3);
in_h = inst >> 32;
in_l = inst & 0xffffffff;
diff --git a/src/emu/cpu/f8/f8.c b/src/emu/cpu/f8/f8.c
index 0199c54b743..182638543d7 100644
--- a/src/emu/cpu/f8/f8.c
+++ b/src/emu/cpu/f8/f8.c
@@ -96,7 +96,7 @@ void f8_cpu_device::ROMC_00(int insttim) /* SKR - added parameter to tell if */
* of PC0.
*/
- m_dbus = m_direct->read_decrypted_byte(m_pc0);
+ m_dbus = m_direct->read_byte(m_pc0);
m_pc0 += 1;
m_icount -= insttim; /* SKR - ROMC00 is usually short, not short+long, */
/* but DS is long */
@@ -110,7 +110,7 @@ void f8_cpu_device::ROMC_01()
* location addressed by PC0; then all devices add the 8-bit value
* on the data bus as signed binary number to PC0.
*/
- m_dbus = m_direct->read_raw_byte(m_pc0);
+ m_dbus = m_direct->read_byte(m_pc0);
m_pc0 += (INT8)m_dbus;
m_icount -= cL;
}
@@ -134,7 +134,7 @@ void f8_cpu_device::ROMC_03(int insttim) /* SKR - added parameter to tell if */
* Similiar to 0x00, except that it is used for immediate operands
* fetches (using PC0) instead of instruction fetches.
*/
- m_dbus = m_io = m_direct->read_raw_byte(m_pc0);
+ m_dbus = m_io = m_direct->read_byte(m_pc0);
m_pc0 += 1;
m_icount -= insttim;
}
@@ -228,7 +228,7 @@ void f8_cpu_device::ROMC_0C()
* by PC0 into the data bus; then all devices move the value that
* has just been placed on the data bus into the low order byte of PC0.
*/
- m_dbus = m_direct->read_raw_byte(m_pc0);
+ m_dbus = m_direct->read_byte(m_pc0);
m_pc0 = (m_pc0 & 0xff00) | m_dbus;
m_icount -= cL;
}
@@ -251,7 +251,7 @@ void f8_cpu_device::ROMC_0E()
* The value on the data bus is then moved to the low order byte
* of DC0 by all devices.
*/
- m_dbus = m_direct->read_raw_byte(m_pc0);
+ m_dbus = m_direct->read_byte(m_pc0);
m_dc0 = (m_dc0 & 0xff00) | m_dbus;
m_icount -= cL;
}
@@ -289,7 +289,7 @@ void f8_cpu_device::ROMC_11()
* data bus. All devices must then move the contents of the
* data bus to the upper byte of DC0.
*/
- m_dbus = m_direct->read_raw_byte(m_pc0);
+ m_dbus = m_direct->read_byte(m_pc0);
m_dc0 = (m_dc0 & 0x00ff) | (m_dbus << 8);
m_icount -= cL;
}
diff --git a/src/emu/cpu/h6280/h6280.c b/src/emu/cpu/h6280/h6280.c
index 0740ba7e8ad..f92e0520a12 100644
--- a/src/emu/cpu/h6280/h6280.c
+++ b/src/emu/cpu/h6280/h6280.c
@@ -2388,7 +2388,7 @@ void h6280_device::pull(UINT8 &value)
***************************************************************/
UINT8 h6280_device::read_opcode()
{
- return m_direct->read_decrypted_byte(translated(PCW));
+ return m_direct->read_byte(translated(PCW));
}
/***************************************************************
@@ -2396,7 +2396,7 @@ UINT8 h6280_device::read_opcode()
***************************************************************/
UINT8 h6280_device::read_opcode_arg()
{
- return m_direct->read_raw_byte(translated(PCW));
+ return m_direct->read_byte(translated(PCW));
}
diff --git a/src/emu/cpu/h8/h8.c b/src/emu/cpu/h8/h8.c
index fb6b9875fd0..9084c0b76fa 100644
--- a/src/emu/cpu/h8/h8.c
+++ b/src/emu/cpu/h8/h8.c
@@ -511,7 +511,7 @@ offs_t h8_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom
UINT16 h8_device::read16i(UINT32 adr)
{
icount--;
- return direct->read_decrypted_word(adr & ~1);
+ return direct->read_word(adr & ~1);
}
UINT16 h8_device::fetch()
diff --git a/src/emu/cpu/hphybrid/hphybrid.c b/src/emu/cpu/hphybrid/hphybrid.c
index 691e7d56711..dad427a5f0c 100644
--- a/src/emu/cpu/hphybrid/hphybrid.c
+++ b/src/emu/cpu/hphybrid/hphybrid.c
@@ -831,7 +831,7 @@ UINT16 hp_hybrid_cpu_device::RM(UINT16 addr)
return 0;
}
} else {
- return m_direct->read_decrypted_word((offs_t)addr << 1);
+ return m_direct->read_word((offs_t)addr << 1);
}
}
diff --git a/src/emu/cpu/i386/i386priv.h b/src/emu/cpu/i386/i386priv.h
index c7bb5d6ffb5..138079a5fae 100644
--- a/src/emu/cpu/i386/i386priv.h
+++ b/src/emu/cpu/i386/i386priv.h
@@ -543,7 +543,7 @@ UINT8 i386_device::FETCH()
if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))
PF_THROW(error);
- value = m_direct->read_decrypted_byte(address & m_a20_mask);
+ value = m_direct->read_byte(address & m_a20_mask);
#ifdef DEBUG_MISSING_OPCODE
m_opcode_bytes[m_opcode_bytes_length] = value;
m_opcode_bytes_length = (m_opcode_bytes_length + 1) & 15;
@@ -564,7 +564,7 @@ UINT16 i386_device::FETCH16()
if(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))
PF_THROW(error);
address &= m_a20_mask;
- value = m_direct->read_decrypted_word(address);
+ value = m_direct->read_word(address);
m_eip += 2;
m_pc += 2;
}
@@ -585,7 +585,7 @@ UINT32 i386_device::FETCH32()
PF_THROW(error);
address &= m_a20_mask;
- value = m_direct->read_decrypted_dword(address);
+ value = m_direct->read_dword(address);
m_eip += 4;
m_pc += 4;
}
diff --git a/src/emu/cpu/i4004/i4004.c b/src/emu/cpu/i4004/i4004.c
index 23b1721df3a..c6e65cb27ee 100644
--- a/src/emu/cpu/i4004/i4004.c
+++ b/src/emu/cpu/i4004/i4004.c
@@ -36,7 +36,7 @@ i4004_cpu_device::i4004_cpu_device(const machine_config &mconfig, const char *ta
UINT8 i4004_cpu_device::ROP()
{
- UINT8 retVal = m_direct->read_decrypted_byte(GET_PC.w.l);
+ UINT8 retVal = m_direct->read_byte(GET_PC.w.l);
GET_PC.w.l = (GET_PC.w.l + 1) & 0x0fff;
m_PC = GET_PC;
return retVal;
@@ -44,7 +44,7 @@ UINT8 i4004_cpu_device::ROP()
UINT8 i4004_cpu_device::READ_ROM()
{
- return m_direct->read_decrypted_byte((GET_PC.w.l & 0x0f00) | m_R[0]);
+ return m_direct->read_byte((GET_PC.w.l & 0x0f00) | m_R[0]);
}
void i4004_cpu_device::WPM()
@@ -56,7 +56,7 @@ void i4004_cpu_device::WPM()
UINT8 i4004_cpu_device::ARG()
{
- UINT8 retVal = m_direct->read_raw_byte(GET_PC.w.l);
+ UINT8 retVal = m_direct->read_byte(GET_PC.w.l);
GET_PC.w.l = (GET_PC.w.l + 1) & 0x0fff;
m_PC = GET_PC;
return retVal;
diff --git a/src/emu/cpu/i8008/i8008.c b/src/emu/cpu/i8008/i8008.c
index 2bb5b9cf4b7..551c2d09006 100644
--- a/src/emu/cpu/i8008/i8008.c
+++ b/src/emu/cpu/i8008/i8008.c
@@ -620,7 +620,7 @@ inline void i8008_device::pop_stack()
inline UINT8 i8008_device::rop()
{
- UINT8 retVal = m_direct->read_decrypted_byte(GET_PC.w.l);
+ UINT8 retVal = m_direct->read_byte(GET_PC.w.l);
GET_PC.w.l = (GET_PC.w.l + 1) & 0x3fff;
m_PC = GET_PC;
return retVal;
@@ -658,7 +658,7 @@ inline void i8008_device::set_reg(UINT8 reg, UINT8 val)
inline UINT8 i8008_device::arg()
{
- UINT8 retVal = m_direct->read_raw_byte(GET_PC.w.l);
+ UINT8 retVal = m_direct->read_byte(GET_PC.w.l);
GET_PC.w.l = (GET_PC.w.l + 1) & 0x3fff;
m_PC = GET_PC;
return retVal;
diff --git a/src/emu/cpu/i8085/i8085.c b/src/emu/cpu/i8085/i8085.c
index 904c4d3771d..3e278f64d6c 100644
--- a/src/emu/cpu/i8085/i8085.c
+++ b/src/emu/cpu/i8085/i8085.c
@@ -293,20 +293,20 @@ void i8085a_cpu_device::break_halt_for_interrupt()
UINT8 i8085a_cpu_device::ROP()
{
set_status(0xa2); // instruction fetch
- return m_direct->read_decrypted_byte(m_PC.w.l++);
+ return m_direct->read_byte(m_PC.w.l++);
}
UINT8 i8085a_cpu_device::ARG()
{
- return m_direct->read_raw_byte(m_PC.w.l++);
+ return m_direct->read_byte(m_PC.w.l++);
}
UINT16 i8085a_cpu_device::ARG16()
{
UINT16 w;
- w = m_direct->read_raw_byte(m_PC.d);
+ w = m_direct->read_byte(m_PC.d);
m_PC.w.l++;
- w += m_direct->read_raw_byte(m_PC.d) << 8;
+ w += m_direct->read_byte(m_PC.d) << 8;
m_PC.w.l++;
return w;
}
diff --git a/src/emu/cpu/i86/i186.c b/src/emu/cpu/i86/i186.c
index 9bc8c222fa5..072d70a95bb 100644
--- a/src/emu/cpu/i86/i186.c
+++ b/src/emu/cpu/i86/i186.c
@@ -155,14 +155,14 @@ i80186_cpu_device::i80186_cpu_device(const machine_config &mconfig, device_type
UINT8 i80186_cpu_device::fetch_op()
{
- UINT8 data = m_direct->read_decrypted_byte(pc(), m_fetch_xor);
+ UINT8 data = m_direct->read_byte(pc(), m_fetch_xor);
m_ip++;
return data;
}
UINT8 i80186_cpu_device::fetch()
{
- UINT8 data = m_direct->read_raw_byte(pc(), m_fetch_xor);
+ UINT8 data = m_direct->read_byte(pc(), m_fetch_xor);
m_ip++;
return data;
}
diff --git a/src/emu/cpu/i86/i286.c b/src/emu/cpu/i86/i286.c
index 0c45370255b..e6314b9cf83 100644
--- a/src/emu/cpu/i86/i286.c
+++ b/src/emu/cpu/i86/i286.c
@@ -965,7 +965,7 @@ UINT8 i80286_cpu_device::fetch_op()
if(m_ip > m_limit[CS])
throw TRAP(FAULT_GP, 0);
- data = m_direct->read_decrypted_byte( pc() & m_amask, m_fetch_xor );
+ data = m_direct->read_byte( pc() & m_amask, m_fetch_xor );
m_ip++;
return data;
}
@@ -976,7 +976,7 @@ UINT8 i80286_cpu_device::fetch()
if(m_ip > m_limit[CS])
throw TRAP(FAULT_GP, 0);
- data = m_direct->read_raw_byte( pc() & m_amask, m_fetch_xor );
+ data = m_direct->read_byte( pc() & m_amask, m_fetch_xor );
m_ip++;
return data;
}
diff --git a/src/emu/cpu/i86/i86.c b/src/emu/cpu/i86/i86.c
index 9ded05705f1..9c8d5a75465 100644
--- a/src/emu/cpu/i86/i86.c
+++ b/src/emu/cpu/i86/i86.c
@@ -116,7 +116,7 @@ i8086_cpu_device::i8086_cpu_device(const machine_config &mconfig, device_type ty
UINT8 i8086_cpu_device::fetch_op()
{
UINT8 data;
- data = m_direct->read_decrypted_byte(pc(), m_fetch_xor);
+ data = m_direct->read_byte(pc(), m_fetch_xor);
m_ip++;
return data;
}
@@ -124,7 +124,7 @@ UINT8 i8086_cpu_device::fetch_op()
UINT8 i8086_cpu_device::fetch()
{
UINT8 data;
- data = m_direct->read_raw_byte(pc(), m_fetch_xor);
+ data = m_direct->read_byte(pc(), m_fetch_xor);
m_ip++;
return data;
}
diff --git a/src/emu/cpu/i960/i960.c b/src/emu/cpu/i960/i960.c
index 4dd29e45940..8b00a58d4c6 100644
--- a/src/emu/cpu/i960/i960.c
+++ b/src/emu/cpu/i960/i960.c
@@ -109,22 +109,22 @@ UINT32 i960_cpu_device::get_ea(UINT32 opcode)
return m_r[abase] + (m_r[index] << scale);
case 0xc:
- ret = m_direct->read_decrypted_dword(m_IP);
+ ret = m_direct->read_dword(m_IP);
m_IP += 4;
return ret;
case 0xd:
- ret = m_direct->read_decrypted_dword(m_IP) + m_r[abase];
+ ret = m_direct->read_dword(m_IP) + m_r[abase];
m_IP += 4;
return ret;
case 0xe:
- ret = m_direct->read_decrypted_dword(m_IP) + (m_r[index] << scale);
+ ret = m_direct->read_dword(m_IP) + (m_r[index] << scale);
m_IP += 4;
return ret;
case 0xf:
- ret = m_direct->read_decrypted_dword(m_IP) + m_r[abase] + (m_r[index] << scale);
+ ret = m_direct->read_dword(m_IP) + m_r[abase] + (m_r[index] << scale);
m_IP += 4;
return ret;
@@ -1932,7 +1932,7 @@ void i960_cpu_device::execute_run()
m_bursting = 0;
- opcode = m_direct->read_decrypted_dword(m_IP);
+ opcode = m_direct->read_dword(m_IP);
m_IP += 4;
execute_op(opcode);
diff --git a/src/emu/cpu/ie15/ie15.c b/src/emu/cpu/ie15/ie15.c
index c2e3356432b..7843eb428a5 100644
--- a/src/emu/cpu/ie15/ie15.c
+++ b/src/emu/cpu/ie15/ie15.c
@@ -414,14 +414,14 @@ inline void ie15_device::execute_one(int opcode)
inline UINT8 ie15_device::rop()
{
- UINT8 retVal = m_direct->read_decrypted_byte(m_PC.w.l);
+ UINT8 retVal = m_direct->read_byte(m_PC.w.l);
m_PC.w.l = (m_PC.w.l + 1) & 0x0fff;
return retVal;
}
inline UINT8 ie15_device::arg()
{
- UINT8 retVal = m_direct->read_raw_byte(m_PC.w.l);
+ UINT8 retVal = m_direct->read_byte(m_PC.w.l);
return retVal;
}
diff --git a/src/emu/cpu/jaguar/jaguar.c b/src/emu/cpu/jaguar/jaguar.c
index 6c1dd97b821..976ab4f5983 100644
--- a/src/emu/cpu/jaguar/jaguar.c
+++ b/src/emu/cpu/jaguar/jaguar.c
@@ -137,7 +137,7 @@ const jaguar_cpu_device::op_func jaguar_cpu_device::dsp_op_table[64] =
MEMORY ACCESSORS
***************************************************************************/
-#define ROPCODE(pc) (m_direct->read_decrypted_word(pc, WORD_XOR_BE(0)))
+#define ROPCODE(pc) (m_direct->read_word(pc, WORD_XOR_BE(0)))
const device_type JAGUARGPU = &device_creator<jaguargpu_cpu_device>;
diff --git a/src/emu/cpu/lc8670/lc8670.c b/src/emu/cpu/lc8670/lc8670.c
index ac1fd1960d1..96bcfaa0348 100644
--- a/src/emu/cpu/lc8670/lc8670.c
+++ b/src/emu/cpu/lc8670/lc8670.c
@@ -1071,7 +1071,7 @@ WRITE8_MEMBER(lc8670_cpu_device::regs_w)
inline UINT8 lc8670_cpu_device::fetch()
{
- UINT8 data = m_direct->read_decrypted_byte(m_pc);
+ UINT8 data = m_direct->read_byte(m_pc);
set_pc(m_pc + 1);
diff --git a/src/emu/cpu/lh5801/5801tbl.inc b/src/emu/cpu/lh5801/5801tbl.inc
index 352e0d64d05..98a8d7b1d02 100644
--- a/src/emu/cpu/lh5801/5801tbl.inc
+++ b/src/emu/cpu/lh5801/5801tbl.inc
@@ -26,8 +26,8 @@ UINT8 lh5801_cpu_device::lh5801_add_generic(int left, int right, int carry)
UINT16 lh5801_cpu_device::lh5801_readop_word()
{
UINT16 r;
- r=m_direct->read_decrypted_byte(P++)<<8;
- r|=m_direct->read_decrypted_byte(P++);
+ r=m_direct->read_byte(P++)<<8;
+ r|=m_direct->read_byte(P++);
return r;
}
@@ -221,7 +221,7 @@ void lh5801_cpu_device::lh5801_jmp(UINT16 adr)
void lh5801_cpu_device::lh5801_branch_plus(int doit)
{
- UINT8 t=m_direct->read_decrypted_byte(P++);
+ UINT8 t=m_direct->read_byte(P++);
if (doit) {
m_icount-=3;
P+=t;
@@ -230,7 +230,7 @@ void lh5801_cpu_device::lh5801_branch_plus(int doit)
void lh5801_cpu_device::lh5801_branch_minus(int doit)
{
- UINT8 t=m_direct->read_decrypted_byte(P++);
+ UINT8 t=m_direct->read_byte(P++);
if (doit) {
m_icount-=3;
P-=t;
@@ -239,7 +239,7 @@ void lh5801_cpu_device::lh5801_branch_minus(int doit)
void lh5801_cpu_device::lh5801_lop()
{
- UINT8 t=m_direct->read_decrypted_byte(P++);
+ UINT8 t=m_direct->read_byte(P++);
m_icount-=8;
if (UL--) {
m_icount-=3;
@@ -355,7 +355,7 @@ void lh5801_cpu_device::lh5801_instruction_fd()
int oper;
int adr;
- oper=m_direct->read_decrypted_byte(P++);
+ oper=m_direct->read_byte(P++);
switch (oper) {
case 0x01: lh5801_sbc(m_io->read_byte(X)); m_icount-=11;break;
case 0x03: lh5801_adc(m_io->read_byte(X)); m_icount-=11;break;
@@ -396,29 +396,29 @@ void lh5801_cpu_device::lh5801_instruction_fd()
case 0x40: lh5801_inc(&XH);m_icount-=9;break;
case 0x42: lh5801_dec(&XH);m_icount-=9;break;
case 0x48: X=S;m_icount-=11;break;
- case 0x49: lh5801_and_mem(*m_io, X, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x49: lh5801_and_mem(*m_io, X, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x4a: X=X;m_icount-=11;break; //!!!
- case 0x4b: lh5801_ora_mem(*m_io, X, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x4b: lh5801_ora_mem(*m_io, X, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x4c: m_bf=0;/*off !*/ m_icount-=8;break;
- case 0x4d: lh5801_bit(m_io->read_byte(X), m_direct->read_decrypted_byte(P++));m_icount-=14;break;
+ case 0x4d: lh5801_bit(m_io->read_byte(X), m_direct->read_byte(P++));m_icount-=14;break;
case 0x4e: S=X;m_icount-=11;break;
- case 0x4f: lh5801_add_mem(*m_io, X, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x4f: lh5801_add_mem(*m_io, X, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x50: lh5801_inc(&YH);m_icount-=9;break;
case 0x52: lh5801_dec(&YH);m_icount-=9;break;
case 0x58: X=P;m_icount-=11;break;
- case 0x59: lh5801_and_mem(*m_io, Y, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x59: lh5801_and_mem(*m_io, Y, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x5a: Y=X;m_icount-=11;break;
- case 0x5b: lh5801_ora_mem(*m_io, Y, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
- case 0x5d: lh5801_bit(m_io->read_byte(Y), m_direct->read_decrypted_byte(P++));m_icount-=14;break;
+ case 0x5b: lh5801_ora_mem(*m_io, Y, m_direct->read_byte(P++)); m_icount-=17;break;
+ case 0x5d: lh5801_bit(m_io->read_byte(Y), m_direct->read_byte(P++));m_icount-=14;break;
case 0x5e: lh5801_jmp(X);m_icount-=11;break; // P=X
- case 0x5f: lh5801_add_mem(*m_io, Y, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x5f: lh5801_add_mem(*m_io, Y, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x60: lh5801_inc(&UH);m_icount-=9;break;
case 0x62: lh5801_dec(&UH);m_icount-=9;break;
- case 0x69: lh5801_and_mem(*m_io, U, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x69: lh5801_and_mem(*m_io, U, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x6a: U=X;m_icount-=11;break;
- case 0x6b: lh5801_ora_mem(*m_io, U, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
- case 0x6d: lh5801_bit(m_io->read_byte(X), m_direct->read_decrypted_byte(P++));m_icount-=14;break;
- case 0x6f: lh5801_add_mem(*m_io, U, m_direct->read_decrypted_byte(P++)); m_icount-=17;break;
+ case 0x6b: lh5801_ora_mem(*m_io, U, m_direct->read_byte(P++)); m_icount-=17;break;
+ case 0x6d: lh5801_bit(m_io->read_byte(X), m_direct->read_byte(P++));m_icount-=14;break;
+ case 0x6f: lh5801_add_mem(*m_io, U, m_direct->read_byte(P++)); m_icount-=17;break;
case 0x81: m_t|=IE; /*sie !*/m_icount-=8;break;
case 0x88: lh5801_push_word(X); m_icount-=14;break;
case 0x8a: lh5801_pop(); m_icount-=12; break;
@@ -454,20 +454,20 @@ void lh5801_cpu_device::lh5801_instruction_fd()
case 0xea: lh5801_adr(&m_u);m_icount-=11;break;
case 0xe9:
adr=lh5801_readop_word();
- lh5801_and_mem(*m_io, adr, m_direct->read_decrypted_byte(P++)); m_icount-=23;
+ lh5801_and_mem(*m_io, adr, m_direct->read_byte(P++)); m_icount-=23;
break;
case 0xeb:
adr=lh5801_readop_word();
- lh5801_ora_mem(*m_io, adr, m_direct->read_decrypted_byte(P++)); m_icount-=23;
+ lh5801_ora_mem(*m_io, adr, m_direct->read_byte(P++)); m_icount-=23;
break;
case 0xec: m_t=m_a; m_icount-=9;break;
case 0xed:
adr=lh5801_readop_word();
- lh5801_bit(m_io->read_byte(adr), m_direct->read_decrypted_byte(P++));
+ lh5801_bit(m_io->read_byte(adr), m_direct->read_byte(P++));
m_icount-=20;break;
case 0xef:
adr=lh5801_readop_word();
- lh5801_add_mem(*m_io, adr, m_direct->read_decrypted_byte(P++)); m_icount-=23;
+ lh5801_add_mem(*m_io, adr, m_direct->read_byte(P++)); m_icount-=23;
break;
default:
@@ -480,7 +480,7 @@ void lh5801_cpu_device::lh5801_instruction()
int oper;
int adr;
- oper=m_direct->read_decrypted_byte(P++);
+ oper=m_direct->read_byte(P++);
switch (oper) {
case 0x00: lh5801_sbc(XL); m_icount-=6;break;
case 0x01: lh5801_sbc(m_program->read_byte(X)); m_icount-=7;break;
@@ -539,14 +539,14 @@ void lh5801_cpu_device::lh5801_instruction()
case 0x45: lh5801_lin(&m_x);m_icount-=6;break;
case 0x46: X--;m_icount-=5;break;
case 0x47: lh5801_lde(&m_x);m_icount-=6;break;
- case 0x48: XH=m_direct->read_decrypted_byte(P++);m_icount-=6;break;
- case 0x49: lh5801_and_mem(*m_program, X, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
- case 0x4a: XL=m_direct->read_decrypted_byte(P++);m_icount-=6;break;
- case 0x4b: lh5801_ora_mem(*m_program, X, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
- case 0x4c: lh5801_cpa(XH, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0x4d: lh5801_bit(m_program->read_byte(X), m_direct->read_decrypted_byte(P++));m_icount-=10;break;
- case 0x4e: lh5801_cpa(XL, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0x4f: lh5801_add_mem(*m_program, X, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
+ case 0x48: XH=m_direct->read_byte(P++);m_icount-=6;break;
+ case 0x49: lh5801_and_mem(*m_program, X, m_direct->read_byte(P++)); m_icount-=13;break;
+ case 0x4a: XL=m_direct->read_byte(P++);m_icount-=6;break;
+ case 0x4b: lh5801_ora_mem(*m_program, X, m_direct->read_byte(P++)); m_icount-=13;break;
+ case 0x4c: lh5801_cpa(XH, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0x4d: lh5801_bit(m_program->read_byte(X), m_direct->read_byte(P++));m_icount-=10;break;
+ case 0x4e: lh5801_cpa(XL, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0x4f: lh5801_add_mem(*m_program, X, m_direct->read_byte(P++)); m_icount-=13;break;
case 0x50: lh5801_inc(&YL);m_icount-=5;break;
case 0x51: lh5801_sin(&m_y); m_icount-=6;break;
case 0x52: lh5801_dec(&YL);m_icount-=5;break;
@@ -555,14 +555,14 @@ void lh5801_cpu_device::lh5801_instruction()
case 0x55: lh5801_lin(&m_y);m_icount-=6;break;
case 0x56: Y--;m_icount-=5;break;
case 0x57: lh5801_lde(&m_y);m_icount-=6;break;
- case 0x58: YH=m_direct->read_decrypted_byte(P++);m_icount-=6;break;
- case 0x59: lh5801_and_mem(*m_program, Y, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
- case 0x5a: YL=m_direct->read_decrypted_byte(P++);m_icount-=6;break;
- case 0x5b: lh5801_ora_mem(*m_program, Y, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
- case 0x5c: lh5801_cpa(YH, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0x5d: lh5801_bit(m_program->read_byte(Y), m_direct->read_decrypted_byte(P++));m_icount-=10;break;
- case 0x5e: lh5801_cpa(YL, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0x5f: lh5801_add_mem(*m_program, Y, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
+ case 0x58: YH=m_direct->read_byte(P++);m_icount-=6;break;
+ case 0x59: lh5801_and_mem(*m_program, Y, m_direct->read_byte(P++)); m_icount-=13;break;
+ case 0x5a: YL=m_direct->read_byte(P++);m_icount-=6;break;
+ case 0x5b: lh5801_ora_mem(*m_program, Y, m_direct->read_byte(P++)); m_icount-=13;break;
+ case 0x5c: lh5801_cpa(YH, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0x5d: lh5801_bit(m_program->read_byte(Y), m_direct->read_byte(P++));m_icount-=10;break;
+ case 0x5e: lh5801_cpa(YL, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0x5f: lh5801_add_mem(*m_program, Y, m_direct->read_byte(P++)); m_icount-=13;break;
case 0x60: lh5801_inc(&UL);m_icount-=5;break;
case 0x61: lh5801_sin(&m_u); m_icount-=6;break;
case 0x62: lh5801_dec(&UL);m_icount-=5;break;
@@ -571,14 +571,14 @@ void lh5801_cpu_device::lh5801_instruction()
case 0x65: lh5801_lin(&m_u);m_icount-=6;break;
case 0x66: U--;m_icount-=5;break;
case 0x67: lh5801_lde(&m_u);m_icount-=6;break;
- case 0x68: UH=m_direct->read_decrypted_byte(P++);m_icount-=6;break;
- case 0x69: lh5801_and_mem(*m_program, U, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
- case 0x6a: UL=m_direct->read_decrypted_byte(P++);m_icount-=6;break;
- case 0x6b: lh5801_ora_mem(*m_program, U, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
- case 0x6c: lh5801_cpa(UH, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0x6d: lh5801_bit(m_program->read_byte(U), m_direct->read_decrypted_byte(P++));m_icount-=10;break;
- case 0x6e: lh5801_cpa(UL, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0x6f: lh5801_add_mem(*m_program, U, m_direct->read_decrypted_byte(P++)); m_icount-=13;break;
+ case 0x68: UH=m_direct->read_byte(P++);m_icount-=6;break;
+ case 0x69: lh5801_and_mem(*m_program, U, m_direct->read_byte(P++)); m_icount-=13;break;
+ case 0x6a: UL=m_direct->read_byte(P++);m_icount-=6;break;
+ case 0x6b: lh5801_ora_mem(*m_program, U, m_direct->read_byte(P++)); m_icount-=13;break;
+ case 0x6c: lh5801_cpa(UH, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0x6d: lh5801_bit(m_program->read_byte(U), m_direct->read_byte(P++));m_icount-=10;break;
+ case 0x6e: lh5801_cpa(UL, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0x6f: lh5801_add_mem(*m_program, U, m_direct->read_byte(P++)); m_icount-=13;break;
case 0x80: lh5801_sbc(XH); m_icount-=6;break;
case 0x81: lh5801_branch_plus(!(m_t&C)); m_icount-=8; break;
case 0x82: lh5801_adc(XH); m_icount-=6;break;
@@ -626,25 +626,25 @@ void lh5801_cpu_device::lh5801_instruction()
case 0xad: lh5801_eor(m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
case 0xae: m_program->write_byte(lh5801_readop_word(),m_a); m_icount-=12;break;
case 0xaf: lh5801_bit(m_program->read_byte(lh5801_readop_word()),m_a); m_icount-=13;break;
- case 0xb1: lh5801_sbc(m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0xb3: lh5801_adc(m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0xb5: lh5801_lda(m_direct->read_decrypted_byte(P++)); m_icount-=6;break;
- case 0xb7: lh5801_cpa(m_a, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
+ case 0xb1: lh5801_sbc(m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0xb3: lh5801_adc(m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0xb5: lh5801_lda(m_direct->read_byte(P++)); m_icount-=6;break;
+ case 0xb7: lh5801_cpa(m_a, m_direct->read_byte(P++)); m_icount-=7;break;
case 0xb8: m_pv=0;/*rpv!*/ m_icount-=4; break;
- case 0xb9: lh5801_and(m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
+ case 0xb9: lh5801_and(m_direct->read_byte(P++)); m_icount-=7;break;
case 0xba: lh5801_jmp(lh5801_readop_word()); m_icount-=12;break;
- case 0xbb: lh5801_ora(m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0xbd: lh5801_eor(m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
+ case 0xbb: lh5801_ora(m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0xbd: lh5801_eor(m_direct->read_byte(P++)); m_icount-=7;break;
case 0xbe: lh5801_sjp(); m_icount-=19; break;
- case 0xbf: lh5801_bit(m_a, m_direct->read_decrypted_byte(P++));m_icount-=7;break;
- case 0xc1: lh5801_vector(!(m_t&C), m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
- case 0xc3: lh5801_vector(m_t&C, m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
- case 0xc5: lh5801_vector(!(m_t&H), m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
- case 0xc7: lh5801_vector(m_t&H, m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
- case 0xc9: lh5801_vector(!(m_t&Z), m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
- case 0xcb: lh5801_vector(m_t&Z, m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
- case 0xcd: lh5801_vector(1, m_direct->read_decrypted_byte(P++)); m_icount-=7;break;
- case 0xcf: lh5801_vector(m_t&V, m_direct->read_decrypted_byte(P++)); m_icount-=8;break;
+ case 0xbf: lh5801_bit(m_a, m_direct->read_byte(P++));m_icount-=7;break;
+ case 0xc1: lh5801_vector(!(m_t&C), m_direct->read_byte(P++)); m_icount-=8;break;
+ case 0xc3: lh5801_vector(m_t&C, m_direct->read_byte(P++)); m_icount-=8;break;
+ case 0xc5: lh5801_vector(!(m_t&H), m_direct->read_byte(P++)); m_icount-=8;break;
+ case 0xc7: lh5801_vector(m_t&H, m_direct->read_byte(P++)); m_icount-=8;break;
+ case 0xc9: lh5801_vector(!(m_t&Z), m_direct->read_byte(P++)); m_icount-=8;break;
+ case 0xcb: lh5801_vector(m_t&Z, m_direct->read_byte(P++)); m_icount-=8;break;
+ case 0xcd: lh5801_vector(1, m_direct->read_byte(P++)); m_icount-=7;break;
+ case 0xcf: lh5801_vector(m_t&V, m_direct->read_byte(P++)); m_icount-=8;break;
case 0xd1: lh5801_ror(); m_icount-=6; break;
case 0xd3: lh5801_drr(*m_program, X); m_icount-=12; break;
case 0xd5: lh5801_shr(); m_icount-=6; break;
@@ -656,17 +656,17 @@ void lh5801_cpu_device::lh5801_instruction()
case 0xe1: m_pu=1;/*spu!*/ m_icount-=4; break;
case 0xe3: m_pu=0;/*rpu!*/ m_icount-=4; break;
case 0xe9:
- adr=lh5801_readop_word();lh5801_and_mem(*m_program, adr, m_direct->read_decrypted_byte(P++));
+ adr=lh5801_readop_word();lh5801_and_mem(*m_program, adr, m_direct->read_byte(P++));
m_icount-=19;break;
case 0xeb:
- adr=lh5801_readop_word();lh5801_ora_mem(*m_program, adr, m_direct->read_decrypted_byte(P++));
+ adr=lh5801_readop_word();lh5801_ora_mem(*m_program, adr, m_direct->read_byte(P++));
m_icount-=19;break;
case 0xed:
- adr=lh5801_readop_word();lh5801_bit(m_program->read_byte(adr), m_direct->read_decrypted_byte(P++));
+ adr=lh5801_readop_word();lh5801_bit(m_program->read_byte(adr), m_direct->read_byte(P++));
m_icount-=16;break;
case 0xef:
adr=lh5801_readop_word();
- lh5801_add_mem(*m_program, adr, m_direct->read_decrypted_byte(P++)); m_icount-=19;
+ lh5801_add_mem(*m_program, adr, m_direct->read_byte(P++)); m_icount-=19;
break;
case 0xf1: lh5801_aex(); m_icount-=6; break;
case 0xf5: m_program->write_byte(Y++, m_program->read_byte(X++)); m_icount-=7; break; //tin
diff --git a/src/emu/cpu/m37710/m37710cm.h b/src/emu/cpu/m37710/m37710cm.h
index 8c784b9ca05..aa691b2e9aa 100644
--- a/src/emu/cpu/m37710/m37710cm.h
+++ b/src/emu/cpu/m37710/m37710cm.h
@@ -23,10 +23,10 @@
#define M37710_CALL_DEBUGGER(x) debugger_instruction_hook(this, x)
#define m37710_read_8(addr) m_program->read_byte(addr)
#define m37710_write_8(addr,data) m_program->write_byte(addr,data)
-#define m37710_read_8_immediate(A) m_direct->read_decrypted_byte(A, BYTE_XOR_LE(0))
+#define m37710_read_8_immediate(A) m_direct->read_byte(A, BYTE_XOR_LE(0))
#define m37710_read_16(addr) m_program->read_word_unaligned(addr)
#define m37710_write_16(addr,data) m_program->write_word_unaligned(addr,data)
-#define m37710_read_16_immediate(A) m_direct->read_decrypted_word(A)
+#define m37710_read_16_immediate(A) m_direct->read_word(A)
/* ======================================================================== */
diff --git a/src/emu/cpu/m6502/deco16.c b/src/emu/cpu/m6502/deco16.c
index 681ae5dcc42..a500b287d7a 100644
--- a/src/emu/cpu/m6502/deco16.c
+++ b/src/emu/cpu/m6502/deco16.c
@@ -41,7 +41,13 @@ void deco16_device::device_start()
const address_space_config *deco16_device::memory_space_config(address_spacenum spacenum) const
{
- return spacenum == AS_PROGRAM ? &program_config : spacenum == AS_IO ? &io_config : NULL;
+ switch(spacenum)
+ {
+ case AS_PROGRAM: return &program_config;
+ case AS_IO: return &io_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &sprogram_config : NULL;
+ default: return NULL;
+ }
}
#include "cpu/m6502/deco16.inc"
diff --git a/src/emu/cpu/m6502/m4510.c b/src/emu/cpu/m6502/m4510.c
index 329734f692e..65c59280b29 100644
--- a/src/emu/cpu/m6502/m4510.c
+++ b/src/emu/cpu/m6502/m4510.c
@@ -19,6 +19,9 @@ m4510_device::m4510_device(const machine_config &mconfig, const char *tag, devic
program_config.m_addrbus_width = 20;
program_config.m_logaddr_width = 16;
program_config.m_page_shift = 13;
+ sprogram_config.m_addrbus_width = 20;
+ sprogram_config.m_logaddr_width = 16;
+ sprogram_config.m_page_shift = 13;
}
offs_t m4510_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
@@ -71,14 +74,14 @@ UINT8 m4510_device::mi_4510_normal::read(UINT16 adr)
return program->read_byte(base->map(adr));
}
-UINT8 m4510_device::mi_4510_normal::read_direct(UINT16 adr)
+UINT8 m4510_device::mi_4510_normal::read_sync(UINT16 adr)
{
- return direct->read_raw_byte(base->map(adr));
+ return sdirect->read_byte(base->map(adr));
}
-UINT8 m4510_device::mi_4510_normal::read_decrypted(UINT16 adr)
+UINT8 m4510_device::mi_4510_normal::read_arg(UINT16 adr)
{
- return direct->read_decrypted_byte(base->map(adr));
+ return direct->read_byte(base->map(adr));
}
void m4510_device::mi_4510_normal::write(UINT16 adr, UINT8 val)
@@ -90,14 +93,14 @@ m4510_device::mi_4510_nd::mi_4510_nd(m4510_device *_base) : mi_4510_normal(_base
{
}
-UINT8 m4510_device::mi_4510_nd::read_direct(UINT16 adr)
+UINT8 m4510_device::mi_4510_nd::read_sync(UINT16 adr)
{
- return read(adr);
+ return program->read_byte(base->map(adr));
}
-UINT8 m4510_device::mi_4510_nd::read_decrypted(UINT16 adr)
+UINT8 m4510_device::mi_4510_nd::read_arg(UINT16 adr)
{
- return read(adr);
+ return sprogram->read_byte(base->map(adr));
}
#include "cpu/m6502/m4510.inc"
diff --git a/src/emu/cpu/m6502/m4510.h b/src/emu/cpu/m6502/m4510.h
index 46a95a1eb72..90bba4d0262 100644
--- a/src/emu/cpu/m6502/m4510.h
+++ b/src/emu/cpu/m6502/m4510.h
@@ -37,8 +37,8 @@ protected:
mi_4510_normal(m4510_device *base);
virtual ~mi_4510_normal() {}
virtual UINT8 read(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
@@ -46,8 +46,8 @@ protected:
public:
mi_4510_nd(m4510_device *base);
virtual ~mi_4510_nd() {}
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
};
virtual void device_start();
diff --git a/src/emu/cpu/m6502/m6502.c b/src/emu/cpu/m6502/m6502.c
index c1a84b2fd9c..01b2b8f0f98 100644
--- a/src/emu/cpu/m6502/m6502.c
+++ b/src/emu/cpu/m6502/m6502.c
@@ -17,7 +17,8 @@ const device_type M6502 = &device_creator<m6502_device>;
m6502_device::m6502_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
cpu_device(mconfig, M6502, "M6502", tag, owner, clock, "m6502", __FILE__),
sync_w(*this),
- program_config("program", ENDIANNESS_LITTLE, 8, 16)
+ program_config("program", ENDIANNESS_LITTLE, 8, 16),
+ sprogram_config("decrypted_opcodes", ENDIANNESS_LITTLE, 8, 16)
{
direct_disabled = false;
}
@@ -25,7 +26,8 @@ m6502_device::m6502_device(const machine_config &mconfig, const char *tag, devic
m6502_device::m6502_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
sync_w(*this),
- program_config("program", ENDIANNESS_LITTLE, 8, 16)
+ program_config("program", ENDIANNESS_LITTLE, 8, 16),
+ sprogram_config("decrypted_opcodes", ENDIANNESS_LITTLE, 8, 16)
{
direct_disabled = false;
}
@@ -42,8 +44,11 @@ void m6502_device::device_start()
void m6502_device::init()
{
- mintf->program = &space(AS_PROGRAM);
- mintf->direct = &mintf->program->direct();
+ mintf->program = &space(AS_PROGRAM);
+ mintf->sprogram = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : mintf->program;
+
+ mintf->direct = &mintf->program->direct();
+ mintf->sdirect = &mintf->sprogram->direct();
sync_w.resolve_safe();
@@ -402,7 +407,12 @@ void m6502_device::execute_set_input(int inputnum, int state)
const address_space_config *m6502_device::memory_space_config(address_spacenum spacenum) const
{
- return (spacenum == AS_PROGRAM) ? &program_config : NULL;
+ switch(spacenum)
+ {
+ case AS_PROGRAM: return &program_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &sprogram_config : NULL;
+ default: return NULL;
+ }
}
@@ -621,7 +631,7 @@ void m6502_device::prefetch()
sync = true;
sync_w(ASSERT_LINE);
NPC = PC;
- IR = mintf->read_decrypted(PC);
+ IR = mintf->read_sync(PC);
sync = false;
sync_w(CLEAR_LINE);
@@ -637,7 +647,7 @@ void m6502_device::prefetch_noirq()
sync = true;
sync_w(ASSERT_LINE);
NPC = PC;
- IR = mintf->read_decrypted(PC);
+ IR = mintf->read_sync(PC);
sync = false;
sync_w(CLEAR_LINE);
PC++;
@@ -674,31 +684,33 @@ UINT8 m6502_device::mi_default_normal::read(UINT16 adr)
return program->read_byte(adr);
}
-UINT8 m6502_device::mi_default_normal::read_direct(UINT16 adr)
+UINT8 m6502_device::mi_default_normal::read_sync(UINT16 adr)
{
- return direct->read_raw_byte(adr);
+ return sdirect->read_byte(adr);
}
-UINT8 m6502_device::mi_default_normal::read_decrypted(UINT16 adr)
+UINT8 m6502_device::mi_default_normal::read_arg(UINT16 adr)
{
- return direct->read_decrypted_byte(adr);
+ return direct->read_byte(adr);
}
+
void m6502_device::mi_default_normal::write(UINT16 adr, UINT8 val)
{
program->write_byte(adr, val);
}
-UINT8 m6502_device::mi_default_nd::read_direct(UINT16 adr)
+UINT8 m6502_device::mi_default_nd::read_sync(UINT16 adr)
{
- return read(adr);
+ return sprogram->read_byte(adr);
}
-UINT8 m6502_device::mi_default_nd::read_decrypted(UINT16 adr)
+UINT8 m6502_device::mi_default_nd::read_arg(UINT16 adr)
{
- return read(adr);
+ return program->read_byte(adr);
}
+
WRITE_LINE_MEMBER( m6502_device::irq_line )
{
set_input_line( M6502_IRQ_LINE, state );
diff --git a/src/emu/cpu/m6502/m6502.h b/src/emu/cpu/m6502/m6502.h
index 240509f21ea..1dbed7710de 100644
--- a/src/emu/cpu/m6502/m6502.h
+++ b/src/emu/cpu/m6502/m6502.h
@@ -42,14 +42,14 @@ public:
protected:
class memory_interface {
public:
- address_space *program;
- direct_read_data *direct;
+ address_space *program, *sprogram;
+ direct_read_data *direct, *sdirect;
virtual ~memory_interface() {}
virtual UINT8 read(UINT16 adr) = 0;
virtual UINT8 read_9(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr) = 0;
- virtual UINT8 read_decrypted(UINT16 adr) = 0;
+ virtual UINT8 read_sync(UINT16 adr) = 0;
+ virtual UINT8 read_arg(UINT16 adr) = 0;
virtual void write(UINT16 adr, UINT8 val) = 0;
virtual void write_9(UINT16 adr, UINT8 val);
};
@@ -58,16 +58,16 @@ protected:
public:
virtual ~mi_default_normal() {}
virtual UINT8 read(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
class mi_default_nd : public mi_default_normal {
public:
virtual ~mi_default_nd() {}
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
};
struct disasm_entry {
@@ -151,7 +151,7 @@ protected:
virtual UINT32 disasm_max_opcode_bytes() const;
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
- address_space_config program_config;
+ address_space_config program_config, sprogram_config;
UINT16 PPC; /* previous program counter */
UINT16 NPC; /* next start-of-instruction program counter */
@@ -179,9 +179,9 @@ protected:
UINT8 read_9(UINT16 adr) { return mintf->read_9(adr); }
void write(UINT16 adr, UINT8 val) { mintf->write(adr, val); }
void write_9(UINT16 adr, UINT8 val) { mintf->write_9(adr, val); }
- UINT8 read_direct(UINT16 adr) { return mintf->read_direct(adr); }
- UINT8 read_pc() { return mintf->read_direct(PC++); }
- UINT8 read_pc_noinc() { return mintf->read_direct(PC); }
+ UINT8 read_arg(UINT16 adr) { return mintf->read_arg(adr); }
+ UINT8 read_pc() { return mintf->read_arg(PC++); }
+ UINT8 read_pc_noinc() { return mintf->read_arg(PC); }
void prefetch();
void prefetch_noirq();
void set_nz(UINT8 v);
diff --git a/src/emu/cpu/m6502/m6502make.py b/src/emu/cpu/m6502/m6502make.py
index 514af0e8fb8..591d01268ca 100755
--- a/src/emu/cpu/m6502/m6502make.py
+++ b/src/emu/cpu/m6502/m6502make.py
@@ -68,7 +68,7 @@ FULL_EAT_ALL="""\
"""
FULL_MEMORY="""\
-\tif(icount <= 0) { inst_substate = %(substate)s; return; }
+\tif(icount == 0) { inst_substate = %(substate)s; return; }
%(ins)s
\ticount--;
"""
@@ -97,7 +97,7 @@ case %(substate)s:;
"""
PARTIAL_MEMORY="""\
-\tif(icount <= 0) { inst_substate = %(substate)s; return; }
+\tif(icount == 0) { inst_substate = %(substate)s; return; }
case %(substate)s:
%(ins)s
\ticount--;
diff --git a/src/emu/cpu/m6502/m6504.c b/src/emu/cpu/m6502/m6504.c
index 383d0f1fecd..f2ae2c4b6d9 100644
--- a/src/emu/cpu/m6502/m6504.c
+++ b/src/emu/cpu/m6502/m6504.c
@@ -17,6 +17,7 @@ m6504_device::m6504_device(const machine_config &mconfig, const char *tag, devic
m6502_device(mconfig, M6504, "M6504", tag, owner, clock, "m6504", __FILE__)
{
program_config.m_addrbus_width = 13;
+ sprogram_config.m_addrbus_width = 13;
}
void m6504_device::device_start()
@@ -34,14 +35,14 @@ UINT8 m6504_device::mi_6504_normal::read(UINT16 adr)
return program->read_byte(adr & 0x1fff);
}
-UINT8 m6504_device::mi_6504_normal::read_direct(UINT16 adr)
+UINT8 m6504_device::mi_6504_normal::read_sync(UINT16 adr)
{
- return direct->read_raw_byte(adr & 0x1fff);
+ return sdirect->read_byte(adr & 0x1fff);
}
-UINT8 m6504_device::mi_6504_normal::read_decrypted(UINT16 adr)
+UINT8 m6504_device::mi_6504_normal::read_arg(UINT16 adr)
{
- return direct->read_decrypted_byte(adr & 0x1fff);
+ return direct->read_byte(adr & 0x1fff);
}
void m6504_device::mi_6504_normal::write(UINT16 adr, UINT8 val)
@@ -49,12 +50,12 @@ void m6504_device::mi_6504_normal::write(UINT16 adr, UINT8 val)
program->write_byte(adr & 0x1fff, val);
}
-UINT8 m6504_device::mi_6504_nd::read_direct(UINT16 adr)
+UINT8 m6504_device::mi_6504_nd::read_sync(UINT16 adr)
{
- return read(adr);
+ return sprogram->read_byte(adr & 0x1fff);
}
-UINT8 m6504_device::mi_6504_nd::read_decrypted(UINT16 adr)
+UINT8 m6504_device::mi_6504_nd::read_arg(UINT16 adr)
{
- return read(adr);
+ return program->read_byte(adr & 0x1fff);
}
diff --git a/src/emu/cpu/m6502/m6504.h b/src/emu/cpu/m6502/m6504.h
index e325240d8e9..de6ca847b25 100644
--- a/src/emu/cpu/m6502/m6504.h
+++ b/src/emu/cpu/m6502/m6504.h
@@ -22,16 +22,16 @@ protected:
public:
virtual ~mi_6504_normal() {}
virtual UINT8 read(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
class mi_6504_nd : public mi_6504_normal {
public:
virtual ~mi_6504_nd() {}
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
};
virtual void device_start();
diff --git a/src/emu/cpu/m6502/m6509.c b/src/emu/cpu/m6502/m6509.c
index 3c8c3436e25..77af9e8f1f7 100644
--- a/src/emu/cpu/m6502/m6509.c
+++ b/src/emu/cpu/m6502/m6509.c
@@ -18,6 +18,8 @@ m6509_device::m6509_device(const machine_config &mconfig, const char *tag, devic
{
program_config.m_addrbus_width = 20;
program_config.m_logaddr_width = 20;
+ sprogram_config.m_addrbus_width = 20;
+ sprogram_config.m_logaddr_width = 20;
}
void m6509_device::device_start()
@@ -71,9 +73,9 @@ UINT8 m6509_device::mi_6509_normal::read(UINT16 adr)
return res;
}
-UINT8 m6509_device::mi_6509_normal::read_direct(UINT16 adr)
+UINT8 m6509_device::mi_6509_normal::read_sync(UINT16 adr)
{
- UINT8 res = direct->read_raw_byte(base->adr_in_bank_i(adr));
+ UINT8 res = sdirect->read_byte(base->adr_in_bank_i(adr));
if(adr == 0x0000)
res = base->bank_i_r();
else if(adr == 0x0001)
@@ -81,9 +83,9 @@ UINT8 m6509_device::mi_6509_normal::read_direct(UINT16 adr)
return res;
}
-UINT8 m6509_device::mi_6509_normal::read_decrypted(UINT16 adr)
+UINT8 m6509_device::mi_6509_normal::read_arg(UINT16 adr)
{
- UINT8 res = direct->read_decrypted_byte(base->adr_in_bank_i(adr));
+ UINT8 res = direct->read_byte(base->adr_in_bank_i(adr));
if(adr == 0x0000)
res = base->bank_i_r();
else if(adr == 0x0001)
@@ -123,9 +125,9 @@ m6509_device::mi_6509_nd::mi_6509_nd(m6509_device *_base) : mi_6509_normal(_base
{
}
-UINT8 m6509_device::mi_6509_nd::read_direct(UINT16 adr)
+UINT8 m6509_device::mi_6509_nd::read_sync(UINT16 adr)
{
- UINT8 res = program->read_byte(base->adr_in_bank_i(adr));
+ UINT8 res = sprogram->read_byte(base->adr_in_bank_i(adr));
if(adr == 0x0000)
res = base->bank_i_r();
else if(adr == 0x0001)
@@ -133,7 +135,7 @@ UINT8 m6509_device::mi_6509_nd::read_direct(UINT16 adr)
return res;
}
-UINT8 m6509_device::mi_6509_nd::read_decrypted(UINT16 adr)
+UINT8 m6509_device::mi_6509_nd::read_arg(UINT16 adr)
{
UINT8 res = program->read_byte(base->adr_in_bank_i(adr));
if(adr == 0x0000)
diff --git a/src/emu/cpu/m6502/m6509.h b/src/emu/cpu/m6502/m6509.h
index 561a31449a4..27f7411b80f 100644
--- a/src/emu/cpu/m6502/m6509.h
+++ b/src/emu/cpu/m6502/m6509.h
@@ -32,8 +32,8 @@ protected:
virtual ~mi_6509_normal() {}
virtual UINT8 read(UINT16 adr);
virtual UINT8 read_9(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
virtual void write_9(UINT16 adr, UINT8 val);
};
@@ -42,8 +42,8 @@ protected:
public:
mi_6509_nd(m6509_device *base);
virtual ~mi_6509_nd() {}
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
};
virtual void device_start();
diff --git a/src/emu/cpu/m6502/m6510.c b/src/emu/cpu/m6502/m6510.c
index dfab818bd60..10e57fb27b8 100644
--- a/src/emu/cpu/m6502/m6510.c
+++ b/src/emu/cpu/m6502/m6510.c
@@ -119,9 +119,9 @@ UINT8 m6510_device::mi_6510_normal::read(UINT16 adr)
return res;
}
-UINT8 m6510_device::mi_6510_normal::read_direct(UINT16 adr)
+UINT8 m6510_device::mi_6510_normal::read_sync(UINT16 adr)
{
- UINT8 res = direct->read_raw_byte(adr);
+ UINT8 res = sdirect->read_byte(adr);
if(adr == 0x0000)
res = base->dir_r();
else if(adr == 0x0001)
@@ -129,9 +129,9 @@ UINT8 m6510_device::mi_6510_normal::read_direct(UINT16 adr)
return res;
}
-UINT8 m6510_device::mi_6510_normal::read_decrypted(UINT16 adr)
+UINT8 m6510_device::mi_6510_normal::read_arg(UINT16 adr)
{
- UINT8 res = direct->read_decrypted_byte(adr);
+ UINT8 res = direct->read_byte(adr);
if(adr == 0x0000)
res = base->dir_r();
else if(adr == 0x0001)
@@ -152,14 +152,24 @@ m6510_device::mi_6510_nd::mi_6510_nd(m6510_device *_base) : mi_6510_normal(_base
{
}
-UINT8 m6510_device::mi_6510_nd::read_direct(UINT16 adr)
+UINT8 m6510_device::mi_6510_nd::read_sync(UINT16 adr)
{
- return read(adr);
+ UINT8 res = sprogram->read_byte(adr);
+ if(adr == 0x0000)
+ res = base->dir_r();
+ else if(adr == 0x0001)
+ res = base->port_r();
+ return res;
}
-UINT8 m6510_device::mi_6510_nd::read_decrypted(UINT16 adr)
+UINT8 m6510_device::mi_6510_nd::read_arg(UINT16 adr)
{
- return read(adr);
+ UINT8 res = program->read_byte(adr);
+ if(adr == 0x0000)
+ res = base->dir_r();
+ else if(adr == 0x0001)
+ res = base->port_r();
+ return res;
}
#include "cpu/m6502/m6510.inc"
diff --git a/src/emu/cpu/m6502/m6510.h b/src/emu/cpu/m6502/m6510.h
index 76b8a405f30..2dbd7e4138e 100644
--- a/src/emu/cpu/m6502/m6510.h
+++ b/src/emu/cpu/m6502/m6510.h
@@ -47,8 +47,8 @@ protected:
mi_6510_normal(m6510_device *base);
virtual ~mi_6510_normal() {}
virtual UINT8 read(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
@@ -56,8 +56,8 @@ protected:
public:
mi_6510_nd(m6510_device *base);
virtual ~mi_6510_nd() {}
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
};
devcb_read8 read_port;
diff --git a/src/emu/cpu/m6502/n2a03.c b/src/emu/cpu/m6502/n2a03.c
index dd29182f53c..b3b2cb31808 100644
--- a/src/emu/cpu/m6502/n2a03.c
+++ b/src/emu/cpu/m6502/n2a03.c
@@ -38,14 +38,14 @@ UINT8 n2a03_device::mi_2a03_normal::read(UINT16 adr)
return program->read_byte(adr);
}
-UINT8 n2a03_device::mi_2a03_normal::read_direct(UINT16 adr)
+UINT8 n2a03_device::mi_2a03_normal::read_sync(UINT16 adr)
{
- return direct->read_raw_byte(adr);
+ return sdirect->read_byte(adr);
}
-UINT8 n2a03_device::mi_2a03_normal::read_decrypted(UINT16 adr)
+UINT8 n2a03_device::mi_2a03_normal::read_arg(UINT16 adr)
{
- return direct->read_decrypted_byte(adr);
+ return direct->read_byte(adr);
}
void n2a03_device::mi_2a03_normal::write(UINT16 adr, UINT8 val)
@@ -58,12 +58,12 @@ UINT8 n2a03_device::mi_2a03_nd::read(UINT16 adr)
return program->read_byte(adr);
}
-UINT8 n2a03_device::mi_2a03_nd::read_direct(UINT16 adr)
+UINT8 n2a03_device::mi_2a03_nd::read_sync(UINT16 adr)
{
- return program->read_byte(adr);
+ return sprogram->read_byte(adr);
}
-UINT8 n2a03_device::mi_2a03_nd::read_decrypted(UINT16 adr)
+UINT8 n2a03_device::mi_2a03_nd::read_arg(UINT16 adr)
{
return program->read_byte(adr);
}
diff --git a/src/emu/cpu/m6502/n2a03.h b/src/emu/cpu/m6502/n2a03.h
index c2f8a7f511b..a046ef71ad3 100644
--- a/src/emu/cpu/m6502/n2a03.h
+++ b/src/emu/cpu/m6502/n2a03.h
@@ -28,8 +28,8 @@ protected:
public:
virtual ~mi_2a03_normal() {}
virtual UINT8 read(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
@@ -37,8 +37,8 @@ protected:
public:
virtual ~mi_2a03_nd() {}
virtual UINT8 read(UINT16 adr);
- virtual UINT8 read_direct(UINT16 adr);
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
+ virtual UINT8 read_arg(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
diff --git a/src/emu/cpu/m6502/odeco16.lst b/src/emu/cpu/m6502/odeco16.lst
index cf8b75455d6..6cea2fa7282 100644
--- a/src/emu/cpu/m6502/odeco16.lst
+++ b/src/emu/cpu/m6502/odeco16.lst
@@ -13,13 +13,13 @@ brk_16_imp
write(SP, irq_taken ? P & ~F_B : P);
dec_SP();
if(nmi_state) {
- PC = read_direct(0xfff7);
- PC = set_h(PC, read_direct(0xfff6));
+ PC = read_arg(0xfff7);
+ PC = set_h(PC, read_arg(0xfff6));
nmi_state = false;
standard_irq_callback(NMI_LINE);
} else {
- PC = read_direct(0xfff3);
- PC = set_h(PC, read_direct(0xfff2));
+ PC = read_arg(0xfff3);
+ PC = set_h(PC, read_arg(0xfff2));
if(irq_taken)
standard_irq_callback(IRQ_LINE);
}
@@ -95,7 +95,7 @@ vbl_zpg
# exceptions
reset_16
- PC = read_direct(0xfff1);
- PC = set_h(PC, read_direct(0xfff0));
+ PC = read_arg(0xfff1);
+ PC = set_h(PC, read_arg(0xfff0));
prefetch();
inst_state = -1;
diff --git a/src/emu/cpu/m6502/om6502.lst b/src/emu/cpu/m6502/om6502.lst
index f76884b554f..24c560c02fa 100644
--- a/src/emu/cpu/m6502/om6502.lst
+++ b/src/emu/cpu/m6502/om6502.lst
@@ -184,7 +184,7 @@ bcc_rel
if(!(P & F_C)) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -195,7 +195,7 @@ bcs_rel
if(P & F_C) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -206,7 +206,7 @@ beq_rel
if(P & F_Z) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -228,7 +228,7 @@ bmi_rel
if(P & F_N) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -239,7 +239,7 @@ bne_rel
if(!(P & F_Z)) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -250,7 +250,7 @@ bpl_rel
if(!(P & F_N)) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -270,13 +270,13 @@ brk_imp
write(SP, irq_taken ? P & ~F_B : P);
dec_SP();
if(nmi_state) {
- PC = read_direct(0xfffa);
- PC = set_h(PC, read_direct(0xfffb));
+ PC = read_arg(0xfffa);
+ PC = set_h(PC, read_arg(0xfffb));
nmi_state = false;
standard_irq_callback(NMI_LINE);
} else {
- PC = read_direct(0xfffe);
- PC = set_h(PC, read_direct(0xffff));
+ PC = read_arg(0xfffe);
+ PC = set_h(PC, read_arg(0xffff));
if(irq_taken)
standard_irq_callback(IRQ_LINE);
}
@@ -290,7 +290,7 @@ bvc_rel
if(!(P & F_V)) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -301,7 +301,7 @@ bvs_rel
if(P & F_V) {
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
}
@@ -1216,8 +1216,8 @@ tya_imp
# exceptions
reset
- PC = read_direct(0xfffc);
- PC = set_h(PC, read_direct(0xfffd));
+ PC = read_arg(0xfffc);
+ PC = set_h(PC, read_arg(0xfffd));
prefetch();
inst_state = -1;
diff --git a/src/emu/cpu/m6502/om65c02.lst b/src/emu/cpu/m6502/om65c02.lst
index 21bc1d4e726..d64ddcdc409 100644
--- a/src/emu/cpu/m6502/om65c02.lst
+++ b/src/emu/cpu/m6502/om65c02.lst
@@ -181,7 +181,7 @@ bra_rel
TMP = read_pc();
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
prefetch();
@@ -199,13 +199,13 @@ brk_c_imp
write(SP, irq_taken || nmi_state ? P & ~F_B : P);
dec_SP();
if(irq_taken && nmi_state) {
- PC = read_direct(0xfffa);
- PC = set_h(PC, read_direct(0xfffb));
+ PC = read_arg(0xfffa);
+ PC = set_h(PC, read_arg(0xfffb));
nmi_state = false;
standard_irq_callback(NMI_LINE);
} else {
- PC = read_direct(0xfffe);
- PC = set_h(PC, read_direct(0xffff));
+ PC = read_arg(0xfffe);
+ PC = set_h(PC, read_arg(0xffff));
if(irq_taken)
standard_irq_callback(IRQ_LINE);
}
diff --git a/src/emu/cpu/m6502/om65ce02.lst b/src/emu/cpu/m6502/om65ce02.lst
index 6fdf244a8b1..049097fded8 100644
--- a/src/emu/cpu/m6502/om65ce02.lst
+++ b/src/emu/cpu/m6502/om65ce02.lst
@@ -360,12 +360,12 @@ brk_ce_imp
write(SP, irq_taken || nmi_state ? P & ~F_B : P);
dec_SP_ce();
if(nmi_state) {
- PC = read_direct(0xfffa);
- PC = set_h(PC, read_direct(0xfffb));
+ PC = read_arg(0xfffa);
+ PC = set_h(PC, read_arg(0xfffb));
nmi_state = false;
} else {
- PC = read_direct(0xfffe);
- PC = set_h(PC, read_direct(0xffff));
+ PC = read_arg(0xfffe);
+ PC = set_h(PC, read_arg(0xffff));
}
irq_taken = false;
P = (P | F_I) & ~F_D; // Do *not* move after the prefetch
diff --git a/src/emu/cpu/m6502/om740.lst b/src/emu/cpu/m6502/om740.lst
index d944a0cbcb5..9f17dc639bf 100644
--- a/src/emu/cpu/m6502/om740.lst
+++ b/src/emu/cpu/m6502/om740.lst
@@ -99,7 +99,7 @@ bra_rel
TMP = read_pc();
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
- read_direct(set_l(PC, PC+INT8(TMP)));
+ read_arg(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
prefetch();
@@ -112,8 +112,8 @@ jmp_zpi
prefetch();
reset740
- PC = read_direct(0xfffe);
- PC = set_h(PC, read_direct(0xffff));
+ PC = read_arg(0xfffe);
+ PC = set_h(PC, read_arg(0xffff));
prefetch();
inst_state = -1;
@@ -131,13 +131,13 @@ brk740_imp
write(SP, irq_taken ? P & ~F_B : P);
dec_SP();
if(nmi_state) {
- PC = read_direct(0xfffa);
- PC = set_h(PC, read_direct(0xfffb));
+ PC = read_arg(0xfffa);
+ PC = set_h(PC, read_arg(0xfffb));
nmi_state = false;
standard_irq_callback(NMI_LINE);
} else {
- PC = read_direct(m_irq_vector);
- PC = set_h(PC, read_direct(m_irq_vector+1));
+ PC = read_arg(m_irq_vector);
+ PC = set_h(PC, read_arg(m_irq_vector+1));
if(irq_taken)
standard_irq_callback(IRQ_LINE);
}
diff --git a/src/emu/cpu/m6800/m6800.c b/src/emu/cpu/m6800/m6800.c
index 3cb68924929..46a7cc4a99a 100644
--- a/src/emu/cpu/m6800/m6800.c
+++ b/src/emu/cpu/m6800/m6800.c
@@ -160,14 +160,14 @@ static UINT32 timer_next;
/* opcodes. In case of system with memory mapped I/O, this function can be */
/* used to greatly speed up emulation */
/****************************************************************************/
-#define M_RDOP(Addr) ((unsigned)m_direct->read_decrypted_byte(Addr))
+#define M_RDOP(Addr) ((unsigned)m_decrypted_opcodes_direct->read_byte(Addr))
/****************************************************************************/
/* M6800_RDOP_ARG() is identical to M6800_RDOP() but it's used for reading */
/* opcode arguments. This difference can be used to support systems that */
/* use different encoding mechanisms for opcodes and opcode arguments */
/****************************************************************************/
-#define M_RDOP_ARG(Addr) ((unsigned)m_direct->read_raw_byte(Addr))
+#define M_RDOP_ARG(Addr) ((unsigned)m_direct->read_byte(Addr))
/* macros to access memory */
#define IMMBYTE(b) b = M_RDOP_ARG(PCD); PC++
@@ -535,6 +535,7 @@ const device_type HD6303Y = &device_creator<hd6303y_cpu_device>;
m6800_cpu_device::m6800_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: cpu_device(mconfig, M6800, "M6800", tag, owner, clock, "m6800", __FILE__)
, m_program_config("program", ENDIANNESS_BIG, 8, 16, 0)
+ , m_decrypted_opcodes_config("program", ENDIANNESS_BIG, 8, 16, 0)
, m_io_config("io", ENDIANNESS_BIG, 8, 9, 0)
, m_has_io(false)
, m_out_sc2_func(*this)
@@ -548,6 +549,7 @@ m6800_cpu_device::m6800_cpu_device(const machine_config &mconfig, const char *ta
m6800_cpu_device::m6800_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source, bool has_io, int clock_divider, const op_func *insn, const UINT8 *cycles, address_map_constructor internal)
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
, m_program_config("program", ENDIANNESS_BIG, 8, 16, 0, internal)
+ , m_decrypted_opcodes_config("program", ENDIANNESS_BIG, 8, 16, 0)
, m_io_config("io", ENDIANNESS_BIG, 8, 9, 0)
, m_has_io(has_io)
, m_out_sc2_func(*this)
@@ -625,6 +627,17 @@ hd6303y_cpu_device::hd6303y_cpu_device(const machine_config &mconfig, const char
{
}
+const address_space_config *m6800_cpu_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch(spacenum)
+ {
+ case AS_PROGRAM: return &m_program_config;
+ case AS_IO: return m_has_io ? &m_io_config : NULL;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_decrypted_opcodes_config : NULL;
+ default: return NULL;
+ }
+}
+
UINT32 m6800_cpu_device::RM16(UINT32 Addr )
{
@@ -1039,6 +1052,8 @@ void m6800_cpu_device::device_start()
{
m_program = &space(AS_PROGRAM);
m_direct = &m_program->direct();
+ m_decrypted_opcodes = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : m_program;
+ m_decrypted_opcodes_direct = &m_decrypted_opcodes->direct();
if ( m_has_io )
m_io = &space(AS_IO);
diff --git a/src/emu/cpu/m6800/m6800.h b/src/emu/cpu/m6800/m6800.h
index 1f7d668861b..af02be492d8 100644
--- a/src/emu/cpu/m6800/m6800.h
+++ b/src/emu/cpu/m6800/m6800.h
@@ -84,7 +84,7 @@ protected:
virtual void execute_set_input(int inputnum, int state);
// device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO && m_has_io) ? &m_io_config : NULL ); }
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
// device_state_interface overrides
void state_string_export(const device_state_entry &entry, std::string &str);
@@ -95,6 +95,7 @@ protected:
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
address_space_config m_program_config;
+ address_space_config m_decrypted_opcodes_config;
address_space_config m_io_config;
bool m_has_io;
@@ -115,8 +116,8 @@ protected:
int m_sc1_state;
/* Memory spaces */
- address_space *m_program;
- direct_read_data *m_direct;
+ address_space *m_program, *m_decrypted_opcodes;
+ direct_read_data *m_direct, *m_decrypted_opcodes_direct;
address_space *m_io;
const op_func *m_insn;
diff --git a/src/emu/cpu/m68000/m68000.h b/src/emu/cpu/m68000/m68000.h
index d5ab6b16b84..5279ad655ec 100644
--- a/src/emu/cpu/m68000/m68000.h
+++ b/src/emu/cpu/m68000/m68000.h
@@ -166,7 +166,7 @@ public:
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
// address spaces
- const address_space_config m_program_config;
+ const address_space_config m_program_config, m_oprogram_config;
void define_state(void);
@@ -175,7 +175,6 @@ public:
void set_rte_callback(write_line_delegate callback);
void set_tas_write_callback(write8_delegate callback);
UINT16 get_fc();
- void set_encrypted_opcode_range(offs_t start, offs_t end);
void set_hmmu_enable(int enable);
void set_instruction_hook(read32_delegate ihook);
void set_buserror_details(UINT32 fault_addr, UINT8 rw, UINT8 fc);
@@ -263,7 +262,7 @@ public:
allowing writeback to be disabled globally or selectively
or other side effects to be implemented */
- address_space *program;
+ address_space *program, *oprogram;
/* Redirect memory calls */
@@ -278,11 +277,11 @@ public:
// class m68k_memory_interface
// {
public:
- void init8(address_space &space);
- void init16(address_space &space);
- void init32(address_space &space);
- void init32mmu(address_space &space);
- void init32hmmu(address_space &space);
+ void init8(address_space &space, address_space &ospace);
+ void init16(address_space &space, address_space &ospace);
+ void init32(address_space &space, address_space &ospace);
+ void init32mmu(address_space &space, address_space &ospace);
+ void init32hmmu(address_space &space, address_space &ospace);
offs_t opcode_xor; // Address Calculation
m68k_readimm16_delegate readimm16; // Immediate read 16 bit
@@ -322,11 +321,8 @@ public:
public:
// m68k_memory_interface memory;
- address_space *m_space;
- direct_read_data *m_direct;
-
- offs_t encrypted_start;
- offs_t encrypted_end;
+ address_space *m_space, *m_ospace;
+ direct_read_data *m_direct, *m_odirect;
UINT32 iotemp;
diff --git a/src/emu/cpu/m68000/m68kcpu.c b/src/emu/cpu/m68000/m68kcpu.c
index 62e14a0cf79..bb83abade83 100644
--- a/src/emu/cpu/m68000/m68kcpu.c
+++ b/src/emu/cpu/m68000/m68kcpu.c
@@ -956,6 +956,7 @@ void m68000_base_device::init_cpu_common(void)
//this = device;//deviceparam;
program = &space(AS_PROGRAM);
+ oprogram = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : program;
int_ack_callback = device_irq_acknowledge_delegate(FUNC(m68000_base_device::standard_irq_callback_member), this);
/* disable all MMUs */
@@ -1230,12 +1231,6 @@ void m68000_base_device::state_string_export(const device_state_entry &entry, st
/* global access */
-void m68000_base_device::set_encrypted_opcode_range(offs_t start, offs_t end)
-{
- encrypted_start = start;
- encrypted_end = end;
-}
-
void m68000_base_device::set_hmmu_enable(int enable)
{
hmmu_enabled = enable;
@@ -1252,13 +1247,15 @@ void m68000_base_device::set_instruction_hook(read32_delegate ihook)
UINT16 m68000_base_device::m68008_read_immediate_16(offs_t address)
{
- return (m_direct->read_decrypted_byte(address) << 8) | (m_direct->read_decrypted_byte(address + 1));
+ return (m_odirect->read_byte(address) << 8) | (m_odirect->read_byte(address + 1));
}
-void m68000_base_device::init8(address_space &space)
+void m68000_base_device::init8(address_space &space, address_space &ospace)
{
m_space = &space;
m_direct = &space.direct();
+ m_ospace = &ospace;
+ m_odirect = &ospace.direct();
// m_cpustate = this;
opcode_xor = 0;
@@ -1277,12 +1274,12 @@ void m68000_base_device::init8(address_space &space)
UINT16 m68000_base_device::read_immediate_16(offs_t address)
{
- return m_direct->read_decrypted_word((address), opcode_xor);
+ return m_odirect->read_word((address), opcode_xor);
}
UINT16 m68000_base_device::simple_read_immediate_16(offs_t address)
{
- return m_direct->read_decrypted_word(address);
+ return m_odirect->read_word(address);
}
void m68000_base_device::m68000_write_byte(offs_t address, UINT8 data)
@@ -1292,10 +1289,13 @@ void m68000_base_device::m68000_write_byte(offs_t address, UINT8 data)
m_space->write_word(address & ~1, data | (data << 8), masks[address & 1]);
}
-void m68000_base_device::init16(address_space &space)
+void m68000_base_device::init16(address_space &space, address_space &ospace)
{
m_space = &space;
m_direct = &space.direct();
+ m_ospace = &ospace;
+ m_odirect = &ospace.direct();
+
opcode_xor = 0;
readimm16 = m68k_readimm16_delegate(FUNC(m68000_base_device::simple_read_immediate_16), this);
@@ -1316,10 +1316,12 @@ void m68000_base_device::init16(address_space &space)
****************************************************************************/
/* interface for 32-bit data bus (68EC020, 68020) */
-void m68000_base_device::init32(address_space &space)
+void m68000_base_device::init32(address_space &space, address_space &ospace)
{
m_space = &space;
m_direct = &space.direct();
+ m_ospace = &ospace;
+ m_odirect = &ospace.direct();
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(FUNC(m68000_base_device::read_immediate_16), this);
@@ -1368,7 +1370,7 @@ UINT16 m68000_base_device::read_immediate_16_mmu(offs_t address)
}
}
- return m_direct->read_decrypted_word((address), opcode_xor);
+ return m_odirect->read_word((address), opcode_xor);
}
/* potentially misaligned 16-bit reads with a 32-bit data bus (and 24-bit address bus) */
@@ -1533,10 +1535,12 @@ void m68000_base_device::writelong_d32_mmu(offs_t address, UINT32 data)
m_space->write_byte(address + 3, data);
}
-void m68000_base_device::init32mmu(address_space &space)
+void m68000_base_device::init32mmu(address_space &space, address_space &ospace)
{
m_space = &space;
m_direct = &space.direct();
+ m_ospace = &ospace;
+ m_odirect = &ospace.direct();
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(FUNC(m68000_base_device::read_immediate_16_mmu), this);
@@ -1577,7 +1581,7 @@ UINT16 m68000_base_device::read_immediate_16_hmmu(offs_t address)
address = hmmu_translate_addr(this, address);
}
- return m_direct->read_decrypted_word((address), opcode_xor);
+ return m_odirect->read_word((address), opcode_xor);
}
/* potentially misaligned 16-bit reads with a 32-bit data bus (and 24-bit address bus) */
@@ -1659,10 +1663,12 @@ void m68000_base_device::writelong_d32_hmmu(offs_t address, UINT32 data)
m_space->write_byte(address + 3, data);
}
-void m68000_base_device::init32hmmu(address_space &space)
+void m68000_base_device::init32hmmu(address_space &space, address_space &ospace)
{
m_space = &space;
m_direct = &space.direct();
+ m_ospace = &ospace;
+ m_odirect = &ospace.direct();
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(FUNC(m68000_base_device::read_immediate_16_hmmu), this);
@@ -1780,7 +1786,7 @@ void m68000_base_device::init_cpu_m68000(void)
cpu_type = CPU_TYPE_000;
// dasm_type = M68K_CPU_TYPE_68000;
- init16(*program);
+ init16(*program, *oprogram);
sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[0];
cyc_instruction = m68ki_cycles[0];
@@ -1810,7 +1816,7 @@ void m68000_base_device::init_cpu_m68008(void)
cpu_type = CPU_TYPE_008;
// dasm_type = M68K_CPU_TYPE_68008;
- init8(*program);
+ init8(*program, *oprogram);
sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[0];
cyc_instruction = m68ki_cycles[0];
@@ -1838,7 +1844,7 @@ void m68000_base_device::init_cpu_m68010(void)
cpu_type = CPU_TYPE_010;
// dasm_type = M68K_CPU_TYPE_68010;
- init16(*program);
+ init16(*program, *oprogram);
sr_mask = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[1];
cyc_instruction = m68ki_cycles[1];
@@ -1865,7 +1871,7 @@ void m68000_base_device::init_cpu_m68020(void)
cpu_type = CPU_TYPE_020;
// dasm_type = M68K_CPU_TYPE_68020;
- init32(*program);
+ init32(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[2];
cyc_instruction = m68ki_cycles[2];
@@ -1898,7 +1904,7 @@ void m68000_base_device::init_cpu_m68020pmmu(void)
has_fpu = 1;
- init32mmu(*program);
+ init32mmu(*program, *oprogram);
}
@@ -1911,7 +1917,7 @@ void m68000_base_device::init_cpu_m68020hmmu(void)
has_fpu = 1;
- init32hmmu(*program);
+ init32hmmu(*program, *oprogram);
}
void m68000_base_device::init_cpu_m68ec020(void)
@@ -1922,7 +1928,7 @@ void m68000_base_device::init_cpu_m68ec020(void)
// dasm_type = M68K_CPU_TYPE_68EC020;
- init32(*program);
+ init32(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[2];
cyc_instruction = m68ki_cycles[2];
@@ -1951,7 +1957,7 @@ void m68000_base_device::init_cpu_m68030(void)
// dasm_type = M68K_CPU_TYPE_68030;
- init32mmu(*program);
+ init32mmu(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[3];
cyc_instruction = m68ki_cycles[3];
@@ -1981,7 +1987,7 @@ void m68000_base_device::init_cpu_m68ec030(void)
// dasm_type = M68K_CPU_TYPE_68EC030;
- init32(*program);
+ init32(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[3];
cyc_instruction = m68ki_cycles[3];
@@ -2011,7 +2017,7 @@ void m68000_base_device::init_cpu_m68040(void)
// dasm_type = M68K_CPU_TYPE_68040;
- init32mmu(*program);
+ init32mmu(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[4];
cyc_instruction = m68ki_cycles[4];
@@ -2040,7 +2046,7 @@ void m68000_base_device::init_cpu_m68ec040(void)
// dasm_type = M68K_CPU_TYPE_68EC040;
- init32(*program);
+ init32(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[4];
cyc_instruction = m68ki_cycles[4];
@@ -2069,7 +2075,7 @@ void m68000_base_device::init_cpu_m68lc040(void)
// dasm_type = M68K_CPU_TYPE_68LC040;
- init32mmu(*program);
+ init32mmu(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[4];
cyc_instruction = m68ki_cycles[4];
@@ -2105,7 +2111,7 @@ void m68000_base_device::init_cpu_fscpu32(void)
// dasm_type = M68K_CPU_TYPE_FSCPU32;
- init32(*program);
+ init32(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[5];
cyc_instruction = m68ki_cycles[5];
@@ -2133,7 +2139,7 @@ void m68000_base_device::init_cpu_coldfire(void)
// dasm_type = M68K_CPU_TYPE_COLDFIRE;
- init32(*program);
+ init32(*program, *oprogram);
sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
jump_table = m68ki_instruction_jump_table[6];
cyc_instruction = m68ki_cycles[6];
@@ -2330,7 +2336,8 @@ const device_type M68K = &device_creator<m68000_base_device>;
m68000_base_device::m68000_base_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: cpu_device(mconfig, M68K, "M68K", tag, owner, clock, "m68k", __FILE__),
- m_program_config("program", ENDIANNESS_BIG, 16, 24)
+ m_program_config("program", ENDIANNESS_BIG, 16, 24),
+ m_oprogram_config("decrypted_opcodes", ENDIANNESS_BIG, 16, 24)
{
clear_all();
}
@@ -2341,7 +2348,8 @@ m68000_base_device::m68000_base_device(const machine_config &mconfig, const char
m68000_base_device::m68000_base_device(const machine_config &mconfig, const char *name, const char *tag, device_t *owner, UINT32 clock,
const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, address_map_constructor internal_map, const char *shortname, const char *source)
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
- m_program_config("program", ENDIANNESS_BIG, prg_data_width, prg_address_bits, 0, internal_map)
+ m_program_config("program", ENDIANNESS_BIG, prg_data_width, prg_address_bits, 0, internal_map),
+ m_oprogram_config("decrypted_opcodes", ENDIANNESS_BIG, prg_data_width, prg_address_bits, 0, internal_map)
{
clear_all();
}
@@ -2350,7 +2358,8 @@ m68000_base_device::m68000_base_device(const machine_config &mconfig, const char
m68000_base_device::m68000_base_device(const machine_config &mconfig, const char *name, const char *tag, device_t *owner, UINT32 clock,
const device_type type, UINT32 prg_data_width, UINT32 prg_address_bits, const char *shortname, const char *source)
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
- m_program_config("program", ENDIANNESS_BIG, prg_data_width, prg_address_bits)
+ m_program_config("program", ENDIANNESS_BIG, prg_data_width, prg_address_bits),
+ m_oprogram_config("decrypted_opcodes", ENDIANNESS_BIG, prg_data_width, prg_address_bits)
{
clear_all();
}
@@ -2443,9 +2452,6 @@ void m68000_base_device::clear_all()
m_direct = 0;
- encrypted_start = 0;
- encrypted_end = 0;
-
iotemp = 0;
save_sr = 0;
@@ -2536,12 +2542,12 @@ void m68000_base_device::execute_set_input(int inputnum, int state)
const address_space_config *m68000_base_device::memory_space_config(address_spacenum spacenum) const
{
- if (spacenum == AS_PROGRAM)
+ switch(spacenum)
{
- return &m_program_config;
+ case AS_PROGRAM: return &m_program_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_oprogram_config : NULL;
+ default: return NULL;
}
-
- return NULL;
}
diff --git a/src/emu/cpu/m68000/m68kcpu.h b/src/emu/cpu/m68000/m68kcpu.h
index 03909114628..831fb024a88 100644
--- a/src/emu/cpu/m68000/m68kcpu.h
+++ b/src/emu/cpu/m68000/m68kcpu.h
@@ -626,26 +626,17 @@ INLINE unsigned int m68k_read_immediate_32(m68000_base_device *m68k, unsigned in
INLINE unsigned int m68k_read_pcrelative_8(m68000_base_device *m68k, unsigned int address)
{
- if (address >= m68k->encrypted_start && address < m68k->encrypted_end)
- return ((m68k->/*memory.*/readimm16(address&~1)>>(8*(1-(address & 1))))&0xff);
-
- return m68k->/*memory.*/read8(address);
+ return ((m68k->/*memory.*/readimm16(address&~1)>>(8*(1-(address & 1))))&0xff);
}
INLINE unsigned int m68k_read_pcrelative_16(m68000_base_device *m68k, unsigned int address)
{
- if (address >= m68k->encrypted_start && address < m68k->encrypted_end)
- return m68k->/*memory.*/readimm16(address);
-
- return m68k->/*memory.*/read16(address);
+ return m68k->/*memory.*/readimm16(address);
}
INLINE unsigned int m68k_read_pcrelative_32(m68000_base_device *m68k, unsigned int address)
{
- if (address >= m68k->encrypted_start && address < m68k->encrypted_end)
- return m68k_read_immediate_32(m68k, address);
-
- return m68k->/*memory.*/read32(address);
+ return m68k_read_immediate_32(m68k, address);
}
diff --git a/src/emu/cpu/m6805/m6805.c b/src/emu/cpu/m6805/m6805.c
index 8df8c9416ac..b7fc47c8dfc 100644
--- a/src/emu/cpu/m6805/m6805.c
+++ b/src/emu/cpu/m6805/m6805.c
@@ -53,14 +53,14 @@
/* opcodes. In case of system with memory mapped I/O, this function can be */
/* used to greatly speed up emulation */
/****************************************************************************/
-#define M6805_RDOP(addr) ((unsigned)m_direct->read_decrypted_byte(addr))
+#define M6805_RDOP(addr) ((unsigned)m_direct->read_byte(addr))
/****************************************************************************/
/* M6805_RDOP_ARG() is identical to M6805_RDOP() but it's used for reading */
/* opcode arguments. This difference can be used to support systems that */
/* use different encoding mechanisms for opcodes and opcode arguments */
/****************************************************************************/
-#define M6805_RDOP_ARG(addr) ((unsigned)m_direct->read_raw_byte(addr))
+#define M6805_RDOP_ARG(addr) ((unsigned)m_direct->read_byte(addr))
#define SP_MASK m_sp_mask /* stack pointer mask */
#define SP_LOW m_sp_low /* stack pointer low water mark */
diff --git a/src/emu/cpu/m6809/hd6309.ops b/src/emu/cpu/m6809/hd6309.ops
index cddde7318d4..6da3a904d2b 100644
--- a/src/emu/cpu/m6809/hd6309.ops
+++ b/src/emu/cpu/m6809/hd6309.ops
@@ -14,9 +14,6 @@ MAIN:
// opcode fetch
@m_opcode = read_opcode();
- // burn delay loops
- burn_any_delay_loops();
-
// dispatch opcode
switch(m_opcode)
{
diff --git a/src/emu/cpu/m6809/m6809.c b/src/emu/cpu/m6809/m6809.c
index 1b7b0e1e777..d69b0417453 100644
--- a/src/emu/cpu/m6809/m6809.c
+++ b/src/emu/cpu/m6809/m6809.c
@@ -113,8 +113,10 @@ m6809_base_device::m6809_base_device(const machine_config &mconfig, const char *
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
m_lic_func(*this),
m_program_config("program", ENDIANNESS_BIG, 8, 16),
+ m_sprogram_config("decrypted_opcodes", ENDIANNESS_BIG, 8, 16),
m_clock_divider(divider)
{
+ m_mintf = NULL;
}
@@ -124,7 +126,14 @@ m6809_base_device::m6809_base_device(const machine_config &mconfig, const char *
void m6809_base_device::device_start()
{
- m_direct = &m_addrspace[AS_PROGRAM]->direct();
+ if (!m_mintf)
+ m_mintf = new mi_default;
+
+ m_mintf->m_program = &space(AS_PROGRAM);
+ m_mintf->m_sprogram = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : m_mintf->m_program;
+
+ m_mintf->m_direct = &m_mintf->m_program->direct();
+ m_mintf->m_sdirect = &m_mintf->m_sprogram->direct();
m_lic_func.resolve_safe();
@@ -280,11 +289,12 @@ void m6809_base_device::device_post_load()
const address_space_config *m6809_base_device::memory_space_config(address_spacenum spacenum) const
{
- if (spacenum == AS_PROGRAM)
+ switch(spacenum)
{
- return &m_program_config;
+ case AS_PROGRAM: return &m_program_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_sprogram_config : NULL;
+ default: return NULL;
}
- return NULL;
}
@@ -539,6 +549,28 @@ void m6809_base_device::execute_run()
}
+UINT8 m6809_base_device::mi_default::read(UINT16 adr)
+{
+ return m_program->read_byte(adr);
+}
+
+UINT8 m6809_base_device::mi_default::read_opcode(UINT16 adr)
+{
+ return m_sdirect->read_byte(adr);
+}
+
+UINT8 m6809_base_device::mi_default::read_opcode_arg(UINT16 adr)
+{
+ return m_direct->read_byte(adr);
+}
+
+
+void m6809_base_device::mi_default::write(UINT16 adr, UINT8 val)
+{
+ m_program->write_byte(adr, val);
+}
+
+
//-------------------------------------------------
// m6809_device
diff --git a/src/emu/cpu/m6809/m6809.h b/src/emu/cpu/m6809/m6809.h
index 7b14a6882e5..595585cd098 100644
--- a/src/emu/cpu/m6809/m6809.h
+++ b/src/emu/cpu/m6809/m6809.h
@@ -39,6 +39,27 @@ public:
DECLARE_WRITE_LINE_MEMBER( nmi_line );
protected:
+ class memory_interface {
+ public:
+ address_space *m_program, *m_sprogram;
+ direct_read_data *m_direct, *m_sdirect;
+
+ virtual ~memory_interface() {}
+ virtual UINT8 read(UINT16 adr) = 0;
+ virtual UINT8 read_opcode(UINT16 adr) = 0;
+ virtual UINT8 read_opcode_arg(UINT16 adr) = 0;
+ virtual void write(UINT16 adr, UINT8 val) = 0;
+ };
+
+ class mi_default : public memory_interface {
+ public:
+ virtual ~mi_default() {}
+ virtual UINT8 read(UINT16 adr);
+ virtual UINT8 read_opcode(UINT16 adr);
+ virtual UINT8 read_opcode_arg(UINT16 adr);
+ virtual void write(UINT16 adr, UINT8 val);
+ };
+
// device-level overrides
virtual void device_start();
virtual void device_reset();
@@ -119,6 +140,9 @@ protected:
VECTOR_RESET_FFFE = 0xFFFE
};
+ // Memory interface
+ memory_interface * m_mintf;
+
// CPU registers
PAIR16 m_pc; // program counter
PAIR16 m_ppc; // previous program counter
@@ -151,19 +175,19 @@ protected:
void eat_remaining();
// read a byte from given memory location
- inline UINT8 read_memory(UINT16 address) { eat(1); return m_addrspace[AS_PROGRAM]->read_byte(address); }
+ inline UINT8 read_memory(UINT16 address) { eat(1); return m_mintf->read(address); }
// write a byte to given memory location
- inline void write_memory(UINT16 address, UINT8 data) { eat(1); m_addrspace[AS_PROGRAM]->write_byte(address, data); }
+ inline void write_memory(UINT16 address, UINT8 data) { eat(1); m_mintf->write(address, data); }
// read_opcode() is like read_memory() except it is used for reading opcodes. In the case of a system
// with memory mapped I/O, this function can be used to greatly speed up emulation.
- inline UINT8 read_opcode(UINT16 address) { eat(1); return m_direct->read_decrypted_byte(address); }
+ inline UINT8 read_opcode(UINT16 address) { eat(1); return m_mintf->read_opcode(address); }
// read_opcode_arg() is identical to read_opcode() except it is used for reading opcode arguments. This
// difference can be used to support systems that use different encoding mechanisms for opcodes
// and opcode arguments.
- inline UINT8 read_opcode_arg(UINT16 address) { eat(1); return m_direct->read_raw_byte(address); }
+ inline UINT8 read_opcode_arg(UINT16 address) { eat(1); return m_mintf->read_opcode_arg(address); }
// read_opcode() and bump the program counter
inline UINT8 read_opcode() { return read_opcode(m_pc.w++); }
@@ -187,10 +211,6 @@ protected:
void write_operand(UINT8 data);
void write_operand(int ordinal, UINT8 data);
- // delay loops
- bool match_target_bytes(UINT16 address, const UINT8 *bytes, int length);
- void burn_any_delay_loops();
-
// instructions
void daa();
void mul();
@@ -245,7 +265,7 @@ protected:
private:
// address spaces
const address_space_config m_program_config;
- direct_read_data * m_direct;
+ const address_space_config m_sprogram_config;
// other state
UINT32 m_state;
diff --git a/src/emu/cpu/m6809/m6809.ops b/src/emu/cpu/m6809/m6809.ops
index 49fe45644b9..96b9f6c11a7 100644
--- a/src/emu/cpu/m6809/m6809.ops
+++ b/src/emu/cpu/m6809/m6809.ops
@@ -16,9 +16,6 @@ MAIN:
@m_opcode = read_opcode();
m_lic_func(CLEAR_LINE);
- // burn delay loops
- burn_any_delay_loops();
-
// dispatch opcode
switch(m_opcode)
{
diff --git a/src/emu/cpu/m6809/m6809inl.h b/src/emu/cpu/m6809/m6809inl.h
index 4959bcb7fda..8fd1cfe330d 100644
--- a/src/emu/cpu/m6809/m6809inl.h
+++ b/src/emu/cpu/m6809/m6809inl.h
@@ -126,48 +126,6 @@ inline ATTR_FORCE_INLINE void m6809_base_device::write_operand(int ordinal, UINT
//-------------------------------------------------
-// match_target_bytes
-//-------------------------------------------------
-
-inline ATTR_FORCE_INLINE bool m6809_base_device::match_target_bytes(UINT16 address, const UINT8 *bytes, int length)
-{
- UINT8 *start_raw = (UINT8 *) m_direct->read_raw_ptr(address);
- UINT8 *start_decrypted = (UINT8 *) m_direct->read_decrypted_ptr(address);
- UINT8 *end_raw = (UINT8 *) m_direct->read_raw_ptr(address + length - 1);
- UINT8 *end_decrypted = (UINT8 *) m_direct->read_decrypted_ptr(address + length - 1);
-
- return (start_raw != NULL)
- && (end_raw != NULL)
- && (start_raw == start_decrypted)
- && (end_raw == end_decrypted)
- && (start_raw + length - 1 == end_raw)
- && !memcmp(start_raw, bytes, length);
-}
-
-
-//-------------------------------------------------
-// burn_any_delay_loops - optimization for delay
-// loops
-//-------------------------------------------------
-
-inline ATTR_FORCE_INLINE void m6809_base_device::burn_any_delay_loops()
-{
- static const UINT8 target_bytes[] = { 0x30, 0x1F, 0x26, 0xFC };
-
- if ((m_opcode == 0x26)
- && !(m_cc & CC_Z)
- && !(machine().debug_flags & DEBUG_FLAG_CALL_HOOK)
- && match_target_bytes(m_pc.w - 3, target_bytes, ARRAY_LENGTH(target_bytes)))
- {
- // LEAX -1,X ; BNE *
- UINT16 burned_loops = MIN((int) m_x.w - 1, m_icount / 8);
- m_x.w -= burned_loops;
- eat(burned_loops * 8);
- }
-}
-
-
-//-------------------------------------------------
// daa - decimal arithmetic adjustment instruction
//-------------------------------------------------
diff --git a/src/emu/cpu/mb86233/mb86233.c b/src/emu/cpu/mb86233/mb86233.c
index c9ccd6e31ad..0ad34296064 100644
--- a/src/emu/cpu/mb86233/mb86233.c
+++ b/src/emu/cpu/mb86233/mb86233.c
@@ -69,7 +69,7 @@ offs_t mb86233_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UIN
#define GETBRAM() m_BRAM
#define GETREPCNT() m_repcnt
-#define ROPCODE(a) m_direct->read_decrypted_dword(a<<2)
+#define ROPCODE(a) m_direct->read_dword(a<<2)
#define RDMEM(a) m_program->read_dword((a<<2))
#define WRMEM(a,v) m_program->write_dword((a<<2), v)
diff --git a/src/emu/cpu/mb88xx/mb88xx.c b/src/emu/cpu/mb88xx/mb88xx.c
index 2bd49a6374d..0508bfad1d4 100644
--- a/src/emu/cpu/mb88xx/mb88xx.c
+++ b/src/emu/cpu/mb88xx/mb88xx.c
@@ -47,7 +47,7 @@ const device_type MB8844 = &device_creator<mb8844_cpu_device>;
MACROS
***************************************************************************/
-#define READOP(a) (m_direct->read_decrypted_byte(a))
+#define READOP(a) (m_direct->read_byte(a))
#define RDMEM(a) (m_data->read_byte(a))
#define WRMEM(a,v) (m_data->write_byte((a), (v)))
diff --git a/src/emu/cpu/mc68hc11/mc68hc11.c b/src/emu/cpu/mc68hc11/mc68hc11.c
index 1ead2b94fdf..f05d9126334 100644
--- a/src/emu/cpu/mc68hc11/mc68hc11.c
+++ b/src/emu/cpu/mc68hc11/mc68hc11.c
@@ -300,13 +300,13 @@ void mc68hc11_cpu_device::hc11_regs_w(UINT32 address, UINT8 value)
UINT8 mc68hc11_cpu_device::FETCH()
{
- return m_direct->read_decrypted_byte(m_pc++);
+ return m_direct->read_byte(m_pc++);
}
UINT16 mc68hc11_cpu_device::FETCH16()
{
UINT16 w;
- w = (m_direct->read_decrypted_byte(m_pc) << 8) | (m_direct->read_decrypted_byte(m_pc+1));
+ w = (m_direct->read_byte(m_pc) << 8) | (m_direct->read_byte(m_pc+1));
m_pc += 2;
return w;
}
diff --git a/src/emu/cpu/mcs48/mcs48.c b/src/emu/cpu/mcs48/mcs48.c
index 6025ffe07cd..a24cf72f0d6 100644
--- a/src/emu/cpu/mcs48/mcs48.c
+++ b/src/emu/cpu/mcs48/mcs48.c
@@ -348,7 +348,7 @@ offs_t upi41_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
UINT8 mcs48_cpu_device::opcode_fetch()
{
- return m_direct->read_decrypted_byte(m_pc++);
+ return m_direct->read_byte(m_pc++);
}
@@ -359,7 +359,7 @@ UINT8 mcs48_cpu_device::opcode_fetch()
UINT8 mcs48_cpu_device::argument_fetch()
{
- return m_direct->read_raw_byte(m_pc++);
+ return m_direct->read_byte(m_pc++);
}
diff --git a/src/emu/cpu/mcs51/mcs51.c b/src/emu/cpu/mcs51/mcs51.c
index d3c73ecf0c6..3e262b68c8c 100644
--- a/src/emu/cpu/mcs51/mcs51.c
+++ b/src/emu/cpu/mcs51/mcs51.c
@@ -379,8 +379,8 @@ ds5002fp_device::ds5002fp_device(const machine_config &mconfig, const char *tag,
***************************************************************************/
/* Read Opcode/Opcode Arguments from Program Code */
-#define ROP(pc) m_direct->read_decrypted_byte(pc)
-#define ROP_ARG(pc) m_direct->read_raw_byte(pc)
+#define ROP(pc) m_direct->read_byte(pc)
+#define ROP_ARG(pc) m_direct->read_byte(pc)
/* Read a byte from External Code Memory (Usually Program Rom(s) Space) */
#define CODEMEM_R(a) (UINT8)m_program->read_byte(a)
@@ -1996,7 +1996,7 @@ void mcs51_cpu_device::execute_run()
/* Read next opcode */
PPC = PC;
debugger_instruction_hook(this, PC);
- op = m_direct->read_decrypted_byte(PC++);
+ op = m_direct->read_byte(PC++);
/* process opcode and count cycles */
m_inst_cycles = mcs51_cycles[op];
diff --git a/src/emu/cpu/mcs96/mcs96.h b/src/emu/cpu/mcs96/mcs96.h
index 3f91c0b64ea..d121a31e546 100644
--- a/src/emu/cpu/mcs96/mcs96.h
+++ b/src/emu/cpu/mcs96/mcs96.h
@@ -119,7 +119,7 @@ protected:
inline void next(int cycles) { icount -= cycles_scaling*cycles; inst_state = STATE_FETCH; }
inline void next_noirq(int cycles) { icount -= cycles_scaling*cycles; inst_state = STATE_FETCH_NOIRQ; }
void check_irq();
- inline UINT8 read_pc() { return direct->read_decrypted_byte(PC++); }
+ inline UINT8 read_pc() { return direct->read_byte(PC++); }
void reg_w8(UINT8 adr, UINT8 data);
void reg_w16(UINT8 adr, UINT16 data);
diff --git a/src/emu/cpu/mips/mips3.c b/src/emu/cpu/mips/mips3.c
index 3b377dfa64f..5ceff4b5462 100644
--- a/src/emu/cpu/mips/mips3.c
+++ b/src/emu/cpu/mips/mips3.c
@@ -101,7 +101,7 @@ static const UINT8 fpmode_source[4] =
MEMORY ACCESSORS
***************************************************************************/
-#define ROPCODE(pc) direct->read_decrypted_dword(pc)
+#define ROPCODE(pc) direct->read_dword(pc)
const device_type VR4300BE = &device_creator<vr4300be_device>;
diff --git a/src/emu/cpu/mips/mips3drc.c b/src/emu/cpu/mips/mips3drc.c
index 70c31df2220..b454d10f74a 100644
--- a/src/emu/cpu/mips/mips3drc.c
+++ b/src/emu/cpu/mips/mips3drc.c
@@ -1095,12 +1095,12 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
if (!(seqhead->flags & OPFLAG_VIRTUAL_NOOP))
{
UINT32 sum = seqhead->opptr.l[0];
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
if (seqhead->delay.first() != NULL && seqhead->physpc != seqhead->delay.first()->physpc)
{
- base = m_direct->read_decrypted_ptr(seqhead->delay.first()->physpc);
+ base = m_direct->read_ptr(seqhead->delay.first()->physpc);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -1120,20 +1120,20 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
UML_CMP(block, I0, curdesc->opptr.l[0]); // cmp i0,opptr[0]
UML_EXHc(block, COND_NE, *m_nocode, epc(seqhead)); // exne nocode,seqhead->pc
}
#else
UINT32 sum = 0;
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
sum += seqhead->opptr.l[0];
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc);
+ base = m_direct->read_ptr(curdesc->physpc);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -1141,7 +1141,7 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
if (curdesc->delay.first() != NULL && (curdesc == seqlast || (curdesc->next() != NULL && curdesc->next()->physpc != curdesc->delay.first()->physpc)))
{
- base = m_direct->read_decrypted_ptr(curdesc->delay.first()->physpc);
+ base = m_direct->read_ptr(curdesc->delay.first()->physpc);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
diff --git a/src/emu/cpu/mips/mips3fe.c b/src/emu/cpu/mips/mips3fe.c
index 7d031c32407..42055c39e24 100644
--- a/src/emu/cpu/mips/mips3fe.c
+++ b/src/emu/cpu/mips/mips3fe.c
@@ -49,7 +49,7 @@ bool mips3_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
// fetch the opcode
assert((desc.physpc & 3) == 0);
- op = desc.opptr.l[0] = m_mips3->m_direct->read_decrypted_dword(desc.physpc);
+ op = desc.opptr.l[0] = m_mips3->m_direct->read_dword(desc.physpc);
// all instructions are 4 bytes and default to a single cycle each
desc.length = 4;
diff --git a/src/emu/cpu/mips/r3000.c b/src/emu/cpu/mips/r3000.c
index 5e6fa280884..1b64e05799c 100644
--- a/src/emu/cpu/mips/r3000.c
+++ b/src/emu/cpu/mips/r3000.c
@@ -498,7 +498,7 @@ offs_t r3000_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *op
inline UINT32 r3000_device::readop(offs_t pc)
{
- return m_direct->read_decrypted_dword(pc);
+ return m_direct->read_dword(pc);
}
UINT8 r3000_device::readmem(offs_t offset)
diff --git a/src/emu/cpu/nec/nec.c b/src/emu/cpu/nec/nec.c
index 173e18fdebd..6c53cfa677a 100644
--- a/src/emu/cpu/nec/nec.c
+++ b/src/emu/cpu/nec/nec.c
@@ -210,7 +210,7 @@ void nec_common_device::do_prefetch(int previous_ICount)
UINT8 nec_common_device::fetch()
{
prefetch();
- return m_direct->read_raw_byte((Sreg(PS)<<4)+m_ip++, m_fetch_xor);
+ return m_direct->read_byte((Sreg(PS)<<4)+m_ip++, m_fetch_xor);
}
UINT16 nec_common_device::fetchword()
@@ -230,7 +230,7 @@ static UINT8 parity_table[256];
UINT8 nec_common_device::fetchop()
{
prefetch();
- return m_direct->read_decrypted_byte(( Sreg(PS)<<4)+m_ip++, m_fetch_xor);
+ return m_direct->read_byte(( Sreg(PS)<<4)+m_ip++, m_fetch_xor);
}
diff --git a/src/emu/cpu/nec/v25.c b/src/emu/cpu/nec/v25.c
index bf4ee0ab6ed..384043c8f9c 100644
--- a/src/emu/cpu/nec/v25.c
+++ b/src/emu/cpu/nec/v25.c
@@ -122,7 +122,7 @@ void v25_common_device::do_prefetch(int previous_ICount)
UINT8 v25_common_device::fetch()
{
prefetch();
- return m_direct->read_raw_byte((Sreg(PS)<<4)+m_ip++, m_fetch_xor);
+ return m_direct->read_byte((Sreg(PS)<<4)+m_ip++, m_fetch_xor);
}
UINT16 v25_common_device::fetchword()
@@ -146,7 +146,7 @@ UINT8 v25_common_device::fetchop()
UINT8 ret;
prefetch();
- ret = m_direct->read_decrypted_byte(( Sreg(PS)<<4)+m_ip++, m_fetch_xor);
+ ret = m_direct->read_byte(( Sreg(PS)<<4)+m_ip++, m_fetch_xor);
if (m_MF == 0)
if (m_v25v35_decryptiontable)
diff --git a/src/emu/cpu/pic16c5x/pic16c5x.c b/src/emu/cpu/pic16c5x/pic16c5x.c
index 0c78f34eebd..3acd46944f7 100644
--- a/src/emu/cpu/pic16c5x/pic16c5x.c
+++ b/src/emu/cpu/pic16c5x/pic16c5x.c
@@ -167,7 +167,7 @@ void pic16c5x_device::update_internalram_ptr()
-#define PIC16C5x_RDOP(A) (m_direct->read_decrypted_word((A)<<1))
+#define PIC16C5x_RDOP(A) (m_direct->read_word((A)<<1))
#define PIC16C5x_RAM_RDMEM(A) ((UINT8)m_data->read_byte(A))
#define PIC16C5x_RAM_WRMEM(A,V) (m_data->write_byte(A,V))
diff --git a/src/emu/cpu/pic16c62x/pic16c62x.c b/src/emu/cpu/pic16c62x/pic16c62x.c
index 1d2dae52b95..2a38bcd5f93 100644
--- a/src/emu/cpu/pic16c62x/pic16c62x.c
+++ b/src/emu/cpu/pic16c62x/pic16c62x.c
@@ -170,7 +170,7 @@ void pic16c62x_device::update_internalram_ptr()
m_internalram = (UINT8 *)m_data->get_write_ptr(0x00);
}
-#define PIC16C62x_RDOP(A) (m_direct->read_decrypted_word((A)<<1))
+#define PIC16C62x_RDOP(A) (m_direct->read_word((A)<<1))
#define PIC16C62x_RAM_RDMEM(A) ((UINT8)m_data->read_byte(A))
#define PIC16C62x_RAM_WRMEM(A,V) (m_data->write_byte(A,V))
#define PIC16C62x_In(Port) ((UINT8)m_io->read_byte((Port)))
diff --git a/src/emu/cpu/powerpc/ppcdrc.c b/src/emu/cpu/powerpc/ppcdrc.c
index 561dec685bf..088eab855aa 100644
--- a/src/emu/cpu/powerpc/ppcdrc.c
+++ b/src/emu/cpu/powerpc/ppcdrc.c
@@ -1595,7 +1595,7 @@ void ppc_device::generate_checksum_block(drcuml_block *block, compiler_state *co
{
if (!(seqhead->flags & OPFLAG_VIRTUAL_NOOP))
{
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc, m_codexor);
+ void *base = m_direct->read_ptr(seqhead->physpc, m_codexor);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,dword
UML_CMP(block, I0, seqhead->opptr.l[0]); // cmp i0,*opptr
UML_EXHc(block, COND_NE, *m_nocode, seqhead->pc); // exne nocode,seqhead->pc
@@ -1609,20 +1609,20 @@ void ppc_device::generate_checksum_block(drcuml_block *block, compiler_state *co
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc, m_codexor);
+ void *base = m_direct->read_ptr(seqhead->physpc, m_codexor);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,dword
UML_CMP(block, I0, curdesc->opptr.l[0]); // cmp i0,*opptr
UML_EXHc(block, COND_NE, *m_nocode, seqhead->pc); // exne nocode,seqhead->pc
}
#else
UINT32 sum = 0;
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc, m_codexor);
+ void *base = m_direct->read_ptr(seqhead->physpc, m_codexor);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,dword
sum += seqhead->opptr.l[0];
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc, m_codexor);
+ base = m_direct->read_ptr(curdesc->physpc, m_codexor);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
sum += curdesc->opptr.l[0];
diff --git a/src/emu/cpu/powerpc/ppcfe.c b/src/emu/cpu/powerpc/ppcfe.c
index 94037f7e137..8ba5a90eb4e 100644
--- a/src/emu/cpu/powerpc/ppcfe.c
+++ b/src/emu/cpu/powerpc/ppcfe.c
@@ -83,7 +83,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
}
// fetch the opcode
- op = desc.opptr.l[0] = m_ppc->m_direct->read_decrypted_dword(desc.physpc, m_ppc->m_codexor);
+ op = desc.opptr.l[0] = m_ppc->m_direct->read_dword(desc.physpc, m_ppc->m_codexor);
// all instructions are 4 bytes and default to a single cycle each
desc.length = 4;
diff --git a/src/emu/cpu/pps4/pps4.c b/src/emu/cpu/pps4/pps4.c
index bd04a900030..5be986f2c3d 100644
--- a/src/emu/cpu/pps4/pps4.c
+++ b/src/emu/cpu/pps4/pps4.c
@@ -115,7 +115,7 @@ offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *opr
*/
inline UINT8 pps4_device::ROP()
{
- const UINT8 op = m_direct->read_decrypted_byte(m_P & 0xFFF);
+ const UINT8 op = m_direct->read_byte(m_P & 0xFFF);
m_Ip = m_I1; // save previous opcode
m_P = (m_P + 1) & 0xFFF;
m_icount -= 1;
@@ -131,7 +131,7 @@ inline UINT8 pps4_device::ROP()
*/
inline UINT8 pps4_device::ARG()
{
- const UINT8 arg = m_direct->read_raw_byte(m_P & 0xFFF);
+ const UINT8 arg = m_direct->read_byte(m_P & 0xFFF);
m_P = (m_P + 1) & 0xFFF;
m_icount -= 1;
return arg;
diff --git a/src/emu/cpu/psx/psx.c b/src/emu/cpu/psx/psx.c
index 271c419c479..a60a1204b9f 100644
--- a/src/emu/cpu/psx/psx.c
+++ b/src/emu/cpu/psx/psx.c
@@ -1437,7 +1437,7 @@ void psxcpu_device::update_cop0( int reg )
( m_cp0r[ CP0_SR ] & SR_IEC ) != 0 &&
( m_cp0r[ CP0_SR ] & m_cp0r[ CP0_CAUSE ] & CAUSE_IP ) != 0 )
{
- m_op = m_direct->read_decrypted_dword( m_pc );
+ m_op = m_direct->read_dword( m_pc );
execute_unstoppable_instructions( 1 );
exception( EXC_INT );
}
@@ -1470,11 +1470,11 @@ void psxcpu_device::fetch_next_op()
{
UINT32 safepc = m_delayv & ~m_bad_word_address_mask;
- m_op = m_direct->read_decrypted_dword( safepc );
+ m_op = m_direct->read_dword( safepc );
}
else
{
- m_op = m_direct->read_decrypted_dword( m_pc + 4 );
+ m_op = m_direct->read_dword( m_pc + 4 );
}
}
@@ -2289,7 +2289,7 @@ void psxcpu_device::execute_run()
if( LOG_BIOSCALL ) log_bioscall();
debugger_instruction_hook( this, m_pc );
- m_op = m_direct->read_decrypted_dword( m_pc );
+ m_op = m_direct->read_dword( m_pc );
if( m_berr )
{
diff --git a/src/emu/cpu/rsp/rspdrc.c b/src/emu/cpu/rsp/rspdrc.c
index e30bad904ec..a1fabc19638 100644
--- a/src/emu/cpu/rsp/rspdrc.c
+++ b/src/emu/cpu/rsp/rspdrc.c
@@ -669,12 +669,12 @@ void rsp_device::generate_checksum_block(drcuml_block *block, compiler_state *co
if (!(seqhead->flags & OPFLAG_VIRTUAL_NOOP))
{
UINT32 sum = seqhead->opptr.l[0];
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc | 0x1000);
+ void *base = m_direct->read_ptr(seqhead->physpc | 0x1000);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
if (seqhead->delay.first() != NULL && seqhead->physpc != seqhead->delay.first()->physpc)
{
- base = m_direct->read_decrypted_ptr(seqhead->delay.first()->physpc | 0x1000);
+ base = m_direct->read_ptr(seqhead->delay.first()->physpc | 0x1000);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -691,13 +691,13 @@ void rsp_device::generate_checksum_block(drcuml_block *block, compiler_state *co
else
{
UINT32 sum = 0;
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc | 0x1000);
+ void *base = m_direct->read_ptr(seqhead->physpc | 0x1000);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
sum += seqhead->opptr.l[0];
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc | 0x1000);
+ base = m_direct->read_ptr(curdesc->physpc | 0x1000);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -705,7 +705,7 @@ void rsp_device::generate_checksum_block(drcuml_block *block, compiler_state *co
if (curdesc->delay.first() != NULL && (curdesc == seqlast || (curdesc->next() != NULL && curdesc->next()->physpc != curdesc->delay.first()->physpc)))
{
- base = m_direct->read_decrypted_ptr(curdesc->delay.first()->physpc | 0x1000);
+ base = m_direct->read_ptr(curdesc->delay.first()->physpc | 0x1000);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
diff --git a/src/emu/cpu/rsp/rspfe.c b/src/emu/cpu/rsp/rspfe.c
index 96291bd0d65..7a80fb6347b 100644
--- a/src/emu/cpu/rsp/rspfe.c
+++ b/src/emu/cpu/rsp/rspfe.c
@@ -37,7 +37,7 @@ bool rsp_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
UINT32 op, opswitch;
// fetch the opcode
- op = desc.opptr.l[0] = m_rsp.m_direct->read_decrypted_dword(desc.physpc | 0x1000);
+ op = desc.opptr.l[0] = m_rsp.m_direct->read_dword(desc.physpc | 0x1000);
// all instructions are 4 bytes and default to a single cycle each
desc.length = 4;
diff --git a/src/emu/cpu/s2650/s2650.c b/src/emu/cpu/s2650/s2650.c
index abdbe04a1c5..a67bc2ce5fe 100644
--- a/src/emu/cpu/s2650/s2650.c
+++ b/src/emu/cpu/s2650/s2650.c
@@ -229,7 +229,7 @@ inline int s2650_device::check_irq_line()
***************************************************************/
inline UINT8 s2650_device::ROP()
{
- UINT8 result = m_direct->read_decrypted_byte(m_page + m_iar);
+ UINT8 result = m_direct->read_byte(m_page + m_iar);
m_iar = (m_iar + 1) & PMSK;
return result;
}
@@ -240,7 +240,7 @@ inline UINT8 s2650_device::ROP()
***************************************************************/
inline UINT8 s2650_device::ARG()
{
- UINT8 result = m_direct->read_raw_byte(m_page + m_iar);
+ UINT8 result = m_direct->read_byte(m_page + m_iar);
m_iar = (m_iar + 1) & PMSK;
return result;
}
diff --git a/src/emu/cpu/saturn/satops.inc b/src/emu/cpu/saturn/satops.inc
index 35befaaa55f..8f7420584e3 100644
--- a/src/emu/cpu/saturn/satops.inc
+++ b/src/emu/cpu/saturn/satops.inc
@@ -9,7 +9,7 @@ int saturn_device::READ_OP()
{
UINT8 data;
m_icount-=3;
- data=m_direct->read_decrypted_byte(m_pc);
+ data=m_direct->read_byte(m_pc);
saturn_assert(data<0x10);
m_pc=(m_pc+1)&0xfffff;
return data;
@@ -19,7 +19,7 @@ int saturn_device::READ_OP_ARG()
{
UINT8 data;
m_icount-=3;
- data=m_direct->read_raw_byte(m_pc);
+ data=m_direct->read_byte(m_pc);
saturn_assert(data<0x10);
m_pc=(m_pc+1)&0xfffff;
return data;
diff --git a/src/emu/cpu/sc61860/scops.inc b/src/emu/cpu/sc61860/scops.inc
index bde6edd53e1..7bc5b05c987 100644
--- a/src/emu/cpu/sc61860/scops.inc
+++ b/src/emu/cpu/sc61860/scops.inc
@@ -18,18 +18,18 @@
UINT8 sc61860_device::READ_OP()
{
- return m_direct->read_decrypted_byte(m_pc++);
+ return m_direct->read_byte(m_pc++);
}
UINT8 sc61860_device::READ_OP_ARG()
{
- return m_direct->read_raw_byte(m_pc++);
+ return m_direct->read_byte(m_pc++);
}
UINT16 sc61860_device::READ_OP_ARG_WORD()
{
- UINT16 t=m_direct->read_decrypted_byte(m_pc++)<<8;
- t|=m_direct->read_decrypted_byte(m_pc++);
+ UINT16 t=m_direct->read_byte(m_pc++)<<8;
+ t|=m_direct->read_byte(m_pc++);
return t;
}
diff --git a/src/emu/cpu/scmp/scmp.c b/src/emu/cpu/scmp/scmp.c
index cbfaf6a82c2..edd8502c1c5 100644
--- a/src/emu/cpu/scmp/scmp.c
+++ b/src/emu/cpu/scmp/scmp.c
@@ -69,14 +69,14 @@ UINT8 scmp_device::ROP()
{
UINT16 pc = m_PC.w.l;
m_PC.w.l = ADD12(m_PC.w.l,1);
- return m_direct->read_decrypted_byte( pc);
+ return m_direct->read_byte( pc);
}
UINT8 scmp_device::ARG()
{
UINT16 pc = m_PC.w.l;
m_PC.w.l = ADD12(m_PC.w.l,1);
- return m_direct->read_raw_byte(pc);
+ return m_direct->read_byte(pc);
}
UINT8 scmp_device::RM(UINT32 a)
diff --git a/src/emu/cpu/score/score.c b/src/emu/cpu/score/score.c
index 3ecbbe6fb4c..a8e3dd210fc 100644
--- a/src/emu/cpu/score/score.c
+++ b/src/emu/cpu/score/score.c
@@ -283,7 +283,7 @@ INT32 score7_cpu_device::sign_extend(UINT32 data, UINT8 len)
UINT32 score7_cpu_device::fetch()
{
- return m_direct->read_decrypted_dword(m_pc & ~3);
+ return m_direct->read_dword(m_pc & ~3);
}
UINT8 score7_cpu_device::read_byte(offs_t offset)
diff --git a/src/emu/cpu/se3208/se3208.c b/src/emu/cpu/se3208/se3208.c
index 31cbdfe73a2..98a87335d33 100644
--- a/src/emu/cpu/se3208/se3208.c
+++ b/src/emu/cpu/se3208/se3208.c
@@ -1738,7 +1738,7 @@ void se3208_device::execute_run()
{
do
{
- UINT16 Opcode=m_direct->read_decrypted_word(m_PC, WORD_XOR_LE(0));
+ UINT16 Opcode=m_direct->read_word(m_PC, WORD_XOR_LE(0));
debugger_instruction_hook(this, m_PC);
diff --git a/src/emu/cpu/sh2/sh2.c b/src/emu/cpu/sh2/sh2.c
index 9e7c5a467a1..179cc533dc3 100644
--- a/src/emu/cpu/sh2/sh2.c
+++ b/src/emu/cpu/sh2/sh2.c
@@ -150,6 +150,7 @@ ADDRESS_MAP_END
sh2_device::sh2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: cpu_device(mconfig, SH2, "SH-2", tag, owner, clock, "sh2", __FILE__)
, m_program_config("program", ENDIANNESS_BIG, 32, 32, 0, ADDRESS_MAP_NAME(sh2_internal_map))
+ , m_decrypted_program_config("decrypted_opcodes", ENDIANNESS_BIG, 32, 32, 0)
, m_is_slave(0)
, m_cpu_type(CPU_TYPE_SH2)
, m_cache(CACHE_SIZE + sizeof(internal_sh2_state))
@@ -187,6 +188,7 @@ void sh2_device::device_stop()
sh2_device::sh2_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source, int cpu_type)
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
, m_program_config("program", ENDIANNESS_BIG, 32, 32, 0, ADDRESS_MAP_NAME(sh2_internal_map))
+ , m_decrypted_program_config("decrypted_opcodes", ENDIANNESS_BIG, 32, 32, 0)
, m_is_slave(0)
, m_cpu_type(cpu_type)
, m_cache(CACHE_SIZE + sizeof(internal_sh2_state))
@@ -214,6 +216,15 @@ sh1_device::sh1_device(const machine_config &mconfig, const char *tag, device_t
{
}
+const address_space_config *sh2_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch(spacenum)
+ {
+ case AS_PROGRAM: return &m_program_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_decrypted_program_config : NULL;
+ default: return NULL;
+ }
+}
offs_t sh2_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
{
@@ -2397,7 +2408,8 @@ void sh2_device::device_start()
m_ftcsr_read_cb.bind_relative_to(*owner());
m_program = &space(AS_PROGRAM);
- m_direct = &m_program->direct();
+ m_decrypted_program = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : &space(AS_PROGRAM);
+ m_direct = &m_decrypted_program->direct();
m_internal = &space(AS_PROGRAM);
save_item(NAME(m_sh2_state->pc));
diff --git a/src/emu/cpu/sh2/sh2.h b/src/emu/cpu/sh2/sh2.h
index a91ac1e781d..c981dfe3c9b 100644
--- a/src/emu/cpu/sh2/sh2.h
+++ b/src/emu/cpu/sh2/sh2.h
@@ -138,7 +138,7 @@ protected:
virtual void execute_set_input(int inputnum, int state);
// device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; }
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
// device_state_interface overrides
virtual void state_import(const device_state_entry &entry);
@@ -151,7 +151,7 @@ protected:
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
private:
- address_space_config m_program_config;
+ address_space_config m_program_config, m_decrypted_program_config;
// Data that needs to be stored close to the generated DRC code
struct internal_sh2_state
@@ -195,7 +195,7 @@ private:
UINT32 m_pcflushes[16]; // pcflush entries
INT8 m_irq_line_state[17];
- address_space *m_program;
+ address_space *m_program, *m_decrypted_program;
protected:
direct_read_data *m_direct;
private:
diff --git a/src/emu/cpu/sh2/sh2drc.c b/src/emu/cpu/sh2/sh2drc.c
index 42c2cde9434..9c636f6cf84 100644
--- a/src/emu/cpu/sh2/sh2drc.c
+++ b/src/emu/cpu/sh2/sh2drc.c
@@ -1309,7 +1309,7 @@ void sh2_device::generate_checksum_block(drcuml_block *block, compiler_state *co
{
if (!(seqhead->flags & OPFLAG_VIRTUAL_NOOP))
{
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc, SH2_CODE_XOR(0));
+ void *base = m_direct->read_ptr(seqhead->physpc, SH2_CODE_XOR(0));
UML_LOAD(block, I0, base, 0, SIZE_WORD, SCALE_x2); // load i0,base,word
UML_CMP(block, I0, seqhead->opptr.w[0]); // cmp i0,*opptr
UML_EXHc(block, COND_NE, *m_nocode, epc(seqhead)); // exne nocode,seqhead->pc
@@ -1323,20 +1323,20 @@ void sh2_device::generate_checksum_block(drcuml_block *block, compiler_state *co
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc, SH2_CODE_XOR(0));
+ base = m_direct->read_ptr(curdesc->physpc, SH2_CODE_XOR(0));
UML_LOAD(block, I0, curdesc->opptr.w, 0, SIZE_WORD, SCALE_x2); // load i0,*opptr,0,word
UML_CMP(block, I0, curdesc->opptr.w[0]); // cmp i0,*opptr
UML_EXHc(block, COND_NE, *m_nocode, epc(seqhead)); // exne nocode,seqhead->pc
}
#else
UINT32 sum = 0;
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc, SH2_CODE_XOR(0));
+ void *base = m_direct->read_ptr(seqhead->physpc, SH2_CODE_XOR(0));
UML_LOAD(block, I0, base, 0, SIZE_WORD, SCALE_x4); // load i0,base,word
sum += seqhead->opptr.w[0];
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc, SH2_CODE_XOR(0));
+ base = m_direct->read_ptr(curdesc->physpc, SH2_CODE_XOR(0));
UML_LOAD(block, I1, base, 0, SIZE_WORD, SCALE_x2); // load i1,*opptr,word
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
sum += curdesc->opptr.w[0];
diff --git a/src/emu/cpu/sh2/sh2fe.c b/src/emu/cpu/sh2/sh2fe.c
index 9cc2be5c048..8ea8ccb82d3 100644
--- a/src/emu/cpu/sh2/sh2fe.c
+++ b/src/emu/cpu/sh2/sh2fe.c
@@ -34,7 +34,7 @@ bool sh2_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
UINT16 opcode;
/* fetch the opcode */
- opcode = desc.opptr.w[0] = m_sh2->m_direct->read_decrypted_word(desc.physpc, SH2_CODE_XOR(0));
+ opcode = desc.opptr.w[0] = m_sh2->m_direct->read_word(desc.physpc, SH2_CODE_XOR(0));
/* all instructions are 2 bytes and most are a single cycle */
desc.length = 2;
diff --git a/src/emu/cpu/sh4/sh4.c b/src/emu/cpu/sh4/sh4.c
index 889fe12eb5c..c5107b6e26f 100644
--- a/src/emu/cpu/sh4/sh4.c
+++ b/src/emu/cpu/sh4/sh4.c
@@ -3948,7 +3948,7 @@ void sh34_base_device::execute_run()
{
if (m_delay)
{
- const UINT16 opcode = m_direct->read_decrypted_word((UINT32)(m_delay & AM), WORD2_XOR_LE(0));
+ const UINT16 opcode = m_direct->read_word((UINT32)(m_delay & AM), WORD2_XOR_LE(0));
debugger_instruction_hook(this, (m_pc-2) & AM);
@@ -3964,7 +3964,7 @@ void sh34_base_device::execute_run()
}
else
{
- const UINT16 opcode = m_direct->read_decrypted_word((UINT32)(m_pc & AM), WORD2_XOR_LE(0));
+ const UINT16 opcode = m_direct->read_word((UINT32)(m_pc & AM), WORD2_XOR_LE(0));
debugger_instruction_hook(this, m_pc & AM);
@@ -3995,7 +3995,7 @@ void sh3be_device::execute_run()
{
if (m_delay)
{
- const UINT16 opcode = m_direct->read_decrypted_word((UINT32)(m_delay & AM), WORD_XOR_LE(6));
+ const UINT16 opcode = m_direct->read_word((UINT32)(m_delay & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_delay & AM);
@@ -4014,7 +4014,7 @@ void sh3be_device::execute_run()
}
else
{
- const UINT16 opcode = m_direct->read_decrypted_word((UINT32)(m_pc & AM), WORD_XOR_LE(6));
+ const UINT16 opcode = m_direct->read_word((UINT32)(m_pc & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_pc & AM);
@@ -4045,7 +4045,7 @@ void sh4be_device::execute_run()
{
if (m_delay)
{
- const UINT16 opcode = m_direct->read_decrypted_word((UINT32)(m_delay & AM), WORD_XOR_LE(6));
+ const UINT16 opcode = m_direct->read_word((UINT32)(m_delay & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_delay & AM);
@@ -4064,7 +4064,7 @@ void sh4be_device::execute_run()
}
else
{
- const UINT16 opcode = m_direct->read_decrypted_word((UINT32)(m_pc & AM), WORD_XOR_LE(6));
+ const UINT16 opcode = m_direct->read_word((UINT32)(m_pc & AM), WORD_XOR_LE(6));
debugger_instruction_hook(this, m_pc & AM);
diff --git a/src/emu/cpu/ssp1601/ssp1601.c b/src/emu/cpu/ssp1601/ssp1601.c
index 94720fd7e73..66c3e0baf3d 100644
--- a/src/emu/cpu/ssp1601/ssp1601.c
+++ b/src/emu/cpu/ssp1601/ssp1601.c
@@ -43,7 +43,7 @@
#define PPC m_ppc.w.h
-#define FETCH() m_direct->read_decrypted_word(rPC++ << 1)
+#define FETCH() m_direct->read_word(rPC++ << 1)
#define PROGRAM_WORD(a) m_program->read_word((a) << 1)
#define GET_PPC_OFFS() PPC
diff --git a/src/emu/cpu/t11/t11.c b/src/emu/cpu/t11/t11.c
index 46f82f9a627..211bbd1f071 100644
--- a/src/emu/cpu/t11/t11.c
+++ b/src/emu/cpu/t11/t11.c
@@ -58,7 +58,7 @@ t11_device::t11_device(const machine_config &mconfig, const char *tag, device_t
int t11_device::ROPCODE()
{
PC &= 0xfffe;
- int val = m_direct->read_decrypted_word(PC);
+ int val = m_direct->read_word(PC);
PC += 2;
return val;
}
diff --git a/src/emu/cpu/tms32010/tms32010.c b/src/emu/cpu/tms32010/tms32010.c
index a90a697f58b..e6264d3f1dd 100644
--- a/src/emu/cpu/tms32010/tms32010.c
+++ b/src/emu/cpu/tms32010/tms32010.c
@@ -219,7 +219,7 @@ offs_t tms32010_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
* used to greatly speed up emulation
*/
-#define TMS32010_RDOP(A) (m_direct->read_decrypted_word((A)<<1))
+#define TMS32010_RDOP(A) (m_direct->read_word((A)<<1))
/****************************************************************************
@@ -228,7 +228,7 @@ offs_t tms32010_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
* that use different encoding mechanisms for opcodes and opcode arguments
*/
-#define TMS32010_RDOP_ARG(A) (m_direct->read_raw_word((A)<<1))
+#define TMS32010_RDOP_ARG(A) (m_direct->read_word((A)<<1))
/************************************************************************
diff --git a/src/emu/cpu/tms32025/tms32025.c b/src/emu/cpu/tms32025/tms32025.c
index 91fa0423e1c..9acc4a31f8c 100644
--- a/src/emu/cpu/tms32025/tms32025.c
+++ b/src/emu/cpu/tms32025/tms32025.c
@@ -134,8 +134,8 @@ Table 3-2. TMS32025/26 Memory Blocks
#define S_IN(A) (m_io->read_word((A)<<1))
#define S_OUT(A,V) (m_io->write_word(((A)<<1),(V)))
-#define M_RDOP(A) ((m_pgmmap[(A) >> 7]) ? (m_pgmmap[(A) >> 7][(A) & 0x7f]) : m_direct->read_decrypted_word((A)<<1))
-#define M_RDOP_ARG(A) ((m_pgmmap[(A) >> 7]) ? (m_pgmmap[(A) >> 7][(A) & 0x7f]) : m_direct->read_decrypted_word((A)<<1))
+#define M_RDOP(A) ((m_pgmmap[(A) >> 7]) ? (m_pgmmap[(A) >> 7][(A) & 0x7f]) : m_direct->read_word((A)<<1))
+#define M_RDOP_ARG(A) ((m_pgmmap[(A) >> 7]) ? (m_pgmmap[(A) >> 7][(A) & 0x7f]) : m_direct->read_word((A)<<1))
/************************** Memory mapped registers ****************/
diff --git a/src/emu/cpu/tms32031/tms32031.c b/src/emu/cpu/tms32031/tms32031.c
index df1f389e4c5..1d8096ce959 100644
--- a/src/emu/cpu/tms32031/tms32031.c
+++ b/src/emu/cpu/tms32031/tms32031.c
@@ -339,7 +339,7 @@ const rom_entry *tms3203x_device::device_rom_region() const
inline UINT32 tms3203x_device::ROPCODE(offs_t pc)
{
- return m_direct->read_decrypted_dword(pc << 2);
+ return m_direct->read_dword(pc << 2);
}
diff --git a/src/emu/cpu/tms32051/tms32051.c b/src/emu/cpu/tms32051/tms32051.c
index c4ddc7de55e..7e77cc01398 100644
--- a/src/emu/cpu/tms32051/tms32051.c
+++ b/src/emu/cpu/tms32051/tms32051.c
@@ -78,7 +78,7 @@ offs_t tms32051_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
#define CYCLES(x) (m_icount -= x)
-#define ROPCODE() m_direct->read_decrypted_word((m_pc++) << 1)
+#define ROPCODE() m_direct->read_word((m_pc++) << 1)
void tms32051_device::CHANGE_PC(UINT16 new_pc)
{
diff --git a/src/emu/cpu/tms32082/tms32082.c b/src/emu/cpu/tms32082/tms32082.c
index f7833e7898c..56d97713b45 100644
--- a/src/emu/cpu/tms32082/tms32082.c
+++ b/src/emu/cpu/tms32082/tms32082.c
@@ -426,7 +426,7 @@ void tms32082_mp_device::execute_set_input(int inputnum, int state)
UINT32 tms32082_mp_device::fetch()
{
- UINT32 w = m_direct->read_decrypted_dword(m_fetchpc);
+ UINT32 w = m_direct->read_dword(m_fetchpc);
m_fetchpc += 4;
return w;
}
diff --git a/src/emu/cpu/tms34010/34010ops.c b/src/emu/cpu/tms34010/34010ops.c
index 1e0866478fc..6674d7a1faa 100644
--- a/src/emu/cpu/tms34010/34010ops.c
+++ b/src/emu/cpu/tms34010/34010ops.c
@@ -80,13 +80,13 @@ void tms340x0_device::unimpl(UINT16 op)
{
/* kludge for Super High Impact -- this doesn't seem to cause */
/* an illegal opcode exception */
- if (m_direct->read_decrypted_word(TOBYTE(m_pc - 0x10)) == 0x0007)
+ if (m_direct->read_word(TOBYTE(m_pc - 0x10)) == 0x0007)
return;
/* 9 Ball Shootout calls to FFDF7468, expecting it */
/* to execute the next instruction from FFDF7470 */
/* but the instruction at FFDF7460 is an 0x0001 */
- if (m_direct->read_decrypted_word(TOBYTE(m_pc - 0x10)) == 0x0001)
+ if (m_direct->read_word(TOBYTE(m_pc - 0x10)) == 0x0001)
return;
PUSH(m_pc);
@@ -96,7 +96,7 @@ void tms340x0_device::unimpl(UINT16 op)
COUNT_UNKNOWN_CYCLES(16);
/* extra check to prevent bad things */
- if (m_pc == 0 || s_opcode_table[m_direct->read_decrypted_word(TOBYTE(m_pc)) >> 4] == &tms34010_device::unimpl)
+ if (m_pc == 0 || s_opcode_table[m_direct->read_word(TOBYTE(m_pc)) >> 4] == &tms34010_device::unimpl)
{
set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
debugger_break(machine());
diff --git a/src/emu/cpu/tms34010/tms34010.c b/src/emu/cpu/tms34010/tms34010.c
index 524fa8bd917..4faf2967bc8 100644
--- a/src/emu/cpu/tms34010/tms34010.c
+++ b/src/emu/cpu/tms34010/tms34010.c
@@ -174,32 +174,32 @@ inline UINT32 tms340x0_device::ROPCODE()
{
UINT32 pc = TOBYTE(m_pc);
m_pc += 2 << 3;
- return m_direct->read_decrypted_word(pc);
+ return m_direct->read_word(pc);
}
inline INT16 tms340x0_device::PARAM_WORD()
{
UINT32 pc = TOBYTE(m_pc);
m_pc += 2 << 3;
- return m_direct->read_raw_word(pc);
+ return m_direct->read_word(pc);
}
inline INT32 tms340x0_device::PARAM_LONG()
{
UINT32 pc = TOBYTE(m_pc);
m_pc += 4 << 3;
- return (UINT16)m_direct->read_raw_word(pc) | (m_direct->read_raw_word(pc + 2) << 16);
+ return (UINT16)m_direct->read_word(pc) | (m_direct->read_word(pc + 2) << 16);
}
inline INT16 tms340x0_device::PARAM_WORD_NO_INC()
{
- return m_direct->read_raw_word(TOBYTE(m_pc));
+ return m_direct->read_word(TOBYTE(m_pc));
}
inline INT32 tms340x0_device::PARAM_LONG_NO_INC()
{
UINT32 pc = TOBYTE(m_pc);
- return (UINT16)m_direct->read_raw_word(pc) | (m_direct->read_raw_word(pc + 2) << 16);
+ return (UINT16)m_direct->read_word(pc) | (m_direct->read_word(pc + 2) << 16);
}
/* read memory byte */
diff --git a/src/emu/cpu/tms7000/tms7000.c b/src/emu/cpu/tms7000/tms7000.c
index acc81731c1b..99451e30d6b 100644
--- a/src/emu/cpu/tms7000/tms7000.c
+++ b/src/emu/cpu/tms7000/tms7000.c
@@ -631,7 +631,7 @@ void tms7000_device::execute_run()
{
debugger_instruction_hook(this, m_pc);
- m_op = m_direct->read_decrypted_byte(m_pc++);
+ m_op = m_direct->read_byte(m_pc++);
execute_one(m_op);
} while (m_icount > 0);
}
diff --git a/src/emu/cpu/tms7000/tms7000.h b/src/emu/cpu/tms7000/tms7000.h
index 4b5f14ebe89..92effc0d079 100644
--- a/src/emu/cpu/tms7000/tms7000.h
+++ b/src/emu/cpu/tms7000/tms7000.h
@@ -143,8 +143,8 @@ protected:
inline UINT16 read_mem16(UINT16 address) { return m_program->read_byte(address) << 8 | m_program->read_byte((address + 1) & 0xffff); }
inline void write_mem16(UINT16 address, UINT16 data) { m_program->write_byte(address, data >> 8 & 0xff); m_program->write_byte((address + 1) & 0xffff, data & 0xff); }
- inline UINT8 imm8() { return m_direct->read_raw_byte(m_pc++); }
- inline UINT16 imm16() { UINT16 ret = m_direct->read_raw_byte(m_pc++) << 8; return ret | m_direct->read_raw_byte(m_pc++); }
+ inline UINT8 imm8() { return m_direct->read_byte(m_pc++); }
+ inline UINT16 imm16() { UINT16 ret = m_direct->read_byte(m_pc++) << 8; return ret | m_direct->read_byte(m_pc++); }
inline UINT8 pull8() { return m_program->read_byte(m_sp--); }
inline void push8(UINT8 data) { m_program->write_byte(++m_sp, data); }
diff --git a/src/emu/cpu/upd7725/upd7725.c b/src/emu/cpu/upd7725/upd7725.c
index 78e248eb7bf..d422eae21b0 100644
--- a/src/emu/cpu/upd7725/upd7725.c
+++ b/src/emu/cpu/upd7725/upd7725.c
@@ -326,7 +326,7 @@ void necdsp_device::execute_run()
debugger_instruction_hook(this, regs.pc);
}
- opcode = m_direct->read_decrypted_dword(regs.pc<<2)>>8;
+ opcode = m_direct->read_dword(regs.pc<<2)>>8;
regs.pc++;
switch(opcode >> 22)
{
diff --git a/src/emu/cpu/upd7810/upd7810_macros.h b/src/emu/cpu/upd7810/upd7810_macros.h
index b6172e816ba..27783fb5d9a 100644
--- a/src/emu/cpu/upd7810/upd7810_macros.h
+++ b/src/emu/cpu/upd7810/upd7810_macros.h
@@ -104,8 +104,8 @@
// MEMORY/OPCODE READ/WRITE
//**************************************************************************
-#define RDOP(O) O = m_direct->read_decrypted_byte(PCD); PC++
-#define RDOPARG(A) A = m_direct->read_raw_byte(PCD); PC++
+#define RDOP(O) O = m_direct->read_byte(PCD); PC++
+#define RDOPARG(A) A = m_direct->read_byte(PCD); PC++
#define RM(A) m_program->read_byte(A)
#define WM(A,V) m_program->write_byte(A,V)
diff --git a/src/emu/cpu/v30mz/v30mz.c b/src/emu/cpu/v30mz/v30mz.c
index 62f3dc94132..3bc7c28236a 100644
--- a/src/emu/cpu/v30mz/v30mz.c
+++ b/src/emu/cpu/v30mz/v30mz.c
@@ -308,7 +308,7 @@ inline void v30mz_cpu_device::write_port(UINT16 port, UINT8 data)
inline UINT8 v30mz_cpu_device::fetch_op()
{
- UINT8 data = m_direct->read_decrypted_byte( pc() );
+ UINT8 data = m_direct->read_byte( pc() );
m_ip++;
return data;
}
@@ -316,7 +316,7 @@ inline UINT8 v30mz_cpu_device::fetch_op()
inline UINT8 v30mz_cpu_device::fetch()
{
- UINT8 data = m_direct->read_raw_byte( pc() );
+ UINT8 data = m_direct->read_byte( pc() );
m_ip++;
return data;
}
diff --git a/src/emu/cpu/v60/v60.c b/src/emu/cpu/v60/v60.c
index 3f2df66199c..38b17139fb7 100644
--- a/src/emu/cpu/v60/v60.c
+++ b/src/emu/cpu/v60/v60.c
@@ -63,17 +63,17 @@ offs_t v70_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *opro
// memory accessors
#if defined(LSB_FIRST) && !defined(ALIGN_INTS)
-#define OpRead8(a) (m_direct->read_decrypted_byte(a))
-#define OpRead16(a) (m_direct->read_decrypted_word(a))
-#define OpRead32(a) (m_direct->read_decrypted_dword(a))
+#define OpRead8(a) (m_direct->read_byte(a))
+#define OpRead16(a) (m_direct->read_word(a))
+#define OpRead32(a) (m_direct->read_dword(a))
#else
-#define OpRead8(a) (m_direct->read_decrypted_byte((a), m_fetch_xor))
-#define OpRead16(a) ((m_direct->read_decrypted_byte(((a)+0), m_fetch_xor) << 0) | \
- (m_direct->read_decrypted_byte(((a)+1), m_fetch_xor) << 8))
-#define OpRead32(a) ((m_direct->read_decrypted_byte(((a)+0), m_fetch_xor) << 0) | \
- (m_direct->read_decrypted_byte(((a)+1), m_fetch_xor) << 8) | \
- (m_direct->read_decrypted_byte(((a)+2), m_fetch_xor) << 16) | \
- (m_direct->read_decrypted_byte(((a)+3), m_fetch_xor) << 24))
+#define OpRead8(a) (m_direct->read_byte((a), m_fetch_xor))
+#define OpRead16(a) ((m_direct->read_byte(((a)+0), m_fetch_xor) << 0) | \
+ (m_direct->read_byte(((a)+1), m_fetch_xor) << 8))
+#define OpRead32(a) ((m_direct->read_byte(((a)+0), m_fetch_xor) << 0) | \
+ (m_direct->read_byte(((a)+1), m_fetch_xor) << 8) | \
+ (m_direct->read_byte(((a)+2), m_fetch_xor) << 16) | \
+ (m_direct->read_byte(((a)+3), m_fetch_xor) << 24))
#endif
diff --git a/src/emu/cpu/v810/v810.c b/src/emu/cpu/v810/v810.c
index c665053af7a..9e6db000949 100644
--- a/src/emu/cpu/v810/v810.c
+++ b/src/emu/cpu/v810/v810.c
@@ -137,7 +137,7 @@ offs_t v810_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *opr
#define WIO_H(addr, val) (m_io->write_word(addr,val))
#define WIO_W(addr, val) (m_io->write_dword(addr,val))
-#define R_OP(addr) (m_direct->read_decrypted_word(addr))
+#define R_OP(addr) (m_direct->read_word(addr))
#define GET1 (op&0x1f)
#define GET2 ((op>>5)&0x1f)
diff --git a/src/emu/cpu/z180/z180.c b/src/emu/cpu/z180/z180.c
index 60fea4491c6..134e67dfb72 100644
--- a/src/emu/cpu/z180/z180.c
+++ b/src/emu/cpu/z180/z180.c
@@ -85,6 +85,7 @@ z180_device::z180_device(const machine_config &mconfig, const char *tag, device_
: cpu_device(mconfig, Z180, "Z180", tag, owner, clock, "z180", __FILE__)
, m_program_config("program", ENDIANNESS_LITTLE, 8, 20, 0)
, m_io_config("io", ENDIANNESS_LITTLE, 8, 16, 0)
+ , m_decrypted_opcodes_config("program", ENDIANNESS_LITTLE, 8, 20, 0)
{
}
@@ -767,6 +768,18 @@ static UINT8 *SZHVC_sub;
#include "z180ed.inc"
#include "z180op.inc"
+
+const address_space_config *z180_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch(spacenum)
+ {
+ case AS_PROGRAM: return &m_program_config;
+ case AS_IO: return &m_io_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_decrypted_opcodes_config : NULL;
+ default: return NULL;
+ }
+}
+
UINT8 z180_device::z180_readcontrol(offs_t port)
{
/* normal external readport */
@@ -1956,6 +1969,8 @@ void z180_device::device_start()
m_program = &space(AS_PROGRAM);
m_direct = &m_program->direct();
+ m_oprogram = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : m_program;
+ m_odirect = &m_oprogram->direct();
m_iospace = &space(AS_IO);
/* set up the state table */
diff --git a/src/emu/cpu/z180/z180.h b/src/emu/cpu/z180/z180.h
index a3d50852bf3..7529280b95a 100644
--- a/src/emu/cpu/z180/z180.h
+++ b/src/emu/cpu/z180/z180.h
@@ -153,7 +153,7 @@ protected:
virtual void execute_set_input(int inputnum, int state);
// device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : NULL ); }
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
virtual bool memory_translate(address_spacenum spacenum, int intention, offs_t &address);
// device_state_interface overrides
@@ -169,6 +169,7 @@ protected:
private:
address_space_config m_program_config;
address_space_config m_io_config;
+ address_space_config m_decrypted_opcodes_config;
PAIR m_PREPC,m_PC,m_SP,m_AF,m_BC,m_DE,m_HL,m_IX,m_IY;
PAIR m_AF2,m_BC2,m_DE2,m_HL2;
@@ -193,6 +194,8 @@ private:
z80_daisy_chain m_daisy;
address_space *m_program;
direct_read_data *m_direct;
+ address_space *m_oprogram;
+ direct_read_data *m_odirect;
address_space *m_iospace;
UINT8 m_rtemp;
UINT32 m_ioltemp;
diff --git a/src/emu/cpu/z180/z180dd.inc b/src/emu/cpu/z180/z180dd.inc
index 99557547757..bd2a9fc7137 100644
--- a/src/emu/cpu/z180/z180dd.inc
+++ b/src/emu/cpu/z180/z180dd.inc
@@ -2,7 +2,7 @@
// copyright-holders:Juergen Buchmueller
OP(illegal,1) {
logerror("Z180 '%s' ill. opcode $%02x $%02x\n",
- tag(), m_direct->read_decrypted_byte((_PCD-1)&0xffff), m_direct->read_decrypted_byte(_PCD));
+ tag(), m_odirect->read_byte((_PCD-1)&0xffff), m_odirect->read_byte(_PCD));
}
/**********************************************************
diff --git a/src/emu/cpu/z180/z180ed.inc b/src/emu/cpu/z180/z180ed.inc
index 83dcee1afdb..91520228f87 100644
--- a/src/emu/cpu/z180/z180ed.inc
+++ b/src/emu/cpu/z180/z180ed.inc
@@ -3,7 +3,7 @@
OP(illegal,2)
{
logerror("Z180 '%s' ill. opcode $ed $%02x\n",
- tag(), m_direct->read_decrypted_byte((_PCD-1)&0xffff));
+ tag(), m_odirect->read_byte((_PCD-1)&0xffff));
}
/**********************************************************
diff --git a/src/emu/cpu/z180/z180ops.h b/src/emu/cpu/z180/z180ops.h
index 66de64871ba..36f06a6847f 100644
--- a/src/emu/cpu/z180/z180ops.h
+++ b/src/emu/cpu/z180/z180ops.h
@@ -102,7 +102,7 @@ UINT8 z180_device::ROP()
{
offs_t addr = _PCD;
_PC++;
- return m_direct->read_decrypted_byte(MMU_REMAP_ADDR(addr));
+ return m_odirect->read_byte(MMU_REMAP_ADDR(addr));
}
/****************************************************************
@@ -115,14 +115,14 @@ UINT8 z180_device::ARG()
{
offs_t addr = _PCD;
_PC++;
- return m_direct->read_raw_byte(MMU_REMAP_ADDR(addr));
+ return m_direct->read_byte(MMU_REMAP_ADDR(addr));
}
UINT32 z180_device::ARG16()
{
offs_t addr = _PCD;
_PC += 2;
- return m_direct->read_raw_byte(MMU_REMAP_ADDR(addr)) | (m_direct->read_raw_byte(MMU_REMAP_ADDR(addr+1)) << 8);
+ return m_direct->read_byte(MMU_REMAP_ADDR(addr)) | (m_direct->read_byte(MMU_REMAP_ADDR(addr+1)) << 8);
}
/***************************************************************
diff --git a/src/emu/cpu/z8/z8.c b/src/emu/cpu/z8/z8.c
index bcff4b44145..7db38eaf500 100644
--- a/src/emu/cpu/z8/z8.c
+++ b/src/emu/cpu/z8/z8.c
@@ -210,7 +210,7 @@ offs_t z8_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom
UINT8 z8_device::fetch()
{
- UINT8 data = m_direct->read_decrypted_byte(m_pc);
+ UINT8 data = m_direct->read_byte(m_pc);
m_pc++;
diff --git a/src/emu/cpu/z8/z8ops.inc b/src/emu/cpu/z8/z8ops.inc
index 79621ed1512..4c522791b8e 100644
--- a/src/emu/cpu/z8/z8ops.inc
+++ b/src/emu/cpu/z8/z8ops.inc
@@ -146,7 +146,7 @@ void z8_device::load_from_memory(address_space *space)
UINT8 src = get_working_register(operands & 0x0f);
UINT16 address = register_pair_read(src);
- UINT8 data = m_direct->read_decrypted_byte(address);
+ UINT8 data = m_direct->read_byte(address);
register_write(dst, data);
}
@@ -171,7 +171,7 @@ void z8_device::load_from_memory_autoinc(address_space *space)
UINT8 src = get_working_register(operands & 0x0f);
UINT16 address = register_pair_read(src);
- UINT8 data = m_direct->read_decrypted_byte(address);
+ UINT8 data = m_direct->read_byte(address);
register_write(real_dst, data);
diff --git a/src/emu/cpu/z80/z80.c b/src/emu/cpu/z80/z80.c
index df11378ffac..2b5e2e877f7 100644
--- a/src/emu/cpu/z80/z80.c
+++ b/src/emu/cpu/z80/z80.c
@@ -473,7 +473,7 @@ inline UINT8 z80_device::rop()
{
unsigned pc = PCD;
PC++;
- return m_direct->read_decrypted_byte(pc);
+ return m_decrypted_opcodes_direct->read_byte(pc);
}
/****************************************************************
@@ -486,14 +486,14 @@ inline UINT8 z80_device::arg()
{
unsigned pc = PCD;
PC++;
- return m_direct->read_raw_byte(pc);
+ return m_direct->read_byte(pc);
}
inline UINT16 z80_device::arg16()
{
unsigned pc = PCD;
PC += 2;
- return m_direct->read_raw_byte(pc) | (m_direct->read_raw_byte((pc+1)&0xffff) << 8);
+ return m_direct->read_byte(pc) | (m_direct->read_byte((pc+1)&0xffff) << 8);
}
/***************************************************************
@@ -1945,7 +1945,7 @@ OP(xycb,ff) { A = set(7, rm(m_ea)); wm(m_ea, A); } /* SET 7,A=(XY+o) */
OP(illegal,1) {
logerror("Z80 '%s' ill. opcode $%02x $%02x\n",
- tag(), m_direct->read_decrypted_byte((PCD-1)&0xffff), m_direct->read_decrypted_byte(PCD));
+ tag(), m_decrypted_opcodes_direct->read_byte((PCD-1)&0xffff), m_decrypted_opcodes_direct->read_byte(PCD));
}
/**********************************************************
@@ -2533,7 +2533,7 @@ OP(fd,ff) { illegal_1(); op_ff(); } /* DB FD
OP(illegal,2)
{
logerror("Z80 '%s' ill. opcode $ed $%02x\n",
- tag(), m_direct->read_decrypted_byte((PCD-1)&0xffff));
+ tag(), m_decrypted_opcodes_direct->read_byte((PCD-1)&0xffff));
}
/**********************************************************
@@ -3375,7 +3375,9 @@ void z80_device::device_start()
m_ea = 0;
m_program = &space(AS_PROGRAM);
+ m_decrypted_opcodes = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : m_program;
m_direct = &m_program->direct();
+ m_decrypted_opcodes_direct = &m_decrypted_opcodes->direct();
m_io = &space(AS_IO);
if (static_config() != NULL)
@@ -3702,6 +3704,7 @@ void z80_device::z80_set_cycle_tables(const UINT8 *op, const UINT8 *cb, const UI
z80_device::z80_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
cpu_device(mconfig, Z80, "Z80", tag, owner, clock, "z80", __FILE__),
m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0),
+ m_decrypted_opcodes_config("decrypted_opcodes", ENDIANNESS_LITTLE, 8, 16, 0),
m_io_config("io", ENDIANNESS_LITTLE, 8, 16, 0)
{
}
@@ -3709,10 +3712,22 @@ z80_device::z80_device(const machine_config &mconfig, const char *tag, device_t
z80_device::z80_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0),
+ m_decrypted_opcodes_config("decrypted_opcodes", ENDIANNESS_LITTLE, 8, 16, 0),
m_io_config("io", ENDIANNESS_LITTLE, 8, 16, 0)
{
}
+const address_space_config *z80_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch(spacenum)
+ {
+ case AS_PROGRAM: return &m_program_config;
+ case AS_IO: return &m_io_config;
+ case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &m_decrypted_opcodes_config : NULL;
+ default: return NULL;
+ }
+}
+
const device_type Z80 = &device_creator<z80_device>;
nsc800_device::nsc800_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
diff --git a/src/emu/cpu/z80/z80.h b/src/emu/cpu/z80/z80.h
index be04708b3a2..f32686ac479 100644
--- a/src/emu/cpu/z80/z80.h
+++ b/src/emu/cpu/z80/z80.h
@@ -55,7 +55,7 @@ protected:
virtual void execute_set_input(int inputnum, int state);
// device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : NULL ); }
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
// device_state_interface overrides
virtual void state_import(const device_state_entry &entry);
@@ -233,10 +233,13 @@ protected:
// address spaces
const address_space_config m_program_config;
+ const address_space_config m_decrypted_opcodes_config;
const address_space_config m_io_config;
address_space *m_program;
- address_space *m_io;
+ address_space *m_decrypted_opcodes;
+ address_space *m_io;
direct_read_data *m_direct;
+ direct_read_data *m_decrypted_opcodes_direct;
PAIR m_prvpc;
PAIR m_pc;
diff --git a/src/emu/debug/debugcmd.c b/src/emu/debug/debugcmd.c
index 8e76f3b3b2b..580da3b5119 100644
--- a/src/emu/debug/debugcmd.c
+++ b/src/emu/debug/debugcmd.c
@@ -2453,7 +2453,7 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch
{
UINT64 offset, length, bytes = 1;
int minbytes, maxbytes, byteswidth;
- address_space *space;
+ address_space *space, *decrypted_space;
FILE *f = NULL;
int j;
@@ -2466,6 +2466,8 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch
return;
if (!debug_command_parameter_cpu_space(machine, (params > 4) ? param[4] : NULL, AS_PROGRAM, space))
return;
+ if (!debug_command_parameter_cpu_space(machine, (params > 4) ? param[4] : NULL, AS_DECRYPTED_OPCODES, decrypted_space))
+ space = decrypted_space;
/* determine the width of the bytes */
cpu_device *cpudevice = downcast<cpu_device *>(&space->device());
@@ -2508,8 +2510,8 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch
/* fetch the bytes up to the maximum */
for (numbytes = 0; numbytes < maxbytes; numbytes++)
{
- opbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1, FALSE);
- argbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1, TRUE);
+ opbuf[numbytes] = debug_read_opcode(*decrypted_space, pcbyte + numbytes, 1);
+ argbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1);
}
/* disassemble the result */
@@ -2522,7 +2524,7 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch
int startdex = outdex;
numbytes = space->address_to_byte(numbytes);
for (j = 0; j < numbytes; j += minbytes)
- outdex += sprintf(&output[outdex], "%s ", core_i64_hex_format(debug_read_opcode(*space, pcbyte + j, minbytes, FALSE), minbytes * 2));
+ outdex += sprintf(&output[outdex], "%s ", core_i64_hex_format(debug_read_opcode(*decrypted_space, pcbyte + j, minbytes), minbytes * 2));
if (outdex - startdex < byteswidth)
outdex += sprintf(&output[outdex], "%*s", byteswidth - (outdex - startdex), "");
outdex += sprintf(&output[outdex], " ");
@@ -2647,9 +2649,11 @@ static void execute_traceflush(running_machine &machine, int ref, int params, co
static void execute_history(running_machine &machine, int ref, int params, const char *param[])
{
/* validate parameters */
- address_space *space;
+ address_space *space, *decrypted_space;
if (!debug_command_parameter_cpu_space(machine, (params > 0) ? param[0] : NULL, AS_PROGRAM, space))
return;
+ if (!debug_command_parameter_cpu_space(machine, (params > 0) ? param[0] : NULL, AS_DECRYPTED_OPCODES, decrypted_space))
+ decrypted_space = space;
UINT64 count = device_debug::HISTORY_SIZE;
if (!debug_command_parameter_number(machine, param[1], &count))
@@ -2672,8 +2676,8 @@ static void execute_history(running_machine &machine, int ref, int params, const
UINT8 opbuf[64], argbuf[64];
for (int numbytes = 0; numbytes < maxbytes; numbytes++)
{
- opbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1, false);
- argbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1, true);
+ opbuf[numbytes] = debug_read_opcode(*decrypted_space, pcbyte + numbytes, 1);
+ argbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1);
}
char buffer[200];
diff --git a/src/emu/debug/debugcpu.c b/src/emu/debug/debugcpu.c
index 9e3d8121344..2eeb2e1af72 100644
--- a/src/emu/debug/debugcpu.c
+++ b/src/emu/debug/debugcpu.c
@@ -860,7 +860,7 @@ void debug_write_memory(address_space &space, offs_t address, UINT64 data, int s
the given offset from opcode space
-------------------------------------------------*/
-UINT64 debug_read_opcode(address_space &space, offs_t address, int size, int arg)
+UINT64 debug_read_opcode(address_space &space, offs_t address, int size)
{
UINT64 result = ~(UINT64)0 & (~(UINT64)0 >> (64 - 8*size)), result2;
debugcpu_private *global = space.machine().debugcpu_data;
@@ -881,8 +881,8 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size, int arg
if (size > space.data_width() / 8)
{
int halfsize = size / 2;
- UINT64 r0 = debug_read_opcode(space, address + 0, halfsize, arg);
- UINT64 r1 = debug_read_opcode(space, address + halfsize, halfsize, arg);
+ UINT64 r0 = debug_read_opcode(space, address + 0, halfsize);
+ UINT64 r1 = debug_read_opcode(space, address + halfsize, halfsize);
if (space.endianness() == ENDIANNESS_LITTLE)
return r0 | (r1 << (8 * halfsize));
@@ -957,14 +957,14 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size, int arg
switch (size)
{
case 1:
- result = (arg) ? space.direct().read_raw_byte(address, addrxor) : space.direct().read_decrypted_byte(address, addrxor);
+ result = space.direct().read_byte(address, addrxor);
break;
case 2:
- result = (arg) ? space.direct().read_raw_word(address & ~1, addrxor) : space.direct().read_decrypted_word(address & ~1, addrxor);
+ result = space.direct().read_word(address & ~1, addrxor);
if ((address & 1) != 0)
{
- result2 = (arg) ? space.direct().read_raw_word((address & ~1) + 2, addrxor) : space.direct().read_decrypted_word((address & ~1) + 2, addrxor);
+ result2 = space.direct().read_word((address & ~1) + 2, addrxor);
if (space.endianness() == ENDIANNESS_LITTLE)
result = (result >> (8 * (address & 1))) | (result2 << (16 - 8 * (address & 1)));
else
@@ -974,10 +974,10 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size, int arg
break;
case 4:
- result = (arg) ? space.direct().read_raw_dword(address & ~3, addrxor) : space.direct().read_decrypted_dword(address & ~3, addrxor);
+ result = space.direct().read_dword(address & ~3, addrxor);
if ((address & 3) != 0)
{
- result2 = (arg) ? space.direct().read_raw_dword((address & ~3) + 4, addrxor) : space.direct().read_decrypted_dword((address & ~3) + 4, addrxor);
+ result2 = space.direct().read_dword((address & ~3) + 4, addrxor);
if (space.endianness() == ENDIANNESS_LITTLE)
result = (result >> (8 * (address & 3))) | (result2 << (32 - 8 * (address & 3)));
else
@@ -987,10 +987,10 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size, int arg
break;
case 8:
- result = (arg) ? space.direct().read_raw_qword(address & ~7, addrxor) : space.direct().read_decrypted_qword(address & ~7, addrxor);
+ result = space.direct().read_qword(address & ~7, addrxor);
if ((address & 7) != 0)
{
- result2 = (arg) ? space.direct().read_raw_qword((address & ~7) + 8, addrxor) : space.direct().read_decrypted_qword((address & ~7) + 8, addrxor);
+ result2 = space.direct().read_qword((address & ~7) + 8, addrxor);
if (space.endianness() == ENDIANNESS_LITTLE)
result = (result >> (8 * (address & 7))) | (result2 << (64 - 8 * (address & 7)));
else
@@ -1219,10 +1219,7 @@ static UINT64 expression_read_program_direct(address_space &space, int opcode, o
offs_t lowmask = space.data_width() / 8 - 1;
/* get the base of memory, aligned to the address minus the lowbits */
- if (opcode & 1)
- base = (UINT8 *)space.direct().read_decrypted_ptr(address & ~lowmask);
- else
- base = (UINT8 *)space.get_read_ptr(address & ~lowmask);
+ base = (UINT8 *)space.get_read_ptr(address & ~lowmask);
/* if we have a valid base, return the appropriate byte */
if (base != NULL)
@@ -1394,10 +1391,7 @@ static void expression_write_program_direct(address_space &space, int opcode, of
offs_t lowmask = space.data_width() / 8 - 1;
/* get the base of memory, aligned to the address minus the lowbits */
- if (opcode & 1)
- base = (UINT8 *)space.direct().read_decrypted_ptr(address & ~lowmask);
- else
- base = (UINT8 *)space.get_read_ptr(address & ~lowmask);
+ base = (UINT8 *)space.get_read_ptr(address & ~lowmask);
/* if we have a valid base, write the appropriate byte */
if (base != NULL)
@@ -2733,6 +2727,7 @@ UINT32 device_debug::compute_opcode_crc32(offs_t pc) const
assert(m_memory != NULL);
// determine the adjusted PC
+ address_space &decrypted_space = m_memory->has_space(AS_DECRYPTED_OPCODES) ? m_memory->space(AS_DECRYPTED_OPCODES) : m_memory->space(AS_PROGRAM);
address_space &space = m_memory->space(AS_PROGRAM);
offs_t pcbyte = space.address_to_byte(pc) & space.bytemask();
@@ -2741,8 +2736,8 @@ UINT32 device_debug::compute_opcode_crc32(offs_t pc) const
int maxbytes = max_opcode_bytes();
for (int numbytes = 0; numbytes < maxbytes; numbytes++)
{
- opbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1, false);
- argbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1, true);
+ opbuf[numbytes] = debug_read_opcode(decrypted_space, pcbyte + numbytes, 1);
+ argbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1);
}
// disassemble to our buffer
@@ -3128,6 +3123,7 @@ UINT32 device_debug::dasm_wrapped(std::string &buffer, offs_t pc)
assert(m_memory != NULL && m_disasm != NULL);
// determine the adjusted PC
+ address_space &decrypted_space = m_memory->has_space(AS_DECRYPTED_OPCODES) ? m_memory->space(AS_DECRYPTED_OPCODES) : m_memory->space(AS_PROGRAM);
address_space &space = m_memory->space(AS_PROGRAM);
offs_t pcbyte = space.address_to_byte(pc) & space.bytemask();
@@ -3136,8 +3132,8 @@ UINT32 device_debug::dasm_wrapped(std::string &buffer, offs_t pc)
int maxbytes = max_opcode_bytes();
for (int numbytes = 0; numbytes < maxbytes; numbytes++)
{
- opbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1, false);
- argbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1, true);
+ opbuf[numbytes] = debug_read_opcode(decrypted_space, pcbyte + numbytes, 1);
+ argbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1);
}
// disassemble to our buffer
diff --git a/src/emu/debug/debugcpu.h b/src/emu/debug/debugcpu.h
index 2f1f90c4ef7..d337a7103f7 100644
--- a/src/emu/debug/debugcpu.h
+++ b/src/emu/debug/debugcpu.h
@@ -549,7 +549,7 @@ void debug_write_qword(address_space &space, offs_t address, UINT64 data, int ap
void debug_write_memory(address_space &space, offs_t address, UINT64 data, int size, int apply_translation);
/* read 1,2,4 or 8 bytes at the given offset from opcode space */
-UINT64 debug_read_opcode(address_space &space, offs_t offset, int size, int arg);
+UINT64 debug_read_opcode(address_space &space, offs_t offset, int size);
#endif
diff --git a/src/emu/debug/dvdisasm.c b/src/emu/debug/dvdisasm.c
index d29ab590fd4..afcd40dd0ef 100644
--- a/src/emu/debug/dvdisasm.c
+++ b/src/emu/debug/dvdisasm.c
@@ -27,7 +27,8 @@ debug_view_disasm_source::debug_view_disasm_source(const char *name, device_t &d
: debug_view_source(name, &device),
m_device(device),
m_disasmintf(dynamic_cast<device_disasm_interface *>(&device)),
- m_space(device.memory().space(AS_PROGRAM))
+ m_space(device.memory().space(AS_PROGRAM)),
+ m_decrypted_space(device.memory().has_space(AS_DECRYPTED_OPCODES) ? device.memory().space(AS_DECRYPTED_OPCODES) : device.memory().space(AS_PROGRAM))
{
}
@@ -251,8 +252,8 @@ offs_t debug_view_disasm::find_pc_backwards(offs_t targetpc, int numinstrs)
while (curpcbyte < fillpcbyte)
{
fillpcbyte--;
- opbuf[1000 + fillpcbyte - targetpcbyte] = debug_read_opcode(source.m_space, fillpcbyte, 1, FALSE);
- argbuf[1000 + fillpcbyte - targetpcbyte] = debug_read_opcode(source.m_space, fillpcbyte, 1, TRUE);
+ opbuf[1000 + fillpcbyte - targetpcbyte] = debug_read_opcode(source.m_decrypted_space, fillpcbyte, 1);
+ argbuf[1000 + fillpcbyte - targetpcbyte] = debug_read_opcode(source.m_space, fillpcbyte, 1);
}
// loop until we get past the target instruction
@@ -310,12 +311,12 @@ void debug_view_disasm::generate_bytes(offs_t pcbyte, int numbytes, int minbytes
// output the first value
int offset = 0;
if (maxchars >= char_num * minbytes)
- offset = sprintf(string, "%s", core_i64_format(debug_read_opcode(source.m_space, pcbyte, minbytes, FALSE), minbytes * char_num, source.is_octal()));
+ offset = sprintf(string, "%s", core_i64_format(debug_read_opcode(source.m_decrypted_space, pcbyte, minbytes), minbytes * char_num, source.is_octal()));
// output subsequent values
int byte;
for (byte = minbytes; byte < numbytes && offset + 1 + char_num * minbytes < maxchars; byte += minbytes)
- offset += sprintf(&string[offset], " %s", core_i64_format(debug_read_opcode(source.m_space, pcbyte + byte, minbytes, encrypted), minbytes * char_num, source.is_octal()));
+ offset += sprintf(&string[offset], " %s", core_i64_format(debug_read_opcode(encrypted ? source.m_space : source.m_decrypted_space, pcbyte + byte, minbytes), minbytes * char_num, source.is_octal()));
// if we ran out of room, indicate more
string[maxchars - 1] = 0;
@@ -394,8 +395,8 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
// fetch the bytes up to the maximum
for (numbytes = 0; numbytes < maxbytes; numbytes++)
{
- opbuf[numbytes] = debug_read_opcode(source.m_space, pcbyte + numbytes, 1, FALSE);
- argbuf[numbytes] = debug_read_opcode(source.m_space, pcbyte + numbytes, 1, TRUE);
+ opbuf[numbytes] = debug_read_opcode(source.m_decrypted_space, pcbyte + numbytes, 1);
+ argbuf[numbytes] = debug_read_opcode(source.m_space, pcbyte + numbytes, 1);
}
// disassemble the result
@@ -429,8 +430,8 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
}
// update opcode base information
- m_last_direct_decrypted = source.m_space.direct().decrypted();
- m_last_direct_raw = source.m_space.direct().raw();
+ m_last_direct_decrypted = source.m_decrypted_space.direct().ptr();
+ m_last_direct_raw = source.m_space.direct().ptr();
m_last_change_count = source.m_device.debug()->comment_change_count();
// no longer need to recompute
@@ -478,7 +479,7 @@ void debug_view_disasm::view_update()
}
// if the opcode base has changed, rework things
- if (source.m_space.direct().decrypted() != m_last_direct_decrypted || source.m_space.direct().raw() != m_last_direct_raw)
+ if (source.m_decrypted_space.direct().ptr() != m_last_direct_decrypted || source.m_space.direct().ptr() != m_last_direct_raw)
m_recompute = true;
// if the comments have changed, redo it
diff --git a/src/emu/debug/dvdisasm.h b/src/emu/debug/dvdisasm.h
index 6f1c911aaeb..202ffbe4d8c 100644
--- a/src/emu/debug/dvdisasm.h
+++ b/src/emu/debug/dvdisasm.h
@@ -51,6 +51,7 @@ private:
device_t & m_device; // underlying device
device_disasm_interface *m_disasmintf; // disassembly interface
address_space & m_space; // address space to display
+ address_space & m_decrypted_space; // address space to display for decrypted opcodes
};
diff --git a/src/emu/devcpu.h b/src/emu/devcpu.h
index eff1a8e8d6f..20cf21f25f0 100644
--- a/src/emu/devcpu.h
+++ b/src/emu/devcpu.h
@@ -68,6 +68,7 @@ enum
#define MCFG_CPU_PROGRAM_MAP MCFG_DEVICE_PROGRAM_MAP
#define MCFG_CPU_DATA_MAP MCFG_DEVICE_DATA_MAP
#define MCFG_CPU_IO_MAP MCFG_DEVICE_IO_MAP
+#define MCFG_CPU_DECRYPTED_OPCODES_MAP MCFG_DEVICE_DECRYPTED_OPCODES_MAP
#define MCFG_CPU_VBLANK_INT_DRIVER MCFG_DEVICE_VBLANK_INT_DRIVER
#define MCFG_CPU_PERIODIC_INT_DRIVER MCFG_DEVICE_PERIODIC_INT_DRIVER
diff --git a/src/emu/dimemory.h b/src/emu/dimemory.h
index 330dfb806e3..5255aadb3da 100644
--- a/src/emu/dimemory.h
+++ b/src/emu/dimemory.h
@@ -46,6 +46,9 @@ const int TRANSLATE_FETCH_DEBUG = (TRANSLATE_FETCH | TRANSLATE_DEBUG_MASK);
#define MCFG_DEVICE_ADDRESS_MAP(_space, _map) \
device_memory_interface::static_set_addrmap(*device, _space, ADDRESS_MAP_NAME(_map));
+#define MCFG_DEVICE_REMOVE_ADDRESS_MAP(_space) \
+ device_memory_interface::static_set_addrmap(*device, _space, NULL);
+
#define MCFG_DEVICE_PROGRAM_MAP(_map) \
MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, _map)
@@ -55,6 +58,9 @@ const int TRANSLATE_FETCH_DEBUG = (TRANSLATE_FETCH | TRANSLATE_DEBUG_MASK);
#define MCFG_DEVICE_IO_MAP(_map) \
MCFG_DEVICE_ADDRESS_MAP(AS_IO, _map)
+#define MCFG_DEVICE_DECRYPTED_OPCODES_MAP(_map) \
+ MCFG_DEVICE_ADDRESS_MAP(AS_DECRYPTED_OPCODES, _map)
+
//**************************************************************************
@@ -82,6 +88,8 @@ public:
// basic information getters
bool has_space(int index = 0) const { return (m_addrspace[index] != NULL); }
bool has_space(address_spacenum index) const { return (m_addrspace[int(index)] != NULL); }
+ bool has_configured_map(int index = 0) const { return (m_address_map[index] != NULL); }
+ bool has_configured_map(address_spacenum index) const { return (m_address_map[int(index)] != NULL); }
address_space &space(int index = 0) const { assert(m_addrspace[index] != NULL); return *m_addrspace[index]; }
address_space &space(address_spacenum index) const { assert(m_addrspace[int(index)] != NULL); return *m_addrspace[int(index)]; }
diff --git a/src/emu/machine/6821pia.c b/src/emu/machine/6821pia.c
index 93c6244f144..3fbf6477fa9 100644
--- a/src/emu/machine/6821pia.c
+++ b/src/emu/machine/6821pia.c
@@ -14,7 +14,7 @@
// MACROS
//**************************************************************************
-#define VERBOSE 0
+#define VERBOSE 1
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
diff --git a/src/emu/machine/68307.c b/src/emu/machine/68307.c
index 08116ca0e18..320c701acc7 100644
--- a/src/emu/machine/68307.c
+++ b/src/emu/machine/68307.c
@@ -114,7 +114,7 @@ int m68307_calc_cs(m68307cpu_device *m68k, offs_t address)
UINT16 m68307cpu_device::simple_read_immediate_16_m68307(offs_t address)
{
// m68307_currentcs = m68307_calc_cs(this, address);
- return m_direct->read_decrypted_word(address);
+ return m_direct->read_word(address);
}
UINT8 m68307cpu_device::read_byte_m68307(offs_t address)
diff --git a/src/emu/mconfig.h b/src/emu/mconfig.h
index 053890f73e6..a96367ccced 100644
--- a/src/emu/mconfig.h
+++ b/src/emu/mconfig.h
@@ -22,9 +22,8 @@
// CONSTANTS
//**************************************************************************
-// by convention, tags should all lowercase and between 1-15 characters
+// by convention, tags should all be lowercase
#define MIN_TAG_LENGTH 1
-#define MAX_TAG_LENGTH 15
//**************************************************************************
// TYPE DEFINITIONS
diff --git a/src/emu/memory.c b/src/emu/memory.c
index fe38d0595b6..c7742085b0a 100644
--- a/src/emu/memory.c
+++ b/src/emu/memory.c
@@ -1510,7 +1510,6 @@ memory_manager::memory_manager(running_machine &machine)
m_banknext(STATIC_BANK1)
{
memset(m_bank_ptr, 0, sizeof(m_bank_ptr));
- memset(m_bankd_ptr, 0, sizeof(m_bankd_ptr));
}
@@ -2099,41 +2098,6 @@ void address_space::locate_memory()
}
-//-------------------------------------------------
-// set_decrypted_region - registers an address
-// range as having a decrypted data pointer
-//-------------------------------------------------
-
-void address_space::set_decrypted_region(offs_t addrstart, offs_t addrend, void *base)
-{
- offs_t bytestart = address_to_byte(addrstart);
- offs_t byteend = address_to_byte_end(addrend);
- bool found = false;
-
- // loop over banks looking for a match
- for (memory_bank *bank = manager().m_banklist.first(); bank != NULL; bank = bank->next())
- {
- // consider this bank if it is used for reading and matches the address space
- if (bank->references_space(*this, ROW_READ))
- {
- // verify that the provided range fully covers this bank
- if (bank->is_covered_by(bytestart, byteend))
- {
- // set the decrypted pointer for the corresponding memory bank
- bank->set_base_decrypted(reinterpret_cast<UINT8 *>(base) + bank->bytestart() - bytestart);
- found = true;
- }
-
- // fatal error if the decrypted region straddles the bank
- else if (bank->straddles(bytestart, byteend))
- throw emu_fatalerror("memory_set_decrypted_region found straddled region %08X-%08X for device '%s'", bytestart, byteend, m_device.tag());
- }
- }
-
- // fatal error as well if we didn't find any relevant memory banks
- if (!found)
- throw emu_fatalerror("memory_set_decrypted_region unable to find matching region %08X-%08X for device '%s'", bytestart, byteend, m_device.tag());
-}
//-------------------------------------------------
@@ -3666,8 +3630,7 @@ handler_entry &address_table_write::handler(UINT32 index) const
direct_read_data::direct_read_data(address_space &space)
: m_space(space),
- m_raw(NULL),
- m_decrypted(NULL),
+ m_ptr(NULL),
m_bytemask(space.bytemask()),
m_bytestart(1),
m_byteend(0),
@@ -3718,17 +3681,12 @@ bool direct_read_data::set_direct_region(offs_t &byteaddress)
return false;
}
- // if no decrypted opcodes, point to the same base
- UINT8 *base = *m_space.manager().bank_pointer_addr(m_entry, false);
- UINT8 *based = *m_space.manager().bank_pointer_addr(m_entry, true);
- if (based == NULL)
- based = base;
+ UINT8 *base = *m_space.manager().bank_pointer_addr(m_entry);
// compute the adjusted base
const handler_entry_read &handler = m_space.read().handler_read(m_entry);
m_bytemask = handler.bytemask();
- m_raw = base - (handler.bytestart() & m_bytemask);
- m_decrypted = based - (handler.bytestart() & m_bytemask);
+ m_ptr = base - (handler.bytestart() & m_bytemask);
m_bytestart = maskedbits | range->m_bytestart;
m_byteend = maskedbits | range->m_byteend;
return true;
@@ -3811,15 +3769,12 @@ direct_update_delegate direct_read_data::set_direct_update(direct_update_delegat
// within a custom callback
//-------------------------------------------------
-void direct_read_data::explicit_configure(offs_t bytestart, offs_t byteend, offs_t bytemask, void *raw, void *decrypted)
+void direct_read_data::explicit_configure(offs_t bytestart, offs_t byteend, offs_t bytemask, void *ptr)
{
m_bytestart = bytestart;
m_byteend = byteend;
m_bytemask = bytemask;
- m_raw = reinterpret_cast<UINT8 *>(raw);
- m_decrypted = reinterpret_cast<UINT8 *>((decrypted == NULL) ? raw : decrypted);
- m_raw -= bytestart & bytemask;
- m_decrypted -= bytestart & bytemask;
+ m_ptr = reinterpret_cast<UINT8 *>(ptr) - (bytestart & bytemask);
}
@@ -3901,8 +3856,7 @@ memory_block::~memory_block()
memory_bank::memory_bank(address_space &space, int index, offs_t bytestart, offs_t byteend, const char *tag)
: m_next(NULL),
m_machine(space.machine()),
- m_baseptr(space.manager().bank_pointer_addr(index, false)),
- m_basedptr(space.manager().bank_pointer_addr(index, true)),
+ m_baseptr(space.manager().bank_pointer_addr(index)),
m_index(index),
m_anonymous(tag == NULL),
m_bytestart(bytestart),
@@ -3994,23 +3948,6 @@ void memory_bank::set_base(void *base)
//-------------------------------------------------
-// set_base_decrypted - set the decrypted base
-// explicitly
-//-------------------------------------------------
-
-void memory_bank::set_base_decrypted(void *base)
-{
- // NULL is not an option
- if (base == NULL)
- throw emu_fatalerror("memory_bank::set_base_decrypted called NULL base");
-
- // set the base and invalidate any referencing spaces
- *m_basedptr = reinterpret_cast<UINT8 *>(base);
- invalidate_references();
-}
-
-
-//-------------------------------------------------
// set_entry - set the base to a pre-configured
// entry
//-------------------------------------------------
@@ -4022,13 +3959,11 @@ void memory_bank::set_entry(int entrynum)
throw emu_fatalerror("memory_bank::set_entry called for anonymous bank");
if (entrynum < 0 || entrynum >= int(m_entry.size()))
throw emu_fatalerror("memory_bank::set_entry called with out-of-range entry %d", entrynum);
- if (m_entry[entrynum].m_raw == NULL)
+ if (m_entry[entrynum].m_ptr == NULL)
throw emu_fatalerror("memory_bank::set_entry called for bank '%s' with invalid bank entry %d", m_tag.c_str(), entrynum);
- // set both raw and decrypted values
m_curentry = entrynum;
- *m_baseptr = m_entry[entrynum].m_raw;
- *m_basedptr = m_entry[entrynum].m_decrypted;
+ *m_baseptr = m_entry[entrynum].m_ptr;
// invalidate referencing spaces
invalidate_references();
@@ -4064,11 +3999,11 @@ void memory_bank::configure_entry(int entrynum, void *base)
expand_entries(entrynum);
// set the entry
- m_entry[entrynum].m_raw = reinterpret_cast<UINT8 *>(base);
+ m_entry[entrynum].m_ptr = reinterpret_cast<UINT8 *>(base);
// if the bank base is not configured, and we're the first entry, set us up
if (*m_baseptr == NULL && entrynum == 0)
- *m_baseptr = m_entry[entrynum].m_raw;
+ *m_baseptr = m_entry[entrynum].m_ptr;
}
@@ -4084,43 +4019,6 @@ void memory_bank::configure_entries(int startentry, int numentries, void *base,
}
-//-------------------------------------------------
-// configure_decrypted_entry - configure a
-// decrypted entry
-//-------------------------------------------------
-
-void memory_bank::configure_decrypted_entry(int entrynum, void *base)
-{
- // must be positive
- if (entrynum < 0)
- throw emu_fatalerror("memory_bank::configure_decrypted_entry called with out-of-range entry %d", entrynum);
-
- // if we haven't allocated this many entries yet, expand our array
- if (entrynum >= int(m_entry.size()))
- expand_entries(entrynum);
-
- // set the entry
- m_entry[entrynum].m_decrypted = reinterpret_cast<UINT8 *>(base);
-
- // if the bank base is not configured, and we're the first entry, set us up
- if (*m_basedptr == NULL && entrynum == 0)
- *m_basedptr = m_entry[entrynum].m_decrypted;
-}
-
-
-//-------------------------------------------------
-// configure_decrypted_entries - configure
-// multiple decrypted entries
-//-------------------------------------------------
-
-void memory_bank::configure_decrypted_entries(int startentry, int numentries, void *base, offs_t stride)
-{
- // fill in the requested bank entries (backwards to improve allocation)
- for (int entrynum = startentry + numentries - 1; entrynum >= startentry; entrynum--)
- configure_decrypted_entry(entrynum, reinterpret_cast<UINT8 *>(base) + (entrynum - startentry) * stride);
-}
-
-
//**************************************************************************
// MEMORY REGIONS
//**************************************************************************
diff --git a/src/emu/memory.h b/src/emu/memory.h
index da91f4c0baf..739bf72baa7 100644
--- a/src/emu/memory.h
+++ b/src/emu/memory.h
@@ -37,7 +37,8 @@ enum address_spacenum
// alternate address space names for common use
AS_PROGRAM = AS_0, // program address space
AS_DATA = AS_1, // data address space
- AS_IO = AS_2 // I/O address space
+ AS_IO = AS_2, // I/O address space
+ AS_DECRYPTED_OPCODES = AS_3 // decrypted opcodes, when separate from data accesses
};
DECLARE_ENUM_OPERATORS(address_spacenum);
@@ -166,8 +167,7 @@ public:
// getters
address_space &space() const { return m_space; }
- UINT8 *raw() const { return m_raw; }
- UINT8 *decrypted() const { return m_decrypted; }
+ UINT8 *ptr() const { return m_ptr; }
// see if an address is within bounds, or attempt to update it if not
bool address_is_valid(offs_t byteaddress) { return EXPECTED(byteaddress >= m_bytestart && byteaddress <= m_byteend) || set_direct_region(byteaddress); }
@@ -178,21 +178,14 @@ public:
// custom update callbacks and configuration
direct_update_delegate set_direct_update(direct_update_delegate function);
- void explicit_configure(offs_t bytestart, offs_t byteend, offs_t bytemask, void *raw, void *decrypted = NULL);
-
- // accessor methods for reading raw data
- void *read_raw_ptr(offs_t byteaddress, offs_t directxor = 0);
- UINT8 read_raw_byte(offs_t byteaddress, offs_t directxor = 0);
- UINT16 read_raw_word(offs_t byteaddress, offs_t directxor = 0);
- UINT32 read_raw_dword(offs_t byteaddress, offs_t directxor = 0);
- UINT64 read_raw_qword(offs_t byteaddress, offs_t directxor = 0);
-
- // accessor methods for reading decrypted data
- void *read_decrypted_ptr(offs_t byteaddress, offs_t directxor = 0);
- UINT8 read_decrypted_byte(offs_t byteaddress, offs_t directxor = 0);
- UINT16 read_decrypted_word(offs_t byteaddress, offs_t directxor = 0);
- UINT32 read_decrypted_dword(offs_t byteaddress, offs_t directxor = 0);
- UINT64 read_decrypted_qword(offs_t byteaddress, offs_t directxor = 0);
+ void explicit_configure(offs_t bytestart, offs_t byteend, offs_t bytemask, void *raw);
+
+ // accessor methods
+ void *read_ptr(offs_t byteaddress, offs_t directxor = 0);
+ UINT8 read_byte(offs_t byteaddress, offs_t directxor = 0);
+ UINT16 read_word(offs_t byteaddress, offs_t directxor = 0);
+ UINT32 read_dword(offs_t byteaddress, offs_t directxor = 0);
+ UINT64 read_qword(offs_t byteaddress, offs_t directxor = 0);
private:
// internal helpers
@@ -202,8 +195,7 @@ private:
// internal state
address_space & m_space;
- UINT8 * m_raw; // direct access data pointer (raw)
- UINT8 * m_decrypted; // direct access data pointer (decrypted)
+ UINT8 * m_ptr; // direct access data pointer
offs_t m_bytemask; // byte address mask
offs_t m_bytestart; // minimum valid byte address
offs_t m_byteend; // maximum valid byte address
@@ -355,9 +347,6 @@ public:
offs_t byte_to_address(offs_t address) const { return m_config.byte2addr(address); }
offs_t byte_to_address_end(offs_t address) const { return m_config.byte2addr_end(address); }
- // decryption
- void set_decrypted_region(offs_t addrstart, offs_t addrend, void *base);
-
// direct access
direct_update_delegate set_direct_update_handler(direct_update_delegate function) { return m_direct->set_direct_update(function); }
bool set_direct_region(offs_t &byteaddress);
@@ -566,11 +555,10 @@ class memory_bank
read_or_write m_readorwrite; // used for read or write?
};
- // a bank_entry contains a raw and decrypted pointer
+ // a bank_entry contains a pointer
struct bank_entry
{
- UINT8 * m_raw;
- UINT8 * m_decrypted;
+ UINT8 * m_ptr;
};
public:
@@ -586,7 +574,6 @@ public:
bool anonymous() const { return m_anonymous; }
offs_t bytestart() const { return m_bytestart; }
void *base() const { return *m_baseptr; }
- void *base_decrypted() const { return *m_basedptr; }
const char *tag() const { return m_tag.c_str(); }
const char *name() const { return m_name.c_str(); }
@@ -602,13 +589,10 @@ public:
// set the base explicitly
void set_base(void *base);
- void set_base_decrypted(void *base);
// configure and set entries
void configure_entry(int entrynum, void *base);
void configure_entries(int startentry, int numentries, void *base, offs_t stride);
- void configure_decrypted_entry(int entrynum, void *base);
- void configure_decrypted_entries(int startentry, int numentries, void *base, offs_t stride);
void set_entry(int entrynum);
private:
@@ -620,7 +604,6 @@ private:
memory_bank * m_next; // next bank in sequence
running_machine & m_machine; // need the machine to free our memory
UINT8 ** m_baseptr; // pointer to our base pointer in the global array
- UINT8 ** m_basedptr; // same for the decrypted base pointer
UINT16 m_index; // array index for this handler
bool m_anonymous; // are we anonymous or explicit?
offs_t m_bytestart; // byte-adjusted start offset
@@ -747,7 +730,7 @@ public:
void dump(FILE *file);
// pointers to a bank pointer (internal usage only)
- UINT8 **bank_pointer_addr(UINT8 index, bool decrypted = false) { return decrypted ? &m_bankd_ptr[index] : &m_bank_ptr[index]; }
+ UINT8 **bank_pointer_addr(UINT8 index) { return &m_bank_ptr[index]; }
// regions
memory_region *region_alloc(const char *name, UINT32 length, UINT8 width, endianness_t endian);
@@ -766,7 +749,6 @@ private:
bool m_initialized; // have we completed initialization?
UINT8 * m_bank_ptr[TOTAL_MEMORY_BANKS]; // array of bank pointers
- UINT8 * m_bankd_ptr[TOTAL_MEMORY_BANKS]; // array of decrypted bank pointers
simple_list<address_space> m_spacelist; // list of address spaces
simple_list<memory_block> m_blocklist; // head of the list of memory blocks
@@ -887,102 +869,67 @@ private:
//**************************************************************************
//-------------------------------------------------
-// read_raw_ptr - return a pointer to valid RAM
+// read_ptr - return a pointer to valid RAM
// referenced by the address, or NULL if no RAM
// backing that address
//-------------------------------------------------
-inline void *direct_read_data::read_raw_ptr(offs_t byteaddress, offs_t directxor)
-{
- if (address_is_valid(byteaddress))
- return &m_raw[(byteaddress ^ directxor) & m_bytemask];
- return NULL;
-}
-
-inline void *direct_read_data::read_decrypted_ptr(offs_t byteaddress, offs_t directxor)
+inline void *direct_read_data::read_ptr(offs_t byteaddress, offs_t directxor)
{
if (address_is_valid(byteaddress))
- return &m_decrypted[(byteaddress ^ directxor) & m_bytemask];
+ return &m_ptr[(byteaddress ^ directxor) & m_bytemask];
return NULL;
}
//-------------------------------------------------
-// read_raw_byte - read a byte via the
+// read_byte - read a byte via the
// direct_read_data class
//-------------------------------------------------
-inline UINT8 direct_read_data::read_raw_byte(offs_t byteaddress, offs_t directxor)
+inline UINT8 direct_read_data::read_byte(offs_t byteaddress, offs_t directxor)
{
if (address_is_valid(byteaddress))
- return m_raw[(byteaddress ^ directxor) & m_bytemask];
- return m_space.read_byte(byteaddress);
-}
-
-inline UINT8 direct_read_data::read_decrypted_byte(offs_t byteaddress, offs_t directxor)
-{
- if (address_is_valid(byteaddress))
- return m_decrypted[(byteaddress ^ directxor) & m_bytemask];
+ return m_ptr[(byteaddress ^ directxor) & m_bytemask];
return m_space.read_byte(byteaddress);
}
//-------------------------------------------------
-// read_raw_word - read a word via the
+// read_word - read a word via the
// direct_read_data class
//-------------------------------------------------
-inline UINT16 direct_read_data::read_raw_word(offs_t byteaddress, offs_t directxor)
+inline UINT16 direct_read_data::read_word(offs_t byteaddress, offs_t directxor)
{
if (address_is_valid(byteaddress))
- return *reinterpret_cast<UINT16 *>(&m_raw[(byteaddress ^ directxor) & m_bytemask]);
- return m_space.read_word(byteaddress);
-}
-
-inline UINT16 direct_read_data::read_decrypted_word(offs_t byteaddress, offs_t directxor)
-{
- if (address_is_valid(byteaddress))
- return *reinterpret_cast<UINT16 *>(&m_decrypted[(byteaddress ^ directxor) & m_bytemask]);
+ return *reinterpret_cast<UINT16 *>(&m_ptr[(byteaddress ^ directxor) & m_bytemask]);
return m_space.read_word(byteaddress);
}
//-------------------------------------------------
-// read_raw_dword - read a dword via the
+// read_dword - read a dword via the
// direct_read_data class
//-------------------------------------------------
-inline UINT32 direct_read_data::read_raw_dword(offs_t byteaddress, offs_t directxor)
+inline UINT32 direct_read_data::read_dword(offs_t byteaddress, offs_t directxor)
{
if (address_is_valid(byteaddress))
- return *reinterpret_cast<UINT32 *>(&m_raw[(byteaddress ^ directxor) & m_bytemask]);
- return m_space.read_dword(byteaddress);
-}
-
-inline UINT32 direct_read_data::read_decrypted_dword(offs_t byteaddress, offs_t directxor)
-{
- if (address_is_valid(byteaddress))
- return *reinterpret_cast<UINT32 *>(&m_decrypted[(byteaddress ^ directxor) & m_bytemask]);
+ return *reinterpret_cast<UINT32 *>(&m_ptr[(byteaddress ^ directxor) & m_bytemask]);
return m_space.read_dword(byteaddress);
}
//-------------------------------------------------
-// read_raw_qword - read a qword via the
+// read_qword - read a qword via the
// direct_read_data class
//-------------------------------------------------
-inline UINT64 direct_read_data::read_raw_qword(offs_t byteaddress, offs_t directxor)
-{
- if (address_is_valid(byteaddress))
- return *reinterpret_cast<UINT64 *>(&m_raw[(byteaddress ^ directxor) & m_bytemask]);
- return m_space.read_qword(byteaddress);
-}
-
-inline UINT64 direct_read_data::read_decrypted_qword(offs_t byteaddress, offs_t directxor)
+inline UINT64 direct_read_data::read_qword(offs_t byteaddress, offs_t directxor)
{
if (address_is_valid(byteaddress))
- return *reinterpret_cast<UINT64 *>(&m_decrypted[(byteaddress ^ directxor) & m_bytemask]);
+ return *reinterpret_cast<UINT64 *>(&m_ptr[(byteaddress ^ directxor) & m_bytemask]);
return m_space.read_qword(byteaddress);
}
diff --git a/src/emu/sound/bsmt2000.c b/src/emu/sound/bsmt2000.c
index 80802d5f60e..0b1dea55354 100644
--- a/src/emu/sound/bsmt2000.c
+++ b/src/emu/sound/bsmt2000.c
@@ -296,7 +296,7 @@ READ16_MEMBER( bsmt2000_device::tms_data_r )
READ16_MEMBER( bsmt2000_device::tms_rom_r )
{
// underlying logic assumes this is a sign-extended value
- return (INT8)m_direct->read_raw_byte((m_rom_bank << 16) + m_rom_address);
+ return (INT8)m_direct->read_byte((m_rom_bank << 16) + m_rom_address);
}
diff --git a/src/emu/sound/c352.c b/src/emu/sound/c352.c
index 15a3ba68273..b4172e43aa0 100644
--- a/src/emu/sound/c352.c
+++ b/src/emu/sound/c352.c
@@ -124,8 +124,8 @@ void c352_device::mix_one_channel(unsigned long ch, long sample_count)
return;
}
- sample = (char)m_direct->read_raw_byte(pos);
- nextsample = (char)m_direct->read_raw_byte(pos+cnt);
+ sample = (char)m_direct->read_byte(pos);
+ nextsample = (char)m_direct->read_byte(pos+cnt);
// sample is muLaw, not 8-bit linear (Fighting Layer uses this extensively)
if (flag & C352_FLG_MULAW)
diff --git a/src/emu/sound/es5503.c b/src/emu/sound/es5503.c
index 9364aa8065d..b1881412da2 100644
--- a/src/emu/sound/es5503.c
+++ b/src/emu/sound/es5503.c
@@ -184,9 +184,9 @@ void es5503_device::sound_stream_update(sound_stream &stream, stream_sample_t **
// channel strobe is always valid when reading; this allows potentially banking per voice
m_channel_strobe = (ctrl>>4) & 0xf;
- data = (INT32)m_direct->read_raw_byte(ramptr + wtptr) ^ 0x80;
+ data = (INT32)m_direct->read_byte(ramptr + wtptr) ^ 0x80;
- if (m_direct->read_raw_byte(ramptr + wtptr) == 0x00)
+ if (m_direct->read_byte(ramptr + wtptr) == 0x00)
{
halt_osc(osc, 1, &acc, resshift);
}
diff --git a/src/emu/sound/multipcm.c b/src/emu/sound/multipcm.c
index 5f984ffeadb..69c164bad2c 100644
--- a/src/emu/sound/multipcm.c
+++ b/src/emu/sound/multipcm.c
@@ -534,7 +534,7 @@ void multipcm_device::device_start()
for (int j = 0; j < 12; j++)
{
- ptSample[j] = (UINT8)m_direct->read_raw_byte((i*12) + j);
+ ptSample[j] = (UINT8)m_direct->read_byte((i*12) + j);
}
m_Samples[i].Start=(ptSample[0]<<16)|(ptSample[1]<<8)|(ptSample[2]<<0);
@@ -616,7 +616,7 @@ void multipcm_device::sound_stream_update(sound_stream &stream, stream_sample_t
unsigned int adr=slot->offset>>SHIFT;
signed int sample;
unsigned int step=slot->step;
- signed int csample=(signed short) (m_direct->read_raw_byte(slot->Base+adr)<<8);
+ signed int csample=(signed short) (m_direct->read_byte(slot->Base+adr)<<8);
signed int fpart=slot->offset&((1<<SHIFT)-1);
sample=(csample*fpart+slot->Prev*((1<<SHIFT)-fpart))>>SHIFT;
diff --git a/src/emu/sound/okim6295.c b/src/emu/sound/okim6295.c
index 2e59809199d..fc9f35e3a58 100644
--- a/src/emu/sound/okim6295.c
+++ b/src/emu/sound/okim6295.c
@@ -303,14 +303,14 @@ void okim6295_device::write_command(UINT8 command)
// determine the start/stop positions
offs_t base = m_command * 8;
- offs_t start = m_direct->read_raw_byte(base + 0) << 16;
- start |= m_direct->read_raw_byte(base + 1) << 8;
- start |= m_direct->read_raw_byte(base + 2) << 0;
+ offs_t start = m_direct->read_byte(base + 0) << 16;
+ start |= m_direct->read_byte(base + 1) << 8;
+ start |= m_direct->read_byte(base + 2) << 0;
start &= 0x3ffff;
- offs_t stop = m_direct->read_raw_byte(base + 3) << 16;
- stop |= m_direct->read_raw_byte(base + 4) << 8;
- stop |= m_direct->read_raw_byte(base + 5) << 0;
+ offs_t stop = m_direct->read_byte(base + 3) << 16;
+ stop |= m_direct->read_byte(base + 4) << 8;
+ stop |= m_direct->read_byte(base + 5) << 0;
stop &= 0x3ffff;
if (start < stop)
@@ -405,7 +405,7 @@ void okim6295_device::okim_voice::generate_adpcm(direct_read_data &direct, strea
while (samples-- != 0)
{
// fetch the next sample byte
- int nibble = direct.read_raw_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
+ int nibble = direct.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
// output to the buffer, scaling by the volume
// signal in range -2048..2047, volume in range 2..32 => signal * volume / 2 in range -32768..32767
diff --git a/src/emu/sound/okim9810.c b/src/emu/sound/okim9810.c
index 54e53fe55d0..e134e646ddb 100644
--- a/src/emu/sound/okim9810.c
+++ b/src/emu/sound/okim9810.c
@@ -313,31 +313,31 @@ void okim9810_device::write_command(UINT8 data)
const offs_t base = m_TMP_register * 8;
offs_t startAddr;
- UINT8 startFlags = m_direct->read_raw_byte(base + 0);
- startAddr = m_direct->read_raw_byte(base + 1) << 16;
- startAddr |= m_direct->read_raw_byte(base + 2) << 8;
- startAddr |= m_direct->read_raw_byte(base + 3) << 0;
+ UINT8 startFlags = m_direct->read_byte(base + 0);
+ startAddr = m_direct->read_byte(base + 1) << 16;
+ startAddr |= m_direct->read_byte(base + 2) << 8;
+ startAddr |= m_direct->read_byte(base + 3) << 0;
offs_t endAddr;
- UINT8 endFlags = m_direct->read_raw_byte(base + 4);
- endAddr = m_direct->read_raw_byte(base + 5) << 16;
- endAddr |= m_direct->read_raw_byte(base + 6) << 8;
- endAddr |= m_direct->read_raw_byte(base + 7) << 0;
+ UINT8 endFlags = m_direct->read_byte(base + 4);
+ endAddr = m_direct->read_byte(base + 5) << 16;
+ endAddr |= m_direct->read_byte(base + 6) << 8;
+ endAddr |= m_direct->read_byte(base + 7) << 0;
// Sub-table
if (startFlags & 0x80)
{
offs_t subTable = startAddr;
// TODO: New startFlags &= 0x80. Are there further subtables?
- startFlags = m_direct->read_raw_byte(subTable + 0);
- startAddr = m_direct->read_raw_byte(subTable + 1) << 16;
- startAddr |= m_direct->read_raw_byte(subTable + 2) << 8;
- startAddr |= m_direct->read_raw_byte(subTable + 3) << 0;
+ startFlags = m_direct->read_byte(subTable + 0);
+ startAddr = m_direct->read_byte(subTable + 1) << 16;
+ startAddr |= m_direct->read_byte(subTable + 2) << 8;
+ startAddr |= m_direct->read_byte(subTable + 3) << 0;
// TODO: What does byte (subTable + 4) refer to?
- endAddr = m_direct->read_raw_byte(subTable + 5) << 16;
- endAddr |= m_direct->read_raw_byte(subTable + 6) << 8;
- endAddr |= m_direct->read_raw_byte(subTable + 7) << 0;
+ endAddr = m_direct->read_byte(subTable + 5) << 16;
+ endAddr |= m_direct->read_byte(subTable + 6) << 8;
+ endAddr |= m_direct->read_byte(subTable + 7) << 0;
}
m_voice[channel].m_sample = 0;
@@ -478,7 +478,7 @@ void okim9810_device::okim_voice::generate_audio(direct_read_data &direct,
if (m_sample == 0)
{
// fetch the first sample nibble
- int nibble0 = direct.read_raw_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
+ int nibble0 = direct.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
switch (m_playbackAlgo)
{
case OKIM9810_ADPCM_PLAYBACK:
@@ -504,7 +504,7 @@ void okim9810_device::okim_voice::generate_audio(direct_read_data &direct,
}
// And fetch the second sample nibble
- int nibble1 = direct.read_raw_byte(m_base_offset + (m_sample+1) / 2) >> ((((m_sample+1) & 1) << 2) ^ 4);
+ int nibble1 = direct.read_byte(m_base_offset + (m_sample+1) / 2) >> ((((m_sample+1) & 1) << 2) ^ 4);
switch (m_playbackAlgo)
{
case OKIM9810_ADPCM_PLAYBACK:
diff --git a/src/emu/sound/qs1000.c b/src/emu/sound/qs1000.c
index 18872b99e1f..3100800acbc 100644
--- a/src/emu/sound/qs1000.c
+++ b/src/emu/sound/qs1000.c
@@ -523,7 +523,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t **
if (chan.m_start + chan.m_adpcm_addr >= chan.m_loop_end)
chan.m_adpcm_addr = chan.m_loop_start - chan.m_start;
- UINT8 data = m_direct->read_raw_byte(chan.m_start + (chan.m_adpcm_addr >> 1));
+ UINT8 data = m_direct->read_byte(chan.m_start + (chan.m_adpcm_addr >> 1));
UINT8 nibble = (chan.m_adpcm_addr & 1 ? data : data >> 4) & 0xf;
chan.m_adpcm_signal = chan.m_adpcm.clock(nibble);
}
@@ -556,7 +556,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t **
}
}
- INT8 result = m_direct->read_raw_byte(chan.m_addr) - 128;
+ INT8 result = m_direct->read_byte(chan.m_addr) - 128;
chan.m_acc += chan.m_freq;
chan.m_addr = (chan.m_addr + (chan.m_acc >> 18)) & QS1000_ADDRESS_MASK;
@@ -576,9 +576,9 @@ void qs1000_device::start_voice(int ch)
UINT32 table_addr = (m_channels[ch].m_regs[0x01] << 16) | (m_channels[ch].m_regs[0x02] << 8) | m_channels[ch].m_regs[0x03];
// Fetch the sound information
- UINT16 freq = (m_direct->read_raw_byte(table_addr + 0) << 8) | m_direct->read_raw_byte(table_addr + 1);
- UINT16 word1 = (m_direct->read_raw_byte(table_addr + 2) << 8) | m_direct->read_raw_byte(table_addr + 3);
- UINT16 base = (m_direct->read_raw_byte(table_addr + 4) << 8) | m_direct->read_raw_byte(table_addr + 5);
+ UINT16 freq = (m_direct->read_byte(table_addr + 0) << 8) | m_direct->read_byte(table_addr + 1);
+ UINT16 word1 = (m_direct->read_byte(table_addr + 2) << 8) | m_direct->read_byte(table_addr + 3);
+ UINT16 base = (m_direct->read_byte(table_addr + 4) << 8) | m_direct->read_byte(table_addr + 5);
if (LOGGING_ENABLED)
printf("[%.6x] Freq:%.4x ????:%.4x Addr:%.4x\n", table_addr, freq, word1, base);
@@ -588,42 +588,42 @@ void qs1000_device::start_voice(int ch)
return;
// Fetch the sample pointers and flags
- UINT8 byte0 = m_direct->read_raw_byte(base);
+ UINT8 byte0 = m_direct->read_byte(base);
UINT32 start_addr;
start_addr = byte0 << 16;
- start_addr |= m_direct->read_raw_byte(base + 1) << 8;
- start_addr |= m_direct->read_raw_byte(base + 2) << 0;
+ start_addr |= m_direct->read_byte(base + 1) << 8;
+ start_addr |= m_direct->read_byte(base + 2) << 0;
start_addr &= QS1000_ADDRESS_MASK;
UINT32 loop_start;
loop_start = (byte0 & 0xf0) << 16;
- loop_start |= m_direct->read_raw_byte(base + 3) << 12;
- loop_start |= m_direct->read_raw_byte(base + 4) << 4;
- loop_start |= m_direct->read_raw_byte(base + 5) >> 4;
+ loop_start |= m_direct->read_byte(base + 3) << 12;
+ loop_start |= m_direct->read_byte(base + 4) << 4;
+ loop_start |= m_direct->read_byte(base + 5) >> 4;
loop_start &= QS1000_ADDRESS_MASK;
UINT32 loop_end;
loop_end = (byte0 & 0xf0) << 16;
- loop_end |= (m_direct->read_raw_byte(base + 5) & 0xf) << 16;
- loop_end |= m_direct->read_raw_byte(base + 6) << 8;
- loop_end |= m_direct->read_raw_byte(base + 7);
+ loop_end |= (m_direct->read_byte(base + 5) & 0xf) << 16;
+ loop_end |= m_direct->read_byte(base + 6) << 8;
+ loop_end |= m_direct->read_byte(base + 7);
loop_end &= QS1000_ADDRESS_MASK;
- UINT8 byte8 = m_direct->read_raw_byte(base + 8);
+ UINT8 byte8 = m_direct->read_byte(base + 8);
if (LOGGING_ENABLED)
{
- UINT8 byte9 = m_direct->read_raw_byte(base + 9);
- UINT8 byte10 = m_direct->read_raw_byte(base + 10);
- UINT8 byte11 = m_direct->read_raw_byte(base + 11);
- UINT8 byte12 = m_direct->read_raw_byte(base + 12);
- UINT8 byte13 = m_direct->read_raw_byte(base + 13);
- UINT8 byte14 = m_direct->read_raw_byte(base + 14);
- UINT8 byte15 = m_direct->read_raw_byte(base + 15);
+ UINT8 byte9 = m_direct->read_byte(base + 9);
+ UINT8 byte10 = m_direct->read_byte(base + 10);
+ UINT8 byte11 = m_direct->read_byte(base + 11);
+ UINT8 byte12 = m_direct->read_byte(base + 12);
+ UINT8 byte13 = m_direct->read_byte(base + 13);
+ UINT8 byte14 = m_direct->read_byte(base + 14);
+ UINT8 byte15 = m_direct->read_byte(base + 15);
printf("[%.6x] Sample Start:%.6x Loop Start:%.6x Loop End:%.6x Params: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", base, start_addr, loop_start, loop_end, byte8, byte9, byte10, byte11, byte12, byte13, byte14, byte15);
}
diff --git a/src/emu/sound/ymf278b.c b/src/emu/sound/ymf278b.c
index 7e323f3d525..401bf2441f0 100644
--- a/src/emu/sound/ymf278b.c
+++ b/src/emu/sound/ymf278b.c
@@ -250,23 +250,23 @@ void ymf278b_device::sound_stream_update(sound_stream &stream, stream_sample_t *
{
// 8 bit
case 0:
- sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>16))<<8;
+ sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>16))<<8;
break;
// 12 bit
case 1:
if (slot->stepptr & 0x10000)
- sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
- (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
+ sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
+ (m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
else
- sample = m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
- (m_direct->read_raw_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
+ sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
+ (m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
break;
// 16 bit
case 2:
- sample = m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
- m_direct->read_raw_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1);
+ sample = m_direct->read_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
+ m_direct->read_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1);
break;
// ?? bit, effect is unknown, datasheet says it's prohibited
@@ -480,7 +480,7 @@ void ymf278b_device::C_w(UINT8 reg, UINT8 data)
else
offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12;
for (i = 0; i < 12; i++)
- p[i] = m_direct->read_raw_byte(offset+i);
+ p[i] = m_direct->read_byte(offset+i);
slot->bits = (p[0]&0xc0)>>6;
slot->startaddr = (p[2] | (p[1]<<8) | ((p[0]&0x3f)<<16));
@@ -752,7 +752,7 @@ READ8_MEMBER( ymf278b_device::read )
ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits
break;
case 6:
- ret = m_direct->read_raw_byte(m_memadr);
+ ret = m_direct->read_byte(m_memadr);
m_memadr = (m_memadr + 1) & 0x3fffff;
break;
diff --git a/src/emu/validity.c b/src/emu/validity.c
index 8ed4f1e7fe2..14f46661888 100644
--- a/src/emu/validity.c
+++ b/src/emu/validity.c
@@ -109,8 +109,6 @@ void validity_checker::validate_tag(const char *tag)
// too short/too long = bad
if (strlen(begin) < MIN_TAG_LENGTH)
osd_printf_error("Tag '%s' is too short (must be at least %d characters)\n", tag, MIN_TAG_LENGTH);
- if (strlen(begin) > MAX_TAG_LENGTH)
- osd_printf_error("Tag '%s' is too long (must be less than %d characters)\n", tag, MAX_TAG_LENGTH);
}
diff --git a/src/mame/audio/seibu.c b/src/mame/audio/seibu.c
index 9e64e9ef6b0..e1a0b0aaa5b 100644
--- a/src/mame/audio/seibu.c
+++ b/src/mame/audio/seibu.c
@@ -83,6 +83,13 @@ seibu_sound_device::seibu_sound_device(const machine_config &mconfig, const char
m_rst10_irq(0xff),
m_rst18_irq(0xff)
{
+ m_encryption_mode = 0;
+ m_decrypted_opcodes = NULL;
+}
+
+void seibu_sound_device::set_encryption(int mode)
+{
+ m_encryption_mode = mode;
}
//-------------------------------------------------
@@ -91,6 +98,32 @@ seibu_sound_device::seibu_sound_device(const machine_config &mconfig, const char
void seibu_sound_device::device_start()
{
+ int length = memregion(":audiocpu")->bytes();
+ UINT8 *rom = memregion(":audiocpu")->base();
+ if (length > 0x10000)
+ {
+ membank(":seibu_bank1")->configure_entries(0, (length - 0x10000) / 0x8000, rom + 0x10000, 0x8000);
+
+ /* Denjin Makai definitely needs this at start-up, it never writes to the bankswitch */
+ membank(":seibu_bank1")->set_entry(0);
+ }
+
+ switch(m_encryption_mode) {
+ case 0: break;
+ case 3: break;
+
+ case 1:
+ get_custom_decrypt();
+ memcpy(m_decrypted_opcodes, rom, length);
+ apply_decrypt(rom, m_decrypted_opcodes, 0x2000);
+ break;
+
+ case 2:
+ get_custom_decrypt();
+ apply_decrypt(rom, m_decrypted_opcodes, length);
+ break;
+ }
+
m_main2sub[0] = m_main2sub[1] = 0;
m_sub2main[0] = m_sub2main[1] = 0;
@@ -108,18 +141,8 @@ void seibu_sound_device::device_start()
void seibu_sound_device::device_reset()
{
- int romlength = machine().root_device().memregion("audiocpu")->bytes();
- UINT8 *rom = machine().root_device().memregion("audiocpu")->base();
-
- m_sound_cpu = machine().device("audiocpu");
+ m_sound_cpu = machine().device(":audiocpu");
update_irq_lines(VECTOR_INIT);
- if (romlength > 0x10000)
- {
- machine().root_device().membank("bank1")->configure_entries(0, (romlength - 0x10000) / 0x8000, rom + 0x10000, 0x8000);
-
- /* Denjin Makai definitely needs this at start-up, it never writes to the bankswitch */
- machine().root_device().membank("bank1")->set_entry(0);
- }
}
static UINT8 decrypt_data(int a,int src)
@@ -155,25 +178,32 @@ static UINT8 decrypt_opcode(int a,int src)
return src;
}
-void seibu_sound_device::decrypt(const char *cpu,int length)
+UINT8 *seibu_sound_device::get_custom_decrypt()
{
- address_space &space = machine().device(cpu)->memory().space(AS_PROGRAM);
- UINT8 *decrypt = auto_alloc_array_clear(machine(), UINT8, length);
- UINT8 *rom = machine().root_device().memregion(cpu)->base();
- int i;
-
- space.set_decrypted_region(0x0000, (length < 0x10000) ? (length - 1) : 0x1fff, decrypt);
+ if (m_decrypted_opcodes)
+ return m_decrypted_opcodes;
+
+ int size = memregion(":audiocpu")->bytes();
+ m_decrypted_opcodes = auto_alloc_array_clear(machine(), UINT8, size);
+ membank(":seibu_bank0d")->set_base(m_decrypted_opcodes);
+ if (size > 0x10000) {
+ membank(":seibu_bank1d")->configure_entries(0, (size - 0x10000) / 0x8000, m_decrypted_opcodes + 0x10000, 0x8000);
+ membank(":seibu_bank1d")->set_entry(0);
+ } else
+ membank(":seibu_bank1d")->set_base(m_decrypted_opcodes + 0x8000);
+
+ return m_decrypted_opcodes;
+}
- for (i = 0;i < length;i++)
+void seibu_sound_device::apply_decrypt(UINT8 *rom, UINT8 *opcodes, int length)
+{
+ for (int i = 0;i < length;i++)
{
UINT8 src = rom[i];
rom[i] = decrypt_data(i,src);
- decrypt[i] = decrypt_opcode(i,src);
+ opcodes[i] = decrypt_opcode(i,src);
}
-
- if (length > 0x10000)
- machine().root_device().membank("bank1")->configure_decrypted_entries(0, (length - 0x10000) / 0x8000, decrypt + 0x10000, 0x8000);
}
void seibu_sound_device::update_irq_lines(int param)
@@ -238,7 +268,9 @@ WRITE_LINE_MEMBER( seibu_sound_device::fm_irqhandler )
WRITE8_MEMBER( seibu_sound_device::bank_w )
{
- space.machine().root_device().membank("bank1")->set_entry(data & 1);
+ membank(":seibu_bank1")->set_entry(data & 1);
+ if (m_decrypted_opcodes)
+ membank(":seibu_bank1d")->set_entry(data & 1);
}
WRITE8_MEMBER( seibu_sound_device::coin_w )
@@ -326,6 +358,11 @@ WRITE16_MEMBER( seibu_sound_device::main_mustb_w )
/***************************************************************************/
+ADDRESS_MAP_START( seibu_sound_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, driver_device )
+ AM_RANGE(0x0000, 0x1fff) AM_ROMBANK("seibu_bank0d")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1d")
+ADDRESS_MAP_END
+
ADDRESS_MAP_START( seibu_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x27ff) AM_RAM
@@ -341,7 +378,7 @@ ADDRESS_MAP_START( seibu_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
ADDRESS_MAP_START( seibu2_airraid_sound_map, AS_PROGRAM, 8, driver_device )
@@ -359,7 +396,7 @@ ADDRESS_MAP_START( seibu2_airraid_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
// AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROM
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
ADDRESS_MAP_START( seibu2_sound_map, AS_PROGRAM, 8, driver_device )
@@ -377,7 +414,7 @@ ADDRESS_MAP_START( seibu2_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
ADDRESS_MAP_START( seibu2_raiden2_sound_map, AS_PROGRAM, 8, driver_device )
@@ -396,7 +433,7 @@ ADDRESS_MAP_START( seibu2_raiden2_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0x6002, 0x6002) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
AM_RANGE(0x4004, 0x4004) AM_NOP
AM_RANGE(0x401a, 0x401a) AM_NOP
ADDRESS_MAP_END
@@ -416,7 +453,7 @@ ADDRESS_MAP_START( seibu_newzeroteam_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x401a, 0x401a) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
ADDRESS_MAP_START( seibu3_sound_map, AS_PROGRAM, 8, driver_device )
@@ -434,7 +471,7 @@ ADDRESS_MAP_START( seibu3_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
AM_RANGE(0x6008, 0x6009) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
ADDRESS_MAP_START( seibu3_adpcm_sound_map, AS_PROGRAM, 8, driver_device )
@@ -456,7 +493,7 @@ ADDRESS_MAP_START( seibu3_adpcm_sound_map, AS_PROGRAM, 8, driver_device )
AM_RANGE(0x6005, 0x6006) AM_DEVWRITE("adpcm2", seibu_adpcm_device, adr_w)
AM_RANGE(0x6008, 0x6009) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
AM_RANGE(0x601a, 0x601a) AM_DEVWRITE("adpcm2", seibu_adpcm_device, ctl_w)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
ADDRESS_MAP_END
/***************************************************************************
diff --git a/src/mame/audio/seibu.h b/src/mame/audio/seibu.h
index a92ab8a5855..ca3fa2f11c2 100644
--- a/src/mame/audio/seibu.h
+++ b/src/mame/audio/seibu.h
@@ -31,6 +31,7 @@
#include "sound/2203intf.h"
#include "sound/okim6295.h"
+ADDRESS_MAP_EXTERN(seibu_sound_decrypted_opcodes_map, 8);
ADDRESS_MAP_EXTERN(seibu_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu2_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu2_airraid_sound_map, 8);
@@ -58,7 +59,10 @@ public:
DECLARE_READ8_MEMBER( main_data_pending_r );
DECLARE_WRITE8_MEMBER( main_data_w );
DECLARE_WRITE8_MEMBER( pending_w );
- void decrypt(const char *cpu,int length);
+
+ static void apply_decrypt(UINT8 *rom, UINT8 *opcodes, int length);
+ void set_encryption(int mode);
+ UINT8 *get_custom_decrypt();
void update_irq_lines(int param);
protected:
@@ -67,6 +71,9 @@ protected:
virtual void device_reset();
private:
+ int m_encryption_mode;
+ UINT8 *m_decrypted_opcodes;
+
// internal state
device_t *m_sound_cpu;
UINT8 m_main2sub[2];
@@ -188,6 +195,24 @@ extern const device_type SEIBU_ADPCM;
MCFG_CPU_PROGRAM_MAP(seibu3_adpcm_sound_map) \
MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0)
+#define SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW() \
+ MCFG_DEVICE_MODIFY("seibu_sound") \
+ downcast<seibu_sound_device *>(device)->set_encryption(1); \
+ MCFG_DEVICE_MODIFY("audiocpu") \
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
+
+#define SEIBU_SOUND_SYSTEM_ENCRYPTED_FULL() \
+ MCFG_DEVICE_MODIFY("seibu_sound") \
+ downcast<seibu_sound_device *>(device)->set_encryption(2); \
+ MCFG_DEVICE_MODIFY("audiocpu") \
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
+
+#define SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM() \
+ MCFG_DEVICE_MODIFY("seibu_sound") \
+ downcast<seibu_sound_device *>(device)->set_encryption(3); \
+ MCFG_DEVICE_MODIFY("audiocpu") \
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(seibu_sound_decrypted_opcodes_map)
+
#define SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(freq1,freq2) \
MCFG_SPEAKER_STANDARD_MONO("mono") \
\
diff --git a/src/mame/audio/turrett.c b/src/mame/audio/turrett.c
index 29b07dbb4c8..6a2fc150c7b 100644
--- a/src/mame/audio/turrett.c
+++ b/src/mame/audio/turrett.c
@@ -103,7 +103,7 @@ void turrett_device::sound_stream_update(sound_stream &stream, stream_sample_t *
for (int s = 0; s < samples; ++s)
{
- INT16 sample = m_direct->read_raw_word(addr << 1);
+ INT16 sample = m_direct->read_word(addr << 1);
if ((UINT16)sample == 0x8000)
{
diff --git a/src/mame/drivers/angelkds.c b/src/mame/drivers/angelkds.c
index 47e225f680f..8bd36d7b37c 100644
--- a/src/mame/drivers/angelkds.c
+++ b/src/mame/drivers/angelkds.c
@@ -212,6 +212,11 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, angelkds_state )
AM_RANGE(0xf005, 0xf005) AM_WRITE(angelkds_layer_ctrl_write)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, angelkds_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( main_portmap, AS_IO, 8, angelkds_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITENOP // 00 on start-up, not again
@@ -628,6 +633,12 @@ static MACHINE_CONFIG_START( angelkds, angelkds_state )
MCFG_SOUND_ROUTE(3, "mono", 0.45)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( spcpostn, angelkds )
+ /* encryption */
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
/*** Rom Loading
"maincpu" for the main code
@@ -643,7 +654,7 @@ MACHINE_CONFIG_END
ROM_START( angelkds )
/* Nasco X090-PC-A (Sega 837-6600) */
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "11428.c10", 0x00000, 0x08000, CRC(90daacd2) SHA1(7e50ad1cbed0c1e6bad04ef1611cad25538c905f) )
ROM_REGION( 0x20000, "user1", 0 ) /* Banked Code */
@@ -690,7 +701,7 @@ ROM_END
ROM_START( spcpostn )
/* X090-PC-A 171-5383 */
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* D317-0005 (NEC Z80 Custom) */
+ ROM_REGION( 0x8000, "maincpu", 0 ) /* D317-0005 (NEC Z80 Custom) */
ROM_LOAD( "epr10125.c10", 0x00000, 0x08000, CRC(bffd38c6) SHA1(af02907124343ddecd21439d25f1ebb81ef9f51a) ) /* encrypted */
ROM_REGION( 0x28000, "user1", 0 ) /* Banked Code */
@@ -736,10 +747,12 @@ DRIVER_INIT_MEMBER(angelkds_state,spcpostn)
{
UINT8 *RAM = memregion("user1")->base();
- sega_317_0005_decode(machine(), "maincpu");
+ // 317-0005
+ sega_decode_317(memregion("maincpu")->base(), m_decrypted_opcodes, 1);
+
membank("bank1")->configure_entries(0, 10, &RAM[0x0000], 0x4000);
}
GAME( 1988, angelkds, 0, angelkds, angelkds, angelkds_state, angelkds, ROT90, "Sega / Nasco?", "Angel Kids (Japan)" , GAME_SUPPORTS_SAVE) /* Nasco not displayed but 'Exa Planning' is */
-GAME( 1986, spcpostn, 0, angelkds, spcpostn, angelkds_state, spcpostn, ROT90, "Sega / Nasco", "Space Position (Japan)" , GAME_SUPPORTS_SAVE) /* encrypted */
+GAME( 1986, spcpostn, 0, spcpostn, spcpostn, angelkds_state, spcpostn, ROT90, "Sega / Nasco", "Space Position (Japan)" , GAME_SUPPORTS_SAVE) /* encrypted */
diff --git a/src/mame/drivers/appoooh.c b/src/mame/drivers/appoooh.c
index b3ab3aba401..6c99c38dad5 100644
--- a/src/mame/drivers/appoooh.c
+++ b/src/mame/drivers/appoooh.c
@@ -227,6 +227,12 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, appoooh_state )
AM_RANGE(0xf000, 0xffff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, appoooh_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0x9fff) AM_ROM AM_REGION("maincpu", 0x8000)
+ AM_RANGE(0xa000, 0xdfff) AM_ROMBANK("bank1")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( main_portmap, AS_IO, 8, appoooh_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_DEVWRITE("sn1", sn76489_device, write)
@@ -455,6 +461,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( robowres, appoooh_common )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -577,13 +586,48 @@ ROM_END
DRIVER_INIT_MEMBER(appoooh_state,robowres)
{
- sega_315_5179_decode(machine(), "maincpu");
+ static const UINT8 xor_table[128] =
+ {
+ 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,0x40,0x45,0x11,0x14,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x10,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x01,0x04,
+ 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
+ 0x00,0x05,0x41,0x44,0x10,0x55,0x51,0x01,0x04,
+ 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x51,0x54,0x04,
+ 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,
+ 0x40,0x45,0x11,0x54,0x50,0x00,0x05,0x41,
+ };
+
+ static const int swap_table[128] =
+ {
+ 8, 9,11,13,15, 0, 2, 4, 6,
+ 8, 9,11,13,15, 1, 2, 4, 6,
+ 8, 9,11,13,15, 1, 2, 4, 6,
+ 8, 9,11,13,15, 1, 2, 4, 6,
+ 8,10,11,13,15, 1, 2, 4, 6,
+ 8,10,11,13,15, 1, 2, 4, 6,
+ 8,10,11,13,15, 1, 3, 4, 6,
+ 8,
+ 7, 1, 2, 4, 6, 0, 1, 3, 5,
+ 7, 1, 2, 4, 6, 0, 1, 3, 5,
+ 7, 1, 2, 4, 6, 0, 2, 3, 5,
+ 7, 1, 2, 4, 6, 0, 2, 3, 5,
+ 7, 1, 2, 4, 6, 0, 2, 3, 5,
+ 7, 1, 3, 4, 6, 0, 2, 3, 5,
+ 7, 1, 3, 4, 6, 0, 2, 4, 5,
+ 7,
+ };
+
+ sega_decode_2(memregion("maincpu")->base(), m_decrypted_opcodes, xor_table, swap_table);
}
DRIVER_INIT_MEMBER(appoooh_state,robowresb)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base() + 0x1c000);
+ memcpy(m_decrypted_opcodes, memregion("maincpu")->base() + 0x1c000, 0x8000);
}
diff --git a/src/mame/drivers/boogwing.c b/src/mame/drivers/boogwing.c
index 10f314ec6af..4a0ecabbf5b 100644
--- a/src/mame/drivers/boogwing.c
+++ b/src/mame/drivers/boogwing.c
@@ -143,6 +143,9 @@ static ADDRESS_MAP_START( boogwing_map, AS_PROGRAM, 16, boogwing_state )
AM_RANGE(0x3c0000, 0x3c004f) AM_RAM // ?
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, boogwing_state )
+ AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, boogwing_state )
AM_RANGE(0x000000, 0x00ffff) AM_ROM
@@ -317,6 +320,7 @@ static MACHINE_CONFIG_START( boogwing, boogwing_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 14000000) /* DE102 */
MCFG_CPU_PROGRAM_MAP(boogwing_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", boogwing_state, irq6_line_hold)
MCFG_CPU_ADD("audiocpu", H6280, 32220000/4)
@@ -635,7 +639,7 @@ DRIVER_INIT_MEMBER(boogwing_state,boogwing)
deco56_decrypt_gfx(machine(), "tiles2");
deco56_decrypt_gfx(machine(), "tiles3");
deco56_remap_gfx(machine(), "gfx6");
- deco102_decrypt_cpu(machine(), "maincpu", 0x42ba, 0x00, 0x18);
+ deco102_decrypt_cpu((UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, 0x100000, 0x42ba, 0x00, 0x18);
memcpy(dst, src, 0x100000);
}
diff --git a/src/mame/drivers/cabal.c b/src/mame/drivers/cabal.c
index 1ae39175190..54932b10902 100644
--- a/src/mame/drivers/cabal.c
+++ b/src/mame/drivers/cabal.c
@@ -468,7 +468,7 @@ static GFXDECODE_START( cabal )
GFXDECODE_END
-static MACHINE_CONFIG_START( cabal, cabal_state )
+static MACHINE_CONFIG_START( cabal_base, cabal_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* verified on pcb */
@@ -511,6 +511,14 @@ static MACHINE_CONFIG_START( cabal, cabal_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( cabal, cabal_base )
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( cabalbl2, cabal_base )
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM()
+MACHINE_CONFIG_END
+
/* the bootleg has different sound hardware (2 extra Z80s for ADPCM playback) */
static MACHINE_CONFIG_START( cabalbl, cabal_state )
@@ -787,7 +795,7 @@ ROM_END
// based on stickers present on the board it appears to have been manufactured by 'TAB-Austria' and is marked 'CA02'
ROM_START( cabalbl2 )
- ROM_REGION( 0x50000, "maincpu", 0 ) /* 64k for cpu code */
+ ROM_REGION( 0x40000, "maincpu", 0 ) /* 64k for cpu code */
ROM_LOAD16_BYTE( "c9.bin", 0x00000, 0x10000, CRC(00abbe0c) SHA1(bacf17444abfb4f56248ff56e37b0aa2b1a3800d) )
ROM_LOAD16_BYTE( "c7.bin", 0x00001, 0x10000, CRC(44736281) SHA1(1d6da95ef96d9c02aea70791e1cb87b70097d5ed) )
ROM_LOAD16_BYTE( "c8.bin", 0x20000, 0x10000, CRC(d763a47c) SHA1(146d8082a404b6eddaf2dc9ba41a997949c17f8a) )
@@ -831,33 +839,17 @@ ROM_START( cabalbl2 )
ROM_END
-
-void cabal_state::seibu_sound_bootleg(const char *cpu,int length)
-{
- address_space &space = machine().device(cpu)->memory().space(AS_PROGRAM);
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, length);
- UINT8 *rom = memregion(cpu)->base();
-
- space.set_decrypted_region(0x0000, (length < 0x10000) ? (length - 1) : 0x1fff, decrypt);
-
- memcpy(decrypt, rom+length, length);
-
- if (length > 0x10000)
- membank("bank1")->configure_decrypted_entries(0, (length - 0x10000) / 0x8000, decrypt + 0x10000, 0x8000);
-}
-
-
-
DRIVER_INIT_MEMBER(cabal_state,cabal)
{
- m_seibu_sound->decrypt("audiocpu",0x2000);
m_adpcm1->decrypt("adpcm1");
m_adpcm2->decrypt("adpcm2");
}
DRIVER_INIT_MEMBER(cabal_state,cabalbl2)
{
- seibu_sound_bootleg("audiocpu",0x2000);
+ UINT8 *decrypt = m_seibu_sound->get_custom_decrypt();
+ memcpy(decrypt, memregion("audiocpu")->base()+0x2000, 0x2000);
+ memcpy(decrypt+0x8000, memregion("audiocpu")->base()+0x8000, 0x8000);
m_adpcm1->decrypt("adpcm1");
m_adpcm2->decrypt("adpcm2");
}
@@ -866,7 +858,7 @@ DRIVER_INIT_MEMBER(cabal_state,cabalbl2)
GAME( 1988, cabal, 0, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation", "Cabal (World, Joystick version)", GAME_SUPPORTS_SAVE )
GAME( 1989, cabala, cabal, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation (Alpha Trading license)", "Cabal (Alpha Trading)", GAME_SUPPORTS_SAVE ) // korea?
GAME( 1988, cabalbl, cabal, cabalbl, cabalbl, driver_device, 0, ROT0, "bootleg (Red Corporation)", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
-GAME( 1988, cabalbl2,cabal, cabal, cabalj, cabal_state, cabalbl2,ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1988, cabalbl2,cabal, cabalbl2,cabalj, cabal_state, cabalbl2,ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", GAME_SUPPORTS_SAVE )
GAME( 1988, cabalus, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 1, Trackball version)", GAME_SUPPORTS_SAVE )
GAME( 1988, cabalus2,cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 2, Trackball version)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/calorie.c b/src/mame/drivers/calorie.c
index effedfd8a5f..a5921c03dd8 100644
--- a/src/mame/drivers/calorie.c
+++ b/src/mame/drivers/calorie.c
@@ -94,7 +94,8 @@ public:
m_sprites(*this, "sprites"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_fg_ram;
@@ -121,6 +122,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
@@ -256,7 +258,7 @@ WRITE8_MEMBER(calorie_state::bogus_w)
static ADDRESS_MAP_START( calorie_map, AS_PROGRAM, 8, calorie_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xcfff) AM_RAM
+ AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("ram")
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(fg_ram_w) AM_SHARE("fg_ram")
AM_RANGE(0xd800, 0xdbff) AM_RAM AM_SHARE("sprites")
AM_RANGE(0xdc00, 0xdcff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
@@ -269,6 +271,11 @@ static ADDRESS_MAP_START( calorie_map, AS_PROGRAM, 8, calorie_state )
AM_RANGE(0xf800, 0xf800) AM_WRITE(soundlatch_byte_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, calorie_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROM
+ AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("ram")
+ADDRESS_MAP_END
static ADDRESS_MAP_START( calorie_sound_map, AS_PROGRAM, 8, calorie_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
@@ -447,6 +454,7 @@ static MACHINE_CONFIG_START( calorie, calorie_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,4000000) /* 4 MHz */
MCFG_CPU_PROGRAM_MAP(calorie_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", calorie_state, irq0_line_hold)
MCFG_CPU_ADD("audiocpu", Z80,3000000) /* 3 MHz */
@@ -555,13 +563,13 @@ ROM_END
DRIVER_INIT_MEMBER(calorie_state,calorie)
{
- sega_317_0004_decode(machine(), "maincpu");
+ // 317-0004
+ sega_decode_317(memregion("maincpu")->base(), m_decrypted_opcodes, 0);
}
DRIVER_INIT_MEMBER(calorie_state,calorieb)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base() + 0x10000);
+ memcpy(m_decrypted_opcodes, memregion("maincpu")->base() + 0x10000, 0x8000);
}
diff --git a/src/mame/drivers/cbasebal.c b/src/mame/drivers/cbasebal.c
index d3b7bd38cb1..41034ad2d68 100644
--- a/src/mame/drivers/cbasebal.c
+++ b/src/mame/drivers/cbasebal.c
@@ -98,6 +98,11 @@ static ADDRESS_MAP_START( cbasebal_map, AS_PROGRAM, 8, cbasebal_state )
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cbasebal_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( cbasebal_portmap, AS_IO, 8, cbasebal_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(cbasebal_bankswitch_w)
@@ -257,6 +262,7 @@ static MACHINE_CONFIG_START( cbasebal, cbasebal_state )
MCFG_CPU_ADD("maincpu", Z80, 6000000) /* ??? */
MCFG_CPU_PROGRAM_MAP(cbasebal_map)
MCFG_CPU_IO_MAP(cbasebal_portmap)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cbasebal_state, irq0_line_hold) /* ??? */
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
@@ -330,7 +336,13 @@ ROM_END
DRIVER_INIT_MEMBER(cbasebal_state,cbasebal)
{
- pang_decode(machine());
+ UINT8 *src = memregion("maincpu")->base();
+ int size = memregion("maincpu")->bytes();
+ UINT8 *dst = auto_alloc_array(machine(), UINT8, size);
+ pang_decode(src, dst, size);
+ membank("bank1")->configure_entries(0, 16, src + 0x10000, 0x4000);
+ membank("bank0d")->set_base(dst);
+ membank("bank1d")->configure_entries(0, 16, dst + 0x10000, 0x4000);
}
diff --git a/src/mame/drivers/cclimber.c b/src/mame/drivers/cclimber.c
index b3162d5b532..6cfd1382651 100644
--- a/src/mame/drivers/cclimber.c
+++ b/src/mame/drivers/cclimber.c
@@ -254,8 +254,10 @@ WRITE8_MEMBER(cclimber_state::toprollr_rombank_w)
m_toprollr_rombank &= ~(1 << offset);
m_toprollr_rombank |= (data & 1) << offset;
- if (m_toprollr_rombank < 3)
+ if (m_toprollr_rombank < 3) {
membank("bank1")->set_entry(m_toprollr_rombank);
+ membank("bank1d")->set_entry(m_toprollr_rombank);
+ }
}
MACHINE_RESET_MEMBER(cclimber_state,cclimber)
@@ -299,6 +301,10 @@ static ADDRESS_MAP_START( cclimber_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cclimber_state )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( cannonb_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x5045, 0x505f) AM_WRITENOP /* do not errorlog this */
AM_RANGE(0x0000, 0x5fff) AM_ROM
@@ -339,6 +345,10 @@ static ADDRESS_MAP_START( swimmer_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1")
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("bgcolor")
AM_RANGE(0xb880, 0xb880) AM_READ_PORT("SYSTEM")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( guzzler_map, AS_PROGRAM, 8, cclimber_state )
+ AM_IMPORT_FROM(swimmer_map)
AM_RANGE(0xc000, 0xc7ff) AM_RAM /* ??? used by Guzzler */
AM_RANGE(0xe000, 0xffff) AM_ROM /* Guzzler only */
ADDRESS_MAP_END
@@ -367,7 +377,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x0000, 0x5fff) AM_ROMBANK("bank1")
- AM_RANGE(0x6000, 0x6bff) AM_RAM
+ AM_RANGE(0x6000, 0x6bff) AM_RAM AM_SHARE("ram")
AM_RANGE(0x8800, 0x88ff) AM_RAM AM_SHARE("bigspriteram")
AM_RANGE(0x8c00, 0x8fff) AM_RAM AM_SHARE("bg_videoram")
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("videoram")
@@ -386,6 +396,10 @@ static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0xc000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( toprollr_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cclimber_state )
+ AM_RANGE(0x0000, 0x5fff) AM_ROMBANK("bank1d")
+ AM_RANGE(0xc000, 0xffff) AM_ROM AM_REGION("maincpu", 0xc000)
+ADDRESS_MAP_END
static ADDRESS_MAP_START( cclimber_portmap, AS_IO, 8, cclimber_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
@@ -1019,6 +1033,11 @@ static MACHINE_CONFIG_DERIVED( cclimber, root )
MCFG_CCLIMBER_AUDIO_ADD("cclimber_audio")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( cclimberx, cclimber )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( cannonb, cclimber )
@@ -1037,6 +1056,7 @@ static MACHINE_CONFIG_DERIVED( yamato, root )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(yamato_map)
MCFG_CPU_IO_MAP(yamato_portmap)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_ADD("audiocpu", Z80, 3072000) /* 3.072 MHz ? */
MCFG_CPU_PROGRAM_MAP(yamato_audio_map)
@@ -1065,6 +1085,7 @@ static MACHINE_CONFIG_DERIVED( toprollr, cclimber )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(toprollr_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(toprollr_decrypted_opcodes_map)
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", toprollr)
@@ -1114,6 +1135,12 @@ static MACHINE_CONFIG_START( swimmer, cclimber_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( guzzler, swimmer )
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(guzzler_map)
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -1122,7 +1149,7 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( cclimber )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "cc11", 0x0000, 0x1000, CRC(217ec4ff) SHA1(334604c3a051d57440a9d0bfc34b809418ef1d2d) )
ROM_LOAD( "cc10", 0x1000, 0x1000, CRC(b3c26cef) SHA1(f52cb5482c12a9c5fb56e2e2aec7cab0ed23e5a5) )
ROM_LOAD( "cc09", 0x2000, 0x1000, CRC(6db0879c) SHA1(c0ba1976c1dcd6edadd78073173a26851ae8dd4f) )
@@ -1154,7 +1181,7 @@ ROM_START( cclimber )
ROM_END
ROM_START( cclimberj )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "cc11j.bin", 0x0000, 0x1000, CRC(89783959) SHA1(948fa88fcb9e3797b9c10934d36cf6a55cb590fe) )
ROM_LOAD( "cc10j.bin", 0x1000, 0x1000, CRC(14eda506) SHA1(4bc55b4c4ec197952b05ad32584f15f0383cc2df) )
ROM_LOAD( "cc09j.bin", 0x2000, 0x1000, CRC(26489069) SHA1(9be4d4a22dd334e619416e6c846a05003c0d687e) )
@@ -1186,7 +1213,7 @@ ROM_START( cclimberj )
ROM_END
ROM_START( ccboot )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "m11.bin", 0x0000, 0x1000, CRC(5efbe180) SHA1(e0c24f21d563da075eb5019d0e76cb01c2598c7a) )
ROM_LOAD( "m10.bin", 0x1000, 0x1000, CRC(be2748c7) SHA1(ae66bc4e5e02bf9944a3ee4b0d2dec073f732260) )
ROM_LOAD( "cc09j.bin", 0x2000, 0x1000, CRC(26489069) SHA1(9be4d4a22dd334e619416e6c846a05003c0d687e) )
@@ -1219,7 +1246,7 @@ ROM_START( ccboot )
ROM_END
ROM_START( ccboot2 )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "11.4k", 0x0000, 0x1000, CRC(b2b17e24) SHA1(1242d64242b3a6fe099457d155ebc508e5482818) )
ROM_LOAD( "10.4j", 0x1000, 0x1000, CRC(8382bc0f) SHA1(2390ee2ec08a074c7bc4b9c7750b979a1d3a8a67) )
ROM_LOAD( "cc09j.bin", 0x2000, 0x1000, CRC(26489069) SHA1(9be4d4a22dd334e619416e6c846a05003c0d687e) )
@@ -1252,7 +1279,7 @@ ROM_START( ccboot2 )
ROM_END
ROM_START( ccbootmr ) /* Model Racing bootleg */
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "211.k4", 0x0000, 0x1000, CRC(b2b17e24) SHA1(1242d64242b3a6fe099457d155ebc508e5482818) )
ROM_LOAD( "210.j4", 0x1000, 0x1000, CRC(8382bc0f) SHA1(2390ee2ec08a074c7bc4b9c7750b979a1d3a8a67) )
ROM_LOAD( "209.f4", 0x2000, 0x1000, CRC(26489069) SHA1(9be4d4a22dd334e619416e6c846a05003c0d687e) )
@@ -1286,7 +1313,7 @@ ROM_END
ROM_START( cclimbroper )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "cc5-2532.cpu", 0x0000, 0x1000, CRC(f94b96e8) SHA1(b13dceb0a73d1a4eeb9c3e2d2307f0c82c365393))
ROM_LOAD( "cc4-2532.cpu", 0x1000, 0x1000, CRC(4b1abea6) SHA1(eae7c96fc0b64d313bed4a75bd6d397b37eaac7e) )
ROM_LOAD( "cc3-2532.cpu", 0x2000, 0x1000, CRC(5612bb3c) SHA1(213846bb3393467260f401b00b821cbab7ac9636) )
@@ -1323,7 +1350,7 @@ ROM_END
/* Sets below are Crazy Kong Part II and have an extra screen in attract mode, showing a caged Kong and copyright */
ROM_START( ckongpt2 )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "7.5d", 0x0000, 0x1000, CRC(b27df032) SHA1(57f9be139c610405e3c2fddd7093dfb1277e450e) )
ROM_LOAD( "8.5e", 0x1000, 0x1000, CRC(5dc1aaba) SHA1(42b9e5946ffce7c156d114bde68f37c2c34853c4) )
ROM_LOAD( "9.5h", 0x2000, 0x1000, CRC(c9054c94) SHA1(1aa08d2501ee620759fd5c111e12f6d432c25294) )
@@ -1352,7 +1379,7 @@ ROM_START( ckongpt2 )
ROM_END
ROM_START( ckongpt2a )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "7.5d", 0x0000, 0x1000, CRC(b27df032) SHA1(57f9be139c610405e3c2fddd7093dfb1277e450e) )
ROM_LOAD( "8.5e", 0x1000, 0x1000, CRC(5dc1aaba) SHA1(42b9e5946ffce7c156d114bde68f37c2c34853c4) )
ROM_LOAD( "9.5h", 0x2000, 0x1000, CRC(c9054c94) SHA1(1aa08d2501ee620759fd5c111e12f6d432c25294) )
@@ -1381,7 +1408,7 @@ ROM_START( ckongpt2a )
ROM_END
ROM_START( ckongpt2j )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "7.5d", 0x0000, 0x1000, CRC(b27df032) SHA1(57f9be139c610405e3c2fddd7093dfb1277e450e) )
ROM_LOAD( "8.5e", 0x1000, 0x1000, CRC(5dc1aaba) SHA1(42b9e5946ffce7c156d114bde68f37c2c34853c4) )
ROM_LOAD( "9.5h", 0x2000, 0x1000, CRC(c9054c94) SHA1(1aa08d2501ee620759fd5c111e12f6d432c25294) )
@@ -1410,7 +1437,7 @@ ROM_START( ckongpt2j )
ROM_END
ROM_START( ckongpt2jeu )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "7.5d", 0x0000, 0x1000, CRC(b27df032) SHA1(57f9be139c610405e3c2fddd7093dfb1277e450e) )
ROM_LOAD( "8.5e", 0x1000, 0x1000, CRC(5dc1aaba) SHA1(42b9e5946ffce7c156d114bde68f37c2c34853c4) )
ROM_LOAD( "9.5h", 0x2000, 0x1000, CRC(c9054c94) SHA1(1aa08d2501ee620759fd5c111e12f6d432c25294) )
@@ -1440,7 +1467,7 @@ ROM_END
ROM_START( ckongpt2b )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "d05-7.rom", 0x0000, 0x1000, CRC(5d96ee9a) SHA1(f531d251fd3469edd3b5b5e7c26ff9cef7006ce8) )
ROM_LOAD( "f05-8.rom", 0x1000, 0x1000, CRC(74a8435b) SHA1(465ad96009d3ba939eee13ba0d5fd6d9dec118bc) )
ROM_LOAD( "h05-9.rom", 0x2000, 0x1000, CRC(e06ca575) SHA1(cd5a32fac614902e136e522ac188616c72d65571) )
@@ -1473,7 +1500,7 @@ ROM_END
/* Sets below are 'Crazy Kong' without the extra Falcon screen or Pt. 2 subtitle, they also have worse colours */
ROM_START( ckong )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "falcon7", 0x0000, 0x1000, CRC(2171cac3) SHA1(7b18bfe44c32fb64b675bbbe2136344522c79b09) )
ROM_LOAD( "falcon8", 0x1000, 0x1000, CRC(88b83ff7) SHA1(4afc494cc264aaa4614da6aed02ce062d9c20850) )
ROM_LOAD( "falcon9", 0x2000, 0x1000, CRC(cff2af47) SHA1(1757428cefad13855a623162101ec01c04006c94) )
@@ -1503,7 +1530,7 @@ ROM_END
ROM_START( ckongo )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "o55a-1", 0x0000, 0x1000, CRC(8bfb4623) SHA1(1b8e12d1f337756bbfa9c3d736db7513d571c1b3) )
ROM_LOAD( "o55a-2", 0x1000, 0x1000, CRC(9ae8089b) SHA1(e50864bb77dce24ba6d10c4fc16ccaa593962442) )
ROM_LOAD( "o55a-3", 0x2000, 0x1000, CRC(e82b33c8) SHA1(27befba696cd1a9453fb49e8e4ddd46eab41b30d) )
@@ -1537,7 +1564,7 @@ ROM_START( ckongo )
ROM_END
ROM_START( ckongalc )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "ck7.bin", 0x0000, 0x1000, CRC(2171cac3) SHA1(7b18bfe44c32fb64b675bbbe2136344522c79b09) )
ROM_LOAD( "ck8.bin", 0x1000, 0x1000, CRC(88b83ff7) SHA1(4afc494cc264aaa4614da6aed02ce062d9c20850) )
ROM_LOAD( "ck9.bin", 0x2000, 0x1000, CRC(cff2af47) SHA1(1757428cefad13855a623162101ec01c04006c94) )
@@ -1566,7 +1593,7 @@ ROM_START( ckongalc )
ROM_END
ROM_START( bigkong )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "dk01f7_2532.d5", 0x0000, 0x1000, CRC(4c9102f1) SHA1(845b48fa1e6ad82dc797520f7ff7daffc1a47c39) )
ROM_LOAD( "dk02f8_2532.f5", 0x1000, 0x1000, CRC(1683e9ae) SHA1(4690c8be70c0cc0e7d78d2ff205eed3f4ead7278) )
ROM_LOAD( "dk03f9_2532.h5", 0x2000, 0x1000, CRC(073eea32) SHA1(de7889df04f8a279a0864748298e5ccdce0578f1) )
@@ -1595,7 +1622,7 @@ ROM_START( bigkong )
ROM_END
ROM_START( monkeyd )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "ck7.bin", 0x0000, 0x1000, CRC(2171cac3) SHA1(7b18bfe44c32fb64b675bbbe2136344522c79b09) )
ROM_LOAD( "ck8.bin", 0x1000, 0x1000, CRC(88b83ff7) SHA1(4afc494cc264aaa4614da6aed02ce062d9c20850) )
ROM_LOAD( "ck9.bin", 0x2000, 0x1000, CRC(cff2af47) SHA1(1757428cefad13855a623162101ec01c04006c94) )
@@ -1766,7 +1793,7 @@ Dip Switch - Donkey King
ROM_START( dking )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "d11.r2", 0x0800, 0x0800, CRC(f7cace41) SHA1(981dbb1cddd66a0cbc8fe147172ffe7eb5b7fa21) )
ROM_CONTINUE( 0x0000, 0x800 )
ROM_LOAD( "d7.1n", 0x1000, 0x1000, CRC(fe89dea4) SHA1(c39372ebe9950808ebc1ff7909c291496b206026) )
@@ -1798,7 +1825,7 @@ ROM_END
ROM_START( ckongdks )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "ck13.bin", 0x0800, 0x0800, CRC(f97ba8ae) SHA1(ae4a578ad77a8d3252f2f99a1afa6f38bc00471e) ) // 97.509766%
ROM_CONTINUE( 0x0000, 0x0800 )
ROM_LOAD( "ck09.bin", 0x1000, 0x1000, CRC(fe89dea4) SHA1(c39372ebe9950808ebc1ff7909c291496b206026) )
@@ -1835,7 +1862,7 @@ ROM_END
of Silver Land so I'm loading the River Patrol GFX instead as they fit better
*/
ROM_START( rpatrol )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "sci1.bin", 0x0000, 0x1000, CRC(33b01c90) SHA1(9c8da6dd963bfb0544ef99b8fdedcf86c32cdb6b) )
ROM_LOAD( "sci2.bin", 0x1000, 0x1000, CRC(03f53340) SHA1(35336945f4b634fc4c7791ac9c9e6643c8cd8006) )
ROM_LOAD( "sci3.bin", 0x2000, 0x1000, CRC(8fa300df) SHA1(5c3ba1ef6c1ce8df437b4fa464293208630b5e8d) )
@@ -1886,7 +1913,7 @@ ROM_START( rpatrol )
ROM_END
ROM_START( rpatrolb )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "rp1.4l", 0x0000, 0x1000, CRC(bfd7ae7a) SHA1(a06d1cc2674ed40d0bfa67dd6d724964c1e40600) )
ROM_LOAD( "rp2.4j", 0x1000, 0x1000, CRC(03f53340) SHA1(35336945f4b634fc4c7791ac9c9e6643c8cd8006) )
ROM_LOAD( "rp3.4f", 0x2000, 0x1000, CRC(8fa300df) SHA1(5c3ba1ef6c1ce8df437b4fa464293208630b5e8d) )
@@ -1917,7 +1944,7 @@ ROM_START( rpatrolb )
ROM_END
ROM_START( silvland )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "7.2r", 0x0000, 0x1000, CRC(57e6be62) SHA1(c1d47970f8209256c9ccd6512b921dec6c276998) )
ROM_LOAD( "8.1n", 0x1000, 0x1000, CRC(bbb2b287) SHA1(93cd4ebe238c189c80be8b8ab1ec2649256dd6ea) )
ROM_LOAD( "rp3.4f", 0x2000, 0x1000, CRC(8fa300df) SHA1(5c3ba1ef6c1ce8df437b4fa464293208630b5e8d) )
@@ -1990,7 +2017,7 @@ ROM_START( cannonb )
ROM_END
ROM_START( cannonb2 )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "cb1.bin", 0x0000, 0x1000, CRC(7a3cba7c) SHA1(08b8b356fdbe642e80d42b5ab4164a1bd6ad93ba) )
ROM_LOAD( "cb2.bin", 0x1000, 0x1000, CRC(58ef3118) SHA1(51ae36c21147e99d4060034520f6eebf3210937c) )
ROM_LOAD( "cb3.bin", 0x2000, 0x1000, CRC(e18a836b) SHA1(19b90a55db82914c5db18486e05d9f59aba1b442) )
@@ -2021,7 +2048,7 @@ ROM_START( cannonb2 )
ROM_END
ROM_START( cannonb3 )
- ROM_REGION( 0x11000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "1 pos e5 2532.bin", 0x0000, 0x1000, CRC(4b482e80) SHA1(4c0e52016ed760d399e8d49f600d38c1b6ccf256) )
ROM_LOAD( "2 pos f5 2532.bin", 0x1000, 0x1000, CRC(1fa050af) SHA1(00244e19aee14ce980697136cddb6cb72a4d80da) )
ROM_LOAD( "3 pos h5 2532.bin", 0x2000, 0x1000, CRC(e18a836b) SHA1(19b90a55db82914c5db18486e05d9f59aba1b442) )
@@ -2063,7 +2090,7 @@ ROM_END
*/
ROM_START( bagmanf )
- ROM_REGION( 0x11000, "maincpu", 0 )
+ ROM_REGION( 0x6000, "maincpu", 0 )
ROM_LOAD( "01.d5.bin", 0x0000, 0x1000, CRC(e0156191) SHA1(bb5f16d49fbe48f3bac118acd1fea51ec4bc5355) )
ROM_LOAD( "02.f5.bin", 0x1000, 0x1000, CRC(7b758982) SHA1(c8460023b43fed4aca9c6b987faea334832c5e30) )
ROM_LOAD( "03.h5.bin", 0x2000, 0x1000, CRC(302a077b) SHA1(916c4a6ea1e631cc72bdb91ff9d263dcbaf08bb2) )
@@ -2104,7 +2131,7 @@ ROM_END
ROM_START( swimmer )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "sw1", 0x0000, 0x1000, CRC(f12481e7) SHA1(4e8ee509043fd57ec1579594f0b2c543f270bead) )
ROM_LOAD( "sw2", 0x1000, 0x1000, CRC(a0b6fdd2) SHA1(7d3603de6c282224869824c7572868fc85599ea2) )
ROM_LOAD( "sw3", 0x2000, 0x1000, CRC(ec93d7de) SHA1(e225c6b98eb3c32825c1cc1fcf69dec7e340460c) )
@@ -2114,7 +2141,7 @@ ROM_START( swimmer )
ROM_LOAD( "sw7", 0x6000, 0x1000, CRC(37efb64e) SHA1(0ed4d678895c17b37df605990acd096c538e3675) )
ROM_LOAD( "sw8", 0x7000, 0x1000, CRC(33d6001e) SHA1(749b746d018e74e364fd6974e4522c8a18915774) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "sw12.4k", 0x0000, 0x1000, CRC(2eee9bcb) SHA1(ceafdf750a8af0c1c9abbbf437c3e9d9ae09f72b) )
ROM_REGION( 0x3000, "gfx1", 0 )
@@ -2137,7 +2164,7 @@ ROM_START( swimmer )
ROM_END
ROM_START( swimmera )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "swa1", 0x0000, 0x1000, CRC(42c2b6c5) SHA1(13688e1ee08308b13ead5af7b4f65043dae4e40f) )
ROM_LOAD( "swa2", 0x1000, 0x1000, CRC(49bac195) SHA1(a5d2cc2cdd10003f69014c4799f5f59e47a44260) )
ROM_LOAD( "swa3", 0x2000, 0x1000, CRC(a6d8cb01) SHA1(80ab0ffaee6e0edf19b767229865722c2af6112c) )
@@ -2147,7 +2174,7 @@ ROM_START( swimmera )
ROM_LOAD( "swa7", 0x6000, 0x1000, CRC(7090e5ee) SHA1(d1e0ca38c3d1e4a7b7efa3696e47fb36ad3f8aa0) )
ROM_LOAD( "swa8", 0x7000, 0x1000, CRC(ab86efa9) SHA1(5b5a80ae285c7e9f4c51e646116edf789d4dba39) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "sw12.4k", 0x0000, 0x1000, CRC(2eee9bcb) SHA1(ceafdf750a8af0c1c9abbbf437c3e9d9ae09f72b) )
ROM_REGION( 0x3000, "gfx1", 0 )
@@ -2170,7 +2197,7 @@ ROM_START( swimmera )
ROM_END
ROM_START( swimmerb )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "sw1.9l", 0x0000, 0x1000, CRC(b045be08) SHA1(52187e1daebec521a98157f22960637393e40e62) )
ROM_LOAD( "sw2.9k", 0x1000, 0x1000, CRC(163d65e5) SHA1(b505f05af96f241285f0f7082ed03fa07bbde7de) )
ROM_LOAD( "sw3.9j", 0x2000, 0x1000, CRC(631d74e9) SHA1(b6adba9445264de80f5daf33dad1c90b23617648) )
@@ -2180,7 +2207,7 @@ ROM_START( swimmerb )
ROM_LOAD( "sw7.9c", 0x6000, 0x1000, CRC(88266f2e) SHA1(4ad15f9ba7b45a6c1c3637f8d0fd8be9c04b495f) )
ROM_LOAD( "sw8.9a", 0x7000, 0x1000, CRC(191a16e4) SHA1(75d3f49e2f4ea04d3a7cc88662c023768bf48365) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "sw12.4k", 0x0000, 0x1000, CRC(2eee9bcb) SHA1(ceafdf750a8af0c1c9abbbf437c3e9d9ae09f72b) )
ROM_REGION( 0x3000, "gfx1", 0 )
@@ -2210,7 +2237,7 @@ ROM_START( guzzler )
ROM_LOAD( "guzz-04.bin", 0x6000, 0x2000, CRC(45be42f5) SHA1(578943afdb6ceca34ca7c19c2fd1164ca3aa57bd) )
ROM_LOAD( "guzz-16.bin", 0xe000, 0x2000, CRC(61ee00b7) SHA1(ea8516c8dfb2de32a8034f94c7d0c086e3596740) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "guzz-12.bin", 0x0000, 0x1000, CRC(f3754d9e) SHA1(bb30832aba4e82ab0ecce40fc1223d9771ff7dd2) )
ROM_REGION( 0x3000, "gfx1", 0 )
@@ -2241,7 +2268,7 @@ ROM_START( guzzlers ) /* Swimmer Conversion, 1k vs 2k romsize in maincpu */
ROM_LOAD( "guzz8.a9", 0x7000, 0x1000, CRC(8d44f5f8) SHA1(957f1b880f6f815ac31c1a37c40cdff75dd119cf) )
ROM_LOAD( "guzz-16.bin", 0xe000, 0x2000, CRC(61ee00b7) SHA1(ea8516c8dfb2de32a8034f94c7d0c086e3596740) ) // 16.
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "guzz-12.bin", 0x0000, 0x1000, CRC(f3754d9e) SHA1(bb30832aba4e82ab0ecce40fc1223d9771ff7dd2) ) // GUZZ12.L4
ROM_REGION( 0x3000, "gfx1", 0 ) /* chars */
@@ -2261,14 +2288,14 @@ ROM_START( guzzlers ) /* Swimmer Conversion, 1k vs 2k romsize in maincpu */
ROM_END
ROM_START( yamato )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "2.5de", 0x0000, 0x2000, CRC(20895096) SHA1(af76786e3c519e710899f143d46c53087e9817c7) )
ROM_LOAD( "3.5f", 0x2000, 0x2000, CRC(57a696f9) SHA1(28ea80fb100ac92295fc3eb318617d7cb014408d) )
ROM_LOAD( "4.5jh", 0x4000, 0x2000, CRC(59a468e8) SHA1(a79cdee6efefd87a356cc8d710f8050bc12e07c3) )
/* hole at 6000-6fff */
ROM_LOAD( "11.5a", 0x7000, 0x1000, CRC(35987485) SHA1(1f0cb545bbd52982cbf801bc1dd2c4087af2f5f7) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x800, "audiocpu", 0 )
ROM_LOAD( "1.5v", 0x0000, 0x0800, CRC(3aad9e3c) SHA1(37b0414b265397881bb45b166ecab85880d1358d) )
ROM_REGION( 0x4000, "gfx1", 0 )
@@ -2292,14 +2319,14 @@ ROM_START( yamato )
ROM_END
ROM_START( yamato2 )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "2-2.5de", 0x0000, 0x2000, CRC(93da1d52) SHA1(21b72856ebbd969e4e075b52719e6acdbd1bc4c5) )
ROM_LOAD( "3-2.5f", 0x2000, 0x2000, CRC(31e73821) SHA1(e582c9fcea1b29d43f65b6aa67e1895c38d2736c) )
ROM_LOAD( "4-2.5jh", 0x4000, 0x2000, CRC(fd7bcfc3) SHA1(5037170cb3a9824794e90d74def92b0b25d45caa) )
/* hole at 6000-6fff */
/* 7000-7fff not present here */
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x8000, "audiocpu", 0 )
ROM_LOAD( "1.5v", 0x0000, 0x0800, CRC(3aad9e3c) SHA1(37b0414b265397881bb45b166ecab85880d1358d) )
ROM_REGION( 0x4000, "gfx1", 0 )
@@ -2323,7 +2350,7 @@ ROM_START( yamato2 )
ROM_END
ROM_START( toprollr )
- ROM_REGION( 0x10000*2, "maincpu", 0 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "10.k3", 0xc000, 0x2000, CRC(1e8914a6) SHA1(ec17f185f890d04ce75a5d8edf8b32da60e7a8d8) )
ROM_LOAD( "11.l3", 0xe000, 0x2000, CRC(b20a9fa2) SHA1(accd3296447eca002b0808e7b02832f5e35407e8) )
@@ -2366,7 +2393,29 @@ ROM_END
DRIVER_INIT_MEMBER(cclimber_state,yamato)
{
- yamato_decode(machine(),"maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...0...1...1 */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...0...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...0...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...0...0...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...1...1...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x6000, convtable);
save_item(NAME(m_yamato_p0));
save_item(NAME(m_yamato_p1));
@@ -2375,7 +2424,36 @@ DRIVER_INIT_MEMBER(cclimber_state,yamato)
DRIVER_INIT_MEMBER(cclimber_state,toprollr)
{
- toprollr_decode(machine(), "maincpu", "user1");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...0...1...1 */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...0...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...0...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...0...0...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...1...1...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
+ };
+
+ UINT8 *opcodes = auto_alloc_array(machine(), UINT8, 0x6000*3);
+ sega_decode(memregion("user1")->base(), opcodes, 0, convtable, 3, 0x6000);
+
+ membank("bank1")->configure_entries(0, 3, memregion("user1")->base(), 0x6000);
+ membank("bank1d")->configure_entries(0, 3, opcodes, 0x6000);
+
+ membank("bank1")->set_entry(0);
+ membank("bank1d")->set_entry(0);
save_item(NAME(m_toprollr_rombank));
}
@@ -2395,12 +2473,12 @@ DRIVER_INIT_MEMBER(cclimber_state,dking)
}
-GAME( 1980, cclimber, 0, cclimber, cclimber, cclimber_state, cclimber, ROT0, "Nichibutsu", "Crazy Climber (US)", GAME_SUPPORTS_SAVE )
-GAME( 1980, cclimberj, cclimber, cclimber, cclimberj, cclimber_state,cclimberj,ROT0, "Nichibutsu", "Crazy Climber (Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1980, ccboot, cclimber, cclimber, cclimber, cclimber_state, cclimberj,ROT0, "bootleg", "Crazy Climber (bootleg set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1980, ccboot2, cclimber, cclimber, cclimber, cclimber_state, cclimberj,ROT0, "bootleg", "Crazy Climber (bootleg set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1980, ccbootmr, cclimber, cclimber, cclimber, cclimber_state, cclimberj,ROT0, "bootleg (Model Racing)", "Crazy Climber (Model Racing bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1980, cclimbroper, cclimber, cclimber, cclimber, driver_device, 0, ROT0, "bootleg (Operamatic)", "Crazy Climber (Spanish, Operamatic bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1980, cclimber, 0, cclimberx, cclimber, cclimber_state, cclimber, ROT0, "Nichibutsu", "Crazy Climber (US)", GAME_SUPPORTS_SAVE )
+GAME( 1980, cclimberj, cclimber, cclimberx, cclimberj, cclimber_state,cclimberj,ROT0, "Nichibutsu", "Crazy Climber (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1980, ccboot, cclimber, cclimberx, cclimber, cclimber_state, cclimberj,ROT0, "bootleg", "Crazy Climber (bootleg set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1980, ccboot2, cclimber, cclimberx, cclimber, cclimber_state, cclimberj,ROT0, "bootleg", "Crazy Climber (bootleg set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1980, ccbootmr, cclimber, cclimberx, cclimber, cclimber_state, cclimberj,ROT0, "bootleg (Model Racing)", "Crazy Climber (Model Racing bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1980, cclimbroper, cclimber, cclimber, cclimber, driver_device, 0, ROT0, "bootleg (Operamatic)", "Crazy Climber (Spanish, Operamatic bootleg)", GAME_SUPPORTS_SAVE )
/* these sets have ugly colours, no extra attract screen, and no graphics for the extra attract screen in the BG roms
- there is a Falcon logo in the text roms which is unused
@@ -2441,8 +2519,8 @@ GAME( 1982, swimmer, 0, swimmer, swimmer, driver_device, 0,
GAME( 1982, swimmera, swimmer, swimmer, swimmer, driver_device, 0, ROT0, "Tehkan", "Swimmer (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1982, swimmerb, swimmer, swimmer, swimmerb, driver_device, 0, ROT0, "Tehkan", "Swimmer (set 3)", GAME_SUPPORTS_SAVE )
-GAME( 1983, guzzler, 0, swimmer, guzzler, driver_device, 0, ROT90, "Tehkan", "Guzzler", GAME_SUPPORTS_SAVE )
-GAME( 1983, guzzlers, guzzler, swimmer, guzzler, driver_device, 0, ROT90, "Tehkan", "Guzzler (Swimmer Conversion)", GAME_SUPPORTS_SAVE )
+GAME( 1983, guzzler, 0, guzzler, guzzler, driver_device, 0, ROT90, "Tehkan", "Guzzler", GAME_SUPPORTS_SAVE )
+GAME( 1983, guzzlers, guzzler, guzzler, guzzler, driver_device, 0, ROT90, "Tehkan", "Guzzler (Swimmer Conversion)", GAME_SUPPORTS_SAVE )
GAME( 1983, yamato, 0, yamato, yamato, cclimber_state, yamato, ROT90, "Sega", "Yamato (US)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1983, yamato2, yamato, yamato, yamato, cclimber_state, yamato, ROT90, "Sega", "Yamato (World?)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/chinsan.c b/src/mame/drivers/chinsan.c
index 33031e08dac..fca2227d2be 100644
--- a/src/mame/drivers/chinsan.c
+++ b/src/mame/drivers/chinsan.c
@@ -87,6 +87,7 @@ public:
required_device<msm5205_device> m_adpcm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ UINT8 *m_decrypted_opcodes;
};
@@ -139,6 +140,7 @@ UINT32 chinsan_state::screen_update_chinsan(screen_device &screen, bitmap_ind16
WRITE8_MEMBER(chinsan_state::ctrl_w)
{
membank("bank1")->set_entry(data >> 6);
+ membank("bank1d")->set_entry(data >> 6);
}
WRITE8_MEMBER(chinsan_state::ym_port_w1)
@@ -248,6 +250,11 @@ static ADDRESS_MAP_START( chinsan_map, AS_PROGRAM, 8, chinsan_state )
AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE("video")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, chinsan_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( chinsan_io, AS_IO, 8, chinsan_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(chinsan_port00_w)
@@ -564,7 +571,9 @@ WRITE_LINE_MEMBER(chinsan_state::chin_adpcm_int)
void chinsan_state::machine_start()
{
- membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
+ membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x8000, 0x4000);
+ membank("bank0d")->set_base(m_decrypted_opcodes);
+ membank("bank1d")->configure_entries(0, 4, m_decrypted_opcodes + 0x8000, 0x4000);
save_item(NAME(m_adpcm_idle));
save_item(NAME(m_port_select));
@@ -589,6 +598,7 @@ static MACHINE_CONFIG_START( chinsan, chinsan_state )
MCFG_CPU_ADD("maincpu", Z80,10000000/2) /* ? MHz */
MCFG_CPU_PROGRAM_MAP(chinsan_map)
MCFG_CPU_IO_MAP(chinsan_io)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", chinsan_state, irq0_line_hold)
@@ -633,10 +643,10 @@ MACHINE_CONFIG_END
*************************************/
ROM_START( chinsan )
- ROM_REGION( 0x20000, "maincpu", 0 ) /* encrypted code / data */
+ ROM_REGION( 0x18000, "maincpu", 0 ) /* encrypted code / data */
ROM_LOAD( "mm00.7d", 0x00000, 0x08000, CRC(f7a4414f) SHA1(f65223b2928f610ab97fda2f2c008806cf2420e5) )
ROM_CONTINUE( 0x00000, 0x08000 ) // first half is blank
- ROM_LOAD( "mm01.8d", 0x10000, 0x10000, CRC(c69ddbf5) SHA1(9533365c1761b113174d53a2e23ce6a7baca7dfe) )
+ ROM_LOAD( "mm01.8d", 0x08000, 0x10000, CRC(c69ddbf5) SHA1(9533365c1761b113174d53a2e23ce6a7baca7dfe) )
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
ROM_LOAD( "317-5012.key", 0x0000, 0x2000, CRC(2ecfb132) SHA1(3110ef82080dd7d908cc6bf34c6643f187f90b29) )
@@ -667,7 +677,8 @@ ROM_END
DRIVER_INIT_MEMBER(chinsan_state,chinsan)
{
- mc8123_decrypt_rom(machine(), "maincpu", "user1", "bank1", 4);
+ m_decrypted_opcodes = auto_alloc_array(machine(), UINT8, 0x18000);
+ mc8123_decode(memregion("maincpu")->base(), m_decrypted_opcodes, memregion("user1")->base(), 0x18000);
}
diff --git a/src/mame/drivers/circusc.c b/src/mame/drivers/circusc.c
index 238fd9b002c..1bd909c2d09 100644
--- a/src/mame/drivers/circusc.c
+++ b/src/mame/drivers/circusc.c
@@ -334,7 +334,7 @@ INTERRUPT_GEN_MEMBER(circusc_state::vblank_irq)
static MACHINE_CONFIG_START( circusc, circusc_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, 2048000) /* 2 MHz? */
+ MCFG_CPU_ADD("maincpu", KONAMI1, 2048000) /* 2 MHz? */
MCFG_CPU_PROGRAM_MAP(circusc_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", circusc_state, vblank_irq)
MCFG_WATCHDOG_VBLANK_INIT(8)
@@ -567,7 +567,6 @@ ROM_END
DRIVER_INIT_MEMBER(circusc_state,circusc)
{
- konami1_decode(machine(), "maincpu");
}
diff --git a/src/mame/drivers/commando.c b/src/mame/drivers/commando.c
index 42507a52015..012e6ac0171 100644
--- a/src/mame/drivers/commando.c
+++ b/src/mame/drivers/commando.c
@@ -72,6 +72,10 @@ static ADDRESS_MAP_START( commando_map, AS_PROGRAM, 8, commando_state )
AM_RANGE(0xff80, 0xffff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, commando_state )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, commando_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x47ff) AM_RAM
@@ -245,6 +249,7 @@ static MACHINE_CONFIG_START( commando, commando_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, PHI_MAIN) // ???
MCFG_CPU_PROGRAM_MAP(commando_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", commando_state, commando_interrupt)
MCFG_CPU_ADD("audiocpu", Z80, PHI_B) // 3 MHz
@@ -281,7 +286,7 @@ MACHINE_CONFIG_END
/* ROMs */
ROM_START( commando )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "cm04.9m", 0x0000, 0x8000, CRC(8438b694) SHA1(e154478d8f1b635355bd777370acabe49cb9d309) )
ROM_LOAD( "cm03.8m", 0x8000, 0x4000, CRC(35486542) SHA1(531a85c9e03970ce037be84f2240c2df6f6e3ec1) )
@@ -317,7 +322,7 @@ ROM_START( commando )
ROM_END
ROM_START( commandou )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "u4-f.9m", 0x0000, 0x8000, CRC(a6118935) SHA1(d5811968b23d61e344e151747bcc3c0ed2b9497b) )
ROM_LOAD( "u3-f.8m", 0x8000, 0x4000, CRC(24f49684) SHA1(d38a7bd9f3b506747a03f6b94c3f8a2d9fc59166) )
@@ -353,7 +358,7 @@ ROM_START( commandou )
ROM_END
ROM_START( commandoj )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "so04.9m", 0x0000, 0x8000, CRC(d3f2bfb3) SHA1(738a5673ac6a907cb04cfb125e8aab3f7437b9d2) )
ROM_LOAD( "so03.8m", 0x8000, 0x4000, CRC(ed01f472) SHA1(fa181293ae8f0fee78d412259eb81f6de1e1307a) )
@@ -389,7 +394,7 @@ ROM_START( commandoj )
ROM_END
ROM_START( commandob )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "commandob_04_9m_27256.bin", 0x0000, 0x8000, CRC(348a7654) SHA1(f3668c47c154a9c7d7afeabb0259c9bc56e847ac) )
ROM_LOAD( "cm03.8m", 0x8000, 0x4000, CRC(35486542) SHA1(531a85c9e03970ce037be84f2240c2df6f6e3ec1) )
@@ -433,7 +438,7 @@ ROM_START( commandob )
ROM_END
ROM_START( commandob2 )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "10", 0x0000, 0x8000, CRC(ab5d1469) SHA1(05935155365bef3c40823101303a3857af1c71e6) )
ROM_LOAD( "11", 0x8000, 0x4000, CRC(d1a43ba1) SHA1(dbaedcd3a1b489a01b7f783fda6fcad203758717) )
@@ -507,7 +512,7 @@ ROM_START( commandob2 )
ROM_END
ROM_START( commandou2 )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "uc4.9m", 0x0000, 0x8000, CRC(89ee8e17) SHA1(68db271af8b0f400ca95df5672983bfb87f3f84a) )
ROM_LOAD( "uc3.8m", 0x8000, 0x4000, CRC(72a1a529) SHA1(fe7797206e38bd78e817b6c351d5cb943720fe6c) )
@@ -543,7 +548,7 @@ ROM_START( commandou2 )
ROM_END
ROM_START( sinvasn )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "sp04.9m", 0x0000, 0x8000, CRC(33f9601e) SHA1(71182227b77fccbbc1d89b5828aa86dcc64ca05e) )
ROM_LOAD( "sp03.8m", 0x8000, 0x4000, CRC(c7fb43b3) SHA1(36d0dffdacc36a6b6a77101d942c0821846f3275) )
@@ -579,7 +584,7 @@ ROM_START( sinvasn )
ROM_END
ROM_START( sinvasnb )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "u4", 0x0000, 0x8000, CRC(834ba0de) SHA1(85f40559e6a436f3f752b6e862a419a5b9481fa8) )
ROM_LOAD( "u3", 0x8000, 0x4000, CRC(07e4ee3a) SHA1(6d7665b3072f075893ef37e55147b10271d069ef) )
@@ -618,40 +623,26 @@ ROM_END
DRIVER_INIT_MEMBER(commando_state,commando)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0xc000);
- int A;
-
- space.set_decrypted_region(0x0000, 0xbfff, decrypt);
// the first opcode is *not* encrypted
- decrypt[0] = rom[0];
- for (A = 1; A < 0xc000; A++)
+ m_decrypted_opcodes[0] = rom[0];
+ for (int A = 1; A < 0xc000; A++)
{
- int src;
-
- src = rom[A];
- decrypt[A] = (src & 0x11) | ((src & 0xe0) >> 4) | ((src & 0x0e) << 4);
+ UINT8 src = rom[A];
+ m_decrypted_opcodes[A] = (src & 0x11) | ((src & 0xe0) >> 4) | ((src & 0x0e) << 4);
}
}
DRIVER_INIT_MEMBER(commando_state,spaceinv)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0xc000);
- int A;
-
- space.set_decrypted_region(0x0000, 0xbfff, decrypt);
// the first opcode *is* encrypted
- for (A = 0; A < 0xc000; A++)
+ for (int A = 0; A < 0xc000; A++)
{
- int src;
-
- src = rom[A];
- decrypt[A] = (src & 0x11) | ((src & 0xe0) >> 4) | ((src & 0x0e) << 4);
+ UINT8 src = rom[A];
+ m_decrypted_opcodes[A] = (src & 0x11) | ((src & 0xe0) >> 4) | ((src & 0x0e) << 4);
}
}
diff --git a/src/mame/drivers/cps1.c b/src/mame/drivers/cps1.c
index 1206481492b..cf3055a71ce 100644
--- a/src/mame/drivers/cps1.c
+++ b/src/mame/drivers/cps1.c
@@ -622,6 +622,10 @@ ADDRESS_MAP_START( qsound_sub_map, AS_PROGRAM, 8, cps_state ) // used by cps2.
AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("qsound_ram2")
ADDRESS_MAP_END
+ADDRESS_MAP_START( qsound_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cps_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("decrypted")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sf2m3_map, AS_PROGRAM, 16, cps_state )
AM_RANGE(0x000000, 0x3fffff) AM_ROM
AM_RANGE(0x800010, 0x800011) AM_READ_PORT("IN1") /* Player input ports */
@@ -3238,6 +3242,7 @@ static MACHINE_CONFIG_DERIVED( qsound, cps1_12MHz )
MCFG_CPU_REPLACE("audiocpu", Z80, XTAL_8MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(qsound_sub_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(qsound_decrypted_opcodes_map)
MCFG_CPU_PERIODIC_INT_DRIVER(cps_state, irq0_line_hold, 250) // measured (cps2.c)
MCFG_MACHINE_START_OVERRIDE(cps_state, qsound)
@@ -11551,27 +11556,35 @@ DRIVER_INIT_MEMBER( cps_state, sf2m8 )
DRIVER_INIT_CALL(cps1);
}
+void cps_state::kabuki_setup(void (*decode)(UINT8 *src, UINT8 *dst))
+{
+ UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
+ UINT8 *rom = memregion("audiocpu")->base();
+ decode(rom, decrypt);
+ membank("decrypted")->set_base(decrypt);
+}
+
DRIVER_INIT_MEMBER(cps_state,wof)
{
- wof_decode(machine());
+ kabuki_setup(wof_decode);
DRIVER_INIT_CALL(cps1);
}
DRIVER_INIT_MEMBER(cps_state,dino)
{
- dino_decode(machine());
+ kabuki_setup(dino_decode);
DRIVER_INIT_CALL(cps1);
}
DRIVER_INIT_MEMBER(cps_state,punisher)
{
- punisher_decode(machine());
+ kabuki_setup(punisher_decode);
DRIVER_INIT_CALL(cps1);
}
DRIVER_INIT_MEMBER(cps_state,slammast)
{
- slammast_decode(machine());
+ kabuki_setup(slammast_decode);
DRIVER_INIT_CALL(cps1);
}
diff --git a/src/mame/drivers/cps2.c b/src/mame/drivers/cps2.c
index aba0c3e76e7..8d51c75b272 100644
--- a/src/mame/drivers/cps2.c
+++ b/src/mame/drivers/cps2.c
@@ -884,6 +884,9 @@ static ADDRESS_MAP_START( cps2_map, AS_PROGRAM, 16, cps_state )
AM_RANGE(0xff0000, 0xffffff) AM_RAM /* RAM */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, cps_state )
+ AM_RANGE(0x000000, 0x3fffff) AM_ROM AM_SHARE("decrypted_opcodes") /* 68000 ROM */
+ADDRESS_MAP_END
static ADDRESS_MAP_START( dead_cps2_map, AS_PROGRAM, 16, cps_state )
AM_RANGE(0x000000, 0x3fffff) AM_ROM /* 68000 ROM */
@@ -1215,6 +1218,7 @@ static MACHINE_CONFIG_START( cps2, cps_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(cps2_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", cps_state, cps2_interrupt, "screen", 0, 1)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_8MHz)
@@ -1251,6 +1255,7 @@ static MACHINE_CONFIG_DERIVED( dead_cps2, cps2 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(dead_cps2_map)
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( gigaman2, cps2 )
@@ -1259,6 +1264,8 @@ static MACHINE_CONFIG_DERIVED( gigaman2, cps2 )
MCFG_DEVICE_REMOVE("qsound")
+ MCFG_CPU_MODIFY("maincpu")
+
MCFG_OKIM6295_ADD("oki", XTAL_32MHz/32, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.47)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.47)
@@ -8660,8 +8667,6 @@ void cps_state::gigaman2_gfx_reorder()
DRIVER_INIT_MEMBER(cps_state,gigaman2)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT16 *rom = (UINT16 *)memregion("maincpu")->base();
- int length = memregion("maincpu")->bytes();
gigaman2_gfx_reorder();
@@ -8671,8 +8676,8 @@ DRIVER_INIT_MEMBER(cps_state,gigaman2)
save_pointer(NAME(m_gigaman2_dummyqsound_ram), 0x20000 / 2);
space.install_readwrite_handler(0x618000, 0x619fff, read16_delegate(FUNC(cps_state::gigaman2_dummyqsound_r),this), write16_delegate(FUNC(cps_state::gigaman2_dummyqsound_w), this)); // no qsound..
- space.set_decrypted_region(0x000000, (length) - 1, &rom[length/4]);
- m_maincpu->set_encrypted_opcode_range(0, length);
+
+ memcpy(m_decrypted_opcodes, memregion("maincpu")->base()+0x200000, 0x200000);
/* no digital volume switches on this? */
m_digital_volume_timer->adjust(attotime::never, 0, attotime::never);
diff --git a/src/mame/drivers/cps3.c b/src/mame/drivers/cps3.c
index bb025a6995b..d9b3c214524 100644
--- a/src/mame/drivers/cps3.c
+++ b/src/mame/drivers/cps3.c
@@ -745,13 +745,11 @@ void cps3_state::cps3_decrypt_bios()
int i;
UINT32 *coderegion = (UINT32*)memregion("bios")->base();
- m_decrypted_bios = (UINT32*)memregion("bios")->base();
-
for (i=0;i<0x80000;i+=4)
{
UINT32 dword = coderegion[i/4];
UINT32 xormask = cps3_mask(i, m_key1, m_key2);
- m_decrypted_bios[i/4] = dword ^ xormask;
+ coderegion[i/4] = dword ^ xormask;
}
#if 0
/* Dump to file */
@@ -811,13 +809,6 @@ void cps3_state::init_crypt(UINT32 key1, UINT32 key2, int altEncryption)
m_maincpu->sh2drc_add_fastram(0x040C0030, 0x040C003b, 0, &m_tilemap30_regs_base[0]);
cps3_decrypt_bios();
- m_decrypted_gamerom = auto_alloc_array(machine(), UINT32, 0x1000000/4);
-
-
- m_0xc0000000_ram_decrypted = auto_alloc_array(machine(), UINT32, 0x400/4);
-
- address_space &main = m_maincpu->space(AS_PROGRAM);
- main.set_direct_update_handler(direct_update_delegate(FUNC(cps3_state::cps3_direct_handler), this));
init_common();
}
@@ -1358,43 +1349,6 @@ WRITE32_MEMBER(cps3_state::cps3_0xc0000000_ram_w)
m_0xc0000000_ram_decrypted[offset] = m_0xc0000000_ram[offset]^cps3_mask(offset*4+0xc0000000, m_key1, m_key2);
}
-
-
-DIRECT_UPDATE_MEMBER(cps3_state::cps3_direct_handler)
-{
-// if(DEBUG_PRINTF) printf("address %04x\n",address);
-
- /* BIOS ROM */
- if (address < 0x80000)
- {
- direct.explicit_configure(0x00000, 0x7ffff, 0x7ffff, m_decrypted_bios);
- return ~0;
- }
- /* RAM */
- else if (address >= 0x06000000 && address <= 0x06ffffff)
- {
- UINT8 *decrypted = (UINT8*)m_decrypted_gamerom;
- UINT8 *raw = decrypted;
-
- if (m_altEncryption) raw = (UINT8*) m_user4region;
-
- direct.explicit_configure(0x06000000, 0x06ffffff, 0x00ffffff, raw, decrypted);
-
- return ~0;
- }
- else if (address >= 0xc0000000 && address <= 0xc00003ff)
- {
- //direct->decrypted = (void*)m_0xc0000000_ram_decrypted;
- direct.explicit_configure(0xc0000000, 0xc00003ff, 0x3ff, (UINT8*)m_0xc0000000_ram.target(), (UINT8*)m_0xc0000000_ram_decrypted);
- return ~0;
- }
-
- /* anything else falls through to NOPs */
- direct.explicit_configure(address, address, 0, (UINT8*)m_nops, (UINT8*)m_nops);
- return ~0;
-}
-
-
WRITE32_MEMBER(cps3_state::cram_bank_w)
{
if (ACCESSING_BITS_0_7)
@@ -2249,6 +2203,12 @@ static ADDRESS_MAP_START( cps3_map, AS_PROGRAM, 32, cps3_state )
AM_RANGE(0xc0000000, 0xc00003ff) AM_RAM_WRITE(cps3_0xc0000000_ram_w ) AM_SHARE("0xc0000000_ram") /* Executes code from here */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 32, cps3_state )
+ AM_RANGE(0x00000000, 0x0007ffff) AM_ROM AM_REGION("bios", 0) // Bios ROM
+ AM_RANGE(0x06000000, 0x06ffffff) AM_ROM AM_SHARE("decrypted_gamerom")
+ AM_RANGE(0xc0000000, 0xc00003ff) AM_ROM AM_SHARE("0xc0000000_ram_decrypted")
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( cps3 )
PORT_START("INPUTS")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
@@ -2551,8 +2511,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( cps3, cps3_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", SH2, 6250000*4) // external clock is 6.25 Mhz, it sets the intenral multiplier to 4x (this should probably be handled in the core..)
+ MCFG_CPU_ADD("maincpu", SH2, 6250000*4) // external clock is 6.25 Mhz, it sets the internal multiplier to 4x (this should probably be handled in the core..)
MCFG_CPU_PROGRAM_MAP(cps3_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cps3_state, cps3_vbl_interrupt)
MCFG_CPU_PERIODIC_INT_DRIVER(cps3_state, cps3_other_interrupt, 80) /* ?source? */
MCFG_SH2_DMA_KLUDGE_CB(cps3_state, dma_callback)
diff --git a/src/mame/drivers/cshooter.c b/src/mame/drivers/cshooter.c
index 597acba64aa..aeacb6e31be 100644
--- a/src/mame/drivers/cshooter.c
+++ b/src/mame/drivers/cshooter.c
@@ -4,7 +4,7 @@
TS 01.05.2006:
- - added sprites, bgmap reading and few ixes here and there
+ - added sprites, bgmap reading and few fixes here and there
airraid and cshootere are a bit "playable" ;) without gfx
@@ -103,7 +103,8 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_generic_paletteram_8(*this, "paletteram"),
- m_generic_paletteram2_8(*this, "paletteram2") { }
+ m_generic_paletteram2_8(*this, "paletteram2"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
optional_device<seibu_sound_device> m_seibu_sound;
@@ -114,6 +115,7 @@ public:
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_generic_paletteram_8;
required_shared_ptr<UINT8> m_generic_paletteram2_8;
+ required_shared_ptr<UINT8> m_decrypted_opcodes;
tilemap_t *m_txtilemap;
int m_coin_stat;
@@ -253,7 +255,7 @@ WRITE8_MEMBER(cshooter_state::cshooter_c700_w)
WRITE8_MEMBER(cshooter_state::bank_w)
{
- membank("bank1")->set_base(&memregion("user1")->base()[0x4000*((data>>4)&3)]);
+ membank("bank1")->set_entry((data>>4)&3);
}
@@ -313,6 +315,10 @@ static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8, cshooter_state )
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, cshooter_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
#if 0
/* Sound CPU */
@@ -440,9 +446,11 @@ static MACHINE_CONFIG_START( airraid, cshooter_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,XTAL_12MHz/2) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(airraid_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", cshooter_state, cshooter_scanline, "screen", 0, 1)
SEIBU2_AIRRAID_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4) /* verified on pcb */
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
@@ -595,29 +603,24 @@ DRIVER_INIT_MEMBER(cshooter_state,cshooter)
DRIVER_INIT_MEMBER(cshooter_state,cshootere)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- int A;
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
-
- for (A = 0x0000;A < 0x8000;A++)
+ for (int A = 0x0000;A < 0x8000;A++)
{
/* decode the opcodes */
- decrypt[A] = rom[A];
+ m_decrypted_opcodes[A] = rom[A];
if (BIT(A,5) && !BIT(A,3))
- decrypt[A] ^= 0x40;
+ m_decrypted_opcodes[A] ^= 0x40;
if (BIT(A,10) && !BIT(A,9) && BIT(A,3))
- decrypt[A] ^= 0x20;
+ m_decrypted_opcodes[A] ^= 0x20;
if ((BIT(A,10) ^ BIT(A,9)) && BIT(A,1))
- decrypt[A] ^= 0x02;
+ m_decrypted_opcodes[A] ^= 0x02;
if (BIT(A,9) || !BIT(A,5) || BIT(A,3))
- decrypt[A] = BITSWAP8(decrypt[A],7,6,1,4,3,2,5,0);
+ m_decrypted_opcodes[A] = BITSWAP8(m_decrypted_opcodes[A],7,6,1,4,3,2,5,0);
/* decode the data */
if (BIT(A,5))
@@ -627,8 +630,7 @@ DRIVER_INIT_MEMBER(cshooter_state,cshootere)
rom[A] = BITSWAP8(rom[A],7,6,1,4,3,2,5,0);
}
- membank("bank1")->set_base(&memregion("user1")->base()[0]);
- m_seibu_sound->decrypt("audiocpu",0x2000);
+ membank("bank1")->configure_entries(0, 4, memregion("user1")->base(), 0x4000);
}
diff --git a/src/mame/drivers/darkmist.c b/src/mame/drivers/darkmist.c
index 549154641b1..35419344046 100644
--- a/src/mame/drivers/darkmist.c
+++ b/src/mame/drivers/darkmist.c
@@ -64,6 +64,10 @@ static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, darkmist_state )
AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("spriteram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, darkmist_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
+ADDRESS_MAP_END
static INPUT_PORTS_START( darkmist )
PORT_START("P1")
@@ -232,6 +236,7 @@ static MACHINE_CONFIG_START( darkmist, darkmist_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,4000000) /* ? MHz */
MCFG_CPU_PROGRAM_MAP(memmap)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, scanline, "screen", 0, 1)
MCFG_DEVICE_ADD("t5182", T5182, 0)
@@ -401,11 +406,9 @@ void darkmist_state::decrypt_snd()
DRIVER_INIT_MEMBER(darkmist_state,darkmist)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
int i, len;
UINT8 *ROM = memregion("maincpu")->base();
dynamic_buffer buffer(0x10000);
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
decrypt_gfx();
@@ -432,10 +435,10 @@ DRIVER_INIT_MEMBER(darkmist_state,darkmist)
}
ROM[i] = d;
- decrypt[i] = p;
+ m_decrypted_opcodes[i] = p;
}
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
+ membank("bank1")->set_base(&ROM[0x010000]);
/* adr line swaps */
ROM = memregion("user1")->base();
diff --git a/src/mame/drivers/dblewing.c b/src/mame/drivers/dblewing.c
index bfb9b470842..9663f217f9d 100644
--- a/src/mame/drivers/dblewing.c
+++ b/src/mame/drivers/dblewing.c
@@ -89,7 +89,8 @@ public:
m_sprgen(*this, "spritegen"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_deco_tilegen1(*this, "tilegen1")
+ m_deco_tilegen1(*this, "tilegen1"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
optional_device<deco104_device> m_deco104;
/* memory pointers */
@@ -106,6 +107,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<deco16ic_device> m_deco_tilegen1;
+ required_shared_ptr<UINT16> m_decrypted_opcodes;
DECLARE_WRITE_LINE_MEMBER(sound_irq);
DECLARE_READ16_MEMBER(dblewing_prot_r);
DECLARE_WRITE16_MEMBER(dblewing_prot_w);
@@ -179,6 +181,10 @@ static ADDRESS_MAP_START( dblewing_map, AS_PROGRAM, 16, dblewing_state )
AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, dblewing_state )
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
READ8_MEMBER(dblewing_state::irq_latch_r)
{
/* bit 1 of dblewing_sound_irq specifies IRQ command writes */
@@ -362,6 +368,7 @@ static MACHINE_CONFIG_START( dblewing, dblewing_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_28MHz/2) /* DE102 */
MCFG_CPU_PROGRAM_MAP(dblewing_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dblewing_state, irq6_line_hold)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_32_22MHz/9)
@@ -450,7 +457,7 @@ ROM_END
DRIVER_INIT_MEMBER(dblewing_state,dblewing)
{
deco56_decrypt_gfx(machine(), "gfx1");
- deco102_decrypt_cpu(machine(), "maincpu", 0x399d, 0x25, 0x3d);
+ deco102_decrypt_cpu((UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, 0x80000, 0x399d, 0x25, 0x3d);
}
diff --git a/src/mame/drivers/deadang.c b/src/mame/drivers/deadang.c
index e685c4267d0..f7e6b872502 100644
--- a/src/mame/drivers/deadang.c
+++ b/src/mame/drivers/deadang.c
@@ -244,6 +244,7 @@ static MACHINE_CONFIG_START( deadang, deadang_state )
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer2", deadang_state, sub_scanline, "screen", 0, 1)
SEIBU3A_SOUND_SYSTEM_CPU(XTAL_14_31818MHz/4)
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
MCFG_QUANTUM_TIME(attotime::from_hz(60)) // the game stops working with higher interleave rates..
@@ -413,14 +414,12 @@ ROM_END
DRIVER_INIT_MEMBER(deadang_state,deadang)
{
- m_seibu_sound->decrypt("audiocpu", 0x2000);
m_adpcm1->decrypt("adpcm1");
m_adpcm2->decrypt("adpcm2");
}
DRIVER_INIT_MEMBER(deadang_state,ghunter)
{
- m_seibu_sound->decrypt("audiocpu", 0x2000);
m_adpcm1->decrypt("adpcm1");
m_adpcm2->decrypt("adpcm2");
diff --git a/src/mame/drivers/dietgo.c b/src/mame/drivers/dietgo.c
index ce9ac1a75ff..c26414b78a8 100644
--- a/src/mame/drivers/dietgo.c
+++ b/src/mame/drivers/dietgo.c
@@ -60,6 +60,10 @@ static ADDRESS_MAP_START( dietgo_map, AS_PROGRAM, 16, dietgo_state )
AM_RANGE(0x380000, 0x38ffff) AM_RAM // mainram
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, dietgo_state )
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
/* Physical memory map (21 bits) */
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, dietgo_state )
@@ -205,6 +209,7 @@ static MACHINE_CONFIG_START( dietgo, dietgo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_28MHz/2) /* DE102 (verified on pcb) */
MCFG_CPU_PROGRAM_MAP(dietgo_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dietgo_state, irq6_line_hold)
MCFG_CPU_ADD("audiocpu", H6280, XTAL_32_22MHz/4/3) /* Custom chip 45; XIN is 32.220MHZ/4, verified on pcb */
@@ -365,7 +370,7 @@ ROM_END
DRIVER_INIT_MEMBER(dietgo_state,dietgo)
{
deco56_decrypt_gfx(machine(), "gfx1");
- deco102_decrypt_cpu(machine(), "maincpu", 0xe9ba, 0x01, 0x19);
+ deco102_decrypt_cpu((UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, 0x80000, 0xe9ba, 0x01, 0x19);
}
GAME( 1992, dietgo, 0, dietgo, dietgo, dietgo_state, dietgo, ROT0, "Data East Corporation", "Diet Go Go (Euro v1.1 1992.09.26)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/dynduke.c b/src/mame/drivers/dynduke.c
index 8d0329907c2..200175fa2a7 100644
--- a/src/mame/drivers/dynduke.c
+++ b/src/mame/drivers/dynduke.c
@@ -283,6 +283,7 @@ static MACHINE_CONFIG_START( dynduke, dynduke_state )
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynduke_state, interrupt)
SEIBU_SOUND_SYSTEM_CPU(14318180/4)
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_FULL()
MCFG_QUANTUM_TIME(attotime::from_hz(3600))
@@ -607,7 +608,6 @@ ROM_END
DRIVER_INIT_MEMBER(dynduke_state,dynduke)
{
- m_seibu_sound->decrypt("audiocpu",0x20000);
}
/* Game Drivers */
diff --git a/src/mame/drivers/finalizr.c b/src/mame/drivers/finalizr.c
index f1d84e8e59f..cfd7a23f96f 100644
--- a/src/mame/drivers/finalizr.c
+++ b/src/mame/drivers/finalizr.c
@@ -260,7 +260,7 @@ void finalizr_state::machine_reset()
static MACHINE_CONFIG_START( finalizr, finalizr_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809,XTAL_18_432MHz/6) /* ??? */
+ MCFG_CPU_ADD("maincpu", KONAMI1, XTAL_18_432MHz/6) /* ??? */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", finalizr_state, finalizr_scanline, "screen", 0, 1)
@@ -352,7 +352,6 @@ ROM_END
DRIVER_INIT_MEMBER(finalizr_state,finalizr)
{
- konami1_decode(machine(), "maincpu");
}
diff --git a/src/mame/drivers/freekick.c b/src/mame/drivers/freekick.c
index f9043a736f7..25b5a7b6764 100644
--- a/src/mame/drivers/freekick.c
+++ b/src/mame/drivers/freekick.c
@@ -81,7 +81,9 @@ READ8_MEMBER(freekick_state::spinner_r)
WRITE8_MEMBER(freekick_state::pbillrd_bankswitch_w)
{
- membank("bank1")->set_entry(data & 1);
+ m_bank1->set_entry(data & 1);
+ if(m_bank1d)
+ m_bank1d->set_entry(data & 1);
}
WRITE8_MEMBER(freekick_state::nmi_enable_w)
@@ -187,6 +189,11 @@ static ADDRESS_MAP_START( pbillrd_map, AS_PROGRAM, 8, freekick_state )
AM_RANGE(0xfc03, 0xfc03) AM_DEVWRITE("sn4", sn76489a_device, write)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, freekick_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( freekickb_map, AS_PROGRAM, 8, freekick_state )
AM_RANGE(0x0000, 0xcfff) AM_ROM
AM_RANGE(0xd000, 0xdfff) AM_RAM
@@ -582,7 +589,7 @@ MACHINE_RESET_MEMBER(freekick_state,freekick)
MACHINE_START_MEMBER(freekick_state,pbillrd)
{
- membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
+ m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x8000, 0x4000);
MACHINE_START_CALL_MEMBER(freekick);
}
@@ -645,6 +652,11 @@ static MACHINE_CONFIG_DERIVED( pbillrd, base )
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( pbillrdm, pbillrd )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( freekickb, base )
/* basic machine hardware */
@@ -676,6 +688,7 @@ static MACHINE_CONFIG_DERIVED( gigas, base )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(gigas_map)
MCFG_CPU_IO_MAP(gigas_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
@@ -704,11 +717,10 @@ MACHINE_CONFIG_END
*************************************/
ROM_START( pbillrd )
- ROM_REGION( 0x18000, "maincpu", 0 ) /* Z80 Code */
- ROM_LOAD( "pb.18", 0x00000, 0x4000, CRC(9e6275ac) SHA1(482e845e7fb4190da483155bd908ad470373cd5c) )
- ROM_LOAD( "pb.7", 0x04000, 0x4000, CRC(dd438431) SHA1(07a950e38b3f627ecf95e5831e5480abb337a010) )
- ROM_CONTINUE( 0x10000, 0x4000 )
- ROM_LOAD( "pb.9", 0x14000, 0x4000, CRC(089ce80a) SHA1(779be9ba2277a26fbebf4acf9e2f5319a934b0f5) )
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 Code */
+ ROM_LOAD( "pb.18", 0x0000, 0x4000, CRC(9e6275ac) SHA1(482e845e7fb4190da483155bd908ad470373cd5c) )
+ ROM_LOAD( "pb.7", 0x4000, 0x8000, CRC(dd438431) SHA1(07a950e38b3f627ecf95e5831e5480abb337a010) )
+ ROM_LOAD( "pb.9", 0xc000, 0x4000, CRC(089ce80a) SHA1(779be9ba2277a26fbebf4acf9e2f5319a934b0f5) )
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
ROM_LOAD( "pb.4", 0x000000, 0x04000, CRC(2f4d4dd3) SHA1(ee4facabf591c235c270db4f4d3f612b8c474e57) )
@@ -730,11 +742,10 @@ ROM_START( pbillrd )
ROM_END
ROM_START( pbillrds ) /* Encrytped with a Sega MC-8123 (317-0030) CPU module */
- ROM_REGION( 0x18000, "maincpu", 0 ) /* Z80 Code */
- ROM_LOAD( "10626.8n", 0x00000, 0x4000, CRC(51d725e6) SHA1(d7007c983530780e7fa3686cb7a6d7c382c802fa) ) /* encrypted */
- ROM_LOAD( "10625.8r", 0x04000, 0x4000, CRC(8977c724) SHA1(f00835a04dc6fa7d8c1e382dace515f2aa7d6f44) ) /* encrypted */
- ROM_CONTINUE( 0x10000, 0x4000 )
- ROM_LOAD( "10627.10n", 0x14000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 Code */
+ ROM_LOAD( "10626.8n", 0x0000, 0x4000, CRC(51d725e6) SHA1(d7007c983530780e7fa3686cb7a6d7c382c802fa) ) /* encrypted */
+ ROM_LOAD( "10625.8r", 0x4000, 0x8000, CRC(8977c724) SHA1(f00835a04dc6fa7d8c1e382dace515f2aa7d6f44) ) /* encrypted */
+ ROM_LOAD( "10627.10n", 0xc000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
ROM_LOAD( "317-0030.key", 0x0000, 0x2000, CRC(9223f06d) SHA1(51a22a4c80fe273526bde68918c13c6476cec383) )
@@ -761,11 +772,10 @@ ROM_END
// all ROMs were HN4827128G-25, except 17, HN27256G-25
// CPU module marked 3?7-500B, but seems to act the same as above
ROM_START( pbillrdsa )
- ROM_REGION( 0x18000, "maincpu", 0 ) /* Z80 Code */
- ROM_LOAD( "29", 0x00000, 0x4000, CRC(da020258) SHA1(172276061c2e06bcf3477488734a72598412181b) ) /* encrypted */ // label scraped off, might be 20
- ROM_LOAD( "17", 0x04000, 0x4000, CRC(9bb3d467) SHA1(5d61c80c920363cbcb548f4a08434e2a05b3d5f3) ) /* encrypted */
- ROM_CONTINUE( 0x10000, 0x4000 )
- ROM_LOAD( "19", 0x14000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 Code */
+ ROM_LOAD( "29", 0x0000, 0x4000, CRC(da020258) SHA1(172276061c2e06bcf3477488734a72598412181b) ) /* encrypted */ // label scraped off, might be 20
+ ROM_LOAD( "17", 0x4000, 0x8000, CRC(9bb3d467) SHA1(5d61c80c920363cbcb548f4a08434e2a05b3d5f3) ) /* encrypted */
+ ROM_LOAD( "19", 0xc000, 0x4000, CRC(2335e6dd) SHA1(82352b6f4abea88aad3a96ca63cccccb6e278f48) ) /* encrypted */
ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
ROM_LOAD( "317-0030.key", 0x0000, 0x2000, CRC(9223f06d) SHA1(51a22a4c80fe273526bde68918c13c6476cec383) )
@@ -1034,12 +1044,12 @@ ROM_START( countrunb2 )
ROM_END
ROM_START( gigasm2b )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
- ROM_LOAD( "8.rom", 0x10000, 0x4000, CRC(c00a4a6c) SHA1(0d1bb849c9bfe4e92ad70e4ef19da494c0bd7ba8) )
+ ROM_REGION( 2*0xc000, "maincpu", 0 )
+ ROM_LOAD( "8.rom", 0x0c000, 0x4000, CRC(c00a4a6c) SHA1(0d1bb849c9bfe4e92ad70e4ef19da494c0bd7ba8) )
ROM_CONTINUE( 0x00000, 0x4000 )
- ROM_LOAD( "7.rom", 0x14000, 0x4000, CRC(92bd9045) SHA1(e4d8a94deeb795bb284ca0bd211ed40ed498b172) )
+ ROM_LOAD( "7.rom", 0x10000, 0x4000, CRC(92bd9045) SHA1(e4d8a94deeb795bb284ca0bd211ed40ed498b172) )
ROM_CONTINUE( 0x04000, 0x4000 )
- ROM_LOAD( "9.rom", 0x18000, 0x4000, CRC(a3ef809c) SHA1(6d4098658aa124e10e5edb8e8e3abe0aa26741a1) )
+ ROM_LOAD( "9.rom", 0x14000, 0x4000, CRC(a3ef809c) SHA1(6d4098658aa124e10e5edb8e8e3abe0aa26741a1) )
ROM_CONTINUE( 0x08000, 0x4000 )
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
@@ -1111,10 +1121,10 @@ Note: MCU dump has fixed bits, but read is good. If not correct, it's protected.
*/
ROM_START( gigasb )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
- ROM_LOAD( "g-7", 0x10000, 0x4000, CRC(daf4e88d) SHA1(391dff914ce8e9b7975fc8827c066d7db16c4171) )
+ ROM_REGION( 2*0xc000, "maincpu", 0 )
+ ROM_LOAD( "g-7", 0x0c000, 0x4000, CRC(daf4e88d) SHA1(391dff914ce8e9b7975fc8827c066d7db16c4171) )
ROM_CONTINUE( 0x00000, 0x4000 )
- ROM_LOAD( "g-8", 0x14000, 0x8000, CRC(4ab4c1f1) SHA1(63d8f489c7a8271e99a66d97e6eb0eb252cb2b67) )
+ ROM_LOAD( "g-8", 0x10000, 0x8000, CRC(4ab4c1f1) SHA1(63d8f489c7a8271e99a66d97e6eb0eb252cb2b67) )
ROM_CONTINUE( 0x04000, 0x8000 )
ROM_REGION( 0xc000, "gfx1", 0 ) /* GFX */
@@ -1137,8 +1147,8 @@ ROM_START( gigasb )
ROM_END
ROM_START( oigas )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
- ROM_LOAD( "rom.7", 0x10000, 0x4000, CRC(e5bc04cc) SHA1(ffbd416313a9e49d2f9a7268d5ef48a8b641e480) )
+ ROM_REGION( 2*0xc000, "maincpu", 0 )
+ ROM_LOAD( "rom.7", 0x0c000, 0x4000, CRC(e5bc04cc) SHA1(ffbd416313a9e49d2f9a7268d5ef48a8b641e480) )
ROM_CONTINUE( 0x00000, 0x4000)
ROM_LOAD( "rom.8", 0x04000, 0x8000, CRC(c199060d) SHA1(de8f1e0f941533abbbed25b595b1d51fadbb428d) )
@@ -1174,19 +1184,25 @@ ROM_END
DRIVER_INIT_MEMBER(freekick_state,gigasb)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0xbfff, memregion("maincpu")->base() + 0x10000);
+ membank("bank0d")->set_base(memregion("maincpu")->base() + 0xc000);
+ m_bank1d->set_base(memregion("maincpu")->base() + 0x14000);
}
DRIVER_INIT_MEMBER(freekick_state,pbillrds)
{
- mc8123_decrypt_rom(machine(), "maincpu", "user1", "bank1", 2);
+ UINT8 *decrypted_opcodes = auto_alloc_array(machine(), UINT8, 0x10000);
+ mc8123_decode(memregion("maincpu")->base(), decrypted_opcodes, memregion("user1")->base(), 0x10000);
+ membank("bank0d")->set_base(decrypted_opcodes);
+ m_bank1d->configure_entries(0, 2, decrypted_opcodes + 0x8000, 0x4000);
}
DRIVER_INIT_MEMBER(freekick_state,gigas)
{
- mc8123_decrypt_rom(machine(), "maincpu", "user1", NULL, 1);
+ UINT8 *decrypted_opcodes = auto_alloc_array(machine(), UINT8, 0xc000);
+ mc8123_decode(memregion("maincpu")->base(), decrypted_opcodes, memregion("user1")->base(), 0xc000);
+ membank("bank0d")->set_base(decrypted_opcodes);
+ m_bank1d->set_base(decrypted_opcodes + 0x8000);
}
@@ -1203,8 +1219,8 @@ GAME( 1986, gigasb, gigas, gigas, gigas, freekick_state, gigasb, R
GAME( 1986, oigas, gigas , oigas, gigas, freekick_state, gigasb, ROT270, "bootleg", "Oigas (bootleg)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1986, gigasm2b, 0, gigas, gigasm2, freekick_state, gigasb, ROT270, "bootleg", "Gigas Mark II (bootleg)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1987, pbillrd, 0, pbillrd, pbillrd, driver_device, 0, ROT0, "Nihon System", "Perfect Billiard", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1987, pbillrds, pbillrd, pbillrd, pbillrd, freekick_state, pbillrds,ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-0030)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1987, pbillrdsa, pbillrd, pbillrd, pbillrd, freekick_state, pbillrds,ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-5008)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // sticker on CPU module different (wrong?) functionality the same
+GAME( 1987, pbillrds, pbillrd, pbillrdm, pbillrd, freekick_state, pbillrds,ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-0030)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1987, pbillrdsa, pbillrd, pbillrdm, pbillrd, freekick_state, pbillrds,ROT0, "Nihon System", "Perfect Billiard (MC-8123, 317-5008)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // sticker on CPU module different (wrong?) functionality the same
GAME( 1987, freekick, 0, freekickb, freekck, driver_device, 0, ROT270, "Nihon System (Merit license)", "Free Kick (NS6201-A 1987.10)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1987, freekicka, freekick, freekickb, freekck, driver_device, 0, ROT270, "Nihon System", "Free Kick (NS6201-A 1987.9)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1987, freekickb1,freekick, freekickb, freekck, driver_device, 0, ROT270, "bootleg", "Free Kick (bootleg set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/funworld.c b/src/mame/drivers/funworld.c
index 33f2bd74e39..f144bb80cff 100644
--- a/src/mame/drivers/funworld.c
+++ b/src/mame/drivers/funworld.c
@@ -5954,7 +5954,6 @@ DRIVER_INIT_MEMBER(funworld_state, multiwin)
******************************************************/
{
UINT8 *ROM = memregion("maincpu")->base();
- address_space &space = m_maincpu->space(AS_PROGRAM);
int x;
@@ -5971,8 +5970,6 @@ DRIVER_INIT_MEMBER(funworld_state, multiwin)
ROM[x+0x10000] = code;
}
-
- space.set_decrypted_region(0x8000, 0xffff, memregion("maincpu")->base() + 0x18000);
}
@@ -5988,7 +5985,6 @@ DRIVER_INIT_MEMBER(funworld_state, royalcdc)
******************************************************/
UINT8 *ROM = memregion("maincpu")->base();
- address_space &space = m_maincpu->space(AS_PROGRAM);
int x;
@@ -6025,8 +6021,6 @@ DRIVER_INIT_MEMBER(funworld_state, royalcdc)
ROM[x+0x10000] = code;
}
-
- space.set_decrypted_region(0x6000, 0xffff, memregion("maincpu")->base() + 0x16000);
}
diff --git a/src/mame/drivers/galaxian.c b/src/mame/drivers/galaxian.c
index 3accadfaf72..f9276d41095 100644
--- a/src/mame/drivers/galaxian.c
+++ b/src/mame/drivers/galaxian.c
@@ -1355,6 +1355,10 @@ static ADDRESS_MAP_START( mooncrst_map_base, AS_PROGRAM, 8, galaxian_state )
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( moonqsr_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, galaxian_state )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( mooncrst_map, AS_PROGRAM, 8, galaxian_state )
AM_IMPORT_FROM(mooncrst_map_base)
AM_IMPORT_FROM(mooncrst_map_discrete)
@@ -1670,6 +1674,10 @@ static ADDRESS_MAP_START( mshuttle_map, AS_PROGRAM, 8, galaxian_state )
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( mshuttle_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, galaxian_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( mshuttle_portmap, AS_IO, 8, galaxian_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x0f)
@@ -5192,6 +5200,11 @@ static MACHINE_CONFIG_DERIVED( mooncrst, galaxian_base )
MCFG_FRAGMENT_ADD(mooncrst_audio)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( moonqsr, mooncrst )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(moonqsr_decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( fantastc, galaxian_base )
@@ -5289,6 +5302,7 @@ static MACHINE_CONFIG_DERIVED( mshuttle, galaxian_base )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(mshuttle_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(mshuttle_decrypted_opcodes_map)
MCFG_CPU_IO_MAP(mshuttle_portmap)
/* sound hardware */
@@ -5965,7 +5979,7 @@ DRIVER_INIT_MEMBER(galaxian_state,mooncrst)
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mooncrst_extend_tile_info, &galaxian_state::mooncrst_extend_sprite_info);
/* decrypt program code */
- decode_mooncrst(0x8000, memregion("maincpu")->base());
+ decode_mooncrst(0x4000, memregion("maincpu")->base());
}
@@ -5990,15 +6004,11 @@ DRIVER_INIT_MEMBER(galaxian_state,mooncrgx)
DRIVER_INIT_MEMBER(galaxian_state,moonqsr)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
-
/* video extensions */
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::moonqsr_extend_tile_info, &galaxian_state::moonqsr_extend_sprite_info);
/* decrypt program code */
- decode_mooncrst(0x8000, decrypt);
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
+ decode_mooncrst(0x4000, m_decrypted_opcodes);
}
WRITE8_MEMBER(galaxian_state::artic_gfxbank_w)
@@ -6253,14 +6263,9 @@ DRIVER_INIT_MEMBER(galaxian_state,kong)
void galaxian_state::mshuttle_decode(const UINT8 convtable[8][16])
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x10000);
- int A;
- space.set_decrypted_region(0x0000, 0xffff, decrypt);
-
- for (A = 0x0000;A < 0x10000;A++)
+ for (int A = 0x0000;A < 0x8000;A++)
{
int i,j;
UINT8 src = rom[A];
@@ -6273,7 +6278,7 @@ void galaxian_state::mshuttle_decode(const UINT8 convtable[8][16])
j = (src & 0x01) | ((src & 0x04) >> 1) | ((src & 0x10) >> 2) | ((src & 0x40) >> 3);
/* decode the opcodes */
- decrypt[A] = (src & 0xaa) | convtable[i][j];
+ m_decrypted_opcodes[A] = (src & 0xaa) | convtable[i][j];
}
}
@@ -9151,7 +9156,7 @@ ROM_END
ROM_START( mshuttle )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "my05", 0x0000, 0x1000, CRC(83574af1) SHA1(d69c2a0538a49d6c72c3346ac4e3959d91da6c98) )
ROM_LOAD( "my04", 0x1000, 0x1000, CRC(1cfae2c8) SHA1(6c7eeee70e91b8498c41525dcc60f8086cff8da7) )
ROM_LOAD( "my03", 0x2000, 0x1000, CRC(c8b8a368) SHA1(140ba60f55285d1e9f7a262634f5ce5c3470ab71) )
@@ -9173,7 +9178,7 @@ ROM_START( mshuttle )
ROM_END
ROM_START( mshuttle2 )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "my05", 0x0000, 0x1000, CRC(83574af1) SHA1(d69c2a0538a49d6c72c3346ac4e3959d91da6c98) )
ROM_LOAD( "my04", 0x1000, 0x1000, CRC(1cfae2c8) SHA1(6c7eeee70e91b8498c41525dcc60f8086cff8da7) )
ROM_LOAD( "my03", 0x2000, 0x1000, CRC(c8b8a368) SHA1(140ba60f55285d1e9f7a262634f5ce5c3470ab71) )
@@ -9197,7 +9202,7 @@ ROM_END
ROM_START( mshuttlej )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "mcs.5", 0x0000, 0x1000, CRC(a5a292b4) SHA1(b4e9d969c762f4114eba88051917df122fc7181f) )
ROM_LOAD( "mcs.4", 0x1000, 0x1000, CRC(acdc0f9e) SHA1(8cd6d6566fe3f4090ccb625c3c1e5850a371826f) )
ROM_LOAD( "mcs.3", 0x2000, 0x1000, CRC(c1e3f5d8) SHA1(d3af89d485b1ca21ac879dbe15490dcd1cd64f2a) )
@@ -9220,7 +9225,7 @@ ROM_START( mshuttlej )
ROM_END
ROM_START( mshuttlej2 )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "ali5.bin", 0x0000, 0x1000, CRC(320fe630) SHA1(df4fe25989783c8851f41c9b4b63dedfa365c1e9) )
ROM_LOAD( "mcs.4", 0x1000, 0x1000, CRC(acdc0f9e) SHA1(8cd6d6566fe3f4090ccb625c3c1e5850a371826f) )
ROM_LOAD( "mcs.3", 0x2000, 0x1000, CRC(c1e3f5d8) SHA1(d3af89d485b1ca21ac879dbe15490dcd1cd64f2a) )
@@ -10859,7 +10864,7 @@ GAME( 1980, mooncreg, mooncrst, mooncrst, mooncreg, galaxian_state, moonc
GAME( 1980, mooncrsl, mooncrst, mooncrst, mooncrsl, galaxian_state, mooncrsu, ROT90, "bootleg (Laguna S.A.)", "Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1980, stera, mooncrst, mooncrst, smooncrs, galaxian_state, mooncrsu, ROT90, "bootleg", "Steraranger (Moon Cresta bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1980, mooncrgx, mooncrst, galaxian, mooncrgx, galaxian_state, mooncrgx, ROT270, "bootleg", "Moon Cresta (Galaxian hardware)", GAME_SUPPORTS_SAVE )
-GAME( 1980, moonqsr, 0, mooncrst, moonqsr, galaxian_state, moonqsr, ROT90, "Nichibutsu", "Moon Quasar", GAME_SUPPORTS_SAVE )
+GAME( 1980, moonqsr, 0, moonqsr, moonqsr, galaxian_state, moonqsr, ROT90, "Nichibutsu", "Moon Quasar", GAME_SUPPORTS_SAVE )
GAME( 1980, moonal2, galaxian, mooncrst, moonal2, galaxian_state, galaxian, ROT90, "Namco / Nichibutsu", "Moon Alien Part 2", GAME_SUPPORTS_SAVE )
GAME( 1980, moonal2b, galaxian, mooncrst, moonal2, galaxian_state, galaxian, ROT90, "Namco / Nichibutsu", "Moon Alien Part 2 (older version)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/gyruss.c b/src/mame/drivers/gyruss.c
index 0001553790b..e894a93edd2 100644
--- a/src/mame/drivers/gyruss.c
+++ b/src/mame/drivers/gyruss.c
@@ -466,7 +466,7 @@ static MACHINE_CONFIG_START( gyruss, gyruss_state )
MCFG_CPU_PROGRAM_MAP(main_cpu1_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", gyruss_state, master_vblank_irq)
- MCFG_CPU_ADD("sub", M6809, MASTER_CLOCK/12) /* 1.536 MHz */
+ MCFG_CPU_ADD("sub", KONAMI1, MASTER_CLOCK/12) /* 1.536 MHz */
MCFG_CPU_PROGRAM_MAP(main_cpu2_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", gyruss_state, slave_vblank_irq)
@@ -681,7 +681,6 @@ ROM_END
DRIVER_INIT_MEMBER(gyruss_state,gyruss)
{
- konami1_decode(machine(), "sub");
}
diff --git a/src/mame/drivers/hyperspt.c b/src/mame/drivers/hyperspt.c
index 826e5e278c0..bbbe2f74a26 100644
--- a/src/mame/drivers/hyperspt.c
+++ b/src/mame/drivers/hyperspt.c
@@ -292,7 +292,7 @@ INTERRUPT_GEN_MEMBER(hyperspt_state::vblank_irq)
static MACHINE_CONFIG_START( hyperspt, hyperspt_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, XTAL_18_432MHz/12) /* verified on pcb */
+ MCFG_CPU_ADD("maincpu", KONAMI1, XTAL_18_432MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(hyperspt_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", hyperspt_state, vblank_irq)
@@ -544,7 +544,6 @@ ROM_END
DRIVER_INIT_MEMBER(hyperspt_state,hyperspt)
{
- konami1_decode(machine(), "maincpu");
}
diff --git a/src/mame/drivers/igs017.c b/src/mame/drivers/igs017.c
index 2a76f9ecc59..c049153dde3 100644
--- a/src/mame/drivers/igs017.c
+++ b/src/mame/drivers/igs017.c
@@ -72,7 +72,8 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_generic_paletteram_8(*this, "paletteram"),
- m_generic_paletteram_16(*this, "paletteram")
+ m_generic_paletteram_16(*this, "paletteram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
int m_input_addr;
@@ -89,6 +90,7 @@ public:
required_device<palette_device> m_palette;
optional_shared_ptr<UINT8> m_generic_paletteram_8;
optional_shared_ptr<UINT16> m_generic_paletteram_16;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
void igs025_to_igs022_callback( void );
@@ -847,14 +849,12 @@ DRIVER_INIT_MEMBER(igs017_state,starzan)
int size = 0x040000;
UINT8 *data = memregion("maincpu")->base();
- UINT8 *code = auto_alloc_array(machine(), UINT8, size);
+ UINT8 *code = m_decrypted_opcodes;
memcpy(code, data, size);
starzan_decrypt(data, size, false); // data
starzan_decrypt(code, size, true); // opcodes
- m_maincpu->space(AS_PROGRAM).set_decrypted_region(0x00000, 0x3ffff, code);
-
mgcs_flip_sprites();
}
@@ -1349,6 +1349,10 @@ static ADDRESS_MAP_START( iqblocka_map, AS_PROGRAM, 8, igs017_state )
AM_RANGE( 0x10000, 0x3ffff ) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, igs017_state )
+ AM_RANGE( 0x00000, 0x3ffff ) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
WRITE8_MEMBER(igs017_state::nmi_enable_w)
{
m_nmi_enable = data & 1;
@@ -3706,6 +3710,10 @@ static MACHINE_CONFIG_START( iqblocka, igs017_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( starzan, iqblocka )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
// mgcs
@@ -4669,5 +4677,5 @@ GAME( 1998, lhzb2a, lhzb2, lhzb2a, lhzb2a, igs017_state, lhzb2a, ROT
GAME( 1998, slqz2, 0, slqz2, slqz2, igs017_state, slqz2, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 2 (VS203J)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
GAME( 1999?, tarzan, 0, iqblocka, iqblocka, igs017_state, tarzan, ROT0, "IGS", "Tarzan (V109C)", GAME_NOT_WORKING )
GAME( 1999?, tarzana, tarzan, iqblocka, iqblocka, igs017_state, tarzana, ROT0, "IGS", "Tarzan (V107)", GAME_NOT_WORKING )
-GAME( 2000?, starzan, 0, iqblocka, iqblocka, igs017_state, starzan, ROT0, "IGS / G.F. Gioca", "Super Tarzan (Italy, V100I)", GAME_NOT_WORKING )
+GAME( 2000?, starzan, 0, starzan, iqblocka, igs017_state, starzan, ROT0, "IGS / G.F. Gioca", "Super Tarzan (Italy, V100I)", GAME_NOT_WORKING )
GAME( ????, spkrform, spk116it, spkrform, spkrform, igs017_state, spkrform, ROT0, "IGS", "Super Poker (v100xD03) / Formosa", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
diff --git a/src/mame/drivers/jack.c b/src/mame/drivers/jack.c
index 79148e92564..9b5d0132922 100644
--- a/src/mame/drivers/jack.c
+++ b/src/mame/drivers/jack.c
@@ -192,6 +192,10 @@ static ADDRESS_MAP_START( jack_map, AS_PROGRAM, 8, jack_state )
AM_RANGE(0xc000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, jack_state )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( striv_map, AS_PROGRAM, 8, jack_state )
AM_RANGE(0xb000, 0xb0ff) AM_WRITENOP
AM_RANGE(0xc000, 0xcfff) AM_READ(striv_question_r)
@@ -929,6 +933,11 @@ static MACHINE_CONFIG_START( jack, jack_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( treahunt, jack )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( striv, jack )
@@ -1442,23 +1451,17 @@ DRIVER_INIT_MEMBER(jack_state,zzyzzyxx)
void jack_state::treahunt_decode( )
{
- int A;
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x4000);
- int data;
-
- space.set_decrypted_region(0x0000, 0x3fff, decrypt);
/* Thanks to Mike Balfour for helping out with the decryption */
- for (A = 0; A < 0x4000; A++)
+ for (int A = 0; A < 0x4000; A++)
{
- data = rom[A];
+ UINT8 data = rom[A];
if (A & 0x1000)
{
/* unencrypted = D0 D2 D5 D1 D3 D6 D4 D7 */
- decrypt[A] =
+ m_decrypted_opcodes[A] =
((data & 0x01) << 7) |
((data & 0x02) << 3) |
((data & 0x04) << 4) |
@@ -1469,12 +1472,12 @@ void jack_state::treahunt_decode( )
if ((A & 0x04) == 0)
/* unencrypted = !D0 D2 D5 D1 D3 D6 D4 !D7 */
- decrypt[A] ^= 0x81;
+ m_decrypted_opcodes[A] ^= 0x81;
}
else
{
/* unencrypted = !D7 D2 D5 D1 D3 D6 D4 !D0 */
- decrypt[A] =
+ m_decrypted_opcodes[A] =
(~data & 0x81) |
((data & 0x02) << 3) |
((data & 0x04) << 4) |
@@ -1555,7 +1558,7 @@ DRIVER_INIT_MEMBER(jack_state,striv)
GAME( 1982, jack, 0, jack, jack, jack_state, jack, ROT90, "Hara Industries (Cinematronics license)", "Jack the Giantkiller (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1982, jack2, jack, jack, jack2, jack_state, jack, ROT90, "Hara Industries (Cinematronics license)", "Jack the Giantkiller (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1982, jack3, jack, jack, jack3, jack_state, jack, ROT90, "Hara Industries (Cinematronics license)", "Jack the Giantkiller (set 3)", GAME_SUPPORTS_SAVE )
-GAME( 1982, treahunt, jack, jack, treahunt, jack_state, treahunt, ROT90, "Hara Industries", "Treasure Hunt", GAME_SUPPORTS_SAVE )
+GAME( 1982, treahunt, jack, treahunt, treahunt, jack_state, treahunt, ROT90, "Hara Industries", "Treasure Hunt", GAME_SUPPORTS_SAVE )
GAME( 1982, zzyzzyxx, 0, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Zzyzzyxx (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1982, zzyzzyxx2, zzyzzyxx, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Zzyzzyxx (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1982, brix, zzyzzyxx, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Brix", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/jailbrek.c b/src/mame/drivers/jailbrek.c
index 0142f42e7a9..2a58c3df652 100644
--- a/src/mame/drivers/jailbrek.c
+++ b/src/mame/drivers/jailbrek.c
@@ -246,7 +246,7 @@ void jailbrek_state::machine_reset()
static MACHINE_CONFIG_START( jailbrek, jailbrek_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/12)
+ MCFG_CPU_ADD("maincpu", KONAMI1, MASTER_CLOCK/12)
MCFG_CPU_PROGRAM_MAP(jailbrek_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", jailbrek_state, jb_interrupt)
MCFG_CPU_PERIODIC_INT_DRIVER(jailbrek_state, jb_interrupt_nmi, 500) /* ? */
@@ -414,8 +414,6 @@ DRIVER_INIT_MEMBER(jailbrek_state,jailbrek)
SPEECH_ROM[ind] = SPEECH_ROM[ind + 0x2000];
}
}
-
- konami1_decode(machine(), "maincpu");
}
GAME( 1986, jailbrek, 0, jailbrek, jailbrek, jailbrek_state, jailbrek, ROT0, "Konami", "Jail Break", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/jongkyo.c b/src/mame/drivers/jongkyo.c
index 5b13a9ee921..4536391be9b 100644
--- a/src/mame/drivers/jongkyo.c
+++ b/src/mame/drivers/jongkyo.c
@@ -139,6 +139,7 @@ WRITE8_MEMBER(jongkyo_state::bank_select_w)
m_rom_bank |= mask;
membank("bank1")->set_entry(m_rom_bank);
+ membank("bank1d")->set_entry(m_rom_bank);
}
WRITE8_MEMBER(jongkyo_state::mux_w)
@@ -243,6 +244,11 @@ static ADDRESS_MAP_START( jongkyo_memmap, AS_PROGRAM, 8, jongkyo_state )
AM_RANGE(0x8000, 0xffff) AM_RAM AM_SHARE("videoram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, jongkyo_state )
+ AM_RANGE(0x0000, 0x6bff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x6c00, 0x6fff) AM_ROMBANK("bank1d")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( jongkyo_portmap, AS_IO, 8, jongkyo_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
@@ -488,6 +494,7 @@ static MACHINE_CONFIG_START( jongkyo, jongkyo_state )
MCFG_CPU_ADD("maincpu", Z80,JONGKYO_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(jongkyo_memmap)
MCFG_CPU_IO_MAP(jongkyo_portmap)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", jongkyo_state, irq0_line_hold)
@@ -518,12 +525,13 @@ MACHINE_CONFIG_END
*************************************/
ROM_START( jongkyo )
- ROM_REGION( 0x9000, "maincpu", 0 )
+ ROM_REGION( 0x8c00, "maincpu", 0 )
ROM_LOAD( "epr-6258", 0x00000, 0x02000, CRC(fb8b7bcc) SHA1(8ece7c2c82c237b4b51829d412b2109b96ccd0e7) )
ROM_LOAD( "epr-6259", 0x02000, 0x02000, CRC(e46cde5d) SHA1(1cbe1677cfb3fa9f76ad90d5b1446ce9cefee6b7) )
ROM_LOAD( "epr-6260", 0x04000, 0x02000, CRC(369a5365) SHA1(037a2971a59ab339595b333cbdfd4cbb104de2be) )
- ROM_LOAD( "epr-6262", 0x06000, 0x01000, CRC(ecf50f34) SHA1(ecfa1a9360d8fbcbed457d46e53bae77f6d78c1d) )
- ROM_LOAD( "epr-6261", 0x07000, 0x02000, CRC(9c475ae1) SHA1(b993c2636dafed9f80fa87e71921c3c85c039e45) ) // banked at 6c00-6fff
+ ROM_LOAD( "epr-6262", 0x06000, 0x00c00, CRC(ecf50f34) SHA1(ecfa1a9360d8fbcbed457d46e53bae77f6d78c1d) )
+ ROM_IGNORE(0x400)
+ ROM_LOAD( "epr-6261", 0x06c00, 0x02000, CRC(9c475ae1) SHA1(b993c2636dafed9f80fa87e71921c3c85c039e45) ) // banked at 6c00-6fff
ROM_REGION( 0x300, "proms", 0 )
/* colours */
@@ -544,17 +552,44 @@ ROM_END
DRIVER_INIT_MEMBER(jongkyo_state,jongkyo)
{
- int i;
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x28,0x08,0xa8,0x88 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...0...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...0...1...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x80,0x88,0xa0,0xa8 }, /* ...0...0...1...1 */
+ { 0x08,0x88,0x00,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
+ { 0x20,0xa0,0x00,0x80 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...1...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...1...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...0...1...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...1...1 */
+ { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...1...0...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...1...1...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0x08,0x88,0x00,0x80 } /* ...1...1...1...1 */
+ };
+
UINT8 *rom = memregion("maincpu")->base();
/* first of all, do a simple bitswap */
- for (i = 0x6000; i < 0x9000; ++i)
+ for (int i = 0x6000; i < 0x8c00; ++i)
{
rom[i] = BITSWAP8(rom[i], 7,6,5,3,4,2,1,0);
}
+ UINT8 *opcodes = auto_alloc_array(machine(), UINT8, 0x6c00+0x400*8);
+
/* then do the standard Sega decryption */
- jongkyo_decode(machine(), "maincpu");
+ sega_decode(rom, opcodes, 0x6c00, convtable, 8, 0x400);
+
+ membank("bank1")->configure_entries(0, 8, rom+0x6c00, 0x400);
+ membank("bank1d")->configure_entries(0, 8, opcodes+0x6c00, 0x400);
+ membank("bank0d")->set_base(opcodes);
}
diff --git a/src/mame/drivers/junofrst.c b/src/mame/drivers/junofrst.c
index a5f0180aefd..57bc3dfb294 100644
--- a/src/mame/drivers/junofrst.c
+++ b/src/mame/drivers/junofrst.c
@@ -409,7 +409,7 @@ INTERRUPT_GEN_MEMBER(junofrst_state::_30hz_irq)
static MACHINE_CONFIG_START( junofrst, junofrst_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, 1500000) /* 1.5 MHz ??? */
+ MCFG_CPU_ADD("maincpu", KONAMI1, 1500000) /* 1.5 MHz ??? */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", junofrst_state, _30hz_irq)
@@ -507,10 +507,7 @@ ROM_END
DRIVER_INIT_MEMBER(junofrst_state,junofrst)
{
- UINT8 *decrypted = konami1_decode(machine(), "maincpu");
-
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x1000);
- membank("bank1")->configure_decrypted_entries(0, 16, decrypted + 0x10000, 0x1000);
}
diff --git a/src/mame/drivers/kchamp.c b/src/mame/drivers/kchamp.c
index 754b464929f..79f2260bffd 100644
--- a/src/mame/drivers/kchamp.c
+++ b/src/mame/drivers/kchamp.c
@@ -115,6 +115,10 @@ static ADDRESS_MAP_START( kchampvs_map, AS_PROGRAM, 8, kchamp_state )
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, kchamp_state )
+ AM_RANGE(0x0000, 0xffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( kchampvs_io_map, AS_IO, 8, kchamp_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_WRITE(kchamp_flipscreen_w)
@@ -400,6 +404,7 @@ static MACHINE_CONFIG_START( kchampvs, kchamp_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(kchampvs_map)
MCFG_CPU_IO_MAP(kchampvs_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", kchamp_state, kc_interrupt)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz/4) /* verified on pcb */
@@ -701,26 +706,19 @@ ROM_START( karatevs )
ROM_END
-UINT8 *kchamp_state::decrypt_code()
+void kchamp_state::decrypt_code()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x10000);
UINT8 *rom = memregion("maincpu")->base();
- int A;
-
- space.set_decrypted_region(0x0000, 0xffff, decrypted);
-
- for (A = 0; A < 0x10000; A++)
- decrypted[A] = (rom[A] & 0x55) | ((rom[A] & 0x88) >> 2) | ((rom[A] & 0x22) << 2);
-
- return decrypted;
+ for (int A = 0; A < 0x10000; A++)
+ m_decrypted_opcodes[A] = (rom[A] & 0x55) | ((rom[A] & 0x88) >> 2) | ((rom[A] & 0x22) << 2);
}
DRIVER_INIT_MEMBER(kchamp_state,kchampvs)
{
+ decrypt_code();
+
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypted = decrypt_code();
int A;
/*
@@ -732,14 +730,14 @@ DRIVER_INIT_MEMBER(kchamp_state,kchampvs)
turns the encryption on, but this doesn't explain the
encrypted address for the jump.
*/
- decrypted[0] = rom[0]; /* this is a jump */
+ m_decrypted_opcodes[0] = rom[0]; /* this is a jump */
A = rom[1] + 256 * rom[2];
- decrypted[A] = rom[A]; /* fix opcode on first jump address (again, a jump) */
+ m_decrypted_opcodes[A] = rom[A]; /* fix opcode on first jump address (again, a jump) */
rom[A+1] ^= 0xee; /* fix address of the second jump */
A = rom[A+1] + 256 * rom[A+2];
- decrypted[A] = rom[A]; /* fix third opcode (ld a,$xx) */
+ m_decrypted_opcodes[A] = rom[A]; /* fix third opcode (ld a,$xx) */
A += 2;
- decrypted[A] = rom[A]; /* fix fourth opcode (ld ($xxxx),a */
+ m_decrypted_opcodes[A] = rom[A]; /* fix fourth opcode (ld ($xxxx),a */
/* and from here on, opcodes are encrypted */
m_counter = 0;
diff --git a/src/mame/drivers/ladybug.c b/src/mame/drivers/ladybug.c
index 51613cf3235..6f12067e4f9 100644
--- a/src/mame/drivers/ladybug.c
+++ b/src/mame/drivers/ladybug.c
@@ -142,6 +142,10 @@ static ADDRESS_MAP_START( ladybug_map, AS_PROGRAM, 8, ladybug_state )
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN2")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, ladybug_state )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sraider_cpu1_map, AS_PROGRAM, 8, ladybug_state )
AM_RANGE(0x0000, 0x5fff) AM_ROM
@@ -786,6 +790,10 @@ static MACHINE_CONFIG_START( ladybug, ladybug_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( dorodon, ladybug )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
static MACHINE_CONFIG_START( sraider, ladybug_state )
@@ -1043,15 +1051,11 @@ DRIVER_INIT_MEMBER(ladybug_state,dorodon)
/* decode the opcodes */
offs_t i;
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x6000);
UINT8 *rom = memregion("maincpu")->base();
UINT8 *table = memregion("user1")->base();
- space.set_decrypted_region(0x0000, 0x5fff, decrypted);
-
for (i = 0; i < 0x6000; i++)
- decrypted[i] = table[rom[i]];
+ m_decrypted_opcodes[i] = table[rom[i]];
}
@@ -1059,7 +1063,7 @@ GAME( 1981, cavenger, 0, ladybug, cavenger, driver_device, 0, ROT0,
GAME( 1981, ladybug, 0, ladybug, ladybug, driver_device, 0, ROT270, "Universal", "Lady Bug", GAME_SUPPORTS_SAVE )
GAME( 1981, ladybugb, ladybug, ladybug, ladybug, driver_device, 0, ROT270, "bootleg", "Lady Bug (bootleg set 1)", GAME_SUPPORTS_SAVE )
GAME( 1981, ladybgb2, ladybug, ladybug, ladybug, driver_device, 0, ROT270, "bootleg", "Lady Bug (bootleg set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1982, dorodon, 0, ladybug, dorodon, ladybug_state, dorodon, ROT270, "UPL (Falcon license?)", "Dorodon (set 1)", GAME_SUPPORTS_SAVE ) // license or bootleg?
-GAME( 1982, dorodon2, dorodon, ladybug, dorodon, ladybug_state, dorodon, ROT270, "UPL (Falcon license?)", "Dorodon (set 2)", GAME_SUPPORTS_SAVE ) // "
+GAME( 1982, dorodon, 0, dorodon, dorodon, ladybug_state, dorodon, ROT270, "UPL (Falcon license?)", "Dorodon (set 1)", GAME_SUPPORTS_SAVE ) // license or bootleg?
+GAME( 1982, dorodon2, dorodon, dorodon, dorodon, ladybug_state, dorodon, ROT270, "UPL (Falcon license?)", "Dorodon (set 2)", GAME_SUPPORTS_SAVE ) // "
GAME( 1982, snapjack, 0, ladybug, snapjack, driver_device, 0, ROT0, "Universal", "Snap Jack", GAME_SUPPORTS_SAVE )
GAME( 1982, sraider, 0, sraider, sraider, driver_device, 0, ROT270, "Universal", "Space Raider", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/liberate.c b/src/mame/drivers/liberate.c
index 824ca2fc9e1..42a67e605df 100644
--- a/src/mame/drivers/liberate.c
+++ b/src/mame/drivers/liberate.c
@@ -263,6 +263,10 @@ static ADDRESS_MAP_START( liberate_map, AS_PROGRAM, 8, liberate_state )
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, liberate_state )
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( prosoccr_map, AS_PROGRAM, 8, liberate_state )
AM_RANGE(0x0000, 0x0fff) AM_RAM
AM_RANGE(0x1000, 0x3fff) AM_ROM /* Mirror of main rom */
@@ -719,7 +723,7 @@ MACHINE_RESET_MEMBER(liberate_state,liberate)
m_bank = 0;
}
-static MACHINE_CONFIG_START( liberate, liberate_state )
+static MACHINE_CONFIG_START( liberate_base, liberate_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",DECO16, 2000000)
@@ -761,7 +765,12 @@ static MACHINE_CONFIG_START( liberate, liberate_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( liberatb, liberate )
+static MACHINE_CONFIG_DERIVED( liberate, liberate_base )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( liberatb, liberate_base )
/* basic machine hardware */
MCFG_CPU_REPLACE("maincpu", M6502, 2000000)
@@ -769,14 +778,14 @@ static MACHINE_CONFIG_DERIVED( liberatb, liberate )
MCFG_CPU_VBLANK_INT_DRIVER("screen", liberate_state, deco16_interrupt)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( boomrang, liberate )
+static MACHINE_CONFIG_DERIVED( boomrang, liberate_base )
MCFG_VIDEO_START_OVERRIDE(liberate_state,boomrang)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(liberate_state, screen_update_boomrang)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( prosoccr, liberate )
+static MACHINE_CONFIG_DERIVED( prosoccr, liberate_base )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -1268,21 +1277,14 @@ DRIVER_INIT_MEMBER(liberate_state,yellowcb)
DRIVER_INIT_MEMBER(liberate_state,liberate)
{
- int A;
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x10000);
UINT8 *ROM = memregion("maincpu")->base();
- space.set_decrypted_region(0x0000, 0xffff, decrypted);
-
/* Swap bits for opcodes only, not data */
- for (A = 0; A < 0x10000; A++) {
- decrypted[A] = (ROM[A] & 0xd7) | ((ROM[A] & 0x08) << 2) | ((ROM[A] & 0x20) >> 2);
- decrypted[A] = (decrypted[A] & 0xbb) | ((decrypted[A] & 0x04) << 4) | ((decrypted[A] & 0x40) >> 4);
- decrypted[A] = (decrypted[A] & 0x7d) | ((decrypted[A] & 0x02) << 6) | ((decrypted[A] & 0x80) >> 6);
+ for (int A = 0; A < 0x8000; A++) {
+ m_decrypted_opcodes[A] = (ROM[A+0x8000] & 0xd7) | ((ROM[A+0x8000] & 0x08) << 2) | ((ROM[A+0x8000] & 0x20) >> 2);
+ m_decrypted_opcodes[A] = (m_decrypted_opcodes[A] & 0xbb) | ((m_decrypted_opcodes[A] & 0x04) << 4) | ((m_decrypted_opcodes[A] & 0x40) >> 4);
+ m_decrypted_opcodes[A] = (m_decrypted_opcodes[A] & 0x7d) | ((m_decrypted_opcodes[A] & 0x02) << 6) | ((m_decrypted_opcodes[A] & 0x80) >> 6);
}
-
- membank("bank1")->configure_decrypted_entry(0, decrypted + 0x8000);
}
/*************************************
diff --git a/src/mame/drivers/megazone.c b/src/mame/drivers/megazone.c
index 5a82b24de3a..e5bc1f41ff9 100644
--- a/src/mame/drivers/megazone.c
+++ b/src/mame/drivers/megazone.c
@@ -234,7 +234,7 @@ INTERRUPT_GEN_MEMBER(megazone_state::vblank_irq)
static MACHINE_CONFIG_START( megazone, megazone_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, 18432000/9) /* 2 MHz */
+ MCFG_CPU_ADD("maincpu", KONAMI1, 18432000/9) /* 2 MHz */
MCFG_CPU_PROGRAM_MAP(megazone_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", megazone_state, vblank_irq)
@@ -506,7 +506,6 @@ ROM_END
DRIVER_INIT_MEMBER(megazone_state,megazone)
{
- konami1_decode(machine(), "maincpu");
}
GAME( 1983, megazone, 0, megazone, megazone, megazone_state, megazone, ROT90, "Konami", "Mega Zone (Konami set 1)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mitchell.c b/src/mame/drivers/mitchell.c
index c1ce0a6e4e4..aac45ebe430 100644
--- a/src/mame/drivers/mitchell.c
+++ b/src/mame/drivers/mitchell.c
@@ -121,6 +121,7 @@ WRITE8_MEMBER(mitchell_state::eeprom_serial_w)
WRITE8_MEMBER(mitchell_state::pang_bankswitch_w)
{
membank("bank1")->set_entry(data & 0x0f);
+ membank("bank1d")->set_entry(data & 0x0f);
}
/*************************************
@@ -280,6 +281,11 @@ static ADDRESS_MAP_START( mitchell_map, AS_PROGRAM, 8, mitchell_state )
AM_RANGE(0xe000, 0xffff) AM_RAM /* Work RAM */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, mitchell_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( mitchell_io_map, AS_IO, 8, mitchell_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(pang_gfxctrl_w) /* Palette bank, layer enable, coin counters, more */
@@ -1115,6 +1121,7 @@ static MACHINE_CONFIG_START( pang, mitchell_state )
MCFG_CPU_ADD("maincpu",Z80, XTAL_16MHz/2) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(mitchell_map)
MCFG_CPU_IO_MAP(mitchell_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mitchell_state, mitchell_irq, "screen", 0, 1)
MCFG_MACHINE_START_OVERRIDE(mitchell_state,mitchell)
@@ -1187,6 +1194,7 @@ static MACHINE_CONFIG_DERIVED( spangbl, pangnv )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(spangbl_map)
MCFG_CPU_IO_MAP(spangbl_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mitchell_state, irq0_line_hold)
MCFG_DEVICE_REMOVE("scantimer")
@@ -1215,6 +1223,7 @@ static MACHINE_CONFIG_START( mstworld, mitchell_state )
MCFG_CPU_ADD("maincpu", Z80, 6000000*4)
MCFG_CPU_PROGRAM_MAP(mitchell_map)
MCFG_CPU_IO_MAP(mstworld_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mitchell_state, irq0_line_hold)
MCFG_CPU_ADD("audiocpu", Z80,6000000) /* 6 MHz? */
@@ -1253,6 +1262,7 @@ static MACHINE_CONFIG_START( marukin, mitchell_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/2) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(mitchell_map)
MCFG_CPU_IO_MAP(mitchell_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mitchell_state, mitchell_irq, "screen", 0, 1)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
@@ -1307,6 +1317,7 @@ static MACHINE_CONFIG_START( pkladiesbl, mitchell_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz/2) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(mitchell_map)
MCFG_CPU_IO_MAP(mitchell_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mitchell_state, mitchell_irq, "screen", 0, 1)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
@@ -2085,58 +2096,58 @@ ROM_END
*
*************************************/
-void mitchell_state::bootleg_decode( )
+void mitchell_state::bootleg_decode()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base() + 0x50000);
- membank("bank1")->configure_decrypted_entries(0, 16, memregion("maincpu")->base() + 0x60000, 0x4000);
+ membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
+ membank("bank0d")->set_base(memregion("maincpu")->base() + 0x50000);
+ membank("bank1d")->configure_entries(0, 16, memregion("maincpu")->base() + 0x60000, 0x4000);
}
-void mitchell_state::configure_banks( )
+void mitchell_state::configure_banks(void (*decode)(UINT8 *src, UINT8 *dst, int size))
{
- membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
+ UINT8 *src = memregion("maincpu")->base();
+ int size = memregion("maincpu")->bytes();
+ UINT8 *dst = auto_alloc_array(machine(), UINT8, size);
+ decode(src, dst, size);
+ membank("bank1")->configure_entries(0, 16, src + 0x10000, 0x4000);
+ membank("bank0d")->set_base(dst);
+ membank("bank1d")->configure_entries(0, 16, dst + 0x10000, 0x4000);
}
DRIVER_INIT_MEMBER(mitchell_state,dokaben)
{
m_input_type = 0;
- mgakuen2_decode(machine());
- configure_banks();
+ configure_banks(mgakuen2_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,pang)
{
m_input_type = 0;
- pang_decode(machine());
- configure_banks();
+ configure_banks(pang_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,pangb)
{
m_input_type = 0;
bootleg_decode();
- configure_banks();
if (m_nvram != NULL)
m_nvram->set_base(&m_dummy_nvram, sizeof(m_dummy_nvram)); /* for pangba */
}
DRIVER_INIT_MEMBER(mitchell_state,cworld)
{
m_input_type = 0;
- cworld_decode(machine());
- configure_banks();
+ configure_banks(cworld_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,hatena)
{
m_input_type = 0;
- hatena_decode(machine());
- configure_banks();
+ configure_banks(hatena_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,spang)
{
m_input_type = 3;
m_nvram->set_base(&memregion("maincpu")->base()[0xe000], 0x80); /* NVRAM */
- spang_decode(machine());
- configure_banks();
+ configure_banks(spang_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,spangbl)
@@ -2144,79 +2155,69 @@ DRIVER_INIT_MEMBER(mitchell_state,spangbl)
m_input_type = 3;
m_nvram->set_base(&memregion("maincpu")->base()[0xe000], 0x80); /* NVRAM */
bootleg_decode();
- configure_banks();
}
DRIVER_INIT_MEMBER(mitchell_state,spangj)
{
m_input_type = 3;
m_nvram->set_base(&memregion("maincpu")->base()[0xe000], 0x80); /* NVRAM */
- spangj_decode(machine());
- configure_banks();
+ configure_banks(spangj_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,sbbros)
{
m_input_type = 3;
m_nvram->set_base(&memregion("maincpu")->base()[0xe000], 0x80); /* NVRAM */
- sbbros_decode(machine());
- configure_banks();
+ configure_banks(sbbros_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,qtono1)
{
m_input_type = 0;
- qtono1_decode(machine());
- configure_banks();
+ configure_banks(qtono1_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,qsangoku)
{
m_input_type = 0;
- qsangoku_decode(machine());
- configure_banks();
+ configure_banks(qsangoku_decode);
}
+
DRIVER_INIT_MEMBER(mitchell_state,mgakuen)
{
m_input_type = 1;
- configure_banks();
+ membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
m_maincpu->space(AS_IO).install_read_port(0x03, 0x03, "DSW0");
m_maincpu->space(AS_IO).install_read_port(0x04, 0x04, "DSW1");
}
DRIVER_INIT_MEMBER(mitchell_state,mgakuen2)
{
m_input_type = 1;
- mgakuen2_decode(machine());
- configure_banks();
+ configure_banks(mgakuen2_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,pkladies)
{
m_input_type = 1;
- mgakuen2_decode(machine());
- configure_banks();
+ configure_banks(mgakuen2_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,pkladiesbl)
{
m_input_type = 1;
bootleg_decode();
- configure_banks();
}
DRIVER_INIT_MEMBER(mitchell_state,marukin)
{
m_input_type = 1;
- marukin_decode(machine());
- configure_banks();
+ configure_banks(marukin_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,block)
{
m_input_type = 2;
m_nvram->set_base(&memregion("maincpu")->base()[0xff80], 0x80); /* NVRAM */
- block_decode(machine());
- configure_banks();
+ configure_banks(block_decode);
}
DRIVER_INIT_MEMBER(mitchell_state,blockbl)
{
m_input_type = 2;
m_nvram->set_base(&memregion("maincpu")->base()[0xff80], 0x80); /* NVRAM */
bootleg_decode();
- configure_banks();
}
DRIVER_INIT_MEMBER(mitchell_state,mstworld)
@@ -2262,7 +2263,6 @@ DRIVER_INIT_MEMBER(mitchell_state,mstworld)
}
bootleg_decode();
- configure_banks();
}
diff --git a/src/mame/drivers/mouser.c b/src/mame/drivers/mouser.c
index a953d8f4e73..477b2469d5d 100644
--- a/src/mame/drivers/mouser.c
+++ b/src/mame/drivers/mouser.c
@@ -75,9 +75,12 @@ static ADDRESS_MAP_START( mouser_map, AS_PROGRAM, 8, mouser_state )
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("P2") AM_WRITE(mouser_sound_interrupt_w) /* byte to sound cpu */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, mouser_state )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
static ADDRESS_MAP_START( mouser_sound_map, AS_PROGRAM, 8, mouser_state )
- AM_RANGE(0x0000, 0x1fff) AM_ROM
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
AM_RANGE(0x3000, 0x3000) AM_READ(mouser_sound_byte_r)
AM_RANGE(0x4000, 0x4000) AM_WRITE(mouser_sound_nmi_clear_w)
@@ -199,6 +202,7 @@ static MACHINE_CONFIG_START( mouser, mouser_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz ? */
MCFG_CPU_PROGRAM_MAP(mouser_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mouser_state, mouser_nmi_interrupt) /* NMI is masked externally */
MCFG_CPU_ADD("audiocpu", Z80, 4000000) /* ??? */
@@ -232,12 +236,12 @@ MACHINE_CONFIG_END
ROM_START( mouser )
- ROM_REGION( 0x20000, "maincpu", 0 ) /* 64K for data, 64K for encrypted opcodes */
+ ROM_REGION( 0x6000, "maincpu", 0 ) /* 64K for data, 64K for encrypted opcodes */
ROM_LOAD( "m0.5e", 0x0000, 0x2000, CRC(b56e00bc) SHA1(f3b23212590d91f1d19b1c7a98c560fbe5943185) )
ROM_LOAD( "m1.5f", 0x2000, 0x2000, CRC(ae375d49) SHA1(8422f5a4d8560425f0c8612cf6f76029fcfe267c) )
ROM_LOAD( "m2.5j", 0x4000, 0x2000, CRC(ef5817e4) SHA1(5cadc19f20fadf97c95852b280305fe4c75f1d19) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "m5.3v", 0x0000, 0x1000, CRC(50705eec) SHA1(252cea3498722318638f0c98ae929463ffd7d0d6) )
ROM_REGION( 0x4000, "gfx1", 0 )
@@ -256,12 +260,12 @@ ROM_END
ROM_START( mouserc )
- ROM_REGION( 0x20000, "maincpu", 0 ) /* 64K for data, 64K for encrypted opcodes */
+ ROM_REGION( 0x6000, "maincpu", 0 ) /* 64K for data, 64K for encrypted opcodes */
ROM_LOAD( "83001.0", 0x0000, 0x2000, CRC(e20f9601) SHA1(f559a470784bda0bee9cab257a548238365acaa6) )
ROM_LOAD( "m1.5f", 0x2000, 0x2000, CRC(ae375d49) SHA1(8422f5a4d8560425f0c8612cf6f76029fcfe267c) ) // 83001.1
ROM_LOAD( "m2.5j", 0x4000, 0x2000, CRC(ef5817e4) SHA1(5cadc19f20fadf97c95852b280305fe4c75f1d19) ) // 83001.2
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x1000, "audiocpu", 0 )
ROM_LOAD( "m5.3v", 0x0000, 0x1000, CRC(50705eec) SHA1(252cea3498722318638f0c98ae929463ffd7d0d6) ) // 83001.5
ROM_REGION( 0x4000, "gfx1", 0 )
@@ -284,16 +288,12 @@ DRIVER_INIT_MEMBER(mouser_state,mouser)
/* Decode the opcodes */
offs_t i;
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x6000);
UINT8 *table = memregion("user1")->base();
- space.set_decrypted_region(0x0000, 0x5fff, decrypted);
-
for (i = 0; i < 0x6000; i++)
{
- decrypted[i] = table[rom[i]];
+ m_decrypted_opcodes[i] = table[rom[i]];
}
}
diff --git a/src/mame/drivers/mustache.c b/src/mame/drivers/mustache.c
index 885c1b2acdf..d08e2d2195c 100644
--- a/src/mame/drivers/mustache.c
+++ b/src/mame/drivers/mustache.c
@@ -191,8 +191,6 @@ static MACHINE_CONFIG_START( mustache, mustache_state )
MCFG_PALETTE_INIT_OWNER(mustache_state, mustache)
/* sound hardware */
- MCFG_DEVICE_ADD("seibu_sound", SEIBU_SOUND, 0) // for seibu_sound_decrypt on the MAIN cpu (not sound)
-
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_YM2151_ADD("ymsnd", YM_CLOCK)
@@ -272,7 +270,7 @@ DRIVER_INIT_MEMBER(mustache_state,mustache)
for (i = 0; i < 2*G2; i++)
gfx2[i] = buf[BITSWAP24(i,23,22,21,20,19,18,17,16,15,12,11,10,9,8,7,6,5,4,13,14,3,2,1,0)];
- m_cpu_decrypt->decrypt("maincpu",0x8000);
+ seibu_sound_device::apply_decrypt(NULL, NULL, 0xc000);
}
diff --git a/src/mame/drivers/ninjakd2.c b/src/mame/drivers/ninjakd2.c
index b1c780d6235..25d8f386d1c 100644
--- a/src/mame/drivers/ninjakd2.c
+++ b/src/mame/drivers/ninjakd2.c
@@ -374,7 +374,6 @@ static ADDRESS_MAP_START( ninjakd2_main_cpu, AS_PROGRAM, 8, ninjakd2_state )
AM_RANGE(0xfa00, 0xffff) AM_RAM AM_SHARE("spriteram")
ADDRESS_MAP_END
-
static ADDRESS_MAP_START( mnight_main_cpu, AS_PROGRAM, 8, ninjakd2_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
@@ -454,6 +453,12 @@ static ADDRESS_MAP_START( ninjakd2_sound_cpu, AS_PROGRAM, 8, ninjakd2_state )
AM_RANGE(0xf000, 0xf000) AM_WRITE(ninjakd2_pcm_play_w)
ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, ninjakd2_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROM AM_REGION("soundcpu", 0x8000)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( ninjakd2_sound_io, AS_IO, 8, ninjakd2_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x01) AM_DEVWRITE("2203.1", ym2203_device, write)
@@ -909,7 +914,7 @@ MACHINE_RESET_MEMBER(ninjakd2_state,omegaf)
/*****************************************************************************/
-static MACHINE_CONFIG_START( ninjakd2, ninjakd2_state )
+static MACHINE_CONFIG_START( ninjakd2_core, ninjakd2_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MAIN_CLOCK_12/2) /* verified */
@@ -956,7 +961,12 @@ static MACHINE_CONFIG_START( ninjakd2, ninjakd2_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( mnight, ninjakd2 )
+static MACHINE_CONFIG_DERIVED( ninjakd2, ninjakd2_core )
+ MCFG_CPU_MODIFY("soundcpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( mnight, ninjakd2_core )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -969,7 +979,7 @@ static MACHINE_CONFIG_DERIVED( mnight, ninjakd2 )
MCFG_DEVICE_REMOVE("pcm")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( arkarea, ninjakd2 )
+static MACHINE_CONFIG_DERIVED( arkarea, ninjakd2_core )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -1469,15 +1479,14 @@ void ninjakd2_state::gfx_unscramble()
DRIVER_INIT_MEMBER(ninjakd2_state,ninjakd2)
{
- mc8123_decrypt_rom(machine(), "soundcpu", "user1", NULL, 0);
+ mc8123_decode(memregion("soundcpu")->base(), m_decrypted_opcodes, memregion("user1")->base(), 0x8000);
gfx_unscramble();
}
DRIVER_INIT_MEMBER(ninjakd2_state,bootleg)
{
- address_space &space = m_soundcpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("soundcpu")->base() + 0x10000);
+ memcpy(m_decrypted_opcodes, memregion("soundcpu")->base() + 0x10000, 0x8000);
gfx_unscramble();
}
diff --git a/src/mame/drivers/pacman.c b/src/mame/drivers/pacman.c
index 17772c0a202..7c6b1cd941e 100644
--- a/src/mame/drivers/pacman.c
+++ b/src/mame/drivers/pacman.c
@@ -982,6 +982,10 @@ ADDRESS_MAP_END
// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not
// exist on any Pacman or Puckman board I have seen. DW
+static ADDRESS_MAP_START( patched_opcodes_map, AS_DECRYPTED_OPCODES, 8, pacman_state )
+ AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM AM_SHARE("patched_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM
@@ -3462,6 +3466,11 @@ static MACHINE_CONFIG_START( pacman, pacman_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( pacmanp, pacman )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(patched_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( pengojpm, pacman )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(pengojpm_map)
@@ -6371,25 +6380,22 @@ ROM_END
void pacman_state::maketrax_rom_decode()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x4000);
UINT8 *rom = memregion("maincpu")->base();
/* patch protection using a copy of the opcodes so ROM checksum */
/* tests will not fail */
- space.set_decrypted_region(0x0000, 0x3fff, decrypted);
-
- memcpy(decrypted,rom,0x4000);
-
- decrypted[0x0415] = 0xc9;
- decrypted[0x1978] = 0x18;
- decrypted[0x238e] = 0xc9;
- decrypted[0x3ae5] = 0xe6;
- decrypted[0x3ae7] = 0x00;
- decrypted[0x3ae8] = 0xc9;
- decrypted[0x3aed] = 0x86;
- decrypted[0x3aee] = 0xc0;
- decrypted[0x3aef] = 0xb0;
+
+ memcpy(m_patched_opcodes,rom,0x4000);
+
+ m_patched_opcodes[0x0415] = 0xc9;
+ m_patched_opcodes[0x1978] = 0x18;
+ m_patched_opcodes[0x238e] = 0xc9;
+ m_patched_opcodes[0x3ae5] = 0xe6;
+ m_patched_opcodes[0x3ae7] = 0x00;
+ m_patched_opcodes[0x3ae8] = 0xc9;
+ m_patched_opcodes[0x3aed] = 0x86;
+ m_patched_opcodes[0x3aee] = 0xc0;
+ m_patched_opcodes[0x3aef] = 0xb0;
}
DRIVER_INIT_MEMBER(pacman_state,maketrax)
@@ -6403,25 +6409,22 @@ DRIVER_INIT_MEMBER(pacman_state,maketrax)
void pacman_state::korosuke_rom_decode()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x4000);
UINT8 *rom = memregion("maincpu")->base();
/* patch protection using a copy of the opcodes so ROM checksum */
/* tests will not fail */
- space.set_decrypted_region(0x0000, 0x3fff, decrypted);
-
- memcpy(decrypted,rom,0x4000);
-
- decrypted[0x044c] = 0xc9;
- decrypted[0x1973] = 0x18;
- decrypted[0x238c] = 0xc9;
- decrypted[0x3ae9] = 0xe6; /* not changed */
- decrypted[0x3aeb] = 0x00;
- decrypted[0x3aec] = 0xc9;
- decrypted[0x3af1] = 0x86;
- decrypted[0x3af2] = 0xc0;
- decrypted[0x3af3] = 0xb0;
+
+ memcpy(m_patched_opcodes,rom,0x4000);
+
+ m_patched_opcodes[0x044c] = 0xc9;
+ m_patched_opcodes[0x1973] = 0x18;
+ m_patched_opcodes[0x238c] = 0xc9;
+ m_patched_opcodes[0x3ae9] = 0xe6; /* not changed */
+ m_patched_opcodes[0x3aeb] = 0x00;
+ m_patched_opcodes[0x3aec] = 0xc9;
+ m_patched_opcodes[0x3af1] = 0x86;
+ m_patched_opcodes[0x3af2] = 0xc0;
+ m_patched_opcodes[0x3af3] = 0xb0;
}
DRIVER_INIT_MEMBER(pacman_state,korosuke)
@@ -6869,18 +6872,18 @@ GAME( 1985, jumpshotp,jumpshot, pacman, jumpshotp,pacman_state, jumpshot, ROT
GAME( 1985, shootbul, 0, pacman, shootbul, pacman_state, jumpshot, ROT90, "Bally Midway", "Shoot the Bull", GAME_SUPPORTS_SAVE )
-GAME( 1981, crush, 0, pacman, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1981, crush, 0, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1981, crush2, crush, pacman, maketrax, driver_device, 0, ROT90, "Alpha Denshi Co. / Kural Esco Electric, Ltd.", "Crush Roller (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1981, crush3, crush, pacman, maketrax, pacman_state, eyes, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", GAME_SUPPORTS_SAVE )
GAME( 1981, crush4, crush, crush4, crush4, driver_device, 0, ROT90, "Alpha Denshi Co. / Kural TWT", "Crush Roller (set 4)", GAME_SUPPORTS_SAVE )
-GAME( 1981, maketrax, crush, pacman, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1981, maketrxb, crush, pacman, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1981, korosuke, crush, pacman, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1981, maketrax, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1981, maketrxb, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1981, korosuke, crush, pacmanp, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1981, crushbl, crush, pacman, maketrax, driver_device, 0, ROT90, "bootleg", "Crush Roller (bootleg set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1981, crushbl2, crush, pacman, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1981, crushbl3, crush, pacman, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", GAME_SUPPORTS_SAVE )
+GAME( 1981, crushbl2, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1981, crushbl3, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", GAME_SUPPORTS_SAVE )
GAME( 1981, crushs, crush, crushs, crushs, driver_device, 0, ROT90, "bootleg (Sidam)", "Crush Roller (bootleg set 4)", GAME_SUPPORTS_SAVE ) // Sidam PCB, no Sidam text
-GAME( 1981, mbrush, crush, pacman, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Magic Brush (bootleg of Crush Roller)", GAME_SUPPORTS_SAVE )
+GAME( 1981, mbrush, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Magic Brush (bootleg of Crush Roller)", GAME_SUPPORTS_SAVE )
GAME( 1981, paintrlr, crush, pacman, paintrlr, driver_device, 0, ROT90, "bootleg", "Paint Roller (bootleg of Crush Roller)", GAME_SUPPORTS_SAVE )
GAME( 1982, eyes, 0, pacman, eyes, pacman_state, eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 1)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pbaction.c b/src/mame/drivers/pbaction.c
index 6c7daa53a91..5e28dda1937 100644
--- a/src/mame/drivers/pbaction.c
+++ b/src/mame/drivers/pbaction.c
@@ -84,8 +84,7 @@ WRITE8_MEMBER(pbaction_state::nmi_mask_w)
}
static ADDRESS_MAP_START( pbaction_map, AS_PROGRAM, 8, pbaction_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROM
+ AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("work_ram")
AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(pbaction_videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(pbaction_colorram2_w) AM_SHARE("colorram2")
@@ -102,6 +101,11 @@ static ADDRESS_MAP_START( pbaction_map, AS_PROGRAM, 8, pbaction_state )
AM_RANGE(0xe800, 0xe800) AM_WRITE(pbaction_sh_command_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, pbaction_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROM AM_REGION("maincpu", 0x8000)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( pbaction_sound_map, AS_PROGRAM, 8, pbaction_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x47ff) AM_RAM
@@ -312,6 +316,11 @@ static MACHINE_CONFIG_START( pbaction, pbaction_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( pbactionx, pbaction )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -377,7 +386,7 @@ ROM_START( pbaction2 )
ROM_END
ROM_START( pbaction3 )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "14.bin", 0x0000, 0x4000, CRC(f17a62eb) SHA1(8dabfc0ad127c154c0293a65df32d52d57dd9755) )
ROM_LOAD( "12.bin", 0x4000, 0x4000, CRC(ec3c64c6) SHA1(6130b80606d717f95e219316c2d3fa0a1980ea1d) )
ROM_LOAD( "13.bin", 0x8000, 0x4000, CRC(c93c851e) SHA1(b41077708fce4ccbcecdeae32af8821ca5322e87) )
@@ -403,7 +412,7 @@ ROM_START( pbaction3 )
ROM_END
ROM_START( pbaction4 )
- ROM_REGION( 2*0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "pinball_09.bin", 0x0000, 0x4000, CRC(c8e81ece) SHA1(04eafbd79263225f6c6fb5f04951b54179144f17) )
ROM_IGNORE(0x4000)
ROM_LOAD( "pinball_10.bin", 0x4000, 0x8000, CRC(04b56c7c) SHA1(d09c22fd0235e1c6a9b1978ba69338bb1ae5667d) )
@@ -433,7 +442,7 @@ ROM_START( pbaction4 )
ROM_END
ROM_START( pbaction5 )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "p16.bin", 0x0000, 0x4000, CRC(ad20b360) SHA1(91e3cdceb1c170580d926b2ed8359c3100f71b11) )
ROM_LOAD( "c15.bin", 0x4000, 0x4000, CRC(057acfe3) SHA1(49c184d7caea0c0e9f0d0e163f2ef42bb9aebf16) )
ROM_LOAD( "p14.bin", 0x8000, 0x2000, CRC(e7412d68) SHA1(e75731d9bea80e0dc09798dd46e3b947fdb54aaa) )
@@ -479,7 +488,7 @@ DRIVER_INIT_MEMBER(pbaction_state,pbactio3)
}
/* then do the standard Sega decryption */
- pbaction_decode(machine(), "maincpu");
+ DRIVER_INIT_CALL(pbactio4);
/* install a protection (?) workaround */
m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000, 0xc000, read8_delegate(FUNC(pbaction_state::pbactio3_prot_kludge_r),this) );
@@ -487,14 +496,36 @@ DRIVER_INIT_MEMBER(pbaction_state,pbactio3)
DRIVER_INIT_MEMBER(pbaction_state,pbactio4)
{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...0...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...0...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0xa8,0x28,0xa0,0x20 }, /* ...1...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0x28,0xa0,0x20 } /* ...1...1...1...1 */
+ };
+
/* this one only has the Sega decryption */
- pbaction_decode(machine(), "maincpu");
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
}
-GAME( 1985, pbaction, 0, pbaction, pbaction, driver_device, 0, ROT90, "Tehkan", "Pinball Action (set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pbaction2, pbaction, pbaction, pbaction, driver_device, 0, ROT90, "Tehkan", "Pinball Action (set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pbaction3, pbaction, pbaction, pbaction, pbaction_state, pbactio3, ROT90, "Tehkan", "Pinball Action (set 3, encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pbaction4, pbaction, pbaction, pbaction, pbaction_state, pbactio4, ROT90, "Tehkan", "Pinball Action (set 4, encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pbaction5, pbaction, pbaction, pbaction, pbaction_state, pbactio4, ROT90, "Tehkan", "Pinball Action (set 5, encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pbaction, 0, pbaction, pbaction, driver_device, 0, ROT90, "Tehkan", "Pinball Action (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pbaction2, pbaction, pbaction, pbaction, driver_device, 0, ROT90, "Tehkan", "Pinball Action (set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pbaction3, pbaction, pbactionx, pbaction, pbaction_state, pbactio3, ROT90, "Tehkan", "Pinball Action (set 3, encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pbaction4, pbaction, pbactionx, pbaction, pbaction_state, pbactio4, ROT90, "Tehkan", "Pinball Action (set 4, encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pbaction5, pbaction, pbactionx, pbaction, pbaction_state, pbactio4, ROT90, "Tehkan", "Pinball Action (set 5, encrypted)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pengo.c b/src/mame/drivers/pengo.c
index 3548c5b2580..c5e952f88eb 100644
--- a/src/mame/drivers/pengo.c
+++ b/src/mame/drivers/pengo.c
@@ -73,12 +73,14 @@ class pengo_state : public pacman_state
{
public:
pengo_state(const machine_config &mconfig, device_type type, const char *tag)
- : pacman_state(mconfig, type, tag) { }
+ : pacman_state(mconfig, type, tag), m_decrypted_opcodes(*this, "decrypted_opcodes") { }
DECLARE_WRITE8_MEMBER(pengo_coin_counter_w);
DECLARE_WRITE8_MEMBER(irq_mask_w);
DECLARE_DRIVER_INIT(penta);
DECLARE_DRIVER_INIT(pengo);
INTERRUPT_GEN_MEMBER(vblank_irq);
+
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
@@ -125,7 +127,7 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") /* video and color RAM, scratchpad RAM, sprite codes */
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0x8800, 0x8fef) AM_RAM
+ AM_RANGE(0x8800, 0x8fef) AM_RAM AM_SHARE("mainram")
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9000, 0x901f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
@@ -144,6 +146,13 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, pengo_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8800, 0x8fef) AM_RAM AM_SHARE("mainram")
+ AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram")
+ADDRESS_MAP_END
+
+
static ADDRESS_MAP_START( jrpacmbl_map, AS_PROGRAM, 8, pengo_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(jrpacman_videoram_w) AM_SHARE("videoram")
@@ -366,6 +375,7 @@ static MACHINE_CONFIG_START( pengo, pengo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6)
MCFG_CPU_PROGRAM_MAP(pengo_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pengo_state, vblank_irq)
/* video hardware */
@@ -397,6 +407,7 @@ static MACHINE_CONFIG_DERIVED( jrpacmbl, pengo )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(jrpacmbl_map)
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MCFG_VIDEO_START_OVERRIDE(pengo_state,jrpacman)
MACHINE_CONFIG_END
@@ -631,7 +642,29 @@ ROM_END
DRIVER_INIT_MEMBER(pengo_state,pengo)
{
- pengo_decode(machine(), "maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...1...0 */
+ { 0x08,0x28,0x88,0xa8 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x08,0x00,0x88,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x08,0x00,0x88,0x80 }, /* ...0...1...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...0...1...1...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...1...0...0...1 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x08,0x28,0x88,0xa8 }, /* ...1...0...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...1...1 */
+ { 0x08,0x00,0x88,0x80 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
+ { 0x00,0x08,0x20,0x28 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...1 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x08,0x28,0x88,0xa8 }, /* ...1...1...1...0 */
+ { 0x08,0x00,0x88,0x80 }, { 0xa0,0x80,0x20,0x00 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
}
@@ -677,14 +710,10 @@ DRIVER_INIT_MEMBER(pengo_state,penta)
{ 0x88,0x0a,0x82,0x00,0xa0,0x22,0xaa,0x28 }, /* ...1...1...0.... */
{ 0x88,0x0a,0x82,0x00,0xa0,0x22,0xaa,0x28 } /* ...1...1...1.... */
};
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
- UINT8 *rom = memregion("maincpu")->base();
- int A;
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
+ UINT8 *rom = memregion("maincpu")->base();
- for (A = 0x0000;A < 0x8000;A++)
+ for (int A = 0x0000;A < 0x8000;A++)
{
int i,j;
UINT8 src;
@@ -706,7 +735,7 @@ DRIVER_INIT_MEMBER(pengo_state,penta)
/* now decode the opcodes */
/* pick the translation table from bits 4, 8 and 12 of the address */
i = ((A >> 4) & 1) + (((A >> 8) & 1) << 1) + (((A >> 12) & 1) << 2);
- decrypt[A] = src ^ opcode_xortable[i][j];
+ m_decrypted_opcodes[A] = src ^ opcode_xortable[i][j];
}
}
diff --git a/src/mame/drivers/pktgaldx.c b/src/mame/drivers/pktgaldx.c
index c29d8089f28..7dd4af0c82b 100644
--- a/src/mame/drivers/pktgaldx.c
+++ b/src/mame/drivers/pktgaldx.c
@@ -109,6 +109,10 @@ static ADDRESS_MAP_START( pktgaldx_map, AS_PROGRAM, 16, pktgaldx_state )
AM_RANGE(0x170000, 0x17ffff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, pktgaldx_state )
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
/* Pocket Gal Deluxe (bootleg!) */
@@ -320,6 +324,7 @@ static MACHINE_CONFIG_START( pktgaldx, pktgaldx_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 14000000)
MCFG_CPU_PROGRAM_MAP(pktgaldx_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pktgaldx_state, irq6_line_hold)
@@ -474,7 +479,7 @@ ROM_END
DRIVER_INIT_MEMBER(pktgaldx_state,pktgaldx)
{
deco56_decrypt_gfx(machine(), "gfx1");
- deco102_decrypt_cpu(machine(), "maincpu", 0x42ba, 0x00, 0x00);
+ deco102_decrypt_cpu((UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, 0x80000, 0x42ba, 0x00, 0x00);
}
GAME( 1992, pktgaldx, 0, pktgaldx, pktgaldx, pktgaldx_state, pktgaldx, ROT0, "Data East Corporation", "Pocket Gal Deluxe (Euro v3.00)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/raiden.c b/src/mame/drivers/raiden.c
index 2ffeb0a93d6..dcc96275db7 100644
--- a/src/mame/drivers/raiden.c
+++ b/src/mame/drivers/raiden.c
@@ -301,7 +301,11 @@ static MACHINE_CONFIG_START( raiden, raiden_state )
SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(XTAL_14_31818MHz/4,XTAL_12MHz/12) // frequency and pin 7 verified (pin set in audio\seibu.h)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( raidenu, raiden )
+static MACHINE_CONFIG_DERIVED( raidene, raiden )
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_FULL()
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( raidenu, raidene )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -616,7 +620,6 @@ void raiden_state::common_decrypt()
DRIVER_INIT_MEMBER(raiden_state,raiden)
{
common_decrypt();
- m_seibu_sound->decrypt("audiocpu",0x20000);
}
DRIVER_INIT_MEMBER(raiden_state,raidenk)
@@ -626,17 +629,16 @@ DRIVER_INIT_MEMBER(raiden_state,raidenk)
DRIVER_INIT_MEMBER(raiden_state,raidenu)
{
- m_seibu_sound->decrypt("audiocpu",0x20000);
}
/***************************************************************************/
/* Same PCB, differ by region byte(s) */
-GAME( 1990, raiden, 0, raiden, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu", "Raiden (set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1990, raidena, raiden, raiden, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu", "Raiden (set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1990, raidenu, raiden, raiden, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden (US set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1990, raident, raiden, raiden, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu (Liang HWA Electronics license)", "Raiden (Taiwan)", GAME_SUPPORTS_SAVE )
+GAME( 1990, raiden, 0, raidene, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu", "Raiden (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1990, raidena, raiden, raidene, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu", "Raiden (set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1990, raidenu, raiden, raidene, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden (US set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1990, raident, raiden, raidene, raiden, raiden_state, raiden, ROT270, "Seibu Kaihatsu (Liang HWA Electronics license)", "Raiden (Taiwan)", GAME_SUPPORTS_SAVE )
/* Same as above, but the sound CPU code is not encrypted */
GAME( 1990, raidenk, raiden, raiden, raiden, raiden_state, raidenk, ROT270, "Seibu Kaihatsu (IBL Corporation license)", "Raiden (Korea)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/rocnrope.c b/src/mame/drivers/rocnrope.c
index 16c5fd25116..cd39c4af89e 100644
--- a/src/mame/drivers/rocnrope.c
+++ b/src/mame/drivers/rocnrope.c
@@ -199,7 +199,7 @@ INTERRUPT_GEN_MEMBER(rocnrope_state::vblank_irq)
static MACHINE_CONFIG_START( rocnrope, rocnrope_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK / 3 / 4) /* Verified in schematics */
+ MCFG_CPU_ADD("maincpu", KONAMI1, MASTER_CLOCK / 3 / 4) /* Verified in schematics */
MCFG_CPU_PROGRAM_MAP(rocnrope_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", rocnrope_state, vblank_irq)
@@ -356,14 +356,11 @@ ROM_END
DRIVER_INIT_MEMBER(rocnrope_state,rocnrope)
{
- UINT8 *decrypted = konami1_decode(machine(), "maincpu");
-
- decrypted[0x703d] = 0x98; /* fix one instruction */
+ memregion("maincpu")->base()[0x703d] = 0x98^0x88; /* fix one instruction */
}
DRIVER_INIT_MEMBER(rocnrope_state,rocnropk)
{
- konami1_decode(machine(), "maincpu");
}
diff --git a/src/mame/drivers/sbasketb.c b/src/mame/drivers/sbasketb.c
index b59065aec78..707d2be2c77 100644
--- a/src/mame/drivers/sbasketb.c
+++ b/src/mame/drivers/sbasketb.c
@@ -184,7 +184,7 @@ INTERRUPT_GEN_MEMBER(sbasketb_state::vblank_irq)
static MACHINE_CONFIG_START( sbasketb, sbasketb_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, 1400000) /* 1.400 MHz ??? */
+ MCFG_CPU_ADD("maincpu", KONAMI1, 1400000) /* 1.400 MHz ??? */
MCFG_CPU_PROGRAM_MAP(sbasketb_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", sbasketb_state, vblank_irq)
@@ -220,6 +220,13 @@ static MACHINE_CONFIG_START( sbasketb, sbasketb_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+MACHINE_CONFIG_DERIVED(sbasketbu, sbasketb)
+ MCFG_DEVICE_REMOVE("maincpu")
+ MCFG_CPU_ADD("maincpu", M6809, 1400000) /* 1.400 MHz ??? */
+ MCFG_CPU_PROGRAM_MAP(sbasketb_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", sbasketb_state, vblank_irq)
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -396,10 +403,9 @@ ROM_END
DRIVER_INIT_MEMBER(sbasketb_state,sbasketb)
{
- konami1_decode(machine(), "maincpu");
}
-GAME( 1984, sbasketb, 0, sbasketb, sbasketb, sbasketb_state, sbasketb, ROT90, "Konami", "Super Basketball (version I, encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1984, sbasketh, sbasketb, sbasketb, sbasketb, driver_device, 0, ROT90, "Konami", "Super Basketball (version H, unprotected)", GAME_SUPPORTS_SAVE )
-GAME( 1984, sbasketg, sbasketb, sbasketb, sbasketb, sbasketb_state, sbasketb, ROT90, "Konami", "Super Basketball (version G, encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1984, sbaskete, sbasketb, sbasketb, sbasketb, sbasketb_state, sbasketb, ROT90, "Konami", "Super Basketball (version E, encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1984, sbasketb, 0, sbasketb, sbasketb, sbasketb_state, sbasketb, ROT90, "Konami", "Super Basketball (version I, encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1984, sbasketh, sbasketb, sbasketbu, sbasketb, driver_device, 0, ROT90, "Konami", "Super Basketball (version H, unprotected)", GAME_SUPPORTS_SAVE )
+GAME( 1984, sbasketg, sbasketb, sbasketb, sbasketb, sbasketb_state, sbasketb, ROT90, "Konami", "Super Basketball (version G, encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1984, sbaskete, sbasketb, sbasketb, sbasketb, sbasketb_state, sbasketb, ROT90, "Konami", "Super Basketball (version E, encrypted)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/scramble.c b/src/mame/drivers/scramble.c
index bbe27542d99..ad73e39448f 100644
--- a/src/mame/drivers/scramble.c
+++ b/src/mame/drivers/scramble.c
@@ -405,6 +405,11 @@ static ADDRESS_MAP_START( harem_map, AS_PROGRAM, 8, scramble_state )
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("rombank") // bitswapped rom
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, scramble_state )
+ AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("maincpu", 0)
+ AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("rombank_decrypted")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( harem_sound_map, AS_PROGRAM, 8, scramble_state )
AM_RANGE(0x0000, 0x2fff) AM_ROM
AM_RANGE(0x6000, 0x6000) AM_READNOP
@@ -1675,6 +1680,7 @@ static MACHINE_CONFIG_DERIVED( harem, scramble )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(harem_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_MODIFY("audiocpu")
MCFG_CPU_PROGRAM_MAP(harem_sound_map)
diff --git a/src/mame/drivers/segae.c b/src/mame/drivers/segae.c
index eb824bc8d54..e02daa3d88d 100644
--- a/src/mame/drivers/segae.c
+++ b/src/mame/drivers/segae.c
@@ -311,7 +311,12 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_vdp1(*this, "vdp1"),
- m_vdp2(*this, "vdp2") { }
+ m_vdp2(*this, "vdp2"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes"),
+ m_maincpu_region(*this, "maincpu"),
+ m_bank1(*this, "bank1"),
+ m_bank0d(*this, "bank0d"),
+ m_bank1d(*this, "bank1d") { }
DECLARE_WRITE8_MEMBER( bank_write );
DECLARE_WRITE_LINE_MEMBER( int_callback );
@@ -332,6 +337,12 @@ public:
required_device<sega315_5124_device> m_vdp1;
required_device<sega315_5124_device> m_vdp2;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
+ required_memory_region m_maincpu_region;
+ required_memory_bank m_bank1;
+ optional_memory_bank m_bank0d;
+ optional_memory_bank m_bank1d;
+
// Analog input related
UINT8 m_port_select;
UINT16 m_last1;
@@ -358,7 +369,19 @@ public:
static ADDRESS_MAP_START( systeme_map, AS_PROGRAM, 8, systeme_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM /* Fixed ROM */
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank1") AM_WRITE_BANK("vram_write") /* Banked ROM */
- AM_RANGE(0xc000, 0xffff) AM_RAM
+ AM_RANGE(0xc000, 0xffff) AM_RAM AM_SHARE("mainram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, systeme_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
+ AM_RANGE(0xc000, 0xffff) AM_RAM AM_SHARE("mainram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( banked_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, systeme_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ AM_RANGE(0xc000, 0xffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END
@@ -396,7 +419,9 @@ WRITE8_MEMBER( systeme_state::bank_write )
membank("vdp1_bank")->set_entry((data >> 7) & 1);
membank("vdp2_bank")->set_entry((data >> 6) & 1);
membank("vram_write")->set_entry(data >> 5);
- membank("bank1")->set_entry(data & 0x0f);
+ m_bank1->set_entry(data & 0x0f);
+ if(m_bank1d)
+ m_bank1d->set_entry(data & 0x0f);
}
@@ -404,7 +429,7 @@ void systeme_state::machine_start()
{
membank("vdp1_bank")->configure_entries(0, 2, m_vram[0], 0x4000);
membank("vdp2_bank")->configure_entries(0, 2, m_vram[1], 0x4000);
- membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
+ m_bank1->configure_entries(0, 16, m_maincpu_region->base() + 0x10000, 0x4000);
for (int i = 7; i >= 0; i--)
{
@@ -909,7 +934,7 @@ ROM_START( fantzn2 )
ROM_LOAD( "epr-11414.ic4", 0x30000, 0x10000, CRC(6f7a9f5f) SHA1(b53aa2eded781c80466a79b7d81383b9a875d0be) )
ROM_LOAD( "epr-11412.ic2", 0x40000, 0x10000, CRC(b14db5af) SHA1(04c7fb659385438b3d8f9fb66800eb7b6373bda9) )
- ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
+ ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
ROM_LOAD( "317-0057.key", 0x0000, 0x2000, CRC(ee43d0f0) SHA1(72cb75a4d8352fe372db12046a59ea044360d5c3) )
ROM_END
@@ -923,7 +948,7 @@ ROM_START( opaopa )
ROM_LOAD( "epr11221.ic3", 0x20000, 0x08000, CRC(4ca132a2) SHA1(cb4e4c01b6ab070eef37c0603190caafe6236ccd) ) /* encrypted */
ROM_LOAD( "epr11220.ic2", 0x28000, 0x08000, CRC(a165e2ef) SHA1(498ff4c5d3a2658567393378c56be6ed86ac0384) ) /* encrypted */
- ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
+ ROM_REGION( 0x2000, "key", 0 ) /* MC8123 key */
ROM_LOAD( "317-0042.key", 0x0000, 0x2000, CRC(d6312538) SHA1(494ac7f080775c21dc7d369e6ea78f3299e6975a) )
ROM_END
@@ -988,6 +1013,16 @@ static MACHINE_CONFIG_START( systeme, systeme_state )
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( systemex, systeme )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( systemeb, systeme )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
DRIVER_INIT_MEMBER(systeme_state, hangonjr)
{
m_maincpu->space(AS_IO).install_read_handler(0xf8, 0xf8, read8_delegate(FUNC(systeme_state::hangonjr_port_f8_read), this));
@@ -997,7 +1032,58 @@ DRIVER_INIT_MEMBER(systeme_state, hangonjr)
DRIVER_INIT_MEMBER(systeme_state, astrofl)
{
- sega_315_5177_decode(machine(), "maincpu");
+ // 315-5177
+ static const UINT8 xor_table[128] =
+ {
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+ };
+
+ static const int swap_table[128] =
+ {
+ 0,0,0,0,
+ 1,1,1,1,1,
+ 2,2,2,2,2,
+ 3,3,3,3,
+ 4,4,4,4,4,
+ 5,5,5,5,5,
+ 6,6,6,6,6,
+ 7,7,7,7,7,
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,
+
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,13,13,13,
+ 14,14,14,14,14,
+ 15,15,15,15,15,
+ 16,16,16,16,
+ 17,17,17,17,17,
+ 18,18,18,18,18,
+ 19,19,19,19,19,
+ 20,20,20,20,20,
+ 21,21,
+ };
+
+ sega_decode_2(m_maincpu_region->base(), m_decrypted_opcodes, xor_table, swap_table);
}
@@ -1010,21 +1096,25 @@ DRIVER_INIT_MEMBER(systeme_state, ridleofp)
DRIVER_INIT_MEMBER(systeme_state, opaopa)
{
- mc8123_decrypt_rom(machine(), "maincpu", "user1", "bank1", 8);
+ UINT8 *banked_decrypted_opcodes = auto_alloc_array(machine(), UINT8, m_maincpu_region->bytes());
+ mc8123_decode(m_maincpu_region->base(), banked_decrypted_opcodes, memregion("key")->base(), m_maincpu_region->bytes());
+
+ m_bank0d->set_base(banked_decrypted_opcodes);
+ m_bank1d->configure_entries(0, 16, banked_decrypted_opcodes + 0x10000, 0x4000);
}
DRIVER_INIT_MEMBER(systeme_state, fantzn2)
{
- mc8123_decrypt_rom(machine(), "maincpu", "user1", NULL, 0);
+ mc8123_decode(m_maincpu_region->base(), m_decrypted_opcodes, memregion("key")->base(), 0x8000);
}
-// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
-GAME( 1985, hangonjr, 0, systeme, hangonjr, systeme_state, hangonjr, ROT0, "Sega", "Hang-On Jr.", GAME_SUPPORTS_SAVE )
-GAME( 1986, transfrm, 0, systeme, transfrm, driver_device, 0, ROT0, "Sega", "Transformer", GAME_SUPPORTS_SAVE )
-GAME( 1986, astrofl, transfrm, systeme, transfrm, systeme_state, astrofl, ROT0, "Sega", "Astro Flash (Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1986, ridleofp, 0, systeme, ridleofp, systeme_state, ridleofp, ROT90, "Sega / Nasco", "Riddle of Pythagoras (Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1987, opaopa, 0, systeme, opaopa, systeme_state, opaopa, ROT0, "Sega", "Opa Opa (MC-8123, 317-0042)", GAME_SUPPORTS_SAVE )
-GAME( 1988, fantzn2, 0, systeme, fantzn2, systeme_state, fantzn2, ROT0, "Sega", "Fantasy Zone II - The Tears of Opa-Opa (MC-8123, 317-0057)", GAME_SUPPORTS_SAVE )
-GAME( 1988, tetrisse, 0, systeme, tetrisse, driver_device, 0, ROT0, "Sega", "Tetris (Japan, System E)", GAME_SUPPORTS_SAVE )
+// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
+GAME( 1985, hangonjr, 0, systeme, hangonjr, systeme_state, hangonjr, ROT0, "Sega", "Hang-On Jr.", GAME_SUPPORTS_SAVE )
+GAME( 1986, transfrm, 0, systeme, transfrm, driver_device, 0, ROT0, "Sega", "Transformer", GAME_SUPPORTS_SAVE )
+GAME( 1986, astrofl, transfrm, systemex, transfrm, systeme_state, astrofl, ROT0, "Sega", "Astro Flash (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1986, ridleofp, 0, systeme, ridleofp, systeme_state, ridleofp, ROT90, "Sega / Nasco", "Riddle of Pythagoras (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1987, opaopa, 0, systemeb, opaopa, systeme_state, opaopa, ROT0, "Sega", "Opa Opa (MC-8123, 317-0042)", GAME_SUPPORTS_SAVE )
+GAME( 1988, fantzn2, 0, systemex, fantzn2, systeme_state, fantzn2, ROT0, "Sega", "Fantasy Zone II - The Tears of Opa-Opa (MC-8123, 317-0057)", GAME_SUPPORTS_SAVE )
+GAME( 1988, tetrisse, 0, systeme, tetrisse, driver_device, 0, ROT0, "Sega", "Tetris (Japan, System E)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/segag80r.c b/src/mame/drivers/segag80r.c
index ea0f834432a..490bee85605 100644
--- a/src/mame/drivers/segag80r.c
+++ b/src/mame/drivers/segag80r.c
@@ -322,6 +322,13 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, segag80r_state )
AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(vidram_w) AM_SHARE("videoram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, segag80r_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROM AM_REGION("maincpu", 0x8000)
+ AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(mainram_w) AM_SHARE("mainram")
+ AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(vidram_w) AM_SHARE("videoram")
+ADDRESS_MAP_END
+
/* complete memory map derived from schematics */
static ADDRESS_MAP_START( main_portmap, AS_IO, 8, segag80r_state )
@@ -877,6 +884,10 @@ static MACHINE_CONFIG_DERIVED( monsterb, g80r_base )
MCFG_FRAGMENT_ADD(monsterb_sound_board)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( monster2, monsterb )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pignewt, g80r_base )
@@ -897,6 +908,7 @@ static MACHINE_CONFIG_DERIVED( sindbadm, g80r_base )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(sindbadm_portmap)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", segag80r_state, sindbadm_vblank_start)
MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
@@ -1497,11 +1509,34 @@ DRIVER_INIT_MEMBER(segag80r_state,monsterb)
DRIVER_INIT_MEMBER(segag80r_state,monster2)
{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0x08,0x80,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...0...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
+ { 0x00,0x08,0x20,0x28 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...0...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x80,0x88,0x00,0x08 }, /* ...0...1...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x80,0x88,0x00,0x08 }, /* ...1...0...0...0 */
+ { 0x80,0x88,0x00,0x08 }, { 0x00,0x08,0x20,0x28 }, /* ...1...0...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...1...0 */
+ { 0x00,0x08,0x20,0x28 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...1 */
+ { 0x80,0x88,0x00,0x08 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
+ { 0x80,0xa0,0x88,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...1...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
+
address_space &iospace = m_maincpu->space(AS_IO);
address_space &pgmspace = m_maincpu->space(AS_PROGRAM);
/* configure the 315-5006 security chip */
- spatter_decode(machine(), "maincpu");
m_decrypt = segag80_security(0);
/* configure video */
@@ -1546,11 +1581,34 @@ DRIVER_INIT_MEMBER(segag80r_state,pignewt)
DRIVER_INIT_MEMBER(segag80r_state,sindbadm)
{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...1...1 */
+ { 0xa8,0x88,0xa0,0x80 }, { 0xa0,0x20,0xa8,0x28 }, /* ...0...1...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...1...1...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...1...0...1...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...1...0...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
+ { 0xa8,0x88,0xa0,0x80 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
+
address_space &iospace = m_maincpu->space(AS_IO);
address_space &pgmspace = m_maincpu->space(AS_PROGRAM);
/* configure the encrypted Z80 */
- sindbadm_decode(machine(), "maincpu");
m_decrypt = segag80_security(0);
/* configure video */
@@ -1585,7 +1643,7 @@ GAME( 1981, spaceod2, spaceod, spaceod, spaceod, segag80r_state, spaceod, R
GAME( 1982, monsterb, 0, monsterb, monsterb, segag80r_state, monsterb, ROT270, "Sega", "Monster Bash", GAME_IMPERFECT_SOUND )
/* 2-board G-80 system */
-GAME( 1982, monsterb2, monsterb, monsterb, monsterb, segag80r_state, monster2, ROT270, "Sega", "Monster Bash (2 board version)", GAME_IMPERFECT_SOUND )
+GAME( 1982, monsterb2, monsterb, monster2, monsterb, segag80r_state, monster2, ROT270, "Sega", "Monster Bash (2 board version)", GAME_IMPERFECT_SOUND )
GAME( 1983, pignewt, 0, pignewt, pignewt, segag80r_state, pignewt, ROT270, "Sega", "Pig Newton (version C)", GAME_IMPERFECT_SOUND )
GAME( 1983, pignewta, pignewt, pignewt, pignewta, segag80r_state, pignewt, ROT270, "Sega", "Pig Newton (version A)", GAME_IMPERFECT_SOUND )
GAME( 1983, sindbadm, 0, sindbadm, sindbadm, segag80r_state, sindbadm, ROT270, "Sega", "Sindbad Mystery", 0 )
diff --git a/src/mame/drivers/segahang.c b/src/mame/drivers/segahang.c
index d1dd85fc686..fdd896e745c 100644
--- a/src/mame/drivers/segahang.c
+++ b/src/mame/drivers/segahang.c
@@ -426,6 +426,11 @@ static ADDRESS_MAP_START( hangon_map, AS_PROGRAM, 16, segahang_state )
AM_RANGE(0xe00000, 0xffffff) AM_READWRITE(hangon_io_r, hangon_io_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, segahang_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sharrier_map, AS_PROGRAM, 16, segahang_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x03ffff) AM_ROM
@@ -959,11 +964,17 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( endurobl, sharrier_base )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+
MCFG_FRAGMENT_ADD(sound_board_2203)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( endurob2, sharrier_base )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+
MCFG_FRAGMENT_ADD(sound_board_2203x2)
MACHINE_CONFIG_END
@@ -1777,13 +1788,10 @@ DRIVER_INIT_MEMBER(segahang_state,enduror)
DRIVER_INIT_MEMBER(segahang_state,endurobl)
{
DRIVER_INIT_CALL(enduror);
-
// assemble decrypted half of ROM and register it
UINT16 *rom = reinterpret_cast<UINT16 *>(memregion("maincpu")->base());
- UINT16 *decrypt = auto_alloc_array(machine(), UINT16, 0x40000/2);
- memcpy(decrypt + 0x00000/2, rom + 0x30000/2, 0x10000);
- memcpy(decrypt + 0x10000/2, rom + 0x10000/2, 0x20000);
- m_maincpu->space(AS_PROGRAM).set_decrypted_region(0x000000, 0x03ffff, decrypt);
+ memcpy(m_decrypted_opcodes + 0x00000/2, rom + 0x30000/2, 0x10000);
+ memcpy(m_decrypted_opcodes + 0x10000/2, rom + 0x10000/2, 0x20000);
}
DRIVER_INIT_MEMBER(segahang_state,endurob2)
@@ -1792,9 +1800,7 @@ DRIVER_INIT_MEMBER(segahang_state,endurob2)
// assemble decrypted half of ROM and register it
UINT16 *rom = reinterpret_cast<UINT16 *>(memregion("maincpu")->base());
- UINT16 *decrypt = auto_alloc_array(machine(), UINT16, 0x40000/2);
- memcpy(decrypt, rom, 0x30000);
- m_maincpu->space(AS_PROGRAM).set_decrypted_region(0x000000, 0x03ffff, decrypt);
+ memcpy(m_decrypted_opcodes, rom, 0x30000);
}
diff --git a/src/mame/drivers/segaorun.c b/src/mame/drivers/segaorun.c
index c80dc050f02..7181c1a848c 100644
--- a/src/mame/drivers/segaorun.c
+++ b/src/mame/drivers/segaorun.c
@@ -465,7 +465,7 @@ void segaorun_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 in
case 0:
mapper.map_as_ram(0x60000, 0x08000, 0xf98000, "workram", write16_delegate());
- mapper.map_as_rom(0x00000, 0x60000, 0xf80000, "rom0base", 0x00000, write16_delegate());
+ mapper.map_as_rom(0x00000, 0x60000, 0xf80000, "rom0base", "decrypted_rom0base", 0x00000, write16_delegate());
break;
}
}
diff --git a/src/mame/drivers/segas16a.c b/src/mame/drivers/segas16a.c
index 2001e28b832..6313f3dee38 100644
--- a/src/mame/drivers/segas16a.c
+++ b/src/mame/drivers/segas16a.c
@@ -974,6 +974,10 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas16a_state )
AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( sound_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, segas16a_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("sound_decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas16a_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
@@ -1964,6 +1968,11 @@ static MACHINE_CONFIG_DERIVED( system16a_no7751, system16a )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( system16a_no7751p, system16a_no7751 )
+ MCFG_DEVICE_MODIFY("soundcpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(sound_decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
/*
static MACHINE_CONFIG_DERIVED( system16a_i8751_no7751, system16a_i8751 )
MCFG_DEVICE_REMOVE("n7751")
@@ -3503,7 +3512,59 @@ DRIVER_INIT_MEMBER(segas16a_state,quartet)
DRIVER_INIT_MEMBER(segas16a_state,fantzonep)
{
DRIVER_INIT_CALL(generic);
- sega_315_5177_decode(machine(), "soundcpu");
+
+ // 315-5177
+ static const UINT8 xor_table[128] =
+ {
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+ };
+
+ static const int swap_table[128] =
+ {
+ 0,0,0,0,
+ 1,1,1,1,1,
+ 2,2,2,2,2,
+ 3,3,3,3,
+ 4,4,4,4,4,
+ 5,5,5,5,5,
+ 6,6,6,6,6,
+ 7,7,7,7,7,
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,
+
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,13,13,13,
+ 14,14,14,14,14,
+ 15,15,15,15,15,
+ 16,16,16,16,
+ 17,17,17,17,17,
+ 18,18,18,18,18,
+ 19,19,19,19,19,
+ 20,20,20,20,20,
+ 21,21,
+ };
+
+ sega_decode_2(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, xor_table, swap_table);
}
DRIVER_INIT_MEMBER(segas16a_state,sdi)
@@ -3545,7 +3606,7 @@ GAME( 1986, alexkidd, 0, system16a, alexkidd, segas16a
GAME( 1986, alexkidd1, alexkidd, system16a_fd1089a, alexkidd, segas16a_state,generic, ROT0, "Sega", "Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021)", GAME_SUPPORTS_SAVE )
GAME( 1986, fantzone, 0, system16a_no7751, fantzone, segas16a_state,generic, ROT0, "Sega", "Fantasy Zone (Rev A, unprotected)", GAME_SUPPORTS_SAVE )
GAME( 1986, fantzone1, fantzone, system16a_no7751, fantzone, segas16a_state,generic, ROT0, "Sega", "Fantasy Zone (unprotected)", GAME_SUPPORTS_SAVE )
-GAME( 1986, fantzonep, fantzone, system16a_no7751, fantzone, segas16a_state,fantzonep, ROT0, "Sega", "Fantasy Zone (317-5000)", GAME_SUPPORTS_SAVE )
+GAME( 1986, fantzonep, fantzone, system16a_no7751p, fantzone, segas16a_state,fantzonep, ROT0, "Sega", "Fantasy Zone (317-5000)", GAME_SUPPORTS_SAVE )
GAME( 1986, fantzonepr, fantzone, system16a_no7751, fantzone, segas16a_state,generic, ROT0, "Sega", "Fantasy Zone (prototype)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // bad / missing gfx roms
GAME( 1988, passsht16a, passsht, system16a_fd1094, passsht16a, segas16a_state,passsht16a, ROT270, "Sega", "Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071)", GAME_SUPPORTS_SAVE )
GAME( 1987, sdi, 0, system16a_fd1089b_no7751, sdi, segas16a_state,sdi, ROT0, "Sega", "SDI - Strategic Defense Initiative (Japan, newer, System 16A, FD1089B 317-0027)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/segas16b.c b/src/mame/drivers/segas16b.c
index 8646a8976fc..d028409837a 100644
--- a/src/mame/drivers/segas16b.c
+++ b/src/mame/drivers/segas16b.c
@@ -926,8 +926,8 @@ void segas16b_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 in
case 2: // 3rd ROM base, or board-specific banking
switch (m_romboard)
{
- case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom2base", 0x20000, write16_delegate()); break;
- case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom2base", 0x40000, write16_delegate()); break;
+ case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom2base", "decrypted_rom2base", 0x20000, write16_delegate()); break;
+ case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom2base", "decrypted_rom2base", 0x40000, write16_delegate()); break;
case ROM_BOARD_171_5521:
case ROM_BOARD_171_5704: mapper.map_as_handler(0x00000, 0x10000, 0xff0000, read16_delegate(), write16_delegate(FUNC(segas16b_state::rom_5704_bank_w), this)); break;
case ROM_BOARD_171_5797: mapper.map_as_handler(0x00000, 0x10000, 0xff0000, read16_delegate(FUNC(segas16b_state::unknown_rgn2_r), this), write16_delegate(FUNC(segas16b_state::unknown_rgn2_w), this)); break;
@@ -939,10 +939,10 @@ void segas16b_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 in
case 1: // 2nd ROM base, banking & math, or sound for Korean games
switch (m_romboard)
{
- case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom1base", 0x10000, write16_delegate()); break;
- case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom1base", 0x20000, write16_delegate()); break;
+ case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom1base", "decrypted_rom1base", 0x10000, write16_delegate()); break;
+ case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom1base", "decrypted_rom1base", 0x20000, write16_delegate()); break;
case ROM_BOARD_171_5521:
- case ROM_BOARD_171_5704: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom1base", 0x40000, write16_delegate()); break;
+ case ROM_BOARD_171_5704: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom1base", "decrypted_rom1base", 0x40000, write16_delegate()); break;
case ROM_BOARD_KOREAN: mapper.map_as_handler(0x00000, 0x10000, 0xff0000, read16_delegate(), write16_delegate(FUNC(segas16b_state::atomicp_sound_w), this)); break;
case ROM_BOARD_171_5797: mapper.map_as_handler(0x00000, 0x04000, 0xffc000, read16_delegate(FUNC(segas16b_state::rom_5797_bank_math_r), this), write16_delegate(FUNC(segas16b_state::rom_5797_bank_math_w), this)); break;
default: assert(false);
@@ -952,12 +952,12 @@ void segas16b_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 in
case 0: // 1st ROM base
switch (m_romboard)
{
- case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom0base", 0x00000, write16_delegate()); break;
- case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom0base", 0x00000, write16_delegate()); break;
+ case ROM_BOARD_171_5358_SMALL: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom0base", "decrypted_rom0base", 0x00000, write16_delegate()); break;
+ case ROM_BOARD_171_5358: mapper.map_as_rom(0x00000, 0x20000, 0xfe0000, "rom0base", "decrypted_rom0base", 0x00000, write16_delegate()); break;
case ROM_BOARD_171_5521:
- case ROM_BOARD_171_5704: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom0base", 0000000, write16_delegate()); break;
- case ROM_BOARD_KOREAN: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom0base", 0000000, write16_delegate()); break;
- case ROM_BOARD_171_5797: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0000000, write16_delegate()); break;
+ case ROM_BOARD_171_5704: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom0base", "decrypted_rom0base", 0000000, write16_delegate()); break;
+ case ROM_BOARD_KOREAN: mapper.map_as_rom(0x00000, 0x40000, 0xfc0000, "rom0base", "decrypted_rom0base", 0000000, write16_delegate()); break;
+ case ROM_BOARD_171_5797: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", "decrypted_rom0base", 0000000, write16_delegate()); break;
default: assert(false);
}
break;
@@ -1742,6 +1742,12 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas16b_state )
AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( sound_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, segas16b_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("sound_decrypted_opcodes")
+ AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("soundbank")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas16b_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
@@ -3320,6 +3326,10 @@ static MACHINE_CONFIG_START( system16b, segas16b_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.48)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( system16b_mc8123, system16b )
+ MCFG_CPU_MODIFY("soundcpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(sound_decrypted_opcodes_map)
+MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( system16b_fd1089a, system16b )
MCFG_CPU_REPLACE("maincpu", FD1089A, MASTER_CLOCK_10MHz)
@@ -6759,7 +6769,7 @@ DRIVER_INIT_MEMBER(segas16b_state,aceattac_5358)
DRIVER_INIT_MEMBER(segas16b_state,aliensyn7_5358_small)
{
DRIVER_INIT_CALL(generic_5358_small);
- mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0);
+ mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mcu")->base(), 0x8000);
}
DRIVER_INIT_MEMBER(segas16b_state,altbeast_5521)
@@ -6783,7 +6793,7 @@ DRIVER_INIT_MEMBER(segas16b_state,altbeas5_5521)
DRIVER_INIT_MEMBER(segas16b_state,altbeas4_5521)
{
DRIVER_INIT_CALL(generic_5521);
- mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0);
+ mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mcu")->base(), 0x8000);
}
DRIVER_INIT_MEMBER(segas16b_state,ddux_5704)
@@ -6841,7 +6851,7 @@ DRIVER_INIT_MEMBER(segas16b_state,passshtj_5358)
DRIVER_INIT_MEMBER(segas16b_state,cencourt_5358)
{
DRIVER_INIT_CALL(passshtj_5358);
- mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0);
+ mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mcu")->base(), 0x8000);
}
DRIVER_INIT_MEMBER(segas16b_state,sdi_5358_small)
@@ -6859,13 +6869,13 @@ DRIVER_INIT_MEMBER(segas16b_state,defense_5358_small)
DRIVER_INIT_MEMBER(segas16b_state,shinobi4_5521)
{
DRIVER_INIT_CALL(generic_5521);
- mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0);
+ mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mcu")->base(), 0x8000);
}
DRIVER_INIT_MEMBER(segas16b_state,shinobi3_5358)
{
DRIVER_INIT_CALL(generic_5358);
- mc8123_decrypt_rom(machine(), "soundcpu", "mcu", NULL, 0);
+ mc8123_decode(memregion("soundcpu")->base(), m_sound_decrypted_opcodes, memregion("mcu")->base(), 0x8000);
}
DRIVER_INIT_MEMBER(segas16b_state,sjryuko_5358_small)
@@ -6910,7 +6920,7 @@ DRIVER_INIT_MEMBER(segas16b_state,snapper)
GAME( 1988, aceattac, 0, system16b_fd1094, aceattac, segas16b_state,aceattac_5358, ROT270, "Sega", "Ace Attacker (FD1094 317-0059)", 0 )
GAME( 1987, aliensyn, 0, system16b, aliensyn, segas16b_state,generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 4, System 16B, unprotected)", 0 )
-GAME( 1987, aliensyn7, aliensyn, system16b, aliensyn, segas16b_state,aliensyn7_5358_small, ROT0, "Sega", "Alien Syndrome (set 7, System 16B, MC-8123B 317-00xx)", 0 )
+GAME( 1987, aliensyn7, aliensyn, system16b_mc8123, aliensyn, segas16b_state,aliensyn7_5358_small, ROT0, "Sega", "Alien Syndrome (set 7, System 16B, MC-8123B 317-00xx)", 0 )
GAME( 1987, aliensyn3, aliensyn, system16b_fd1089a, aliensyn, segas16b_state,generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 3, System 16B, FD1089A 317-0033)", 0 )
GAME( 1987, aliensynj, aliensyn, system16b_fd1089a, aliensynj,segas16b_state,generic_5358_small, ROT0, "Sega", "Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033)", 0 )
@@ -6918,7 +6928,7 @@ GAME( 1988, altbeast, 0, system16b_i8751, altbeast, segas16b_state,
GAME( 1988, altbeastj, altbeast, system16b_i8751, altbeast, segas16b_state,altbeasj_5521, ROT0, "Sega", "Juuouki (set 7, Japan, 8751 317-0077)", 0 )
GAME( 1988, altbeast6, altbeast, system16b_i8751, altbeast, segas16b_state,altbeas5_5521, ROT0, "Sega", "Altered Beast (set 6, 8751 317-0076)", 0 )
GAME( 1988, altbeast5, altbeast, system16b_fd1094, altbeast, segas16b_state,generic_5521, ROT0, "Sega", "Altered Beast (set 5, FD1094 317-0069)", 0 )
-GAME( 1988, altbeast4, altbeast, system16b, altbeast, segas16b_state,altbeas4_5521, ROT0, "Sega", "Altered Beast (set 4, MC-8123B 317-0066)", 0 )
+GAME( 1988, altbeast4, altbeast, system16b_mc8123, altbeast, segas16b_state,altbeas4_5521, ROT0, "Sega", "Altered Beast (set 4, MC-8123B 317-0066)", 0 )
GAME( 1988, altbeastj3, altbeast, system16b_fd1094, altbeast, segas16b_state,generic_5521, ROT0, "Sega", "Juuouki (set 3, Japan, FD1094 317-0068)", 0 )
GAME( 1988, altbeast2, altbeast, system16b, altbeast, segas16b_state,altbeas4_5521, ROT0, "Sega", "Altered Beast (set 2, MC-8123B 317-0066)", 0 )
GAME( 1988, altbeastj1, altbeast, system16b_fd1094, altbeast, segas16b_state,generic_5521, ROT0, "Sega", "Juuouki (set 1, Japan, FD1094 317-0065)", 0 )
@@ -6974,7 +6984,7 @@ GAME( 1989, mvpj, mvp, system16b_fd1094, mvp, segas16b_state,
GAME( 1988, passsht, 0, system16b_fd1094, passsht, segas16b_state,generic_5358, ROT270, "Sega", "Passing Shot (World, 2 Players, FD1094 317-0080)", 0 )
GAME( 1988, passshta, passsht, system16b_fd1094, passshtj, segas16b_state,passshtj_5358, ROT270, "Sega", "Passing Shot (World, 4 Players, FD1094 317-0074)", 0 )
GAME( 1988, passshtj, passsht, system16b_fd1094, passshtj, segas16b_state,passshtj_5358, ROT270, "Sega", "Passing Shot (Japan, 4 Players, FD1094 317-0070)", 0 )
-GAME( 1988, cencourt, passsht, system16b, cencourt, segas16b_state,cencourt_5358, ROT270, "Sega", "Center Court (World, 4 Players, prototype, MC-8123B)", 0 )
+GAME( 1988, cencourt, passsht, system16b_mc8123, cencourt, segas16b_state,cencourt_5358, ROT270, "Sega", "Center Court (World, 4 Players, prototype, MC-8123B)", 0 )
GAME( 1991, riotcity, 0, system16b, riotcity, segas16b_state,generic_5704, ROT0, "Sega / Westone", "Riot City (Japan)", 0 )
@@ -6985,8 +6995,8 @@ GAME( 1987, sdib, sdi, system16b_fd1089a, sdi, segas16b_state,
GAME( 1987, sdibl, sdi, system16b, sdi, segas16b_state,sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg)", 0 )
GAME( 1987, shinobi5, shinobi, system16b, shinobi, segas16b_state,generic_5521, ROT0, "Sega", "Shinobi (set 5, System 16B, unprotected)", 0 )
-GAME( 1987, shinobi4, shinobi, system16b, shinobi, segas16b_state,shinobi4_5521, ROT0, "Sega", "Shinobi (set 4, System 16B, MC-8123B 317-0054)", 0 )
-GAME( 1987, shinobi3, shinobi, system16b, shinobi, segas16b_state,shinobi3_5358, ROT0, "Sega", "Shinobi (set 3, System 16B, MC-8123B 317-0054)", 0 )
+GAME( 1987, shinobi4, shinobi, system16b_mc8123, shinobi, segas16b_state,shinobi4_5521, ROT0, "Sega", "Shinobi (set 4, System 16B, MC-8123B 317-0054)", 0 )
+GAME( 1987, shinobi3, shinobi, system16b_mc8123, shinobi, segas16b_state,shinobi3_5358, ROT0, "Sega", "Shinobi (set 3, System 16B, MC-8123B 317-0054)", 0 )
GAME( 1987, shinobi2, shinobi, system16b_fd1094, shinobi, segas16b_state,generic_5358, ROT0, "Sega", "Shinobi (set 2, System 16B, FD1094 317-0049)", 0 )
GAME( 1987, sonicbom, 0, system16b_fd1094, sonicbom, segas16b_state,generic_5358, ROT270, "Sega", "Sonic Boom (FD1094 317-0053)", 0 )
diff --git a/src/mame/drivers/segas18.c b/src/mame/drivers/segas18.c
index afd68a1d736..609a0509227 100644
--- a/src/mame/drivers/segas18.c
+++ b/src/mame/drivers/segas18.c
@@ -84,13 +84,13 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind
switch (m_romboard)
{
case ROM_BOARD_171_SHADOW: mapper.map_as_handler(0x00000, 0x00010, 0xfffff0, read16_delegate(FUNC(segas18_state::genesis_vdp_r), this), write16_delegate(FUNC(segas18_state::genesis_vdp_w), this)); break;
- case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate()); break;
+ case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", "decrypted_rom1base", 0x80000, write16_delegate()); break;
case ROM_BOARD_171_5987: if (romsize <= 0x100000)
- mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this));
+ mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", "decrypted_rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this));
else
- mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom1base",0x100000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this));
+ mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom1base", "decrypted_rom1base",0x100000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this));
break;
- case ROM_BOARD_837_7525: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_837_7525_bank_w), this));
+ case ROM_BOARD_837_7525: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", "decrypted_rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_837_7525_bank_w), this));
break;
default: assert(false);
@@ -101,12 +101,12 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind
switch (m_romboard)
{
case ROM_BOARD_171_SHADOW:
- case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate()); break;
+ case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", "decrypted_rom0base", 0x00000, write16_delegate()); break;
case ROM_BOARD_837_7525:
case ROM_BOARD_171_5987: if (romsize <= 0x100000)
- mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate());
+ mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", "decrypted_rom0base", 0x00000, write16_delegate());
else
- mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom0base", 0x00000, write16_delegate());
+ mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom0base", "decrypted_rom0base", 0x00000, write16_delegate());
break;
default: assert(false);
}
diff --git a/src/mame/drivers/seicross.c b/src/mame/drivers/seicross.c
index 4a6294e52ba..380023ace2d 100644
--- a/src/mame/drivers/seicross.c
+++ b/src/mame/drivers/seicross.c
@@ -127,7 +127,7 @@ static ADDRESS_MAP_START( mcu_nvram_map, AS_PROGRAM, 8, seicross_state )
AM_RANGE(0x0000, 0x007f) AM_RAM
AM_RANGE(0x1000, 0x10ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("dac", dac_device, write_unsigned8)
- AM_RANGE(0x8000, 0xf7ff) AM_ROM
+ AM_RANGE(0x8000, 0xf7ff) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1")
ADDRESS_MAP_END
@@ -137,10 +137,14 @@ static ADDRESS_MAP_START( mcu_no_nvram_map, AS_PROGRAM, 8, seicross_state )
AM_RANGE(0x1005, 0x1005) AM_READ_PORT("DSW2") /* DSW2 */
AM_RANGE(0x1006, 0x1006) AM_READ_PORT("DSW3") /* DSW3 */
AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("dac", dac_device, write_unsigned8)
- AM_RANGE(0x8000, 0xf7ff) AM_ROM
+ AM_RANGE(0x8000, 0xf7ff) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, seicross_state )
+ AM_RANGE(0x8000, 0xf7ff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1")
+ADDRESS_MAP_END
@@ -427,6 +431,11 @@ static MACHINE_CONFIG_DERIVED( nvram, no_nvram )
MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram", seicross_state, nvram_init)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( friskytb, nvram )
+ MCFG_CPU_MODIFY("mcu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -435,7 +444,7 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( friskyt )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x7800, "maincpu", 0 )
ROM_LOAD( "ftom.01", 0x0000, 0x1000, CRC(bce5d486) SHA1(b3226d5737490f18092227a663e89ad48f39d82c) )
ROM_LOAD( "ftom.02", 0x1000, 0x1000, CRC(63157d6e) SHA1(2792f3d918ffee3818eca98f52192a069ab60678) )
ROM_LOAD( "ftom.03", 0x2000, 0x1000, CRC(c8d9ef2c) SHA1(43dd6bfd93188004b977b97120df28c028e8582b) )
@@ -445,9 +454,6 @@ ROM_START( friskyt )
ROM_LOAD( "ftom.07", 0x6000, 0x1000, CRC(b2ef303a) SHA1(a7150457b454e15c06fa832d42dd1f0e165fcd6e) )
ROM_LOAD( "ft8_8.rom", 0x7000, 0x0800, CRC(10461a24) SHA1(c1f98316a4e90a2a6ef4953708b90c9546caaedd) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 64k for the protection mcu */
- ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 ) /* shares the main program ROMs and RAM with the main CPU. */
-
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "ftom.11", 0x0000, 0x1000, CRC(1ec6ff65) SHA1(aab589c89cd14549b35f4dece5d3c231033c0c1a) )
ROM_LOAD( "ftom.12", 0x1000, 0x1000, CRC(3b8f40b5) SHA1(08e0c1fce11ee6c507c28b0d659c5b010f2f2b6f) )
@@ -460,7 +466,7 @@ ROM_START( friskyt )
ROM_END
ROM_START( friskyta )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x7800, "maincpu", 0 )
ROM_LOAD( "ft.01", 0x0000, 0x1000, CRC(0ea46e19) SHA1(3feb3ee882926c0efa602cf92e6879e84a6050ed) )
ROM_LOAD( "ft.02", 0x1000, 0x1000, CRC(4f7b8662) SHA1(400c47d7ab5f3a749dbadb2286255b969ec48348) )
ROM_LOAD( "ft.03", 0x2000, 0x1000, CRC(1eb1b77c) SHA1(c08d6c1f1bbe2d41b0f6336a0c53ec993556e6b4) )
@@ -470,9 +476,6 @@ ROM_START( friskyta )
ROM_LOAD( "ft.07", 0x6000, 0x1000, CRC(0ba02b2e) SHA1(1260c16d589fca37bf58ee28a4795f4b6333d0b9) )
ROM_LOAD( "ft8_8.rom", 0x7000, 0x0800, CRC(10461a24) SHA1(c1f98316a4e90a2a6ef4953708b90c9546caaedd) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 64k for the protection mcu */
- ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 ) /* shares the main program ROMs and RAM with the main CPU. */
-
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "ft.11", 0x0000, 0x1000, CRC(956d924a) SHA1(e61bf5f187932c6cb676b4120cd95fe422f6a1a6) )
ROM_LOAD( "ft.12", 0x1000, 0x1000, CRC(c028d3b8) SHA1(9e8768b9658f8b05ade4dd5fb2ecde4a52627bc1) )
@@ -486,7 +489,7 @@ ROM_END
ROM_START( friskytb )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x7800, "maincpu", 0 )
ROM_LOAD( "1.3a", 0x0000, 0x1000, CRC(554bdb0f) SHA1(d56a421329c5191599983009e841cd84d5b7c710) )
ROM_LOAD( "2.3b", 0x1000, 0x1000, CRC(0658633a) SHA1(3bf09e0d77bd8fcb66563c82c849c0cc45d9cacf) )
ROM_LOAD( "3.3d", 0x2000, 0x1000, CRC(c8de15ff) SHA1(1bb2108700e9f8aa9c5416324a2d0bdd05e8ff25) )
@@ -496,9 +499,6 @@ ROM_START( friskytb )
ROM_LOAD( "7.3i", 0x6000, 0x1000, CRC(aa36a6b8) SHA1(bf8af71313459a775b07dcfdce455077c4f499bf) )
ROM_LOAD( "8.3j", 0x7000, 0x0800, CRC(10461a24) SHA1(c1f98316a4e90a2a6ef4953708b90c9546caaedd) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 64k for the protection mcu */
- ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 ) /* shares the main program ROMs and RAM with the main CPU. */
-
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "11.7l", 0x0000, 0x1000, CRC(caa93315) SHA1(af8fd135c0a9c0278705975c127a91f246341da1) ) // 99.707031% - tile 0x69 is blank vs ft.11 (it's the symbol used for lives, instead this set shows lives to the left of the HIGH SCORE text using different gfx)
ROM_LOAD( "12.7n", 0x1000, 0x1000, CRC(c028d3b8) SHA1(9e8768b9658f8b05ade4dd5fb2ecde4a52627bc1) )
@@ -511,7 +511,7 @@ ROM_START( friskytb )
ROM_END
ROM_START( radrad )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x7800, "maincpu", 0 )
ROM_LOAD( "1.3a", 0x0000, 0x1000, CRC(b1e958ca) SHA1(3ab5fc3314f202ba527470eacbb76d52fe969bca) )
ROM_LOAD( "2.3b", 0x1000, 0x1000, CRC(30ba76b3) SHA1(e6af1fc35fdc71d5436f0d29e5722cbcb4409196) )
ROM_LOAD( "3.3c", 0x2000, 0x1000, CRC(1c9f397b) SHA1(7f556c5bef5309d5048c3b9671b88ad646a8b648) )
@@ -521,9 +521,6 @@ ROM_START( radrad )
ROM_LOAD( "7.3g", 0x6000, 0x1000, CRC(02b1f9c9) SHA1(6b857ae477d3c92a58494140ffa3337dba8e77cc) )
ROM_LOAD( "8.3h", 0x7000, 0x0800, CRC(911c90e8) SHA1(94fa91e767ab27a1616f1768f97a44a59a3f3294) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 64k for the protection mcu */
- ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 ) /* shares the main program ROMs and RAM with the main CPU. */
-
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "11.l7", 0x0000, 0x1000, CRC(4ace7afb) SHA1(3c495f106505d5dfed93393db1f1b3842f603448) )
ROM_LOAD( "12.n7", 0x1000, 0x1000, CRC(b19b8473) SHA1(42160f978f8e209a89be097b5cfc7ac0aeec49c5) )
@@ -539,7 +536,7 @@ ROM_START( radrad )
ROM_END
ROM_START( seicross )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x7800, "maincpu", 0 )
ROM_LOAD( "smc1", 0x0000, 0x1000, CRC(f6c3aeca) SHA1(d57019e80f7e3d47ca74f54604e92d40ba9819fc) )
ROM_LOAD( "smc2", 0x1000, 0x1000, CRC(0ec6c218) SHA1(d8cffea48d8afd229f2008399afe3858c13653e5) )
ROM_LOAD( "smc3", 0x2000, 0x1000, CRC(ceb3c8f4) SHA1(e49f834637b4addcf362cd010e31802c3e145cbe) )
@@ -549,9 +546,6 @@ ROM_START( seicross )
ROM_LOAD( "smc7", 0x6000, 0x1000, CRC(13052b03) SHA1(2866f2533a788f734310a74789f762f3fa17a57a) )
ROM_LOAD( "smc8", 0x7000, 0x0800, CRC(2093461d) SHA1(0d640bc7ee1e9ffe32580e3143677475145b06d2) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 64k for the protection mcu */
- ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 ) /* shares the main program ROMs and RAM with the main CPU. */
-
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "sz11.7k", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "smcd", 0x1000, 0x1000, CRC(c3c953c4) SHA1(a96937a48b59b7e992e53d279c10a5f3ea7f9a6f) )
@@ -567,7 +561,7 @@ ROM_START( seicross )
ROM_END
ROM_START( sectrzon )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x7800, "maincpu", 0 )
ROM_LOAD( "sz1.3a", 0x0000, 0x1000, CRC(f0a45cb4) SHA1(ab3b8d78e25cdbb2fd6a6c0718ae13767364994d) )
ROM_LOAD( "sz2.3c", 0x1000, 0x1000, CRC(fea68ddb) SHA1(b9ed0cad9a2ded04bcc7042d975b77be63313070) )
ROM_LOAD( "sz3.3d", 0x2000, 0x1000, CRC(baad4294) SHA1(e7fc3ccc940de6df8d786c986b602127c9db9ebb) )
@@ -577,9 +571,6 @@ ROM_START( sectrzon )
ROM_LOAD( "sz7.3i", 0x6000, 0x1000, CRC(7b34dc1c) SHA1(fb163a908c991cd214e0d2d685e74563a460a929) )
ROM_LOAD( "sz8.3j", 0x7000, 0x0800, CRC(9933526a) SHA1(2178ef8653f1d60be28bcaebe1033ef7ae480157) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 64k for the protection mcu */
- ROM_COPY( "maincpu", 0x0000, 0x8000, 0x8000 ) /* shares the main program ROMs and RAM with the main CPU. */
-
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "sz11.7k", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "sz12.7m", 0x1000, 0x1000, CRC(2bdef9ad) SHA1(50fe41e81c1307317b4fb6b47bf0619d141c42ff) )
@@ -596,21 +587,18 @@ ROM_END
DRIVER_INIT_MEMBER(seicross_state,friskytb)
{
- UINT8 *ROM = memregion("mcu")->base();
- address_space &space = m_mcu->space(AS_PROGRAM);
+ UINT8 *ROM = memregion("maincpu")->base();
// this code is in ROM 6.3h, maps to MCU at dxxx
- for (int i = 0; i < 0x8000; i++)
+ for (int i = 0; i < 0x7800; i++)
{
- ROM[i] = BITSWAP8(ROM[i + 0x8000], 6, 7, 5, 4, 3, 2, 0, 1);
+ m_decrypted_opcodes[i] = BITSWAP8(ROM[i], 6, 7, 5, 4, 3, 2, 0, 1);
}
-
- space.set_decrypted_region(0x8000, 0xffff, ROM);
}
GAME( 1981, friskyt, 0, nvram, friskyt, driver_device, 0, ROT0, "Nichibutsu", "Frisky Tom (set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1981, friskyta, friskyt, nvram, friskyt, driver_device, 0, ROT0, "Nichibutsu", "Frisky Tom (set 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1981, friskytb, friskyt, nvram, friskyt, seicross_state, friskytb, ROT0, "Nichibutsu", "Frisky Tom (set 3, encrypted)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // protection mcu runs encrypted opcodes
+GAME( 1981, friskytb, friskyt, friskytb, friskyt, seicross_state, friskytb, ROT0, "Nichibutsu", "Frisky Tom (set 3, encrypted)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // protection mcu runs encrypted opcodes
GAME( 1982, radrad, 0, no_nvram, radrad, driver_device, 0, ROT0, "Nichibutsu USA", "Radical Radial", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1984, seicross, 0, no_nvram, seicross, driver_device, 0, ROT90, "Nichibutsu / Alice", "Seicross", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1984, sectrzon, seicross, no_nvram, seicross, driver_device, 0, ROT90, "Nichibutsu / Alice", "Sector Zone", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/senjyo.c b/src/mame/drivers/senjyo.c
index 16b3440d986..decc626fc7d 100644
--- a/src/mame/drivers/senjyo.c
+++ b/src/mame/drivers/senjyo.c
@@ -166,8 +166,12 @@ static ADDRESS_MAP_START( senjyo_map, AS_PROGRAM, 8, senjyo_state )
AM_RANGE(0xd005, 0xd005) AM_READ_PORT("DSW2")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, senjyo_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( senjyo_sound_map, AS_PROGRAM, 8, senjyo_state )
- AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_RAM
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("sn1", sn76496_device, write)
AM_RANGE(0x9000, 0x9000) AM_DEVWRITE("sn2", sn76496_device, write)
@@ -233,7 +237,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( starforb_sound_map, AS_PROGRAM, 8, senjyo_state )
- AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_RAM
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("sn1", sn76496_device, write)
AM_RANGE(0x9000, 0x9000) AM_DEVWRITE("sn2", sn76496_device, write)
@@ -606,8 +610,12 @@ static MACHINE_CONFIG_START( senjyo, senjyo_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( senjyox, senjyo )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( starforb, senjyo )
+static MACHINE_CONFIG_DERIVED( starforb, senjyox )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -625,13 +633,13 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( senjyo )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "08m_05t.bin", 0x0000, 0x2000, CRC(b1f3544d) SHA1(59997164dfb740fce1862d89754be7517303161a) )
ROM_LOAD( "08k_04t.bin", 0x2000, 0x2000, CRC(e34468a8) SHA1(1931788e4ebe0dab9525f795b639be6544a6b31a) )
ROM_LOAD( "08j_03t.bin", 0x4000, 0x2000, CRC(c33aedee) SHA1(5adf83268ef7b91194dea41204bdb931a14f2158) )
ROM_LOAD( "08f_02t.bin", 0x6000, 0x2000, CRC(0ef4db9e) SHA1(0dcb216495f4328c44cc0af87ffb0bd255b7dc1a) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 )
ROM_LOAD( "02h_01t.bin", 0x0000, 0x2000, CRC(c1c24455) SHA1(24a2ab9e4df793f68f51bbe6a1313f38d951a8af) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -666,11 +674,11 @@ ROM_START( senjyo )
ROM_END
ROM_START( starforc )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "3.3p", 0x0000, 0x4000, CRC(8ba27691) SHA1(2b8b1e634ef5bed5c61a078e64a6dda77f84cdf5) )
ROM_LOAD( "2.3mn", 0x4000, 0x4000, CRC(0fc4d2d6) SHA1(0743e3928d5cc0e3f1bcdaf4b0cc83aeb7a2f7a8) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 ) /* 64k for sound board */
ROM_LOAD( "1.3hj", 0x0000, 0x2000, CRC(2735bb22) SHA1(1bd0558e05b41aebab3911991969512df904fea5) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -703,13 +711,13 @@ ROM_START( starforc )
ROM_END
ROM_START( starforcb )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "a2.8m", 0x0000, 0x2000, CRC(e81e8b7d) SHA1(829a082a335a0cf5bf8cc97bee96e62271f03ff4) )
ROM_LOAD( "a3.8k", 0x2000, 0x2000, CRC(7e98f0ab) SHA1(76eb387fbf5d04b7951a115d29076d1fd21346c4) )
ROM_LOAD( "a4.8j", 0x4000, 0x2000, CRC(285bc599) SHA1(c2f294a5e3ca39084e8f8503d6e9e00885ad0609) )
ROM_LOAD( "a5.8f", 0x6000, 0x2000, CRC(74d328b1) SHA1(3098438d47f650507de8b1d0aecfca81663cbe9c) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 )
ROM_LOAD( "a0.2e", 0x0000, 0x2000, CRC(5ab0e2fa) SHA1(78f0290d1e006a39bb8ee5a29cf229ed2c1f2b09) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -745,13 +753,13 @@ ROM_START( starforcb )
ROM_END
ROM_START( starforca )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "5.bin", 0x0000, 0x2000, CRC(7691bbd4) SHA1(efcab11ea0ed58b6a47c9d7a994c921dfaa1b47e) )
ROM_LOAD( "4.bin", 0x2000, 0x2000, CRC(32f3c34e) SHA1(9ecaa46fe296c2f2e9c8faf3d40085c0f10acbe1) )
ROM_LOAD( "3.bin", 0x4000, 0x2000, CRC(5e99cfa0) SHA1(d16d5247f4afb7abb5b8331ad7ae9d4d1f6d6554) )
ROM_LOAD( "2.bin", 0x6000, 0x2000, CRC(311c6e59) SHA1(ff3ba96ffade7602d3b150dae4bdc1c02a148576) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 )
ROM_LOAD( "0.bin", 0x0000, 0x2000, CRC(a277c268) SHA1(99ed8439119fa4b850ad8aadb7ff3e54d4cd40be) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -787,13 +795,13 @@ ROM_START( starforca )
ROM_END
ROM_START( starforce )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "starfore.005", 0x0000, 0x2000, CRC(825f7ebe) SHA1(d63fd516e075bcc28d42189216b95bbf491a4cd1) )
ROM_LOAD( "starfore.004", 0x2000, 0x2000, CRC(fbcecb65) SHA1(0406ae134915539a171603ecdd1b549f98dd048c) )
ROM_LOAD( "starfore.003", 0x4000, 0x2000, CRC(9f8013b9) SHA1(5398c97d84b4458ff926e07d6189d60565fbd8f1) )
ROM_LOAD( "starfore.002", 0x6000, 0x2000, CRC(f8111eba) SHA1(cf3295ffae4e36e87aea4332613f2cafb51522ce) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 )
ROM_LOAD( "starfore.000", 0x0000, 0x2000, CRC(a277c268) SHA1(99ed8439119fa4b850ad8aadb7ff3e54d4cd40be) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -826,11 +834,11 @@ ROM_START( starforce )
ROM_END
ROM_START( megaforc )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "mf3.bin", 0x0000, 0x4000, CRC(d3ea82ec) SHA1(e15fda65ba24517cc04abc55b5d079a33327553c) )
ROM_LOAD( "mf2.bin", 0x4000, 0x4000, CRC(aa320718) SHA1(cbbf8e4d06a1ecf77d776058d965afdaa7f5b47f) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 )
ROM_LOAD( "1.3hj", 0x0000, 0x2000, CRC(2735bb22) SHA1(1bd0558e05b41aebab3911991969512df904fea5) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -863,11 +871,11 @@ ROM_START( megaforc )
ROM_END
ROM_START( baluba )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "0", 0x0000, 0x4000, CRC(0e2ebe32) SHA1(d5cac260b19dc4e8d2064a7e3de5d52ab0eb95d0) )
ROM_LOAD( "1", 0x4000, 0x4000, CRC(cde97076) SHA1(ef47851b2ed0d820e1564545795b707d00d5c6ce) )
- ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound board */
+ ROM_REGION( 0x2000, "sub", 0 )
ROM_LOAD( "2", 0x0000, 0x2000, CRC(441fbc64) SHA1(3853f80043e28e06a3ee399e3cd261b3ee94e0b9) )
ROM_REGION( 0x03000, "gfx1", 0 )
@@ -907,8 +915,29 @@ DRIVER_INIT_MEMBER(senjyo_state,starforc)
}
DRIVER_INIT_MEMBER(senjyo_state,starfore)
{
- /* encrypted CPU */
- suprloco_decode(machine(), "maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...1...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
m_is_senjyo = 0;
m_scrollhack = 0;
@@ -916,8 +945,29 @@ DRIVER_INIT_MEMBER(senjyo_state,starfore)
DRIVER_INIT_MEMBER(senjyo_state,starfora)
{
- /* encrypted CPU */
- yamato_decode(machine(), "maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...0...1...1 */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...0...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...0...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...0...0...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...1 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...1...1...0 */
+ { 0x20,0xa0,0x28,0xa8 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
m_is_senjyo = 0;
m_scrollhack = 1;
@@ -932,8 +982,8 @@ DRIVER_INIT_MEMBER(senjyo_state,senjyo)
GAME( 1983, senjyo, 0, senjyo, senjyo, senjyo_state, senjyo, ROT90, "Tehkan", "Senjyo", GAME_SUPPORTS_SAVE )
GAME( 1984, starforc, 0, senjyo, starforc, senjyo_state, starforc, ROT90, "Tehkan", "Star Force", GAME_SUPPORTS_SAVE )
-GAME( 1984, starforce,starforc, senjyo, starforc, senjyo_state, starfore, ROT90, "Tehkan", "Star Force (encrypted, set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1984, starforce,starforc, senjyox, starforc, senjyo_state, starfore, ROT90, "Tehkan", "Star Force (encrypted, set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, starforcb,starforc, starforb,starforc, senjyo_state, starfore, ROT90, "bootleg", "Star Force (encrypted, bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1984, starforca,starforc, senjyo, starforc, senjyo_state, starfora, ROT90, "Tehkan", "Star Force (encrypted, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1984, starforca,starforc, senjyox, starforc, senjyo_state, starfora, ROT90, "Tehkan", "Star Force (encrypted, set 2)", GAME_SUPPORTS_SAVE )
GAME( 1985, megaforc, starforc, senjyo, starforc, senjyo_state, starforc, ROT90, "Tehkan (Video Ware license)", "Mega Force", GAME_SUPPORTS_SAVE )
GAME( 1986, baluba, 0, senjyo, baluba, senjyo_state, starforc, ROT90, "Able Corp, Ltd.", "Baluba-louk no Densetsu (Japan)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/sg1000a.c b/src/mame/drivers/sg1000a.c
index dbee65b80ea..2da7f13e8f1 100644
--- a/src/mame/drivers/sg1000a.c
+++ b/src/mame/drivers/sg1000a.c
@@ -126,13 +126,15 @@ class sg1000a_state : public driver_device
public:
sg1000a_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu") { }
+ m_maincpu(*this, "maincpu"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
DECLARE_WRITE_LINE_MEMBER(vdp_interrupt);
DECLARE_WRITE8_MEMBER(sg1000a_coin_counter_w);
DECLARE_DRIVER_INIT(sg1000a);
DECLARE_DRIVER_INIT(chwrestl);
required_device<cpu_device> m_maincpu;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
@@ -143,11 +145,15 @@ public:
*************************************/
static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, sg1000a_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM // separate region needed for decrypting
- AM_RANGE(0x8000, 0xbfff) AM_ROM
+ AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc3ff) AM_RAM AM_MIRROR(0x400)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, sg1000a_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROM AM_REGION("maincpu", 0x8000)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( io_map, AS_IO, 8, sg1000a_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x7f, 0x7f) AM_DEVWRITE("snsnd", sn76489_device, write)
@@ -285,6 +291,11 @@ static MACHINE_CONFIG_START( sg1000a, sg1000a_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sg1000ax, sg1000a )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
/*************************************
*
* ROM definitions
@@ -324,8 +335,30 @@ DRIVER_INIT_MEMBER(sg1000a_state,sg1000a)
DRIVER_INIT_MEMBER(sg1000a_state,chwrestl)
{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...1 */
+ { 0x80,0xa0,0x00,0x20 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...1 */
+ { 0x80,0xa0,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...0 */
+ { 0x80,0xa0,0x00,0x20 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
DRIVER_INIT_CALL(sg1000a);
- regulus_decode(machine(), "maincpu");
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
}
/*************************************
@@ -334,6 +367,6 @@ DRIVER_INIT_MEMBER(sg1000a_state,chwrestl)
*
*************************************/
-GAME( 1984, chboxing, 0, sg1000a, chboxing, sg1000a_state, sg1000a, ROT0, "Sega", "Champion Boxing", 0 )
-GAME( 1985, chwrestl, 0, sg1000a, chwrestl, sg1000a_state, chwrestl, ROT0, "Sega", "Champion Pro Wrestling", 0 )
-GAME( 1985, dokidoki, 0, sg1000a, dokidoki, sg1000a_state, sg1000a, ROT0, "Sega", "Doki Doki Penguin Land", 0 )
+GAME( 1984, chboxing, 0, sg1000a, chboxing, sg1000a_state, sg1000a, ROT0, "Sega", "Champion Boxing", 0 )
+GAME( 1985, chwrestl, 0, sg1000ax, chwrestl, sg1000a_state, chwrestl, ROT0, "Sega", "Champion Pro Wrestling", 0 )
+GAME( 1985, dokidoki, 0, sg1000a, dokidoki, sg1000a_state, sg1000a, ROT0, "Sega", "Doki Doki Penguin Land", 0 )
diff --git a/src/mame/drivers/stfight.c b/src/mame/drivers/stfight.c
index 75467910f10..9a2d235754b 100644
--- a/src/mame/drivers/stfight.c
+++ b/src/mame/drivers/stfight.c
@@ -275,6 +275,10 @@ static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, stfight_state )
AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sprite_ram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, stfight_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( cshooter_cpu1_map, AS_PROGRAM, 8, stfight_state )
AM_RANGE(0xc801, 0xc801) AM_WRITE(stfight_bank_w)
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_text_w) AM_SHARE("tx_vram")
@@ -536,6 +540,7 @@ static MACHINE_CONFIG_START( stfight, stfight_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz / 4)
MCFG_CPU_PROGRAM_MAP(cpu1_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", stfight_state, stfight_vb_interrupt)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_12MHz / 4)
@@ -589,6 +594,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cshooter, stfight )
MCFG_CPU_REPLACE("maincpu", Z80, XTAL_12MHz / 2)
MCFG_CPU_PROGRAM_MAP(cshooter_cpu1_map)
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MCFG_CPU_VBLANK_INT_DRIVER("screen", stfight_state, stfight_vb_interrupt)
MCFG_CPU_REPLACE("audiocpu", Z80, XTAL_12MHz / 2)
diff --git a/src/mame/drivers/suna8.c b/src/mame/drivers/suna8.c
index bf8ffd55b04..2761d97955b 100644
--- a/src/mame/drivers/suna8.c
+++ b/src/mame/drivers/suna8.c
@@ -73,14 +73,15 @@ DRIVER_INIT_MEMBER(suna8_state,hardhead)
rom[i] = BITSWAP8(rom[i], 7,6,5,3,4,2,1,0) ^ 0x58;
}
+ membank("bank0d")->set_base(memregion("maincpu")->base());
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
+ membank("bank1d")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
}
/* Non encrypted bootleg */
DRIVER_INIT_MEMBER(suna8_state,hardhedb)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base() + 0x48000);
+ membank("bank0d")->set_base(memregion("maincpu")->base() + 0x48000);
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
}
@@ -137,14 +138,13 @@ DRIVER_INIT_MEMBER(suna8_state, brickzn_common)
m_decrypt = brickzn_decrypt();
// Non-banked opcodes
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, m_decrypt);
+ membank("bank0d")->set_base(m_decrypt);
// Data banks: 00-0f normal data decryption, 10-1f alternate data decryption:
membank("bank1")->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000);
// Opcode banks: 00-1f normal opcode decryption:
- membank("bank1")->configure_decrypted_entries(0, 16, m_decrypt + 0x10000, 0x4000);
- membank("bank1")->configure_decrypted_entries(16, 16, m_decrypt + 0x10000, 0x4000);
+ membank("bank1d")->configure_entries(0, 16, m_decrypt + 0x10000, 0x4000);
+ membank("bank1d")->configure_entries(16, 16, m_decrypt + 0x10000, 0x4000);
}
DRIVER_INIT_MEMBER(suna8_state,brickzn)
@@ -209,8 +209,8 @@ DRIVER_INIT_MEMBER(suna8_state,brickzn11)
// Data banks: 00-0f normal data decryption, 10-1f alternate data decryption:
membank("bank1")->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000);
// Opcode banks: 00-1f normal opcode decryption:
- membank("bank1")->configure_decrypted_entries(0, 16, decrypt + 0x10000, 0x4000);
- membank("bank1")->configure_decrypted_entries(16, 16, decrypt + 0x10000, 0x4000);
+ membank("bank1d")->configure_entries(0, 16, decrypt + 0x10000, 0x4000);
+ membank("bank1d")->configure_entries(16, 16, decrypt + 0x10000, 0x4000);
}
@@ -220,14 +220,13 @@ DRIVER_INIT_MEMBER(suna8_state,brickzn11)
DRIVER_INIT_MEMBER(suna8_state,hardhea2)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *RAM = memregion("maincpu")->base();
size_t size = memregion("maincpu")->bytes();
UINT8 *decrypt = auto_alloc_array(machine(), UINT8, size);
UINT8 x;
int i;
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
+ membank("bank0d")->set_base(decrypt);
/* Address lines scrambling */
memcpy(decrypt, RAM, size);
@@ -307,14 +306,13 @@ rom13: 0?, 1y, 2n, 3n ?,?,?,? (palettes)
DRIVER_INIT_MEMBER(suna8_state,starfigh)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *RAM = memregion("maincpu")->base();
size_t size = memregion("maincpu")->bytes();
UINT8 *decrypt = auto_alloc_array(machine(), UINT8, size);
UINT8 x;
int i;
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
+ membank("bank0d")->set_base(decrypt);
/* Address lines scrambling */
memcpy(decrypt, RAM, size);
@@ -393,14 +391,13 @@ DRIVER_INIT_MEMBER(suna8_state,starfigh)
DRIVER_INIT_MEMBER(suna8_state,sparkman)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *RAM = memregion("maincpu")->base();
size_t size = memregion("maincpu")->bytes();
UINT8 *decrypt = auto_alloc_array(machine(), UINT8, size);
UINT8 x;
int i;
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
+ membank("bank0d")->set_base(decrypt);
/* Address lines scrambling */
memcpy(decrypt, RAM, size);
@@ -539,6 +536,7 @@ WRITE8_MEMBER(suna8_state::hardhead_bankswitch_w)
if (data & ~0xef) logerror("CPU #0 - PC %04X: unknown bank bits: %02X\n",space.device().safe_pc(),data);
membank("bank1")->set_entry(bank);
+ membank("bank1d")->set_entry(bank);
}
@@ -571,6 +569,10 @@ static ADDRESS_MAP_START( hardhead_map, AS_PROGRAM, 8, suna8_state )
AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(suna8_spriteram_w) AM_SHARE("spriteram") // Sprites
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, suna8_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ADDRESS_MAP_END
static ADDRESS_MAP_START( hardhead_io_map, AS_IO, 8, suna8_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
@@ -596,6 +598,7 @@ WRITE8_MEMBER(suna8_state::rranger_bankswitch_w)
if (data & ~0xf7) logerror("CPU #0 - PC %04X: unknown bank bits: %02X\n",space.device().safe_pc(),data);
membank("bank1")->set_entry(bank);
+ membank("bank1d")->set_entry(bank);
flip_screen_set(data & 0x20);
coin_lockout_w ( machine(), 0, data & 0x40);
@@ -695,6 +698,7 @@ WRITE8_MEMBER(suna8_state::brickzn_rombank_w)
if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",space.device().safe_pc(),data);
membank("bank1")->set_entry(bank + (membank("bank1")->entry() & 0x10));
+ membank("bank1d")->set_entry(membank("bank1")->entry());
m_rombank = data;
}
@@ -812,13 +816,11 @@ WRITE8_MEMBER(suna8_state::brickzn_multi_w)
if (m_prot_opcode_toggle == 0)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, m_decrypt);
+ membank("bank0d")->set_base(m_decrypt);
}
else
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base());
+ membank("bank0d")->set_base(memregion("maincpu")->base());
}
}
}
@@ -839,6 +841,7 @@ WRITE8_MEMBER(suna8_state::brickzn_prot2_w)
// Select alternate data decryption, see code at 787e:
membank("bank1")->set_entry((membank("bank1")->entry() & 0x0f) + ((m_prot2 == (data | 0xdc)) ? 0x10 : 0));
+ membank("bank1d")->set_entry(membank("bank1")->entry());
m_prot2_prev = m_prot2;
m_prot2 = data;
@@ -941,6 +944,7 @@ WRITE8_MEMBER(suna8_state::hardhea2_rombank_w)
if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",space.device().safe_pc(),data);
membank("bank1")->set_entry(bank);
+ membank("bank1d")->set_entry(bank);
m_rombank = data;
}
@@ -1080,6 +1084,7 @@ WRITE8_MEMBER(suna8_state::starfigh_leds_w)
int bank = m_rombank_latch & 0x0f;
membank("bank1")->set_entry(bank);
+ membank("bank1d")->set_entry(bank);
m_rombank = m_rombank_latch;
logerror("CPU #0 - PC %04X: rom bank = %02X\n",space.device().safe_pc(), m_rombank);
@@ -1193,6 +1198,7 @@ WRITE8_MEMBER(suna8_state::sparkman_rombank_w)
int bank = m_rombank_latch & 0x0f;
membank("bank1")->set_entry(bank);
+ membank("bank1d")->set_entry(bank);
m_rombank = m_rombank_latch;
logerror("CPU #0 - PC %04X: rom bank = %02X\n",space.device().safe_pc(), m_rombank);
@@ -1868,6 +1874,7 @@ static MACHINE_CONFIG_START( hardhead, suna8_state )
MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(hardhead_map)
MCFG_CPU_IO_MAP(hardhead_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) /* No NMI */
MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */
@@ -1922,6 +1929,7 @@ static MACHINE_CONFIG_START( rranger, suna8_state )
MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */
MCFG_CPU_PROGRAM_MAP(rranger_map)
MCFG_CPU_IO_MAP(rranger_io_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) /* IRQ & NMI ! */
MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */
@@ -1974,6 +1982,7 @@ MACHINE_RESET_MEMBER(suna8_state,brickzn)
m_paletteram_enab = 1; // for brickzn11
m_remap_sound = 0;
membank("bank1")->set_entry(0);
+ membank("bank1d")->set_entry(0);
}
static MACHINE_CONFIG_START( brickzn11, suna8_state )
@@ -1981,6 +1990,7 @@ static MACHINE_CONFIG_START( brickzn11, suna8_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* SUNA PROTECTION BLOCK */
MCFG_CPU_PROGRAM_MAP(brickzn11_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) // nmi breaks ramtest but is needed!
MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4) /* Z0840006PSC - 6MHz (measured) */
@@ -2065,6 +2075,7 @@ static MACHINE_CONFIG_DERIVED( hardhea2, brickzn )
MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* SUNA T568009 */
MCFG_CPU_PROGRAM_MAP(hardhea2_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", suna8_state, hardhea2_interrupt, "screen", 0, 1)
MCFG_MACHINE_RESET_OVERRIDE(suna8_state,hardhea2)
@@ -2084,6 +2095,7 @@ static MACHINE_CONFIG_START( starfigh, suna8_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */
MCFG_CPU_PROGRAM_MAP(starfigh_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", suna8_state, hardhea2_interrupt, "screen", 0, 1)
/* The sound section is identical to that of hardhead */
@@ -2135,6 +2147,7 @@ static MACHINE_CONFIG_START( sparkman, suna8_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */
MCFG_CPU_PROGRAM_MAP(sparkman_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", suna8_state, hardhea2_interrupt, "screen", 0, 1)
MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */
diff --git a/src/mame/drivers/suprloco.c b/src/mame/drivers/suprloco.c
index 587fdb4e004..2779544ffa9 100644
--- a/src/mame/drivers/suprloco.c
+++ b/src/mame/drivers/suprloco.c
@@ -36,8 +36,7 @@ WRITE8_MEMBER(suprloco_state::soundport_w)
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprloco_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROM
+ AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc1ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xc800, 0xc800) AM_READ_PORT("SYSTEM")
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("P1")
@@ -52,6 +51,10 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprloco_state )
AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, suprloco_state )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, suprloco_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
@@ -165,6 +168,7 @@ static MACHINE_CONFIG_START( suprloco, suprloco_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz (?) */
MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", suprloco_state, irq0_line_hold)
MCFG_CPU_ADD("audiocpu", Z80, 4000000)
@@ -202,7 +206,7 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( suprloco )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "epr-5226a.37", 0x0000, 0x4000, CRC(33b02368) SHA1(c6e3116ad4b52bcc3174de5770f7a7ce024790d5) ) /* encrypted */
ROM_LOAD( "epr-5227a.15", 0x4000, 0x4000, CRC(a5e67f50) SHA1(1dd52e4cf00ce414fe1db8259c9976cdc23513b4) ) /* encrypted */
ROM_LOAD( "epr-5228.28", 0x8000, 0x4000, CRC(a597828a) SHA1(61004d112591fd2d752c39df71c1304d9308daae) )
@@ -231,7 +235,7 @@ ROM_START( suprloco )
ROM_END
ROM_START( suprlocoo )
- ROM_REGION( 2*0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "epr-5226.37", 0x0000, 0x4000, CRC(57f514dd) SHA1(707800b90a22547a56b01d1e11775e9ee5555d23) ) /* encrypted */
ROM_LOAD( "epr-5227.15", 0x4000, 0x4000, CRC(5a1d2fb0) SHA1(fdb9416e5530718245fd597073a63feddb233c3c) ) /* encrypted */
ROM_LOAD( "epr-5228.28", 0x8000, 0x4000, CRC(a597828a) SHA1(61004d112591fd2d752c39df71c1304d9308daae) )
@@ -292,9 +296,30 @@ DRIVER_INIT_MEMBER(suprloco_state,suprloco)
}
}
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...1...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
+ };
/* decrypt program ROMs */
- suprloco_decode(machine(), "maincpu");
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0xc000, convtable);
}
diff --git a/src/mame/drivers/system1.c b/src/mame/drivers/system1.c
index e21fa0d4987..6cbaa042973 100644
--- a/src/mame/drivers/system1.c
+++ b/src/mame/drivers/system1.c
@@ -358,13 +358,20 @@ static const UINT8 cc_ex[0x100] = {
void system1_state::machine_start()
{
- UINT32 numbanks = (memregion("maincpu")->bytes() - 0x10000) / 0x4000;
+ UINT32 numbanks = (m_maincpu_region->bytes() - 0x10000) / 0x4000;
if (numbanks > 0)
- membank("bank1")->configure_entries(0, numbanks, memregion("maincpu")->base() + 0x10000, 0x4000);
+ m_bank1->configure_entries(0, numbanks, m_maincpu_region->base() + 0x10000, 0x4000);
else
- membank("bank1")->configure_entry(0, memregion("maincpu")->base() + 0x8000);
- membank("bank1")->set_entry(0);
+ m_bank1->configure_entry(0, m_maincpu_region->base() + 0x8000);
+ m_bank1->set_entry(0);
+
+ if (m_banked_decrypted_opcodes)
+ {
+ m_bank0d->set_base(m_banked_decrypted_opcodes);
+ m_bank1d->configure_entries(0, numbanks, m_banked_decrypted_opcodes + 0x10000, 0x4000);
+ m_bank1d->set_entry(0);
+ }
m_maincpu->z80_set_cycle_tables(cc_op, cc_cb, cc_ed, cc_xy, cc_xycb, cc_ex);
@@ -400,14 +407,16 @@ void system1_state::machine_reset()
void system1_state::bank44_custom_w(UINT8 data, UINT8 prevdata)
{
/* bank bits are bits 6 and 2 */
- membank("bank1")->set_entry(((data & 0x40) >> 5) | ((data & 0x04) >> 2));
+ m_bank1->set_entry(((data & 0x40) >> 5) | ((data & 0x04) >> 2));
}
void system1_state::bank0c_custom_w(UINT8 data, UINT8 prevdata)
{
/* bank bits are bits 3 and 2 */
- membank("bank1")->set_entry((data & 0x0c) >> 2);
+ m_bank1->set_entry((data & 0x0c) >> 2);
+ if(m_bank1d)
+ m_bank1d->set_entry((data & 0x0c) >> 2);
}
@@ -592,7 +601,7 @@ READ8_MEMBER(system1_state::mcu_io_r)
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
case 1:
- return memregion("maincpu")->base()[offset + 0x10000];
+ return m_maincpu_region->base()[offset + 0x10000];
case 2:
return m_maincpu->space(AS_IO).read_byte(offset);
@@ -733,6 +742,22 @@ static ADDRESS_MAP_START( system1_map, AS_PROGRAM, 8, system1_state )
AM_RANGE(0xfc00, 0xffff) AM_WRITE(system1_sprite_collision_reset_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, system1_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
+ AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("ram")
+ AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(system1_paletteram_w) AM_SHARE("paletteram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( banked_decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, system1_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d")
+ AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("ram")
+ AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(system1_paletteram_w) AM_SHARE("paletteram")
+ADDRESS_MAP_END
+
/* same as normal System 1 except address map is shuffled (RAM/collision are swapped) */
static ADDRESS_MAP_START( nobo_map, AS_PROGRAM, 8, system1_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
@@ -2146,6 +2171,12 @@ static MACHINE_CONFIG_START( sys1ppi, system1_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sys1ppix, sys1ppi )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
+
/* reduced visible area for scrolling games */
static MACHINE_CONFIG_DERIVED( sys1ppis, sys1ppi )
@@ -2154,6 +2185,10 @@ static MACHINE_CONFIG_DERIVED( sys1ppis, sys1ppi )
MCFG_SCREEN_VISIBLE_AREA(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sys1ppisx, sys1ppis )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
/* revised board with 128kbit ROMs and a Z80 PIO for outputs */
@@ -2169,6 +2204,11 @@ static MACHINE_CONFIG_DERIVED( sys1pio, sys1ppi )
MCFG_Z80PIO_OUT_PB_CB(WRITE8(system1_state, videomode_w))
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sys1piox, sys1pio )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
/* reduced visible area for scrolling games */
static MACHINE_CONFIG_DERIVED( sys1pios, sys1pio )
@@ -2177,6 +2217,10 @@ static MACHINE_CONFIG_DERIVED( sys1pios, sys1pio )
MCFG_SCREEN_VISIBLE_AREA(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sys1piosx, sys1pios )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
/* this describes the additional 8751 MCU when present */
@@ -2223,6 +2267,16 @@ static MACHINE_CONFIG_DERIVED( sys2, sys1ppi )
MCFG_SCREEN_UPDATE_DRIVER(system1_state, screen_update_system2)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sys2x, sys2 )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( sys2xb, sys2 )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( sys2m, sys2 )
MCFG_FRAGMENT_ADD( mcu )
MACHINE_CONFIG_END
@@ -2235,6 +2289,11 @@ static MACHINE_CONFIG_DERIVED( sys2row, sys2 )
MCFG_SCREEN_UPDATE_DRIVER(system1_state, screen_update_system2_rowscroll)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sys2rowxb, sys2row )
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(banked_decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( sys2rowm, sys2row )
MCFG_FRAGMENT_ADD( mcu )
MACHINE_CONFIG_END
@@ -4688,55 +4747,704 @@ ROM_END
DRIVER_INIT_MEMBER(system1_state,bank00)
{
m_videomode_custom = NULL;
+ m_banked_decrypted_opcodes = NULL;
}
+
DRIVER_INIT_MEMBER(system1_state,bank44)
{
m_videomode_custom = &system1_state::bank44_custom_w;
+ m_banked_decrypted_opcodes = NULL;
}
DRIVER_INIT_MEMBER(system1_state,bank0c)
{
m_videomode_custom = &system1_state::bank0c_custom_w;
+ m_banked_decrypted_opcodes = NULL;
+}
+
+DRIVER_INIT_MEMBER(system1_state,regulus)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...1 */
+ { 0x80,0xa0,0x00,0x20 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...1 */
+ { 0x80,0xa0,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...0 */
+ { 0x80,0xa0,0x00,0x20 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,mrviking)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...0...1...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...1...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,swat)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...0...0...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...0 */
+ { 0xa0,0xa8,0x80,0x88 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...1...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...1...1...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...0...0 */
+ { 0xa0,0x20,0x80,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...1...0 */
+ { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...1...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...1...0...1 */
+ { 0xa0,0xa8,0x80,0x88 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0xa8,0x80,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,flicky)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x08,0x88,0x00,0x80 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0x20,0x00 }, /* ...0...0...1...0 */
+ { 0x28,0x08,0x20,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x08,0x88,0x00,0x80 }, { 0x80,0x00,0xa0,0x20 }, /* ...0...1...0...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
+ { 0x28,0x08,0x20,0x00 }, { 0x28,0x08,0x20,0x00 }, /* ...0...1...1...0 */
+ { 0x28,0x08,0x20,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
+ { 0x08,0x88,0x00,0x80 }, { 0xa8,0x88,0x28,0x08 }, /* ...1...0...0...0 */
+ { 0xa8,0x88,0x28,0x08 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...0...0...1 */
+ { 0x28,0x08,0x20,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...0 */
+ { 0xa8,0x88,0x28,0x08 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...1 */
+ { 0x08,0x88,0x00,0x80 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...1...0...0 */
+ { 0xa8,0x88,0x28,0x08 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...1...0...1 */
+ { 0x28,0x08,0x20,0x00 }, { 0x28,0x08,0x20,0x00 }, /* ...1...1...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x88,0x80,0x08,0x00 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,wmatch)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...0...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...0...1...0 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...1...1 */
+ { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...0...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...0...1 */
+ { 0xa8,0x28,0x88,0x08 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...1...1...0 */
+ { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...1...1 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...0...0...1 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...1...0 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...0...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...1...0...0 */
+ { 0xa8,0x28,0x88,0x08 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...1...1...0 */
+ { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,bullfgtj)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...0...0...0...0 */
+ { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...0...0...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...0...1...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...0 */
+ { 0x28,0xa8,0x20,0xa0 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...1...1...0 */
+ { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x20,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...0 */
+ { 0x88,0x08,0xa8,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...0...1 */
+ { 0x28,0xa8,0x20,0xa0 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...0 */
+ { 0x28,0xa8,0x20,0xa0 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */
+ { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...0 */
+ { 0x88,0x08,0xa8,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...1 */
+ { 0x08,0x28,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */
+ { 0x08,0x28,0x00,0x20 }, { 0x88,0x08,0xa8,0x28 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,spatter)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0x08,0x80,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...0...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
+ { 0x00,0x08,0x20,0x28 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...0...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x80,0x88,0x00,0x08 }, /* ...0...1...0...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x80,0x88,0x00,0x08 }, /* ...1...0...0...0 */
+ { 0x80,0x88,0x00,0x08 }, { 0x00,0x08,0x20,0x28 }, /* ...1...0...0...1 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...1...0 */
+ { 0x00,0x08,0x20,0x28 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...1 */
+ { 0x80,0x88,0x00,0x08 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
+ { 0x80,0xa0,0x88,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...1...1...0 */
+ { 0x28,0x20,0xa8,0xa0 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,pitfall2)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
+ { 0x08,0x88,0x28,0xa8 }, { 0x28,0xa8,0x20,0xa0 }, /* ...0...0...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...1...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x20,0x00,0xa0,0x80 }, /* ...0...1...0...0 */
+ { 0x28,0xa8,0x20,0xa0 }, { 0x20,0x00,0xa0,0x80 }, /* ...0...1...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...1...1...0 */
+ { 0x28,0xa8,0x20,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...1...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...0...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0x28,0xa8,0x20,0xa0 }, /* ...1...0...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...1...0...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...1...0...1 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...1...0 */
+ { 0x80,0x88,0xa0,0xa8 }, { 0x28,0xa8,0x20,0xa0 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,nprinces)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x08,0x88,0x00,0x80 }, { 0xa0,0x20,0x80,0x00 }, /* ...0...0...0...0 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x20,0x80,0x00 }, /* ...0...1...0...0 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...1...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...0...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,seganinj)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...0...0...1 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...0...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...0...1...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...0...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...0...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...1...1...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
+ { 0xa0,0xa8,0x80,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...0...1 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...1...0 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...1...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...1...0 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0x28,0x08,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,imsorry)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0x08,0x80,0x00 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...0...0 */
+ { 0x00,0x20,0x80,0xa0 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...0...1 */
+ { 0x88,0x08,0xa8,0x28 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x00,0x20,0x80,0xa0 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...0...1...1 */
+ { 0x00,0x20,0x80,0xa0 }, { 0x08,0x00,0x88,0x80 }, /* ...0...1...0...0 */
+ { 0x00,0x20,0x80,0xa0 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...1...0...1 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...1...1...0 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...1...1...1 */
+ { 0x88,0x08,0x80,0x00 }, { 0x08,0x00,0x88,0x80 }, /* ...1...0...0...0 */
+ { 0x08,0x00,0x88,0x80 }, { 0x88,0x08,0x80,0x00 }, /* ...1...0...0...1 */
+ { 0x08,0x28,0x00,0x20 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...0 */
+ { 0x88,0x08,0x80,0x00 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...1 */
+ { 0x08,0x28,0x00,0x20 }, { 0x08,0x00,0x88,0x80 }, /* ...1...1...0...0 */
+ { 0x08,0x28,0x00,0x20 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...1...0...1 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x28,0x00,0x20 }, /* ...1...1...1...0 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x28,0x00,0x20 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,teddybb)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x20,0x28,0x00,0x08 }, { 0x80,0x00,0xa0,0x20 }, /* ...0...0...0...0 */
+ { 0x20,0x28,0x00,0x08 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...0...1 */
+ { 0x28,0x08,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x20,0x28,0x00,0x08 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...0...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...1 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...0...0...0 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...1 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...1 */
+ { 0x80,0x00,0xa0,0x20 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...1...0 */
+ { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x20,0xa8,0x28 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,myheroj)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x20,0x00,0xa0,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...0...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...0...0...0 */
+ { 0x80,0xa0,0x88,0xa8 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...0...0...1 */
+ { 0x80,0xa0,0x88,0xa8 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x08,0x88,0x00,0x80 }, /* ...1...1...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0xa8,0xa0,0x88,0x80 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,4dwarrio)
+{
+ // 315-5162
+ static const UINT8 xor_table[128] =
+ {
+ 0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
+ 0x00,
+ };
+
+ static const int swap_table[128] =
+ {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 12,
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode_2(m_maincpu_region->base(), m_decrypted_opcodes, xor_table, swap_table);
+}
+
+DRIVER_INIT_MEMBER(system1_state,wboy)
+{
+ // 315-5177
+ static const UINT8 xor_table[128] =
+ {
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+ };
+
+ static const int swap_table[128] =
+ {
+ 0,0,0,0,
+ 1,1,1,1,1,
+ 2,2,2,2,2,
+ 3,3,3,3,
+ 4,4,4,4,4,
+ 5,5,5,5,5,
+ 6,6,6,6,6,
+ 7,7,7,7,7,
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,
+
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,13,13,13,
+ 14,14,14,14,14,
+ 15,15,15,15,15,
+ 16,16,16,16,
+ 17,17,17,17,17,
+ 18,18,18,18,18,
+ 19,19,19,19,19,
+ 20,20,20,20,20,
+ 21,21,
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode_2(m_maincpu_region->base(), m_decrypted_opcodes, xor_table, swap_table);
+}
+
+DRIVER_INIT_MEMBER(system1_state,wboy2)
+{
+ // 315-5178
+ static const UINT8 xor_table[128] =
+ {
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
+ 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
+ 0x40,0x55,0x15,0x05,0x51,0x11,
+ 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
+ 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
+ 0x41,0x54,0x14,0x04,0x50,0x10,
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
+
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
+ 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
+ 0x40,0x55,0x15,0x05,0x51,0x11,
+ 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
+ 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
+ 0x41,0x54,0x14,0x04,0x50,0x10,
+ 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
+ };
+
+ static const int swap_table[128] =
+ {
+ 2,
+ 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7,
+ 0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4,
+ 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3,
+ 4, 6, 0, 2, 4, 6, 0, 2, 4, 6,
+ 8,
+ 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5,
+ 6, 0, 2, 4, 6, 0, 2,
+
+ 10,
+ 11,13,15, 9,11,13,15, 9,11,13,15,
+ 8,10,12,14, 8,10,12,14, 8,10,12,
+ 13,15, 9,11,13,15, 9,11,13,15, 9,11,
+ 12,14, 8,10,12,14, 8,10,12,14,
+ 16,
+ 9,11,13,15, 9,11,13,15, 9,11,13,
+ 14, 8,10,12,14, 8,10,
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode_2(m_maincpu_region->base(), m_decrypted_opcodes, xor_table, swap_table);
+}
+
+DRIVER_INIT_MEMBER(system1_state,wboyo)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...1...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...1 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...0 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...1...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...1...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank00);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,blockgal)
+{
+ DRIVER_INIT_CALL(bank00);
+ mc8123_decode(m_maincpu_region->base(), m_decrypted_opcodes, memregion("key")->base(), 0x8000);
+}
+
+DRIVER_INIT_MEMBER(system1_state,hvymetal)
+{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...1...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
+ { 0xa0,0x80,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...1 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...1 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...0 */
+ { 0xa0,0x20,0xa8,0x28 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...1...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...1...0 */
+ { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 } /* ...1...1...1...1 */
+ };
+
+ DRIVER_INIT_CALL(bank44);
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
+}
+
+DRIVER_INIT_MEMBER(system1_state,gardia)
+{
+ // 317-0006
+ DRIVER_INIT_CALL(bank44);
+ sega_decode_317(m_maincpu_region->base(), m_decrypted_opcodes, 2);
+}
+
+DRIVER_INIT_MEMBER(system1_state,gardiab)
+{
+ // 317-0007
+ DRIVER_INIT_CALL(bank44);
+ sega_decode_317(m_maincpu_region->base(), m_decrypted_opcodes, 3);
+}
+
+DRIVER_INIT_MEMBER(system1_state,wbml)
+{
+ DRIVER_INIT_CALL(bank0c);
+ m_banked_decrypted_opcodes = auto_alloc_array(machine(), UINT8, m_maincpu_region->bytes());
+ mc8123_decode(m_maincpu_region->base(), m_banked_decrypted_opcodes, memregion("key")->base(), m_maincpu_region->bytes());
+}
+
+DRIVER_INIT_MEMBER(system1_state,ufosensi)
+{
+ DRIVER_INIT_CALL(bank0c);
+ m_banked_decrypted_opcodes = auto_alloc_array(machine(), UINT8, m_maincpu_region->bytes());
+ mc8123_decode(m_maincpu_region->base(), m_banked_decrypted_opcodes, memregion("key")->base(), m_maincpu_region->bytes());
+}
+
+DRIVER_INIT_MEMBER(system1_state,wboysys2)
+{
+ // 315-5177
+ static const UINT8 xor_table[128] =
+ {
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
+ 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
+ 0x05,0x55,0x50,0x14,
+ };
+
+ static const int swap_table[128] =
+ {
+ 0,0,0,0,
+ 1,1,1,1,1,
+ 2,2,2,2,2,
+ 3,3,3,3,
+ 4,4,4,4,4,
+ 5,5,5,5,5,
+ 6,6,6,6,6,
+ 7,7,7,7,7,
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,
+
+ 8,8,8,8,
+ 9,9,9,9,9,
+ 10,10,10,10,10,
+ 11,11,11,11,
+ 12,12,12,12,12,
+ 13,13,13,13,13,
+ 14,14,14,14,14,
+ 15,15,15,15,15,
+ 16,16,16,16,
+ 17,17,17,17,17,
+ 18,18,18,18,18,
+ 19,19,19,19,19,
+ 20,20,20,20,20,
+ 21,21,
+ };
+
+ DRIVER_INIT_CALL(bank0c);
+ sega_decode_2(m_maincpu_region->base(), m_decrypted_opcodes, xor_table, swap_table);
}
-DRIVER_INIT_MEMBER(system1_state,regulus) { DRIVER_INIT_CALL(bank00); regulus_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,mrviking) { DRIVER_INIT_CALL(bank00); mrviking_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,swat) { DRIVER_INIT_CALL(bank00); swat_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,flicky) { DRIVER_INIT_CALL(bank00); flicky_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,wmatch) { DRIVER_INIT_CALL(bank00); wmatch_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,bullfgtj) { DRIVER_INIT_CALL(bank00); bullfgtj_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,spatter) { DRIVER_INIT_CALL(bank00); spatter_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,pitfall2) { DRIVER_INIT_CALL(bank00); pitfall2_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,nprinces) { DRIVER_INIT_CALL(bank00); nprinces_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,seganinj) { DRIVER_INIT_CALL(bank00); seganinj_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,imsorry) { DRIVER_INIT_CALL(bank00); imsorry_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,teddybb) { DRIVER_INIT_CALL(bank00); teddybb_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,myheroj) { DRIVER_INIT_CALL(bank00); myheroj_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,4dwarrio) { DRIVER_INIT_CALL(bank00); sega_315_5162_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,wboy) { DRIVER_INIT_CALL(bank00); sega_315_5177_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,wboy2) { DRIVER_INIT_CALL(bank00); sega_315_5178_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,wboyo) { DRIVER_INIT_CALL(bank00); hvymetal_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,blockgal) { DRIVER_INIT_CALL(bank00); mc8123_decrypt_rom(machine(), "maincpu", "key", NULL, 0); }
-
-DRIVER_INIT_MEMBER(system1_state,hvymetal) { DRIVER_INIT_CALL(bank44); hvymetal_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,gardia) { DRIVER_INIT_CALL(bank44); sega_317_0006_decode(machine(), "maincpu"); }
-DRIVER_INIT_MEMBER(system1_state,gardiab) { DRIVER_INIT_CALL(bank44); sega_317_0007_decode(machine(), "maincpu"); }
-
-DRIVER_INIT_MEMBER(system1_state,wbml) { DRIVER_INIT_CALL(bank0c); mc8123_decrypt_rom(machine(), "maincpu", "key", "bank1", 4); }
-DRIVER_INIT_MEMBER(system1_state,ufosensi) { DRIVER_INIT_CALL(bank0c); mc8123_decrypt_rom(machine(), "maincpu", "key", "bank1", 4); }
-DRIVER_INIT_MEMBER(system1_state,wboysys2) { DRIVER_INIT_CALL(bank0c); sega_315_5177_decode(machine(), "maincpu"); }
DRIVER_INIT_MEMBER(system1_state,dakkochn)
{
m_videomode_custom = &system1_state::dakkochn_custom_w;
-
- mc8123_decrypt_rom(machine(), "maincpu", "key", "bank1", 4);
+ m_banked_decrypted_opcodes = auto_alloc_array(machine(), UINT8, m_maincpu_region->bytes());
+ mc8123_decode(m_maincpu_region->base(), m_banked_decrypted_opcodes, memregion("key")->base(), m_maincpu_region->bytes());
}
DRIVER_INIT_MEMBER(system1_state,myherok)
{
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x20,0x00,0xa0,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...0...1 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...1...1 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...0 */
+ { 0x20,0x00,0xa0,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...0...0...0 */
+ { 0x80,0xa0,0x88,0xa8 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...0...0...1 */
+ { 0x80,0xa0,0x88,0xa8 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...0 */
+ { 0xa8,0xa0,0x88,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0x08,0x88,0x00,0x80 }, /* ...1...1...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
+ { 0x88,0x80,0x08,0x00 }, { 0xa8,0xa0,0x88,0x80 } /* ...1...1...1...1 */
+ };
+
+
int A;
UINT8 *rom;
@@ -4744,7 +5452,7 @@ DRIVER_INIT_MEMBER(system1_state,myherok)
/* additionally to the usual protection, all the program ROMs have data lines */
/* D0 and D1 swapped. */
- rom = memregion("maincpu")->base();
+ rom = m_maincpu_region->base();
for (A = 0;A < 0xc000;A++)
rom[A] = (rom[A] & 0xfc) | ((rom[A] & 1) << 1) | ((rom[A] & 2) >> 1);
@@ -4778,13 +5486,13 @@ DRIVER_INIT_MEMBER(system1_state,myherok)
}
}
- myheroj_decode(machine(), "maincpu");
+ sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable);
}
READ8_MEMBER(system1_state::nob_start_r)
{
/* in reality, it's likely some M1-dependent behavior */
- return (space.device().safe_pc() <= 0x0003) ? 0x80 : memregion("maincpu")->base()[1];
+ return (space.device().safe_pc() <= 0x0003) ? 0x80 : m_maincpu_region->base()[1];
}
DRIVER_INIT_MEMBER(system1_state,nob)
@@ -4809,7 +5517,7 @@ DRIVER_INIT_MEMBER(system1_state,nobb)
/* Patch to get PRG ROMS ('T', 'R' and 'S) status as "GOOD" in the "test mode" */
/* not really needed */
-// UINT8 *ROM = memregion("maincpu")->base();
+// UINT8 *ROM = m_maincpu_region->base();
// ROM[0x3296] = 0x18; // 'jr' instead of 'jr z' - 'T' (PRG Main ROM)
// ROM[0x32be] = 0x18; // 'jr' instead of 'jr z' - 'R' (Banked ROM 1)
@@ -4837,18 +5545,16 @@ DRIVER_INIT_MEMBER(system1_state,nobb)
DRIVER_INIT_MEMBER(system1_state,bootleg)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base() + 0x10000);
DRIVER_INIT_CALL(bank00);
+ memcpy(m_decrypted_opcodes, m_maincpu_region->base() + 0x10000, 0x8000);
}
DRIVER_INIT_MEMBER(system1_state,bootsys2)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.set_decrypted_region(0x0000, 0x7fff, memregion("maincpu")->base() + 0x20000);
- membank("bank1")->configure_decrypted_entries(0, 4, memregion("maincpu")->base() + 0x30000, 0x4000);
DRIVER_INIT_CALL(bank0c);
+ m_bank0d->set_base(m_maincpu_region->base() + 0x20000);
+ m_bank1d->configure_entries(0, 4, m_maincpu_region->base() + 0x30000, 0x4000);
}
DRIVER_INIT_MEMBER(system1_state,choplift)
@@ -4882,84 +5588,84 @@ DRIVER_INIT_MEMBER(system1_state,shtngmst)
*************************************/
/* PPI-based System 1 */
-GAME( 1983, starjack, 0, sys1ppis, starjack, system1_state, bank00, ROT270, "Sega", "Star Jacker (Sega)", GAME_SUPPORTS_SAVE )
-GAME( 1983, starjacks, starjack, sys1ppis, starjacks, system1_state, bank00, ROT270, "Sega (Stern Electronics license)", "Star Jacker (Stern Electronics)", GAME_SUPPORTS_SAVE )
-GAME( 1983, upndown, 0, sys1ppi, upndown, system1_state, nprinces, ROT270, "Sega", "Up'n Down (315-5030)", GAME_SUPPORTS_SAVE )
-GAME( 1983, upndownu, upndown, sys1ppi, upndown, system1_state, bank00, ROT270, "Sega", "Up'n Down (not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1983, regulus, 0, sys1ppi, regulus, system1_state, regulus, ROT270, "Sega", "Regulus (315-5033, Rev A.)", GAME_SUPPORTS_SAVE )
-GAME( 1983, reguluso, regulus, sys1ppi, reguluso, system1_state, regulus, ROT270, "Sega", "Regulus (315-5033)", GAME_SUPPORTS_SAVE )
-GAME( 1983, regulusu, regulus, sys1ppi, regulus, system1_state, bank00, ROT270, "Sega", "Regulus (not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1984, mrviking, 0, sys1ppis, mrviking, system1_state, mrviking, ROT270, "Sega", "Mister Viking (315-5041)", GAME_SUPPORTS_SAVE )
-GAME( 1984, mrvikingj, mrviking, sys1ppis, mrvikingj, system1_state, mrviking, ROT270, "Sega", "Mister Viking (315-5041, Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1984, swat, 0, sys1ppi, swat, system1_state, swat, ROT270, "Coreland / Sega", "SWAT (315-5048)", GAME_SUPPORTS_SAVE )
-GAME( 1984, flickyo, flicky, sys1ppi, flicky, system1_state, flicky, ROT0, "Sega", "Flicky (64k Version, System 1, 315-5051, set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1984, flickys1, flicky, sys1ppi, flickys1, system1_state, flicky, ROT0, "Sega", "Flicky (64k Version, System 1, 315-5051, set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1984, wmatch, 0, sys1ppis, wmatch, system1_state, wmatch, ROT270, "Sega", "Water Match (315-5064)", GAME_SUPPORTS_SAVE )
-GAME( 1984, bullfgt, 0, sys1ppi, bullfgt, system1_state, bullfgtj, ROT0, "Coreland / Sega", "Bullfight (315-5065)", GAME_SUPPORTS_SAVE )
-GAME( 1985, nprinces, seganinj, sys1ppi, seganinj, system1_state, flicky, ROT0, "bootleg?", "Ninja Princess (315-5051, 64k Ver. bootleg?)", GAME_SUPPORTS_SAVE )
-GAME( 1985, nprincesu, seganinj, sys1ppi, seganinj, system1_state, bank00, ROT0, "Sega", "Ninja Princess (64k Ver. not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboy2, wboy, sys1ppi, wboy, system1_state, wboy2, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5178)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboy2u, wboy, sys1ppi, wboy, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wbdeluxe, wboy, sys1ppi, wbdeluxe, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy Deluxe", GAME_SUPPORTS_SAVE )
-GAME( 1986, nob, 0, nobm, nob, system1_state, nob, ROT270, "Coreland / Data East Corporation", "Noboranka (Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1986, nobb, nob, nob, nob, system1_state, nobb, ROT270, "bootleg (Game Electronics)", "Noboranka (Japan, bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1983, starjack, 0, sys1ppis, starjack, system1_state, bank00, ROT270, "Sega", "Star Jacker (Sega)", GAME_SUPPORTS_SAVE )
+GAME( 1983, starjacks, starjack, sys1ppis, starjacks, system1_state, bank00, ROT270, "Sega (Stern Electronics license)", "Star Jacker (Stern Electronics)", GAME_SUPPORTS_SAVE )
+GAME( 1983, upndown, 0, sys1ppix, upndown, system1_state, nprinces, ROT270, "Sega", "Up'n Down (315-5030)", GAME_SUPPORTS_SAVE )
+GAME( 1983, upndownu, upndown, sys1ppi, upndown, system1_state, bank00, ROT270, "Sega", "Up'n Down (not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1983, regulus, 0, sys1ppix, regulus, system1_state, regulus, ROT270, "Sega", "Regulus (315-5033, Rev A.)", GAME_SUPPORTS_SAVE )
+GAME( 1983, reguluso, regulus, sys1ppix, reguluso, system1_state, regulus, ROT270, "Sega", "Regulus (315-5033)", GAME_SUPPORTS_SAVE )
+GAME( 1983, regulusu, regulus, sys1ppi, regulus, system1_state, bank00, ROT270, "Sega", "Regulus (not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1984, mrviking, 0, sys1ppisx, mrviking, system1_state, mrviking, ROT270, "Sega", "Mister Viking (315-5041)", GAME_SUPPORTS_SAVE )
+GAME( 1984, mrvikingj, mrviking, sys1ppisx, mrvikingj, system1_state, mrviking, ROT270, "Sega", "Mister Viking (315-5041, Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1984, swat, 0, sys1ppix, swat, system1_state, swat, ROT270, "Coreland / Sega", "SWAT (315-5048)", GAME_SUPPORTS_SAVE )
+GAME( 1984, flickyo, flicky, sys1ppix, flicky, system1_state, flicky, ROT0, "Sega", "Flicky (64k Version, System 1, 315-5051, set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1984, flickys1, flicky, sys1ppix, flickys1, system1_state, flicky, ROT0, "Sega", "Flicky (64k Version, System 1, 315-5051, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1984, wmatch, 0, sys1ppisx, wmatch, system1_state, wmatch, ROT270, "Sega", "Water Match (315-5064)", GAME_SUPPORTS_SAVE )
+GAME( 1984, bullfgt, 0, sys1ppix, bullfgt, system1_state, bullfgtj, ROT0, "Coreland / Sega", "Bullfight (315-5065)", GAME_SUPPORTS_SAVE )
+GAME( 1985, nprinces, seganinj, sys1ppix, seganinj, system1_state, flicky, ROT0, "bootleg?", "Ninja Princess (315-5051, 64k Ver. bootleg?)", GAME_SUPPORTS_SAVE )
+GAME( 1985, nprincesu, seganinj, sys1ppi, seganinj, system1_state, bank00, ROT0, "Sega", "Ninja Princess (64k Ver. not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboy2, wboy, sys1ppix, wboy, system1_state, wboy2, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, 315-5178)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboy2u, wboy, sys1ppi, wboy, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy (set 2, not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wbdeluxe, wboy, sys1ppi, wbdeluxe, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy Deluxe", GAME_SUPPORTS_SAVE )
+GAME( 1986, nob, 0, nobm, nob, system1_state, nob, ROT270, "Coreland / Data East Corporation", "Noboranka (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1986, nobb, nob, nob, nob, system1_state, nobb, ROT270, "bootleg (Game Electronics)", "Noboranka (Japan, bootleg)", GAME_SUPPORTS_SAVE )
/* PIO-based System 1 */
-GAME( 1984, flicky, 0, sys1pio, flicky, system1_state, flicky, ROT0, "Sega", "Flicky (128k Version, System 2, 315-5051)", GAME_SUPPORTS_SAVE )
-GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, bank00, ROT0, "Sega", "Flicky (128k Version, System 2, not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1984, thetogyu, bullfgt, sys1pio, bullfgt, system1_state, bullfgtj, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1984, spatter, 0, sys1pios, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1984, spattera, spatter, sys1pios, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (315-5099)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
-GAME( 1984, ssanchan, spatter, sys1pios, spatter, system1_state, spatter, ROT0, "Sega", "Sanrin San Chan (Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pitfall2, 0, sys1pio, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pitfall2a, pitfall2, sys1pio, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", GAME_SUPPORTS_SAVE )
-GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, bank00, ROT0, "Sega", "Pitfall II (not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1985, seganinj, 0, sys1pio, seganinj, system1_state, seganinj, ROT0, "Sega", "Sega Ninja (315-5102)", GAME_SUPPORTS_SAVE )
-GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, bank00, ROT0, "Sega", "Sega Ninja (not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1985, ninja, seganinj, sys1pio, seganinj, system1_state, seganinj, ROT0, "Sega", "Ninja (315-5102)", GAME_SUPPORTS_SAVE )
-GAME( 1985, nprinceso, seganinj, sys1pio, seganinj, system1_state, nprinces, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", GAME_SUPPORTS_SAVE )
-GAME( 1985, nprincesb, seganinj, sys1pio, seganinj, system1_state, flicky, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", GAME_SUPPORTS_SAVE )
-GAME( 1985, imsorry, 0, sys1pio, imsorry, system1_state, imsorry, ROT0, "Coreland / Sega", "I'm Sorry (315-5110, US)", GAME_SUPPORTS_SAVE )
-GAME( 1985, imsorryj, imsorry, sys1pio, imsorry, system1_state, imsorry, ROT0, "Coreland / Sega", "Gonbee no I'm Sorry (315-5110, Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1985, teddybb, 0, sys1pio, teddybb, system1_state, teddybb, ROT0, "Sega", "TeddyBoy Blues (315-5115, New Ver.)", GAME_SUPPORTS_SAVE )
-GAME( 1985, teddybbo, teddybb, sys1pio, teddybb, system1_state, teddybb, ROT0, "Sega", "TeddyBoy Blues (315-5115, Old Ver.)", GAME_SUPPORTS_SAVE )
-GAME( 1985, teddybbobl, teddybb, sys1pio, teddybb, system1_state, teddybb, ROT0, "bootleg", "TeddyBoy Blues (Old Ver. bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1985, myhero, 0, sys1pio, myhero, system1_state, bank00, ROT0, "Coreland / Sega", "My Hero (US, not encrypted)", GAME_SUPPORTS_SAVE )
-GAME( 1985, sscandal, myhero, sys1pio, myhero, system1_state, myheroj, ROT0, "Coreland / Sega", "Seishun Scandal (315-5132, Japan)", GAME_SUPPORTS_SAVE )
-GAME( 1985, myherok, myhero, sys1pio, myhero, system1_state, myherok, ROT0, "Coreland / Sega", "My Hero (Korea)", GAME_SUPPORTS_SAVE )
-GAME( 1985, 4dwarrio, 0, sys1pio, 4dwarrio, system1_state, 4dwarrio, ROT0, "Coreland / Sega", "4-D Warriors (315-5162)", GAME_SUPPORTS_SAVE )
-GAME( 1986, raflesia, 0, sys1pio, raflesia, system1_state, 4dwarrio, ROT270, "Coreland / Sega", "Rafflesia (315-5162)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboy, 0, sys1pio, wboy, system1_state, wboy, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5177)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboyo, wboy, sys1pio, wboy, system1_state, wboyo, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5135)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboy3, wboy, sys1pio, wboy3, system1_state, wboyo, ROT0, "Escape (Sega license)", "Wonder Boy (set 3, 315-5135)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboy4, wboy, sys1pio, wboy, system1_state, 4dwarrio, ROT0, "Escape (Sega license)", "Wonder Boy (315-5162, 4-D Warriors Conversion)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", GAME_SUPPORTS_SAVE ) // appears to be a very early / unfinished version.
-GAME( 1986, wboy5, wboy, sys1pio, wboy3, system1_state, wboyo, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1986, wboyub, wboy, sys1pio, wboy, system1_state, wboyo, ROT0, "bootleg", "Wonder Boy (US bootleg)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
-GAME( 1987, blockgal, 0, sys1pio, blockgal, system1_state, blockgal, ROT90, "Sega / Vic Tokai","Block Gal (MC-8123B, 317-0029)", GAME_SUPPORTS_SAVE)
+GAME( 1984, flicky, 0, sys1piox, flicky, system1_state, flicky, ROT0, "Sega", "Flicky (128k Version, System 2, 315-5051)", GAME_SUPPORTS_SAVE )
+GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, bank00, ROT0, "Sega", "Flicky (128k Version, System 2, not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1984, thetogyu, bullfgt, sys1piox, bullfgt, system1_state, bullfgtj, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1984, spatter, 0, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1984, spattera, spatter, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (315-5099)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
+GAME( 1984, ssanchan, spatter, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Sanrin San Chan (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pitfall2, 0, sys1piox, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pitfall2a, pitfall2, sys1piox, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", GAME_SUPPORTS_SAVE )
+GAME( 1985, pitfall2u, pitfall2, sys1pio, pitfall2u, system1_state, bank00, ROT0, "Sega", "Pitfall II (not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, seganinj, 0, sys1piox, seganinj, system1_state, seganinj, ROT0, "Sega", "Sega Ninja (315-5102)", GAME_SUPPORTS_SAVE )
+GAME( 1985, seganinju, seganinj, sys1pio, seganinj, system1_state, bank00, ROT0, "Sega", "Sega Ninja (not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, ninja, seganinj, sys1piox, seganinj, system1_state, seganinj, ROT0, "Sega", "Ninja (315-5102)", GAME_SUPPORTS_SAVE )
+GAME( 1985, nprinceso, seganinj, sys1piox, seganinj, system1_state, nprinces, ROT0, "Sega", "Ninja Princess (315-5098, 128k Ver.)", GAME_SUPPORTS_SAVE )
+GAME( 1985, nprincesb, seganinj, sys1piox, seganinj, system1_state, flicky, ROT0, "bootleg?", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", GAME_SUPPORTS_SAVE )
+GAME( 1985, imsorry, 0, sys1piox, imsorry, system1_state, imsorry, ROT0, "Coreland / Sega", "I'm Sorry (315-5110, US)", GAME_SUPPORTS_SAVE )
+GAME( 1985, imsorryj, imsorry, sys1piox, imsorry, system1_state, imsorry, ROT0, "Coreland / Sega", "Gonbee no I'm Sorry (315-5110, Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1985, teddybb, 0, sys1piox, teddybb, system1_state, teddybb, ROT0, "Sega", "TeddyBoy Blues (315-5115, New Ver.)", GAME_SUPPORTS_SAVE )
+GAME( 1985, teddybbo, teddybb, sys1piox, teddybb, system1_state, teddybb, ROT0, "Sega", "TeddyBoy Blues (315-5115, Old Ver.)", GAME_SUPPORTS_SAVE )
+GAME( 1985, teddybbobl, teddybb, sys1piox, teddybb, system1_state, teddybb, ROT0, "bootleg", "TeddyBoy Blues (Old Ver. bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1985, myhero, 0, sys1pio, myhero, system1_state, bank00, ROT0, "Coreland / Sega", "My Hero (US, not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, sscandal, myhero, sys1piox, myhero, system1_state, myheroj, ROT0, "Coreland / Sega", "Seishun Scandal (315-5132, Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1985, myherok, myhero, sys1piox, myhero, system1_state, myherok, ROT0, "Coreland / Sega", "My Hero (Korea)", GAME_SUPPORTS_SAVE )
+GAME( 1985, 4dwarrio, 0, sys1piox, 4dwarrio, system1_state, 4dwarrio, ROT0, "Coreland / Sega", "4-D Warriors (315-5162)", GAME_SUPPORTS_SAVE )
+GAME( 1986, raflesia, 0, sys1piox, raflesia, system1_state, 4dwarrio, ROT270, "Coreland / Sega", "Rafflesia (315-5162)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboy, 0, sys1piox, wboy, system1_state, wboy, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5177)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboyo, wboy, sys1piox, wboy, system1_state, wboyo, ROT0, "Escape (Sega license)", "Wonder Boy (set 1, 315-5135)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboy3, wboy, sys1piox, wboy3, system1_state, wboyo, ROT0, "Escape (Sega license)", "Wonder Boy (set 3, 315-5135)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboy4, wboy, sys1piox, wboy, system1_state, 4dwarrio, ROT0, "Escape (Sega license)", "Wonder Boy (315-5162, 4-D Warriors Conversion)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboyu, wboy, sys1pio, wboyu, system1_state, bank00, ROT0, "Escape (Sega license)", "Wonder Boy (prototype?)", GAME_SUPPORTS_SAVE ) // appears to be a very early / unfinished version.
+GAME( 1986, wboy5, wboy, sys1piox, wboy3, system1_state, wboyo, ROT0, "bootleg", "Wonder Boy (set 5, bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1986, wboyub, wboy, sys1piox, wboy, system1_state, wboyo, ROT0, "bootleg", "Wonder Boy (US bootleg)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
+GAME( 1987, blockgal, 0, sys1piox, blockgal, system1_state, blockgal, ROT90, "Sega / Vic Tokai","Block Gal (MC-8123B, 317-0029)", GAME_SUPPORTS_SAVE)
/* PIO-based System 1 with ROM banking */
-GAME( 1985, hvymetal, 0, sys1pio, hvymetal, system1_state, hvymetal, ROT0, "Sega", "Heavy Metal (315-5135)", GAME_SUPPORTS_SAVE )
-GAME( 1986, gardia, 0, sys1pio, gardia, system1_state, gardia, ROT270, "Coreland / Sega", "Gardia (317-0006)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE)
-GAME( 1986, brain, 0, sys1pio, brain, system1_state, bank44, ROT0, "Coreland / Sega", "Brain", GAME_SUPPORTS_SAVE )
+GAME( 1985, hvymetal, 0, sys1piox, hvymetal, system1_state, hvymetal, ROT0, "Sega", "Heavy Metal (315-5135)", GAME_SUPPORTS_SAVE )
+GAME( 1986, gardia, 0, sys1piox, gardia, system1_state, gardia, ROT270, "Coreland / Sega", "Gardia (317-0006)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE)
+GAME( 1986, brain, 0, sys1pio, brain, system1_state, bank44, ROT0, "Coreland / Sega", "Brain", GAME_SUPPORTS_SAVE )
/* System 2 */
-GAME( 1985, choplift, 0, sys2rowm, choplift, system1_state, choplift, ROT0, "Sega (licensed from Dan Gorlin)", "Choplifter (8751 315-5151)", GAME_SUPPORTS_SAVE )
-GAME( 1985, chopliftu, choplift, sys2row, choplift, system1_state, bank0c, ROT0, "Sega (licensed from Dan Gorlin)", "Choplifter (unprotected)", GAME_SUPPORTS_SAVE )
-GAME( 1985, chopliftbl, choplift, sys2row, choplift, system1_state, bank0c, ROT0, "bootleg", "Choplifter (bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1985, shtngmst, 0, sys2m, shtngmst, system1_state, shtngmst, ROT0, "Sega", "Shooting Master (8751 315-5159)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
-GAME( 1985, shtngmste, shtngmst, sys2m, shtngmst, system1_state, shtngmst, ROT0, "Sega / EVG", "Shooting Master (EVG, 8751 315-5159a)", GAME_SUPPORTS_SAVE )
-GAME( 1986, gardiab, gardia, sys2, gardia, system1_state, gardiab, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
-GAME( 1986, wboysys2, wboy, sys2, wboysys2, system1_state, wboysys2, ROT0, "Escape (Sega license)", "Wonder Boy (system 2)", GAME_SUPPORTS_SAVE )
-GAME( 1987, tokisens, 0, sys2, tokisens, system1_state, bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier", GAME_SUPPORTS_SAVE )
-GAME( 1987, wbml, 0, sys2, wbml, system1_state, wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", GAME_SUPPORTS_SAVE )
-GAME( 1987, wbmljo, wbml, sys2, wbml, system1_state, wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043)", GAME_SUPPORTS_SAVE )
-GAME( 1987, wbmljb, wbml, sys2, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (Japan bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1987, wbmlb, wbml, sys2, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (English bootleg set 1)", GAME_SUPPORTS_SAVE)
-GAME( 1987, wbmlbg, wbml, sys2, wbml, system1_state, bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy in Monster Land (English bootleg set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1987, wbmlbge, wbml, sys2, wbml, system1_state, bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy in Monster Land (English bootleg set 3)", GAME_SUPPORTS_SAVE )
-GAME( 2009, wbmlvc, wbml, sys2, wbml, system1_state, bootsys2, ROT0, "Sega", "Wonder Boy in Monster Land (English, Virtual Console)", GAME_SUPPORTS_SAVE )
-GAME( 1987, dakkochn, 0, sys2, dakkochn, system1_state, dakkochn, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", GAME_SUPPORTS_SAVE )
-GAME( 1987, blockgalb, blockgal, sys2, blockgal, system1_state, bootleg, ROT90, "bootleg", "Block Gal (bootleg)", GAME_SUPPORTS_SAVE )
-GAME( 1988, ufosensi, 0, sys2row, ufosensi, system1_state, ufosensi, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", GAME_SUPPORTS_SAVE )
-GAME( 1988, ufosensib, ufosensi, sys2row, ufosensi, system1_state, bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", GAME_SUPPORTS_SAVE )
+GAME( 1985, choplift, 0, sys2rowm, choplift, system1_state, choplift, ROT0, "Sega (licensed from Dan Gorlin)", "Choplifter (8751 315-5151)", GAME_SUPPORTS_SAVE )
+GAME( 1985, chopliftu, choplift, sys2row, choplift, system1_state, bank0c, ROT0, "Sega (licensed from Dan Gorlin)", "Choplifter (unprotected)", GAME_SUPPORTS_SAVE )
+GAME( 1985, chopliftbl, choplift, sys2row, choplift, system1_state, bank0c, ROT0, "bootleg", "Choplifter (bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1985, shtngmst, 0, sys2m, shtngmst, system1_state, shtngmst, ROT0, "Sega", "Shooting Master (8751 315-5159)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
+GAME( 1985, shtngmste, shtngmst, sys2m, shtngmst, system1_state, shtngmst, ROT0, "Sega / EVG", "Shooting Master (EVG, 8751 315-5159a)", GAME_SUPPORTS_SAVE )
+GAME( 1986, gardiab, gardia, sys2x, gardia, system1_state, gardiab, ROT270, "bootleg", "Gardia (317-0007?, bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
+GAME( 1986, wboysys2, wboy, sys2x, wboysys2, system1_state, wboysys2, ROT0, "Escape (Sega license)", "Wonder Boy (system 2)", GAME_SUPPORTS_SAVE )
+GAME( 1987, tokisens, 0, sys2, tokisens, system1_state, bank0c, ROT90, "Sega", "Toki no Senshi - Chrono Soldier", GAME_SUPPORTS_SAVE )
+GAME( 1987, wbml, 0, sys2xb, wbml, system1_state, wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", GAME_SUPPORTS_SAVE )
+GAME( 1987, wbmljo, wbml, sys2xb, wbml, system1_state, wbml, ROT0, "Sega / Westone", "Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043)", GAME_SUPPORTS_SAVE )
+GAME( 1987, wbmljb, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (Japan bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1987, wbmlb, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg", "Wonder Boy in Monster Land (English bootleg set 1)", GAME_SUPPORTS_SAVE)
+GAME( 1987, wbmlbg, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg (Galaxy Electronics)", "Wonder Boy in Monster Land (English bootleg set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1987, wbmlbge, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "bootleg (Gecas)", "Wonder Boy in Monster Land (English bootleg set 3)", GAME_SUPPORTS_SAVE )
+GAME( 2009, wbmlvc, wbml, sys2xb, wbml, system1_state, bootsys2, ROT0, "Sega", "Wonder Boy in Monster Land (English, Virtual Console)", GAME_SUPPORTS_SAVE )
+GAME( 1987, dakkochn, 0, sys2xb, dakkochn, system1_state, dakkochn, ROT0, "White Board", "DakkoChan House (MC-8123B, 317-5014)", GAME_SUPPORTS_SAVE )
+GAME( 1987, blockgalb, blockgal, sys2x, blockgal, system1_state, bootleg, ROT90, "bootleg", "Block Gal (bootleg)", GAME_SUPPORTS_SAVE )
+GAME( 1988, ufosensi, 0, sys2rowxb, ufosensi, system1_state, ufosensi, ROT0, "Sega", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", GAME_SUPPORTS_SAVE )
+GAME( 1988, ufosensib, ufosensi, sys2rowxb, ufosensi, system1_state, bootsys2, ROT0, "bootleg", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/system16.c b/src/mame/drivers/system16.c
index 692c99e659f..2c0723f6f18 100644
--- a/src/mame/drivers/system16.c
+++ b/src/mame/drivers/system16.c
@@ -625,6 +625,10 @@ static ADDRESS_MAP_START( bayrouteb1_map, AS_PROGRAM, 16, segas1x_bootleg_state
AM_RANGE(0x902002, 0x902003) AM_READ_PORT("DSW1")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, segas1x_bootleg_state )
+ AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
void segas1x_bootleg_state::datsu_set_pages( )
{
UINT16 page;
@@ -2159,6 +2163,7 @@ static MACHINE_CONFIG_START( goldnaxeb1, segas1x_bootleg_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 10000000)
MCFG_CPU_PROGRAM_MAP(goldnaxeb1_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, sys16_interrupt)
@@ -2187,6 +2192,7 @@ static MACHINE_CONFIG_DERIVED( goldnaxeb2, goldnaxeb1 )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(goldnaxeb2_map)
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MACHINE_CONFIG_END
@@ -2202,6 +2208,7 @@ static MACHINE_CONFIG_DERIVED( bayrouteb2, goldnaxeb1 )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(bayrouteb2_map)
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
MCFG_FRAGMENT_ADD(system16_datsu_sound)
@@ -3462,29 +3469,24 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,wb3bbl)
DRIVER_INIT_MEMBER(segas1x_bootleg_state,goldnaxeb1)
{
int i;
- UINT8 *ROM = memregion("maincpu")->base();
+ UINT16 *ROM = (UINT16 *)memregion("maincpu")->base();
UINT8 *KEY = memregion("decryption")->base();
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 data[0x1000];
+ UINT16 data[0x800];
// the decryption key is in a rom (part of an MSDOS executable...)
for (i = 0; i < 0x800; i++)
{
- KEY[i] = KEY[i] ^ 0xff;
- data[(i * 2) + 0] = ((KEY[i] & 0x80) >> 1) | ((KEY[i] & 0x40) >> 2) | ((KEY[i] & 0x20) >> 3) | ((KEY[i] & 0x10) >> 4);
- data[(i * 2) + 1] = ((KEY[i] & 0x08) << 3) | ((KEY[i] & 0x04) << 2) | ((KEY[i] & 0x02) << 1) | ((KEY[i] & 0x01) << 0);
+ UINT8 k = KEY[i] ^ 0xff;
+ data[i] = ((k & 0x80) << 7) | ((k & 0x40) << 6) | ((k & 0x20) << 5) | ((k & 0x10) << 4) | ((k & 0x08) << 3) | ((k & 0x04) << 2) | ((k & 0x02) << 1) | ((k & 0x01) << 0);
}
- m_decrypted_region = auto_alloc_array(machine(), UINT8, 0xc0000);
- memcpy(m_decrypted_region, ROM, 0xc0000);
+ memcpy(m_decrypted_opcodes, ROM, 0xc0000);
- for (i = 0; i < 0x40000; i++)
+ for (i = 0; i < 0x20000; i++)
{
- m_decrypted_region[i] = ROM[i] ^ data[(i & 0xfff) ^ 1];
+ m_decrypted_opcodes[i] = ROM[i] ^ data[i & 0x7ff];
}
- space.set_decrypted_region(0x00000, 0xbffff, m_decrypted_region);
-
DRIVER_INIT_CALL(common);
m_spritebank_type = 1;
@@ -3499,23 +3501,20 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,bayrouteb1)
//
// for now we use the code which is present in the unprotected bootleg set
// and modify the rom to use it
- UINT16 *ROM2;
- UINT16 *decrypted_region2;
// decrypt
DRIVER_INIT_CALL(goldnaxeb1);
- ROM2 = (UINT16*)memregion("maincpu")->base();
- decrypted_region2 = (UINT16*)m_decrypted_region;
+ UINT16 *ROM = (UINT16*)memregion("maincpu")->base();
// patch interrupt vector
- ROM2[0x0070/2] = 0x000b;
- ROM2[0x0072/2] = 0xf000;
+ ROM[0x0070/2] = 0x000b;
+ ROM[0x0072/2] = 0xf000;
// patch check for code in RAM
- decrypted_region2[0x107e/2] = 0x48e7;
- decrypted_region2[0x1080/2] = 0x000b;
- decrypted_region2[0x1082/2] = 0xf000;
+ m_decrypted_opcodes[0x107e/2] = 0x48e7;
+ m_decrypted_opcodes[0x1080/2] = 0x000b;
+ m_decrypted_opcodes[0x1082/2] = 0xf000;
}
DRIVER_INIT_MEMBER(segas1x_bootleg_state,bayrouteb2)
diff --git a/src/mame/drivers/tcl.c b/src/mame/drivers/tcl.c
index 2c975602f4d..48a5b93c25f 100644
--- a/src/mame/drivers/tcl.c
+++ b/src/mame/drivers/tcl.c
@@ -173,7 +173,6 @@ DRIVER_INIT_MEMBER(tcl_state,tcl)
{
/* only the first part is decrypted (and verified)*/
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *dest = memregion("maincpu")->base();
int len = memregion("maincpu")->bytes();
dynamic_buffer src(len);
@@ -197,8 +196,6 @@ DRIVER_INIT_MEMBER(tcl_state,tcl)
WRITEDEST((src[idx]^0x11)^0xf0); // abcdefgh -> ABCdefgH
}
}
-
- space.set_decrypted_region(0x0000, 0x7fff, dest+0x10000);
}
GAME( 1995, tcl, 0, tcl, tcl, tcl_state, tcl, ROT0, "Uniwang", "Taiwan Chess Legend", GAME_NOT_WORKING )
diff --git a/src/mame/drivers/toki.c b/src/mame/drivers/toki.c
index fc6d7cdf076..aad35f84649 100644
--- a/src/mame/drivers/toki.c
+++ b/src/mame/drivers/toki.c
@@ -403,6 +403,13 @@ static MACHINE_CONFIG_START( toki, toki_state ) /* KOYO 20.000MHz near the cpu *
SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(XTAL_14_31818MHz/4,XTAL_12MHz/12) /* verifed on pcb */
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( tokie, toki )
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_LOW()
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( tokic, toki )
+ SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM()
+MACHINE_CONFIG_END
static MACHINE_CONFIG_START( tokib, toki_state )
@@ -757,8 +764,6 @@ DRIVER_INIT_MEMBER(toki_state,toki)
{
ROM[i] = buffer[BITSWAP24(i,23,22,21,20,19,18,17,16,13,14,15,12,11,10,9,8,7,6,5,4,3,2,1,0)];
}
-
- m_seibu_sound->decrypt("audiocpu",0x2000);
}
@@ -821,16 +826,12 @@ DRIVER_INIT_MEMBER(toki_state,jujuba)
/* Decrypt data for z80 program */
{
- address_space &space = m_audiocpu->space(AS_PROGRAM);
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x20000);
+ UINT8 *decrypt = m_seibu_sound->get_custom_decrypt();
UINT8 *rom = memregion("audiocpu")->base();
- int i;
memcpy(decrypt,rom,0x20000);
- space.set_decrypted_region(0x0000, 0x1fff, decrypt);
-
- for (i = 0;i < 0x2000;i++)
+ for (int i = 0;i < 0x2000;i++)
{
UINT8 src = decrypt[i];
rom[i] = src^0x55;
@@ -852,15 +853,15 @@ DRIVER_INIT_MEMBER(toki_state,jujuba)
// these 2 are both unique revisions
-GAME( 1989, toki, 0, toki, toki, toki_state, toki, ROT0, "TAD Corporation", "Toki (World, set 1)", GAME_SUPPORTS_SAVE )
-GAME( 1989, tokiu, toki, toki, toki, toki_state, toki, ROT0, "TAD Corporation (Fabtek license)", "Toki (US, set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1989, toki, 0, tokie, toki, toki_state, toki, ROT0, "TAD Corporation", "Toki (World, set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1989, tokiu, toki, tokie, toki, toki_state, toki, ROT0, "TAD Corporation (Fabtek license)", "Toki (US, set 1)", GAME_SUPPORTS_SAVE )
// these 3 are all the same revision, only the region byte differs
-GAME( 1989, tokia, toki, toki, toki, toki_state, toki, ROT0, "TAD Corporation", "Toki (World, set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1989, tokiua,toki, toki, toki, toki_state, toki, ROT0, "TAD Corporation (Fabtek license)", "Toki (US, set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1989, juju, toki, toki, toki, toki_state, toki, ROT0, "TAD Corporation", "JuJu Densetsu (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1989, tokia, toki, tokie, toki, toki_state, toki, ROT0, "TAD Corporation", "Toki (World, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1989, tokiua,toki, tokie, toki, toki_state, toki, ROT0, "TAD Corporation (Fabtek license)", "Toki (US, set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1989, juju, toki, tokie, toki, toki_state, toki, ROT0, "TAD Corporation", "JuJu Densetsu (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1990, tokib, toki, tokib, tokib, toki_state, tokib, ROT0, "bootleg (Datsu)", "Toki (Datsu bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1990, jujub, toki, tokib, tokib, toki_state, tokib, ROT0, "bootleg (Playmark)", "JuJu Densetsu (Playmark bootleg)", GAME_SUPPORTS_SAVE )
/* Sound hardware seems to have been slightly modified, the coins are handled ok, but there is no music and bad sfx. Program roms have a slight bitswap, Flipscreen also seems to be ignored */
-GAME( 1989, jujuba, toki, toki, toki, toki_state, jujuba, ROT180, "bootleg", "JuJu Densetsu (Japan, bootleg)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // bootleg of tokia/juju revison
+GAME( 1989, jujuba, toki, tokic, toki, toki_state, jujuba, ROT180, "bootleg", "JuJu Densetsu (Japan, bootleg)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // bootleg of tokia/juju revison
diff --git a/src/mame/drivers/trackfld.c b/src/mame/drivers/trackfld.c
index 7ff93fb34ca..2aa78acb812 100644
--- a/src/mame/drivers/trackfld.c
+++ b/src/mame/drivers/trackfld.c
@@ -892,7 +892,7 @@ INTERRUPT_GEN_MEMBER(trackfld_state::vblank_nmi)
static MACHINE_CONFIG_START( trackfld, trackfld_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/6/2) /* a guess for now */
+ MCFG_CPU_ADD("maincpu", KONAMI1, MASTER_CLOCK/6/2) /* a guess for now */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", trackfld_state, vblank_irq)
@@ -1010,8 +1010,11 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( mastkin, trackfld )
/* basic machine hardware */
- MCFG_CPU_MODIFY("maincpu")
+ MCFG_DEVICE_REMOVE("maincpu")
+
+ MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/6/2) /* a guess for now */
MCFG_CPU_PROGRAM_MAP(mastkin_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", trackfld_state, vblank_irq)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( wizzquiz, trackfld )
@@ -1421,24 +1424,14 @@ ROM_END
DRIVER_INIT_MEMBER(trackfld_state,trackfld)
{
- konami1_decode(machine(), "maincpu");
}
DRIVER_INIT_MEMBER(trackfld_state,atlantol)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt;
- int A;
-
- /* "konami1" encrypted opcodes */
- decrypt = konami1_decode(machine(), "maincpu");
-
- /* not encrypted opcodes */
- for (A = 0; A < 0x6000; A++)
- decrypt[A] = rom[A];
- space.set_decrypted_region(0x0000, 0xffff, decrypt);
+ machine().device<konami1_device>("maincpu")->set_encryption_boundary(0x6000);
space.install_write_handler(0x0800, 0x0800, write8_delegate(FUNC(trackfld_state::atlantol_gfxbank_w),this));
space.nop_write(0x1000, 0x1000);
diff --git a/src/mame/drivers/turbo.c b/src/mame/drivers/turbo.c
index 29c981cee60..b9ec462b66d 100644
--- a/src/mame/drivers/turbo.c
+++ b/src/mame/drivers/turbo.c
@@ -539,7 +539,6 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( buckrog_map, AS_PROGRAM, 8, turbo_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(turbo_videoram_w) AM_SHARE("videoram") // FIX PAGE
AM_RANGE(0xc800, 0xc803) AM_MIRROR(0x07fc) AM_DEVREAD("i8255_0", i8255_device, read) AM_WRITE(buckrog_i8255_0_w) // 8255
AM_RANGE(0xd000, 0xd003) AM_MIRROR(0x07fc) AM_DEVREADWRITE("i8255_1", i8255_device, read, write) // 8255
@@ -555,6 +554,9 @@ static ADDRESS_MAP_START( buckrog_map, AS_PROGRAM, 8, turbo_state )
AM_RANGE(0xf800, 0xffff) AM_RAM // SCRATCH
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, turbo_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
static ADDRESS_MAP_START( buckrog_cpu2_map, AS_PROGRAM, 8, turbo_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
@@ -919,6 +921,7 @@ static MACHINE_CONFIG_START( buckrog, turbo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(buckrog_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", turbo_state, irq0_line_hold)
MCFG_CPU_ADD("subcpu", Z80, MASTER_CLOCK/4)
@@ -1178,7 +1181,7 @@ ROM_END
ROM_START( buckrog ) /* CPU BOARD Sega ID# 834-5158-01, ROM BOARD Sega ID# 834-5152-01 */
- ROM_REGION( 0xc000, "maincpu", 0 )
+ ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "epr-5265.cpu-ic3", 0x0000, 0x4000, CRC(f0055e97) SHA1(f6ee2afd6fef710949087d1cb04cbc242d1fa9f5) ) /* encrypted Z80 code, SEGA 315-5014 CPU */
ROM_LOAD( "epr-5266.cpu-ic4", 0x4000, 0x4000, CRC(7d084c39) SHA1(ef2c0a2a59e14d9e196fd3837139fc5acf0f63be) ) /* encrypted Z80 code, SEGA 315-5014 CPU */
@@ -1584,7 +1587,28 @@ DRIVER_INIT_MEMBER(turbo_state,turbo_enc)
DRIVER_INIT_MEMBER(turbo_state,buckrog_enc)
{
- buckrog_decode(machine(), "maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
+ { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...0...0 */
+ { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...1 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...0 */
+ { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
+ { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...1...1 */
+ { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...1...0 */
+ { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 } /* ...1...1...1...1 */
+ };
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x8000, convtable);
}
diff --git a/src/mame/drivers/wiz.c b/src/mame/drivers/wiz.c
index a0490bbd343..ab881a9a3e1 100644
--- a/src/mame/drivers/wiz.c
+++ b/src/mame/drivers/wiz.c
@@ -328,6 +328,10 @@ static ADDRESS_MAP_START( kungfut_main_map, AS_PROGRAM, 8, wiz_state )
AM_RANGE(0xf818, 0xf818) AM_WRITE(wiz_bgcolor_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, wiz_state )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( wiz_main_map, AS_PROGRAM, 8, wiz_state )
AM_RANGE(0xc800, 0xc801) AM_WRITE(wiz_coin_counter_w)
AM_RANGE(0xd400, 0xd400) AM_READ(wiz_protection_r)
@@ -830,6 +834,7 @@ static MACHINE_CONFIG_DERIVED( stinger, kungfut )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(stinger_main_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
/* basic machine hardware */
MCFG_CPU_MODIFY("audiocpu")
@@ -849,6 +854,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( scion, stinger )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_DECRYPTED_OPCODES)
+
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(2*8, 32*8-1, 2*8, 30*8-1)
@@ -863,12 +871,12 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( kungfut )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "p1.bin", 0x0000, 0x4000, CRC(b1e56960) SHA1(993388bbb663412110d1012be9ffc00b06fce4d0) )
ROM_LOAD( "p3.bin", 0x4000, 0x4000, CRC(6fc346f8) SHA1(bd1663fa780e41eafd668bf502b40c9750270e55) )
ROM_LOAD( "p2.bin", 0x8000, 0x4000, CRC(042cc9c5) SHA1(09f87e240c2aaa19fe7b8cb548ded828ab67b18b) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "1.bin", 0x0000, 0x2000, CRC(68028a5d) SHA1(2fabf5e55e09a34cd090d123737d31970e4086e8) )
ROM_REGION( 0x6000, "gfx1", 0 )
@@ -888,12 +896,12 @@ ROM_START( kungfut )
ROM_END
ROM_START( kungfuta )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "kungfu.01", 0x0000, 0x4000, CRC(48dada70) SHA1(a90901d2aef73d4fa9d9c80769b82a3fead0a0f9) )
ROM_LOAD( "kungfu.02", 0x4000, 0x4000, CRC(c08c5152) SHA1(c5db3ee1ee165708d93d296b51a5bb43265ac75f) )
ROM_LOAD( "kungfu.03", 0x8000, 0x4000, CRC(09b8670c) SHA1(170e7cbf87727d940e959fa7a0328b4cc1aba195) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "kungfu.04", 0x0000, 0x2000, CRC(352bff48) SHA1(87d2408d31e1326ec810debcb2c724d1f003ae7b) )
ROM_REGION( 0x6000, "gfx1", 0 )
@@ -913,12 +921,12 @@ ROM_START( kungfuta )
ROM_END
ROM_START( wiz )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "ic07_01.bin", 0x0000, 0x4000, CRC(c05f2c78) SHA1(98b93234684a3a228552ef41a08512fef1befedd) )
ROM_LOAD( "ic05_03.bin", 0x4000, 0x4000, CRC(7978d879) SHA1(866efdff3c111793d5a3cc2fa0b03a2b4e371c49) )
ROM_LOAD( "ic06_02.bin", 0x8000, 0x4000, CRC(9c406ad2) SHA1(cd82c3dc622886b6ebb30ba565f3c34d5a4e229b) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "ic57_10.bin", 0x0000, 0x2000, CRC(8a7575bd) SHA1(5470c4c3a40139f45db7a9e260f40b5244f10123) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -941,12 +949,12 @@ ROM_START( wiz )
ROM_END
ROM_START( wizt )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "wiz1.bin", 0x0000, 0x4000, CRC(5a6d3c60) SHA1(faeb7e7ddeee9638ec046655e87f866d81fdbee0) )
ROM_LOAD( "ic05_03.bin", 0x4000, 0x4000, CRC(7978d879) SHA1(866efdff3c111793d5a3cc2fa0b03a2b4e371c49) )
ROM_LOAD( "ic06_02.bin", 0x8000, 0x4000, CRC(9c406ad2) SHA1(cd82c3dc622886b6ebb30ba565f3c34d5a4e229b) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "ic57_10.bin", 0x0000, 0x2000, CRC(8a7575bd) SHA1(5470c4c3a40139f45db7a9e260f40b5244f10123) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -970,12 +978,12 @@ ROM_END
/* was marked as Wiz Alt Sound */
ROM_START( wizta )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "ic7", 0x0000, 0x4000, CRC(b2ec49ad) SHA1(f1624995e9d426dd69d6567a91713aa023e716ad) )
ROM_LOAD( "ic5", 0x4000, 0x4000, CRC(f7e8f792) SHA1(2c1f82e6f6b2573d8bf0a27fb344fe86f475ddef) )
ROM_LOAD( "ic6", 0x8000, 0x4000, CRC(9c406ad2) SHA1(cd82c3dc622886b6ebb30ba565f3c34d5a4e229b) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "ic57", 0x0000, 0x2000, CRC(8a7575bd) SHA1(5470c4c3a40139f45db7a9e260f40b5244f10123) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -998,14 +1006,14 @@ ROM_START( wizta )
ROM_END
ROM_START( stinger )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "1-5j.bin", 0x0000, 0x2000, CRC(1a2ca600) SHA1(473e89f2c49f6e6f38df5d6fc2267ffecf84c6c8) ) /* encrypted */
ROM_LOAD( "2-6j.bin", 0x2000, 0x2000, CRC(957cd39c) SHA1(38bb589b3bfd962415b31d1151adf4bdb661122f) ) /* encrypted */
ROM_LOAD( "3-8j.bin", 0x4000, 0x2000, CRC(404c932e) SHA1(c23eac49e06ff38564062c0e8c8cdadf877f1d6a) ) /* encrypted */
ROM_LOAD( "4-9j.bin", 0x6000, 0x2000, CRC(2d570f91) SHA1(31d54d9fd5254c33f07c605bd6112c7eb53c42a1) ) /* encrypted */
ROM_LOAD( "5-10j.bin", 0x8000, 0x2000, CRC(c841795c) SHA1(e03860813c03ca1c737935accc2b5fe87c6b624a) ) /* encrypted */
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "6-9f.bin", 0x0000, 0x2000, CRC(79757f0c) SHA1(71be938c32c6a84618763761786ecc5d7d47581a) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -1025,14 +1033,14 @@ ROM_START( stinger )
ROM_END
ROM_START( stinger2 )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "n1.bin", 0x0000, 0x2000, CRC(f2d2790c) SHA1(0e5e92ef45b5bc27b0818f83c89b3bda0e701403) ) /* encrypted */
ROM_LOAD( "n2.bin", 0x2000, 0x2000, CRC(8fd2d8d8) SHA1(d3318a81fddeb3fa50d01569c1e1145e26ce7277) ) /* encrypted */
ROM_LOAD( "n3.bin", 0x4000, 0x2000, CRC(f1794d36) SHA1(7954500f489c0bc58cda8e7ffc2e4474759fdc33) ) /* encrypted */
ROM_LOAD( "n4.bin", 0x6000, 0x2000, CRC(230ba682) SHA1(c419ffebd021d41b3f5021948007fb6bcdb1cdf7) ) /* encrypted */
ROM_LOAD( "n5.bin", 0x8000, 0x2000, CRC(a03a01da) SHA1(28fecac7a821ac4718242919840266a907160df0) ) /* encrypted */
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "6-9f.bin", 0x0000, 0x2000, CRC(79757f0c) SHA1(71be938c32c6a84618763761786ecc5d7d47581a) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -1052,14 +1060,14 @@ ROM_START( stinger2 )
ROM_END
ROM_START( scion )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "sc1", 0x0000, 0x2000, CRC(8dcad575) SHA1(3f194ece25e730b1cbbf3f332bbdebc3a6a72b0f) )
ROM_LOAD( "sc2", 0x2000, 0x2000, CRC(f608e0ba) SHA1(e55b0ad4dc117339d45a999e13760f4ab3ca4ce0) )
ROM_LOAD( "sc3", 0x4000, 0x2000, CRC(915289b9) SHA1(b32b40f93de4501619486a8c5a8367d3b2e357a6) )
ROM_LOAD( "4.9j", 0x6000, 0x2000, CRC(0f40d002) SHA1(13b04f3902ebdda02670fcb667e181cf70594c37) )
ROM_LOAD( "5.10j", 0x8000, 0x2000, CRC(dc4923b7) SHA1(ec5c22ef1f9ba0fe4da3de62a63a44aa3ff850f4) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "sc6", 0x0000, 0x2000, CRC(09f5f9c1) SHA1(83e489f32597880fb1a13f0bafedd275facb21f7) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -1079,14 +1087,14 @@ ROM_START( scion )
ROM_END
ROM_START( scionc )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0xc000, "maincpu", 0 )
ROM_LOAD( "1.5j", 0x0000, 0x2000, CRC(5aaf571e) SHA1(53becfad13e95012dce6597625c64dcba9ac4433) )
ROM_LOAD( "2.6j", 0x2000, 0x2000, CRC(d5a66ac9) SHA1(3192da12b2d6a07e203999ed97cdba16d4917a98) )
ROM_LOAD( "3.8j", 0x4000, 0x2000, CRC(6e616f28) SHA1(ea32add6173251152ca84426c098c92ace123878) )
ROM_LOAD( "4.9j", 0x6000, 0x2000, CRC(0f40d002) SHA1(13b04f3902ebdda02670fcb667e181cf70594c37) )
ROM_LOAD( "5.10j", 0x8000, 0x2000, CRC(dc4923b7) SHA1(ec5c22ef1f9ba0fe4da3de62a63a44aa3ff850f4) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x2000, "audiocpu", 0 )
ROM_LOAD( "6.9f", 0x0000, 0x2000, CRC(a66a0ce6) SHA1(b2d6a8ded007c362c58496ead33d1561a982440a) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
@@ -1115,15 +1123,11 @@ DRIVER_INIT_MEMBER(wiz_state,stinger)
{ 5,3,7, 0x80 },
{ 5,7,3, 0x28 }
};
- address_space &space = m_maincpu->space(AS_PROGRAM);
+
UINT8 *rom = memregion("maincpu")->base();
- int size = memregion("maincpu")->bytes();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, size);
const UINT8 *tbl;
- space.set_decrypted_region(0x0000, 0xffff, decrypt);
-
- for (int a = 0x0000; a < 0x10000; a++)
+ for (int a = 0x0000; a < 0xc000; a++)
{
int row;
UINT8 src;
@@ -1131,7 +1135,7 @@ DRIVER_INIT_MEMBER(wiz_state,stinger)
if (a & 0x2040)
{
/* not encrypted */
- decrypt[a] = rom[a];
+ m_decrypted_opcodes[a] = rom[a];
}
else
{
@@ -1142,7 +1146,7 @@ DRIVER_INIT_MEMBER(wiz_state,stinger)
/* decode the opcodes */
tbl = swap_xor_table[row];
- decrypt[a] = BITSWAP8(src, tbl[0], 6, tbl[1], 4, tbl[2], 2, 1, 0) ^ tbl[3];
+ m_decrypted_opcodes[a] = BITSWAP8(src, tbl[0], 6, tbl[1], 4, tbl[2], 2, 1, 0) ^ tbl[3];
}
}
}
diff --git a/src/mame/drivers/zaxxon.c b/src/mame/drivers/zaxxon.c
index 0b09caa8cab..54089a18c4d 100644
--- a/src/mame/drivers/zaxxon.c
+++ b/src/mame/drivers/zaxxon.c
@@ -438,6 +438,9 @@ static ADDRESS_MAP_START( zaxxon_map, AS_PROGRAM, 8, zaxxon_state )
AM_RANGE(0xe0fb, 0xe0fb) AM_MIRROR(0x1f00) AM_WRITE(zaxxon_bg_enable_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, zaxxon_state )
+ AM_RANGE(0x0000, 0x5fff) AM_ROM AM_SHARE("decrypted_opcodes")
+ADDRESS_MAP_END
/* derived from Zaxxon, different sound hardware */
static ADDRESS_MAP_START( ixion_map, AS_PROGRAM, 8, zaxxon_state )
@@ -939,9 +942,20 @@ static MACHINE_CONFIG_DERIVED( zaxxon, root )
MCFG_FRAGMENT_ADD(zaxxon_samples)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( szaxxon, zaxxon )
+
+ /* encryption */
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( futspy, root )
+ /* encryption */
+ MCFG_DEVICE_MODIFY("maincpu")
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(zaxxon_state, screen_update_futspy)
@@ -956,6 +970,7 @@ static MACHINE_CONFIG_DERIVED( razmataz, root )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(ixion_map)
+ MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_DEVICE_REMOVE("ppi8255")
@@ -1429,14 +1444,13 @@ ROM_START( tiptop ) /* 3 board stack */
ROM_END
-
/*************************************
*
- * ROM decryption
+ * Driver initialization
*
*************************************/
-void zaxxon_state::zaxxonj_decode(const char *cputag)
+DRIVER_INIT_MEMBER(zaxxon_state,zaxxonj)
{
/*
the values vary, but the translation mask is always laid out like this:
@@ -1480,15 +1494,9 @@ void zaxxon_state::zaxxonj_decode(const char *cputag)
{ 0x02,0x08,0x2a,0x20,0x20,0x2a,0x08,0x02 } /* .......1...1...1 */
};
- int A;
- address_space &space = machine().device(cputag)->memory().space(AS_PROGRAM);
- UINT8 *rom = memregion(cputag)->base();
- int size = memregion(cputag)->bytes();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, size);
-
- space.set_decrypted_region(0x0000, size - 1, decrypt);
+ UINT8 *rom = memregion("maincpu")->base();
- for (A = 0x0000; A < size; A++)
+ for (int A = 0x0000; A < 0x6000; A++)
{
int i,j;
UINT8 src;
@@ -1509,41 +1517,96 @@ void zaxxon_state::zaxxonj_decode(const char *cputag)
/* now decode the opcodes */
/* pick the translation table from bits 0, 4, and 8 of the address */
i = ((A >> 0) & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2);
- decrypt[A] = src ^ opcode_xortable[i][j];
+ m_decrypted_opcodes[A] = src ^ opcode_xortable[i][j];
}
}
-
-/*************************************
- *
- * Driver initialization
- *
- *************************************/
-
-DRIVER_INIT_MEMBER(zaxxon_state,zaxxonj)
-{
- zaxxonj_decode("maincpu");
-}
-
-
DRIVER_INIT_MEMBER(zaxxon_state,szaxxon)
{
- szaxxon_decode(machine(), "maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...0...0 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
+ { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...1 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
+ { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...1...1...0 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...1...0 */
+ { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...0...1...1 */
+ { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...1...0...0 */
+ { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...1...0...1 */
+ { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x6000, convtable);
}
DRIVER_INIT_MEMBER(zaxxon_state,futspy)
{
- futspy_decode(machine(), "maincpu");
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x28,0x08,0x20,0x00 }, { 0x28,0x08,0x20,0x00 }, /* ...0...0...0...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...0...0...0...1 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...0...0...1...0 */
+ { 0xa0,0x80,0x20,0x00 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...0...1...1 */
+ { 0x28,0x08,0x20,0x00 }, { 0x88,0x80,0xa8,0xa0 }, /* ...0...1...0...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...1...1...0 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...1...1 */
+ { 0x88,0x80,0xa8,0xa0 }, { 0x28,0x08,0x20,0x00 }, /* ...1...0...0...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...0...1 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x88,0x00,0x80 }, /* ...1...0...1...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...0...1...1 */
+ { 0x88,0x80,0xa8,0xa0 }, { 0x88,0x80,0xa8,0xa0 }, /* ...1...1...0...0 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...1...1...0...1 */
+ { 0x80,0x00,0xa0,0x20 }, { 0x28,0x08,0x20,0x00 }, /* ...1...1...1...0 */
+ { 0x20,0x28,0xa0,0xa8 }, { 0xa0,0x80,0x20,0x00 } /* ...1...1...1...1 */
+ };
+
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x6000, convtable);
}
DRIVER_INIT_MEMBER(zaxxon_state,razmataz)
{
- address_space &pgmspace = m_maincpu->space(AS_PROGRAM);
+ // Note: same as nprinces
+ static const UINT8 convtable[32][4] =
+ {
+ /* opcode data address */
+ /* A B C D A B C D */
+ { 0x08,0x88,0x00,0x80 }, { 0xa0,0x20,0x80,0x00 }, /* ...0...0...0...0 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...0...1...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x20,0x80,0x00 }, /* ...0...1...0...0 */
+ { 0xa8,0xa0,0x28,0x20 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...1...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
+ { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...0...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...0 */
+ { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...1 */
+ { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
+ { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 } /* ...1...1...1...1 */
+ };
+
- nprinces_decode(machine(), "maincpu");
+ sega_decode(memregion("maincpu")->base(), m_decrypted_opcodes, 0x6000, convtable);
+
+ address_space &pgmspace = m_maincpu->space(AS_PROGRAM);
/* additional input ports are wired */
pgmspace.install_read_port(0xc004, 0xc004, 0, 0x18f3, "SW04");
@@ -1570,19 +1633,19 @@ DRIVER_INIT_MEMBER(zaxxon_state,razmataz)
GAME( 1982, zaxxon, 0, zaxxon, zaxxon, driver_device, 0, ROT90, "Sega", "Zaxxon (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1982, zaxxon2, zaxxon, zaxxon, zaxxon, driver_device, 0, ROT90, "Sega", "Zaxxon (set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1982, zaxxon3, zaxxon, zaxxon, zaxxon, driver_device, 0, ROT90, "Sega", "Zaxxon (set 3)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
-GAME( 1982, zaxxonj, zaxxon, zaxxon, zaxxon, zaxxon_state, zaxxonj, ROT90, "Sega", "Zaxxon (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
-GAME( 1982, zaxxonb, zaxxon, zaxxon, zaxxon, zaxxon_state, zaxxonj, ROT90, "bootleg", "Jackson", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1982, zaxxonj, zaxxon, szaxxon, zaxxon, zaxxon_state, zaxxonj, ROT90, "Sega", "Zaxxon (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1982, zaxxonb, zaxxon, zaxxon, zaxxon, zaxxon_state, zaxxonj, ROT90, "bootleg", "Jackson", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
/* standard Zaxxon hardware but extra sound board plugged into 8255 PPI socket and encrypted cpu */
-GAME( 1982, szaxxon, 0, zaxxon, szaxxon, zaxxon_state, szaxxon, ROT90, "Sega", "Super Zaxxon (315-5013)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1982, szaxxon, 0, szaxxon, szaxxon, zaxxon_state, szaxxon, ROT90, "Sega", "Super Zaxxon (315-5013)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
/* standard Zaxxon hardware? but encrypted cpu */
-GAME( 1984, futspy, 0, futspy, futspy, zaxxon_state, futspy, ROT90, "Sega", "Future Spy (315-5061)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1984, futspy, 0, futspy, futspy, zaxxon_state, futspy, ROT90, "Sega", "Future Spy (315-5061)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
/* these games run on modified Zaxxon hardware with no skewing, extra inputs, and a */
/* G-80 Universal Sound Board */
-GAME( 1983, razmataz, 0, razmataz, razmataz, zaxxon_state, razmataz, ROT90, "Sega", "Razzmatazz", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
-GAME( 1983, ixion, 0, razmataz, ixion, zaxxon_state, szaxxon, ROT270, "Sega", "Ixion (prototype)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE)
+GAME( 1983, razmataz, 0, razmataz, razmataz, zaxxon_state, razmataz, ROT90, "Sega", "Razzmatazz", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1983, ixion, 0, razmataz, ixion, zaxxon_state, szaxxon, ROT270, "Sega", "Ixion (prototype)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE)
/* these games run on a slightly newer Zaxxon hardware with more ROM space and a */
/* custom sprite DMA chip */
diff --git a/src/mame/includes/angelkds.h b/src/mame/includes/angelkds.h
index d40f622a265..96009b248c9 100644
--- a/src/mame/includes/angelkds.h
+++ b/src/mame/includes/angelkds.h
@@ -19,7 +19,8 @@ public:
m_subcpu(*this, "sub"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_bgtopvideoram;
@@ -71,4 +72,5 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
diff --git a/src/mame/includes/appoooh.h b/src/mame/includes/appoooh.h
index 85036346278..01c34c16dff 100644
--- a/src/mame/includes/appoooh.h
+++ b/src/mame/includes/appoooh.h
@@ -16,7 +16,8 @@ public:
m_msm(*this, "msm"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_spriteram;
@@ -65,6 +66,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
#define CHR1_OFST 0x00 /* palette page of char set #1 */
diff --git a/src/mame/includes/boogwing.h b/src/mame/includes/boogwing.h
index 2941973ac05..0c7a9a7d317 100644
--- a/src/mame/includes/boogwing.h
+++ b/src/mame/includes/boogwing.h
@@ -35,7 +35,8 @@ public:
m_pf4_rowscroll(*this, "pf4_rowscroll"),
m_sprgen1(*this, "spritegen1"),
m_sprgen2(*this, "spritegen2"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
/* devices */
@@ -57,6 +58,7 @@ public:
required_device<decospr_device> m_sprgen1;
required_device<decospr_device> m_sprgen2;
required_device<palette_device> m_palette;
+ required_shared_ptr<UINT16> m_decrypted_opcodes;
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_DRIVER_INIT(boogwing);
diff --git a/src/mame/includes/cclimber.h b/src/mame/includes/cclimber.h
index f2242a895f5..14489ef1f5f 100644
--- a/src/mame/includes/cclimber.h
+++ b/src/mame/includes/cclimber.h
@@ -20,8 +20,9 @@ public:
m_swimmer_palettebank(*this, "palettebank"),
m_swimmer_background_color(*this, "bgcolor"),
m_toprollr_bg_videoram(*this, "bg_videoram"),
- m_toprollr_bg_coloram(*this, "bg_coloram") { }
-
+ m_toprollr_bg_coloram(*this, "bg_coloram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
+
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
@@ -39,6 +40,7 @@ public:
optional_shared_ptr<UINT8> m_swimmer_background_color;
optional_shared_ptr<UINT8> m_toprollr_bg_videoram;
optional_shared_ptr<UINT8> m_toprollr_bg_coloram;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
UINT8 m_yamato_p0;
UINT8 m_yamato_p1;
diff --git a/src/mame/includes/commando.h b/src/mame/includes/commando.h
index 0d3f78f873a..ad7fe963494 100644
--- a/src/mame/includes/commando.h
+++ b/src/mame/includes/commando.h
@@ -21,7 +21,8 @@ public:
m_audiocpu(*this, "audiocpu"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_device<buffered_spriteram8_device> m_spriteram;
@@ -58,4 +59,5 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
diff --git a/src/mame/includes/cps1.h b/src/mame/includes/cps1.h
index 6f5ee69fb46..3a917e812d8 100644
--- a/src/mame/includes/cps1.h
+++ b/src/mame/includes/cps1.h
@@ -116,7 +116,8 @@ public:
m_msm_2(*this, "msm2"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
// cps1
@@ -212,6 +213,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT16> m_decrypted_opcodes;
DECLARE_READ16_MEMBER(cps1_hack_dsw_r);
DECLARE_READ16_MEMBER(cps1_in1_r);
@@ -301,6 +303,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(cps2_interrupt);
TIMER_CALLBACK_MEMBER(cps2_update_digital_volume);
+ void kabuki_setup(void (*decode)(UINT8 *src, UINT8 *dst));
/* fcrash handlers */
DECLARE_DRIVER_INIT(kodb);
diff --git a/src/mame/includes/cps3.h b/src/mame/includes/cps3.h
index efbde9ea77d..2ff488f0445 100644
--- a/src/mame/includes/cps3.h
+++ b/src/mame/includes/cps3.h
@@ -28,7 +28,9 @@ public:
m_tilemap40_regs_base(*this, "tmap40_regs"),
m_tilemap50_regs_base(*this, "tmap50_regs"),
m_fullscreenzoom(*this, "fullscreenzoom"),
- m_0xc0000000_ram(*this, "0xc0000000_ram")
+ m_0xc0000000_ram(*this, "0xc0000000_ram"),
+ m_decrypted_gamerom(*this, "decrypted_gamerom"),
+ m_0xc0000000_ram_decrypted(*this, "0xc0000000_ram_decrypted")
{ }
required_device<sh2_device> m_maincpu;
@@ -45,13 +47,12 @@ public:
required_shared_ptr<UINT32> m_tilemap50_regs_base;
required_shared_ptr<UINT32> m_fullscreenzoom;
required_shared_ptr<UINT32> m_0xc0000000_ram;
+ required_shared_ptr<UINT32> m_decrypted_gamerom;
+ required_shared_ptr<UINT32> m_0xc0000000_ram_decrypted;
fujitsu_29f016a_device *m_simm[7][8];
- UINT32* m_decrypted_bios;
- UINT32* m_decrypted_gamerom;
UINT32 m_cram_gfxflash_bank;
UINT32* m_nops;
- UINT32* m_0xc0000000_ram_decrypted;
UINT32* m_char_ram;
UINT32* m_eeprom;
UINT32 m_ss_pal_base;
@@ -111,7 +112,6 @@ public:
DECLARE_WRITE32_MEMBER(cps3_unk_vidregs_w);
DECLARE_READ32_MEMBER(cps3_colourram_r);
DECLARE_WRITE32_MEMBER(cps3_colourram_w);
- DECLARE_DIRECT_UPDATE_MEMBER(cps3_direct_handler);
DECLARE_DRIVER_INIT(sfiii3);
DECLARE_DRIVER_INIT(sfiii);
DECLARE_DRIVER_INIT(redearth);
diff --git a/src/mame/includes/darkmist.h b/src/mame/includes/darkmist.h
index 0a50e431e0d..07b63ff6108 100644
--- a/src/mame/includes/darkmist.h
+++ b/src/mame/includes/darkmist.h
@@ -15,7 +15,8 @@ public:
m_scroll(*this, "scroll"),
m_videoram(*this, "videoram"),
m_workram(*this, "workram"),
- m_spriteram(*this, "spriteram") { }
+ m_spriteram(*this, "spriteram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
required_device<t5182_device> m_t5182;
@@ -27,6 +28,7 @@ public:
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_workram;
required_shared_ptr<UINT8> m_spriteram;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
int m_hw;
tilemap_t *m_bgtilemap;
diff --git a/src/mame/includes/decocrpt.h b/src/mame/includes/decocrpt.h
index 3bfcd1c6e8a..6ea05a3b7a0 100644
--- a/src/mame/includes/decocrpt.h
+++ b/src/mame/includes/decocrpt.h
@@ -9,7 +9,7 @@ void deco56_remap_gfx(running_machine &machine, const char *tag);
/*----------- defined in machine/deco102.c -----------*/
-void deco102_decrypt_cpu(running_machine &machine, const char *cputag, int address_xor, int data_select_xor, int opcode_select_xor);
+void deco102_decrypt_cpu(UINT16 *rom, UINT16 *opcodes, int size, int address_xor, int data_select_xor, int opcode_select_xor);
/*----------- defined in machine/deco156.c -----------*/
diff --git a/src/mame/includes/dietgo.h b/src/mame/includes/dietgo.h
index 8211cec1b8e..12c47ebf49e 100644
--- a/src/mame/includes/dietgo.h
+++ b/src/mame/includes/dietgo.h
@@ -24,7 +24,8 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_deco_tilegen1(*this, "tilegen1"),
- m_decocomn(*this, "deco_common")
+ m_decocomn(*this, "deco_common"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
optional_device<deco104_device> m_deco104;
@@ -40,6 +41,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<deco16ic_device> m_deco_tilegen1;
required_device<decocomn_device> m_decocomn;
+ required_shared_ptr<UINT16> m_decrypted_opcodes;
DECLARE_DRIVER_INIT(dietgo);
virtual void machine_start();
UINT32 screen_update_dietgo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/freekick.h b/src/mame/includes/freekick.h
index f2bb788d160..514cbfb7c2b 100644
--- a/src/mame/includes/freekick.h
+++ b/src/mame/includes/freekick.h
@@ -11,7 +11,9 @@ public:
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_bank1(*this, "bank1"),
+ m_bank1d(*this, "bank1d") { }
/* memory pointers */
required_shared_ptr<UINT8> m_videoram;
@@ -63,4 +65,5 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_memory_bank m_bank1, m_bank1d;
};
diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h
index 871581a0c06..500a419e203 100644
--- a/src/mame/includes/galaxian.h
+++ b/src/mame/includes/galaxian.h
@@ -54,7 +54,8 @@ public:
m_videoram(*this, "videoram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
@@ -73,6 +74,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
int m_bullets_base;
int m_sprites_base;
diff --git a/src/mame/includes/jack.h b/src/mame/includes/jack.h
index 968eec9b8df..c108a89eaef 100644
--- a/src/mame/includes/jack.h
+++ b/src/mame/includes/jack.h
@@ -18,7 +18,8 @@ public:
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
/* device- and memory pointers */
@@ -30,6 +31,7 @@ public:
required_shared_ptr<UINT8> m_colorram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
/* video-related */
tilemap_t *m_bg_tilemap;
diff --git a/src/mame/includes/kchamp.h b/src/mame/includes/kchamp.h
index 6ef9a7ddb13..6e44d71bc80 100644
--- a/src/mame/includes/kchamp.h
+++ b/src/mame/includes/kchamp.h
@@ -19,7 +19,8 @@ public:
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_videoram;
@@ -62,10 +63,11 @@ public:
INTERRUPT_GEN_MEMBER(sound_int);
void kchamp_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
void kchampvs_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
- UINT8 *decrypt_code();
+ void decrypt_code();
DECLARE_WRITE_LINE_MEMBER(msmint);
required_device<cpu_device> m_maincpu;
optional_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
};
diff --git a/src/mame/includes/ladybug.h b/src/mame/includes/ladybug.h
index 56e871113c2..8b7308edf5c 100644
--- a/src/mame/includes/ladybug.h
+++ b/src/mame/includes/ladybug.h
@@ -22,7 +22,8 @@ public:
m_palette(*this, "palette"),
m_port_dsw0(*this, "DSW0"),
m_p1_control(*this, "CONTP1"),
- m_p2_control(*this, "CONTP2") { }
+ m_p2_control(*this, "CONTP2"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_videoram;
@@ -57,6 +58,7 @@ public:
optional_ioport m_port_dsw0;
optional_ioport m_p1_control;
optional_ioport m_p2_control;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
DECLARE_READ8_MEMBER(sraider_sound_low_r);
DECLARE_READ8_MEMBER(sraider_sound_high_r);
diff --git a/src/mame/includes/liberate.h b/src/mame/includes/liberate.h
index 487792089b0..442c5ca5b70 100644
--- a/src/mame/includes/liberate.h
+++ b/src/mame/includes/liberate.h
@@ -14,7 +14,8 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
optional_shared_ptr<UINT8> m_paletteram;
optional_shared_ptr<UINT8> m_bg_vram; /* prosport */
@@ -40,6 +41,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
DECLARE_READ8_MEMBER(deco16_bank_r);
DECLARE_READ8_MEMBER(deco16_io_r);
diff --git a/src/mame/includes/mitchell.h b/src/mame/includes/mitchell.h
index 497c50460d5..34369c3e767 100644
--- a/src/mame/includes/mitchell.h
+++ b/src/mame/includes/mitchell.h
@@ -117,7 +117,7 @@ public:
UINT32 screen_update_pang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(mitchell_irq);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
- void bootleg_decode( );
- void configure_banks( );
+ void bootleg_decode();
+ void configure_banks(void (*decode)(UINT8 *src, UINT8 *dst, int size));
DECLARE_WRITE_LINE_MEMBER(spangbl_adpcm_int);
};
diff --git a/src/mame/includes/mouser.h b/src/mame/includes/mouser.h
index 4b103f80d22..3fb99eb8877 100644
--- a/src/mame/includes/mouser.h
+++ b/src/mame/includes/mouser.h
@@ -17,7 +17,8 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_videoram;
@@ -33,6 +34,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
DECLARE_WRITE8_MEMBER(mouser_nmi_enable_w);
DECLARE_WRITE8_MEMBER(mouser_sound_interrupt_w);
diff --git a/src/mame/includes/ninjakd2.h b/src/mame/includes/ninjakd2.h
index ed38065f97a..f8a5f950604 100644
--- a/src/mame/includes/ninjakd2.h
+++ b/src/mame/includes/ninjakd2.h
@@ -21,7 +21,8 @@ public:
m_spriteram(*this, "spriteram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
required_device<cpu_device> m_maincpu;
@@ -33,6 +34,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
const INT16* m_sampledata;
UINT8 m_omegaf_io_protection[3];
diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h
index 06c6c4d995b..d62272914f5 100644
--- a/src/mame/includes/pacman.h
+++ b/src/mame/includes/pacman.h
@@ -23,7 +23,8 @@ public:
m_s2650games_tileram(*this, "s2650_tileram"),
m_rocktrv2_prot_data(*this, "rocktrv2_prot"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_patched_opcodes(*this, "patched_opcodes")
{ }
required_device<cpu_device> m_maincpu;
@@ -37,6 +38,7 @@ public:
optional_shared_ptr<UINT8> m_rocktrv2_prot_data;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_patched_opcodes;
UINT8 m_cannonb_bit_to_read;
int m_mystery;
diff --git a/src/mame/includes/pbaction.h b/src/mame/includes/pbaction.h
index a6e7e74fcf2..13fc38633c6 100644
--- a/src/mame/includes/pbaction.h
+++ b/src/mame/includes/pbaction.h
@@ -20,7 +20,8 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* memory pointers */
required_shared_ptr<UINT8> m_videoram;
@@ -41,6 +42,7 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
UINT8 m_nmi_mask;
DECLARE_WRITE8_MEMBER(pbaction_sh_command_w);
diff --git a/src/mame/includes/pktgaldx.h b/src/mame/includes/pktgaldx.h
index b185d8f2727..02b1143ff21 100644
--- a/src/mame/includes/pktgaldx.h
+++ b/src/mame/includes/pktgaldx.h
@@ -28,7 +28,8 @@ public:
m_deco_tilegen1(*this, "tilegen1"),
m_decocomn(*this, "deco_common"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
optional_device<deco104_device> m_deco104;
@@ -49,6 +50,7 @@ public:
optional_device<decocomn_device> m_decocomn;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT16> m_decrypted_opcodes;
DECLARE_READ16_MEMBER(pckgaldx_unknown_r);
DECLARE_READ16_MEMBER(pckgaldx_protection_r);
diff --git a/src/mame/includes/segag80r.h b/src/mame/includes/segag80r.h
index e6477326079..eaa3107ec3a 100644
--- a/src/mame/includes/segag80r.h
+++ b/src/mame/includes/segag80r.h
@@ -35,7 +35,8 @@ public:
m_005snd(*this, "005"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_shared_ptr<UINT8> m_mainram;
required_shared_ptr<UINT8> m_videoram;
@@ -51,6 +52,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
std::vector<UINT8> m_paletteram;
diff --git a/src/mame/includes/segahang.h b/src/mame/includes/segahang.h
index 664841e7983..7d6e6e84813 100644
--- a/src/mame/includes/segahang.h
+++ b/src/mame/includes/segahang.h
@@ -35,7 +35,8 @@ public:
m_segaic16road(*this, "segaic16road"),
m_workram(*this, "workram"),
m_sharrier_video(false),
- m_adc_select(0)
+ m_adc_select(0),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
// PPI read/write callbacks
@@ -107,5 +108,6 @@ protected:
// internal state
UINT8 m_adc_select;
bool m_shadow;
+ optional_shared_ptr<UINT16> m_decrypted_opcodes;
TIMER_DEVICE_CALLBACK_MEMBER(hangon_irq);
};
diff --git a/src/mame/includes/segas16a.h b/src/mame/includes/segas16a.h
index 2a76c10dbaf..0656dd391a9 100644
--- a/src/mame/includes/segas16a.h
+++ b/src/mame/includes/segas16a.h
@@ -38,6 +38,7 @@ public:
m_segaic16vid(*this, "segaic16vid"),
m_sprites(*this, "sprites"),
m_workram(*this, "nvram"),
+ m_sound_decrypted_opcodes(*this, "sound_decrypted_opcodes"),
m_video_control(0),
m_mcu_control(0),
m_n7751_command(0),
@@ -136,6 +137,7 @@ protected:
// memory pointers
required_shared_ptr<UINT16> m_workram;
+ optional_shared_ptr<UINT8> m_sound_decrypted_opcodes;
// configuration
read16_delegate m_custom_io_r;
diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h
index c3df7a7fe44..33c74ae4f99 100644
--- a/src/mame/includes/segas16b.h
+++ b/src/mame/includes/segas16b.h
@@ -49,7 +49,8 @@ public:
m_hwc_input_value(0),
m_mj_input_num(0),
m_mj_last_val(0),
- m_gfxdecode(*this, "gfxdecode")
+ m_gfxdecode(*this, "gfxdecode"),
+ m_sound_decrypted_opcodes(*this, "sound_decrypted_opcodes")
{ }
// memory mapping
@@ -203,6 +204,7 @@ protected:
UINT8 m_mj_last_val;
required_device<gfxdecode_device> m_gfxdecode;
+ optional_shared_ptr<UINT8> m_sound_decrypted_opcodes;
};
diff --git a/src/mame/includes/seicross.h b/src/mame/includes/seicross.h
index 3093784d8f8..d54177825fe 100644
--- a/src/mame/includes/seicross.h
+++ b/src/mame/includes/seicross.h
@@ -16,7 +16,8 @@ public:
m_videoram(*this, "videoram"),
m_row_scroll(*this, "row_scroll"),
m_spriteram2(*this, "spriteram2"),
- m_colorram(*this, "colorram") { }
+ m_colorram(*this, "colorram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_mcu;
@@ -29,6 +30,7 @@ public:
required_shared_ptr<UINT8> m_row_scroll;
required_shared_ptr<UINT8> m_spriteram2;
required_shared_ptr<UINT8> m_colorram;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
UINT8 m_portb;
tilemap_t *m_bg_tilemap;
diff --git a/src/mame/includes/senjyo.h b/src/mame/includes/senjyo.h
index 524b75d8a67..7ed3af920b9 100644
--- a/src/mame/includes/senjyo.h
+++ b/src/mame/includes/senjyo.h
@@ -30,7 +30,8 @@ public:
m_bg3videoram(*this, "bg3videoram"),
m_radarram(*this, "radarram"),
m_bgstripesram(*this, "bgstripesram"),
- m_generic_paletteram_8(*this, "paletteram") { }
+ m_generic_paletteram_8(*this, "paletteram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
/* devices */
required_device<cpu_device> m_maincpu;
@@ -56,6 +57,7 @@ public:
required_shared_ptr<UINT8> m_radarram;
required_shared_ptr<UINT8> m_bgstripesram;
required_shared_ptr<UINT8> m_generic_paletteram_8;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
// game specific initialization
int m_is_senjyo;
diff --git a/src/mame/includes/stfight.h b/src/mame/includes/stfight.h
index 48e66bdd91c..07a0669fd9d 100644
--- a/src/mame/includes/stfight.h
+++ b/src/mame/includes/stfight.h
@@ -22,7 +22,8 @@ public:
m_text_attr_ram(*this, "text_attr_ram"),
m_tx_vram(*this, "tx_vram"),
m_vh_latch_ram(*this, "vh_latch_ram"),
- m_sprite_ram(*this, "sprite_ram") { }
+ m_sprite_ram(*this, "sprite_ram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
@@ -36,6 +37,7 @@ public:
optional_shared_ptr<UINT8> m_tx_vram;
required_shared_ptr<UINT8> m_vh_latch_ram;
required_shared_ptr<UINT8> m_sprite_ram;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
UINT8 *m_decrypt;
UINT8 m_fm_data;
diff --git a/src/mame/includes/suprloco.h b/src/mame/includes/suprloco.h
index 2b3e99190dd..7d7f84d9b3b 100644
--- a/src/mame/includes/suprloco.h
+++ b/src/mame/includes/suprloco.h
@@ -10,7 +10,8 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_spriteram(*this, "spriteram"),
m_videoram(*this, "videoram"),
- m_scrollram(*this, "scrollram") { }
+ m_scrollram(*this, "scrollram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
@@ -19,6 +20,7 @@ public:
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_scrollram;
+ required_shared_ptr<UINT8> m_decrypted_opcodes;
tilemap_t *m_bg_tilemap;
int m_control;
diff --git a/src/mame/includes/system1.h b/src/mame/includes/system1.h
index fabb4bb0848..c6d7e437841 100644
--- a/src/mame/includes/system1.h
+++ b/src/mame/includes/system1.h
@@ -19,7 +19,12 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
- m_generic_paletteram_8(*this, "paletteram") { }
+ m_generic_paletteram_8(*this, "paletteram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes"),
+ m_maincpu_region(*this, "maincpu"),
+ m_bank1(*this, "bank1"),
+ m_bank0d(*this, "bank0d"),
+ m_bank1d(*this, "bank1d") { }
optional_device<i8255_device> m_ppi8255;
required_shared_ptr<UINT8> m_ram;
@@ -137,4 +142,11 @@ public:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_generic_paletteram_8;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
+ required_memory_region m_maincpu_region;
+ required_memory_bank m_bank1;
+ optional_memory_bank m_bank0d;
+ optional_memory_bank m_bank1d;
+
+ UINT8 *m_banked_decrypted_opcodes;
};
diff --git a/src/mame/includes/system16.h b/src/mame/includes/system16.h
index f2171e180ce..91ad78b88d8 100644
--- a/src/mame/includes/system16.h
+++ b/src/mame/includes/system16.h
@@ -24,7 +24,8 @@ public:
m_soundcpu(*this, "soundcpu"),
m_msm(*this, "5205"),
m_upd7759(*this, "7759"),
- m_gfxdecode(*this, "gfxdecode") { }
+ m_gfxdecode(*this, "gfxdecode"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_shared_ptr<UINT16> m_textram;
optional_shared_ptr<UINT16> m_bg0_tileram;
@@ -121,6 +122,7 @@ public:
optional_device<msm5205_device> m_msm;
optional_device<upd7759_device> m_upd7759;
required_device<gfxdecode_device> m_gfxdecode;
+ optional_shared_ptr<UINT16> m_decrypted_opcodes;
DECLARE_WRITE16_MEMBER(sound_command_nmi_w);
DECLARE_WRITE16_MEMBER(sound_command_w);
diff --git a/src/mame/includes/turbo.h b/src/mame/includes/turbo.h
index d2d72d99b22..c982ca3b7e4 100644
--- a/src/mame/includes/turbo.h
+++ b/src/mame/includes/turbo.h
@@ -34,6 +34,7 @@ public:
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
m_sprite_position(*this, "spritepos"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes"),
m_samples(*this, "samples"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen")
@@ -55,6 +56,7 @@ public:
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_sprite_position;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
required_device<samples_device> m_samples;
diff --git a/src/mame/includes/wiz.h b/src/mame/includes/wiz.h
index 4b132a697c5..e68dd786b0d 100644
--- a/src/mame/includes/wiz.h
+++ b/src/mame/includes/wiz.h
@@ -25,7 +25,8 @@ public:
m_attrram(*this, "attrram"),
m_attrram2(*this, "attrram2"),
m_spriteram(*this, "spriteram"),
- m_spriteram2(*this, "spriteram2")
+ m_spriteram2(*this, "spriteram2"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes")
{ }
required_device<cpu_device> m_maincpu;
@@ -42,6 +43,7 @@ public:
required_shared_ptr<UINT8> m_attrram2;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_spriteram2;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
INT32 m_flipx;
INT32 m_flipy;
diff --git a/src/mame/includes/zaxxon.h b/src/mame/includes/zaxxon.h
index e89aeacea1b..ffea0ee6c61 100644
--- a/src/mame/includes/zaxxon.h
+++ b/src/mame/includes/zaxxon.h
@@ -19,7 +19,8 @@ public:
m_dials(*this, "DIAL"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
- m_colorram(*this, "colorram") { }
+ m_colorram(*this, "colorram"),
+ m_decrypted_opcodes(*this, "decrypted_opcodes") { }
required_device<cpu_device> m_maincpu;
optional_device<samples_device> m_samples;
@@ -31,6 +32,7 @@ public:
required_shared_ptr<UINT8> m_videoram;
optional_shared_ptr<UINT8> m_spriteram;
optional_shared_ptr<UINT8> m_colorram;
+ optional_shared_ptr<UINT8> m_decrypted_opcodes;
UINT8 m_int_enabled;
UINT8 m_coin_status[3];
diff --git a/src/mame/machine/cclimber.c b/src/mame/machine/cclimber.c
index 803d1c00947..8eb1b531d63 100644
--- a/src/mame/machine/cclimber.c
+++ b/src/mame/machine/cclimber.c
@@ -8,14 +8,9 @@
void cclimber_state::cclimber_decode(const UINT8 convtable[8][16])
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine(), UINT8, 0x10000);
- int A;
-
- space.set_decrypted_region(0x0000, 0xffff, decrypt);
- for (A = 0x0000;A < 0x10000;A++)
+ for (int A = 0x0000;A < 0x6000;A++)
{
int i,j;
UINT8 src = rom[A];
@@ -28,7 +23,7 @@ void cclimber_state::cclimber_decode(const UINT8 convtable[8][16])
j = (src & 0x01) | ((src & 0x04) >> 1) | ((src & 0x10) >> 2) | ((src & 0x40) >> 3);
/* decode the opcodes */
- decrypt[A] = (src & 0xaa) | convtable[i][j];
+ m_decrypted_opcodes[A] = (src & 0xaa) | convtable[i][j];
}
}
diff --git a/src/mame/machine/cps2crpt.c b/src/mame/machine/cps2crpt.c
index 9af7cf4d248..0dc76c7e5aa 100644
--- a/src/mame/machine/cps2crpt.c
+++ b/src/mame/machine/cps2crpt.c
@@ -632,12 +632,8 @@ static void optimise_sboxes(struct optimised_sbox* out, const struct sbox* in)
-static void cps2_decrypt(running_machine &machine, const UINT32 *master_key, UINT32 upper_limit)
+static void cps2_decrypt(running_machine &machine, UINT16 *rom, UINT16 *dec, int length, const UINT32 *master_key, UINT32 upper_limit)
{
- address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
- UINT16 *rom = (UINT16 *)machine.root_device().memregion("maincpu")->base();
- int length = machine.root_device().memregion("maincpu")->bytes();
- UINT16 *dec = auto_alloc_array(machine, UINT16, length/2);
int i;
UINT32 key1[4];
struct optimised_sbox sboxes1[4*4];
@@ -714,16 +710,13 @@ static void cps2_decrypt(running_machine &machine, const UINT32 *master_key, UIN
&sboxes2[0*4], &sboxes2[1*4], &sboxes2[2*4], &sboxes2[3*4],
key2[0], key2[1], key2[2], key2[3]);
}
- // copy the unencrypted part (not really needed)
+ // copy the unencrypted part
while (a < length/2)
{
dec[a] = rom[a];
a += 0x10000;
}
}
-
- space.set_decrypted_region(0x000000, length - 1, dec);
- ((m68000_base_device*)machine.device("maincpu"))->set_encrypted_opcode_range(0, length);
}
@@ -1017,7 +1010,7 @@ DRIVER_INIT_MEMBER(cps_state,cps2crpt)
if (strcmp(k->name, gamename) == 0)
{
// we have a proper key so use it to decrypt
- cps2_decrypt(machine(), k->keys, k->upper_limit ? k->upper_limit : 0x400000);
+ cps2_decrypt(machine(), (UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, memregion("maincpu")->bytes(), k->keys, k->upper_limit ? k->upper_limit : 0x400000);
break;
}
diff --git a/src/mame/machine/deco102.c b/src/mame/machine/deco102.c
index 5441ae9b0a6..3f0c79143f3 100644
--- a/src/mame/machine/deco102.c
+++ b/src/mame/machine/deco102.c
@@ -49,21 +49,13 @@ static UINT16 decrypt(UINT16 data, int address, int select_xor)
bs[8],bs[9],bs[10],bs[11],bs[12],bs[13],bs[14],bs[15]);
}
-void deco102_decrypt_cpu(running_machine &machine, const char *cputag, int address_xor, int data_select_xor, int opcode_select_xor)
+void deco102_decrypt_cpu(UINT16 *rom, UINT16 *opcodes, int size, int address_xor, int data_select_xor, int opcode_select_xor)
{
- int i;
- address_space &space = machine.device(cputag)->memory().space(AS_PROGRAM);
- UINT16 *rom = (UINT16 *)machine.root_device().memregion(cputag)->base();
- int size = machine.root_device().memregion(cputag)->bytes();
- UINT16 *opcodes = auto_alloc_array(machine, UINT16, size / 2);
std::vector<UINT16> buf(size / 2);
memcpy(&buf[0], rom, size);
- space.set_decrypted_region(0, size - 1, opcodes);
- ((m68000_base_device*)machine.device(cputag))->set_encrypted_opcode_range(0, size);
-
- for (i = 0; i < size / 2; i++)
+ for (int i = 0; i < size / 2; i++)
{
int src;
diff --git a/src/mame/machine/deco222.c b/src/mame/machine/deco222.c
index ebc6dc46f9a..1df8a720dd2 100644
--- a/src/mame/machine/deco222.c
+++ b/src/mame/machine/deco222.c
@@ -25,9 +25,9 @@ void deco_222_device::device_reset()
static_cast<mi_decrypt *>(mintf)->had_written = false;
}
-UINT8 deco_222_device::mi_decrypt::read_decrypted(UINT16 adr)
+UINT8 deco_222_device::mi_decrypt::read_sync(UINT16 adr)
{
- return BITSWAP8(direct->read_raw_byte(adr) ,7,5,6,4,3,2,1,0);
+ return BITSWAP8(direct->read_byte(adr) ,7,5,6,4,3,2,1,0);
}
@@ -49,7 +49,7 @@ void deco_c10707_device::device_reset()
static_cast<mi_decrypt *>(mintf)->had_written = false;
}
-UINT8 deco_c10707_device::mi_decrypt::read_decrypted(UINT16 adr)
+UINT8 deco_c10707_device::mi_decrypt::read_sync(UINT16 adr)
{
- return BITSWAP8(direct->read_raw_byte(adr) ,7,5,6,4,3,2,1,0);
+ return BITSWAP8(direct->read_byte(adr) ,7,5,6,4,3,2,1,0);
}
diff --git a/src/mame/machine/deco222.h b/src/mame/machine/deco222.h
index d221d59b91e..042e2bbbd98 100644
--- a/src/mame/machine/deco222.h
+++ b/src/mame/machine/deco222.h
@@ -14,7 +14,7 @@ protected:
bool had_written;
virtual ~mi_decrypt() {}
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
};
virtual void device_start();
@@ -36,7 +36,7 @@ protected:
bool had_written;
virtual ~mi_decrypt() {}
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
};
virtual void device_start();
diff --git a/src/mame/machine/decocpu6.c b/src/mame/machine/decocpu6.c
index 98542ff12fb..957c602976f 100644
--- a/src/mame/machine/decocpu6.c
+++ b/src/mame/machine/decocpu6.c
@@ -24,10 +24,10 @@ void deco_cpu6_device::device_reset()
m6502_device::device_reset();
}
-UINT8 deco_cpu6_device::mi_decrypt::read_decrypted(UINT16 adr)
+UINT8 deco_cpu6_device::mi_decrypt::read_sync(UINT16 adr)
{
if (adr&1)
- return BITSWAP8(direct->read_raw_byte(adr),6,4,7,5,3,2,1,0);
+ return BITSWAP8(direct->read_byte(adr),6,4,7,5,3,2,1,0);
else
- return direct->read_raw_byte(adr);
+ return direct->read_byte(adr);
}
diff --git a/src/mame/machine/decocpu6.h b/src/mame/machine/decocpu6.h
index 6e6fc64effa..678338027fc 100644
--- a/src/mame/machine/decocpu6.h
+++ b/src/mame/machine/decocpu6.h
@@ -13,7 +13,7 @@ protected:
class mi_decrypt : public mi_default_normal {
public:
virtual ~mi_decrypt() {}
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
};
virtual void device_start();
diff --git a/src/mame/machine/decocpu7.c b/src/mame/machine/decocpu7.c
index e77f47b057f..dc6bb85dff8 100644
--- a/src/mame/machine/decocpu7.c
+++ b/src/mame/machine/decocpu7.c
@@ -20,9 +20,9 @@ void deco_cpu7_device::device_reset()
static_cast<mi_decrypt *>(mintf)->had_written = false;
}
-UINT8 deco_cpu7_device::mi_decrypt::read_decrypted(UINT16 adr)
+UINT8 deco_cpu7_device::mi_decrypt::read_sync(UINT16 adr)
{
- UINT8 res = direct->read_raw_byte(adr);
+ UINT8 res = direct->read_byte(adr);
if(had_written) {
had_written = false;
if((adr & 0x0104) == 0x0104)
diff --git a/src/mame/machine/decocpu7.h b/src/mame/machine/decocpu7.h
index 0cf2dbf4bfd..26f67a11fc1 100644
--- a/src/mame/machine/decocpu7.h
+++ b/src/mame/machine/decocpu7.h
@@ -14,7 +14,7 @@ protected:
bool had_written;
virtual ~mi_decrypt() {}
- virtual UINT8 read_decrypted(UINT16 adr);
+ virtual UINT8 read_sync(UINT16 adr);
virtual void write(UINT16 adr, UINT8 val);
};
diff --git a/src/mame/machine/fd1089.c b/src/mame/machine/fd1089.c
index c9cea731f83..c273c4949b4 100644
--- a/src/mame/machine/fd1089.c
+++ b/src/mame/machine/fd1089.c
@@ -208,6 +208,9 @@ const fd1089_base_device::decrypt_parameters fd1089_base_device::s_data_params_a
{ 0xac, 1,6,3,5,0,7,4,2 },
};
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, fd1094_device )
+ AM_RANGE(0x00000, 0xfffff) AM_ROM AM_SHARE(":fd1089_decrypted_opcodes")
+ADDRESS_MAP_END
//**************************************************************************
@@ -219,10 +222,14 @@ const fd1089_base_device::decrypt_parameters fd1089_base_device::s_data_params_a
//-------------------------------------------------
fd1089_base_device::fd1089_base_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
- : m68000_device(mconfig, tag, owner, clock, shortname, source)
+ : m68000_device(mconfig, tag, owner, clock, shortname, source),
+ m_decrypted_opcodes(*this, ":fd1089_decrypted_opcodes")
{
// override the name after the m68000 initializes
m_name.assign(name);
+
+ // add the decrypted opcodes map
+ m_address_map[AS_DECRYPTED_OPCODES] = ADDRESS_MAP_NAME(decrypted_opcodes_map);
}
fd1089a_device::fd1089a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
@@ -257,18 +264,12 @@ void fd1089_base_device::device_start()
// determine length and resize our internal buffers
UINT32 romsize = region()->bytes();
m_plaintext.resize(romsize/2);
- m_decrypted_opcodes.resize(romsize/2);
// copy the plaintext
memcpy(&m_plaintext[0], rombase, romsize);
// decrypt it, overwriting original data with the decrypted data
decrypt(0x000000, romsize, &m_plaintext[0], &m_decrypted_opcodes[0], rombase);
-
- // mark the ROM region as decrypted, pointing to the opcodes (if it is mapped)
- address_space &program = space(AS_PROGRAM);
- if (program.get_read_ptr(0) != NULL)
- program.set_decrypted_region(0x000000, romsize - 1, &m_decrypted_opcodes[0]);
}
diff --git a/src/mame/machine/fd1089.h b/src/mame/machine/fd1089.h
index 0e66d1e2bdc..e8e106b5136 100644
--- a/src/mame/machine/fd1089.h
+++ b/src/mame/machine/fd1089.h
@@ -57,7 +57,7 @@ protected:
// internal state
const UINT8 * m_key;
std::vector<UINT16> m_plaintext;
- std::vector<UINT16> m_decrypted_opcodes;
+ required_shared_ptr<UINT16> m_decrypted_opcodes;
// internal types
struct decrypt_parameters
diff --git a/src/mame/machine/fd1094.c b/src/mame/machine/fd1094.c
index 32c369ef221..7391ae4c006 100644
--- a/src/mame/machine/fd1094.c
+++ b/src/mame/machine/fd1094.c
@@ -35,8 +35,8 @@
if bit 13 of the current value is 1; the fourth one is executed whenever one
of the first three has been executed; the fifth one is always executed. Every
step can be thought as consisting of a serie of operations, with some steps
- avoiding some of them: a uncondicional bitswap, some conditional XORs,
- a unconditional XOR and some condicional bitswaps.
+ avoiding some of them: a unconditional bitswap, some conditional XORs,
+ a unconditional XOR and some conditional bitswaps.
In the end, the decryption of a value at a given address is controlled by 32
boolean variables; 8 of them change at every address (repeating after 0x2000
@@ -472,6 +472,9 @@ const UINT16 fd1094_device::s_masked_opcodes[] =
0xde3a,0xde7a,0xdeba,0xdefa, 0xdffa
};
+static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 16, fd1094_device )
+ AM_RANGE(0x00000, 0xfffff) AM_ROMBANK(":fd1094_decrypted_opcodes")
+ADDRESS_MAP_END
//**************************************************************************
@@ -534,7 +537,8 @@ UINT16 *fd1094_decryption_cache::decrypted_opcodes(UINT8 state)
return &m_decrypted_opcodes[state][0];
// otherwise, allocate and decrypt
- m_decrypted_opcodes[state].resize(m_size);
+ m_decrypted_opcodes[state].resize(0x100000/2);
+ memset(&m_decrypted_opcodes[state][0], 0, 0x100000);
m_fd1094.decrypt(m_baseaddress, m_size, m_rgnoffset, &m_decrypted_opcodes[state][0], state);
return &m_decrypted_opcodes[state][0];
}
@@ -552,6 +556,7 @@ UINT16 *fd1094_decryption_cache::decrypted_opcodes(UINT8 state)
fd1094_device::fd1094_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m68000_device(mconfig, tag, owner, clock, "fd1094", __FILE__),
+ m_decrypted_opcodes_bank(*this, ":fd1094_decrypted_opcodes"),
m_state(0x00),
m_irqmode(false),
m_cache(*this),
@@ -562,6 +567,9 @@ fd1094_device::fd1094_device(const machine_config &mconfig, const char *tag, dev
// override the name after the m68000 initializes
m_name.assign("FD1094");
+ // add the decrypted opcodes map
+ m_address_map[AS_DECRYPTED_OPCODES] = ADDRESS_MAP_NAME(decrypted_opcodes_map);
+
// create the initial masked opcode table
memset(m_masked_opcodes_lookup, 0, sizeof(m_masked_opcodes_lookup));
for (int index = 0; index < ARRAY_LENGTH(s_masked_opcodes); index++)
@@ -575,6 +583,8 @@ fd1094_device::fd1094_device(const machine_config &mconfig, const char *tag, dev
for (int opcode = 0; opcode < 65536; opcode += 2)
if ((opcode & 0xff80) == 0x4e80 || (opcode & 0xf0f8) == 0x50c8 || (opcode & 0xf000) == 0x6000)
m_masked_opcodes_lookup[1][opcode >> 4] |= 1 << ((opcode >> 1) & 7);
+
+ m_state_change = state_change_delegate(FUNC(fd1094_device::default_state_change), this);
}
@@ -625,9 +635,6 @@ void fd1094_device::change_state(int newstate)
void fd1094_device::device_start()
{
- // start the base device
- m68000_device::device_start();
-
// find the key
m_key = memregion("key")->base();
if (m_key == NULL)
@@ -655,13 +662,12 @@ void fd1094_device::device_start()
if (m_srcbase == NULL)
throw emu_fatalerror("FD1094 found no data to decrypt!");
- // if address 0 is mapped to ROM, assume this is a state memory mapping and
- // use the internal state change callback
- if (space(AS_PROGRAM).get_read_ptr(0) != NULL)
- m_state_change = state_change_delegate(FUNC(fd1094_device::default_state_change), this);
-
// determine length and configure our cache
m_cache.configure(0x000000, m_srcbytes, 0x000000);
+ change_state(STATE_RESET);
+
+ // start the base device
+ m68000_device::device_start();
// register for the state changing callbacks we need in the m68000
set_cmpild_callback(write32_delegate(FUNC(fd1094_device::cmp_callback),this));
@@ -683,7 +689,7 @@ void fd1094_device::device_reset()
// flush the cache and switch to the reset state
m_cache.reset();
change_state(STATE_RESET);
-
+ fprintf(stderr, "reset done\n");
// reset the parent
m68000_device::device_reset();
}
@@ -913,7 +919,7 @@ void fd1094_device::decrypt(offs_t baseaddr, UINT32 size, const UINT16 *srcptr,
void fd1094_device::default_state_change(UINT8 state)
{
- space(AS_PROGRAM).set_decrypted_region(0x000000, m_srcbytes - 1, m_cache.decrypted_opcodes(state));
+ m_decrypted_opcodes_bank->set_base(m_cache.decrypted_opcodes(state));
}
diff --git a/src/mame/machine/fd1094.h b/src/mame/machine/fd1094.h
index 3439a4c288c..db5eb5cb83e 100644
--- a/src/mame/machine/fd1094.h
+++ b/src/mame/machine/fd1094.h
@@ -88,6 +88,8 @@ public:
};
protected:
+ required_memory_bank m_decrypted_opcodes_bank;
+
// device overrides
virtual void device_start();
virtual void device_reset();
diff --git a/src/mame/machine/fddebug.c b/src/mame/machine/fddebug.c
index 9abaec03ef2..0a78590cb5c 100644
--- a/src/mame/machine/fddebug.c
+++ b/src/mame/machine/fddebug.c
@@ -442,7 +442,7 @@ INLINE int pc_is_valid(address_space &space, UINT32 pc, UINT32 flags)
return 0;
if (pc & 0xff000000)
return 0;
- if (space.direct().read_decrypted_ptr(pc) == NULL)
+ if (space.direct().read_ptr(pc) == NULL)
return 0;
return 1;
}
diff --git a/src/mame/machine/kabuki.c b/src/mame/machine/kabuki.c
index 038c1f5f422..4be230bc609 100644
--- a/src/mame/machine/kabuki.c
+++ b/src/mame/machine/kabuki.c
@@ -160,58 +160,37 @@ static void kabuki_decode(UINT8 *src,UINT8 *dest_op,UINT8 *dest_data,
-static void mitchell_decode(running_machine &machine, int swap_key1,int swap_key2,int addr_key,int xor_key)
+static void mitchell_decode(UINT8 *src, UINT8 *dst, int size, int swap_key1,int swap_key2,int addr_key,int xor_key)
{
- address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
- UINT8 *rom = machine.root_device().memregion("maincpu")->base();
- UINT8 *decrypt = auto_alloc_array(machine, UINT8, machine.root_device().memregion("maincpu")->bytes());
- int numbanks = (machine.root_device().memregion("maincpu")->bytes() - 0x10000) / 0x4000;
- int i;
-
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
- kabuki_decode(rom,decrypt,rom,0x0000,0x8000, swap_key1,swap_key2,addr_key,xor_key);
-
- rom += 0x10000;
- decrypt += 0x10000;
- for (i = 0; i < numbanks; i++)
- kabuki_decode(rom+i*0x4000,decrypt+i*0x4000,rom+i*0x4000,0x8000,0x4000, swap_key1,swap_key2,addr_key,xor_key);
-
- machine.root_device().membank("bank1")->configure_decrypted_entries(0, numbanks, decrypt, 0x4000);
-/*
- {
- FILE *f;
- f = fopen("a","wb");
- fwrite(rom,1,0x8000,f);
- fwrite(rom+0x10000,1,0x40000,f);
- fclose(f);
- }
-*/
+ int numbanks = (size - 0x10000) / 0x4000;
+
+ kabuki_decode(src,dst,src,0x0000,0x8000, swap_key1,swap_key2,addr_key,xor_key);
+
+ src += 0x10000;
+ dst += 0x10000;
+ for (int i = 0; i < numbanks; i++)
+ kabuki_decode(src+i*0x4000,dst+i*0x4000,src+i*0x4000,0x8000,0x4000, swap_key1,swap_key2,addr_key,xor_key);
}
-void mgakuen2_decode(running_machine &machine) { mitchell_decode(machine,0x76543210,0x01234567,0xaa55,0xa5); }
-void pang_decode(running_machine &machine) { mitchell_decode(machine,0x01234567,0x76543210,0x6548,0x24); }
-void cworld_decode(running_machine &machine) { mitchell_decode(machine,0x04152637,0x40516273,0x5751,0x43); }
-void hatena_decode(running_machine &machine) { mitchell_decode(machine,0x45670123,0x45670123,0x5751,0x43); }
-void spang_decode(running_machine &machine) { mitchell_decode(machine,0x45670123,0x45670123,0x5852,0x43); }
-void spangj_decode(running_machine &machine) { mitchell_decode(machine,0x45123670,0x67012345,0x55aa,0x5a); }
-void sbbros_decode(running_machine &machine) { mitchell_decode(machine,0x45670123,0x45670123,0x2130,0x12); }
-void marukin_decode(running_machine &machine) { mitchell_decode(machine,0x54321076,0x54321076,0x4854,0x4f); }
-void qtono1_decode(running_machine &machine) { mitchell_decode(machine,0x12345670,0x12345670,0x1111,0x11); }
-void qsangoku_decode(running_machine &machine) { mitchell_decode(machine,0x23456701,0x23456701,0x1828,0x18); }
-void block_decode(running_machine &machine) { mitchell_decode(machine,0x02461357,0x64207531,0x0002,0x01); }
+void mgakuen2_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x76543210,0x01234567,0xaa55,0xa5); }
+void pang_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x01234567,0x76543210,0x6548,0x24); }
+void cworld_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x04152637,0x40516273,0x5751,0x43); }
+void hatena_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x45670123,0x45670123,0x5751,0x43); }
+void spang_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x45670123,0x45670123,0x5852,0x43); }
+void spangj_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x45123670,0x67012345,0x55aa,0x5a); }
+void sbbros_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x45670123,0x45670123,0x2130,0x12); }
+void marukin_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x54321076,0x54321076,0x4854,0x4f); }
+void qtono1_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x12345670,0x12345670,0x1111,0x11); }
+void qsangoku_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x23456701,0x23456701,0x1828,0x18); }
+void block_decode(UINT8 *src, UINT8 *dst, int size) { mitchell_decode(src,dst,size,0x02461357,0x64207531,0x0002,0x01); }
-static void cps1_decode(running_machine &machine,int swap_key1,int swap_key2,int addr_key,int xor_key)
+static void cps1_decode(UINT8 *src, UINT8 *dst,int swap_key1,int swap_key2,int addr_key,int xor_key)
{
- address_space &space = machine.device("audiocpu")->memory().space(AS_PROGRAM);
- UINT8 *decrypt = auto_alloc_array(machine, UINT8, 0x8000);
- UINT8 *rom = machine.root_device().memregion("audiocpu")->base();
-
- space.set_decrypted_region(0x0000, 0x7fff, decrypt);
- kabuki_decode(rom,decrypt,rom,0x0000,0x8000, swap_key1,swap_key2,addr_key,xor_key);
+ kabuki_decode(src,dst,src,0x0000,0x8000, swap_key1,swap_key2,addr_key,xor_key);
}
-void wof_decode(running_machine &machine) { cps1_decode(machine,0x01234567,0x54163072,0x5151,0x51); }
-void dino_decode(running_machine &machine) { cps1_decode(machine,0x76543210,0x24601357,0x4343,0x43); }
-void punisher_decode(running_machine &machine) { cps1_decode(machine,0x67452103,0x75316024,0x2222,0x22); }
-void slammast_decode(running_machine &machine) { cps1_decode(machine,0x54321076,0x65432107,0x3131,0x19); }
+void wof_decode(UINT8 *src, UINT8 *dst) { cps1_decode(src,dst,0x01234567,0x54163072,0x5151,0x51); }
+void dino_decode(UINT8 *src, UINT8 *dst) { cps1_decode(src,dst,0x76543210,0x24601357,0x4343,0x43); }
+void punisher_decode(UINT8 *src, UINT8 *dst) { cps1_decode(src,dst,0x67452103,0x75316024,0x2222,0x22); }
+void slammast_decode(UINT8 *src, UINT8 *dst) { cps1_decode(src,dst,0x54321076,0x65432107,0x3131,0x19); }
diff --git a/src/mame/machine/kabuki.h b/src/mame/machine/kabuki.h
index e5e1b9bfc76..1b9165bea07 100644
--- a/src/mame/machine/kabuki.h
+++ b/src/mame/machine/kabuki.h
@@ -2,18 +2,18 @@
// copyright-holders:Nicola Salmoria
#include "emu.h"
-void mgakuen2_decode(running_machine &machine);
-void pang_decode(running_machine &machine);
-void cworld_decode(running_machine &machine);
-void hatena_decode(running_machine &machine);
-void spang_decode(running_machine &machine);
-void spangj_decode(running_machine &machine);
-void sbbros_decode(running_machine &machine);
-void marukin_decode(running_machine &machine);
-void qtono1_decode(running_machine &machine);
-void qsangoku_decode(running_machine &machine);
-void block_decode(running_machine &machine);
-void wof_decode(running_machine &machine);
-void dino_decode(running_machine &machine);
-void punisher_decode(running_machine &machine);
-void slammast_decode(running_machine &machine);
+void mgakuen2_decode(UINT8 *src, UINT8 *dst, int size);
+void pang_decode(UINT8 *src, UINT8 *dst, int size);
+void cworld_decode(UINT8 *src, UINT8 *dst, int size);
+void hatena_decode(UINT8 *src, UINT8 *dst, int size);
+void spang_decode(UINT8 *src, UINT8 *dst, int size);
+void spangj_decode(UINT8 *src, UINT8 *dst, int size);
+void sbbros_decode(UINT8 *src, UINT8 *dst, int size);
+void marukin_decode(UINT8 *src, UINT8 *dst, int size);
+void qtono1_decode(UINT8 *src, UINT8 *dst, int size);
+void qsangoku_decode(UINT8 *src, UINT8 *dst, int size);
+void block_decode(UINT8 *src, UINT8 *dst, int size);
+void wof_decode(UINT8 *src, UINT8 *dst);
+void dino_decode(UINT8 *src, UINT8 *dst);
+void punisher_decode(UINT8 *src, UINT8 *dst);
+void slammast_decode(UINT8 *src, UINT8 *dst);
diff --git a/src/mame/machine/konami1.c b/src/mame/machine/konami1.c
index 75d4a2b01b4..c0240bcbc78 100644
--- a/src/mame/machine/konami1.c
+++ b/src/mame/machine/konami1.c
@@ -1,60 +1,50 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria, Chris Hardy
+// copyright-holders:Olivier Galibert
/***************************************************************************
- The Konami_1 CPU is a 6809 with opcodes scrambled. Here is how to
- descramble them.
+ The Konami_1 CPU is a 6809 with opcodes scrambled.
***************************************************************************/
#include "emu.h"
#include "konami1.h"
+const device_type KONAMI1 = &device_creator<konami1_device>;
-static UINT8 konami1_decodebyte( UINT8 opcode, UINT16 address )
+konami1_device::konami1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : m6809_base_device(mconfig, "KONAMI-1", tag, owner, clock, KONAMI1, 1, "konami1", __FILE__)
{
-/*
->
-> CPU_D7 = (EPROM_D7 & ~ADDRESS_1) | (~EPROM_D7 & ADDRESS_1) >
-> CPU_D6 = EPROM_D6
->
-> CPU_D5 = (EPROM_D5 & ADDRESS_1) | (~EPROM_D5 & ~ADDRESS_1) >
-> CPU_D4 = EPROM_D4
->
-> CPU_D3 = (EPROM_D3 & ~ADDRESS_3) | (~EPROM_D3 & ADDRESS_3) >
-> CPU_D2 = EPROM_D2
->
-> CPU_D1 = (EPROM_D1 & ADDRESS_3) | (~EPROM_D1 & ~ADDRESS_3) >
-> CPU_D0 = EPROM_D0
->
-*/
- UINT8 xormask;
-
-
- xormask = 0;
- if (address & 0x02) xormask |= 0x80;
- else xormask |= 0x20;
- if (address & 0x08) xormask |= 0x08;
- else xormask |= 0x02;
-
- return opcode ^ xormask;
+ m_boundary = 0x0000;
}
+void konami1_device::device_start()
+{
+ m_mintf = new mi_konami1(m_boundary);
+ m6809_base_device::device_start();
+}
-
-UINT8 *konami1_decode(running_machine &machine, const char *cpu)
+void konami1_device::set_encryption_boundary(UINT16 adr)
{
- address_space &space = machine.device(cpu)->memory().space(AS_PROGRAM);
- const UINT8 *rom = machine.root_device().memregion(cpu)->base();
- int size = machine.root_device().memregion(cpu)->bytes();
- int A;
+ m_boundary = adr;
+ if(m_mintf)
+ static_cast<mi_konami1 *>(m_mintf)->m_boundary = adr;
+}
- UINT8 *decrypted = auto_alloc_array(machine, UINT8, size);
- space.set_decrypted_region(0x0000, 0xffff, decrypted);
+konami1_device::mi_konami1::mi_konami1(UINT16 adr)
+{
+ m_boundary = adr;
+}
- for (A = 0;A < size;A++)
- {
- decrypted[A] = konami1_decodebyte(rom[A],A);
+UINT8 konami1_device::mi_konami1::read_opcode(UINT16 adr)
+{
+ UINT8 val = m_sdirect->read_byte(adr);
+ if(adr < m_boundary)
+ return val;
+ switch(adr & 0xa) {
+ default:
+ case 0x0: return val ^ 0x22;
+ case 0x2: return val ^ 0x82;
+ case 0x8: return val ^ 0x28;
+ case 0xa: return val ^ 0x88;
}
- return decrypted;
}
diff --git a/src/mame/machine/konami1.h b/src/mame/machine/konami1.h
index 00697959658..1efadd4eee4 100644
--- a/src/mame/machine/konami1.h
+++ b/src/mame/machine/konami1.h
@@ -1,3 +1,26 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria, Chris Hardy
-UINT8 *konami1_decode(running_machine &machine, const char *cpu);
+// copyright-holders:Olivier Galibert
+
+#include "cpu/m6809/m6809.h"
+
+class konami1_device : public m6809_base_device {
+public:
+ konami1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ void set_encryption_boundary(UINT16 adr);
+
+protected:
+ class mi_konami1 : public mi_default {
+ public:
+ UINT16 m_boundary;
+ mi_konami1(UINT16 boundary);
+ virtual ~mi_konami1() {}
+ virtual UINT8 read_opcode(UINT16 adr);
+ };
+
+ UINT16 m_boundary;
+
+ virtual void device_start();
+};
+
+extern const device_type KONAMI1;
diff --git a/src/mame/machine/mc8123.c b/src/mame/machine/mc8123.c
index a82c841347d..a6327cf0895 100644
--- a/src/mame/machine/mc8123.c
+++ b/src/mame/machine/mc8123.c
@@ -377,46 +377,17 @@ static UINT8 mc8123_decrypt(offs_t addr,UINT8 val,const UINT8 *key,int opcode)
return decrypt(val,key[tbl_num + (opcode ? 0 : 0x1000)],opcode);
}
-
-void mc8123_decrypt_rom(running_machine &machine, const char *cpu, const char *keyrgn, const char *bankname, int numbanks)
+void mc8123_decode(UINT8 *rom, UINT8 *opcodes, const UINT8 *key, int length)
{
- address_space &space = machine.device(cpu)->memory().space(AS_PROGRAM);
- int fixed_length = numbanks == 1 ? 0xc000 : 0x8000;
- UINT8 *decrypted1 = auto_alloc_array(machine, UINT8, fixed_length);
- UINT8 *decrypted2 = numbanks > 1 ? auto_alloc_array(machine, UINT8, 0x4000 * numbanks) : 0;
- UINT8 *rom = machine.root_device().memregion(cpu)->base();
- UINT8 *key = machine.root_device().memregion(keyrgn)->base();
- int A, bank;
-
- space.set_decrypted_region(0x0000, fixed_length-1, decrypted1);
-
- for (A = 0x0000;A < fixed_length;A++)
+ for (int A = 0x0000;A < length;A++)
{
+ int adr = A >= 0xc000 ? (A & 0x3fff) | 0x8000 : A;
UINT8 src = rom[A];
/* decode the opcodes */
- decrypted1[A] = mc8123_decrypt(A,src,key,1);
+ opcodes[A] = mc8123_decrypt(adr,src,key,1);
/* decode the data */
- rom[A] = mc8123_decrypt(A,src,key,0);
- }
-
- if (bankname != NULL)
- {
- machine.root_device().membank(bankname)->configure_decrypted_entries(0, numbanks, decrypted2, 0x4000);
-
- for (bank = 0; bank < numbanks; ++bank)
- {
- for (A = 0x8000;A < 0xc000;A++)
- {
- UINT8 src = rom[0x8000 + 0x4000*bank + A];
-
- /* decode the opcodes */
- decrypted2[0x4000 * bank + (A-0x8000)] = mc8123_decrypt(A,src,key,1);
-
- /* decode the data */
- rom[0x8000 + 0x4000*bank + A] = mc8123_decrypt(A,src,key,0);
- }
- }
+ rom[A] = mc8123_decrypt(adr,src,key,0);
}
}
diff --git a/src/mame/machine/mc8123.h b/src/mame/machine/mc8123.h
index 02caa2cbe0f..6887b4f644c 100644
--- a/src/mame/machine/mc8123.h
+++ b/src/mame/machine/mc8123.h
@@ -8,6 +8,6 @@
// this function assumes a fixed portion of ROM at 0000-7FFF, and
// an arbitrary amount of banks at 8000-BFFF.
-// numbanks may be 0, meaning there is no ROM to decrypt at 8000-BFFF,
-// or 1, meaning 0000-BFFF will be decrypted as a single unit.
-void mc8123_decrypt_rom(running_machine &machine, const char *cpu, const char *keyrgn, const char *bankname, int numbanks);
+
+void mc8123_decode(UINT8 *rom, UINT8 *opcodes, const UINT8 *key, int length);
+
diff --git a/src/mame/machine/scramble.c b/src/mame/machine/scramble.c
index e51701679ab..eeea8613ee1 100644
--- a/src/mame/machine/scramble.c
+++ b/src/mame/machine/scramble.c
@@ -624,7 +624,7 @@ WRITE8_MEMBER(scramble_state::harem_decrypt_clk_w)
}
membank("rombank")->set_base (m_harem_decrypted_data + 0x2000 * bank);
- membank("rombank")->set_base_decrypted (m_harem_decrypted_opcodes + 0x2000 * bank);
+ membank("rombank_decrypted")->set_base (m_harem_decrypted_opcodes + 0x2000 * bank);
// logerror("%s: decrypt mode = %02x (bank %x) active\n", machine().describe_context(), m_harem_decrypt_mode, bank);
@@ -674,5 +674,5 @@ DRIVER_INIT_MEMBER(scramble_state,harem)
}
membank("rombank")->set_base (m_harem_decrypted_data);
- membank("rombank")->set_base_decrypted (m_harem_decrypted_opcodes);
+ membank("rombank_decrypted")->set_base (m_harem_decrypted_opcodes);
}
diff --git a/src/mame/machine/segacrp2.c b/src/mame/machine/segacrp2.c
index e0d128363ad..b5cff3a5d0e 100644
--- a/src/mame/machine/segacrp2.c
+++ b/src/mame/machine/segacrp2.c
@@ -47,10 +47,9 @@
#include "segacrp2.h"
-static void sega_decode_2(running_machine &machine,const char *cputag,
- const UINT8 xor_table[128],const int swap_table[128])
+void sega_decode_2(UINT8 *rom, UINT8 *decrypted,
+ const UINT8 xor_table[128],const int swap_table[128])
{
- int A;
static const UINT8 swaptable[24][4] =
{
{ 6,4,2,0 }, { 4,6,2,0 }, { 2,4,6,0 }, { 0,4,2,6 },
@@ -62,14 +61,7 @@ static void sega_decode_2(running_machine &machine,const char *cputag,
};
- address_space &space = machine.device(cputag)->memory().space(AS_PROGRAM);
- UINT8 *rom = machine.root_device().memregion(cputag)->base();
- UINT8 *decrypted = auto_alloc_array(machine, UINT8, 0x8000);
-
- space.set_decrypted_region(0x0000, 0x7fff, decrypted);
-
-
- for (A = 0x0000;A < 0x8000;A++)
+ for (int A = 0x0000;A < 0x8000;A++)
{
int row;
UINT8 src;
@@ -93,187 +85,6 @@ static void sega_decode_2(running_machine &machine,const char *cputag,
}
-
-void sega_315_5162_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 xor_table[128] =
- {
- 0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,0x40,0x10,0x50,0x04,0x44,0x14,0x54,0x01,0x41,0x11,0x51,0x05,0x45,0x15,0x55,
- 0x00,
- };
-
- static const int swap_table[128] =
- {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 12,
- };
-
-
- sega_decode_2(machine,cputag,xor_table,swap_table);
-}
-
-
-void sega_315_5177_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 xor_table[128] =
- {
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,
-
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,0x41,0x45,0x00,0x50,0x54,0x11,0x45,0x40,
- 0x04,0x54,0x51,0x15,0x40,0x44,0x01,0x51,0x55,0x10,0x44,0x41,
- 0x05,0x55,0x50,0x14,
- };
-
- static const int swap_table[128] =
- {
- 0,0,0,0,
- 1,1,1,1,1,
- 2,2,2,2,2,
- 3,3,3,3,
- 4,4,4,4,4,
- 5,5,5,5,5,
- 6,6,6,6,6,
- 7,7,7,7,7,
- 8,8,8,8,
- 9,9,9,9,9,
- 10,10,10,10,10,
- 11,11,11,11,11,
- 12,12,12,12,12,
- 13,13,
-
- 8,8,8,8,
- 9,9,9,9,9,
- 10,10,10,10,10,
- 11,11,11,11,
- 12,12,12,12,12,
- 13,13,13,13,13,
- 14,14,14,14,14,
- 15,15,15,15,15,
- 16,16,16,16,
- 17,17,17,17,17,
- 18,18,18,18,18,
- 19,19,19,19,19,
- 20,20,20,20,20,
- 21,21,
- };
-
-
- sega_decode_2(machine,cputag,xor_table,swap_table);
-}
-
-
-void sega_315_5178_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 xor_table[128] =
- {
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
- 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
- 0x40,0x55,0x15,0x05,0x51,0x11,
- 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
- 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
- 0x41,0x54,0x14,0x04,0x50,0x10,
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
-
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,0x44,0x50,0x10,
- 0x00,0x55,0x15,0x05,0x51,0x41,0x01,0x14,0x44,0x04,0x10,
- 0x40,0x55,0x15,0x05,0x51,0x11,
- 0x01,0x54,0x44,0x04,0x10,0x40,0x00,0x15,0x45,0x51,0x11,
- 0x01,0x54,0x14,0x04,0x50,0x40,0x00,0x15,0x45,0x05,0x11,
- 0x41,0x54,0x14,0x04,0x50,0x10,
- 0x00,0x55,0x45,0x05,0x11,0x41,0x01,0x14,
- };
-
- static const int swap_table[128] =
- {
- 2,
- 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7,
- 0, 2, 4, 6, 0, 2, 4, 6, 0, 2, 4,
- 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3,
- 4, 6, 0, 2, 4, 6, 0, 2, 4, 6,
- 8,
- 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5,
- 6, 0, 2, 4, 6, 0, 2,
-
- 10,
- 11,13,15, 9,11,13,15, 9,11,13,15,
- 8,10,12,14, 8,10,12,14, 8,10,12,
- 13,15, 9,11,13,15, 9,11,13,15, 9,11,
- 12,14, 8,10,12,14, 8,10,12,14,
- 16,
- 9,11,13,15, 9,11,13,15, 9,11,13,
- 14, 8,10,12,14, 8,10,
- };
-
-
- sega_decode_2(machine,cputag,xor_table,swap_table);
-}
-
-
-void sega_315_5179_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 xor_table[128] =
- {
- 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,0x40,0x45,0x11,0x14,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x10,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x01,0x04,
- 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x15,0x51,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x11,0x54,0x50,
- 0x00,0x05,0x41,0x44,0x10,0x55,0x51,0x01,0x04,
- 0x40,0x45,0x11,0x14,0x50,0x55,0x05,0x01,0x44,0x40,0x15,0x51,0x54,0x04,
- 0x00,0x45,0x41,0x14,0x10,0x55,0x51,0x01,0x04,
- 0x40,0x45,0x11,0x54,0x50,0x00,0x05,0x41,
- };
-
- static const int swap_table[128] =
- {
- 8, 9,11,13,15, 0, 2, 4, 6,
- 8, 9,11,13,15, 1, 2, 4, 6,
- 8, 9,11,13,15, 1, 2, 4, 6,
- 8, 9,11,13,15, 1, 2, 4, 6,
- 8,10,11,13,15, 1, 2, 4, 6,
- 8,10,11,13,15, 1, 2, 4, 6,
- 8,10,11,13,15, 1, 3, 4, 6,
- 8,
- 7, 1, 2, 4, 6, 0, 1, 3, 5,
- 7, 1, 2, 4, 6, 0, 1, 3, 5,
- 7, 1, 2, 4, 6, 0, 2, 3, 5,
- 7, 1, 2, 4, 6, 0, 2, 3, 5,
- 7, 1, 2, 4, 6, 0, 2, 3, 5,
- 7, 1, 3, 4, 6, 0, 2, 3, 5,
- 7, 1, 3, 4, 6, 0, 2, 4, 5,
- 7,
- };
-
-
- sega_decode_2(machine,cputag,xor_table,swap_table);
-}
-
-
/******************************************************************************
These games (all 317-000x CPUs) use the same algorithm, but the key doesn't
@@ -281,7 +92,7 @@ void sega_315_5179_decode(running_machine &machine, const char *cputag)
******************************************************************************/
-static void sega_decode_317(running_machine &machine, const char *cputag, int shift)
+void sega_decode_317(UINT8 *rom, UINT8 *decrypted, int shift)
{
static const UINT8 xor_table[128+3] =
{
@@ -309,10 +120,5 @@ static void sega_decode_317(running_machine &machine, const char *cputag, int sh
10,20, 1,
};
- sega_decode_2( machine, cputag, xor_table + shift, swap_table + shift );
+ sega_decode_2(rom, decrypted, xor_table + shift, swap_table + shift);
}
-
-void sega_317_0004_decode(running_machine &machine, const char *cputag) { sega_decode_317( machine, cputag, 0 ); }
-void sega_317_0005_decode(running_machine &machine, const char *cputag) { sega_decode_317( machine, cputag, 1 ); }
-void sega_317_0006_decode(running_machine &machine, const char *cputag) { sega_decode_317( machine, cputag, 2 ); }
-void sega_317_0007_decode(running_machine &machine, const char *cputag) { sega_decode_317( machine, cputag, 3 ); }
diff --git a/src/mame/machine/segacrp2.h b/src/mame/machine/segacrp2.h
index 36493c9edf0..a842ef8096b 100644
--- a/src/mame/machine/segacrp2.h
+++ b/src/mame/machine/segacrp2.h
@@ -1,10 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
-void sega_315_5162_decode(running_machine &machine, const char *cputag);
-void sega_315_5177_decode(running_machine &machine, const char *cputag);
-void sega_315_5178_decode(running_machine &machine, const char *cputag);
-void sega_315_5179_decode(running_machine &machine, const char *cputag);
-void sega_317_0004_decode(running_machine &machine, const char *cputag);
-void sega_317_0005_decode(running_machine &machine, const char *cputag);
-void sega_317_0006_decode(running_machine &machine, const char *cputag);
-void sega_317_0007_decode(running_machine &machine, const char *cputag);
+
+void sega_decode_2(UINT8 *rom, UINT8 *decrypted,
+ const UINT8 xor_table[128],const int swap_table[128]);
+
+void sega_decode_317(UINT8 *rom, UINT8 *decrypted, int shift);
diff --git a/src/mame/machine/segacrpt.c b/src/mame/machine/segacrpt.c
index 48c152a7ed6..e577ac786c8 100644
--- a/src/mame/machine/segacrpt.c
+++ b/src/mame/machine/segacrpt.c
@@ -215,26 +215,21 @@ static void look_for_known_plaintext(void)
}
#endif
-static void sega_decode(running_machine &machine, const char *cputag, const UINT8 convtable[32][4])
+void sega_decode(UINT8 *data, UINT8 *opcodes, int size, const UINT8 convtable[32][4], int bank_count, int bank_size)
{
- int A;
-
- address_space &space = machine.device(cputag)->memory().space(AS_PROGRAM);
- int length = machine.root_device().memregion(cputag)->bytes();
- int cryptlen = MIN(length, 0x8000);
- UINT8 *rom = machine.root_device().memregion(cputag)->base();
- UINT8 *decrypted = auto_alloc_array(machine, UINT8, 0xc000);
-
- space.set_decrypted_region(0x0000, cryptlen - 1, decrypted);
-
- for (A = 0x0000;A < cryptlen;A++)
+ for (int A = 0x0000;A < size + bank_count*bank_size;A++)
{
int xorval = 0;
- UINT8 src = rom[A];
+ UINT8 src = data[A];
+ int adr;
+ if(A < size || !bank_count)
+ adr = A;
+ else
+ adr = size + ((A - size) % bank_size);
/* pick the translation table from bits 0, 4, 8 and 12 of the address */
- int row = (A & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2) + (((A >> 12) & 1) << 3);
+ int row = (adr & 1) + (((adr >> 4) & 1) << 1) + (((adr >> 8) & 1) << 2) + (((adr >> 12) & 1) << 3);
/* pick the offset in the table from bits 3 and 5 of the source data */
int col = ((src >> 3) & 1) + (((src >> 5) & 1) << 1);
@@ -246,826 +241,14 @@ static void sega_decode(running_machine &machine, const char *cputag, const UINT
}
/* decode the opcodes */
- decrypted[A] = (src & ~0xa8) | (convtable[2*row][col] ^ xorval);
+ opcodes[A] = (src & ~0xa8) | (convtable[2*row][col] ^ xorval);
/* decode the data */
- rom[A] = (src & ~0xa8) | (convtable[2*row+1][col] ^ xorval);
+ data[A] = (src & ~0xa8) | (convtable[2*row+1][col] ^ xorval);
if (convtable[2*row][col] == 0xff) /* table incomplete! (for development) */
- decrypted[A] = 0xee;
+ opcodes[A] = 0xee;
if (convtable[2*row+1][col] == 0xff) /* table incomplete! (for development) */
- rom[A] = 0xee;
- }
-
- /* this is a kludge to catch anyone who has code that crosses the encrypted/ */
- /* decrypted boundary. ssanchan does it */
- if (length > 0x8000)
- {
- int bytes = MIN(length - 0x8000, 0x4000);
- memcpy(&decrypted[0x8000], &rom[0x8000], bytes);
- }
-}
-
-
-
-void buckrog_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...0...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
- { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...0...0 */
- { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...0 */
- { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
- { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...1...1 */
- { 0x80,0x00,0x88,0x08 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void pengo_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0xa0,0x80,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...1...0 */
- { 0x08,0x28,0x88,0xa8 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
- { 0x08,0x00,0x88,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0x08,0x00,0x88,0x80 }, /* ...0...1...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...0...1...1...1 */
- { 0x88,0x80,0x08,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...0...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...1...0...0...1 */
- { 0x08,0x28,0x88,0xa8 }, { 0x08,0x28,0x88,0xa8 }, /* ...1...0...1...0 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...1...1 */
- { 0x08,0x00,0x88,0x80 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
- { 0x00,0x08,0x20,0x28 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...1 */
- { 0x08,0x28,0x88,0xa8 }, { 0x08,0x28,0x88,0xa8 }, /* ...1...1...1...0 */
- { 0x08,0x00,0x88,0x80 }, { 0xa0,0x80,0x20,0x00 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void szaxxon_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...0...0 */
- { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
- { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...1 */
- { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
- { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...1...1...0 */
- { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
- { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...1...0 */
- { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...0...1...1 */
- { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...1...0...0 */
- { 0xa8,0x28,0xa0,0x20 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...1...0...1 */
- { 0x08,0x28,0x88,0xa8 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void suprloco_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...0 */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...0...0 */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...0...1 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...0 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...0...1 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...1...1 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void yamato_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...0 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...0...1...1 */
- { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...0...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...0...1 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...1...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...0...0...0 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
- { 0xa0,0x20,0x80,0x00 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...1 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...0 */
- { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...1 */
- { 0xa0,0x20,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...1...1...0 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-void toprollr_decode(running_machine &machine, const char *cputag, const char *regiontag)
-{
- /* same tables as in Yamato, but encrypted ROM is banked */
- UINT8 *decrypted;
-
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...0 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...0...1...1 */
- { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...0...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...0...1 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x20,0xa0,0x28,0xa8 }, /* ...0...1...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...0...0...0 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...1 */
- { 0xa0,0x20,0x80,0x00 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x20,0xa0,0x28,0xa8 }, /* ...1...0...1...1 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...0 */
- { 0x88,0xa8,0x08,0x28 }, { 0x88,0xa8,0x08,0x28 }, /* ...1...1...0...1 */
- { 0xa0,0x20,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...1...1...0 */
- { 0x20,0xa0,0x28,0xa8 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
- };
-
- int A;
-
- address_space &space = machine.device(cputag)->memory().space(AS_PROGRAM);
- UINT8 *rom = machine.root_device().memregion(regiontag)->base();
- int bankstart;
- decrypted = auto_alloc_array(machine, UINT8, 0x6000*3);
-
-
- for(bankstart=0;bankstart<0x6000*3;bankstart+=0x6000)
- for (A = 0x0000;A < 0x6000;A++)
- {
- int xorval = 0;
-
- UINT8 src = rom[A+bankstart];
-
- /* pick the translation table from bits 0, 4, 8 and 12 of the address */
- int row = (A & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2) + (((A >> 12) & 1) << 3);
-
- /* pick the offset in the table from bits 3 and 5 of the source data */
- int col = ((src >> 3) & 1) + (((src >> 5) & 1) << 1);
- /* the bottom half of the translation table is the mirror image of the top */
- if (src & 0x80)
- {
- col = 3 - col;
- xorval = 0xa8;
- }
-
- /* decode the opcodes */
- decrypted[A+bankstart] = (src & ~0xa8) | (convtable[2*row][col] ^ xorval);
-
- /* decode the data */
- rom[A+bankstart] = (src & ~0xa8) | (convtable[2*row+1][col] ^ xorval);
- }
-
- machine.root_device().membank("bank1")->configure_entries(0,3, machine.root_device().memregion(regiontag)->base(),0x6000);
- machine.root_device().membank("bank1")->configure_decrypted_entries(0,3,decrypted,0x6000);
- space.set_decrypted_region(0x0000, 0x5fff, decrypted);
- space.machine().root_device().membank("bank1")->set_entry(0);
-}
-
-
-void sindbadm_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...0...1 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...1...1 */
- { 0xa8,0x88,0xa0,0x80 }, { 0xa0,0x20,0xa8,0x28 }, /* ...0...1...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...1...1...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...1...1...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...1 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...1...0...1...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x00,0x20,0x80,0xa0 }, /* ...1...0...1...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
- { 0xa8,0x88,0xa0,0x80 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void regulus_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...1 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...1...0 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...1 */
- { 0x80,0xa0,0x00,0x20 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...1 */
- { 0x80,0xa0,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...0 */
- { 0x80,0xa0,0x00,0x20 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void mrviking_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...0 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...1...1...1 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...1...0...1...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...1...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0xa8,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void swat_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...0...0...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...0 */
- { 0xa0,0xa8,0x80,0x88 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
- { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...1...1...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...1...1...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...0...0 */
- { 0xa0,0x20,0x80,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...1 */
- { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...1...0 */
- { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...1...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...1...0...1 */
- { 0xa0,0xa8,0x80,0x88 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...1...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0xa8,0x80,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void flicky_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x08,0x88,0x00,0x80 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0x20,0x00 }, /* ...0...0...1...0 */
- { 0x28,0x08,0x20,0x00 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
- { 0x08,0x88,0x00,0x80 }, { 0x80,0x00,0xa0,0x20 }, /* ...0...1...0...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
- { 0x28,0x08,0x20,0x00 }, { 0x28,0x08,0x20,0x00 }, /* ...0...1...1...0 */
- { 0x28,0x08,0x20,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...1 */
- { 0x08,0x88,0x00,0x80 }, { 0xa8,0x88,0x28,0x08 }, /* ...1...0...0...0 */
- { 0xa8,0x88,0x28,0x08 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...0...0...1 */
- { 0x28,0x08,0x20,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...0 */
- { 0xa8,0x88,0x28,0x08 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...1 */
- { 0x08,0x88,0x00,0x80 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...1...0...0 */
- { 0xa8,0x88,0x28,0x08 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...1...0...1 */
- { 0x28,0x08,0x20,0x00 }, { 0x28,0x08,0x20,0x00 }, /* ...1...1...1...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x88,0x80,0x08,0x00 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void futspy_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x28,0x08,0x20,0x00 }, { 0x28,0x08,0x20,0x00 }, /* ...0...0...0...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...0...0...0...1 */
- { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...0...0...1...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...0...1...1 */
- { 0x28,0x08,0x20,0x00 }, { 0x88,0x80,0xa8,0xa0 }, /* ...0...1...0...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
- { 0x80,0x00,0xa0,0x20 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...1...1...0 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...1...1 */
- { 0x88,0x80,0xa8,0xa0 }, { 0x28,0x08,0x20,0x00 }, /* ...1...0...0...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...0...1 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x88,0x00,0x80 }, /* ...1...0...1...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...0...1...1 */
- { 0x88,0x80,0xa8,0xa0 }, { 0x88,0x80,0xa8,0xa0 }, /* ...1...1...0...0 */
- { 0x80,0x00,0xa0,0x20 }, { 0x08,0x88,0x00,0x80 }, /* ...1...1...0...1 */
- { 0x80,0x00,0xa0,0x20 }, { 0x28,0x08,0x20,0x00 }, /* ...1...1...1...0 */
- { 0x20,0x28,0xa0,0xa8 }, { 0xa0,0x80,0x20,0x00 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void wmatch_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...0...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...0...1...0 */
- { 0x20,0x28,0xa0,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...1...1 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...0...0 */
- { 0x08,0x88,0x00,0x80 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...0...1 */
- { 0xa8,0x28,0x88,0x08 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...1...1...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...1...1 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...0...0...1 */
- { 0x20,0x28,0xa0,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...0...1...0 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...0...1...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...1...0...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...1...1...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void bullfgtj_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0xa0,0xa8,0x20,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...0...0...0...0 */
- { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...0...0...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...0...1...0 */
- { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...0...1...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...0 */
- { 0x28,0xa8,0x20,0xa0 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...1...1...0 */
- { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...1...1...1 */
- { 0x28,0xa8,0x20,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...0 */
- { 0x88,0x08,0xa8,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...0...1 */
- { 0x28,0xa8,0x20,0xa0 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...0 */
- { 0x28,0xa8,0x20,0xa0 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */
- { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...0 */
- { 0x88,0x08,0xa8,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...1 */
- { 0x08,0x28,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */
- { 0x08,0x28,0x00,0x20 }, { 0x88,0x08,0xa8,0x28 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void pbaction_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0xa8,0xa0,0x88,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...0 */
- { 0x28,0x08,0xa8,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...0...1 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...1...0 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...1 */
- { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...0...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...0...1 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...1 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x28,0x20,0xa8,0xa0 }, /* ...1...0...0...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...0...0...1 */
- { 0x28,0x20,0xa8,0xa0 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...0...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0xa8,0x28,0xa0,0x20 }, /* ...1...1...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0x28,0xa0,0x20 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void spatter_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0x08,0x80,0x00 }, { 0x00,0x08,0x20,0x28 }, /* ...0...0...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...0...0...1 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...0...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...1...1 */
- { 0x00,0x08,0x20,0x28 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...0...0 */
- { 0xa0,0x80,0x20,0x00 }, { 0x80,0x88,0x00,0x08 }, /* ...0...1...0...1 */
- { 0x88,0x08,0x80,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x28,0x20,0xa8,0xa0 }, /* ...0...1...1...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0x80,0x88,0x00,0x08 }, /* ...1...0...0...0 */
- { 0x80,0x88,0x00,0x08 }, { 0x00,0x08,0x20,0x28 }, /* ...1...0...0...1 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...1...0 */
- { 0x00,0x08,0x20,0x28 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...1 */
- { 0x80,0x88,0x00,0x08 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...0 */
- { 0x80,0xa0,0x88,0xa8 }, { 0xa0,0x80,0x20,0x00 }, /* ...1...1...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...1...1...0 */
- { 0x28,0x20,0xa8,0xa0 }, { 0x00,0x08,0x20,0x28 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void jongkyo_decode(running_machine &machine, const char *cputag)
-{
- /* encrypted ROM is banked */
- UINT8 *decrypted;
-
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x28,0x08,0xa8,0x88 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...0...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...0...1...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x80,0x88,0xa0,0xa8 }, /* ...0...0...1...1 */
- { 0x08,0x88,0x00,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
- { 0x20,0xa0,0x00,0x80 }, { 0x20,0xa0,0x00,0x80 }, /* ...0...1...1...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...1...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...0...1...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...1...1 */
- { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...1...0...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x20,0xa0,0x00,0x80 }, /* ...1...1...1...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0x08,0x88,0x00,0x80 } /* ...1...1...1...1 */
- };
-
- int A;
-
- address_space &space = machine.device(cputag)->memory().space(AS_PROGRAM);
- UINT8 *rom = machine.root_device().memregion(cputag)->base();
- decrypted = auto_alloc_array(machine, UINT8, 0x9000);
-
- for (A = 0x0000;A < 0x9000;A++)
- {
- int xorval = 0;
-
- UINT8 src = rom[A];
-
- /* pick the translation table from bits 0, 4, 8 and 12 of the address */
- int row = (A & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2) + (((A >> 12) & 1) << 3);
-
- /* pick the offset in the table from bits 3 and 5 of the source data */
- int col = ((src >> 3) & 1) + (((src >> 5) & 1) << 1);
- /* the bottom half of the translation table is the mirror image of the top */
- if (src & 0x80)
- {
- col = 3 - col;
- xorval = 0xa8;
- }
-
- /* special handling for banked area */
- if (A >= 0x7000)
- row = (A & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2);
-
- /* decode the opcodes */
- decrypted[A] = (src & ~0xa8) | (convtable[2*row][col] ^ xorval);
-
- /* decode the data */
- rom[A] = (src & ~0xa8) | (convtable[2*row+1][col] ^ xorval);
+ data[A] = 0xee;
}
-
- machine.root_device().membank("bank1")->configure_entries(0,8, machine.root_device().memregion(cputag)->base()+0x7000,0x0400);
- machine.root_device().membank("bank1")->configure_decrypted_entries(0,8,decrypted+0x7000,0x0400);
- space.set_decrypted_region(0x0000, 0x6bff, decrypted);
- machine.root_device().membank("bank1")->set_entry(0);
-}
-
-
-void pitfall2_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
- { 0x08,0x88,0x28,0xa8 }, { 0x28,0xa8,0x20,0xa0 }, /* ...0...0...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...1...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x20,0x00,0xa0,0x80 }, /* ...0...1...0...0 */
- { 0x28,0xa8,0x20,0xa0 }, { 0x20,0x00,0xa0,0x80 }, /* ...0...1...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...1...1...0 */
- { 0x28,0xa8,0x20,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...1...1...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...0...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...0...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0x28,0xa8,0x20,0xa0 }, /* ...1...0...1...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0x80,0x88,0xa0,0xa8 }, /* ...1...1...0...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...1...0...1 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...1...0 */
- { 0x80,0x88,0xa0,0xa8 }, { 0x28,0xa8,0x20,0xa0 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void nprinces_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x08,0x88,0x00,0x80 }, { 0xa0,0x20,0x80,0x00 }, /* ...0...0...0...0 */
- { 0xa8,0xa0,0x28,0x20 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...0...1 */
- { 0x88,0x80,0x08,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...0...1...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x20,0x80,0x00 }, /* ...0...1...0...0 */
- { 0xa8,0xa0,0x28,0x20 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...1...0...1 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...1...1...1 */
- { 0xa0,0x20,0x80,0x00 }, { 0xa0,0x20,0x80,0x00 }, /* ...1...0...0...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...0...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...1 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...1...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x28,0x08,0xa8,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void seganinj_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...0...0...1 */
- { 0xa8,0xa0,0x28,0x20 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...0...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa0,0xa8,0x80,0x88 }, /* ...0...0...1...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...0...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0x88,0x08,0x80,0x00 }, /* ...0...1...0...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...0 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x28,0x20 }, /* ...0...1...1...1 */
- { 0x88,0x08,0x80,0x00 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
- { 0xa0,0xa8,0x80,0x88 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...0...1 */
- { 0xa8,0xa0,0x28,0x20 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...1...0 */
- { 0xa8,0xa0,0x28,0x20 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...0...1...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...0...0 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...1...0...1 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...1...1...0 */
- { 0xa8,0xa0,0x28,0x20 }, { 0x28,0x08,0xa8,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void imsorry_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0x08,0x80,0x00 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...0...0 */
- { 0x00,0x20,0x80,0xa0 }, { 0x88,0x08,0x80,0x00 }, /* ...0...0...0...1 */
- { 0x88,0x08,0xa8,0x28 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...0...1...0 */
- { 0x00,0x20,0x80,0xa0 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...0...1...1 */
- { 0x00,0x20,0x80,0xa0 }, { 0x08,0x00,0x88,0x80 }, /* ...0...1...0...0 */
- { 0x00,0x20,0x80,0xa0 }, { 0x20,0x28,0xa0,0xa8 }, /* ...0...1...0...1 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x00,0x20,0x80,0xa0 }, /* ...0...1...1...0 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...1...1...1 */
- { 0x88,0x08,0x80,0x00 }, { 0x08,0x00,0x88,0x80 }, /* ...1...0...0...0 */
- { 0x08,0x00,0x88,0x80 }, { 0x88,0x08,0x80,0x00 }, /* ...1...0...0...1 */
- { 0x08,0x28,0x00,0x20 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...0 */
- { 0x88,0x08,0x80,0x00 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...1 */
- { 0x08,0x28,0x00,0x20 }, { 0x08,0x00,0x88,0x80 }, /* ...1...1...0...0 */
- { 0x08,0x28,0x00,0x20 }, { 0x20,0x28,0xa0,0xa8 }, /* ...1...1...0...1 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x28,0x00,0x20 }, /* ...1...1...1...0 */
- { 0x20,0x28,0xa0,0xa8 }, { 0x08,0x28,0x00,0x20 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void teddybb_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x20,0x28,0x00,0x08 }, { 0x80,0x00,0xa0,0x20 }, /* ...0...0...0...0 */
- { 0x20,0x28,0x00,0x08 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...0...0...1 */
- { 0x28,0x08,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...1...1 */
- { 0x20,0x28,0x00,0x08 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...0...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...0...1...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...1 */
- { 0x80,0x00,0xa0,0x20 }, { 0x80,0x00,0xa0,0x20 }, /* ...1...0...0...0 */
- { 0xa0,0x20,0xa8,0x28 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...1 */
- { 0xa0,0x20,0xa8,0x28 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...0 */
- { 0xa0,0x80,0xa8,0x88 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...0...1...1 */
- { 0x80,0x00,0xa0,0x20 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...1 */
- { 0x80,0x00,0xa0,0x20 }, { 0xa0,0x80,0xa8,0x88 }, /* ...1...1...1...0 */
- { 0xa0,0xa8,0x20,0x28 }, { 0xa0,0x20,0xa8,0x28 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void myheroj_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x20,0x00,0xa0,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...0...0 */
- { 0x20,0x00,0xa0,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...0...1 */
- { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...0 */
- { 0x08,0x88,0x00,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...0...0...1...1 */
- { 0x20,0x00,0xa0,0x80 }, { 0x28,0xa8,0x08,0x88 }, /* ...0...1...0...0 */
- { 0x20,0x00,0xa0,0x80 }, { 0x08,0x88,0x00,0x80 }, /* ...0...1...0...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...0 */
- { 0x08,0x88,0x00,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...1...1...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...0...0...0 */
- { 0x80,0xa0,0x88,0xa8 }, { 0x20,0x00,0xa0,0x80 }, /* ...1...0...0...1 */
- { 0x80,0xa0,0x88,0xa8 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0x80,0xa0,0x88,0xa8 }, /* ...1...0...1...1 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x08,0x88,0x00,0x80 }, /* ...1...1...0...1 */
- { 0x88,0x80,0x08,0x00 }, { 0xa8,0xa0,0x88,0x80 }, /* ...1...1...1...0 */
- { 0x88,0x80,0x08,0x00 }, { 0xa8,0xa0,0x88,0x80 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void hvymetal_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0x88,0xa8,0x80,0xa0 }, { 0xa0,0x80,0xa8,0x88 }, /* ...0...0...0...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x88,0xa8,0x80,0xa0 }, /* ...0...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x88,0x80,0x08,0x00 }, /* ...0...0...1...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...0...1 */
- { 0xa0,0x80,0xa8,0x88 }, { 0x88,0x80,0x08,0x00 }, /* ...0...1...1...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x28,0x08,0xa8,0x88 }, /* ...0...1...1...1 */
- { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...0 */
- { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...0...1 */
- { 0xa0,0x20,0xa8,0x28 }, { 0x88,0xa8,0x80,0xa0 }, /* ...1...0...1...0 */
- { 0x88,0xa8,0x80,0xa0 }, { 0x28,0x08,0xa8,0x88 }, /* ...1...0...1...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...0...0 */
- { 0xa0,0x20,0xa8,0x28 }, { 0x28,0xa8,0x08,0x88 }, /* ...1...1...0...1 */
- { 0x28,0xa8,0x08,0x88 }, { 0xa0,0x20,0xa8,0x28 }, /* ...1...1...1...0 */
- { 0x28,0x08,0xa8,0x88 }, { 0x28,0xa8,0x08,0x88 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
-}
-
-
-void lvcards_decode(running_machine &machine, const char *cputag)
-{
- static const UINT8 convtable[32][4] =
- {
- /* opcode data address */
- /* A B C D A B C D */
- { 0xa8,0x88,0xa0,0x80 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...0...0...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...0...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...0...1...0 */
- { 0xa8,0xa0,0x88,0x80 }, { 0xa8,0xa0,0x88,0x80 }, /* ...0...0...1...1 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0xa0,0x20 }, /* ...0...1...0...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...0...1...0...1 */
- { 0xa0,0x80,0x20,0x00 }, { 0xa0,0x80,0x20,0x00 }, /* ...0...1...1...0 */
- { 0xa8,0x88,0xa0,0x80 }, { 0xa8,0x88,0xa0,0x80 }, /* ...0...1...1...1 */
- { 0xa8,0x88,0xa0,0x80 }, { 0xa8,0x28,0x88,0x08 }, /* ...1...0...0...0 */
- { 0x88,0x80,0x08,0x00 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...0...1 */
- { 0xa8,0x28,0x88,0x08 }, { 0x88,0x80,0x08,0x00 }, /* ...1...0...1...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x28,0x88,0x08 }, /* ...1...0...1...1 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x88,0xa0,0x80 }, /* ...1...1...0...0 */
- { 0xa8,0x88,0xa0,0x80 }, { 0x88,0x80,0x08,0x00 }, /* ...1...1...0...1 */
- { 0x88,0x80,0x08,0x00 }, { 0xa8,0x28,0x88,0x08 }, /* ...1...1...1...0 */
- { 0xa8,0x28,0x88,0x08 }, { 0xa8,0x88,0xa0,0x80 } /* ...1...1...1...1 */
- };
-
-
- sega_decode(machine, cputag, convtable);
}
diff --git a/src/mame/machine/segacrpt.h b/src/mame/machine/segacrpt.h
index c0d42bad383..ba6fc16ca72 100644
--- a/src/mame/machine/segacrpt.h
+++ b/src/mame/machine/segacrpt.h
@@ -1,27 +1,4 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
-void buckrog_decode(running_machine &machine, const char *cputag);
-void pengo_decode(running_machine &machine, const char *cputag);
-void szaxxon_decode(running_machine &machine, const char *cputag);
-void suprloco_decode(running_machine &machine, const char *cputag);
-void yamato_decode(running_machine &machine, const char *cputag);
-void toprollr_decode(running_machine &machine, const char *cputag, const char *regiontag);
-void sindbadm_decode(running_machine &machine, const char *cputag);
-void regulus_decode(running_machine &machine, const char *cputag);
-void mrviking_decode(running_machine &machine, const char *cputag);
-void swat_decode(running_machine &machine, const char *cputag);
-void flicky_decode(running_machine &machine, const char *cputag);
-void futspy_decode(running_machine &machine, const char *cputag);
-void wmatch_decode(running_machine &machine, const char *cputag);
-void bullfgtj_decode(running_machine &machine, const char *cputag);
-void pbaction_decode(running_machine &machine, const char *cputag);
-void spatter_decode(running_machine &machine, const char *cputag);
-void jongkyo_decode(running_machine &machine, const char *cputag);
-void pitfall2_decode(running_machine &machine, const char *cputag);
-void nprinces_decode(running_machine &machine, const char *cputag);
-void seganinj_decode(running_machine &machine, const char *cputag);
-void imsorry_decode(running_machine &machine, const char *cputag);
-void teddybb_decode(running_machine &machine, const char *cputag);
-void myheroj_decode(running_machine &machine, const char *cputag);
-void hvymetal_decode(running_machine &machine, const char *cputag);
-void lvcards_decode(running_machine &machine, const char *cputag);
+
+void sega_decode(UINT8 *data, UINT8 *opcodes, int size, const UINT8 convtable[32][4], int bank_count = 0, int bank_size = 0);
diff --git a/src/mame/machine/segaic16.c b/src/mame/machine/segaic16.c
index 5976fbc1be8..19ab5ef6906 100644
--- a/src/mame/machine/segaic16.c
+++ b/src/mame/machine/segaic16.c
@@ -179,6 +179,7 @@ sega_315_5195_mapper_device::sega_315_5195_mapper_device(const machine_config &m
m_cputag(NULL),
m_cpu(NULL),
m_space(NULL),
+ m_decrypted_space(NULL),
m_curregion(0)
{
}
@@ -354,7 +355,7 @@ READ8_MEMBER( sega_315_5195_mapper_device::read )
// map_as_rom - map a region as ROM data
//-------------------------------------------------
-void sega_315_5195_mapper_device::map_as_rom(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_name, offs_t rgnoffset, write16_delegate whandler)
+void sega_315_5195_mapper_device::map_as_rom(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_name, const char *decrypted_bank_name, offs_t rgnoffset, write16_delegate whandler)
{
// determine parameters
region_info info;
@@ -377,14 +378,17 @@ void sega_315_5195_mapper_device::map_as_rom(UINT32 offset, UINT32 length, offs_
// map now
m_space->install_read_bank(info.start, romend, 0, info.mirror, bank_name);
+ if (m_decrypted_space)
+ m_decrypted_space->install_read_bank(info.start, romend, 0, info.mirror, decrypted_bank_name);
// configure the bank
memory_bank *bank = owner()->membank(bank_name);
+ memory_bank *decrypted_bank = owner()->membank(decrypted_bank_name);
UINT8 *memptr = m_cpu->region()->base() + rgnoffset;
bank->set_base(memptr);
// remember this bank, and decrypt if necessary
- m_banks[m_curregion].set(bank, info.start, romend, rgnoffset, memptr);
+ m_banks[m_curregion].set(bank, decrypted_bank, info.start, romend, rgnoffset, memptr);
}
// either install a write handler if provided or unmap the region
@@ -524,6 +528,8 @@ void sega_315_5195_mapper_device::device_start()
if (m_space == NULL)
throw emu_fatalerror("Unable to find program address space on device '%s'", m_cputag);
+ m_decrypted_space = m_cpu->has_space(AS_DECRYPTED_OPCODES) ? &m_cpu->space(AS_DECRYPTED_OPCODES) : NULL;
+
// register for saves
save_item(NAME(m_regs));
}
@@ -597,6 +603,7 @@ void sega_315_5195_mapper_device::update_mapping()
sega_315_5195_mapper_device::decrypt_bank::decrypt_bank()
: m_bank(NULL),
+ m_decrypted_bank(NULL),
m_start(0),
m_end(0),
m_rgnoffs(~0),
@@ -647,7 +654,7 @@ void sega_315_5195_mapper_device::decrypt_bank::set_decrypt(fd1094_device *fd109
// a change
//-------------------------------------------------
-void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, offs_t start, offs_t end, offs_t rgnoffs, UINT8 *src)
+void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, memory_bank *decrypted_bank, offs_t start, offs_t end, offs_t rgnoffs, UINT8 *src)
{
// ignore if not encrypted
if (m_fd1089 == NULL && m_fd1094_cache == NULL)
@@ -662,6 +669,7 @@ void sega_315_5195_mapper_device::decrypt_bank::set(memory_bank *bank, offs_t st
// update to the current state
m_bank = bank;
+ m_decrypted_bank = decrypted_bank;
m_start = start;
m_end = end;
m_rgnoffs = rgnoffs;
@@ -692,12 +700,12 @@ void sega_315_5195_mapper_device::decrypt_bank::update()
{
m_fd1089_decrypted.resize((m_end + 1 - m_start) / 2);
m_fd1089->decrypt(m_start, m_end + 1 - m_start, m_rgnoffs, &m_fd1089_decrypted[0], reinterpret_cast<UINT16 *>(m_srcptr));
- m_bank->set_base_decrypted(&m_fd1089_decrypted[0]);
+ m_decrypted_bank->set_base(&m_fd1089_decrypted[0]);
}
// fd1094 case
if (m_fd1094_cache != NULL)
- m_bank->set_base_decrypted(m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state()));
+ m_decrypted_bank->set_base(m_fd1094_cache->decrypted_opcodes(m_fd1094_cache->fd1094().state()));
}
diff --git a/src/mame/machine/segaic16.h b/src/mame/machine/segaic16.h
index 4472e24d3db..58d772975a3 100644
--- a/src/mame/machine/segaic16.h
+++ b/src/mame/machine/segaic16.h
@@ -101,7 +101,7 @@ public:
DECLARE_WRITE8_MEMBER( write );
// mapping helpers
- void map_as_rom(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_name, offs_t rgnoffset, write16_delegate whandler);
+ void map_as_rom(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_name, const char *decrypted_bank_name, offs_t rgnoffset, write16_delegate whandler);
void map_as_ram(UINT32 offset, UINT32 length, offs_t mirror, const char *bank_share_name, write16_delegate whandler);
void map_as_handler(UINT32 offset, UINT32 length, offs_t mirror, read16_delegate rhandler, write16_delegate whandler);
@@ -135,8 +135,8 @@ private:
// configuration
void set_decrypt(fd1089_base_device *fd1089);
void set_decrypt(fd1094_device *fd1094);
- void clear() { set(NULL, 0, 0, ~0, NULL); }
- void set(memory_bank *bank, offs_t start, offs_t end, offs_t rgnoffs, UINT8 *src);
+ void clear() { set(NULL, NULL, 0, 0, ~0, NULL); }
+ void set(memory_bank *bank, memory_bank *decrypted_bank, offs_t start, offs_t end, offs_t rgnoffs, UINT8 *src);
// updating
void update();
@@ -145,6 +145,7 @@ private:
private:
// internal state
memory_bank * m_bank;
+ memory_bank * m_decrypted_bank;
offs_t m_start;
offs_t m_end;
offs_t m_rgnoffs;
@@ -168,6 +169,7 @@ private:
// internal state
m68000_device * m_cpu;
address_space * m_space;
+ address_space * m_decrypted_space;
UINT8 m_regs[0x20];
UINT8 m_curregion;
decrypt_bank m_banks[8];
diff --git a/src/mame/machine/slapstic.c b/src/mame/machine/slapstic.c
index 60f6a26233d..5adf0c91d7f 100644
--- a/src/mame/machine/slapstic.c
+++ b/src/mame/machine/slapstic.c
@@ -821,7 +821,7 @@ int atari_slapstic_device::alt2_kludge(address_space &space, offs_t offset)
if (MATCHES_MASK_VALUE(space.device().safe_pc() >> 1, slapstic.alt1))
{
/* now look for a move.w (An),(An) or cmpm.w (An)+,(An)+ */
- UINT16 opcode = space.direct().read_decrypted_word(space.device().safe_pcbase() & 0xffffff);
+ UINT16 opcode = space.direct().read_word(space.device().safe_pcbase() & 0xffffff);
if ((opcode & 0xf1f8) == 0x3090 || (opcode & 0xf1f8) == 0xb148)
{
/* fetch the value of the register for the second operand, and see */
diff --git a/src/mame/machine/stfight.c b/src/mame/machine/stfight.c
index ff6e07476a5..f0aba6a01c3 100644
--- a/src/mame/machine/stfight.c
+++ b/src/mame/machine/stfight.c
@@ -39,18 +39,14 @@ Encryption PAL 16R4 on CPU board
DRIVER_INIT_MEMBER(stfight_state,empcity)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
UINT8 *rom = memregion("maincpu")->base();
- m_decrypt = auto_alloc_array(machine(), UINT8, 0x8000);
- space.set_decrypted_region(0x0000, 0x7fff, m_decrypt);
-
for (UINT32 A = 0; A < 0x8000; ++A)
{
UINT8 src = rom[A];
// decode opcode
- m_decrypt[A] =
+ m_decrypted_opcodes[A] =
( src & 0xA6 ) |
( ( ( ( src << 2 ) ^ src ) << 3 ) & 0x40 ) |
( ~( ( src ^ ( A >> 1 ) ) >> 2 ) & 0x10 ) |