Re: NTSC VIC-II timing

From: Marko Mäkelä <msmakela_at_gmail.com>
Date: Wed, 21 Jun 2017 19:27:48 +0300
Message-ID: <20170621162748.jwjeyo6qyhjiv3dm@hp>
```On Wed, Jun 21, 2017 at 04:40:03PM +0200, silverdr@wfmh.org.pl wrote:
>According to the famous document by Chris Bauer, there are three timing
>variants of the VIC-II. While PAL is always 63 cycles per  line, with
>NTSC there can be either 64 or 65 cycles per line and I am in fact able
>to reproduce the difference with -model ntsc and -model oldntsc in the
>current VICE.

You should have the 6567R56A and 6567R8 that I gave you, right?

>The question (before I spend weekend on trial'n error counting cycles
>and possibly reinventing the hammer ;-) is: do we have ane established,
>reliable software method for detecting which NTSC VIC-II is installed
>in the machine? I guess it must have been done multiple times by now
>and used in some NTSC games/demos..

The simple way is to disable interrupts and write a loop that samples
\$d012, counting the cycles that go between changes. I do not know if
exactly such implementation is available anywhere.

Andreas Boose introduced me to an algorithm that first does a "coarse"
synchronization, like this:

sei
lda \$d012
bit \$d012
bne .-2

This creates a jitter of 4+3=7 cycles, assuming that .-2 is on the same
page than .+2 (the bne takes 3 cycles until the loop is exited).

Then, for 7 lines, spend N_CYCLES_PER_LINE-1, sampling \$d012 at the end
of each iteration. Do a conditional branch to .+2 (relative offset \$00)
if you were ahead of the schedule. After these 7 lines, you should be in
perfect sync (a deterministic number of cycles have elapsed since \$d012
last changed).

You should revise this algorithm so that it can somehow detect the
N_CYCLES_PER_LINE, which can be 63 (PAL), 64 (6567R56A), or 65 (6569).

One possibility could be to start a CIA timer after the coarse
synchronization, but bear in mind that there are some differences in the
CIA timer operation. I think that it is doable with the processor only.

Marko

Message was sent through the cbm-hackers mailing list
```
Received on 2017-06-21 17:04:33

Archive generated by hypermail 2.2.0.