From 19063d428852c9ca63ffc998ad48a3c363ffe2d0 Mon Sep 17 00:00:00 2001
From: Stenzek <stenzek@gmail.com>
Date: Thu, 18 Jul 2024 18:07:06 +1000
Subject: [PATCH] Bus: Mirror BIOS area up to 4MB

Fixes bus error when using PS2 BIOS.
---
 src/core/bus.cpp | 6 +++---
 src/core/bus.h   | 1 +
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/core/bus.cpp b/src/core/bus.cpp
index fb956b16a..6d931ab27 100644
--- a/src/core/bus.cpp
+++ b/src/core/bus.cpp
@@ -1652,7 +1652,7 @@ void Bus::SetHandlers()
   // Cache isolated appears to affect KUSEG+KSEG0.
   SET(g_memory_handlers, KUSEG | RAM_BASE, RAM_MIRROR_SIZE, RAMReadHandler, RAMWriteHandler);
   SET(g_memory_handlers, KUSEG | CPU::SCRATCHPAD_ADDR, 0x1000, ScratchpadReadHandler, ScratchpadWriteHandler);
-  SET(g_memory_handlers, KUSEG | BIOS_BASE, BIOS_SIZE, BIOSReadHandler, IgnoreWriteHandler);
+  SET(g_memory_handlers, KUSEG | BIOS_BASE, BIOS_MIRROR_SIZE, BIOSReadHandler, IgnoreWriteHandler);
   SET(g_memory_handlers, KUSEG | EXP1_BASE, EXP1_SIZE, EXP1ReadHandler, EXP1WriteHandler);
   SET(g_memory_handlers, KUSEG | HW_BASE, HW_SIZE, HardwareReadHandler, HardwareWriteHandler);
   SET(g_memory_handlers, KUSEG | EXP2_BASE, EXP2_SIZE, EXP2ReadHandler, EXP2WriteHandler);
@@ -1662,7 +1662,7 @@ void Bus::SetHandlers()
   // KSEG0 - Cached
   SET(g_memory_handlers, KSEG0 | RAM_BASE, RAM_MIRROR_SIZE, RAMReadHandler, RAMWriteHandler);
   SET(g_memory_handlers, KSEG0 | CPU::SCRATCHPAD_ADDR, 0x1000, ScratchpadReadHandler, ScratchpadWriteHandler);
-  SET(g_memory_handlers, KSEG0 | BIOS_BASE, BIOS_SIZE, BIOSReadHandler, IgnoreWriteHandler);
+  SET(g_memory_handlers, KSEG0 | BIOS_BASE, BIOS_MIRROR_SIZE, BIOSReadHandler, IgnoreWriteHandler);
   SET(g_memory_handlers, KSEG0 | EXP1_BASE, EXP1_SIZE, EXP1ReadHandler, EXP1WriteHandler);
   SET(g_memory_handlers, KSEG0 | HW_BASE, HW_SIZE, HardwareReadHandler, HardwareWriteHandler);
   SET(g_memory_handlers, KSEG0 | EXP2_BASE, EXP2_SIZE, EXP2ReadHandler, EXP2WriteHandler);
@@ -1671,7 +1671,7 @@ void Bus::SetHandlers()
 
   // KSEG1 - Uncached
   SETUC(KSEG1 | RAM_BASE, RAM_MIRROR_SIZE, RAMReadHandler, RAMWriteHandler);
-  SETUC(KSEG1 | BIOS_BASE, BIOS_SIZE, BIOSReadHandler, IgnoreWriteHandler);
+  SETUC(KSEG1 | BIOS_BASE, BIOS_MIRROR_SIZE, BIOSReadHandler, IgnoreWriteHandler);
   SETUC(KSEG1 | EXP1_BASE, EXP1_SIZE, EXP1ReadHandler, EXP1WriteHandler);
   SETUC(KSEG1 | HW_BASE, HW_SIZE, HardwareReadHandler, HardwareWriteHandler);
   SETUC(KSEG1 | EXP2_BASE, EXP2_SIZE, EXP2ReadHandler, EXP2WriteHandler);
diff --git a/src/core/bus.h b/src/core/bus.h
index 319852f44..30023e315 100644
--- a/src/core/bus.h
+++ b/src/core/bus.h
@@ -75,6 +75,7 @@ enum : u32
   EXP3_MASK = EXP3_SIZE - 1,
   BIOS_BASE = 0x1FC00000,
   BIOS_SIZE = 0x80000,
+  BIOS_MIRROR_SIZE = 0x400000,
   BIOS_MASK = 0x7FFFF,
 };