From 8b0ac6a400cf1fd67552670dde430f7ef35d228e Mon Sep 17 00:00:00 2001 From: BryanHeBY <1319212443@qq.com> Date: Fri, 25 Feb 2022 16:21:26 +0800 Subject: [PATCH] Add: vga_cycles control api --- include/configs.h | 4 +--- include/nvboard.h | 1 + include/vga.h | 1 + src/nvboard.cpp | 8 +++++++- src/vga.cpp | 8 +++++++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/include/configs.h b/include/configs.h index ec72e2b..c872da8 100644 --- a/include/configs.h +++ b/include/configs.h @@ -34,9 +34,7 @@ //#define VSYNC -#define SHOW_FRAME_UPDATE - -#define CALCULATE_CLOCK_FREQUENCY +//#define DEBUG #define CALCULATE_CLOCK_FREQUENCY_INTERVAL 1 #endif \ No newline at end of file diff --git a/include/nvboard.h b/include/nvboard.h index 33141cd..e11aa86 100644 --- a/include/nvboard.h +++ b/include/nvboard.h @@ -9,3 +9,4 @@ void nvboard_init(); void nvboard_quit(); void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...); void nvboard_update(); +void nvboard_set_vga_cycles(int cycles); //default: 1 diff --git a/include/vga.h b/include/vga.h index b063355..abab7ee 100644 --- a/include/vga.h +++ b/include/vga.h @@ -24,6 +24,7 @@ private: int vga_pos; int vga_pre_clk, vga_pre_vsync, vga_pre_hsync; int vga_vaddr, vga_haddr; + int vga_clk_cnt; public: VGA(SDL_Renderer *rend, int cnt, int init_val, int it, int ct); ~VGA(); diff --git a/src/nvboard.cpp b/src/nvboard.cpp index 371b05f..a1f244b 100644 --- a/src/nvboard.cpp +++ b/src/nvboard.cpp @@ -103,7 +103,7 @@ static void nvboard_update_output(PinMap *p) { } void nvboard_update() { -#ifdef CALCULATE_CLOCK_FREQUENCY +#ifdef DEBUG calculate_clock_frequency(); #endif @@ -195,3 +195,9 @@ void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...) { if (is_rt) { p->next = rt_pin_map; rt_pin_map = p; } else { p->next = pin_map; pin_map = p; } } + +int vga_cycles = 1; + +void nvboard_set_vga_cycles(int cycles) { + vga_cycles = cycles; +} diff --git a/src/vga.cpp b/src/vga.cpp index 7f714ef..114c17a 100644 --- a/src/vga.cpp +++ b/src/vga.cpp @@ -20,7 +20,7 @@ VGA::VGA(SDL_Renderer *rend, int cnt, int init_val, int it, int ct): Component(rend, cnt, init_val, it, ct), vga_screen_width(VGA_DEFAULT_WIDTH), vga_screen_height(VGA_DEFAULT_HEIGHT), vga_pre_clk(0), vga_pre_hsync(0), vga_pre_vsync(0), - vga_pos(0), vga_vaddr(0), vga_haddr(0) { + vga_pos(0), vga_vaddr(0), vga_haddr(0), vga_clk_cnt(1) { SDL_Texture *temp_texture = SDL_CreateTexture(rend, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, vga_screen_width, vga_screen_height); set_texture(temp_texture, 0); @@ -48,6 +48,12 @@ void VGA::update_gui() { } void VGA::update_state() { + extern int vga_cycles; + if(vga_clk_cnt != vga_cycles){ + vga_clk_cnt ++; + return; + } + vga_clk_cnt = 1; int vga_vsync = output_map[VGA_VSYNC]; int vga_hsync = output_map[VGA_HSYNC]; int vga_blank_n = output_map[VGA_BLANK_N];