Dreamcast Programming - Controllers Controllers The Dreamcast Controller (HKT-7700) has five buttons, one directional pad, one analogue joystick, and two analogue triggers. In order to be able to provide feedback for all these actuators, the controller speaks with the Dreamcast unit using a serial protocol. The serial connection is bi-directional, which allows the Dreamcast to upload data into docked VMS units. All the logic of the controller is contained in a single chip (IC1) which is labled as follows: +--------------+ | SEGA | | E2 MAPLE BUS | | 315-6125-AB | | 841A2A20 | +--------------+ Male connector pinout: [ 5 3 1 ] [ 4 2 ] The plate on top of the connector is for the cable shield. It is internally connected to pin 3 (GND). Internal connector inside controller pinout: [1 2 3 4 5] 1 red serial data 2 blue +5V 3 black GND 4 green sense (connected to GND inside controller/keyboard) 5 white serial data Gamepad Condition structure The current state of a gamepad is queried with the Get condition request. The condition stucture for the Controller function code ($001) is as follows: int16 buttons ; digital buttons bitfield (little endian) int8 rtrigger ; right analogue trigger (0-255) int8 ltrigger ; left analogue trigger (0-255) int8 joyx ; analogue joystick X (0-255) int8 joyy ; analogue joystick Y (0-255) int8 joyx2 ; second analogue joystick X (0-255) int8 joyy2 ; second analogue joystick Y (0-255) The buttons bitfield contains zeroes for pressed buttons, and ones for unpressed buttons. 0 C 1 B 2 A 3 START 4 UP 5 DOWN 6 LEFT 7 RIGHT 8 Z 9 Y 10 X 11 D 12 UP 2 13 DOWN 2 14 LEFT 2 15 RIGHT 2 Gamepad Function data bitfield The function_data for the Controller function code is a bitfield describing which controls are present on the particular device (zero = not present, one = present): 0 C 1 B 2 A 3 START 4 UP 5 DOWN 6 LEFT 7 RIGHT 8 Z 9 Y 10 X 11 D 12 UP 2 13 DOWN 2 14 LEFT 2 15 RIGHT 2 16 Analog R trigger 17 Analog L trigger 18 Analog horizontal 19 Analog vertical 20 Analog horizontal 2 21 Analog vertical 2