summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/mips/mips3com.c
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-04-09 07:31:47 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-04-09 07:31:47 +0000
commiteeee1cb4378411175c14fb463b58d97794063afb (patch)
treec60cf5c4b43311d0b604f82929108c6aa02a70da /src/emu/cpu/mips/mips3com.c
parent0a3bdaa3ef7730bc5b992a7077024f706a1c5c75 (diff)
Rewrote core memory handlers as inline functions. These should be easier to
trace through in a debug build, yet should operate the same as before. Created a complete set of functions for all databus sizes (8,16,32,64) and all endiannesses. A few functions are redundant, but it is now very clear which functions to use in which scenarios. It is also now possible to rely on being able to access values of 8, 16, 32 or 64 bits via the built-in accessors without fear of crashing. Updated all cores using 8-bit handlers to explicitly call the 8-bit handlers with the appropriate endianness. Fixed a few games which were calling n-bit handlers directly to use the generic forms. In the future, this is all the access drivers will have.
Diffstat (limited to 'src/emu/cpu/mips/mips3com.c')
-rw-r--r--src/emu/cpu/mips/mips3com.c79
1 files changed, 12 insertions, 67 deletions
diff --git a/src/emu/cpu/mips/mips3com.c b/src/emu/cpu/mips/mips3com.c
index a8f331468ad..af3d7132c14 100644
--- a/src/emu/cpu/mips/mips3com.c
+++ b/src/emu/cpu/mips/mips3com.c
@@ -29,16 +29,9 @@ static UINT32 compute_prid_register(const mips3_state *mips);
static void tlb_write_common(mips3_state *mips, int index);
static void tlb_entry_log_half(mips3_tlb_entry *tlbent, int index, int which);
-static UINT64 program_read_qword_32be(offs_t offset);
static UINT64 program_read_qword_masked_32be(offs_t offset, UINT64 mem_mask);
-
-static void program_write_qword_32be(offs_t offset, UINT64 data);
static void program_write_qword_masked_32be(offs_t offset, UINT64 data, UINT64 mem_mask);
-
-static UINT64 program_read_qword_32le(offs_t offset);
static UINT64 program_read_qword_masked_32le(offs_t offset, UINT64 mem_mask);
-
-static void program_write_qword_32le(offs_t offset, UINT64 data);
static void program_write_qword_masked_32le(offs_t offset, UINT64 data, UINT64 mem_mask);
@@ -52,14 +45,14 @@ static const memory_accessors be_memory =
program_read_byte_32be,
program_read_word_32be,
program_read_dword_32be,
- program_read_masked_32be,
+ program_read_dword_masked_32be,
program_read_qword_32be,
program_read_qword_masked_32be,
program_write_byte_32be,
program_write_word_32be,
program_write_dword_32be,
- program_write_masked_32be,
+ program_write_dword_masked_32be,
program_write_qword_32be,
program_write_qword_masked_32be
};
@@ -69,14 +62,14 @@ static const memory_accessors le_memory =
program_read_byte_32le,
program_read_word_32le,
program_read_dword_32le,
- program_read_masked_32le,
+ program_read_dword_masked_32le,
program_read_qword_32le,
program_read_qword_masked_32le,
program_write_byte_32le,
program_write_word_32le,
program_write_dword_32le,
- program_write_masked_32le,
+ program_write_dword_masked_32le,
program_write_qword_32le,
program_write_qword_masked_32le
};
@@ -875,18 +868,6 @@ static void tlb_entry_log_half(mips3_tlb_entry *tlbent, int index, int which)
***************************************************************************/
/*-------------------------------------------------
- program_read_qword_32be - read a 64-bit
- big-endian value
--------------------------------------------------*/
-
-static UINT64 program_read_qword_32be(offs_t offset)
-{
- UINT64 result = (UINT64)program_read_dword_32be(offset) << 32;
- return result | program_read_dword_32be(offset + 4);
-}
-
-
-/*-------------------------------------------------
program_read_qword_masked_32be - read a 64-bit
big-endian value with explicit masking
-------------------------------------------------*/
@@ -895,26 +876,14 @@ static UINT64 program_read_qword_masked_32be(offs_t offset, UINT64 mem_mask)
{
UINT64 result = 0;
if (ACCESSING_BITS_32_63)
- result |= (UINT64)program_read_masked_32be(offset, mem_mask >> 32) << 32;
+ result |= (UINT64)program_read_dword_masked_32be(offset, mem_mask >> 32) << 32;
if (ACCESSING_BITS_0_31)
- result |= program_read_masked_32be(offset + 4, mem_mask);
+ result |= program_read_dword_masked_32be(offset + 4, mem_mask);
return result;
}
/*-------------------------------------------------
- program_read_qword_32le - read a 64-bit
- little-endian value
--------------------------------------------------*/
-
-static UINT64 program_read_qword_32le(offs_t offset)
-{
- UINT64 result = program_read_dword_32le(offset);
- return result | ((UINT64)program_read_dword_32le(offset + 4) << 32);
-}
-
-
-/*-------------------------------------------------
program_read_qword_masked_32le - read a 64-bit
little-endian value with explicit masking
-------------------------------------------------*/
@@ -923,26 +892,14 @@ static UINT64 program_read_qword_masked_32le(offs_t offset, UINT64 mem_mask)
{
UINT64 result = 0;
if (ACCESSING_BITS_0_31)
- result |= program_read_masked_32le(offset, mem_mask);
+ result |= program_read_dword_masked_32le(offset, mem_mask);
if (ACCESSING_BITS_32_63)
- result |= (UINT64)program_read_masked_32le(offset + 4, mem_mask >> 32) << 32;
+ result |= (UINT64)program_read_dword_masked_32le(offset + 4, mem_mask >> 32) << 32;
return result;
}
/*-------------------------------------------------
- program_write_qword_32be - write a 64-bit
- big-endian value
--------------------------------------------------*/
-
-static void program_write_qword_32be(offs_t offset, UINT64 data)
-{
- program_write_dword_32be(offset, data >> 32);
- program_write_dword_32be(offset + 4, data);
-}
-
-
-/*-------------------------------------------------
program_write_qword_masked_32be - write a
64-bit big-endian value with explicit masking
-------------------------------------------------*/
@@ -950,21 +907,9 @@ static void program_write_qword_32be(offs_t offset, UINT64 data)
static void program_write_qword_masked_32be(offs_t offset, UINT64 data, UINT64 mem_mask)
{
if (ACCESSING_BITS_32_63)
- program_write_masked_32be(offset, data >> 32, mem_mask >> 32);
+ program_write_dword_masked_32be(offset, data >> 32, mem_mask >> 32);
if (ACCESSING_BITS_0_31)
- program_write_masked_32be(offset + 4, data, mem_mask);
-}
-
-
-/*-------------------------------------------------
- program_write_qword_32le - write a 64-bit
- little-endian value
--------------------------------------------------*/
-
-static void program_write_qword_32le(offs_t offset, UINT64 data)
-{
- program_write_dword_32le(offset, data);
- program_write_dword_32le(offset + 4, data >> 32);
+ program_write_dword_masked_32be(offset + 4, data, mem_mask);
}
@@ -976,7 +921,7 @@ static void program_write_qword_32le(offs_t offset, UINT64 data)
static void program_write_qword_masked_32le(offs_t offset, UINT64 data, UINT64 mem_mask)
{
if (ACCESSING_BITS_0_31)
- program_write_masked_32le(offset, data, mem_mask);
+ program_write_dword_masked_32le(offset, data, mem_mask);
if (ACCESSING_BITS_32_63)
- program_write_masked_32le(offset + 4, data >> 32, mem_mask >> 32);
+ program_write_dword_masked_32le(offset + 4, data >> 32, mem_mask >> 32);
}