BAD-APPLE-OS: An operating system that only plays Bad Apple
Yep, this is bad apple running on bare x86. Based on jdah/tetris-os, but who wants to play tetris anyways?
The image is stored as a series of rectangles (5 bytes per rectangle, max. 70 rectangles per frame).
A higher quality could be achieved by increasing the number of rectangles and framerate. but i could not get the bootloader (stage0.S) to load more than like 400k of kernel without breaking stuff... maybe i'll fix it someday
- Bad Apple
- 32-bit (x86)
- fully custom bootloader
- runs at like 7 fps
- looks like 💩
- no music
- may or may not run on real hardware
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.