Giter Club home page Giter Club logo

mako's Introduction

Mako

Mako VM Logo

Mako is a portable stack-based virtual game console. Mako was designed to be simple to port and implement: even including optional features, the reference implementation is only a few pages of Java. All the games and demos written for Mako can now be tried directly in your browser thanks to Mako.JS.

Deep Screenshot

The Mako platform includes a complete development toolchain centered around Maker, a Forth-like systems programming language. Maker comes with an extensive standard library, including such highlights as a modular garbage collector, a cooperative multitasking system, an entity management system, and audio synthesis utilities. Where applicable, libraries have test harnesses based on the Test Anything Protocol.

Forth Warrior Screenshot

Other programming tools targeting the Mako VM include FiveTran, a historically-inspired FORTRAN compiler, and Stroyent, a C-like systems language. Other programming environments run directly on the Mako VM, like MASICA, a TinyBASIC, Loko, a powerful Logo environment, and MakoForth, a proper Forth which powers the game Forth Warrior.

Most work on Mako ceased in 2013, but the repository here is maintained for inspiration and educational purposes.

Using Maker

Mako's toolchain requires Java and Apache Ant. The Maker source files provided in the examples directory can be executed by compiling Maker and then invoking it with a filename and the '--run' flag. Without the flag, Maker will simply print a disassembly of the prepared Mako memory image.

To compile, run ant from the top directory.

To run an example, invoke Maker from the command line:

java -jar dist/Maker.jar /games/Pong/Pong.fs --run

Or use the 'maker' script to save a little typing:

./maker /games/Pong/Pong.fs --run

Hardware Overview

  • All registers are memory-mapped, simplifying save-states and metaprogramming.
  • Dual-stack architecture (parameter stack and return stack).
  • 32-bit word-oriented memory.
  • 320x240 pixel 24-bit display at 60hz.
  • 256 variable-sized sprites with flags for mirroring.
  • Scrollable 31x41 grid of 8x8 background tiles, with draw-priority flags.
  • Keyboard and "virtual gamepad" input.
  • 8khz sampled audio output.
  • Memory-mapped RNG.
  • Optional console and filesystem I/O.

mako's People

Contributors

adhithyan15 avatar cpressey avatar johnearnest avatar paldepind avatar pikhq avatar rmmh avatar yuriks 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  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  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

mako's Issues

Document audio interface better

There should probably be a description of the AU register in the "Talking to the Hardware" section of makoBasics.markdown. Possibly also mention the audio capabilities in Readme.txt.

Embedding ROMs in Images (.png)

I'd like to make it possible to embed ROMs in .png images, so you can host them as images and have a Mako web player that you point to the appropriate URL.

Something like this:

Imgur

Holds about 128KB of data. The Five game compresses down to 20KB with bzip2..

I'm not sure on the best way to do the border around the data region. It might be helpful to have it include text like "Mako ROM -- http://mako.github.com/1" (assuming that's a link to the web player).

Consider officially placing Mako under an open-source license

'Cuz, y'know, I find I can't sleep at night, thinking about all the developers who might want to fork Mako and make awesome enhancements and bugfixes to it, but whose lawyers start going all goggle-eyed and sweaty at the idea and start shaking their fingers and mumbling discouraging Latin phrases.

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.