BytePushCore

What is the goal?
'''The initial goal is to build a standard collection of useful opcode tables for the BytePusher virtual machine. A sort of "BytePusher ALU".'''

This will not be part of the VM specification itself, but an add-on which a VM may or may not support. It will be in the form of a binary file. A VM may choose to generate the data algorithmically instead. If it's not directly supported by the VM it can still be indirectly supported by preprocessing in an external program, or by runtime generation by the program itself.

Preceding brainstorming
This page was becoming a big mess, so I moved the old contents to the talk page --Javamannen 00:09, 24 October 2010 (UTC) Below is a list of some of the stuff which has been discussed (see talk page) --Javamannen 17:37, 25 October 2010 (UTC)


 * Runtime generation of the tables by the VM or by the BytePusher program itself
 * Extending this into a general mechanism to have a program specify an external file which it depends on to run.
 * File extensions and stuff.
 * Size of the table set. The consensus was: we decide this later.
 * Ordering of the tables. The consensus was: we decide this later.
 * Adding other stuff like a set of standard system routines. Probably this will have to wait until we have the "BytePusher ALU".
 * A standard way to extend VM capabilities.

The opcode list
The first step is to build a set of potentially useful tables. Better too many than too few. So let's not worry about redundancy or ordering now. Later we'll select which ones to include, and in what order.

There are 2 basic types of table.
 * Small ones, a.k.a pages. 256 bytes each.
 * Big ones, a.k.a banks. 65536 (256*256) bytes each.

Anyone is welcome to contribute. What should be provided:
 * A link to a raw binary file with the table data. Suggested file extensions: ".BytePusherPage" for the small ones, ".BytePusherBank" for the big ones.
 * A reasonably clear description of the function performed by the table.
 * Optionally, a link to a table generator program. Any programming language goes.
 * Optionally, your name / handle.