| #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 |