/
changelog.txt
207 lines (167 loc) · 13.3 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
v1.3
- (Android/Windows) Speed optimization! Used joystick frequency tester to optimize update rate. All single player mode controller rates are now 100 Hz (NegCon 50 Hz). For comparison, a Mayflash Dualjoybox Pro gave 66 Hz (44 Hz for NegCon). I suspect two player mode is also 50 Hz, but I cannot test it because there is no analog axis.
- (Android/Windows) reverted back to USB poll interval 10 ms, since this is a low speed device. Lower numbers do not cause any difference.
- (Android/Windows) reverted back to only reporting the additional analog axes "Brake," "Accel," and "Throttle" in NegCon mode, since they slow the rate down (see above entry)
v1.2
- (Android/Windows) x/y,z/rz axes range to go from 0..255 to comply better with Windows 10 and XInput (fixes many Indie Games on Steam)
- (Android/Windows) integrated NegCon mode into the regular mode, since the axes range is now 0..255 everywhere. Analog "Brake" and "Accel" axes are now always reported
- (Android/Windows) changed USB poll interval to 4 ms to ensure lag-free performance with the additional brake and accel axes that are always reported
v1.1
- modified button layouts in Xbox mode to make them more sensible, new mappings:
A: bottom button (SNES B, PSX Cross, NegCon I, NES B, NeoGeo A, Genesis A, Gamecube A, N64 B, PCE II),
B: right button (SNES A, PSX Circle, NegCon A, NES A, Neogeo B, Genesis B, Gamecube X, N64 A, PCE I)
X: left button (SNES Y, PSX Square, NegCon II, NeoGeo C, Genesis C, Gamecube B, N64 Yellow Down, PCE III),
Y: upper button (SNES X, PSX Triangle, NegCon B, NeoGeo D, Genesis X, Gamecube Y, N64 Yellow Up, PCE IV)
L: Left Shoulder (SNES L, PSX L1, NegCon L, Genesis Y, Gamecube L, N64 L, PCE V)
R: Right Shoulder (SNES R, PSX R1, NegCon R, Genesis Z, Gamecube R, N64 R, PCE VI)
White: Misc 1 (PSX L2, N64 Yellow Left, Saturn L),
Black: Misc 2 (PSX R2, N64 Yellow Right, Saturn R),
Select: Select
Start: Start (PC Engine Play, Genesis Mode)
Left Thumb Click: Misc 3 (PSX L3, N64 Z, Gamecube Z)
Right Thumb Click: Misc 4 (PSX R3)
- fixed some wrong button mappings in normal mode, new mappings:
button 1: bottom button (SNES B, PSX Cross, NegCon B, NES B, NeoGeo A, Genesis A, Gamecube A, N64 B, PCE II)
button 2: right button (SNES A, PSX Circle, NegCon A, NES A, Neogeo B, Genesis B, Gamecube X, N64 A, PCE I)
button 4: left button (SNES Y, PSX Square, NeoGeo C, Genesis C, Gamecube B, N64 Yellow Down, PCE III),
button 5: upper button (SNES X, PSX Triangle, NeoGeo D, Genesis X, Gamecube Y, N64 Yellow Up, PCE IV)
button 7: Left Shoulder (SNES L, PSX L1, Genesis Y, Gamecube L, N64 L, PCE V)
button 8: Right Shoulder (SNES R, PSX R1 Genesis Z, Gamecube R, N64 R, PCE VI)
button 9: Misc 1 (PSX L2, N64 Yellow Left, Saturn L)
button 10: Misc 2 (PSX R2, N64 Yellow Right, Saturn R)
button 11: Select
button 12: Start (PC Engine Play, Genesis Mode)
button 14: Misc 3 (PSX L3, N64 Z, Gamecube Z)
button 15: Misc 4 (PSX R3)
Analog:
Left Joystick: x,y
Right Joystick: z,Rz
NegCon mode (identifies as "Mojo Retro Adapter NegCon" instead of "Mojo Retro Adapter" when NegCon is detected):
Steering: x
Button I: z (0..255 in NegCon mode instead of -128..127)
Button II: "Accelerator" axis
Button L: "Brake axis"
v1.0
- fixed button mappings again to make them more sensible
- new and hopefully final button layout:
Button 1: bottom button (SNES B, PSX Cross, NegCon B, NES B, NeoGeo A, Genesis A, Gamecube B, N64 B, PCE II)
Button 2: right button (SNES A, PSX Circle, NegCon A, NES A, Neogeo B, Genesis B, Gamecube A, N64 A, PCE I)
Button 4: left button (SNES Y, PSX Square, NeoGeo C, Genesis C, Gamecube Y, N64 Yellow Down),
Button 5: upper button (SNES X, PSX Triangle, NeoGeo D, Genesis X, Gamecube X, N64 Yellow Up)
Button 7: Left Shoulder (SNES L, PSX L1, Genesis Y, Gamecube L, N64 L)
Button 8: Right Shoulder (SNES R, PSX R1, Genesis Z, Gamecube R, N64 R)
Button 9: Misc 1 (PSX L2, N64 Yellow Left, Saturn L)
Button 10: Misc 2 (PSX R2, N64 Yellow Right, Saturn R)
Button 11: Select
Button 12: Start (PC Engine Play, Genesis Mode)
Button 14: Misc 3 (PSX L3, N64 Z, Gamecube Z)
Button 15: Misc 4 (PSX R3)
Analog:
Left Joystick: x,y
Right Joystick: z,Rz
NegCon mode (identifies as "Mojo Retro Adapter NegCon" instead of "Mojo Retro Adapter" when detected):
Steering: x
Button I: z (0..255 in NegCon mode instead of -128..127)
Button II: "Accelerator" axis
Button L: "Brake axis"
v0.99
- changed USB Usage ID to game pad to comply with Android and Windows simultaneously
- new button layout to fully conform with Android while maintaining Windows compatibility
/* Button mapping to conform with Android:
button 1: bottom button (SNES B, PSX Cross, NegCon B, NES B, NeoGeo A, Genesis A, Gamecube A, N64 A. PCE II),
button 2: right button (SNES A, PSX Circle, NegCon A, NES A, Neogeo B, Genesis B, Gamecube X, N64 Yellow Down, PCE I)
button 4: left button (SNES Y, PSX Square, NeoGeo C, Genesis C, Gamecube B, N64 B),
button 5: upper button (SNES X, PSX Triangle, NeoGeo D, Genesis X, Gamecube Y, N64 Yellow Up)
button 7: Left Shoulder (PSX L1, Genesis Y, Gamecube L, N64 L, Saturn L)
button 8: Right Shoulder (PSX R1 Genesis Z, Gamecube R, N64 R, Saturn R)
button 9: Misc 1 (PSX L2, N64 Yellow Left),
button 10: Misc 2 (PSX R2, N64 Yellow Right),
button 11: Select
button 12: Start (PC Engine Play, Genesis Mode)
button 14: Misc 3 (PSX L3, N64 Z, Gamecube Z)
button 15: Misc 4 (PSX R3)
Analog axes:
Left Joystick: x,y
Right Joystick: z,Rz
NegCon mode axes (device name changes to "Mojo Retro Adapter Mod NegCon" instead of "Mojo Retro Adapter Mod" when a NegCon is detected):
Steering (twist): x
Button I: z (0..255 in NegCon mode instead of -128..127)
Button II: "Accelerator" axis (not shown in Windows, but registered nonetheless)
Button L: "Brake" axis (not shown in Windows, but registered nonetheless)
*/
v0.98
- The adapter now reports as "Retro Adapter Mod NegCon" instead of "Retro Adapter Mod" when a PSX NegCon type controller is attached, because it then implements three additional sliders for the analog buttons.
- To make NegCon work better with Android, I changed the analog buttons to Brake (Axis_Brake in Android) Accelerator (Axis_Gas in Android), as well as Slider (Axis_Throttle in Android) for the three analog buttons. Axis_Gas does not show up in the windows control panel, but Windows does register it.
v0.97
- Right analog stick and DPAD now work correctly in Android. (Android expects second analog stick to be reported as Z/Rz axes instead of Rx/Ry. Also DPAD was reported as 4 bits instead of 8, breaking compatibility with android. This is now all fixed.)
- Just for reference, the new button config since v0.96:
button 1: bottom button (SNES B, PSX Cross, NES A, NeoGeo A, Genesis A),
button 2: left button (SNES Y, PSX Square, NES B, NeoGeo B, Genesis B),
button 3: upper button (SNES X, PSX Triangle, NeoGeo C, Genesis C, Gamecube Y, N64 Yellow Up)
button 4: right button (SNES A, PSX Circle, Neogeo D, Genesis X, Gamecube X, N64 Yellow Down)
button 5: Misc 1 (PSX L2, Genesis Y, N64 Yellow Left),
button 6: Misc 2 (PSX R2, Genesis Z, N64 Yellow Right),
button 7: Left Shoulder (PSX L1, Gamecube L, N64 L)
button 8: Right Shoulder (PSX R1 Gamecube R, N64 R)
button 9: (Select, Gamecube Z, N64 Z)
button 10: (Start, Play)
button 11: Misc 3 (PSX L3)
button 12: Misc 4 (PSX R3)
v0.96
- PSX L1/R1 where swapped with PSX L2/R2 swapped in normal and arcade mode. This is now fixed.
v0.95
- changed USB ID from "Retro Adapter" to "Retropad Adapter Mod" since button assignments have recently changed
- merged Normal Mode and Arcade Mode source directories
- changed N64/Gamecube timeout delay back from >255 us to ~40 us since it works reliably now
v0.94
- disabled interrupts while reading game controllers (via a cli() and sei() command pair)! This is a huge bug fix, especially for Xbox mode! This finally fixes ALL timing problems with timing critical controllers such as PSX and Gamecube. This is certainly a big improvement for Xbox mode because the Xbox triggers more interrupts than Windows. This was definitely the cause of all the bitflips I have seen while testing PSX/GC on Xbox. Windows triggers less interrupts per second, but it might still fix the occasional bitflip even there. Whenever an interrupt came in at just at the wrong time while the adapter was reading a controller signal it would have caused problems.
- Gamecube right stick y-axis was inverted - this is fixed now.
- Gamecube button flickers and shoulder buttons in Xbox mode fixed.
- Analog L/R deadzone range adjusted in Xbox mode to prevent accidental L/R triggering.
- N64/GC axis inversion now handled in C instead of assembler.
- Clock speed increased for PSX controllers. With the new interrupt handling it works fine with 24 us per bit on Windows and Xbox. Before I had to set it to ~44 us per bit because of the bitflips I saw on Xbox at smaller delays.
v0.93
- incorporated N64 y-axis inversion assembler fix from AlmightyFrog
- added support for analog Gamecube L/R triggers in Xbox mode
v0.92
- accidentally left PS2 pressure sensitive mode (WIP) enabled. Disabled now.
v0.91
- I built a second adapter and found some differences in the timings affecting PSX controllers, probably due to some slight hardware differences (stray capacitance, crystal tolerance etc.)
- adjusted all PSX timings to hopefully be more robust against slight changes in clock timings and delays etc.
- changed button mappings in Normal Mode and Arcade Mode for all supported controllers to be more consistent, new mappings:
button 1: bottom button (SNES B, PSX Cross, NES A, NeoGeo A, Genesis A),
button 2: left button (SNES Y, PSX Square, NES B, NeoGeo B, Genesis B),
button 3: upper button (SNES X, PSX Triangle, NeoGeo C, Genesis C)
button 4: right button (SNES A, PSX Circle, Neogeo D, Genesis X)
button 5: Misc 1 (PSX L1, Genesis Y, N64 Yellow Left),
button 6: Misc 2 (PSX R1, Genesis Z, N64 Yellow Right),
button 7: Left Shoulder (PSX L2)
button 8: Right Shoulder (PSX R2)
button 9: Select
button 10: Start
button 11: Misc 3 (PSX L3)
button 12: Misc 4 (PSX R3)
v0.9
- added some stubs for PS2 pressure sensitive button support, but disabled them all because the pressure sensitive buttons were sluggish and seemingly useless.
- slightly adjusted timing and psx order bit writes vs. clock pulses to remove random bitflip every few seconds on NegCon pad L button.
- adjusted PSX timing again to eliminate one last bitflip that occured every few seconds on the NegCon L button.
v0.8
- slight tweak to psx clock delay to make it work with PS2 controllers.
v0.7
-finally made my own PSX adapter cable so I can debug PSX controllers. I found and fixed jitter problems with the original RetroAdapter communication code between adapter and PSX controller. The bytes were read almost half a PSX clock cycle after the supposed readout time on clk rising edge. This lead to jitter effects, where some buttons occasionally flickered off and on even if pressed down continously. Due to this, the vertical axis of the left analog stick also wasn't as accurate as it could have been. The Xbox controller tester for Xbox classic was an invaluable tool and shows such problems very clearly. All those problems should be completely fixed now.
-flipped NeGCon x-axis direction to conform to what happens in WipeOut on a real PSX: moving the right half of the controller away from the player steers the vehicle to the right. This means axis value 0xFF corresponds to the right direction, consistent with all other PSX controllers. This is contrary to what some sources on the web say.
v0.6
some problems with NegCon fixed in both Xbox and PC Mode.
v0.5
- finally figured out the real reason why Android did not work with reported axis values of -128: the usb descriptor in the original Mojo code incorrectly sets the min to -127, but then frequently uses -128 as a value. Windows seems to ignore this discrepancy, but Android is more picky. This is now fixed in the correct way: the axis range for x,y,rx,ry is always -128...127 as it should be, and the minimum is correctly defined in the USB Descriptor. Tested in Android on NVidia Shield and it works.
- Fixed a few bugs for some controllers in XBox Mode (sometimes, a button would be pressed always together with x or y-axis, etc.
- Changed NegCon support for PC: when Negcon is detected, three extra sliders are added to the joystick, those represent the three analog buttons of the NegCon. They go from 0 to 255. The rx, ry axis are removed in NegCon mode, because they went from -128 to 127 instead which did not make sense for analog buttons.
- added the ability to send USB reports with length >8 bytes. This is currently only used for NegCon, but opens the way for other controllers with more analog buttons.
v0.4
added NegCon support. L is mapped to upper-half vertical axis on Windows for lack of another analog axis.
V0.3
fixed some more problems with Android and N64/GC pads and PSX analog sticks. The Retroadapter was still sending -128 values for some axes for some controllers, which Android does not like.
V0.2
fixed directions being constantly pressed in Xbox mode with Atari/NeoGeo controllers
V0.1
first release