Add: vga_cycles control api

This commit is contained in:
BryanHeBY 2022-02-25 16:21:26 +08:00
parent 48c1fb7041
commit 8b0ac6a400
5 changed files with 17 additions and 5 deletions

View File

@ -34,9 +34,7 @@
//#define VSYNC
#define SHOW_FRAME_UPDATE
#define CALCULATE_CLOCK_FREQUENCY
//#define DEBUG
#define CALCULATE_CLOCK_FREQUENCY_INTERVAL 1
#endif

View File

@ -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

View File

@ -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();

View File

@ -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;
}

View File

@ -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];