NESCD-001: Een onofficiële CD-drive uitbreiding voor de NES

Hoe het werkt

Het systeem bestaat in essentie uit een RP2350B die is gekoppeld aan zowel een Everdrive N8 Pro als een IDE CD-station. De RP2350B fungeert als de coördinator die de brug vormt tussen de NES/Everdrive en het CD-station.

Het proces werkt als volgt:

  1. De game-ROM wordt vanaf de CD gelezen.
  2. De ROM wordt via USB naar de Everdrive geüpload.
  3. Er wordt aan het menu gevraagd om de game te installeren.
  4. De controller houdt vervolgens een 'mailbox byte' in het CHR RAM van de cartridge in de gaten om te zien of de game om muziek vraagt.

Projectvideo: https://www.youtube.com/watch?v=6D8RWVwW4ZI

Hardware

De benodigde hardware bestaat uit:

  • De hoofd-PCB (zie de map pcb/)
  • Een standaard 40-pins IDE CD-station
  • Everdrive N8 Pro

Bouwen

Om de firmware te installeren, gebruik je het volgende commando: cd firmware && ./flash.sh

Een disc maken

Voor het maken van de demo-game zijn cc65 (ca65/ld65), python3 met numpy, ffmpeg voor de audio en xorriso om de disc te branden vereist.

De demo maken: cd game && make (dit genereert demo.nes, vier muziektracks en build/demo.img)

De disc branden: cd game && make burn (brandt build/demo.img en leest deze terug ter controle)

Een eigen game op een disc zetten: Om een eigen game op een disc te zetten, gebruik je mkgamedisc.py met een iNES ROM en één track per muziekbyte: python3 firmware/tools/mkgamedisc.py theme.wav -o theme.rom --loop-start 4.2 python3 firmware/tools/mkgamedisc.py -o mygame.img --title "MY GAME" --nes mygame.nes --track 1=theme.rom --verify firmware/burn.sh mygame.img

Gebruik

Wanneer alles correct is ingesteld, kun je een gebrande disc in het CD-station plaatsen terwijl de NES is ingeschakeld en zich in het menu van de Everdrive bevindt. De game zal automatisch opstarten zodra deze is uitgelezen en naar de Everdrive is geüpload.

Audio-CD's afspelen

Een van de meest praktische functies van dit apparaat is het gebruik als CD-speler. Het uitvoeren van make in de game-directory bouwt ook build/cdplayer.nes. Kopieer deze ROM naar de SD-kaart van de Everdrive (of push deze via USB), start de ROM vanuit het menu en plaats een gewone audio-CD in het station.

Veelgestelde vragen

Wat is dit precies? Het idee voor dit project ontstond tijdens het lezen over de geannuleerde SNES CD-ROM uitbreiding. In eerste instantie was het plan om een versie daarvan te maken, maar het leek leuker en vreemder om een versie voor de NES te ontwikkelen.

Waarom is dit gemaakt? Omdat het leuk is.

Wie heeft dit gemaakt? Throaty Mumbo.

Waar zijn de FMV's (Full Motion Videos) die in de video te zien waren? Ik heb ervoor gekozen om geen FMV-gerelateerde code toe te voegen. Om dit werkend te krijgen, moest ik namelijk de 'Bad Apple!! Ultimate NES Demake' van Something Nerdy semi-reverse engineeren, welke momenteel closed source is. Het team heeft aangegeven dat ze van plan zijn hun MXM-mapper officieel open source te maken zodra hun game Former Dawn is uitgebracht. Ik vond het niet juist om reverse engineered code van een indie-ontwikkelaarsteam te publiceren voor dit project.

Waarom audio niet streamen vanaf de Everdrive? Dit was het oorspronkelijke plan, maar ik liep tegen de limieten van de USB-bandbreedte van de Everdrive aan. Om dit te laten werken, zou ik agressieve compressie moeten toevoegen. Bovendien is het gebruik van de expansiepoort een leuk detail.

Hoewel de USB-kabel aan de voorzijde een cosmetisch minpunt is, is de bandbreedte van de expansiepoort helaas nog beperkter dan die van de USB-route. Daarnaast biedt de audio via de expansiepoort meer flexibiliteit bij het mixen en de volumeregeling, wat de volumeknop aan de voorzijde verklaart.

Hoe wordt het apparaat gevoed? Via een enkele molex-kabel van een wandadapter. De 5V/12V-rails worden verdeeld tussen het CD-station, de printplaat en de NES-uitgang. Ik heb het uiteinde van een reserve-NES-stroomkabel aangesloten op een buck-converter die de 12V-ingang omzet naar ongeveer 9,5V, zodat de NES ook via dit systeem van stroom kan worden voorzien (de stekker steekt uit de bovenkant van de behuizing). Hierdoor is er slechts één stopcontact nodig. De NES kan echter ook apart worden gevoed met de reguliere adapter; de stekker uit de NESCD is optioneel.

Kon alles niet gevoed worden via VRAW? Dat was het eerste plan, maar dat leek riskant gezien het feit dat de standaard NES-adapter (1,3A) de NES, Everdrive, RP2350, DAC en het CD-station tegelijk moet voeden. De adapter voor het Fideco-station dat ik aanvankelijk testte, levert 2A. Daarom heb ik gekozen voor een dedicated 2A molex-adapter (die volgens het label 2A levert op zowel 5V als 12V). Ik heb niet objectief gemeten of het via VRAW zou werken, dus dit was een voorzichtige keuze. Indien het wel werkt, is dit een mooie verbetering voor een eventueel v2-ontwerp.

Hoe keer je terug naar het Everdrive-menu nadat er een disc is geplaatst? Dit is nog een punt dat ik probeer op te lossen. Voor zover bekend is er geen manier om een soft reset op de NES te triggeren. Een gegarandeerde oplossing is om de NES-stroomrail aan te sluiten op een relais-schakelaar. Op die manier kan de printplaat de NES simpelweg uit- en inschakelen bij de bron om een reset te forceren. Niet elegant, maar functioneel.