From c2298b0c19bbf0c1f9f3ad7ad1f65870d42f3978 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 22 Feb 2026 19:05:38 +0100 Subject: [PATCH] Update Tutankham --- Arcade_MiST/Konami Tutankham/rtl/Tutankham.sv | 44 ++++++++++--------- .../Konami Tutankham/rtl/Tutankham_CPU.sv | 33 +++++++------- .../Konami Tutankham/rtl/Tutankham_TOP.sv | 33 ++++++-------- Arcade_MiST/Konami Tutankham/rtl/blitter.sv | 9 ++-- 4 files changed, 57 insertions(+), 62 deletions(-) diff --git a/Arcade_MiST/Konami Tutankham/rtl/Tutankham.sv b/Arcade_MiST/Konami Tutankham/rtl/Tutankham.sv index 33ff15f7..2e03bfbb 100644 --- a/Arcade_MiST/Konami Tutankham/rtl/Tutankham.sv +++ b/Arcade_MiST/Konami Tutankham/rtl/Tutankham.sv @@ -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 ), diff --git a/Arcade_MiST/Konami Tutankham/rtl/Tutankham_CPU.sv b/Arcade_MiST/Konami Tutankham/rtl/Tutankham_CPU.sv index e51d113b..2c7a24e5 100644 --- a/Arcade_MiST/Konami Tutankham/rtl/Tutankham_CPU.sv +++ b/Arcade_MiST/Konami Tutankham/rtl/Tutankham_CPU.sv @@ -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), diff --git a/Arcade_MiST/Konami Tutankham/rtl/Tutankham_TOP.sv b/Arcade_MiST/Konami Tutankham/rtl/Tutankham_TOP.sv index 838b0299..cd604b51 100644 --- a/Arcade_MiST/Konami Tutankham/rtl/Tutankham_TOP.sv +++ b/Arcade_MiST/Konami Tutankham/rtl/Tutankham_TOP.sv @@ -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 diff --git a/Arcade_MiST/Konami Tutankham/rtl/blitter.sv b/Arcade_MiST/Konami Tutankham/rtl/blitter.sv index 942795e5..2be9c439 100644 --- a/Arcade_MiST/Konami Tutankham/rtl/blitter.sv +++ b/Arcade_MiST/Konami Tutankham/rtl/blitter.sv @@ -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;