#include "database.h" union psyq_header_t { struct { Uint8 id[8]; Uint32 text, data, pc0, gp0, t_addr, t_size; Uint32 d_addr, d_size, b_addr, b_size, s_addr, s_size; Uint32 sp, fp, gp, ra, s0; }; Uint8 raw[0x800]; }; static const Uint32 PSX_MAXMEM = 2 * 1024 * 1024; static const Uint32 BASE_PSX = 0x80000000; static const Uint32 END_PSX = BASE_PSX + PSX_MAXMEM; class loader_psyq : public Base { public: static void load(Cpu * cpu, Handle * input, Database * database) { psyq_header_t head; Segment * bss = 0, * data = 0; input->read(&head, sizeof(head)); if (head.t_addr != BASE_PSX) bss = database->CreateSegment(cpu, BASE_PSYQ, ABSNUL, 0, head.t_addr - BASE_PSYQ); data = database->CreateSegment(cpu, head.t_addr, ABSNUL, head.t_size, END_PSX - (head.t_addr + head.t_size)); data-> database-> } };