Reading MD3 Joypad

From MegaDrive Development Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Details

All the buttons can't be read at once. There is a multiplexer inside the control pad.

Reading the 3 buttons pad consist of 5 steps :

  • Set the direction of pin 6 to output and all others to input.
  • Set TH (pin6) to 1.
  • Read the first part of the buttons (UP,DOWN,LEFT,RIGHT,B,C)
  • Switch the outputs in the control pad by setting TH (pin6) to 0.
  • Read the second part of the buttons (A,START)
TH State Data
1
Bit 7 6 5 4 3 2 1 0
Def 0 THCBRIGHTLEFTDOWNUP
0
Bit 7 6 5 4 3 2 1 0
Def 0 THSTARTA00DOWNUP

Code

 	moveq	#0, d0
	moveq	#0, d1

	move.b  #0x40, (0xA10009)	| Set direction
	move.b  #0x40, (0xA10003)	| TH = 1
	nop
	nop
	move.b  (a0), d0		| d0.b = X | 1 | C | B | R | L | D | U |
	andi.b	#0x3F, d0		| d0.b = 0 | 0 | C | B | R | L | D | U |

	move.b	#0x0, (0xA10003)	| TH = 0
	nop
	nop
	move.b	(0xA10003), d1		| d1.b = X | 0 | S | A | 0 | 0 | D | U |
	andi.b	#0x30, d1		| d1.b = 0 | 0 | S | A | 0 | 0 | 0 | 0 |
	lsl.b	#0x2, d1		| d1.b = S | A | 0 | 0 | D | U | 0 | 0 |
	or.b	d1, d0			| d0.b = S | A | C | B | R | L | D | U |