This is currently a minimal implementation of the IBM 402/403 Accounting machines. The START, STOP, and FINAL TOTAL buttons should function as on original equipment, with the exception that FINAL TOTAL does not requires simultaneous pressing of START. The run rate is set to 20 cards per second.
The input hopper is located in the upper left. Output stacker is located directly below the hopper. The hopper and stacker behave in the normal fashion, except that the stacker contents cannot be saved and blank cards cannot be placed in the hopper.
The program panel is implemented as a properties file. currently, this file must be editted external from the simulation. The file contains lines of the format "name = value". Referencing the original equipment programming panel, the following are supported:
Group | Hubs | Purpose | Property Syntax |
---|---|---|---|
FIRST READING | 1-80 | Card Cols 1-80 | 1.1 - 1.80 |
SECOND READING | 1-80 | Card Cols 1-80 | 2.1 - 2.80 |
THIRD READING | 1-80 | Card Cols 1-80 | 3.1 - 3.80 |
COUNTER EXIT/ENTRY | (1) | Counters 2A - 8D | 2a1 - 8d8 |
ALPHAMERICAL PRINT | 1-43 | Print Cols 1-43 | a1 - a43 |
NUMERICAL PRINT | 1-45 | Print Cols 44-88 | n1 - n45 |
COMPARING ENTRY | (1) | Comparator | c1a - c20a c1b - c20b |
COMPARING EXIT | (1) | Comparator (2) | c1x - c20x |
COUNTER CONTROL | 2A - 8D | Counters | 2ap - 8dp (PLUS) 2am - 8dm (MINUS) |
COUNTER CARRY | 2A - 8D | Counter carry (4) | 2ay - 8dy |
NEGATIVE BALANCE | 2A - 8D | Counter neg. bal. (4) | 2an - 8dn |
TRANSFER PLUS/MINUS | 2A - 8D | Counter transfer(4) | 2ar+ - 8dr+ 2ar- - 8dr- |
S.P. X CTRL PLUS/MINUS | 2A - 8D | Counter Summ. Punch X(4) | 2ax+ - 8dx+ 2ax- - 8dx- |
TOTAL | 2A - 8D | Counter print/reset | 2at - 8dt |
CR SYMBOL | 2A - 8D | Credit symbol printing | 2ac - 8dc |
PILOT SELECTORS | X PU | X pick-up | s1x - s11x |
D PU | digit pick-up | s1d - s11d | |
I PU | immediate pick-up | s1i - s11i | |
T | transfer position | s1t1 - s11tN | |
N | normal position | s1n1 - s11nN | |
C | common position | s1c1 - s11cN | |
COL SPLIT | X | 11 zone punches | cs1x - cs4x | R | 12 zone punches | cs1r - cs4r | 0-9 | 0-9 digit punches | cs1d - cs10d | C | common | cs1c - cs10c |
* SYMBOL | F,1,2,3,ALL | Asterisk printing | aster{f,1,2,3,all} |
TOTAL PROGRAM | MINOR,INTER,MAJOR | Grouping cycles | {minor,inter,major} |
ALL CYCLES | (1) | All cycles | all |
CARD CYCLES | (1) | Card cycles | cards |
FIRST CD | MI,IN,MA,MB | First Card cycles | {fcmi,fcin,fcma,fcmb} |
FINAL TOTAL | Final Total cycle | final | |
S.P. CONTROL ENTRY | Summary Punch Control | sp1 - sp12 | |
LIST | Print entry | list | |
SPACE CTRL | S,1,2,3 | Print spacing | {spsupp,space1,space2,space3} |
Zero Suppression | (n/a) | Print field zero suppression (3) | zero |
Notes:
(1) Hubs are not labeled, implied that left-most is "1" if relavent.
(2) Comparator exits are chained automatically based on entry field(s).
(3) Added to property for ALPHAMERICAL/NUMERICAL PRINT entry.
(4) Item is either the EXIT or corresponding ENTRY depending on context.
Property names are expected to represent ENTRY hubs, and generally do not contain a width (field width is determined by source(s)).
In the property value, a set of hubs (a field) may be designated by adding an asterisk and the number of hubs in the field. It is generally expected that all sets of hubs in a given property will be the same width, and that width determines the property width.
Single items (cycles, controls, etc) must not have a field width specified.
Selectors do not have a limit on positions (contact sets). N may be any practical number (CO-SELECTORS are not needed). The position numbers should start at "1" and be kept contiguous. Keep in mind that related C, N, and T contacts must have the same position number.
Column Splits are bi-directional, similar to Selector positions (contacts).
Example 1: comparing a field (current and previous card). Field starts at card column 10 and is 4 columns wide. Compare triggers "minor" group.
c1a = 3.10*4 c1b = 2.10*4 stmi = c1x
Which means to send card columns 10-13 from SECOND READING to COMPARING hubs 1-4, and send card columns 10-13 from THIRD READING to the other COMPARING hubs 1-4. COMPARING EXIT hubs 1-4 are linked together automatically, and the output is tied to the MINOR START hub.
Example 2: Add field from card column 49, 5 columns wide, to counter 8B and print result into numeric columns 11-18 with zero suppression. Print/reset on minor group change. Note how the 5-col field is positioned to the lower part of the 8-digit counter.
8b4 = 3.49*5 8bp = all 8bt = minor n11 = 8b1*8 zero
Line 1 sends card columns 49-53 from THIRD READING to COUNTER 8B ENTRY hubs 4-8, Line 2 wires ALL CYCLES to the PLUS hub for COUNTER 8B, and Line 3 wires the TOTAL hub for 8B to the MINOR TOTAL PROGRAM hub.
Line 4 wires COUNTER 8B EXIT hubs 1-8 to NUMERICAL PRINT columns 11-18 and enables zero suppression.
Note, on original hardware, zero suppression was configured by changing levers on the type bars in the printer (and not by wires on the control panel). This property parameter defines zero suppression for the field automatically, which is a compromise implementation.
Example 3: Setting a counter for data-controlled plus/minus and negative balances. Card column 54 contains an X punch ('-') for negative data. Card columns 40-47 contain the numerical data.
8a1 = 3.40*8 s1x = 2.54 s1c1 = cards 8ap = s1n1 8am = s1t1 8ay = 8ay 8an = 8an
Line 1 directs the input data to the counter. Lines 2-5 setup the X-punch selection of plus/minus from column 54. Lines 6,7 configure the counter to handle negative balances, by looping back the CARRY impulse and connecting NEGATIVE BALANCE TEST EXIT to NEGATIVE BALANCE CONTROL.
It is required that all ENTRY hubs of a counter be supplied with data in order to properly perform minus operations. Unknown if original hardware had the same restriction. Blanks are treated as zeros.