1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-01-11 23:43:09 +00:00

Vectrex: enable speech - works in Verzerk!

This commit is contained in:
Gyorgy Szombathelyi 2019-05-27 21:39:49 +02:00
parent 19455ac76c
commit c6acd56b20
4 changed files with 64 additions and 10 deletions

View File

@ -65,8 +65,8 @@ module YM2149
);
assign ACTIVE = ~ymreg[7][5:0];
assign IOA_out = ymreg[14];
assign IOB_out = ymreg[15];
assign IOA_out = ymreg[7][6] ? ymreg[14] : 8'hff;
assign IOB_out = ymreg[7][7] ? ymreg[15] : 8'hff;
reg [7:0] addr;
reg [7:0] ymreg[16];

View File

@ -372,7 +372,8 @@ architecture syn of vectrex is
signal pot : signed(7 downto 0);
signal compare : std_logic;
signal players_switches : std_logic_vector(7 downto 0);
signal ay_ioa_out : std_logic_vector(7 downto 0);
signal vectrex_bd_rate_div : std_logic_vector(7 downto 0) := X"00";
signal vectrex_serial_bit_in : std_logic;
signal vectrex_serial_bit_in_d : std_logic;
@ -772,6 +773,59 @@ audio_1 <= ("00"&ay_chan_a) +
audio_out <= "000"&audio_1(9 downto 3) + audio_speech;
-- vectrex just toggle port A forced/high Z to produce serial data
-- when in high Z vectrex sense port A to get speech chip ready for new byte
vectrex_serial_bit_in <= ay_ioa_out(4);
-- get serial data from vectrex joystick port
process (cpu_clock, reset)
begin
if reset='1' then
vectrex_bd_rate_div <= X"00";
elsif rising_edge(clock_24) then
if cpu_clock_en = '1' then
vectrex_serial_bit_in_d <= vectrex_serial_bit_in;
if vectrex_serial_bit_in /= vectrex_serial_bit_in_d then -- reset baud counter on either edge
vectrex_bd_rate_div <= X"00";
else
if vectrex_bd_rate_div = X"9B" then -- 1.5MHz/156 = 9615kHz
vectrex_bd_rate_div <= X"00";
else
vectrex_bd_rate_div <= vectrex_bd_rate_div + '1';
end if;
end if;
if vectrex_bd_rate_div = X"4E" then
vectrex_serial_data_shift <= vectrex_serial_bit_in & vectrex_serial_data_shift(7 downto 1); -- serial is lsb first (ok speakjet/vecvoice/vecvox)
if vectrex_serial_bit_cnt = X"0" and vectrex_serial_bit_in = '0' then
vectrex_serial_bit_cnt <= X"1";
vectrex_serial_byte_rdy <= '0';
end if;
if vectrex_serial_bit_cnt > X"0" then
vectrex_serial_bit_cnt <= vectrex_serial_bit_cnt + '1';
end if;
if vectrex_serial_bit_cnt = X"A" then
vectrex_serial_bit_cnt <= X"0";
end if;
end if;
if vectrex_bd_rate_div = X"60" then
if vectrex_serial_bit_cnt = X"9" then
vectrex_serial_byte_rdy <= '1';
vectrex_serial_byte_out <= vectrex_serial_data_shift;
end if;
end if;
end if;
end if;
end process;
frame <= frame_line;
---------------------------
@ -914,7 +968,7 @@ port map(
ACTIVE => open,
IOA_in => players_switches,
IOA_out => open,
IOA_out => ay_ioa_out,
IOB_in => (others => '0'),
IOB_out => open

View File

@ -34,9 +34,9 @@ module vectrex_mist
localparam CONF_STR = {
"Vectrex;BINVECROM;",
"O2,Show Frame,Yes,No;",
"O3,Skip Logo,Yes,No;",
"O4,Second Joystick, Player 2, Player 1;",
// "O5,Speech Mode,No,Yes;",
"O3,Skip Logo,Yes,No;",
"O4,Joystick swap,Off,On;",
"O5,Second port,Joystick,Speech;",
// "O23,Phosphor persistance,1,2,3,4;",
// "O8,Overburn,No,Yes;",
"T6,Reset;",
@ -132,7 +132,7 @@ vectrex vectrex (
.video_csync ( cs ),
.video_hblank ( hb ),
.video_vblank ( vb ),
// .speech_mode ( status[5] ),
.speech_mode ( status[5] ),
.video_hs ( hs ),
.video_vs ( vs ),
.frame ( frame_line ),

View File

@ -344,7 +344,6 @@ set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON
set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION ON
set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION ON
set_global_assignment -name USE_SIGNALTAP_FILE output_files/sdram.stp
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
set_global_assignment -name SDC_FILE vectrex_MiST.out.sdc
set_global_assignment -name SYSTEMVERILOG_FILE rtl/vectrex_mist.sv
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
@ -364,4 +363,5 @@ set_global_assignment -name VHDL_FILE rtl/vectrex_speakjet.vhd
set_global_assignment -name SYSTEMVERILOG_FILE rtl/YM2149.sv
set_global_assignment -name VERILOG_FILE rtl/osd.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/rgb2ypbpr.sv
set_global_assignment -name SIGNALTAP_FILE output_files/sdram.stp
set_global_assignment -name SIGNALTAP_FILE output_files/sdram.stp
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top