Files

GBDK example for using the Accelerometer sensor on the Game Boy MBC7 Cartridge

This example demonstrates using data from the accelerometer sensor on MBC7 cartridges such as used by Kirby Tilt 'n' Tumble.

Important hardware information

Do not use regular vsync() or wait_vbl_done() for at least 1.2 msec after triggering a latch of the accelerometer data (in this example with mbc7_accel_read()). Doing that will cause the MBC7 accelerometer sensor to return errors in the data.

This is because vsync() puts the CPU into HALT (until the next frame) which turns off the cartridge PHI clock. The MBC7 cartridge relies on that clock to accurately sample the accelerometer sensor.

This example provides an alternative vsync_no_halt() that is safe to use without concern for timing limitations. It may result in slightly higher battery usage since the CPU will not enter the HALT state.

Emulators

At present most emulators do not fully emulate the MBC7 cartridge hardware, in particular the latching behavior mentioned above. In some cases the range of outputs data is different. So when testing, if possible, include a MBC7 cartridge as part of the process.

Some example ranges for the sensor data:

Slow rotation, measuring mostly the pull
earth's gravity when the sensor not flat.
The range is for a full rotation of 90 degrees from flat.

Note: The ranges below are for regular single-speed
processor mode. In GBC Double-speed mode there appears
to be an offset of around +440 on the X axis and +480
on the Y axis when the cart is flat/centered.

X:  Left          Centered          Right
   0x8230 <------- 0x81BC -------> 0x8148
    +116              0             -116

Y: Forward        Centered        Backward
   0x8253 <------- 0x81DE -------> 0x8170
    +117              0             -110


Higher end ranges for fast horizontal movements

X:  Left          Centered          Right
   0x837E <------- 0x81BC -------> 0x8000
    +450              0             -444

Y: Forward        Centered        Backward
   0x837D <------- 0x81DE -------> 0x8020
    +416              0             -446