1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #ifndef _RAR_VM_
- #define _RAR_VM_
- #define VM_MEMSIZE 0x40000
- #define VM_MEMMASK (VM_MEMSIZE-1)
- enum VM_StandardFilters {
- VMSF_NONE, VMSF_E8, VMSF_E8E9, VMSF_ITANIUM, VMSF_RGB, VMSF_AUDIO,
- VMSF_DELTA
- };
- struct VM_PreparedProgram
- {
- VM_PreparedProgram()
- {
- FilteredDataSize=0;
- Type=VMSF_NONE;
- }
- VM_StandardFilters Type;
- uint InitR[7];
- byte *FilteredData;
- uint FilteredDataSize;
- };
- class RarVM
- {
- private:
- bool ExecuteStandardFilter(VM_StandardFilters FilterType);
- uint FilterItanium_GetBits(byte *Data,uint BitPos,uint BitCount);
- void FilterItanium_SetBits(byte *Data,uint BitField,uint BitPos,uint BitCount);
- byte *Mem;
- uint R[8];
- public:
- RarVM();
- ~RarVM();
- void Init();
- void Prepare(byte *Code,uint CodeSize,VM_PreparedProgram *Prg);
- void Execute(VM_PreparedProgram *Prg);
- void SetMemory(size_t Pos,byte *Data,size_t DataSize);
- static uint ReadData(BitInput &Inp);
- };
- #endif
|