diff options
| author | 2014-05-17 22:07:06 +0200 | |
|---|---|---|
| committer | 2014-06-12 06:10:47 -0400 | |
| commit | b1c8bad9a646b2f4ae1b03c45844d060d8889aab (patch) | |
| tree | f0eca82b818d9448f4713ad61ce1d515b0e8cae7 /src/core/hw/lcd.cpp | |
| parent | Update CONTRIBUTING.md (diff) | |
| download | yuzu-b1c8bad9a646b2f4ae1b03c45844d060d8889aab.tar.gz yuzu-b1c8bad9a646b2f4ae1b03c45844d060d8889aab.tar.xz yuzu-b1c8bad9a646b2f4ae1b03c45844d060d8889aab.zip | |
Pica: Add command list registers.
Diffstat (limited to 'src/core/hw/lcd.cpp')
| -rw-r--r-- | src/core/hw/lcd.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/src/core/hw/lcd.cpp b/src/core/hw/lcd.cpp index b57563a73..61ee99c1f 100644 --- a/src/core/hw/lcd.cpp +++ b/src/core/hw/lcd.cpp | |||
| @@ -7,11 +7,11 @@ | |||
| 7 | 7 | ||
| 8 | #include "core/core.h" | 8 | #include "core/core.h" |
| 9 | #include "core/mem_map.h" | 9 | #include "core/mem_map.h" |
| 10 | #include "core/hle/kernel/thread.h" | ||
| 10 | #include "core/hw/lcd.h" | 11 | #include "core/hw/lcd.h" |
| 11 | 12 | ||
| 12 | #include "video_core/video_core.h" | 13 | #include "video_core/video_core.h" |
| 13 | 14 | ||
| 14 | #include "core/hle/kernel/thread.h" | ||
| 15 | 15 | ||
| 16 | namespace LCD { | 16 | namespace LCD { |
| 17 | 17 | ||
| @@ -89,31 +89,70 @@ inline void Read(T &var, const u32 addr) { | |||
| 89 | case REG_FRAMEBUFFER_TOP_LEFT_1: | 89 | case REG_FRAMEBUFFER_TOP_LEFT_1: |
| 90 | var = g_regs.framebuffer_top_left_1; | 90 | var = g_regs.framebuffer_top_left_1; |
| 91 | break; | 91 | break; |
| 92 | |||
| 92 | case REG_FRAMEBUFFER_TOP_LEFT_2: | 93 | case REG_FRAMEBUFFER_TOP_LEFT_2: |
| 93 | var = g_regs.framebuffer_top_left_2; | 94 | var = g_regs.framebuffer_top_left_2; |
| 94 | break; | 95 | break; |
| 96 | |||
| 95 | case REG_FRAMEBUFFER_TOP_RIGHT_1: | 97 | case REG_FRAMEBUFFER_TOP_RIGHT_1: |
| 96 | var = g_regs.framebuffer_top_right_1; | 98 | var = g_regs.framebuffer_top_right_1; |
| 97 | break; | 99 | break; |
| 100 | |||
| 98 | case REG_FRAMEBUFFER_TOP_RIGHT_2: | 101 | case REG_FRAMEBUFFER_TOP_RIGHT_2: |
| 99 | var = g_regs.framebuffer_top_right_2; | 102 | var = g_regs.framebuffer_top_right_2; |
| 100 | break; | 103 | break; |
| 104 | |||
| 101 | case REG_FRAMEBUFFER_SUB_LEFT_1: | 105 | case REG_FRAMEBUFFER_SUB_LEFT_1: |
| 102 | var = g_regs.framebuffer_sub_left_1; | 106 | var = g_regs.framebuffer_sub_left_1; |
| 103 | break; | 107 | break; |
| 108 | |||
| 104 | case REG_FRAMEBUFFER_SUB_RIGHT_1: | 109 | case REG_FRAMEBUFFER_SUB_RIGHT_1: |
| 105 | var = g_regs.framebuffer_sub_right_1; | 110 | var = g_regs.framebuffer_sub_right_1; |
| 106 | break; | 111 | break; |
| 112 | |||
| 113 | case CommandListSize: | ||
| 114 | var = g_regs.command_list_size; | ||
| 115 | break; | ||
| 116 | |||
| 117 | case CommandListAddress: | ||
| 118 | var = g_regs.command_list_address; | ||
| 119 | break; | ||
| 120 | |||
| 121 | case ProcessCommandList: | ||
| 122 | var = g_regs.command_processing_enabled; | ||
| 123 | break; | ||
| 124 | |||
| 107 | default: | 125 | default: |
| 108 | ERROR_LOG(LCD, "unknown Read%d @ 0x%08X", sizeof(var) * 8, addr); | 126 | ERROR_LOG(LCD, "unknown Read%d @ 0x%08X", sizeof(var) * 8, addr); |
| 109 | break; | 127 | break; |
| 110 | } | 128 | } |
| 111 | |||
| 112 | } | 129 | } |
| 113 | 130 | ||
| 114 | template <typename T> | 131 | template <typename T> |
| 115 | inline void Write(u32 addr, const T data) { | 132 | inline void Write(u32 addr, const T data) { |
| 116 | ERROR_LOG(LCD, "unknown Write%d 0x%08X @ 0x%08X", sizeof(data) * 8, data, addr); | 133 | switch (addr) { |
| 134 | case CommandListSize: | ||
| 135 | g_regs.command_list_size = data; | ||
| 136 | break; | ||
| 137 | |||
| 138 | case CommandListAddress: | ||
| 139 | g_regs.command_list_address = data; | ||
| 140 | break; | ||
| 141 | |||
| 142 | case ProcessCommandList: | ||
| 143 | g_regs.command_processing_enabled = data; | ||
| 144 | if (g_regs.command_processing_enabled & 1) | ||
| 145 | { | ||
| 146 | // u32* buffer = (u32*)Memory::GetPointer(g_regs.command_list_address << 3); | ||
| 147 | ERROR_LOG(LCD, "Beginning %x bytes of commands from address %x", g_regs.command_list_size, g_regs.command_list_address << 3); | ||
| 148 | // TODO: Process command list! | ||
| 149 | } | ||
| 150 | break; | ||
| 151 | |||
| 152 | default: | ||
| 153 | ERROR_LOG(LCD, "unknown Write%d 0x%08X @ 0x%08X", sizeof(data) * 8, data, addr); | ||
| 154 | break; | ||
| 155 | } | ||
| 117 | } | 156 | } |
| 118 | 157 | ||
| 119 | // Explicitly instantiate template functions because we aren't defining this in the header: | 158 | // Explicitly instantiate template functions because we aren't defining this in the header: |