Release 2.0 Notes

This page is currently a DRAFT and may contain inaccurate information

Changes from 1.0 to 2.0

'.ini' files

In 1.0, the boot 'ini' file was nested; referring to 'MR12.x.ini' which in turn referred to 'base_system.ini'. 'base_system.ini' contained the hardware configuration information, 'MR12.x.ini' contained the configuration settings needed for Multics. The information in those files has been migrated into the simulator as the default configuration and are no longer in use.

The "set opcon config=attn_hack=1" command is no longer needed; "ATTN" signals are embedded in the autoinput scripts.

An example boot script:

attach disk0 root.dsk
attach -r tape0 12.6fMULTICS.tap

;find_rpv_subsystem: Enter RPV data: M->
autoinput rpv a11 ipc 3381 0a\n

;bce (early) 1913.7: M-> 
autoinput bce\n

;Multics Y2K.  System was last shudown/ESD at:
;Wednesday, December 22, 1993 15:14:35 pst
;Current system time is: Tuesday, December 22, 2015 15:14:52 pst.
;Is this correct? M->
autoinput yes\n

;Current system time is: Wednesday, December 22, 1993 11:14:39 pst.
;Is this correct? M-> 
autoinput yes\n

;The current time is more than the supplied boot_delta hours beyond the
;unmounted time recorded in the RPV label.  Is this correct? M-> 
autoinput yes\n

;bce (boot) 1115.5: M->
autoinput boot star\n
autoinput  \xReady\x

autoinput \z

boot iom0
quit

Note the line "autoinput \xReady\x". This causes the autoinput script to wait for the console to print "Ready" and then it signals "ATTN"; replacing the 'attn_hack' command.

New ini file commands

autoinput  \xSTRING\x

Pause the autoinput script until STRING is printed on the console, and then signal 'ATTN'.

autoinput  \ySTRING\y

Pause the autoinput script until text containing STRING is printed on the console, and then signal 'ATTN'.

set cpu kips=n

Set the estimated simulated CPU speed to 'n' thousand instructions per second. This value is used to calibrate Lockup Fault timing.

noluf
luf

(LOCKLESS only) 'noluf' prevents Lockup Faults from occurring during privileged code execution, preventing crashes during 'rcf add cpu' operations. 'luf' restores normal LUF detection.

set cpu stall
set cpu nostall

(LOCKLESS only) 'set cpu stall' marks places in the Multics code that need to be delayed to prevent some race conditions due to the simulator's inability to guarantee minimum CPU latency. In particular, the command 'set cpu stall=0=132:3737=10000' prevents a race condition in 'rcf add cpu'. (The "0" sets stall point 0; "132:3737" specifies the segment number and offset of the instruction to be stalled, and "10000" specifies a ten millisecond stall time.)

set sys break
set sys nobreak

Enables/disables control-E processing. Control-E will only kill the simulator if 'set sys break' has been executed.

set opc0 config=model=m6001
set opc0 config=model=m6601

Set console model number.

set opc0 config=noempty=on
set opc0 config=noempty=off

The Multics console sometimes behaves unexpectedly when passed an empty line — in some cases it releases the console, requiring ATTN to pressed again. If 'noempty=on', the simulator will replace empty lines with a line containing the 'line kill' character, resulting in predictable behavior.

set opc0 config=attn_flush=on
set opc0 config=attn_flush=off

In release 1.0, characters typed on the console when no read was in progress were discarded. In 2.0, those characters are buffered. This command controls if the buffered characters are discarded when ATTN is pressed (attn_flush=on), or are passed to Multics (attn_flush=off).

consolepw PASSWORD
consoleaddress BIND_ADDDRESS
consoleport PORT_NUMBER

Configures a telnet listen socket for the operator console, allowing access to the operator console with a telnet session.

fnpserveraddress BIND_ADDRESS
fnpserverport PORT

Configures the telnet listen socket of the FNP modem pool; default is 127.0.0.1 and 6180.

fnpstart

Normally, the FNP modem pool socket is opened when the FNP is booted during Multics 'start'. This command forces the socket to be opened immediately, which can help with some automated scripts.

set fnp fw=reset
# Deny local access to dialout
set fnp fw=add:d.h030:192.168.1.0:24:deny
set fnp fw=add:d.h030:127.0.0.1:8:deny

The Multics 'dialout' command specifies a destination IP address; these commands prevent users from accessing the host's internal network. The addresses need to be set to host-specific values.

ai

A synonym for 'autoinput'.

autostream STRING
STRING

A compact was of specifying autoinput commands. Example usage:

    autostream FOO
    config
    1,$d
    i
    clok -delta 8. -zone pst 
    cpu -tag a -port 7 -state on -type dps8 -model 70. -cache 8. 
    cpu -tag b -port 6 -state off -type dps8 -model 70. -cache 8. 
    cpu -tag c -port 5 -state off -type dps8 -model 70. -cache 8. 
    cpu -tag d -port 4 -state off -type dps8 -model 70. -cache 8. 
    cpu -tag e -port 3 -state off -type dps8 -model 70. -cache 8. 
    cpu -tag f -port 2 -state off -type dps8 -model 70. -cache 8.
    cpu -tag g -port 1 -state off -type dps8 -model 70. -cache 8. -exp_port a 
    cpu -tag h -port 1 -state off -type dps8 -model 70. -cache 8. -exp_port b 
    mem -port a -size 4096. -state on 
    mem -port b -size 4096. -state on 
    mem -port c -size 4096. -state on
    mem -port d -size 4096. -state on
    ...
    ...
    FOO
cable

The syntax of the cable command has been reworked.

set fnpN service=

This command replaces certain parts of the deprecated 'Devices.txt' file.

set cpuM config=affinity=

This command establishes an affinity between a given simulator CPU and a give host CPU. Example usage:

# On an HP Z 400 the hyper thread mapping from core to physical
    # code is
    #   phys  cpu ids
    #    0      0  4
    #    1      1  5
    #    2      2  6
    #    3      3  7
    # (see /proc/cpuinfo, "core id")
    # Set up so the CPU A is core 0, B is core 1, etc.
    set cpu0 config=affinity=0
    set cpu0 config=affinity=4
    set cpu1 config=affinity=1
    set cpu1 config=affinity=5
    set cpu2 config=affinity=2
    set cpu2 config=affinity=6
    set cpu3 config=affinity=3
    set cpu3 config=affinity=7

Devices.txt

The Devices.txt file has been eliminated.

The default dial in lines ("name: x.yzzz;" with no "service" line) are not needed; the FNP simulator knows that lines are dialin when the Multics sends a "listen" command to them.

The "service autocall, "service slave" and "service ibm3270" entries are replaced with ini file "set fnpN service" commands; examples are:

     Devices.txt:
         name: a.h012;
             service: ibm3270;

     ini command:
         set fnp0 service=12=ibm3270
     Devices.txt:
         name: d.h030;
             service: autocall;

     ini command:
         set fnp3 service=30=autocall
     Devices.txt:
         name: d.h031;
             service: slave;

     ini command:
         set fnp3 service=31=slave=6131

Console

The "oscar" simh command handler is gone; it has been replaced with control-S. Typing control-S on the console will produce a "simh>" prompt, and a simh command is read from the keyboard and executed. As an example, the default state is the control-E (quit simulator) is disabled. To enable it when the simulator is running, type control-S, "set sys break:, enter. The control-E key combination will now quit the simulator.

The console device can be accessed through a telnet connection.

CPU

The following "set cpu" options are gone: invertabsolute, b29test, auto_append_disable, lprp_highonly, degenerate_mode, append_after, super_user, epp_hack, bullet_time, disable_kbd_bkpt and trlsb.

The following "set cpu" options are new: address, affinity and disable_cache.

DISK

The 1.0 code support 3381 disks; 2.0 adds D500, D451, D400, D190, D181, D501 and 3380 (all disk types known to Multics 12).

FNP

'echo negotiation' is fully supported.

System

The DPS8/M system state is preserved across simulator runs. If the simulator needs to be halted because the it is hung and Execute Fault is not working, a "restart" command has been added to allow the simulator to be restarted and BCE entered to allow 'dump' and 'esd' commands to be executed.

The commands "poll", "slowplow"and "checkpoll" have added to allow tuning of background I/O processing.

Raspberry Pi

To build on the Raspberry Pi running a 32 bit OS and similar, add "M32=1" to the 'make' command:

    make M32=1

(The simulator source relies on the existence of 128 bit data types and runtime libraries; on the Pi, the 128 bit runtime libraries are not provided. The "M32" flag enables the building of some the needed support libraries and compile-time changes to the code to work around unsupported operations.)

Also see the pi-instr-speed page.

Build options

Other then "LOCKLESS" and "M32", these options may cause issues with the simulator and are not, in general, "supported"; they should be used with caution and diligence.

TESTING=1

Enables the SIMH 'sim_debug' constructs, allowing the tracing of a large variety of events; intended for use in debugging the simulator. Enabling that option will cause considerable performance degradation.

LOADER=1

Enables code that will load host-based ALM-like assembly code into memory; used for doing unit testing of individual instructions.

LOCKLESS=1

Enables multiple simulated CPUs, each running in a process thread.

CROSS=MINGW64

Used for "cross-compiling" the simulator into a Windows executable.

W=1

Turns on many compiler warnings.

CC=clang; CC=gcc; CC=some_other_c_compiler; LD=clang; LD=gcc; LD=_some_other_linker

Override the default compiler or linker.

M32=1

Build the simulator for a 32-bit environment.

THREADZ=1

Enable an early version of LOCKLESS; buggy and slower then LOCKLESS.

Build options that can be added to Makefile.locl

CFLAGS+=WAM

Enable simulation of the memory and page table caches.

CFLAGS+=AFFINITY

Enable the SIMH "affinity" command; used with LOCKLESS to set simulated CPU threads affinity to host cores.

CFLAGS+=ATTN_HACK

Enable the deprecated attention hack functionality; replaced with the '\x' and '\y' auto-input markers.

CFLAGS+=DBGEVENT

Enable the Weiss event tracking code.

CFLAGS+=L68

Simulator a 6180 instead of the default DPS8/M.

CFLAGS+=IO_THREADZ

Enable code to do I/O in a separate thread. Experimental code

Unmaintained options

These options have not been maintained and may not compile or work correctly.

CFLAGS+=MATRIX

Enable code to count simulated instruction usage and print a table at simulator exit.

CLAGS+=ROUND_ROBIN

Enable code that implements multiple CPUs in a single thread with a "round robin" scheduler.

CFLAGS+=IOSLTS

Enable code to enable execution of the ISOLTS test suite.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License