summaryrefslogtreecommitdiff
path: root/eater_cpu/eater_decoder.sv
diff options
context:
space:
mode:
Diffstat (limited to 'eater_cpu/eater_decoder.sv')
-rw-r--r--eater_cpu/eater_decoder.sv14
1 files changed, 14 insertions, 0 deletions
diff --git a/eater_cpu/eater_decoder.sv b/eater_cpu/eater_decoder.sv
index ad0fd52..fea00e0 100644
--- a/eater_cpu/eater_decoder.sv
+++ b/eater_cpu/eater_decoder.sv
@@ -29,6 +29,7 @@ function CpuState insdep_state;
LDA: insdep_state = LDA_INS_to_MAR;
ADD: insdep_state = ADD_INS_to_MAR;
SUB: insdep_state = SUB_INS_to_MAR;
+ STA: insdep_state = STA_INS_to_MAR;
OUT: insdep_state = OUT_A_to_OUT;
HALT_op: insdep_state = HALT_st;
@@ -61,6 +62,9 @@ always @(posedge clk_i) begin
SUB_MEM_to_B: next_state = SUB_ALU_to_A;
SUB_ALU_to_A: next_state = PC_to_MAR;
+ STA_INS_to_MAR: next_state = STA_A_to_MEM;
+ STA_A_to_MEM: next_state = PC_to_MAR;
+
OUT_A_to_OUT: next_state = PC_to_MAR;
HALT_st: next_state = HALT_st;
@@ -139,6 +143,16 @@ always_comb begin
internal_flags.A_in = 1;
end
+ STA_INS_to_MAR: begin
+ internal_flags.INS_out = 1;
+ internal_flags.MAR_in = 1;
+ end
+
+ STA_A_to_MEM: begin
+ internal_flags.RAM_in = 1;
+ internal_flags.A_out = 1;
+ end
+
OUT_A_to_OUT: begin
internal_flags.A_out = 1;
internal_flags.OUT_in = 1;