signal reg_s_oam_data : std_logic_vector (7 downto 0);\r
signal wr_s_oam_data : std_logic_vector (7 downto 0);\r
\r
-signal reg_p_oam_cpy_cnt : integer range 0 to 255;\r
+signal reg_p_oam_cpy_cnt : integer range 0 to 256;\r
signal reg_s_oam_cpy_cnt : integer range 0 to 32;\r
signal reg_spr_eval_cnt : integer range 0 to 3;\r
\r
reg_spr_eval_cnt <= 0;\r
elsif (is_spr_eval(pi_ppu_mask(PPUSSP), reg_nes_x, reg_nes_y) = 1) then\r
--copy data from primary oam ram.\r
- reg_s_oam_addr <= conv_std_logic_vector(reg_s_oam_cpy_cnt, 5);\r
+ reg_s_oam_addr <= conv_std_logic_vector(reg_s_oam_cpy_cnt mod 32, 5);\r
reg_s_oam_data <= pi_spr_data;\r
reg_s_oam_rd_n <= '1';\r
\r
reg_p_oam_ce_n <= '0';\r
reg_p_oam_rd_n <= '0';\r
reg_p_oam_wr_n <= '1';\r
- reg_p_oam_addr <= conv_std_logic_vector(reg_p_oam_cpy_cnt, 8);\r
+ reg_p_oam_addr <= conv_std_logic_vector(reg_p_oam_cpy_cnt mod 256, 8);\r
\r
- if (reg_s_oam_cpy_cnt < 32) then\r
+ if (reg_s_oam_cpy_cnt < 32 and reg_p_oam_cpy_cnt < 256) then\r
if (reg_s_oam_cur_state = AD_SET0) then\r
reg_s_oam_ce_n <= '0';\r
reg_s_oam_wr_n <= '1';\r