repo2/common/tb_atari800xl/atari800xl_tb.vhd @ 1476
507 | markw | library ieee;
|
|
use ieee.std_logic_1164.all;
|
|||
use ieee.std_logic_unsigned.all;
|
|||
use ieee.numeric_std.all;
|
|||
use ieee.std_logic_textio.all;
|
|||
library std_developerskit ; -- used for to_string
|
|||
-- use std_developerskit.std_iopak.all;
|
|||
entity atari800xl_tb is
|
|||
end;
|
|||
architecture rtl of atari800xl_tb is
|
|||
constant CLK_A_PERIOD : time := 1 us / (1.79*32);
|
|||
signal reset_n : std_logic;
|
|||
signal clk_a : std_logic;
|
|||
-- VIDEO OUT - PAL/NTSC, original Atari timings approx (may be higher res)
|
|||
SIGNAL VIDEO_VS : STD_LOGIC;
|
|||
SIGNAL VIDEO_HS : STD_LOGIC;
|
|||
SIGNAL VIDEO_CS : STD_LOGIC;
|
|||
SIGNAL VIDEO_COLOUR : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
-- These ones are probably only needed for e.g. svideo
|
|||
SIGNAL VIDEO_BLANK : std_logic;
|
|||
SIGNAL VIDEO_BURST : std_logic;
|
|||
SIGNAL VIDEO_START_OF_FIELD : std_logic;
|
|||
SIGNAL VIDEO_ODD_LINE : std_logic;
|
|||
-- AUDIO - Pokey/GTIA 1-bit and Covox all mixed
|
|||
-- TODO - choose stereo/mono pokey
|
|||
SIGNAL AUDIO_L : std_logic_vector(15 downto 0);
|
|||
SIGNAL AUDIO_R : std_logic_vector(15 downto 0);
|
|||
-- JOYSTICK
|
|||
SIGNAL JOY1_n : std_logic_vector(4 downto 0); -- FRLDU, 0=pressed
|
|||
SIGNAL JOY2_n : std_logic_vector(4 downto 0); -- FRLDU, 0=pressed
|
|||
-- Pokey keyboard matrix
|
|||
-- Standard component available to connect this to PS2
|
|||
SIGNAL KEYBOARD_RESPONSE : STD_LOGIC_VECTOR(1 DOWNTO 0);
|
|||
SIGNAL KEYBOARD_SCAN : STD_LOGIC_VECTOR(5 DOWNTO 0);
|
|||
-- SIO
|
|||
SIGNAL SIO_COMMAND : std_logic;
|
|||
SIGNAL SIO_RXD : std_logic;
|
|||
SIGNAL SIO_TXD : std_logic;
|
|||
-- PIA
|
|||
SIGNAL CA1_IN : STD_LOGIC;
|
|||
SIGNAL CB1_IN: STD_LOGIC;
|
|||
SIGNAL CA2_OUT : STD_LOGIC;
|
|||
SIGNAL CA2_DIR_OUT: STD_LOGIC;
|
|||
SIGNAL CB2_OUT : STD_LOGIC;
|
|||
SIGNAL CB2_DIR_OUT: STD_LOGIC;
|
|||
SIGNAL CA2_IN: STD_LOGIC;
|
|||
SIGNAL CB2_IN: STD_LOGIC;
|
|||
SIGNAL PORTA_IN : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
SIGNAL PORTA_OUT : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
SIGNAL PORTA_DIR_OUT : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
SIGNAL PORTB_IN : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
SIGNAL PORTB_OUT : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
--SIGNAL PORTB_DIR_OUT : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
-- GTIA
|
|||
signal GTIA_TRIG : std_logic_vector(3 downto 0);
|
|||
-- ANTIC
|
|||
signal ANTIC_LIGHTPEN : std_logic;
|
|||
-- CARTRIDGE ACCESS
|
|||
SIGNAL CART_RD4 : STD_LOGIC;
|
|||
SIGNAL CART_RD5 : STD_LOGIC;
|
|||
-- PBI
|
|||
SIGNAL PBI_WRITE_DATA : std_logic_vector(31 downto 0);
|
|||
-- INTERNAL ROM/RAM
|
|||
SIGNAL RAM_ADDR : STD_LOGIC_VECTOR(18 DOWNTO 0);
|
|||
SIGNAL RAM_DO : STD_LOGIC_VECTOR(15 DOWNTO 0);
|
|||
SIGNAL RAM_REQUEST : STD_LOGIC;
|
|||
SIGNAL RAM_REQUEST_COMPLETE : STD_LOGIC;
|
|||
SIGNAL RAM_WRITE_ENABLE : STD_LOGIC;
|
|||
SIGNAL ROM_ADDR : STD_LOGIC_VECTOR(21 DOWNTO 0);
|
|||
SIGNAL ROM_DO : STD_LOGIC_VECTOR(7 DOWNTO 0);
|
|||
SIGNAL ROM_REQUEST : STD_LOGIC;
|
|||
SIGNAL ROM_REQUEST_COMPLETE : STD_LOGIC;
|
|||
-- CONFIG
|
|||
SIGNAL ROM_IN_RAM : STD_LOGIC;
|
|||
-- POTS
|
|||
SIGNAL POT_RESET : STD_LOGIC;
|
|||
SIGNAL POT_IN : STD_LOGIC_VECTOR(7 downto 0);
|
|||
SIGNAL CONSOL_OPTION : STD_LOGIC;
|
|||
SIGNAL CONSOL_SELECT : STD_LOGIC;
|
|||
SIGNAL CONSOL_START: STD_LOGIC;
|
|||
begin
|
|||
p_clk_gen_a : process
|
|||
begin
|
|||
clk_a <= '1';
|
|||
wait for CLK_A_PERIOD/2;
|
|||
clk_a <= '0';
|
|||
wait for CLK_A_PERIOD - (CLK_A_PERIOD/2 );
|
|||
end process;
|
|||
reset_n <= '0', '1' after 1000ns;
|
|||
JOY1_N <= (others=>'1');
|
|||
JOY2_N <= (others=>'1');
|
|||
KEYBOARD_RESPONSE <= "11";
|
|||
CONSOL_OPTION <= '1';
|
|||
CONSOL_SELECT <= '1';
|
|||
CONSOL_OPTION <= '1';
|
|||
-- PIA mapping
|
|||
CA1_IN <= '1';
|
|||
CB1_IN <= '1';
|
|||
CA2_IN <= CA2_OUT when CA2_DIR_OUT='1' else '1';
|
|||
CB2_IN <= CB2_OUT when CB2_DIR_OUT='1' else '1';
|
|||
SIO_COMMAND <= CB2_OUT;
|
|||
PORTA_IN <= ((JOY2_n(3)&JOY2_n(2)&JOY2_n(1)&JOY2_n(0)&JOY1_n(3)&JOY1_n(2)&JOY1_n(1)&JOY1_n(0)) and not (porta_dir_out)) or (porta_dir_out and porta_out);
|
|||
PORTB_IN <= PORTB_OUT;
|
|||
-- ANTIC lightpen
|
|||
ANTIC_LIGHTPEN <= JOY2_n(4) and JOY1_n(4);
|
|||
-- GTIA triggers
|
|||
GTIA_TRIG <= "11"&JOY2_n(4)&JOY1_n(4);
|
|||
-- Cartridge not inserted
|
|||
CART_RD4 <= '0';
|
|||
CART_RD5 <= '0';
|
|||
POT_IN(7 downto 4) <= (others=>'0');
|
|||
atari800xlinst : entity work.atari800xl
|
|||
PORT MAP
|
|||
(
|
|||
CLK => CLK_A,
|
|||
RESET_N => RESET_N,
|
|||
VIDEO_VS => VIDEO_VS,
|
|||
VIDEO_HS => VIDEO_HS,
|
|||
VIDEO_CS => VIDEO_CS,
|
|||
COLOUR => VIDEO_COLOUR,
|
|||
VIDEO_BLANK => VIDEO_BLANK,
|
|||
VIDEO_BURST => VIDEO_BURST,
|
|||
VIDEO_START_OF_FIELD => VIDEO_START_OF_FIELD,
|
|||
VIDEO_ODD_LINE => VIDEO_ODD_LINE,
|
|||
AUDIO_L => AUDIO_L,
|
|||
AUDIO_R => AUDIO_R,
|
|||
SIO_AUDIO => "00000000",
|
|||
CA1_IN => CA1_IN,
|
|||
CB1_IN => CB1_IN,
|
|||
CA2_IN => CA2_IN,
|
|||
CA2_OUT => CA2_OUT,
|
|||
CA2_DIR_OUT => CA2_DIR_OUT,
|
|||
CB2_IN => CB2_IN,
|
|||
CB2_OUT => CB2_OUT,
|
|||
CB2_DIR_OUT => CB2_DIR_OUT,
|
|||
PORTA_IN => PORTA_IN,
|
|||
PORTA_DIR_OUT => PORTA_DIR_OUT,
|
|||
PORTA_OUT => PORTA_OUT,
|
|||
PORTB_IN => PORTB_IN,
|
|||
PORTB_DIR_OUT => open,--PORTB_DIR_OUT,
|
|||
PORTB_OUT => PORTB_OUT,
|
|||
KEYBOARD_RESPONSE => KEYBOARD_RESPONSE,
|
|||
KEYBOARD_SCAN => KEYBOARD_SCAN,
|
|||
POT_IN => POT_IN,
|
|||
POT_RESET => POT_RESET,
|
|||
-- PBI
|
|||
CART_RD4 => CART_RD4,
|
|||
CART_RD5 => CART_RD5,
|
|||
CART_S4_n => open,
|
|||
CART_S5_N => open,
|
|||
CART_CCTL_N => open,
|
|||
PBI_MPD_N => '1',
|
|||
PBI_REF_N_IN => '1',
|
|||
PBI_EXTSEL_N => '1',
|
|||
SIO_RXD => SIO_RXD,
|
|||
SIO_TXD => SIO_TXD,
|
|||
CONSOL_OPTION => CONSOL_OPTION,
|
|||
CONSOL_SELECT => CONSOL_SELECT,
|
|||
CONSOL_START=> CONSOL_START,
|
|||
GTIA_TRIG => GTIA_TRIG,
|
|||
ANTIC_LIGHTPEN => ANTIC_LIGHTPEN,
|
|||
ANTIC_REFRESH => open
|
|||
);
|
|||
end rtl;
|