hack-assembler/tables.h

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