mirror of
https://github.com/sxpert/hp-saturn
synced 2025-01-20 10:26:31 +01:00
support some more jump instructions
This commit is contained in:
parent
f1971c3bfe
commit
5c5d24f189
1 changed files with 24 additions and 9 deletions
|
@ -22,10 +22,12 @@ wire is_p_eq;
|
||||||
wire is_la_hex;
|
wire is_la_hex;
|
||||||
wire is_lc_hex;
|
wire is_lc_hex;
|
||||||
wire disp_nb_nibbles;
|
wire disp_nb_nibbles;
|
||||||
|
wire is_alu_op;
|
||||||
assign p_is_dest = (o_reg_dest == `ALU_REG_P);
|
assign p_is_dest = (o_reg_dest == `ALU_REG_P);
|
||||||
assign is_load_imm = ((o_alu_op == `ALU_OP_COPY) ||
|
assign is_load_imm = ((o_alu_op == `ALU_OP_COPY) ||
|
||||||
(o_alu_op == `ALU_OP_RST_BIT) ||
|
(o_alu_op == `ALU_OP_RST_BIT) ||
|
||||||
(o_alu_op == `ALU_OP_SET_BIT) ||
|
(o_alu_op == `ALU_OP_SET_BIT) ||
|
||||||
|
(o_alu_op == `ALU_OP_JMP_REL2) ||
|
||||||
(o_alu_op == `ALU_OP_JMP_REL3) ||
|
(o_alu_op == `ALU_OP_JMP_REL3) ||
|
||||||
(o_alu_op == `ALU_OP_JMP_REL4) ||
|
(o_alu_op == `ALU_OP_JMP_REL4) ||
|
||||||
(o_alu_op == `ALU_OP_JMP_ABS5))
|
(o_alu_op == `ALU_OP_JMP_ABS5))
|
||||||
|
@ -36,6 +38,8 @@ assign is_p_eq = is_load_imm && p_is_dest;
|
||||||
assign is_la_hex = is_load_imm && (o_reg_dest == `ALU_REG_A);
|
assign is_la_hex = is_load_imm && (o_reg_dest == `ALU_REG_A);
|
||||||
assign is_lc_hex = is_load_imm && (o_reg_dest == `ALU_REG_C);
|
assign is_lc_hex = is_load_imm && (o_reg_dest == `ALU_REG_C);
|
||||||
assign disp_nb_nibbles = is_d0_eq || is_d1_eq;
|
assign disp_nb_nibbles = is_d0_eq || is_d1_eq;
|
||||||
|
assign is_alu_op = o_ins_alu_op &&
|
||||||
|
!( o_ins_config );
|
||||||
|
|
||||||
reg [4:0] nibble_pos;
|
reg [4:0] nibble_pos;
|
||||||
|
|
||||||
|
@ -63,14 +67,18 @@ always @(posedge i_clk) begin
|
||||||
if (o_alu_op == `ALU_OP_TEST_GO) $write("YES");
|
if (o_alu_op == `ALU_OP_TEST_GO) $write("YES");
|
||||||
if (o_set_xm) $write("SXM");
|
if (o_set_xm) $write("SXM");
|
||||||
if (o_set_carry) $write("%sC", o_carry_val?"S":"C");
|
if (o_set_carry) $write("%sC", o_carry_val?"S":"C");
|
||||||
|
$write("\t");
|
||||||
end
|
end
|
||||||
if (o_ins_set_mode) begin
|
if (o_ins_set_mode) begin
|
||||||
$write("SET%s", o_mode_dec?"DEC":"HEX");
|
$write("SET%s", o_mode_dec?"DEC":"HEX");
|
||||||
end
|
end
|
||||||
if (o_ins_reset) begin
|
if (o_ins_reset) begin
|
||||||
$write("RESET");
|
$write("RESET\t");
|
||||||
end
|
end
|
||||||
if (o_ins_alu_op) begin
|
if (o_ins_config)
|
||||||
|
$write("CONFIG\t");
|
||||||
|
|
||||||
|
if (is_alu_op) begin
|
||||||
|
|
||||||
case (o_alu_op)
|
case (o_alu_op)
|
||||||
`ALU_OP_TEST_EQ,
|
`ALU_OP_TEST_EQ,
|
||||||
|
@ -79,9 +87,6 @@ always @(posedge i_clk) begin
|
||||||
|
|
||||||
// reg dest...
|
// reg dest...
|
||||||
case (o_alu_op)
|
case (o_alu_op)
|
||||||
`ALU_OP_JMP_REL3: $write("%s", o_push?"GOSUB":"GOTO");
|
|
||||||
`ALU_OP_JMP_REL4: $write("%s", o_push?"GOSUBL":"GOLONG");
|
|
||||||
`ALU_OP_JMP_ABS5: $write("%s", o_push?"GOSBVL":"GOVLNG");
|
|
||||||
`ALU_OP_CLR_MASK:
|
`ALU_OP_CLR_MASK:
|
||||||
case (o_reg_dest)
|
case (o_reg_dest)
|
||||||
`ALU_REG_HST:
|
`ALU_REG_HST:
|
||||||
|
@ -97,6 +102,10 @@ always @(posedge i_clk) begin
|
||||||
endcase
|
endcase
|
||||||
default: $write("[VLR_MASK dest:%0d]", o_reg_dest);
|
default: $write("[VLR_MASK dest:%0d]", o_reg_dest);
|
||||||
endcase
|
endcase
|
||||||
|
`ALU_OP_JMP_REL2,
|
||||||
|
`ALU_OP_JMP_REL3,
|
||||||
|
`ALU_OP_JMP_REL4,
|
||||||
|
`ALU_OP_JMP_ABS5,
|
||||||
`ALU_OP_TEST_EQ,
|
`ALU_OP_TEST_EQ,
|
||||||
`ALU_OP_TEST_NEQ: begin end
|
`ALU_OP_TEST_NEQ: begin end
|
||||||
default:
|
default:
|
||||||
|
@ -140,12 +149,17 @@ always @(posedge i_clk) begin
|
||||||
if (!is_lc_hex)
|
if (!is_lc_hex)
|
||||||
$write("=");
|
$write("=");
|
||||||
`ALU_OP_2CMPL: $write("=-");
|
`ALU_OP_2CMPL: $write("=-");
|
||||||
|
`ALU_OP_JMP_REL2: begin
|
||||||
|
$write("%s",(o_mem_load[7:0] == 0)?"RTN":"GO");
|
||||||
|
if (!o_carry_val) $write("N");
|
||||||
|
$write("C");
|
||||||
|
end
|
||||||
|
`ALU_OP_JMP_REL3: $write("%s", o_push?"GOSUB":"GOTO");
|
||||||
|
`ALU_OP_JMP_REL4: $write("%s", o_push?"GOSUBL":"GOLONG");
|
||||||
|
`ALU_OP_JMP_ABS5: $write("%s", o_push?"GOSBVL":"GOVLNG");
|
||||||
`ALU_OP_EXCH,
|
`ALU_OP_EXCH,
|
||||||
`ALU_OP_TEST_EQ,
|
`ALU_OP_TEST_EQ,
|
||||||
`ALU_OP_TEST_NEQ,
|
`ALU_OP_TEST_NEQ,
|
||||||
`ALU_OP_JMP_REL3,
|
|
||||||
`ALU_OP_JMP_REL4,
|
|
||||||
`ALU_OP_JMP_ABS5,
|
|
||||||
`ALU_OP_CLR_MASK: begin end
|
`ALU_OP_CLR_MASK: begin end
|
||||||
default: $write("[op:%0d]", o_alu_op);
|
default: $write("[op:%0d]", o_alu_op);
|
||||||
endcase
|
endcase
|
||||||
|
@ -255,7 +269,8 @@ always @(posedge i_clk) begin
|
||||||
`FT_FIELD_A: $write("A");
|
`FT_FIELD_A: $write("A");
|
||||||
endcase
|
endcase
|
||||||
else $write("%0d", o_field_last+1);
|
else $write("%0d", o_field_last+1);
|
||||||
end else begin
|
end
|
||||||
|
else begin
|
||||||
// $write("@%b@", is_load_imm);
|
// $write("@%b@", is_load_imm);
|
||||||
if (is_load_imm) begin
|
if (is_load_imm) begin
|
||||||
if (is_p_eq) $write("%0d", o_imm_value);
|
if (is_p_eq) $write("%0d", o_imm_value);
|
||||||
|
|
Loading…
Reference in a new issue