Started work on IOP BIOS disassembly

This commit is contained in:
google0101-ryan 2024-01-28 19:56:54 -05:00
parent 079564dce8
commit 36f3daff0f
29 changed files with 1416 additions and 101 deletions

11
BIOS/README.md Normal file
View file

@ -0,0 +1,11 @@
# WHAT IS THIS?
This is my attempt at reverse engineering the PS2 BIOS in psuedo-C
# WHY?
To better understand how the PS2's BIOS functions, and to aid and abet bug hunting
# CAN I COMPILE THIS?
As of right now? No. But maybe someday in the future...

24
BIOS/iop/btconf.c Normal file
View file

@ -0,0 +1,24 @@
#include "btconf.h"
int ParseLoadAddr(char** str)
{
char* buf = *str;
int ret = 0;
while ('/' < *buf)
{
int i;
char c = *buf;
buf++;
if (c <= '9')
i = c - '0';
else if (c <= 'f')
i = c - 'a';
else if (c <= 'F')
i = c - 'A';
ret = ret * 16 + i;
}
*str = buf;
return ret;
}

3
BIOS/iop/btconf.h Normal file
View file

@ -0,0 +1,3 @@
#pragma once
int ParseLoadAddr(char** str);

View file

@ -0,0 +1,7 @@
#pragma once
extern int CpuSuspendIntr(int* state);
extern int RegisterIntrHandler(int irq, int mode, int (*func)(void*), void* arg);
extern int EnableIntr(int irq);
extern int CpuResumeIntr(int state);
extern int CpuEnableIntr();

131
BIOS/iop/iopboot.c Normal file
View file

@ -0,0 +1,131 @@
#include "types.h"
#include "string.h"
#include "romdir.h"
#include "btconf.h"
IopBootInfo* gBootInfo = (IopBootInfo*)0x20000;
/**
* @brief The entrypoint of the IOPBOOT module, which bootstraps the IOP kernel
* @param ram_size The size of the IOP's RAM, in megabytes.
* @param boot_info This gets used to load IOPBTCONFx, where x is boot_info's value
* @param udnl_cmd The command line, usually NULL on retail PS2s
*/
void _entry(int ram_size, int boot_info, char* udnl_cmd, int unk)
{
// Disable interrupts
asm volatile("mtc0 $0,$12");
// The IOP kernel can only access a maximum of 2MBs of RAM
if (ram_size > 2)
ram_size = 2;
// In the real IOPBOOT, the stack pointer is set to the end of RAM here
// This structure is used to pass around some boot info
gBootInfo->cmd_ptr = 0;
gBootInfo->structEnd = 0x20020;
gBootInfo->ram_size = ram_size;
gBootInfo->boot_info = boot_info;
if (udnl_cmd)
{
// Copy the command line to just past the structure
gBootInfo->cmd_ptr = ((char*)gBootInfo+sizeof(IopBootInfo));
strcpy(((char*)gBootInfo+sizeof(IopBootInfo)), udnl_cmd);
size_t cmdlen = strlen(udnl_cmd);
// 8 byte align the struct's end
gBootInfo->structEnd += ((cmdlen + 8) & 0xfffffffc);
}
RomDir romDir;
if (!SearchForRomDir((void*)0xbfc00000, (void*)0xbfc10000, &romDir))
{
// If we can't find any ROMDIR entries, just crash
do {} while(1);
}
// One of IOPBTCONF entries
char configName[48];
strcpy(configName, "IOPBTCONF");
configName[9] = boot_info + '0'; // This means we load IOPBTCONFx, where x is boot_info
RomDirEnt btconf;
if (!FindRomDirEnt(&romDir, configName, &btconf))
{
// If IOPBTCONFx doesn't exist, load IOPBTCONF
configName[9] = 0;
strcpy(configName, "IOPBTCONF");
if (!FindRomDirEnt(&romDir, configName, &btconf))
do {} while (1);
}
int moduleCount = 0;
// Now we parse this list, which tells us which modules to load
// The name ptr is 10 bytes, followed by 2 bytes for ext_info_size
// At 0xC is the file size, so we can dereference that and add it to the file ptr to get the end
char* end = btconf.filePtr + *(unsigned int*)((char*)btconf.name + 0xc);
char* buf = (char*)btconf.filePtr;
while (buf < end)
{
// skip whitespace
while (*buf < ' ') buf++;
// New entry, non-whitespace
moduleCount++;
}
gBootInfo->numModules = moduleCount;
int moduleLoadAddr = 0;
buf = (char*)btconf.filePtr;
// Following the IopBootInfo struct is a list of addresses to be loaded
unsigned int* endOfStructPtr = (unsigned int*)gBootInfo->structEnd;
RomDirEnt toLoad;
while (buf < end)
{
char c = *buf;
// '@' characters are used to specify the module load offset
if (c == '@')
{
buf++;
moduleLoadAddr = ParseLoadAddr(&buf);
}
// Either used to include other BTCONF files
// Or used to call a function somewhere in memory
else if (c == '!')
{
// BUG: The PS2 BIOS doesn't support !includes, at least on scph10000
if (strncmp(buf, "!addr", 6) == 0)
{
buf += 6;
*endOfStructPtr = ParseLoadAddr(&buf) * 4 + 1;
endOfStructPtr++;
*endOfStructPtr = 0;
}
}
else if (c != '#')
{
// Find the module to be loaded
void* ret = FindRomDirEnt(&romDir, buf, &toLoad);
if (!ret)
return 1;
*endOfStructPtr = toLoad.filePtr;
endOfStructPtr++;
*endOfStructPtr = 0;
}
if (buf > end) break;
// Skip trailing whitespace
do
{
if (*buf < ' ') break;
buf++;
} while (buf < end);
do
{
if (0x1f < *buf) break;
buf++;
} while (buf < end);
}
// Now we've got a list of addresses following IopBootInfo, terminated with a 0 word
// Load them, in order
}

View file

@ -0,0 +1,18 @@
#pragma once
typedef struct ExportTable_t
{
unsigned int magic;
struct ExportTable_t* next;
unsigned short version;
unsigned short mode;
char name[8];
void* exports[];
} ExportTable_t;
void RegisterLibraryEntries(ExportTable_t* table);
static void ExportStub()
{
// Do nothing export stub for placeholder slots
}

82
BIOS/iop/romdir.c Normal file
View file

@ -0,0 +1,82 @@
#include "romdir.h"
RomDir *SearchForRomDir(void *start, void *end, RomDir *out)
{
if (start >= end)
return NULL;
unsigned int* offsPtr = (unsigned int*)((char*)start + 0x1c); // Offset from 'RESET' string to ROMDIR offset
unsigned int* magicPtr = (unsigned int*)(start);
do
{
if (*magicPtr == 0x45534552)
{
out->searchBegin = start;
out->firstEntry = magicPtr;
out->romDirSize = *offsPtr;
return out;
}
offsPtr++;
magicPtr++;
} while (magicPtr < end);
out->searchBegin = NULL;
return NULL;
}
/**
* @brief The actual structure found within the ROM
*/
typedef struct
{
char name[10];
unsigned short ext_info_size;
unsigned int file_size;
} RomEnt;
/**
* @brief This finds a ROMDIR entry with the name `name`
* @param dir Pointer to the ROM directory info structure
* @param name The name of the entry (E.X. IOPBTCONF)
* @param out Output info on the ROM entry
*/
RomDirEnt *FindRomDirEnt(RomDir *dir, char *name, RomDirEnt *out)
{
RomEnt* entry = (RomEnt*)dir->firstEntry;
char fname[12];
for (int i = 0; i < 12; i++)
{
if (*name < '!') break;
fname[i] = *name;
name++;
}
unsigned int fileOffs = 0;
unsigned int infoOffs = 0;
while (entry->name[0])
{
if (*(unsigned int*)&fname[0] == *(unsigned int*)&entry->name[0]
&& *(unsigned int*)&fname[4] == *(unsigned int*)&entry->name[4]
&& fname[8] == entry->name[8]
&& fname[9] == entry->name[9])
{
out->name = entry->name;
out->extInfo = NULL;
out->filePtr = (void*)((char*)dir->searchBegin + fileOffs);
if (entry->ext_info_size)
{
out->extInfo = (void*)((char*)dir->searchBegin + infoOffs);
}
return out;
}
fileOffs += entry->file_size;
infoOffs += entry->ext_info_size;
entry++;
}
return NULL;
}

20
BIOS/iop/romdir.h Normal file
View file

@ -0,0 +1,20 @@
#pragma once
#include <stddef.h>
typedef struct
{
void* searchBegin; // The beginning of the search range (TODO: why does the BIOS save this?)
void* firstEntry;
size_t romDirSize;
} RomDir;
typedef struct
{
char* name;
void* filePtr;
void* extInfo;
} RomDirEnt;
RomDir* SearchForRomDir(void* start, void* end, RomDir* out);
RomDirEnt* FindRomDirEnt(RomDir* dir, char* name, RomDirEnt* out);

102
BIOS/iop/sifman/exports.c Normal file
View file

@ -0,0 +1,102 @@
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <intrman/global.h>
typedef volatile uint32_t vu32;
#define DMA_DPCR (*(vu32*)0xbf8010f0)
#define DMA_DPCR2 (*(vu32*)0xbf801570)
#define DMA_SIF0_CTRL (*(vu32*)0xbf801528)
#define DMA_SIF1_CTRL (*(vu32*)0xbf801538)
#define DMA_SIF1_BCR (*(vu32*)0xbf801534)
#define DMA_SIF2_CTRL (*(vu32*)0xbf8010A8)
#define SIF_SMCOM (*(vu32*)0xbd000010)
#define SIF_MSFLG (*(vu32*)0xbd000020)
#define SIF_SMFLG (*(vu32*)0xbd000030)
#define SIF_CTRL (*(vu32*)0xbd000040)
bool sifCmdInited = false;
bool sif2Inited = false;
void sifInitSif2()
{
if (!sif2Inited)
{
DMA_SIF2_CTRL = 0;
DMA_DPCR |= 0x800;
sif2Inited = true;
}
}
uint32_t transferBufOffs = 0;
uint32_t* transferBufBase;
uint32_t curTransferId;
int HandleInterrupt(void* arg)
{
}
void InitInterrupts()
{
int int_state;
transferBufOffs = 0;
transferBufBase = (uint32_t*)0xf8c; // TODO: This probably gets patched
CpuSuspendIntr(&int_state);
RegisterIntrHandler(0x2a, 1, HandleInterrupt, &curTransferId);
EnableIntr(0x2a);
CpuEnableIntr(int_state);
}
void SetupSIF1()
{
if (!(SIF_CTRL & 0x40))
SIF_CTRL = 0x40;
DMA_SIF1_BCR = 0x20;
// Sets up the mode and stuff, but leaves the channel disabled
DMA_SIF1_CTRL = 0x41000300;
}
void sifCmdInit()
{
if (!sifCmdInited)
{
int int_state;
// This sets SIF0 and SIF1 to max priority
DMA_DPCR2 = DMA_DPCR2 | 0x8800;
DMA_SIF0_CTRL = 0;
DMA_SIF1_CTRL = 0;
// Setup SIF2. Afaik, this is exclusively used for PSX mode
sifInitSif2();
InitInterrupts();
CpuSuspendIntr(&int_state);
CpuEnableIntr();
// Here, we poll MSFLG and check for bit 0x10000, which means the EE DMAC is ready
uint32_t msflg;
while (!(msflg & 0x10000))
{
int nested_int_disable;
CpuSuspendIntr(&nested_int_disable);
msflg = SIF_MSFLG;
CpuResumeIntr(nested_int_disable);
}
CpuResumeIntr(int_state);
SetupSIF1();
// TODO: This might get patched on module load
// Tell the EE where our recv buffer is
SIF_SMCOM = 0;
// Let the EE know that SIF has been initialized
SIF_SMFLG = 0x10000;
sifCmdInited = true;
}
}

3
BIOS/iop/sifman/global.h Normal file
View file

@ -0,0 +1,3 @@
#pragma once
extern void sifCmdInit();

25
BIOS/iop/sifman/sifman.c Normal file
View file

@ -0,0 +1,25 @@
#include <stddef.h>
#include <loadcore/global.h>
#include <sifman/global.h>
ExportTable_t table =
{
.magic = 0x41C00000,
.next = NULL,
.version = 0x101,
.mode = 0,
.name = "sifman",
.exports = {
ExportStub,
ExportStub,
ExportStub,
ExportStub,
sifCmdInit,
}
};
int main(int argc, char** argv)
{
RegisterLibraryEntries(&table);
return 0;
}

64
BIOS/iop/string.h Normal file
View file

@ -0,0 +1,64 @@
#pragma once
#include <stddef.h>
char* strcpy(char* dst, char* src)
{
char c;
char* curDst = dst;
char* curSrc = src;
if (dst && src)
{
c = *curSrc;
while (c)
{
c = *curSrc;
*curDst = c;
curSrc++;
curDst++;
}
return src;
}
return NULL;
}
size_t strlen(char* str)
{
if (!str)
return NULL;
size_t s;
while (*str++)
s++;
return s;
}
int strncmp(char* s1, char* s2, int len)
{
int ret = 0;
if (!s1 || !s2)
{
if (s1 != s2 && (ret = -1, s1 != NULL))
return 1;
}
else
{
while (len)
{
char c2 = *s2;
char c1 = *s1;
if (c1 != c2) break;
s1++;
if (c1 == '\0')
return 0;
len--;
s2++;
}
if (len)
return *s1 - *s2;
ret = 0;
}
return ret;
}

11
BIOS/iop/types.h Normal file
View file

@ -0,0 +1,11 @@
#pragma once
typedef struct
{
unsigned int ram_size;
unsigned int boot_info;
unsigned int cmd_ptr;
unsigned int unk2[3];
unsigned int numModules;
unsigned int structEnd;
} IopBootInfo;

43
BIOS/prime.cpp Normal file
View file

@ -0,0 +1,43 @@
#include <string>
std::string primeCalc(int digits)
{
bool isPrime = false;
std::string ret;
ret.clear();
int x = 0;
while (ret.length() < digits)
{
printf("Checking %d\n", x);
if (x == 0 || x == 1)
{
x++;
continue;
}
isPrime = true;
for (int y = 2; y <= x / 2; y++)
{
if (x % y == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
ret += std::to_string(x);
x++;
}
return ret;
}
int main()
{
std::string s = primeCalc(10005).c_str();
printf("%s\n", s.substr(0, 5).c_str());
return s.size();
}

View file

@ -130,8 +130,12 @@ void System::Run()
{
size_t cycles = Scheduler::GetNextTimestamp();
printf("Running for a max of %ld cycles\n", cycles);
int true_cycles = EmotionEngine::Clock(cycles);
IOP_MANAGEMENT::Clock(true_cycles / 2);
IOP_MANAGEMENT::Clock(true_cycles / 8);
printf("Actual block took %ld cycles\n", true_cycles);
Scheduler::CheckScheduler(true_cycles);
}

View file

@ -52,6 +52,26 @@ void EmitSLL(Opcode op)
printf("sll %s,%s,%d\n", EmotionEngine::Reg(op.r_type.rd), EmotionEngine::Reg(op.r_type.rt), op.r_type.sa);
}
// 0x02
void EmitSRL(Opcode op)
{
IRValue rd(IRValue::Reg);
rd.SetReg(op.r_type.rd);
IRValue rt(IRValue::Reg);
rt.SetReg(op.r_type.rt);
IRValue sa(IRValue::Imm);
sa.SetImm32Unsigned(op.r_type.sa);
IRInstruction instr = IRInstruction::Build({rd, rt, sa}, SHIFT);
instr.is_logical = true;
instr.direction = IRInstruction::Direction::Right;
curBlock->instructions.push_back(instr);
printf("srl %s,%s,%d\n", EmotionEngine::Reg(op.r_type.rd), EmotionEngine::Reg(op.r_type.rt), op.r_type.sa);
}
void EmitJR(Opcode op)
{
IRValue reg(IRValue::Reg);
@ -64,6 +84,7 @@ void EmitJR(Opcode op)
printf("jr %s\n", EmotionEngine::Reg(reg.GetReg()));
}
// 0x09
void EmitJalr(Opcode op)
{
IRValue rd(IRValue::Reg);
@ -78,11 +99,35 @@ void EmitJalr(Opcode op)
printf("jalr %s,%s\n", EmotionEngine::Reg(op.r_type.rd), EmotionEngine::Reg(op.r_type.rs));
}
// 0x0d
void EmitBreak()
{
auto instr = IRInstruction::Build({}, BREAK);
curBlock->instructions.push_back(instr);
printf("break\n");
}
void EmitMFLO(Opcode op)
{
IRValue rd(IRValue::Reg);
rd.SetReg(op.r_type.rd);
IRValue lo(IRValue::Special);
lo.SetReg(LO);
IRInstruction instr = IRInstruction::Build({rd, lo}, MOVE);
instr.is_mmi_divmul = false;
curBlock->instructions.push_back(instr);
printf("mflo %s\n", EmotionEngine::Reg(op.r_type.rd));
}
// 0x18
void EmitMULT(Opcode op)
{
IRValue rd(IRValue::Reg);
rd.SetReg(op.r_type.rt);
rd.SetReg(op.r_type.rd);
IRValue rt(IRValue::Reg);
rt.SetReg(op.r_type.rt);
IRValue rs(IRValue::Reg);
@ -97,6 +142,25 @@ void EmitMULT(Opcode op)
printf("mult %s,%s,%s\n", EmotionEngine::Reg(op.r_type.rd), EmotionEngine::Reg(op.r_type.rs), EmotionEngine::Reg(op.r_type.rt));
}
// 0x1B
void EmitDIVU(Opcode op)
{
IRValue rd(IRValue::Reg);
rd.SetReg(op.r_type.rt);
IRValue rt(IRValue::Reg);
rt.SetReg(op.r_type.rt);
IRValue rs(IRValue::Reg);
rs.SetReg(op.r_type.rs);
auto instr = IRInstruction::Build({rd, rs, rt}, DIV);
instr.is_unsigned = true;
instr.size = IRInstruction::InstrSize::Size32;
instr.is_mmi_divmul = false;
curBlock->instructions.push_back(instr);
printf("divu %s,%s,%s\n", EmotionEngine::Reg(op.r_type.rd), EmotionEngine::Reg(op.r_type.rs), EmotionEngine::Reg(op.r_type.rt));
}
// 0x25
void EmitOR(Opcode op)
{
@ -143,18 +207,30 @@ void EmitSpecial(Opcode op)
case 0x00:
EmitSLL(op);
break;
case 0x02:
EmitSRL(op);
break;
case 0x08:
EmitJR(op);
break;
case 0x09:
EmitJalr(op);
break;
case 0x0d:
EmitBreak();
break;
case 0x0f:
printf("sync\n");
break;
case 0x12:
EmitMFLO(op);
break;
case 0x18:
EmitMULT(op);
break;
case 0x1b:
EmitDIVU(op);
break;
case 0x25:
EmitOR(op);
break;
@ -260,6 +336,25 @@ void EmitSLTI(Opcode op)
printf("slti %s,%s,0x%08lx\n", EmotionEngine::Reg(op.i_type.rt), EmotionEngine::Reg(op.i_type.rs), (int64_t)(int16_t)op.i_type.imm);
}
// 0x0B
void EmitSLTIU(Opcode op)
{
IRValue imm(IRValue::Imm);
imm.SetImm64(op.i_type.imm);
IRValue src(IRValue::Reg);
src.SetReg(op.i_type.rs);
IRValue dst(IRValue::Reg);
dst.SetReg(op.i_type.rt);
auto instr = IRInstruction::Build({dst, src, imm}, IRInstrs::SLT);
instr.is_unsigned = true;
curBlock->instructions.push_back(instr);
printf("sltiu %s,%s,0x%08lx\n", EmotionEngine::Reg(op.i_type.rt), EmotionEngine::Reg(op.i_type.rs), (int64_t)(int16_t)op.i_type.imm);
}
// 0x0C
void EmitANDI(Opcode op)
{
@ -377,6 +472,49 @@ void EmitCOP0(Opcode op)
}
}
// 0x14
void EmitBEQL(Opcode op)
{
IRValue imm(IRValue::Imm);
imm.SetImm32(op.i_type.imm << 2);
IRValue rt(IRValue::Reg);
rt.SetReg(op.i_type.rt);
IRValue rs(IRValue::Reg);
rs.SetReg(op.i_type.rs);
auto instr = IRInstruction::Build({rs, rt, imm}, IRInstrs::BRANCH);
if (op.i_type.rt == 0 && op.i_type.rs == 0)
instr.b_type = IRInstruction::BranchType::AL;
else
instr.b_type = IRInstruction::BranchType::EQ;
instr.is_likely = true;
curBlock->instructions.push_back(instr);
printf("beql %s,%s,pc+%d\n", EmotionEngine::Reg(op.i_type.rs), EmotionEngine::Reg(op.i_type.rt), (int32_t)imm.GetImm());
}
// 0x15
void EmitBNEL(Opcode op)
{
IRValue imm(IRValue::Imm);
imm.SetImm32(op.i_type.imm << 2);
IRValue rt(IRValue::Reg);
rt.SetReg(op.i_type.rt);
IRValue rs(IRValue::Reg);
rs.SetReg(op.i_type.rs);
auto instr = IRInstruction::Build({rs, rt, imm}, IRInstrs::BRANCH);
instr.b_type = IRInstruction::BranchType::NE;
instr.is_likely = true;
curBlock->instructions.push_back(instr);
printf("bnel %s,%s,pc+%d\n", EmotionEngine::Reg(op.i_type.rs), EmotionEngine::Reg(op.i_type.rt), (int32_t)imm.GetImm());
}
// 0x2B
void EmitSW(Opcode op)
{
@ -431,6 +569,8 @@ bool IsBranch(Opcode op)
break;
case 0x03:
case 0x05:
case 0x14:
case 0x15:
return true;
}
@ -502,6 +642,9 @@ int EEJit::Clock(int cycles)
break;
case 0x0A:
EmitSLTI(op);
break;
case 0x0B:
EmitSLTIU(op);
break;
case 0x0C:
EmitANDI(op);
@ -515,6 +658,12 @@ int EEJit::Clock(int cycles)
case 0x10:
EmitCOP0(op);
break;
case 0x14:
EmitBEQL(op);
break;
case 0x15:
EmitBNEL(op);
break;
case 0x2B:
EmitSW(op);
break;
@ -547,6 +696,8 @@ int EEJit::Clock(int cycles)
// Run it
curBlock->entryPoint(EmotionEngine::GetState(), curBlock->addr);
printf("Block returned at pc = 0x%08x\n", EmotionEngine::GetState()->pc);
return curBlock->cycles;
}

View file

@ -18,6 +18,8 @@ enum IRInstrs
AND, // Bitwise AND
SHIFT, // Shift logical, arithmetic, left, right, etc...
MULT, // Multiply
DIV, // Divide
BREAK, // We make this translate to ud2 to prevent BREAK from being executed, as it's purely used for asserts and the like, which we should never hit
};
struct IRValue
@ -29,7 +31,8 @@ public:
Reg,
Cop0Reg,
Cop1Reg,
Float
Float,
Special // Used for LO, HI, LO1, HI1
};
private:
union
@ -50,6 +53,7 @@ public:
bool IsCop1() {return type == Cop1Reg;}
bool IsReg() {return type == Reg;}
bool IsFloat() {return type == Float;}
bool IsSpecial() {return type == Special;}
// Can be used for guest, COP0, and COP1 registers
void SetReg(uint32_t reg) {value.register_num = reg;}
void SetImm(uint16_t imm) {value.imm = (int32_t)(int16_t)imm;}

View file

@ -40,71 +40,6 @@ int Clock(int cycles)
#endif
}
bool IsBranch(uint32_t instr)
{
uint8_t opcode = (instr >> 26) & 0x3F;
switch (opcode)
{
case 0x00:
{
opcode = instr & 0x3F;
switch (opcode)
{
case 0x08:
case 0x09:
case 0x0C:
return true;
default:
return false;
}
break;
}
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
case 0x14:
case 0x15:
return true;
case 0x10:
opcode = (instr >> 21) & 0x3F;
switch (opcode)
{
case 0x10:
{
opcode = instr & 0x3F;
switch (opcode)
{
case 0x18:
return true;
default:
return false;
}
}
default:
return false;
}
break;
case 0x11:
opcode = (instr >> 21) & 0x1F;
switch (opcode)
{
case 0x8:
return true;
}
break;
default:
return false;
}
return false;
}
#define BLOCKCACHE_ENABLE
void Dump()
{
for (int i = 0; i < 32; i++)
@ -300,12 +235,29 @@ void ClearIp1Pending()
EmotionEngine::GetState()->cop0_regs[13] = cause.value;
}
void CheckForInterrupt()
{
}
void SetIp0Pending()
{
COP0CAUSE cause;
cause.value = EmotionEngine::GetState()->cop0_regs[13];
cause.ip0_pending = true;
EmotionEngine::GetState()->cop0_regs[13] = cause.value;
// We try and do an exception here
COP0Status status;
status.value = EmotionEngine::GetState()->cop0_regs[12];
bool int_enabled = status.eie && status.ie && !status.erl && !status.exl;
bool pending = (cause.ip0_pending && status.im0)
|| (cause.ip1_pending && status.im1);
if (int_enabled && pending)
{
Exception(0x00);
}
}
} // namespace EmotionEngine

View file

@ -43,21 +43,17 @@ int Clock(int cycles);
void Dump();
ProcessorState* GetState();
void MarkDirty(uint32_t address, uint32_t size);
void EmitPrequel();
void Exception(uint8_t code);
void SetIp1Pending(); // Set IP1 to pending, signalling a DMA interrupt
void ClearIp1Pending(); // Clear a DMA interrupt
void SetIp0Pending();
void CheckForInterrupt();
extern bool can_dump;
void CheckCacheFull();
bool DoesBlockExit(uint32_t addr);
void EmitIR(uint32_t instr);
bool IsBranch(uint32_t instr);
uint64_t GetExistingBlockCycles(uint32_t addr);
inline const char* Reg(int index)
{

View file

@ -10,6 +10,9 @@
#include <cerrno>
#include <cstring>
#include <fstream>
#include <unordered_map>
std::unordered_map<uint32_t, Block*> blockMap;
Xbyak::CodeGenerator* generator;
uint8_t* base;
@ -117,6 +120,20 @@ void JitMov(IRInstruction& i)
MOV(dst, i.args[1].GetImm64());
}
}
else if (i.args[0].IsReg() && i.args[1].IsSpecial())
{
if (i.args[0].GetReg() == 0)
{
printf("WARNING: Mov imm -> $zero\n");
return;
}
else
{
auto dst = Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)(i.args[0].GetReg()), true));
auto src = Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)(i.args[1].GetReg())));
MOV(dst, src);
}
}
else
{
printf("[EEJIT_X64]: Unknown src/dst combo for move\n");
@ -129,31 +146,29 @@ void JitSlt(IRInstruction& i)
// Args[0] = dst, Args[1] = op1, Args[2] = op2
if (i.args[2].IsImm())
{
if (i.is_unsigned)
auto dst = Xbyak::Reg8(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true));
if (i.args[1].GetReg() == 0)
{
printf("TODO: SLTIU\n");
exit(1);
int32_t imm = i.args[2].GetImm();
MOV(generator->rdi, 0);
generator->cmp(generator->rdi, imm);
if (i.is_unsigned)
generator->seta(dst);
else
generator->setl(dst);
generator->movzx(Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true)), dst);
}
else
{
auto dst = Xbyak::Reg8(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true));
if (i.args[1].GetReg() == 0)
{
int32_t imm = i.args[2].GetImm();
MOV(generator->rdi, 0);
generator->cmp(generator->rdi, imm);
generator->setl(dst);
generator->movzx(Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true)), dst);
}
else
{
auto src = Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[1].GetReg()));
int32_t imm = i.args[2].GetImm();
auto src = Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[1].GetReg()));
int32_t imm = i.args[2].GetImm();
generator->cmp(src, imm);
generator->setl(dst);
generator->movzx(Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true)), dst);
}
generator->cmp(src, imm);
if (i.is_unsigned)
generator->seta(dst);
else
generator->setl(dst);
generator->movzx(Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true)), dst);
}
}
else
@ -169,7 +184,7 @@ void JitBranch(IRInstruction& i)
Xbyak::Label cond_failed;
switch (i.b_type)
switch (i.b_type)
{
case IRInstruction::BranchType::EQ:
{
@ -181,8 +196,7 @@ void JitBranch(IRInstruction& i)
else if (i.args[0].GetReg() == 0)
{
auto op2 = Xbyak::Reg64(reg_alloc.GetHostReg((GuestRegister)i.args[1].GetReg()));
MOV(generator->rdi, 0);
generator->cmp(generator->rdi, i.args[1].GetImm());
generator->cmp(op2, 0);
generator->jne(cond_failed);
}
else
@ -228,6 +242,11 @@ void JitBranch(IRInstruction& i)
generator->jmp(done);
generator->L(cond_failed);
ADD(generator->r8, 4);
if (i.is_likely)
{
ADD(generator->r8, 4);
JitEpilogue();
}
generator->L(done);
}
@ -443,6 +462,15 @@ void JitShift(IRInstruction i)
generator->shl(src, generator->cl);
generator->mov(dst, src);
}
else if (i.args[2].IsImm() && i.is_logical && i.direction == IRInstruction::Direction::Right)
{
auto src = Xbyak::Reg32(reg_alloc.GetHostReg((GuestRegister)i.args[1].GetReg()));
auto dst = Xbyak::Reg32(reg_alloc.GetHostReg((GuestRegister)i.args[0].GetReg(), true));
MOV(generator->cl, i.args[2].GetImm());
generator->shr(src, generator->cl);
generator->mov(dst, src);
}
else
{
printf("Invalid shift combo %d/%d/%d\n", i.args[2].type, i.is_logical, i.direction);
@ -464,6 +492,7 @@ void JitMULT(IRInstruction i)
if (i.is_unsigned)
{
generator->xor_(generator->rdx, generator->rdx);
generator->movsxd(generator->rax, src);
generator->mul(src2);
generator->movsxd(lo, generator->eax);
@ -482,6 +511,33 @@ void JitMULT(IRInstruction i)
}
}
void JitDIV(IRInstruction i)
{
GuestRegister lo_reg = i.is_mmi_divmul ? GuestRegister::LO1 : GuestRegister::LO;
GuestRegister hi_reg = i.is_mmi_divmul ? GuestRegister::HI1 : GuestRegister::HI;
auto src = Xbyak::Reg32(reg_alloc.GetHostReg((GuestRegister)i.args[1].GetReg()));
auto src2 = Xbyak::Reg32(reg_alloc.GetHostReg((GuestRegister)i.args[2].GetReg()));
auto lo = Xbyak::Reg64(reg_alloc.GetHostReg(lo_reg));
auto hi = Xbyak::Reg64(reg_alloc.GetHostReg(hi_reg));
reg_alloc.InvalidateRegister(HostRegisters::RDX);
if (i.is_unsigned)
{
generator->xor_(generator->rdx, generator->rdx);
MOV(generator->rax, src);
generator->div(src2);
MOV(lo, generator->rax);
MOV(hi, generator->rdx);
}
else
{
printf("TODO: DIV");
assert(0);
}
}
void JitIncPC()
{
ADD(generator->r8, 4);
@ -542,8 +598,14 @@ void EEJitX64::TranslateBlock(Block *block)
case MULT:
JitMULT(i);
break;
case DIV:
JitDIV(i);
break;
case BREAK:
generator->ud2();
break;
default:
printf("[EEJIT_X64]: Cannot emit unknown IR instruction 0x%02x\n", i.instr);
printf("[EEJIT_X64]: Cannot emit unknown IR instruction %d\n", i.instr);
exit(1);
}
@ -554,17 +616,19 @@ void EEJitX64::TranslateBlock(Block *block)
void EEJitX64::CacheBlock(Block *block)
{
// TODO: Actually cache the block
blockMap[block->addr] = block;
if ((generator->getCurr() - generator->getCode()) >= (128*1024*1024))
{
delete[] generator;
generator = new Xbyak::CodeGenerator(0xffffffff, (void*)base);
blockMap.clear();
}
}
Block *EEJitX64::GetBlockForAddr(uint32_t addr)
{
return nullptr;
return blockMap[addr];
}
void EEJitX64::Initialize()

View file

@ -42,8 +42,6 @@ void CheckScheduler(uint64_t cycles)
{
global_cycles += cycles;
IOP_MANAGEMENT::Clock(cycles / 4);
if (!next_tp && !event_queue.empty())
{
next_tp = event_queue.front().cycles_from_now;

1
util/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.bios

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

601
util/dump Normal file
View file

@ -0,0 +1,601 @@
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000020 00 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 |..ELF...........|
00000030 00 80 ff 08 00 01 00 00 00 00 00 00 00 34 00 00 |.............4..|
00000040 00 6c 1d 00 00 01 00 00 00 34 00 20 00 02 00 28 |.l.......4. ...(|
00000050 00 0c 00 09 00 80 00 00 70 74 00 00 00 00 00 00 |........pt......|
00000060 00 00 00 00 00 29 00 00 00 00 00 00 00 04 00 00 |.....)..........|
00000070 00 04 00 00 00 01 00 00 00 a0 00 00 00 00 00 00 |................|
00000080 00 00 00 00 00 70 1c 00 00 d4 1c 00 00 07 00 00 |.....p..........|
00000090 00 10 00 00 00 60 1c 00 00 00 00 00 00 60 9c 00 |.....`.......`..|
000000a0 00 30 1c 00 00 40 00 00 00 64 00 00 00 01 01 4d |.0...@...d.....M|
000000b0 6f 64 75 6c 65 5f 4d 61 6e 61 67 65 72 00 00 00 |odule_Manager...|
000000c0 00 00 60 80 40 00 00 82 8c 00 00 00 00 00 ed 02 |..`.@...........|
000000d0 00 c0 ff bd 27 21 f0 a0 03 01 00 1c 3c 0c 00 00 |....'!......<...|
000000e0 08 60 9c 9c 27 00 00 00 00 00 00 00 00 00 00 00 |.`..'...........|
000000f0 00 80 ff bd 27 78 00 bf af 74 00 be af 70 00 b4 |....'x...t...p..|
00000100 af 6c 00 b3 af 68 00 b2 af 64 00 b1 af 60 00 b0 |.l...h...d...`..|
00000110 af 00 00 82 8c 21 f0 a0 03 38 00 c2 af 04 00 82 |.....!...8......|
00000120 8c 00 00 00 00 3c 00 c2 af 08 00 82 8c 00 00 00 |.....<..........|
00000130 00 40 00 c2 af 0c 00 85 8c 00 00 00 00 44 00 c5 |.@...........D..|
00000140 af 10 00 82 8c 00 00 00 00 48 00 c2 af 14 00 82 |.........H......|
00000150 8c 00 00 00 00 4c 00 c2 af 18 00 82 8c 00 00 00 |.....L..........|
00000160 00 50 00 c2 af 1c 00 86 8c 00 00 03 3c 74 1c 63 |.P..........<t.c|
00000170 24 58 00 c0 af fc ff 65 ac 00 00 04 3c 70 1c 84 |$X.....e....<p..|
00000180 8c 00 00 02 3c 90 1c 42 24 f0 03 02 ac f4 03 02 |....<..B$.......|
00000190 ac 02 00 02 24 00 00 65 ac 54 00 c6 af 00 00 80 |....$..e.T......|
000001a0 ac 10 00 62 ac 03 00 02 24 04 00 60 ac 08 00 60 |...b....$..`...`|
000001b0 ac 14 00 62 ac 58 00 c2 8f 00 00 00 00 80 18 02 |...b.X..........|
000001c0 00 01 00 42 24 58 00 c2 af 11 00 42 28 00 00 01 |...B$X.....B(...|
000001d0 3c 21 08 23 00 90 1c 20 ac f6 ff 40 14 58 00 c4 |<!.#... ...@.X..|
000001e0 27 3c 00 c2 97 04 00 03 3c 25 10 43 00 79 01 00 |'<......<%.C.y..|
000001f0 0c 58 00 c2 af 00 00 03 3c 80 1c 63 24 00 00 10 |.X......<..c$...|
00000200 3c d0 ff 10 26 f4 ff 62 8c 30 00 04 26 d0 ff 42 |<...&..b.0..&..B|
00000210 24 00 00 62 ac 00 00 03 3c 80 1c 63 8c 01 00 02 |$..b....<..c....|
00000220 24 0c 00 62 a4 00 00 02 3c 80 1c 42 8c 00 00 05 |$..b....<..B....|
00000230 3c 30 1c a5 24 00 00 50 ac 00 00 02 3c 80 1c 42 |<0..$..P....<..B|
00000240 8c 23 28 a4 00 00 00 43 8c 02 00 02 24 00 03 00 |.#(....C....$...|
00000250 0c 0c 00 62 a4 00 00 04 3c 60 1b 84 24 26 02 00 |...b....<`..$&..|
00000260 0c 03 82 10 00 ff 1f 06 3c ff ff c6 34 02 00 04 |........<...4...|
00000270 24 00 82 10 00 00 00 05 3c d4 1c a5 24 23 28 b0 |$.......<...$#(.|
00000280 00 01 07 00 0c 24 30 06 02 48 00 c6 8f 00 00 00 |.....$0..H......|
00000290 00 05 00 c0 10 00 00 00 00 4c 00 c5 8f 01 07 00 |.........L......|
000002a0 0c 02 00 04 24 48 00 c2 af f0 ff bd 27 10 f2 b0 |....$H......'...|
000002b0 27 ff 1f 02 3c 00 ff 42 34 24 80 02 02 21 20 00 |'...<..B4$...! .|
000002c0 02 10 00 a5 27 11 11 06 3c 66 04 00 0c 11 11 c6 |....'...<f......|
000002d0 34 05 07 00 0c 00 00 00 00 2b 10 02 02 07 00 40 |4........+.....@|
000002e0 10 00 00 00 00 05 07 00 0c 00 00 00 00 02 00 04 |................|
000002f0 24 23 28 50 00 01 07 00 0c 21 30 00 02 40 00 c4 |$#(P.....!0..@..|
00000300 8f 00 00 00 00 13 00 80 10 00 00 00 00 6d 04 00 |.............m..|
00000310 0c 00 00 00 00 10 00 43 24 c2 18 03 00 c0 18 03 |.......C$.......|
00000320 00 23 e8 a3 03 18 00 b1 27 21 20 20 02 01 00 46 |.#......'! ...F|
00000330 24 40 00 c5 8f 78 04 00 0c 10 00 b0 27 21 20 00 |$@...x......'! .|
00000340 02 05 01 02 3c 40 00 d1 af 10 00 a2 af 79 01 00 |....<@.......y..|
00000350 0c 04 00 91 ac 50 00 c6 8f 54 00 c5 8f 01 00 c6 |.....P...T......|
00000360 24 80 30 06 00 07 00 c2 24 c2 10 02 00 c0 10 02 |$.0.....$.......|
00000370 00 23 e8 a2 03 10 00 b0 27 78 04 00 0c 21 20 00 |.#......'x...! .|
00000380 02 50 00 c2 8f 21 88 00 00 54 00 d0 af c0 10 02 |.P...!...T......|
00000390 00 23 e8 a2 03 10 00 b2 27 ff ff 02 24 00 00 01 |.#......'...$...|
000003a0 3c 8c 1c 32 ac 10 00 a0 af 58 00 c2 af 08 00 02 |<..2.....X......|
000003b0 8e 00 00 00 00 78 00 40 10 08 00 10 26 01 00 13 |.....x.@....&...|
000003c0 24 00 00 03 8e 00 00 00 00 01 00 62 30 06 00 40 |$..........b0..@|
000003d0 10 0f 00 62 30 02 00 53 14 00 00 00 00 82 88 03 |...b0..S........|
000003e0 00 32 01 00 08 04 00 10 26 58 00 c2 8f 00 00 00 |.2......&X......|
000003f0 00 01 00 42 24 0f 00 42 30 58 00 c2 af 00 00 04 |...B$..B0X......|
00000400 8e 98 04 00 0c 10 00 c5 27 21 18 40 00 02 00 02 |........'!.@....|
00000410 24 1d 00 62 10 03 00 62 28 05 00 40 10 03 00 02 |$..b...b(..@....|
00000420 24 09 00 73 10 00 80 03 3c 74 01 00 08 02 00 02 |$..s....<t......|
00000430 24 05 00 62 10 04 00 02 24 13 00 62 10 00 80 03 |$..b....$..b....|
00000440 3c 74 01 00 08 02 00 02 24 ff 1f 03 3c ff ff 63 |<t......$...<..c|
00000450 34 02 00 04 24 1c 00 c2 8f 2c 00 c5 8f d0 ff 46 |4...$....,.....F|
00000460 24 02 32 06 00 00 32 06 00 24 30 c3 00 21 28 a2 |$.2...2..$0..!(.|
00000470 00 01 07 00 0c 23 28 a6 00 84 00 40 10 00 80 03 |.....#(....@....|
00000480 3c 02 01 00 08 00 00 00 00 05 00 20 16 02 00 04 |<.......... ....|
00000490 24 21 20 00 00 2c 00 c5 8f fa 00 00 08 21 30 80 |$! ..,.......!0.|
000004a0 00 2c 00 c5 8f 21 30 20 02 01 07 00 0c 30 00 a5 |.,...!0 .....0..|
000004b0 24 1c 00 c2 af 1c 00 c2 8f 00 00 00 00 72 00 40 |$............r.@|
000004c0 10 30 00 42 24 1c 00 c2 af 00 00 04 8e 14 05 00 |.0.B$...........|
000004d0 0c 10 00 c5 27 1c 00 c4 8f 20 00 c5 8f 00 03 00 |....'.... ......|
000004e0 0c 00 00 00 00 15 00 40 14 00 00 00 00 44 06 00 |.......@.....D..|
000004f0 0c 00 00 00 00 18 00 c8 8f 00 00 00 00 21 e0 00 |.............!..|
00000500 01 21 20 00 00 21 28 80 00 21 30 00 02 14 00 c2 |.! ..!(..!0.....|
00000510 8f 00 00 00 00 09 f8 40 00 21 38 80 00 21 88 40 |.......@.!8..!.@|
00000520 00 03 00 22 32 0d 00 40 10 00 00 00 00 1c 00 c4 |..."2..@........|
00000530 8f 20 00 c5 8f 2f 03 00 0c 00 00 00 00 1c 00 c4 |. .../..........|
00000540 8f 00 00 00 00 d0 ff 84 24 02 22 04 00 03 07 00 |........$.".....|
00000550 0c 00 22 04 00 31 01 00 08 04 00 10 26 1c 00 c4 |.."..1......&...|
00000560 8f d0 01 00 0c d0 ff 84 24 fc ff 02 24 24 20 22 |........$...$$ "|
00000570 02 03 00 80 10 02 00 05 24 a7 01 00 0c 21 30 00 |........$....!0.|
00000580 00 04 00 10 26 21 88 00 00 00 00 02 8e 00 00 00 |....&!..........|
00000590 00 8b ff 40 14 00 00 00 00 48 00 c4 8f 00 00 00 |...@.....H......|
000005a0 00 03 00 80 10 00 00 00 00 03 07 00 0c 00 00 00 |................|
000005b0 00 58 00 c0 af 03 00 13 24 fc ff 14 24 58 00 c2 |.X......$...$X..|
000005c0 8f 00 00 00 00 03 00 53 14 00 00 00 00 00 00 01 |.......S........|
000005d0 3c 8c 1c 20 ac 00 00 42 8e 00 00 00 00 15 00 40 |<.. ...B.......@|
000005e0 10 21 80 40 02 08 00 51 26 00 00 06 8e 58 00 c2 |.!.@...Q&....X..|
000005f0 8f 03 00 c3 30 0a 00 62 14 00 00 00 00 fc ff 28 |....0..b.......(|
00000600 8e 00 00 00 00 21 e0 00 01 02 00 73 14 21 20 40 |.....!.....s.! @|
00000610 02 21 20 20 02 24 10 d4 00 09 f8 40 00 01 00 05 |.! .$.....@....|
00000620 24 08 00 10 26 00 00 02 8e 00 00 00 00 ee ff 40 |$...&..........@|
00000630 14 08 00 31 26 58 00 c3 8f 02 00 02 24 0b 00 62 |...1&X......$..b|
00000640 14 2b 10 50 02 09 00 40 10 00 00 00 00 f8 ff 10 |.+.P...@........|
00000650 26 00 00 02 8e 00 00 00 00 03 00 42 30 03 00 53 |&..........B0..S|
00000660 10 2b 10 50 02 f9 ff 40 14 00 00 00 ae 58 00 c2 |.+.P...@.....X..|
00000670 8f 00 00 00 00 01 00 42 24 58 00 c2 af 04 00 42 |.......B$X.....B|
00000680 28 ce ff 40 14 00 00 00 00 00 80 03 3c 02 00 02 |(..@........<...|
00000690 24 00 00 62 a0 74 01 00 08 00 00 00 00 08 00 e0 |$..b.t..........|
000006a0 03 00 00 00 00 03 00 82 90 f4 03 05 8c 01 00 46 |...............F|
000006b0 24 80 18 06 00 21 18 a3 00 00 00 02 3c d0 1c 42 |$....!......<..B|
000006c0 24 2b 10 43 00 0c 00 40 14 00 00 00 00 08 00 c0 |$+.C...@........|
000006d0 10 21 18 00 00 00 00 82 8c 04 00 84 24 01 00 63 |.!..........$..c|
000006e0 24 00 00 a2 ac 2a 10 66 00 fa ff 40 14 04 00 a5 |$....*.f...@....|
000006f0 24 00 00 a0 ac f4 03 05 ac 08 00 e0 03 00 00 00 |$...............|
00000700 00 f0 03 03 8c 00 00 00 00 00 00 62 8c 00 00 00 |...........b....|
00000710 00 0e 00 40 10 00 00 00 00 02 00 62 90 00 00 00 |...@.......b....|
00000720 00 0c 00 82 10 21 10 60 00 03 00 62 90 00 00 00 |.....!.`...b....|
00000730 00 80 10 02 00 04 00 42 24 21 18 62 00 00 00 62 |.......B$!.b...b|
00000740 8c 00 00 00 00 f4 ff 40 14 00 00 00 00 08 00 e0 |.......@........|
00000750 03 21 10 00 00 08 00 e0 03 00 00 00 00 e0 ff bd |.!..............|
00000760 27 21 38 80 00 18 00 b0 af 21 80 c0 00 00 00 06 |'!8......!......|
00000770 3c 8c 1c c6 24 1c 00 bf af 00 00 c3 8c 01 00 02 |<...$...........|
00000780 24 09 00 60 14 10 00 a2 af 10 00 a4 27 09 f8 e0 |$..`........'...|
00000790 00 21 28 00 00 02 00 00 12 00 00 00 00 00 00 02 |.!(.............|
000007a0 ae cc 01 00 08 21 10 00 00 21 20 80 03 03 00 a2 |.....!...! .....|
000007b0 30 00 00 03 3c 8c 1c 63 8c 21 10 e2 00 00 00 62 |0...<..c.!.....b|
000007c0 ac 00 00 02 3c 8c 1c 42 8c 00 00 00 00 04 00 44 |....<..B.......D|
000007d0 ac 00 00 02 3c 8c 1c 42 8c 00 00 00 00 08 00 40 |....<..B.......@|
000007e0 ac 00 00 c3 8c 01 00 02 24 08 00 63 24 00 00 c3 |........$..c$...|
000007f0 ac 1c 00 bf 8f 18 00 b0 8f 08 00 e0 03 20 00 bd |............. ..|
00000800 27 21 28 80 00 00 00 04 3c 80 1c 84 24 00 00 82 |'!(.....<...$...|
00000810 8c 00 00 00 00 0c 00 40 10 00 00 00 00 00 00 83 |.......@........|
00000820 8c 00 00 00 00 2b 10 65 00 05 00 40 10 00 00 00 |.....+.e...@....|
00000830 00 00 00 62 8c 00 00 00 00 f8 ff 40 14 21 20 60 |...b.......@.! `|
00000840 00 00 00 82 8c 00 00 00 00 00 00 a2 ac 00 00 85 |................|
00000850 ac 00 00 04 3c 88 1c 84 24 00 00 82 8c 00 00 00 |....<...$.......|
00000860 00 0c 00 a2 a4 fc ff 83 8c 01 00 42 24 00 00 82 |...........B$...|
00000870 ac 01 00 63 24 08 00 e0 03 fc ff 83 ac 18 00 80 |...c$...........|
00000880 10 00 00 00 00 00 00 03 3c 80 1c 63 24 00 00 62 |........<..c$..b|
00000890 8c 00 00 00 00 12 00 40 10 04 00 65 24 00 00 62 |.......@...e$..b|
000008a0 8c 00 00 00 00 09 00 44 14 00 00 00 00 00 00 42 |.......D.......B|
000008b0 8c 00 00 00 00 00 00 62 ac 00 00 a2 8c 00 00 00 |.......b........|
000008c0 00 ff ff 42 24 08 00 e0 03 00 00 a2 ac 21 18 40 |...B$........!.@|
000008d0 00 00 00 62 8c 00 00 00 00 f2 ff 40 14 00 00 00 |...b.......@....|
000008e0 00 08 00 e0 03 00 00 00 00 00 00 05 3c 80 1c a5 |............<...|
000008f0 8c 00 00 00 00 14 00 a0 10 21 30 80 00 18 00 a3 |.........!0.....|
00000900 8c 00 00 00 00 2b 10 c3 00 0b 00 40 14 00 00 00 |.....+.....@....|
00000910 00 1c 00 a2 8c 00 00 00 00 21 10 62 00 20 00 a3 |.........!.b. ..|
00000920 8c 24 00 a4 8c 21 10 43 00 21 10 44 00 2b 10 c2 |.$...!.C.!.D.+..|
00000930 00 07 00 40 14 21 10 a0 00 00 00 a5 8c 00 00 00 |...@.!..........|
00000940 00 ee ff a0 14 00 00 00 00 08 00 e0 03 21 10 00 |.............!..|
00000950 00 08 00 e0 03 00 00 00 00 d8 ff bd 27 20 00 b4 |............' ..|
00000960 af 21 a0 80 00 24 00 bf af 1c 00 b3 af 18 00 b2 |.!...$..........|
00000970 af 14 00 b1 af 05 00 80 12 10 00 b0 af 00 00 83 |................|
00000980 8e c0 41 02 3c 03 00 62 10 00 00 00 00 8e 02 00 |..A.<..b........|
00000990 08 ff ff 02 24 00 00 12 3c 70 1c 52 8e 00 00 00 |....$...<p.R....|
000009a0 00 23 00 40 12 21 98 00 00 21 20 80 02 8f 03 00 |.#.@.!...! .....|
000009b0 0c 21 28 40 02 1a 00 40 10 21 20 80 02 9b 03 00 |.!(@...@.! .....|
000009c0 0c 21 28 40 02 16 00 40 14 21 20 80 02 a1 03 00 |.!(@...@.! .....|
000009d0 0c 21 28 40 02 ed ff 40 18 04 00 43 26 04 00 50 |.!(@...@...C&..P|
000009e0 8e 00 00 00 00 0e 00 00 12 04 00 40 ae 0a 00 02 |...........@....|
000009f0 96 04 00 11 8e 01 00 42 30 04 00 40 14 00 00 00 |.......B0..@....|
00000a00 00 04 00 13 ae 56 02 00 08 21 98 00 02 00 00 70 |.....V...!.....p|
00000a10 ac 04 00 03 26 04 00 00 ae f4 ff 20 16 21 80 20 |....&...... .!. |
00000a20 02 00 00 52 8e 00 00 00 00 e0 ff 40 16 21 20 80 |...R.......@.! .|
00000a30 02 00 00 10 3c 78 1c 10 26 04 00 02 8e 00 00 00 |....<x..&.......|
00000a40 00 15 00 40 10 00 00 00 00 04 00 05 8e a5 03 00 |...@............|
00000a50 0c 21 20 80 02 0d 00 40 10 00 00 00 00 04 00 05 |.! ....@........|
00000a60 8e b1 03 00 0c 21 20 80 02 08 00 40 14 00 00 00 |.....! ....@....|
00000a70 00 04 00 02 8e 00 00 00 00 04 00 51 8c 04 00 53 |...........Q...S|
00000a80 ac 04 00 13 8e 5e 02 00 08 04 00 11 ae 04 00 10 |.....^..........|
00000a90 8e 5e 02 00 08 00 00 00 00 0c 00 60 12 04 00 80 |.^.........`....|
00000aa0 ae 21 20 60 02 04 00 71 8e 19 04 00 0c 21 28 80 |.! `...q.....!(.|
00000ab0 02 04 00 82 8e 00 00 00 00 04 00 62 ae 04 00 93 |...........b....|
00000ac0 ae 21 98 20 02 f7 ff 60 16 21 20 60 02 0a 00 82 |.!. ...`.! `....|
00000ad0 96 00 00 03 3c 70 1c 63 24 fe ff 42 30 0a 00 82 |....<p.c$..B0...|
00000ae0 a6 00 00 62 8c 00 00 00 00 00 00 82 ae 44 06 00 |...b.........D..|
00000af0 0c 00 00 74 ac 21 10 00 00 24 00 bf 8f 20 00 b4 |...t.!...$... ..|
00000b00 8f 1c 00 b3 8f 18 00 b2 8f 14 00 b1 8f 10 00 b0 |................|
00000b10 8f 08 00 e0 03 28 00 bd 27 e8 ff bd 27 05 00 80 |.....(..'...'...|
00000b20 10 10 00 bf af 00 00 83 8c c0 41 02 3c 03 00 62 |..........A.<..b|
00000b30 10 00 00 00 00 aa 02 00 08 ff ff 02 24 0a 00 82 |............$...|
00000b40 94 00 00 03 3c 70 1c 63 24 01 00 42 34 0a 00 82 |....<p.c$..B4...|
00000b50 a4 00 00 62 8c 00 00 00 00 00 00 82 ac 44 06 00 |...b.........D..|
00000b60 0c 00 00 64 ac 21 10 00 00 10 00 bf 8f 00 00 00 |...d.!..........|
00000b70 00 08 00 e0 03 18 00 bd 27 e0 ff bd 27 00 00 03 |........'...'...|
00000b80 3c 70 1c 63 24 1c 00 bf af 18 00 b2 af 14 00 b1 |<p.c$...........|
00000b90 af 10 00 b0 af 00 00 62 8c 00 00 00 00 08 00 40 |.......b.......@|
00000ba0 10 00 00 00 00 08 00 44 10 00 00 00 00 21 18 40 |.......D.....!.@|
00000bb0 00 00 00 62 8c 00 00 00 00 fa ff 40 14 00 00 00 |...b.......@....|
00000bc0 00 1e 00 44 14 ff ff 02 24 04 00 90 8c 00 00 82 |...D....$.......|
00000bd0 8c 04 00 80 ac 00 00 62 ac c0 41 02 3c 16 00 00 |.......b..A.<...|
00000be0 12 00 00 82 ac 00 00 12 3c 7c 1c 52 26 04 00 11 |........<|.R&...|
00000bf0 8e f1 03 00 0c 21 20 00 02 0c 00 40 10 00 00 00 |.....! ....@....|
00000c00 00 b7 03 00 0c 21 20 00 02 0a 00 02 96 00 00 00 |.....! .........|
00000c10 00 fd ff 42 30 04 00 42 34 0a 00 02 a6 00 00 42 |...B0..B4......B|
00000c20 8e 00 00 00 00 04 00 02 ae 00 00 50 ae 21 80 20 |...........P.!. |
00000c30 02 ee ff 00 16 00 00 00 00 21 10 00 00 1c 00 bf |.........!......|
00000c40 8f 18 00 b2 8f 14 00 b1 8f 10 00 b0 8f 08 00 e0 |................|
00000c50 03 20 00 bd 27 e0 ff bd 27 10 00 b0 af 00 00 10 |. ..'...'.......|
00000c60 3c 70 1c 10 8e 14 00 b1 af 21 88 80 00 0e 00 00 |<p.......!......|
00000c70 12 18 00 bf af 21 20 00 02 a5 03 00 0c 21 28 20 |.....! ......!( |
00000c80 02 05 00 40 10 21 20 00 02 b1 03 00 0c 21 28 20 |...@.! ......!( |
00000c90 02 06 00 40 10 14 00 02 26 00 00 10 8e 00 00 00 |...@....&.......|
00000ca0 00 f5 ff 00 16 21 20 00 02 21 10 00 00 18 00 bf |.....! ..!......|
00000cb0 8f 14 00 b1 8f 10 00 b0 8f 08 00 e0 03 20 00 bd |............. ..|
00000cc0 27 d8 ff bd 27 18 00 b2 af 21 90 80 00 1c 00 b3 |'...'....!......|
00000cd0 af 21 98 a0 00 14 00 b1 af 82 88 13 00 10 00 b0 |.!..............|
00000ce0 af 21 80 40 02 24 00 bf af 1b 00 20 1a 20 00 b4 |.!.@.$..... . ..|
00000cf0 af e0 41 14 3c 00 00 02 8e 00 00 00 00 13 00 54 |..A.<..........T|
00000d00 14 00 00 00 00 cb 03 00 0c 21 20 00 02 0f 00 40 |.........! ....@|
00000d10 10 00 00 00 00 0a 00 02 96 00 00 00 00 07 00 42 |...............B|
00000d20 30 0a 00 40 14 00 00 00 00 f1 03 00 0c 21 20 00 |0..@.........! .|
00000d30 02 07 00 40 10 ff ff 31 26 21 20 40 02 2f 03 00 |...@...1&! @./..|
00000d40 0c 21 28 60 02 27 03 00 08 ff ff 02 24 ff ff 31 |.!(`.'......$..1|
00000d50 26 e8 ff 20 1e 04 00 10 26 21 10 00 00 24 00 bf |&.. ....&!...$..|
00000d60 8f 20 00 b4 8f 1c 00 b3 8f 18 00 b2 8f 14 00 b1 |. ..............|
00000d70 8f 10 00 b0 8f 08 00 e0 03 28 00 bd 27 d8 ff bd |.........(..'...|
00000d80 27 1c 00 b3 af 21 98 80 00 82 28 05 00 14 00 b1 |'....!....(.....|
00000d90 af 00 00 11 3c 70 1c 31 8e 80 28 05 00 18 00 b2 |....<p.1..(.....|
00000da0 af 21 90 65 02 20 00 bf af 22 00 20 12 10 00 b0 |.!.e. ...". ....|
00000db0 af 04 00 30 8e 00 00 00 00 14 00 00 12 2b 10 33 |...0.........+.3|
00000dc0 02 2b 10 13 02 0c 00 40 14 2b 10 12 02 0a 00 40 |.+.....@.+.....@|
00000dd0 10 21 20 20 02 4b 04 00 0c 21 28 00 02 32 00 40 |.! .K...!(..2.@|
00000de0 14 ff ff 02 24 0a 00 02 96 21 20 00 02 f8 ff 42 |....$....! ....B|
00000df0 30 b7 03 00 0c 0a 00 02 a6 04 00 10 8e 00 00 00 |0...............|
00000e00 00 f0 ff 00 16 2b 10 13 02 2b 10 33 02 05 00 40 |.....+...+.3...@|
00000e10 14 2b 10 32 02 03 00 40 10 00 00 00 00 ae 02 00 |.+.2...@........|
00000e20 0c 21 20 20 02 00 00 31 8e 00 00 00 00 e0 ff 20 |.! ...1....... |
00000e30 16 00 00 00 00 00 00 10 3c 78 1c 10 26 04 00 02 |........<x..&...|
00000e40 8e 00 00 00 00 18 00 40 10 21 10 00 00 04 00 03 |.......@.!......|
00000e50 8e 00 00 00 00 2b 10 73 00 10 00 40 14 2b 10 72 |.....+.s...@.+.r|
00000e60 00 0e 00 40 10 00 00 00 00 0a 00 62 94 00 00 00 |...@.......b....|
00000e70 00 f8 ff 42 30 0a 00 62 a4 04 00 04 8e b7 03 00 |...B0..b........|
00000e80 0c 00 00 00 00 04 00 02 8e 00 00 00 00 04 00 43 |...............C|
00000e90 8c 04 00 40 ac 5f 03 00 08 04 00 03 ae 04 00 10 |...@._..........|
00000ea0 8e 5f 03 00 08 00 00 00 00 20 00 bf 8f 1c 00 b3 |._....... ......|
00000eb0 8f 18 00 b2 8f 14 00 b1 8f 10 00 b0 8f 08 00 e0 |................|
00000ec0 03 28 00 bd 27 00 00 02 3c 70 1c 42 24 08 00 e0 |.(..'...<p.B$...|
00000ed0 03 00 00 00 00 0a 00 82 94 00 00 00 00 01 00 42 |...............B|
00000ee0 34 08 00 e0 03 0a 00 82 a4 0a 00 82 94 00 00 00 |4...............|
00000ef0 00 fe ff 42 30 08 00 e0 03 0a 00 82 a4 0c 00 83 |...B0...........|
00000f00 8c 0c 00 a2 8c 00 00 00 00 06 00 62 14 21 30 00 |...........b.!0.|
00000f10 00 10 00 82 8c 10 00 a3 8c 00 00 00 00 26 10 43 |.............&.C|
00000f20 00 01 00 46 2c 08 00 e0 03 21 10 c0 00 08 00 83 |...F,....!......|
00000f30 94 08 00 a2 94 02 1a 03 00 02 12 02 00 08 00 e0 |................|
00000f40 03 23 10 62 00 08 00 83 90 08 00 a2 90 08 00 e0 |.#.b............|
00000f50 03 23 10 62 00 0c 00 a3 8c 0c 00 82 8c 00 00 00 |.#.b............|
00000f60 00 06 00 62 14 21 30 00 00 10 00 a2 8c 10 00 83 |...b.!0.........|
00000f70 8c 00 00 00 00 26 10 43 00 01 00 46 2c 08 00 e0 |.....&.C...F,...|
00000f80 03 21 10 c0 00 08 00 83 94 08 00 a2 94 02 1a 03 |.!..............|
00000f90 00 02 12 02 00 08 00 e0 03 23 10 62 00 14 00 82 |.........#.b....|
00000fa0 8c 00 00 00 00 0f 00 40 10 14 00 84 24 09 00 05 |.......@....$...|
00000fb0 24 e0 03 03 3c 08 00 63 34 04 00 82 8c 00 00 00 |$...<..c4.......|
00000fc0 00 82 16 02 00 07 00 45 14 00 00 00 00 00 00 83 |.......E........|
00000fd0 ac 08 00 84 24 00 00 82 8c 00 00 00 00 f6 ff 40 |....$..........@|
00000fe0 14 00 00 00 00 08 00 e0 03 00 00 00 00 00 00 83 |................|
00000ff0 8c e0 41 02 3c 03 00 62 10 00 00 00 00 08 00 e0 |..A.<..b........|
00001000 03 21 10 00 00 14 00 82 8c 00 00 00 00 15 00 40 |.!.............@|
00001010 10 14 00 83 24 09 00 07 24 e0 03 05 3c 08 00 a5 |....$...$...<...|
00001020 34 02 00 06 24 04 00 62 8c 00 00 00 00 82 16 02 |4...$..b........|
00001030 00 f2 ff 47 14 00 00 00 00 00 00 62 8c 00 00 00 |...G.......b....|
00001040 00 03 00 45 10 82 16 02 00 ec ff 46 14 00 00 00 |...E.......F....|
00001050 00 08 00 63 24 00 00 62 8c 00 00 00 00 f1 ff 40 |...c$..b.......@|
00001060 14 00 00 00 00 04 00 62 8c 00 00 00 00 03 00 40 |.......b.......@|
00001070 14 21 28 00 00 14 00 82 24 2b 28 43 00 08 00 e0 |.!(.....$+(C....|
00001080 03 21 10 a0 00 e0 ff bd 27 10 00 b0 af 00 00 10 |.!......'.......|
00001090 3c 70 1c 10 8e 14 00 b1 af 21 88 80 00 1b 00 00 |<p.......!......|
000010a0 12 18 00 bf af 0a 00 02 96 00 00 00 00 01 00 42 |...............B|
000010b0 30 12 00 40 14 21 20 00 02 a5 03 00 0c 21 28 20 |0..@.! ......!( |
000010c0 02 0e 00 40 10 21 20 00 02 b1 03 00 0c 21 28 20 |...@.! ......!( |
000010d0 02 0a 00 40 14 21 20 20 02 19 04 00 0c 21 28 00 |...@.! .....!(.|
000010e0 02 04 00 02 8e 00 00 00 00 04 00 22 ae 44 06 00 |...........".D..|
000010f0 0c 04 00 11 ae 14 04 00 08 21 10 00 00 00 00 10 |.........!......|
00001100 8e 00 00 00 00 e7 ff 00 16 00 00 00 00 ff ff 02 |................|
00001110 24 18 00 bf 8f 14 00 b1 8f 10 00 b0 8f 08 00 e0 |$...............|
00001120 03 20 00 bd 27 14 00 86 24 21 38 00 00 14 00 a2 |. ..'...$!8.....|
00001130 8c 00 00 00 00 07 00 40 10 14 00 a5 24 21 18 a0 |.......@....$!..|
00001140 00 04 00 63 24 00 00 62 8c 00 00 00 00 fc ff 40 |...c$..b.......@|
00001150 14 01 00 e7 24 00 00 c2 8c 00 00 00 00 1c 00 40 |....$..........@|
00001160 10 09 00 0b 24 ff 03 09 3c ff ff 29 35 00 08 0a |....$...<..)5...|
00001170 3c e0 03 08 3c 08 00 08 35 04 00 c3 8c 00 00 00 |<...<...5.......|
00001180 00 82 16 03 00 12 00 4b 14 ff ff 63 30 2b 10 67 |.......K...c0+.g|
00001190 00 09 00 40 10 80 10 03 00 21 10 45 00 00 00 42 |...@.....!.E...B|
000011a0 8c 00 00 00 00 82 10 02 00 24 10 49 00 25 10 4a |.........$.I.%.J|
000011b0 00 3f 04 00 08 00 00 c2 ac 00 00 c8 ac 08 00 c6 |.?..............|
000011c0 24 00 00 c2 8c 00 00 00 00 eb ff 40 14 00 00 00 |$..........@....|
000011d0 00 0a 00 82 94 00 00 00 00 fb ff 42 30 02 00 42 |...........B0..B|
000011e0 34 0a 00 82 a4 08 00 e0 03 21 10 00 00 04 00 82 |4........!......|
000011f0 8c 00 00 00 00 0a 00 45 14 21 30 40 00 04 00 a3 |.......E.!0@....|
00001200 8c 21 10 00 00 08 00 e0 03 04 00 83 ac 04 00 83 |.!..............|
00001210 8c 00 00 00 00 04 00 c3 ac 08 00 e0 03 04 00 80 |................|
00001220 ac 04 00 c2 8c 00 00 00 00 09 00 40 10 00 00 00 |...........@....|
00001230 00 04 00 c4 8c 00 00 00 00 f4 ff 85 10 21 10 00 |.............!..|
00001240 00 04 00 82 8c 00 00 00 00 f9 ff 40 14 21 30 80 |...........@.!0.|
00001250 00 08 00 e0 03 ff ff 02 24 00 00 86 ac 04 00 84 |........$.......|
00001260 24 2b 10 85 00 fc ff 40 14 00 00 00 00 08 00 e0 |$+.....@........|
00001270 03 00 00 00 00 04 00 80 14 21 18 00 00 08 00 e0 |.........!......|
00001280 03 21 10 60 00 01 00 63 24 00 00 82 80 00 00 00 |.!.`...c$.......|
00001290 00 fc ff 40 14 01 00 84 24 08 00 e0 03 21 10 60 |...@....$....!.`|
000012a0 00 03 00 80 14 21 38 80 00 08 00 e0 03 21 10 00 |.....!8......!..|
000012b0 00 2b 10 85 00 0c 00 40 14 00 00 00 00 ff ff c6 |.+.....@........|
000012c0 24 12 00 c0 04 21 10 80 00 21 10 e6 00 21 18 a6 |$....!...!...!..|
000012d0 00 00 00 63 90 ff ff c6 24 fb ff c1 04 00 00 43 |...c....$......C|
000012e0 a0 08 00 e0 03 21 10 80 00 08 00 c0 18 21 10 80 |.....!.......!..|
000012f0 00 00 00 a2 90 01 00 a5 24 ff ff c6 24 00 00 e2 |........$...$...|
00001300 a0 fb ff c0 1c 01 00 e7 24 21 10 80 00 08 00 e0 |........$!......|
00001310 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00001320 00 21 40 80 00 21 38 a0 00 14 00 06 25 00 00 03 |.!@..!8.....%...|
00001330 95 62 01 02 24 38 00 62 14 4c 00 05 25 14 00 03 |.b..$8.b.L..%...|
00001340 85 07 01 02 24 34 00 62 14 00 00 00 00 02 00 02 |....$4.b........|
00001350 95 00 00 00 00 20 00 42 2c 2f 00 40 10 02 00 04 |..... .B,/.@....|
00001360 3c ff ff 84 34 02 00 03 3c 10 00 02 8d 38 00 63 |<...4...<....8.c|
00001370 34 24 10 44 00 28 00 43 14 00 00 00 00 08 00 a3 |4$.D.(.C........|
00001380 8c 14 00 c2 8c 00 00 00 00 23 00 62 14 01 70 02 |.........#.b..p.|
00001390 24 02 00 c3 84 00 00 00 00 03 00 62 14 01 00 02 |$..........b....|
000013a0 24 08 00 e0 03 ff ff 02 24 00 00 e2 ac 10 00 c3 |$.......$.......|
000013b0 8c 00 00 00 00 04 00 e3 ac 34 00 c3 8c 00 00 00 |.........4......|
000013c0 00 08 00 e3 ac 14 00 c3 8c 00 00 00 00 0c 00 e3 |................|
000013d0 ac 04 00 c3 8c 00 00 00 00 10 00 e3 ac 08 00 c3 |................|
000013e0 8c 00 00 00 00 14 00 e3 ac 0c 00 c3 8c 00 00 00 |................|
000013f0 00 18 00 e3 ac 1c 00 c3 8c 0c 00 c4 8c 14 00 c5 |................|
00001400 8c 21 18 64 00 23 18 65 00 1c 00 e3 ac 30 00 c3 |.!.d.#.e.....0..|
00001410 8c 08 00 e0 03 20 00 e3 ac 1c 00 02 8d 04 00 03 |..... ..........|
00001420 95 21 28 02 01 01 01 02 24 37 00 62 14 ff ff 02 |.!(.....$7.b....|
00001430 24 12 00 03 95 08 00 02 24 33 00 62 14 ff ff 02 |$.......$3.b....|
00001440 24 2a 00 03 95 20 00 02 24 2f 00 62 14 ff ff 02 |$*... ..$/.b....|
00001450 24 2c 00 04 95 02 00 02 24 2b 00 82 14 ff ff 02 |$,......$+......|
00001460 24 00 70 03 3c 00 00 a2 8c 80 00 63 34 26 00 43 |$.p.<......c4&.C|
00001470 14 ff ff 02 24 10 00 03 95 80 ff 02 34 05 00 62 |....$.......4..b|
00001480 10 04 00 02 24 1f 00 64 14 03 00 02 24 f6 04 00 |....$..d....$...|
00001490 08 00 00 e2 ac 00 00 e2 ac 04 00 a4 8c 00 00 e2 |................|
000014a0 8c 21 20 04 01 04 00 83 8c 00 00 00 00 04 00 e3 |.! .............|
000014b0 ac 08 00 83 8c 00 00 00 00 08 00 e3 ac 28 00 a3 |.............(..|
000014c0 8c 00 00 00 00 0c 00 e3 ac 0c 00 83 8c 00 00 00 |................|
000014d0 00 10 00 e3 ac 10 00 83 8c 00 00 00 00 14 00 e3 |................|
000014e0 ac 14 00 83 8c 00 00 00 00 18 00 e3 ac 34 00 a3 |.............4..|
000014f0 8c 00 00 00 00 1c 00 e3 ac 00 00 83 8c 08 00 e0 |................|
00001500 03 20 00 e3 ac ff ff 02 24 08 00 e0 03 00 00 e2 |. ......$.......|
00001510 ac e8 ff bd 27 10 00 b0 af 21 80 a0 00 14 00 bf |....'....!......|
00001520 af 00 00 03 8e 03 00 02 24 10 00 62 10 04 00 62 |........$..b...b|
00001530 28 05 00 40 10 01 00 02 24 08 00 62 10 ff ff 02 |(..@....$..b....|
00001540 24 36 05 00 08 00 00 00 00 04 00 02 24 0b 00 62 |$6..........$..b|
00001550 10 ff ff 02 24 36 05 00 08 00 00 00 00 5e 05 00 |....$6.......^..|
00001560 0c 00 00 00 00 31 05 00 08 00 00 00 00 7e 05 00 |.....1.......~..|
00001570 0c 00 00 00 00 31 05 00 08 00 00 00 00 97 05 00 |.....1..........|
00001580 0c 21 28 00 02 0c 00 05 8e 21 20 00 02 3a 05 00 |.!(......! ..:..|
00001590 0c d0 ff a5 24 21 10 00 00 14 00 bf 8f 10 00 b0 |....$!..........|
000015a0 8f 08 00 e0 03 18 00 bd 27 00 00 a0 ac 04 00 a0 |........'.......|
000015b0 ac 08 00 a0 a4 0a 00 a0 a4 0c 00 a0 a4 20 00 83 |............. ..|
000015c0 8c 00 00 00 00 01 00 62 24 09 00 40 10 00 00 00 |.......b$..@....|
000015d0 00 00 00 62 8c 00 00 00 00 04 00 a2 ac 20 00 82 |...b......... ..|
000015e0 8c 00 00 00 00 04 00 42 94 00 00 00 00 08 00 a2 |.......B........|
000015f0 a4 04 00 82 8c 00 00 00 00 10 00 a2 ac 08 00 82 |................|
00001600 8c 00 00 00 00 14 00 a2 ac 0c 00 82 8c 00 00 00 |................|
00001610 00 18 00 a2 ac 10 00 82 8c 00 00 00 00 1c 00 a2 |................|
00001620 ac 14 00 82 8c 00 00 00 00 20 00 a2 ac 18 00 82 |......... ......|
00001630 8c 08 00 e0 03 24 00 a2 ac e0 ff bd 27 10 00 b0 |.....$......'...|
00001640 af 21 80 80 00 14 00 b1 af 14 00 11 26 18 00 bf |.!..........&...|
00001650 af 14 00 25 8e 60 00 02 8e 04 00 26 8e 21 80 02 |...%.`.....&.!..|
00001660 02 2e 06 00 0c 21 20 00 02 18 00 25 8e 04 00 24 |.....! ....%...$|
00001670 8e 08 00 26 8e 2e 06 00 0c 21 20 04 02 1c 00 24 |...&.....! ....$|
00001680 8e 00 00 00 00 07 00 80 10 00 00 00 00 0c 00 25 |...............%|
00001690 8e 00 00 00 00 03 00 a0 10 00 00 00 00 3c 06 00 |.............<..|
000016a0 0c 83 28 05 00 18 00 bf 8f 14 00 b1 8f 10 00 b0 |..(.............|
000016b0 8f 08 00 e0 03 20 00 bd 27 e8 ff bd 27 14 00 bf |..... ..'...'...|
000016c0 af 10 00 b0 af 1c 00 82 8c 00 00 00 00 21 80 82 |.............!..|
000016d0 00 28 00 05 8e 24 00 02 8e 30 00 06 8e 2e 06 00 |.(...$...0......|
000016e0 0c 21 20 82 00 34 00 05 8e 30 00 03 8e 00 00 00 |.! ..4...0......|
000016f0 00 2b 10 65 00 05 00 40 10 23 28 a3 00 28 00 04 |.+.e...@.#(..(..|
00001700 8e 82 28 05 00 3c 06 00 0c 21 20 83 00 14 00 bf |..(..<...! .....|
00001710 8f 10 00 b0 8f 08 00 e0 03 18 00 bd 27 d0 ff bd |............'...|
00001720 27 24 00 b5 af 21 a8 80 00 18 00 b2 af 21 90 a0 |'$...!.......!..|
00001730 00 1c 00 b3 af 21 98 a0 02 28 00 bf af 20 00 b4 |.....!...(... ..|
00001740 af 14 00 b1 af 10 00 b0 af 0c 00 50 8e 1c 00 64 |...........P...d|
00001750 8e 20 00 65 8e 04 00 42 8e 08 00 43 8e 21 10 50 |. .e...B...C.!.P|
00001760 00 21 18 70 00 21 88 64 02 08 00 43 ae 20 00 43 |.!.p.!.d...C. .C|
00001770 8e 04 00 42 ae 01 00 62 24 03 00 40 10 21 a0 65 |...B...b$..@.!.e|
00001780 02 21 10 70 00 20 00 42 ae 0c 00 45 8e 24 00 24 |.!.p. .B...E.$.$|
00001790 8e 30 00 26 8e 2e 06 00 0c 21 20 64 02 34 00 25 |.0.&.....! d.4.%|
000017a0 8e 30 00 23 8e 00 00 00 00 2b 10 65 00 05 00 40 |.0.#.....+.e...@|
000017b0 10 23 28 a3 00 0c 00 44 8e 82 28 05 00 3c 06 00 |.#(....D..(..<..|
000017c0 0c 21 20 83 00 30 00 62 96 01 00 0c 24 2a 10 82 |.! ..0.b....$*..|
000017d0 01 60 00 40 10 00 f0 12 3c 09 00 19 24 00 00 18 |.`.@....<...$...|
000017e0 3c 40 1c 18 27 ff ff 0d 3c ff 03 0f 3c ff ff ef |<@..'...<...<...|
000017f0 35 00 fc 11 3c 28 00 8a 26 04 00 42 8d 00 00 00 |5...<(..&..B....|
00001800 00 4f 00 59 14 00 00 00 00 14 00 43 8d 24 00 42 |.O.Y.......C.$.B|
00001810 8d 00 00 00 00 02 00 40 14 1b 00 62 00 0d 00 07 |.......@...b....|
00001820 00 12 58 00 00 10 00 42 8d 21 38 00 00 44 00 60 |..X....B.!8..D.`|
00001830 19 21 48 55 00 01 00 6e 25 08 00 28 25 00 00 22 |.!HU...n%..(%.."|
00001840 8d fc ff 03 91 21 30 50 00 07 00 62 2c 37 00 40 |.....!0P...b,7.@|
00001850 10 80 10 03 00 21 10 58 00 00 00 42 8c 00 00 00 |.....!.X...B....|
00001860 00 08 00 40 00 00 00 00 00 00 00 c5 84 00 00 c2 |...@............|
00001870 8c 21 28 b0 00 24 10 4d 00 ff ff a3 30 25 10 43 |.!(..$.M....0%.C|
00001880 00 1b 06 00 08 00 00 c2 ac 00 00 c5 8c 00 00 00 |................|
00001890 00 21 28 b0 00 1b 06 00 08 00 00 c5 ac 00 00 c5 |.!(.............|
000018a0 8c 00 00 c3 8c 24 10 af 00 80 28 02 00 24 10 d2 |.....$....(..$..|
000018b0 00 25 28 a2 00 21 28 b0 00 24 18 71 00 00 11 05 |.%(..!(..$.q....|
000018c0 00 82 11 02 00 25 18 62 00 1b 06 00 08 00 00 c3 |.....%.b........|
000018d0 ac 00 00 04 8d 08 00 08 25 08 00 29 25 01 00 e7 |........%..)%...|
000018e0 24 00 00 c5 84 21 20 90 00 00 00 83 84 00 14 05 |$....! .........|
000018f0 00 21 28 43 00 21 28 b0 00 c2 13 05 00 01 00 42 |.!(C.!(........B|
00001900 24 42 10 02 00 00 00 c3 8c ff ff 42 30 24 18 6d |$B.........B0$.m|
00001910 00 25 18 62 00 00 00 c3 ac 00 00 82 8c ff ff a3 |.%.b............|
00001920 30 24 10 4d 00 25 10 43 00 00 00 82 ac 01 00 e7 |0$.M.%.C........|
00001930 24 08 00 08 25 2a 10 eb 00 c0 ff 40 14 08 00 29 |$...%*.....@...)|
00001940 25 30 00 62 96 01 00 8c 25 2a 10 82 01 aa ff 40 |%0.b....%*.....@|
00001950 14 28 00 4a 25 28 00 bf 8f 24 00 b5 8f 20 00 b4 |.(.J%(...$... ..|
00001960 8f 1c 00 b3 8f 18 00 b2 8f 14 00 b1 8f 10 00 b0 |................|
00001970 8f 08 00 e0 03 30 00 bd 27 82 30 06 00 80 30 06 |.....0..'.0...0.|
00001980 00 21 18 86 00 2b 10 83 00 07 00 40 10 00 00 00 |.!...+.....@....|
00001990 00 00 00 82 8c 04 00 84 24 00 00 a2 ac 2b 10 83 |........$....+..|
000019a0 00 fb ff 40 14 04 00 a5 24 08 00 e0 03 00 00 00 |...@....$.......|
000019b0 00 05 00 a0 18 00 00 00 00 00 00 80 ac ff ff a5 |................|
000019c0 24 fd ff a0 1c 04 00 84 24 08 00 e0 03 00 00 00 |$.......$.......|
000019d0 00 00 60 08 40 00 00 00 00 00 00 0c 3c 2c 19 8c |..`.@.......<,..|
000019e0 25 00 a0 01 3c 25 60 81 01 08 00 80 01 00 60 80 |%...<%`.......`.|
000019f0 40 00 00 00 00 00 00 00 00 80 bf 0e 3c 50 14 ce |@...........<P..|
00001a00 8d 00 00 00 00 fe ff 0f 24 24 48 cf 01 80 bf 01 |........$$H.....|
00001a10 3c 50 14 29 ac 80 bf 01 3c 50 14 20 8c 80 bf 0f |<P.)....<P. ....|
00001a20 3c 78 15 ef 8d 80 bf 01 3c 78 15 20 ac 80 bf 01 |<x......<x. ....|
00001a30 3c 78 15 20 8c fe ff 0d 3c 30 01 ad 8d 04 0c 09 |<x. ....<0......|
00001a40 24 fe ff 01 3c 30 01 29 ac 01 00 0c 3c 00 60 8c |$...<0.)....<.`.|
00001a50 40 00 00 00 00 00 00 00 00 00 00 0a 24 80 0f 0b |@...........$...|
00001a60 24 00 00 40 ad 10 00 40 ad 20 00 40 ad 30 00 40 |$..@...@. .@.0.@|
00001a70 ad 40 00 40 ad 50 00 40 ad 60 00 40 ad 70 00 40 |.@.@.P.@.`.@.p.@|
00001a80 ad f7 ff 4b 15 80 00 4a 21 00 60 80 40 00 00 00 |...K...J!.`.@...|
00001a90 00 fe ff 01 3c 30 01 2d ac fe ff 01 3c 30 01 20 |....<0.-....<0. |
00001aa0 8c 00 00 00 00 80 bf 01 3c 78 15 2f ac 80 bf 01 |........<x./....|
00001ab0 3c 78 15 20 8c 80 bf 01 3c 50 14 2e ac 80 bf 01 |<x. ....<P......|
00001ac0 3c 50 14 20 8c 00 60 88 40 00 00 00 00 08 00 e0 |<P. ..`.@.......|
00001ad0 03 00 00 00 00 00 60 08 40 00 00 00 00 00 00 0c |......`.@.......|
00001ae0 3c 30 1a 8c 25 00 a0 01 3c 25 60 81 01 08 00 80 |<0..%...<%`.....|
00001af0 01 00 60 80 40 00 00 00 00 00 00 00 00 80 bf 0e |..`.@...........|
00001b00 3c 50 14 ce 8d 00 00 00 00 fe ff 0f 24 24 48 cf |<P..........$$H.|
00001b10 01 80 bf 01 3c 50 14 29 ac 80 bf 01 3c 50 14 20 |....<P.)....<P. |
00001b20 8c 80 bf 0f 3c 78 15 ef 8d 80 bf 01 3c 78 15 20 |....<x......<x. |
00001b30 ac 80 bf 01 3c 78 15 20 8c fe ff 0d 3c 30 01 ad |....<x. ....<0..|
00001b40 8d c4 00 09 24 fe ff 01 3c 30 01 29 ac 01 00 0c |....$...<0.)....|
00001b50 3c 00 60 8c 40 00 00 00 00 00 00 00 00 00 00 0a |<.`.@...........|
00001b60 24 80 03 0b 24 00 00 40 ad 10 00 40 ad 20 00 40 |$...$..@...@. .@|
00001b70 ad 30 00 40 ad 40 00 40 ad 50 00 40 ad 60 00 40 |.0.@.@.@.P.@.`.@|
00001b80 ad 70 00 40 ad f7 ff 4b 15 80 00 4a 21 00 60 80 |.p.@...K...J!.`.|
00001b90 40 00 00 00 00 fe ff 01 3c 30 01 2d ac fe ff 01 |@.......<0.-....|
00001ba0 3c 30 01 20 8c 00 00 00 00 80 bf 01 3c 78 15 2f |<0. ........<x./|
00001bb0 ac 80 bf 01 3c 78 15 20 8c 80 bf 01 3c 50 14 2e |....<x. ....<P..|
00001bc0 ac 80 bf 01 3c 50 14 20 8c 00 60 88 40 00 00 00 |....<P. ..`.@...|
00001bd0 00 08 00 e0 03 00 00 00 00 00 60 08 40 00 00 00 |..........`.@...|
00001be0 00 00 00 0c 3c 34 1b 8c 25 00 a0 01 3c 25 60 81 |....<4..%...<%`.|
00001bf0 01 08 00 80 01 00 60 80 40 00 00 00 00 fe ff 01 |......`.@.......|
00001c00 3c 30 01 24 ac fe ff 01 3c 30 01 20 8c 00 00 00 |<0.$....<0. ....|
00001c10 00 00 60 88 40 00 00 00 00 08 00 e0 03 00 00 00 |..`.@...........|
00001c20 00 00 00 c0 41 00 00 00 00 01 01 00 00 6c 6f 61 |....A........loa|
00001c30 64 63 6f 72 65 00 00 00 00 dc 05 00 00 dc 1b 00 |dcore...........|
00001c40 00 04 0e 00 00 10 19 00 00 14 1a 00 00 98 08 00 |................|
00001c50 00 b8 0a 00 00 00 0c 00 00 bc 0c 00 00 58 0a 00 |.............X..|
00001c60 00 94 0b 00 00 40 06 00 00 e4 05 00 00 14 0e 00 |.....@..........|
00001c70 00 28 0e 00 00 40 07 00 00 bc 07 00 00 dc 1b 00 |.(...@..........|
00001c80 00 dc 1b 00 00 9c 06 00 00 18 1b 00 00 60 12 00 |.............`..|
00001c90 00 50 14 00 00 28 08 00 00 00 00 00 00 08 00 e0 |.P...(..........|
00001ca0 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00001cb0 00 00 00 e0 41 00 00 00 00 01 01 00 00 73 79 73 |....A........sys|
00001cc0 6d 65 6d 00 00 08 00 e0 03 04 00 00 24 08 00 e0 |mem.........$...|
00001cd0 03 05 00 00 24 08 00 e0 03 06 00 00 24 00 00 00 |....$.......$...|
00001ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00001cf0 00 4d 6f 64 75 6c 65 5f 4d 61 6e 61 67 65 72 00 |.Module_Manager.|
00001d00 00 6c 18 00 00 a8 17 00 00 c8 17 00 00 6c 18 00 |.l...........l..|
00001d10 00 dc 17 00 00 10 18 00 00 6c 18 00 00 00 00 00 |.........l......|
00001d20 00 30 1c 00 00 01 01 00 00 00 00 00 00 00 00 00 |.0..............|
00001d30 00 00 2e 69 6f 70 6d 6f 64 00 2e 74 65 78 74 00 |...iopmod..text.|
00001d40 2e 72 65 6c 2e 74 65 78 74 00 2e 72 6f 64 61 74 |.rel.text..rodat|
00001d50 61 00 2e 72 65 6c 2e 72 6f 64 61 74 61 00 2e 64 |a..rel.rodata..d|
00001d60 61 74 61 00 2e 72 65 6c 2e 64 61 74 61 00 2e 62 |ata..rel.data..b|
00001d70 73 73 00 2e 73 68 73 74 72 74 61 62 00 2e 73 79 |ss..shstrtab..sy|
00001d80 6d 74 61 62 00 2e 73 74 72 74 61 62 00 00 00 00 |mtab..strtab....|
00001d90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00001db0 00 00 00 00 00 01 00 00 00 80 00 00 70 00 00 00 |............p...|
00001dc0 00 00 00 00 00 74 00 00 00 29 00 00 00 00 00 00 |.....t...)......|
00001dd0 00 00 00 00 00 04 00 00 00 00 00 00 00 09 00 00 |................|
00001de0 00 01 00 00 00 06 00 00 00 00 00 00 00 a0 00 00 |................|
00001df0 00 30 1c 00 00 00 00 00 00 00 00 00 00 10 00 00 |.0..............|
00001e00 00 00 00 00 00 0f 00 00 00 09 00 00 00 00 00 00 |................|
00001e10 00 00 00 00 00 4c 1f 00 00 e0 05 00 00 0a 00 00 |.....L..........|
00001e20 00 02 00 00 00 04 00 00 00 08 00 00 00 19 00 00 |................|
00001e30 00 01 00 00 00 02 00 00 00 30 1c 00 00 d0 1c 00 |.........0......|
00001e40 00 30 00 00 00 00 00 00 00 00 00 00 00 10 00 00 |.0..............|
00001e50 00 00 00 00 00 21 00 00 00 09 00 00 00 00 00 00 |.....!..........|
00001e60 00 00 00 00 00 2c 25 00 00 38 00 00 00 0a 00 00 |.....,%..8......|
00001e70 00 04 00 00 00 04 00 00 00 08 00 00 00 2d 00 00 |.............-..|
00001e80 00 01 00 00 00 03 00 00 00 60 1c 00 00 00 1d 00 |.........`......|
00001e90 00 10 00 00 00 00 00 00 00 00 00 00 00 10 00 00 |................|
00001ea0 00 00 00 00 00 33 00 00 00 09 00 00 00 00 00 00 |.....3..........|
00001eb0 00 00 00 00 00 64 25 00 00 08 00 00 00 0a 00 00 |.....d%.........|
00001ec0 00 06 00 00 00 04 00 00 00 08 00 00 00 3d 00 00 |.............=..|
00001ed0 00 08 00 00 00 03 00 00 00 70 1c 00 00 10 1d 00 |.........p......|
00001ee0 00 64 00 00 00 00 00 00 00 00 00 00 00 10 00 00 |.d..............|
00001ef0 00 00 00 00 00 42 00 00 00 03 00 00 00 00 00 00 |.....B..........|
00001f00 00 00 00 00 00 10 1d 00 00 5c 00 00 00 00 00 00 |.........\......|
00001f10 00 00 00 00 00 01 00 00 00 00 00 00 00 4c 00 00 |.............L..|
00001f20 00 02 00 00 00 00 00 00 00 00 00 00 00 6c 25 00 |.............l%.|
00001f30 00 10 00 00 00 0b 00 00 00 01 00 00 00 04 00 00 |................|
00001f40 00 10 00 00 00 54 00 00 00 03 00 00 00 00 00 00 |.....T..........|
00001f50 00 00 00 00 00 7c 25 00 00 01 00 00 00 00 00 00 |.....|%.........|
00001f60 00 00 00 00 00 01 00 00 00 00 00 00 00 18 00 00 |................|
00001f70 00 05 00 00 00 20 00 00 00 06 00 00 00 1c 00 00 |..... ..........|
00001f80 00 04 00 00 00 a8 00 00 00 05 00 00 00 ac 00 00 |................|
00001f90 00 06 00 00 00 b8 00 00 00 05 00 00 00 bc 00 00 |................|
00001fa0 00 06 00 00 00 c0 00 00 00 05 00 00 00 c4 00 00 |................|
00001fb0 00 06 00 00 00 0c 01 00 00 05 00 00 00 14 01 00 |................|
00001fc0 00 06 00 00 00 2c 01 00 00 04 00 00 00 34 01 00 |.....,.......4..|
00001fd0 00 05 00 00 00 38 01 00 00 06 00 00 00 3c 01 00 |.....8.......<..|
00001fe0 00 05 00 00 00 40 01 00 00 06 00 00 00 54 01 00 |.....@.......T..|
00001ff0 00 05 00 00 00 58 01 00 00 06 00 00 00 64 01 00 |.....X.......d..|
00002000 00 05 00 00 00 68 01 00 00 06 00 00 00 6c 01 00 |.....h.......l..|
00002010 00 05 00 00 00 70 01 00 00 06 00 00 00 78 01 00 |.....p.......x..|
00002020 00 05 00 00 00 7c 01 00 00 06 00 00 00 8c 01 00 |.....|..........|
00002030 00 04 00 00 00 94 01 00 00 05 00 00 00 98 01 00 |................|
00002040 00 06 00 00 00 9c 01 00 00 04 00 00 00 b4 01 00 |................|
00002050 00 05 00 00 00 b8 01 00 00 06 00 00 00 c0 01 00 |................|
00002060 00 04 00 00 00 dc 01 00 00 04 00 00 00 08 02 00 |................|
00002070 00 04 00 00 00 10 02 00 00 04 00 00 00 24 02 00 |.............$..|
00002080 00 04 00 00 00 34 02 00 00 04 00 00 00 4c 02 00 |.....4.......L..|
00002090 00 04 00 00 00 74 02 00 00 04 00 00 00 8c 02 00 |.....t..........|
000020a0 00 04 00 00 00 b8 02 00 00 04 00 00 00 dc 02 00 |................|
000020b0 00 05 00 00 00 e0 02 00 00 06 00 00 00 20 03 00 |............. ..|
000020c0 00 04 00 00 00 40 03 00 00 04 00 00 00 68 03 00 |.....@.......h..|
000020d0 00 04 00 00 00 80 03 00 00 04 00 00 00 b0 03 00 |................|
000020e0 00 04 00 00 00 c0 03 00 00 04 00 00 00 d8 03 00 |................|
000020f0 00 04 00 00 00 e8 03 00 00 04 00 00 00 0c 04 00 |................|
00002100 00 04 00 00 00 1c 04 00 00 04 00 00 00 2c 04 00 |.............,..|
00002110 00 04 00 00 00 74 04 00 00 04 00 00 00 8c 04 00 |.....t..........|
00002120 00 04 00 00 00 94 04 00 00 04 00 00 00 a0 04 00 |................|
00002130 00 04 00 00 00 b8 04 00 00 04 00 00 00 e8 04 00 |................|
00002140 00 04 00 00 00 0c 05 00 00 05 00 00 00 10 05 00 |................|
00002150 00 06 00 00 00 d4 05 00 00 04 00 00 00 f8 05 00 |................|
00002160 00 05 00 00 00 fc 05 00 00 06 00 00 00 ac 06 00 |................|
00002170 00 05 00 00 00 b0 06 00 00 06 00 00 00 e0 06 00 |................|
00002180 00 04 00 00 00 f0 06 00 00 05 00 00 00 f4 06 00 |................|
00002190 00 06 00 00 00 00 07 00 00 05 00 00 00 04 07 00 |................|
000021a0 00 06 00 00 00 10 07 00 00 05 00 00 00 14 07 00 |................|
000021b0 00 06 00 00 00 44 07 00 00 05 00 00 00 48 07 00 |.....D.......H..|
000021c0 00 06 00 00 00 90 07 00 00 05 00 00 00 94 07 00 |................|
000021d0 00 06 00 00 00 c4 07 00 00 05 00 00 00 c8 07 00 |................|
000021e0 00 06 00 00 00 28 08 00 00 05 00 00 00 2c 08 00 |.....(.......,..|
000021f0 00 06 00 00 00 cc 08 00 00 04 00 00 00 d4 08 00 |................|
00002200 00 05 00 00 00 d8 08 00 00 06 00 00 00 ec 08 00 |................|
00002210 00 04 00 00 00 fc 08 00 00 04 00 00 00 0c 09 00 |................|
00002220 00 04 00 00 00 44 09 00 00 04 00 00 00 70 09 00 |.....D.......p..|
00002230 00 05 00 00 00 74 09 00 00 06 00 00 00 8c 09 00 |.....t..........|
00002240 00 04 00 00 00 a0 09 00 00 04 00 00 00 c4 09 00 |................|
00002250 00 04 00 00 00 d0 09 00 00 04 00 00 00 e8 09 00 |................|
00002260 00 04 00 00 00 10 0a 00 00 05 00 00 00 14 0a 00 |................|
00002270 00 06 00 00 00 2c 0a 00 00 04 00 00 00 74 0a 00 |.....,.......t..|
00002280 00 04 00 00 00 80 0a 00 00 05 00 00 00 84 0a 00 |................|
00002290 00 06 00 00 00 9c 0a 00 00 04 00 00 00 bc 0a 00 |................|
000022a0 00 05 00 00 00 c0 0a 00 00 06 00 00 00 24 0b 00 |.............$..|
000022b0 00 05 00 00 00 28 0b 00 00 06 00 00 00 30 0b 00 |.....(.......0..|
000022c0 00 04 00 00 00 40 0b 00 00 04 00 00 00 9c 0b 00 |.....@..........|
000022d0 00 05 00 00 00 a0 0b 00 00 06 00 00 00 b8 0b 00 |................|
000022e0 00 04 00 00 00 c8 0b 00 00 04 00 00 00 44 0c 00 |.............D..|
000022f0 00 04 00 00 00 68 0c 00 00 04 00 00 00 7c 0c 00 |.....h.......|..|
00002300 00 04 00 00 00 84 0c 00 00 04 00 00 00 d0 0c 00 |................|
00002310 00 05 00 00 00 d4 0c 00 00 06 00 00 00 14 0d 00 |................|
00002320 00 04 00 00 00 30 0d 00 00 04 00 00 00 5c 0d 00 |.....0.......\..|
00002330 00 04 00 00 00 74 0d 00 00 05 00 00 00 78 0d 00 |.....t.......x..|
00002340 00 06 00 00 00 bc 0d 00 00 04 00 00 00 d4 0d 00 |................|
00002350 00 04 00 00 00 e0 0d 00 00 04 00 00 00 04 0e 00 |................|
00002360 00 05 00 00 00 08 0e 00 00 06 00 00 00 cc 0f 00 |................|
00002370 00 05 00 00 00 d0 0f 00 00 06 00 00 00 f8 0f 00 |................|
00002380 00 04 00 00 00 08 10 00 00 04 00 00 00 18 10 00 |................|
00002390 00 04 00 00 00 2c 10 00 00 04 00 00 00 34 10 00 |.....,.......4..|
000023a0 00 04 00 00 00 f0 10 00 00 04 00 00 00 cc 13 00 |................|
000023b0 00 04 00 00 00 80 14 00 00 04 00 00 00 94 14 00 |................|
000023c0 00 04 00 00 00 9c 14 00 00 04 00 00 00 a4 14 00 |................|
000023d0 00 04 00 00 00 ac 14 00 00 04 00 00 00 b4 14 00 |................|
000023e0 00 04 00 00 00 bc 14 00 00 04 00 00 00 cc 14 00 |................|
000023f0 00 04 00 00 00 a0 15 00 00 04 00 00 00 b4 15 00 |................|
00002400 00 04 00 00 00 dc 15 00 00 04 00 00 00 1c 16 00 |................|
00002410 00 04 00 00 00 44 16 00 00 04 00 00 00 d4 16 00 |.....D..........|
00002420 00 04 00 00 00 fc 16 00 00 04 00 00 00 1c 17 00 |................|
00002430 00 05 00 00 00 20 17 00 00 06 00 00 00 c0 17 00 |..... ..........|
00002440 00 04 00 00 00 d4 17 00 00 04 00 00 00 08 18 00 |................|
00002450 00 04 00 00 00 18 19 00 00 05 00 00 00 1c 19 00 |................|
00002460 00 06 00 00 00 1c 1a 00 00 05 00 00 00 20 1a 00 |............. ..|
00002470 00 06 00 00 00 20 1b 00 00 05 00 00 00 24 1b 00 |..... .......$..|
00002480 00 06 00 00 00 74 1b 00 00 02 00 00 00 78 1b 00 |.....t.......x..|
00002490 00 02 00 00 00 7c 1b 00 00 02 00 00 00 80 1b 00 |.....|..........|
000024a0 00 02 00 00 00 84 1b 00 00 02 00 00 00 88 1b 00 |................|
000024b0 00 02 00 00 00 8c 1b 00 00 02 00 00 00 90 1b 00 |................|
000024c0 00 02 00 00 00 94 1b 00 00 02 00 00 00 98 1b 00 |................|
000024d0 00 02 00 00 00 9c 1b 00 00 02 00 00 00 a0 1b 00 |................|
000024e0 00 02 00 00 00 a4 1b 00 00 02 00 00 00 a8 1b 00 |................|
000024f0 00 02 00 00 00 ac 1b 00 00 02 00 00 00 b0 1b 00 |................|
00002500 00 02 00 00 00 b4 1b 00 00 02 00 00 00 b8 1b 00 |................|
00002510 00 02 00 00 00 bc 1b 00 00 02 00 00 00 c0 1b 00 |................|
00002520 00 02 00 00 00 c4 1b 00 00 02 00 00 00 c8 1b 00 |................|
00002530 00 02 00 00 00 cc 1b 00 00 02 00 00 00 d0 1b 00 |................|
00002540 00 02 00 00 00 d4 1b 00 00 02 00 00 00 40 1c 00 |.............@..|
00002550 00 02 00 00 00 44 1c 00 00 02 00 00 00 48 1c 00 |.....D.......H..|
00002560 00 02 00 00 00 4c 1c 00 00 02 00 00 00 50 1c 00 |.....L.......P..|
00002570 00 02 00 00 00 54 1c 00 00 02 00 00 00 |.....T.......|
0000257d

Binary file not shown.

View file

@ -66,7 +66,7 @@ int main(int argc, char** argv)
for (int i = 0; i < entryCount; i++)
{
printf("0x%08x\n", pos);
printf("%s\t->\t0x%08x, 0x%08x\n", entries[i].name, pos, entries[i].file_size);
if (!strncmp(entries[i].name, argv[2], 10))
{
printf("Found \"%s\" at 0x%08x\n", entries[i].name, pos);