1 #ifndef _RAR_VM_ 2 #define _RAR_VM_ 3 4 #define VM_MEMSIZE 0x40000 5 #define VM_MEMMASK (VM_MEMSIZE-1) 6 7 enum VM_StandardFilters { 8 VMSF_NONE, VMSF_E8, VMSF_E8E9, VMSF_ITANIUM, VMSF_RGB, VMSF_AUDIO, 9 VMSF_DELTA 10 }; 11 12 struct VM_PreparedProgram 13 { VM_PreparedProgramVM_PreparedProgram14 VM_PreparedProgram() 15 { 16 FilteredDataSize=0; 17 Type=VMSF_NONE; 18 } 19 VM_StandardFilters Type; 20 uint InitR[7]; 21 byte *FilteredData; 22 uint FilteredDataSize; 23 }; 24 25 class RarVM 26 { 27 private: 28 bool ExecuteStandardFilter(VM_StandardFilters FilterType); 29 uint FilterItanium_GetBits(byte *Data,uint BitPos,uint BitCount); 30 void FilterItanium_SetBits(byte *Data,uint BitField,uint BitPos,uint BitCount); 31 32 byte *Mem; 33 uint R[8]; 34 public: 35 RarVM(); 36 ~RarVM(); 37 void Init(); 38 void Prepare(byte *Code,uint CodeSize,VM_PreparedProgram *Prg); 39 void Execute(VM_PreparedProgram *Prg); 40 void SetMemory(size_t Pos,byte *Data,size_t DataSize); 41 static uint ReadData(BitInput &Inp); 42 }; 43 44 #endif 45