Added support to FileDump for generating binary dumps from MACRO11 listing (.lst) files, since I wasn't having much success with dumpobj or obj2hex.pl; note that this assumes a listing file produced by the macro11 cross-assembler written by Richard Krehbiel in 2001, updated in 2009, and maintained here: https://github.com/shattered/macro11. There are other versions of macro11 floating around, like the one in the simtools project that accompanies simh, and the one built for the Windows-based PDP11GUI app.

This commit is contained in:
Jeff Parsons 2016-10-15 11:05:38 -07:00 committed by Jeff Parsons
commit 3a7b769fa3
31 changed files with 1117 additions and 751 deletions

View file

@ -37,10 +37,12 @@ if (NODE) {
}
/*
* Decoding starts at the bottom of this file, in op1170(). The basic decoding approach is to
* dispatch on the top 4 bits of the opcode, and if further decoding is required, the dispatched
* function will dispatch on the next 4 bits, and so on (although some of the intermediate levels
* dispatch only on 2 bits, which could also handled with a switch statement).
* Decoding starts at the bottom of this file, in op1120() and op1170().
*
* The basic decoding approach is to dispatch on the top 4 bits of the opcode, and if further
* decoding is required, the dispatched function will dispatch on the next 4 bits, and so on
* (although some of the intermediate levels dispatch only on 2 bits, which could also be handled
* with a switch statement).
*
* Eventually, every opcode should end up either in an opXXX() function or opUndefined(). For
* opcodes that perform a simple read and/or write operation, the entire operation is handled by
@ -1765,285 +1767,234 @@ PDP11.opUndefined = function(opCode)
};
/**
* op0Xnn_1170(opCode)
* op1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0Xnn_1170 = function(opCode)
PDP11.op1120 = function(opCode)
{
PDP11.aOps0Xnn_1170[(opCode >> 8) & 0xf].call(this, opCode);
PDP11.aOpXnnn_1120[opCode >> 12].call(this, opCode);
};
/**
* op0AXn_1170(opCode)
* op0Xnn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0AXn_1170 = function(opCode)
PDP11.op0Xnn_1120 = function(opCode)
{
PDP11.aOps0AXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
PDP11.aOp0Xnn_1120[(opCode >> 8) & 0xf].call(this, opCode);
};
/**
* op0BXn_1170(opCode)
* op0AXn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0BXn_1170 = function(opCode)
PDP11.op0AXn_1120 = function(opCode)
{
PDP11.aOps0BXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
PDP11.aOp0AXn_1120[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op0CXn_1170(opCode)
* op0BXn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0CXn_1170 = function(opCode)
PDP11.op0BXn_1120 = function(opCode)
{
PDP11.aOps0CXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
PDP11.aOp0BXn_1120[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op0DXn_1170(opCode)
* op0CXn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0DXn_1170 = function(opCode)
PDP11.op0CXn_1120 = function(opCode)
{
PDP11.aOps0DXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
PDP11.aOp0CXn_1120[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op00Xn_1170(opCode)
* op00Xn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op00Xn_1170 = function(opCode)
PDP11.op00Xn_1120 = function(opCode)
{
PDP11.aOps00Xn_1170[(opCode >> 4) & 0xf].call(this, opCode);
PDP11.aOp00Xn_1120[(opCode >> 4) & 0xf].call(this, opCode);
};
/**
* op008X_1170(opCode)
* op00AX_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op008X_1170 = function(opCode)
PDP11.op00AX_1120 = function(opCode)
{
PDP11.aOps00AX_1170[opCode & 0xf].call(this, opCode);
PDP11.aOp00AX_1120[opCode & 0xf].call(this, opCode);
};
/**
* op00AX_1170(opCode)
* op00BX_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op00AX_1170 = function(opCode)
PDP11.op00BX_1120 = function(opCode)
{
PDP11.aOps00AX_1170[opCode & 0xf].call(this, opCode);
PDP11.aOp00BX_1120[opCode & 0xf].call(this, opCode);
};
/**
* op00BX_1170(opCode)
* op000X_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op00BX_1170 = function(opCode)
PDP11.op000X_1120 = function(opCode)
{
PDP11.aOps00BX_1170[opCode & 0xf].call(this, opCode);
PDP11.aOp000X_1120[opCode & 0xf].call(this, opCode);
};
/**
* op000X_1170(opCode)
* op8Xnn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op000X_1170 = function(opCode)
PDP11.op8Xnn_1120 = function(opCode)
{
PDP11.aOps000X_1170[opCode & 0xf].call(this, opCode);
PDP11.aOp8Xnn_1120[(opCode >> 8) & 0xf].call(this, opCode);
};
/**
* op7Xnn_1170(opCode)
* op8AXn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op7Xnn_1170 = function(opCode)
PDP11.op8AXn_1120 = function(opCode)
{
PDP11.aOps7Xnn_1170[(opCode >> 8) & 0xf].call(this, opCode);
PDP11.aOp8AXn_1120[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op8Xnn_1170(opCode)
* op8BXn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8Xnn_1170 = function(opCode)
PDP11.op8BXn_1120 = function(opCode)
{
PDP11.aOps8Xnn_1170[(opCode >> 8) & 0xf].call(this, opCode);
PDP11.aOp8BXn_1120[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op8AXn_1170(opCode)
* op8CXn_1120(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8AXn_1170 = function(opCode)
PDP11.op8CXn_1120 = function(opCode)
{
PDP11.aOps8AXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
PDP11.aOp8CXn_1120[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op8BXn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8BXn_1170 = function(opCode)
{
PDP11.aOps8BXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op8CXn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8CXn_1170 = function(opCode)
{
PDP11.aOps8CXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op8DXn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8DXn_1170 = function(opCode)
{
PDP11.aOps8DXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op1170 = function(opCode)
{
PDP11.aOpsXnnn_1170[opCode >> 12].call(this, opCode);
};
PDP11.aOpsXnnn_1170 = [
PDP11.op0Xnn_1170, // 0x0nnn
PDP11.opMOV, // 0x1nnn 01SSDD
PDP11.opCMP, // 0x2nnn 02SSDD
PDP11.opBIT, // 0x3nnn 03SSDD
PDP11.opBIC, // 0x4nnn 04SSDD
PDP11.opBIS, // 0x5nnn 05SSDD
PDP11.opADD, // 0x6nnn 06SSDD
PDP11.op7Xnn_1170, // 0x7nnn
PDP11.op8Xnn_1170, // 0x8nnn
PDP11.opMOVB, // 0x9nnn 11SSDD
PDP11.opCMPB, // 0xAnnn 12SSDD
PDP11.opBITB, // 0xBnnn 13SSDD
PDP11.opBICB, // 0xCnnn 14SSDD
PDP11.opBISB, // 0xDnnn 15SSDD
PDP11.opSUB, // 0xEnnn 16SSDD
PDP11.aOpXnnn_1120 = [
PDP11.op0Xnn_1120, // 0x0nnn
PDP11.opMOV, // 0x1nnn 01SSDD 11/20+ 2.3
PDP11.opCMP, // 0x2nnn 02SSDD 11/20+ 2.3*
PDP11.opBIT, // 0x3nnn 03SSDD 11/20+ 2.9*
PDP11.opBIC, // 0x4nnn 04SSDD 11/20+ 2.9
PDP11.opBIS, // 0x5nnn 05SSDD 11/20+ 2.3
PDP11.opADD, // 0x6nnn 06SSDD 11/20+ 2.3
PDP11.opUndefined, // 0x7nnn
PDP11.op8Xnn_1120, // 0x8nnn
PDP11.opMOVB, // 0x9nnn 11SSDD 11/20+ 2.3
PDP11.opCMPB, // 0xAnnn 12SSDD 11/20+ 2.3
PDP11.opBITB, // 0xBnnn 13SSDD 11/20+ 2.9
PDP11.opBICB, // 0xCnnn 14SSDD 11/20+ 2.9
PDP11.opBISB, // 0xDnnn 15SSDD 11/20+ 2.3
PDP11.opSUB, // 0xEnnn 16SSDD 11/20+ 2.3
PDP11.opUndefined // 0xFnnn
];
PDP11.aOps0Xnn_1170 = [
PDP11.op00Xn_1170, // 0x00nn
PDP11.opBR, // 0x01nn
PDP11.opBNE, // 0x02nn
PDP11.opBEQ, // 0x03nn
PDP11.opBGE, // 0x04nn
PDP11.opBLT, // 0x05nn
PDP11.opBGT, // 0x06nn
PDP11.opBLE, // 0x07nn
PDP11.opJSR, // 0x08nn
PDP11.opJSR, // 0x09nn
PDP11.op0AXn_1170, // 0x0Ann
PDP11.op0BXn_1170, // 0x0Bnn
PDP11.op0CXn_1170, // 0x0Cnn
PDP11.op0DXn_1170, // 0x0Dnn
PDP11.aOp0Xnn_1120 = [
PDP11.op00Xn_1120, // 0x00nn
PDP11.opBR, // 0x01nn 0004XX 11/20+ 2.6
PDP11.opBNE, // 0x02nn 0010XX 11/20+ 2.6**
PDP11.opBEQ, // 0x03nn 0014XX 11/20+ 2.6**
PDP11.opBGE, // 0x04nn 0020XX 11/20+ 2.6**
PDP11.opBLT, // 0x05nn 0024XX 11/20+ 2.6**
PDP11.opBGT, // 0x06nn 0030XX 11/20+ 2.6**
PDP11.opBLE, // 0x07nn 0034XX 11/20+ 2.6**
PDP11.opJSR, // 0x08nn 004RDD 11/20+ 4.4
PDP11.opJSR, // 0x09nn 004RDD 11/20+ 4.4
PDP11.op0AXn_1120, // 0x0Ann
PDP11.op0BXn_1120, // 0x0Bnn
PDP11.op0CXn_1120, // 0x0Cnn
PDP11.opUndefined, // 0x0Dnn
PDP11.opUndefined, // 0x0Enn
PDP11.opUndefined // 0x0Fnn
];
PDP11.aOps0AXn_1170 = [
PDP11.opCLR, // 0x0A0n
PDP11.opCOM, // 0x0A4n
PDP11.opINC, // 0x0A8n
PDP11.opDEC // 0x0ACn
PDP11.aOp0AXn_1120 = [
PDP11.opCLR, // 0x0A0n 0050DD 11/20+ 2.3
PDP11.opCOM, // 0x0A4n 0051DD 11/20+ 2.3
PDP11.opINC, // 0x0A8n 0052DD 11/20+ 2.3
PDP11.opDEC // 0x0ACn 0053DD 11/20+ 2.3
];
PDP11.aOps0BXn_1170 = [
PDP11.opNEG, // 0x0B0n
PDP11.opADC, // 0x0B4n
PDP11.opSBC, // 0x0B8n
PDP11.opTST // 0x0BCn
PDP11.aOp0BXn_1120 = [
PDP11.opNEG, // 0x0B0n 0054DD 11/20+ 2.3
PDP11.opADC, // 0x0B4n 0055DD 11/20+ 2.3
PDP11.opSBC, // 0x0B8n 0056DD 11/20+ 2.3
PDP11.opTST // 0x0BCn 0057DD 11/20+ 2.3*
];
PDP11.aOps0CXn_1170 = [
PDP11.opROR, // 0x0C0n
PDP11.opROL, // 0x0C4n
PDP11.opASR, // 0x0C8n
PDP11.opASL // 0x0CCn
PDP11.aOp0CXn_1120 = [
PDP11.opROR, // 0x0C0n 0060DD 11/20+ 2.3*
PDP11.opROL, // 0x0C4n 0061DD 11/20+ 2.3*
PDP11.opASR, // 0x0C8n 0062DD 11/20+ 2.3*
PDP11.opASL // 0x0CCn 0063DD 11/20+ 2.3*
];
PDP11.aOps0DXn_1170 = [
PDP11.opMARK, // 0x0D0n
PDP11.opMFPI, // 0x0D4n
PDP11.opMTPI, // 0x0D8n
PDP11.opSXT // 0x0DCn
];
PDP11.aOps00Xn_1170 = [
PDP11.op000X_1170, // 0x000n 000000-000017
PDP11.aOp00Xn_1120 = [
PDP11.op000X_1120, // 0x000n 000000-000017
PDP11.opUndefined, // 0x001n 000020-000037
PDP11.opUndefined, // 0x002n 000040-000057
PDP11.opUndefined, // 0x003n 000060-000077
PDP11.opJMP, // 0x004n 0001DD
PDP11.opJMP, // 0x005n 0001DD
PDP11.opJMP, // 0x006n 0001DD
PDP11.opJMP, // 0x007n 0001DD
PDP11.opRTS, // 0x008n 00020R (opRTS() will also confirm that bit 3 is clear)
PDP11.opSPL, // 0x009n 00023N (opSPL() will also confirm that bit 3 is set)
PDP11.op00AX_1170, // 0x00An 000240-000257
PDP11.op00BX_1170, // 0x00Bn 000260-000277
PDP11.opSWAB, // 0x00Cn 0003DD
PDP11.opSWAB, // 0x00Dn 0003DD
PDP11.opSWAB, // 0x00En 0003DD
PDP11.opSWAB // 0x00Fn 0003DD
PDP11.opJMP, // 0x004n 0001DD 11/20+ 1.2
PDP11.opJMP, // 0x005n 0001DD 11/20+ 1.2
PDP11.opJMP, // 0x006n 0001DD 11/20+ 1.2
PDP11.opJMP, // 0x007n 0001DD 11/20+ 1.2
PDP11.opRTS, // 0x008n 00020R 11/20+ 3.5 (opRTS() will also confirm that bit 3 is clear)
PDP11.opUndefined, // 0x009n 00023N
PDP11.op00AX_1120, // 0x00An 000240-000257
PDP11.op00BX_1120, // 0x00Bn 000260-000277
PDP11.opSWAB, // 0x00Cn 0003DD 11/20+ 2.3
PDP11.opSWAB, // 0x00Dn 0003DD 11/20+ 2.3
PDP11.opSWAB, // 0x00En 0003DD 11/20+ 2.3
PDP11.opSWAB // 0x00Fn 0003DD 11/20+ 2.3
];
PDP11.aOps000X_1170 = [
PDP11.opHALT, // 0x0000 000000
PDP11.opWAIT, // 0x0001 000001
PDP11.opRTI, // 0x0002 000002
PDP11.opBPT, // 0x0003 000003
PDP11.opIOT, // 0x0004 000004
PDP11.opRESET, // 0x0005 000005
PDP11.opRTT, // 0x0006 000006
PDP11.aOp000X_1120 = [
PDP11.opHALT, // 0x0000 000000 11/20+ 1.8
PDP11.opWAIT, // 0x0001 000001 11/20+ 1.8
PDP11.opRTI, // 0x0002 000002 11/20+ 4.8
PDP11.opBPT, // 0x0003
PDP11.opIOT, // 0x0004 000004 11/20+ 9.3
PDP11.opRESET, // 0x0005 000005 11/20+ 20ms
PDP11.opUndefined, // 0x0006
PDP11.opUndefined, // 0x0007
PDP11.opUndefined, // 0x0008
PDP11.opUndefined, // 0x0009
@ -2055,106 +2006,296 @@ PDP11.aOps000X_1170 = [
PDP11.opUndefined // 0x000F
];
PDP11.aOps00AX_1170 = [
PDP11.opNOP, // 0x00A0 000240
PDP11.opCLC, // 0x00A1
PDP11.opCLV, // 0x00A2
PDP11.opCLx, // 0x00A3
PDP11.opCLZ, // 0x00A4
PDP11.opCLx, // 0x00A5
PDP11.opCLx, // 0x00A6
PDP11.opCLx, // 0x00A7
PDP11.opCLN, // 0x00A8
PDP11.opCLx, // 0x00A9
PDP11.opCLx, // 0x00AA
PDP11.opCLx, // 0x00AB
PDP11.opCLx, // 0x00AC
PDP11.opCLx, // 0x00AD
PDP11.opCLx, // 0x00AE
PDP11.opCLx // 0x00AF 000257
PDP11.aOp00AX_1120 = [
PDP11.opNOP, // 0x00A0 000240 11/20+ 1.5
PDP11.opCLC, // 0x00A1 000241 11/20+ 1.5
PDP11.opCLV, // 0x00A2 000242 11/20+ 1.5
PDP11.opCLx, // 0x00A3 000243 11/20+ 1.5
PDP11.opCLZ, // 0x00A4 000244 11/20+ 1.5
PDP11.opCLx, // 0x00A5 000245 11/20+ 1.5
PDP11.opCLx, // 0x00A6 000246 11/20+ 1.5
PDP11.opCLx, // 0x00A7 000247 11/20+ 1.5
PDP11.opCLN, // 0x00A8 000250 11/20+ 1.5
PDP11.opCLx, // 0x00A9 000251 11/20+ 1.5
PDP11.opCLx, // 0x00AA 000252 11/20+ 1.5
PDP11.opCLx, // 0x00AB 000253 11/20+ 1.5
PDP11.opCLx, // 0x00AC 000254 11/20+ 1.5
PDP11.opCLx, // 0x00AD 000255 11/20+ 1.5
PDP11.opCLx, // 0x00AE 000256 11/20+ 1.5
PDP11.opCLx // 0x00AF 000257 11/20+ 1.5
];
PDP11.aOps00BX_1170 = [
PDP11.opNOP, // 0x00B0 000260
PDP11.opSEC, // 0x00B1
PDP11.opSEV, // 0x00B2
PDP11.opSEx, // 0x00B3
PDP11.opSEZ, // 0x00B4
PDP11.opSEx, // 0x00B5
PDP11.opSEx, // 0x00B6
PDP11.opSEx, // 0x00B7
PDP11.opSEN, // 0x00B8
PDP11.opSEx, // 0x00B9
PDP11.opSEx, // 0x00BA
PDP11.opSEx, // 0x00BB
PDP11.opSEx, // 0x00BC
PDP11.opSEx, // 0x00BD
PDP11.opSEx, // 0x00BE
PDP11.opSEx // 0x00BF 000277
PDP11.aOp00BX_1120 = [
PDP11.opNOP, // 0x00B0 000260 11/20+ 1.5
PDP11.opSEC, // 0x00B1 000261 11/20+ 1.5
PDP11.opSEV, // 0x00B2 000262 11/20+ 1.5
PDP11.opSEx, // 0x00B3 000263 11/20+ 1.5
PDP11.opSEZ, // 0x00B4 000264 11/20+ 1.5
PDP11.opSEx, // 0x00B5 000265 11/20+ 1.5
PDP11.opSEx, // 0x00B6 000266 11/20+ 1.5
PDP11.opSEx, // 0x00B7 000267 11/20+ 1.5
PDP11.opSEN, // 0x00B8 000270 11/20+ 1.5
PDP11.opSEx, // 0x00B9 000271 11/20+ 1.5
PDP11.opSEx, // 0x00BA 000272 11/20+ 1.5
PDP11.opSEx, // 0x00BB 000273 11/20+ 1.5
PDP11.opSEx, // 0x00BC 000274 11/20+ 1.5
PDP11.opSEx, // 0x00BD 000275 11/20+ 1.5
PDP11.opSEx, // 0x00BE 000276 11/20+ 1.5
PDP11.opSEx // 0x00BF 000277 11/20+ 1.5
];
PDP11.aOps7Xnn_1170 = [
PDP11.opMUL, // 0x70nn
PDP11.opMUL, // 0x71nn
PDP11.opDIV, // 0x72nn
PDP11.opDIV, // 0x73nn
PDP11.opASH, // 0x74nn
PDP11.opASH, // 0x75nn
PDP11.opASHC, // 0x76nn
PDP11.opASHC, // 0x77nn
PDP11.opXOR, // 0x78nn
PDP11.opXOR, // 0x79nn
PDP11.aOp8Xnn_1120 = [
PDP11.opBPL, // 0x80nn 1000XX 11/20+ 2.6**
PDP11.opBMI, // 0x81nn 1004XX 11/20+ 2.6**
PDP11.opBHI, // 0x82nn 1010XX 11/20+ 2.6**
PDP11.opBLOS, // 0x83nn 1014XX 11/20+ 2.6**
PDP11.opBVC, // 0x84nn 1020XX 11/20+ 2.6**
PDP11.opBVS, // 0x85nn 1024XX 11/20+ 2.6**
PDP11.opBCC, // 0x86nn 1030XX 11/20+ 2.6**
PDP11.opBCS, // 0x87nn 1034XX 11/20+ 2.6**
PDP11.opEMT, // 0x88nn 104000-104377 11/20+ 9.3
PDP11.opTRAP, // 0x89nn 104400-104777 11/20+ 9.3
PDP11.op8AXn_1120, // 0x8Ann
PDP11.op8BXn_1120, // 0x8Bnn
PDP11.op8CXn_1120, // 0x8Cnn
PDP11.opUndefined, // 0x8Dnn
PDP11.opUndefined, // 0x8Enn
PDP11.opUndefined // 0x8Fnn
];
PDP11.aOp8AXn_1120 = [
PDP11.opCLRB, // 0x8A0n 1050DD 11/20+ 2.3
PDP11.opCOMB, // 0x8A4n 1051DD 11/20+ 2.3
PDP11.opINCB, // 0x8A8n 1052DD 11/20+ 2.3
PDP11.opDECB // 0x8ACn 1053DD 11/20+ 2.3
];
PDP11.aOp8BXn_1120 = [
PDP11.opNEGB, // 0x8B0n 1054DD 11/20+ 2.3
PDP11.opADCB, // 0x8B4n 1055DD 11/20+ 2.3
PDP11.opSBCB, // 0x8B8n 1056DD 11/20+ 2.3
PDP11.opTSTB // 0x8BCn 1057DD 11/20+ 2.3*
];
PDP11.aOp8CXn_1120 = [
PDP11.opRORB, // 0x8C0n 1060DD 11/20+ 2.3*
PDP11.opROLB, // 0x8C4n 1061DD 11/20+ 2.3*
PDP11.opASRB, // 0x8C8n 1062DD 11/20+ 2.3*
PDP11.opASLB // 0x8CCn 1063DD 11/20+ 2.3*
];
/**
* op1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op1170 = function(opCode)
{
PDP11.aOpXnnn_1170[opCode >> 12].call(this, opCode);
};
/**
* op0Xnn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0Xnn_1170 = function(opCode)
{
PDP11.aOp0Xnn_1170[(opCode >> 8) & 0xf].call(this, opCode);
};
/**
* op0DXn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op0DXn_1170 = function(opCode)
{
PDP11.aOp0DXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
};
/**
* op00Xn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op00Xn_1170 = function(opCode)
{
PDP11.aOp00Xn_1170[(opCode >> 4) & 0xf].call(this, opCode);
};
/**
* op000X_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op000X_1170 = function(opCode)
{
PDP11.aOp000X_1170[opCode & 0xf].call(this, opCode);
};
/**
* op7Xnn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op7Xnn_1170 = function(opCode)
{
PDP11.aOp7Xnn_1170[(opCode >> 8) & 0xf].call(this, opCode);
};
/**
* op8Xnn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8Xnn_1170 = function(opCode)
{
PDP11.aOp8Xnn_1170[(opCode >> 8) & 0xf].call(this, opCode);
};
/**
* op8DXn_1170(opCode)
*
* @this {CPUStatePDP11}
* @param {number} opCode
*/
PDP11.op8DXn_1170 = function(opCode)
{
PDP11.aOp8DXn_1170[(opCode >> 6) & 0x3].call(this, opCode);
};
PDP11.aOpXnnn_1170 = [
PDP11.op0Xnn_1170, // 0x0nnn
PDP11.opMOV, // 0x1nnn 01SSDD 11/20+ 2.3
PDP11.opCMP, // 0x2nnn 02SSDD 11/20+ 2.3*
PDP11.opBIT, // 0x3nnn 03SSDD 11/20+ 2.9*
PDP11.opBIC, // 0x4nnn 04SSDD 11/20+ 2.9
PDP11.opBIS, // 0x5nnn 05SSDD 11/20+ 2.3
PDP11.opADD, // 0x6nnn 06SSDD 11/20+ 2.3
PDP11.op7Xnn_1170, // 0x7nnn
PDP11.op8Xnn_1170, // 0x8nnn
PDP11.opMOVB, // 0x9nnn 11SSDD 11/20+ 2.3
PDP11.opCMPB, // 0xAnnn 12SSDD 11/20+ 2.3
PDP11.opBITB, // 0xBnnn 13SSDD 11/20+ 2.9
PDP11.opBICB, // 0xCnnn 14SSDD 11/20+ 2.9
PDP11.opBISB, // 0xDnnn 15SSDD 11/20+ 2.3
PDP11.opSUB, // 0xEnnn 16SSDD 11/20+ 2.3
PDP11.opUndefined // 0xFnnn
];
PDP11.aOp0Xnn_1170 = [
PDP11.op00Xn_1170, // 0x00nn
PDP11.opBR, // 0x01nn 0004XX 11/20+ 2.6
PDP11.opBNE, // 0x02nn 0010XX 11/20+ 2.6**
PDP11.opBEQ, // 0x03nn 0014XX 11/20+ 2.6**
PDP11.opBGE, // 0x04nn 0020XX 11/20+ 2.6**
PDP11.opBLT, // 0x05nn 0024XX 11/20+ 2.6**
PDP11.opBGT, // 0x06nn 0030XX 11/20+ 2.6**
PDP11.opBLE, // 0x07nn 0034XX 11/20+ 2.6**
PDP11.opJSR, // 0x08nn 004RDD 11/20+ 4.4
PDP11.opJSR, // 0x09nn 004RDD 11/20+ 4.4
PDP11.op0AXn_1120, // 0x0Ann
PDP11.op0BXn_1120, // 0x0Bnn
PDP11.op0CXn_1120, // 0x0Cnn
PDP11.op0DXn_1170, // 0x0Dnn
PDP11.opUndefined, // 0x0Enn
PDP11.opUndefined // 0x0Fnn
];
PDP11.aOp0DXn_1170 = [
PDP11.opMARK, // 0x0D0n 11/45+
PDP11.opMFPI, // 0x0D4n 11/45+
PDP11.opMTPI, // 0x0D8n 11/45+
PDP11.opSXT // 0x0DCn 11/45+
];
PDP11.aOp00Xn_1170 = [
PDP11.op000X_1170, // 0x000n 000000-000017
PDP11.opUndefined, // 0x001n 000020-000037
PDP11.opUndefined, // 0x002n 000040-000057
PDP11.opUndefined, // 0x003n 000060-000077
PDP11.opJMP, // 0x004n 0001DD 11/20+ 1.2
PDP11.opJMP, // 0x005n 0001DD 11/20+ 1.2
PDP11.opJMP, // 0x006n 0001DD 11/20+ 1.2
PDP11.opJMP, // 0x007n 0001DD 11/20+ 1.2
PDP11.opRTS, // 0x008n 00020R 11/20+ 3.5 (opRTS() will also confirm that bit 3 is clear)
PDP11.opSPL, // 0x009n 00023N 11/45+ (opSPL() will also confirm that bit 3 is set)
PDP11.op00AX_1120, // 0x00An 000240-000257
PDP11.op00BX_1120, // 0x00Bn 000260-000277
PDP11.opSWAB, // 0x00Cn 0003DD 11/20+ 2.3
PDP11.opSWAB, // 0x00Dn 0003DD 11/20+ 2.3
PDP11.opSWAB, // 0x00En 0003DD 11/20+ 2.3
PDP11.opSWAB // 0x00Fn 0003DD 11/20+ 2.3
];
PDP11.aOp000X_1170 = [
PDP11.opHALT, // 0x0000 000000 11/20+ 1.8
PDP11.opWAIT, // 0x0001 000001 11/20+ 1.8
PDP11.opRTI, // 0x0002 000002 11/20+ 4.8
PDP11.opBPT, // 0x0003 000003
PDP11.opIOT, // 0x0004 000004 11/20+ 9.3
PDP11.opRESET, // 0x0005 000005 11/20+ 20ms
PDP11.opRTT, // 0x0006 000006 11/45+
PDP11.opUndefined, // 0x0007
PDP11.opUndefined, // 0x0008
PDP11.opUndefined, // 0x0009
PDP11.opUndefined, // 0x000A
PDP11.opUndefined, // 0x000B
PDP11.opUndefined, // 0x000C
PDP11.opUndefined, // 0x000D
PDP11.opUndefined, // 0x000E
PDP11.opUndefined // 0x000F
];
PDP11.aOp7Xnn_1170 = [
PDP11.opMUL, // 0x70nn 11/45+
PDP11.opMUL, // 0x71nn 11/45+
PDP11.opDIV, // 0x72nn 11/45+
PDP11.opDIV, // 0x73nn 11/45+
PDP11.opASH, // 0x74nn 11/45+
PDP11.opASH, // 0x75nn 11/45+
PDP11.opASHC, // 0x76nn 11/45+
PDP11.opASHC, // 0x77nn 11/45+
PDP11.opXOR, // 0x78nn 11/45+
PDP11.opXOR, // 0x79nn 11/45+
PDP11.opUndefined, // 0x7Ann
PDP11.opUndefined, // 0x7Bnn
PDP11.opUndefined, // 0x7Cnn
PDP11.opUndefined, // 0x7Dnn
PDP11.opSOB, // 0x7Enn
PDP11.opSOB // 0x7Fnn
PDP11.opSOB, // 0x7Enn 11/45+
PDP11.opSOB // 0x7Fnn 11/45+
];
PDP11.aOps8Xnn_1170 = [
PDP11.opBPL, // 0x80nn
PDP11.opBMI, // 0x81nn
PDP11.opBHI, // 0x82nn
PDP11.opBLOS, // 0x83nn
PDP11.opBVC, // 0x84nn
PDP11.opBVS, // 0x85nn
PDP11.opBCC, // 0x86nn
PDP11.opBCS, // 0x87nn
PDP11.opEMT, // 0x88nn
PDP11.opTRAP, // 0x89nn
PDP11.op8AXn_1170, // 0x8Ann
PDP11.op8BXn_1170, // 0x8Bnn
PDP11.op8CXn_1170, // 0x8Cnn
PDP11.aOp8Xnn_1170 = [
PDP11.opBPL, // 0x80nn 1000XX 11/20+ 2.6**
PDP11.opBMI, // 0x81nn 1004XX 11/20+ 2.6**
PDP11.opBHI, // 0x82nn 1010XX 11/20+ 2.6**
PDP11.opBLOS, // 0x83nn 1014XX 11/20+ 2.6**
PDP11.opBVC, // 0x84nn 1020XX 11/20+ 2.6**
PDP11.opBVS, // 0x85nn 1024XX 11/20+ 2.6**
PDP11.opBCC, // 0x86nn 1030XX 11/20+ 2.6**
PDP11.opBCS, // 0x87nn 1034XX 11/20+ 2.6**
PDP11.opEMT, // 0x88nn 104000-104377 11/20+ 9.3
PDP11.opTRAP, // 0x89nn 104400-104777 11/20+ 9.3
PDP11.op8AXn_1120, // 0x8Ann
PDP11.op8BXn_1120, // 0x8Bnn
PDP11.op8CXn_1120, // 0x8Cnn
PDP11.op8DXn_1170, // 0x8Dnn
PDP11.opUndefined, // 0x8Enn
PDP11.opUndefined // 0x8Fnn
];
PDP11.aOps8AXn_1170 = [
PDP11.opCLRB, // 0x8A0n
PDP11.opCOMB, // 0x8A4n
PDP11.opINCB, // 0x8A8n
PDP11.opDECB // 0x8ACn
];
PDP11.aOps8BXn_1170 = [
PDP11.opNEGB, // 0x8B0n
PDP11.opADCB, // 0x8B4n
PDP11.opSBCB, // 0x8B8n
PDP11.opTSTB // 0x8BCn
];
PDP11.aOps8CXn_1170 = [
PDP11.opRORB, // 0x8C0n
PDP11.opROLB, // 0x8C4n
PDP11.opASRB, // 0x8C8n
PDP11.opASLB // 0x8CCn
];
PDP11.aOps8DXn_1170 = [
PDP11.aOp8DXn_1170 = [
PDP11.opUndefined, // 0x8D0n
PDP11.opMFPD, // 0x8D4n
PDP11.opMTPD, // 0x8D8n
PDP11.opMFPD, // 0x8D4n 11/45+
PDP11.opMTPD, // 0x8D8n 11/45+
PDP11.opUndefined // 0x8DCn
];