document.write(`
user interface
- 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
- a green shadow indicate a clickable area when mouse is over
- 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, and cannot be intercepted by
the program itself.
main menu
- 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:
Data to be imported or exported resides in the subfolder
'.../Saved' (NOT .../SaveGames)
To import or export simh files, select the related option
nest to 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
The 1401 uses an old 6bit BCD character encoding, 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,
and so are substituted by
lower case chars.
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.
Use 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, on some
keyboards
you may use 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

1401 CPU and commands
The simulation supports all commands available on a standard 1401,
including
the common expansions:
- store-address-register
- modify-address
- indexing
- div/mult
- move-record
- high-low-equal-compare
- 1405 RAMAC disk
- 1407 inquiry station / typewriter terminal
The undocumented commands 7-char-branch "B aaa bbb" and print-w/o-LF "2S" are
available
In the simulation, the Check Bit (C) is ignored system wide
and only automatically generated for the display.
not available are:
- punch-feed-read
- read/punch-release
- expanded-print-feature
- compressed-tape
- column-binary
- overlap-mode
For details about the commands see original 1401 reference manual:
A24-1403-5_1401_Reference_Apr62.pdf
1401 panel
- sense switches are working, and 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. Unlit after button press; lit after programmed
halt ('H').
- before running/stepping a program, it's important to check/set I-Reg and press
TART RESET and maybe CHECK 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
- POWER ON OFF buttons have no effect
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.
***: there's also a 'dump core' option in the main menu,
which writes the complete core
contents 0...15,999 to a PC text file for
easier analysis.
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
1403 printer:
- click on 'print' button or the paper in printer or type "R" to show or hide the printout
- paper cycles between short (12 lines) and long version to allow better
visibility
- START / STOP / CHECK_RESET buttons work parallel to the ones on the 1401
- the paper stack is moving, but currently no printout is visible directly in
the printer
1407 inquiry station / terminal
- 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
- 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
- program mode with program card not
yet implemented
- cheat mode: allows use of backspace to correct typos
- 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
- tab function for 026 card punch:
create text file
saved\H026tab.txt containing tab positions.
Use ALT-A to advance to next tab while punching.
Click on 'program card' on 026 to get a description and the current settings
729 tape drive
729 tape drive:
- click handle of slide window to open (default) or close
- click left hub lever to release / fix reel after slide window has been lowered
- if no tape mounted, click the empty area around the left hub to mount tape in your 'hand'
- click the left tape reel (if present) to
take it into your
'hand' - to take or put down a tape in your hand see chapter for 'reel stand',
see IBM 1401 - let's program, #6: reading the IBM 729 tape drive for an example
- mounted tapes will be kept mounted on next simulation start (configurable)
- [load/rewind] loads tape into vacuum columns and rewinds to load mark (beginning)
- [load/rewind] rewinds to load mark, set 'ready' off first
- [load/rewind] if more than 0.5" tape on right reel, does fast rewind
- [unload] unloads tape
- [start] switches to ready-state, 'ready' is lit
- [reset] sets drive offline / 'ready' is off
- [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 are currently only roughly estimated;
- for first read tests there's a prepared reel #110, "personnel list".
Tape contains some records with personnel#/surname/name/? + tape mark
card drawers
- 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
QUICK ACCESS:
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 https://youtu.be/ZGxqCfHIJNk 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
- ALT-left-click: put cards on hand into trash (CAUTION: there's NO UNDO!!!)
1402 card read / punch
- 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
tape reels in stands
- 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 reel label stickers or reel color
- 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
- tapes on the tape drives are automatically re-mounted on next simulation start
VDC and simh
when starting this project, I didn't know about the SIMH encoding for special
characters, so
I didn't take it into consideration when defining the VDC character
set, and
created a new mapping.
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 automatically converted to the corresponding
equivalents.
bits |
|
simh new |
simh old |
vdc |
A |
even par chk |
^
| ^
|
c
|
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
- there's currently no 1406 visible, nevertheless you have 16.000 memory
locations
- 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 the
1401 VDC Discord
`);