How do one calculate how many scanlines taken to run a routine?

Get technical support from the community & developers with specific X16 programs if you can't find the solution elsewhere
(for general non-support related chat about programs please comment directly under the program in the software library)
Post Reply
GTR3QQ
Posts: 146
Joined: Wed Apr 05, 2023 8:04 pm

Question How do one calculate how many scanlines taken to run a routine?

Post by GTR3QQ »

:roll:

Welllllllllllllllllllllllllllll..............
This probably no a hard problem to you......... at all...

I just got very confused...

Say you have a routine that eats 3K5 cycles off CPU at 8Mhz, running NTSC 480i,
Knowing little about the Video generation sequence,
I'd think that one second is one second....
So by 3K5/8M you get the proportion used in that one second....
Multiply with the horizontal freq. of NTSC 525x(30) = 15750, should get
(Yeah.... 29.97ish FPS...)

3K5/8000K x 15750 =~ 7lines......


Yet...

I also got this formula.

3500 cycles * 3.125 (dots per cpu tick) / 800 (dots per line)
3.125 being 25 / 8 (Vera clock / Cpu clock)

=~ 14lines..........


so............... heh?
TomXP411
Posts: 1761
Joined: Tue May 19, 2020 8:49 pm

Re: How do one calculate how many scanlines taken to run a routine?

Post by TomXP411 »

The dot clock is halved in NTSC modes, since the system only generates 262 (or 263) lines per field.

Here's Natt Akuna's video timing chart (from Discord):

VERA Oscillator 25.00000MHz 480p Dot Clock 25.00000MHz (25MHz/1) 240p/480i Dot Clock 12.50000MHz (25MHz/2) L/C Color Clock 3.579545MHz (25MHz*150137/2^20) 480p Line Rate 31.25000kHz (25MHz/800) 240p/480i Line Rate 15.74307kHz (25MHz/(794*2)) 480p Frame Rate 59.523810Hz (25MHz/(525*800)) 480i Frame Rate 29.986805Hz (25MHz/(525*794*2)) 240p Frame Rate 59.859593Hz (25MHz/(263*794*2)) PSG+FIFO Sample Rate 48.82813kHz (25MHz/512) SPI Fast Clock 12.50000MHz (25MHz/2) SPI Slow Clock 390.6250kHz (25MHz/64)

1. Your routine takes 3500 cycles, or 437.5 microseconds.
2. 480i video takes 63 microseconds for one line.
3. 437.5 / 63 = 6.93 lines

Working in dot clocks:
1. The CPU to Dot Clock ratio for 480i is 1.5625
2. 3500 * 1.5625 = 5468 dots
3. One line is 794 dots
4. 5468 / 794 = 6.89

That's within the rounding error.

I think your mistake was that you were trying to use the VGA dot clock with the NTSC video timing.

If you do figure this out for VGA mode, the numbers should be about double:
1. 437.5us / 32us/line = 13.6 lines
2. 3500 cycles * 3.125cycles/dot / 800 dots = 13.67 lines
GTR3QQ
Posts: 146
Joined: Wed Apr 05, 2023 8:04 pm

Re: How do one calculate how many scanlines taken to run a routine?

Post by GTR3QQ »

ah. I see. thx!
Post Reply