Skip to content

Releases: OrangeFox86/DreamcastControllerUsbPico

Branch 123

19 Jan 18:58
Compare
Choose a tag to compare
Branch 123 Pre-release
Pre-release

Artifacts for issue:
#123

Version 0.13

05 Feb 03:29
Compare
Choose a tag to compare

Minor tweaks to client USB, added a 1p variant of host

Version 0.12

23 Apr 20:56
2066b30
Compare
Choose a tag to compare

Client Mode Updates

  • Added VMU screen and timer to library
  • Word bytes are stored in proper order now within storage (corrupts memory formatted with previous versions)
  • Support WinCE games
  • Minor refactoring

General Updates

  • Added DIR pin for each bus for better signal isolation using a bus transceiver
  • Updated schematics in documentation

Version 0.11

19 Feb 22:23
5045595
Compare
Choose a tag to compare

Client Mode Updates

  • Support vibration on Dualshock 4 controller
  • Rely on modified pico-sdk version 1.5 (was previously using unmodified version 1.4)

Host Mode Updates

  • Rely on modified pico-sdk version 1.5 (was previously using unmodified version 1.4)

Version 0.10

06 Feb 02:56
18929e3
Compare
Choose a tag to compare
  • Added support for Dualshock4 (PS4) controller in client mode
  • Removed volatile memory client mode (planned to be readded later in a client-usb-client variant)

Version 0.9

22 Jan 20:38
e267958
Compare
Choose a tag to compare
  • Created client-side library so that this project can emulate a peripheral on a real Dreamcast
    • Controller emulation currently only sends back controls in their resting positions
    • Created client peripheral which emulates a standard controller with volatile memory (client-volatile-mem.uf2)
      • Memory is stored in RAM (reset on power down) and automatically formatted on power up
    • Created client peripheral which emulates a standard controller with non-volatile memory (client-pico-non-volatile-mem.uf2)
      • Memory is stored on the flash chip on the Pico board
      • No integrity checks are made on the memory, so memory should be manually formatted on first use
  • Renamed main.uf2 to host.uf2 in order to differentiate it from the client program types

Version 0.8

01 Jan 21:42
32e28ed
Compare
Choose a tag to compare
  • Mapped the upper VMU buttons to gamepad
  • Limit gamepad analog values to -127 instead of -128 (as defined in gamepad descriptor)

Version 0.7

26 Dec 07:34
e029461
Compare
Choose a tag to compare
  • Enabled write access to VMU memory
    • Use at your own risk (not thoroughly tested yet)
      • To use on Windows or Linux, copy file exactly 128 kb in size and with the same name of the target VMU to the drive
      • Deleting files is not internally supported, even if the OS appears to successfully delete the file
      • The DC-Memory drive appears to have 128 kb of free memory, but this is just for the host operating system to proceed past the check for enough memory before allowing overwrite; writing a file with a unique name to this empty space will always fail
    • Drive will detach if too many write failures occur, will reattach once any VMU is removed and re-inserted
      • Write to a block of memory is retried until timeout
      • A "failure" is flagged if access timeout is reached for any block of memory (250 ms for write); 50 failures will cause the drive to detach
      • The host will usually attempt to write another block of memory and try to return to this block later; drive detach was added to prevent this infinite loop in the event of a major fault
    • It takes 15 seconds to write a full VMU file
    • Things will get weird if any VMU is added or removed during read or write which will be addressed later (#19)
    • Refer to this tool to be able to view/modify contents: http://evmu.elysianshadows.com/
      • Export from this tool directly to drive does not currently work; instead, export file to local system before copying to DC-Memory
  • Fixed some USB CDC serial interface issues
    • Handle all different types of end-of-line (CR, CRLF, LF) and backspace (BS, DEL) characters properly
    • Handle multiple commands at once (if more than one end-of-line received in a batch of characters)
    • Output CRLF instead of just LF
    • Output bus index (0-3) that custom command was sent on ex:
      09414001 00000008
      11: added {09414001 00000008} -> [1]
      11: complete {08404102 00000008 FF000000}
      09010001 00000008
      5: added {09010001 00000008} -> [0]
      5: complete {08000102 00000008 FF000000}
  • Minor tweak to attempt to correct for occasional Maple Bus write issues
  • Increased MAPLE_RESPONSE_TIMEOUT_US to 1000 to help with VMU access
  • Function definition found in device info is passed to peripheral

Version 0.6

18 Dec 19:10
383b9a9
Compare
Choose a tag to compare
  • Addressed issues with Retro Fighters controller
    • Don't pop item from schedule until it is successfully written to the bus (would potentially cause dereferencing of invalid pointer to Transmitter)
    • Allow 3 communication failure attempts before main peripheral is disconnected (Retro Fighters controller sometimes has 2 consecutive failures)

Version 0.5

18 Dec 00:38
45331bf
Compare
Choose a tag to compare
  • Added a TTY parser to the USB CDC (serial) interface
    • Enter "h" for help
    • Any command starting with ASCII hex character is interpreted as raw data in ASCII hex to send to maple bus, and the result is returned as ACII hex
      example 1:
      09010001 00000008
      6: added {09010001 00000008}
      6: complete {08000102 00000008 FF000000}
      example 2 (when no VMU connected):
      09010001 00000008
      14: added {09010001 00000008}
      14: failed read
      example 3 (length in frame word doesn't match number of words given):
      09010002 00000008
      0: failed packet invalid
      example 4 (all hex values must be present):
      09010001 8
      0: failed missing data
      example 4 (X is ignored):
      09010001 X0000008
      0: failed missing data

When parsing, all non-hex characters are ignored, and exactly 8 hex characters must be present for each word. After raw ASCII hex is accepted, either the transmission ID is displayed followed by confirmation of data added or "0:" followed by failure reason. After the command is successfully sent, the next message will be transmission ID followed either by "complete" and received data or "failed" and failure reason.

The selected bus is done based on source address: {0x00, 0x40, 0x80, 0xC0} for player 1 through 4. All Maple Bus communication through this interface takes highest priority.

Any line coding variables are ignored, so it doesn't matter what BAUD rate, stop bits, parity, or number of data bits are set for this USB CDC serial interface.