diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-11 14:05:41 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-11 14:05:41 +0300 |
| commit | da14e7ca7f31cb4b9a975dbe349fb4d385592b9c (patch) | |
| tree | ea60a83ccb64af33a48f13839e6145b7c97236d2 /src/assembler_ops.py | |
| parent | 9a6001ad380e83a545188b58145387593b117b48 (diff) | |
Fix bugs
Diffstat (limited to 'src/assembler_ops.py')
| -rw-r--r-- | src/assembler_ops.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/assembler_ops.py b/src/assembler_ops.py index e4eeac4..b55927b 100644 --- a/src/assembler_ops.py +++ b/src/assembler_ops.py @@ -4,8 +4,8 @@ from dataclasses import dataclass @dataclass class Options: - stack_pointer = "rg" - csr_scratch = "rf" + stack_pointer = "rf" + csr_scratch = "rh" @dataclass class Meta: @@ -37,7 +37,7 @@ def make_ali(meta: Meta, labels: Labels, alu_op: str, left: str, imm: str, targe alu_op_e return word -def make_ldr(meta: Meta, labels: Labels, to_reg: str, addr_reg: str) -> int: +def make_ldr(meta: Meta, labels: Labels, addr_reg: str, to_reg: str) -> int: """LDR 0010 TTTR RRXX XXXX""" to_reg_e = eval_expr(labels, to_reg, bits=3) addr_reg_e = eval_expr(labels, addr_reg, bits=3) @@ -47,15 +47,15 @@ def make_ldr(meta: Meta, labels: Labels, to_reg: str, addr_reg: str) -> int: return word def make_str(meta: Meta, labels: Labels, from_reg: str, addr_reg: str) -> int: - """STR 0011 TTTR RRXX XXXX""" + """STR 0011 XXXL LLRR RXXX""" from_reg_e = eval_expr(labels, from_reg, bits=3) addr_reg_e = eval_expr(labels, addr_reg, bits=3) word = (0b0011 << 12) + \ - (from_reg_e << 9) + \ - (addr_reg_e << 6) + (addr_reg_e << 6) + \ + (from_reg_e << 3) return word -def make_ldi(meta: Meta, labels: Labels, to_reg: str, imm: str) -> int: +def make_ldi(meta: Meta, labels: Labels, imm: str, to_reg: str) -> int: """LDI 0100 TTTI IIII IIII""" to_reg_e = eval_expr(labels, to_reg, bits=3) imm_e = eval_expr(labels, imm, bits=9) @@ -75,6 +75,7 @@ def make_jpi(meta: Meta, labels: Labels, imm: str) -> int: """JPI 0110 XXXI IIII IIII""" imm_e = eval_expr(labels, imm, bits=9) imm_e = imm_e - meta.address - 1 + imm_e = imm_e & (0b111111111) word = (0b0110 << 12) + \ imm_e return word @@ -93,6 +94,7 @@ def make_bri(meta: Meta, labels: Labels, flag_s: str, imm: str) -> int: flag_s_e = eval_expr(labels, flag_s, bits=2) imm_e = eval_expr(labels, imm, bits=9) imm_e = imm_e - meta.address - 1 + imm_e = imm_e & (0b111111111) word = (0b1000 << 12) + \ (flag_s_e << 9) + \ imm_e |
