summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/xtal.cpp
blob: 62d0370e661186c4c70e8473a92a746b514d22b7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
// 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
		500'000, // 500_kHz_XTAL           Resonator - MIDI clock on various synthesizers (31250 * 16)
		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'600'000, // 1.6_MHz_XTAL           Resonator - Roland TR-707
	  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'250'000, // 2.25_MHz_XTAL          Resonator - YM2154 on Yamaha PSR-60 & PSR-70
	  2'376'000, // 2.376_MHz_XTAL         CIT-101 keyboard
	  2'457'600, // 2.4576_MHz_XTAL        Atari ST MFP
	  2'470'000, // 2.47_MHz_XTAL          CSA2.47MG ceramic oscillator - Casio CZ-1
	  2'500'000, // 2.5_MHz_XTAL           Janken Man units
	  2'600'000, // 2.6_MHz_XTAL           Sharp PC-1500
	  2'700'000, // 2.7_MHz_XTAL           Resonator - YM2154 on Yamaha RX15
	  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'300'000, // 3.3_MHz_XTAL           LC 80 (export)
	  3'521'280, // 3.52128_MHz_XTAL       RCA COSMAC VIP
	  3'546'800, // 3.5468_MHz_XTAL        Atari 400 PAL
	  3'546'894, // 3.546894_MHz_XTAL      Atari 2600 PAL
	  3'547'000, // 3.547_MHz_XTAL         Philips G7200, Philips C7240
	  3'562'500, // 3.5625_MHz_XTAL        Jopac JO7400
	  3'570'000, // 3.57_MHz_XTAL          Telmac TMC-600
	  3'578'640, // 3.57864_MHz_XTAL       Atari Portfolio PCD3311T
	  3'579'000, // 3.579_MHz_XTAL         BeebOPL
	  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'579'575, // 3.579575_MHz_XTAL      Atari 2600 NTSC
	  3'580'000, // 3.58_MHz_XTAL          Resonator - Ritam Monty
	  3'680'000, // 3.68_MHz_XTAL          Resonator - Baud rate clock for the 6551 in the MTU-130
	  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'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'220'000, // 4.220_MHz_XTAL         Used to drive OKI M6295 chips on some Namco boards, usually with /4 divider
	  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        -
	  4'946'800, // 4.9468_MHz_XTAL        Casio CPS-2000
	  4'946'864, // 4.946864_MHz_XTAL      Casiotone 8000
	  4'952'000, // 4.952_MHz_XTAL         IGS M036 based mahjong games, for TT5665 sound chip
	  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'500'000, // 5.5_MHz_XTAL           Yamaha PSS-480
	  5'529'600, // 5.5296_MHz_XTAL        Kontron PSI98 keyboard
	  5'626'000, // 5.626_MHz_XTAL         RCA CDP1869 PAL dot clock
	  5'659'200, // 5.6592_MHz_XTAL        Digilog 320 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'048'000, // 6.048_MHz_XTAL         Hektor II
	  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, Roland QDD interface
	  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'056'000, // 7.056_MHz_XTAL         Alesis QS FXCHIP (LCM of 44.1 kHz and 48 kHz)
	  7'159'090, // 7.15909_MHz_XTAL       Blood Bros (2x NTSC subcarrier)
	  7'200'000, // 7.2_MHz_XTAL           Novag Constellation (later models, with /2 divider), Kawai K1 keyscan IC
	  7'372'800, // 7.3728_MHz_XTAL        -
	  7'680'000, // 7.68_MHz_XTAL          Psion Series 3
	  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'053'000, // 8.053_MHz_XTAL         Mad Motor
	  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'860'000, // 8.86_MHz_XTAL          AlphaTantel
	  8'867'000, // 8.867_MHz_XTAL         Philips G7400 (~2x PAL subcarrier)
	  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
	  8'960'000, // 8.96_MHz_XTAL          Casio CZ-101 (divided by 2 for Music LSI)
	  9'000'000, // 9_MHz_XTAL             Homedata PCBs
	  9'216'000, // 9.216_MHz_XTAL         Univac UTS 20
	  9'263'750, // 9.263750_MHz_XTAL      Sai Yu Gou Ma Roku bootleg
	  9'400'000, // 9.4_MHz_XTAL           Yamaha MU-5 and TG-100
	  9'426'500, // 9.4265_MHz_XTAL        Yamaha DX7, and DX9
	  9'600'000, // 9.6_MHz_XTAL           WD37C65 second clock (for 300 KB/sec rate)
	  9'732'000, // 9.732_MHz_XTAL         CTA Invader
	  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'240'000, // 10.240_MHz_XTAL        Stella 8085 based fruit machines
	 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'000, // 10.644_MHz_XTAL        Northwest Digitial Systems GP-19
	 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'055'000, // 11.055_MHz_XTAL        Atari Tank 8
	 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'289'600, // 11.2896_MHz_XTAL       Frantic Fred
	 11'400'000, // 11.4_MHz_XTAL          HP 9845
	 11'668'800, // 11.6688_MHz_XTAL       Gameplan pixel clock
	 11'730'000, // 11.73_MHz_XTAL         Irem M-11
	 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'292'000, // 12.292_MHz_XTAL        Northwest Digitial Systems GP-19
	 12'324'000, // 12.324_MHz_XTAL        Otrona Attache
	 12'335'600, // 12.3356_MHz_XTAL       RasterOps ColorBoard 264 (~784x NTSC line rate)
	 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'638'000, // 12.638_MHz_XTAL        Exidy Sorcerer
	 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'000'000, // 13_MHz_XTAL            STM Pied Piper dot clock
	 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'560'000, // 13.560_MHz_XTAL        Tong Zi Maque
	 13'608'000, // 13.608_MHz_XTAL        TeleVideo 910 & 925
	 13'824'000, // 13.824_MHz_XTAL        Robotron PC-1715 display circuit
	 13'977'600, // 13.9776_MHz_XTAL       Kaypro II dot clock
	 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'250'450, // 14.25045_MHz_XTAL      Apple II Europlus
	 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'349'600, // 14.3496_MHz_XTAL       Roland S-50 VDP
	 14'469'000, // 14.469_MHz_XTAL        Esprit Systems Executive 10/102
	 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'746'000, // 14.746_MHz_XTAL        Namco System 10 MGEXIO
	 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'625'000, // 15.625_MHz_XTAL        Zaccaria The Invaders
	 15'667'200, // 15.6672_MHz_XTAL       Apple Macintosh
	 15'700'000, // 15.7_MHz_XTAL          Motogonki
	 15'741'000, // 15.741_MHz_XTAL        DECmate II 80-column display clock
	 15'897'600, // 15.8976_MHz_XTAL       IAI Swyft
	 15'920'000, // 15.92_MHz_XTAL         HP Integral PC
	 15'930'000, // 15.93_MHz_XTAL         ADM 12
	 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'313'000, // 16.313_MHz_XTAL        Micro-Term ERGO 201
	 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'537'000, // 16.537_MHz_XTAL        Falco terminals 80-column clock
	 16'572'000, // 16.572_MHz_XTAL        Micro-Term ACT-5A
	 16'588'800, // 16.5888_MHz_XTAL       SM 7238
	 16'666'600, // 16.6666_MHz_XTAL       Firebeat GCU
	 16'667'000, // 16.667_MHz_XTAL        Visual XDS-19P
	 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)
	 16'960'000, // 16.960_MHz_XTAL        Esprit Systems Executive 10/102
	 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'320'000, // 17.320_MHz_XTAL        Visual 50
	 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     4x PAL subcarrier - All of these exist, exact 4x PAL is actually 17'734'475
	 17'734'475, // 17.734475_MHz_XTAL     4x PAL subcarrier - "
	 17'734'476, // 17.734476_MHz_XTAL     4x PAL subcarrier - "
	 17'812'000, // 17.812_MHz_XTAL        Videopac C52
	 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'600'000, // 18.6_MHz_XTAL          Teleray Model 10
	 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'718'400, // 19.7184_MHz_XTAL       Informer 207/100
	 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'282'000, // 20.282_MHz_XTAL        Northwest Digitial Systems GP-19
	 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'328'100, // 21.3281_MHz_XTAL       Philips NMS8245
	 21'477'272, // 21.477272_MHz_XTAL     BMC bowling, some Data East 90's games, Vtech Socrates; (6x NTSC subcarrier)
	 21'667'500, // 21.6675_MHz_XTAL       AT&T 610 80-column display clock
	 21'756'600, // 21.7566_MHz_XTAL       Tab Products E-22 80-column display clock
	 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'168'000, // 22.168_MHz_XTAL        Sony HB-10P VDP (5x PAL subcarrier)
	 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'579'000, // 22.579_MHz_XTAL        Sega System H1 SCSP clock
	 22'579'200, // 22.5792_MHz_XTAL       Enhanced Apple Digital Sound Chip clock (44100 * 512)
	 22'656'000, // 22.656_MHz_XTAL        Super Pinball Action (~1440x NTSC line rate)
	 22'680'000, // 22.680_MHz_XTAL        HDS200 80-columns display clock
	 22'896'000, // 22.896_MHz_XTAL        DEC VT220 132-column display clock
	 23'200'000, // 23.2_MHz_XTAL          Roland JV-80 & JV-880 PCM 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'167'829, // 24.167829_MHz_XTAL     Neo Geo AES rev. 3-3 and later (~1536x NTSC line rate)
	 24'270'000, // 24.27_MHz_XTAL         CIT-101XL
	 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'195'000, // 26.195_MHz_XTAL        Roland JD-800
	 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 I4220/I4300
	 26'666'666, // 26.666666_MHz_XTAL     Irem M92 but most use 27MHz
	 26'670'000, // 26.670_MHz_XTAL        Namco EVA
	 26'686'000, // 26.686_MHz_XTAL        Typically used on 90's Taito PCBs to drive the custom chips
	 26'800'000, // 26.8_MHz_XTAL          SAA7110 TV decoder
	 26'824'000, // 26.824_MHz_XTAL        Astro Corp.'s Zoo
	 26'880'000, // 26.88_MHz_XTAL         Roland RF5C36/SA-16 clock (30000 * 896)
	 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, Pinnacle Zoran based PCI cards
	 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
	 27'720'000, // 27.72_MHz_XTAL         AT&T 610 132-column display clock
	 27'956'000, // 27.956_MHz_XTAL        CIT-101e 132-column display clock
	 28'000'000, // 28_MHz_XTAL            Sega System H1 SH2 clock, Kyukyoku Tiger / Twin Cobra
	 28'224'000, // 28.224_MHz_XTAL        Roland JD-800
	 28'322'000, // 28.322_MHz_XTAL        Saitek RISC 2500, Mephisto Montreux
	 28'375'160, // 28.37516_MHz_XTAL      Amiga PAL systems
	 28'432'000, // 28.432_MHz_XTAL        Fuuki FG-3J MAIN-J PCB
	 28'475'000, // 28.475_MHz_XTAL        CoCo 3 PAL
	 28'480'000, // 28.48_MHz_XTAL         Chromatics CGC-7900
	 28'636'000, // 28.636_MHz_XTAL        Super Kaneko Nova System
	 28'636'363, // 28.636363_MHz_XTAL     Later Leland games and Atari GT, Amiga NTSC, Raiden2 h/w (8x NTSC subcarrier), NEC PC-88xx
	 28'640'000, // 28.64_MHz_XTAL         Fuuki 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'215'900, // 32.2159_MHz_XTAL       Sega System 32, Sega Game Gear (close to 9x NTSC subcarrier which is 32.215905Mhz
	 32'220'000, // 32.22_MHz_XTAL         Typically used on 90's Data East PCBs
	 32'223'800, // 32.2238_MHz_XTAL       Sony SMC-777 (~2048x NTSC line rate)
	 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
	 32'640'000, // 32.64_MHz_XTAL         Vector 4
	 32'768'000, // 32.768_MHz_XTAL        Roland D-50 audio clock
	 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'333'333, // 33.333333_MHz_XTAL     Super Kaneko Nova System Sound clock with /2 divider
	 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'452'500, // 35.4525_MHz_XTAL       Nokia MikroMikko 2
	 35'469'000, // 35.469_MHz_XTAL        ZX Spectrum +2/+3 (~8x PAL subcarrier)
	 35'640'000, // 35.640_MHz_XTAL        HDS200 132-column display clock
	 35'834'400, // 35.8344_MHz_XTAL       Tab Products E-22 132-column display clock
	 35'840'000, // 35.84_MHz_XTAL         Akai MPC 60 voice PCB
	 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'000'000, // 44_MHz_XTAL            VGame slots
	 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
	 48'940'000, // 48.94_MHz_XTAL         Queen Bee New
	 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
	 52'867'000, // 52.867_MHz_XTAL        Atlus Print Club (Sega C2 PCB)
	 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
	 56'000'000, // 56_MHz_XTAL            ARM7500 based Belatra slot machines
	 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)
	 58'982'400, // 58.9824_MHz_XTAL       Wyse WY-65
	 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'000'000, // 66_MHz_XTAL            -
	 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'196'800, // 69.1968_MHz_XTAL       DEC VCB0x/VAXstation dot clock
	 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
	 75'000'000, // 75_MHz_XTAL            Sony NEWS NWS-5000X
	 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
	 96'000'000, // 96_MHz_XTAL            Acorn A680
	 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
	105'561'000, // 105.561_MHz_XTAL       Sun cgsix
	108'108'000, // 108.108_MHz_XTAL       HP 98550 high-res color card
	120'000'000, // 120_MHz_XTAL           Astro Corp.'s Stone Age
	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, const 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);
}