GithubHelp home page GithubHelp logo

bakervm / bakervm Goto Github PK

View Code? Open in Web Editor NEW
10.0 3.0 0.0 775 KB

A virtual machine for building and running retro games

Home Page: http://bakervm.org

License: MIT License

Rust 99.85% Shell 0.15%
interpreter bytecode vm game-development virtual-machine retro-games rust msgpack

bakervm's Introduction

bakerVM Crates.io Build Status Docs.rs dependency status

A virtual machine for building and running retro games

The logo of the bakerVM

Introduction

The bakerVM is a virtual machine that executes bakerVM bytecode.

A builder-like compiler backend for the vm can be found in core/image_builder.rs.

The executable images of the vm are encoded and decoded using MessagePack

NOTE THAT THIS SOFTWARE IS STILL UNDER HEAVY DEVELOPMENT AND IN NO WAY STABLE OR COMPLETE.

A screenshot of the bakerVM

Installation

Install sdl2

On Ubuntu:

sudo apt install libsdl2-dev

On macOS:

brew install sdl2

The toolchain doesn't support Windows yet

Install the toolchain

To get the newest version of the bakerVM toolchain, first you have to install Rust. The Project is currently tracking stable Rust. After you installed Rust and Cargo correctly, install the toolchain using the following command:

cargo install bakervm

If you already installed an older version you have to force the installation:

cargo install bakervm -f

After the installation, you should have the following binaries installed: bakervm and hudson.

hudson is the bakervm toolkit. It is currently only able to compile *.basm files.

hudson compile path/to/source.basm

bakervm is the VM itself. On startup it loads the stock image by default. But you can specify any bakerVM image:

bakervm path/to/my/image/game.img

bakervm's People

Contributors

sphinxc0re avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bakervm's Issues

Create the `Shell` trait

Create a trait which allows devs to implement their own I/O system around the actual VM while using the same instruction set

trait Shell {
    type Error;

    /// Is called right before the VM executes code
    fn prepare(&mut self, &mut VM) -> Result<(), Self::Error>;
    /// Sends the given buffer to the shell
    fn send_buffer(&mut self, &Buffer) -> Result<(), Self::Error>;
    /// Receives and handles an event
    fn receive_event(&mut self, &Event) -> Result<(), Self::Error>;
}

Build fuzzing pipeline in TravisCI

Because of the nature of virtual machines I have to write a fuzzing API that generates instructions based on popular patterns and tests them against the VM

Expand README.md

The current README.md doesn't really describe the project. It should be expanded to do so and also describe goals and non-goals.

Move core computing module into definitions/core

For a while now I'm thinking of moving out the actual VM part of the BakerVM and putting it into a library form with the bakervm executable as a frontend to the actual computing. With this I sooner or later intent to move the BakerVM core into its own library so everyone might be able to use the core for some arbitrary computation.

Remove compilation code from `core`

There is still a lot of code in core that belong to the time when the compiler and the data consumed by the VM were very close. The core library should be as abstract as possible allowing for an clean reimplementation of the original VM.

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.