`define INSN_LDH_AC 8'b111x0010 // Either LDH A,(C) or LDH (C),A
`define INSN_LDx_AHL 8'b001xx010 // LDD/LDI A,(HL) / (HL),A
`define INSN_ALU8 8'b10xxxxxx // 10 xxx yyy
+`define INSN_NOP 8'b00000000
+`define INSN_RST 8'b11xxx111
`define INSN_reg_A 3'b111
`define INSN_reg_B 3'b000
endcase
end
end
+ `INSN_NOP: begin
+ `EXEC_NEWCYCLE;
+ `EXEC_INC_PC;
+ end
+ `INSN_RST: begin
+ case (cycle)
+ 0: begin
+ wr <= 1;
+ address <= {registers[`REG_SPH],registers[`REG_SPL]}-1;
+ wdata <= registers[`REG_PCH];
+ end
+ 1: begin
+ wr <= 1;
+ address <= {registers[`REG_SPH],registers[`REG_SPL]}-2;
+ wdata <= registers[`REG_PCL];
+ end
+ 2: begin /* wee */ end
+ 3: begin
+ `EXEC_NEWCYCLE;
+ {registers[`REG_PCH],registers[`REG_PCL]} <=
+ {10'b0,opcode[5:3],3'b0};
+ end
+ endcase
+ end
default:
$stop;
endcase
registers[`REG_A] + tmp;
registers[`REG_F] <=
{ /* Z */ ((registers[`REG_A] + tmp) == 0) ? 1'b1 : 1'b0,
- /* N */ 0,
+ /* N */ 1'b0,
/* H */ (({1'b0,registers[`REG_A][3:0]} + {1'b0,tmp[3:0]}) >> 4 == 1) ? 1'b1 : 1'b0,
/* C */ (({1'b0,registers[`REG_A]} + {1'b0,tmp}) >> 8 == 1) ? 1'b1 : 1'b0,
registers[`REG_F][3:0]
registers[`REG_A] + tmp + {7'b0,registers[`REG_F][4]};
registers[`REG_F] <=
{ /* Z */ ((registers[`REG_A] + tmp + {7'b0,registers[`REG_F][4]}) == 0) ? 1'b1 : 1'b0,
- /* N */ 0,
+ /* N */ 1'b0,
/* H */ (({1'b0,registers[`REG_A][3:0]} + {1'b0,tmp[3:0]} + {4'b0,registers[`REG_F][4]}) >> 4 == 1) ? 1'b1 : 1'b0,
/* C */ (({1'b0,registers[`REG_A]} + {1'b0,tmp} + {8'b0,registers[`REG_F][4]}) >> 8 == 1) ? 1'b1 : 1'b0,
registers[`REG_F][3:0]
registers[`REG_A] & tmp;
registers[`REG_F] <=
{ /* Z */ ((registers[`REG_A] & tmp) == 0) ? 1'b1 : 1'b0,
- 0,1,0,
+ 3'b010,
registers[`REG_F][3:0]
};
end
registers[`REG_A] | tmp;
registers[`REG_F] <=
{ /* Z */ ((registers[`REG_A] | tmp) == 0) ? 1'b1 : 1'b0,
- 0,0,0,
+ 3'b000,
registers[`REG_F][3:0]
};
end
registers[`REG_A] ^ tmp;
registers[`REG_F] <=
{ /* Z */ ((registers[`REG_A] ^ tmp) == 0) ? 1'b1 : 1'b0,
- 0,0,0,
+ 3'b000,
registers[`REG_F][3:0]
};
end
endcase
end
end
+ `INSN_NOP: begin /* NOP! */ end
+ `INSN_RST: begin
+ case (cycle)
+ 0: cycle <= 1;
+ 1: cycle <= 2;
+ 2: cycle <= 3;
+ 3: begin
+ cycle <= 0;
+ {registers[`REG_SPH],registers[`REG_SPL]} <=
+ {registers[`REG_SPH],registers[`REG_SPL]}-2;
+ end
+ endcase
+ end
endcase
state <= `STATE_FETCH;
end