Difference between revisions of "JSX"
From MSX Game Library
Line 12: | Line 12: | ||
Read R#14 | Read R#14 | ||
− | : | + | : Value: 0x0F |
+ | : (or any value between 00-3F not already return by other MSX devices) | ||
=== Start communication and get ID === | === Start communication and get ID === | ||
Line 26: | Line 27: | ||
Read R#14 | Read R#14 | ||
: Get ID | : Get ID | ||
− | <pre> | + | :<pre> |
7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | ||
–-–-–-–-–-–-–-–-- | –-–-–-–-–-–-–-–-- |
Revision as of 00:01, 20 October 2024
Contents
Protocol
Proposal for a protocol to handle a joypad with a variable number of sticks and buttons, plug in the MSX’s general purpose port.
This protocol can manage joypads with up to 15 analog axis (one stick requires 2 axis) and 18 buttons.
No-communication state
Write R#15
- Pin 8: LOW
- Pin 6: any value
Read R#14
- Value: 0x0F
- (or any value between 00-3F not already return by other MSX devices)
Start communication and get ID
Write R#15
- Pin 8: LOW (in case Pin 8 have been modified by another device)
- Pin 6: any value
Write R#15
- Pin 8: HIGH (start communication)
- Pin 6: HIGH
Read R#14
- Get ID
Read bytes
Repeat this step for each axis, then for each button row.
Write R#15
- Pin 8: HIGH
- Pin 6: LOW
Write R#15
- Pin 8: HIGH
- Pin 6: HIGH
Read R#14
- Get 6-bits values
- For axis: signed 6-bits value [-32 ; 31]
- For boutons: bits field for 6 boutons (0: pressed, 1: released)
Example
For a Joypad with 2 axis (a stick with X and Y axis), and up to 6 buttons, the reading process would be:
- After starting communication, first read to R#14 return the ID.
ID: 0x09 [00 0010 01] for 2 axis, and 1 buttons row, - Next reading give X-axis value [-32 ; 31],
- Next reading give Y-axis value [-32 ; 31],
- Next and last reading button states (for up to 6 boutons).