My Project
lc3.h
Go to the documentation of this file.
1 #ifndef __LC3_H__
2 #define __LC3_H__
3 
4 /*
5  * "Copyright (c) 2012 by Fritz Sieker."
6  * based on ideas/code by Steven S. Lumetta
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation for any purpose, without fee, and without written
10  * agreement is hereby granted, provided that the above copyright notice
11  * and the following two paragraphs appear in all copies of this software.
12  *
13  * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
14  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
15  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHOR
16  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17  *
18  * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20  * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
21  * BASIS, AND THE AUTHOR NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
22  * UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
23  */
24 
34 #include <stdio.h>
35 
37 #ifndef LC3_VAR
38 #define LC3_VAR extern
39 #endif
40 
41 #include "symbol.h"
42 
44 char* strdup(const char *);
45 
47 #define LC3_WORD unsigned short
48 
50 #define LC3_MEM_SIZE 65536
51 
53 #define LC3_NUM_REGS 8
54 
56 #define RETURN_ADDR_REG 7
57 
60 
63 
68 typedef enum opcode {
69  OP_INVALID = -1,
103 } opcode_t;
104 
112 typedef enum operand {
113  FMT_R1 = 0x001,
114  FMT_R2 = 0x002,
115  FMT_R3 = 0x004,
116  FMT_CC = 0x008,
117  FMT_IMM5 = 0x010,
118  FMT_IMM6 = 0x020,
119  FMT_VEC8 = 0x040,
120  FMT_ASC8 = 0x080,
121  FMT_IMM9 = 0x100,
122  FMT_IMM11 = 0x200,
123  FMT_IMM16 = 0x400,
124  FMT_STR = 0x800
125 } operand_t;
126 
133 typedef enum operands {
134  FMT_ = 0,
135  FMT_RRR = (FMT_R1 | FMT_R2 | FMT_R3),
136  FMT_RRI5 = (FMT_R1 | FMT_R2 | FMT_IMM5),
137  FMT_CL = (FMT_CC | FMT_IMM9),
138  FMT_R = FMT_R2,
139  FMT_I11 = FMT_IMM11,
140  FMT_RL = (FMT_R1 | FMT_IMM9),
141  FMT_RRI6 = (FMT_R1 | FMT_R2 | FMT_IMM6),
142  FMT_RR = (FMT_R1 | FMT_R2),
143  FMT_V = FMT_VEC8,
144  FMT_A = FMT_ASC8,
145  FMT_16 = FMT_IMM16
146 } operands_t;
147 
151 typedef struct inst_format {
152  char* name;
154  int prototype;
155 } inst_format_t;
156 
161 typedef struct LC3_inst {
162  int formBit;
165 } LC3_inst_t;
166 
174 
179 int lc3_read_LC3_word (FILE *f);
180 
185 void lc3_write_LC3_word (FILE* f, int val);
186 
187 #endif /* __LC3_H__ */
188 
Definition: lc3.h:119
Definition: lc3.h:80
Definition: lc3.h:88
Definition: lc3.h:69
int formBit
Definition: lc3.h:162
LC3_VAR int inHex
Definition: lc3.h:59
Definition: lc3.h:92
#define LC3_VAR
Definition: lc3.h:38
Definition: lc3.h:95
Defines the interface to symbol.c functions (do not modify)
Definition: lc3.h:98
Definition: lc3.h:151
Definition: lc3.h:101
Definition: lc3.h:118
Definition: lc3.h:120
Definition: lc3.h:121
Definition: lc3.h:74
Definition: lc3.h:78
Definition: lc3.h:72
enum operand operand_t
Definition: lc3.h:102
Definition: lc3.h:124
Definition: lc3.h:96
struct inst_format inst_format_t
Definition: lc3.h:122
Definition: lc3.h:76
LC3_inst_t * lc3_get_inst_info(opcode_t opcode)
opcode
Definition: lc3.h:68
Definition: lc3.h:117
Definition: lc3.h:116
operand
Definition: lc3.h:112
Definition: lc3.h:161
Definition: lc3.h:100
Definition: lc3.h:114
enum opcode opcode_t
struct LC3_inst LC3_inst_t
Definition: lc3.h:71
LC3_VAR sym_table_t * lc3_sym_tab
Definition: lc3.h:62
Definition: lc3.h:81
struct sym_table sym_table_t
Definition: symbol.h:43
Definition: lc3.h:97
char * strdup(const char *)
Definition: lc3.h:89
Definition: lc3.h:85
inst_format_t forms[2]
Definition: lc3.h:164
operands_t operands
Definition: lc3.h:153
char * name
Definition: lc3.h:152
Definition: lc3.h:99
Definition: lc3.h:77
Definition: lc3.h:73
Definition: lc3.h:70
enum operands operands_t
Definition: lc3.h:84
Definition: lc3.h:123
Definition: lc3.h:90
int prototype
Definition: lc3.h:154
Definition: lc3.h:75
Definition: lc3.h:87
Definition: lc3.h:86
Definition: lc3.h:94
void lc3_write_LC3_word(FILE *f, int val)
Definition: lc3.h:113
int lc3_read_LC3_word(FILE *f)
Definition: lc3.h:82
operands
Definition: lc3.h:133
Definition: lc3.h:93
Definition: lc3.h:115
Definition: lc3.h:83
Definition: lc3.h:79