aboutsummaryrefslogtreecommitdiffstats
path: root/src/assembler_eval.py
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-10 17:30:25 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-10 17:30:25 +0300
commit56fd37c60eb0d58ed4762340ddc85b74347bcd71 (patch)
treed4d6362cb591ddb9658536d831f8c4433089189f /src/assembler_eval.py
parent16b4fbd209d71bdb1a066bacd03a9ccd1cf3d16c (diff)
Do stuff
Diffstat (limited to 'src/assembler_eval.py')
-rw-r--r--src/assembler_eval.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/assembler_eval.py b/src/assembler_eval.py
index 7255572..07f22e7 100644
--- a/src/assembler_eval.py
+++ b/src/assembler_eval.py
@@ -5,8 +5,9 @@ constants: dict[str, str] = {
"rb": "2",
"rc": "3",
"rd": "4",
- "rf": "5",
- "rg": "6",
+ "re": "5",
+ "rf": "6",
+ "rg": "7",
# ALU instructions
"al_plus": "0",
"al_minus": "1",
@@ -25,6 +26,10 @@ constants: dict[str, str] = {
labels: dict[str, int] = {}
+def check_size(bits: int, val: int) -> None:
+ if val >= 2 ** bits:
+ raise Exception(f"Value does not fit in {bits} bits: {val}")
+
def eval_symbol(c: str) -> str:
if c in labels:
return str(labels[c])
@@ -34,6 +39,8 @@ def eval_symbol(c: str) -> str:
return c
-def eval_expr(expr: str) -> int:
+def eval_expr(expr: str, bits: int = 16) -> int:
expr = eval_symbol(expr)
- return eval(expr, labels.copy()) # eval as Python expr
+ ret = eval(expr, labels.copy()) # eval as Python expr
+ check_size(bits, ret)
+ return ret