Video with an explanation of the development process.
- It's Tetris.
- 32-bit (x86)
- Fully custom bootloader
- Soundblaster 16 driver
- Custom music track runner
- Fully hardcoded tetris theme
- Double-buffered 60 FPS graphics at 320x200 pixels with custom 8-bit RGB palette
NOTE: This has only been tested in an emulator. Real hardware might not like it.
EDIT: this is not true anymore! @parkerlreed has run this on a Thinkpad T510.
For the cross-compiler: $ brew tap nativeos/i386-elf-toolchain && brew install i386-elf-binutils i386-elf-gcc
$ make iso
$ qemu-system-i386 -drive format=raw,file=boot.iso -d cpu_reset -monitor stdio -device sb16 -audiodev coreaudio,id=coreaudio,out.frequency=48000,out.channels=2,out.format=s32
You should not need a cross-compiler in most cases as the gcc
shipped in most linux distros will support i386
targets.
If this isn't the case for you, read here about getting a cross-compiler.
To run:
$ make iso
$ qemu-system-i386 -drive format=raw,file=boot.iso -d cpu_reset -monitor stdio -device sb16 -audiodev pulseaudio,id=pulseaudio,out.frequency=48000,out.channels=2,out.format=s32
If you have sound device issues:
- To disable music entirely, try building without the
#define ENABLE_MUSIC
inmain.c
and running with
$ qemu-system-i386 -drive format=raw,file=boot.iso
. - Try using the SDL backend for QEMU:
$ qemu-system-i386 -display sdl -drive format=raw,file=boot.iso -d cpu_reset -monitor stdio -audiodev sdl,id=sdl,out.frequency=48000,out.channels=2,out.format=s32 -device sb16,audiodev=sdl
If you're having issues with no image showing up/QEMU freezing, this is a known bug with QEMU SB16 emulation under GTK. Please read what @takaswie has written in #2 for a workaround.
Absolutely no idea. Maybe try WSL.
You probably know what you're doing if you're going to try this. Just burn boot.iso
onto some bootable media and give it a go. If things break, try disabling all of the music (remove #define ENABLE_MUSIC
in main.c
) since you probably don't have something with a SB16 in it.