summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/snesb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/snesb.cpp')
-rw-r--r--src/mame/drivers/snesb.cpp34
1 files changed, 10 insertions, 24 deletions
diff --git a/src/mame/drivers/snesb.cpp b/src/mame/drivers/snesb.cpp
index c3a2097e0a8..146ae743b56 100644
--- a/src/mame/drivers/snesb.cpp
+++ b/src/mame/drivers/snesb.cpp
@@ -33,7 +33,7 @@ TODO:
- legendsb : unknown dipswitches
- rushbets : dipswitches (stored at memory locations $785006 and $785008)
- venom : gfx glitches on second level
- - wldgunsb : check if it doesn't work because of protection or some bug in the decryption
+ - wldgunsb : protection simulation
***************************************************************************
@@ -1363,44 +1363,30 @@ void snesb_state::init_wldgunsb()
uint8_t *dst = memregion("user3")->base();
static uint8_t address_tab_high[0x20] = {
- // 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
- 0x0b, 0x1d, 0x05, 0x15, 0x09, 0x19, 0x04, 0x13, 0x02, 0x1f, 0x07, 0x17, 0x0d, 0x11, 0x0a, 0x1a, // unkn
- 0x14, 0x0e, 0x18, 0x06, 0x1e, 0x01, 0x10, 0x0c, 0x1b, 0x0f, 0x16, 0x00, 0x12, 0x08, 0x1c, 0x03 // 0x10
+ 0x0b, 0x1d, 0x05, 0x15, 0x09, 0x19, 0x04, 0x13, 0x02, 0x1f, 0x07, 0x17, 0x0d, 0x11, 0x0a, 0x1a,
+ 0x14, 0x0e, 0x18, 0x06, 0x1e, 0x01, 0x10, 0x0c, 0x1b, 0x0f, 0x16, 0x00, 0x12, 0x08, 0x1c, 0x03
};
static uint8_t address_tab_low[0x40] = {
- // 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
0x14, 0x1d, 0x11, 0x3c, 0x0a, 0x29, 0x2d, 0x2e, 0x30, 0x32, 0x16, 0x36, 0x05, 0x25, 0x26, 0x37,
0x20, 0x21, 0x27, 0x28, 0x33, 0x34, 0x23, 0x12, 0x1e, 0x1f, 0x3b, 0x24, 0x2c, 0x35, 0x38, 0x39,
0x3d, 0x0c, 0x2a, 0x0d, 0x22, 0x18, 0x19, 0x1a, 0x03, 0x08, 0x04, 0x3a, 0x0b, 0x0f, 0x15, 0x17,
0x1b, 0x13, 0x00, 0x1c, 0x2b, 0x01, 0x06, 0x2f, 0x07, 0x09, 0x02, 0x31, 0x10, 0x0e, 0x3f, 0x3e
};
- static uint8_t data_table[0x100] = {
- // 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
- 0x35, 0xad, 0x85, 0xb5, 0x95, 0x05, 0x25, 0xa5, 0x0d, 0xbd, 0x3d, 0x1d, 0x8d, 0x15, 0x2d, 0x9d, // 0x00
- 0x73, 0xeb, 0xc3, 0xf3, 0xd3, 0x43, 0x63, 0xe3, 0x4b, 0xfb, 0x7b, 0x5b, 0xcb, 0x53, 0x6b, 0xdb, // 0x10
- 0x70, 0xe8, 0xc0, 0xf0, 0xd0, 0x40, 0x60, 0xe0, 0x48, 0xf8, 0x78, 0x58, 0xc8, 0x50, 0x68, 0xd8, // 0x20
- 0x75, 0xed, 0xc5, 0xf5, 0xd5, 0x45, 0x65, 0xe5, 0x4d, 0xfd, 0x7d, 0x5d, 0xcd, 0x55, 0x6d, 0xdd, // 0x30
- 0x74, 0xec, 0xc4, 0xf4, 0xd4, 0x44, 0x64, 0xe4, 0x4c, 0xfc, 0x7c, 0x5c, 0xcc, 0x54, 0x6c, 0xdc, // 0x40
- 0x30, 0xa8, 0x80, 0xb0, 0x90, 0x00, 0x20, 0xa0, 0x08, 0xb8, 0x38, 0x18, 0x88, 0x10, 0x28, 0x98, // 0x50
- 0x31, 0xa9, 0x81, 0xb1, 0x91, 0x01, 0x21, 0xa1, 0x09, 0xb9, 0x39, 0x19, 0x89, 0x11, 0x29, 0x99, // 0x60
- 0x71, 0xe9, 0xc1, 0xf1, 0xd1, 0x41, 0x61, 0xe1, 0x49, 0xf9, 0x79, 0x59, 0xc9, 0x51, 0x69, 0xd9, // 0x70
- 0x32, 0xaa, 0x82, 0xb2, 0x92, 0x02, 0x22, 0xa2, 0x0a, 0xba, 0x3a, 0x1a, 0x8a, 0x12, 0x2a, 0x9a, // 0x80
- 0x77, 0xef, 0xc7, 0xf7, 0xd7, 0x47, 0x67, 0xe7, 0x4f, 0xff, 0x7f, 0x5f, 0xcf, 0x57, 0x6f, 0xdf, // 0x90
- 0x37, 0xaf, 0x87, 0xb7, 0x97, 0x07, 0x27, 0xa7, 0x0f, 0xbf, 0x3f, 0x1f, 0x8f, 0x17, 0x2f, 0x9f, // 0xa0
- 0x36, 0xae, 0x86, 0xb6, 0x96, 0x06, 0x26, 0xa6, 0x0e, 0xbe, 0x3e, 0x1e, 0x8e, 0x16, 0x2e, 0x9e, // 0xb0
- 0x72, 0xea, 0xc2, 0xf2, 0xd2, 0x42, 0x62, 0xe2, 0x4a, 0xfa, 0x7a, 0x5a, 0xca, 0x52, 0x6a, 0xda, // 0xc0
- 0x34, 0xac, 0x84, 0xb4, 0x94, 0x04, 0x24, 0xa4, 0x0c, 0xbc, 0x3c, 0x1c, 0x8c, 0x14, 0x2c, 0x9c, // 0xd0
- 0x33, 0xab, 0x83, 0xb3, 0x93, 0x03, 0x23, 0xa3, 0x0b, 0xbb, 0x3b, 0x1b, 0x8b, 0x13, 0x2b, 0x9b, // 0xe0
- 0x76, 0xee, 0xc6, 0xf6, 0xd6, 0x46, 0x66, 0xe6, 0x4e, 0xfe, 0x7e, 0x5e, 0xce, 0x56, 0x6e, 0xde // 0xf0
+ static const uint8_t data_low[16] = {
+ 0x30, 0xa8, 0x80, 0xb0, 0x90, 0x00, 0x20, 0xa0, 0x08, 0xb8, 0x38, 0x18, 0x88, 0x10, 0x28, 0x98
+ };
+
+ static const uint8_t data_high[16] = {
+ 0x05, 0x43, 0x40, 0x45, 0x44, 0x00, 0x01, 0x41, 0x02, 0x47, 0x07, 0x06, 0x42, 0x04, 0x03, 0x46
};
for (int i = 0; i < 0x100000; i++)
{
int j = (address_tab_high[i >> 15] << 15) + (i & 0x7fc0) + address_tab_low[i & 0x3f];
- dst[i] = data_table[src[j]];
+ dst[i] = data_high[src[j]>>4] | data_low[src[j]&0xf];
if (i >= 0x00000 && i < 0x10000) {
dst[i] = bitswap<8>(dst[i], 3, 1, 7, 0, 6, 4, 5, 2) ^ 0xff;