replace Array with std::array
This commit is contained in:
parent
12193f9510
commit
0d9214df40
|
@ -16,7 +16,7 @@
|
|||
|
||||
extern void dc_request_reset();
|
||||
|
||||
Array<RegisterStruct> sb_regs(0x540);
|
||||
std::array<RegisterStruct, 0x540> sb_regs;
|
||||
|
||||
//(addr>= 0x005F6800) && (addr<=0x005F7CFF) -> 0x1500 bytes -> 0x540 possible registers , 125 actually exist only
|
||||
// System Control Reg. //0x100 bytes
|
||||
|
@ -127,9 +127,9 @@ void sb_rio_register(u32 reg_addr, RegIO flags, RegReadAddrFP* rf, RegWriteAddrF
|
|||
{
|
||||
u32 idx=(reg_addr-SB_BASE)/4;
|
||||
|
||||
verify(idx<sb_regs.Size);
|
||||
verify(idx < sb_regs.size());
|
||||
|
||||
sb_regs[idx].flags = flags | REG_ACCESS_32;
|
||||
sb_regs[idx].flags = flags;
|
||||
|
||||
if (flags == RIO_NO_ACCESS)
|
||||
{
|
||||
|
@ -180,12 +180,8 @@ void SB_SFRES_write32(u32 addr, u32 data)
|
|||
}
|
||||
void sb_Init()
|
||||
{
|
||||
sb_regs.Zero();
|
||||
|
||||
for (u32 i=0;i<sb_regs.Size;i++)
|
||||
{
|
||||
sb_rio_register(SB_BASE+i*4,RIO_NO_ACCESS);
|
||||
}
|
||||
for (u32 i = 0; i < sb_regs.size(); i++)
|
||||
sb_rio_register(SB_BASE + i * 4, RIO_NO_ACCESS);
|
||||
|
||||
//0x005F6800 SB_C2DSTAT RW ch2-DMA destination address
|
||||
sb_rio_register(SB_C2DSTAT_addr,RIO_DATA);
|
||||
|
@ -612,8 +608,8 @@ void sb_Reset(bool hard)
|
|||
{
|
||||
if (hard)
|
||||
{
|
||||
for (u32 i = 0; i < sb_regs.Size; i++)
|
||||
sb_regs[i].reset();
|
||||
for (auto& reg : sb_regs)
|
||||
reg.reset();
|
||||
}
|
||||
SB_ISTNRM = 0;
|
||||
SB_FFST_rc = 0;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
|
||||
#pragma once
|
||||
#include <array>
|
||||
#include "types.h"
|
||||
|
||||
|
||||
|
@ -13,7 +14,7 @@ void sb_Init();
|
|||
void sb_Reset(bool hard);
|
||||
void sb_Term();
|
||||
|
||||
extern Array<RegisterStruct> sb_regs;
|
||||
extern std::array<RegisterStruct, 0x540> sb_regs;
|
||||
|
||||
#define SB_BASE 0x005F6800
|
||||
|
||||
|
@ -314,7 +315,7 @@ extern Array<RegisterStruct> sb_regs;
|
|||
//0x005F7CF8 SB_PDLEND R PVR-DMA transfer counter
|
||||
#define SB_PDLEND_addr 0x005F7CF8
|
||||
|
||||
#define SB_REGN_32(addr) (sb_regs[(addr-SB_BASE)/4].data32)
|
||||
#define SB_REGN_32(addr) (sb_regs[((addr) - SB_BASE) / 4].data32)
|
||||
#define SB_REG_32(name) SB_REGN_32(SB_##name##_addr)
|
||||
#define SB_REG_T(name) ((SB_name##_t&)SB_REG_T(name))
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
Sh4 internal register routing (P4 & 'area 7')
|
||||
*/
|
||||
#include <array>
|
||||
#include "types.h"
|
||||
#include "sh4_mmr.h"
|
||||
|
||||
|
@ -11,45 +12,44 @@
|
|||
|
||||
//64bytes of sq // now on context ~
|
||||
|
||||
Array<u8> OnChipRAM;
|
||||
std::array<u8, OnChipRAM_SIZE> OnChipRAM;
|
||||
|
||||
//All registers are 4 byte aligned
|
||||
|
||||
Array<RegisterStruct> CCN(18,true); //CCN : 16 registers
|
||||
Array<RegisterStruct> UBC(9,true); //UBC : 9 registers
|
||||
Array<RegisterStruct> BSC(19,true); //BSC : 18 registers
|
||||
Array<RegisterStruct> DMAC(17,true); //DMAC : 17 registers
|
||||
Array<RegisterStruct> CPG(5,true); //CPG : 5 registers
|
||||
Array<RegisterStruct> RTC(16,true); //RTC : 16 registers
|
||||
Array<RegisterStruct> INTC(5,true); //INTC : 5 registers
|
||||
Array<RegisterStruct> TMU(12,true); //TMU : 12 registers
|
||||
Array<RegisterStruct> SCI(8,true); //SCI : 8 registers
|
||||
Array<RegisterStruct> SCIF(10,true); //SCIF : 10 registers
|
||||
std::array<RegisterStruct, 18> CCN;
|
||||
std::array<RegisterStruct, 9> UBC;
|
||||
std::array<RegisterStruct, 19> BSC;
|
||||
std::array<RegisterStruct, 17> DMAC;
|
||||
std::array<RegisterStruct, 5> CPG;
|
||||
std::array<RegisterStruct, 16> RTC;
|
||||
std::array<RegisterStruct, 5> INTC;
|
||||
std::array<RegisterStruct, 12> TMU;
|
||||
std::array<RegisterStruct, 8> SCI;
|
||||
std::array<RegisterStruct, 10> SCIF;
|
||||
|
||||
Array<RegisterStruct> * const AllRegisters[] = { &CCN, &UBC, &BSC, &DMAC, &CPG, &RTC, &INTC, &TMU, &SCI, &SCIF };
|
||||
|
||||
u32 sh4io_read_noacc(u32 addr)
|
||||
static u32 sh4io_read_noacc(u32 addr)
|
||||
{
|
||||
INFO_LOG(SH4, "sh4io: Invalid read access @@ %08X", addr);
|
||||
return 0;
|
||||
}
|
||||
void sh4io_write_noacc(u32 addr, u32 data)
|
||||
static void sh4io_write_noacc(u32 addr, u32 data)
|
||||
{
|
||||
INFO_LOG(SH4, "sh4io: Invalid write access @@ %08X %08X", addr, data);
|
||||
//verify(false);
|
||||
}
|
||||
void sh4io_write_const(u32 addr, u32 data)
|
||||
static void sh4io_write_const(u32 addr, u32 data)
|
||||
{
|
||||
INFO_LOG(SH4, "sh4io: Const write ignored @@ %08X <- %08X", addr, data);
|
||||
}
|
||||
|
||||
void sh4_rio_reg(Array<RegisterStruct>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf)
|
||||
template<class T>
|
||||
void sh4_rio_reg(T& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf)
|
||||
{
|
||||
u32 idx=(addr&255)/4;
|
||||
|
||||
verify(idx<arr.Size);
|
||||
verify(idx < arr.size());
|
||||
|
||||
arr[idx].flags = flags | REG_ACCESS_32;
|
||||
arr[idx].flags = flags;
|
||||
|
||||
if (flags == RIO_NO_ACCESS)
|
||||
{
|
||||
|
@ -71,9 +71,18 @@ void sh4_rio_reg(Array<RegisterStruct>& arr, u32 addr, RegIO flags, u32 sz, RegR
|
|||
arr[idx].writeFunctionAddr=wf==0?&sh4io_write_noacc:wf;
|
||||
}
|
||||
}
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 5>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 8>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 9>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 10>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 12>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 16>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 17>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 18>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
template void sh4_rio_reg(std::array<RegisterStruct, 19>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rf, RegWriteAddrFP* wf);
|
||||
|
||||
template<u32 sz>
|
||||
u32 sh4_rio_read(Array<RegisterStruct>& sb_regs, u32 addr)
|
||||
template<u32 sz, class T>
|
||||
u32 sh4_rio_read(T& regs, u32 addr)
|
||||
{
|
||||
u32 offset = addr&255;
|
||||
#ifdef TRACE
|
||||
|
@ -86,21 +95,21 @@ u32 sh4_rio_read(Array<RegisterStruct>& sb_regs, u32 addr)
|
|||
offset>>=2;
|
||||
|
||||
#ifdef TRACE
|
||||
if (sb_regs[offset].flags & sz)
|
||||
if (regs[offset].flags & sz)
|
||||
{
|
||||
#endif
|
||||
if (!(sb_regs[offset].flags & REG_RF) )
|
||||
if (!(regs[offset].flags & REG_RF) )
|
||||
{
|
||||
if (sz==4)
|
||||
return sb_regs[offset].data32;
|
||||
return regs[offset].data32;
|
||||
else if (sz==2)
|
||||
return sb_regs[offset].data16;
|
||||
return regs[offset].data16;
|
||||
else
|
||||
return sb_regs[offset].data8;
|
||||
return regs[offset].data8;
|
||||
}
|
||||
else
|
||||
{
|
||||
return sb_regs[offset].readFunctionAddr(addr);
|
||||
return regs[offset].readFunctionAddr(addr);
|
||||
}
|
||||
#ifdef TRACE
|
||||
}
|
||||
|
@ -112,8 +121,8 @@ u32 sh4_rio_read(Array<RegisterStruct>& sb_regs, u32 addr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
template<u32 sz>
|
||||
void sh4_rio_write(Array<RegisterStruct>& sb_regs, u32 addr, u32 data)
|
||||
template<u32 sz, class T>
|
||||
void sh4_rio_write(T& regs, u32 addr, u32 data)
|
||||
{
|
||||
u32 offset = addr&255;
|
||||
#ifdef TRACE
|
||||
|
@ -124,23 +133,23 @@ void sh4_rio_write(Array<RegisterStruct>& sb_regs, u32 addr, u32 data)
|
|||
#endif
|
||||
offset>>=2;
|
||||
#ifdef TRACE
|
||||
if (sb_regs[offset].flags & sz)
|
||||
if (regs[offset].flags & sz)
|
||||
{
|
||||
#endif
|
||||
if (!(sb_regs[offset].flags & REG_WF) )
|
||||
if (!(regs[offset].flags & REG_WF) )
|
||||
{
|
||||
if (sz==4)
|
||||
sb_regs[offset].data32=data;
|
||||
regs[offset].data32=data;
|
||||
else if (sz==2)
|
||||
sb_regs[offset].data16=(u16)data;
|
||||
regs[offset].data16=(u16)data;
|
||||
else
|
||||
sb_regs[offset].data8=(u8)data;
|
||||
regs[offset].data8=(u8)data;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//printf("RSW: %08X\n",addr);
|
||||
sb_regs[offset].writeFunctionAddr(addr,data);
|
||||
regs[offset].writeFunctionAddr(addr,data);
|
||||
return;
|
||||
}
|
||||
#ifdef TRACE
|
||||
|
@ -794,25 +803,30 @@ void DYNACALL WriteMem_area7_OCR_T(u32 addr,T data)
|
|||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
static void init_regs(T& regs)
|
||||
{
|
||||
for (auto& reg : regs)
|
||||
{
|
||||
reg.flags = RIO_NO_ACCESS;
|
||||
reg.readFunctionAddr = &sh4io_read_noacc;
|
||||
reg.writeFunctionAddr = &sh4io_write_noacc;
|
||||
}
|
||||
}
|
||||
|
||||
//Init/Res/Term
|
||||
void sh4_mmr_init()
|
||||
{
|
||||
OnChipRAM.Resize(OnChipRAM_SIZE,false);
|
||||
|
||||
for (u32 i=0;i<30;i++)
|
||||
{
|
||||
if (i<CCN.Size) sh4_rio_reg(CCN,CCN_BASE_addr+i*4,RIO_NO_ACCESS,32); //(16,true); //CCN : 14 registers
|
||||
if (i<UBC.Size) sh4_rio_reg(UBC,UBC_BASE_addr+i*4,RIO_NO_ACCESS,32); //(9,true); //UBC : 9 registers
|
||||
if (i<BSC.Size) sh4_rio_reg(BSC,BSC_BASE_addr+i*4,RIO_NO_ACCESS,32); //(19,true); //BSC : 18 registers
|
||||
if (i<DMAC.Size) sh4_rio_reg(DMAC,DMAC_BASE_addr+i*4,RIO_NO_ACCESS,32); //(17,true); //DMAC : 17 registers
|
||||
if (i<CPG.Size) sh4_rio_reg(CPG,CPG_BASE_addr+i*4,RIO_NO_ACCESS,32); //(5,true); //CPG : 5 registers
|
||||
if (i<RTC.Size) sh4_rio_reg(RTC,RTC_BASE_addr+i*4,RIO_NO_ACCESS,32); //(16,true); //RTC : 16 registers
|
||||
if (i<INTC.Size) sh4_rio_reg(INTC,INTC_BASE_addr+i*4,RIO_NO_ACCESS,32); //(4,true); //INTC : 4 registers
|
||||
if (i<TMU.Size) sh4_rio_reg(TMU,TMU_BASE_addr+i*4,RIO_NO_ACCESS,32); //(12,true); //TMU : 12 registers
|
||||
if (i<SCI.Size) sh4_rio_reg(SCI,SCI_BASE_addr+i*4,RIO_NO_ACCESS,32); //(8,true); //SCI : 8 registers
|
||||
if (i<SCIF.Size) sh4_rio_reg(SCIF,SCIF_BASE_addr+i*4,RIO_NO_ACCESS,32); //(10,true); //SCIF : 10 registers
|
||||
}
|
||||
init_regs(CCN);
|
||||
init_regs(UBC);
|
||||
init_regs(BSC);
|
||||
init_regs(DMAC);
|
||||
init_regs(CPG);
|
||||
init_regs(RTC);
|
||||
init_regs(INTC);
|
||||
init_regs(TMU);
|
||||
init_regs(SCI);
|
||||
init_regs(SCIF);
|
||||
|
||||
//initialise Register structs
|
||||
bsc_init();
|
||||
|
@ -830,11 +844,28 @@ void sh4_mmr_reset(bool hard)
|
|||
{
|
||||
if (hard)
|
||||
{
|
||||
for (int i = 0; i < ARRAY_SIZE(AllRegisters); i++)
|
||||
for (int j = 0; j < AllRegisters[i]->Size; j++)
|
||||
(*AllRegisters[i])[j].reset();
|
||||
for (auto& reg : CCN)
|
||||
reg.reset();
|
||||
for (auto& reg : UBC)
|
||||
reg.reset();
|
||||
for (auto& reg : BSC)
|
||||
reg.reset();
|
||||
for (auto& reg : DMAC)
|
||||
reg.reset();
|
||||
for (auto& reg : CPG)
|
||||
reg.reset();
|
||||
for (auto& reg : RTC)
|
||||
reg.reset();
|
||||
for (auto& reg : INTC)
|
||||
reg.reset();
|
||||
for (auto& reg : TMU)
|
||||
reg.reset();
|
||||
for (auto& reg : SCI)
|
||||
reg.reset();
|
||||
for (auto& reg : SCIF)
|
||||
reg.reset();
|
||||
}
|
||||
OnChipRAM.Zero();
|
||||
OnChipRAM = {};
|
||||
//Reset register values
|
||||
bsc_reset(hard);
|
||||
ccn_reset();
|
||||
|
@ -859,7 +890,6 @@ void sh4_mmr_term()
|
|||
cpg_term();
|
||||
ccn_term();
|
||||
bsc_term();
|
||||
OnChipRAM.Free();
|
||||
}
|
||||
//Mem map :)
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#pragma once
|
||||
#include <array>
|
||||
#include "types.h"
|
||||
#include "../sh4/sh4_if.h"
|
||||
|
||||
|
@ -12,16 +13,16 @@ void map_p4();
|
|||
|
||||
#define sq_both ((u8*)sh4rcb.sq_buffer)
|
||||
|
||||
extern Array<RegisterStruct> CCN; //CCN : 14 registers
|
||||
extern Array<RegisterStruct> UBC; //UBC : 9 registers
|
||||
extern Array<RegisterStruct> BSC; //BSC : 18 registers
|
||||
extern Array<RegisterStruct> DMAC; //DMAC : 17 registers
|
||||
extern Array<RegisterStruct> CPG; //CPG : 5 registers
|
||||
extern Array<RegisterStruct> RTC; //RTC : 16 registers
|
||||
extern Array<RegisterStruct> INTC; //INTC : 4 registers
|
||||
extern Array<RegisterStruct> TMU; //TMU : 12 registers
|
||||
extern Array<RegisterStruct> SCI; //SCI : 8 registers
|
||||
extern Array<RegisterStruct> SCIF; //SCIF : 10 registers
|
||||
extern std::array<RegisterStruct, 18> CCN;
|
||||
extern std::array<RegisterStruct, 9> UBC;
|
||||
extern std::array<RegisterStruct, 19> BSC;
|
||||
extern std::array<RegisterStruct, 17> DMAC;
|
||||
extern std::array<RegisterStruct, 5> CPG;
|
||||
extern std::array<RegisterStruct, 16> RTC;
|
||||
extern std::array<RegisterStruct, 5> INTC;
|
||||
extern std::array<RegisterStruct, 12> TMU;
|
||||
extern std::array<RegisterStruct, 8> SCI;
|
||||
extern std::array<RegisterStruct, 10> SCIF;
|
||||
|
||||
/*
|
||||
//Region P4
|
||||
|
@ -38,7 +39,8 @@ void sh4_mmr_init();
|
|||
void sh4_mmr_reset(bool hard);
|
||||
void sh4_mmr_term();
|
||||
|
||||
void sh4_rio_reg(Array<RegisterStruct>& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rp=0, RegWriteAddrFP* wp=0);
|
||||
template<typename T>
|
||||
void sh4_rio_reg(T& arr, u32 addr, RegIO flags, u32 sz, RegReadAddrFP* rp=0, RegWriteAddrFP* wp=0);
|
||||
|
||||
#define A7_REG_HASH(addr) ((addr>>16)&0x1FFF)
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "hw/aica/aica.h"
|
||||
#include "hw/aica/sgc_if.h"
|
||||
#include "hw/arm7/arm7.h"
|
||||
#include "hw/holly/sb.h"
|
||||
#include "hw/holly/sb_mem.h"
|
||||
#include "hw/flashrom/flashrom.h"
|
||||
#include "hw/mem/_vmem.h"
|
||||
|
@ -69,7 +70,6 @@ extern s16 cdda_sector[CDDA_SIZE];
|
|||
extern u32 cdda_index;
|
||||
|
||||
//./core/hw/holly/sb.o
|
||||
extern Array<RegisterStruct> sb_regs;
|
||||
extern u32 SB_ISTNRM;
|
||||
extern u32 SB_FFST_rc;
|
||||
extern u32 SB_FFST;
|
||||
|
@ -151,17 +151,7 @@ extern bool pal_needs_update;
|
|||
extern VArray2 vram;
|
||||
|
||||
//./core/hw/sh4/sh4_mmr.o
|
||||
extern Array<u8> OnChipRAM;
|
||||
extern Array<RegisterStruct> CCN; //CCN : 14 registers
|
||||
extern Array<RegisterStruct> UBC; //UBC : 9 registers
|
||||
extern Array<RegisterStruct> BSC; //BSC : 18 registers
|
||||
extern Array<RegisterStruct> DMAC; //DMAC : 17 registers
|
||||
extern Array<RegisterStruct> CPG; //CPG : 5 registers
|
||||
extern Array<RegisterStruct> RTC; //RTC : 16 registers
|
||||
extern Array<RegisterStruct> INTC; //INTC : 4 registers
|
||||
extern Array<RegisterStruct> TMU; //TMU : 12 registers
|
||||
extern Array<RegisterStruct> SCI; //SCI : 8 registers
|
||||
extern Array<RegisterStruct> SCIF; //SCIF : 10 registers
|
||||
extern std::array<u8, OnChipRAM_SIZE> OnChipRAM;
|
||||
|
||||
//./core/hw/sh4/sh4_mem.o
|
||||
extern VArray2 mem_b;
|
||||
|
@ -241,7 +231,7 @@ extern u32 reg_dimm_parameterl;
|
|||
extern u32 reg_dimm_parameterh;
|
||||
extern u32 reg_dimm_status;
|
||||
|
||||
bool rc_serialize(void *src, unsigned int src_size, void **dest, unsigned int *total_size)
|
||||
bool rc_serialize(const void *src, unsigned int src_size, void **dest, unsigned int *total_size)
|
||||
{
|
||||
if ( *dest != NULL )
|
||||
{
|
||||
|
@ -265,33 +255,30 @@ bool rc_unserialize(void *src, unsigned int src_size, void **dest, unsigned int
|
|||
return true ;
|
||||
}
|
||||
|
||||
bool register_serialize(Array<RegisterStruct>& regs,void **data, unsigned int *total_size )
|
||||
template<typename T>
|
||||
bool register_serialize(const T& regs,void **data, unsigned int *total_size )
|
||||
{
|
||||
int i = 0 ;
|
||||
for (const auto& reg : regs)
|
||||
REICAST_S(reg.data32);
|
||||
|
||||
for ( i = 0 ; i < regs.Size ; i++ )
|
||||
{
|
||||
REICAST_S(regs.data[i].data32) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool register_unserialize(Array<RegisterStruct>& regs,void **data, unsigned int *total_size, serialize_version_enum version)
|
||||
template<typename T>
|
||||
bool register_unserialize(T& regs,void **data, unsigned int *total_size, serialize_version_enum version)
|
||||
{
|
||||
int i = 0 ;
|
||||
u32 dummy = 0 ;
|
||||
u32 dummy = 0;
|
||||
|
||||
for ( i = 0 ; i < regs.Size ; i++ )
|
||||
for (auto& reg : regs)
|
||||
{
|
||||
if (version < V5)
|
||||
REICAST_US(dummy); // regs.data[i].flags
|
||||
if ( ! (regs.data[i].flags & REG_RF) )
|
||||
REICAST_US(regs.data[i].data32) ;
|
||||
if (!(reg.flags & REG_RF))
|
||||
REICAST_US(reg.data32);
|
||||
else
|
||||
REICAST_US(dummy) ;
|
||||
REICAST_US(dummy);
|
||||
}
|
||||
return true ;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dc_serialize(void **data, unsigned int *total_size)
|
||||
|
@ -403,7 +390,7 @@ bool dc_serialize(void **data, unsigned int *total_size)
|
|||
|
||||
REICAST_SA(vram.data, vram.size);
|
||||
|
||||
REICAST_SA(OnChipRAM.data,OnChipRAM_SIZE);
|
||||
REICAST_SA(OnChipRAM.data(), OnChipRAM_SIZE);
|
||||
|
||||
register_serialize(CCN, data, total_size) ;
|
||||
register_serialize(UBC, data, total_size) ;
|
||||
|
@ -664,7 +651,7 @@ static bool dc_unserialize_libretro(void **data, unsigned int *total_size)
|
|||
|
||||
REICAST_USA(vram.data, vram.size);
|
||||
|
||||
REICAST_USA(OnChipRAM.data,OnChipRAM_SIZE);
|
||||
REICAST_USA(OnChipRAM.data(), OnChipRAM_SIZE);
|
||||
|
||||
register_unserialize(CCN, data, total_size, V9_LIBRETRO) ;
|
||||
register_unserialize(UBC, data, total_size, V9_LIBRETRO) ;
|
||||
|
@ -987,7 +974,7 @@ bool dc_unserialize(void **data, unsigned int *total_size)
|
|||
REICAST_USA(vram.data, vram.size);
|
||||
pal_needs_update = true;
|
||||
|
||||
REICAST_USA(OnChipRAM.data,OnChipRAM_SIZE);
|
||||
REICAST_USA(OnChipRAM.data(), OnChipRAM_SIZE);
|
||||
|
||||
register_unserialize(CCN, data, total_size, version) ;
|
||||
register_unserialize(UBC, data, total_size, version) ;
|
||||
|
|
141
core/stdclass.h
141
core/stdclass.h
|
@ -20,147 +20,6 @@
|
|||
#define PAGE_MASK (PAGE_SIZE-1)
|
||||
#endif
|
||||
|
||||
//Commonly used classes across the project
|
||||
//Simple Array class for helping me out ;P
|
||||
template<class T>
|
||||
class Array
|
||||
{
|
||||
public:
|
||||
T* data;
|
||||
u32 Size;
|
||||
|
||||
Array(T* Source,u32 ellements)
|
||||
{
|
||||
//initialise array
|
||||
data=Source;
|
||||
Size=ellements;
|
||||
}
|
||||
|
||||
Array(u32 ellements)
|
||||
{
|
||||
//initialise array
|
||||
data=0;
|
||||
Resize(ellements,false);
|
||||
Size=ellements;
|
||||
}
|
||||
|
||||
Array(u32 ellements,bool zero)
|
||||
{
|
||||
//initialise array
|
||||
data=0;
|
||||
Resize(ellements,zero);
|
||||
Size=ellements;
|
||||
}
|
||||
|
||||
Array()
|
||||
{
|
||||
//initialise array
|
||||
data=0;
|
||||
Size=0;
|
||||
}
|
||||
|
||||
~Array()
|
||||
{
|
||||
if (data)
|
||||
{
|
||||
#ifdef MEM_ALLOC_TRACE
|
||||
DEBUG_LOG(COMMON, "WARNING : DESTRUCTOR WITH NON FREED ARRAY [arrayid:%d]", id);
|
||||
#endif
|
||||
Free();
|
||||
}
|
||||
}
|
||||
|
||||
void SetPtr(T* Source,u32 ellements)
|
||||
{
|
||||
//initialise array
|
||||
Free();
|
||||
data=Source;
|
||||
Size=ellements;
|
||||
}
|
||||
|
||||
T* Resize(u32 size,bool bZero)
|
||||
{
|
||||
if (size==0)
|
||||
{
|
||||
if (data)
|
||||
{
|
||||
#ifdef MEM_ALLOC_TRACE
|
||||
DEBUG_LOG(COMMON, "Freeing data -> resize to zero[Array:%d]", id);
|
||||
#endif
|
||||
Free();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!data)
|
||||
data=(T*)malloc(size*sizeof(T));
|
||||
else
|
||||
data=(T*)realloc(data,size*sizeof(T));
|
||||
|
||||
//TODO : Optimise this
|
||||
//if we allocated more , Zero it out
|
||||
if (bZero)
|
||||
{
|
||||
if (size>Size)
|
||||
{
|
||||
for (u32 i=Size;i<size;i++)
|
||||
{
|
||||
u8*p =(u8*)&data[i];
|
||||
for (size_t j=0;j<sizeof(T);j++)
|
||||
{
|
||||
p[j]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Size=size;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void Zero()
|
||||
{
|
||||
memset(data,0,sizeof(T)*Size);
|
||||
}
|
||||
|
||||
void Free()
|
||||
{
|
||||
if (Size != 0)
|
||||
{
|
||||
if (data)
|
||||
free(data);
|
||||
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INLINE T& operator [](const u32 i)
|
||||
{
|
||||
#ifdef MEM_BOUND_CHECK
|
||||
if (i>=Size)
|
||||
{
|
||||
ERROR_LOG(COMMON, "Error: Array %d , index out of range (%d > %d)", id, i, Size - 1);
|
||||
MEM_DO_BREAK;
|
||||
}
|
||||
#endif
|
||||
return data[i];
|
||||
}
|
||||
|
||||
INLINE T& operator [](const s32 i)
|
||||
{
|
||||
#ifdef MEM_BOUND_CHECK
|
||||
if (!(i>=0 && i<(s32)Size))
|
||||
{
|
||||
ERROR_LOG(COMMON, "Error: Array %d , index out of range (%d > %d)", id, i, Size - 1);
|
||||
MEM_DO_BREAK;
|
||||
}
|
||||
#endif
|
||||
return data[i];
|
||||
}
|
||||
};
|
||||
|
||||
//Windoze code
|
||||
//Threads
|
||||
|
||||
#if !defined(HOST_NO_THREADS)
|
||||
|
|
|
@ -302,7 +302,7 @@ using namespace std;
|
|||
void os_DebugBreak();
|
||||
#define dbgbreak os_DebugBreak()
|
||||
|
||||
bool rc_serialize(void *src, unsigned int src_size, void **dest, unsigned int *total_size) ;
|
||||
bool rc_serialize(const void *src, unsigned int src_size, void **dest, unsigned int *total_size) ;
|
||||
bool rc_unserialize(void *src, unsigned int src_size, void **dest, unsigned int *total_size);
|
||||
bool dc_serialize(void **data, unsigned int *total_size);
|
||||
bool dc_unserialize(void **data, unsigned int *total_size);
|
||||
|
@ -341,8 +341,6 @@ typedef void RegWriteAddrFP(u32 addr, u32 data);
|
|||
*/
|
||||
enum RegStructFlags
|
||||
{
|
||||
REG_ACCESS_32=4,
|
||||
|
||||
REG_RF=8,
|
||||
REG_WF=16,
|
||||
REG_RO=32,
|
||||
|
|
Loading…
Reference in New Issue