upse-ps1-memory-manager.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * UPSE: the unix playstation sound emulator.
  3. *
  4. * Filename: upse-ps1-memory-manager.h
  5. * Purpose: libupse: UPSE PS1 Memory Manager headers
  6. *
  7. * Copyright (c) 2007 William Pitcock <nenolod@sacredspiral.co.uk>
  8. * Portions copyright (c) 1999-2002 Pcsx Team
  9. * Portions copyright (c) 2004 "Xodnizel"
  10. *
  11. * UPSE is free software, released under the GNU General Public License,
  12. * version 2.
  13. *
  14. * A copy of the GNU General Public License, version 2, is included in
  15. * the UPSE source kit as COPYING.
  16. *
  17. * UPSE is offered without any warranty of any kind, explicit or implicit.
  18. */
  19. #include "config.h"
  20. #ifndef _UPSE__LIBUPSE__UPSE_PS1_MEMORY_MANAGER_H__GUARD
  21. #define _UPSE__LIBUPSE__UPSE_PS1_MEMORY_MANAGER_H__GUARD
  22. #ifdef WORDS_BIGENDIAN
  23. static INLINE u16 BFLIP16(u16 x)
  24. {
  25. return (((x >> 8) & 0xFF) | ((x & 0xFF) << 8));
  26. }
  27. static INLINE u32 BFLIP32(u32 x)
  28. {
  29. return (((x >> 24) & 0xFF) | ((x >> 8) & 0xFF00) | ((x << 8) & 0xFF0000) | ((x << 24) & 0xFF000000));
  30. }
  31. #else
  32. static INLINE u16 BFLIP16(u16 x)
  33. {
  34. return x;
  35. }
  36. static INLINE u32 BFLIP32(u32 x)
  37. {
  38. return x;
  39. }
  40. #endif
  41. static INLINE s32 BFLIP32S(s32 x)
  42. {
  43. return (s32) BFLIP32((u32) x);
  44. }
  45. static INLINE s16 BFLIP16S(s16 x)
  46. {
  47. return (s16) BFLIP16((u16) x);
  48. }
  49. extern char *psxM;
  50. #define psxMu32(mem) (*(u32*)&psxM[(mem) & 0x1fffff])
  51. extern char *psxP;
  52. extern char *psxR;
  53. #define psxRu32(mem) (*(u32*)&psxR[(mem) & 0x7ffff])
  54. extern char *psxH;
  55. #define psxHu8(mem) (*(u8*) &psxH[(mem) & 0xffff])
  56. #define psxHu16(mem) (*(u16*)&psxH[(mem) & 0xffff])
  57. #define psxHu32(mem) (*(u32*)&psxH[(mem) & 0xffff])
  58. extern char **upse_ps1_memory_LUT;
  59. #define PSXM(mem) (upse_ps1_memory_LUT[(mem) >> 16] == 0 ? NULL : (void*)(upse_ps1_memory_LUT[(mem) >> 16] + ((mem) & 0xffff)))
  60. #define PSXMu8(mem) (*(u8 *)PSXM(mem))
  61. #define PSXMu32(mem) (*(u32*)PSXM(mem))
  62. #define PSXMuR8(mem) (PSXM(mem)?PSXMu8(mem):0)
  63. #define PSXMuW8(mem,val) (PSXM(mem)?PSXMu8(mem)=val:;)
  64. int upse_ps1_memory_init();
  65. void upse_ps1_memory_reset();
  66. void upse_ps1_memory_shutdown();
  67. u8 upse_ps1_memory_read_8(u32 mem);
  68. u16 upse_ps1_memory_read_16(u32 mem);
  69. u32 upse_ps1_memory_read_32(u32 mem);
  70. void upse_ps1_memory_write_8(u32 mem, u8 value);
  71. void upse_ps1_memory_write_16(u32 mem, u16 value);
  72. void upse_ps1_memory_write_32(u32 mem, u32 value);
  73. void LoadPSXMem(u32 address, s32 length, unsigned char *data);
  74. #endif /* __PSXMEMORY_H__ */