sgdk
Loading...
Searching...
No Matches
sys.h
Go to the documentation of this file.
1
10#ifndef _SYS_H_
11#define _SYS_H_
12
13
14#define PROCESS_PALETTE_FADING (1 << 0)
15#define PROCESS_BITMAP_TASK (1 << 1)
16#define PROCESS_DMA_TASK (1 << 2)
17#define PROCESS_XGM_TASK (1 << 3)
18#define PROCESS_VDP_SCROLL_TASK (1 << 4)
19
20
21#define ROM_ALIGN_BIT 17
22#define ROM_ALIGN (1 << ROM_ALIGN_BIT)
23#define ROM_ALIGN_MASK (ROM_ALIGN - 1)
24
25#define ROM_START ROM
26#define ROM_END (((u32) &_stext) + ((u32) &_sdata))
27#define ROM_SIZE ((ROM_END + ROM_ALIGN_MASK) & (~ROM_ALIGN_MASK))
28
29
30#define HINTERRUPT_CALLBACK __attribute__ ((interrupt)) void
31
32
33// exist through rom_head.c
34typedef struct
35{
36 char console[16]; /* Console Name (16) */
37 char copyright[16]; /* Copyright Information (16) */
38 char title_local[48]; /* Domestic Name (48) */
39 char title_int[48]; /* Overseas Name (48) */
40 char serial[14]; /* Serial Number (2, 12) */
41 u16 checksum; /* Checksum (2) */
42 char IOSupport[16]; /* I/O Support (16) */
43 u32 rom_start; /* ROM Start Address (4) */
44 u32 rom_end; /* ROM End Address (4) */
45 u32 ram_start; /* Start of Backup RAM (4) */
46 u32 ram_end; /* End of Backup RAM (4) */
47 char sram_sig[2]; /* "RA" for save ram (2) */
48 u16 sram_type; /* 0xF820 for save ram on odd bytes (2) */
49 u32 sram_start; /* SRAM start address - normally 0x200001 (4) */
50 u32 sram_end; /* SRAM end address - start + 2*sram_size (4) */
51 char modem_support[12]; /* Modem Support (24) */
52 char notes[40]; /* Memo (40) */
53 char region[16]; /* Country Support (16) */
54} ROMHeader;
55
56extern const ROMHeader rom_header;
57
58// size of text segment --> start of initialized data (RO)
59extern u32 _stext;
60// size of initialized data segment
61extern u32 _sdata;
62
67typedef enum
68{
69 IMMEDIATELY,
73
74
81extern VoidCallback *busErrorCB;
88extern VoidCallback *addressErrorCB;
95extern VoidCallback *illegalInstCB;
102extern VoidCallback *zeroDivideCB;
109extern VoidCallback *chkInstCB;
116extern VoidCallback *trapvInstCB;
123extern VoidCallback *privilegeViolationCB;
130extern VoidCallback *traceCB;
137extern VoidCallback *line1x1xCB;
144extern VoidCallback *errorExceptionCB;
151extern VoidCallback *intCB;
152
153
168void SYS_reset(void);
175void SYS_hardReset(void);
176
194bool SYS_doVBlankProcess(void);
226
235bool SYS_nextFrame(void);
236
263
283
297void SYS_disableInts(void);
307void SYS_enableInts(void);
308
324void SYS_setVBlankCallback(VoidCallback *CB);
325
344void SYS_setVIntCallback(VoidCallback *CB);
363void SYS_setHIntCallback(VoidCallback *CB);
374void SYS_setExtIntCallback(VoidCallback *CB);
375
382bool SYS_isInVInt(void);
383
390u16 SYS_isNTSC(void);
397u16 SYS_isPAL(void);
398
406u32 SYS_getFPS(void);
425u16 SYS_getCPULoad(void);
446void SYS_showFrameLoad(bool mean);
453void SYS_hideFrameLoad(void);
454
465bool SYS_isChecksumOk(void);
466
474void SYS_die(char *err);
475
476#endif // _SYS_H_
Definition sys.h:35
u16 SYS_getAndSetInterruptMaskLevel(u16 value)
Set the interrupt mask level to given value and return previous level.
VoidCallback * zeroDivideCB
Division by zero exception callback.
VoidCallback * line1x1xCB
Line 1x1x exception callback.
void SYS_enableInts(void)
Re-enable interrupts (Vertical, Horizontal and External).
Definition sys.c:821
void SYS_disableInts(void)
Disable interrupts (Vertical, Horizontal and External).
Definition sys.c:793
VoidCallback * intCB
Level interrupt callback.
VoidCallback * privilegeViolationCB
Privilege violation exception callback.
void SYS_hardReset(void)
Hard reset.
VoidCallback * busErrorCB
Bus error interrupt callback.
void SYS_assertReset(void)
Assert reset.
void SYS_setHIntCallback(VoidCallback *CB)
Set 'Horizontal Interrupt' callback method (need to be prefixed by HINTERRUPT_CALLBACK).
Definition sys.c:861
bool SYS_doVBlankProcess(void)
Wait for start of VBlank and do all the VBlank processing (DMA transfers, XGM driver tempo,...
Definition sys.c:653
void SYS_showFrameLoad(bool mean)
Show a cursor indicating current frame load level in scanline (top = 0% load, bottom = 100% load)
Definition sys.c:879
u16 SYS_isPAL(void)
Return != 0 if we are on a PAL system.
Definition sys.c:919
void SYS_setInterruptMaskLevel(u16 value)
Set interrupt mask level.
u16 SYS_computeChecksum(void)
Computes full ROM checksum and return it. The checksum is a custom fast 32 bit checksum converted to...
Definition sys.c:1004
u32 SYS_getFPS(void)
Returns number of Frame Per Second.
Definition sys.c:925
u16 SYS_getCPULoad(void)
Return an estimation of CPU frame load (in %)
Definition sys.c:998
fix32 SYS_getFPSAsFloat(void)
Returns number of Frame Per Second (fix32 form).
Definition sys.c:943
void SYS_setExtIntCallback(VoidCallback *CB)
Set External interrupt callback method.
Definition sys.c:867
void SYS_reset(void)
Soft reset.
void SYS_setVBlankCallback(VoidCallback *CB)
Set user 'Vertical Blank' callback method.
Definition sys.c:849
bool SYS_nextFrame(void)
End the current frame (alias for SYS_doVBlankProcess(void)).
Definition sys.c:788
VoidCallback * traceCB
Trace interrupt callback.
void SYS_hideFrameLoad(void)
Hide the frame load cursor previously enabled using SYS_showFrameLoad() method.
Definition sys.c:896
VoidCallback * addressErrorCB
Address error interrupt callback.
VBlankProcessTime
Define at which period to do VBlank process (see SYS_doVBlankProcess() method)
Definition sys.h:68
@ ON_VBLANK
Definition sys.h:70
@ ON_VBLANK_START
Definition sys.h:71
bool SYS_doVBlankProcessEx(VBlankProcessTime processTime)
Do all the VBlank processing (DMA transfers, XGM driver tempo, Joypad pooling..)
Definition sys.c:658
void SYS_setVIntCallback(VoidCallback *CB)
Set 'Vertical Interrupt' callback method, prefer SYS_setVBlankCallback(..) when possible.
Definition sys.c:855
void SYS_die(char *err)
Die with the specified error message. Program execution is interrupted.
Definition sys.c:1043
VoidCallback * chkInstCB
CHK instruction interrupt callback.
VoidCallback * trapvInstCB
TRAPV instruction interrupt callback.
bool SYS_getShowFrameLoad()
Returns TRUE if frame load is currently displayed, FALSE otherwise.
Definition sys.c:874
VoidCallback * illegalInstCB
Illegal instruction exception callback.
bool SYS_isInVInt(void)
Return TRUE if we are in the V-Interrupt process.
Definition sys.c:909
VoidCallback * errorExceptionCB
Error exception callback.
u16 SYS_getInterruptMaskLevel(void)
Return current interrupt mask level.
bool SYS_isChecksumOk(void)
Returns TRUE if ROM checksum is ok (correspond to rom_head.checksum field)
Definition sys.c:1034
u16 SYS_isNTSC(void)
Return != 0 if we are on a NTSC system.
Definition sys.c:914
unsigned long u32
Definition types.h:105
s32 fix32
Definition types.h:186
unsigned short u16
Definition types.h:100