Browse Source

Add STX, STY instructions

master
Denis Tereshkin 4 weeks ago
parent
commit
0f1ab8fd19
  1. 38
      src/cpu.verilog

38
src/cpu.verilog

@ -528,18 +528,38 @@ always_comb
mem_wr = 0; mem_wr = 0;
if (state == STATE_EXECUTE_DATA_2) if (state == STATE_EXECUTE_DATA_2)
begin begin
if(decoded_instr == I_STA) if (decoded_instr == I_STA)
begin begin
mem_wr = 1'b1;
mem_data_wr = A; mem_data_wr = A;
end
else if (decoded_instr == I_STX)
begin
mem_wr = 1'b1; mem_wr = 1'b1;
mem_data_wr = X;
end
else if (decoded_instr == I_STY)
begin
mem_wr = 1'b1;
mem_data_wr = Y;
end end
end end
else if (state == STATE_EXECUTE_ZP) else if (state == STATE_EXECUTE_ZP)
begin begin
if(decoded_instr == I_STA) if(decoded_instr == I_STA)
begin begin
mem_wr = 1'b1;
mem_data_wr = A; mem_data_wr = A;
end
else if(decoded_instr == I_STX)
begin
mem_wr = 1'b1; mem_wr = 1'b1;
mem_data_wr = X;
end
else if(decoded_instr == I_STY)
begin
mem_wr = 1'b1;
mem_data_wr = Y;
end end
end end
end end
@ -693,6 +713,8 @@ begin
decoded_instr == I_LDX || decoded_instr == I_LDX ||
decoded_instr == I_LDY || decoded_instr == I_LDY ||
decoded_instr == I_STA || decoded_instr == I_STA ||
decoded_instr == I_STX ||
decoded_instr == I_STY ||
decoded_instr == I_AND || decoded_instr == I_AND ||
decoded_instr == I_EOR || decoded_instr == I_EOR ||
decoded_instr == I_ORA || decoded_instr == I_ORA ||
@ -727,12 +749,26 @@ always @(posedge clk)
assert(Y == $past(mem_data)); assert(Y == $past(mem_data));
else if (f_prev_instruction == I_STA) else if (f_prev_instruction == I_STA)
assert(A == $past(A)); assert(A == $past(A));
else if (f_prev_instruction == I_STX)
assert(X == $past(X));
else if (f_prev_instruction == I_STY)
assert(Y == $past(Y));
if (f_prev_instruction == I_STA) if (f_prev_instruction == I_STA)
begin begin
assert($past(mem_wr, 2) == 1'b1); assert($past(mem_wr, 2) == 1'b1);
assert($past(mem_data_wr, 2) == $past(A, 2)); assert($past(mem_data_wr, 2) == $past(A, 2));
end end
else if (f_prev_instruction == I_STX)
begin
assert($past(mem_wr, 2) == 1'b1);
assert($past(mem_data_wr, 2) == $past(X, 2));
end
else if (f_prev_instruction == I_STY)
begin
assert($past(mem_wr, 2) == 1'b1);
assert($past(mem_data_wr, 2) == $past(Y, 2));
end
else else
begin begin
assert($past(mem_wr, 2) == 1'b0); assert($past(mem_wr, 2) == 1'b0);

Loading…
Cancel
Save