1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-04-24 19:50:18 +00:00

Pengo: some video output fix

This commit is contained in:
Gyorgy Szombathelyi
2022-04-06 00:31:06 +02:00
parent 149bc60e87
commit 90c2b1a9b9
2 changed files with 46 additions and 46 deletions

View File

@@ -48,6 +48,10 @@ localparam CONF_STR = {
"V,v1.20.",`BUILD_DATE
};
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[5];
assign LED = 1;
assign AUDIO_R = AUDIO_L;
@@ -74,9 +78,13 @@ wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire no_csync;
wire key_strobe;
wire key_pressed;
wire [7:0] key_code;
wire [7:0] audio;
wire hs, vs;
wire hb, vb;
wire hs, vs;
wire hb, vb;
wire blankn = ~(hb | vb);
wire [2:0] r,g;
wire [1:0] b;
@@ -90,8 +98,8 @@ PACMAN_MACHINE Pengo(
.h_blank(hb),
.v_blank(vb),
.audio(audio),
.in0_reg(~{m_fire, 2'b00,btn_coin,m_right,m_left,m_down,m_up}),
.in1_reg(~{1'b0, btn_two_players, btn_one_player, 5'b00000}),
.in0_reg(~{m_fireA, 2'b00,m_coin1,m_right,m_left,m_down,m_up}),
.in1_reg(~{1'b0, m_two_players, m_one_player, 5'b00000}),
.dipsw1_reg(8'b11100000),
.dipsw2_reg(8'b11001100),
.RESET(status[0] | buttons[1]),
@@ -106,7 +114,7 @@ mist_video #(.COLOR_DEPTH(3),.SD_HCNT_WIDTH(10)) mist_video(
.SPI_DI(SPI_DI),
.R(blankn ? r : 0),
.G(blankn ? g : 0),
.B(blankn ? b : 0),
.B(blankn ? {b, 1'b0} : 0),
.HSync(~hs),
.VSync(~vs),
.VGA_R(VGA_R),
@@ -114,11 +122,11 @@ mist_video #(.COLOR_DEPTH(3),.SD_HCNT_WIDTH(10)) mist_video(
.VGA_B(VGA_B),
.VGA_VS(VGA_VS),
.VGA_HS(VGA_HS),
.rotate({1'b1,status[2]}),
.rotate({1'b1,rotate}),
.scandoubler_disable(scandoublerD),
.scanlines(status[4:3]),
.scanlines(scanlines),
.ce_divider(1'b1),
.blend(status[5]),
.blend(blend),
.ypbpr(ypbpr)
);
@@ -135,6 +143,7 @@ user_io(
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
@@ -152,43 +161,25 @@ dac(
.dac_o(AUDIO_L)
);
// Rotated Normal
wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3];
wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2];
wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1];
wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0];
wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4];
wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5];
// controls
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
reg btn_one_player = 0;
reg btn_two_players = 0;
reg btn_left = 0;
reg btn_right = 0;
reg btn_down = 0;
reg btn_up = 0;
reg btn_fire1 = 0;
reg btn_fire2 = 0;
reg btn_fire3 = 0;
reg btn_coin = 0;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
always @(posedge clk_sys) begin
if(key_strobe) begin
case(key_code)
'h75: btn_up <= key_pressed; // up
'h72: btn_down <= key_pressed; // down
'h6B: btn_left <= key_pressed; // left
'h74: btn_right <= key_pressed; // right
'h76: btn_coin <= key_pressed; // ESC
'h05: btn_one_player <= key_pressed; // F1
'h06: btn_two_players <= key_pressed; // F2
'h14: btn_fire3 <= key_pressed; // ctrl
'h11: btn_fire2 <= key_pressed; // alt
'h29: btn_fire1 <= key_pressed; // Space
endcase
end
end
arcade_inputs inputs (
.clk ( clk_sys ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
.orientation ( 2'b11 ),
.joyswap ( 1'b0 ),
.oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
);
endmodule

View File

@@ -108,6 +108,7 @@ architecture RTL of PACMAN_VIDEO is
signal cntr_ld : std_logic;
signal sprite_ram_ip : std_logic_vector(3 downto 0);
signal sprite_ram_op : std_logic_vector(3 downto 0);
signal sprite_ram_q : std_logic_vector(3 downto 0);
signal ra : std_logic_vector(7 downto 0);
signal ra_t1 : std_logic_vector(7 downto 0);
@@ -312,12 +313,20 @@ begin
clk_b_i => CLK,
addr_b_i => ra,
data_b_o => sprite_ram_op
data_b_o => sprite_ram_q
);
sprite_ram_reg <= sprite_ram_op when vout_obj_on_t1 = '1' else "0000";
video_op_sel <= '1' when not (sprite_ram_reg = "0000") else '0';
p_sprite_ram_latch : process
begin
wait until rising_edge (CLK);
if (ENA_6 = '1') then
sprite_ram_op <= sprite_ram_q;
end if;
end process;
p_sprite_ram_ip_reg : process
begin
wait until rising_edge (CLK);