X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FApp%2FScheme79asm.pm;h=77a09f94d1898a8862a3e1f2544cefe49dd52176;hb=9924aa7bca1bd04de3ab5db16e0204d8d2bf6541;hp=c971c2cd2930905b25f284aef796d6934a135b6c;hpb=f71b3492033e1a24fe2d84731a3f09d1dba911b1;p=app-scheme79asm.git diff --git a/lib/App/Scheme79asm.pm b/lib/App/Scheme79asm.pm index c971c2c..77a09f9 100644 --- a/lib/App/Scheme79asm.pm +++ b/lib/App/Scheme79asm.pm @@ -163,23 +163,42 @@ App::Scheme79asm - assemble sexp to Verilog ROM for SIMPLE processor use App::Scheme79asm; my $asm = App::Scheme79asm->new(type_bits => 3, addr_bits => 5); - $asm->parse_and_print('(number . 70)'); + $asm->parse_and_print('(number 70)'); =head1 DESCRIPTION -B this module does not do much at the moment. - SIMPLE is a LISP processor defined in the 1979 B 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 of the form C<(tag . value)> representing a tagged -pointer. Here the tag is either a number or one of several predefined -values (see the source for a full list), and the value is either a -number or another tagged pointer. These values are laid out in memory -and a block of verilog code assigning the memory contents to an array -named C is printed. +S-expressions. Each S-expression is a list of one of three types: + +C<(tag value)>, for example C<(symbol nil)>, represents a value to be +put in memory (for example a number, or a symbol, or a variable +reference). + +C<(tag list)>, where C is of one of these three types, +represents a tagged pointer. In this case, C is (recursively) +laid out in memory as per these rules, and a pointer to that location +(and tagged C) is put somewhere in memory. + +C<(tag list1 list2)>, where C and C are of one of these +three types (not necessarily the same type). In this case, C +and C are (recursively) laid out in memory such that C +is at position X and C 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 B method takes such a string and prints a block +of verilog code assigning the memory contents to an array named +C. More documentation and features to follow.