From 5771a5fd49267c2293d53a022cd2e0106be6433d Mon Sep 17 00:00:00 2001 From: nand2mario Date: Sun, 2 Feb 2025 00:23:07 +0800 Subject: [PATCH] Make overlay display 4:3 --- buildall.bat | 28 ++++++++++++++++++++++++++++ src/gba2hdmi.sv | 20 +++++++++++++++----- 2 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 buildall.bat diff --git a/buildall.bat b/buildall.bat new file mode 100644 index 0000000..3b62a38 --- /dev/null +++ b/buildall.bat @@ -0,0 +1,28 @@ + + +set GWSH=..\..\Gowin_V1.9.10.03_x64\IDE\bin\gw_sh + +echo +echo "============ Building console60k ===============" +echo +%GWSH% build.tcl console60k + +echo +echo "============ Building mega60k ===============" +echo +%GWSH% build.tcl mega60k + +echo +echo "============ Building mega138k ===============" +echo +%GWSH% build.tcl mega138k + +echo +echo "============ Building mega138k pro ===============" +echo +%GWSH% build.tcl mega138kpro + +dir impl\pnr\*.fs + +echo "All done." + diff --git a/src/gba2hdmi.sv b/src/gba2hdmi.sv index e35db9c..1c579e6 100644 --- a/src/gba2hdmi.sv +++ b/src/gba2hdmi.sv @@ -129,6 +129,7 @@ end // // Video +// Scale to 1080x720 for GBA video, 960x720 for overlay // reg [23:0] rgb; // actual RGB output reg active /* xsynthesis syn_keep=1 */; @@ -142,6 +143,8 @@ assign overlay_x = xx; assign overlay_y = yy; localparam XSTART = (1280 - 1080) / 2; // 1080:720 = 3:2 localparam XSTOP = (1280 + 1080) / 2; +localparam XSTART_O = (1280 - 960) / 2; // 960:720 = 4:3 +localparam XSTOP_O = (1280 + 960) / 2; // address calculation // Assume the video occupies fully on the Y direction, we are upscaling the video by `720/height`. @@ -154,19 +157,26 @@ always @(posedge clk_pixel) begin ycnt_next = ycnt + (overlay ? 224 : height); active_t = 0; - if (cx == XSTART - 1) begin + if (~overlay && cx == XSTART - 1 || overlay && cx == XSTART_O - 1) begin active_t = 1; active <= 1; - end else if (cx == XSTOP - 1) begin + end else if (~overlay && cx == XSTOP - 1 || overlay && cx == XSTOP_O - 1) begin active_t = 0; active <= 0; end if (active_t | active) begin // increment xx xcnt <= xcnt_next; - if (xcnt_next >= 1080) begin - xcnt <= xcnt_next - 1080; - xx <= xx + 1; + if (overlay) begin + if (xcnt_next >= 960) begin + xcnt <= xcnt_next - 960; + xx <= xx + 1; + end + end else begin + if (xcnt_next >= 1080) begin + xcnt <= xcnt_next - 1080; + xx <= xx + 1; + end end end