Console Protocol Documentation¶
This directory contains comprehensive technical documentation of the retro console communication protocols implemented in Joypad. Each protocol represents significant reverse-engineering work and aims to serve as a definitive reference for developers.
Available Protocol Documentation¶
✅ Nuon Polyface Protocol¶
Status: Complete Reverse-Engineered: 2022-2023 Significance: First open-source documentation
The Nuon Polyface controller protocol was previously completely undocumented. This represents months of hardware analysis, SDK research, and iterative testing.
✅ PCEngine / TurboGrafx-16 Protocol¶
Status: Complete Implemented: 2022-2023 Significance: Comprehensive multitap and mouse implementation reference
While the basic PCEngine controller protocol is documented in the community, this reference provides detailed coverage of: - Multitap scanning mechanism (5-player support) - Mouse delta accumulation strategy - 6-button and 3-button mode implementations - RP2040 PIO state machine architecture - Dual-core coordination for timing-critical output
✅ GameCube Joybus Protocol¶
Status: Complete Implemented: 2022-2025 Significance: Reverse-engineered keyboard protocol + comprehensive profile system
While the basic joybus protocol is documented, this reference provides: - Reverse-engineered GameCube keyboard protocol (0x54 command, keycode mappings, checksum algorithm) - Sophisticated profile system with flash persistence (SSBM, MKWii, Fighting, SNES configs) - Joybus PIO timing implementation (130MHz overclocking requirement) - Advanced trigger logic for different controller types - Dual-core coordination for timing-critical output
Planned Documentation¶
🚧 Xbox One I2C Protocol¶
Status: Planned
Implementation: src/console/xboxone/
Internal USB host mod protocol: - I2C communication with Xbox One controller chip - Button/analog passthrough - Rumble protocol (partial reverse-engineering) - Integration challenges
Documentation Standards¶
Each protocol document should include:
1. Overview Section¶
- Historical context
- Significance (original documentation or reverse-engineered)
- Key characteristics
- Physical layer description
2. Protocol Details¶
- Packet structure with bit-level diagrams
- Command reference with hex values
- State machines and enumeration sequences
- Timing diagrams and requirements
3. Implementation Notes¶
- Hardware requirements
- PIO programs (if applicable)
- Dual-core considerations
- Known limitations
4. Practical Examples¶
- Real packet captures
- Common command sequences
- Button/analog encoding tables
- CRC/checksum algorithms
5. Appendices¶
- Quick reference tables
- Bit field maps
- Acknowledgments
- References
Document Template¶
Use this structure for new protocol documentation:
# [Console Name] [Protocol Name] Protocol
**[Status of prior documentation]**
Reverse-engineered/Documented by [Author] ([Year])
[Brief description of significance]
---
## Table of Contents
[...]
## Overview
[...]
## Physical Layer
[...]
## Packet Structure
[...]
## Protocol State Machine
[...]
## Command Reference
[...]
## [Console-Specific Sections]
[...]
## Implementation Notes
[...]
## Acknowledgments
[...]
## References
[...]
Contributing¶
When adding new protocol documentation:
- Research thoroughly - Include citations for existing documentation
- Credit sources - Acknowledge prior work and community contributions
- Provide examples - Real-world packet captures and test cases
- Document discoveries - Highlight reverse-engineered insights
- Maintain consistency - Follow the established format
Significance of This Work¶
These protocol documents serve multiple purposes:
- Preservation - Document protocols before hardware/knowledge is lost
- Education - Teach modern developers about retro communication protocols
- Reproducibility - Enable others to build compatible implementations
- Community - Share knowledge with homebrew and preservation communities
Many retro protocols were never officially documented, existing only in proprietary SDKs or firmware. Reverse-engineering and documenting these protocols ensures they remain accessible for future generations.
Related Resources¶
External Protocol Documentation¶
- GameCube Joybus: joybus-pio
- N64 Controller: N64brew
- PCEngine: Limited public documentation
- Nuon: No prior public documentation (see NUON_POLYFACE.md)
Retro Console Communities¶
- Nuon-Dome: Nuon homebrew community
- N64brew: Nintendo 64 development
- NEC Retro: PCEngine/TurboGrafx-16
License¶
All protocol documentation in this directory is licensed under Apache License 2.0, matching the Joypad project license.
This directory represents countless hours of hardware analysis, logic analyzer captures, SDK research, and iterative testing. Each protocol document is a contribution to the preservation of retro gaming technology.