-
Notifications
You must be signed in to change notification settings - Fork 0
/
symbols.go
120 lines (104 loc) · 2.88 KB
/
symbols.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package main
type SymType int
const (
SI SymType = iota
MRI
LABEL
)
type Symbol struct {
Type SymType
Val int
}
type SymbolTable map[string]Symbol
func (st *SymbolTable) Get(symbol string) *Symbol {
if sym, exists := (*st)[symbol]; exists {
// fmt.Printf("Found symbol: %v\n", sym)
return &sym
}
// fmt.Println("Symbol not found:", symbol)
return nil
}
func (st *SymbolTable) Set(symbol string, val int) (redef bool) {
if _, exists := (*st)[symbol]; exists {
// fmt.Printf("Redefined existing symbol: %s = %o\n", symbol, val)
redef = true
} else {
// fmt.Printf("Defined new symbol: %s = %o\n", symbol, val)
redef = false
}
(*st)[symbol] = Symbol{SI, val}
return
}
func (st *SymbolTable) Label(symbol string, val int) (redef bool) {
if _, exists := (*st)[symbol]; exists {
// fmt.Printf("Redefined existing label: %s = %o\n", symbol, val)
redef = true
} else {
// fmt.Printf("Defined new symbol: %s = %o\n", symbol, val)
redef = false
}
(*st)[symbol] = Symbol{LABEL, val}
return
}
var default_symbols SymbolTable = SymbolTable{
// Entry Vectors
"vINT": Symbol{LABEL, 0o0},
"vAUTO": Symbol{LABEL, 0o10},
"vRESET": Symbol{LABEL, 0o200},
// Memory reference instructions
"AND": Symbol{MRI, 0},
"TAD": Symbol{MRI, 0o1000},
"ISZ": Symbol{MRI, 0o2000},
"DCA": Symbol{MRI, 0o3000},
"JMS": Symbol{MRI, 0o4000},
"JMP": Symbol{MRI, 0o5000},
// Group 1 operate instructions
"NOP": Symbol{SI, 0o7000},
"IAC": Symbol{SI, 0o7001},
"RAL": Symbol{SI, 0o7004},
"RTL": Symbol{SI, 0o7006},
"RAR": Symbol{SI, 0o7010},
"RTR": Symbol{SI, 0o7012},
"CML": Symbol{SI, 0o7020},
"CMA": Symbol{SI, 0o7040},
"CIA": Symbol{SI, 0o7041},
"CLL": Symbol{SI, 0o7100},
"STL": Symbol{SI, 0o7120},
"CLA": Symbol{SI, 0o7200}, // This does the same thing as 0o7600 - pick your favorite
"GLK": Symbol{SI, 0o7204},
"STA": Symbol{SI, 0o7240},
// Group 2 operate instructions
"HLT": Symbol{SI, 0o7402},
"OSR": Symbol{SI, 0o7404},
"SKP": Symbol{SI, 0o7410},
"SNL": Symbol{SI, 0o7420},
"SZL": Symbol{SI, 0o7430},
"SZA": Symbol{SI, 0o7440},
"SNA": Symbol{SI, 0o7450},
"SMA": Symbol{SI, 0o7500},
"SPA": Symbol{SI, 0o7510},
// "CLA": Symbol{SI, 0o7600}, // This does the same thing as 0o7200 - pick your favorite
"LAS": Symbol{SI, 0o7604},
// IOT - Program Interrupt
"ION": Symbol{SI, 0o6001},
"IOF": Symbol{SI, 0o6002},
// IOT - High Speed Perforated Tape Reader
"RSF": Symbol{SI, 0o6011},
"RRB": Symbol{SI, 0o6012},
"RFC": Symbol{SI, 0o6014},
// IOT - High Speed Perforated Tape Punch
"PSF": Symbol{SI, 0o6021},
"PCF": Symbol{SI, 0o6022},
"PPC": Symbol{SI, 0o6024},
"PLS": Symbol{SI, 0o6026},
// IOT - Teletype Keyboard/Reader
"KSF": Symbol{SI, 0o6031},
"KCC": Symbol{SI, 0o6032},
"KRS": Symbol{SI, 0o6034},
"KRB": Symbol{SI, 0o6036},
// IOT - Teletype Teleprinter/Punch
"TSF": Symbol{SI, 0o6041},
"TCF": Symbol{SI, 0o6042},
"TPC": Symbol{SI, 0o6044},
"TLS": Symbol{SI, 0o6046},
}