rolffson's 1401 datacenter 3D simulation


last update 2021-08-06             constantly updated - some details or features described may only be present in the latest program version

This page is only a description of the main components and parameters.
For 1401 training material, a command reference and detailed information about handling, see the related books and original manuals.
(see recommended books on main page)

user interface
main menu
known issues / bugs
1401 VDC character set
1401 CPU and commands
1401 front panel
1403 printer
1407 inquiry station / terminal
1402 card reader/punch
026 card punch
card drawers
trash bin
729 tape drive
reel stands
hints related to simh
⌂ home

interface         ↑ top

- use WASD to move
- to rotate view or to look up / down, press the right mouse button while moving the mouse
- use 'E' or mouse wheel for zoom in/out
- use 'Q' or ALT mouse wheel or RMB wheel to crouch / tiptoe
- use left mouse button to click
- normally a hand curser should indicate a clickable area, but sometimes that doesn't work reliably
- cross hair mouse cursor: clickable, but possibly too far away to click, walk closer.
- type 1..9 key or click green markers on floor for quick travel / rotate
- use TAB to leave drawers or CTRL-TAB to leave 026, same as clicking 'quit' button
- 'ESC' or ALT-M opens the main menu
- clicking on the word MENU at the bottom also opens the main menu

CAUTION: always use the main menu to quit the program,  DO NOT use ALT-F4 - the current status won't be saved !
                   ALT-F4 causes Windows to abort the program. This is an OS feature to kick a program, and cannot be intercepted by UE currently.

main menu        ↑ top

- hit ESC or ALT-M to open menu
- loading / saving:
    saves most of the punched cards, except those on hand and those in the drawers marked 'not saved xx'
    The 'not saved' drawers may be used to transfer card stacks between different saves
- import / export: use the '?' on the right of every menu item for further info
    Data to be imported or exported resides in the subfolder '.../Saved'   (NOT .../SaveGames)
    To import or export simh files, select the related option below the import/export buttons
- to exit the simulation, use the quit-to-desktop option to make sure the status is saved correctly

1401 character set         ↑ top

The 1401 uses an old 6bit BCD character encoding (not even ebcdic), totally incompatible with ascii or ansi.
For text, only upper case characters are available. Additionally, it contains some special characters which aren't part of
a standard PC font and so are difficult to display (lower rows), and so are substituted by lower case chars (upper rows).

To im/export data via the VDC menu, either use the characters in the upper rows of the following table, or select a simh format.
All normal text must be in upper case.
Lower case letters only for the special characters listed q/g/r/v/s/t, e.g. tape mark = 't'.
Characters not present in this table will be replaced by a space or a '?', e.g. when importing card stacks.

To enter the special characters into the 026 card punch, type CTRL-<lower case letter>, e.g. CTRL-q to enter the lozenge.
On the punched card, the special characters are also shown as lower case chars, but the punch pattern is correct.

With an original 1401 and 1403, not all special characters get printed, some cause a space.
For debugging purposes, there's a "print special characters" switch on the AUX panel of the simulated VDC 1401 (does not exist on real 1401!)
With the switch in the upper position, these characters get printed, e.g. a 'g' for group mark or 't' for tape mark, both when issuing a print
command '2' as well as when performing a storage print out via mode switch. Useful when e.g. checking the GM+WM for tape buffer delimiter.

To enter the delta '^' into a PC textfile and also on the 026 punch, you normally type an accent circonflexe over a space ('^' + spacebar)

It's possible to import simh (another simulator) card files.
Simply select the correct format when importing/exporting the file. -> info

char table

1401 CPU and commands        ↑ top

List of currently supported commands of current version 0.2.11
- Missing commands may be added step by step.
- This simulation is much slower than the original 1401. Nevertheless it suffices to get some experience and re-enact the experience.
- check (parity) bit currently not checked, more or less cosmetic only, causes no error status

This list is not an exhaustive description of commands and branch conditions.
For details about the commands see original 1401 reference manual:  A24-1403-5_1401_Reference_Apr62.pdf

2021-09-09 v0.2.13: P-command (record move) and E-command (number formatting) now working
2021-10-12 v0.2.14: F-command (control carriage): primitive implementation, does an immediate single line feed,
                                      aka "empty line", indepent of d parameter (behaves like "F J")

1401 commands progress v5

1401 panel        ↑ top

- sense switches working, may be checked via command BxxxB..BxxxG, switch up = branch
- last-card switch A, last card may be checked via BxxxA, switch up = sense. If down, a BxxxA won't branch even if there are no more cards
- START button: action depends on MODE switch
- STOP button stops execution
- before running/stepping a program, it's a good idea to check/set I-Reg and press check_reset and start_reset
- CHECK RESET button resets error status
- START RESET button resets OP cycle
- STOP button will only be lit when the CPU hit a HALT command, not when pressing it manually
- TAPE-LOAD button loads next record on drive 1 to 001, with WM (as in real life uses only drive 1 - drive select knob is ignored)
- BACKSPACE button works when drive select knob set to 1..6
   when knob set to D or N, or tape already at beginning, or drive not in ready status, backspace won't work

- to start a program already in memory at a certain address, set MODE to ALTER, press I ADD REG to select I-Adr register,
   enter address via manual address knobs, press START to load address, then set mode back RUN and hit START again.
   Don't forget to hit START-RESET before program START

1401 mode switch:
- click on left or right side of mode switch to rotate one step
- currently NOT implemented: i/ex, single cycle non process, storage scan
- currently functional modes are ...
-   STORAGE PRINTOUT ***: print memory excerpt, including word marks (dial address & hit start)
-   CHARACTER DISPLAY: show memory at address (dial address & hit start)
-   ALTER: change I/A/B address register or memory (hit Reg button, dial address & hit start)
-   RUN: start program at current I-address (may be altered beforehand via ALTER mode)
-   SINGLE CYCLE PROCESS: step through instruction fetch (I-cycles) and execution (E-cycles)
-   ADDRESS STOP: halts execution as soon as STAR contains the number selected by the address knobs
     caution: STAR doesn't mean I-AdrRegister! the STAR also gets loaded from A/B-AdrReg during E-Cycles!
     e.g. when trying to stop on a certain OP, it may stop already on the last I-Cycle of the preceding OP, checking
     the word mark. The preceding OP may not have been executed yet. In that case, hit START again, until one
     of the I-OP cycles or address of the desired command appear in the STAR or instrucion-length counter.
     (nevertheless I have no real 1401 at hand to test anything, so this may be partially incorrect)

***: from version 0.2.12 on, there's a 'dump core' option in the main menu, which writes the complete core
       contents 0...15,999 to a PC text file in a similar format ('coredump.txt' in the '...\save' folder)

1401 address switches:
- click on left or right side of switch to rotate one step
- can be used for: alter adress register + alter memory + character display + storage print out + address stop
- can also be used for manual data entry during a program run by programming a '.' halt command,
   then letting the user manually change the B address register and hit START, and then immediately storing the
   entered B address register value into core by the command 'H xxx' store-B-adress-register

1401 aux panel:
- bit switches and ENTER switch can be used to enter data into core when MODE set to ALTER
- check bit (parity) currently ignored system wide
- check stop / disk write switches non functional
- 'print special characters' - if in upper pos, special characters are printed as lower case q,g,r,v,s,t. Original 1401 prints space.
   (useful for debugging, e.g. when checking for the GM+WM as the tape buffer delimiter)

lower case characters on printouts or punch cards represent special characters:
    g - group mark
    q - lozenge ('sQuare', lower case L too similar to number one)
    t - tape mark
    v - word separator
    r - record mark
    s - tape segment 

1401 core memory gets restored on VDC program start (just like real magnetic core, even after power off)

1403 printer        ↑ top

1403 printer:
- click on paper in printer top or type "R" to show or hide the printout
- paper cycles between short (16 lines) and long version to allow better visibility
- currently only one page, scrolling up if end reached. no buffer; no manual scrolling
- START / STOP / CHECK_RESET buttons same as on 1401
- paper stack moving, but no printout visible directly in printer; click on paper / "R" to show text

1407 inquiry station / terminal        ↑ top

- click 1407 to focus
- click paper to shift focus
- click the sides of the bail bar to lift it up
- to leave the device, click the keyboard, or type ESC or CTRL-TAB, or click Quit button on device

- if the 1401 is in ALTER mode, keys are put directly into core to current BAdressRegister, which is automatically incremented.
  Hitting WORDMARK will set the wordmark for the next char typed, which is then also printed in red.
  Before using, set the BAdrReg to the desired address by hitting the BAdrReg button + setting adress knobs + htting START on the 1401

in 1401 RUN mode: (the "0" in %T0 is a zero)
- M %T0 xxx W - prints data from xxx (left, lower address) up to first GM+WM
- L %T0 xxx W - same as M, but characters with a WM are printed in red
- M %T0 xxx R - reads input from user if user has pressed REQUEST/ENTER button, otherwise ignored like NOP. puts GM+WM after entry
- L %T0 xxx R - same as M, but user can enter word marks by pressing WORD MARK button before next character; printed in red

- B xxx Q - tests the request flag Q; gets set when the user presses the REQUEST/ENTER button
- B xxx * - tests the clear flag *; gets set when the user presses the CLEAR button to cancel an I/O

Flags * and Q get reset at next 1407 input/output command (or hitting START-RESET on the 1401)

standard input algorithm:
1 - do a loop (or do something useful) until the user hits REQUEST/ENTER (test the Q flag)
2 - if Q flag set, perform a M/L xxx R
3 - if user hits CANCEL while performing an input (test the * flag), ignore the input. There also won't be put a new GM+WM behind

You may refer to the original IBM 1401 reference manual p.70+p.129
Reading the 1407 via L/M...R only works if the user has pressed the request key before
In 1401 RUN mode, the keyboard is normally locked when no I/O is happening

Currently I don't how to limit the input buffer, so that the user cannot overwrite memory; the GM+WM doesn't help here
(at least the IBM doc doesn't say anything), and I don't know how the right margin or hitting the keyboard's return key affects the buffer.
If you have any experience, please let me know.

- to simplify matters, the keyboard's backspace character works as expected, though this very likely doesn't reproduce the original behaviour
- the keyboard's return key currently does a carriage return / line feed on the machine / paper,
   but doesn't affect the buffer (ignored, doesn't insert a space or other char)
- the tab/tab-set/tab-reset is not implemented. Anyway, I currently doubt that it had any influence on the input buffer on the original 1407

026 punch        ↑ top

- click 026 to focus
- click card bed in the middle to focus in or out even further for better reading
- to leave the device, type ESC or CTRL-TAB, or click Quit button on device
- feed hopper contains unlimited blank cards, no need to refill
- currently only blank cards from feed, no pre-punched possible
- no backspace (of course...)
- program mode with program card not yet implemented

- press ALT-F to feed new card and register other cards
- press ALT-R to register cards without drawing new card
- press ALT-L to reLease

- currently, no cards can be taken directly from or inserted into the card bed manually
- to eject cards, press ALT-R and ALT-L alternatingly, until the card is in the upper left hopper
- click upper left card stack in hopper to take cards into hand, if hand empty
- SHIFT click: take stack and insert behind cards already on hand
- CTRL click: take stack and insert in front of cards already on hand
- to remove unwanted cards or change sequence afterwards, take the cards to a card drawer.
- to remove released card in left bed before stacking, click upper left notch.
   It's then dropped onto the table, from where you can grab it too.

- only characters from 1401 char set allowed; others will be ignored
- when typing, lower case letters are converted to upper case (no need for shift lock)
- for special characters (see lower case letters in chart at top), use CTRL-q/g/r/v/s/t

card drawers        ↑ top

- click drawer to focus
- when focused, type 'Q' to zoom in even further for better reading
- to leave the drawer, type <TAB>, or click Quit, or hit number keys 1..9 to directly jump to a destination point
- when other drawer nearby visible when focused, click changes over

- drawer can hold three stacks
- cards can be scrolled through:
-   W / S moves between last card of front stack and first card of middle stack
-   E / D moves between last card of middle stack and front card of back stack
-   R / F does W+E / S+D simultaneously: one card between front and middle, one card between middle and back stack
-   SHIFT + scroll key moves 10 cards at once

- ALT left click: inserts cards on hand as middle stack. If there are already cards, the new ones are added behind
- CTRL-ALT left click: same as ALT-left-click, but if there are already cards, the new ones are added in front

- left click: take deck into hand, if hand empty
- SHIFT click: take stack and insert behind cards already on hand
- CTRL click: take stack and insert in front of cards already on hand

- 2021-09-07 NEW FEATURE:
   You may activate "quick drawer access" in the options.
   This allows picking (shift-click or ctrl-click) or dropping (alt-click or ctrl-alt-click) the cards from the distance,
   without first zooming into the drawer.
   A normal click onto the drawer still zooms in

- The "export card stack" function writes cards from the "outgoing" drawer into "cardsave.txt" in the "saved" subfolder.
- The "import card stack" function reads cards from "cardload.txt" in the "saved" subfolder into the "incoming" drawer
   they are loaded as the middle stack, or added behind the existing middle stack.

   see YouTube about how to unlock the punch card import / export feature.

- the drawer contents gets saved on program exit, but different sessions may also be managed via menu/load-save
- the 'not saved' drawers aren't saved and loaded, so you may use them as a buffer to transfer stacks between saves

trash bin        ↑ top

- ALT-left-click: put cards on hand into trash (CAUTION: there's NO UNDO)

1402 card read / punch        ↑ top

- reading AND punching

- ALT left click onto right hopper/shute to insert or add cards
- left click or SHIFT/CTRL left click takes cards from hopper/shute or from NR/1/28/4/NP stacker back into hand

- the right hopper and the top feed (shute) are combined.
   The first 15 cards are put into the read hopper.
   If you insert or add more than 15 cards into the chute or hopper, the cards are automatically divided into two parts,
   15 cards in the hopper, and the rest on the chute.
- picking up the cards always takes both parts from the hopper and the chute combined

- the amount of cards in the output compartments isn't checked; they may grow infinite and jut out
- START / STOP / CHECK_RESET buttons same functionality as on 1401
- LOAD button loads one card into 1401 memory at location 001, and also starts this program if MODE switch on RUN
- white flip switches currently without function
- 1401 read command ("1") reads card to memory location 001..080
- 1401 punch command ("4") punches card from memory location 101..180
- 1401 branch on last card ("BxxxA") available, if sense switch A set to ON position (default)
- 1401 'K' 1,2,4,8 select-stacker command is working

- the left hopper contains unlimited blank cards, no need to refill
- the left hopper cannot be manually loaded, i.e. no pre-punched cards
- accordingly, the card punch-feed-read special feature is not installed (would read pre-punched cards on punch feed)

Differences to real 1402:
- the device is always operable; punch/read flip switches without function
- cards are either in the hopper, or are immediately fed into the output trays; no need to operate the run-out flip switches

729 tape drive        ↑ top

729 tape drive:
- click handle of slide window to lower or close
- click left hub lever to release / fix reel after slide window has been lowered
- see IBM 1401 - let's program, #6: reading the IBM 729 tape drive for an example
- tapes still on the tape drives are automatically put back to the reels stands on a simulation restart

- [load/rewind] loads tape into vacuum columns and rewinds to load mark
- [load/rewind] fast rewinds tape if more than 0.5" on right reel
- [unload] unloads tape
- [start] switches to ready-state
- [reset] sets drive offline
- [chang.density] toggles density light, but has no further effect
- the drive IDs are fixed and cannot be changed, there's no tape-select switch

- for tape length and the point when the related end-of-reel mark triggers are, the internal calculations is currently only roughly estimated;
   don't expect 100% 1:1 real-life behaviour
- for first read tests there's a prepared reel #110, "personnel list". Tape contains some records with personnel#/surname/name/? + tape mark

tape reels in stands        ↑ top

- may be taken if hand is empty
- may be put back into empty slot of tape stands
- may be mounted onto 729 tape drive, see there
- currently no change of labels or contents or color possible
- for read tests you may use tape #110, "personnel list". Tape contains some records with personnel#/surname/name
- position of tapes is currently not saved; after restarting the simulation, all tapes are put back into their original position
- also tapes on the tape drives are put back on a restart

VDC and simh        ↑ top

since this project originally was only a fun project without any sophisticated goals,
I didn't take the simh encoding into consideration when defining the VDC character set.

Nevertheless it's possible to inport and export a file using the simh character set.
Select the correct format when importing or exporting the card stack via the main menu.
The characters will then be replaced by the VDC equivalents or v.v.

simh new simh old vdc
A even par chk ^
8421 tape mark { ( t
A82 record mark | ' (sgl qt) r
A841 word separator ~ = v
A8421 tape segment " (dbl qts) + s
B minus zero ! ! !
B8421 delta _ _ ^
BA82 plus zero ? ? ?
BA84 lozenge ) ) q
BA8421 group mark } " (dbl qts) g
821   # or = # #
84   @ or ' (sgl) @ @
A84   % or ( % %
BA   & or + & &

known issues        ↑ top

- when 1402 is waiting for next card after "1" command, hit STOP before switching MODE to other position than RUN, otherwise lamp status may be wrong
- there's currently no 1406 visible, nevertheless you have 16.000 memory locations
- 1402, in rare cases, the animation of the cards falling into the chutes isn't visible. currently no clue why and when
- there is no limit to the size of the card decks, even in the machines; they can grow ridiculously long
- when at start the first information box about basic movement pops up, it may be necessary to hit OK twice. (mouse focus issue)
- when switching modes between ADDRESS STOP and e.g. RUN or ALTER, hit STOP first
- if you delete the 'H1401M_GLOB.sav' global data file, the menu/Load-Save option no longer shows the save date of the punch card saves.
   Nevertheless, the punch cards save files can still be loaded if present ('H1401_SL_x.sav' files).

- for up-to-date bug alerts see #bugs-and-fixes channel on discord  1401 VDC Discord Server

⌂ home