-
Switch N64 BT controller on original N64, Genesis too!
11/03/2021 at 10:16 • 0 comments -
Playing Half-Life 1 Dreamcast w/ Valve's Steam controller
10/10/2021 at 23:57 • 0 comments -
2021-10-02 - v1.0 release
10/02/2021 at 20:45 • 0 commentsNew #BlueRetro update v1.0 is available!
Wireless
- Add support for BLE generic HID gamepad, mouse & keyboard
- Add support for Xbox Series X|S controller
- Add workaround for PowerA switch controller stopping report after inquiry stop
Adapter
- Improve Generic HID gamepad default mapping
- Introduce default mapping quirks for inverted and rotated face buttons (8bitdo, PowerA GC)
Config
- Add version string attribute (Displayed in OTA page logs)
-
OTA FW update via Web-Bluetooth interface
07/07/2021 at 00:09 • 0 commentsI added OTA FW update with v0.19 release. You got to update to that version first using the USB serial cable method first but when next version is out you will be able to update simply wirelessly via the web-bluetooth interface.
-
A few UX improvement
06/24/2021 at 21:09 • 0 commentsI redesigned how the LED and BOOT switch are used, holding it 3 sec start inquiry scan (and LED start to pulse), short press while inquiry scan is on cancel it (and LED stop glowing), one short press outside of inquiry scan kick out all controllers as before. The LED being solid on still indicate that an error occurred. Holding the switch 10 sec will factory reset the adapter to default config and clear the Bluetooth keys.
See v0.18 release.
-
2021-06-06 - Atari Jaguar support
06/06/2021 at 14:43 • 0 commentsI added Atari Jaguar support with version v0.17! Regular pad, 6D controller & TeamTap up to 4 players are supported. Refer to wiki for cable schematic and config documentation.
I wrote my own testing application with JagStudio this time around to test BlueRetro with my GameDrive (especially the 6D controller support). Source and ROM available on GitHub.
My reverse engineering notes are available on the GitHub wiki.
-
2021-04-30 - PC Engine and TurboGrafx16 support
04/30/2021 at 13:08 • 1 commentI added PC Engine / TG16 support with version v0.16! Regular pad, 6 buttons pad, mouse & multitap up to 5 players are supported. Refer to wiki for cable schematic and config documentation.
My reverse engineering notes are available on the GitHub wiki.
-
Moving project update to GitHub discussions?
04/20/2021 at 17:15 • 0 commentsHackaday.io is nice but the more content I add the harder it is to find the older content. You got to click view all project logs and then click next page forever.
Also while it's possible to comment on the log entry, that feature looks to be universally not used here. Also you can't like a log.
So I'm seriously thinking about posting next status update on the GitHub discussions forum: https://github.com/darthcloud/BlueRetro/discussions
This way everything would be centralized in one place. The reply form is more obvious and you can like/love/etc.
Also I'm thinking of moving a few of the documentation logs to a GitHub wiki page.
What you guys think?
-
CD-i interface
04/12/2021 at 17:22 • 0 commentsI added CD-i support with version v0.15! Regular pad, mouse & keyboards (K, X & T type) are supported. Any mix of devices is supported for up to 2 players! Refer to wiki for cable schematic and config documentation.
The low level protocol is UART based. It is well documented in various specifications but the most up-to-date one is contained in Chapter 9. Input devices of the Technical Documentation for CDI 605 / 605T Users that can be found on ICDIA.
The spec defines RTS and RXD pin as standard RS-232 levels:
- logical 1: -15V < signal level < +0.8V
- logical 0: +2.4V < signal level < + 15VBut from what I saw in various schematics the logical 1 level is always 0V and the logical 0 is 5V. So when interfacing with a CD-i interface level shifters are enough (no need for MAX232) as long the UART is configured to be inverted.
Pointing devices like gamepad and mouse defined speed of 1200 & 9600 baud in the original spec but only 1200 devices ever got released. Newer CD-i players dropped 9600 support on the front ports and the latest spec actually removed 9600 as a possible baud rate for mouse and gamepad.
For mouse, gamepad & type 'T' keyboard data signaling is 7 bits with 2 stop bits LSB first. For type 'K' & 'X' keyboards signaling is 8 bits with 1 stop bit LSB first.
Unlike most other game system the CD-i inputs are not polled. As long the RTS line is released devices are free to send data when state change.
Devices are identified once at boot time by holding the RTS line low. Once RTS line is released devices are required to send their 1 byte identification followed by their initial status data.
This was a problem for BlueRetro as devices per CD-i spec are required to answer the ID request within 500 ms. However BlueRetro take around 700 ms to read its configuration at boot. To work around this BlueRetro need to be powered externally and powered before powering the CD-i. This give the extra time required to load the config and to be ready to answer the ID request.
IDs request at boot for gamepad and 'K' keyboard. IDs request at boot for mouse and 'T' keyboard. Controller & Mouse
Status update sent on buttons press and release. On axes movements update are continuously sent if value is not neutral (0). 'K' & 'X' type keyboards
Key A pressed and released Key A pressed and released while holding shift key Caps Lock press followed by Key A press and release 'T' type keyboard
Later CD-i model like my CD-i 450 only had a single physical front port including 2 serial port. Only the secondary port was compatible with 8 bits UART configuration that keyboards (K & X) and modem required. This posed a problem for CD online application as this made impossible to use the previous keyboard simultaneously with the modem. To answer this issue Philips defined the 'T' keyboard spec that piggy back on the tablet 'T' ID and redefine the data format to include the same data as the 'K' type keyboard.
-
PC-FX interface
04/02/2021 at 20:52 • 1 commentI added PC-FX support with version v0.14! Regular pad and mouse are supported. Any mix of devices is supported for up to 2 players! Refer to wiki for cable schematic and config documentation.
The low level protocol is pretty much like SPI mode 0 for clock and data line. You got the /LATCH line that can be inverted to be use as a CS. An /OE signal can mute the output from the peripheral when high. The console poll the peripherals 5 times in a row every frame. This look like how PC Engine controllers are polled as well for the multitap. Maybe a multitap was plan for the PC-FX as well?
Sequential 2P polling with 5 consecutive poll each Data line is inverted and LSB is sent first. Clock may sometimes cycle while LATCH is held low, these cycle must be ignored.
Controller poll The two controllers are often polled simultaneously.
Simultaneous 2P polling Getting the ESP32 SPI timing was a bit tricky, In my mind this should be SPI Mode 2 but somehow that was very unreliable. Using Mode 0 timing is rock solid however.
Regular controller
RX: FFFFFF0F (LSB first) ││││ ├┘ ││││ └ ID? │││└ Left, Down, Right, Up ││└ 1, Mode2, 1, Mode1 │└ IV, III, II, I └ Run, Select, VI, V
Mouse
RX: FFFFFF2F (LSB first) ├┘├┘ │├┘ │ │ │└ ID? │ │ └ Buttons (1, 1, Right, Left) │ └ X axis (8 bits) (Left: -, Right: +, Two's complement, inverted, LSB first) └ Y axis (8 bits) (Up: -, Down: +, Two's complement, inverted, LSB first)