From dab839ab662d57963151159656eca25c0a927050 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Sun, 24 Apr 2011 20:01:12 -0300 Subject: [PATCH] ubb-vga.c: moved line length and timing to variables - ubb-vga.c (line_pairs, line, frame, tricolor, grid, session): line length is now kept in a variable, instead of hard-coding its value and the values derived from it - ubb-vga.c (line_cycles, line, hdelay): the total line duration is now kept in a variable, instead of hard-coding it all over the place --- ubb-vga/ubb-vga.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/ubb-vga/ubb-vga.c b/ubb-vga/ubb-vga.c index 03b66dc..4abd66e 100644 --- a/ubb-vga/ubb-vga.c +++ b/ubb-vga/ubb-vga.c @@ -203,7 +203,7 @@ static void cleanup(void) /* ----- Prefetch and delay logic ------------------------------------------ */ -#define BURST 32 +#define BURST 32 /* bytes */ static inline void prefetch(const uint8_t *prefetch, int words) @@ -229,6 +229,10 @@ static void until(uint16_t cycles) /* ----- Frame buffer output ----------------------------------------------- */ +static int line_pairs = 160; /* set/unset pairs */ +static int line_cycles = US(36); /* nominally 31.77 us, but we're too slow */ + + void setup(void) { mlockall(MCL_CURRENT | MCL_FUTURE); @@ -244,21 +248,20 @@ static void line(const uint8_t *line, const uint8_t *fetch) /* HSYNC */ *tcnt = 0; *pddatc = HSYNC; - prefetch(fetch, 160); + prefetch(fetch, line_pairs); until(US(3.77)); *pddats = HSYNC; /* Front porch */ until(US(3.77+1.79)); - while (p != line+320) { + while (p != line+2*line_pairs) { *pddats = *p++ << 8; *pddatc = *p++ << 8; } /* Back porch */ - until(US(31.77)); - until(US(36)); + until(line_cycles); } @@ -269,8 +272,7 @@ static void hdelay(int cycles) *pddatc = HSYNC; until(US(3.77)); *pddats = HSYNC; - until(US(31.77)); - until(US(36)); + until(line_cycles); } } @@ -290,14 +292,13 @@ static void frame(const uint8_t *f) until(US(3.77)); *pddats = HSYNC; - prefetch(f, 160); - until(US(31.77)); - until(US(36)); + prefetch(f, line_pairs); + until(line_cycles); hdelay(31); - for (p = f; p != f+240*320; p += 320) { - line(p, p+160); - line(p, p+320); + for (p = f; p != f+240*2*line_pairs; p += 2*line_pairs) { + line(p, p+line_pairs); + line(p, p+2*line_pairs); } /* Back porch */ @@ -322,18 +323,19 @@ static uint32_t pattern(int set, int r, int g, int b) static void tricolor(uint32_t *f) { + int pairs = 2*line_pairs*240; int i; - for (i = 0; i != 320*240/3; i++) { + for (i = 0; i != pairs/3; i++) { f[i & ~1] = R; f[i | 1] = G | B; } - for (; i != 320*240*2/3; i++) { + for (; i != pairs*2/3; i++) { f[i & ~1] = G; f[i | 1] = R | B; } - for (; i != 320*240; i++) { + for (; i != pairs; i++) { f[i & ~1] = B; f[i | 1] = R | G; } @@ -355,9 +357,10 @@ static void grid(uint8_t *f) int i, x, y; for (i = 0; i != 8; i++) { - x = i*40+20; + x = i*line_pairs/4+line_pairs/8; for (y = 0; y != 240; y++) { - f[y*320+x] = f[y*320+x+1] = col[i] >> 8; + uint8_t *p = f+y*2*line_pairs+x; + p[0] = p[1] = col[i] >> 8; } } } @@ -385,7 +388,7 @@ static void grab(uint8_t *f) static void session(int frames) { - uint8_t f[320*(240+1)]; + uint8_t f[2*line_pairs*(240+1)]; int i; memset(f, 0, sizeof(f));