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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user