constant PPUADDR : std_logic_vector(2 downto 0) := "110";
constant PPUDATA : std_logic_vector(2 downto 0) := "111";
-constant PPUNEN : integer := 7; --nmi enable
+constant PPUNEN : integer := 7; --nmi enable
constant ST_VBL : integer := 7; --vblank
signal clk_n : std_logic;
signal ppu_addr_in : std_logic_vector (13 downto 0);
signal ppu_addr_cnt : std_logic_vector (0 downto 0);
signal ppu_data : std_logic_vector (dsize - 1 downto 0);
-signal read_data_n : std_logic;
+signal read_data : std_logic;
signal ppu_latch_rst_n : std_logic;
signal oam_bus_ce_n : std_logic;
ppu_mask_we_n <= '1';
end if;
+ if(cpu_addr = PPUSTATUS and r_nw = '1') then
+ --reading status resets ppu_addr/scroll cnt.
+ ppu_latch_rst_n <= '0';
+ --notify reading status
+ read_status <= '1';
+ else
+ ppu_latch_rst_n <= '1';
+ read_status <= '0';
+ end if;
+
if(cpu_addr = OAMADDR) then
oam_addr_we_n <= '0';
else
ppu_scroll_cnt_ce_n <= '1';
ppu_addr_we_n <= '1';
ppu_addr_cnt_ce_n <= '1';
+
+ read_status <= '0';
+ read_data <= '0';
end if; --if (rst_n = '1' and ce_n = '0')
end process;
if(cpu_addr = PPUSTATUS and r_nw = '1') then
cpu_d <= ppu_stat_out;
- --reading status resets ppu_addr/scroll cnt.
- ppu_latch_rst_n <= '0';
- --notify reading status
- read_status <= '1';
- else
- ppu_latch_rst_n <= '1';
- read_status <= '0';
end if;
else
ppu_clk_cnt_res_n <= '0';
oam_bus_ce_n <= '1';
oam_addr_ce_n <= '1';
- ppu_latch_rst_n <= '1';
- read_status <= '0';
rd_n <= 'Z';
wr_n <= 'Z';