P800 Simulation (Simulation of Philips 16 bit P800 minicomputers) |
A simulator is a nice tool to illustrate the possibilities of a computer design. But as a computer, also a computer simulator needs programs to do something meaningful. For the P800 there still exists some documentation to start building a simulator, but software is limited to only a few listings at this moment (at least that is what I still have). So when building a simulator for an antique computer without having any standard software for that computer available anymore, some additional tooling must be added to make test programs for the simulator. In an attempt to create substance in the context of the objective of these pages, I started to build a P860 simulator. To fill the gap of lacking software and being able to make test programs for the simulator, also a cross assembler and linking loader are built, to obtain a workable solution.
The three programs are at a stage that they can be shared with other, hopefully interested people. I would call the programs in a prototype state, not only because the concise documentation on which they are based, but also because they are all three written in Perl. Not every thing is clear and well defined, so it must be easy to make changes and to test alternatives. Perl provides an excellent prototyping environment, while it still results in a simulator with an acceptable performance (the simulator on my PC is only 2 to 3 times slower than the original P860). At a later stage the simulator can still be converted to C, e.g. to run in the SIMH frame. The Perl based simulator is based already on some of the SIMH concepts (e.g. the event mechanism; also the control commands mirror part of the SCP functionality).
P855/P860 Simulation
The P855/P860 simulator and its tooling can be downloaded from the P855-P860 directory. A few demo programs written in assembly language are also available in this directory. The remaining part of this page explains some more detail about this simulation program and its tooling. The program sources provide next levels of detail.
Note: Windows users who want to display the listings (.lst files) directly in Internet Explorer, have to associate the .lst file type to Wordpad (File Explorer => Extra/Tools => Folder Options => File Types).
P856 Simulation
For another member of the P800 minicomputer family, the P856, the situation is different. For this machine some of its original software became available. The P856 is for 95% compatible with the P855/P860, but certainly system software, like an operating system generated for the P856, does not run on a P855. So in parallel with the P855/P860 simulator a P856 simulator is made. This simulator can be operated now with at least part of the original software being available. For some other software, investigation about what it is and testing is still required. Published items can be found in the P856 directory and details can be found on the P856 page. Being able to run original software makes the P856 simulator of more interest at this moment than the P855/P860 simulator. For the P855/P860 simulator, compatibility with original software must still be proven
The P855/P860 Simulator (version 0.91)
As mentioned above, the simulator is currently implemented in Perl as a P855/P860 simulator with 32k words. Added to the default Perl installation are three CPAN modules:
The simulator (as well as the other programs) are developed and tested under Linux, but (should) run under Windows as well in case a proper Perl is installed (since version 0.6 the simulator is adapted for Windows and runs with ActiveState Perl version 5.8.8, build 822).
The following devices are currently are supported (version 0.91):
Limitations:
Usage: p860-xx.pl [<do-script-name>]
After starting the simulator, a prompt is displayed after which a simulator control command is requested. Currently the following control commands are implemented:| means logical OR
[..] means OPTIONAL argument
<address> is hexadecimal number 0 .. FFFF
<register> is P,A0 .. A15
<string> is a double quoted character string and may include codes like \n
The key combination CntrE stops the emulation
The key combination CntrP simulates a Panel interrupt
do-scripts do not support arguments
Disk organization and support is further explained on the page X1210 moving head disk support
The P800 Assembler (p8asm.pl, version 0.92)The assembler operates on the PC as a cross assembler for the P855/P860 (and for the P856 as well). The generated object programs (extension .obj) are relocatable by default and must be linked, possibly with other modules, with p8ldr, which produces an absolute binary (8+8 paper tape format with an .abs extension) or a relocatable binary in disk load module format (.rel extension when punched on "papertape"). The binary can then be loaded as an absolute or relocatable load module into a P800 simulator for execution. Loading into the simulator can be done with the simulator 'load' command, or (for the absolute binary) by booting the simulated P800 with that binary from the papertape reader.
The assembler makes 2 or 3 passes over the source program:Links an object program generated by the cross assembler and punches an absolute binary tape in 8+8 paper tape format. This linker operates as the cross assembler on the PC and can only be used to link/load object output of the p8asm cross assembler, which is not object code format compatible with the output of the original P800 assembler. The linker output is an absolute binary tape in 8+8 format (compatible with the original absolute format), which can be loaded into the P800 simulator with the 'load' control command or by starting the paper tape bootstrap of the P800 simulator. Added since version 0.5 is the option to generate a relocatable load module in the original disk load module format, but punched on a papertape (.rel extension).
Added since version 0.5 are the possibilities to:
- load multiple modules (.obj or .lib) from the command line;
- link modules from object libraries.
Usage: p8ldr.pl -[a|r] mainobjectprogram.obj [mod.obj|library.lib]...
Option -a for the generation of an absolute, -r for a relocatable load module (default option is absolute)
Libraries must have a .lib extension; when a library is linked, only object modules are selected from the library with entry points for which externals exists. When all arguments on the command line are processed,
additional modules will be requested interactively, as long as externals are to be resolved.
Object Libraries
These libraries are composed of multiple assembled modules. Libraries are prepared with the utility makelib.pl and this utility uses the file <libname>.lib.spec to compose the library <libname>.lib from the object modules. <libname>.lib.spec contains the names of the object modules to include in the library and also defines the order in which the modules must be included in the library. This order must be in such a way that a module with one or more entry points must be after all modules in the library that use those entry points as externals. The file <libname>.lib.spec is generated by the utility makelibspec.pl and uses for this generation the file <libname>.lib.def. The <libname>.lib.def file must contain all the names of the object modules to include in the library, but these names can be in any order in this file.
makelib.pl, provided with the file <libname>.lib.def, calls makelibspec.pl to generate <libname>.lib.spec and after that composes the requested library.
Usage: makelib.pl [-sd=<sourcedir>] [-td=<targetdir>] <libname>
output: <libname>.lib
uses: the file <libname>.lib.def to compose the library (and makelibspec.pl to produce <libname>.lib.spec)
The .def file is assumed in the <sourcedir>; the .spec file will also be stored in <sourcedir>. The object modules for the library are assumed to be in the <targetdir> and the resulting library will also be stored in the <targetdir>. When either the <sourcedir> or <targetdir> are not specified, the current directory is assumed. Makelibspec.pl can be used standalone as well, in the same way as makelib.pl, and only generates the .lib.spec file from the .lib.def file.
Example: makelib.pl -sd=bio -td=bio/object sio
This example composes the small example object library sio.lib, which is included in the archive.
It works under the conditions that:
- directory bio (and directory bio/object) are subdirectories of the working directory,
- both makelib.pl and makelibspec.pl are in the working directory,
- the source of the bio modules and bio.lib.def are in subdirectory bio,
- the translated object modules are in the directory bio/object.
The produced object library is stored in the directory bio/object.
Two demo/test programs are available in the P800 directory: a record oriented text editor (ledit) and a real time clock test program (testrtc). Originally the editor was written for the DDP-516 somewhere back in 1968. In 1971 I rewrote it for the P860 as an exercise to learn the P860 instruction set. The editor was written for use with one of the P860 monitors. Lacking a monitor now, it is rewritten again as a stand alone program. With the editor many of the simulators' functions are used, and with that tested. All currently implemented devices have a function within this program, except the real time clock. The second demo program uses the real time clock mechanism in combination with the interrupt system.
Page last updated on: October 10 2008 | Contact: Info@theoengel.nl |