More info about the chips:
RTS703:
* pin 7 is XTAL input (semi-triangle wave) and pin 8 s XTAL output (square wave).
* Clock is generated only after the chips detects that any of the button is pressed and lasts about 400ms after it is released:
CH1=pin7, CH2=pin8, CH3=pin6:
Protocol analysis:
Code: Select all
XTAL ~ 54 kHz, one frame lasts ~ 18944ms
It consists of three code words:
A = ||||||||-------- ( 296us, 16 ticks of XTAL)
Bb = ||||||||||||||||---------------- ( 592us, 32 ticks of XTAL)
Cccc = ||||||||||||||||||||||||||||||||-------------------------------- (1184us, 64 ticks od XTAL)
Frame:
0000000000000000111111111111111122222222222222223333333333333333
0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
[ sync ][data pattern ]
AAAAAAAA....****....****....****....****....****....****....Cccc
||||||||||||||||||||||||||||||||||||||||||||||||++++----B: BbBb=pressed, Cccc=released
||||||||||||||||||||||||||||||||||||||||||||++++--------A: BbBb=pressed, Cccc=released
||||||||||||||||||||||||||||||||||||||||++++------------SELECT: BbBb=pressed, Cccc=released
||||||||||||||||||||||||||||||||||||++++----------------START: BbBb=pressed, Cccc=released
||||||||||||||||||||||||++++++++++++--------------------JoyNum: CcccCcccCccc=1 player, BbBbCcccBbBb=2 player
||||||||||||||||++++++++--------------------------------U/D: BbBbBbBb=U, BbBbCccc = D, Neither = CcccCccc
++++++++++++++++----------------------------------------L/R: BbBbCcccBbBbBbBb=L, BbBbBbBbBbBbBbBb=R, CcccCcccCcccCccc=Neither
So for example, when button is pressed, thhose frames are transmitted each after another (without any gaps):
[AAAAAAAA][data pattern for all buttons released] +
[AAAAAAAA][data pattern for current keystroke + \
... | for the whole duration of button being hold)
[AAAAAAAA][data pattern for curren keystroke + /
[AAAAAAAA][data pattern for all buttons released] x 21
When TURBOA/TURBOB is hold:
[AAAAAAAA][data pattern for all buttons released] +
[AAAAAAAA][data with A/B pressed] + \
[AAAAAAAA][data with A/B released] + |
... | for the whole duration of button being hold)
[AAAAAAAA][data with A/B pressed] + |
[AAAAAAAA][data with A/B released] + /
[AAAAAAAA][[data pattern for all buttons released]] +
I must say this joypad works really well, you don't have to point it directly at the infrared receiver to work.
This metal-box with receiver contains photodiode, some unknown SO8 chip with mark "280C 147" or "2800 147" and some discretes.
I initially thought this chip is opamp, but pinouts does not match any known opamp.
The way how it processes the light signal into its output is also kind of strange.
* "A" is processed into "0"
* "Bb" and "Cccc" is processed just like it thought to be - "0" for the period when led is switching and "1" when it is not (with some delay)
* Sometiemes there are spikes after end of "Cccc" signal
I tried to make repro of it using CPLD and ordinary TSOP receiver, but it is hard to find one for 54 Khz so best I got was TSOP1838. It has no problem with detecting the light frequency, but this receiver is not designed for constant transmission and the joypad constantly send frames when buttons are held.
The console PCB is also very weird:
* There were no pull-up on the /IRQ line (I had to add it, otherwise games were randomly freezing)
* pin 7, instead of pin 6 in the joypad sockets were routed to VCC
* There were two wires added to the 74368s that makes that connection:
Code: Select all
+---weird wire---+ +---weird wire---+
| | | |
| +-------+ | | +-------+ |
CPU pin 36 -+---|/OE | | CPU pin 35 -+---|/OE | |
M2 -----|in out| ---+-- joy1 CLK M2 -----|in out| ---+-- joy2 CLK
| ... | | ... |
+-------+ +-------+
1st 74368 2nd 74368
[/cod]
* Both 74368s are LS, not HC