Reading MD3 Joypad: Difference between revisions

From MegaDrive Development Wiki
Jump to navigation Jump to search
mNo edit summary
Line 15: Line 15:
|'''Data'''
|'''Data'''
|-
|-
|0
|1
|{{8BitRegister
|{{8BitRegister
|?|0
|?|0
|TH|1
|TH|1
|START|1
|C|1
|A|1
|B|1
|0|1
|RIGHT|1
|0|1
|LEFT|1
|DOWN|1
|DOWN|1
|UP|1
|UP|1
}}
}}
|-
|-
|1
|0
|{{8BitRegister
|{{8BitRegister
|?|0
|?|0
|TH|1
|TH|1
|C|1
|START|1
|B|1
|A|1
|RIGHT|1
|0|1
|LEFT|1
|0|1
|DOWN|1
|DOWN|1
|UP|1
|UP|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
Bit 7 6 5 4 3 2 1 0
Def ? THCBRIGHTLEFTDOWNUP
0
Bit 7 6 5 4 3 2 1 0
Def ? THSTARTA00DOWNUP

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)