OSDN Git Service

stii debug start. vga display failed!!
[motonesfpga/motonesfpga.git] / de0_cv_nes / ppu / render.vhd
index b9cbbe0..f96c093 100644 (file)
@@ -245,13 +245,17 @@ begin
             if ((pi_rnd_en(0) or pi_rnd_en(2))= '1') then\r
                 if (reg_vga_x = VGA_W_MAX - 1) then\r
                     reg_vga_x <= 0;\r
+                    reg_nes_x <= 0;\r
                     if (reg_vga_x = VGA_H_MAX - 1) then\r
                         reg_vga_y <= 0;\r
+                        reg_nes_y <= 0;\r
                     else\r
                         reg_vga_y <= reg_vga_y + 1;\r
+                        reg_nes_y <= (reg_vga_y + 1) / 2;\r
                     end if;\r
                 else\r
                     reg_vga_x <= reg_vga_x + 1;\r
+                    reg_nes_x <= (reg_vga_x + 1) / 2;\r
                 end if;\r
 \r
                 --sync signal assert.\r
@@ -268,10 +272,6 @@ begin
                 end if;\r
             end if;--if (pi_rnd_en(1) = '1' or pi_rnd_en(3) = '1' ) then\r
 \r
-            --nes x/y position...\r
-            reg_nes_x <= reg_vga_x / 2;\r
-            reg_nes_y <= reg_vga_y / 2;\r
-\r
             --pre-fetch x/y position...\r
             if (reg_vga_x < HSCAN_NEXT_START * 2) then\r
                 reg_prf_x <= reg_vga_x / 2 + conv_integer(pi_ppu_scroll_x) + PREFETCH_INT;\r
@@ -292,282 +292,282 @@ begin
         end if;--if (pi_rst_n = '0') then\r
     end process;\r
 \r
-    --vram access state machine (state transition)...\r
-    vac_set_stat_p : process (pi_rst_n, pi_base_clk)\r
-    begin\r
-        if (pi_rst_n = '0') then\r
-            reg_v_cur_state <= IDLE;\r
-        elsif (rising_edge(pi_base_clk)) then\r
-            reg_v_cur_state <= reg_v_next_state;\r
-        end if;--if (pi_rst_n = '0') then\r
-    end process;\r
-\r
-    --state change to next.\r
-    vac_next_stat_p : process (reg_v_cur_state, pi_rnd_en, pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y)\r
-function bg_process (\r
-    pm_sbg          : in std_logic;\r
-    pm_nes_x        : in integer range 0 to VGA_W_MAX - 1;\r
-    pm_nes_y        : in integer range 0 to VGA_H_MAX - 1\r
-    )return integer is\r
-begin\r
-    if (pm_sbg = '1'and\r
-        (pm_nes_x <= HSCAN or pm_nes_x >= HSCAN_NEXT_START) and\r
-        (pm_nes_y < VSCAN or pm_nes_y = VSCAN_NEXT_START)) then\r
-        return 1;\r
-    else\r
-        return 0;\r
-    end if;\r
-end;\r
-\r
-function is_idle (\r
-    pm_sbg          : in std_logic;\r
-    pm_nes_x        : in integer range 0 to VGA_W_MAX - 1;\r
-    pm_nes_y        : in integer range 0 to VGA_H_MAX - 1\r
-    )return integer is\r
-begin\r
-    if (pm_sbg = '0' or\r
-        (pm_nes_x > HSCAN and pm_nes_x < HSCAN_NEXT_START) or\r
-        (pm_nes_y >= VSCAN and pm_nes_y < VSCAN_NEXT_START)) then\r
-        return 1;\r
-    else\r
-        return 0;\r
-    end if;\r
-end;\r
-    begin\r
-        case reg_v_cur_state is\r
-            when IDLE =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(3) = '1' and\r
-                    reg_nes_x mod 8 = 0) then\r
-                    --start vram access process.\r
-                    reg_v_next_state <= AD_SET0;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when AD_SET0 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(0) = '1'\r
-                ) then\r
-                    reg_v_next_state <= AD_SET1;\r
-                elsif (is_idle(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
-                    ---when nes_x=257, fall to idle\r
-                    reg_v_next_state <= IDLE;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when AD_SET1 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(1) = '1'\r
-                ) then\r
-                    reg_v_next_state <= AD_SET2;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when AD_SET2 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(2) = '1'\r
-                ) then\r
-                    reg_v_next_state <= AD_SET3;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when AD_SET3 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(3) = '1'\r
-                ) then\r
-                    reg_v_next_state <= REG_SET0;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when REG_SET0 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(0) = '1'\r
-                ) then\r
-                    reg_v_next_state <= REG_SET1;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when REG_SET1 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(1) = '1'\r
-                ) then\r
-                    reg_v_next_state <= REG_SET2;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when REG_SET2 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(2) = '1'\r
-                ) then\r
-                    reg_v_next_state <= REG_SET3;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-            when REG_SET3 =>\r
-                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
-                    pi_rnd_en(3) = '1'\r
-                ) then\r
-                    reg_v_next_state <= AD_SET0;\r
-                else\r
-                    reg_v_next_state <= reg_v_cur_state;\r
-                end if;\r
-        end case;\r
-    end process;\r
-\r
-    po_v_ce_n       <= reg_v_ce_n;\r
-    po_v_rd_n       <= reg_v_rd_n;\r
-    po_v_wr_n       <= reg_v_wr_n;\r
-    po_v_addr       <= reg_v_addr;\r
-\r
-    po_plt_ce_n     <= reg_plt_ce_n;\r
-    po_plt_rd_n     <= reg_plt_rd_n;\r
-    po_plt_wr_n     <= reg_plt_wr_n;\r
-    po_plt_addr     <= reg_plt_addr;\r
-\r
-    --vram r/w selector state machine...\r
-    vac_main_stat_p : process (reg_v_cur_state)\r
-    begin\r
-        case reg_v_cur_state is\r
-            when IDLE =>\r
-                reg_v_rd_n  <= 'Z';\r
-                reg_v_wr_n  <= 'Z';\r
-            when AD_SET0 | AD_SET1 | REG_SET2 | REG_SET3 =>\r
-                reg_v_rd_n  <= '1';\r
-                reg_v_wr_n  <= '1';\r
-            when AD_SET2 | AD_SET3 | REG_SET0 | REG_SET1 =>\r
-                reg_v_rd_n  <= '0';\r
-                reg_v_wr_n  <= '1';\r
-        end case;\r
-\r
-        case reg_v_cur_state is\r
-            when IDLE =>\r
-                reg_v_ce_n  <= 'Z';\r
-                reg_plt_ce_n <= 'Z';\r
-                reg_plt_rd_n <= 'Z';\r
-                reg_plt_wr_n <= 'Z'; \r
-            when AD_SET0 | AD_SET1 | REG_SET2 | REG_SET3 | AD_SET2 | AD_SET3 | REG_SET0 | REG_SET1 =>\r
-                reg_v_ce_n  <= '0';\r
-                reg_plt_ce_n <= '0';\r
-                reg_plt_rd_n <= '0';\r
-                reg_plt_wr_n <= '1'; \r
-        end case;\r
-    end process;\r
-\r
-    --vram address state machine...\r
-    vaddr_stat_p : process (pi_rst_n, pi_base_clk)\r
-    begin\r
-        if (pi_rst_n = '0') then\r
-            reg_v_addr  <= (others => 'Z');\r
-            reg_v_data    <= (others => 'Z');\r
-            reg_disp_nt     <= (others => 'Z');\r
-            reg_disp_attr   <= (others => 'Z');\r
-        elsif (rising_edge(pi_base_clk)) then\r
-            reg_v_data      <= pi_v_data;\r
-\r
-            if (is_bg(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
-                ----fetch next tile byte.\r
-                if (reg_prf_x mod 8 = 1) then\r
-                    --vram addr is incremented every 8 cycle.\r
-                    --name table at 0x2000\r
-                    reg_v_addr(9 downto 0)\r
-                        <= conv_std_logic_vector(reg_prf_y, 9)(7 downto 3)\r
-                            & conv_std_logic_vector(reg_prf_x, 9)(7 downto 3);\r
-                    reg_v_addr(13 downto 10) <= "10" & pi_ppu_ctrl(PPUBNA downto 0)\r
-                                                    + ("000" & conv_std_logic_vector(reg_prf_x, 9)(8));\r
-                \r
-                elsif (reg_prf_x mod 8 = 2 and reg_v_cur_state = REG_SET0) then\r
-                    reg_disp_nt     <= reg_v_data;\r
-                \r
-                ----fetch attr table byte.\r
-                elsif (reg_prf_x mod 8 = 3) then\r
-                    --attr table at 0x23c0\r
-                    reg_v_addr(7 downto 0) <= "11000000" +\r
-                            ("00" & conv_std_logic_vector(reg_prf_y, 9)(7 downto 5)\r
-                                  & conv_std_logic_vector(reg_prf_x, 9)(7 downto 5));\r
-                    reg_v_addr(13 downto 8) <= "10" &\r
-                            pi_ppu_ctrl(PPUBNA downto 0) & "11"\r
-                                + ("000" & conv_std_logic_vector(reg_prf_x, 9)(8) & "00");\r
-                \r
-                elsif (reg_prf_x mod 8 = 4 and reg_v_cur_state = REG_SET0) then\r
-                    reg_disp_attr   <= reg_v_data;\r
-\r
-                ----fetch pattern table low byte.\r
-                elsif (reg_prf_x mod 8 = 5) then\r
-                     --vram addr is incremented every 8 cycle.\r
-                     reg_v_addr <= "0" & pi_ppu_ctrl(PPUBPA) &\r
-                                          reg_disp_nt(7 downto 0)\r
-                                        & "0" & conv_std_logic_vector(reg_prf_y, 9)(2 downto 0);\r
-\r
-                ----fetch pattern table high byte.\r
-                elsif (reg_prf_x mod 8 = 7) then\r
-                     --vram addr is incremented every 8 cycle.\r
-                     reg_v_addr <= "0" & pi_ppu_ctrl(PPUBPA) &\r
-                                          reg_disp_nt(7 downto 0)\r
-                                        & "0" & conv_std_logic_vector(reg_prf_y, 9)(2 downto 0)\r
-                                        + "00000000001000";\r
-                end if;\r
-            end if;\r
-        end if;--if (pi_rst_n = '0') then\r
-    end process;\r
-\r
-    --pattern table state machine...\r
-    bg_ptn_p : process (pi_rst_n, pi_base_clk)\r
-    begin\r
-        if (pi_rst_n = '0') then\r
-            reg_disp_ptn_l  <= (others => '0');\r
-            reg_disp_ptn_h  <= (others => '0');\r
-        elsif (rising_edge(pi_base_clk)) then\r
-\r
-            if (is_bg(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
-                if (reg_v_cur_state = REG_SET0) then\r
-                    if (reg_prf_x mod 8 = 6) then\r
-                        reg_disp_ptn_l   <= reg_v_data & reg_disp_ptn_l(7 downto 0);\r
-                    else\r
-                        reg_disp_ptn_l   <= "0" & reg_disp_ptn_l(15 downto 1);\r
-                    end if;\r
-\r
-                    if (reg_prf_x mod 8 = 0) then\r
-                        reg_disp_ptn_h   <= reg_v_data & reg_disp_ptn_h(7 downto 0);\r
-                    else\r
-                        reg_disp_ptn_h   <= "0" & reg_disp_ptn_h(15 downto 1);\r
-                    end if;\r
-\r
-                elsif (reg_v_cur_state = AD_SET0) then\r
-                    reg_disp_ptn_l   <= "0" & reg_disp_ptn_l(15 downto 1);\r
-                    reg_disp_ptn_h   <= "0" & reg_disp_ptn_h(15 downto 1);\r
-\r
-                end if;\r
-            end if;\r
-        end if;--if (pi_rst_n = '0') then\r
-    end process;\r
-\r
-    --palette table state machine...\r
-    plt_ac_p : process (pi_rst_n, pi_base_clk)\r
-    begin\r
-        if (pi_rst_n = '0') then\r
-            reg_plt_addr    <= (others => 'Z');\r
-            reg_plt_data    <= (others => 'Z');\r
-        elsif (rising_edge(pi_base_clk)) then\r
-            \r
-            reg_plt_data    <= pi_plt_data;\r
-            \r
-            if (is_bg(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
-                if (conv_std_logic_vector(reg_nes_y, 9)(4) = '0'\r
-                    and (reg_disp_ptn_h(0) or reg_disp_ptn_l(0)) = '1') then\r
-                    reg_plt_addr <=\r
-                            "0" & reg_disp_attr(1 downto 0) & reg_disp_ptn_h(0) & reg_disp_ptn_l(0);\r
-                elsif (conv_std_logic_vector(reg_nes_y, 9)(4) = '1'\r
-                    and (reg_disp_ptn_h(0) or reg_disp_ptn_l(0)) = '1') then\r
-                    reg_plt_addr <=\r
-                            "0" & reg_disp_attr(5 downto 4) & reg_disp_ptn_h(0) & reg_disp_ptn_l(0);\r
-                else\r
-                    ---else: no output color >> universal bg color output.\r
-                    --0x3f00 is the universal bg palette.\r
-                    reg_plt_addr <= (others => '0');\r
-                end if;\r
-            end if;\r
-        end if;--if (pi_rst_n = '0') then\r
-    end process;\r
+--    --vram access state machine (state transition)...\r
+--    vac_set_stat_p : process (pi_rst_n, pi_base_clk)\r
+--    begin\r
+--        if (pi_rst_n = '0') then\r
+--            reg_v_cur_state <= IDLE;\r
+--        elsif (rising_edge(pi_base_clk)) then\r
+--            reg_v_cur_state <= reg_v_next_state;\r
+--        end if;--if (pi_rst_n = '0') then\r
+--    end process;\r
+--\r
+--    --state change to next.\r
+--    vac_next_stat_p : process (reg_v_cur_state, pi_rnd_en, pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y)\r
+--function bg_process (\r
+--    pm_sbg          : in std_logic;\r
+--    pm_nes_x        : in integer range 0 to VGA_W_MAX - 1;\r
+--    pm_nes_y        : in integer range 0 to VGA_H_MAX - 1\r
+--    )return integer is\r
+--begin\r
+--    if (pm_sbg = '1'and\r
+--        (pm_nes_x <= HSCAN or pm_nes_x >= HSCAN_NEXT_START) and\r
+--        (pm_nes_y < VSCAN or pm_nes_y = VSCAN_NEXT_START)) then\r
+--        return 1;\r
+--    else\r
+--        return 0;\r
+--    end if;\r
+--end;\r
+--\r
+--function is_idle (\r
+--    pm_sbg          : in std_logic;\r
+--    pm_nes_x        : in integer range 0 to VGA_W_MAX - 1;\r
+--    pm_nes_y        : in integer range 0 to VGA_H_MAX - 1\r
+--    )return integer is\r
+--begin\r
+--    if (pm_sbg = '0' or\r
+--        (pm_nes_x > HSCAN and pm_nes_x < HSCAN_NEXT_START) or\r
+--        (pm_nes_y >= VSCAN and pm_nes_y < VSCAN_NEXT_START)) then\r
+--        return 1;\r
+--    else\r
+--        return 0;\r
+--    end if;\r
+--end;\r
+--    begin\r
+--        case reg_v_cur_state is\r
+--            when IDLE =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(3) = '1' and\r
+--                    reg_nes_x mod 8 = 0) then\r
+--                    --start vram access process.\r
+--                    reg_v_next_state <= AD_SET0;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when AD_SET0 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(0) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= AD_SET1;\r
+--                elsif (is_idle(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
+--                    ---when nes_x=257, fall to idle\r
+--                    reg_v_next_state <= IDLE;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when AD_SET1 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(1) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= AD_SET2;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when AD_SET2 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(2) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= AD_SET3;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when AD_SET3 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(3) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= REG_SET0;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when REG_SET0 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(0) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= REG_SET1;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when REG_SET1 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(1) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= REG_SET2;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when REG_SET2 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(2) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= REG_SET3;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--            when REG_SET3 =>\r
+--                if (bg_process(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1 and\r
+--                    pi_rnd_en(3) = '1'\r
+--                ) then\r
+--                    reg_v_next_state <= AD_SET0;\r
+--                else\r
+--                    reg_v_next_state <= reg_v_cur_state;\r
+--                end if;\r
+--        end case;\r
+--    end process;\r
+--\r
+--    po_v_ce_n       <= reg_v_ce_n;\r
+--    po_v_rd_n       <= reg_v_rd_n;\r
+--    po_v_wr_n       <= reg_v_wr_n;\r
+--    po_v_addr       <= reg_v_addr;\r
+--\r
+--    po_plt_ce_n     <= reg_plt_ce_n;\r
+--    po_plt_rd_n     <= reg_plt_rd_n;\r
+--    po_plt_wr_n     <= reg_plt_wr_n;\r
+--    po_plt_addr     <= reg_plt_addr;\r
+--\r
+--    --vram r/w selector state machine...\r
+--    vac_main_stat_p : process (reg_v_cur_state)\r
+--    begin\r
+--        case reg_v_cur_state is\r
+--            when IDLE =>\r
+--                reg_v_rd_n  <= 'Z';\r
+--                reg_v_wr_n  <= 'Z';\r
+--            when AD_SET0 | AD_SET1 | REG_SET2 | REG_SET3 =>\r
+--                reg_v_rd_n  <= '1';\r
+--                reg_v_wr_n  <= '1';\r
+--            when AD_SET2 | AD_SET3 | REG_SET0 | REG_SET1 =>\r
+--                reg_v_rd_n  <= '0';\r
+--                reg_v_wr_n  <= '1';\r
+--        end case;\r
+--\r
+--        case reg_v_cur_state is\r
+--            when IDLE =>\r
+--                reg_v_ce_n  <= 'Z';\r
+--                reg_plt_ce_n <= 'Z';\r
+--                reg_plt_rd_n <= 'Z';\r
+--                reg_plt_wr_n <= 'Z'; \r
+--            when AD_SET0 | AD_SET1 | REG_SET2 | REG_SET3 | AD_SET2 | AD_SET3 | REG_SET0 | REG_SET1 =>\r
+--                reg_v_ce_n  <= '0';\r
+--                reg_plt_ce_n <= '0';\r
+--                reg_plt_rd_n <= '0';\r
+--                reg_plt_wr_n <= '1'; \r
+--        end case;\r
+--    end process;\r
+--\r
+--    --vram address state machine...\r
+--    vaddr_stat_p : process (pi_rst_n, pi_base_clk)\r
+--    begin\r
+--        if (pi_rst_n = '0') then\r
+--            reg_v_addr  <= (others => 'Z');\r
+--            reg_v_data    <= (others => 'Z');\r
+--            reg_disp_nt     <= (others => 'Z');\r
+--            reg_disp_attr   <= (others => 'Z');\r
+--        elsif (rising_edge(pi_base_clk)) then\r
+--            reg_v_data      <= pi_v_data;\r
+--\r
+--            if (is_bg(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
+--                ----fetch next tile byte.\r
+--                if (reg_prf_x mod 8 = 1) then\r
+--                    --vram addr is incremented every 8 cycle.\r
+--                    --name table at 0x2000\r
+--                    reg_v_addr(9 downto 0)\r
+--                        <= conv_std_logic_vector(reg_prf_y, 9)(7 downto 3)\r
+--                            & conv_std_logic_vector(reg_prf_x, 9)(7 downto 3);\r
+--                    reg_v_addr(13 downto 10) <= "10" & pi_ppu_ctrl(PPUBNA downto 0)\r
+--                                                    + ("000" & conv_std_logic_vector(reg_prf_x, 9)(8));\r
+--                \r
+--                elsif (reg_prf_x mod 8 = 2 and reg_v_cur_state = REG_SET0) then\r
+--                    reg_disp_nt     <= reg_v_data;\r
+--                \r
+--                ----fetch attr table byte.\r
+--                elsif (reg_prf_x mod 8 = 3) then\r
+--                    --attr table at 0x23c0\r
+--                    reg_v_addr(7 downto 0) <= "11000000" +\r
+--                            ("00" & conv_std_logic_vector(reg_prf_y, 9)(7 downto 5)\r
+--                                  & conv_std_logic_vector(reg_prf_x, 9)(7 downto 5));\r
+--                    reg_v_addr(13 downto 8) <= "10" &\r
+--                            pi_ppu_ctrl(PPUBNA downto 0) & "11"\r
+--                                + ("000" & conv_std_logic_vector(reg_prf_x, 9)(8) & "00");\r
+--                \r
+--                elsif (reg_prf_x mod 8 = 4 and reg_v_cur_state = REG_SET0) then\r
+--                    reg_disp_attr   <= reg_v_data;\r
+--\r
+--                ----fetch pattern table low byte.\r
+--                elsif (reg_prf_x mod 8 = 5) then\r
+--                     --vram addr is incremented every 8 cycle.\r
+--                     reg_v_addr <= "0" & pi_ppu_ctrl(PPUBPA) &\r
+--                                          reg_disp_nt(7 downto 0)\r
+--                                        & "0" & conv_std_logic_vector(reg_prf_y, 9)(2 downto 0);\r
+--\r
+--                ----fetch pattern table high byte.\r
+--                elsif (reg_prf_x mod 8 = 7) then\r
+--                     --vram addr is incremented every 8 cycle.\r
+--                     reg_v_addr <= "0" & pi_ppu_ctrl(PPUBPA) &\r
+--                                          reg_disp_nt(7 downto 0)\r
+--                                        & "0" & conv_std_logic_vector(reg_prf_y, 9)(2 downto 0)\r
+--                                        + "00000000001000";\r
+--                end if;\r
+--            end if;\r
+--        end if;--if (pi_rst_n = '0') then\r
+--    end process;\r
+--\r
+--    --pattern table state machine...\r
+--    bg_ptn_p : process (pi_rst_n, pi_base_clk)\r
+--    begin\r
+--        if (pi_rst_n = '0') then\r
+--            reg_disp_ptn_l  <= (others => '0');\r
+--            reg_disp_ptn_h  <= (others => '0');\r
+--        elsif (rising_edge(pi_base_clk)) then\r
+--\r
+--            if (is_bg(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
+--                if (reg_v_cur_state = REG_SET0) then\r
+--                    if (reg_prf_x mod 8 = 6) then\r
+--                        reg_disp_ptn_l   <= reg_v_data & reg_disp_ptn_l(7 downto 0);\r
+--                    else\r
+--                        reg_disp_ptn_l   <= "0" & reg_disp_ptn_l(15 downto 1);\r
+--                    end if;\r
+--\r
+--                    if (reg_prf_x mod 8 = 0) then\r
+--                        reg_disp_ptn_h   <= reg_v_data & reg_disp_ptn_h(7 downto 0);\r
+--                    else\r
+--                        reg_disp_ptn_h   <= "0" & reg_disp_ptn_h(15 downto 1);\r
+--                    end if;\r
+--\r
+--                elsif (reg_v_cur_state = AD_SET0) then\r
+--                    reg_disp_ptn_l   <= "0" & reg_disp_ptn_l(15 downto 1);\r
+--                    reg_disp_ptn_h   <= "0" & reg_disp_ptn_h(15 downto 1);\r
+--\r
+--                end if;\r
+--            end if;\r
+--        end if;--if (pi_rst_n = '0') then\r
+--    end process;\r
+--\r
+--    --palette table state machine...\r
+--    plt_ac_p : process (pi_rst_n, pi_base_clk)\r
+--    begin\r
+--        if (pi_rst_n = '0') then\r
+--            reg_plt_addr    <= (others => 'Z');\r
+--            reg_plt_data    <= (others => 'Z');\r
+--        elsif (rising_edge(pi_base_clk)) then\r
+--            \r
+--            reg_plt_data    <= pi_plt_data;\r
+--            \r
+--            if (is_bg(pi_ppu_mask(PPUSBG), reg_nes_x, reg_nes_y) = 1) then\r
+--                if (conv_std_logic_vector(reg_nes_y, 9)(4) = '0'\r
+--                    and (reg_disp_ptn_h(0) or reg_disp_ptn_l(0)) = '1') then\r
+--                    reg_plt_addr <=\r
+--                            "0" & reg_disp_attr(1 downto 0) & reg_disp_ptn_h(0) & reg_disp_ptn_l(0);\r
+--                elsif (conv_std_logic_vector(reg_nes_y, 9)(4) = '1'\r
+--                    and (reg_disp_ptn_h(0) or reg_disp_ptn_l(0)) = '1') then\r
+--                    reg_plt_addr <=\r
+--                            "0" & reg_disp_attr(5 downto 4) & reg_disp_ptn_h(0) & reg_disp_ptn_l(0);\r
+--                else\r
+--                    ---else: no output color >> universal bg color output.\r
+--                    --0x3f00 is the universal bg palette.\r
+--                    reg_plt_addr <= (others => '0');\r
+--                end if;\r
+--            end if;\r
+--        end if;--if (pi_rst_n = '0') then\r
+--    end process;\r
 \r
     rgb_out_p : process (pi_rst_n, pi_base_clk)\r
     begin\r
@@ -580,9 +580,12 @@ end;
                 if (reg_nes_x < HSCAN and reg_nes_y < VSCAN) then\r
                     --if or if not bg/sprite is shown, output color anyway \r
                     --sinse universal bg color is included..\r
-                    po_b <= nes_color_palette(conv_integer(reg_plt_data(5 downto 0))) (11 downto 8);\r
-                    po_g <= nes_color_palette(conv_integer(reg_plt_data(5 downto 0))) (7 downto 4);\r
-                    po_r <= nes_color_palette(conv_integer(reg_plt_data(5 downto 0))) (3 downto 0);\r
+--                    po_b <= nes_color_palette(conv_integer(reg_plt_data(5 downto 0))) (11 downto 8);\r
+--                    po_g <= nes_color_palette(conv_integer(reg_plt_data(5 downto 0))) (7 downto 4);\r
+--                    po_r <= nes_color_palette(conv_integer(reg_plt_data(5 downto 0))) (3 downto 0);\r
+                    po_b <= (others => '0');\r
+                    po_g <= (others => '1');\r
+                    po_r <= (others => '1');\r
                 else\r
                     po_b <= (others => '0');\r
                     po_g <= (others => '0');\r
@@ -600,4 +603,3 @@ end;
     po_spr_addr     <= (others => 'Z');\r
 \r
 end rtl;\r
-\r