Revision 1352
Added by markw over 3 years ago
| atari_chips/pokeyv2/sidmaxv1.vhd | ||
|---|---|---|
| 
     	-- capability restriction
 
   | 
||
| 
     	signal RESTRICT_CAPABILITY_REG : std_logic_vector(4 downto 0);
 
   | 
||
| 
     	signal RESTRICT_CAPABILITY_NEXT : std_logic_vector(4 downto 0);
 
   | 
||
| 
     	signal readreq_s : std_logic;
 
   | 
||
| 
     	signal writereq_s : std_logic;
 
   | 
||
| 
     	-- 0=stereo off
 
   | 
||
| 
     	-- 1=quad off
 
   | 
||
| 
     	-- 2=sid off
 
   | 
||
| ... | ... | |
| 
     	CONFIG_DO,
 
   | 
||
| 
     	write_n,
 
   | 
||
| 
     	request,
 
   | 
||
| 
     	RESTRICT_CAPABILITY_REG
 
   | 
||
| 
     	RESTRICT_CAPABILITY_REG, readreq_s, writereq_s
 
   | 
||
| 
     	)
 
   | 
||
| 
     	variable writereq : std_logic;
 
   | 
||
| 
     	variable readreq : std_logic;
 
   | 
||
| ... | ... | |
| 
     		when "0101" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(0) or RESTRICT_CAPABILITY_REG(1);
 
   | 
||
| 
     			DO_MUX <= POKEY_DO(1);
 
   | 
||
| 
     			POKEY_WRITE_ENABLE(1) <= writereq;
 
   | 
||
| 
     			POKEY_WRITE_ENABLE(1) <= writereq_s;
 
   | 
||
| 
     		when "0110" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(1);
 
   | 
||
| 
     			DO_MUX <= POKEY_DO(2);
 
   | 
||
| 
     			POKEY_WRITE_ENABLE(2) <= writereq;
 
   | 
||
| 
     			POKEY_WRITE_ENABLE(2) <= writereq_s;
 
   | 
||
| 
     		when "0111" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(1);
 
   | 
||
| 
     			DO_MUX <= POKEY_DO(3);
 
   | 
||
| 
     			POKEY_WRITE_ENABLE(3) <= writereq;
 
   | 
||
| 
     			POKEY_WRITE_ENABLE(3) <= writereq_s;
 
   | 
||
| 
     		when "0010"|"0011" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(2);
 
   | 
||
| 
     			DO_MUX <= SID_DO(1);
 
   | 
||
| 
     			DRIVE_DO_MUX <= SID_DRIVE_DO(1);
 
   | 
||
| 
     			SID_WRITE_ENABLE(1) <= writereq;
 
   | 
||
| 
     			SID_READ_ENABLE(1) <= readreq;
 
   | 
||
| 
     			SID_WRITE_ENABLE(1) <= writereq_s;
 
   | 
||
| 
     			SID_READ_ENABLE(1) <= readreq_s;
 
   | 
||
| 
     		when "1000"|"1001" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(4);
 
   | 
||
| 
     			DO_MUX <= SAMPLE_DO;								
 
   | 
||
| 
     			SAMPLE_WRITE_ENABLE <= writereq;			
 
   | 
||
| 
     			SAMPLE_WRITE_ENABLE <= writereq_s;			
 
   | 
||
| 
     		when "1010" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(3);
 
   | 
||
| 
     			DO_MUX <= PSG_DO(0);
 
   | 
||
| 
     			PSG_WRITE_ENABLE(0) <= writereq;
 
   | 
||
| 
     			PSG_WRITE_ENABLE(0) <= writereq_s;
 
   | 
||
| 
     		when "1011" =>
 
   | 
||
| 
     			enable_region := RESTRICT_CAPABILITY_REG(3);
 
   | 
||
| 
     			DO_MUX <= PSG_DO(1);			
 
   | 
||
| 
     			PSG_WRITE_ENABLE(1) <= writereq;
 
   | 
||
| 
     			PSG_WRITE_ENABLE(1) <= writereq_s;
 
   | 
||
| 
     		when "1111" =>
 
   | 
||
| 
     			enable_region := '1';
 
   | 
||
| 
     			DO_MUX <= CONFIG_DO;
 
   | 
||
| 
     			CONFIG_WRITE_ENABLE <= writereq;
 
   | 
||
| 
     			CONFIG_WRITE_ENABLE <= writereq_s;
 
   | 
||
| 
     		when others =>
 
   | 
||
| 
     	end case;
 
   | 
||
| 
     | 
||
| 
     	readreq_s <= readreq and enable_region;
 
   | 
||
| 
     	writereq_s <= writereq and enable_region;
 
   | 
||
| 
     | 
||
| 
     	if enable_region='0' then
 
   | 
||
| 
     		DO_MUX <= SID_DO(0);
 
   | 
||
| 
     		DRIVE_DO_MUX <= SID_DRIVE_DO(0);
 
   | 
||
Writes still allowed when disabled!