#ifndef AIN48__H #define AIN48__H #include #include enum instruction_format { AMAL, IML, IPL, AMLS, ASSS, ASLI, ASLR, ASRD, }; enum amal_ac : u8 { ADD = 000, STR = 001, MPL = 002, DVD = 004, RSD = 005, DEM = 006, ET = 010, VEL = 011, AUT = 012, NAM = 014, NEC = 015, }; enum asss_ac : u8 { RV = 00, IRRV = 04, NCIVC = 03, NCRV = 02, }; // clang-format off struct instruction { enum instruction_format format; union { struct { bool s, i1, i2; enum amal_ac ac; u4 rf; union { u8 imm; i8 simm; struct { union { u4 r2; u4 imm2; i4 simm2; }; union { u4 r1; u4 imm1; u4 simm1; }; }; } data; } AMAL; struct { u4 r; u48 imm; } IML; struct { bool s; u4 r; union { u12 imm; i12 simm; }; } IPL; struct { bool s; u4 rd; u4 rl; i12 imm; } AMLS; enum asss_ac ASSS_ac; struct { bool I, E, N, U, R; u48 imm; } ASLI; struct { bool I, E, N, U, R; u4 rl; } ASLR; struct { bool I, E, N, U, R; u4 rl; i12 imm; } ASRD; }; }; // clang-format on u12 *ain48_read_instr(u12 *code, struct instruction *i); u12 *ain48_write_instr(u12 *code, struct instruction *i); #endif // AIN48__H