summaryrefslogtreecommitdiffstats
path: root/master
diff options
context:
space:
mode:
Diffstat (limited to 'master')
-rw-r--r--master/capture-timex.patch68
-rw-r--r--master/endstop0
-rw-r--r--master/series3
-rw-r--r--master/tools.patch159
4 files changed, 230 insertions, 0 deletions
diff --git a/master/capture-timex.patch b/master/capture-timex.patch
new file mode 100644
index 0000000..14b8904
--- /dev/null
+++ b/master/capture-timex.patch
@@ -0,0 +1,68 @@
+diff --git a/hw/display/vga.c b/hw/display/vga.c
+index b35d523..78a427c 100644
+--- a/hw/display/vga.c
++++ b/hw/display/vga.c
+@@ -282,6 +282,42 @@ static void vga_precise_update_retrace_info(VGACommonState *s)
+ #endif
+ }
+
++
++/*
++ * Super budget code to capture the timex data
++ * we configure the timex software to use int 10 mode 12h
++ * which is 640x480x4.
++ *
++ * If windows reads the vertical retrace register, and
++ * gets the answer "1", we then check if the first few
++ * bytes of video ram are zero (indicating the a black screen)
++ * if it is we then dump the first byte of each scan line
++ * to a file.
++ *
++ */
++
++static void
++timex_hook (VGACommonState * s)
++{
++ static FILE *f;
++ unsigned i;
++
++ if (!f)
++ f = fopen ("timex.dat", "w");
++
++ /* If the start of the screen isn't black */
++ for (i = 0; i < 8; ++i)
++ if (s->vram_ptr[i])
++ return;
++
++ fprintf (f, "#\n");
++
++ for (i = 0; i < 480; ++i)
++ fprintf (f, "%d\n", s->vram_ptr[i * 320]);
++
++ fflush (f);
++}
++
+ static uint8_t vga_precise_retrace(VGACommonState *s)
+ {
+ struct vga_precise_retrace *r = &s->retrace_info.precise;
+@@ -297,6 +333,7 @@ static uint8_t vga_precise_retrace(VGACommonState *s)
+ cur_line = cur_char / r->htotal;
+
+ if (cur_line >= r->vstart && cur_line <= r->vend) {
++ timex_hook(s);
+ val |= ST01_V_RETRACE | ST01_DISP_ENABLE;
+ } else {
+ cur_line_char = cur_char % r->htotal;
+diff --git a/vl.c b/vl.c
+index 6b73934..276baa3 100644
+--- a/vl.c
++++ b/vl.c
+@@ -129,7 +129,7 @@ int main(int argc, char **argv)
+ static const char *data_dir[16];
+ static int data_dir_idx;
+ const char *bios_name = NULL;
+-enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
++enum vga_retrace_method vga_retrace_method = VGA_RETRACE_PRECISE;
+ DisplayType display_type = DT_DEFAULT;
+ int request_opengl = -1;
+ int display_opengl;
diff --git a/master/endstop b/master/endstop
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/master/endstop
diff --git a/master/series b/master/series
new file mode 100644
index 0000000..02b8587
--- /dev/null
+++ b/master/series
@@ -0,0 +1,3 @@
+capture-timex.patch
+tools.patch
+endstop
diff --git a/master/tools.patch b/master/tools.patch
new file mode 100644
index 0000000..e23a1e4
--- /dev/null
+++ b/master/tools.patch
@@ -0,0 +1,159 @@
+diff --git a/tools/ana.c b/tools/ana.c
+new file mode 100644
+index 0000000..7fe56f9
+--- /dev/null
++++ b/tools/ana.c
+@@ -0,0 +1,153 @@
++#include <stdio.h>
++
++unsigned line = 0, frame = 0;
++
++
++void
++byte (FILE * f, unsigned c)
++{
++ static int len;
++ static int plen;
++ static int state;
++ static unsigned last_frame;
++
++ unsigned diff;
++
++ diff = frame - last_frame;
++ last_frame = frame;
++
++
++ if (diff > 1)
++ printf ("/* GAP ~%d frames */\n", diff);
++
++ if (state == 0)
++ {
++ if (c == 0x55)
++ return;
++ if (c == 0xaa)
++ state++;
++ else
++ printf ("ERR %02x ERR\n", c);
++ }
++ if (state == 1)
++ {
++ if (c == 0xaa)
++ return;
++ state++;
++ }
++
++ if (state == 2)
++ {
++ plen = c;
++ len = 1;
++ state++;
++ printf ("0x%02x, ", c);
++ putc (c, f);
++ return;
++ }
++
++ if (state == 3)
++ {
++ printf ("0x%02x, ", c);
++ putc (c, f);
++ len++;
++
++ if (len == plen)
++ {
++ if (plen & 1)
++ {
++ state = 4;
++ printf ("/* 0x00, */\n");
++ }
++ else
++ {
++ state = 2;
++ printf ("\n");
++ }
++ }
++ else
++ {
++ if ((len % 16) == 15)
++ {
++ printf ("\n/**/ ");
++ }
++ }
++
++ return;
++ }
++
++ if (state == 4)
++ {
++ if (c)
++ printf ("ERR %02x ERR\n", c);
++ state = 2;
++ }
++
++
++
++}
++
++int
++main (int argc, char *argv)
++{
++ char buf[1024];
++ unsigned i, j, c, b;
++
++ FILE *f = fopen ("timex.dat", "r");
++ FILE *fo = fopen ("foo.bin", "w");
++
++ fwrite ("Timex", 5, 1, fo);
++
++ while (fgets (buf, sizeof (buf), f))
++ {
++
++ while (line > 480)
++ {
++ line -= 480;
++ frame++;
++ }
++
++ line++;
++
++ if (strncmp (buf, "255\n", 4))
++ continue;
++
++ c = 0;
++
++ fgets (buf, sizeof (buf), f);
++ fgets (buf, sizeof (buf), f);
++ fgets (buf, sizeof (buf), f);
++ fgets (buf, sizeof (buf), f);
++
++ line += 4;
++
++ for (i = 0; i < 8; ++i)
++ {
++
++ for (j = 0; j < 7; ++j)
++ fgets (buf, sizeof (buf), f);
++ line += 7;
++
++ b = 0;
++ for (j = 0; j < 8; ++j)
++ {
++ fgets (buf, sizeof (buf), f);
++ line++;
++ b = b || (!strncmp (buf, "255\n", 4));
++ }
++ b = !b;
++
++//printf("%d",b);
++
++ c |= b << i;
++ }
++
++ byte (fo, c);
++
++
++
++ }
++ fclose (fo);
++
++
++}