1
0
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:
Marcel
2026-02-22 19:05:38 +01:00
parent 294cb614a9
commit c2298b0c19
4 changed files with 57 additions and 62 deletions

View File

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

View File

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

View File

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

View File

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