Embedded driver for reading input from Sega controllers in Rust.
This library utilizes embedded-hal
traits as a platform-agnostic driver.
mega-drive
- includes Sega Mega Drive controllersall
- includes all available features```rust use segacontroller::megadrive::{MegaDriveButton, MegaDriveController}; use sega_controller::Error;
// Using some kind of hal like arduino_hal
// NOTE: You should have pull-up resistors on these pins (10k ohm)
let controller = MegaDriveController::frompins(
pins.d8.intooutput(), // select pin
pins.d2.intofloatinginput(), // data pin 0
pins.d3.intofloatinginput(), // data pin 1
pins.d4.intofloatinginput(), // data pin 2
pins.d5.intofloatinginput(), // data pin 3
pins.d6.intofloatinginput(), // data pin 4
pins.d7.intofloatinginput(), // data pin 5
);
// Only do this once every frame (16ms) match controller.readstate() { Ok(state) => { if state.issix_button { // do something special for six-button controllers if you like }
if state.is_pressed(MegaDriveButton::Start) {
// start button is currently held down
}
}
Err(Error:NotPresent) => {} // controller is not connected
_ => {}
}
```
The Sega Mega Drive uses a standard DB9 serial port connector for controllers.
``
CONSOLE PORT (MALE)
,---------------------------,
\ (1) (2) (3) (4) (5) /
\ (6) (7) (8) (9) /
-----------------------'
CONTROLLER CABLE (FEMALE) ,---------------------------, \ (5) (4) (3) (2) (1) / \ (9) (8) (7) (6) / `-----------------------' ```
NOTE: The controller cable uses a female connector, where the console has male connectors.
| Pin | Description | Mode | |:---:|:------------|:----------:| | 1 | Data Bit 0 | Input | | 2 | Data Bit 1 | Input | | 3 | Data Bit 2 | Input | | 4 | Data Bit 3 | Input | | 5 | +5V VDC | -- | | 6 | Data Bit 4 | Input | | 7 | Select | Output | | 8 | Ground | -- | | 9 | Data Bit 5 | Input |
NOTE: The Mode
is from the perspective of the console or microcontroller reading the controller.
Thanks to PlutieDev documentation on how the Mega Drive controller works. Especially useful for polling six-button controllers.
mdbook
+ GitHub Actionsmdbook
+ GitHub Actions