mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-03-01 17:26:35 +00:00
Update Tutankham
This commit is contained in:
@@ -49,7 +49,7 @@ localparam CONF_STR = {
|
||||
wire rotate = status[2];
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire blend = status[5];
|
||||
|
||||
wire [1:0] orientation = 'b10;
|
||||
assign LED = ~ioctl_downl;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
assign SDRAM_CLK = clk_sys;
|
||||
@@ -104,7 +104,8 @@ wire ioctl_wr;
|
||||
wire [24:0] ioctl_addr;
|
||||
wire [7:0] ioctl_dout;
|
||||
wire [12:0] Sound_Rom_Addr;
|
||||
wire [7:0] Sound_Rom_Data;
|
||||
wire [15:0] CPU_Addr;
|
||||
wire [7:0] CPU_Rom_Data, GFX_Rom_Data, Sound_Rom_Data;
|
||||
|
||||
data_io data_io(
|
||||
.clk_sys ( clk_sys ),
|
||||
@@ -133,11 +134,11 @@ sdram #(49) sdram(
|
||||
.port1_q ( ),
|
||||
|
||||
.cpu1_addr ( 16'hffff),//ioctl_downl ? 16'hffff : {2'b00, main_rom_addr[14:1]} ),
|
||||
.cpu1_q ( ),
|
||||
.cpu1_q ( CPU_Rom_Data ),
|
||||
.cpu2_addr ( 16'hffff),//ioctl_downl ? 16'hffff : Sound_Rom_Addr[12:1] + 16'h3000 ),
|
||||
.cpu2_q ( Sound_Rom_Data ),
|
||||
.cpu3_addr ( 16'hffff),//),
|
||||
.cpu3_q ( ),
|
||||
.cpu3_q ( GFX_Rom_Data ),
|
||||
|
||||
// port2 for sprite graphics
|
||||
.port2_req ( port2_req ),
|
||||
@@ -177,6 +178,7 @@ end
|
||||
|
||||
wire [15:0] audio;
|
||||
wire hs, vs, cs, hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire [4:0] r,g,b;
|
||||
wire [ 3:0] hoffset, voffset;
|
||||
assign { voffset, hoffset } = status[31:24];
|
||||
@@ -185,20 +187,19 @@ Tutankham_TOP Tutankham_TOP_inst
|
||||
(
|
||||
.reset(~reset),
|
||||
.clk_49m(clk_sys),
|
||||
// .juno(),
|
||||
.juno(0),
|
||||
.coin({m_coin2, m_coin1}),
|
||||
.start_buttons({m_two_players, m_one_player}),
|
||||
// .p1_joystick(p1_joystick_sig) , // input [3:0] p1_joystick_sig
|
||||
// .p2_joystick(p2_joystick_sig) , // input [3:0] p2_joystick_sig
|
||||
// .p1_fire(p1_fire_sig) , // input p1_fire_sig
|
||||
// .p2_fire(p2_fire_sig) , // input p2_fire_sig
|
||||
// .m_fire1_l(m_fire1_l_sig) , // input m_fire1_l_sig
|
||||
// .m_fire1_r(m_fire1_r_sig) , // input m_fire1_r_sig
|
||||
// .m_flash1(m_flash1_sig) , // input m_flash1_sig
|
||||
// .m_fire2_l(m_fire2_l_sig) , // input m_fire2_l_sig
|
||||
// .m_fire2_r(m_fire2_r_sig) , // input m_fire2_r_sig
|
||||
// .m_flash2(m_flash2_sig) , // input m_flash2_sig
|
||||
|
||||
.p1_joystick(),//todo
|
||||
.p2_joystick(),
|
||||
.p1_fire(m_fireA),
|
||||
.p2_fire(m_fire2A),
|
||||
.m_fire1_l(m_fireB),
|
||||
.m_fire1_r(m_fireC),
|
||||
.m_flash1(m_fireD),
|
||||
.m_fire2_l(m_fire2B),
|
||||
.m_fire2_r(m_fire2C),
|
||||
.m_flash2(m_fire2D),
|
||||
.btn_service(status[6]),
|
||||
// .dip_sw(dip_sw_sig) , // input [15:0] dip_sw_sig
|
||||
.video_hsync(hs),
|
||||
@@ -214,8 +215,9 @@ Tutankham_TOP Tutankham_TOP_inst
|
||||
.h_center(hoffset),
|
||||
.v_center(voffset),
|
||||
//Rom Data
|
||||
// .cpu_A(cpu_A_sig) , // output [15:0] cpu_A_sig
|
||||
// .mainrom_D(mainrom_D_sig) , // input [7:0] mainrom_D_sig
|
||||
.CPU_Addr(CPU_Addr),
|
||||
.CPU_Rom_Data(CPU_Rom_Data),
|
||||
.GFX_Rom_Data(GFX_Rom_Data),
|
||||
.Sound_Rom_Addr(Sound_Rom_Addr),
|
||||
.Sound_Rom_Data(Sound_Rom_Data),
|
||||
|
||||
@@ -237,9 +239,9 @@ mist_video #(.COLOR_DEPTH(5), .SD_HCNT_WIDTH(11)) mist_video(
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS3 ( SPI_SS3 ),
|
||||
.SPI_DI ( SPI_DI ),
|
||||
.R ( r ),//add blankn
|
||||
.G ( g ),
|
||||
.B ( b ),
|
||||
.R ( blankn ? r : 0 ),
|
||||
.G ( blankn ? g : 0 ),
|
||||
.B ( blankn ? b : 0 ),
|
||||
.HSync ( ~hs ),
|
||||
.VSync ( ~vs ),
|
||||
.VGA_R ( VGA_R ),
|
||||
|
||||
@@ -28,6 +28,7 @@ module Tutankham_CPU
|
||||
(
|
||||
input reset,
|
||||
input clk_49m, //Actual frequency: 49.152MHz
|
||||
input juno,
|
||||
output [4:0] red, green, blue, //15-bit RGB, 5 bits per color
|
||||
output video_hsync, video_vsync, video_csync, //CSync not needed for MISTer
|
||||
output video_hblank, video_vblank,
|
||||
@@ -40,10 +41,9 @@ module Tutankham_CPU
|
||||
input [3:0] p1_joy, // {down, up, right, left} active-HIGH
|
||||
input [3:0] p2_joy, // {down, up, right, left} active-HIGH
|
||||
output [7:0] cpubrd_Dout,
|
||||
output reg [15:0] cpu_A,
|
||||
input [7:0] mainrom_D,
|
||||
// input [7:0] bank_rom_D,
|
||||
// output cpubrd_A5, cpubrd_A6,
|
||||
output reg [15:0] CPU_Addr,
|
||||
input [7:0] CPU_Rom_Data,
|
||||
input [7:0] GFX_Rom_Data,
|
||||
output cs_sounddata, irq_trigger,
|
||||
output cs_dip2, cs_controls_dip1,
|
||||
|
||||
@@ -176,7 +176,7 @@ end
|
||||
//------------------------------------------------------------ CPUs ------------------------------------------------------------//
|
||||
|
||||
//Primary CPU - Motorola MC6809E ( Konami1 for Juno First)
|
||||
//wire [15:0] cpu_A;
|
||||
wire [15:0] cpu_A;
|
||||
wire [7:0] cpu_Dout;
|
||||
wire cpu_RnW;
|
||||
mc6809e E3
|
||||
@@ -301,6 +301,7 @@ wire [7:0] cpu_Din = cs_palette ? palette_D :
|
||||
//Main program ROMs (m1.1h through j6.6h, 6x 4KB = 24KB at 0xA000-0xFFFF)
|
||||
//wire [7:0] rom_m1_D, rom_m2_D, rom_m3_D, rom_m4_D, rom_m5_D, rom_m6_D;
|
||||
//
|
||||
wire [7:0] mainrom_D = CPU_Rom_Data;
|
||||
//wire [7:0] mainrom_D = (cpu_A[15:12] == 4'hA) ? rom_m1_D :
|
||||
// (cpu_A[15:12] == 4'hB) ? rom_m2_D :
|
||||
// (cpu_A[15:12] == 4'hC) ? rom_m3_D :
|
||||
@@ -334,17 +335,17 @@ wire [7:0] cpu_Din = cs_palette ? palette_D :
|
||||
//Bank select register chooses which 4KB bank is visible at 0x9000-0x9FFF
|
||||
wire [7:0] bank0_D, bank1_D, bank2_D, bank3_D, bank4_D;
|
||||
wire [7:0] bank5_D, bank6_D, bank7_D, bank8_D;
|
||||
//
|
||||
wire [7:0] bank_rom_D = (rom_bank == 4'd0) ? bank0_D :
|
||||
(rom_bank == 4'd1) ? bank1_D :
|
||||
(rom_bank == 4'd2) ? bank2_D :
|
||||
(rom_bank == 4'd3) ? bank3_D :
|
||||
(rom_bank == 4'd4) ? bank4_D :
|
||||
(rom_bank == 4'd5) ? bank5_D :
|
||||
(rom_bank == 4'd6) ? bank6_D :
|
||||
(rom_bank == 4'd7) ? bank7_D :
|
||||
(rom_bank == 4'd8) ? bank8_D :
|
||||
8'hFF;
|
||||
wire [7:0] bank_rom_D = GFX_Rom_Data;//todo bank handling
|
||||
//wire [7:0] bank_rom_D = (rom_bank == 4'd0) ? bank0_D :
|
||||
// (rom_bank == 4'd1) ? bank1_D :
|
||||
// (rom_bank == 4'd2) ? bank2_D :
|
||||
// (rom_bank == 4'd3) ? bank3_D :
|
||||
// (rom_bank == 4'd4) ? bank4_D :
|
||||
// (rom_bank == 4'd5) ? bank5_D :
|
||||
// (rom_bank == 4'd6) ? bank6_D :
|
||||
// (rom_bank == 4'd7) ? bank7_D :
|
||||
// (rom_bank == 4'd8) ? bank8_D :
|
||||
// 8'hFF;
|
||||
|
||||
eprom_4k bank0 (.ADDR(cpu_A[11:0]), .CLK(clk_49m), .DATA(bank0_D),
|
||||
.ADDR_DL(ioctl_addr), .CLK_DL(clk_49m), .DATA_IN(ioctl_data),
|
||||
|
||||
@@ -28,6 +28,7 @@ module Tutankham_TOP
|
||||
(
|
||||
input reset,
|
||||
input clk_49m, //Actual frequency: 49.152MHz
|
||||
input juno,
|
||||
input [1:0] coin, //0 = coin 1, 1 = coin 2
|
||||
input [1:0] start_buttons, //0 = Player 1, 1 = Player 2
|
||||
input [3:0] p1_joystick, p2_joystick, //0 = up, 1 = down, 2 = left, 3 = right
|
||||
@@ -46,10 +47,9 @@ module Tutankham_TOP
|
||||
//Screen centering (alters HSync, VSync and VBlank timing in the Konami 082 to reposition the video output)
|
||||
input [3:0] h_center, v_center,
|
||||
|
||||
output [15:0] cpu_A,
|
||||
input [7:0] mainrom_D,
|
||||
// input [7:0] bank_rom_D,
|
||||
|
||||
output [15:0] CPU_Addr,
|
||||
input [7:0] CPU_Rom_Data,
|
||||
input [7:0] GFX_Rom_Data,
|
||||
output [12:0] Sound_Rom_Addr,
|
||||
input [7:0] Sound_Rom_Data,
|
||||
input [24:0] ioctl_addr,
|
||||
@@ -111,6 +111,7 @@ Tutankham_CPU main_pcb
|
||||
(
|
||||
.reset(reset),
|
||||
.clk_49m(clk_49m),
|
||||
.juno(juno),
|
||||
.red(video_r),
|
||||
.green(video_g),
|
||||
.blue(video_b),
|
||||
@@ -150,14 +151,13 @@ Tutankham_CPU main_pcb
|
||||
.bank6_cs_i(bank6_cs_i),
|
||||
.bank7_cs_i(bank7_cs_i),
|
||||
.bank8_cs_i(bank8_cs_i),
|
||||
.cpu_A(cpu_A),
|
||||
.mainrom_D(mainrom_D),
|
||||
// .bank_rom_D(bank_rom_D),
|
||||
//Rom Signals
|
||||
.CPU_Addr(CPU_Addr),
|
||||
.CPU_Rom_Data(CPU_Rom_Data),
|
||||
.GFX_Rom_Data(GFX_Rom_Data),
|
||||
|
||||
.cpubrd_Dout(cpubrd_D),
|
||||
|
||||
// .cpubrd_A5(A5),
|
||||
// .cpubrd_A6(A6),
|
||||
|
||||
.ioctl_addr(ioctl_addr),
|
||||
.ioctl_wr(ioctl_wr_cpu),
|
||||
.ioctl_data(ioctl_data),
|
||||
@@ -185,23 +185,16 @@ TimePilot_SND sound_pcb
|
||||
.p1_fire(~m_fire1_l),
|
||||
.p2_fire(~m_fire2_l),
|
||||
.btn_service(btn_service),
|
||||
|
||||
.cs_controls_dip1(cs_controls_dip1),
|
||||
.cs_dip2(cs_dip2),
|
||||
.cpubrd_A5(cpu_A[5]),
|
||||
.cpubrd_A6(cpu_A[6]),
|
||||
.cpubrd_A5(CPU_Addr[6]),//swapped? todo
|
||||
.cpubrd_A6(CPU_Addr[5]),
|
||||
.cpubrd_Din(cpubrd_D),
|
||||
.controls_dip(controls_dip),
|
||||
.sound(sound),
|
||||
|
||||
.underclock(underclock),
|
||||
|
||||
.ep7_cs_i(ep7_cs_i),
|
||||
.Sound_Rom_Addr(Sound_Rom_Addr),
|
||||
.Sound_Rom_Data(Sound_Rom_Data),
|
||||
.ioctl_addr(ioctl_addr),
|
||||
.ioctl_wr(ioctl_wr_snd),
|
||||
.ioctl_data(ioctl_data)
|
||||
.Sound_Rom_Data(Sound_Rom_Data)
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
@@ -41,8 +41,8 @@ module blitter (
|
||||
reg [2:0] state;
|
||||
|
||||
// Blitter Register Process
|
||||
always @(posedge clk_30M or posedge rst_30M) begin
|
||||
if (rst_30M) begin
|
||||
always @(posedge clk or posedge rst) begin
|
||||
if (rst) begin
|
||||
blitter_src_r <= 16'h0;
|
||||
blitter_dst_r <= 16'h0;
|
||||
blitter_go <= 1'b0;
|
||||
@@ -65,8 +65,8 @@ module blitter (
|
||||
end
|
||||
|
||||
// Blitter State Machine Process
|
||||
always @(posedge clk_30M or posedge rst_30M) begin
|
||||
if (rst_30M) begin
|
||||
always @(posedge clk or posedge rst) begin
|
||||
if (rst) begin
|
||||
cpu_halt <= 1'b0;
|
||||
blitting <= 1'b0;
|
||||
blitter_wr <= 2'b00;
|
||||
@@ -85,7 +85,6 @@ module blitter (
|
||||
S_HALTING: begin
|
||||
if (cpu_ba && cpu_bs) begin
|
||||
blitting <= 1'b1;
|
||||
// VHDL logic: (src[15:2] & "00") + 1
|
||||
blitter_src <= {blitter_src_r[15:2], 2'b00} + 16'd1;
|
||||
blitter_dst <= blitter_dst_r;
|
||||
y <= 0;
|
||||
|
||||
Reference in New Issue
Block a user