summaryrefslogtreecommitdiff
path: root/src/core/hw/lcd.cpp
diff options
context:
space:
mode:
authorGravatar Tony Wasserka2014-05-17 22:07:06 +0200
committerGravatar bunnei2014-06-12 06:10:47 -0400
commitb1c8bad9a646b2f4ae1b03c45844d060d8889aab (patch)
treef0eca82b818d9448f4713ad61ce1d515b0e8cae7 /src/core/hw/lcd.cpp
parentUpdate CONTRIBUTING.md (diff)
downloadyuzu-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.cpp45
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
16namespace LCD { 16namespace 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
114template <typename T> 131template <typename T>
115inline void Write(u32 addr, const T data) { 132inline 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: