github.com/jflude/taocp@v0.0.0-20240210234939-99f2a91af3c2/mixal/opcodes.go (about)

     1  package mixal
     2  
     3  import "github.com/jflude/taocp/mix"
     4  
     5  // The opcodes for the MIX 1009 computer (see Table 1, Section 1.3.1)
     6  var opcodes = map[string]struct {
     7  	c, f int // C-value and default F-value
     8  }{
     9  	"NOP":  {mix.NOP, 5},
    10  	"ADD":  {mix.ADD, 5},
    11  	"FADD": {mix.ADD, 6},
    12  	"SUB":  {mix.SUB, 5},
    13  	"FSUB": {mix.SUB, 6},
    14  	"MUL":  {mix.MUL, 5},
    15  	"FMUL": {mix.MUL, 6},
    16  	"DIV":  {mix.DIV, 5},
    17  	"FDIV": {mix.DIV, 6},
    18  	"NUM":  {mix.NUM, 0},
    19  	"CHAR": {mix.NUM, 1},
    20  	"HLT":  {mix.NUM, 2},
    21  	"AND":  {mix.NUM, 3},
    22  	"OR":   {mix.NUM, 4},
    23  	"XOR":  {mix.NUM, 5},
    24  	"FLOT": {mix.NUM, 6},
    25  	"FIX":  {mix.NUM, 7},
    26  	"INT":  {mix.NUM, 9},
    27  	"SLA":  {mix.SLA, 0},
    28  	"SRA":  {mix.SLA, 1},
    29  	"SLAX": {mix.SLA, 2},
    30  	"SRAX": {mix.SLA, 3},
    31  	"SLC":  {mix.SLA, 4},
    32  	"SRC":  {mix.SLA, 5},
    33  	"SLB":  {mix.SLA, 6},
    34  	"SRB":  {mix.SLA, 7},
    35  	"MOVE": {mix.MOVE, 0},
    36  	"LDA":  {mix.LDA, 5},
    37  	"LD1":  {mix.LD1, 5},
    38  	"LD2":  {mix.LD2, 5},
    39  	"LD3":  {mix.LD3, 5},
    40  	"LD4":  {mix.LD4, 5},
    41  	"LD5":  {mix.LD5, 5},
    42  	"LD6":  {mix.LD6, 5},
    43  	"LDX":  {mix.LDX, 5},
    44  	"LDAN": {mix.LDAN, 5},
    45  	"LD1N": {mix.LD1N, 5},
    46  	"LD2N": {mix.LD2N, 5},
    47  	"LD3N": {mix.LD3N, 5},
    48  	"LD4N": {mix.LD4N, 5},
    49  	"LD5N": {mix.LD5N, 5},
    50  	"LD6N": {mix.LD6N, 5},
    51  	"LDXN": {mix.LDXN, 5},
    52  	"STA":  {mix.STA, 5},
    53  	"ST1":  {mix.ST1, 5},
    54  	"ST2":  {mix.ST2, 5},
    55  	"ST3":  {mix.ST3, 5},
    56  	"ST4":  {mix.ST4, 5},
    57  	"ST5":  {mix.ST5, 5},
    58  	"ST6":  {mix.ST6, 5},
    59  	"STX":  {mix.STX, 5},
    60  	"STJ":  {mix.STJ, 2},
    61  	"STZ":  {mix.STZ, 5},
    62  	"JBUS": {mix.JBUS, 0},
    63  	"IOC":  {mix.IOC, 0},
    64  	"IN":   {mix.IN, 0},
    65  	"OUT":  {mix.OUT, 0},
    66  	"JRED": {mix.JRED, 0},
    67  	"JMP":  {mix.JMP, 0},
    68  	"JSJ":  {mix.JMP, 1},
    69  	"JOV":  {mix.JMP, 2},
    70  	"JNOV": {mix.JMP, 3},
    71  	"JL":   {mix.JMP, 4},
    72  	"JE":   {mix.JMP, 5},
    73  	"JG":   {mix.JMP, 6},
    74  	"JGE":  {mix.JMP, 7},
    75  	"JNE":  {mix.JMP, 8},
    76  	"JLE":  {mix.JMP, 9},
    77  	"JAN":  {mix.JA, 0},
    78  	"JAZ":  {mix.JA, 1},
    79  	"JAP":  {mix.JA, 2},
    80  	"JANN": {mix.JA, 3},
    81  	"JANZ": {mix.JA, 4},
    82  	"JANP": {mix.JA, 5},
    83  	"JAE":  {mix.JA, 6},
    84  	"JAO":  {mix.JA, 7},
    85  	"J1N":  {mix.J1, 0},
    86  	"J1Z":  {mix.J1, 1},
    87  	"J1P":  {mix.J1, 2},
    88  	"J1NN": {mix.J1, 3},
    89  	"J1NZ": {mix.J1, 4},
    90  	"J1NP": {mix.J1, 5},
    91  	"J2N":  {mix.J2, 0},
    92  	"J2Z":  {mix.J2, 1},
    93  	"J2P":  {mix.J2, 2},
    94  	"J2NN": {mix.J2, 3},
    95  	"J2NZ": {mix.J2, 4},
    96  	"J2NP": {mix.J2, 5},
    97  	"J3N":  {mix.J3, 0},
    98  	"J3Z":  {mix.J3, 1},
    99  	"J3P":  {mix.J3, 2},
   100  	"J3NN": {mix.J3, 3},
   101  	"J3NZ": {mix.J3, 4},
   102  	"J3NP": {mix.J3, 5},
   103  	"J4N":  {mix.J4, 0},
   104  	"J4Z":  {mix.J4, 1},
   105  	"J4P":  {mix.J4, 2},
   106  	"J4NN": {mix.J4, 3},
   107  	"J4NZ": {mix.J4, 4},
   108  	"J4NP": {mix.J4, 5},
   109  	"J5N":  {mix.J5, 0},
   110  	"J5Z":  {mix.J5, 1},
   111  	"J5P":  {mix.J5, 2},
   112  	"J5NN": {mix.J5, 3},
   113  	"J5NZ": {mix.J5, 4},
   114  	"J5NP": {mix.J5, 5},
   115  	"J6N":  {mix.J6, 0},
   116  	"J6Z":  {mix.J6, 1},
   117  	"J6P":  {mix.J6, 2},
   118  	"J6NN": {mix.J6, 3},
   119  	"J6NZ": {mix.J6, 4},
   120  	"J6NP": {mix.J6, 5},
   121  	"JXN":  {mix.JX, 0},
   122  	"JXZ":  {mix.JX, 1},
   123  	"JXP":  {mix.JX, 2},
   124  	"JXNN": {mix.JX, 3},
   125  	"JXNZ": {mix.JX, 4},
   126  	"JXNP": {mix.JX, 5},
   127  	"JXE":  {mix.JX, 6},
   128  	"JXO":  {mix.JX, 7},
   129  	"INCA": {mix.INCA, 0},
   130  	"DECA": {mix.INCA, 1},
   131  	"ENTA": {mix.INCA, 2},
   132  	"ENNA": {mix.INCA, 3},
   133  	"INC1": {mix.INC1, 0},
   134  	"DEC1": {mix.INC1, 1},
   135  	"ENT1": {mix.INC1, 2},
   136  	"ENN1": {mix.INC1, 3},
   137  	"INC2": {mix.INC2, 0},
   138  	"DEC2": {mix.INC2, 1},
   139  	"ENT2": {mix.INC2, 2},
   140  	"ENN2": {mix.INC2, 3},
   141  	"INC3": {mix.INC3, 0},
   142  	"DEC3": {mix.INC3, 1},
   143  	"ENT3": {mix.INC3, 2},
   144  	"ENN3": {mix.INC3, 3},
   145  	"INC4": {mix.INC4, 0},
   146  	"DEC4": {mix.INC4, 1},
   147  	"ENT4": {mix.INC4, 2},
   148  	"ENN4": {mix.INC4, 3},
   149  	"INC5": {mix.INC5, 0},
   150  	"DEC5": {mix.INC5, 1},
   151  	"ENT5": {mix.INC5, 2},
   152  	"ENN5": {mix.INC5, 3},
   153  	"INC6": {mix.INC6, 0},
   154  	"DEC6": {mix.INC6, 1},
   155  	"ENT6": {mix.INC6, 2},
   156  	"ENN6": {mix.INC6, 3},
   157  	"INCX": {mix.INCX, 0},
   158  	"DECX": {mix.INCX, 1},
   159  	"ENTX": {mix.INCX, 2},
   160  	"ENNX": {mix.INCX, 3},
   161  	"CMPA": {mix.CMPA, 5},
   162  	"FCMP": {mix.CMPA, 6},
   163  	"CMP1": {mix.CMP1, 5},
   164  	"CMP2": {mix.CMP2, 5},
   165  	"CMP3": {mix.CMP3, 5},
   166  	"CMP4": {mix.CMP4, 5},
   167  	"CMP5": {mix.CMP5, 5},
   168  	"CMP6": {mix.CMP6, 5},
   169  	"CMPX": {mix.CMPX, 5},
   170  }