CRAM Dots

This commit is contained in:
retrorepair
2021-04-13 15:22:27 +01:00
committed by GitHub
parent 348cf1df5c
commit 5ce1f2a4e0
3 changed files with 32 additions and 22 deletions

View File

@@ -40,9 +40,9 @@ module emu
output CE_PIXEL,
//Video aspect ratio for HDMI. Most retro systems have ratio 4:3.
//if VIDEO_ARX[12] or VIDEO_ARY[12] is set then [11:0] contains scaled size instead of aspect ratio.
output [12:0] VIDEO_ARX,
output [12:0] VIDEO_ARY,
//if VIDEO_ARX[12] or VIDEO_ARY[12] is set then [11:0] contains scaled size instead of aspect ratio.
output [12:0] VIDEO_ARX,
output [12:0] VIDEO_ARY,
output [7:0] VGA_R,
output [7:0] VGA_G,
@@ -53,9 +53,9 @@ module emu
output VGA_F1,
output [1:0] VGA_SL,
output VGA_SCALER, // Force VGA scaler
input [11:0] HDMI_WIDTH,
input [11:0] HDMI_HEIGHT,
input [11:0] HDMI_WIDTH,
input [11:0] HDMI_HEIGHT,
`ifdef USE_FB
// Use framebuffer in DDRAM (USE_FB=1 in qsf)
@@ -224,15 +224,15 @@ always @(posedge CLK_VIDEO) begin
end
wire vga_de;
video_freak video_freak
video_freak video_freak
(
.*,
.VGA_DE_IN(vga_de),
.ARX((!ar) ? arx : (ar - 1'd1)),
.ARY((!ar) ? ary : 12'd0),
.CROP_SIZE((en216p & vcrop_en) ? 10'd216 : 10'd0),
.CROP_OFF(voff),
.SCALE(status[56:55])
.CROP_OFF(voff),
.SCALE(status[56:55])
);
///////////////////////////////////////////////////
@@ -278,12 +278,13 @@ localparam CONF_STR = {
"P1OU,320x224 Aspect,Original,Corrected;",
"P1o13,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%,CRT 75%;",
"P1-;",
"d9P1o0,Vertical Crop,Disabled,216p(5x);",
"d9P1oJM,Crop Offset,0,2,4,8,10,12,-12,-10,-8,-6,-4,-2;",
"d9P1o0,Vertical Crop,Disabled,216p(5x);",
"d9P1oJM,Crop Offset,0,2,4,8,10,12,-12,-10,-8,-6,-4,-2;",
"P1oNO,Scale,Normal,V-Integer,Narrower HV-Integer,Wider HV-Integer;",
"P1- ;",
"P1- ;",
"P1OT,Border,No,Yes;",
"P1oFG,Composite Blend,Off,On,Adaptive;",
"P1OA,CRAM Dots,Off,On;",
"P1OV,Sprite Limit,Normal,High;",
"P1-;",
"P1OEF,Audio Filter,Model 1,Model 2,Minimal,No Filter;",
@@ -571,6 +572,7 @@ gen gen
.HBL(hblank),
.VBL(vblank),
.BORDER(status[29]),
.CRAM_DOTS(status[10]),
.CE_PIX(ce_pix),
.FIELD(VGA_F1),
.INTERLACE(interlace),

View File

@@ -89,6 +89,7 @@ module gen
output VBL,
output CE_PIX,
output TRANSP_DETECT,
input CRAM_DOTS,
input BORDER,
output INTERLACE,
@@ -425,6 +426,7 @@ vdp vdp
// .VRAM_SPEED(1),
// .VSCROLL_BUG(0),
.BORDER_EN(BORDER),
.CRAM_DOTS(CRAM_DOTS),
.OBJ_LIMIT_HIGH_EN(OBJ_LIMIT_HIGH),
.FIELD_OUT(FIELD),

View File

@@ -112,6 +112,7 @@ entity vdp is
VRAM_SPEED : in std_logic := '1'; -- 0 - full speed, 1 - FIFO throttle emulation
VSCROLL_BUG : in std_logic := '1'; -- 0 - use nicer effect, 1 - HW original
BORDER_EN : in std_logic := '0'; -- Enable border
CRAM_DOTS : in std_logic := '0'; -- Enable CRAM dots
OBJ_LIMIT_HIGH_EN : in std_logic := '0'; -- Enable more sprites and pixels per line
TRANSP_DETECT : out std_logic
);
@@ -134,6 +135,7 @@ signal CRAM_WE_A : std_logic;
signal CRAM_WE_B : std_logic;
signal CRAM_Q_A : std_logic_vector(8 downto 0);
signal CRAM_Q_B : std_logic_vector(8 downto 0);
signal CRAM_DATA : std_logic_vector(8 downto 0);
signal VSRAM0_ADDR_A : std_logic_vector( 4 downto 0);
signal VSRAM0_ADDR_B : std_logic_vector( 4 downto 0);
@@ -833,6 +835,7 @@ port map(
q_b => CRAM_Q_B
);
CRAM_WE_B <= '0';
CRAM_DATA <= CRAM_D_A when CRAM_WE_A = '1' and CRAM_DOTS = '1' else CRAM_Q_B;
vsram0 : entity work.DualPortRAM
generic map (
@@ -2678,21 +2681,21 @@ begin
else case PIX_MODE is
when PIX_SHADOW =>
-- half brightness
FF_B <= '0' & CRAM_Q_B(8 downto 6);
FF_G <= '0' & CRAM_Q_B(5 downto 3);
FF_R <= '0' & CRAM_Q_B(2 downto 0);
FF_B <= '0' & CRAM_DATA(8 downto 6);
FF_G <= '0' & CRAM_DATA(5 downto 3);
FF_R <= '0' & CRAM_DATA(2 downto 0);
when PIX_NORMAL =>
-- normal brightness
FF_B <= CRAM_Q_B(8 downto 6) & '0';
FF_G <= CRAM_Q_B(5 downto 3) & '0';
FF_R <= CRAM_Q_B(2 downto 0) & '0';
FF_B <= CRAM_DATA(8 downto 6) & '0';
FF_G <= CRAM_DATA(5 downto 3) & '0';
FF_R <= CRAM_DATA(2 downto 0) & '0';
when PIX_HIGHLIGHT =>
-- increased brightness
FF_B <= '0' & CRAM_Q_B(8 downto 6) + 7;
FF_G <= '0' & CRAM_Q_B(5 downto 3) + 7;
FF_R <= '0' & CRAM_Q_B(2 downto 0) + 7;
FF_B <= '0' & CRAM_DATA(8 downto 6) + 7;
FF_G <= '0' & CRAM_DATA(5 downto 3) + 7;
FF_R <= '0' & CRAM_DATA(2 downto 0) + 7;
end case;
end if;
@@ -2912,7 +2915,10 @@ begin
if FIFO_DELAY(3) /= "00" then FIFO_DELAY(3) <= FIFO_DELAY(3) - 1; end if;
end if;
CRAM_WE_A <= '0';
-- Extend CRAM write enable for CRAM dots
if CE_PIX = '1' then
CRAM_WE_A <= '0';
end if;
SOVR_CLR <= '0';
SCOL_CLR <= '0';