Path: blob/master/libsnes/bsnes/snes/chip/sdd1/decomp.hpp
2 views
struct Decomp {1struct IM { //input manager2Decomp &self;3void init(unsigned offset);4uint8 get_codeword(uint8 code_length);5IM(SDD1::Decomp &self) : self(self) {}6private:7unsigned offset;8unsigned bit_count;9};1011struct GCD { //golomb-code decoder12Decomp &self;13static const uint8 run_count[256];14void get_run_count(uint8 code_number, uint8 &mps_count, bool &lps_index);15GCD(SDD1::Decomp &self) : self(self) {}16};1718struct BG { //bits generator19Decomp &self;20void init();21uint8 get_bit(bool &end_of_run);22BG(SDD1::Decomp &self, uint8 code_number) : self(self), code_number(code_number) {}23private:24const uint8 code_number;25uint8 mps_count;26bool lps_index;27};2829struct PEM { //probability estimation module30Decomp &self;31void init();32uint8 get_bit(uint8 context);33PEM(SDD1::Decomp &self) : self(self) {}34private:35struct State {36uint8 code_number;37uint8 next_if_mps;38uint8 next_if_lps;39};40static const State evolution_table[33];41struct ContextInfo {42uint8 status;43uint8 mps;44} context_info[32];45};4647struct CM { //context model48Decomp &self;49void init(unsigned offset);50uint8 get_bit();51CM(SDD1::Decomp &self) : self(self) {}52private:53uint8 bitplanes_info;54uint8 context_bits_info;55uint8 bit_number;56uint8 current_bitplane;57uint16 previous_bitplane_bits[8];58};5960struct OL { //output logic61Decomp &self;62void init(unsigned offset);63uint8 decompress();64OL(SDD1::Decomp &self) : self(self) {}65private:66uint8 bitplanes_info;67uint8 r0, r1, r2;68};6970void init(unsigned offset);71uint8 read();72uint8 rom_read(unsigned offset);73Decomp();7475IM im;76GCD gcd;77BG bg0, bg1, bg2, bg3, bg4, bg5, bg6, bg7;78PEM pem;79CM cm;80OL ol;81};828384