Mercurial > repos > blastem
annotate test.c @ 999:238141756e67
Set sprite overflow flag if we completely consume sprite rendering capacity for the line even if there is nothing left to draw. This graphical corruption in the vertical stretching scroll section. Needs hardware confirmation.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 30 Apr 2016 16:19:19 -0700 |
parents | 15d9359fd771 |
children |
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 } |