Mario Kart 64
Loading...
Searching...
No Matches
controller.h
Go to the documentation of this file.
1#ifndef _CONTROLLER_H
2#define _CONTROLLER_H
3#include "PR/os_internal.h"
4#include "PR/os.h"
5#include "PR/rcp.h"
6
7//should go somewhere else but
8#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0])))
9#define CHNL_ERR(format) ((format.rxsize & CHNL_ERR_MASK) >> 4)
10
11typedef struct
12{
13 /* 0x0 */ u32 ramarray[15];
14 /* 0x3C */ u32 pifstatus;
15} OSPifRam;
16
17typedef struct
18{
19 /* 0x0 */ u8 dummy;
20 /* 0x1 */ u8 txsize;
21 /* 0x2 */ u8 rxsize;
22 /* 0x3 */ u8 cmd;
23 /* 0x4 */ u16 button;
24 /* 0x6 */ s8 stick_x;
25 /* 0x7 */ s8 stick_y;
27
28typedef struct
29{
30 /* 0x0 */ u8 dummy;
31 /* 0x1 */ u8 txsize;
32 /* 0x2 */ u8 rxsize;
33 /* 0x3 */ u8 cmd;
34 /* 0x4 */ u8 typeh;
35 /* 0x5 */ u8 typel;
36 /* 0x6 */ u8 status;
37 /* 0x7 */ u8 dummy1;
39
40typedef struct
41{
42 /* 0x0 */ u8 txsize;
43 /* 0x1 */ u8 rxsize;
44 /* 0x2 */ u8 cmd;
45 /* 0x3 */ u8 typeh;
46 /* 0x4 */ u8 typel;
47 /* 0x5 */ u8 status;
49
50typedef struct
51{
52 /* 0x0 */ u8 dummy;
53 /* 0x1 */ u8 txsize;
54 /* 0x2 */ u8 rxsize;
55 /* 0x3 */ u8 cmd;
56 /* 0x4 */ u16 address;
57 /* 0x6 */ u8 data[BLOCKSIZE];
58 /* 0x26 */ u8 datacrc;
60
61typedef union {
62 /* 0x0 */ struct
63 {
64 /* 0x0 */ u8 bank;
65 /* 0x1 */ u8 page;
66 } inode_t;
67 /* 0x0 */ u16 ipage;
69
70typedef struct
71{
72 /* 0x0 */ u32 game_code;
73 /* 0x4 */ u16 company_code;
75 /* 0x8 */ u8 status;
76 /* 0x9 */ s8 reserved;
77 /* 0xA */ u16 data_sum;
78 /* 0xC */ u8 ext_name[PFS_FILE_EXT_LEN];
79 /* 0x10 */ u8 game_name[PFS_FILE_NAME_LEN];
80} __OSDir;
81
82typedef struct
83{
84 /* 0x0 */ __OSInodeUnit inode_page[128];
85} __OSInode;
86
87typedef struct
88{
89 /* 0x0 */ u32 repaired;
90 /* 0x4 */ u32 random;
91 /* 0x8 */ u64 serial_mid;
92 /* 0x10 */ u64 serial_low;
93 /* 0x18 */ u16 deviceid;
94 /* 0x1A */ u8 banks;
95 /* 0x1B */ u8 version;
96 /* 0x1C */ u16 checksum;
99
100typedef struct
101{
102 /* 0x0 */ u8 txsize;
103 /* 0x1 */ u8 rxsize;
104 /* 0x2 */ u8 cmd;
105 /* 0x3 */ u8 address;
106 /* 0x4 */ u8 data[EEPROM_BLOCK_SIZE];
108
109//from: http://en64.shoutwiki.com/wiki/SI_Registers_Detailed#CONT_CMD_Usage
110#define CONT_CMD_REQUEST_STATUS 0
111#define CONT_CMD_READ_BUTTON 1
112#define CONT_CMD_READ_MEMPACK 2
113#define CONT_CMD_WRITE_MEMPACK 3
114#define CONT_CMD_READ_EEPROM 4
115#define CONT_CMD_WRITE_EEPROM 5
116#define CONT_CMD_RESET 0xff
117
118#define CONT_CMD_REQUEST_STATUS_TX 1
119#define CONT_CMD_READ_BUTTON_TX 1
120#define CONT_CMD_READ_MEMPACK_TX 3
121#define CONT_CMD_WRITE_MEMPACK_TX 35
122#define CONT_CMD_READ_EEPROM_TX 2
123#define CONT_CMD_WRITE_EEPROM_TX 10
124#define CONT_CMD_RESET_TX 1
125
126#define CONT_CMD_REQUEST_STATUS_RX 3
127#define CONT_CMD_READ_BUTTON_RX 4
128#define CONT_CMD_READ_MEMPACK_RX 33
129#define CONT_CMD_WRITE_MEMPACK_RX 1
130#define CONT_CMD_READ_EEPROM_RX 8
131#define CONT_CMD_WRITE_EEPROM_RX 1
132#define CONT_CMD_RESET_RX 3
133
134#define CONT_CMD_NOP 0xff
135#define CONT_CMD_END 0xfe //indicates end of a command
136#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command
137
138#define DIR_STATUS_EMPTY 0
139#define DIR_STATUS_UNKNOWN 1
140#define DIR_STATUS_OCCUPIED 2
141
142
143typedef struct
144{
145 /* 0x0 */ __OSInode inode;
146 /* 0x100 */ u8 bank;
147 /* 0x101 */ u8 map[256];
149
150extern s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
151u16 __osSumcalc(u8 *ptr, int length);
157s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank);
160s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u16 *sum, u8 bank, __OSInodeUnit *last_page, int flag);
162s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer);
163s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force);
165void __osPackRequestData(u8 cmd);
166void __osPfsRequestData(u8 cmd);
169u8 __osContDataCrc(u8 *data);
170s32 __osPfsGetStatus(OSMesgQueue *queue, int channel);
171
172extern u8 _osLastSentSiCmd;
174extern OSMesg __osEepromTimerMsg;
175extern OSMesgQueue __osEepromTimerQ;
180
181//some version of this almost certainly existed since there's plenty of times where it's used right before a return 0
182#define ERRCK(fn) \
183 ret = fn; \
184 if (ret != 0) \
185 return ret;
186
187#define SET_ACTIVEBANK_TO_ZERO \
188 if (pfs->activebank != 0) \
189 { \
190 pfs->activebank = 0; \
191 ERRCK(__osPfsSelectBank(pfs)) \
192 }
193
194#define PFS_CHECK_ID \
195 if (__osCheckId(pfs) == PFS_ERR_NEW_PACK) \
196 return PFS_ERR_NEW_PACK;
197#endif
198
199#define PFS_CHECK_STATUS \
200 if ((pfs->status & PFS_INITIALIZED) == 0) \
201 return PFS_ERR_INVALID;
202
203#define PFS_GET_STATUS \
204 __osSiGetAccess(); \
205 ret = __osPfsGetStatus(queue, channel); \
206 __osSiRelAccess(); \
207 if (ret != 0) \
208 return ret;
s16 D_8015F6E8
Definition code_800029B0.c:86
void __osPackRequestData(u8 cmd)
Definition osContInit.c:67
s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum)
Definition contpfs.c:19
OSPifRam __osPfsPifRam
Definition osPfsIsPlug.c:6
OSMesgQueue __osEepromTimerQ
s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int *first_page, u8 bank, int *decleared, int *last_page)
Definition osPfsAllocateFile.c:108
void __osContGetInitData(u8 *pattern, OSContStatus *data)
Definition osContInit.c:47
u8 __osContDataCrc(u8 *data)
Definition crc.c:23
s32 __osPfsGetStatus(OSMesgQueue *queue, int channel)
Definition osPfsInit.c:27
s32 __osPfsSelectBank(OSPfs *pfs)
Definition contpfs.c:291
s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer)
Definition contramread.c:8
u8 __osContAddressCrc(u16 addr)
Definition crc.c:3
OSPifRam __osContPifRam
OSTimer __osEepromTimer
u16 __osSumcalc(u8 *ptr, int length)
Definition contpfs.c:4
s32 __osCheckId(OSPfs *pfs)
Definition contpfs.c:202
s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp)
Definition contpfs.c:116
s32 __osEepStatus(OSMesgQueue *, OSContStatus *)
s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u16 *sum, u8 bank, __OSInodeUnit *last_page, int flag)
Definition osPfsDeleteFile.c:63
OSPifRam __osEepPifRam
Definition osEepromWrite.c:4
void __osPfsRequestData(u8 cmd)
Definition osPfsIsPlug.c:49
s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank)
Definition contpfs.c:227
s32 __osGetId(OSPfs *pfs)
Definition contpfs.c:151
void __osPfsGetInitData(u8 *pattern, OSContStatus *data)
Definition osPfsIsPlug.c:78
u8 _osContNumControllers
Definition osContInit.c:13
s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force)
Definition contramwrite.c:8
s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank)
Definition osPfsDeleteFile.c:110
OSMesg __osEepromTimerMsg
s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid)
Definition contpfs.c:37
u8 _osLastSentSiCmd
Definition osContInit.c:12
unsigned long long int u64
Definition llconv.c:2
#define PFS_FILE_EXT_LEN
Definition os.h:415
#define EEPROM_BLOCK_SIZE
Definition os.h:449
#define PFS_FILE_NAME_LEN
Definition os.h:414
#define BLOCKSIZE
Definition os.h:416
Definition controller.h:12
u32 pifstatus
Definition controller.h:14
Definition os_time.h:10
Definition controller.h:101
u8 address
Definition controller.h:105
u8 txsize
Definition controller.h:102
u8 cmd
Definition controller.h:104
u8 rxsize
Definition controller.h:103
Definition controller.h:51
u8 txsize
Definition controller.h:53
u8 dummy
Definition controller.h:52
u8 rxsize
Definition controller.h:54
u8 cmd
Definition controller.h:55
u8 datacrc
Definition controller.h:58
u16 address
Definition controller.h:56
Definition controller.h:18
u8 cmd
Definition controller.h:22
u8 dummy
Definition controller.h:19
u8 rxsize
Definition controller.h:21
s8 stick_y
Definition controller.h:25
s8 stick_x
Definition controller.h:24
u16 button
Definition controller.h:23
u8 txsize
Definition controller.h:20
Definition controller.h:41
u8 typel
Definition controller.h:46
u8 status
Definition controller.h:47
u8 typeh
Definition controller.h:45
u8 txsize
Definition controller.h:42
u8 rxsize
Definition controller.h:43
u8 cmd
Definition controller.h:44
Definition controller.h:29
u8 txsize
Definition controller.h:31
u8 cmd
Definition controller.h:33
u8 typeh
Definition controller.h:34
u8 status
Definition controller.h:36
u8 dummy
Definition controller.h:30
u8 rxsize
Definition controller.h:32
u8 typel
Definition controller.h:35
u8 dummy1
Definition controller.h:37
Definition controller.h:71
u8 status
Definition controller.h:75
__OSInodeUnit start_page
Definition controller.h:74
u16 company_code
Definition controller.h:73
u16 data_sum
Definition controller.h:77
u32 game_code
Definition controller.h:72
s8 reserved
Definition controller.h:76
Definition controller.h:144
u8 bank
Definition controller.h:146
__OSInode inode
Definition controller.h:145
Definition controller.h:83
Definition controller.h:88
u8 banks
Definition controller.h:94
u32 random
Definition controller.h:90
u16 checksum
Definition controller.h:96
u16 deviceid
Definition controller.h:93
u8 version
Definition controller.h:95
u32 repaired
Definition controller.h:89
u16 inverted_checksum
Definition controller.h:97
u64 serial_low
Definition controller.h:92
u64 serial_mid
Definition controller.h:91
signed int s32
Definition ultratypes.h:15
unsigned int u32
Definition ultratypes.h:16
signed char s8
Definition ultratypes.h:11
unsigned short int u16
Definition ultratypes.h:14
unsigned char u8
Definition ultratypes.h:12
Definition controller.h:61
u8 bank
Definition controller.h:64
u8 page
Definition controller.h:65
u16 ipage
Definition controller.h:67