About Bitbox

The Bitbox console is a small (6.5cmx5cm, 2.5"x2") open hardware, open source VGA console based on a single microcontroller chip.

Hardware


Main specifications


  • Based on the STM32F4 chip including 1MB Flash and 192kB SRAM
  • 15 bit (32768 colors) color VGA with a resistive DAC.
  • Software based signal generation, DMA based. Resolution : Variable, standard resolution of 640x480 @ 60 Hertz
  • Stereo 12bit Audio DAC, sampling frequency
  • microSD driven by 4wire SDIO (6 MB/s transfers tested)
  • 1 user button / user LED
  • 2 USB 2.0 host 
  • 1 microUSB for power (may be used for loading firmware by soldering 2 solder jumpers)
  • UEXT extension port 
  • SWD port to debug programs on chip
  • Integrated VGA & dual USB socket (instead of external cables)

The design files are stored on github, and the first prototypes can be (and have been) purchased.

The Bootloaders (there are two stages of bootloaders) are being finished (only a few blocking bugs).

Running games with sound is currently possible (with no bootloader integration for now).
Also, running full motion video is possible




NOTE : This is the rev2 hardware. Rev2 is a limited update of the bitbox rev1, but is not a completely different version 2, but it's more than a bugfix however. It is the current version and should be quite stable. Information about the first version of the bitbox.

Quick tour

  • The microUSB is used for power (5v), around one or two hundreds of milliamps. It can be used also (when solder bridges 1&2 are closed) to update the firmware from USB. Don't use usb client and host at the same time. A fuse of 500mA is used for pretection.
  • the PWR connector can be wired to power the bitbox on batteries. The regulator allows input voltages between 4.7 and 15V (theoretically :)
  • User button can be used for games, but is also used to trigger the bootloader : if you press it while pressing reset, the bitbox will try to load the bootloader file on the microSD. If it is not pressed, the game inside of the main chip will be run.
  • User LED can be used when the main bootloader cannot be loaded by blink codes, and can be used by games as they see fit.
  • UEXT port allows extensibility of the main box, providing SPI, I2C and UART access
  • Reset button, well, resets
  • PWR LED states that, yes, you didn't forget to plug the box.
  • Audio out is a stereo line out. It is not designed to plug a  directly
  • VGA out is the big plug
  • microSD is used to store games and 
  • Dual USB host is used to plug USB devides (gamepads, mice, keyboards). Don't forget that bitbox games must have support for your device. Good news is that it is simple to add in bitbox kernel.

Software 

Bootloader

The bootloader has a two-level structure. You can read about it here.
The bootloader itself can be upgraded (or removed altogether) using USB, SWD or UART. You can't brick your bitbox updating it.

Both bootloaders are written in C and available on the project github.

Kernel

Games are running on bare metal, i.e. there is no operating system to handle processes, files or anything. However games can rely on a kernel that will provide many functionnalities, all of the being optional. If you don't want to use them in your game, it won't be compiled in :
  • VGA generation 
  • Sound generation
  • USB devices handling (mice, keyboards, gamepads)
  • FAT files reading, writing on the microSD card (based on fatfs)
  • Simple graphical engine (sprites, tiles, compressed images)
  • User button and LED

(with other functions being added for music by example)

The kernel is implemented in C and released as opensource as an API. It is always included as source file in each game, allowing games to trim the fat and not having compatibility issues. 

This API, included in bitbox.h file, has been emulated by a SDL program. It allows you to compile a game and run it on your PC and compile the same source code for your bitbox. The only difference being (for standard programs, not if you use specific hardware outside of the API of course), well, performance and available memory size !

Games

Games are usually written in C and include a small kernel to handle low level elements such as Video, SDIO access, USB devices handling.

There are currently a few games actually written or in preparation.

Also, a functional Gameboy emulator has been ported to bitbox : bitboy  

Tutorials

There are a few tutorials for writing games for bitbox ; please comment them if they're not clear enough !


4 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. Hi!

    Interesting project, I like the simple idea using a line buffer for VGA signal generation, how it seems to be something quite easy to port: actually a great idea in general for software rendered stuff on any platform!

    I miss the operating frequency though. Somewhere you mention 5K cycles for generating a line, by this, taking VGA 640x480@60Hz timing I assume the ARM is clocked at 160MHz. That's quite fast. 192K RAM is also plenty for just about anything passing as a retro game, well, coming from some Uzebox hacking it is :)

    I will definitely come back to this later, having some concepts for retro style computer roleplaying games which would work well with it.

    Jubatian

    ReplyDelete
  3. There is now new Cortex-M7 MCUs out there with more performance to offer. Have you check the SAMS70 from Atmel?

    http://www.atmel.com/technologies/cpu_core/arm/cortex-m7.aspx

    Happy New Year!

    ReplyDelete
  4. This comment has been removed by a blog administrator.

    ReplyDelete