From eab984e0870079611995b2ad77fe741a5c19e5e3 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Tue, 14 Jan 2020 11:41:33 +0800 Subject: [PATCH] Support for original The Glob and Beastie Feastie. --- Arcade-Pacman.sv | 3 +++ releases/Beastie Feastie.mra | 31 +++++++++++++++++++++++++++++++ releases/Ther Glob.mra | 31 +++++++++++++++++++++++++++++++ rtl/pacman.vhd | 8 +++++++- rtl/pacman_rom_descrambler.vhd | 11 ++++++++++- 5 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 releases/Beastie Feastie.mra create mode 100644 releases/Ther Glob.mra diff --git a/Arcade-Pacman.sv b/Arcade-Pacman.sv index e70bb91..7521b5d 100644 --- a/Arcade-Pacman.sv +++ b/Arcade-Pacman.sv @@ -212,6 +212,7 @@ reg mod_ponp = 0; reg mod_van = 0; reg mod_pmm = 0; reg mod_dshop= 0; +reg mod_glob = 0; wire mod_gm = mod_gork | mod_mrtnt; @@ -234,6 +235,7 @@ always @(posedge clk_sys) begin mod_van <= (mod == 12); mod_pmm <= (mod == 13); mod_dshop<= (mod == 14); + mod_glob <= (mod == 15); end reg [7:0] sw[8]; @@ -410,6 +412,7 @@ pacman pacman .mod_ponp(mod_ponp | mod_van | mod_dshop), .mod_van(mod_van | mod_dshop), .mod_dshop(mod_dshop), + .mod_glob(mod_glob), .RESET(RESET | status[0] | buttons[1]), .CLK(clk_sys), diff --git a/releases/Beastie Feastie.mra b/releases/Beastie Feastie.mra new file mode 100644 index 0000000..705adcc --- /dev/null +++ b/releases/Beastie Feastie.mra @@ -0,0 +1,31 @@ + + Beastie Feastie (Pac-Man conversion) + 0216 + 201911270000 + Platform + beastfp + pacman + + 0F + + + + + + + + + + + + + + + + + + + + + + diff --git a/releases/Ther Glob.mra b/releases/Ther Glob.mra new file mode 100644 index 0000000..95bc781 --- /dev/null +++ b/releases/Ther Glob.mra @@ -0,0 +1,31 @@ + + The Glob (Pac-Man hardware) + 0216 + 201911270000 + Platform + theglobp + pacman + + 0F + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtl/pacman.vhd b/rtl/pacman.vhd index ead7f70..1ea913f 100644 --- a/rtl/pacman.vhd +++ b/rtl/pacman.vhd @@ -76,6 +76,7 @@ port mod_ms : in std_logic; mod_woodp : in std_logic; mod_eeek : in std_logic; + mod_glob : in std_logic; mod_alib : in std_logic; mod_ponp : in std_logic; mod_van : in std_logic; @@ -568,7 +569,11 @@ eeek_decrypt : process begin wait until rising_edge(clk); if watchdog_reset_l = '0' then - dcnt <= "01"; + if mod_eeek = '1' then + dcnt <= "01"; + else + dcnt <= "10"; + end if; else old_rd_l <= cpu_rd_l; if old_rd_l = '1' and cpu_rd_l = '0' and cpu_iorq_l = '0' and cpu_m1_l = '1' then @@ -587,6 +592,7 @@ port map( MRTNT => mod_mrtnt, MSPACMAN => mod_ms, EEEK => mod_eeek, + GLOB => mod_glob, PLUS => mod_plus, dcnt => dcnt, cpu_m1_l => cpu_m1_l, diff --git a/rtl/pacman_rom_descrambler.vhd b/rtl/pacman_rom_descrambler.vhd index b73ef97..6e417cb 100644 --- a/rtl/pacman_rom_descrambler.vhd +++ b/rtl/pacman_rom_descrambler.vhd @@ -235,6 +235,7 @@ entity rom_descrambler is MSPACMAN : in std_logic := '0'; -- set to 1 when using Ms Pacman ROMs, 0 otherwise PLUS : in std_logic := '0'; EEEK : in std_logic := '0'; + GLOB : in std_logic := '0'; dcnt : in std_logic_vector(1 downto 0); cpu_m1_l : in std_logic; @@ -266,6 +267,7 @@ architecture rtl of rom_descrambler is signal r : std_logic_vector(7 downto 0); signal r2 : std_logic_vector(7 downto 0); + signal r3 : std_logic_vector(7 downto 0); signal mtd_addr : std_logic_vector(4 downto 0); signal method : std_logic_vector(3 downto 0); begin @@ -347,7 +349,12 @@ begin rom_lo(7) & not rom_lo(6) & rom_lo(1) & not rom_lo(0) & rom_lo(3) & not rom_lo(4) & not rom_lo(2) & not rom_lo(5) when dcnt = "10" else rom_lo(7) & not rom_lo(1) & not rom_lo(4) & not rom_lo(0) & rom_lo(3) & rom_lo(6) & not rom_lo(2) & not rom_lo(5); - p_decoder_comb : process(clk, rom_addr, addr, rom_data_in, rom_data_out, rom_patched, rom_hi, r, overlay_on, MRTNT, MSPACMAN, EEEK, r2) + r3 <= not rom_lo(3) & not rom_lo(7) & rom_lo(0) & not rom_lo(6) & not rom_lo(4) & rom_lo(1) & not rom_lo(2) & not rom_lo(5) when dcnt = "00" else + not rom_lo(1) & not rom_lo(7) & rom_lo(0) & rom_lo(3) & not rom_lo(4) & not rom_lo(6) & not rom_lo(2) & not rom_lo(5) when dcnt = "01" else + not rom_lo(3) & not rom_lo(0) & not rom_lo(4) & not rom_lo(6) & rom_lo(7) & rom_lo(1) & not rom_lo(2) & not rom_lo(5) when dcnt = "10" else + not rom_lo(1) & not rom_lo(0) & not rom_lo(4) & rom_lo(3) & rom_lo(7) & not rom_lo(6) & not rom_lo(2) & not rom_lo(5); + + p_decoder_comb : process(clk, rom_addr, addr, rom_data_in, rom_data_out, rom_patched, rom_hi, r, overlay_on, MRTNT, MSPACMAN, EEEK, r2, GLOB, r3) variable patch_addr : std_logic_vector(15 downto 0); begin rom_addr <= addr; @@ -362,6 +369,8 @@ begin if rom_addr(15) = '0' then if EEEK = '1' then rom_data_in <= r2; + elsif GLOB = '1' then + rom_data_in <= r3; else rom_data_in <= r; end if;