this is now the "Announcement" of the PicoLisp 64-bit Emulator. A little
bit late, as we've already discussed about it here in this list.
It emulates the PicoLisp machine as a Large Instruction Set Computer
("LISC" -- as opposed to "RISC", Reduced Instruction Set Computer)).
It is similar to a byte-code architecture, but each instruction is not
an 8-bit byte, but a 16-bit word. Each word denotes a complete
instruction, without exception, not just an opcode which may require
It can be compiled with (see the INSTALL file)
$ (cd src64/; make emu)
and started as always
$ ./pil +
The usual prerequisite of a running PicoLisp system for bootstrapping
must be met (also see the INSTALL file).
It is not perfect. It will currently not compile on 32-bit little-endian
systems. This is due to some inconsistency in the C99 spec about the
handling of "designated initialization" of anonymous structure members.
The speed is lousy. About 10 to 20 times slower than the real thing. So
this is in the same range as other emulators like 'qemu'.
Another drawback is the fixed stack size (currently 1 M entries (8 MB)).
As expected, the implementation of 'native' in plain C posed the biggest
problem. There is no way to pass arguments to a C function generically.
The emulator uses a brute-force approach, by hard-coding combinations of
supported argument types.
Therefore, 'native' supports only up to 8 arguments, the first 6 of
which might be floats or doubles. Also, if the first argument to a
native function is a float or double, then the function's return value
should also be a float or double.
Calls to 'native' with structures in arguments or return values are
naturally non-portable between pil32 and pil64. They will work probably
best on 64-bit platforms.