IR:RST Shared Memory

From 3dbrew
Revision as of 01:17, 26 October 2014 by Smea (talk | contribs) (Created page with "This page describes the format of the ir:rst's shared memory. It contains the current state of New 3DS input device, ie the c-stick and the ZL/ZR shoulder buttons...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This page describes the format of the ir:rst's shared memory. It contains the current state of New 3DS input device, ie the c-stick and the ZL/ZR shoulder buttons.

Size: 0x88 ?

Offset 0x0

Relative offset Size Description
0x0 0x4 A counter that ranges from 0 to 7, presumably to indicate which entry was last updated
0x4 0x4 Unused ? (value 0x0)
0x8 0x80 Array of 8 entries, where each entry (see below) is 0x10-bytes.

IR module first updates index0, then index1, and so on. When updating the array when the index is already 7, the index is reset to 0.

PAD State

Bit Description
14 ZL
15 ZR
24 C-stick right
25 C-stick left
26 C-stick up
27 C-stick down

The ir:rst PAD entries are the same format as HID ones and meant to be ORd with them (they are complementary, there is no overlap in used bits).

Entry format

Relative offset Size Description
0x0 0x4 Current PAD state.
0x4 0x4 PAD state for buttons which were pressed(bitmasks which changed from value 0 to value 1) since the last HID update.
0x8 0x4 PAD state for buttons which were released(bitmasks which changed from value 1 to value 0) since the last HID update.
0xC 0x4 This stores c-stick info: the low s16 is the X coordinate, the high s16 is the Y coordinate. The c-stick center is exactly 0 for these fields. The range for these fields is approximately: -0x9C(bottom/left) - 0x9C(top/right).