{"id":17325054,"url":"https://github.com/loopfz/opends2io","last_synced_at":"2025-08-23T03:45:16.946Z","repository":{"id":67929378,"uuid":"537221643","full_name":"loopfz/opends2io","owner":"loopfz","description":"Open-source reimplementation of Deathsmiles 2 arcade I/O board","archived":false,"fork":false,"pushed_at":"2022-09-15T22:27:21.000Z","size":158,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-14T04:34:02.731Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loopfz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-15T22:10:34.000Z","updated_at":"2022-09-15T22:27:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"81209bb1-1c0f-44db-88a3-591fd9c01c74","html_url":"https://github.com/loopfz/opends2io","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/loopfz/opends2io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopfz%2Fopends2io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopfz%2Fopends2io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopfz%2Fopends2io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopfz%2Fopends2io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loopfz","download_url":"https://codeload.github.com/loopfz/opends2io/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loopfz%2Fopends2io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271739883,"owners_count":24812636,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T14:12:19.807Z","updated_at":"2025-08-23T03:45:16.924Z","avatar_url":"https://github.com/loopfz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# opends2io\n\n`opends2io` is an open source reimplementation of the I/O control board for the arcade game Deathsmiles II (CAVE).\nIt is based on the Teensy 2.0 board, but could maybe support other microcontrollers in the future.\n\n\n## Overview\n\n`opends2io` consists of:\n- a program to upload to a Teensy 2.0 board. This program understands the JVS standard as input and implements the control protocol specific to Deathsmiles II.\n- a PCB design replicating the layout of the original cv2000xp board, on which you can solder the Teensy 2.0 board and the additional components.\n\n![opends2io PCB](/pcb/pcb_opends2io.png)\n\n\n## Deathsmiles II\n\nReleased in 2009, Deathsmiles II was the only CAVE game based on PC hardware (named \"CAVE pc\"), which is now the norm for modern arcade games.\n\nIt used regular off-the-shelf components:\n- CPU: AMD Athlon X2 5050e or AMD Athlon X2 7750\n- Motherboard: Asus M3A78-EM or Gigabyte GA-MA78GPM-UD2H\n- RAM: 2GB DDR2 800\n- Sound card, graphics card: none (integrated in the motherboard)\n- Controls: cv2000xp, proprietary card (the goal of this project)\n- Security: USB dongle with unique data for each serial number\n\nThe cv2000xp control board expects JVS coming from the arcade cabinet. It then translates it into a custom serial protocol between the control board and the game. This logic is what is being reimplemented by `opends2io`.\n\nThe cv2000xp control board and the USB dongle are both unique for each unit / serial number of the game.\nThe game executable will read data from both and make sure the serial number matches.\n\nThe game runs on a stripped down Windows XP Embedded.\nThe original game image has been dumped and is part of the MAME CHDs.\nDo note that there are supposedly two distinct images: one for Gigabyte motherboards, one for Asus motherboards. They are not compatible. The MAME CHD is the Gigabyte image.\n\n\n## What you can do with this project\n\nIf you own the original Deathsmiles II hardware and your controls board is fried, you can use the `opends2io` PCB design and code for a drop-in replacement.\nThe PCB design is modeled after the original to fit in the same location over the motherboard.\nSince this is the only proprietary component in the original hardware (the rest being off the shelf PC parts), it means everything can be replaced now.\n\n`opends2io` can also be built and configured without JVS input, using a regular DB15 input with neo geo pinout instead.\nThis can be made into a small adapter box to consolize Deathsmiles 2, using e.g. a neo geo pad or a USB2DB15. PCB design and 3d-printable box to come for this.\n\n\n## Current state\n\n`opends2io` is currently in ALPHA and not yet considered stable.\n\nWhat works:\n- Credits\n- Controls, P1 \u0026 P2\n- Initialization sequence and regular heartbeat\n\nBasically, the game can be played fully. It's still early and unexpected issues may arise though.\n\nHere are the various aspects I'd like to focus on next, in no particular order:\n\n### TODO #1: Input latency\n\nThe game is a bit finicky about the frequency of commands it receives, apparently. In testing, things did not go well when I pushed to send updates as quickly / frequently as possible.\nI've tried to fiund a satisfactory middle ground, but it needs further testing.\n\nGetting a few testers who are experts at the game could help detect/fix issues in input handling.\n\nInspecting the behavior of the original cv2000xp board with regard to the frequency of controls updates would also help a lot.\n\n### TODO #2: Seamless integration with the original game image\n\nA few things need to be done so that the open source board will be recognized by the original game image and assigned the same port without the user needing to fiddle with it, so the game can find it.\n\nI'm unable to test this right now.\n\n[This thread on cave-stg](http://cave-stg.com/forum/index.php?topic=472.msg33100#msg33100) details the incompatibility between the original images (one for the asus motherboard, one for the gigabyte motherboard).\nThe MAME CHD is for the gigabyte motherboard.\n\nI have a test rig for this purpose, but unfortunately it has the Asus motherboard. Without access to the Asus original image I may not be able to work on + test this integration.\n\n### TODO #3: Previous revisions of DS2\n\n`opends2io` has been tested with the final revision (4.0) of Deathsmiles 2.\n\nI have no access to previous revisions as of now and cannot test how the board behaves with them.\n\n### TODO #4: USB dongle\n\nEach original controls board was uniquely programmed with the PCB's serial number as part of a security measure.\nIt is passed to the game and compared with the contents of the USB security dongle containing a matching key.\n\nWithout access to the contents of a USB dongle I can't test if this works fine.\n\nThis check can be disabled by modifying a few bytes in `cvgame.exe`, which is how my testing has been done so far.\n\n### TODO #5: Check PCB features\n\nI need to confirm a few things about the PCB design relative to the original cv2000xp board.\n\nFor example:\n- is the pinout for the F_PANEL header correct?\n- what is the purpose of the pushbutton that is close to the F_PANEL header?\n  I assumed it was a power switch and went ahead and included one in my design since it seemed convenient, but it could be something else entirely.\n\n\n## Help!\n\nIf you can/want to help with the above points, reach out to loopfz AT gmail. It would be very appreciated :)\n\n\n## Building opends2io\n\n### PCB\n\nTODO\n\n### Uploading to Teensy 2.0 board\n\nTODO\n\n\n## Acknowledgements\n\nThis project started out as a fork of [JVSy](https://github.com/k4roshi/JVSy) which interfaces JVS to a computer, acting as a standard gamepad. Most of the code has changed/evolved a lot, but the outline of the program remains. Great project, it was very helpful.\n\n[JVS2x](https://github.com/Fredobedo/JVS2X) is another great fork of `JVSy` that was a good source of inspiration for the handling of the JVS sense line.\n\n`yksoft1` shared insights regarding the Deathsmiles 2 serial protocol in various forum threads and also several patches to `cvgame.exe` to bypass some limitations (usb dongle, heartbeat timeout etc.), making this project possible in the first place.\n\nOther important ressources used:\n- [Translated JVS reference](http://daifukkat.su/files/jvs_wip.pdf): essential to understand the finer details of the JVS protocol\n- [Photos of the inside of Deathsmiles II boxes](https://ikotsu.blogspot.com/2010/03/deathsmiles-ii-pos-arcade-pc.html): helped me design the PCB (layout, how it is attached, pinout of the F_PANEL header, etc.)\n- Many forum threads e.g. [Cave-STG](http://cave-stg.com/forum/index.php?topic=472.420), [Neofighters](https://www.neofighters.info/forum/showthread.php?14783-Deathsmiles-2-Arcade-PC), ...\n\n\n## License\n\nThe code and pcb are both licensed under GNU GPL v3.\nSee [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floopfz%2Fopends2io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floopfz%2Fopends2io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floopfz%2Fopends2io/lists"}