Logo Search packages:      
Sourcecode: pcsx-df version File versions  Download package

psxmem.h

/***************************************************************************
 *   Copyright (C) 2007 Ryan Schultz, PCSX-df Team, PCSX team              *
 *   schultz.ryan@gmail.com, http://rschultz.ath.cx/code.php               *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#ifndef __PSXMEMORY_H__
#define __PSXMEMORY_H__

#include "psxcommon.h"

#if defined(__BIGENDIAN__)

#define _SWAP16(b) ((((unsigned char*)&(b))[0]&0xff) | (((unsigned char*)&(b))[1]&0xff)<<8)
#define _SWAP32(b) ((((unsigned char*)&(b))[0]&0xff) | ((((unsigned char*)&(b))[1]&0xff)<<8) | ((((unsigned char*)&(b))[2]&0xff)<<16) | (((unsigned char*)&(b))[3]<<24))

#define SWAP16(v) ((((v)&0xff00)>>8) +(((v)&0xff)<<8))
#define SWAP32(v) ((((v)&0xff000000ul)>>24) + (((v)&0xff0000ul)>>8) + (((v)&0xff00ul)<<8) +(((v)&0xfful)<<24))
#define SWAPu32(v) SWAP32((u32)(v))
#define SWAPs32(v) SWAP32((s32)(v))

#define SWAPu16(v) SWAP16((u16)(v))
#define SWAPs16(v) SWAP16((s16)(v))

#else

#define SWAP16(b) (b)
#define SWAP32(b) (b)

#define SWAPu16(b) (b)
#define SWAPu32(b) (b)

#endif

s8 *psxM;
#define psxMs8(mem)           psxM[(mem) & 0x1fffff]
#define psxMs16(mem)    (SWAP16(*(s16*)&psxM[(mem) & 0x1fffff]))
#define psxMs32(mem)    (SWAP32(*(s32*)&psxM[(mem) & 0x1fffff]))
#define psxMu8(mem)           (*(u8*)&psxM[(mem) & 0x1fffff]))
#define psxMu16(mem)    (SWAP16(*(u16*)&psxM[(mem) & 0x1fffff]))
#define psxMu32(mem)    (SWAP32(*(u32*)&psxM[(mem) & 0x1fffff]))

#define psxMs8ref(mem)  psxM[(mem) & 0x1fffff]
#define psxMs16ref(mem) (*(s16*)&psxM[(mem) & 0x1fffff])
#define psxMs32ref(mem) (*(s32*)&psxM[(mem) & 0x1fffff])
#define psxMu8ref(mem)  (*(u8*) &psxM[(mem) & 0x1fffff])
#define psxMu16ref(mem) (*(u16*)&psxM[(mem) & 0x1fffff])
#define psxMu32ref(mem) (*(u32*)&psxM[(mem) & 0x1fffff])

s8 *psxP;
#define psxPs8(mem)         psxP[(mem) & 0xffff]
#define psxPs16(mem)    (SWAP16(*(s16*)&psxP[(mem) & 0xffff]))
#define psxPs32(mem)    (SWAP32(*(s32*)&psxP[(mem) & 0xffff]))
#define psxPu8(mem)           (*(u8*) &psxP[(mem) & 0xffff])
#define psxPu16(mem)    (SWAP16(*(u16*)&psxP[(mem) & 0xffff]))
#define psxPu32(mem)    (SWAP32(*(u32*)&psxP[(mem) & 0xffff]))

#define psxPs8ref(mem)  psxP[(mem) & 0xffff]
#define psxPs16ref(mem) (*(s16*)&psxP[(mem) & 0xffff])
#define psxPs32ref(mem) (*(s32*)&psxP[(mem) & 0xffff])
#define psxPu8ref(mem)  (*(u8*) &psxP[(mem) & 0xffff])
#define psxPu16ref(mem) (*(u16*)&psxP[(mem) & 0xffff])
#define psxPu32ref(mem) (*(u32*)&psxP[(mem) & 0xffff])

s8 *psxR;
#define psxRs8(mem)           psxR[(mem) & 0x7ffff]
#define psxRs16(mem)    (SWAP16(*(s16*)&psxR[(mem) & 0x7ffff]))
#define psxRs32(mem)    (SWAP32(*(s32*)&psxR[(mem) & 0x7ffff]))
#define psxRu8(mem)           (*(u8* )&psxR[(mem) & 0x7ffff])
#define psxRu16(mem)    (SWAP16(*(u16*)&psxR[(mem) & 0x7ffff]))
#define psxRu32(mem)    (SWAP32(*(u32*)&psxR[(mem) & 0x7ffff]))

#define psxRs8ref(mem)  psxR[(mem) & 0x7ffff]
#define psxRs16ref(mem) (*(s16*)&psxR[(mem) & 0x7ffff])
#define psxRs32ref(mem) (*(s32*)&psxR[(mem) & 0x7ffff])
#define psxRu8ref(mem)  (*(u8* )&psxR[(mem) & 0x7ffff])
#define psxRu16ref(mem) (*(u16*)&psxR[(mem) & 0x7ffff])
#define psxRu32ref(mem) (*(u32*)&psxR[(mem) & 0x7ffff])

s8 *psxH;
#define psxHs8(mem)           psxH[(mem) & 0xffff]
#define psxHs16(mem)    (SWAP16(*(s16*)&psxH[(mem) & 0xffff]))
#define psxHs32(mem)    (SWAP32(*(s32*)&psxH[(mem) & 0xffff]))
#define psxHu8(mem)           (*(u8*) &psxH[(mem) & 0xffff])
#define psxHu16(mem)    (SWAP16(*(u16*)&psxH[(mem) & 0xffff]))
#define psxHu32(mem)    (SWAP32(*(u32*)&psxH[(mem) & 0xffff]))

#define psxHs8ref(mem)  psxH[(mem) & 0xffff]
#define psxHs16ref(mem) (*(s16*)&psxH[(mem) & 0xffff])
#define psxHs32ref(mem) (*(s32*)&psxH[(mem) & 0xffff])
#define psxHu8ref(mem)  (*(u8*) &psxH[(mem) & 0xffff])
#define psxHu16ref(mem) (*(u16*)&psxH[(mem) & 0xffff])
#define psxHu32ref(mem) (*(u32*)&psxH[(mem) & 0xffff])

u8** psxMemWLUT;
u8** psxMemRLUT;

#define PSXM(mem)       (psxMemRLUT[(mem) >> 16] == 0 ? NULL : (u8*)(psxMemRLUT[(mem) >> 16] + ((mem) & 0xffff)))
#define PSXMs8(mem)           (*(s8 *)PSXM(mem))
#define PSXMs16(mem)    (SWAP16(*(s16*)PSXM(mem)))
#define PSXMs32(mem)    (SWAP32(*(s32*)PSXM(mem)))
#define PSXMu8(mem)           (*(u8 *)PSXM(mem))
#define PSXMu16(mem)    (SWAP16(*(u16*)PSXM(mem)))
#define PSXMu32(mem)    (SWAP32(*(u32*)PSXM(mem)))

#define PSXMu32ref(mem) (*(u32*)PSXM(mem))


#if !defined PSXREC && (defined(__x86_64__) || defined(__i386__) || defined(__sh__) || defined(__ppc__))
#define PSXREC
#endif

int  psxMemInit();
void psxMemReset();
void psxMemShutdown();

u8   psxMemRead8 (u32 mem);
u16  psxMemRead16(u32 mem);
u32  psxMemRead32(u32 mem);
void psxMemWrite8 (u32 mem, u8 value);
void psxMemWrite16(u32 mem, u16 value);
void psxMemWrite32(u32 mem, u32 value);
void *psxMemPointer(u32 mem);

#endif /* __PSXMEMORY_H__ */


Generated by  Doxygen 1.6.0   Back to index