The list is divided into sections (in approximate numerical order) as follows - 1001 - 1047 Magnetic tape 1050 - 1057 Input 1060 - 1072 Output 1100 - 1102 Subroutine entry 1103 - 1107 Branching 1112 - 1117 Monitor 1120 - 1127 Miscellaneous transfers 1131 - 1136 Traps 1140 - 1157 Compiler and supervisor 1160 - 1177 Store 1200 - 1265 Tests 1250 - 1253 Character data processing 1256 - 1276 ½" tape operations 1300 - 1377 B-register operations 1400 - 1425 Complex arithmetic 1430 - 1437 Vector operations 1407 - 1476 Miscellaneous B-type accumulator operations 1500 - 1576 Double-length arithmetic 1520 - 1575 Arithmetic using the address as an operand 1601 - 1652 Logical accumulator operations 1624 - 1626 Half-word packing 1700 - 1776 Functions and miscellaneous routines Note that not all extracodes are currently implemented. Of those which are, some are implmented directly by the emulator and some are implmented by the more authentic means of obeying instructions in the fixed store under exctracode control. |
Extracodes which are not (yet) implemented are shown like this. |
Extracodes which are directly implemented by the emulator are shown like this. |
Extracodes which are implemented by subroutines in fixed store are shown like this. |
Extracodes which are implemented but are not required to do anything in the context of the emulator are annotated thus - §(optional note). |
Organisational and Peripheral Extracodes | ||
Magnetic tape | ||
Block Transfers | ||
1001 | Search for section n on tape Ba | |
1002 | Read next K+1 sections from tape Ba to store blocks , P, P+1 . . . . , P + K | |
1003 | Read previous K sections from Ba to P+K, ...., P | |
1004 | Write P, P+1 , .. , P to next K+1 sections on Ba | |
1005 | Move tape Ba forward K+1 sections | |
1006 | Move tape Ba backwards K+1 sections | |
Organisational Instructions | ||
1007 | Mount next reel of file Ba | |
1010 | Mount | |
1011 | Mount free | |
1012 | Mount on logical channel K | |
1013 | Mount free on logical channel K | |
1014 | Write Title | |
1015 | Read Title or number | |
1016 | Unload | |
1017 | Free tape | |
1020 | Release tape (pass to another program) | |
1021 | Release mechanisms | |
1022 | Re-allocate | |
1023 | How long? | |
1024 | Where am I? | |
Variable Length Organisation | ||
1030 | Start reading forwards | |
1031 | Start reading backwards | |
1032 | Start writing forwards | |
1033 | Select tape Ba | |
1034 | Start reading forwards from fixed blocks | |
1035 | Start reading backwards from fixed blocks | |
1036 | ba' = selected magnetic tape | |
1037 | s' = mode of magnetic tape Ba | |
Variable Length Transfers | ||
1040 | Transfer | |
1041 | Skip | |
1042 | Mark | |
1043 | Stop | |
1044 | Word search | |
1046 | Read next block on Orion tape | |
1047 | Read Previous block on Orion tape | |
Input | ||
1050 | Select input n | |
1051 | Find Selected input | |
1052 | Find peripheral equipment number | |
1053 | Test whether binary or internal code | |
1054 | Read next character to Ba, Jump to n at end of record | |
1055 | ba' = number of blocks read | |
1056 | Read ba characters to S | |
1057 | Read next record to S | |
Output | ||
1060 | Select output n | |
1061 | Find Selected output | |
1062 | Find peripheral equipment number | |
1063 | Delete output n | |
1064 | Write character n | |
1065 | End this record | |
1066 | Write ba characters from S | |
1067 | Write a record from S | |
1070 | Rename output n as input ba | |
1071 | Break output n | |
1072 | Define output n | |
Subroutine entry | ||
1100 | Enter subroutine at s, ba' = c + 1 | |
1101 | Enter subroutine at n, ba' = c + 1 | |
1102 | Enter subroutine at bm, ba' = c + 1 | |
1362 | Enter subroutine at n, b90' = c + 1 | |
Branching | ||
1103 | Establish Ba branches | |
1104 | Start branch Ba at s | |
1105 | Kill Ba ; If Ba = 64 Kill current Branch | |
1106 | Halt current Branch if Ba is active | |
1107 | Jump to n if Ba is active | |
Monitor | ||
1112 | Set Monitor Jump to n | |
1113 | Do not restart | |
1117 | End program | |
Miscellaneous transfers | ||
1120 | ba' = clock | |
1121 | ba' = date | |
1122 | ba' = local instruction counter | |
1123 | Set instruction counter = n * 2048 | |
1136 | Read instruction counter | |
1124 | v6' = n | |
1125 | ba' = v6 & n | |
1126 | v7' = n (hoot) | |
1127 | ba' = v7 & n (read handswitches) | |
Traps | ||
1131 | See Character data processing | |
1132 | Set trap/normal mode | |
1133 | ba' = trap address | |
1134 | Trap | |
1135 | See Store | |
1136 | See Miscellaneous transfers | |
Compiler and supervisor | ||
1140 | Read parameter Ba to s | |
1141 | Define compiler | |
1142 | End compiling | |
1143 | Reserve Supervisor tape | |
1147 | Call compiler n | |
1150 | Assign blocks, labels P to (P + ba - 1), to overflow K | |
1151 | Set up blocks from P onwards from overflow K | |
1155 | See Store | |
1156 | Enter extracode control at n if the "in Supervisor switch" is set§ | |
1157 | Enter extracode control at n if the "Process switch" is set | |
Store | ||
1135 | Jump to n when block > ba defined | |
1155 | Find smallest block label defined | |
1160 | Read block P | |
1161 | Release block P | |
1162 | Duplicate read | |
1163 | Duplicate write | |
1164 | Rename | |
1165 | Write Block P | |
1166 | Read absolute page | |
1167 | Lose block P | |
1170 | Clear blocks | |
1171 | Store allocation = n blocks | |
1172 | ba' = number of pages available | |
1173 | ba' = number of blocks available | |
1174 | Reserve band n | |
1175 | Read K + 1 blocks | |
1176 | Write K + 1 blocks | |
1177 | Lose band n | |
Arithmetic and logical extracodes | ||
Accumulator operations are rounded floating-point unless marked X, when they are suitable for fixed-point working | ||
Tests | ||
1200 | ba'= n if AO set; Clear AO | |
1201 | ba'= n if AO clear; Clear AO | |
1204 | See Logical accumulator operations | |
1206 | ba' = n if most significant character in g = 0 | |
1216 | ba' = n if bm > 0 | |
1217 | ba' = n if bm < 0 | |
1223 | ba' = n if Bc = 1 | |
1226 | ba' = n if bt > 0 | |
1227 | ba' = n if bt <; 0 | |
1234 | c' = c + 2 if am approximately = s | |
1235 | c' = c + 2 if am not approximately = s Approximate equality is defined by |(am - s) / am| < C(ba) , with am standardised. If am = 0, am is not approximately = s | |
1236 | ba' = n if ax > 0 | |
1237 | ba' = n if ax < 0 | |
1250 to 1253 | See Character data processing | |
1255 | ba' = n if m is neither zero nor all ones | |
1256 to 1276 | See ½" tape operations | |
1265 | See Logical accumulator operations | |
1727 | c' = c + 1 , c + 2 , c + 3 as am > , = < s | |
1736 | c' = c + 2 if |am| > s | |
1737 | c' = c + 2 if |am| < s | |
Character data processing | ||
1131 | Table search | |
In 1250 and 1251 S is taken as a character address | ||
1250 | ba'(digits 18-23) = s, ba' (digits 0-17) = 0 | |
1251 | s' = ba(digits 18-23) | |
1252 | Unpack n characters starting from character address C(ba) to halfwords from C(ba*) | |
1253 | Pack n characters starting from half-word address C(ba*), to character address C(ba) | |
½" tape operations | ||
1256 | Select density n on selected mechanism | |
1257 | Write file mark/Skip to file mark, using selected device | |
1260 | Select deck Ba; define record length and mode of transfer n | |
1261 | Set Ba to selected device; set b(n) to record length and mode defined | |
1262 | Set ba to type of device n | |
1265 | See Logical accumulator operations | |
1267 | Rewind selected device. Position tape to read first record | |
1270 | Write a record of ba characters starting at S to selected device | |
1274 | Read a record starting at S/Skip forward one record, using selected device | |
1275 | Skip backwards one record on selected device. Ba must be 1 and S negative | |
1276 | Set ba to length of previous record read from selected device | |
B-register operations | ||
1300 | ba' = integral part of s, am' = fractional part of s | |
1301 | ba' = integral part of am, am' = fractional part of am | |
1302 | ba' = ba * n rounded away from zero | |
1303 | ba' = - ba * n rounded away from zero | |
1304 | ba' = integral part of (ba / n) , b97' = remainder | |
In 1302-1304 ba and n are 21-bit integers in digits 0-20 | ||
1312 | ba' = ba * n | |
1313 | ba' = - ba * n | |
1314 | ba' = integral part of (ba / n) , b97' = remainder | |
In 1312-1314 ba and n are 24-bit integers | ||
1340 | ba' = ba * 2-n; unrounded arithmetic shift right | |
1341 | ba' = ba * 2n; unrounded arithmetic shift left | |
1342 | ba' = ba circularly shifted right n places | |
1343 | ba' = ba circularly shifted left n places | |
1344 | ba' = ba logically shifted right n places | |
1345 | ba' = ba logically shifted left n places | |
1347 | s' = s | ba | |
1353 | ba' = position of most significant 1 in bits 16-23 of n (as B123) | |
1356 | bt' = ba ≢ s | |
1357 | bt' = ba ≢ n | |
1362 | See Subroutine entry | |
1364 | ba' = (ba & ¬n) | (bm & n) b119' = (ba ≢ bm) & n | |
1371 | b121' = Ba, b119' = N + bm | |
1376 | bt' = ba & s | |
1377 | bt' = ba & n | |
Complex arithmetic | ||
The complex accumulator Ca is a pair of consecutive registers, the first first register having address ba. If Ba = 0 Ca is locations 0,1. s: is a number pair. Ca may coincide with S: but not otherwise overlap with it. A is spoiled. | ||
1400 | ca' = log s: | |
1402 | ca' = exp s: | |
1403 | ca' = conjugate s: | |
1407 | See Miscellaneous B-type accumulator operations | |
1410 | ca' = sqrt s: | |
1411 | am' = arg s: radians | |
1412 | ca' = mod s: | |
1413 | ca' = s * cos s* , s * sin s* (s in radians) | |
1414 | ca' = 1 / s: | |
1415 | See Miscellaneous B-type accumulator operations | |
1420 | ca' = ca + s: | |
1421 | ca' = ca - s: | |
1424 | ca' = s: | |
1425 | ca' = -s: | |
1456 | s:' = ca | |
1462 | ca' = ca * s: | |
Vector operations | ||
The vectors are of order n. s1 is stored in consecutive locations from ba and s2 from ba*. A is spoiled. | ||
1430 | s1' = s1 + s2 | |
1431 | s1' = s1 - s2 | |
1432 | s1' = am * s2 | |
1433 | s1' = s1 + am * s2 | |
1434 | s1' = s2 (forwards or backwards) | |
1436 | am' = Σ (0 to n-1) of s1,i * s2,i | |
1437 | a' = Σ (0 to n-1) of s1,i * s2,i | |
Miscellaneous B-type accumulator operations | ||
1407 | Remainder and adjusted integral quotient | |
1415 | Generate pseudo-random number | |
1441 | See Arithmetic using the address as an operand | |
1452 | m' = m * sx * 8y+sy-bay ; ay' = bay (X) | |
1456 1462 | See Complex arithmetic | |
1466 | a' = C(N + bm + ba) * C(N + bm) + a | |
1467 | am' = Σ(0 to r) sixi where x = am | |
1473 | m' = (ax / sx) * 8ay - sy - bay ; ay' = bay (X) | |
1474 | C(ba)' = quotient (am / s) ; am' = remainder | |
1475 | C(ba)' = quotient (a / s) ; am' = remainder | |
1476 | C(ba)' = quotient ([integral part of am] / s) ; am' = remainder | |
Double-length arithmetic | ||
1500 | a' = a + s: | |
1501 | a' = a - s: | |
1502 | a' = -a + s: | |
1504 | a' = s: | |
1505 | a' = - s: | |
1520 - 1535 | See Arithmetic using the address as an operand | |
1542 | a' = a * s: | |
1543 | a' = -a * s: | |
1556 | s:' = a | |
1562 | See Arithmetic using the address as an operand | |
1565 | a' = -a | |
1566 | a' = |a| | |
1567 | a' = |s:| | |
1574 1575 | See Arithmetic using the address as an operand | |
1576 | a' = a / s: | |
Arithmetic using the address as an operand | ||
The address is taken as a 21-bit integer with one octal fractional place. Fixed-point operations imply an exponent of 12. | ||
1441 | sx' = ba ; sy' =12 | |
1520 | am' = am + n | |
1521 | am' = am - n | |
1524 | am' = n ; l' = 0 | |
1525 | am' = -n ; l' = 0 | |
1534 | am' = n ; l' = 0 | |
1535 | am' = -n ; l' = 0 | |
1562 | am' = am * n | |
1574 | am' = am / n | |
1575 | am' = aq / n | |
Logical accumulator operations | ||
The logical accumulator G is B98 and B99 | ||
1204 | Ba' = number of 6-bit characters from most-significant end identical in g and s | |
1265 | g' = 26 * g + n , ba' = 6 bits shifted out of g | |
1601 | g' = s | |
1604 | g' = g + s | |
1605 | g' = g + s with end around carry | |
1606 | g' = g ≢ s | |
1607 | g' = g & s | |
1611 | g' = ¬g | |
1613 | s' = g | |
1615 | am' = g | |
1624 1626 | See Half-word packing | |
1630 | g' = g & ¬s | |
1635 | g' = am | |
1646 | g' = g | s | |
1652 | bt' = g - s | |
Half-word packing | ||
s has an 8-bit exponent and a 16-bit mantissa | ||
1624 | am' = s | |
1626 | s'= am with s rounded | |
Functions and miscellaneous routines | ||
1700 | am' = log s | |
1701 | am' = log aq | |
1702 | am' = exp s | |
1703 | am' = exp aq | |
1704 | am' = integral part of s | |
1705 | am' = integral part of am | |
1706 | am' = sign s | |
1707 | am' = sign am | |
1710 | am' = √s | |
1711 | am' = √aq | |
1712 | am' = √aq2 + s2 | |
1713 | am' = aqs | |
1714 | am' = 1 / s | |
1715 | am' = 1 / am | |
1720 | am' = arc sin s | |
1721 | am' = arc sin aq | |
1722 | am' = arc cos s | |
1723 | am' = arc cos aq | |
1724 | am' = arc tan s | |
1725 | am' = arc tan aq | |
1726 | am' = arc tan aq / s | |
1727 | See Tests | |
1730 | am' = sin s | |
1731 | am' = sin aq | |
1732 | am' = cos s | |
1733 | am' = cos aq | |
1734 | am' = tan s | |
1735 | am' = tan aq | |
1736 & 1737 | See Tests | |
1752 | m' = ax * 812 ay' = ay - 12 | |
1753 | ax' = m * 8-12 ay' = ay + 12 | |
1754 | Round am by adding; standardise | |
1755 | ax' = ax * 8ay-ny ay' = ny | |
1756 | s' = am ; am' = s | |
1757 | am' = s / am | |
1760 | am' = am2 | |
1762 | m' = ax * 812 | |
1763 | ax' = m * 8-12 | |
1764 | ax' = ax * 8n | |
1765 | ax' = ax * 8-n | |
1766 | am' = |s| | |
1767 | am' = |am| | |
1771 | b121' = Ba, B119 = N + ba + bm | |
1772 | m' = (m * sx) * 812; ay' = ay + sy - 12 | |
1773 | m' = (m / sx) * 8ay - sy - 12; ay' = 12 | |
1774 | am' = am / s | |
1775 | am' = aq / s | |
1776 | Remainder |