1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-01-18 09:02:08 +00:00

Donkey Kong: add Pest Place

This commit is contained in:
Gyorgy Szombathelyi 2021-01-03 22:47:32 +01:00
parent 789dd9729d
commit 4bfde7ba4a
6 changed files with 77 additions and 10 deletions

View File

@ -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>

View File

@ -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;
@ -161,6 +163,7 @@ dkong_top dkong(
.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),
@ -263,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} ),

View File

@ -25,6 +25,7 @@ I_CLK_EN_N,
I_RESET_n,
I_DKJR,
I_DK3B,
I_PESTPLCE,
I_AB,
I_DB,
I_MREQ_n,
@ -66,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;
@ -154,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

View File

@ -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

View File

@ -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;

View File

@ -38,6 +38,7 @@ module dkong_top
input I_DKJR,
input I_DK3B,
input I_RADARSCP,
input I_PESTPLCE,
// VGA (VIDEO) IF
output [3:0]O_VGA_R,
@ -188,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
@ -314,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),
@ -348,7 +353,7 @@ dkong_adec adec
);
wire W_DISPLAY = W_5H_Q[1]; // radar enable
wire W_FLIPn = W_5H_Q[2];
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
@ -391,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),
@ -484,6 +490,7 @@ 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),