]> Shamusworld >> Repos - virtualjaguar/blob - src/jaguar.h
d4bb73861c965915bfe84fe7eadc1cb093538957
[virtualjaguar] / src / jaguar.h
1 #ifndef __JAGUAR_H__
2 #define __JAGUAR_H__
3
4 #include "types.h"
5
6 void JaguarInit(void);
7 void JaguarReset(void);
8 void JaguarDone(void);
9
10 uint8 JaguarReadByte(uint32 offset, uint32 who = UNKNOWN);
11 uint16 JaguarReadWord(uint32 offset, uint32 who = UNKNOWN);
12 uint32 JaguarReadLong(uint32 offset, uint32 who = UNKNOWN);
13 void JaguarWriteByte(uint32 offset, uint8 data, uint32 who = UNKNOWN);
14 void JaguarWriteWord(uint32 offset, uint16 data, uint32 who = UNKNOWN);
15 void JaguarWriteLong(uint32 offset, uint32 data, uint32 who = UNKNOWN);
16
17 bool JaguarInterruptHandlerIsValid(uint32 i);
18 void JaguarDasm(uint32 offset, uint32 qt);
19
20 void JaguarExecute(uint32 * backbuffer, bool render);
21 //For testing the new system...
22 void JaguarExecuteNew(void);
23
24 // Exports from JAGUAR.CPP
25
26 extern uint8 jaguarMainRam[];
27 extern uint8 jaguarMainRom[];
28 extern uint8 jaguarBootRom[];
29 extern uint8 jaguarCDBootROM[];
30 extern bool BIOSLoaded;
31 extern bool CDBIOSLoaded;
32 extern int32 jaguarCPUInExec;
33 extern uint32 jaguarMainRomCRC32, jaguarRomSize, jaguarRunAddress;
34 extern char * jaguarEepromsPath;
35 extern const char * whoName[9];
36
37 // Some handy macros to help converting native endian to big endian (jaguar native)
38 // & vice versa
39
40 #define SET64(r, a, v)  r[(a)] = ((v) & 0xFF00000000000000) >> 56, r[(a)+1] = ((v) & 0x00FF000000000000) >> 48, \
41                                                 r[(a)+2] = ((v) & 0x0000FF0000000000) >> 40, r[(a)+3] = ((v) & 0x000000FF00000000) >> 32, \
42                                                 r[(a)+4] = ((v) & 0xFF000000) >> 24, r[(a)+5] = ((v) & 0x00FF0000) >> 16, \
43                                                 r[(a)+6] = ((v) & 0x0000FF00) >> 8, r[(a)+7] = (v) & 0x000000FF
44 #define GET64(r, a)             (((uint64)r[(a)] << 56) | ((uint64)r[(a)+1] << 48) | \
45                                                 ((uint64)r[(a)+2] << 40) | ((uint64)r[(a)+3] << 32) | \
46                                                 ((uint64)r[(a)+4] << 24) | ((uint64)r[(a)+5] << 16) | \
47                                                 ((uint64)r[(a)+6] << 8) | (uint64)r[(a)+7])
48 #define SET32(r, a, v)  r[(a)] = ((v) & 0xFF000000) >> 24, r[(a)+1] = ((v) & 0x00FF0000) >> 16, \
49                                                 r[(a)+2] = ((v) & 0x0000FF00) >> 8, r[(a)+3] = (v) & 0x000000FF
50 #define GET32(r, a)             ((r[(a)] << 24) | (r[(a)+1] << 16) | (r[(a)+2] << 8) | r[(a)+3])
51 #define SET16(r, a, v)  r[(a)] = ((v) & 0xFF00) >> 8, r[(a)+1] = (v) & 0xFF
52 #define GET16(r, a)             ((r[(a)] << 8) | r[(a)+1])
53
54 // Various clock rates
55
56 #define M68K_CLOCK_RATE_PAL             13296950
57 #define M68K_CLOCK_RATE_NTSC    13295453
58 #define RISC_CLOCK_RATE_PAL             26593900
59 #define RISC_CLOCK_RATE_NTSC    26590906
60
61 // Stuff for IRQ handling
62
63 #define ASSERT_LINE             1
64 #define CLEAR_LINE              0
65
66 //Temp debug stuff (will go away soon, so don't depend on these)
67
68 void DumpMainMemory(void);
69 uint8 * GetRamPtr(void);
70
71 #endif  // __JAGUAR_H__