📄 segacrpt.c
字号:
/* A B C D A B C D */
{ 0xa0,0xa0,0x00,0x00 }, { 0x80,0xa8,0x20,0x08 }, /* ...0...0...0...0 */
{ 0x20,0x20,0x20,0x20 }, { 0x20,0x20,0x20,0x20 }, /* ...0...0...0...1 */
{ 0xa0,0xa0,0x00,0x00 }, { 0x08,0x20,0x20,0x08 }, /* ...0...0...1...0 */
{ 0x88,0x00,0x88,0x00 }, { 0x88,0x00,0x88,0x00 }, /* ...0...0...1...1 */
{ 0xa0,0xa0,0x00,0x00 }, { 0x20,0x20,0x20,0x20 }, /* ...0...1...0...0 */
{ 0x28,0xa0,0x00,0x88 }, { 0x20,0x20,0x20,0x20 }, /* ...0...1...0...1 */
{ 0xa0,0xa0,0x00,0x00 }, { 0x08,0x20,0x20,0x08 }, /* ...0...1...1...0 */
{ 0x88,0x00,0x88,0x00 }, { 0x88,0x00,0x88,0x00 }, /* ...0...1...1...1 */
{ 0x28,0xa0,0x00,0x88 }, { 0xa0,0xa0,0x00,0x00 }, /* ...1...0...0...0 */
{ 0x88,0x00,0x88,0x00 }, { 0x80,0xa8,0x20,0x08 }, /* ...1...0...0...1 */
{ 0x28,0xa0,0x00,0x88 }, { 0x08,0x20,0x20,0x08 }, /* ...1...0...1...0 */
{ 0x28,0xa0,0x00,0x88 }, { 0x80,0xa8,0x20,0x08 }, /* ...1...0...1...1 */
{ 0x20,0x20,0x20,0x20 }, { 0x20,0x20,0x20,0x20 }, /* ...1...1...0...0 */
{ 0x88,0x00,0x88,0x00 }, { 0x20,0x20,0x20,0x20 }, /* ...1...1...0...1 */
{ 0x08,0x20,0x20,0x08 }, { 0x80,0xa8,0x20,0x08 }, /* ...1...1...1...0 */
{ 0x08,0x20,0x20,0x08 }, { 0x88,0x00,0x88,0x00 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void pitfall2_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0xa0,0x88,0x88,0xa0 }, { 0xa0,0x88,0x88,0xa0 }, /* ...0...0...0...0 */
{ 0x08,0x80,0x08,0x80 }, { 0x28,0xa0,0x00,0x88 }, /* ...0...0...0...1 */
{ 0xa0,0x88,0x88,0xa0 }, { 0xa0,0x88,0x88,0xa0 }, /* ...0...0...1...0 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0xa0,0x00,0x00 }, /* ...0...0...1...1 */
{ 0xa0,0x88,0x88,0xa0 }, { 0x20,0x08,0x80,0xa8 }, /* ...0...1...0...0 */
{ 0x28,0xa0,0x00,0x88 }, { 0x20,0x08,0x80,0xa8 }, /* ...0...1...0...1 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0xa0,0x00,0x00 }, /* ...0...1...1...0 */
{ 0x28,0xa0,0x00,0x88 }, { 0xa0,0xa0,0x00,0x00 }, /* ...0...1...1...1 */
{ 0x20,0x08,0x80,0xa8 }, { 0x80,0x80,0x80,0x80 }, /* ...1...0...0...0 */
{ 0x80,0x80,0x80,0x80 }, { 0x80,0x80,0x80,0x80 }, /* ...1...0...0...1 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0x88,0x88,0xa0 }, /* ...1...0...1...0 */
{ 0x80,0x80,0x80,0x80 }, { 0x28,0xa0,0x00,0x88 }, /* ...1...0...1...1 */
{ 0x20,0x08,0x80,0xa8 }, { 0x80,0x80,0x80,0x80 }, /* ...1...1...0...0 */
{ 0x80,0x80,0x80,0x80 }, { 0x20,0x08,0x80,0xa8 }, /* ...1...1...0...1 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0x88,0x88,0xa0 }, /* ...1...1...1...0 */
{ 0x80,0x80,0x80,0x80 }, { 0x28,0xa0,0x00,0x88 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void nprinces_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0x08,0x80,0x20,0xa8 }, { 0xa0,0x28,0xa0,0x28 }, /* ...0...0...0...0 */
{ 0xa8,0xa8,0x08,0x08 }, { 0x88,0xa0,0xa0,0x88 }, /* ...0...0...0...1 */
{ 0x88,0x88,0x28,0x28 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...0...1...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...0...1...1 */
{ 0x88,0xa0,0xa0,0x88 }, { 0xa0,0x28,0xa0,0x28 }, /* ...0...1...0...0 */
{ 0xa8,0xa8,0x08,0x08 }, { 0xa8,0xa8,0x08,0x08 }, /* ...0...1...0...1 */
{ 0x88,0x88,0x28,0x28 }, { 0x88,0xa0,0xa0,0x88 }, /* ...0...1...1...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0xa0,0xa0,0x88 }, /* ...0...1...1...1 */
{ 0xa0,0x28,0xa0,0x28 }, { 0xa0,0x28,0xa0,0x28 }, /* ...1...0...0...0 */
{ 0x08,0x80,0x20,0xa8 }, { 0x28,0x00,0x88,0xa0 }, /* ...1...0...0...1 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0x88,0x28,0x28 }, /* ...1...0...1...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x28,0x00,0x88,0xa0 }, /* ...1...0...1...1 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...1...0...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...1...0...1 */
{ 0x88,0x88,0x28,0x28 }, { 0x88,0x88,0x28,0x28 }, /* ...1...1...1...0 */
{ 0x08,0x80,0x20,0xa8 }, { 0x28,0x00,0x88,0xa0 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void seganinj_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0x00,0xa0,0x28 }, /* ...0...0...0...0 */
{ 0x28,0xa0,0x28,0xa0 }, { 0xa0,0xa0,0xa0,0xa0 }, /* ...0...0...0...1 */
{ 0xa8,0xa8,0x08,0x08 }, { 0xa8,0xa8,0x08,0x08 }, /* ...0...0...1...0 */
{ 0x28,0xa0,0x28,0xa0 }, { 0xa0,0xa0,0xa0,0xa0 }, /* ...0...0...1...1 */
{ 0x28,0x00,0x88,0xa0 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...1...0...0 */
{ 0x28,0xa0,0x28,0xa0 }, { 0x88,0x00,0xa0,0x28 }, /* ...0...1...0...1 */
{ 0x28,0x00,0x88,0xa0 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...1...1...0 */
{ 0x28,0xa0,0x28,0xa0 }, { 0xa8,0xa8,0x08,0x08 }, /* ...0...1...1...1 */
{ 0x88,0x00,0xa0,0x28 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...0...0...0 */
{ 0xa0,0xa0,0xa0,0xa0 }, { 0x28,0xa0,0x28,0xa0 }, /* ...1...0...0...1 */
{ 0xa8,0xa8,0x08,0x08 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...0...1...0 */
{ 0xa8,0xa8,0x08,0x08 }, { 0x28,0xa0,0x28,0xa0 }, /* ...1...0...1...1 */
{ 0x28,0x00,0x88,0xa0 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...1...0...0 */
{ 0x28,0x00,0x88,0xa0 }, { 0x28,0x00,0x88,0xa0 }, /* ...1...1...0...1 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...1...1...0 */
{ 0xa8,0xa8,0x08,0x08 }, { 0x28,0x00,0x88,0xa0 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void imsorry_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0x88,0x00,0xa0,0x28 }, { 0x00,0x28,0xa0,0x88 }, /* ...0...0...0...0 */
{ 0x00,0x28,0xa0,0x88 }, { 0x88,0x00,0xa0,0x28 }, /* ...0...0...0...1 */
{ 0x88,0x00,0x88,0x00 }, { 0x00,0x28,0xa0,0x88 }, /* ...0...0...1...0 */
{ 0x00,0x28,0xa0,0x88 }, { 0x88,0x00,0x88,0x00 }, /* ...0...0...1...1 */
{ 0x00,0x28,0xa0,0x88 }, { 0x08,0x08,0xa8,0xa8 }, /* ...0...1...0...0 */
{ 0x00,0x28,0xa0,0x88 }, { 0x20,0x20,0x80,0x80 }, /* ...0...1...0...1 */
{ 0x20,0x20,0x80,0x80 }, { 0x00,0x28,0xa0,0x88 }, /* ...0...1...1...0 */
{ 0x20,0x20,0x80,0x80 }, { 0x88,0x00,0x88,0x00 }, /* ...0...1...1...1 */
{ 0x88,0x00,0xa0,0x28 }, { 0x08,0x08,0xa8,0xa8 }, /* ...1...0...0...0 */
{ 0x08,0x08,0xa8,0xa8 }, { 0x88,0x00,0xa0,0x28 }, /* ...1...0...0...1 */
{ 0x08,0x20,0x20,0x08 }, { 0x08,0x20,0x20,0x08 }, /* ...1...0...1...0 */
{ 0x88,0x00,0xa0,0x28 }, { 0x08,0x20,0x20,0x08 }, /* ...1...0...1...1 */
{ 0x08,0x20,0x20,0x08 }, { 0x08,0x08,0xa8,0xa8 }, /* ...1...1...0...0 */
{ 0x08,0x20,0x20,0x08 }, { 0x20,0x20,0x80,0x80 }, /* ...1...1...0...1 */
{ 0x20,0x20,0x80,0x80 }, { 0x08,0x20,0x20,0x08 }, /* ...1...1...1...0 */
{ 0x20,0x20,0x80,0x80 }, { 0x08,0x20,0x20,0x08 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void teddybb_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0x20,0x20,0x20,0x20 }, { 0x80,0x08,0x80,0x08 }, /* ...0...0...0...0 */
{ 0x20,0x20,0x20,0x20 }, { 0xa0,0xa0,0x00,0x00 }, /* ...0...0...0...1 */
{ 0x28,0x00,0x88,0xa0 }, { 0xa0,0x88,0x88,0xa0 }, /* ...0...0...1...0 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0x88,0x88,0xa0 }, /* ...0...0...1...1 */
{ 0x20,0x20,0x20,0x20 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...1...0...0 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0xa0,0x00,0x00 }, /* ...0...1...0...1 */
{ 0xa0,0x88,0x88,0xa0 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...1...1...0 */
{ 0xa0,0xa0,0x00,0x00 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...1...1...1 */
{ 0x80,0x08,0x80,0x08 }, { 0x80,0x08,0x80,0x08 }, /* ...1...0...0...0 */
{ 0xa0,0x28,0x88,0x00 }, { 0xa0,0xa0,0x00,0x00 }, /* ...1...0...0...1 */
{ 0xa0,0x28,0x88,0x00 }, { 0xa0,0x88,0x88,0xa0 }, /* ...1...0...1...0 */
{ 0xa0,0x88,0x88,0xa0 }, { 0xa0,0x88,0x88,0xa0 }, /* ...1...0...1...1 */
{ 0x80,0x08,0x80,0x08 }, { 0x20,0x20,0x20,0x20 }, /* ...1...1...0...0 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0x28,0x88,0x00 }, /* ...1...1...0...1 */
{ 0x80,0x08,0x80,0x08 }, { 0xa0,0x88,0x88,0xa0 }, /* ...1...1...1...0 */
{ 0xa0,0xa0,0x00,0x00 }, { 0xa0,0x28,0x88,0x00 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void hvymetal_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0x88,0xa0,0xa0,0x88 }, { 0xa0,0x88,0x88,0xa0 }, /* ...0...0...0...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0x88,0x28,0x28 }, /* ...0...0...0...1 */
{ 0xa0,0x88,0x88,0xa0 }, { 0x88,0xa0,0xa0,0x88 }, /* ...0...0...1...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x88,0x88,0x28,0x28 }, /* ...0...0...1...1 */
{ 0xa0,0x88,0x88,0xa0 }, { 0x88,0x88,0x28,0x28 }, /* ...0...1...0...0 */
{ 0x88,0x88,0x28,0x28 }, { 0x88,0x88,0x28,0x28 }, /* ...0...1...0...1 */
{ 0xa0,0x88,0x88,0xa0 }, { 0x88,0x88,0x28,0x28 }, /* ...0...1...1...0 */
{ 0x88,0x88,0x28,0x28 }, { 0x28,0x00,0x88,0xa0 }, /* ...0...1...1...1 */
{ 0xa0,0x28,0x88,0x00 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...0...0...0 */
{ 0xa0,0x28,0x88,0x00 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...0...0...1 */
{ 0xa0,0x28,0x88,0x00 }, { 0x88,0xa0,0xa0,0x88 }, /* ...1...0...1...0 */
{ 0x88,0xa0,0xa0,0x88 }, { 0x28,0x00,0x88,0xa0 }, /* ...1...0...1...1 */
{ 0x28,0xa0,0x28,0xa0 }, { 0xa0,0x28,0x88,0x00 }, /* ...1...1...0...0 */
{ 0xa0,0x28,0x88,0x00 }, { 0x28,0xa0,0x28,0xa0 }, /* ...1...1...0...1 */
{ 0x28,0xa0,0x28,0xa0 }, { 0xa0,0x28,0x88,0x00 }, /* ...1...1...1...0 */
{ 0x28,0x00,0x88,0xa0 }, { 0x28,0xa0,0x28,0xa0 } /* ...1...1...1...1 */
};
sega_decode(xortable);
}
void myheroj_decode(void)
{
static const unsigned char xortable[32][4] =
{
/* opcode data address */
/* A B C D A B C D */
{ 0x20,0x08,0x80,0xa8 }, { 0x80,0xa8,0xa8,0x80 }, /* ...0...0...0...0 */
{ 0x20,0x08,0x80,0xa8 }, { 0x80,0xa8,0xa8,0x80 }, /* ...0...0...0...1 */
{ 0xa8,0xa8,0xa8,0xa8 }, { 0xa8,0xa8,0xa8,0xa8 }, /* ...0...0...1...0 */
{ 0x08,0x80,0x20,0xa8 }, { 0x80,0xa8,0xa8,0x80 }, /* ...0...0...1...1 */
{ 0x20,0x08,0x80,0xa8 }, { 0x28,0xa0,0x28,0xa0 }, /* ...0...1...0...0 */
{ 0x20,0x08,0x80,0xa8 }, { 0x08,0x80,0x20,0xa8 }, /* ...0...1...0...1 */
{ 0x28,0xa0,0x28,0xa0 }, { 0xa8,0xa8,0xa8,0xa8 }, /* ...0...1...1...0 */
{ 0x08,0x80,0x20,0xa8 }, { 0xa8,0xa8,0xa8,0xa8 }, /* ...0...1...1...1 */
{ 0x28,0xa0,0x28,0xa0 }, { 0x20,0x08,0x80,0xa8 }, /* ...1...0...0...0 */
{ 0x80,0xa8,0xa8,0x80 }, { 0x20,0x08,0x80,0xa8 }, /* ...1...0...0...1 */
{ 0x80,0xa8,0xa8,0x80 }, { 0x80,0xa8,0xa8,0x80 }, /* ...1...0...1...0 */
{ 0xa8,0xa8,0xa8,0xa8 }, { 0x80,0xa8,0xa8,0x80 }, /* ...1...0...1...1 */
{ 0x88,0x88,0x28,0x28 }, { 0x88,0x88,0x28,0x28 }, /* ...1...1...0...0 */
{ 0x88,0x88,0x28,0x28 }, { 0x08,0x80,0x20,0xa8 }, /* ...1...1...0...1 */
{ 0x88,0x88,0x28,0x28 }, { 0xa8,0xa8,0xa8,0xa8 }, /* ...1...1...1...0 */
{ 0x88,0x88,0x28,0x28 }, { 0xa8,0xa8,0xa8,0xa8 } /* ...1...1...1...1 */
};
myheroj_unmangle(); /* additional address and data line swapping */
sega_decode(xortable);
}
/******************************************************************************
4D Warriors
This encryption is quite different from the standard one. It is still
a XOR scheme, but the value to use for the XOR is chosen differently, and
the affected bits are D0, D2, D4 and D6 instead of D3, D5 and D7.
The translation table depends on A0, A3, A6, A9, A12 and A14; however A0, A3
and A6 only select some fixed additional XOR, so there are only 8 really
different tables.
There are no separate tables for data and opcodes: the opcodes are just XORed
with an additional 0x40. To make it a little more complicated, however, data
picks its XOR value not from the line given by the address but from the one
below. For example if you are decoding a byte at address .1.0..1..0..1..0,
you pick the XOR value as if you were at address .1.0..1..0..1..1 (note that
I'm not talking about the rows of the xortable below, but of the "logical"
ones which are generated by them with the additional fixed XORs selected by
A0, A3 and A6).
******************************************************************************/
void fdwarrio_decode(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -