+void update_keyboard(ch8_ctx * ctx, const Uint8 * keystate){
+ ctx->KEYBOARD[0] = keystate[SDL_SCANCODE_KP_0];
+ ctx->KEYBOARD[1] = keystate[SDL_SCANCODE_KP_1];
+ ctx->KEYBOARD[2] = keystate[SDL_SCANCODE_KP_2];
+ ctx->KEYBOARD[3] = keystate[SDL_SCANCODE_KP_3];
+ ctx->KEYBOARD[4] = keystate[SDL_SCANCODE_KP_4];
+ ctx->KEYBOARD[5] = keystate[SDL_SCANCODE_KP_5];
+ ctx->KEYBOARD[6] = keystate[SDL_SCANCODE_KP_6];
+ ctx->KEYBOARD[7] = keystate[SDL_SCANCODE_KP_7];
+ ctx->KEYBOARD[8] = keystate[SDL_SCANCODE_KP_8];
+ ctx->KEYBOARD[9] = keystate[SDL_SCANCODE_KP_9];
+ ctx->KEYBOARD[10] = keystate[SDL_SCANCODE_Q];
+ ctx->KEYBOARD[11] = keystate[SDL_SCANCODE_W];
+ ctx->KEYBOARD[12] = keystate[SDL_SCANCODE_E];
+ ctx->KEYBOARD[13] = keystate[SDL_SCANCODE_R];
+ ctx->KEYBOARD[14] = keystate[SDL_SCANCODE_T];
+ ctx->KEYBOARD[15] = keystate[SDL_SCANCODE_Y];
+}
+
+#define SDL_scale 16
+int launch_SDL_game(ch8_ctx * ctx){
+ SDL_Window *window = NULL;
+ SDL_Renderer *renderer = NULL;
+ SDL_Event event;
+ int running = 1;
+ SDL_Color black={4,26,10,255}, white={168,255,232,255};
+ if(0 != SDL_Init(SDL_INIT_VIDEO)){
+ printf("Failed to init SDL D:\n");
+ return 1;
+ }
+ window = SDL_CreateWindow("Chipy 8 Emulator", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
+ 64*SDL_scale, 32*SDL_scale, SDL_WINDOW_SHOWN);
+ if(NULL == window)
+ {
+ fprintf(stderr, "Erreur SDL_CreateWindow : %s", SDL_GetError());
+ return 1;
+ }
+ renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
+ if(NULL == renderer)
+ {
+ fprintf(stderr, "Erreur SDL_CreateRenderer : %s", SDL_GetError());
+ return 1;
+ }
+ while(running){
+ while(SDL_PollEvent(&event))
+ if(event.type == SDL_QUIT)
+ running = 0;
+ SDL_SetRenderDrawColor(renderer, black.r, black.g, black.b, black.a);
+ SDL_RenderClear(renderer);
+ SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a);
+ // Draw the screen from memory
+ for (int y=0; y<32; y++){
+ for(uint64_t x=0; x<64; x++){
+ if(ctx->SCREEN[y] & power(2, 63-x)){
+ SDL_Rect rect = {x*SDL_scale+SDL_scale, y*SDL_scale, SDL_scale, SDL_scale};
+ SDL_RenderFillRect(renderer, &rect);
+ }
+ }
+ }
+ SDL_RenderPresent(renderer);
+ const Uint8* keystate = SDL_GetKeyboardState( NULL );
+ update_keyboard(ctx, keystate);
+ execute_instruction(ctx);
+ printf("0x%hx\n", ctx->PC);
+ //print_ctx(ctx);
+ //SDL_Delay(10);
+ }
+ SDL_Quit();
+ return 0;
+}