💫 A different take on assembly, with the goal of creating tiny executables
Go C Shell Makefile Python
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bottles99
fibonacci
helloworld
kernel
life
samples
samples16
samples32
samples64
scripts
spongy
src
workinprogress
.gitignore
.travis.yml
GOTCHAS.md
LICENSE
Makefile
README.md
TODO.md
TUTORIAL.md
ideas.txt
reference.txt

README.md

Battlestar

Build Status License Report Card

  • Version: 0.51
  • License: MIT
  • Author: Alexander F. Rødseth

What is Battlestar?

  • A work in progress.
  • Created for fun and for the educational process.
  • A programming language specifically for 64-bit and 32-bit x86 and Linux.
  • Subset of assembly with an alternative syntax and with support for inline C.
  • The indended purpose is for writing 4k and 64k demoscene demos.

Quick start

Build and install Battlestar, build the samples and run the "life" sample:

  • make; sudo make devinstall; make samples; cd life; ./life.sh

This requires DosBox, Go, Yasm and GCC.

gcc-go is not supported yet.

Features and limitations

  • The resulting executables are tiny!
  • "hello world" is only 174 bytes for 32-bit Linux (when using sstrip from elfkickers). (238 bytes for 64-bit Linux, 31 bytes for 16-bit DOS)
  • It's possible to write an operating system / kernel with only one source file.
  • Full support for inline C (by utilizing gcc).
  • C and Battlestar code can exist in the same source file and calls can be made both ways.
  • Battlestar programs compiles almost instantly.
  • Programs can be run like scripts by including this line at the top: #!/usr/bin/bts
  • Interrupts can be called with the same syntax for both 32-bit and 64-bit x86 on Linux.
  • Also supports 16-bit x86 with DosBox.
  • The intermediate assembly is fully commented.
  • No register allocator, just an alternative assembly syntax.

In progress

  • macOS support
  • Reimplementing 16-bit demoscene demos without using any inline assembly
  • See TODO

Installation

Make sure Go, Yasm and GCC are installed.

Install on Linux:

sudo make install-linux

Install on macOS:

sudo make install-macos

For development, install soft links instead:

sudo make devinstall

Build all the samples:

make samples

Build dependencies

  • go >= 1.3

Runtime dependencies

  • yasm

Optional runtime dependencies

  • gcc (for inline C support)
  • elftools/sstrip (for even smaller binaries)
  • binutils (for disassembling with objdump)
  • dosbox (for running 16-bit executables) (only GCC 4.9 and up supports compiling to 16-bit with -m16)
  • SDL 2 (must be compiled and installed manually if on Red Hat 6)
  • tcc (for even smaller binaries, in many cases)