hw.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/common_types.h"
  5. #include "common/logging/log.h"
  6. #include "core/hw/hw.h"
  7. #include "core/hw/gpu.h"
  8. #include "core/hw/lcd.h"
  9. namespace HW {
  10. template <typename T>
  11. inline void Read(T &var, const u32 addr) {
  12. switch (addr & 0xFFFFF000) {
  13. case VADDR_GPU:
  14. GPU::Read(var, addr);
  15. break;
  16. case VADDR_LCD:
  17. LCD::Write(var, addr);
  18. break;
  19. default:
  20. LOG_ERROR(HW_Memory, "unknown Read%lu @ 0x%08X", sizeof(var) * 8, addr);
  21. }
  22. }
  23. template <typename T>
  24. inline void Write(u32 addr, const T data) {
  25. switch (addr & 0xFFFFF000) {
  26. case VADDR_GPU:
  27. GPU::Write(addr, data);
  28. break;
  29. case VADDR_LCD:
  30. LCD::Write(addr, data);
  31. break;
  32. default:
  33. LOG_ERROR(HW_Memory, "unknown Write%lu 0x%08X @ 0x%08X", sizeof(data) * 8, (u32)data, addr);
  34. }
  35. }
  36. // Explicitly instantiate template functions because we aren't defining this in the header:
  37. template void Read<u64>(u64 &var, const u32 addr);
  38. template void Read<u32>(u32 &var, const u32 addr);
  39. template void Read<u16>(u16 &var, const u32 addr);
  40. template void Read<u8>(u8 &var, const u32 addr);
  41. template void Write<u64>(u32 addr, const u64 data);
  42. template void Write<u32>(u32 addr, const u32 data);
  43. template void Write<u16>(u32 addr, const u16 data);
  44. template void Write<u8>(u32 addr, const u8 data);
  45. /// Update hardware
  46. void Update() {
  47. }
  48. /// Initialize hardware
  49. void Init() {
  50. GPU::Init();
  51. LCD::Init();
  52. LOG_DEBUG(HW, "initialized OK");
  53. }
  54. /// Shutdown hardware
  55. void Shutdown() {
  56. GPU::Shutdown();
  57. LCD::Shutdown();
  58. LOG_DEBUG(HW, "shutdown OK");
  59. }
  60. }