testpico: more on timer reload
[megadrive.git] / testpico / main.c
index d7ed087..1d27128 100644 (file)
@@ -1235,7 +1235,7 @@ static int t_tim_vcnt_loops(void)
     for (i = 0; i < lines; i++)
         expect_range(ok, ram16[i*2+1], 19, 21);
     expect(ok, ram16[lines*2+0], 0);
-    expect_range(ok, ram16[lines*2+1], 20, 21);
+    expect_range(ok, ram16[lines*2+1], 19, 21);
     return ok;
 }
 
@@ -1409,9 +1409,34 @@ static int t_tim_ym_timerb_stop(void)
 
 static int t_tim_ym_timer_ab_sync(void)
 {
-    u16 v = test_ym_ab_sync();
+    u16 v1, v2, v3, v4, v5, ln0, ln1, ln2;
     int ok = 1;
-    expect(ok, v, 3);
+
+    vdp_wait_for_line_0();
+    v1 = test_ym_ab_sync();
+
+    ln0 = get_line();
+    burn10(3420*15/7/10);     // ~15 scanlines
+    write8(0xa04001, 0x3f);   // clear, no reload
+    burn10(12);               // wait for busy to clear
+    v2 = read8(0xa04000);
+    v3 = test_ym_ab_sync2();
+
+    ln1 = get_line();
+    burn10(3420*15/7/10);     // ~15 scanlines
+    v4 = test_ym_ab_sync2();
+
+    ln2 = get_line();
+    burn10(3420*30/7/10);     // ~35 scanlines
+    v5 = read8(0xa04000);
+
+    expect(ok, v1, 3);
+    expect(ok, v2, 0);
+    expect(ok, v3, 3);
+    expect(ok, v4, 2);
+    expect(ok, v5, 0);
+    expect_range(ok, ln1-ln0, 18, 19);
+    expect_range(ok, ln2-ln1, 32, 34); // almost always 33
     return ok;
 }