mirror of
https://github.com/ogoguel/activegs-ios.git
synced 2024-12-22 15:30:36 +00:00
79 lines
1.7 KiB
C++
79 lines
1.7 KiB
C++
/*
|
|
ActiveGS, Copyright 2004-2016 Olivier Goguel, https://github.com/ogoguel/ActiveGS
|
|
Based on Kegs, Copyright 2004 Kent Dickey, https://kegs.sourceforge.net
|
|
This code is covered by the GNU GPL licence
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#define CLK_IDLE 1
|
|
#define CLK_TIME 2
|
|
#define CLK_INTERNAL 3
|
|
#define CLK_BRAM1 4
|
|
#define CLK_BRAM2 5
|
|
|
|
#ifdef _WIN32
|
|
#pragma pack(push,PRAGMA_PACK_SIZE)
|
|
#endif
|
|
|
|
class s_clock : public serialized
|
|
{
|
|
public:
|
|
int g_clk_mode;
|
|
int g_clk_read;
|
|
int g_clk_reg1 ;
|
|
|
|
byte g_bram[2][256];
|
|
byte *g_bram_ptr ;
|
|
|
|
word32 g_clk_cur_time ;
|
|
int g_clk_next_vbl_update ;
|
|
|
|
s_clock()
|
|
{
|
|
INIT_SERIALIZED();
|
|
|
|
g_clk_mode = CLK_IDLE;
|
|
g_clk_cur_time = 0xa0000000;
|
|
g_bram_ptr = &(g_bram[0][0]);
|
|
}
|
|
|
|
#define SERIALIZE_BRAM g_bram_ptr = (byte*)( (g_bram_ptr == &g_bram[0][0])?1:3 );
|
|
#define UNSERIALIZE_BRAM g_bram_ptr = ((intptr_t)g_bram_ptr ==1) ? &g_bram[0][0] : &g_bram[1][0]
|
|
|
|
|
|
void in(serialize* _s)
|
|
{
|
|
byte* ptr = (byte*)_s->data;
|
|
int ssize = *(int*)ptr;
|
|
if (ssize!= sizeof(*this))
|
|
ALIGNMENT_ERROR("clock",ssize,sizeof(*this));
|
|
|
|
ptr += sizeof(ssize);
|
|
|
|
memcpy(this,ptr,sizeof(*this));
|
|
UNSERIALIZE_BRAM ;
|
|
}
|
|
|
|
int out(serialize* _s, int _fastalloc)
|
|
{
|
|
int ssize = sizeof(*this);
|
|
int size = ssize + sizeof(ssize);
|
|
_s->size = size;
|
|
_s->fastalloc = _fastalloc;
|
|
_s->data = (void*)x_malloc(size,_fastalloc);
|
|
byte* ptr = (byte*) _s->data;
|
|
memcpy(ptr,&ssize,sizeof(ssize));
|
|
ptr+=sizeof(ssize);
|
|
SERIALIZE_BRAM;
|
|
memcpy(ptr,this,sizeof(*this));
|
|
UNSERIALIZE_BRAM;
|
|
return size;
|
|
}
|
|
|
|
} XCODE_PRAGMA_PACK;
|
|
#ifdef _WIN32
|
|
#pragma pack(pop)
|
|
#endif
|
|
extern s_clock g_clock;
|