Reading MD3 Joypad: Difference between revisions
Jump to navigation
Jump to search
m (→Details) |
m (→Details) |
||
Line 17: | Line 17: | ||
|1 | |1 | ||
|{{8BitRegister | |{{8BitRegister | ||
| | |0|0 | ||
|TH|1 | |TH|1 | ||
|C|1 | |C|1 | ||
Line 29: | Line 29: | ||
|0 | |0 | ||
|{{8BitRegister | |{{8BitRegister | ||
| | |0|0 | ||
|TH|1 | |TH|1 | ||
|START|1 | |START|1 |
Revision as of 17:49, 8 February 2013
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 |
| |||||||||||||||||
0 |
|
Code
move.b #0x40, (0xA10009) ; Set the direction
nop
nop
move.b #0x40, (0xA10003) ; Set TH to 1
nop
nop
move.b (0xA10003), d0 ; Read C/B/RIGHT/LEFT/DOWN/UP
andi.b #0x3F, d0 ; Discard bit 6 and 7
move.b #0x00, (0xA10003) ; Set TH to 0
nop
nop
move.b (0xA10003), d1 ; Read START/A
lsl.b #0x2, d1 ; Move START and A to bit 6 and 7
andi.b #0xC0, d1 ; Only keep START and A
or.b d1, d0 ; Now d0 contain START,A,B,C,RIGHT,LEFT,DOWN,UP (active low)