Git Product home page Git Product logo

battlestar's Introduction

Battlestar

License Go Report Card

What is Battlestar?

  • A programming language specifically for 64-bit x86 Linux, 32-bit x86 Linux and 16-bit x86 DOS.
  • Subset of assembly with an alternative syntax and with support for inline C.
  • A work in progress.
  • Created for fun and for the educational process.
  • The indended purpose is for writing small operating systems, 1k and 4k 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; cd ..

This requires DosBox, Go, Yasm and GCC.

Build and boot a kernel (requires GCC, Yasm, Battlestar and the qemu-system-i386 executable):

  • cd kernel/simple; make boot; cd ../..

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.
  • Supports 16-bit x86 that can run within DosBox.
  • The intermediate assembly is fully commented.
  • No register allocator, just an alternative assembly syntax.
  • gccgo is not supported yet.

Sample program

This is a 16-bit x86 program, for DOS:

// "Life"
// The original was written by "melezov" (http://256bytes.untergrund.net/demo/334)

fun main
    al = 0x13               // set graphics mode (mode 13h)
                            // 320x200, 256 colors, one byte per pixel
    int 10

    stack -> sp             // pop  sp
    stack -> b              // pop  bx
    stack -> ds             // pop  ds

    ds -> es                // push ds, pop es

    al = 62
    ch = 0xFA
    loopwrite               // rep stosb

    loop

        di <<< 3           // rotate left 3

        di -= 7            // subtraction
        di ^= 2            // xor

        al = readbyte di   // read byte from memory
        al += [di+321]     // add value at [di+321] (pixel on the line below)
        al /= 2

        di -> stack
        write               // stosb
        write

        di += 0x13E
        write
        write

        stack -> di

    end // loops forever

end

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.

Installation:

sudo make PREFIX=/usr install

For development, install soft links instead:

sudo make install-dev

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)

External links

General info

battlestar's People

Contributors

raxod502 avatar xyproto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

battlestar's Issues

Build Failure

With command Make samples
Log:

bts build
/usr/bin/bts: 11: /usr/bin/bts: function: not found
/usr/bin/bts: 12: [: ==: unexpected operator
/usr/bin/bts: 14: [: ==: unexpected operator
Makefile:2: recipe for target 'all' failed

Automatic register allocation

The LLVM IR automatically does register allocation, so does the PeachPy compiler. Perhaps battlestar can do something similar?

String concatenation

I noticed that in most of the examples for 99bottles, strings are printed separately, variable by variable, is there any way to do string concatenation?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.