aboutsummaryrefslogtreecommitdiff
path: root/source/arm_dynarec/armfn.h
blob: 4b859f93adbd86d2c054afdebd792cf679178550 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef ARMFN_H
#define ARMFN_H

#include <stdint.h>

int BlockEnter(uint8_t *addr);
void UpdateSection(void);

/* Below can only be called from generated code */

void S9xRegsToMem(void);
void S9xMemToRegs(void);

void JumpIndirect(uint8_t *pc);
void JumpDirect(uint8_t *pc);
void JumpDirectChecks(uint8_t *pc);

uint16_t S9xGetByteFast(uint32_t Address, uint8_t *StartPC);
uint16_t S9xGetWordFast(uint32_t Address, uint8_t *StartPC);
void S9xSetByteFastSA1(uint16_t Word, uint32_t Address);
void S9xSetWordFastSA1(uint16_t Word, uint32_t Address);
void S9xSetByteFastNoSA1(uint16_t Word, uint32_t Address);
void S9xSetWordFastNoSA1(uint16_t Word, uint32_t Address);

#define S9xSetByteFast (Settings.SA1 ? S9xSetByteFastSA1 : S9xSetByteFastNoSA1)
#define S9xSetWordFast (Settings.SA1 ? S9xSetWordFastSA1 : S9xSetWordFastNoSA1)

void S9xCallUnpackStatusFast(void);
void S9xCallUpdateSection(void);

void S9xCallSA1MainLoop(void);
void S9xCallSetPCBase(uint32_t Address);

void S9xCallHandleChecksWFISFX(void);
void S9xCallHandleChecksWFINoSFX(void);
void S9xCallHandleChecksNoWFISFX(void);
void S9xCallHandleChecksNoWFINoSFX(void);

#define S9xCallHandleChecksWFI (Settings.SuperFX ? S9xCallHandleChecksWFISFX : S9xCallHandleChecksWFINoSFX)
#define S9xCallHandleChecksNoWFI (Settings.SuperFX ? S9xCallHandleChecksNoWFISFX : S9xCallHandleChecksNoWFINoSFX)

void S9xCallFixCycles(void);
void S9xCallCPUShutdown(void);
void S9xCallWAIShutdown(void);

#ifndef NDEBUG
void S9xCallCheckInstruction(uint8_t opcode, uint8_t *pc);
#endif

#endif  /* ARMFN_H */