89 lines
1.5 KiB
C
89 lines
1.5 KiB
C
#ifndef TABLES
|
|
#define TABLES
|
|
|
|
typedef struct {
|
|
const char** table;
|
|
const int size;
|
|
const int instsize;
|
|
} TABLE;
|
|
|
|
const char* cmptablestrs[] = {
|
|
"0", "0101010",
|
|
"1", "0111111",
|
|
"-1", "0111010",
|
|
"D", "0001100",
|
|
"A", "0110000",
|
|
"!D", "0001101",
|
|
"!A", "0110001",
|
|
"-D", "0001111",
|
|
"-A", "0110011",
|
|
"D+1", "0011111",
|
|
"1+D", "0011111",
|
|
"A+1", "0110111",
|
|
"1+A", "0110111",
|
|
"D-1", "0001110",
|
|
"A-1", "0110010",
|
|
"D+A", "0000010",
|
|
"A+D", "0000010",
|
|
"D-A", "0010011",
|
|
"A-D", "0000111",
|
|
"D&A", "0000000",
|
|
"A&D", "0000000",
|
|
"D|A", "0010101",
|
|
"A|D", "0010101",
|
|
"M", "1110000",
|
|
"!M", "1110001",
|
|
"-M", "1110011",
|
|
"M+1", "1110111",
|
|
"1+M", "1110111",
|
|
"M-1", "1110010",
|
|
"D+M", "1000010",
|
|
"M+D", "1000010",
|
|
"D-M", "1010011",
|
|
"M-D", "1000111",
|
|
"D&M", "1000000",
|
|
"M&D", "1000000",
|
|
"D|M", "1010101",
|
|
"M|D", "1010101"
|
|
};
|
|
TABLE cmptable =
|
|
{
|
|
.table = cmptablestrs,
|
|
.size = sizeof(cmptablestrs) / sizeof(char*) / 2,
|
|
.instsize = 8 * sizeof(char)
|
|
};
|
|
|
|
const char* desttablestrs[] = {
|
|
"M", "001",
|
|
"D", "010",
|
|
"MD", "011",
|
|
"A", "100",
|
|
"AM", "101",
|
|
"AD", "110",
|
|
"AMD", "111"
|
|
};
|
|
TABLE desttable =
|
|
{
|
|
.table = desttablestrs,
|
|
.size = sizeof(desttablestrs) / sizeof(char*) / 2,
|
|
.instsize = 4 * sizeof(char)
|
|
};
|
|
|
|
const char* jmptablestrs[] = {
|
|
"JGT", "001",
|
|
"JEQ", "010",
|
|
"JGE", "011",
|
|
"JLT", "100",
|
|
"JNE", "101",
|
|
"JLE", "110",
|
|
"JMP", "111"
|
|
};
|
|
TABLE jmptable =
|
|
{
|
|
.table = jmptablestrs,
|
|
.size = sizeof(jmptablestrs) / sizeof(char*) / 2,
|
|
.instsize = 4 * sizeof(char)
|
|
};
|
|
|
|
#endif
|