diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf b/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf index 3d71db15..44396042 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf @@ -40,7 +40,7 @@ # Project-Wide Assignments # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.0.2 -set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1" +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:48:06 MAY 24,2017" set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/README.txt b/Arcade_MiST/Custom Hardware/Bagman_MiST/README.txt index 5951f653..61a41fbe 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/README.txt +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/README.txt @@ -1,11 +1,6 @@ Bagman Port to Mist FPGA by Gehstock -ToDo: Fix Video - - - - ------------------------------------------------- Bagman (STERN) FPGA - (darfpga@aol.fr) diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf b/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf new file mode 100644 index 00000000..3fba163e Binary files /dev/null and b/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf differ diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/Snapshot/Bagman.rbf b/Arcade_MiST/Custom Hardware/Bagman_MiST/Snapshot/Bagman.rbf deleted file mode 100644 index 7b75efa1..00000000 Binary files a/Arcade_MiST/Custom Hardware/Bagman_MiST/Snapshot/Bagman.rbf and /dev/null differ diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv index a51f2e87..aac85e4d 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv @@ -20,12 +20,19 @@ module bagman_mist ( localparam CONF_STR = { "Bagman;;", - "O2,Joystick Control,Upright,Normal;", + "O2,Rotate Controls,Off,On;", "O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;", "T6,Reset;", - "V,v1.00.",`BUILD_DATE + "V,v1.10.",`BUILD_DATE }; +wire clock_48, clock_12; +pll pll( + .inclk0(CLOCK_27), + .c0(clock_48), + .c1(clock_12) + ); + wire [31:0] status; wire [1:0] buttons; wire [1:0] switches; @@ -35,59 +42,15 @@ wire [7:0] joystick_1; wire scandoubler_disable; wire ypbpr; wire ps2_kbd_clk, ps2_kbd_data; - -assign LED = 1; - -wire clock_48, clock_12; -pll pll -( - .inclk0(CLOCK_27), - .c0(clock_48), - .c1(clock_12) -); - -wire m_up = status[2] ? kbjoy[7] | joystick_0[0] | joystick_1[0] : kbjoy[4] | joystick_0[3] | joystick_1[3]; -wire m_down = status[2] ? kbjoy[6] | joystick_0[1] | joystick_1[1] : kbjoy[5] | joystick_0[2] | joystick_1[2]; -wire m_left = status[2] ? kbjoy[4] | joystick_0[3] | joystick_1[3] : kbjoy[6] | joystick_0[1] | joystick_1[1]; -wire m_right = status[2] ? kbjoy[5] | joystick_0[2] | joystick_1[2] : kbjoy[7] | joystick_0[0] | joystick_1[0]; - -wire m_fire = kbjoy[0] | joystick_0[4] | joystick_1[4]; -wire m_start1 = kbjoy[1]; -wire m_start2 = kbjoy[2]; -wire m_coin = kbjoy[3]; - -bagman bagman ( - .clock_12(clock_12), - .reset(status[0] | status[6] | buttons[1]), - .tv15Khz_mode(scandoubler_disable), - .video_r(r), - .video_g(g), - .video_b(b), - .video_hblank(hb), - .video_vblank(vb), - .video_hs(hs), - .video_vs(vs), - .audio_out(audio), - .start2(m_start2), - .start1(m_start1), - .coin1(m_coin), - - .fire1(m_fire), - .right1(m_right), - .left1(m_left), - .down1(m_down), - .up1(m_up), - - .fire2(m_fire), - .right2(m_right), - .left2(m_left), - .down2(m_down), - .up2(m_up) -); - +assign LED = 1; wire [12:0] audio; +wire hs, vs; +wire hb, vb; +wire blankn = ~(hb | vb); +wire [2:0] r, g; +wire [1:0] b; -dac dac ( +dac dac( .CLK(clock_48), .RESET(1'b0), .DACin(audio), @@ -96,13 +59,10 @@ dac dac ( assign AUDIO_R = AUDIO_L; -wire hs, vs; -wire hb, vb; -wire blankn = ~(hb | vb); -wire [2:0] r, g; -wire [1:0] b; -video_mixer #(.LINE_LENGTH(480), .HALF_DEPTH(1)) video_mixer -( +video_mixer #( + .LINE_LENGTH(480), + .HALF_DEPTH(1)) +video_mixer( .clk_sys(clock_48), .ce_pix(clock_12), .ce_pix_actual(clock_12), @@ -122,13 +82,16 @@ video_mixer #(.LINE_LENGTH(480), .HALF_DEPTH(1)) video_mixer .scandoubler_disable(1'b1), .scanlines(scandoubler_disable ? 2'b00 : {status[4:3] == 3, status[4:3] == 2}), .hq2x(status[4:3]==1), + .rotate({1'b1,status[2]}),//(left/right,on/off) + .ypbpr(ypbpr), .ypbpr_full(1), .line_start(0), .mono(0) ); -mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io -( +mist_io #( + .STRLEN(($size(CONF_STR)>>3))) +mist_io( .clk_sys (clock_48 ), .conf_str (CONF_STR ), .SPI_SCK (SPI_SCK ), @@ -145,7 +108,7 @@ mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io .joystick_0 (joystick_0 ), .joystick_1 (joystick_1 ), .status (status ) -); + ); keyboard keyboard( .clk(clock_48), @@ -155,5 +118,41 @@ keyboard keyboard( .joystick(kbjoy) ); +wire m_up = ~status[2] ? kbjoy[6] | joystick_0[1] | joystick_1[1] : kbjoy[4] | joystick_0[3] | joystick_1[3]; +wire m_down = ~status[2] ? kbjoy[7] | joystick_0[0] | joystick_1[0] : kbjoy[5] | joystick_0[2] | joystick_1[2]; +wire m_left = ~status[2] ? kbjoy[5] | joystick_0[2] | joystick_1[2] : kbjoy[6] | joystick_0[1] | joystick_1[1]; +wire m_right = ~status[2] ? kbjoy[4] | joystick_0[3] | joystick_1[3] : kbjoy[7] | joystick_0[0] | joystick_1[0]; + +wire m_fire = kbjoy[0] | joystick_0[4] | joystick_1[4]; +wire m_start1 = kbjoy[1]; +wire m_start2 = kbjoy[2]; +wire m_coin = kbjoy[3]; + +bagman bagman( + .clock_12(clock_12), + .reset(status[0] | status[6] | buttons[1]), + .tv15Khz_mode(scandoubler_disable), + .video_r(r), + .video_g(g), + .video_b(b), + .video_hblank(hb), + .video_vblank(vb), + .video_hs(hs), + .video_vs(vs), + .audio_out(audio), + .start2(m_start2), + .start1(m_start1), + .coin1(m_coin), + .fire1(m_fire), + .right1(m_right), + .left1(m_left), + .down1(m_down), + .up1(m_up), + .fire2(m_fire), + .right2(m_right), + .left2(m_left), + .down2(m_down), + .up2(m_up) + ); endmodule diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv index 3a75330a..f7bb4219 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv @@ -1,2 +1,2 @@ -`define BUILD_DATE "180812" -`define BUILD_TIME "154434" +`define BUILD_DATE "190303" +`define BUILD_TIME "171430" diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/osd.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/osd.sv index c62c10af..b9181763 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/osd.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/osd.sv @@ -11,13 +11,15 @@ module osd ( input SPI_SS3, input SPI_DI, + input [1:0] rotate, //[0] - rotate [1] - left or right + // VGA signals coming from core input [5:0] R_in, input [5:0] G_in, input [5:0] B_in, input HSync, input VSync, - + // VGA signals going to video connector output [5:0] R_out, output [5:0] G_out, @@ -59,7 +61,7 @@ always@(posedge SPI_SCK, posedge SPI_SS3) begin if(cnt == 7) begin cmd <= {sbuf[6:0], SPI_DI}; - + // lower three command bits are line address bcnt <= {sbuf[1:0], SPI_DI, 8'h00}; @@ -91,7 +93,7 @@ reg [9:0] vs_low, vs_high; wire vs_pol = vs_high < vs_low; wire [9:0] dsp_height = vs_pol ? vs_low : vs_high; -wire doublescan = (dsp_height>350); +wire doublescan = (dsp_height>350); reg ce_pix; always @(negedge clk_sys) begin @@ -124,13 +126,13 @@ always @(posedge clk_sys) begin hsD2 <= hsD; // falling edge of HSync - if(!hsD && hsD2) begin + if(!hsD && hsD2) begin h_cnt <= 0; hs_high <= h_cnt; end // rising edge of HSync - else if(hsD && !hsD2) begin + else if(hsD && !hsD2) begin h_cnt <= 0; hs_low <= h_cnt; v_cnt <= v_cnt + 1'd1; @@ -142,13 +144,13 @@ always @(posedge clk_sys) begin vsD2 <= vsD; // falling edge of VSync - if(!vsD && vsD2) begin + if(!vsD && vsD2) begin v_cnt <= 0; vs_high <= v_cnt; end // rising edge of VSync - else if(vsD && !vsD2) begin + else if(vsD && !vsD2) begin v_cnt <= 0; vs_low <= v_cnt; end @@ -160,17 +162,30 @@ wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET; wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH; wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<> 1) + OSD_Y_OFFSET; wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<= h_osd_start) && (h_cnt < h_osd_end) && (VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); -reg [7:0] osd_byte; -always @(posedge clk_sys) if(ce_pix) osd_byte <= osd_buffer[{doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt[7:0]}]; +reg [10:0] osd_buffer_addr; +wire [7:0] osd_byte = osd_buffer[osd_buffer_addr]; +reg osd_pixel; -wire osd_pixel = osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; +always @(posedge clk_sys) begin + if(ce_pix) begin + osd_buffer_addr <= rotate[0] ? {rotate[1] ? osd_hcnt_next2[7:5] : ~osd_hcnt_next2[7:5], + rotate[1] ? (doublescan ? ~osd_vcnt[7:0] : ~{osd_vcnt[6:0], 1'b0}) : + (doublescan ? osd_vcnt[7:0] : {osd_vcnt[6:0], 1'b0})} : + {doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt_next2[7:0]}; + + osd_pixel <= rotate[0] ? osd_byte[rotate[1] ? osd_hcnt_next[4:2] : ~osd_hcnt_next[4:2]] : + osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; + end +end assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]}; assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]}; diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv index 44cd3971..3dd47eec 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv @@ -60,7 +60,7 @@ module video_mixer // 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space) input ypbpr_full, - + input [1:0] rotate, //[0] - rotate [1] - left or right // color input [DWIDTH:0] R, input [DWIDTH:0] G, @@ -82,7 +82,6 @@ module video_mixer // before first informative pixel. input line_start, - // MiST video output signals output [5:0] VGA_R, output [5:0] VGA_G, @@ -183,6 +182,7 @@ osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd .B_in(b_out), .HSync(hs), .VSync(vs), + .rotate(rotate), .R_out(red), .G_out(green), diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/ym_2149_linmix.vhd b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/ym_2149_linmix.vhd index b0573a80..5c85cfa0 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/ym_2149_linmix.vhd +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/ym_2149_linmix.vhd @@ -292,7 +292,7 @@ begin -- END LATCHED -- - p_rdata : process(busctrl_re, addr, reg) + p_rdata : process(busctrl_re, addr, reg, ioa_inreg, iob_inreg) begin O_DA <= (others => '0'); -- 'X' if (busctrl_re = '1') then -- not necessary, but useful for putting 'X's in the simulator @@ -437,7 +437,7 @@ begin end if; end process; - p_envelope_shape : process(env_reset, CLK) + p_envelope_shape : process(env_reset, CLK, reg) variable is_bot : boolean; variable is_bot_p1 : boolean; variable is_top_m1 : boolean; diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/CrazyKong.qsf b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/CrazyKong.qsf index 378e0ebe..221d3b69 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/CrazyKong.qsf +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/CrazyKong.qsf @@ -40,7 +40,7 @@ # Project-Wide Assignments # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.0.2 -set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1" +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:48:06 MAY 24,2017" set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/README.txt b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/README.txt index f3c6aa27..455ca7ad 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/README.txt +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/README.txt @@ -1,11 +1,6 @@ Crazy Kong Port to Mist FPGA by Gehstock -Need Feedback - - - - ------------------------------------------------- Crazy Kong (Falcon) FPGA - (darfpga@aol.fr) diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/Release/CrazyKong.rbf b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/Release/CrazyKong.rbf new file mode 100644 index 00000000..657f2e74 Binary files /dev/null and b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/Release/CrazyKong.rbf differ diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/Snapshot/CrazyKong.rbf b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/Snapshot/CrazyKong.rbf deleted file mode 100644 index c162c0b8..00000000 Binary files a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/Snapshot/CrazyKong.rbf and /dev/null differ diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/build_id.sv b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/build_id.sv index 061c1071..4a73903a 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/build_id.sv +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/build_id.sv @@ -1,2 +1,2 @@ -`define BUILD_DATE "180812" -`define BUILD_TIME "165545" +`define BUILD_DATE "190303" +`define BUILD_TIME "173639" diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ckong_mist.sv b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ckong_mist.sv index 843584eb..91c24b0f 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ckong_mist.sv +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ckong_mist.sv @@ -20,10 +20,10 @@ module ckong_mist ( localparam CONF_STR = { "CrazyKong;;", - "O2,Joystick Control,Upright,Normal;", + "O2,Rotate Controls,Off,On;", "O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;", "T6,Reset;", - "V,v1.00.",`BUILD_DATE + "V,v1.10.",`BUILD_DATE }; wire [31:0] status; @@ -35,28 +35,30 @@ wire [7:0] joystick_1; wire scandoubler_disable; wire ypbpr; wire ps2_kbd_clk, ps2_kbd_data; - -assign LED = 1; +wire [12:0] audio; +assign LED = 1; +wire hs, vs; +wire [2:0] r, g; +wire [1:0] b; wire clock_48, clock_12; -pll pll -( +pll pll( .inclk0(CLOCK_27), .c0(clock_48), .c1(clock_12) -); + ); -wire m_up = status[2] ? kbjoy[7] | joystick_0[0] | joystick_1[0] : kbjoy[4] | joystick_0[3] | joystick_1[3]; -wire m_down = status[2] ? kbjoy[6] | joystick_0[1] | joystick_1[1] : kbjoy[5] | joystick_0[2] | joystick_1[2]; -wire m_left = status[2] ? kbjoy[4] | joystick_0[3] | joystick_1[3] : kbjoy[6] | joystick_0[1] | joystick_1[1]; -wire m_right = status[2] ? kbjoy[5] | joystick_0[2] | joystick_1[2] : kbjoy[7] | joystick_0[0] | joystick_1[0]; +wire m_up = ~status[2] ? kbjoy[6] | joystick_0[1] | joystick_1[1] : kbjoy[4] | joystick_0[3] | joystick_1[3]; +wire m_down = ~status[2] ? kbjoy[7] | joystick_0[0] | joystick_1[0] : kbjoy[5] | joystick_0[2] | joystick_1[2]; +wire m_left = ~status[2] ? kbjoy[5] | joystick_0[2] | joystick_1[2] : kbjoy[6] | joystick_0[1] | joystick_1[1]; +wire m_right = ~status[2] ? kbjoy[4] | joystick_0[3] | joystick_1[3] : kbjoy[7] | joystick_0[0] | joystick_1[0]; wire m_fire = kbjoy[0] | joystick_0[4] | joystick_1[4]; wire m_start1 = kbjoy[1]; wire m_start2 = kbjoy[2]; wire m_coin = kbjoy[3]; -ckong ckong ( +ckong ckong( .clock_12(clock_12), .reset(status[0] | status[6] | buttons[1]), .tv15Khz_mode(scandoubler_disable), @@ -69,23 +71,20 @@ ckong ckong ( .start2(m_start2), .start1(m_start1), .coin1(m_coin), - .fire1(m_fire), .right1(m_right), .left1(m_left), .down1(m_down), .up1(m_up), - .fire2(m_fire), .right2(m_right), .left2(m_left), .down2(m_down), .up2(m_up) -); + ); -wire [12:0] audio; -dac dac ( +dac dac( .CLK(clock_48), .RESET(1'b0), .DACin(audio), @@ -94,11 +93,10 @@ dac dac ( assign AUDIO_R = AUDIO_L; -wire hs, vs; -wire [2:0] r, g; -wire [1:0] b; -video_mixer #(.LINE_LENGTH(480), .HALF_DEPTH(1)) video_mixer -( +video_mixer #( + .LINE_LENGTH(480), + .HALF_DEPTH(1)) +video_mixer( .clk_sys(clock_48), .ce_pix(clock_12), .ce_pix_actual(clock_12), @@ -118,13 +116,16 @@ video_mixer #(.LINE_LENGTH(480), .HALF_DEPTH(1)) video_mixer .scandoubler_disable(1'b1), .scanlines(scandoubler_disable ? 2'b00 : {status[4:3] == 3, status[4:3] == 2}), .hq2x(status[4:3]==1), + .rotate({1'b1,status[2]}),//(left/right,on/off) + .ypbpr(ypbpr), .ypbpr_full(1), .line_start(0), .mono(0) -); + ); -mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io -( +mist_io #( + .STRLEN(($size(CONF_STR)>>3))) +mist_io( .clk_sys (clock_48 ), .conf_str (CONF_STR ), .SPI_SCK (SPI_SCK ), @@ -141,7 +142,7 @@ mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io .joystick_0 (joystick_0 ), .joystick_1 (joystick_1 ), .status (status ) -); + ); keyboard keyboard( .clk(clock_48), diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/line_doubler.vhd b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/line_doubler.vhd index 1fde522b..05e29230 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/line_doubler.vhd +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/line_doubler.vhd @@ -72,7 +72,7 @@ begin end if; end process; -process(clock_12mhz) +process(clock_12mhz, video) begin if rising_edge(clock_12mhz) then if flip_flop = '0' then diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/osd.sv b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/osd.sv index c62c10af..b9181763 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/osd.sv +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/osd.sv @@ -11,13 +11,15 @@ module osd ( input SPI_SS3, input SPI_DI, + input [1:0] rotate, //[0] - rotate [1] - left or right + // VGA signals coming from core input [5:0] R_in, input [5:0] G_in, input [5:0] B_in, input HSync, input VSync, - + // VGA signals going to video connector output [5:0] R_out, output [5:0] G_out, @@ -59,7 +61,7 @@ always@(posedge SPI_SCK, posedge SPI_SS3) begin if(cnt == 7) begin cmd <= {sbuf[6:0], SPI_DI}; - + // lower three command bits are line address bcnt <= {sbuf[1:0], SPI_DI, 8'h00}; @@ -91,7 +93,7 @@ reg [9:0] vs_low, vs_high; wire vs_pol = vs_high < vs_low; wire [9:0] dsp_height = vs_pol ? vs_low : vs_high; -wire doublescan = (dsp_height>350); +wire doublescan = (dsp_height>350); reg ce_pix; always @(negedge clk_sys) begin @@ -124,13 +126,13 @@ always @(posedge clk_sys) begin hsD2 <= hsD; // falling edge of HSync - if(!hsD && hsD2) begin + if(!hsD && hsD2) begin h_cnt <= 0; hs_high <= h_cnt; end // rising edge of HSync - else if(hsD && !hsD2) begin + else if(hsD && !hsD2) begin h_cnt <= 0; hs_low <= h_cnt; v_cnt <= v_cnt + 1'd1; @@ -142,13 +144,13 @@ always @(posedge clk_sys) begin vsD2 <= vsD; // falling edge of VSync - if(!vsD && vsD2) begin + if(!vsD && vsD2) begin v_cnt <= 0; vs_high <= v_cnt; end // rising edge of VSync - else if(vsD && !vsD2) begin + else if(vsD && !vsD2) begin v_cnt <= 0; vs_low <= v_cnt; end @@ -160,17 +162,30 @@ wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET; wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH; wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<> 1) + OSD_Y_OFFSET; wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<= h_osd_start) && (h_cnt < h_osd_end) && (VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); -reg [7:0] osd_byte; -always @(posedge clk_sys) if(ce_pix) osd_byte <= osd_buffer[{doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt[7:0]}]; +reg [10:0] osd_buffer_addr; +wire [7:0] osd_byte = osd_buffer[osd_buffer_addr]; +reg osd_pixel; -wire osd_pixel = osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; +always @(posedge clk_sys) begin + if(ce_pix) begin + osd_buffer_addr <= rotate[0] ? {rotate[1] ? osd_hcnt_next2[7:5] : ~osd_hcnt_next2[7:5], + rotate[1] ? (doublescan ? ~osd_vcnt[7:0] : ~{osd_vcnt[6:0], 1'b0}) : + (doublescan ? osd_vcnt[7:0] : {osd_vcnt[6:0], 1'b0})} : + {doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt_next2[7:0]}; + + osd_pixel <= rotate[0] ? osd_byte[rotate[1] ? osd_hcnt_next[4:2] : ~osd_hcnt_next[4:2]] : + osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; + end +end assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]}; assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]}; diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/video_mixer.sv b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/video_mixer.sv index 44cd3971..3dd47eec 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/video_mixer.sv +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/video_mixer.sv @@ -60,7 +60,7 @@ module video_mixer // 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space) input ypbpr_full, - + input [1:0] rotate, //[0] - rotate [1] - left or right // color input [DWIDTH:0] R, input [DWIDTH:0] G, @@ -82,7 +82,6 @@ module video_mixer // before first informative pixel. input line_start, - // MiST video output signals output [5:0] VGA_R, output [5:0] VGA_G, @@ -183,6 +182,7 @@ osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd .B_in(b_out), .HSync(hs), .VSync(vs), + .rotate(rotate), .R_out(red), .G_out(green), diff --git a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ym_2149_linmix.vhd b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ym_2149_linmix.vhd index b0573a80..5c85cfa0 100644 --- a/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ym_2149_linmix.vhd +++ b/Arcade_MiST/Custom Hardware/CrazyKong_MiST/rtl/ym_2149_linmix.vhd @@ -292,7 +292,7 @@ begin -- END LATCHED -- - p_rdata : process(busctrl_re, addr, reg) + p_rdata : process(busctrl_re, addr, reg, ioa_inreg, iob_inreg) begin O_DA <= (others => '0'); -- 'X' if (busctrl_re = '1') then -- not necessary, but useful for putting 'X's in the simulator @@ -437,7 +437,7 @@ begin end if; end process; - p_envelope_shape : process(env_reset, CLK) + p_envelope_shape : process(env_reset, CLK, reg) variable is_bot : boolean; variable is_bot_p1 : boolean; variable is_top_m1 : boolean;