mirror of https://github.com/bsnes-emu/bsnes.git
47 lines
1.1 KiB
C++
Executable File
47 lines
1.1 KiB
C++
Executable File
class SPC7110Decomp {
|
|
public:
|
|
uint8 read();
|
|
void init(unsigned mode, unsigned offset, unsigned index);
|
|
void reset();
|
|
|
|
void serialize(serializer&);
|
|
SPC7110Decomp();
|
|
~SPC7110Decomp();
|
|
|
|
private:
|
|
unsigned decomp_mode;
|
|
unsigned decomp_offset;
|
|
|
|
//read() will spool chunks half the size of decomp_buffer_size
|
|
enum { decomp_buffer_size = 64 }; //must be >= 64, and must be a power of two
|
|
uint8 *decomp_buffer;
|
|
unsigned decomp_buffer_rdoffset;
|
|
unsigned decomp_buffer_wroffset;
|
|
unsigned decomp_buffer_length;
|
|
|
|
void write(uint8 data);
|
|
uint8 dataread();
|
|
|
|
void mode0(bool init);
|
|
void mode1(bool init);
|
|
void mode2(bool init);
|
|
|
|
static const uint8 evolution_table[53][4];
|
|
static const uint8 mode2_context_table[32][2];
|
|
|
|
struct ContextState {
|
|
uint8 index;
|
|
uint8 invert;
|
|
} context[32];
|
|
|
|
uint8 probability(unsigned n);
|
|
uint8 next_lps(unsigned n);
|
|
uint8 next_mps(unsigned n);
|
|
bool toggle_invert(unsigned n);
|
|
|
|
unsigned morton16[2][256];
|
|
unsigned morton32[4][256];
|
|
unsigned morton_2x8(unsigned data);
|
|
unsigned morton_4x8(unsigned data);
|
|
};
|