]> Shamusworld >> Repos - virtualjaguar/blob - src/jaguar.h
Added fix for Unix, GET/SET64 macros
[virtualjaguar] / src / jaguar.h
1 #ifndef __JAGUAR_H__
2 #define __JAGUAR_H__
3
4 #include <string.h>     // Why??? (for memset, etc... Lazy!) Dunno why, but this just strikes me as wrong...
5 #include <stdlib.h>     // For exit()
6 #include "types.h"
7 #include "log.h"
8 #include "version.h"
9 #include "memory.h"
10 #include "m68k.h"
11 #include "tom.h"
12 #include "jerry.h"
13 #include "gpu.h"
14 #include "dsp.h"
15 #include "objectp.h"
16 #include "blitter.h"
17 #include "clock.h"
18 //#include "anajoy.h"
19 #include "joystick.h"
20 #include "dac.h"
21 #include "jagdasm.h"
22 #include "cdrom.h"
23 #include "eeprom.h"
24 //#include "cdi.h"
25 //#include "cdbios.h"
26
27 // Exports from JAGUAR.CPP
28
29 extern int32 jaguar_cpu_in_exec;
30 extern uint32 jaguar_mainRom_crc32, jaguarRomSize, jaguarRunAddress;
31 extern char * jaguar_eeproms_path;
32 extern char * whoName[9];
33
34 void jaguar_init(void);
35 void jaguar_reset(void);
36 void jaguar_done(void);
37
38 uint8 JaguarReadByte(uint32 offset, uint32 who = UNKNOWN);
39 uint16 JaguarReadWord(uint32 offset, uint32 who = UNKNOWN);
40 uint32 JaguarReadLong(uint32 offset, uint32 who = UNKNOWN);
41 void JaguarWriteByte(uint32 offset, uint8 data, uint32 who = UNKNOWN);
42 void JaguarWriteWord(uint32 offset, uint16 data, uint32 who = UNKNOWN);
43 void JaguarWriteLong(uint32 offset, uint32 data, uint32 who = UNKNOWN);
44
45 uint32 jaguar_interrupt_handler_is_valid(uint32 i);
46 void jaguar_dasm(uint32 offset, uint32 qt);
47
48 void JaguarExecute(uint32 * backbuffer, bool render);
49 //For testing the new system...
50 void JaguarExecuteNew(void);
51
52 // Some handy macros to help converting native endian to big endian (jaguar native)
53 // & vice versa
54
55 #define SET64(r, a, v)  r[(a)] = ((v) & 0xFF00000000000000) >> 56, r[(a)+1] = ((v) & 0x00FF000000000000) >> 48, \
56                                                 r[(a)+2] = ((v) & 0x0000FF0000000000) >> 40, r[(a)+3] = ((v) & 0x000000FF00000000) >> 32, \
57                                                 r[(a)+4] = ((v) & 0xFF000000) >> 24, r[(a)+5] = ((v) & 0x00FF0000) >> 16, \
58                                                 r[(a)+6] = ((v) & 0x0000FF00) >> 8, r[(a)+7] = (v) & 0x000000FF
59 #define GET64(r, a)             (((uint64)r[(a)] << 56) | ((uint64)r[(a)+1] << 48) | \
60                                                 ((uint64)r[(a)+2] << 40) | ((uint64)r[(a)+3] << 32) | \
61                                                 ((uint64)r[(a)+4] << 24) | ((uint64)r[(a)+5] << 16) | \
62                                                 ((uint64)r[(a)+6] << 8) | (uint64)r[(a)+7])
63 #define SET32(r, a, v)  r[(a)] = ((v) & 0xFF000000) >> 24, r[(a)+1] = ((v) & 0x00FF0000) >> 16, \
64                                                 r[(a)+2] = ((v) & 0x0000FF00) >> 8, r[(a)+3] = (v) & 0x000000FF
65 #define GET32(r, a)             ((r[(a)] << 24) | (r[(a)+1] << 16) | (r[(a)+2] << 8) | r[(a)+3])
66 #define SET16(r, a, v)  r[(a)] = ((v) & 0xFF00) >> 8, r[(a)+1] = (v) & 0xFF
67 #define GET16(r, a)             ((r[(a)] << 8) | r[(a)+1])
68
69 // Various clock rates
70
71 #define M68K_CLOCK_RATE_PAL             13296950
72 #define M68K_CLOCK_RATE_NTSC    13295453
73 #define RISC_CLOCK_RATE_PAL             26593900
74 #define RISC_CLOCK_RATE_NTSC    26590906
75
76 // Stuff for IRQ handling
77
78 #define ASSERT_LINE             1
79 #define CLEAR_LINE              0
80
81 //Temp debug stuff (will go away soon, so don't depend on these)
82
83 void DumpMainMemory(void);
84 uint8 * GetRamPtr(void);
85
86 #endif  // __JAGUAR_H__