A software emulator for parallel random access machine (PRAM) is available at anonymous ftp site cs.joensuu.fi (128.214.14.19) in directory /pub/pram Files emulator.tar.Z in the above directory are compressed tar files containing the ANSI C source code and the documentation in postscript form of the PRAM emulator. PRAM Emulator The PRAM model used is the following: A PRAM consists of P processors, an unbounded shared memory, and a common clock. Each processor is a random access machine (RAM) consisting of R registers, a program counter, and a read-only signature register. Each RAM has an identical program, but the RAMs can branch to different parts of the program. The RAMs execute the program synchronously one instruction in one clock cycle. The instruction set includes simple arithmetic and bitwise operations, conditional and unconditional jumps, shared memory read and write instructions, register-to-accumulator and accumulator-to- register data transfer instructions, and a halt instruction. All the models EREW, ERCW, CREW, and CRCW and the CW variants WEAK, COMMON, TOLARANT, COLLISION, COLLISION+, ARBITRARY, and PRIORITY are supported. The implementation places no fixed limits for the number of processors or the number of registers. These and the size of the shared memory are, of course, limited by the size of the memory space of the platform. The emulator is controlled with a simple assembly style language derived from the PRAM instruction set. The emulator system contains an assembler that converts a text form program to an easy-to-interpret binary form. The emulator program itself gets the binary form program as input. The emulator contains an interactive monitor program for interactive monitoring of the execution of the emulator. The emulator can be installed and used if an ANSI C compiler and a curses terminal screen handling package are available. (At least curses packages in UNIX systems and the public domain PDCurses should work. The emulator can be changed to work without the curses package -- and without the interactive monitoring facility :-( -- with some programming effort.) The language used to control the emulator is designed to be preprocessed with a C preprocessor (cpp or equivalent). So, it is desirable that a C preprocessor is available, but the preprocessor is not absolutely necessary. (If the emulator is used to execute programs produced by the parallel modula-2 compiler then preprocessor is necessary because the output of the compiler contains macros etc.; when writing pram programs by hand the need for preprocessing can be avoided by not using macros, comments, file inclusion, or other nice preprocessor features.) Happy emulations! Comments are welcome. Pasi Hamalainen, University of Joensuu, FINLAND email: phamal@cs.joensuu.fi