#sega #controller #embedded-hal #genesis #mega-drive

无std sega-controller

用于读取世嘉控制器输入的嵌入式驱动

1个不稳定版本

0.1.0 2022年11月4日

#994嵌入式开发

MIT 许可证

11KB
175

世嘉控制器驱动

crates.io

使用Rust编写的用于读取世嘉控制器输入的嵌入式驱动。

此库利用embedded-hal特质作为平台无关的驱动程序。

特性

  • mega-drive - 包含世嘉Mega Drive控制器
  • all - 包含所有可用功能

示例

use sega_controller::mega_drive::{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::from_pins(
    pins.d8.into_output(),          // select pin
    pins.d2.into_floating_input(),  // data pin 0
    pins.d3.into_floating_input(),  // data pin 1
    pins.d4.into_floating_input(),  // data pin 2
    pins.d5.into_floating_input(),  // data pin 3
    pins.d6.into_floating_input(),  // data pin 4
    pins.d7.into_floating_input(),  // data pin 5
);

// Only do this once every frame (16ms)
match controller.read_state() {
    Ok(state) => {
        if state.is_six_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
    _ => {}
}

硬件参考

世嘉Mega Drive使用标准DB9串行端口连接器来连接控制器。

控制器连接器

      CONSOLE PORT (MALE)
 ,---------------------------,
 \  (1)  (2)  (3)  (4)  (5)  /
  \   (6)  (7)  (8)  (9)    /
   `-----------------------'

   CONTROLLER CABLE (FEMALE)
 ,---------------------------,
 \  (5)  (4)  (3)  (2)  (1)  /
  \   (9)  (8)  (7)  (6)    /
   `-----------------------'

注意: 控制器电缆使用的是 雌性 连接器,而控制台有 雄性 连接器。

引脚映射

引脚 描述 模式
1 数据位0 输入
2 数据位1 输入
3 数据位2 输入
4 数据位3 输入
5 +5V直流电 --
6 数据位4 输入
7 选择 输出
8 --
9 数据位5 输入

注意: Mode 是从控制台或微控制器的角度来读取控制器。

致谢

感谢PlutieDev提供的关于Mega Drive控制器如何工作的文档。特别适用于轮询六按钮控制器。

待办事项

  • 通过mdbook和GitHub Actions提供库文档
  • 通过mdbook和GitHub Actions提供硬件文档
  • 移位寄存器支持(并行输入)
  • 世嘉鼠标支持
  • 世嘉多路复用支持
  • 大师系统支持
  • 单元测试

依赖项

~71KB