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
To run use $ make qemu-mac
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 use $ make qemu-pulse
If you have sound device issues, try the SDL backend for QEMU with $ make qemu-sdl
or disable any audio devices with $make qemu-no-audio
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.
Good luck. Maybe try dual booting with Linux if this doesn't work out :)
- Follow the Unix-like instructions while using WSL
- Using MSYS2 and the i386-elf-toolchain
- Extract the binaries of the GCC and binutils releases to your mingw64 folder (likely at
C:\msys64\mingw64
) make
,gcc
, etc. should now be in yourPATH
- Extract the binaries of the GCC and binutils releases to your mingw64 folder (likely at
> make img
> qemu-system-i386 -drive format=raw,file=boot.img -display sdl -audiodev id=dsound,driver=dsound -device sb16,audiodev=dsound
If sound is broken or choppy, try running with > qemu-system-i386 -display sdl -drive format=raw,file=boot.img -audiodev id=dsound,driver=dsound,out.fixed-settings=on,out.frequency=22050,out.buffer-length=80000,timer-period=100 -device sb16,audiodev=dsound
You probably know what you're doing if you're going to try this. Just burn boot.img
onto some bootable media and give it a go. The SB16 is dynamically disabled in case it's not found or it's reset procedure fails, but if things continue to break try removing all references to sound or music first.