Skip to content
Snippets Groups Projects
Commit eb60a1a2 authored by Recolic Keghart's avatar Recolic Keghart
Browse files

Temporarily disable async

parent ce18d37b
No related branches found
No related tags found
1 merge request!3Check
Pipeline #815 passed with stages
in 10 minutes and 55 seconds
...@@ -40,9 +40,12 @@ static void timer_sig_handler(int signum) { ...@@ -40,9 +40,12 @@ static void timer_sig_handler(int signum) {
Assert(ret == 0, "Can not set timer"); Assert(ret == 0, "Can not set timer");
} }
void device_update() {} // Now an independent thread will do it.
void device_update_impl() { void device_update_impl() {
// async
if(device_update_flag)
device_update_flag = false;
else
return;
if (update_screen_flag) { if (update_screen_flag) {
update_screen(); update_screen();
update_screen_flag = false; update_screen_flag = false;
...@@ -72,6 +75,8 @@ void device_update_impl() { ...@@ -72,6 +75,8 @@ void device_update_impl() {
} }
} }
void device_update() {device_update_impl();}
static void device_update_thread_daemon() { static void device_update_thread_daemon() {
while(true) { while(true) {
if(device_update_flag.exchange(false)) { if(device_update_flag.exchange(false)) {
...@@ -104,7 +109,7 @@ void init_device() { ...@@ -104,7 +109,7 @@ void init_device() {
ret = setitimer(ITIMER_VIRTUAL, &it, NULL); ret = setitimer(ITIMER_VIRTUAL, &it, NULL);
Assert(ret == 0, "Can not set timer"); Assert(ret == 0, "Can not set timer");
std::thread(device_update_thread_daemon).detach(); // std::thread(device_update_thread_daemon).detach();
} }
#else #else
......
...@@ -19,9 +19,11 @@ static uint32_t (*vmem) [SCREEN_W]; ...@@ -19,9 +19,11 @@ static uint32_t (*vmem) [SCREEN_W];
static uint32_t *screensize_port_base; static uint32_t *screensize_port_base;
inline void SDL_ErrorCheck(int ret) { inline void SDL_ErrorCheck(int ret) {
#ifdef DEBUG
if(ret != 0) { if(ret != 0) {
rlib::println("SDL_Error: ret=", ret, ", GETERR=", SDL_GetError()); rlib::println("SDL_Error: ret=", ret, ", GETERR=", SDL_GetError());
} }
#endif
} }
static void init_vga_impl() { static void init_vga_impl() {
...@@ -38,7 +40,7 @@ static void init_vga_impl() { ...@@ -38,7 +40,7 @@ static void init_vga_impl() {
void update_screen() { void update_screen() {
#ifndef DISABLE_MMIO #ifndef DISABLE_MMIO
if(window == nullptr) init_vga_impl(); // if(window == nullptr) init_vga_impl();
SDL_ErrorCheck(SDL_UpdateTexture(texture, NULL, vmem, SCREEN_W * sizeof(vmem[0][0]))); SDL_ErrorCheck(SDL_UpdateTexture(texture, NULL, vmem, SCREEN_W * sizeof(vmem[0][0])));
SDL_ErrorCheck(SDL_RenderClear(renderer)); SDL_ErrorCheck(SDL_RenderClear(renderer));
SDL_ErrorCheck(SDL_RenderCopy(renderer, texture, NULL, NULL)); SDL_ErrorCheck(SDL_RenderCopy(renderer, texture, NULL, NULL));
...@@ -49,6 +51,7 @@ void update_screen() { ...@@ -49,6 +51,7 @@ void update_screen() {
void init_vga() { void init_vga() {
// Because of fucking SDL design, vga_init should be done in updating thread. // Because of fucking SDL design, vga_init should be done in updating thread.
// Do nothing in main thread. // Do nothing in main thread.
init_vga_impl();
} }
#endif /* HAS_IOE */ #endif /* HAS_IOE */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment