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;