Line 27... |
Line 27... |
|
|
type micro_states is (idle, nop, ld_nn, st_nn, ld_dAn1, ld_AnXn1, ld_AnXn2, st_dAn1, ld_AnXnbd1, ld_AnXnbd2, ld_AnXnbd3,
|
type micro_states is (idle, nop, ld_nn, st_nn, ld_dAn1, ld_AnXn1, ld_AnXn2, st_dAn1, ld_AnXnbd1, ld_AnXnbd2, ld_AnXnbd3,
|
ld_229_1, ld_229_2, ld_229_3, ld_229_4, st_229_1, st_229_2, st_229_3, st_229_4,
|
ld_229_1, ld_229_2, ld_229_3, ld_229_4, st_229_1, st_229_2, st_229_3, st_229_4,
|
st_AnXn1, st_AnXn2, bra1, bsr1, bsr2, nopnop, dbcc1, movem1, movem2, movem3,
|
st_AnXn1, st_AnXn2, bra1, bsr1, bsr2, nopnop, dbcc1, movem1, movem2, movem3,
|
andi, pack1, pack2, pack3, op_AxAy, cmpm, link1, link2, unlink1, unlink2, int1, int2, int3, int4, rte1, rte2, rte3,
|
andi, pack1, pack2, pack3, op_AxAy, cmpm, link1, link2, unlink1, unlink2, int1, int2, int3, int4, rte1, rte2, rte3,
|
rte4, rte5, rtd1, rtd2, trap00, trap0, trap1, trap2, trap3,
|
rte4, rte5, rtd1, rtd2, trap00, trap0, trap1, trap2, trap3, cas1, cas2, cas21, cas22, cas23, cas24,
|
|
cas25, cas26, cas27, cas28, chk20, chk21, chk22, chk23, chk24,
|
trap4, trap5, trap6, movec1, movep1, movep2, movep3, movep4, movep5, rota1, bf1,
|
trap4, trap5, trap6, movec1, movep1, movep2, movep3, movep4, movep5, rota1, bf1,
|
mul1, mul2, mul_end1, mul_end2, div1, div2, div3, div4, div_end1, div_end2);
|
mul1, mul2, mul_end1, mul_end2, div1, div2, div3, div4, div_end1, div_end2);
|
|
|
constant opcMOVE : integer := 0; --
|
constant opcMOVE : integer := 0; --
|
constant opcMOVEQ : integer := 1; --
|
constant opcMOVEQ : integer := 1; --
|
Line 114... |
Line 115... |
constant opcUNPACK : integer := 78; --
|
constant opcUNPACK : integer := 78; --
|
constant hold_ea_data : integer := 79; --
|
constant hold_ea_data : integer := 79; --
|
constant store_ea_packdata : integer := 80; --
|
constant store_ea_packdata : integer := 80; --
|
constant exec_BS : integer := 81; --
|
constant exec_BS : integer := 81; --
|
constant hold_OP2 : integer := 82; --
|
constant hold_OP2 : integer := 82; --
|
|
constant restore_ADDR : integer := 83; --
|
|
constant alu_exec : integer := 84; --
|
|
constant alu_move : integer := 85; --
|
|
constant alu_setFlags : integer := 86; --
|
|
constant opcCHK2 : integer := 87; --
|
|
constant opcEXTB : integer := 88; --
|
|
|
constant lastOpcBit : integer := 82;
|
constant lastOpcBit : integer := 88;
|
|
|
component TG68K_ALU
|
component TG68K_ALU
|
generic(
|
generic(
|
MUL_Mode :integer; --0=>16Bit, 1=>32Bit, 2=>switchable with CPU(1), 3=>no MUL,
|
MUL_Mode :integer; --0=>16Bit, 1=>32Bit, 2=>switchable with CPU(1), 3=>no MUL,
|
MUL_Hardware :integer; --0=>no, 1=>yes,
|
MUL_Hardware :integer; --0=>no, 1=>yes,
|
Line 127... |
Line 134... |
BarrelShifter :integer --0=>no, 1=>yes, 2=>switchable with CPU(1)
|
BarrelShifter :integer --0=>no, 1=>yes, 2=>switchable with CPU(1)
|
);
|
);
|
port(
|
port(
|
clk : in std_logic;
|
clk : in std_logic;
|
Reset : in std_logic;
|
Reset : in std_logic;
|
|
CPU : in std_logic_vector(1 downto 0):="00"; -- 00->68000 01->68010 11->68020(only some parts - yet)
|
clkena_lw : in std_logic:='1';
|
clkena_lw : in std_logic:='1';
|
execOPC : in bit;
|
execOPC : in bit;
|
decodeOPC : in bit;
|
decodeOPC : in bit;
|
exe_condition : in std_logic;
|
exe_condition : in std_logic;
|
exec_tas : in std_logic;
|
exec_tas : in std_logic;
|