CARDTRAN
Information
Pseudo CARDTRAN command syntax described here is likely the first ever pseudo language developed for an 1802 like system. It runs on a FRED1 which uses the SYSTEM 00 prototype CPU which is a simplified 1801.
TV Display is divided in 3 areas, TV(0) and TV(1) which can be used by the CARDTRAN program and TV(2) which is used by the interpreter:
TV(0) TV(1) TV(2)
CONTROL codes
F0 | Load program mode @ M[200]. Cardtran interpreter will wait for for a 4 digit word which will be stored at location M[200] next word at M[202] etc. TV(2) position will show the 4 digit instruction after 4 digits are received. |
F1 | Execute CARDTRAN program at M[200] |
F2 | Input aa, DDDD after which DDDD is stored at M[2aa] |
F3 | Show value of DR on TV(2) display position |
F4 | Input aa after which 4 digit word stored on M[2aa] is shown on TV(2) display position |
F5 | Halt execution (except 70/71) |
F6 | Resume execution |
F7 | Execute next instruction only |
Example CARDTRAN code
This program (included in the cardtran.bin file) will wait for two four digit numbers, when the numbers are given it will multiply them and show a counter counting up to the result. At the end it will wait for two new numbers. If no input is given I think some random numbers are chosen.
Definitions
aa | 2 digits hexadecimal value. This is used to indicate an address in hexadecimal range of 0200-02C7. Note that the original CARDTRAN code uses a 2 digit decimal value to indicate a decimal 'line' number referring to the 0200-02C7 address range by multiplying the value aa with 2 and adding hexadecimal value of 200 |
DR | 4 digits decimal register for use in CARDTRAN program. Value is stored on address 02E0/02E1. |
. | Not used, value doesn't matter |
1..9 | Decimal digits |
Syntax
Opcode | Mnemonic | Parameter | Definition |
---|---|---|---|
40aa | ADD | [2aa], DR 2aa, DR |
M[2aa] + DR -> M[2aa], 000C -> DR |
70aa | DISP0 | [2aa] 2aa |
Display word on M[2aa] on TV(0) display position |
71aa | DISP1 | [2aa] 2aa |
Display word on M[2aa] on TV(1) display position |
10aa | INPUT | [2aa] 2aa |
Wait for 4 digit word input and store word -> M[2aa] |
22aa | JNZ | 2aa DR, 2aa |
Jump to 2aa if DR != 0 |
20aa | JP | 2aa | JumP to 2aa |
21aa | JZ | 2aa DR, 2aa |
Jump to 2aa if DR = 0 |
60aa | LD | [2aa], DR 2aa, DR |
DR -> M[2aa] |
30aa | LD | DR, [2aa] DR, 2aa |
M[2aa] -> DR |
90aa | LDD | [2aa], DR 2aa, DR |
LSD of DR -> LSD of M[2aa] |
0... | SKIP | Skip | |
50aa | SUB | [2aa], DR 2aa, DR |
M[2aa] - DR -> M[2aa], 000B -> DR |
80aa | RSH | [2aa] 2aa |
Ring SHift M[2aa] right 1 digit |