mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-01-19 01:16:58 +00:00
Merge pull request #108 from gyurco/master
DK: Radar Scope + Pest Place
This commit is contained in:
commit
6023966acb
@ -230,7 +230,7 @@ set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
|
||||
# end ENTITY(dkong_MiST)
|
||||
# ----------------------
|
||||
set_global_assignment -name ENABLE_SIGNALTAP OFF
|
||||
set_global_assignment -name USE_SIGNALTAP_FILE output_files/dl.stp
|
||||
set_global_assignment -name USE_SIGNALTAP_FILE output_files/stars.stp
|
||||
set_global_assignment -name SYSTEMVERILOG_FILE rtl/dkong_MiST.sv
|
||||
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
|
||||
set_global_assignment -name VERILOG_FILE rtl/dkong_top.v
|
||||
@ -247,10 +247,12 @@ set_global_assignment -name VERILOG_FILE rtl/dkong_hv_count.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/dkong_col_pal.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/dkong_bram.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/dkong_adec.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/radarscp_stars.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/pll.v
|
||||
set_global_assignment -name QIP_FILE ../../../common/CPU/t48/T48.qip
|
||||
set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip
|
||||
set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip
|
||||
set_global_assignment -name SIGNALTAP_FILE output_files/dkong.stp
|
||||
set_global_assignment -name SIGNALTAP_FILE output_files/dl.stp
|
||||
set_global_assignment -name SIGNALTAP_FILE output_files/stars.stp
|
||||
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
||||
@ -0,0 +1,33 @@
|
||||
---------------------------------------------------------------------------------
|
||||
--
|
||||
-- Arcade: Donkey Kong port to MiST
|
||||
-- Jan 2021
|
||||
--
|
||||
-- Usage:
|
||||
-- - Create ROM and ARC files from the MRA files using the MRA utility.
|
||||
-- Example: mra -A -z /path/to/mame/roms "Donkey Kong.mra"
|
||||
-- - Copy the ROM files to the root of the SD Card
|
||||
-- - Copy the RBF and ARC files to the same folder on the SD Card
|
||||
--
|
||||
-- Bugs/limitations:
|
||||
-- - Some sounds are missing in some games
|
||||
-- - Grid drawing delay is not implemented in Radar Scope
|
||||
--
|
||||
---------------------------------------------------------------------------------
|
||||
-- Based on:
|
||||
-- FPGA DONKEY KONG TOP
|
||||
-- Version : 4.00
|
||||
-- Copyright(c) 2003 - 2004 Katsumi Degawa , All rights reserved
|
||||
---------------------------------------------------------------------------------
|
||||
--
|
||||
--
|
||||
-- Keyboard inputs :
|
||||
--
|
||||
-- ESC,5 : Coin
|
||||
-- F2,2 : Start 2 players
|
||||
-- F1,1 : Start 1 player
|
||||
-- UP,DOWN,LEFT,RIGHT arrows : Movements
|
||||
-- CTRL : Jump/Fire
|
||||
|
||||
-- Joystick support.
|
||||
---------------------------------------------------------------------------------
|
||||
@ -0,0 +1,51 @@
|
||||
<misterromdescription>
|
||||
<name>Pest Place</name>
|
||||
<mameversion>0217</mameversion>
|
||||
<setname>pestplce</setname>
|
||||
<mratimestamp>201912300000</mratimestamp>
|
||||
<year>1982</year>
|
||||
<manufacturer>Nintendo of America</manufacturer>
|
||||
<category>Maze / Monkeys</category>
|
||||
<category>Platform</category>
|
||||
<category>Platform / Mario Bros.</category>
|
||||
<rbf>dkong</rbf>
|
||||
|
||||
<buttons names="Jump,Start 1P,Start 2P,Coin" default="A,Start,Select,R" />
|
||||
|
||||
<switches default="80" base="8">
|
||||
<dip bits="0,1" name="Lives" ids="3,4,5,6"/>
|
||||
<dip bits="2,3" name="Bonus" ids="10k,15k,20k,25k"/>
|
||||
<dip bits="4,6" name="Coins" ids="1C1P,2C1P,1C1P,3C1P,1C1P,4C1P,1C1P,5C1P,1C1P"/>
|
||||
<dip bits="7" name="Lives" ids="Cocktail,Upright"/>
|
||||
</switches>
|
||||
|
||||
<rom index="1"><part>09</part></rom>
|
||||
<rom index="0" zip="pestplce.zip" md5="48576fcf2767241441d662768cc53899" type="merged|nonmerged">
|
||||
<!-- Main CPU 32k-->
|
||||
<part name="pest.1p"/>
|
||||
<part name="pest.2p"/>
|
||||
<part name="pest.3p"/>
|
||||
<part name="pest.0"/>
|
||||
<part name="pest.0"/>
|
||||
|
||||
<!-- GFX1 8k-->
|
||||
<part name="pest.o"/>
|
||||
<part name="pest.k"/>
|
||||
|
||||
<!-- GFX2 16k-->
|
||||
<part name="pest.b"/>
|
||||
<part name="pest.a"/>
|
||||
<part name="pest.d"/>
|
||||
<part name="pest.c"/>
|
||||
|
||||
<!-- Sound CPU 4k-->
|
||||
<part name="pest.4"/>
|
||||
|
||||
<!-- LUTs -->
|
||||
<part name="n82s129a.bin"/>
|
||||
<part name="n82s129a.bin"/>
|
||||
<part name="n82s129b.bin"/>
|
||||
<part name="n82s129b.bin"/>
|
||||
<part repeat="3072">00</part>
|
||||
</rom>
|
||||
</misterromdescription>
|
||||
File diff suppressed because it is too large
Load Diff
@ -44,6 +44,8 @@ wire rotate = status[2];
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire blend = status[5];
|
||||
|
||||
wire landscape = core_mod[3];
|
||||
|
||||
assign LED = ~ioctl_downl;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
assign SDRAM_CLK = clock_24;
|
||||
@ -160,6 +162,8 @@ dkong_top dkong(
|
||||
.I_DIP_SW(status[15:8]),
|
||||
.I_DKJR(core_mod[0]),
|
||||
.I_DK3B(core_mod[1]),
|
||||
.I_RADARSCP(core_mod[2]),
|
||||
.I_PESTPLCE(core_mod[3]),
|
||||
.O_SOUND_DAT(audio),
|
||||
.O_VGA_R(r),
|
||||
.O_VGA_G(g),
|
||||
@ -262,7 +266,7 @@ arcade_inputs inputs (
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( 2'b11 ),
|
||||
.orientation ( {1'b1, ~landscape} ),
|
||||
.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} ),
|
||||
|
||||
@ -25,6 +25,7 @@ I_CLK_EN_N,
|
||||
I_RESET_n,
|
||||
I_DKJR,
|
||||
I_DK3B,
|
||||
I_PESTPLCE,
|
||||
I_AB,
|
||||
I_DB,
|
||||
I_MREQ_n,
|
||||
@ -55,7 +56,8 @@ O_DIP_OE_n,
|
||||
O_4H_Q,
|
||||
O_5H_Q,
|
||||
O_6H_Q,
|
||||
O_3D_Q
|
||||
O_3D_Q,
|
||||
O_AREF
|
||||
|
||||
);
|
||||
|
||||
@ -65,6 +67,7 @@ input I_CLK_EN_N;
|
||||
input I_RESET_n;
|
||||
input I_DKJR;
|
||||
input I_DK3B;
|
||||
input I_PESTPLCE;
|
||||
input [15:0]I_AB;
|
||||
input [3:0]I_DB;
|
||||
input I_MREQ_n;
|
||||
@ -94,6 +97,7 @@ output [1:0]O_4H_Q; // GFX (Characters) bank switch, sound
|
||||
output [7:0]O_5H_Q; // FLIP,
|
||||
output [7:0]O_6H_Q; // sound
|
||||
output [4:0]O_3D_Q; // sound
|
||||
output [2:0]O_AREF; // 7C80 H Radar Scope grid color (W)
|
||||
|
||||
output O_WAIT_n;
|
||||
output O_NMI_n;
|
||||
@ -152,7 +156,7 @@ logic_74xx138 U_4D(
|
||||
|
||||
);
|
||||
|
||||
assign O_ROM_CS_n = I_DKJR ? (&W_4D_Q[5:0] & (!I_DK3B | !(I_AB[15:12] == 4'h9 | I_AB[15:12] == 4'hD))) : &W_4D_Q[3:0];
|
||||
assign O_ROM_CS_n = I_DKJR ? (&W_4D_Q[5:0] & (!I_PESTPLCE | I_AB[15:12] != 4'hB) & (!I_DK3B | !(I_AB[15:12] == 4'h9 | I_AB[15:12] == 4'hD))) : &W_4D_Q[3:0];
|
||||
|
||||
// ADDR DEC 7000H - 7FFFH
|
||||
|
||||
@ -321,16 +325,24 @@ assign O_6H_Q = W_6H_Q;
|
||||
|
||||
// Parts 3D
|
||||
reg [4:0]O_3D_Q;
|
||||
reg [2:0]W_AREF;
|
||||
assign O_AREF = W_AREF;
|
||||
|
||||
always@(posedge I_CLK24M or negedge I_RESET_n)
|
||||
begin
|
||||
reg W_1C_Q0_D;
|
||||
if(! I_RESET_n) O_3D_Q <= 0;
|
||||
else begin
|
||||
reg W_1C_Q0_D, W_1C_Q1_D;
|
||||
if(! I_RESET_n) begin
|
||||
O_3D_Q <= 0;
|
||||
W_AREF <= 0;
|
||||
end else begin
|
||||
W_1C_Q0_D <= W_1C_Q[0];
|
||||
W_1C_Q1_D <= W_1C_Q[1];
|
||||
if (!W_1C_Q0_D & W_1C_Q[0]) begin
|
||||
O_3D_Q <= I_DB;
|
||||
end
|
||||
if (!W_1C_Q1_D & W_1C_Q[1]) begin
|
||||
W_AREF <= I_DB[2:0];
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@ module dkong_col_pal(
|
||||
input CLK_24M,
|
||||
input CLK_6M_EN,
|
||||
input I_DK3B,
|
||||
input I_PESTPLCE,
|
||||
input I_PALBNK,
|
||||
input [5:0]I_VRAM_D,
|
||||
input [5:0]I_OBJ_D,
|
||||
@ -86,8 +87,8 @@ dpram #(9,8) col2 (
|
||||
);
|
||||
|
||||
//assign {O_R, O_G, O_B} = I_DK3B ? {W_2F_DO, W_2E_DO} : ~{W_2F_DO[3:1], W_2F_DO[3], ~W_2E_DO};
|
||||
assign O_R = I_DK3B ? W_2F_DO[7:4] : ~{W_2F_DO[3:1], W_2F_DO[3]};
|
||||
assign O_G = I_DK3B ? W_2F_DO[3:0] : ~{W_2F_DO[0], W_2E_DO[3:2], W_2F_DO[0]};
|
||||
assign O_B = I_DK3B ? W_2E_DO[3:0] : ~{W_2E_DO[1:0], W_2E_DO[1:0]};
|
||||
assign O_R = I_DK3B ? W_2F_DO[7:4] : {4{I_PESTPLCE}} ^ ~{W_2F_DO[3:1], W_2F_DO[3]};
|
||||
assign O_G = I_DK3B ? W_2F_DO[3:0] : {4{I_PESTPLCE}} ^ ~{W_2F_DO[0], W_2E_DO[3:2], W_2F_DO[0]};
|
||||
assign O_B = I_DK3B ? W_2E_DO[3:0] : {4{I_PESTPLCE}} ^ ~{W_2E_DO[1:0], W_2E_DO[1:0]};
|
||||
|
||||
endmodule
|
||||
|
||||
@ -31,6 +31,7 @@ module dkong_obj(
|
||||
input CLK_24M,
|
||||
input CLK_12M,
|
||||
input CLK_12M_EN,
|
||||
input I_PESTPLCE,
|
||||
input [9:0] I_AB,
|
||||
// input [7:0] I_DB,
|
||||
input [7:0] I_OBJ_D,
|
||||
@ -170,8 +171,9 @@ always@(posedge W_5F2_Q[0]) W_8H_Q <= W_8H_D;
|
||||
reg [7:0]W_6J_Q;
|
||||
always@(posedge W_5F2_Q[2]) W_6J_Q <= W_HD[7:0];
|
||||
|
||||
wire [7:0]W_6K_D = {W_6J_Q[7],I_CMPBLKn,~I_H_CNT[9],
|
||||
~(I_H_CNT[9]|W_FLIP_2),W_6J_Q[3:0]};
|
||||
wire [7:0]W_6K_D = !I_PESTPLCE ?
|
||||
{W_6J_Q[7],I_CMPBLKn,~I_H_CNT[9],~(I_H_CNT[9]|W_FLIP_2),W_6J_Q[3:0]} :
|
||||
{W_6H_Q[7],I_CMPBLKn,~I_H_CNT[9],~(I_H_CNT[9]|W_FLIP_2),W_6H_Q[3:0]};
|
||||
|
||||
reg [7:0]W_6K_Q;
|
||||
always@(posedge CLK_24M)
|
||||
@ -309,8 +311,9 @@ begin
|
||||
O_OBJ_DO <= O_OBJ_DO ;
|
||||
end
|
||||
|
||||
|
||||
wire [11:0]W_ROM_OBJ_AB = {W_6J_Q[6],W_6H_Q[6:0],W_8H_Q[3:0]^{W_6H_Q[7],W_6H_Q[7],W_6H_Q[7],W_6H_Q[7]}};
|
||||
wire [11:0]W_ROM_OBJ_AB = !I_PESTPLCE ?
|
||||
{W_6J_Q[6],W_6H_Q[6:0],W_8H_Q[3:0]^{{4{W_6H_Q[7]}}}} :
|
||||
{W_6J_Q[7:0],W_8H_Q[3:0]^{4{W_6H_Q[6]}}};
|
||||
|
||||
wire [7:0]W_OBJ_DO_7C,W_OBJ_DO_7D,W_OBJ_DO_7E,W_OBJ_DO_7F;
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@ module dkong_soundboard(
|
||||
input [1:0] W_4H_Q,
|
||||
input [4:0] W_3D_Q,
|
||||
output [15:0] O_SOUND_DAT,
|
||||
output O_SACK,
|
||||
output [11:0] ROM_A,
|
||||
input [7:0] ROM_D,
|
||||
output [18:0] WAV_ROM_A,
|
||||
@ -60,6 +61,7 @@ I8035IP SOUND_CPU
|
||||
.I_P2(I8035_PBO),
|
||||
.O_P2(I8035_PBI)
|
||||
);
|
||||
assign O_SACK = I8035_PBI[4];
|
||||
//-------------------------------------------------
|
||||
|
||||
dkong_sound Digtal_sound
|
||||
|
||||
@ -37,6 +37,8 @@ module dkong_top
|
||||
input [7:0] I_DIP_SW,
|
||||
input I_DKJR,
|
||||
input I_DK3B,
|
||||
input I_RADARSCP,
|
||||
input I_PESTPLCE,
|
||||
|
||||
// VGA (VIDEO) IF
|
||||
output [3:0]O_VGA_R,
|
||||
@ -96,7 +98,7 @@ wire W_SW2_OEn ;
|
||||
wire W_SW3_OEn ;
|
||||
wire W_DIP_OEn ;
|
||||
|
||||
wire [1:0]W_4H_Q;
|
||||
wire [2:0]W_4H_Q;
|
||||
wire [7:0]W_5H_Q;
|
||||
wire [7:0]W_6H_Q;
|
||||
wire [4:0]W_3D_Q;
|
||||
@ -187,6 +189,9 @@ always @(*) begin
|
||||
6'h07: MAIN_CPU_A = {5'h03,W_CPU_A[10:0]}; // 0x3800-0x3FFF -> 0x1800-0x1FFF in ROM file
|
||||
6'h09: MAIN_CPU_A = {5'h05,W_CPU_A[10:0]}; // 0x4800-0x4FFF -> 0x2800-0x2FFF in ROM file
|
||||
6'h0B: MAIN_CPU_A = {5'h07,W_CPU_A[10:0]}; // 0x5800-0x5FFF -> 0x3800-0x3FFF in ROM file
|
||||
//pestplace
|
||||
6'h16: MAIN_CPU_A = {5'h0C,W_CPU_A[10:0]}; // 0xB000-0xB7FF -> 0x6000-0x6FFF in ROM file
|
||||
6'h17: MAIN_CPU_A = {5'h0D,W_CPU_A[10:0]}; // 0xB800-0xBFFF -> 0x6000-0x6FFF in ROM file
|
||||
// dkong3b
|
||||
6'h12: MAIN_CPU_A = {5'h0C,W_CPU_A[10:0]}; // 0x9000-0x97FF -> 0x6000-0x6FFF in ROM file
|
||||
6'h13: MAIN_CPU_A = {5'h0D,W_CPU_A[10:0]}; // 0x9800-0x9FFF -> 0x6000-0x6FFF in ROM file
|
||||
@ -294,9 +299,10 @@ ram_1024_8_8 U_6PR
|
||||
);
|
||||
|
||||
//=========== SW Interface ========================================================
|
||||
wire W_SACK;
|
||||
wire [7:0]W_SW1 = W_SW1_OEn ? 8'h00: ~{1'b1,1'b1,1'b1,I_J1,I_D1,I_U1,I_L1,I_R1};
|
||||
wire [7:0]W_SW2 = W_SW2_OEn ? 8'h00: ~{1'b1,1'b1,1'b1,I_J2,I_D2,I_U2,I_L2,I_R2};
|
||||
wire [7:0]W_SW3 = W_SW3_OEn ? 8'h00: ~{I_C1,1'b1,1'b1,1'b1,I_S2,I_S1,1'b1,1'b1};
|
||||
wire [7:0]W_SW3 = W_SW3_OEn ? 8'h00: ~{I_C1,~I_RADARSCP | W_SACK,1'b1,1'b1,I_S2,I_S1,1'b1,1'b1};
|
||||
wire [7:0]W_DIP = W_DIP_OEn ? 8'h00: I_DIP_SW;
|
||||
|
||||
|
||||
@ -312,6 +318,7 @@ dkong_adec adec
|
||||
.I_RESET_n(W_RESETn),
|
||||
.I_DKJR(I_DKJR),
|
||||
.I_DK3B(I_DK3B),
|
||||
.I_PESTPLCE(I_PESTPLCE),
|
||||
.I_AB(W_CPU_A),
|
||||
.I_DB(WI_D),
|
||||
.I_MREQ_n(W_CPU_MREQn),
|
||||
@ -341,10 +348,12 @@ dkong_adec adec
|
||||
.O_4H_Q(W_4H_Q),
|
||||
.O_5H_Q(W_5H_Q),
|
||||
.O_6H_Q(W_6H_Q),
|
||||
.O_3D_Q(W_3D_Q)
|
||||
.O_3D_Q(W_3D_Q),
|
||||
.O_AREF(W_AREF)
|
||||
);
|
||||
|
||||
wire W_FLIPn = W_5H_Q[2];
|
||||
wire W_DISPLAY = W_5H_Q[1]; // radar enable
|
||||
wire W_FLIPn = I_PESTPLCE ^ W_5H_Q[2];
|
||||
wire W_2PSL = W_5H_Q[3];
|
||||
wire W_DREQ = W_5H_Q[5]; // DMA Trigger
|
||||
|
||||
@ -387,6 +396,7 @@ dkong_obj obj
|
||||
.CLK_24M(W_CLK_24576M),
|
||||
.CLK_12M(WB_CLK_12288M),
|
||||
.CLK_12M_EN(W_CLK_12288M_EN),
|
||||
.I_PESTPLCE(I_PESTPLCE),
|
||||
.I_AB(),
|
||||
.I_DB(/*W_2N_DO*/),
|
||||
.I_OBJ_D(W_OBJ_DI),
|
||||
@ -435,7 +445,44 @@ dkong_vram vram
|
||||
.DL_DATA(DL_DATA)
|
||||
);
|
||||
|
||||
wire W_RADARn;
|
||||
wire W_STARn;
|
||||
wire W_NOISE;
|
||||
wire W_DISPLAY_O;
|
||||
|
||||
radarscp_stars rstars
|
||||
(
|
||||
.CLK_24M(W_CLK_24576M),
|
||||
.CLK_EN(W_CLK_12288M),
|
||||
.RESETn(W_RESETn),
|
||||
.O_RADARn(W_RADARn),
|
||||
.O_STARn(W_STARn),
|
||||
.O_NOISE(W_NOISE),
|
||||
.O_DISPLAY(W_DISPLAY_O),
|
||||
.I_DISPLAY(W_DISPLAY),
|
||||
.I_VBLKn(W_V_BLANKn),
|
||||
.I_H_CNT(W_H_CNT),
|
||||
.I_FLIPn(W_FLIPn),
|
||||
.I_SOU2(W_6H_Q[2]),
|
||||
|
||||
.DL_ADDR(DL_ADDR),
|
||||
.DL_WR(DL_WR),
|
||||
.DL_DATA(DL_DATA)
|
||||
);
|
||||
|
||||
assign O_PIX = W_H_CNT[0];
|
||||
wire [3:0] W_RED;
|
||||
wire [3:0] W_GREEN;
|
||||
wire [3:0] W_BLUE;
|
||||
wire [2:0] W_AREF;
|
||||
wire [2:0] W_GRID = {3{W_L_CMPBLKn & W_DISPLAY_O & ~W_RADARn & I_RADARSCP}} & W_AREF;
|
||||
wire W_STAR = W_L_CMPBLKn & W_NOISE & ~W_STARn & I_RADARSCP;
|
||||
wire [4:0] W_RED_TOTAL = W_RED + {W_GRID[0] | W_STAR, 3'b000};
|
||||
wire [4:0] W_GREEN_TOTAL = W_GREEN + {W_GRID[1] & ~W_STAR, 3'b000};
|
||||
wire [4:0] W_BLUE_TOTAL = W_BLUE + {W_GRID[2] & ~W_STAR, I_RADARSCP & W_L_CMPBLKn, I_RADARSCP & W_L_CMPBLKn, 1'b0};
|
||||
assign O_VGA_R = W_RED_TOTAL[4] ? 4'hF : W_RED_TOTAL[3:0];
|
||||
assign O_VGA_G = W_GREEN_TOTAL[4] ? 4'hF : W_GREEN_TOTAL[3:0];
|
||||
assign O_VGA_B = W_BLUE_TOTAL[4] ? 4'hF : W_BLUE_TOTAL[3:0];
|
||||
|
||||
dkong_col_pal cpal
|
||||
(
|
||||
@ -443,14 +490,15 @@ dkong_col_pal cpal
|
||||
.CLK_24M(W_CLK_24576M),
|
||||
.CLK_6M_EN(W_CLK_12288M & !W_H_CNT[0]),
|
||||
.I_DK3B(I_DK3B),
|
||||
.I_PESTPLCE(I_PESTPLCE),
|
||||
.I_VRAM_D({W_VRAM_COL[3:0],W_VRAM_VID[1:0]}),
|
||||
.I_OBJ_D(W_OBJ_DAT),
|
||||
.I_CMPBLKn(W_L_CMPBLKn),
|
||||
.I_5H_Q6(W_5H_Q[6]),
|
||||
.I_5H_Q7(W_5H_Q[7]),
|
||||
.O_R(O_VGA_R),
|
||||
.O_G(O_VGA_G),
|
||||
.O_B(O_VGA_B),
|
||||
.O_R(W_RED),
|
||||
.O_G(W_GREEN),
|
||||
.O_B(W_BLUE),
|
||||
|
||||
.DL_ADDR(DL_ADDR),
|
||||
.DL_WR(DL_WR),
|
||||
@ -462,6 +510,7 @@ dkong_soundboard dkong_soundboard(
|
||||
.W_RESETn(W_RESETn),
|
||||
.I_DKJR(I_DKJR),
|
||||
.O_SOUND_DAT(O_SOUND_DAT),
|
||||
.O_SACK(W_SACK),
|
||||
.W_6H_Q(W_6H_Q),
|
||||
.W_5H_Q0(W_5H_Q[0]),
|
||||
.W_4H_Q(W_4H_Q),
|
||||
|
||||
@ -0,0 +1,110 @@
|
||||
//===============================================================================
|
||||
// FPGA DONKEY KONG Radar Scope grid/star generator
|
||||
//
|
||||
// Version : 1.00
|
||||
//
|
||||
// Copyright(c) 2021 Gyorgy Szombathelyi
|
||||
//
|
||||
// Important !
|
||||
//
|
||||
// This program is freeware for non-commercial use.
|
||||
// An author does no guarantee about this program.
|
||||
// You can use this under your own risk.
|
||||
//
|
||||
//================================================================================
|
||||
//-----------------------------------------------------------------------------------------
|
||||
// H_CNT[0],H_CNT[1],H_CNT[2],H_CNT[3],H_CNT[4],H_CNT[5],H_CNT[6],H_CNT[7],H_CNT[8],H_CNT[9]
|
||||
// 1/2 H 1 H 2 H 4H 8H 16 H 32H 64 H 128 H 256 H
|
||||
//-----------------------------------------------------------------------------------------
|
||||
|
||||
module radarscp_stars(
|
||||
input CLK_24M,
|
||||
input CLK_EN,
|
||||
input RESETn,
|
||||
output O_RADARn,
|
||||
output O_STARn,
|
||||
output O_NOISE,
|
||||
output O_DISPLAY,
|
||||
input I_DISPLAY,
|
||||
input I_VBLKn,
|
||||
input [9:0] I_H_CNT,
|
||||
input I_FLIPn,
|
||||
input I_SOU2,
|
||||
|
||||
input [15:0] DL_ADDR,
|
||||
input DL_WR,
|
||||
input [7:0] DL_DATA
|
||||
);
|
||||
|
||||
reg [7:0] RADAR_SHIFT;
|
||||
reg [19:0] CNT_30HZ;
|
||||
reg NOISE;
|
||||
reg [15:0] NOISE_LFSR;
|
||||
|
||||
always @(posedge CLK_24M, negedge RESETn) begin
|
||||
if (!RESETn) begin
|
||||
RADAR_SHIFT <= 0;
|
||||
CNT_30HZ <= 0;
|
||||
end else begin
|
||||
CNT_30HZ <= CNT_30HZ + 1'd1;
|
||||
if (CNT_30HZ == 20'd799999) begin
|
||||
RADAR_SHIFT <= {RADAR_SHIFT[6:0], ~^RADAR_SHIFT[7:6]};
|
||||
CNT_30HZ <= 0;
|
||||
|
||||
NOISE_LFSR <= {NOISE_LFSR[14:0], (NOISE ^ NOISE_LFSR[4])};
|
||||
NOISE <= ~NOISE_LFSR[15]; // originally generated on the sound board - used for stars dimming
|
||||
end
|
||||
end
|
||||
end
|
||||
wire W_RFLIP = (RADAR_SHIFT[5] & I_SOU2) ^ I_FLIPn; // does the radar flipping when destroyed
|
||||
|
||||
assign O_DISPLAY = I_DISPLAY; // TODO: grid slow drawing effect
|
||||
|
||||
reg [10:0] STARS_A;
|
||||
wire [7:0] STARS_DO;
|
||||
reg [3:0] W_1E_D;
|
||||
|
||||
assign O_NOISE = NOISE;
|
||||
assign O_STARn = ~(W_1E_D[2] & W_1E_D[1] & W_1E_D[0]);
|
||||
assign O_RADARn = ~(~W_1E_D[2] & W_1E_D[1] & W_1E_D[0]);
|
||||
wire [3:0] W_1E_D_next = { 1'b1, STARS_DO[7], W_1E_D[0], {1'b0, STARS_DO[6:0]} == {I_H_CNT[2], I_H_CNT[9:3]} };
|
||||
|
||||
`ifdef SIM
|
||||
always @(posedge I_H_CNT[0]) begin
|
||||
W_1E_D <= W_1E_D_next;
|
||||
end
|
||||
|
||||
wire W_1G_2E_CLK = ~&W_1E_D[1:0];
|
||||
always @(posedge W_1G_2E_CLK, negedge I_VBLKn) begin
|
||||
if (!I_VBLKn)
|
||||
STARS_A <= {W_RFLIP, 10'd0};
|
||||
else
|
||||
STARS_A <= STARS_A + 1'd1;
|
||||
end
|
||||
`else
|
||||
always @(posedge CLK_24M) begin
|
||||
if (CLK_EN & ~I_H_CNT[0])
|
||||
W_1E_D <= W_1E_D_next;
|
||||
end
|
||||
|
||||
always @(posedge CLK_24M, negedge I_VBLKn) begin
|
||||
if (!I_VBLKn)
|
||||
STARS_A <= 0;
|
||||
else if (CLK_EN) begin
|
||||
if (&W_1E_D[1:0] & ~&W_1E_D_next[1:0]) STARS_A <= {W_RFLIP, STARS_A[9:0] + 1'd1};
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
dpram #(11,8) U_3E (
|
||||
.clock_a(CLK_24M),
|
||||
.address_a(STARS_A),
|
||||
.q_a(STARS_DO),
|
||||
|
||||
.clock_b(CLK_24M),
|
||||
.address_b(DL_ADDR[10:0]),
|
||||
.wren_b(DL_WR && DL_ADDR[15:11] == {4'hF, 1'b1}),
|
||||
.data_b(DL_DATA)
|
||||
);
|
||||
|
||||
endmodule
|
||||
Loading…
x
Reference in New Issue
Block a user