mirror of
https://github.com/MiSTer-devel/Arcade-DigDug_MiSTer.git
synced 2026-05-24 03:01:39 +00:00
142 lines
3.3 KiB
Verilog
142 lines
3.3 KiB
Verilog
`timescale 1 ps / 1 ps
|
|
|
|
module emu(
|
|
|
|
input clk_sys /*verilator public_flat*/,
|
|
input RESET /*verilator public_flat*/,
|
|
input [13:0] inputs/*verilator public_flat*/,
|
|
|
|
output [7:0] VGA_R/*verilator public_flat*/,
|
|
output [7:0] VGA_G/*verilator public_flat*/,
|
|
output [7:0] VGA_B/*verilator public_flat*/,
|
|
|
|
output VGA_HS,
|
|
output VGA_VS,
|
|
output VGA_HB,
|
|
output VGA_VB,
|
|
|
|
output [15:0] AUDIO_L,
|
|
output [15:0] AUDIO_R,
|
|
|
|
input ioctl_download,
|
|
input ioctl_upload,
|
|
input ioctl_wr,
|
|
input [24:0] ioctl_addr,
|
|
input [7:0] ioctl_dout,
|
|
input [7:0] ioctl_din,
|
|
input [7:0] ioctl_index,
|
|
output reg ioctl_wait=1'b0
|
|
|
|
);
|
|
|
|
reg ce_pix /*verilator public_flat*/;
|
|
reg pause_cpu /*verilator public_flat*/;
|
|
|
|
// Inputs
|
|
wire bCabinet = 1'b0; // (upright only)
|
|
wire m_right1 = inputs[0];
|
|
wire m_left1 = inputs[1];
|
|
wire m_down1 = inputs[2];
|
|
wire m_up1 = inputs[3];
|
|
wire m_right2 = inputs[4];
|
|
wire m_left2 = inputs[5];
|
|
wire m_down2 = inputs[6];
|
|
wire m_up2 = inputs[7];
|
|
wire m_coin1 = inputs[8];
|
|
wire m_coin2 = inputs[9];
|
|
wire m_start1 = inputs[10];
|
|
wire m_start2 = inputs[11];
|
|
wire m_trig1 = inputs[12];
|
|
wire m_trig2 = inputs[13];
|
|
|
|
wire PCLK;
|
|
wire [8:0] HPOS,VPOS;
|
|
wire [11:0] POUT;
|
|
HVGEN hvgen
|
|
(
|
|
.HPOS(HPOS),.VPOS(VPOS),.PCLK(PCLK),.iRGB(POUT),
|
|
.oRGB({b,g,r}),.HBLK(hblank),.VBLK(vblank),.HSYN(hs),.VSYN(vs)
|
|
);
|
|
assign ce_vid = PCLK;
|
|
|
|
always @(posedge clk_sys) begin
|
|
reg old_clk;
|
|
old_clk <= ce_vid;
|
|
ce_pix <= old_clk & ~ce_vid;
|
|
end
|
|
|
|
// Convert video output to 8bpp RGB
|
|
assign VGA_R = {2{r}};
|
|
assign VGA_G = {2{g}};
|
|
assign VGA_B = {2{b}};
|
|
|
|
wire ce_vid;
|
|
wire hblank, vblank;
|
|
wire hs, vs;
|
|
wire [3:0] r,g,b;
|
|
|
|
assign VGA_HB = hblank;
|
|
assign VGA_HS = hs;
|
|
assign VGA_VB = vblank;
|
|
assign VGA_VS = vs;
|
|
|
|
reg rom_downloaded = 0;
|
|
wire rom_download = ioctl_download && ioctl_index == 8'b0;
|
|
|
|
wire reset/*verilator public_flat*/;
|
|
assign reset = (RESET | rom_download | !rom_downloaded);
|
|
always @(posedge clk_sys) if(rom_download) rom_downloaded <= 1'b1; // Latch downloaded rom state to release reset
|
|
|
|
wire [1:0] COIA = 2'b00; // 1coin/1credit
|
|
wire [2:0] COIB = 3'b001; // 1coin/1credit
|
|
wire CABI = ~bCabinet;
|
|
wire FRZE = 1'b1;
|
|
|
|
wire [1:0] DIFC = 2'b00;
|
|
wire [1:0] LIFE = 2'b00;
|
|
wire [2:0] EXMD = 3'b00;
|
|
wire CONT = 1'b1;
|
|
wire DSND = 1'b1;
|
|
wire SERVICE = 1'b0;
|
|
|
|
reg V_FLIP/*verilator public_flat*/;
|
|
|
|
wire [7:0] DSW0 = {LIFE,EXMD,COIB};
|
|
wire [7:0] DSW1 = {COIA,FRZE,DSND,CONT,CABI,DIFC};
|
|
wire [7:0] INP0 = {SERVICE, 1'b0, m_coin2, m_coin1, m_start2, m_start1, m_trig2, m_trig1 };
|
|
wire [7:0] INP1 = {m_left2, m_down2, m_right2, m_up2, m_left1, m_down1, m_right1, m_up1 };
|
|
|
|
wire [7:0] oPIX;
|
|
wire [7:0] oSND;
|
|
|
|
// always @(posedge clk_sys)
|
|
// begin
|
|
// $display("PCLK: %b HPOS: %d VPOS: %d", PCLK, HPOS, VPOS);
|
|
// end
|
|
|
|
FPGA_DIGDUG GameCore (
|
|
.RESET(reset),.MCLK(clk_sys),
|
|
.INP0(INP0),.INP1(INP1),.DSW0(DSW0),.DSW1(DSW1),
|
|
.PH(HPOS),.PV(VPOS),.PCLK(PCLK),.POUT(oPIX),
|
|
.SOUT(oSND),
|
|
|
|
.LED(),
|
|
|
|
.V_FLIP(V_FLIP),
|
|
|
|
.ROMCL(clk_sys),.ROMAD(ioctl_addr[15:0]),.ROMDT(ioctl_dout),.ROMEN(ioctl_wr & rom_download),
|
|
|
|
.PAUSE(pause_cpu),
|
|
|
|
.hs_address(),
|
|
.hs_data_in(),
|
|
.hs_data_out(),
|
|
.hs_write(),
|
|
.hs_access()
|
|
);
|
|
|
|
assign POUT = {oPIX[7:6],2'b00,oPIX[5:3],1'b0,oPIX[2:0],1'b0};
|
|
//assign AOUT = {oSND,8'h0};
|
|
|
|
endmodule
|