/***************************************************************************** * Change Log * Date | Change *-----------+----------------------------------------------------------------- * 17-Nov-85 | [1.87] Created * 26-Nov-85 | [1.150] Added printable opcode decode * 29-Jan-86 | [1.176] ZA is opcode 58, not 48! (?, not +) * 10-Nov-91 | [1.428] converted to ANSI for Microsoft C 6.0 *****************************************************************************/ extern int inst_illegal(void); extern int inst_A(void); extern int inst_B(void); extern int inst_BBE(void); extern int inst_BWZ(void); extern int inst_C(void); extern int inst_CC(void); extern int inst_CS(void); extern int inst_CU(void); extern int inst_CW(void); extern int inst_H(void); extern int inst_MA(void); extern int inst_MCE(void); extern int inst_MCS(void); extern int inst_MLC(void); extern int inst_MLCWA(void); extern int inst_MLNS(void); extern int inst_MLZS(void); extern int inst_MRCM(void); extern int inst_NOP(void); extern int inst_P(void); extern int inst_R(void); extern int inst_RP(void); extern int inst_S(void); extern int inst_SAR(void); extern int inst_SBR(void); extern int inst_SPF(void); extern int inst_SRF(void); extern int inst_SS(void); extern int inst_SW(void); extern int inst_W(void); extern int inst_WP(void); extern int inst_WR(void); extern int inst_WRP(void); extern int inst_ZA(void); extern int inst_ZS(void); int (*instructions[64])(void) = { inst_illegal, /* 0 - sp illegal */ inst_R, /* 1 - 1 read card */ inst_W, /* 2 - 2 write printer */ inst_WR, /* 3 - 3 read & write */ inst_P, /* 4 - 4 punch */ inst_RP, /* 5 - 5 read & punch */ inst_WP, /* 6 - 6 write & punch */ inst_WRP, /* 7 - 7 wr, rd & pnch */ inst_SRF, /* 8 - 8 start read feed */ inst_SPF, /* 9 - 9 start punch feed */ inst_illegal, /* 10 - 0 illegal */ inst_MA, /* 11 - #= modify address */ inst_illegal, /* 12 - @' multiply (NYI) */ inst_illegal, /* 13 - : illegal */ inst_illegal, /* 14 - > illegal */ inst_illegal, /* 15 - û illegal */ inst_illegal, /* 16 - b illegal */ inst_CS, /* 17 - / clear storage */ inst_S, /* 18 - S subtract */ inst_illegal, /* 19 - T translate (NYI) */ inst_CU, /* 20 - U control unit */ inst_BWZ, /* 21 - V br. word or zone */ inst_BBE, /* 22 - W br. bit equal */ inst_illegal, /* 23 - X MIZ (NYI) */ inst_MLZS, /* 24 - Y move zones */ inst_MCS, /* 25 - Z move & supp. 0s */ inst_illegal, /* 26 - Ø illegal */ inst_SW, /* 27 - , set word mark */ inst_illegal, /* 28 - %( divide (NYI) */ inst_illegal, /* 29 - ^ illegal */ inst_illegal, /* 30 - \ illegal */ inst_illegal, /* 31 - × illegal */ inst_illegal, /* 32 - - illegal */ inst_illegal, /* 33 - J illegal */ inst_SS, /* 34 - K select stacker */ inst_MLCWA, /* 35 - L move left wm A */ inst_MLC, /* 36 - M move left wm A|B */ inst_NOP, /* 37 - N no op */ inst_illegal, /* 38 - O scan (NYI) */ inst_MRCM, /* 39 - P move right rm */ inst_SAR, /* 40 - Q store A reg */ inst_illegal, /* 41 - R illegal */ inst_ZS, /* 42 - ! zero & subtract */ inst_illegal, /* 43 - * illegal */ inst_illegal, /* 44 - illegal */ inst_illegal, /* 45 - ] illegal */ inst_illegal, /* 46 - ; illegal */ inst_illegal, /* 47 -  illegal */ inst_illegal, /* 48 - &+ illegal */ inst_A, /* 49 - A add */ inst_B, /* 50 - B assorted branches*/ inst_C, /* 51 - C compare */ inst_MLNS, /* 52 - D move numerics */ inst_MCE, /* 53 - E edit */ inst_CC, /* 54 - F carriage control */ inst_illegal, /* 55 - G illegal */ inst_SBR, /* 56 - H store B register */ inst_illegal, /* 57 - I illegal */ inst_ZA, /* 58 - ? zero and add */ inst_H, /* 59 - . halt */ inst_CW, /* 60 - ) clear word mark */ inst_illegal, /* 61 - [ illegal */ inst_illegal, /* 62 - < illegal */ inst_illegal /* 63 - Î illegal */ }; char * opcodes[64] = { "?", /* 0 - sp illegal */ "R", /* 1 - 1 read card */ "W", /* 2 - 2 write printer */ "WR", /* 3 - 3 read & write */ "P", /* 4 - 4 punch */ "RP", /* 5 - 5 read & punch */ "WP", /* 6 - 6 write & punch */ "WRP", /* 7 - 7 wr, rd & pnch */ "SRF", /* 8 - 8 start read feed */ "SPF", /* 9 - 9 start punch feed */ "?", /* 10 - 0 illegal */ "MA", /* 11 - #= modify address */ "?", /* 12 - @' multiply (NYI) */ "?", /* 13 - : illegal */ "?", /* 14 - > illegal */ "?", /* 15 - û illegal */ "?", /* 16 - b illegal */ "CS", /* 17 - / clear storage */ "S", /* 18 - S subtract */ "?", /* 19 - T translate (NYI) */ "CU", /* 20 - U control unit */ "BWZ", /* 21 - V br. word or zone */ "BBE", /* 22 - W br. bit equal */ "?", /* 23 - X MIZ (NYI) */ "MLZS", /* 24 - Y move zones */ "MCS", /* 25 - Z move & supp. 0s */ "?", /* 26 - Ø illegal */ "SW", /* 27 - , set word mark */ "?", /* 28 - %( divide (NYI) */ "?", /* 29 - ^ illegal */ "?", /* 30 - \ illegal */ "?", /* 31 - × illegal */ "?", /* 32 - - illegal */ "?", /* 33 - J illegal */ "SS", /* 34 - K select stacker */ "MLCWA",/* 35 - L move left wm A */ "MLC", /* 36 - M move left wm A|B */ "NOP", /* 37 - N no op */ "?", /* 38 - O scan (NYI) */ "MRCM", /* 39 - P move right rm */ "SAR", /* 40 - Q store A reg */ "?", /* 41 - R illegal */ "ZS", /* 42 - ! zero & subtract */ "?", /* 43 - * illegal */ "?", /* 44 - illegal */ "?", /* 45 - ] illegal */ "?", /* 46 - ; illegal */ "?", /* 47 -  illegal */ "ZA", /* 48 - &+ zero & add */ "A", /* 49 - A add */ "B", /* 50 - B assorted branches*/ "C", /* 51 - C compare */ "MLNS", /* 52 - D move numerics */ "MCE", /* 53 - E edit */ "CC", /* 54 - F carriage control */ "?", /* 55 - G illegal */ "SBR", /* 56 - H store B register */ "?", /* 57 - I illegal */ "?", /* 58 - ? illegal */ "H", /* 59 - . halt */ "CW", /* 60 - ) clear word mark */ "?", /* 61 - [ illegal */ "?", /* 62 - < illegal */ "?" /* 63 - Î illegal */ };