Line 1055... |
Line 1055... |
IF exec(get_bfoffset)='1' THEN
|
IF exec(get_bfoffset)='1' THEN
|
alu_width <= bf_width;
|
alu_width <= bf_width;
|
alu_bf_shift <= bf_shift;
|
alu_bf_shift <= bf_shift;
|
alu_bf_loffset <= bf_loffset;
|
alu_bf_loffset <= bf_loffset;
|
alu_bf_ffo_offset <= bf_full_offset+bf_width+1;
|
alu_bf_ffo_offset <= bf_full_offset+bf_width+1;
|
-- ELSIF set_exec(exec_BS)='1' THEN
|
|
--
|
|
---- IF set_exec(exec_BS)='1' THEN
|
|
---- alu_width<="001111";
|
|
---- alu_bf_loffset <= "000000";
|
|
---- END IF;
|
|
--
|
|
---- alu_bf_shift <= set_rot_cnt;
|
|
-- IF opcode(5)='1' THEN
|
|
---- next_micro_state <= rota1;
|
|
---- set(ld_rot_cnt) <= '1';
|
|
---- setstate <= "01";
|
|
-- alu_bf_shift <= OP2out(5 downto 0);
|
|
-- ELSE
|
|
-- alu_bf_shift(2 downto 0) <= opcode(11 downto 9);
|
|
-- IF opcode(11 downto 9)="000" THEN
|
|
-- alu_bf_shift(5 downto 3) <="001";
|
|
-- ELSE
|
|
-- alu_bf_shift(5 downto 3) <="000";
|
|
-- END IF;
|
|
-- END IF;
|
|
END IF;
|
END IF;
|
-- byte <= '0';
|
|
memread <= "1111";
|
memread <= "1111";
|
FC(1) <= NOT setstate(1) OR (PCbase AND NOT setstate(0));
|
FC(1) <= NOT setstate(1) OR (PCbase AND NOT setstate(0));
|
FC(0) <= setstate(1) AND (NOT PCbase OR setstate(0));
|
FC(0) <= setstate(1) AND (NOT PCbase OR setstate(0));
|
IF interrupt='1' THEN
|
IF interrupt='1' THEN
|
FC(1 downto 0) <= "11";
|
FC(1 downto 0) <= "11";
|
Line 1091... |
Line 1069... |
memmask <= "111111";
|
memmask <= "111111";
|
ELSIF execOPC='1' AND exec_write_back='1' THEN
|
ELSIF execOPC='1' AND exec_write_back='1' THEN
|
state <= "11";
|
state <= "11";
|
FC(1 downto 0) <= "01";
|
FC(1 downto 0) <= "01";
|
memmask <= wbmemmask;
|
memmask <= wbmemmask;
|
-- IF datatype="00" THEN
|
|
-- byte <= '1';
|
|
-- END IF;
|
|
ELSE
|
ELSE
|
state <= setstate;
|
state <= setstate;
|
IF setstate="01" THEN
|
IF setstate="01" THEN
|
memmask <= "111111";
|
memmask <= "111111";
|
wbmemmask <= "111111";
|
wbmemmask <= "111111";
|
Line 3014... |
Line 2989... |
IF opcode(5 downto 4)/="00" THEN
|
IF opcode(5 downto 4)/="00" THEN
|
setnextpass <= '1';
|
setnextpass <= '1';
|
END IF;
|
END IF;
|
|
|
WHEN pack1 => -- pack -(Ax),-(Ay)
|
WHEN pack1 => -- pack -(Ax),-(Ay)
|
|
IF opcode(2 downto 0)="111" THEN
|
|
set(use_SP) <= '1';
|
|
END IF;
|
set(hold_ea_data) <= '1';
|
set(hold_ea_data) <= '1';
|
set(update_ld) <= '1';
|
set(update_ld) <= '1';
|
setstate <= "10";
|
setstate <= "10";
|
set(presub) <= '1';
|
set(presub) <= '1';
|
next_micro_state <= pack2;
|
next_micro_state <= pack2;
|
dest_areg <= '1';
|
dest_areg <= '1';
|
WHEN pack2 =>
|
WHEN pack2 =>
|
|
IF opcode(11 downto 9)="111" THEN
|
|
set(use_SP) <= '1';
|
|
END IF;
|
set(hold_ea_data) <= '1';
|
set(hold_ea_data) <= '1';
|
set_direct_data <= '1';
|
set_direct_data <= '1';
|
IF opcode(7 downto 6) = "01" THEN --pack
|
IF opcode(7 downto 6) = "01" THEN --pack
|
datatype <= "00"; --Byte
|
datatype <= "00"; --Byte
|
ELSE --unpk
|
ELSE --unpk
|