Sat Nov 12 17:24:09 MET 1994 p11-2.0 ------- This is my pdp-11 emulator. It currently runs under bsdi (i486), SunOS 4.1 and 5.x (sparc), and OSF1 (alpha) systems. To compile it you need gcc 2.x and GNU make. Binary distributions still need gcc being installed to pre-process the configuration files. This release has been tested with gcc version 2.5.8 and GNU make 3.71. Any volunteers are welcome to port it to other architectures and/or OS (see porting section). P11 currently emulates the following configuration: - a KDJ11A processor (including fpp) - one or more RL-controllers (RLV12) with up to 4 RL02 each - a MRV12 option (boot-rom/maintenance and display register) - one or more KL11A controllers with up to 4 serial lines each - a standard printer interface Emulation speed has not been fully evaluated yet. I tested vfy on a RL02 disk under RSX+ and got the following results: VFY DL2:/RC VFY DL2: Real KDJ11A+RL02 2:05 1:05 BSD/386 1.1 486/66 1:10 2:55 SunOS 4.1.3 SS10/41 0:39 2:08 SunOS 4.1.3 SS10/512 0:36 1:53 SunOS 5.3 SS20/612 0:24 1:22 OSF1 1.3 3000/300LX AXP 0:44 2:08 Recently I found a cpu speed test program written by B. Z. Lederman (ftp.update.uu.se:/pub/pdp11/rt/testit/spdcpu.{doc,mac}). Some of the results are in the file Misc/spdcpu.res (times in microseconds). You can see that on high-end workstations the emulator is slightly faster then the original KDJ11A not fetching instructions from cache. With instructions in cache the KDJ11A is, of course, faster. Disc I/O on the emulator is many times faster than real disc I/O - RMD shows up to 500kW/sec average througput during VFY (on a fast sparc). Anyway, emulation speed even on an i486/66 is tolerable. P11 successfully runs RSX11M-PLUS and UN*X Version 7. I found nobody to test it with RT11 or TSX11, so you are welcome. Because I don't have any processor diagnostics there may be emulation bugs left. Some of the decisions to emulate a specific command in a specific way where made by writing a test program and run it on a real machine. This is especially true for the fpp commands. (btw., the fpp documentation is _very_ bad. The documentation bugs once made in the very early versions are simply copied up to the KDJ11A documentation). If you have processor diags and could manage it to run them on p11, please let me know about the results. 1. Getting started ------------------ Make sure you have at least 15 MBytes of free disk space (excluding disk images). If you have a binary distribution read section 2 below. If you have the source distribution unpack the tar file and set up the environment variable PATH11 pointing to installation directory, i.e. if you are in '/usr/begemot' and type 'tar xvf p11src-2.0.tar' you should set 'PATH11=/usr/begemot/11; export PATH11'. If you plan a regular use, do this in you .profile. The source tree is organized as follows: 11/ - emulator root 11/emu/ - emulator source 11/emu/Utils - support programs 11/emu/IOProgs - satellite programs for TTY and LP support 11/emu/Misc - real misc, look there 11/emu/Tests - sources for various test programs 11/run/ - working directory for running p11 11/disks/ - here you can store your disk images 2. Installing a binary distribution ----------------------------------- Make an emulator root directory, say '11' and an emulator directory '11/emu'. cd into '11/emu' and unpack the tar file. Setup environment variable PATH11 to point to '11'. Go into '11/emu/Tests' and copy '../Misc/p11conf.sample' to 'p11conf'. Say '../p11 -f f.11', start telnet from another screen 'telnet localhost 10000' and say 'p' to p11. Telnet should show you a list of instruction mnemonics and 'fpp test ok'. For more see section 'Running'. 3. Compilation -------------- Cd into 11/emu. Configuration should be easy on the supported platforms. There is a shell script 'config' which generates the makefiles from template and option files by using cpp. (I could have used imake, but I didn't want to complicate things. Life is hard enough without imake, isn't it?) Typing config without arguments gets you a list of supported platforms. Use one of: config i386-bsdi config sparc-sunos config sparc-solaris config alpha-osf1 or simply: config -a (auto-configuration) to configure p11 for you local system. If all went ok you may try 'gmake deps ; gmake'. The building process may take 5-15 minutes, depending on your local system. If that also wents ok change to '11/run' and try p11. P11 should come up with '@' and you may play with the (somewhat extended) monitor. 4. Running ---------- If you are lucky enough to have an OS for your PDP place the rl02 images into '11/disks'. Copy Misc/p11conf.sample to 11/run/p11conf and edit it to mount these images on the appropriate drives. (p11conf.sample shows how to run 2 (or more) different OS. To boot the right one you type -D??? at the command line.) If you have images for a different type of disks you may write an appropriate device emulation. I'll be happy to receive any enhancements being done. Enjoy. 5. Selecting Options -------------------- In each directory exists a Makefile.in master makefile. During the configuration process these files get processed by cpp to produce Makefiles. Architecure and operating system dependencies are reflected by including Makefile.mach. Makefile.mach itself is a link to the appropriate Config/M-${arch}-${sys} file. Edit this file to adopt p11 to you local environment. 6. Porting/Adding new features ------------------------------ If you want to add devices to the emulator or you want to port it to a different architecture/OS and want me to include you code into future release, try to stick to the following rules: 1. look at the existing code and try to figure out how it is organized 2. if you write a device look at one of the existing ones (best is probably dev_rl.c). This should help you to understand what is going on there. You must include your device's file name in the Makefile.in CSRC section. 3. if you port to a new cpu-architecture you should setup the Config/m-$arch.h and Config/r-$arch.h appropriately. If you would like to have Floating Point you need to create Config/f-$arch.h as well. If you are to lazy to write the machine specific parts or you have a good compiler you can try the generic code. If you don't create one of the files, the generic variant is used. 4. if you port to a new operating system for one of the already supported cpu-architectures, you will have to craft the files Config/s-$sys.[ch]. 5. in both cases 3 or 4 you will also have to setup M-$arch-$sys. 6. if you create a new subdirectory you can take advantage of the existing Makefile.template. Don't forget to include the subdirectory name in the Makefile.in SUBDIRS line. 7. Wishes --------- This is a unsorted list that comes into mind at the time of this writing. 1. It would be nice to have processor/controller/device/... diagnostics 2. if you have a great idea how to speed up the memory system, try it. I think it eats up most of the time. 3. I would really like to have an emulated DEQNA. The main problem seems to be the rather bad documentation. It would be nice to speek IP with the emulated pdp. 4. It shouldn't be hard for let's say 3-4 people to create a v7 compatible system in a couple of weeks from scratch (the kernal only of course) 5. wouldn't it be nice to have rk05 (I love them - they are so nicely small) and rx01/02 emulated? 6. how about a vt220 emulator for these dummy pc consoles or X? (Especially I would like to have the alternate keypad feature to use EDT) 8. License restrictions ----------------------- I don't like copyright's very much, the more if the claim and terms eat up the first screen entirely when editing files. But I must protect my own work, so the GNU General Public License applies to the entire code. Please look at the file LICENSE or feel free to contact me if you have any questions regarding reusage of the source. 9. Acknowledgements ------------------- I would like to thank the Deutsches Herzzentrum Berlin, Forschungsstelle fuer Kunstherz und Sensorik, for giving us access to their DEC AXP system. 10. How to contact me --------------------- Please send suggestions, bugs, bug-fixes, code, OS-sources, flying saucers to: 'micheel@fokus.gmd.de' Please include the string P11 in the message subject to simplify sorting them out. Begemot Willi (Joerg Micheel & Harti Brandt)