Fixed vga & sound via the buzzer. A & D output on leds

This commit is contained in:
byrtolet 2018-08-29 19:48:40 +03:00
parent 00515cd931
commit 64673306fa
6 changed files with 530 additions and 445 deletions

View File

@ -1,5 +1,5 @@
all:
./makemy.sh
time -p ./makemy.sh |tee out
clean:
rm -rf COREn.ZX1 _impact.cmd _impact.log makemy.sh~ _ngo oric.bgn oric.bit oric_bitgen.xwbt \
oric.bld oric.drc ORIC.lso oric_map.map oric_map.mrp oric_map.ncd oric_map.ngm ORIC_map.xrpt \
@ -7,3 +7,5 @@ clean:
oric_pad.txt oric.par ORIC_par.xrpt oric.pcf oric.ptwx oric_summary.xml oric.syr oric.twr \
oric.twx oric.unroutes oric_usage.xml oric.v4.bit oric.xpi ORIC_xst.xrpt out out.my par_usage_statistics.html \
projnav.tmp usage_statistics_webtalk.html webtalk.log xlnx_auto_0_xdb _xmsgs xst
last:
time -p ./makemylast.sh |tee out

View File

@ -15,3 +15,7 @@ vhdl work "../source/m6522.vhd"
vhdl work "../source/keyboard/keyboard.vhd"
vhdl work "../source/dac.vhd"
vhdl work "../source/oricatmos.vhd"
vhdl work "../source/led_multiplex.vhd"
vhdl work "../source/led_output.vhd"
vhdl work "../source/onebitadc.vhd"
vhdl work "../source/clkdiv.vhd"

View File

@ -3,22 +3,23 @@ NET "CLK_50" LOC="P126" | IOSTANDARD = LVCMOS25 | PERIOD=20.0ns;
#NET "testled" LOC="P10" | IOSTANDARD = LVCMOS25;
# Video output
NET O_VIDEO_R(2) LOC="P100" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
#NET O_VIDEO_R(1) LOC="P80" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
#NET O_VIDEO_R(0) LOC="P79" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
NET O_VIDEO_G(2) LOC="P99" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
#NET O_VIDEO_G(1) LOC="P83" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
#NET O_VIDEO_G(0) LOC="P82" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
NET O_VIDEO_B(2) LOC="P98" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
#NET O_VIDEO_B(1) LOC="P92" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
#NET O_VIDEO_B(0) LOC="P88" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
NET O_HSYNC LOC="P95" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
NET O_VSYNC LOC="P97" | IOSTANDARD = LVCMOS25 | DRIVE = 12 | SLEW = SLOW;
NET O_VIDEO_R(2) LOC="P100" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_VIDEO_R(1) LOC="P80" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_VIDEO_R(0) LOC="P79" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
NET O_VIDEO_G(2) LOC="P99" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_VIDEO_G(1) LOC="P83" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_VIDEO_G(0) LOC="P82" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
NET O_VIDEO_B(2) LOC="P98" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_VIDEO_B(1) LOC="P92" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_VIDEO_B(0) LOC="P88" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
NET O_HSYNC LOC="P95" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
NET O_VSYNC LOC="P97" | IOSTANDARD = LVCMOS25 | DRIVE = 6 | SLEW = SLOW;
#NET O_NTSC LOC="P66" | IOSTANDARD = LVCMOS25;
#NET O_PAL LOC="P67" | IOSTANDARD = LVCMOS25;
# Audio
NET "AUDIO_OUT" LOC="P94" | IOSTANDARD = LVCMOS25;
NET "AUDIO_OUT2" LOC="P8" | IOSTANDARD = LVCMOS25;
NET "K7_TAPEOUT" LOC="P115" | IOSTANDARD = LVCMOS25;
NET "K7_TAPEIN" LOC="P116" | IOSTANDARD = LVCMOS25;
@ -49,6 +50,7 @@ NET "PS2DAT1" LOC="P104" | IOSTANDARD = LVCMOS25 | PULLUP;
#NET "sram_addr<17>" LOC="P140" | IOSTANDARD = LVCMOS25;
#NET "sram_addr<18>" LOC="P142" | IOSTANDARD = LVCMOS25;
#NET "sram_addr<19>" LOC="P105" | IOSTANDARD = LVCMOS25;
#NET "sram_addr<20>" LOC="P143" | IOSTANDARD = LVCMOS25;
#NET "sram_data<0>" LOC="P132" | IOSTANDARD = LVCMOS25;
@ -76,6 +78,26 @@ NET "PS2DAT1" LOC="P104" | IOSTANDARD = LVCMOS25 | PULLUP;
#NET "sd_mosi" LOC="P74" | IOSTANDARD = LVCMOS25;
#NET "sd_miso" LOC="P78" | IOSTANDARD = LVCMOS25;
NET "segment(0)" LOC="P81" | IOSTANDARD = LVCMOS25;
NET "segment(1)" LOC="P80" | IOSTANDARD = LVCMOS25;
NET "segment(2)" LOC="P79" | IOSTANDARD = LVCMOS25;
NET "segment(3)" LOC="P78" | IOSTANDARD = LVCMOS25;
NET "segment(4)" LOC="P75" | IOSTANDARD = LVCMOS25;
NET "segment(5)" LOC="P74" | IOSTANDARD = LVCMOS25;
NET "segment(6)" LOC="P12" | IOSTANDARD = LVCMOS25;
NET "segment(7)" LOC="P14" | IOSTANDARD = LVCMOS25;
NET "position(0)" LOC="P82" | IOSTANDARD = LVCMOS25;
NET "position(1)" LOC="P83" | IOSTANDARD = LVCMOS25;
NET "position(2)" LOC="P84" | IOSTANDARD = LVCMOS25;
NET "position(3)" LOC="P85" | IOSTANDARD = LVCMOS25;
NET "position(4)" LOC="P87" | IOSTANDARD = LVCMOS25;
NET "position(5)" LOC="P88" | IOSTANDARD = LVCMOS25;
NET "position(6)" LOC="P92" | IOSTANDARD = LVCMOS25;
NET "position(7)" LOC="P93" | IOSTANDARD = LVCMOS25;
# JOYSTICK
#NET "joyup" LOC="P1" | IOSTANDARD = LVCMOS25 | PULLUP;
#NET "joydown" LOC="P5" | IOSTANDARD = LVCMOS25 | PULLUP;

View File

@ -31,19 +31,21 @@ port (
-- Audio out
AUDIO_OUT : out std_logic;
-- Audio out 2
AUDIO_OUT2 : out std_logic;
-- VGA out
O_VIDEO_R : inout std_logic_vector(2 downto 0); --Q
O_VIDEO_G : inout std_logic_vector(2 downto 0); --Q
O_VIDEO_B : inout std_logic_vector(2 downto 0); --Q
O_HSYNC : inout std_logic;
O_VSYNC : inout std_logic;
O_VIDEO_R : out std_logic_vector(2 downto 2); --Q
O_VIDEO_G : out std_logic_vector(2 downto 2); --Q
O_VIDEO_B : out std_logic_vector(2 downto 2); --Q
O_HSYNC : out std_logic;
O_VSYNC : out std_logic;
D_VIDEO_R : out std_logic_vector(2 downto 0); --Q
D_VIDEO_G : out std_logic_vector(2 downto 0); --Q
D_VIDEO_B : out std_logic_vector(2 downto 0); --Q
D_HSYNC : out std_logic;
D_VSYNC : out std_logic;
--D_VIDEO_R : out std_logic_vector(2 downto 0); --Q
--D_VIDEO_G : out std_logic_vector(2 downto 0); --Q
--D_VIDEO_B : out std_logic_vector(2 downto 0); --Q
--D_HSYNC : out std_logic;
--D_VSYNC : out std_logic;
VIDEO_SYNC : out std_logic;
@ -73,7 +75,9 @@ port (
O_PAL : out std_logic; --Q
-- Clk master
CLK_50 : in std_logic -- MASTER CLK
CLK_50 : in std_logic; -- MASTER CLK
segment : out std_logic_vector( 7 downto 0);
position : out std_logic_vector( 7 downto 0)
);
end;
@ -100,6 +104,7 @@ architecture RTL of ORIC is
signal CPU_ADDR : std_logic_vector(23 downto 0);
signal CPU_DI : std_logic_vector( 7 downto 0);
signal CPU_DO : std_logic_vector( 7 downto 0);
signal DATA_BUS_OUT:std_logic_vector(7 downto 0);
signal cpu_rw : std_logic;
signal cpu_irq : std_logic;
signal ad : std_logic_vector(15 downto 0);
@ -128,6 +133,9 @@ architecture RTL of ORIC is
-- PSG
signal psg_bdir : std_logic; -- PSG read/write
signal PSG_OUT : std_logic_vector( 7 downto 0);
signal vaudio_out : std_logic_vector(7 downto 0);
-- ULA
signal ula_phi2 : std_logic;
@ -174,11 +182,11 @@ begin
-- generate all the system clocks required
-----------------------------------------------
D_VIDEO_R <= O_VIDEO_R;
D_VIDEO_G <= O_VIDEO_G;
D_VIDEO_B <= O_VIDEO_B;
D_HSYNC <= O_HSYNC;
D_VSYNC <= O_VSYNC;
--D_VIDEO_R <= O_VIDEO_R;
--D_VIDEO_G <= O_VIDEO_G;
--D_VIDEO_B <= O_VIDEO_B;
--D_HSYNC <= O_HSYNC;
--D_VSYNC <= O_VSYNC;
NMI_INT <= not I_NMI;
RESET_INT <= not I_RESET;
@ -360,13 +368,13 @@ begin
hC => 24, -- h back porch
hD => 240, -- visible video
-- vA => 34, -- v front porch (not used)
vA => 40, -- v front porch (not used)
vB => 2, -- v sync
vC => 20, -- v back porch
vD => 224, -- visible video
vC => 2, -- v back porch
vD => 240, -- visible video
hpad => 32, -- H black border
vpad => 32 -- V black border
vpad => 0 -- V black border
)
port map (
I_VIDEO(15 downto 12) => "0000",
@ -419,11 +427,18 @@ begin
O_NTSC <= '0';
O_PAL <= '1';
O_HSYNC <= ULA_SYNC;
O_VSYNC <= vs_int;
O_VIDEO_R <= ULA_VIDEO_R & ULA_VIDEO_R & ULA_VIDEO_R;
O_VIDEO_G <= ULA_VIDEO_G & ULA_VIDEO_G & ULA_VIDEO_G;
O_VIDEO_B <= ULA_VIDEO_B & ULA_VIDEO_B & ULA_VIDEO_B;
-- rgb output
--O_HSYNC <= ULA_SYNC;
--O_VSYNC <= vs_int;
--O_VIDEO_R(2) <= ULA_VIDEO_R;-- & ULA_VIDEO_R & ULA_VIDEO_R;
--O_VIDEO_G(2) <= ULA_VIDEO_G;-- & ULA_VIDEO_G & ULA_VIDEO_G;
--O_VIDEO_B(2) <= ULA_VIDEO_B;-- & ULA_VIDEO_B & ULA_VIDEO_B;
-- vga output
O_HSYNC <= HSync;
O_VSYNC <= VSync;
O_VIDEO_R(2) <= VideoR(3); -- ULA_VIDEO_R;-- & ULA_VIDEO_R & ULA_VIDEO_R;
O_VIDEO_G(2) <= VideoG(3); -- ULA_VIDEO_G;-- & ULA_VIDEO_G & ULA_VIDEO_G;
O_VIDEO_B(2) <= VideoB(3);-- ULA_VIDEO_B;-- & ULA_VIDEO_B & ULA_VIDEO_B;
----
--fQ
@ -527,13 +542,44 @@ begin
------------------------------------------------------------
-- Sigma Delta DAC
------------------------------------------------------------
inst_dac : entity work.DAC
port map (
clk_i => clk24,
resetn => loc_reset_n,
dac_i => PSG_OUT,
dac_o => AUDIO_OUT
dac_o => AUDIO_OUT2
);
-- this is my piezo output
onebit : entity work.XSP6X9_onebit
generic map (k => 21)
port map (
nreset => I_RESET,
clk => clk24,
input => PSG_OUT,
output => AUDIO_OUT,
voutput => vaudio_out
);
--process
--begin
-- wait until rising_edge(clk24);
-- AUDIO_OUT <= PSG_OUT(5);
--end process;
led_display : entity work.XSP6X9_Led_Output
port map (
clk => clk6,
inputs(7 downto 0) => DATA_BUS_OUT,
inputs(23 downto 8) => CPU_ADDR(15 downto 0),
--inputs(11 downto 8) => X"e",
--inputs(15 downto 12) => X"f",
--inputs(19 downto 16) => X"a",
--inputs(23 downto 20) => X"c",
inputs(27 downto 24) => PSG_OUT(3 downto 0),
inputs(31 downto 28) => PSG_OUT(7 downto 4),
segment => segment,
position => position
);
------------------------------------------------------------
@ -559,6 +605,15 @@ begin
cpu_di <= SRAM_DO;
end if;
end process;
process -- figure out ram
begin
wait until rising_edge(clk24);
if (cpu_rw = '1')then
DATA_BUS_OUT <= CPU_DI;
else
DATA_BUS_OUT <= CPU_DO;
end if;
end process;
------------------------------------------------------------
-- K7 PORT

View File

@ -58,7 +58,7 @@ entity VGA_SCANCONV is
hC : integer range 0 to 1023 := 48; -- h back porch
hD : integer range 0 to 1023 := 640; -- visible video
-- vA : integer range 0 to 1023 := 16; -- v front porch
vA : integer range 0 to 1023 := 16; -- v front porch
vB : integer range 0 to 1023 := 2; -- v sync
vC : integer range 0 to 1023 := 33; -- v back porch
vD : integer range 0 to 1023 := 480; -- visible video
@ -198,7 +198,7 @@ begin
begin
wait until rising_edge(CLK_x2);
-- V sync timing
if (vcnt < vB) then
if (vcnt < vB+vA) and (vcnt >= vA) then
O_VSYNC <= '0';
else
O_VSYNC <= '1';
@ -210,7 +210,7 @@ begin
begin
wait until rising_edge(CLK_x2);
-- visible video area doubled from the original game
if ((hcnt >= (hB + hC + hpad)) and (hcnt < (hB + hC + hD + hpad))) and ((vcnt > 2*(vB + vC + vpad)) and (vcnt <= 2*(vB + vC + vD + vpad))) then
if ((hcnt >= (hB + hC + hpad)) and (hcnt < (hB + hC + hD + hpad))) and ((vcnt > 2*(vA + vB + vC+vpad)) and (vcnt <= 2*(vA + vB + vC + vD + vpad))) then
hpos_o <= hpos_o + 1;
else
hpos_o <= (others => '0');
@ -222,7 +222,7 @@ begin
begin
wait until rising_edge(CLK_X2);
-- active video area 640x480 (VGA) after padding with blank borders
if ((hcnt >= (hB + hC)) and (hcnt < (hB + hC + hD + 2*hpad))) and ((vcnt > 2*(vB + vC)) and (vcnt <= 2*(vB + vC + vD + 2*vpad))) then
if ((hcnt >= (hB + hC)) and (hcnt < (hB + hC + hD + 2*hpad))) and ((vcnt > 2*(vA + vB + vC)) and (vcnt <= 2*(vA + vB + vC + vD + 2*vpad))) then
O_CMPBLK_N <= '1';
else
O_CMPBLK_N <= '0';

View File

@ -1,9 +1,11 @@
#!/bin/bash
#call %ruta_bat%mypath
ngdbuild -intstyle ise -dd _ngo -sd ipcore_dir -nt timestamp -uc "$ruta_ucf"_zxuno_"$1".ucf -p xc6slx9-tqg144-"$speed" "$machine".ngc "$machine".ngd
map -intstyle ise -w -ol high -mt 2 -p xc6slx9-tqg144-"$speed" -logic_opt off -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -ir off -pr off -lc off -power off -o "$machine"_map.ncd "$machine".ngd "$machine".pcf
par -intstyle ise -w -ol high -mt 4 "$machine"_map.ncd "$machine".ncd "$machine".pcf
trce -intstyle ise -v 3 -s "$speed" -n 3 -fastpaths -xml "$machine".twx "$machine".ncd -o "$machine".twr "$machine".pcf
bitgen -intstyle ise -f "$machine".ut "$machine".ncd
bit2bin "$machine".bit COREn."$2"
cp "$machine".bit "$machine"."$1".bit
# map -intstyle ise -w -ol high -mt 2 -p xc6slx9-tqg144-"$speed" -logic_opt off -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -ir off -pr off -lc off -power off -o "$machine"_map.ncd "$machine".ngd "$machine".pcf
# par -intstyle ise -w -ol high -mt 4 "$machine"_map.ncd "$machine".ncd "$machine".pcf
# trce -intstyle ise -v 3 -s "$speed" -n 3 -fastpaths -xml "$machine".twx "$machine".ncd -o "$machine".twr "$machine".pcf
# bitgen -intstyle ise -f "$machine".ut "$machine".ncd
# bit2bin "$machine".bit COREn."$2"
# cp "$machine".bit "$machine"."$1".bit
"$ruta_bat"generarlast.sh "$1" "$2"