From e3c642c295a2888e75259004d2a77210b1dbec58 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Wed, 4 Mar 2020 19:15:03 +0100 Subject: [PATCH] IremM62: 256/384 pixel wide switch --- Arcade_MiST/IremM62 Hardware/rtl/Graphics.VHD | 8 ++++++-- Arcade_MiST/IremM62 Hardware/rtl/platform_pkg.vhd | 6 +++--- Arcade_MiST/IremM62 Hardware/rtl/spritectl.vhd | 2 +- Arcade_MiST/IremM62 Hardware/rtl/tilemapctl.vhd | 4 ++-- Arcade_MiST/IremM62 Hardware/rtl/video_controller.vhd | 9 ++++++--- .../IremM62 Hardware/rtl/video_controller_pkg.vhd | 1 + 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Arcade_MiST/IremM62 Hardware/rtl/Graphics.VHD b/Arcade_MiST/IremM62 Hardware/rtl/Graphics.VHD index 4b8295c3..773a3b42 100644 --- a/Arcade_MiST/IremM62 Hardware/rtl/Graphics.VHD +++ b/Arcade_MiST/IremM62 Hardware/rtl/Graphics.VHD @@ -50,6 +50,7 @@ architecture SYN of Graphics is signal rgb_data : RGB_t; -- before OSD is mixed in signal video_o_s : to_VIDEO_t; + signal irem62_hsize : integer range 0 to 384; begin @@ -69,13 +70,15 @@ begin graphics_o.hblank <= video_o_s.hblank; graphics_o.vblank <= video_o_s.vblank; --graphics_o.vblank <= from_video_ctl.vblank; - + + irem62_hsize <= 384 when hwsel = HW_LDRUN else 256; + pace_video_controller_inst : entity work.pace_video_controller generic map ( CONFIG => PACE_VIDEO_CONTROLLER_TYPE, DELAY => PACE_VIDEO_PIPELINE_DELAY, - H_SIZE => PACE_VIDEO_H_SIZE, + --H_SIZE => PACE_VIDEO_H_SIZE, V_SIZE => PACE_VIDEO_V_SIZE, L_CROP => PACE_VIDEO_L_CROP, R_CROP => PACE_VIDEO_R_CROP, @@ -89,6 +92,7 @@ begin ( -- clocking etc video_i => video_i, + H_SIZE => irem62_hsize, -- register interface reg_i.h_scale => "000", diff --git a/Arcade_MiST/IremM62 Hardware/rtl/platform_pkg.vhd b/Arcade_MiST/IremM62 Hardware/rtl/platform_pkg.vhd index b3116c6c..0c243f3e 100644 --- a/Arcade_MiST/IremM62 Hardware/rtl/platform_pkg.vhd +++ b/Arcade_MiST/IremM62 Hardware/rtl/platform_pkg.vhd @@ -42,14 +42,14 @@ package platform_pkg is constant PACE_VIDEO_BORDER_RGB : RGB_t := RGB_BLACK; - constant M62_VIDEO_H_SIZE : integer := 384; - constant M62_VIDEO_H_OFFSET : integer := (512-M62_VIDEO_H_SIZE)/2; +-- constant M62_VIDEO_H_SIZE : integer := 384; +-- constant M62_VIDEO_H_OFFSET : integer := (512-M62_VIDEO_H_SIZE)/2; constant M62_VIDEO_V_SIZE : integer := 256; constant PACE_VIDEO_NUM_BITMAPS : natural := 0; constant PACE_VIDEO_NUM_TILEMAPS : natural := 1; constant PACE_VIDEO_NUM_SPRITES : natural := 32; - constant PACE_VIDEO_H_SIZE : integer := M62_VIDEO_H_SIZE; +-- constant PACE_VIDEO_H_SIZE : integer := M62_VIDEO_H_SIZE; constant PACE_VIDEO_V_SIZE : integer := M62_VIDEO_V_SIZE; constant PACE_VIDEO_L_CROP : integer := 0; constant PACE_VIDEO_R_CROP : integer := PACE_VIDEO_L_CROP; diff --git a/Arcade_MiST/IremM62 Hardware/rtl/spritectl.vhd b/Arcade_MiST/IremM62 Hardware/rtl/spritectl.vhd index 89b07b1c..a8c86619 100644 --- a/Arcade_MiST/IremM62 Hardware/rtl/spritectl.vhd +++ b/Arcade_MiST/IremM62 Hardware/rtl/spritectl.vhd @@ -78,7 +78,7 @@ begin ld_r <= ctl_i.ld; if video_ctl.hblank = '1' then - x := unsigned(reg_i.x) - M62_VIDEO_H_OFFSET + PACE_VIDEO_PIPELINE_DELAY - 3; + x := unsigned(reg_i.x) - video_ctl.video_h_offset + PACE_VIDEO_PIPELINE_DELAY - 3; y := 256 + 128 - 18 - unsigned(reg_i.y); -- hande sprite height, placement diff --git a/Arcade_MiST/IremM62 Hardware/rtl/tilemapctl.vhd b/Arcade_MiST/IremM62 Hardware/rtl/tilemapctl.vhd index 9ed4a25b..7c558e6e 100644 --- a/Arcade_MiST/IremM62 Hardware/rtl/tilemapctl.vhd +++ b/Arcade_MiST/IremM62 Hardware/rtl/tilemapctl.vhd @@ -58,8 +58,8 @@ begin ctl_o.tile_a(ctl_o.tile_a'left downto 13) <= (others => '0'); -- screen rotation - x <= std_logic_vector(M62_VIDEO_H_OFFSET + unsigned(video_ctl.x)) when unsigned(y) < 6*8 else - std_logic_vector(M62_VIDEO_H_OFFSET + unsigned(video_ctl.x) + unsigned(hscroll(8 downto 0))); + x <= std_logic_vector(video_ctl.video_h_offset + unsigned(video_ctl.x)) when unsigned(y) < 6*8 else + std_logic_vector(video_ctl.video_h_offset + unsigned(video_ctl.x) + unsigned(hscroll(8 downto 0))); -- when rot_en = '0' else not video_ctl.y; --y <= not video_ctl.y when rot_en = '0' else 32 + video_ctl.x; y <= video_ctl.y; -- when rot_en = '0' else video_ctl.x; diff --git a/Arcade_MiST/IremM62 Hardware/rtl/video_controller.vhd b/Arcade_MiST/IremM62 Hardware/rtl/video_controller.vhd index 921a8d2c..213bb6b2 100644 --- a/Arcade_MiST/IremM62 Hardware/rtl/video_controller.vhd +++ b/Arcade_MiST/IremM62 Hardware/rtl/video_controller.vhd @@ -4,13 +4,13 @@ use ieee.numeric_std.all; library work; use work.video_controller_pkg.all; +use ieee.numeric_std.all; entity pace_video_controller is generic ( CONFIG : PACEVideoController_t := PACE_VIDEO_NONE; DELAY : integer := 1; - H_SIZE : integer; V_SIZE : integer; L_CROP : integer range 0 to 255; R_CROP : integer range 0 to 255; @@ -24,6 +24,7 @@ entity pace_video_controller is ( -- clocking etc video_i : in from_VIDEO_t; + H_SIZE : integer; -- register interface reg_i : in VIDEO_REG_t; @@ -43,7 +44,7 @@ architecture SYN of pace_video_controller is constant SIM_DELAY : time := 2 ns; - constant VIDEO_H_SIZE : integer := H_SIZE * H_SCALE; + signal VIDEO_H_SIZE : integer := H_SIZE * H_SCALE; constant VIDEO_V_SIZE : integer := V_SIZE * V_SCALE; subtype reg_t is integer range 0 to 2047; @@ -99,8 +100,10 @@ architecture SYN of pace_video_controller is begin + video_ctl_o.video_h_offset <= to_integer(shift_right(to_unsigned(512-VIDEO_H_SIZE, 9), 1)); + -- registers - reg_proc: process (reset, clk) + reg_proc: process (reset, clk, VIDEO_H_SIZE) begin --if reset = '1' then diff --git a/Arcade_MiST/IremM62 Hardware/rtl/video_controller_pkg.vhd b/Arcade_MiST/IremM62 Hardware/rtl/video_controller_pkg.vhd index f712941c..42f80de6 100644 --- a/Arcade_MiST/IremM62 Hardware/rtl/video_controller_pkg.vhd +++ b/Arcade_MiST/IremM62 Hardware/rtl/video_controller_pkg.vhd @@ -81,6 +81,7 @@ package video_controller_pkg is vblank : std_logic; x : std_logic_vector(10 downto 0); y : std_logic_vector(10 downto 0); + video_h_offset : integer range 0 to 511; end record; subtype BITMAP_D_t is std_logic_vector(23 downto 0);