Difference between revisions of "JSX"

From MSX Game Library

Line 4: Line 4:
  
 
This protocol can manage joypads with up to 15 analog axis (one stick requires 2 axis) and 18 buttons.
 
This protocol can manage joypads with up to 15 analog axis (one stick requires 2 axis) and 18 buttons.
 +
 +
PSG register 15 (R#15) is use for MSX to device communication and R#14 for device to MSX communication. Data is sent to MSX 6 bits per 6 bits.
 +
 +
Pin binding for received data:
 +
<pre>
 +
7  6  5  4  3  2  1  0
 +
–-–-–-–-–-–-–-–--–-–-–-–-
 +
0  0  P7 P6 P4 P3 P2 P1
 +
</pre>
  
 
=== No-communication state ===
 
=== No-communication state ===
Line 12: Line 21:
  
 
Read R#14
 
Read R#14
: Get 0x0F
+
: Get 0x0F (JSX fingerprint)
 
: (or any value between 00-3F not already return by other MSX devices)
 
: (or any value between 00-3F not already return by other MSX devices)
  
Line 26: Line 35:
  
 
Read R#14
 
Read R#14
: Get ID
+
: Get JSX device ID
 
<pre>
 
<pre>
 
  7 6 5 4 3 2 1 0
 
  7 6 5 4 3 2 1 0
Line 59: Line 68:
 
* Next and last reading button states (for up to 6 boutons).
 
* Next and last reading button states (for up to 6 boutons).
  
Note: [https://www.msx.org/wiki/MSX-HID MSX-HID] footprint would be: 0Fh, 09h, 0Fh
+
Note: [https://www.msx.org/wiki/MSX-HID MSX-HID] fingerprint would be: 0Fh, 09h, 0Fh
  
 
[[File:Joystick.png|512px]]
 
[[File:Joystick.png|512px]]
  
 
[[Category:Proposal]][[Category:Proposal/Protocol]]
 
[[Category:Proposal]][[Category:Proposal/Protocol]]

Revision as of 00:16, 20 October 2024

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.

PSG register 15 (R#15) is use for MSX to device communication and R#14 for device to MSX communication. Data is sent to MSX 6 bits per 6 bits.

Pin binding for received data:

 7  6  5  4  3  2  1  0
–-–-–-–-–-–-–-–--–-–-–-–-
 0  0  P7 P6 P4 P3 P2 P1

No-communication state

Write R#15

Pin 8: LOW
Pin 6: any value

Read R#14

Get 0x0F (JSX fingerprint)
(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 JSX device ID
 7 6 5 4 3 2 1 0
–-–-–-–-–-–-–-–--
 x x A A A A B B
     │ │ │ │ └─┴── Number of button rows (0-3)
     └─┴─┴─┴────── Number of axis (0-15)

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).

Note: MSX-HID fingerprint would be: 0Fh, 09h, 0Fh

Joystick.png