diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra
index bec6c7dc..cd98c373 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Ninjakun.mra
@@ -41,20 +41,24 @@
-
+ 0
+
+
+
+
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Raiders5.mra b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Raiders5.mra
new file mode 100644
index 00000000..376a35e0
--- /dev/null
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/meta/Raiders5.mra
@@ -0,0 +1,58 @@
+
+ Raiders5
+
+ no
+ no
+
+
+
+
+ 1984
+ UPL
+ Taito
+ Platform - Climb
+
+ raiders5
+ ninjakun
+ 0220
+ ninjakun
+
+ 15kHz
+ horizontal
+
+
+ 2 (alternating)
+ 2-way horizontal
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv
index 4555f25b..453f5af3 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv
@@ -34,6 +34,7 @@ localparam CONF_STR = {
"O2,Rotate Controls,Off,On;",
"O34,Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;",
"O5,Blend,Off,On;",
+ "O6,Service,Off,On;",
"DIP;",
"T0,Reset;",
"V,v1.00.",`BUILD_DATE
@@ -47,6 +48,21 @@ assign SDRAM_CKE = 1;
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[5];
+wire service = status[6];
+
+wire [6:0] core_mod;
+wire RAIDERS5 = core_mod == 1;
+
+reg [7:0] CTR1, CTR2;
+
+always @(*) begin
+ CTR1 = ~{2'b11, m_one_player, 1'b0, m_fireA, m_fireB, m_right, m_left };
+ CTR2 = ~{~(m_coin1 | m_coin2), ~service, m_two_players, 1'b0, m_fire2A, m_fire2B, m_right2, m_left2 };
+ if (RAIDERS5) begin
+ CTR1 = ~{1'b0, 1'b0, m_one_player, m_fireA, m_up, m_down, m_right, m_left };
+ CTR2 = ~{(m_coin1 | m_coin2), service, m_two_players, m_fire2A, m_up2, m_down2, m_right2, m_left2};
+ end
+end
wire CLOCK_48, pll_locked;
pll pll(
@@ -175,8 +191,9 @@ wire [11:0] POUT;
ninjakun_top ninjakun_top(
.RESET(reset),
.MCLK(CLOCK_48),
- .CTR1(~{2'b11, m_one_player, 1'b0, m_fireA, m_fireB, m_right, m_left }),
- .CTR2(~{~(m_coin1 | m_coin2), 1'b1, m_two_players, 1'b0, m_fireB, m_fire2B, m_right2, m_left2 }),
+ .RAIDERS5(RAIDERS5),
+ .CTR1(CTR1),
+ .CTR2(CTR2),
.DSW1(status[15:8]),
.DSW2(status[23:16]),
.PH(HPOS),
@@ -244,6 +261,7 @@ user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
+ .core_mod (core_mod ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_adec.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_adec.v
index b5b9977e..c017d17a 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_adec.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_adec.v
@@ -1,5 +1,6 @@
module ninjakun_adec
(
+ input RAIDERS5,
input [15:0] CP0AD,
input CP0WR,
@@ -16,13 +17,26 @@ module ninjakun_adec
output SYNWR1
);
-assign CS_IN0 = (CP0AD[15:2] == 14'b1010_0000_0000_00);
-assign CS_IN1 = (CP1AD[15:2] == 14'b1010_0000_0000_00);
+always @(*) begin
+ CS_IN0 = (CP0AD[15:2] == 14'b1010_0000_0000_00);
+ CS_IN1 = (CP1AD[15:2] == 14'b1010_0000_0000_00);
-assign CS_SH0 = (CP0AD[15:11] == 5'b1110_0);
-assign CS_SH1 = (CP1AD[15:11] == 5'b1110_0);
+ CS_SH0 = (CP0AD[15:11] == 5'b1110_0);
+ CS_SH1 = (CP1AD[15:11] == 5'b1110_0);
-assign SYNWR0 = CS_IN0 & (CP0AD[1:0]==2) & CP0WR;
-assign SYNWR1 = CS_IN1 & (CP1AD[1:0]==2) & CP1WR;
+ SYNWR0 = CS_IN0 & (CP0AD[1:0]==2) & CP0WR;
+ SYNWR1 = CS_IN1 & (CP1AD[1:0]==2) & CP1WR;
+
+ if (RAIDERS5) begin
+ CS_IN0 = 0;
+ CS_IN1 = 0;
+
+ CS_SH0 = (CP0AD[15:11] == 5'b1110_0);
+ CS_SH1 = (CP1AD[15:11] == 5'b1010_0);
+
+ SYNWR0 = 0;
+ SYNWR1 = 0;
+ end
+end
endmodule
\ No newline at end of file
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v
index 117e5cb0..6f32333a 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v
@@ -6,6 +6,7 @@ module ninjakun_cpumux
input [7:0] CPIDT,
output CPRED,
output CPWRT,
+ output CPSEL,
output reg CP0CL,
output reg CP0CE_P,
@@ -26,6 +27,7 @@ module ninjakun_cpumux
input CP1WR
);
+assign CPSEL = CSIDE;
reg [7:0] CP0DT, CP1DT;
reg [3:0] PHASE;
reg CSIDE;
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v
index 9dea211e..8b36b0c9 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v
@@ -2,28 +2,32 @@
module ninjakun_io_video
(
- input MCLK,
- input PCLK_EN,
- input RESET,
- input [8:0] PH,
- input [8:0] PV,
- input [15:0] CPADR,
- input [7:0] CPODT,
- output [7:0] CPIDT,
- input CPRED,
- input CPWRT,
- input [7:0] DSW1,
- input [7:0] DSW2,
- output VBLK,
- output [7:0] POUT,
- output [15:0] SNDOUT,
- output [12:0] sp_rom_addr,
- input [31:0] sp_rom_data,
+ input MCLK,
+ input RAIDERS5,
+ input PCLK_EN,
+ input RESET,
+ input [8:0] PH,
+ input [8:0] PV,
+ input [15:0] CPADR,
+ input [7:0] CPODT,
+ output [7:0] CPIDT,
+ input CPRED,
+ input CPWRT,
+ input CPSEL,
+ input [7:0] DSW1,
+ input [7:0] DSW2,
+ input [7:0] CTR1,
+ input [7:0] CTR2,
+ output VBLK,
+ output [7:0] POUT,
+ output [15:0] SNDOUT,
+ output [12:0] sp_rom_addr,
+ input [31:0] sp_rom_data,
input sp_rdy,
- output [12:0] fg_rom_addr,
- input [31:0] fg_rom_data,
- output [12:0] bg_rom_addr,
- input [31:0] bg_rom_data
+ output [12:0] fg_rom_addr,
+ input [31:0] fg_rom_data,
+ output [12:0] bg_rom_addr,
+ input [31:0] bg_rom_data
);
wire [9:0] FGVAD;
@@ -32,12 +36,16 @@ wire [9:0] BGVAD;
wire [15:0] BGVDT;
wire [10:0] SPAAD;
wire [7:0] SPADT;
-wire [7:0] SCRPX, SCRPY;
+wire [7:0] SCRPX = RAIDERS5 ? SCRPX_CPU : SCRPX_PSG, SCRPY = RAIDERS5 ? SCRPY_CPU : SCRPY_PSG;
+wire [7:0] SCRPX_PSG, SCRPY_PSG;
+reg [7:0] SCRPX_CPU, SCRPY_CPU;
wire [8:0] PALET;
+
NINJAKUN_VIDEO video (
.RESET(RESET),
.MCLK(MCLK),
.PCLK_EN(PCLK_EN),
+ .RAIDERS5(RAIDERS5),
.PH(PH),
.PV(PV),
.PALAD(PALET), // Pixel Output (Palet Index)
@@ -60,15 +68,28 @@ NINJAKUN_VIDEO video (
.bg_rom_data(bg_rom_data)
);
-wire CS_PSG, CS_FGV, CS_BGV, CS_SPA, CS_PAL;
+wire CS_SCRX, CS_SCRY, CS_PSG, CS_FGV, CS_BGV, CS_SPA, CS_PAL;
ninjakun_sadec sadec(
+ .RAIDERS5(RAIDERS5),
.CPADR(CPADR),
+ .CPSEL(CPSEL),
+ .CS_SCRX(CS_SCRX),
+ .CS_SCRY(CS_SCRY),
.CS_PSG(CS_PSG),
.CS_FGV(CS_FGV),
.CS_BGV(CS_BGV),
.CS_SPA(CS_SPA),
.CS_PAL(CS_PAL)
);
+always @(posedge MCLK) begin
+ if (RESET) begin
+ SCRPX_CPU <= 0;
+ SCRPY_CPU <= 0;
+ end else begin
+ if (CS_SCRX) SCRPX_CPU <= CPODT;
+ if (CS_SCRY) SCRPY_CPU <= CPODT;
+ end
+end
wire [7:0] PSDAT, FGDAT = CPADR[10] ? FGDAT16[15:8] : FGDAT16[7:0], BGDAT = CPADR[10] ? BGDAT16[15:8] : BGDAT16[7:0], SPDAT, PLDAT;
wire [15:0] FGDAT16, BGDAT16;
@@ -98,6 +119,7 @@ dataselector_5D_8B cpxdsel(
ninjakun_psg psg(
.MCLK(MCLK),
+ .RAIDERS5(RAIDERS5),
.ADR(CPADR[1:0]),
.CS(CS_PSG),
.WR(CPWRT),
@@ -107,8 +129,11 @@ ninjakun_psg psg(
.RD(CPRED),
.DSW1(DSW1),
.DSW2(DSW2),
- .SCRPX(SCRPX),
- .SCRPY(SCRPY),
+ .CTR1(CTR1),
+ .CTR2(CTR2),
+ .VBLK(VBLK),
+ .SCRPX(SCRPX_PSG),
+ .SCRPY(SCRPY_PSG),
.SNDO(SNDOUT)
);
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v
index 7271381b..9b2460c9 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v
@@ -1,7 +1,8 @@
module ninjakun_main(
- input RESET,
- input MCLK,
- input VBLK,
+ input RESET,
+ input MCLK,
+ input RAIDERS5,
+ input VBLK,
input [7:0] CTR1,
input [7:0] CTR2,
@@ -11,6 +12,7 @@ module ninjakun_main(
input [7:0] CPIDT,
output CPRED,
output CPWRT,
+ output CPSEL,
output [14:0] CPU1ADDR,
input [7:0] CPU1DT,
@@ -72,6 +74,7 @@ ninjakun_cpumux ioshare(
.CPIDT(CPIDT),
.CPRED(CPRED),
.CPWRT(CPWRT),
+ .CPSEL(CPSEL),
.CP0CE_P(CP0CE_P),
.CP0CE_N(CP0CE_N),
.CP0AD(CP0AD),
@@ -91,6 +94,7 @@ ninjakun_cpumux ioshare(
wire CS_SH0, CS_SH1, CS_IN0, CS_IN1;
wire SYNWR0, SYNWR1;
ninjakun_adec adec(
+ .RAIDERS5(RAIDERS5),
.CP0AD(CP0AD),
.CP0WR(CP0WR),
.CP1AD(CP1AD),
@@ -113,8 +117,8 @@ assign ROM1D = CPU2DT;
wire [7:0] SHDT0, SHDT1;
dpram #(8,11) shmem(
- MCLK, CS_SH0 & CP0WR, { CP0AD[10] ,CP0AD[9:0]}, CP0OD, SHDT0,
- MCLK, CS_SH1 & CP1WR, {~CP1AD[10], CP1AD[9:0]}, CP1OD, SHDT1);
+ MCLK, CS_SH0 & CP0WR, { CP0AD[10] ,CP0AD[9:0]}, CP0OD, SHDT0,
+ MCLK, CS_SH1 & CP1WR, {RAIDERS5 ^ ~CP1AD[10], CP1AD[9:0]}, CP1OD, SHDT1);
wire [7:0] INPD0, INPD1;
ninjakun_input inps(
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v
index d74a98ce..f0992b2f 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v
@@ -1,18 +1,22 @@
module ninjakun_psg
(
- input MCLK,
- input [1:0] ADR,
- input CS,
- input WR,
- input [7:0] ID,
- output [7:0] OD,
- input RESET,
- input RD,
- input [7:0] DSW1,
- input [7:0] DSW2,
- output [7:0] SCRPX,
- output [7:0] SCRPY,
- output [15:0] SNDO
+ input MCLK,
+ input RAIDERS5,
+ input [1:0] ADR,
+ input CS,
+ input WR,
+ input [7:0] ID,
+ output [7:0] OD,
+ input RESET,
+ input RD,
+ input [7:0] DSW1,
+ input [7:0] DSW2,
+ input [7:0] CTR1,
+ input [7:0] CTR2,
+ input VBLK,
+ output [7:0] SCRPX,
+ output [7:0] SCRPY,
+ output [15:0] SNDO
);
wire [7:0] OD0, OD1;
@@ -60,8 +64,8 @@ YM2149 psg0(
.I_SEL_L(1'b0),
.O_AUDIO(S0x),
.O_CHAN(S0c),
- .I_IOA(DSW1),
- .I_IOB(DSW2),
+ .I_IOA(RAIDERS5 ? {~VBLK, CTR1[6:0]} : DSW1),
+ .I_IOB(RAIDERS5 ? CTR2 : DSW2),
.ENA(ENA),
.RESET_L(~RESET),
.CLK(MCLK)
@@ -78,8 +82,8 @@ YM2149 psg1(
.I_SEL_L(1'b0),
.O_AUDIO(S1x),
.O_CHAN(S1c),
- .I_IOA(8'd0),
- .I_IOB(8'd0),
+ .I_IOA(RAIDERS5 ? DSW1 : 8'd0),
+ .I_IOB(RAIDERS5 ? DSW2 : 8'd0),
.O_IOA(SCRPX),
.O_IOB(SCRPY),
.ENA(ENA),
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sadec.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sadec.v
index 89bd4b14..91080b45 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sadec.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sadec.v
@@ -2,18 +2,46 @@
module ninjakun_sadec
(
+ input RAIDERS5,
input [15:0] CPADR,
- output CS_PSG,
- output CS_FGV,
- output CS_BGV,
- output CS_SPA,
- output CS_PAL
+ input CPSEL,
+ output CS_SCRX,
+ output CS_SCRY,
+ output CS_PSG,
+ output CS_FGV,
+ output CS_BGV,
+ output CS_SPA,
+ output CS_PAL
);
-assign CS_PSG = ( CPADR[15: 2] == 14'b1000_0000_0000_00 );
-assign CS_FGV = ( CPADR[15:11] == 5'b1100_0 );
-assign CS_BGV = ( CPADR[15:11] == 5'b1100_1 );
-assign CS_SPA = ( CPADR[15:11] == 5'b1101_0 );
-assign CS_PAL = ( CPADR[15:11] == 5'b1101_1 );
+always @(*) begin
+ CS_PSG = ( CPADR[15: 2] == 14'b1000_0000_0000_00 );
+ CS_FGV = ( CPADR[15:11] == 5'b1100_0 );
+ CS_BGV = ( CPADR[15:11] == 5'b1100_1 );
+ CS_SPA = ( CPADR[15:11] == 5'b1101_0 );
+ CS_PAL = ( CPADR[15:11] == 5'b1101_1 );
+ CS_SCRX = 0;
+ CS_SCRY = 0;
+
+ if (RAIDERS5) begin
+ if (CPSEL) begin
+ CS_SCRX = ( CPADR == 16'he000 );
+ CS_SCRY = ( CPADR == 16'he001 );
+ CS_PSG = ( CPADR[15: 2] == 14'b1000_0000_0000_00 );
+ CS_FGV = 0;
+ CS_BGV = 0;
+ CS_SPA = 0;
+ CS_PAL = 0;
+ end else begin
+ CS_SCRX = ( CPADR == 16'ha000 );
+ CS_SCRY = ( CPADR == 16'ha001 );
+ CS_PSG = ( CPADR[15: 2] == 14'b1100_0000_0000_00 );
+ CS_FGV = ( CPADR[15:11] == 5'b1000_1 );
+ CS_BGV = ( CPADR[15:11] == 5'b1001_0 );
+ CS_SPA = ( CPADR[15:11] == 5'b1000_0 );
+ CS_PAL = ( CPADR[15:11] == 5'b1101_0 );
+ end
+ end
+end
endmodule
\ No newline at end of file
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v
index b31ec920..b9d4c948 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v
@@ -2,24 +2,25 @@
module NINJAKUN_SP
(
- input MCLK,
- input PCLK_EN,
- input RESET,
+ input MCLK,
+ input PCLK_EN,
+ input RESET,
+ input RAIDERS5,
- input [8:0] PH,
- input [8:0] PV,
+ input [8:0] PH,
+ input [8:0] PV,
- output [10:0] SPAAD,
- input [7:0] SPADT,
+ output [10:0] SPAAD,
+ input [7:0] SPADT,
- output [12:0] SPCAD,
- input [31:0] SPCDT,
- input SPCFT,
+ output [12:0] SPCAD,
+ input [31:0] SPCDT,
+ input SPCFT,
- output [8:0] SPOUT
+ output [8:0] SPOUT
);
-wire WPEN;
+wire WPEN;
wire [8:0] WPAD;
wire [7:0] WPIX;
@@ -42,7 +43,7 @@ always @(posedge MCLK) begin
end
NINJAKUN_SPENG eng (
- MCLK, RESET, PH, PV,
+ MCLK, RESET, RAIDERS5, PH, PV,
SPAAD, SPADT,
SPCAD, SPCDT, SPCFT,
WPAD, WPIX, WPEN
@@ -55,34 +56,38 @@ endmodule
module NINJAKUN_SPENG
(
- input MCLK,
- input RESET,
+ input MCLK,
+ input RESET,
+ input RAIDERS5,
- input [8:0] PH,
- input [8:0] PV,
+ input [8:0] PH,
+ input [8:0] PV,
- output [10:0] SPAAD,
- input [7:0] SPADT,
+ output [10:0] SPAAD,
+ input [7:0] SPADT,
- output reg [12:0] SPCAD,
- input [31:0] SPCDT,
- input SPCFT,
+ output reg [12:0] SPCAD,
+ input [31:0] SPCDT,
+ input SPCFT,
- output [8:0] WPAD,
- output [7:0] WPIX,
- output WPEN
+ output [8:0] WPAD,
+ output [7:0] WPIX,
+ output WPEN
);
reg [5:0] SPRNO;
reg [1:0] SPRIX;
-assign SPAAD = {SPRNO, 3'h0, SPRIX};
+assign SPAAD = {SPRNO, 3'h0, SPRIX};
reg [7:0] ATTR;
-wire [3:0] PALNO = ATTR[3:0];
-wire FLIPH = ATTR[4];
-wire FLIPV = ATTR[5];
-wire XPOSH = ATTR[6];
-wire DSABL = ATTR[7];
+//wire [3:0] PALNO = RAIDERS5 ? ATTR[7:4] : ATTR[3:0];
+reg [3:0] PALNO;
+reg FLIPH;
+reg FLIPV;
+//wire FLIPH = ATTR[4];
+//wire FLIPV = ATTR[5];
+wire XPOSH = !RAIDERS5 & ATTR[6];
+wire DSABL = RAIDERS5 ? ATTR[3] : ATTR[7];
reg [7:0] YPOS;
reg [7:0] NV;
@@ -93,11 +98,11 @@ wire YHIT = (HV[7:4]==4'b1111) & (~DSABL);
reg [7:0] XPOS;
reg [4:0] WP;
wire [3:0] WOFS = {4{FLIPH}}^(WP[3:0]);
-assign WPAD = {1'b0,XPOS}-{XPOSH,8'h0}+WOFS-1'd1;
-assign WPEN = ~(WP[4]|(WPIX[3:0]==0));
+assign WPAD = {1'b0,XPOS}-{XPOSH,8'h0}+WOFS-1'd1;
+assign WPEN = ~(WP[4]|(WPIX[3:0]==0));
reg [7:0] PTNO;
-reg CRS;
+reg CRS;
function [3:0] XOUT;
input [2:0] N;
@@ -151,12 +156,23 @@ always @( posedge MCLK ) begin
end
`FETCH1: begin
ATTR = SPADT; /* ATTR must block assign */
+ if (!RAIDERS5) begin
+ PALNO <= SPADT[3:0];
+ FLIPH <= SPADT[4];
+ FLIPV <= SPADT[5];
+ end else begin
+ PALNO <= SPADT[7:4];
+ end
SPRIX <= 0;
STATE <= YHIT ? `FETCH2 : `NEXT;
end
`FETCH2: begin
- PTNO <= SPADT;
+ if (RAIDERS5) begin
+ FLIPH <= SPADT[0];
+ FLIPV <= SPADT[1];
+ end
+ PTNO <= RAIDERS5 ? { ATTR[2:0], SPADT[7:2] } : SPADT;
SPRIX <= 1;
STATE <= `FETCH3;
end
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v
index 2e6366e1..b530b3e5 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v
@@ -11,6 +11,7 @@ module ninjakun_top
(
input RESET, // RESET
input MCLK, // Master Clock (48.0MHz)
+ input RAIDERS5,
input [7:0] CTR1, // Control Panel
input [7:0] CTR2,
input [7:0] DSW1, // DipSW
@@ -40,11 +41,13 @@ assign PCLK_EN = CLKDIV[2:0] == 3'b111;
wire [15:0] CPADR;
wire [7:0] CPODT, CPIDT;
+wire CPSEL;
wire CPRED, CPWRT, VBLK;
ninjakun_main ninjakun_main(
.RESET(RESET),
.MCLK(MCLK),
+ .RAIDERS5(RAIDERS5),
.VBLK(VBLK),
.CTR1(CTR1),
.CTR2(CTR2),
@@ -53,6 +56,7 @@ ninjakun_main ninjakun_main(
.CPIDT(CPIDT),
.CPRED(CPRED),
.CPWRT(CPWRT),
+ .CPSEL(CPSEL),
.CPU1ADDR(CPU1ADDR),
.CPU1DT(CPU1DT),
.CPU2ADDR(CPU2ADDR),
@@ -68,6 +72,7 @@ wire [8:0] PALET;
wire [7:0] SCRPX, SCRPY;
ninjakun_io_video ninjakun_io_video(
.MCLK(MCLK),
+ .RAIDERS5(RAIDERS5),
.PCLK_EN(PCLK_EN),
.RESET(RESET),
.PH(PH),
@@ -77,8 +82,11 @@ ninjakun_io_video ninjakun_io_video(
.CPIDT(CPIDT),
.CPRED(CPRED),
.CPWRT(CPWRT),
+ .CPSEL(CPSEL),
.DSW1(DSW1),
.DSW2(DSW2),
+ .CTR1(CTR1),
+ .CTR2(CTR2),
.VBLK(VBLK),
.POUT(POUT),
.SNDOUT(SNDOUT),
diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v
index 2632a4d0..a73eeed4 100644
--- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v
+++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v
@@ -2,28 +2,29 @@
module NINJAKUN_VIDEO
(
- input RESET,
- input MCLK,
- input PCLK_EN,
+ input RESET,
+ input MCLK,
+ input PCLK_EN,
+ input RAIDERS5,
- input [8:0] PH,
- input [8:0] PV,
+ input [8:0] PH,
+ input [8:0] PV,
- output [8:0] PALAD, // Pixel Output (Palet Index)
+ output [8:0] PALAD, // Pixel Output (Palet Index)
- output [9:0] FGVAD, // FG
- input [15:0] FGVDT,
+ output [9:0] FGVAD, // FG
+ input [15:0] FGVDT,
- output [9:0] BGVAD, // BG
- input [15:0] BGVDT,
- input [7:0] BGSCX,
- input [7:0] BGSCY,
+ output [9:0] BGVAD, // BG
+ input [15:0] BGVDT,
+ input [7:0] BGSCX,
+ input [7:0] BGSCY,
- output [10:0] SPAAD, // Sprite
- input [7:0] SPADT,
+ output [10:0] SPAAD, // Sprite
+ input [7:0] SPADT,
- output VBLK,
- input DBGPD, // Palet Display (for Debug)
+ output VBLK,
+ input DBGPD, // Palet Display (for Debug)
output [12:0] sp_rom_addr,
input [31:0] sp_rom_data,
@@ -63,7 +64,7 @@ assign BGCDT = bg_rom_data;
wire FGPRI;
wire [8:0] FGOUT;
NINJAKUN_FG fg(
- MCLK, PCLK_EN,
+ MCLK, PCLK_EN, RAIDERS5,
PH, PV,
FGVAD, FGVDT,
FGCAD, FGCDT,
@@ -74,8 +75,9 @@ wire FGPPQ = FGOPQ & (~FGPRI);
// Back-Ground Scanline Generator
wire [8:0] BGOUT;
+
NINJAKUN_BG bg(
- MCLK, PCLK_EN,
+ MCLK, PCLK_EN, RAIDERS5,
PH, PV,
BGSCX, BGSCY,
BGVAD, BGVDT,
@@ -85,8 +87,9 @@ NINJAKUN_BG bg(
// Sprite Scanline Generator
wire [8:0] SPOUT;
+
NINJAKUN_SP sp(
- MCLK, PCLK_EN, RESET,
+ MCLK, PCLK_EN, RESET, RAIDERS5,
PH, PV,
SPAAD, SPADT,
SPCAD, SPCDT, SPCFT,
@@ -98,38 +101,37 @@ wire SPOPQ = (SPOUT[3:0]!=0);
wire [8:0] PDOUT = (PV[7]|PV[8]) ? 9'd0 : {PV[6:2],PH[7:4]};
// Color Mixer
-DSEL4_9B cmix( PALAD,
- DBGPD, PDOUT,
- FGPPQ, FGOUT,
- SPOPQ, SPOUT,
- FGOPQ, FGOUT,
- BGOUT
-);
+assign PALAD = DBGPD ? PDOUT :
+ FGPPQ ? FGOUT :
+ SPOPQ ? SPOUT :
+ FGOPQ ? FGOUT :
+ BGOUT;
endmodule
// ForeGround Scanline Generator
module NINJAKUN_FG
(
- input MCLK,
- input PCLK_EN,
+ input MCLK,
+ input PCLK_EN,
+ input RAIDERS5,
- input [8:0] PH, // CRTC
- input [8:0] PV,
+ input [8:0] PH, // CRTC
+ input [8:0] PV,
- output reg [9:0] FGVAD, // VRAM
- input [15:0] FGVDT,
+ output reg [9:0] FGVAD, // VRAM
+ input [15:0] FGVDT,
- output reg [12:0] FGCAD,
- input [31:0] FGCDT,
+ output reg [12:0] FGCAD,
+ input [31:0] FGCDT,
- output [9:0] FGOUT // PIXEL OUT : {PRIO,PALNO[8:0]}
+ output [9:0] FGOUT // PIXEL OUT : {PRIO,PALNO[8:0]}
);
wire [8:0] POSH = PH+9'd8+9'd1;
wire [8:0] POSV = PV+9'd32;
-wire [9:0] CHRNO = {1'b0,FGVDT[13],FGVDT[7:0]};
+wire [9:0] CHRNO = RAIDERS5 ? {2'b00, FGVDT[7:0]} : {1'b0,FGVDT[13],FGVDT[7:0]};
reg [31:0] CDT;
reg [4:0] PAL;
@@ -137,7 +139,7 @@ reg [3:0] OUT;
always @( posedge MCLK ) begin
if (PCLK_EN)
case(POSH[2:0])
- 0: begin OUT <= CDT[7:4] ; PAL <= FGVDT[12:8]; end
+ 0: begin OUT <= CDT[7:4] ; PAL <= RAIDERS5 ? {1'b0, FGVDT[15:12]} : FGVDT[12:8]; end
1: begin OUT <= CDT[3:0] ; FGVAD <= {POSV[7:3],POSH[7:3]}; end
2: begin OUT <= CDT[15:12]; end
3: begin OUT <= CDT[11:8] ; end
@@ -156,28 +158,29 @@ endmodule
// BackGround Scanline Generator
module NINJAKUN_BG
(
- input MCLK,
- input PCLK_EN,
+ input MCLK,
+ input PCLK_EN,
+ input RAIDERS5,
- input [8:0] PH, // CRTC
- input [8:0] PV,
+ input [8:0] PH, // CRTC
+ input [8:0] PV,
- input [7:0] BGSCX, // SCRREG
- input [7:0] BGSCY,
+ input [7:0] BGSCX, // SCRREG
+ input [7:0] BGSCY,
- output reg [9:0] BGVAD, // VRAM
- input [15:0] BGVDT,
+ output reg [9:0] BGVAD, // VRAM
+ input [15:0] BGVDT,
- output reg [12:0] BGCAD,
- input [31:0] BGCDT,
-
- output [8:0] BGOUT // OUTPUT
+ output reg [12:0] BGCAD,
+ input [31:0] BGCDT,
+
+ output [8:0] BGOUT // OUTPUT
);
wire [8:0] POSH = PH+BGSCX+9'd2;
wire [8:0] POSV = PV+BGSCY+9'd32;
-wire [9:0] CHRNO = {BGVDT[15:14],BGVDT[7:0]};
+wire [9:0] CHRNO = RAIDERS5 ? {1'b0, BGVDT[8:0]} : {BGVDT[15:14],BGVDT[7:0]};
reg [31:0] CDT;
reg [3:0] PAL;
@@ -185,7 +188,7 @@ reg [3:0] OUT;
always @( posedge MCLK ) begin
if (PCLK_EN)
case(POSH[2:0])
- 0: begin OUT <= CDT[7:4] ; PAL <= BGVDT[11:8]; end
+ 0: begin OUT <= CDT[7:4] ; PAL <= RAIDERS5 ? BGVDT[15:12] : BGVDT[11:8]; end
1: begin OUT <= CDT[3:0] ; BGVAD <= {POSV[7:3],POSH[7:3]}; end
2: begin OUT <= CDT[15:12]; end
3: begin OUT <= CDT[11:8] ; end
@@ -199,33 +202,3 @@ end
assign BGOUT = { 1'b1, PAL, OUT };
endmodule
-
-
-module DSEL4_9B
-(
- output [8:0] OUT,
-
- input EN1,
- input [8:0] IN1,
-
- input EN2,
- input [8:0] IN2,
-
- input EN3,
- input [8:0] IN3,
-
- input EN4,
- input [8:0] IN4,
-
- input [8:0] IND
-);
-
-assign OUT = EN1 ? IN1:
- EN2 ? IN2:
- EN3 ? IN3:
- EN4 ? IN4:
- IND;
-
-endmodule
-
-