This wiki is dedicated to documenting the progress of the ENIO. Hardware functions, communications methods and sample client code will be covered.
What is ENIO?
ENIO stands for Extended NES I/O. The ENIO is like a broker that allows the NES to communicate with devices and IP hosts without having to run an IP stack or bitbang serial data.The original goal was to build an ethernet adapter for the original toaster NES. Along the way, USB keyboard support was added with the possibility of serial communications as well.
There are two physical parts...
- ENIO EXP Board - Connects to the EXP port, provides Famicom EXP and ENIO CPU cable headers
- ENIO CPU Board - Brokers I/O requests so the NES can communicate with IP hosts and accept input from a USB keyboard.
Project Status - 2012/08/30
The ENIO EXP Board is complete. I have some ready to be shipped for those who are interested See the ENIO EXP Board page.
ENIO CPU Board To-Do List
- Design PCB and order proto boards - COMPLETE
- Build test unit - COMPLETE
- Test ethernet hardware - COMPLETE
- Test USB KB input - COMPLETE
- Test MicroSD read and write functions - COMPLETE
- Add CPLD reprogramming function to firmware - COMPLETE
- Test CPLD reprogramming function - COMPLETE
- Add SD bootloader to firmware - COMPLETE
- Test SD bootloader - COMPLETE
- Double check communications between ENIO and NES - COMPLETE
- Send units to beta testers - COMPLETE
- Provide beta testers with source code & documentation - IN PROGRESS
- Work with beta testers to finalize CGP protocol
- Collect input from beta testers on hardware design
- Order a production run of the boards
How does it connect to the NES?
The EXP board connects to the expansion port connector under an original toaster NES. It connects to the CPU board via ribbon cable. The CPU board sits on top of the NES and provides ethernet, USB and MicroSD connectors.
Are data transfers serial or parallel?
Parallel. All communications between the NES and ENIO are 8-bit. This saves a great deal of CPU time since the NES does not have to reconstruct serial data.
How does the NES address it?
A homebrew game can communicate with the ENIO one of two ways...
- Reads from $4017
- Writes to any address under $8000
- Uses the $4016 latch bit 1 as a R/W flag
- Cannot be used in conjunction with the second controller port
- Can be used by ANY cart, does not require any signals on the Cart-EXP pins
Direct Addressing Mode
- Reads from and write to $4700
- Does not require the use of $4016 latch bit 1
- Can be used in conjunction with the second controller port
- Requires a custom cart capable of sending R/W and /CE signals down the Cart-EXP pins
What protocol is used to talk to it?
Classic Gaming Protocol, or CGP for short. The goal of CGP is to provide a standard method of communications between legacy systems and the ENIO. CGP uses virtual channels to differentiate between control and data traffic. A control channel is used to set up, tear down and provide status on data channels.
Take a look at this document to see an overview of how the ENIO queues and processes data...