annotate test.c @ 995:2bc27415565b

Fix some stuff with interrupt timing. The change in adjust_int_cycle gets Overdrive working again (vint was not being preferred over hint in some cases). One of the changes seems to have broken Fatal Rewind again, but no other regressions that I can see.
author Michael Pavone <pavone@retrodev.com>
date Sat, 30 Apr 2016 08:37:55 -0700
parents 15d9359fd771
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
720
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <stdint.h>
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdlib.h>
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include <string.h>
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include <stdio.h>
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 #include "vdp.h"
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 int headless = 1;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 uint16_t read_dma_value(uint32_t address)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 return 0;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 uint32_t render_map_color(uint8_t r, uint8_t g, uint8_t b)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 return 0;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 void render_alloc_surfaces(vdp_context * context)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 context->oddbuf = context->framebuf = malloc(512 * 256 * 4 * 2);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 memset(context->oddbuf, 0, 512 * 256 * 4 * 2);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 context->evenbuf = ((char *)context->oddbuf) + 512 * 256 * 4;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 int check_hint_time(vdp_context * v_context)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 uint32_t orig_hint_cycle = vdp_next_hint(v_context);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 uint32_t cur_hint_cycle;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 printf("hint cycle is %d at vcounter: %d, hslot: %d\n", orig_hint_cycle, v_context->vcounter, v_context->hslot);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 int res = 1;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 while ((cur_hint_cycle = vdp_next_hint(v_context)) > v_context->cycles)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 if (cur_hint_cycle != orig_hint_cycle) {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 fprintf(stderr, "ERROR: hint cycle changed to %d at vcounter: %d, hslot: %d\n", cur_hint_cycle, v_context->vcounter, v_context->hslot);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 orig_hint_cycle = cur_hint_cycle;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 res = 0;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 vdp_run_context(v_context, v_context->cycles + 1);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 printf("hint fired at cycle: %d, vcounter: %d, hslot: %d\n", cur_hint_cycle, v_context->vcounter, v_context->hslot);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 vdp_int_ack(v_context, 4);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 return res;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 int main(int argc, char ** argv)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 vdp_context v_context;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 init_vdp_context(&v_context, 0);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 vdp_control_port_write(&v_context, 0x8144);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 vdp_control_port_write(&v_context, 0x8C81);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 vdp_control_port_write(&v_context, 0x8A7F);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 vdp_control_port_write(&v_context, 0x8014);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 v_context.hint_counter = 0x7F;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 v_context.vcounter = 128;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 v_context.hslot = 165;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 //check single shot behavior
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 int res = check_hint_time(&v_context);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 //check every line behavior
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 while (v_context.vcounter < 225)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 vdp_run_context(&v_context, v_context.cycles + 1);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 vdp_control_port_write(&v_context, 0x8A00);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 int hint_count = 0;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 while (res && v_context.vcounter != 224)
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 res = res && check_hint_time(&v_context);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 hint_count++;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 if (res && hint_count != 225) {
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72 fprintf(stderr, "ERROR: hint count should be 225 but was %d instead\n", hint_count);
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 res = 0;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 }
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 return 0;
15d9359fd771 Add some tests for hint timing and fix it properly this time.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 }