new style of autoconfig 2
This commit is contained in:
+102
-125
@@ -132,27 +132,29 @@ begin
|
|||||||
lan <='0';
|
lan <='0';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
if(A(23 downto 16) = IDE_BASEADR and SHUT_UP(1) = '0')then
|
if(A(23 downto 16) = CP_BASEADR and SHUT_UP(1) = '0')then
|
||||||
ide <='1';
|
|
||||||
else
|
|
||||||
ide <='0';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
if(A(23 downto 16) = CP_BASEADR and SHUT_UP(2) = '0')then
|
|
||||||
cp <='1';
|
cp <='1';
|
||||||
else
|
else
|
||||||
cp <='0';
|
cp <='0';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
|
if(A(23 downto 16) = IDE_BASEADR and SHUT_UP(2) = '0')then
|
||||||
|
ide <='1';
|
||||||
|
else
|
||||||
|
ide <='0';
|
||||||
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end process ADDRESS_DECODE;
|
end process ADDRESS_DECODE;
|
||||||
|
|
||||||
--LAN interrupt enable
|
--LAN interrupt enable
|
||||||
lan_int_proc: process (LAN_INT,reset)
|
lan_int_proc: process (AMIGA_CLK,reset)
|
||||||
begin
|
begin
|
||||||
if(reset ='0') then
|
if(reset ='0') then
|
||||||
LAN_INT_ENABLE <='0';
|
LAN_INT_ENABLE <='0';
|
||||||
elsif rising_edge(LAN_INT) then
|
elsif rising_edge(AMIGA_CLK) then
|
||||||
LAN_INT_ENABLE <='1';
|
if(LAN_INT = '1') then --enable if high for the first time!
|
||||||
|
LAN_INT_ENABLE <= '1';
|
||||||
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end process lan_int_proc;
|
end process lan_int_proc;
|
||||||
|
|
||||||
@@ -215,123 +217,98 @@ begin
|
|||||||
LAN_BASEADR<=x"FF";
|
LAN_BASEADR<=x"FF";
|
||||||
CP_BASEADR<=x"FF";
|
CP_BASEADR<=x"FF";
|
||||||
elsif(autoconfig= '1' and AS='0') then
|
elsif(autoconfig= '1' and AS='0') then
|
||||||
if(RW='1') then
|
if(RW='1')then
|
||||||
if(AUTO_CONFIG_DONE(0)='0')then
|
case A(6 downto 1) is
|
||||||
case A(6 downto 1) is
|
when "000000" =>
|
||||||
when "000000" =>
|
if(AUTO_CONFIG_DONE(0)='0' or AUTO_CONFIG_DONE(1)='0')then
|
||||||
Dout1 <= "1100" ; --ZII, System-Memory, no ROM
|
Dout1 <= "1100" ; --ZII, No-System-Memory, no ROM
|
||||||
when "000001" => Dout1 <= "0001" ; --one Card, 64KB =001
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
when "000010" => Dout1 <= "1000" ; --ProductID high nibble : E->0001
|
Dout1 <= "110"¬(AUTOBOOT_OFF) ; --ZII, no System-Memory, (perhaps)ROM
|
||||||
when "000011" => Dout1 <= "0100" ; --ProductID low nibble: F->0000
|
end if;
|
||||||
--when "0001000" => Dout1 <= "1111" ; --Config HIGH: 0x20 and no shut down
|
when "000001" => Dout1 <= "0001" ; --one Card, 64KB =001
|
||||||
--when "0001010" => Dout1 <= "1111" ; --Config LOW
|
when "000010" =>
|
||||||
--when "0010000" => Dout1 <= "1111" ; --Ventor ID 0
|
if(AUTO_CONFIG_DONE(0)='0' or AUTO_CONFIG_DONE(1)='0')then
|
||||||
when "001001" => Dout1 <= "0101" ; --Ventor ID 1
|
Dout1 <= "1000" ; --ProductID high nibble : E->0001
|
||||||
when "001010" => Dout1 <= "1110" ; --Ventor ID 2
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
when "001011" => Dout1 <= "0011" ; --Ventor ID 3 : $0A1C: A1K.org
|
Dout1 <= "1111" ; --ProductID high nibble : F->0000=0
|
||||||
--when "0011000" => Dout1 <= "1111" ; --Serial byte 0 (msb) high nibble
|
end if;
|
||||||
--when "0011010" => Dout1 <= "1111" ; --Serial byte 0 (msb) low nibble
|
when "000011" =>
|
||||||
--when "0011100" => Dout1 <= "1111" ; --Serial byte 1 high nibble
|
|
||||||
--when "0011110" => Dout1 <= "1111" ; --Serial byte 1 low nibble
|
|
||||||
--when "0100000" => Dout1 <= "1111" ; --Serial byte 2 high nibble
|
|
||||||
--when "0100010" => Dout1 <= "1111" ; --Serial byte 2 low nibble
|
|
||||||
--when "0100100" => Dout1 <= "1111" ; --Serial byte 3 (lsb) high nibble
|
|
||||||
--when "010001" => Dout1 <= "1000" ; --Serial byte 2 low nibble
|
|
||||||
when "010011" => Dout1 <= "1110" ; --Serial byte 3 (lsb) low nibble
|
|
||||||
when "100000" => Dout1 <= "0000" ; --Interrupt config: all zero
|
|
||||||
when "100001" => Dout1 <= "0000" ; --Interrupt config: all zero
|
|
||||||
when others => Dout1 <= "1111" ;
|
|
||||||
end case;
|
|
||||||
elsif(AUTO_CONFIG_DONE(1)='0')then
|
|
||||||
case A(6 downto 1) is
|
|
||||||
when "000000" =>
|
|
||||||
if(AUTOBOOT_OFF ='0') then
|
|
||||||
Dout1 <= "1101" ; --ZII, no System-Memory, ROM
|
|
||||||
else
|
|
||||||
Dout1 <= "1100" ; --ZII, no System-Memory, no ROM
|
|
||||||
end if;
|
|
||||||
when "000001" => Dout1 <= "0001" ; --one Card, 64kb = 001
|
|
||||||
--when "0000100" => Dout2 <= "1111" ; --ProductID high nibble : F->0000=0
|
|
||||||
when "000011" => Dout1 <= "1001" ; --ProductID low nibble: 9->0110=6
|
|
||||||
--when "0001000" => Dout <= "1111" ; --Config HIGH: 0x20 and no shut down
|
|
||||||
--when "0001010" => Dout2 <= "1111" ; --Config LOW
|
|
||||||
--when "0010000" => Dout2 <= "1111" ; --Ventor ID 0
|
|
||||||
when "001001" => Dout1 <= "0111" ; --Ventor ID 1
|
|
||||||
when "001010" => Dout1 <= "1101" ; --Ventor ID 2
|
|
||||||
when "001011" => Dout1 <= "0011" ; --Ventor ID 3 : $082C: BSC
|
|
||||||
when "001100" => Dout1 <= "0100" ; --Serial byte 0 (msb) high nibble
|
|
||||||
when "001101" => Dout1 <= "1110" ; --Serial byte 0 (msb) low nibble
|
|
||||||
when "001110" => Dout1 <= "1001" ; --Serial byte 1 high nibble
|
|
||||||
when "001111" => Dout1 <= "0100" ; --Serial byte 1 low nibble
|
|
||||||
--when "0100000" => Dout2 <= "1111" ; --Serial byte 2 high nibble
|
|
||||||
--when "0100010" => Dout2 <= "1111" ; --Serial byte 2 low nibble
|
|
||||||
when "010010" => Dout1 <= "0100" ; --Serial byte 3 (lsb) high nibble
|
|
||||||
when "010011" => Dout1 <= "1010" ; --Serial byte 3 (lsb) low nibble: B16B00B5
|
|
||||||
--when "0101000" => Dout2 <= "1111" ; --Rom vector high byte high nibble
|
|
||||||
--when "0101010" => Dout2 <= "1111" ; --Rom vector high byte low nibble
|
|
||||||
--when "0101100" => Dout2 <= "1111" ; --Rom vector low byte high nibble
|
|
||||||
when "010111" => Dout1 <= "1110" ; --Rom vector low byte low nibble
|
|
||||||
when "100000" => Dout1 <= "0000" ; --Interrupt config: all zero
|
|
||||||
when "100001" => Dout1 <= "0000" ; --Interrupt config: all zero
|
|
||||||
when others => Dout1 <= "1111" ;
|
|
||||||
end case;
|
|
||||||
elsif(AUTO_CONFIG_DONE(2)='0')then
|
|
||||||
case A(6 downto 1) is
|
|
||||||
when "000000" =>
|
|
||||||
Dout1 <= "1100" ; --ZII, System-Memory, no ROM
|
|
||||||
when "000001" => Dout1 <= "0001" ; --one Card, 64KB =001
|
|
||||||
when "000010" => Dout1 <= "1000" ; --ProductID high nibble : E->0001
|
|
||||||
when "000011" => Dout1 <= "0011" ; --ProductID low nibble: F->0000
|
|
||||||
--when "0001000" => Dout1 <= "1111" ; --Config HIGH: 0x20 and no shut down
|
|
||||||
--when "0001010" => Dout1 <= "1111" ; --Config LOW
|
|
||||||
--when "0010000" => Dout1 <= "1111" ; --Ventor ID 0
|
|
||||||
when "001001" => Dout1 <= "0101" ; --Ventor ID 1
|
|
||||||
when "001010" => Dout1 <= "1110" ; --Ventor ID 2
|
|
||||||
when "001011" => Dout1 <= "0011" ; --Ventor ID 3 : $0A1C: A1K.org
|
|
||||||
--when "0011000" => Dout1 <= "1111" ; --Serial byte 0 (msb) high nibble
|
|
||||||
--when "0011010" => Dout1 <= "1111" ; --Serial byte 0 (msb) low nibble
|
|
||||||
--when "0011100" => Dout1 <= "1111" ; --Serial byte 1 high nibble
|
|
||||||
--when "0011110" => Dout1 <= "1111" ; --Serial byte 1 low nibble
|
|
||||||
--when "0100000" => Dout1 <= "1111" ; --Serial byte 2 high nibble
|
|
||||||
--when "0100010" => Dout1 <= "1111" ; --Serial byte 2 low nibble
|
|
||||||
--when "0100100" => Dout1 <= "1111" ; --Serial byte 3 (lsb) high nibble
|
|
||||||
--when "010001" => Dout1 <= "1000" ; --Serial byte 2 low nibble
|
|
||||||
when "010011" => Dout1 <= "1110" ; --Serial byte 3 (lsb) low nibble
|
|
||||||
when "100000" => Dout1 <= "0000" ; --Interrupt config: all zero
|
|
||||||
when "100001" => Dout1 <= "0000" ; --Interrupt config: all zero
|
|
||||||
when others => Dout1 <= "1111" ;
|
|
||||||
end case;
|
|
||||||
end if;
|
|
||||||
else --write
|
|
||||||
if( UDS='0' )then
|
|
||||||
if(AUTO_CONFIG_DONE(0)='0')then
|
if(AUTO_CONFIG_DONE(0)='0')then
|
||||||
if(A (6 downto 1)="100100")then
|
Dout1 <= "0100" ; --ProductID low nibble: F->0000
|
||||||
LAN_BASEADR(7 downto 0) <= D(15 downto 8); --Base adress
|
elsif(AUTO_CONFIG_DONE(1)='0')then
|
||||||
AUTO_CONFIG_DONE_CYCLE(0) <='1'; --done here
|
Dout1 <= "0011" ; --ProductID low nibble: F->0000
|
||||||
SHUT_UP(0) <='0'; --enable board
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
elsif(A (6 downto 1)="100110")then
|
Dout1 <= "1001" ; --ProductID low nibble: 9->0110=6
|
||||||
AUTO_CONFIG_DONE_CYCLE(0) <='1'; --done here
|
|
||||||
end if;
|
|
||||||
end if;
|
end if;
|
||||||
-- elsif(AUTO_CONFIG_DONE(1)='0')then
|
when "001000" => Dout1 <= "1111" ; --Ventor ID 0
|
||||||
if(AUTO_CONFIG_DONE(0)='1')then
|
when "001001" => Dout1 <= "0101" ; --Ventor ID 1
|
||||||
if(A (6 downto 1)="100100")then
|
if(AUTO_CONFIG_DONE(0)='0' or AUTO_CONFIG_DONE(1)='0')then
|
||||||
IDE_BASEADR(7 downto 0) <= D(15 downto 8); --Base adress
|
Dout1 <= "0101" ; --Ventor ID 1
|
||||||
SHUT_UP(1) <= '0'; --enable board
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
AUTO_CONFIG_DONE_CYCLE(1) <='1'; --done here
|
Dout1 <= "0111" ; --Ventor ID 1
|
||||||
elsif(A (6 downto 1)="100110")then
|
|
||||||
AUTO_CONFIG_DONE_CYCLE(1) <='1'; --done here
|
|
||||||
end if;
|
|
||||||
end if;
|
end if;
|
||||||
-- elsif(AUTO_CONFIG_DONE(2)='0')then
|
when "001010" =>
|
||||||
if(AUTO_CONFIG_DONE(1)='1')then
|
if(AUTO_CONFIG_DONE(0)='0' or AUTO_CONFIG_DONE(1)='0')then
|
||||||
if(A (6 downto 1)="100100")then
|
Dout1 <= "1110" ; --Ventor ID 2
|
||||||
CP_BASEADR(7 downto 0) <= D(15 downto 8); --Base adress
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
SHUT_UP(2) <= '0'; --enable board
|
Dout1 <= "1101" ; --Ventor ID 2
|
||||||
AUTO_CONFIG_DONE_CYCLE(2) <='1'; --done here
|
end if;
|
||||||
elsif(A (6 downto 1)="100110")then
|
when "001011" =>
|
||||||
AUTO_CONFIG_DONE_CYCLE(2) <='1'; --done here
|
if(AUTO_CONFIG_DONE(0)='0' or AUTO_CONFIG_DONE(1)='0')then
|
||||||
end if;
|
Dout1 <= "0011" ; --Ventor ID 3 : $0A1C: A1K.org
|
||||||
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
|
Dout1 <= "0011" ; --Ventor ID 3 : $082C: BSC
|
||||||
|
end if;
|
||||||
|
when "001100" => Dout1 <= "0100" ; --Serial byte 0 (msb) high nibble
|
||||||
|
when "001101" => Dout1 <= "1110" ; --Serial byte 0 (msb) low nibble
|
||||||
|
when "001110" => Dout1 <= "1001" ; --Serial byte 1 high nibble
|
||||||
|
when "001111" => Dout1 <= "0100" ; --Serial byte 1 low nibble
|
||||||
|
when "010000" => Dout1 <= "1111" ; --Serial byte 2 high nibble
|
||||||
|
when "010001" => Dout1 <= "1111" ; --Serial byte 2 low nibble
|
||||||
|
when "010010" => Dout1 <= "0100" ; --Serial byte 3 (lsb) high nibble
|
||||||
|
when "010011" => Dout1 <= "1010" ; --Serial byte 3 (lsb) low nibble: B16B00B5
|
||||||
|
--when "010100" => Dout1 <= "1111" ; --Rom vector high byte high nibble
|
||||||
|
--when "010101" => Dout1 <= "1111" ; --Rom vector high byte low nibble
|
||||||
|
--when "010110" => Dout1 <= "1111" ; --Rom vector low byte high nibble
|
||||||
|
when "010111" =>
|
||||||
|
if(AUTO_CONFIG_DONE(0)='0' or AUTO_CONFIG_DONE(1)='0')then
|
||||||
|
Dout1 <= "1111" ; --Rom vector low byte low nibble
|
||||||
|
elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
|
Dout1 <= "1110" ; --Rom vector low byte low nibble
|
||||||
|
end if;
|
||||||
|
when "100000" => Dout1 <= "0000" ; --Interrupt config: all zero
|
||||||
|
when "100001" => Dout1 <= "0000" ; --Interrupt config: all zero
|
||||||
|
when others => Dout1 <= "1111" ;
|
||||||
|
end case;
|
||||||
|
end if;
|
||||||
|
if(RW='0' and UDS='0') then--write
|
||||||
|
if(AUTO_CONFIG_DONE(0)='0')then
|
||||||
|
if(A (6 downto 1)="100100")then
|
||||||
|
LAN_BASEADR(7 downto 0) <= D(15 downto 8); --Base adress
|
||||||
|
AUTO_CONFIG_DONE_CYCLE(0) <='1'; --done here
|
||||||
|
SHUT_UP(0) <='0'; --enable board
|
||||||
|
elsif(A (6 downto 1)="100110")then
|
||||||
|
AUTO_CONFIG_DONE_CYCLE(0) <='1'; --done here
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
-- elsif(AUTO_CONFIG_DONE(1)='0')then
|
||||||
|
if(AUTO_CONFIG_DONE(0)='1')then
|
||||||
|
if(A (6 downto 1)="100100")then
|
||||||
|
--CP_BASEADR(7 downto 0) <= D(15 downto 8); --Base adress
|
||||||
|
--SHUT_UP(1) <= '0'; --enable board
|
||||||
|
AUTO_CONFIG_DONE_CYCLE(1) <='1'; --done here
|
||||||
|
elsif(A (6 downto 1)="100110")then
|
||||||
|
AUTO_CONFIG_DONE_CYCLE(1) <='1'; --done here
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
-- elsif(AUTO_CONFIG_DONE(2)='0')then
|
||||||
|
if(AUTO_CONFIG_DONE(1)='1')then
|
||||||
|
if(A (6 downto 1)="100100")then
|
||||||
|
IDE_BASEADR(7 downto 0) <= D(15 downto 8); --Base adress
|
||||||
|
SHUT_UP(2) <= '0'; --enable board
|
||||||
|
AUTO_CONFIG_DONE_CYCLE(2) <='1'; --done here
|
||||||
|
elsif(A (6 downto 1)="100110")then
|
||||||
|
AUTO_CONFIG_DONE_CYCLE(2) <='1'; --done here
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
end if;
|
end if;
|
||||||
@@ -373,7 +350,7 @@ begin
|
|||||||
|
|
||||||
--INT_OUT <= 'Z';
|
--INT_OUT <= 'Z';
|
||||||
INT_OUT <= '0' when
|
INT_OUT <= '0' when
|
||||||
(LAN_INT = '0' and LAN_INT_ENABLE ='1') or
|
--(LAN_INT = '0' and LAN_INT_ENABLE ='1') or
|
||||||
CP_IRQ = '0' else 'Z';
|
CP_IRQ = '0' else 'Z';
|
||||||
|
|
||||||
OWN <= '0' when AS='0' and (autoconfig = '1' or ide = '1' or lan = '1' or cp = '1') else 'Z';
|
OWN <= '0' when AS='0' and (autoconfig = '1' or ide = '1' or lan = '1' or cp = '1') else 'Z';
|
||||||
|
|||||||
Reference in New Issue
Block a user