Reading MD6 Joypad: Difference between revisions
Jump to navigation
Jump to search
(Created page with "=Details= As the 3 buttons pad, all the buttons can't be read at once. There is a multiplexer inside the control pad. Reading the 6 buttons pad consist of 5 steps : *Set th...") |
m (→Code) |
||
(One intermediate revision by the same user not shown) | |||
Line 95: | Line 95: | ||
=Code= | =Code= | ||
<syntaxhighlight> | <syntaxhighlight lang="asm"> | ||
moveq #0, d0 | moveq #0, d0 | ||
moveq #0, d1 | moveq #0, d1 | ||
move.b #0x40, ( | move.b #0x40, (0xA10009) | Set direction | ||
move.b #0x40, (0xA10003) | TH = 1 | |||
nop | nop | ||
nop | nop | ||
move.b ( | move.b (0xA10003), 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 | | andi.b #0x3F, d0 | d0.b = 0 | 0 | C | B | R | L | D | U | | ||
move.b #0x0, ( | move.b #0x0, (0xA10003) | TH = 0 | ||
nop | nop | ||
nop | nop | ||
move.b ( | 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 | | 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 | | 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 | | or.b d1, d0 | d0.b = S | A | C | B | R | L | D | U | | ||
move.b #0x40, ( | move.b #0x40, (0xA10003) | TH = 1 | ||
nop | nop | ||
nop | nop | ||
move.b #0x0, ( | move.b #0x0, (0xA10003) | TH = 0 | ||
nop | nop | ||
nop | nop | ||
move.b #0x40, ( | move.b #0x40, (0xA10003) | TH = 1 | ||
nop | nop | ||
nop | nop | ||
move.b ( | move.b (0xA10003), d1 | d1.b = X | X | X | X | M | X | Y | Z | ||
move.b #0x0, ( | move.b #0x0, (0xA10003) | TH = 0 | ||
andi.w #0xF, d1 | d1.b = 0 | 0 | 0 | 0 | M | X | Y | Z | andi.w #0xF, d1 | d1.b = 0 | 0 | 0 | 0 | M | X | Y | Z |
Latest revision as of 11:53, 19 January 2017
Details
As the 3 buttons pad, all the buttons can't be read at once. There is a multiplexer inside the control pad.
Reading the 6 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)
- Switch the outputs in the control pad by setting TH (pin6) to 1.
- Switch the outputs in the control pad by setting TH (pin6) to 0.
- Switch the outputs in the control pad by setting TH (pin6) to 1.
- Read the extra buttons (X,Y,Z,MODE)
TH State | Data | |||||||||||||||||
1 |
| |||||||||||||||||
0 |
| |||||||||||||||||
1 |
| |||||||||||||||||
0 |
| |||||||||||||||||
1 |
| |||||||||||||||||
0 |
|
Code
moveq #0, d0
moveq #0, d1
move.b #0x40, (0xA10009) | Set direction
move.b #0x40, (0xA10003) | TH = 1
nop
nop
move.b (0xA10003), 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 |
move.b #0x40, (0xA10003) | TH = 1
nop
nop
move.b #0x0, (0xA10003) | TH = 0
nop
nop
move.b #0x40, (0xA10003) | TH = 1
nop
nop
move.b (0xA10003), d1 | d1.b = X | X | X | X | M | X | Y | Z
move.b #0x0, (0xA10003) | TH = 0
andi.w #0xF, d1 | d1.b = 0 | 0 | 0 | 0 | M | X | Y | Z
lsl.w #0x8, d1 | d1.w = 0 | 0 | 0 | 0 | M | X | Y | Z | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
or.w d1, d0 | d0.w = 0 | 0 | 0 | 0 | M | X | Y | Z | S | A | C | B | R | L | D | U |