From aac73d45c6de16fbc6d0eec8259ab6ccac7666ac Mon Sep 17 00:00:00 2001 From: Gehstock Date: Fri, 9 Nov 2018 11:36:44 +0100 Subject: [PATCH] Some Work on Sg1000 --- Console_MiST/Atari - 7800_TeST/Atari7800.qws | Bin 2082 -> 0 bytes Console_MiST/Nintendo - Gameboy_MiST/gb.qsf | 2 +- Console_MiST/Sega - SG1000/ReadMe.txt | 1 + Console_MiST/Sega - SG1000/Schematic/card.png | Bin 0 -> 7177 bytes .../Sega - SG1000/{ => Schematic}/sgcon.png | Bin .../Sega - SG1000/{ => Schematic}/sgcpu.png | Bin .../Sega - SG1000/{ => Schematic}/sgio.png | Bin .../Sega - SG1000/{ => Schematic}/sgjoy.png | Bin .../Sega - SG1000/{ => Schematic}/sgpsg.png | Bin .../Sega - SG1000/{ => Schematic}/sgvdp.png | Bin .../Sega - SG1000/Snapshot/sg1000.rbf | Bin 222300 -> 0 bytes Console_MiST/Sega - SG1000/rtl/RAM2K.qip | 3 - Console_MiST/Sega - SG1000/rtl/RAM2K.v | 177 --- Console_MiST/Sega - SG1000/rtl/SG1000_MiST.sv | 41 +- Console_MiST/Sega - SG1000/rtl/build_id.v | 4 +- Console_MiST/Sega - SG1000/rtl/cart.sv | 42 +- .../Sega - SG1000/rtl/color_encoder.vhd | 136 +++ .../rtl/greybox_tmp/cbx_args.txt | 17 - Console_MiST/Sega - SG1000/rtl/psg/psg.vhd | 5 +- .../rtl/roms/[BIOS]OthelloMultivision.bin | Bin 0 -> 16384 bytes .../rtl/roms/[BIOS]OthelloMultivision.hex | 1025 +++++++++++++++++ Console_MiST/Sega - SG1000/rtl/sg1000_top.sv | 73 +- Console_MiST/Sega - SG1000/rtl/tv_video.vhd | 121 ++ Console_MiST/Sega - SG1000/rtl/yuv_table.vhd | 229 ++++ Console_MiST/Sega - SG1000/sg1000.qsf | 4 +- Console_MiST/Sega - SG1000/sg1000.srf | 1 + 26 files changed, 1616 insertions(+), 265 deletions(-) delete mode 100644 Console_MiST/Atari - 7800_TeST/Atari7800.qws create mode 100644 Console_MiST/Sega - SG1000/ReadMe.txt create mode 100644 Console_MiST/Sega - SG1000/Schematic/card.png rename Console_MiST/Sega - SG1000/{ => Schematic}/sgcon.png (100%) rename Console_MiST/Sega - SG1000/{ => Schematic}/sgcpu.png (100%) rename Console_MiST/Sega - SG1000/{ => Schematic}/sgio.png (100%) rename Console_MiST/Sega - SG1000/{ => Schematic}/sgjoy.png (100%) rename Console_MiST/Sega - SG1000/{ => Schematic}/sgpsg.png (100%) rename Console_MiST/Sega - SG1000/{ => Schematic}/sgvdp.png (100%) delete mode 100644 Console_MiST/Sega - SG1000/Snapshot/sg1000.rbf delete mode 100644 Console_MiST/Sega - SG1000/rtl/RAM2K.qip delete mode 100644 Console_MiST/Sega - SG1000/rtl/RAM2K.v create mode 100644 Console_MiST/Sega - SG1000/rtl/color_encoder.vhd delete mode 100644 Console_MiST/Sega - SG1000/rtl/greybox_tmp/cbx_args.txt create mode 100644 Console_MiST/Sega - SG1000/rtl/roms/[BIOS]OthelloMultivision.bin create mode 100644 Console_MiST/Sega - SG1000/rtl/roms/[BIOS]OthelloMultivision.hex create mode 100644 Console_MiST/Sega - SG1000/rtl/tv_video.vhd create mode 100644 Console_MiST/Sega - SG1000/rtl/yuv_table.vhd diff --git a/Console_MiST/Atari - 7800_TeST/Atari7800.qws b/Console_MiST/Atari - 7800_TeST/Atari7800.qws deleted file mode 100644 index f178369c99c36ac667d04882d4e8a6d7fcc8fd14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2082 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 LNkvXXu0mjfjaMa} literal 0 HcmV?d00001 diff --git a/Console_MiST/Sega - SG1000/sgcon.png b/Console_MiST/Sega - SG1000/Schematic/sgcon.png similarity index 100% rename from Console_MiST/Sega - SG1000/sgcon.png rename to Console_MiST/Sega - SG1000/Schematic/sgcon.png diff --git a/Console_MiST/Sega - SG1000/sgcpu.png b/Console_MiST/Sega - SG1000/Schematic/sgcpu.png similarity index 100% rename from Console_MiST/Sega - SG1000/sgcpu.png rename to Console_MiST/Sega - SG1000/Schematic/sgcpu.png diff --git a/Console_MiST/Sega - SG1000/sgio.png b/Console_MiST/Sega - SG1000/Schematic/sgio.png similarity index 100% rename from Console_MiST/Sega - SG1000/sgio.png rename to Console_MiST/Sega - SG1000/Schematic/sgio.png diff --git a/Console_MiST/Sega - SG1000/sgjoy.png b/Console_MiST/Sega - SG1000/Schematic/sgjoy.png similarity index 100% rename from Console_MiST/Sega - SG1000/sgjoy.png rename to Console_MiST/Sega - SG1000/Schematic/sgjoy.png diff --git a/Console_MiST/Sega - SG1000/sgpsg.png b/Console_MiST/Sega - SG1000/Schematic/sgpsg.png similarity index 100% rename from Console_MiST/Sega - SG1000/sgpsg.png rename to Console_MiST/Sega - SG1000/Schematic/sgpsg.png diff --git a/Console_MiST/Sega - SG1000/sgvdp.png b/Console_MiST/Sega - SG1000/Schematic/sgvdp.png similarity index 100% rename from Console_MiST/Sega - SG1000/sgvdp.png rename to Console_MiST/Sega - SG1000/Schematic/sgvdp.png diff --git a/Console_MiST/Sega - SG1000/Snapshot/sg1000.rbf b/Console_MiST/Sega - SG1000/Snapshot/sg1000.rbf deleted file mode 100644 index cfacb7c9d365fec694c3ad38b0723c5c06543d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222300 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'0'); + + signal y1: std_logic_vector (5 downto 0); + signal u1: std_logic_vector (5 downto 0); + signal v1: std_logic_vector (5 downto 0); + signal y : unsigned (5 downto 0); + signal u : unsigned (5 downto 0); + signal v : unsigned (5 downto 0); + + signal uv : unsigned (5 downto 0); + +begin + yuv_table_inst : yuv_table + port map ( + color => color, + y => y1, + u => u1, + v => v1); + + process (clk, sync, line_visible) + begin + if rising_edge(clk) then + if sync='0' then + counter <= 0; + --phase <= (others=>'0'); + else + if line_visible='1' then + counter <= counter+1; + end if; + end if; + if pal='1' then + phase <= phase+145281; + else + phase <= phase+117295; + end if; + end if; + end process; + + process (clk,counter,color) + --variable yuv : unsigned(17 downto 0); + begin + if rising_edge(clk) then + -- color burst + if counter>=2*29 and counter<2*(29+72) then + -- black + y <= "000000"; + -- reference phase + if pal='1' then + u <= "111100"; + v <= "000100"; + else + u <= "111000"; + v <= "000000"; + end if; + + -- visible pixels + elsif counter>=2*(29+72+85) and counter<2*(29+72+85+1664) then + --yuv := yuv_table(to_integer(unsigned(color))); + y <= unsigned(y1); + u <= unsigned(u1); + v <= unsigned(v1); + + -- front porch, sync and back porch + else + y <= (others=>'0'); + u <= (others=>'0'); + v <= (others=>'0'); + end if; + end if; + end process; + + process (phase, line_even, u, v) + begin + if pal='1' then + case line_even&phase(20 downto 19) is + when "000" => uv <= u; + when "001" => uv <= v; + when "010" => uv <= 0-u; + when "011" => uv <= 0-v; + when "100" => uv <= u; + when "101" => uv <= 0-v; + when "110" => uv <= 0-u; + when "111" => uv <= v; + when others => uv <= (others=>'0'); + end case; + else + case phase(20 downto 19) is + when "00" => uv <= u; + when "01" => uv <= 0-v; + when "10" => uv <= 0-u; + when "11" => uv <= v; + when others => uv <= (others=>'0'); + end case; + end if; + end process; + + process (clk,sync,y,uv) + begin + if rising_edge(clk) then + outputs <= std_logic_vector(("0"&sync&"0000")+y+uv); + end if; + end process; + +end Behavioral; + diff --git a/Console_MiST/Sega - SG1000/rtl/greybox_tmp/cbx_args.txt b/Console_MiST/Sega - SG1000/rtl/greybox_tmp/cbx_args.txt deleted file mode 100644 index 1fc21826..00000000 --- a/Console_MiST/Sega - SG1000/rtl/greybox_tmp/cbx_args.txt +++ /dev/null @@ -1,17 +0,0 @@ -CLOCK_ENABLE_INPUT_A=NORMAL -CLOCK_ENABLE_OUTPUT_A=NORMAL -INTENDED_DEVICE_FAMILY="Cyclone III" -NUMWORDS_A=2048 -OPERATION_MODE=SINGLE_PORT -OUTDATA_ACLR_A=NONE -OUTDATA_REG_A=CLOCK0 -POWER_UP_UNINITIALIZED=FALSE -READ_DURING_WRITE_MODE_PORT_A=NEW_DATA_NO_NBE_READ -WIDTHAD_A=11 -WIDTH_A=8 -WIDTH_BYTEENA_A=1 -DEVICE_FAMILY="Cyclone III" -address_a -clock0 -clocken0 -q_a diff --git a/Console_MiST/Sega - SG1000/rtl/psg/psg.vhd b/Console_MiST/Sega - SG1000/rtl/psg/psg.vhd index dd4bba90..688dcd10 100644 --- a/Console_MiST/Sega - SG1000/rtl/psg/psg.vhd +++ b/Console_MiST/Sega - SG1000/rtl/psg/psg.vhd @@ -5,6 +5,7 @@ use IEEE.NUMERIC_STD.ALL; entity psg is port (clk : in STD_LOGIC; WR_n : in STD_LOGIC; + CS_n : in STD_LOGIC; D_in : in STD_LOGIC_VECTOR (7 downto 0); outputs: out STD_LOGIC_VECTOR (5 downto 0) ); @@ -91,9 +92,9 @@ begin end process; clk32 <= std_logic(clk_divide(5)); - process (clk, WR_n) + process (clk, WR_n, CS_n) begin - if rising_edge(clk) and WR_n='0' then + if rising_edge(clk) and WR_n='0' and CS_n='0' then if D_in(7)='1' then case D_in(6 downto 4) is when "000" => tone0(3 downto 0) <= D_in(3 downto 0); diff --git a/Console_MiST/Sega - SG1000/rtl/roms/[BIOS]OthelloMultivision.bin b/Console_MiST/Sega - SG1000/rtl/roms/[BIOS]OthelloMultivision.bin new file mode 100644 index 0000000000000000000000000000000000000000..f08d7607ac32096b00ba6faa39da8cf37ce783e5 GIT binary patch literal 16384 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 kU@$TW9}XPIE%D#4{*Tx`_ '0'); + signal vcount: unsigned(8 downto 0) := (others => '0'); + signal y9: unsigned(8 downto 0); + + signal in_vbl: std_logic; + signal screen_sync: std_logic; + signal vbl_sync: std_logic; + + signal sync: std_logic; + signal line_visible: std_logic; + signal line_even: std_logic; + +begin + csync <= sync; + + process (clk8) + begin + if rising_edge(clk8) then + if hcount=507 then + hcount <= (others => '0'); + if vcount=261 then + vcount <= (others=>'0'); + else + vcount <= vcount + 1; + end if; + else + hcount <= hcount + 1; + end if; + end if; + end process; + + process (hcount) + begin + if hcount<38 then + screen_sync <= '0'; + else + screen_sync <= '1'; + end if; + end process; + + in_vbl <= '1' when vcount<9 else '0'; + + x <= hcount-166; + y9 <= vcount-40; + y <= y9(7 downto 0); + vblank <= '1' when hcount=0 and vcount=0 else '0'; + hblank <= '1' when hcount=0 else '0'; + line_visible <= not in_vbl; + line_even <= not vcount(0); + + process (vcount,hcount) + begin + if vcount<3 or (vcount>=6 and vcount<9) then + -- _^^^^^_^^^^^ : low pulse = 2.35us + if hcount<19 or (hcount>=254 and hcount<254+19) then + vbl_sync <= '0'; + else + vbl_sync <= '1'; + end if; + else + -- ____^^ : high pulse = 4.7us + if hcount<(254-38) or (hcount>=254 and hcount<508-38) then + vbl_sync <= '0'; + else + vbl_sync <= '1'; + end if; + end if; + end process; + + process (in_vbl,screen_sync,vbl_sync) + begin + if in_vbl='1' then + sync <= vbl_sync; + else + sync <= screen_sync; + end if; + end process; + + encode_inst: color_encoder + port map ( + clk => clk64, + pal => pal, + sync => sync, + line_visible => line_visible, + line_even => line_even, + color => color, + outputs => video); + +end Behavioral; + diff --git a/Console_MiST/Sega - SG1000/rtl/yuv_table.vhd b/Console_MiST/Sega - SG1000/rtl/yuv_table.vhd new file mode 100644 index 00000000..4279b9ac --- /dev/null +++ b/Console_MiST/Sega - SG1000/rtl/yuv_table.vhd @@ -0,0 +1,229 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +entity yuv_table is + Port (color : in std_logic_vector (5 downto 0); + y : out std_logic_vector (5 downto 0); + u : out std_logic_vector (5 downto 0); + v : out std_logic_vector (5 downto 0)); +end yuv_table; + +architecture Behavioral of yuv_table is +begin + + process (color) + begin + case color is + when "000000" => y <= "000000"; + when "000001" => y <= "000011"; + when "000010" => y <= "000110"; + when "000011" => y <= "001001"; + when "000100" => y <= "000110"; + when "000101" => y <= "001001"; + when "000110" => y <= "001100"; + when "000111" => y <= "001111"; + when "001000" => y <= "001100"; + when "001001" => y <= "001111"; + when "001010" => y <= "010010"; + when "001011" => y <= "010101"; + when "001100" => y <= "010010"; + when "001101" => y <= "010101"; + when "001110" => y <= "011000"; + when "001111" => y <= "011011"; + when "010000" => y <= "000001"; + when "010001" => y <= "000100"; + when "010010" => y <= "000111"; + when "010011" => y <= "001010"; + when "010100" => y <= "000111"; + when "010101" => y <= "001010"; + when "010110" => y <= "001101"; + when "010111" => y <= "010000"; + when "011000" => y <= "001101"; + when "011001" => y <= "010000"; + when "011010" => y <= "010011"; + when "011011" => y <= "010110"; + when "011100" => y <= "010011"; + when "011101" => y <= "010110"; + when "011110" => y <= "011001"; + when "011111" => y <= "011100"; + when "100000" => y <= "000010"; + when "100001" => y <= "000101"; + when "100010" => y <= "001000"; + when "100011" => y <= "001011"; + when "100100" => y <= "001000"; + when "100101" => y <= "001011"; + when "100110" => y <= "001110"; + when "100111" => y <= "010001"; + when "101000" => y <= "001110"; + when "101001" => y <= "010001"; + when "101010" => y <= "010100"; + when "101011" => y <= "010111"; + when "101100" => y <= "010100"; + when "101101" => y <= "010111"; + when "101110" => y <= "011010"; + when "101111" => y <= "011101"; + when "110000" => y <= "000011"; + when "110001" => y <= "000110"; + when "110010" => y <= "001001"; + when "110011" => y <= "001100"; + when "110100" => y <= "001001"; + when "110101" => y <= "001100"; + when "110110" => y <= "001111"; + when "110111" => y <= "010010"; + when "111000" => y <= "001111"; + when "111001" => y <= "010010"; + when "111010" => y <= "010101"; + when "111011" => y <= "011000"; + when "111100" => y <= "010101"; + when "111101" => y <= "011000"; + when "111110" => y <= "011011"; + when "111111" => y <= "011110"; + when others => + end case; + end process; + + process (color) + begin + case color is + when "000000" => u <= "000000"; + when "000001" => u <= "111111"; + when "000010" => u <= "111101"; + when "000011" => u <= "111100"; + when "000100" => u <= "111101"; + when "000101" => u <= "111100"; + when "000110" => u <= "111010"; + when "000111" => u <= "111001"; + when "001000" => u <= "111010"; + when "001001" => u <= "111001"; + when "001010" => u <= "110111"; + when "001011" => u <= "110110"; + when "001100" => u <= "110111"; + when "001101" => u <= "110110"; + when "001110" => u <= "110100"; + when "001111" => u <= "110011"; + when "010000" => u <= "000100"; + when "010001" => u <= "000011"; + when "010010" => u <= "000001"; + when "010011" => u <= "000000"; + when "010100" => u <= "000001"; + when "010101" => u <= "000000"; + when "010110" => u <= "111111"; + when "010111" => u <= "111101"; + when "011000" => u <= "111111"; + when "011001" => u <= "111101"; + when "011010" => u <= "111100"; + when "011011" => u <= "111010"; + when "011100" => u <= "111100"; + when "011101" => u <= "111010"; + when "011110" => u <= "111001"; + when "011111" => u <= "110111"; + when "100000" => u <= "001001"; + when "100001" => u <= "000111"; + when "100010" => u <= "000110"; + when "100011" => u <= "000100"; + when "100100" => u <= "000110"; + when "100101" => u <= "000100"; + when "100110" => u <= "000011"; + when "100111" => u <= "000001"; + when "101000" => u <= "000011"; + when "101001" => u <= "000001"; + when "101010" => u <= "000000"; + when "101011" => u <= "111111"; + when "101100" => u <= "000000"; + when "101101" => u <= "111111"; + when "101110" => u <= "111101"; + when "101111" => u <= "111100"; + when "110000" => u <= "001101"; + when "110001" => u <= "001100"; + when "110010" => u <= "001010"; + when "110011" => u <= "001001"; + when "110100" => u <= "001010"; + when "110101" => u <= "001001"; + when "110110" => u <= "000111"; + when "110111" => u <= "000110"; + when "111000" => u <= "000111"; + when "111001" => u <= "000110"; + when "111010" => u <= "000100"; + when "111011" => u <= "000011"; + when "111100" => u <= "000100"; + when "111101" => u <= "000011"; + when "111110" => u <= "000001"; + when "111111" => u <= "000000"; + when others => + end case; + end process; + + process (color) + begin + case color is + when "000000" => v <= "000000"; + when "000001" => v <= "000110"; + when "000010" => v <= "001100"; + when "000011" => v <= "010010"; + when "000100" => v <= "111011"; + when "000101" => v <= "000001"; + when "000110" => v <= "000111"; + when "000111" => v <= "001101"; + when "001000" => v <= "110110"; + when "001001" => v <= "111100"; + when "001010" => v <= "000010"; + when "001011" => v <= "001000"; + when "001100" => v <= "110001"; + when "001101" => v <= "110111"; + when "001110" => v <= "111101"; + when "001111" => v <= "000011"; + when "010000" => v <= "111111"; + when "010001" => v <= "000101"; + when "010010" => v <= "001011"; + when "010011" => v <= "010001"; + when "010100" => v <= "111010"; + when "010101" => v <= "000000"; + when "010110" => v <= "000110"; + when "010111" => v <= "001100"; + when "011000" => v <= "110101"; + when "011001" => v <= "111011"; + when "011010" => v <= "000001"; + when "011011" => v <= "000111"; + when "011100" => v <= "110000"; + when "011101" => v <= "110110"; + when "011110" => v <= "111100"; + when "011111" => v <= "000010"; + when "100000" => v <= "111110"; + when "100001" => v <= "000100"; + when "100010" => v <= "001010"; + when "100011" => v <= "010000"; + when "100100" => v <= "111001"; + when "100101" => v <= "111111"; + when "100110" => v <= "000101"; + when "100111" => v <= "001011"; + when "101000" => v <= "110100"; + when "101001" => v <= "111010"; + when "101010" => v <= "000000"; + when "101011" => v <= "000110"; + when "101100" => v <= "101111"; + when "101101" => v <= "110101"; + when "101110" => v <= "111011"; + when "101111" => v <= "000001"; + when "110000" => v <= "111101"; + when "110001" => v <= "000011"; + when "110010" => v <= "001001"; + when "110011" => v <= "001111"; + when "110100" => v <= "111000"; + when "110101" => v <= "111110"; + when "110110" => v <= "000100"; + when "110111" => v <= "001010"; + when "111000" => v <= "110011"; + when "111001" => v <= "111001"; + when "111010" => v <= "111111"; + when "111011" => v <= "000101"; + when "111100" => v <= "101110"; + when "111101" => v <= "110100"; + when "111110" => v <= "111010"; + when "111111" => v <= "000000"; + when others => + end case; + end process; + + +end Behavioral; + diff --git a/Console_MiST/Sega - SG1000/sg1000.qsf b/Console_MiST/Sega - SG1000/sg1000.qsf index 16734439..2577ae9d 100644 --- a/Console_MiST/Sega - SG1000/sg1000.qsf +++ b/Console_MiST/Sega - SG1000/sg1000.qsf @@ -166,8 +166,10 @@ set_global_assignment -name VHDL_FILE rtl/t80/T80.vhd set_global_assignment -name VERILOG_FILE rtl/TTL74_257.v set_global_assignment -name SYSTEMVERILOG_FILE rtl/keyboard.sv set_global_assignment -name SYSTEMVERILOG_FILE rtl/cart.sv +set_global_assignment -name VHDL_FILE rtl/tv_video.vhd +set_global_assignment -name VHDL_FILE rtl/color_encoder.vhd +set_global_assignment -name VHDL_FILE rtl/yuv_table.vhd set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top -set_global_assignment -name QIP_FILE rtl/RAM2K.qip set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Console_MiST/Sega - SG1000/sg1000.srf b/Console_MiST/Sega - SG1000/sg1000.srf index b41fcc33..2ac32dec 100644 --- a/Console_MiST/Sega - SG1000/sg1000.srf +++ b/Console_MiST/Sega - SG1000/sg1000.srf @@ -5,3 +5,4 @@ { "" "" "" "Net \"Cart_ram_Out\" at sg1000_top.sv(25) has no driver or initial value, using a default initial value '0'" { } { } 0 10030 "" 0 0 "Quartus II" 0 -1 0 ""} { "" "" "" "VHDL Process Statement warning at vdp_main.vhd(117): signal \"mask_column0\" is read inside the Process Statement but isn't in the Process Statement's sensitivity list" { } { } 0 10492 "" 0 0 "Quartus II" 0 -1 0 ""} { "" "" "" "*" { } { } 0 14284 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 10235 "" 0 0 "Quartus II" 0 -1 0 ""}