NAME
App::Scheme79asm - assemble sexp to Verilog ROM for SIMPLE processor
SYNOPSIS
use App::Scheme79asm;
my $asm = App::Scheme79asm->new(type_bits => 3, addr_bits => 5);
$asm->parse_and_print('(number 70)');
DESCRIPTION
SIMPLE is a LISP processor defined in the 1979 Design of LISP-Based Processors paper by Steele and Sussman.
The SIMPLE processor expects input in a particular tagged-pointer format. This module takes a string containing a sequence of S-expressions. Each S-expression is a list of one of three types:
(tag value)
, for example (symbol nil)
, represents a value to be put in memory (for example a number, or a symbol, or a variable reference).
(tag list)
, where list
is of one of these three types, represents a tagged pointer. In this case, list
is (recursively) laid out in memory as per these rules, and a pointer to that location (and tagged tag
) is put somewhere in memory.
(tag list1 list2)
, where list1
and list2
are of one of these three types (not necessarily the same type). In this case, list1
and list2
are (recursively) laid out in memory such that list1
is at position X and list2
is at position X+1, and a pointer of type tag and value X is put somewhere in memory.
After this process the very last pointer placed in memory is moved to the special location 5 (which is where SIMPLE expects to find the expression to be evaluated).
In normal use a single S-expression will be supplied, representing an entire program.
The parse_and_print method takes such a string and prints a block of verilog code assigning the memory contents to an array named mem
.
More documentation and features to follow.
SEE ALSO
http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-514.pdf
AUTHOR
Marius Gavrilescu, <marius@ieval.ro>
COPYRIGHT AND LICENSE
Copyright (C) 2018 by Marius Gavrilescu
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.24.3 or, at your option, any later version of Perl 5 you may have available.