Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
 Welcome to our latest new user Harvey ! (Registered 2024-11-25) You are not logged in - nap
CSDb User Forums


Forums > C64 Composing > The old PAL/NTSC question
2023-09-29 07:29
TWW

Registered: Jul 2009
Posts: 545
The old PAL/NTSC question

Hiho

So I was fiddling around with a v-sync'ed / fully stabilized NMI timer in conjunction with IRQ timers so that any screen effect can be controlled by a tight NMI while music is played by a CIA timer (which would allow you to adjust the timing so the player routine is called at the same intervall pr second on all models).

Now I would like to test this and there are a couple of issues which needs to be ironed out (Disclaimer, I know fuck all about music):

#1 - As I understand it by reading this forum, it is not enough to call the routine at a fixed / pr. second interval, you also need to change some of the note / frequency tables in the player routine itself. Can someone confirm and elaborate?

#2 - Given #1 is neccessary, is there any SID available which could be used to test this, where the location and contents of these tables are known so it would be trivial to make said test?
2023-09-29 07:39
Fungus

Registered: Sep 2002
Posts: 680
Yes the note tables aren't the same, the values are actually correct for NTSC as they are taken from the Programmers Reference Guide. On PAL they are out of tune, so when fixing I decided not to change them due to this fact.

If you happen to find a PAL tune with corrected note tables, then you would need to change them maybe, not that anyone will notice really unless they analyze the pitches externally, or have perfect pitch.
2023-09-29 08:55
Krill

Registered: Apr 2002
Posts: 2969
Quoting Fungus
the values are actually correct for NTSC as they are taken from the Programmers Reference Guide.
Wasn't there this story about HAL Labs Japan and composing tunes strictly by The Book, which came out utterly detuned in the end? :)

Might have been another case, though, like sticking to an early datasheet while SID changes were on the way, too.

But anyways, yes, the difference between NTSC and PAL isn't so big.
Having a different intonation would probably make more of a dent in a given tune.
2023-09-29 11:10
Stone

Registered: Oct 2006
Posts: 172
Regarding #1: Unless you need the song to be in tune with a specific pitch (e.g A440), switching between PAL/NTSC won't make a difference in that will be in tune with itself, so to speak. I don't know of any games that were released with different pitch tables between territories. The HVSC guys would know.

In fact, if you decide to go down the route of creating new pitch tables you may end up screwing up the tune because some player routines use wave table instruments or fine detune with absolute values and they are in many cases going to sound "off" if they are not adjusted as well.
2023-09-29 14:40
chatGPZ

Registered: Dec 2001
Posts: 11357
Quote:
Might have been another case, though, like sticking to an early datasheet while SID changes were on the way, too.

The Datasheet contains the values calculated for a 1Mhz clock iirc - but more importantly, some values are actually wrong (iirc the first version of the Manual contains the same mistakes)
2023-09-29 15:44
acrouzet

Registered: May 2020
Posts: 91
Quote: Quote:
Might have been another case, though, like sticking to an early datasheet while SID changes were on the way, too.

The Datasheet contains the values calculated for a 1Mhz clock iirc - but more importantly, some values are actually wrong (iirc the first version of the Manual contains the same mistakes)


Funnily enough, the values that are wrong are just typos due to misread similar-looking characters (e.g. 8 turned into B, C turned into 0, etc.)

Galway used a more accurate 1 MHz A440 table early on though. in fact, nearly all 1 Mhz A440 tables in use are derived from him, rather than the datasheet.
2023-09-29 15:49
chatGPZ

Registered: Dec 2001
Posts: 11357
I always wondered why the didnt print a small BASIC program in the Manual that calculates the note frequencies... instead of that giant table :)
2023-09-29 15:56
acrouzet

Registered: May 2020
Posts: 91
Also, if we're talking about allegedly "out-of-tune" tables, many PAL A440 tables aren't the most accurate either, and nobody seems to notice.

(In particular, Rob Hubbard's table from 1985 is still in use today in tools like SID Factory II).
2023-09-29 16:00
chatGPZ

Registered: Dec 2001
Posts: 11357
Speaking of that, did anyone yet come up with a table that shows least quantization errors (by carefully tuning it up or down a bit)? I did this on other platforms (where freq is even less accurate) and it did make a great difference.
2023-09-29 16:03
acrouzet

Registered: May 2020
Posts: 91
Quote: Speaking of that, did anyone yet come up with a table that shows least quantization errors (by carefully tuning it up or down a bit)? I did this on other platforms (where freq is even less accurate) and it did make a great difference.

A friend of mine calculated one. In the end, it doesn't make a difference (at least to my ears) cause the SID has such a fine frequency resolution.
2023-09-29 16:10
chatGPZ

Registered: Dec 2001
Posts: 11357
Yeah, perhaps doesn't matter much for SID. A tiny bit of detune can be good too :)
2023-09-29 19:40
acrouzet

Registered: May 2020
Posts: 91
Quote: I always wondered why the didnt print a small BASIC program in the Manual that calculates the note frequencies... instead of that giant table :)

Precision error?

On the software side however, a common technique for reducing the space taken up by a full tuning table (at the expense of pitch accuracy on high notes) is to find an octave where all the frequency values have a high byte of 01, and store just the low bytes in the player. To get the freq. values back, add back the high bytes of 01 and shift left to get the rest of the octaves.

The most accurate (interval-wise) low bytes in this case are:
0D 1D 2E 40 53 67 7C 93 AB C4 DF FC

To me, this does make an audible difference. Here's an example of these values in use: The Rainbow Test
2023-09-29 21:55
chatGPZ

Registered: Dec 2001
Posts: 11357
I really like the approach LFT used... similar, but more in- between steps (which gives you nice base for linear vibrato and slides)
2023-09-30 01:05
Fungus

Registered: Sep 2002
Posts: 680
The even tempered scale isn't mathematically correct either. For example when tuning pianos they start in the middle and they tune the rest of the keyboard relative to middle A.

Guitar is the same, we often tune some notes a little bit flat in order to make the entire guitar play more in tune when with keyboards as the instrument can't have exact pitches without special frets.

The human ear tolerates a little flatness more than sharpness too. There's lots of interesting studies on it.
2023-09-30 01:26
McMeatLoaf

Registered: Jan 2005
Posts: 108
Quote: Quoting Fungus
the values are actually correct for NTSC as they are taken from the Programmers Reference Guide.
Wasn't there this story about HAL Labs Japan and composing tunes strictly by The Book, which came out utterly detuned in the end? :)

Might have been another case, though, like sticking to an early datasheet while SID changes were on the way, too.

But anyways, yes, the difference between NTSC and PAL isn't so big.
Having a different intonation would probably make more of a dent in a given tune.


With "utterly detuned" I can only imagine something in the vein of mistaking the pitch register (the upper 8-bits I'd guess) as an index to some 12-tone equal temperament-based pitch lookup table, which AFAIK was one of Bob Yannes' unimplemented ideas?

As for Rob Hubbard's A440 pitch table, I checked some pitch tables and among the non-one off, *notably* out-of-tune ones, at least mathematically, were Dave Kelly along with Maniacs of Noise's sore A#1, if you don't count Parker Bros who use 8-bit pitch but downpitched 2 octaves (divided by 4, so in effect "10-bit" pitch). Background Music Editor does something similar but in reverse by up-pitching a low-octave table, so it's actually somewhat off-tune.
2023-09-30 03:56
acrouzet

Registered: May 2020
Posts: 91
Okay. So to get back to the original post topic, here are my answers to OP's questions. I'm actually quite interested in the hyper-specific topic of sound chip tuning tables, if you haven't noticed that already.

1. Stone is right in that, within the realm of SID frequency and envelope timings, changing the clock speed of the CPU is effectively like speeding up or slowing down a song, so all SID music will sound "in-tune" no matter what region your C64 is meant for (unless you're playing along on an instrument with a different tuning reference). In fact, the difference in clock speed between regions is so slight that you shouldn't notice a difference unless you have absolute pitch.

2. Try any .sid with player ID "JCH_NewPlayer", "Vibrants/Laxity", or "Rob_Hubbard". Open the .sid in a hex editor and search for "16 01 27 01". Then, starting from "16", select bytes until you've selected 192 of them. The entire tuning table should now be selected. You can now replace that table with a Little Endian Interleaved Table generated with this tool I made: https://docs.google.com/spreadsheets/d/1zjroenEv8O8WT05sCiKdbX_..
2023-09-30 06:27
TWW

Registered: Jul 2009
Posts: 545
Thanks all for your input and clarifications. Most usefull! I'll give this a try.

Cheers!
2023-10-01 23:00
Bansai

Registered: Feb 2023
Posts: 48
Quoting chatGPZ
I really like the approach LFT used... similar, but more in- between steps (which gives you nice base for linear vibrato and slides)

Fred Gray on Legend of Kage (and Roadrunner among other tunes) used this scheme with 4 steps between semitones:

L_MICROTONE_FREQTAB
 .byte $97,$7E,$6E,$80,$4D,$82,$32,$84 ; B-6 first in row
 .byte $1E,$86,$11,$88,$0C,$8A,$0E,$8C ; C-7 first in row
 .byte $18,$8E,$29,$90,$41,$92,$62,$94 ; C#7 first in row
 .byte $8B,$96,$BB,$98,$F4,$9A,$35,$9D ; D-7 first in row
 .byte $7E,$9F,$D0,$A1,$2B,$A4,$8E,$A6 ; D#7 first in row
 .byte $FA,$A8,$6F,$AB,$EE,$AD,$75,$B0 ; E-7 first in row
 .byte $06,$B3,$A1,$B5,$45,$B8,$F3,$BA ; F-7 first in row
 .byte $AC,$BD,$6E,$C0,$3A,$C3,$11,$C6 ; F#7 first in row
 .byte $F3,$C8,$DF,$CB,$D6,$CE,$D8,$D1 ; G-7 first in row
 .byte $E6,$D4,$FE,$D7,$23,$DB,$52,$DE ; G#7 first in row
 .byte $8F,$E1,$D6,$E4,$2B,$E8,$8B,$EB ; A-7 first in row
 .byte $F8,$EE,$72,$F2,$F9,$F5,$8C,$F9 ; A#7 first in row

...vibratos and glides scale nicely across the entire pitch range regardless of what your note of interest is. The only downside is the right shift loop burning some rastertime to get to the correct octave.

Regarding detune frequency not scaling properly, earlier Whittaker players (e.g., Quartet, Street Surfer, etc.) specified an absolute +/- SID freq added for vibrato which he had to vary manually from octave to octave, then later on (e.g., Menace) he scaled vibrato up automatically according to octave, but for the note before you jumped from one octave to the next, your vibrato would be shallow--if that's the right word--by almost 2x of what it should be if it were scaled with frequency. Microtone-based tables are a very nice solution to that problem, though I suppose one could interpolate an approximation that was fast and good enough. I need to revisit the code as it's been a while, but if I remember correctly, I think the FAME player might do just that. I know there is special handling for glides with it.
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Mr SQL
Guests online: 82
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Mojo  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Wonderland XIV  (9.6)
10 Comaland 100%  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 Party Elk 2  (9.6)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.6)
5 Libertongo  (9.5)
6 Rainbow Connection  (9.5)
7 Onscreen 5k  (9.5)
8 Morph  (9.5)
9 Dawnfall V1.1  (9.5)
10 It's More Fun to Com..  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Nostalgia  (9.3)
5 Triad  (9.2)
Top Diskmag Editors
1 Magic  (9.8)
2 hedning  (9.6)
3 Jazzcat  (9.5)
4 Elwix  (9.1)
5 Remix  (9.1)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.059 sec.