summaryrefslogtreecommitdiffstats
path: root/master/capture-timex.patch
diff options
context:
space:
mode:
Diffstat (limited to 'master/capture-timex.patch')
-rw-r--r--master/capture-timex.patch68
1 files changed, 68 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;