68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
#ifndef AIN48__H
|
|
#define AIN48__H
|
|
|
|
#include <assert.h>
|
|
#include <common.h>
|
|
|
|
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
|