/zvm

A pure-python implementation of a Z-machine interpreter

Primary LanguageAssemblyBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

The goal of the ZVM project is to write a pure-python implementation
of a Z-machine, a virtual computer architecture that executes
interactive fiction stories written in a special language, called
Z-code.

The current goals of the project include:

    * No user interface: ZVM implements only the actual Z-machine. It
      is meant to be used as the backend in other programs that
      provide a user interface.  (User interface will probably be done
      via the 'glk' API, making ZVM pluggable into existing front-ends.)

    * Compatibility: ZVM will implement a Z-Machine architecture
      according to the official specification.

    * Coverage: Over the years, the Z-machine architecture was revised
      and refined: 8 versions are known to exist. ZVM currently aims
      to support Z-machine versions 1 through 5.

    * Programming language: ZVM is written exclusively in the Python
      programming language, as an importable code module.

    * Readability: speed is not an issue when emulating a 28-year old
      virtual machine on a modern computer, so we always shoot for
      readable code over clever optimizations.

All code is covered by the BSD license, found in the LICENSE file.

Build and Test
==============

To build this code and run the test suite, just do

  $ make && make check

from the top level of the source tree.

Project contents
=================

      README                        this file
      LICENSE                       the BSD license
      Makefile                      used to build C code
      run_tests.py                  script to run automated tests
      run_story.py                  script to execute a story file
      tests/                        automated tests for the module
      stories/                      some sample stories to interpret
      zvm/                          the actual ZVM python module
      docs/                         notes, diagrams, instructions
      cheapglk/                     the CheapGlk Glk library

A Note on C Code
================

Note that while ZVM itself is written exclusively in Python, it does
have the ability to interoperate with Glk front-ends which have been
built as shared libraries.  In order for our testing suites to test
this functionality, we have included a slightly modified version of
Andrew Plotkin's CheapGlk library.