Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
873 lines (799 sloc) 31.8 KB
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
/*************************************************************************
xtal.cpp
Documentation and consistent naming for known existing crystals.
***************************************************************************
PCB Crystal Reference
----------------------
_____ ________
|16 | |o |
|MHZ| |16.0MHZ |
|___| |________|
| |
There is a finite list of _manufactured_ crystals. This file aims
to document all of the known speeds that crystals were available in.
Feel free to add to the list if you find another speed crystal on
a PCB, but please DON'T GUESS!
Remember that some very high frequencies (typically above 100MHz) are
generated by a frequency multiplying IC from a lower frequency
crystal.
This is intended as a reference of existing parts to prevent incorrect
clock speed measurements with digital frequency counters being used
in drivers. When measuring clocks, remember that most parts have a
tolerance so be sure to reference existing parts only and not just
accept direct readings as 100% true.
MAME supports fractions in crystal frequencies, but for historical
and readability reasons we tend to write the closest integer
value. For example, 3.579545_MHz_XTAL should actually be
3.579545454545...MHz (315/88). This is no problem though: see above
note about tolerance.
In the "Examples" column, please don't add 1000 examples, this is just
for interest, so two or three examples is enough.
The actual reference where the xtals are used can be found in the
driver files by searching for the frequency (e.g. "XTAL(4'915'200)")
(Thanks to Guru for starting this documentation.)
**************************************************************************/
#include "emu.h"
#include <cfloat>
#include <cmath>
// This array *must* stay in order, it's binary-searched
const double XTAL::known_xtals[] = {
/*
Frequency Sugarvassed Examples
----------- ---------------------- ---------------------------------------- */
32'768, /* 32.768_kHz_XTAL Used to drive RTC chips */
38'400, /* 38.4_kHz_XTAL Resonator */
384'000, /* 384_kHz_XTAL Resonator - Commonly used for driving OKI MSM5205 */
400'000, /* 400_kHz_XTAL Resonator - OKI MSM5205 on Great Swordman h/w */
430'000, /* 430_kHz_XTAL Resonator */
455'000, /* 455_kHz_XTAL Resonator - OKI MSM5205 on Gladiator h/w */
512'000, /* 512_kHz_XTAL Resonator - Toshiba TC8830F */
600'000, /* 600_kHz_XTAL - */
640'000, /* 640_kHz_XTAL Resonator - NEC UPD7759, Texas Instruments Speech Chips @ 8khz */
960'000, /* 960_kHz_XTAL Resonator - Xerox Notetaker Keyboard UART */
1'000'000, /* 1_MHz_XTAL Used to drive OKI M6295 chips */
1'008'000, /* 1.008_MHz_XTAL Acorn Microcomputer (System 1) */
1'056'000, /* 1.056_MHz_XTAL Resonator - OKI M6295 on Trio The Punch h/w */
1'294'400, /* 1.2944_MHz_XTAL BBN BitGraph PSG */
1'689'600, /* 1.6896_MHz_XTAL Diablo 1355WP Printer */
1'750'000, /* 1.75_MHz_XTAL RCA CDP1861 */
1'797'100, /* 1.7971_MHz_XTAL SWTPC 6800 (with MIKBUG) */
1'843'200, /* 1.8432_MHz_XTAL Bondwell 12/14 */
2'000'000, /* 2_MHz_XTAL - */
2'012'160, /* 2.01216_MHz_XTAL Cidelsa Draco sound board */
2'097'152, /* 2.097152_MHz_XTAL Icatel 1995 - Brazilian public payphone */
2'457'600, /* 2.4576_MHz_XTAL Atari ST MFP */
2'500'000, /* 2.5_MHz_XTAL Janken Man units */
2'950'000, /* 2.95_MHz_XTAL Playmatic MPU-C, MPU-III & Sound-3 */
3'000'000, /* 3_MHz_XTAL Probably only used to drive 68705 or similar MCUs on 80's Taito PCBs */
3'072'000, /* 3.072_MHz_XTAL INS 8520 input clock rate */
3'120'000, /* 3.12_MHz_XTAL SP0250 clock on Gottlieb games */
3'276'800, /* 3.2768_MHz_XTAL SP0256 clock in Speech Synthesis for Dragon 32 */
3'521'280, /* 3.52128_MHz_XTAL RCA COSMAC VIP */
3'570'000, /* 3.57_MHz_XTAL Telmac TMC-600 */
3'578'640, /* 3.57864_MHz_XTAL Atari Portfolio PCD3311T */
3'579'545, /* 3.579545_MHz_XTAL NTSC color subcarrier, extremely common, used on 100's of PCBs (Keytronic custom part #48-300-010 is equivalent) */
3'686'400, /* 3.6864_MHz_XTAL Baud rate clock for MC68681 and similar UARTs */
3'840'000, /* 3.84_MHz_XTAL Fairlight CMI Alphanumeric Keyboard */
3'900'000, /* 3.9_MHz_XTAL Resonator - Used on some Fidelity boards */
3'932'160, /* 3.93216_MHz_XTAL Apple Lisa COP421 (197-0016A) */
4'000'000, /* 4_MHz_XTAL - */
4'028'000, /* 4.028_MHz_XTAL Sony SMC-777 */
4'032'000, /* 4.032_MHz_XTAL GRiD Compass modem board */
4'096'000, /* 4.096_MHz_XTAL Used to drive OKI M9810 chips */
4'194'304, /* 4.194304_MHz_XTAL Used to drive MC146818 / Nintendo Game Boy */
4'224'000, /* 4.224_MHz_XTAL Used to drive OKI M6295 chips, usually with /4 divider */
4'410'000, /* 4.41_MHz_XTAL Pioneer PR-8210 ldplayer */
4'433'610, /* 4.43361_MHz_XTAL Cidelsa Draco */
4'433'619, /* 4.433619_MHz_XTAL PAL color subcarrier (technically 4.43361875mhz)*/
4'608'000, /* 4.608_MHz_XTAL Luxor ABC-77 keyboard (Keytronic custom part #48-300-107 is equivalent) */
4'915'200, /* 4.9152_MHz_XTAL - */
5'000'000, /* 5_MHz_XTAL Mutant Night */
5'068'800, /* 5.0688_MHz_XTAL Usually used as MC2661 or COM8116 baud rate clock */
5'185'000, /* 5.185_MHz_XTAL Intel INTELLEC® 4 */
5'370'000, /* 5.37_MHz_XTAL HP 95LX */
5'460'000, /* 5.46_MHz_XTAL ec1840 and ec1841 keyboard */
5'529'600, /* 5.5296_MHz_XTAL Kontron PSI98 keyboard */
5'626'000, /* 5.626_MHz_XTAL RCA CDP1869 PAL dot clock */
5'670'000, /* 5.67_MHz_XTAL RCA CDP1869 NTSC dot clock */
5'714'300, /* 5.7143_MHz_XTAL Cidelsa Destroyer, TeleVideo serial keyboards */
5'856'000, /* 5.856_MHz_XTAL HP 3478A Multimeter */
5'911'000, /* 5.911_MHz_XTAL Philips Videopac Plus G7400 */
5'990'400, /* 5.9904_MHz_XTAL Luxor ABC 800 keyboard (Keytronic custom part #48-300-008 is equivalent) */
6'000'000, /* 6_MHz_XTAL American Poker II, Taito SJ System */
6'144'000, /* 6.144_MHz_XTAL Used on Alpha Denshi early 80's games sound board, Casio FP-200 and Namco Universal System 16 */
6'400'000, /* 6.4_MHz_XTAL Textel Compact */
6'500'000, /* 6.5_MHz_XTAL Jupiter Ace */
6'880'000, /* 6.88_MHz_XTAL Barcrest MPU4 */
6'900'000, /* 6.9_MHz_XTAL BBN BitGraph CPU */
7'000'000, /* 7_MHz_XTAL Jaleco Mega System PCBs */
7'159'090, /* 7.15909_MHz_XTAL Blood Bros (2x NTSC subcarrier) */
7'200'000, /* 7.2_MHz_XTAL Image Fight bootleg I80C031 MCU */
7'372'800, /* 7.3728_MHz_XTAL - */
7'864'300, /* 7.8643_MHz_XTAL Used on InterFlip games as video clock */
7'987'000, /* 7.987_MHz_XTAL PC9801-86 YM2608 clock */
7'995'500, /* 7.9955_MHz_XTAL Used on Electronic Devices Italy Galaxy Gunners sound board */
8'000'000, /* 8_MHz_XTAL Extremely common, used on 100's of PCBs */
8'200'000, /* 8.2_MHz_XTAL Universal Mr. Do - Model 8021 PCB */
8'388'000, /* 8.388_MHz_XTAL Nintendo Game Boy Color */
8'448'000, /* 8.448_MHz_XTAL Banpresto's Note Chance - Used to drive OKI M6295 chips, usually with /8 divider */
8'467'200, /* 8.4672_MHz_XTAL Subsino's Ying Hua Lian */
8'664'000, /* 8.664_MHz_XTAL Touchmaster */
8'700'000, /* 8.7_MHz_XTAL Tandberg TDV 2324 */
8'867'236, /* 8.867236_MHz_XTAL RCA CDP1869 PAL color clock (~2x PAL subcarrier) */
8'867'238, /* 8.867238_MHz_XTAL ETI-660 (~2x PAL subcarrier) */
8'945'000, /* 8.945_MHz_XTAL Hit Me */
9'216'000, /* 9.216_MHz_XTAL Univac UTS 20 */
9'600'000, /* 9.6_MHz_XTAL WD37C65 second clock (for 300 KB/sec rate) */
9'828'000, /* 9.828_MHz_XTAL Universal PCBs */
9'830'400, /* 9.8304_MHz_XTAL Epson PX-8 */
9'832'000, /* 9.832_MHz_XTAL Robotron A7150 */
9'877'680, /* 9.87768_MHz_XTAL Microterm 420 */
9'987'000, /* 9.987_MHz_XTAL Crazy Balloon */
10'000'000, /* 10_MHz_XTAL - */
10'137'600, /* 10.1376_MHz_XTAL Wyse WY-100 */
10'245'000, /* 10.245_MHz_XTAL PES Speech box */
10'380'000, /* 10.38_MHz_XTAL Fairlight Q219 Lightpen/Graphics Card */
10'480'000, /* 10.48_MHz_XTAL System-80 (50 Hz) */
10'500'000, /* 10.5_MHz_XTAL Agat-7 */
10'595'000, /* 10.595_MHz_XTAL Mad Alien */
10'644'500, /* 10.6445_MHz_XTAL TRS-80 Model I */
10'687'500, /* 10.6875_MHz_XTAL BBC Bridge Companion */
10'694'250, /* 10.69425_MHz_XTAL Xerox 820 */
10'717'200, /* 10.7172_MHz_XTAL Eltec EurocomII */
10'730'000, /* 10.73_MHz_XTAL Ruleta RE-900 VDP Clock */
10'733'000, /* 10.733_MHz_XTAL The Fairyland Story */
10'738'000, /* 10.738_MHz_XTAL Pokerout (poker+breakout) TMS9129 VDP Clock */
10'738'635, /* 10.738635_MHz_XTAL TMS9918 family (3x NTSC subcarrier) */
10'816'000, /* 10.816_MHz_XTAL Universal 1979-1980 (Cosmic Alien, etc) */
10'886'400, /* 10.8864_MHz_XTAL Systel System 100 */
10'920'000, /* 10.92_MHz_XTAL ADDS Viewpoint 60, Viewpoint A2 */
11'000'000, /* 11_MHz_XTAL Mario I8039 sound */
11'004'000, /* 11.004_MHz_XTAL TI 911 VDT */
11'059'200, /* 11.0592_MHz_XTAL Used with MCS-51 to generate common baud rates */
11'200'000, /* 11.2_MHz_XTAL New York, New York */
11'289'000, /* 11.289_MHz_XTAL Vanguard */
11'400'000, /* 11.4_MHz_XTAL HP 9845 */
11'668'800, /* 11.6688_MHz_XTAL Gameplan pixel clock */
11'800'000, /* 11.8_MHz_XTAL IBM PC Music Feature Card */
11'980'800, /* 11.9808_MHz_XTAL Luxor ABC 80 */
12'000'000, /* 12_MHz_XTAL Extremely common, used on 100's of PCBs */
12'057'600, /* 12.0576_MHz_XTAL Poly 1 (38400 * 314) */
12'096'000, /* 12.096_MHz_XTAL Some early 80's Atari games */
12'288'000, /* 12.288_MHz_XTAL Sega Model 3 digital audio board */
12'324'000, /* 12.324_MHz_XTAL Otrona Attache */
12'432'000, /* 12.432_MHz_XTAL Kaneko Fly Boy/Fast Freddie Hardware */
12'472'500, /* 12.4725_MHz_XTAL Bonanza's Mini Boy 7 */
12'480'000, /* 12.48_MHz_XTAL TRS-80 Model II */
12'500'000, /* 12.5_MHz_XTAL Red Alert audio board */
12'672'000, /* 12.672_MHz_XTAL TRS-80 Model 4 80*24 video */
12'800'000, /* 12.8_MHz_XTAL Cave CV1000 */
12'854'400, /* 12.8544_MHz_XTAL Alphatronic P3 */
12'936'000, /* 12.936_MHz_XTAL CDC 721 */
12'979'200, /* 12.9792_MHz_XTAL Exidy 440 */
13'300'000, /* 13.3_MHz_XTAL BMC bowling */
13'330'560, /* 13.33056_MHz_XTAL Taito L */
13'333'000, /* 13.333_MHz_XTAL Ojanko High School */
13'400'000, /* 13.4_MHz_XTAL TNK3, Ikari Warriors h/w */
13'478'400, /* 13.4784_MHz_XTAL TeleVideo 970 80-column display clock */
13'495'200, /* 13.4952_MHz_XTAL Used on Shadow Force pcb and maybe other Technos pcbs? */
13'500'000, /* 13.5_MHz_XTAL Microbee */
13'516'800, /* 13.5168_MHz_XTAL Kontron KDT6 */
13'608'000, /* 13.608_MHz_XTAL TeleVideo 910 & 925 */
13'824'000, /* 13.824_MHz_XTAL Robotron PC-1715 display circuit */
14'000'000, /* 14_MHz_XTAL - */
14'112'000, /* 14.112_MHz_XTAL Timex/Sinclair TS2068 */
14'192'640, /* 14.19264_MHz_XTAL Central Data 2650 */
14'218'000, /* 14.218_MHz_XTAL Dragon */
14'300'000, /* 14.3_MHz_XTAL Agat-7 */
14'314'000, /* 14.314_MHz_XTAL Taito TTL Board */
14'318'181, /* 14.318181_MHz_XTAL Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */
14'580'000, /* 14.58_MHz_XTAL Fortune 32:16 Video Controller */
14'705'882, /* 14.705882_MHz_XTAL Aleck64 */
14'728'000, /* 14.728_MHz_XTAL ADM 36 */
14'742'800, /* 14.7428_MHz_XTAL ADM 23 */
14'745'000, /* 14.745_MHz_XTAL Synertek KTM-3 */
14'745'600, /* 14.7456_MHz_XTAL Namco System 12 & System Super 22/23 for JVS */
14'784'000, /* 14.784_MHz_XTAL Zenith Z-29 */
14'916'000, /* 14.916_MHz_XTAL ADDS Viewpoint 122 */
14'976'000, /* 14.976_MHz_XTAL CIT-101 80-column display clock */
15'000'000, /* 15_MHz_XTAL Sinclair QL, Amusco Poker */
15'148'800, /* 15.1488_MHz_XTAL Zentec 9002/9003 */
15'206'400, /* 15.2064_MHz_XTAL Falco TS-1 */
15'288'000, /* 15.288_MHz_XTAL DEC VT220 80-column display clock */
15'300'720, /* 15.30072_MHz_XTAL Microterm 420 */
15'360'000, /* 15.36_MHz_XTAL Visual 1050 */
15'400'000, /* 15.4_MHz_XTAL DVK KSM */
15'468'480, /* 15.46848_MHz_XTAL Bank Panic h/w, Sega G80 */
15'582'000, /* 15.582_MHz_XTAL Zentec Zephyr */
15'667'200, /* 15.6672_MHz_XTAL Apple Macintosh */
15'700'000, /* 15.7_MHz_XTAL Motogonki */
15'897'600, /* 15.8976_MHz_XTAL IAI Swyft */
15'920'000, /* 15.92_MHz_XTAL HP Integral PC */
15'974'400, /* 15.9744_MHz_XTAL Osborne 1 (9600 * 52 * 32) */
16'000'000, /* 16_MHz_XTAL Extremely common, used on 100's of PCBs */
16'097'280, /* 16.09728_MHz_XTAL DEC VT240 (1024 * 262 * 60) */
16'128'000, /* 16.128_MHz_XTAL Fujitsu FM-7 */
16'200'000, /* 16.2_MHz_XTAL Debut */
16'257'000, /* 16.257_MHz_XTAL IBM PC MDA & EGA */
16'364'000, /* 16.364_MHz_XTAL Corvus Concept */
16'384'000, /* 16.384_MHz_XTAL - */
16'400'000, /* 16.4_MHz_XTAL MS 6102 */
16'572'000, /* 16.572_MHz_XTAL Micro-Term ACT-5A */
16'588'800, /* 16.5888_MHz_XTAL SM 7238 */
16'669'800, /* 16.6698_MHz_XTAL Qume QVT-102 */
16'670'000, /* 16.67_MHz_XTAL - */
16'777'216, /* 16.777216_MHz_XTAL Nintendo Game Boy Advance */
16'934'400, /* 16.9344_MHz_XTAL Usually used to drive 90's Yamaha OPL/FM chips (44100 * 384) */
17'010'000, /* 17.01_MHz_XTAL Epic 14E */
17'064'000, /* 17.064_MHz_XTAL Memorex 1377 */
17'074'800, /* 17.0748_MHz_XTAL SWTPC 8212 */
17'350'000, /* 17.35_MHz_XTAL ITT Courier 1700 */
17'360'000, /* 17.36_MHz_XTAL OMTI Series 10 SCSI controller */
17'430'000, /* 17.43_MHz_XTAL Videx Videoterm */
17'550'000, /* 17.55_MHz_XTAL HP 264x display clock (50 Hz configuration) */
17'600'000, /* 17.6_MHz_XTAL LSI Octopus */
17'734'470, /* 17.73447_MHz_XTAL (~4x PAL subcarrier) */
17'734'472, /* 17.734472_MHz_XTAL actually ~4x PAL subcarrier */
17'971'200, /* 17.9712_MHz_XTAL Compucolor II, Hazeltine Esprit III */
18'000'000, /* 18_MHz_XTAL S.A.R, Ikari Warriors 3 */
18'414'000, /* 18.414_MHz_XTAL Ann Arbor Ambassador */
18'432'000, /* 18.432_MHz_XTAL Extremely common, used on 100's of PCBs (48000 * 384) */
18'480'000, /* 18.48_MHz_XTAL Wyse WY-100 video */
18'575'000, /* 18.575_MHz_XTAL Visual 102, Visual 220 */
18'720'000, /* 18.72_MHz_XTAL Nokia MikroMikko 1 */
18'867'000, /* 18.867_MHz_XTAL Decision Data IS-482 */
18'869'600, /* 18.8696_MHz_XTAL Memorex 2178 */
19'170'000, /* 19.17_MHz_XTAL Ericsson ISA8 Monochrome HR Graphics Board */
19'339'600, /* 19.3396_MHz_XTAL TeleVideo TVI-955 80-column display clock */
19'584'000, /* 19.584_MHz_XTAL ADM-42 */
19'600'000, /* 19.6_MHz_XTAL Universal Mr. Do - Model 8021 PCB */
19'602'000, /* 19.602_MHz_XTAL Ampex 210+ 80-column display clock */
19'660'800, /* 19.6608_MHz_XTAL Euro League (bootleg), labeled as "UKI 19.6608 20PF" */
19'661'400, /* 19.6614_MHz_XTAL Wyse WY-30 */
19'923'000, /* 19.923_MHz_XTAL Cinematronics vectors */
19'968'000, /* 19.968_MHz_XTAL Used mostly by some Taito games */
20'000'000, /* 20_MHz_XTAL - */
20'160'000, /* 20.16_MHz_XTAL Nintendo 8080 */
20'275'200, /* 20.2752_MHz_XTAL TRS-80 Model III */
20'375'040, /* 20.37504_MHz_XTAL Apple Lisa dot clock (197-0019A) */
20'625'000, /* 20.625_MHz_XTAL SM 7238 */
20'790'000, /* 20.79_MHz_XTAL Blockade-hardware Gremlin games */
21'000'000, /* 21_MHz_XTAL Lock-On pixel clock */
21'052'600, /* 21.0526_MHz_XTAL NEC PC-98xx pixel clock */
21'060'000, /* 21.06_MHz_XTAL HP 264x display clock (60 Hz configuration) */
21'254'400, /* 21.2544_MHz_XTAL TeleVideo 970 132-column display clock */
21'281'370, /* 21.28137_MHz_XTAL Radica Tetris (PAL) */
21'300'000, /* 21.3_MHz_XTAL - */
21'477'272, /* 21.477272_MHz_XTAL BMC bowling, some Data East 90's games, Vtech Socrates; (6x NTSC subcarrier) */
22'000'000, /* 22_MHz_XTAL - */
22'032'000, /* 22.032_MHz_XTAL Intellec Series II I/O controller */
22'096'000, /* 22.096_MHz_XTAL ADDS Viewpoint 122 */
22'118'400, /* 22.1184_MHz_XTAL Amusco Poker */
22'248'000, /* 22.248_MHz_XTAL Quantel DPB-7000 */
22'321'000, /* 22.321_MHz_XTAL Apple LaserWriter II NT */
22'464'000, /* 22.464_MHz_XTAL CIT-101 132-column display clock */
22'656'000, /* 22.656_MHz_XTAL Super Pinball Action (~1440x NTSC line rate) */
22'896'000, /* 22.896_MHz_XTAL DEC VT220 132-column display clock */
23'814'000, /* 23.814_MHz_XTAL TeleVideo TVI-912, 920 & 950 */
23'961'600, /* 23.9616_MHz_XTAL Osborne 4 (Vixen) */
24'000'000, /* 24_MHz_XTAL Mario, 80's Data East games, 80's Konami games */
24'073'400, /* 24.0734_MHz_XTAL DEC Rainbow 100 */
24'300'000, /* 24.3_MHz_XTAL ADM 36 132-column display clock */
24'576'000, /* 24.576_MHz_XTAL Pole Position h/w, Model 3 CPU board */
24'883'200, /* 24.8832_MHz_XTAL DEC VT100 */
25'000'000, /* 25_MHz_XTAL Namco System 22, Taito GNET, Dogyuun h/w */
25'174'800, /* 25.1748_MHz_XTAL Sega System 16A/16B (1600x NTSC line rate) */
25'175'000, /* 25.175_MHz_XTAL IBM MCGA/VGA 320/640-pixel graphics */
25'200'000, /* 25.2_MHz_XTAL Tektronix 4404 video clock */
25'398'360, /* 25.39836_MHz_XTAL Tandberg TDV 2324 */
25'400'000, /* 25.4_MHz_XTAL PC9801-86 PCM base clock */
25'447'000, /* 25.447_MHz_XTAL Namco EVA3A (Funcube2) */
25'771'500, /* 25.7715_MHz_XTAL HP-2622A */
25'920'000, /* 25.92_MHz_XTAL ADDS Viewpoint 60 */
26'000'000, /* 26_MHz_XTAL Gaelco PCBs */
26'366'000, /* 26.366_MHz_XTAL DEC VT320 */
26'580'000, /* 26.58_MHz_XTAL Wyse WY-60 80-column display clock */
26'590'906, /* 26.590906_MHz_XTAL Atari Jaguar NTSC */
26'593'900, /* 26.5939_MHz_XTAL Atari Jaguar PAL */
26'601'712, /* 26.601712_MHz_XTAL Astro Corp.'s Show Hand, PAL Vtech/Yeno Socrates (6x PAL subcarrier) */
26'666'000, /* 26.666_MHz_XTAL Imagetek I4100/I4220/I4300 */
26'666'666, /* 26.666666_MHz_XTAL Irem M92 but most use 27MHz */
26'686'000, /* 26.686_MHz_XTAL Typically used on 90's Taito PCBs to drive the custom chips */
26'989'200, /* 26.9892_MHz_XTAL TeleVideo 965 */
27'000'000, /* 27_MHz_XTAL Some Banpresto games macrossp, Irem M92 and 90's Toaplan games */
27'164'000, /* 27.164_MHz_XTAL Typically used on 90's Taito PCBs to drive the custom chips */
27'210'900, /* 27.2109_MHz_XTAL LA Girl */
27'562'000, /* 27.562_MHz_XTAL Visual 220 */
28'000'000, /* 28_MHz_XTAL - */
28'322'000, /* 28.322_MHz_XTAL Saitek RISC 2500, Mephisto Montreux */
28'375'160, /* 28.37516_MHz_XTAL Amiga PAL systems */
28'475'000, /* 28.475_MHz_XTAL CoCo 3 PAL */
28'480'000, /* 28.48_MHz_XTAL Chromatics CGC-7900 */
28'636'363, /* 28.636363_MHz_XTAL Later Leland games and Atari GT, Amiga NTSC, Raiden2 h/w (8x NTSC subcarrier)*/
28'640'000, /* 28.64_MHz_XTAL Fukki FG-1c AI AM-2 PCB */
28'700'000, /* 28.7_MHz_XTAL - */
29'376'000, /* 29.376_MHz_XTAL Qume QVT-103 */
29'491'200, /* 29.4912_MHz_XTAL Xerox Alto-II system clock (tagged 29.4MHz in the schematics) */
30'000'000, /* 30_MHz_XTAL Impera Magic Card */
30'209'800, /* 30.2098_MHz_XTAL Philips CD-i NTSC (1920x NTSC line rate) */
30'240'000, /* 30.24_MHz_XTAL Macintosh IIci RBV, 12- or 13-inch display */
30'476'180, /* 30.47618_MHz_XTAL Taito F3, JC, Under Fire */
30'800'000, /* 30.8_MHz_XTAL 15IE-00-013 */
31'279'500, /* 31.2795_MHz_XTAL Wyse WY-30+ */
31'334'400, /* 31.3344_MHz_XTAL Macintosh II */
31'684'000, /* 31.684_MHz_XTAL TeleVideo TVI-955 132-column display clock */
31'948'800, /* 31.9488_MHz_XTAL NEC PC-88xx, PC-98xx */
32'000'000, /* 32_MHz_XTAL - */
32'147'000, /* 32.147_MHz_XTAL Ampex 210+ 132-column display clock */
32'220'000, /* 32.22_MHz_XTAL Typically used on 90's Data East PCBs (close to 9x NTSC subcarrier which is 32.215905Mhz */
32'256'000, /* 32.256_MHz_XTAL Hitachi MB-6890 */
32'317'400, /* 32.3174_MHz_XTAL DEC VT330, VT340 */
32'530'470, /* 32.53047_MHz_XTAL Seta 2 */
33'000'000, /* 33_MHz_XTAL Sega Model 3 video board */
33'264'000, /* 33.264_MHz_XTAL Hazeltine 1500 terminal */
33'330'000, /* 33.33_MHz_XTAL Sharp X68000 XVI */
33'333'000, /* 33.333_MHz_XTAL Sega Model 3 CPU board, Vegas */
33'833'000, /* 33.833_MHz_XTAL - */
33'868'800, /* 33.8688_MHz_XTAL Usually used to drive 90's Yamaha OPL/FM chips with /2 divider */
34'000'000, /* 34_MHz_XTAL Gaelco PCBs */
34'291'712, /* 34.291712_MHz_XTAL Fairlight CMI master card */
34'846'000, /* 34.846_MHz_XTAL Visual 550 */
35'904'000, /* 35.904_MHz_XTAL Used on HP98543 graphics board */
36'000'000, /* 36_MHz_XTAL Sega Model 1 video board */
36'864'000, /* 36.864_MHz_XTAL Unidesa Cirsa Rock 'n' Roll */
37'980'000, /* 37.98_MHz_XTAL Falco 5220 */
38'769'220, /* 38.76922_MHz_XTAL Namco System 21 video board */
38'863'630, /* 38.86363_MHz_XTAL Sharp X68000 15.98kHz video */
39'321'600, /* 39.3216_MHz_XTAL Sun 2/120 */
39'710'000, /* 39.71_MHz_XTAL Wyse WY-60 132-column display clock */
40'000'000, /* 40_MHz_XTAL - */
40'210'000, /* 40.21_MHz_XTAL Fairlight CMI IIx */
41'539'000, /* 41.539_MHz_XTAL IBM PS/2 132-column text mode */
42'000'000, /* 42_MHz_XTAL BMC A-00211 - Popo Bear */
42'105'200, /* 42.1052_MHz_XTAL NEC PC-88xx */
42'954'545, /* 42.954545_MHz_XTAL CPS3 (12x NTSC subcarrier)*/
43'320'000, /* 43.32_MHz_XTAL DEC VT420 */
44'100'000, /* 44.1_MHz_XTAL Subsino's Bishou Jan */
44'236'800, /* 44.2368_MHz_XTAL ReCo6502, Fortune 32:16 */
44'452'800, /* 44.4528_MHz_XTAL TeleVideo 965 */
44'900'000, /* 44.9_MHz_XTAL IBM 8514 1024x768 43.5Hz graphics */
45'000'000, /* 45_MHz_XTAL Eolith with Hyperstone CPUs */
45'158'400, /* 45.1584_MHz_XTAL Philips CD-i CDIC, Sega Model 2A video, Sega Model 3 CPU */
45'619'200, /* 45.6192_MHz_XTAL DEC VK100 */
45'830'400, /* 45.8304_MHz_XTAL Microterm 5510 */
46'615'120, /* 46.61512_MHz_XTAL Soundblaster 16 PCM base clock */
47'736'000, /* 47.736_MHz_XTAL Visual 100 */
48'000'000, /* 48_MHz_XTAL Williams/Midway Y/Z-unit system / SSV board */
48'384'000, /* 48.384_MHz_XTAL Namco NB-1 */
48'556'800, /* 48.5568_MHz_XTAL Wyse WY-85 */
48'654'000, /* 48.654_MHz_XTAL Qume QVT-201 */
48'660'000, /* 48.66_MHz_XTAL Zaxxon */
49'152'000, /* 49.152_MHz_XTAL Used on some Namco PCBs, Baraduke h/w, System 21, Super System 22 */
49'423'500, /* 49.4235_MHz_XTAL Wyse WY-185 */
50'000'000, /* 50_MHz_XTAL Williams/Midway T/W/V-unit system */
50'113'000, /* 50.113_MHz_XTAL Namco NA-1 (14x NTSC subcarrier)*/
50'349'000, /* 50.349_MHz_XTAL Sega System 18 (~3200x NTSC line rate) */
50'350'000, /* 50.35_MHz_XTAL Sharp X68030 video */
51'200'000, /* 51.2_MHz_XTAL Namco Super System 22 video clock */
52'000'000, /* 52_MHz_XTAL Cojag */
52'832'000, /* 52.832_MHz_XTAL Wang PC TIG video controller */
53'203'424, /* 53.203424_MHz_XTAL Master System, Mega Drive PAL (12x PAL subcarrier) */
53'693'175, /* 53.693175_MHz_XTAL PSX-based h/w, Sony ZN1-2-based (15x NTSC subcarrier) */
54'000'000, /* 54_MHz_XTAL Taito JC */
55'000'000, /* 55_MHz_XTAL Eolith Vega */
57'272'727, /* 57.272727_MHz_XTAL Psikyo SH2 with /2 divider (16x NTSC subcarrier)*/
57'283'200, /* 57.2832_MHz_XTAL Macintosh IIci RBV, 15-inch portrait display */
58'000'000, /* 58_MHz_XTAL Magic Reel (Play System) */
59'292'000, /* 59.292_MHz_XTAL Data General D461 */
60'000'000, /* 60_MHz_XTAL ARM610 */
61'440'000, /* 61.44_MHz_XTAL Donkey Kong */
64'000'000, /* 64_MHz_XTAL BattleToads */
64'108'800, /* 64.1088_MHz_XTAL HP Topcat high-res */
66'666'700, /* 66.6667_MHz_XTAL Later Midway games */
67'737'600, /* 67.7376_MHz_XTAL PSX-based h/w, Sony ZN1-2-based */
68'850'000, /* 68.85_MHz_XTAL Wyse WY-50 */
69'551'990, /* 69.55199_MHz_XTAL Sharp X68000 31.5kHz video */
72'000'000, /* 72_MHz_XTAL Aristocrat MKV */
72'576'000, /* 72.576_MHz_XTAL Centipede, Millipede, Missile Command, Let's Go Bowling "Multipede" */
73'728'000, /* 73.728_MHz_XTAL Ms. Pac-Man/Galaga 20th Anniversary */
77'414'400, /* 77.4144_MHz_XTAL NCD17c */
80'000'000, /* 80_MHz_XTAL ARM710 */
87'183'360, /* 87.18336_MHz_XTAL AT&T 630 MTG */
92'940'500, /* 92.9405_MHz_XTAL Sun cgthree */
99'522'000, /* 99.522_MHz_XTAL Radius Two Page Display */
100'000'000, /* 100_MHz_XTAL PSX-based Namco System 12, Vegas, Sony ZN1-2-based */
101'491'200, /* 101.4912_MHz_XTAL PSX-based Namco System 10 */
108'108'000, /* 108.108_MHz_XTAL HP 98550 high-res color card */
200'000'000 /* 200_MHz_XTAL Base SH4 CPU (Naomi, Hikaru etc.) */
};
double XTAL::last_correct_value = -1;
double XTAL::xtal_error_low = 0;
double XTAL::xtal_error_high = 0;
bool XTAL::validate(double base_clock)
{
if(base_clock == last_correct_value)
return true;
const unsigned int xtal_count = sizeof(known_xtals) / sizeof(known_xtals[0]);
const unsigned int last_index = xtal_count - 1;
const unsigned int fill1 = last_index | (last_index >> 1);
const unsigned int fill2 = fill1 | (fill1 >> 2);
const unsigned int fill4 = fill2 | (fill2 >> 4);
const unsigned int fill8 = fill4 | (fill4 >> 8);
const unsigned int fill16 = fill8 | (fill8 >> 16);
const unsigned int ppow2 = fill16 - (fill16 >> 1);
unsigned int slot = ppow2;
unsigned int step = ppow2;
while(step) {
if(slot > last_index)
slot = slot ^ (step | (step >> 1));
else {
const double sfreq = known_xtals[slot];
const double diff = std::abs((base_clock - sfreq) / base_clock);
if(diff <= (2 * DBL_EPSILON)) {
last_correct_value = base_clock;
return true;
}
if(base_clock > sfreq)
slot = slot | (step >> 1);
else
slot = slot ^ (step | (step >> 1));
}
step = step >> 1;
}
double sfreq = known_xtals[slot];
if(base_clock == sfreq) {
last_correct_value = base_clock;
return true;
}
if(base_clock < sfreq) {
if(slot)
xtal_error_low = known_xtals[slot-1];
else
xtal_error_low = 0;
xtal_error_high = sfreq;
} else {
if(slot < last_index)
xtal_error_high = known_xtals[slot+1];
else
xtal_error_high = 0;
xtal_error_low = sfreq;
}
return false;
}
void XTAL::validate(const char *message) const
{
if(!validate(m_base_clock))
fail(m_base_clock, message);
}
void XTAL::validate(const std::string &message) const
{
if(!validate(m_base_clock))
fail(m_base_clock, message);
}
void XTAL::fail(double base_clock, std::string message)
{
std::string full_message = util::string_format("Unknown crystal value %.0f. ", base_clock);
if(xtal_error_low && xtal_error_high)
full_message += util::string_format(" Did you mean %.0f or %.0f?", xtal_error_low, xtal_error_high);
else
full_message += util::string_format(" Did you mean %.0f?", xtal_error_low ? xtal_error_low : xtal_error_high);
full_message += util::string_format(" Context: %s\n", message);
fatalerror("%s\n", full_message.c_str());
}
/*
For further reference:
A search at http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=852333;keywords=cry
reveals the following shipping frequencies as of 1/1/2008:
20kHz
25.600kHz
26.667kHz
28kHz
30kHz
30.720kHz
30.76kHz
31.2kHz
31.25kHz
31.5kHz
32.000kHz
32.56kHz
32.768kHz
32.919kHz
34kHz
36kHz
38kHz
38.4kHz
39.500kHz
40kHz
44.100kHz
46.604kHz
46.6084kHz
50kHz
59.787kHz
60.000kHz
60.002kHz
60.005kHz
65.535kHz
65.536kHz
69kHz
70kHz
71kHz
72kHz
73kHz
74kHz
74.3kHz
74.4kHz
75kHz
76kHz
76.79kHz
76.8kHz
76.81kHz
77kHz
77.204kHz
77.287kHz
77.500kHz
77.503kHz
77.504kHz
78kHz
79kHz
83kHz
96kHz
96.006kHz
100kHz
111kHz
117.72kHz
120kHz
120.8475kHz
125kHz
131.072kHz
149.475kHz
153.600kHz
200kHz
307.2kHz
1.000MHz
1.8432MHz
2.000MHz
2.048MHz
2.097152MHz
2.4576MHz
2.5MHz
2.560MHz
2.949120MHz
3.000MHz
3.276MHz
3.2768MHz
3.579MHz
3.579545MHz
3.640MHz
3.6864MHz
3.700MHz
3.859MHz
3.93216MHz
4.000MHz
4.032MHz
4.096MHz
4.09625MHz
4.194MHz
4.194304MHz
4.332MHz
4.433MHz
4.433616MHz
4.433618MHz
4.433619MHz
4.74687MHz
4.800MHz
4.8970MHz
4.90625MHz
4.915MHz
4.9152MHz
5.000MHz
5.0688MHz
5.120MHz
5.223438MHz
5.5MHz
5.5296MHz
5.9904MHz
6.000MHz
6.14MHz
6.144MHz
6.1760MHz
6.400 MHz
6.49830MHz
6.5MHz
6.5536MHz
6.612813MHz
6.7458MHz
6.757MHz
6.76438MHz
7.1505MHz
7.15909 MHz
7.2MHz
7.3728MHz
7.68MHz
7.94888MHz
8.000MHz
8.000156MHz
8.192MHz
8.388608MHz
8.432MHz
8.5MHz
8.6432MHz
9.000MHz
9.216MHz
9.509375MHz
9.545MHz
9.6MHz
9.7941MHz
9.830MHz
9.8304MHz
9.84375MHz
9.8438MHz
10.000MHz
10.240MHz
10.245MHz
10.6244MHz
10.738635MHz
10.73865MHz
11.000MHz
11.046MHz
11.0592MHz
11.228MHz
11.2896MHz
11.520MHz
11.981350MHz
12.000MHz
12.000393MHz
12.096MHz
12.1875MHz
12.288MHz
12.352MHz
12.500MHz
12.688MHz
12.800MHz
12.96MHz
13.000MHz
13.0625MHz
13.225MHz
13.2256MHz
13.500MHz
13.5168MHz
13.56MHz
13.605MHz
13.824MHz
13.94916MHz
14.00MHz
14.318MHz
14.31818MHz
14.3359MHz
14.3594MHz
14.4MHz
14.5MHz
14.69MHz
14.7456MHz
14.850MHz
15MHz
15.360MHz
16.000MHz
16.000312MHz
16.128MHz
16.257MHz
16.3676MHz
16.368MHz
16.384MHz
16.576MHz
16.6660MHz
16.667MHz
16.670MHz
16.800MHz
16.934MHz
16.9344MHz
17.734475MHz
18.000MHz
18.432MHz
18.869MHz
19.200MHz
19.440MHz
19.660MHz
19.6608MHz
19.68MHz
19.800MHz
20.000MHz
20.35625MHz
20.3563MHz
20.480MHz
21.47727MHz
22.000MHz
22.118MHz
22.1184MHz
22.400MHz
22.5MHz
22.5792MHz
22.6278MHz
23MHz
23.2643MHz
23.5MHz
23.5122MHz
23.592MHz
24.000MHz
24.00014MHz
24.5MHz
24.545454 MHz
24.5535MHz
24.576MHz
24.704MHz
24.7456MHz
25.000MHz
25MHz
25.175MHz
25.2235MHz
25.4563MHz
25.5MHz
26.000MHz
26.45125MHz
26.4513MHz
26.5MHz
26.5971MHz
26.800MHz
27.000MHz
27.1344MHz
27.3067MHz
27.4688MHz
28.000MHz
28.224MHz
28.259375MHz
28.2594MHz
28.322MHz
28.375MHz
28.5938MHz
28.636MHz
28.6363MHz
28.63636MHz
29.4912MHz
29.498928MHz
29.500MHz
30.000MHz
32.000MHz
32.514MHz
32.768MHz
33.000MHz
33.333MHz
33.3333MHz
33.8688MHz
35.2512MHz
35.3280MHz
36.000MHz
38.000MHz
38.00053MHz
38.400MHz
38.880MHz
39MHz
40.000MHz
40.320MHz
40.960 MHz
42.000MHz
44.000MHz
44.2368MHz
44.545MHz
44.736MHz
44.800MHz
44.900MHz
45.000MHz
46.000MHz
48.000MHz
49.152MHz
49.86MHz
50.000MHz
53.125MHz
55.000MHz
60.000MHz
64.000MHz
66.000MHz
66.666MHz
66.6666MHz
73.66979MHz
75.957292MHz
76.121875MHz
80.000MHz
100.00MHz
*/
You can’t perform that action at this time.