1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-01-24 11:11:33 +00:00

Wacko: control the alien with the mouse

This commit is contained in:
Gyorgy Szombathelyi 2019-12-03 14:19:27 +01:00
parent 8ac40fdeb3
commit 54fb99b93a
2 changed files with 54 additions and 48 deletions

View File

@ -1,9 +1,10 @@
---------------------------------------------------------------------------------
--
-- Arcade: SatansHollow port to MiST by Gehstock
-- Arcade: Wacko(SatansHollow) port to MiST by Gehstock
-- 10 November 2019
--
-- VGA Only
-- VGA/TV
-- Control Wacko with the mouse, shot with the joystick
---------------------------------------------------------------------------------
-- DE10_lite Top level for Kick (Midway MCR) by Dar (darfpga@aol.fr) (19/10/2019)

View File

@ -49,6 +49,7 @@ module Wacko_MiST(
localparam CONF_STR = {
"WACKO;;",
"O2,Rotate Controls,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
"O6,Service,Off,On;",
@ -60,6 +61,8 @@ assign LED = ~ioctl_downl;
assign SDRAM_CLK = clk_sys;
assign SDRAM_CKE = 1;
wire rotate = status[2];
wire clk_sys;
wire pll_locked;
pll_mist pll(
@ -72,8 +75,11 @@ pll_mist pll(
wire [31:0] status;
wire [1:0] buttons;
wire [1:0] switches;
wire [15:0] joystick_analog_0;
wire [15:0] joystick_analog_1;
wire [5:0] joystick_0;
wire [5:0] joystick_1;
wire signed [8:0] mouse_x;
wire signed [8:0] mouse_y;
wire mouse_strobe;
wire scandoublerD;
wire ypbpr;
wire [15:0] audio_l, audio_r;
@ -158,8 +164,19 @@ always @(posedge clk_sys) begin
reset <= status[0] | buttons[1] | ~rom_loaded;
end
always @(posedge clk_sys) begin
reg signed [10:0] x_pos;
reg signed [10:0] y_pos;
always @(posedge clk_sys) begin
if (mouse_strobe) begin
if (rotate) begin
x_pos <= x_pos - mouse_y;
y_pos <= y_pos + mouse_x;
end else begin
x_pos <= x_pos + mouse_x;
y_pos <= y_pos + mouse_y;
end
end
end
satans_hollow satans_hollow(
@ -181,19 +198,19 @@ satans_hollow satans_hollow(
.start2(btn_two_players),
.start1(btn_one_player),
//Controls
.trackX1(joystick_analog_0[7:0] | joystick_analog_1[7:0]),
.trackY1(joystick_analog_0[15:8] | joystick_analog_1[15:8]),
.trackX2(joystick_analog_1[7:0] | joystick_analog_1[7:0]),
.trackY2(joystick_analog_1[15:8] | joystick_analog_1[15:8]),
.trackX1(x_pos[10:3]),
.trackY1(y_pos[10:3]),
.trackX2(x_pos[10:3]),
.trackY2(y_pos[10:3]),
//ZAP
.up2(btn_w),
.down2(btn_s),
.left2(btn_a),
.right2(btn_d),
.up1(btn_w),
.down1(btn_s),
.left1(btn_a),
.right1(btn_d),
.up1(m_up),
.down1(m_down),
.left1(m_left),
.right1(m_right),
.up2(m_up),
.down2(m_down),
.left2(m_left),
.right2(m_right),
.cocktail(0),
.coin_meters(1),
.service(status[6]),
@ -227,6 +244,7 @@ mist_video #(.COLOR_DEPTH(3 ), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_HS ( hs_out ),
.ce_divider ( 1 ),
.blend ( status[5] ),
.rotate ( {1'b1, rotate} ),
.scandoubler_disable( 1'b1 ),
.no_csync ( 1'b1 ),
.scanlines ( status[4:3] ),
@ -246,11 +264,14 @@ user_io(
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_analog_0(joystick_analog_0),
.joystick_analog_1(joystick_analog_1),
.mouse_x (mouse_x ),
.mouse_y (mouse_y ),
.mouse_strobe (mouse_strobe ),
.status (status )
);
@ -272,29 +293,18 @@ dac_r(
.dac_o(AUDIO_R)
);
//wire [7:0] m_up1 = btn_up | joystick_analog_0[3];
//wire [7:0] m_down1 = btn_down | joystick_analog_0[2];
//wire [7:0] m_left1 = btn_left | joystick_analog_0[1];
//wire [7:0] m_right1 = btn_right | joystick_analog_0[0];
//wire [7:0] m_up2 = btn_up | joystick_analog_1[3];
//wire [7:0] m_down2 = btn_down | joystick_analog_1[2];
//wire [7:0] m_left2 = btn_left | joystick_analog_1[1];
//wire [7:0] m_right2 = btn_right | joystick_analog_1[0];
//wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4];
//wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5];
// Rotated Normal
wire m_up = rotate ? btn_right | joystick_0[0] | joystick_1[0] : btn_up | joystick_0[3] | joystick_1[3];
wire m_down = rotate ? btn_left | joystick_0[1] | joystick_1[1] : btn_down | joystick_0[2] | joystick_1[2];
wire m_left = rotate ? btn_up | joystick_0[3] | joystick_1[3] : btn_left | joystick_0[1] | joystick_1[1];
wire m_right = rotate ? btn_down | joystick_0[2] | joystick_1[2] : btn_right | joystick_0[0] | joystick_1[0];
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_w = 0;
reg btn_a = 0;
reg btn_s = 0;
reg btn_d = 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;
@ -306,15 +316,10 @@ 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
'h1D: btn_w <= key_pressed; // shot up
'h1C: btn_a <= key_pressed; // shot left
'h1B: btn_s <= key_pressed; // shot down
'h23: btn_d <= key_pressed; // shot right
'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