Revision 1457
Added by markw 11 months ago
| atari_chips/pokeyv2/init.c | ||
|---|---|---|
|
-- 5-7 reserved
|
||
|
POST_DIVIDE_NEXT <= flash_do(15 downto 8);
|
||
|
GTIA_DIVIDE_NEXT <= flash_do(19 downto 16);
|
||
|
-- 23 downto 20 reserved
|
||
|
ADC_VOLUME_NEXT <= flash_do_slow(21 downto 20);
|
||
|
SIO_DATA_VOLUME_NEXT <= flash_do_slow(23 downto 22);
|
||
|
PSG_FREQ_NEXT <= flash_do(25 downto 24);
|
||
|
PSG_STEREOMODE_NEXT <= flash_do(27 downto 26);
|
||
|
PSG_ENVELOPE16_NEXT <= flash_do(28);
|
||
| ... | ... | |
|
int irq_en = 0;
|
||
|
int detect_right = 1;
|
||
|
int pal = 1;
|
||
|
int sio_data_volume = 2;
|
||
|
int adc_volume = 3;
|
||
|
buffer[0] |= (saturate&3)<<0;
|
||
|
buffer[0] |= (channel_mode&1)<<2;
|
||
|
buffer[0] |= (irq_en&1)<<3;
|
||
| ... | ... | |
|
buffer[1] |= (post_divide&0xff)<<0;
|
||
|
int gtia_enable = 0b1100;
|
||
|
buffer[2] |= (gtia_enable&0xf)<<0;
|
||
|
buffer[2] |= (adc_volume&0x3)<<4;
|
||
|
buffer[2] |= (sio_data_volume&0x3)<<6;
|
||
|
int psg_freq = 0;
|
||
|
int psg_stereomode = 1;
|
||
|
int psg_envelope16 = 0;
|
||
| atari_chips/pokeyv2/pokeycfg.c | ||
|---|---|---|
|
#define CORE_RESTRICT 4
|
||
|
#define CORE_OUTPUT 5
|
||
|
#define CORE_PHI 6
|
||
|
#define CORE_MAX 6
|
||
|
#define CORE_ADC 7
|
||
|
#define CORE_SIO_DATA 8
|
||
|
#define CORE_MAX 8
|
||
|
|
||
|
#define SID_TYPE 1
|
||
|
#define SID_MAX 1
|
||
| ... | ... | |
|
revers(activeLine==CORE_PHI);
|
||
|
cprintf("PHI2->1MHz : %s",((val&32)==32) ? "PAL (5/9)" : "NTSC (4/7)");
|
||
|
break;
|
||
|
#ifndef SIDMAX
|
||
|
case CORE_ADC:
|
||
|
revers(activeLine==CORE_ADC);
|
||
|
val = ((*flash1)>>20)&0x3;
|
||
|
if (val == 3) val = 4;
|
||
|
cprintf("ADC volume : %dx",val);
|
||
|
break;
|
||
|
case CORE_SIO_DATA:
|
||
|
revers(activeLine==CORE_SIO_DATA);
|
||
|
val = ((*flash1)>>22)&0x3;
|
||
|
if (val == 3) val = 4;
|
||
|
cprintf("SIO DATA vol : %dx",val);
|
||
|
break;
|
||
|
#endif
|
||
|
}
|
||
|
break;
|
||
|
case MODE_POKEY: // pokey
|
||
| ... | ... | |
|
clrscr();
|
||
|
//textcolor(0xa);
|
||
|
chline(40);
|
||
|
cprintf(PRODUCT " config v1.4 ");
|
||
|
cprintf(PRODUCT " config v1.5 ");
|
||
|
cprintf(" Core:");
|
||
|
for (i=0;i!=8;++i)
|
||
|
{
|
||
| ... | ... | |
|
case CORE_PHI:
|
||
|
shift = 5;
|
||
|
break;
|
||
|
case CORE_ADC:
|
||
|
shift = 20;
|
||
|
mask = 3;
|
||
|
max = 3;
|
||
|
break;
|
||
|
case CORE_SIO_DATA:
|
||
|
shift = 22;
|
||
|
mask = 3;
|
||
|
max = 3;
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
case MODE_POKEY:
|
||
| ... | ... | |
|
// -- 5-7 reserved
|
||
|
// POST_DIVIDE_NEXT <= flash_do(15 downto 8);
|
||
|
// GTIA_ENABLE_NEXT <= flash_do(19 downto 16);
|
||
|
// -- 23 downto 20 reserved
|
||
|
// ADC_VOLUME_NEXT <= flash_do_slow(21 downto 20);
|
||
|
// SIO_DATA_VOLUME_NEXT <= flash_do_slow(23 downto 22);
|
||
|
// PSG_FREQ_NEXT <= flash_do(25 downto 24);
|
||
|
// PSG_STEREOMODE_NEXT <= flash_do(27 downto 26);
|
||
|
// PSG_ENVELOPE16_NEXT <= flash_do(28);
|
||
| atari_chips/pokeyv2/pokeymax.vhd | ||
|---|---|---|
|
signal SATURATE_REG : std_logic;
|
||
|
signal POST_DIVIDE_REG : std_logic_vector(7 downto 0);
|
||
|
signal GTIA_ENABLE_REG : std_logic_vector(3 downto 0);
|
||
|
signal ADC_VOLUME_REG : std_logic_vector(1 downto 0);
|
||
|
signal SIO_DATA_VOLUME_REG : std_logic_vector(1 downto 0);
|
||
|
signal VERSION_LOC_REG : std_logic_vector(2 downto 0);
|
||
|
signal PAL_REG : std_logic;
|
||
|
|
||
| ... | ... | |
|
signal SATURATE_NEXT : std_logic;
|
||
|
signal POST_DIVIDE_NEXT : std_logic_vector(7 downto 0);
|
||
|
signal GTIA_ENABLE_NEXT : std_logic_vector(3 downto 0);
|
||
|
signal ADC_VOLUME_NEXT : std_logic_vector(1 downto 0);
|
||
|
signal SIO_DATA_VOLUME_NEXT : std_logic_vector(1 downto 0);
|
||
|
signal VERSION_LOC_NEXT : std_logic_vector(2 downto 0);
|
||
|
signal PAL_NEXT : std_logic;
|
||
|
|
||
| ... | ... | |
|
end if;
|
||
|
POST_DIVIDE_REG <= "10100000"; -- 1/2 5v, 3/4 1v
|
||
|
GTIA_ENABLE_REG <= "1100"; -- external only
|
||
|
ADC_VOLUME_REG <= "11"; -- 0=silent,1=1x,2=2x,3=4x
|
||
|
SIO_DATA_VOLUME_REG <= "10"; -- 0=silent,1=quieter,2=normal,3=louder
|
||
|
CONFIG_ENABLE_REG <= '0';
|
||
|
VERSION_LOC_REG <= (others=>'0');
|
||
|
PAL_REG <= '1';
|
||
| ... | ... | |
|
SATURATE_REG <= SATURATE_NEXT;
|
||
|
POST_DIVIDE_REG <= POST_DIVIDE_NEXT;
|
||
|
GTIA_ENABLE_REG <= GTIA_ENABLE_NEXT;
|
||
|
ADC_VOLUME_REG <= ADC_VOLUME_NEXT;
|
||
|
SIO_DATA_VOLUME_REG <= SIO_DATA_VOLUME_NEXT;
|
||
|
CONFIG_ENABLE_REG <= CONFIG_ENABLE_NEXT;
|
||
|
VERSION_LOC_REG <= VERSION_LOC_NEXT;
|
||
|
PAL_REG <= PAL_NEXT;
|
||
| ... | ... | |
|
CONFIG_ENABLE_REG,
|
||
|
POST_DIVIDE_REG,
|
||
|
GTIA_ENABLE_REG,
|
||
|
ADC_VOLUME_REG,
|
||
|
SIO_DATA_VOLUME_REG,
|
||
|
VERSION_LOC_REG,
|
||
|
PSG_FREQ_REG,
|
||
|
PSG_STEREOMODE_REG,
|
||
| ... | ... | |
|
POST_DIVIDE_NEXT <= POST_DIVIDE_REG;
|
||
|
|
||
|
GTIA_ENABLE_NEXT <= GTIA_ENABLE_REG;
|
||
|
|
||
|
ADC_VOLUME_NEXT <= ADC_VOLUME_REG;
|
||
|
SIO_DATA_VOLUME_NEXT <= SIO_DATA_VOLUME_REG;
|
||
|
|
||
|
CONFIG_ENABLE_NEXT <= CONFIG_ENABLE_REG;
|
||
|
|
||
| ... | ... | |
|
-- 6-7 reserved
|
||
|
POST_DIVIDE_NEXT <= flash_do_slow(15 downto 8);
|
||
|
GTIA_ENABLE_NEXT <= flash_do_slow(19 downto 16);
|
||
|
-- 23 downto 20 reserved
|
||
|
ADC_VOLUME_NEXT <= flash_do_slow(21 downto 20);
|
||
|
SIO_DATA_VOLUME_NEXT <= flash_do_slow(23 downto 22);
|
||
|
PSG_FREQ_NEXT <= flash_do_slow(25 downto 24);
|
||
|
PSG_STEREOMODE_NEXT <= flash_do_slow(27 downto 26);
|
||
|
PSG_ENVELOPE16_NEXT <= flash_do_slow(28);
|
||
| ... | ... | |
|
|
||
|
if (addr_decoded4(3)='1') then
|
||
|
GTIA_ENABLE_NEXT <= WRITE_DATA(3 downto 0);
|
||
|
ADC_VOLUME_NEXT <= WRITE_DATA(5 downto 4);
|
||
|
SIO_DATA_VOLUME_NEXT <= WRITE_DATA(7 downto 6);
|
||
|
end if;
|
||
|
|
||
|
if (addr_decoded4(4)='1') then
|
||
| ... | ... | |
|
if (addr_decoded4(3)='1') then
|
||
|
CONFIG_DO <= (others=>'0');
|
||
|
CONFIG_DO(3 downto 0) <= GTIA_ENABLE_REG;
|
||
|
--CONFIG_DO(7 downto 4) <= SIO_ENABLE_REG; -- if we implement
|
||
|
if (enable_adc=1) then -- Should allow optimiser to remove since nothing else reads it
|
||
|
CONFIG_DO(5 downto 4) <= ADC_VOLUME_REG;
|
||
|
end if;
|
||
|
CONFIG_DO(7 downto 6) <= SIO_DATA_VOLUME_REG;
|
||
|
end if;
|
||
|
|
||
|
if (addr_decoded4(4)='1') then
|
||
| ... | ... | |
|
generic map (COUNT=>128)
|
||
|
port map(clk=>CLK49152,reset_n=>reset_n,enable_in=>enable_reset_min_max_pre,enable_out=>enable_reset_min_max);
|
||
|
|
||
|
process(adc_reg,adc_output,adc_valid)
|
||
|
process(adc_reg,adc_output,adc_valid,ADC_VOLUME_REG)
|
||
|
variable adc_shrunk : signed(20 downto 0);
|
||
|
begin
|
||
|
adc_next <= adc_reg;
|
||
|
|
||
|
if (adc_valid='1') then
|
||
|
adc_shrunk := signed(not(adc_output(20)) & adc_output(19 downto 0));
|
||
|
adc_next <= adc_shrunk(18 downto (18-16+1)); --*2
|
||
|
case ADC_VOLUME_REG is
|
||
|
when "01" =>
|
||
|
adc_next <= adc_shrunk(20 downto (20-16+1)); --*1
|
||
|
when "10" =>
|
||
|
adc_next <= adc_shrunk(19 downto (19-16+1)); --*2
|
||
|
when "11" =>
|
||
|
adc_next <= adc_shrunk(18 downto (18-16+1)); --*4
|
||
|
when others =>
|
||
|
adc_next <= (others=>'0');
|
||
|
end case;
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
| ... | ... | |
|
end if;
|
||
|
end process;
|
||
|
|
||
|
process(adc_reg,adc_enabled_reg,adc_out_signed,SIO_RXD_SYNC)
|
||
|
process(adc_reg,adc_enabled_reg,adc_out_signed,SIO_RXD_SYNC,SIO_DATA_VOLUME_REG)
|
||
|
begin
|
||
|
adc_use_next <= adc_use_reg;
|
||
|
if (adc_enabled_reg>=32) then
|
||
|
adc_use_next <= adc_out_signed;
|
||
|
else
|
||
|
adc_use_next(11) <= SIO_RXD_SYNC;
|
||
|
case SIO_DATA_VOLUME_REG is
|
||
|
when "01" =>
|
||
|
adc_use_next(10) <= SIO_RXD_SYNC;
|
||
|
when "10" =>
|
||
|
adc_use_next(11) <= SIO_RXD_SYNC;
|
||
|
when "11" =>
|
||
|
adc_use_next(12) <= SIO_RXD_SYNC;
|
||
|
when others =>
|
||
|
end case;
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
| ... | ... | |
|
end generate adc_on;
|
||
|
|
||
|
adc_off : if enable_adc=0 generate
|
||
|
SIO_AUDIO(15 downto 12) <= (others=>'0');
|
||
|
SIO_AUDIO(11) <= SIO_RXD_SYNC;
|
||
|
SIO_AUDIO(10 downto 0) <= (others=>'0');
|
||
|
process(SIO_DATA_VOLUME_REG)
|
||
|
begin
|
||
|
SIO_AUDIO(15 downto 0) <= (others=>'0');
|
||
|
|
||
|
case SIO_DATA_VOLUME_REG is
|
||
|
when "01" =>
|
||
|
SIO_AUDIO(10) <= SIO_RXD_SYNC;
|
||
|
when "10" =>
|
||
|
SIO_AUDIO(11) <= SIO_RXD_SYNC;
|
||
|
when "11" =>
|
||
|
SIO_AUDIO(12) <= SIO_RXD_SYNC;
|
||
|
when others =>
|
||
|
end case;
|
||
|
end process;
|
||
|
end generate adc_off;
|
||
|
|
||
|
paddle_lvds_on : if paddle_lvds=1 generate
|
||
Added volume for SIO DATA and ADC