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 |
TH | C | B | RIGHT | LEFT | DOWN | UP |
|
0
|
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Def |
0 |
TH | START | A | 0 | 0 | DOWN | UP |
|
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 |