Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Using the Control Console
The Burroughs 220 had a fully-featured Control Console built into a desk. The console had three panels. The main panel, in the center of the console, displayed the major registers and status indicators for the system. This panel was designed to operate the system.
The other two panels, on either side of the main one, were primarily for maintenance and diagnosis of hardware problems. These panels were normally hidden behind snap-off covers. The retro-220 emulator does not presently implement the two maintenance panels.
The Control Console had two additional devices that were not built into its cabinet, but were attached to it by short cables. These were the decimal keyboard and the interval timer. Both are described in more detail below.
Pictures of the three panels and the keyboard as they appeared on a real 220 can be viewed in Section 3 of the Handbook of Operating Procedures for the Burroughs 220.
The Main Panel
In the retro-220 emulator, the main panel looks like this:
The first two rows on the panel show the major registers in the system. Each register is arranged as a series of columns. Each column contains four neon lamps, and represents one binary-coded decimal (BCD) digit. The bit values for a digit are, from top to bottom, 8, 4, 2, and 1.
On the left and right of each register is a large white bar. Clicking the right-hand bar will clear the register to zero. The left-hand bar is non-functional in the emulator.
Individual bits in the registers may be toggled on or off simply by clicking on them. This can be done at any time, even while the system is running. You must take care, however, to set bits in digits representing only the BCD values 0 through 9. Values 10-15 (hexadecimal A-F) are termed "forbidden combinations." The presence of a forbidden combination in any digit on the console will cause the red DIGIT CHECK lamp to come on. The Processor will not run in this condition. The lamp will automatically go off once the forbidden combination is eliminated.
On a real 220, bits were set in the registers by pressing the small, rectangular buttons below each neon lamp. Bits were reset by holding down the large left-hand bar and pressing the button below the lamp. Having to click two things simultaneously is awkward with most pointing devices, so in the emulator the left-hand bar is not used, and clicking anywhere on the lamp or its button will toggle the state of that bit.
The registers on the main panel are:
- A -- the accumulator. The left-most digit is the sign, with the low-order bit of that digit indicating negative values if it is 1. The remaining digits represent a 10-digit number.
- R -- the "remainder" or accumulator extension. This also consists of a sign plus 10 numeric digits. This register held the low-order 10 digits of the product after multiplication and the remainder after division.
- D -- the "data" register. Most of the words entering or exiting the processor to/from memory or peripheral devices passed through this register. It holds the operand from memory for arithmetic operations.
- B -- the four-digit index register. If the sign bit of an instruction word is 1, the value of this register is added to the operand address of that instruction before execution to form an effective address.
- P -- the four-digit program counter. This register holds the address of the next instruction to be executed.
C -- the command register. This holds the instruction currently being executed. This is a 10-digit register that omits the sign digit.
- The left-most four digits are termed the "variant" or "control" digits and have various uses depending on the instruction.
- The middle-two digits are the operation code.
- The right-most four digits are the operand address after any B-register indexing has been applied.
- E -- this four-digit register holds the address of words being fetched from or stored to the system's core memory.
- S -- the "stop" register. An address could be placed manually in this register. Depending on switch settings discussed below, the Processor would stop executing when it reached that address. This register was used primarily for debugging programs.
The third row on the main panel has a series of indicator lamps that show the status of alarms and significant conditions in the system. Some of these lamps are also buttons that can be clicked.
The left-most group consists of red lamps that indicate alarm or error conditions:
- DIGIT CHECK -- This lamp lights and the Processor halts if any register in the system has a digit representing a "forbidden combination" of bit values. This condition inhibits the Processor from running. The lamp will automatically be extinguished and the alarm cleared when the forbidden combination is eliminated.
- PROGRAM CHECK -- This lamp lights and the Processor halts when it attempts to execute an instruction with an invalid operation code, or in some cases, invalid variant digits in the instruction. Clicking the lamp clears the alarm.
- STORAGE -- This lamp lights and the Processor halts when the Processor attempts to access a non-existent memory address. Clicking the lamp clears the alarm.
- MAGNETIC TAPE -- This lamp lights and the Processor halts in response to an error detected in the magnetic tape subsystem. After the error condition has been cleared in the tape subsystem, clicking this lamp clears the alarm.
- CARDATRON -- This lamp lights and the Processor halts in response to an error detected in the Cardatron punched-card subsystem. Clicking the lamp clears the alarm.
- PAPER TAPE -- This lamp lights and the Processor halts when it attempts to use a paper tape unit that is not ready or the unit reads a tape with an improper word format. Clicking the lamp clears the alarm.
- HIGH SPEED PRINTER -- This lamp lights and the Processor halts when an error occurs in the high-speed drum printer. Clicking the lamp clears the alarm.
- SYSTEM -- On a real 220, this lamp lights when the Processor, Memory Control, or Magnetic Tape Control are powered off or are operating in test mode. The emulator does not presently implement this lamp.
- COMPUTER -- This lamp lights after the emulator initializes. On a real 220, this lamp would light after the system was powered up or if one of the test switches on the two maintenance panels were not in a normal operating position. That latter condition is not presently supported by the emulator. You must click the CLEAR switch discussed below to clear this condition.
The center group in this row shows the operation indicators, which consist of three blue lamps:
- RUN -- When this lamp is lit the Processor is running. It is off when the Processor is stopped or the system is cleared.
- FETCH -- The Processor alternates between two phases, "fetch" and "execute." When lit, this lamp indicates that the next phase the Processor will enter will be the Fetch Phase. In the Fetch Phase, the Processor loads the next instruction to be executed into the C register and applies any necessary B-register indexing. When the Processor is stopped, clicking this lamp will place the Processor in the Fetch Phase, which will be phase it uses when the START switch is clicked.
- EXECUTE -- When lit, this lamp indicates that the next phase the Processor will enter will be the Execute Phase. In the Execute Phase, the Processor executes the instruction currently in the C register. When the Processor is stopped, clicking this lamp will place the Processor in the Execute Phase, which will be the phase it uses when the START switch is clicked.
The right-most group in this row shows a number of status indicators, which also consist of blue lamps.
- OVERFLOW -- This lamp lights when the Processor's Overflow flop-flop is set. That flip-flop is set when arithmetic overflow has occurred. It is extinguished by the Branch on Overflow (BOF, 31) instruction. Clicking this lamp will toggle the state of the Overflow flip-flop.
- REPEAT -- This lamp lights when the Processor's Repeat flip-flop is set. That flip-flop is set by the Decrease Field Location (DFL, 27) and Decrease Field Location, Load B (DLB, 28) instructions. It is used by the Branch Repeat (BRP, 32) instruction. Clicking this lamp will toggle the state of the Repeat flip-flop.
- LOW, EQUAL, HIGH -- These three toggles reflect the state of comparison flip-flops in the Processor. They are set by the Compare Field A (CFA, 18 variant 0) and Compare Field R (CFR, 18 variant 1) instructions. They are used by the four Branch Comparison (BCH/BCL 34, BCE/BCU 35) instructions. Clicking one of these lamps will toggle that state of the comparison flip-flops.
The fourth row of the main panel contains a series of "organ" switches. These were similar to the large paddle switches that control stops on an electric organ. Some of them are momentary-contact switches that act like buttons. Others latch in an on/off position. The up position is off, the down position is on. Clicking one of these switches will toggle its on/off state.
The left-most group in this row contains the 10 Program Control Switches. These can be set individually and sensed programmatically by the Branch Control Switch (BCS, 38) instruction. The screen shot above shows switches 3 and 10 set to the "on" state, meaning that a BCS instruction referencing either of those switches will branch.
The center group in this row contains the main operation switches for the system. These are all momentary-contact switches. When you click one of these, it will drop down briefly, then return to the up position.
- STOP -- Clicking this switch will stop the Processor at the end of the current instruction's Execute Phase. If the Processor is not running, this switch has no effect.
- RUN -- Clicking this switch will start the Processor using the current value of the P and C registers, in the phase indicated by the FETCH and EXECUTE lamps. If in the Execute Phase, the Processor will execute the instruction in the C register. If in the Fetch Phase, the Processor will fetch the instruction at the address in the P register and then execute it. Automatic execution will then continue from that point. If the Processor is currently running, this switch has no effect.
- STEP -- If the Processor is currently stopped, clicking this switch will cause it to execute the next Fetch or Execute Phase, as indicated by the corresponding lamps, and then stop. This switch is most often used to single-step a program while debugging. If the Processor is currently running, this switch has no effect.
- CLEAR -- Clicking this switch will clear the Processor. If the Processor is currently running, it will stop immediately. Any input-output operation in process will terminate. All registers and internal flip-flops will be reset to zero. The Processor will be in the Fetch Phase and the FETCH lamp will be lit.
The right-most group in this row contains switches used primarily for debugging.
- KEYBOARD -- Clicking this momentary switch enables the decimal keyboard for input. This switch is active only when the Processor is halted and the blue RUN lamp is off. The emulator implements this keyboard in a separate window that is not displayed by default. When the keyboard is enabled, the emulator will open the window if necessary and give it the focus. Operation of the keyboard is discussed in the next section.
- "S" ON -- Setting this switch to the on position enables the Processor to stop when the address specified in the S register matches the address in either the C or P register. The actual conditions for the stop are determined by the next three switches.
- UNITS -- Setting this switch to the on position causes the Processor to compare only the low-order (units) digit of the S register to the corresponding digit of the C or P register. When this switch is off, the Processor compares all four digits of the stop address.
- "S" to P -- Setting this switch to the on position causes the Processor to stop when the contents of S matches the contents of P. The comparison is made during the Fetch Phase after the C register is loaded from the address specified by the P register and any B-register indexing has been applied. As a normal part of Fetch, the P register is counted up one after the C register is loaded, so the Processor will stop with the address in P one greater than that in S.
- "S" to C -- Setting this switch to the on position causes the Processor to stop when the contents of S matches the low-order four digits of the C register. The comparison is made at the end of the Execute Phase, so it is possible to use both the "S" to P and "S" to C switches simultaneously.
RESET TRANSFER -- This momentary switch is normally used to regain control of the Processor after a system halt or hung input/output operation. Clicking the switch does the following:
- If the Processor is running, it is halted. If an input/output operation is in progress, it is terminated.
- The Processor then stores the contents of the P register into the low-order four (/04) digits of the word in memory at location 0000. It also stores the low-order four digits of the C register into the next higher-order four (/64) digits of that word.
- After the word at memory address 0000 has been stored, the Processor branches to location 0001 and begins automatic execution.
- TCU CLEAR -- Clicking this momentary switch clears the Magnetic Tape Control Unit and allows it to restart an operation after a Magnetic Tape Subsystem error halt. It has the same effect as clicking the CLEAR switch on the Magnetic Tape Control Unit.
The 220 had a mechanical timer that ran whenever the blue RUN lamp was lit. The timer was in a separate case attached to the console desk by a cable. It was typically used to measure run times for programs. In the emulator, this timer is implemented at the bottom-center of the main panel. It counts in seconds and tenths up to 9999.9, then wraps around to zero. It can be reset to zero manually by clicking the black ZERO TIMER button to its left.
Power Off Button
To the right of the interval timer is a red button labeled POWER OFF. This button was actually part of the left-hand maintenance panel, which is not presently implemented. In the emulator, double-clicking this button will stop the emulator, close the Control Console and all of the peripheral device windows, leaving open only the emulator home page. This button may be activated at any time, even while the Processor is running.
To the left of the interval timer are four numbers that report statistics on the operation of the emulator. If you hover your cursor over these, a tool-tip will pop up to describe each one.
The statistics are:
n.nn=DThe current average throttling delay deviation in milliseconds. The processor periodically compares its internal emulation clock with real time and introduces a short delay to allow real time to catch up with emulated time. This statistic reports the average deviation between the processor's requested delays and the delays actually achieved. It should normally vary between plus and minus four milliseconds, but occasional spikes due to background browser overhead may occur.
n.nn%SSlack time -- the average percentage of time the emulated processor is idle due to I/O or the throttling described above. This is a measure of how well the emulation is staying ahead of real time. High numbers (70+%) indicate your workstation has no trouble running the emulator at speed. Negative numbers indicate your workstation is unable to run the emulator at full speed.
n.nn=RThe average amount of real time in milliseconds that the emulated processor is running in its time slices between throttling delays. This value depends upon the relative speed of your workstation and the browser you are using, but typically is less than 0.05 (i.e., 50 microseconds per slice).
nn,nnn=ITotal number of instructions executed by the emulated processor. The 220 should be able to execute 500-3000 instructions per second, depending on the mix of instructions being executed. It may be lower for heavy floating-point calculations, and much lower if a lot of I/O is occurring. This counter is set to zero along with the run timer when the black ZERO TIMER button is clicked.
Memory Dump Feature
The retro-220 emulator supports a diagnostic feature on the Console. If you click the circular "B" logo at the top of the panel (affectionately known within Burroughs as "the Meatball"), the emulator will open a temporary window on your screen and populate it with the processor's current register settings and a dump of all of memory. From this window you can view the dump, or copy/save the text to another program or a file. You can generate these dumps as often as you like, even while the system is running. Each dump will open in a separate temporary window. When you are finished with a dump, simply close its window.
The keyboard attached to the Control Console could be used to enter and examine words in memory, set values in some registers, single-step the Processor, and communicate with a program by supplying a value to the A register. In the emulator, this keyboard is implemented as a small, separate window:
The keyboard window is not displayed by default. When the Processor is halted, you can click the KEYBOARD switch on the main panel to enable the keyboard. The emulator will open the keyboard's window, if necessary. If the keyboard is enabled, the red lamp at its bottom will be lit. If the lamp is not lit, the keyboard will be inactive. You can close the keyboard window when it is not in use -- the emulator will reopen it automatically as necessary.
You can operate the keyboard in two ways. First, you can simply click on the keys. Second, when the keyboard window has the focus, you can press corresponding keys on your workstation keyboard, as explained below.
Activating the decimal keys
9 on the keyboard window (or the corresponding keys on your workstation keyboard) enters digits into the D register. Each digit enters the low-order position of that register, shifting any existing digits to the left. The digit in the high-order (sign) position of the register is shifted off and lost. If you make a mistake entering digits, you can either clear the D register using its large white right-hand button, or you can simply continue entering digits (possibly with some leading zeroes to clear out existing digits) until the correct value is in the register.
The ADD key ("
+" on your workstation keyboard) is normally used with the Keyboard Add (KAD, 08) instruction. When this instruction is executed, the Processor halts and enables the keyboard. You normally enter digits at this point, and when the ADD key is clicked, the contents of the D register are added as a signed integer to the contents of the A register. The Processor then resumes execution.
The C key ("
C" or "
c" on your workstation keyboard) copies the low-order 10 digits of the D register to the C register. If the sign digit in D is odd, the contents of the B register are then added to the low-order four digits of the value in the C register copied from D. This key is typically used to inject an instruction manually into the C register.
The E key ("
E" or "
e" on your workstation keyboard) copies the low-order four digits of the D register to the E register. This is normally done to set a memory address in E for use by the next two keys.
The EXAM key ("
X" or "
x" on your workstation keyboard) reads the value of the word from memory at the address in the E register into the D register. The E register then counts up by one.
The ENT key ("
Enter" on your workstation keyboard) stores the value in the D register to the word in memory at the address in the E register. The E register then counts up by one.
The STEP key ("
S" or "
s" on your workstation keyboard) functions the same as the STEP switch on the main panel. It causes the Processor to execute the next Fetch or Execute Phase and then halt.
Running the Pre-Loaded Programs
The preceding introduction should give you enough information to load the 220 emulator into your browser and operate its controls. Then what?
There are several 220 programs that have been written or recovered as part of this emulator effort, and are available in the software/ directory of the emulator's GitHub repository. Instructions for loading and running these programs are in
README files in those directories, as well as in separate wiki pages and posts on Tom Sawyer's 205 and 220 Blog.
Just to give the emulator something to do out of the box, the emulated memory is pre-loaded with a few small demo programs. You can only be sure these programs are available immediately after initializing the emulator, as they will likely be overwritten by any other program you load into the emulator. The starting address for each of these pre-loaded programs is:
0080-- a simple counter program that increments the A register as fast as possible. Each iteration should take 0.310ms, or about 3226 iterations/s.
0090-- the classic Hello World program, which with default Console unit designations will write to the SPO, and then halt.
0100-- a program that computes square roots using integer arithmetic, printing the argument and root values to the SPO. This program uses the decimal-point insertion feature of the SPO.
0200-- the same square root program as at 0100 modified to use floating point arithmetic. Floating point numbers are represented as seemmmmmmmm, where s is the sign digit, ee is the exponent biased by 50, and mmmmmmmm is the eight-digit mantissa with the decimal point to the left of the first digit. The number 2.23602 (or 0.223602E+01) is therefore represented in the 220 as +5122360200. The program also uses the decimal-point insertion feature, so this value will print on the SPO as 51.2360200.
0300-- a program that prints the first 800 digits of Pi, adapted from a C program by Dik Winter of CWI in Amsterdam. The results are printed on the SPO in four-digit groups. It takes about 25 seconds for the first group to print. The remaining groups will come out progressively faster. The program takes about 40 minutes to run to completion. The B register counts down as a group is generated; a four-digit group will print when B reaches zero.
There are two methods you can use to run these programs from the Control Console.
Method 1: Finger-boning the Console lamps.
- Click the CLEAR switch on the Console.
- Enter the address of the routine in the lamps of the P register. All digits are in BCD, with the low-order bit of the digits in the bottom row of the register lamps.
- Make sure the FETCH lamp is lit. Click it if necessary. This will cause the Processor to start by fetching the first instruction from the address in P.
- Press the START switch to begin execution.
The following screen shot shows the panel as it should be set to run the Hello World program at address 0090:
Method 2: Using the Console Keyboard.
- Click the CLEAR switch.
- Click the KEYBOARD switch. The keyboard window should appear in the lower-right corner of the screen.
30xxxxby either clicking the numeric digits of the Console keyboard or typing on your workstation keyboard. "xxxx" is the address of the program you wish to run. This is a Branch Unconditional (BUN) instruction. You will see the digits shift into the D register.
- Click the C key on the keyboard (or type "c" on your workstation keyboard). This will transfer the contents of D to the C register.
- Click the EXECUTE lamp to place the Processor in the Execute Phase. This will cause it to start by executing the instruction in the C register.
- Click the START switch on the Console to begin execution.
The programs at locations 0080, 0100, and 0200 will run continuously until they are halted by clicking the STOP or CLEAR switches. The programs at 0090 and 0300 will run to completion and then halt. The RUN lamp will extinguish. These programs can be stopped prematurely if you wish.
You can also single-step the programs to see individual instructions execute. Simply click the STEP switch on the Console or they keyboard. The Processor must be halted (RUN lamp is off) for the STEP switch to be active. Note that it takes two steps to execute one instruction -- one step for the Fetch Phase and one for the Execute Phase. The FETCH and EXECUTE lamps indicate which phase will be performed next when STEP is clicked.