diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-09 18:26:25 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-09 18:28:28 +0300 |
| commit | 5b6637fb92c54b8f367ec8751f53f6f238d8dbed (patch) | |
| tree | 11f1e11690504606db9879b7d282f5955f1ea225 /src/ucode.py | |
| parent | 5ab9865fa6ed343ae0cffefb81b20af2e533e36f (diff) | |
Remake ALU
Diffstat (limited to 'src/ucode.py')
| -rwxr-xr-x | src/ucode.py | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/src/ucode.py b/src/ucode.py index 9d7c55c..3c34a71 100755 --- a/src/ucode.py +++ b/src/ucode.py @@ -20,23 +20,23 @@ MEM_IE = 0b0000_0000_0001_0000 MEM_OE = 0b0000_0000_0010_0000 RW_IE = 0b0000_0000_0100_0000 R1_OE = 0b0000_0000_1000_0000 -R2_OE = 0b0000_0001_0000_0000 +R2_OE = 0b0000_0001_0000_0000 # needed? IR_IE = 0b0000_0010_0000_0000 -L9_OE = 0b0000_0100_0000_0000 -unused1 = 0b0000_1000_0000_0000 +unused = 0b0000_0100_0000_0000 +LI_OE = 0b0000_1000_0000_0000 ALU_OE = 0b0001_0000_0000_0000 FR_IE = 0b0010_0000_0000_0000 HALT = 0b0100_0000_0000_0000 US_RS = 0b1000_0000_0000_0000 BRANCH_FLAG_STATES_N = 2 -UCODE_N = 2**3 +UCODE_N: int = 2**3 CONTROL_WORD_SIZE = 2 -def not_branch(bs): +def not_branch(bs: list[int]) -> list[list[int]]: return BRANCH_FLAG_STATES_N * [bs] -def branch(false_branch, true_branch): +def branch(false_branch: list[int], true_branch: list[int]) -> list[list[int]]: return [false_branch, true_branch] fetch = [PC_OE|MAR_IE, MEM_OE|IR_IE|PC_CO] @@ -45,25 +45,26 @@ def nop(): return not_branch([*fetch, US_RS, 0, 0, 0, 0, 0]) ucode = [ - # ALU 0000 LLLR RRSS STTT + # ALR 0000 TTTL LLRR RSSS not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]), - # ALS 0001 LLLR RRSS STTT + # ALI 0001 TTTL LLII ISSS not_branch([*fetch, ALU_OE|FR_IE|RW_IE, US_RS, 0, 0, 0, 0]), - # LDR 0010 RRRX XXXX XTTT + # LDR 0010 TTTR RRXX XXXX not_branch([*fetch, R1_OE|MAR_IE, MEM_OE|RW_IE, US_RS, 0, 0, 0]), - # STR 0011 RRRT TTXX XXXX - not_branch([*fetch, R1_OE|MAR_IE, R2_OE|MEM_IE, US_RS, 0, 0, 0]), - # LDI 0100 IIII IIII ITTT - not_branch([*fetch, H9_OE|RW_IE, US_RS, 0, 0, 0, 0]), - # JMP 0101 RRRX XXXX XXXX + # STR 0011 TTTR RRXX XXXX + not_branch([*fetch, R1_OE|MAR_IE, R1_OE|MEM_IE, US_RS, 0, 0, 0]), + # LDI 0100 TTTI IIII IIII + not_branch([*fetch, LI_OE|RW_IE, US_RS, 0, 0, 0, 0]), + # JPR 0101 XXXR RRXX XXXX not_branch([*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]), - # BR 0110 XFFR RRXX XXXX + # JPI 0110 XXXI IIII IIII + not_branch([*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]), + # BR 0111 XFFR RRXX XXXX branch([*fetch, US_RS, 0, 0, 0, 0, 0], - [*fetch, R2_OE|PC_IE, US_RS, 0, 0, 0, 0]), - # NOP 0111 XXXX XXXX XXXX - nop(), - # NOP 1000 XXXX XXXX XXXX - nop(), + [*fetch, R1_OE|PC_IE, US_RS, 0, 0, 0, 0]), + # BRI 1000 XFFI IIII IIII + branch([*fetch, US_RS, 0, 0, 0, 0, 0], + [*fetch, LI_OE|PC_IE, US_RS, 0, 0, 0, 0]), # NOP 1001 XXXX XXXX XXXX nop(), # NOP 1010 XXXX XXXX XXXX |
