diff --git a/src/emu.cpp b/src/emu.cpp index 66b2b6b..922ea17 100644 --- a/src/emu.cpp +++ b/src/emu.cpp @@ -4,6 +4,34 @@ #include #include +void EmulatorState::reset() { + for (int i = 0; i < 4096; i++) + memory[i] = 0; + + PC = program_begin; + + for (int i = 0; i < 12; i++) + stack[i] = 0; + + stack_pointer = 0; + + I = 0; + + for (int i = 0; i < 16; i++) + v[i] = 0; + + delay_timer = 0; + sound_timer = 0; + + for (int y = 0; y < screen_height; y++) { + for (int x = 0; x < screen_width; x++) { + pixels[to_coord(x, y)] = 0; + } + } + + draw_dirty = true; +} + typedef void (*cpu_func)(const uint16_t opcode); void null_func(const uint16_t opcode) { diff --git a/src/emu.hpp b/src/emu.hpp index a918bdb..bae413a 100644 --- a/src/emu.hpp +++ b/src/emu.hpp @@ -13,33 +13,7 @@ inline int to_coord(int x, int y) { } struct EmulatorState { - void reset() { - for(int i = 0; i < 4096; i++) - memory[i] = 0; - - PC = program_begin; - - for(int i = 0; i < 12; i++) - stack[i] = 0; - - stack_pointer = 0; - - I = 0; - - for(int i = 0; i < 16; i++) - v[i] = 0; - - delay_timer = 0; - sound_timer = 0; - - for(int y = 0; y < screen_height; y++) { - for(int x = 0; x < screen_width; x++) { - pixels[to_coord(x, y)] = 0; - } - } - - draw_dirty = true; - } + void reset(); uint8_t memory[4096] = {}; uint16_t PC = program_begin; diff --git a/src/main.cpp b/src/main.cpp index 91fcf96..52f68bd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -207,7 +207,9 @@ int main(int argc, char* argv[]) { SDL_GLContext gl_context = SDL_GL_CreateContext(window); SDL_GL_MakeCurrent(window, gl_context); SDL_GL_SetSwapInterval(1); - + + state.reset(); + gladLoadGL(); setup_gfx();