Cuzebox3DS

From GameBrew
Revision as of 01:45, 15 September 2021 by HydeWing (talk | contribs)

Template:Infobox-3DS-Homebrews

CUzebox emulator

  • :Author: Sandor Zsuga (Jubatian), ported by Ryan Stenz (ry755)
  • :License: GNU GPLv3 (version 3 of the GNU General Public License)
  • The Uzebox is an open source, retro-minimalist homebrew game console, based on an 8 bit AVR MCU.
  • The particularity of the system is that it's based on an interrupt driven kernel and has no frame buffer. Functions such as video sync generation, tile rendering, and music mixing is done realtime by a background task so games can easily be developed in C.
  • The final design contains only two chips: an ATmega644 and an AD725 RGB-to-NTSC converter.
  • The ATmega644 is overclocked to 28.6 MHz, which is 4 times the NTSC color burst frequency.
  • It has 64K of flash memory and 4K of ram. However, only 60K of flash is available for games, as 4K is taken up by the bootloader.

cuzebox is a Uzebox emulator written by Jubatian, and since it's open source I was able to port it to the New 3DS.

Important Info: This emulator doesn't run perfectly, even when using the New 3DS's faster 804 MHz mode. It runs at about 40% speed, which means the game is slower and there's some input lag. Some games run better than others though.

I'm still working on optimizing it, so hopefully I can get it to run faster in future versions.

What games are there?

  • There is a list of Uzebox games on the wiki: http://uzebox.org/wiki/Games_and_Demos
  • Simpler games like Pacman, Megatris, Bugz, and Frogger run well on the emulator.
  • Since everything is open source with lots of documentation, it's also easy to write your own games in C.

IMG_20180916_150652061.jpg

Overview

This is a currently experimental emulator for the Uzebox game console written entirely in C, using SDL 1.2.

For building, use the Make_config.mk file to specify target platform. Currently it should build for Linux, 3DS (CTR, requires devkitPro and the SDL-3DS lib), and Emscripten, and Windows as cross compile target using mingw32-gcc (I can not test native compiles for that platform since I don't have the OS).

The SDL-3DS library can be found here: https://gbatemp.net/threads/release-sdl-3ds-1-2-15-simple-directmedia-layer-for-3ds.459291/

Credits:

  • Jubatian, for writing the original cuzebox
  • The rest of the Uzebox community, for creating such an awesome console:)

Troubleshooting:

  • After launching it, it just quits back to the Homebrew Launcher!
  • Make sure cuzebox3ds.3dsx and boot.hex are located in /3ds/cuzebox3ds on the SD card
  • ​The audio sounds like crap!
  • That's a side effect of the slow emulation speed. It'll be like that until I'm able to get the emulator to run faster
  • For now, just keep the volume turned off

Controls

You can control Player 1's SNES controller as follows:

  • D-Pad: SNES D-Pad
  • A/B/X/Y: SNES A/B/X/Y
  • Start/Select: SNES Start/Select
  • L/R: SNES L/R
  • ZR: Exit cuzebox3DS (returns to Homebrew Launcher)

Emulated components

Currently the following features are implemented:

  • AVR core with cycle perfect emulation.
  • Core AVR peripherals as necessary to run Uzebox games.
  • Sound and video output (frame rate synchronized to host if possible).
  • SNES controllers.
  • EEPROM including saving its contents alongside the emulated game.
  • SPM instruction and related elements necessary for bootloader emulation.
  • SD Card read and write (writing didn't see much testing yet).
  • SPI RAM.

Notes:

The SD card emulation is fairly capable, it has several compile time constants in the cu_spisd.c file which you may adjust. You can set them to emulate a strict SD card breaking several existing games, but which can help you developing more robust SD code.

The SD write feature is sandboxed within the directory of the game. It doesn't emulate subdirectories. You may only override existing file contents, expand files or create new ones, it should be capable to track these operations if you write the FAT first.

A bootloader can be started simply by passing the bootloader's .hex file as parameter to the emulator. The virtual SD card is composed from the files existing in the same directory. Note that the emulator can not remember what the bootloader wrote last time into the flash. (So you can not start the last selected game with the 0.4.5 bootloader as it recognizes the game by a CRC written in EEPROM, not by flash content. The 5.x.yy bootloaders work fine)

Advertising: