chip8

A simple C CHIP8 VM.
git clone git://git.vgx.fr/chip8
Log | Files | Refs | README

commit d87f2d06dd06d876e31000f937aadbb9ff9326b5
parent b4bac86de9542e7a766bb651aecbb4cf4d98cb1f
Author: Léo Villeveygoux <l@vgx.fr>
Date:   Wed,  8 Apr 2020 00:32:46 +0200

Remove unused stuff, rename send_draw() to frame()

Diffstat:
Mchip8.c | 4++--
Mmedia-raylib.c | 4++--
Mmedia-sdl.c | 25+++++--------------------
Mmedia.h | 6+++---
4 files changed, 12 insertions(+), 27 deletions(-)

diff --git a/chip8.c b/chip8.c @@ -164,7 +164,7 @@ static void step(){ for(int i=0 ; i<256 ; i++) SCREEN[i] = 0; clear_screen(); - send_draw(); + frame(); return; case 0x00EE: /* return from a subroutine */ if(!SP) @@ -419,7 +419,7 @@ int main(int argc, char **argv){ step(); if(!(i%(FREQ/60))){ - send_draw(); + frame(); if(DT) DT--; if(ST) diff --git a/media-raylib.c b/media-raylib.c @@ -108,7 +108,7 @@ unsigned short wait_input(unsigned short input){ int new_input; while((new_input = get_input(input)) == input) - send_draw(); + frame(); return new_input; } @@ -125,7 +125,7 @@ void draw(int x, int y, int value){ value ? FG_COLOR : BG_COLOR); } -void send_draw(void){ +void frame(void){ update_audio(); EndDrawing(); diff --git a/media-sdl.c b/media-sdl.c @@ -13,6 +13,7 @@ #define WINDOW_NAME "CHIP-8 emulator" #define NUM_PIXELS (SCREEN_WIDTH*SCREEN_HEIGHT) +#define SCREEN_RECT ((SDL_Rect){.x=0,.y=0,.w=SCREEN_WIDTH,.h=SCREEN_HEIGHT}) #define SOUND_DEV_FREQ 48000 #define SOUND_SAMPLES 1024 @@ -24,13 +25,9 @@ unsigned char *pixels; SDL_Window *window; SDL_Renderer *renderer; SDL_Texture *texture; -SDL_Rect rect = {.x=0,.y=0,.w=SCREEN_WIDTH,.h=SCREEN_HEIGHT}; /* sound state*/ int buzzer_state = 0; -long sample_num = 0; - -unsigned clock; /* ┌───┬───┬───┬───┐ @@ -54,6 +51,7 @@ SDL_Keycode keys[16] = { }; static void buzzer_callback(void* userdata, Uint8* stream, int len){ + static long sample_num = 0; (void) userdata; for(int i=0 ; i<len ; i++){ if(buzzer_state == 0) @@ -99,8 +97,6 @@ int m_init(int argc, char **argv){ SDL_PauseAudio(0); - clock = SDL_GetTicks(); - return 0; } @@ -165,14 +161,14 @@ void draw(int x, int y, int value){ } } -void send_draw(void){ +void frame(void){ void *texture_pixels; int pitch; /* we don't actually use this, yolo */ - SDL_LockTexture(texture, &rect, &texture_pixels, &pitch); + SDL_LockTexture(texture, &SCREEN_RECT, &texture_pixels, &pitch); memcpy(texture_pixels, pixels, NUM_PIXELS); SDL_UnlockTexture(texture); - SDL_RenderCopy(renderer, texture, &rect, &rect); + SDL_RenderCopy(renderer, texture, &SCREEN_RECT, &SCREEN_RECT); SDL_RenderPresent(renderer); SDL_RenderClear(renderer); } @@ -180,14 +176,3 @@ void send_draw(void){ void set_buzzer_state(int state){ buzzer_state = state; } - -void wait_tick(void){ - /* TODO: tunable frequency */ - unsigned new_clock = SDL_GetTicks(); - - if(new_clock == clock){ - SDL_Delay(1); - } - - clock = SDL_GetTicks(); -} diff --git a/media.h b/media.h @@ -10,9 +10,9 @@ unsigned short wait_input(unsigned short input); void clear_screen(void); void draw(int x, int y, int value); -void send_draw(void); -void set_buzzer_state(int state); -void wait_tick(void); +void frame(void); + +void set_buzzer_state(int state); #endif /* C8_MEDIA_H */