-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtempests.html
374 lines (332 loc) · 21.5 KB
/
tempests.html
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>fritzm.github.io - Atari Tempest repairs</title>
<meta name="description" content="">
<meta name="author" content="Fritz Mueller">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="https://fritzm.github.io/theme/html5.js"></script>
<![endif]-->
<!-- Le styles -->
<link href="https://fritzm.github.io/theme/bootstrap.min.css" rel="stylesheet">
<link href="https://fritzm.github.io/theme/bootstrap.min.responsive.css" rel="stylesheet">
<link href="https://fritzm.github.io/theme/local.css" rel="stylesheet">
<link href="https://fritzm.github.io/theme/pygments.css" rel="stylesheet">
<!-- Photoswipe -->
<link rel="stylesheet" href="https://fritzm.github.io/theme/photoswipe.css">
<link rel="stylesheet" href="https://fritzm.github.io/theme/default-skin/default-skin.css">
<script src="https://fritzm.github.io/theme/photoswipe.min.js"></script>
<script src="https://fritzm.github.io/theme/photoswipe-ui-default.min.js"></script>
<script src="https://fritzm.github.io/galleries.js"></script>
<script type="text/javascript">
var pswipe = function(gname, index) {
var pswpElement = document.querySelectorAll('.pswp')[0];
var items = galleries[gname];
var options = { index: index };
var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();
};
</script>
<!-- So Firefox can bookmark->"abo this site" -->
<link href="https://fritzm.github.io/feeds/all.rss.xml" rel="alternate" title="fritzm.github.io" type="application/rss+xml">
</head>
<body>
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="https://fritzm.github.io">fritzm.github.io</a>
<div class="nav-collapse">
<ul class="nav">
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="content">
<div class="row">
<div class="span9">
<div class='article'>
<div class="content-title">
<h1>Atari Tempest repairs</h1>
Mon 01 March 2021
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Some friends of mine own vintage arcade games. Two of them had Atari Tempest machines (one a full-size
upright, one the rather more rare "cabaret") that had ceased to play, so I offered to look at them both if
they could be dropped off here at my home. Some time later, and here they are in the garage (the Space Duel
upright in the background is my own):</p>
<p><img src='/images/arcades/tempests_thumbnail_tall.jpeg' title='Atari Tempest cabaret and upright, in for repairs' onclick='pswipe("arcades",0);'/>
<img src='/images/arcades/tempest-cabaret-guts_thumbnail_tall.jpeg' title='Atari Tempest cabaret insides' onclick='pswipe("arcades",1);'/>
<img src='/images/arcades/tempest-bench_thumbnail_tall.png' title='Atari Tempest running on the bench' onclick='pswipe("arcades",2);'/></p>
<p>Overall, these are not too complicated, and pretty easy to work on:</p>
<ul>
<li>
<p>There is a straightforward linear supply in the bottom of the cabinet, known as the "brick", which
provides +10.6 VDC and 50, 36, and 6 VAC.</p>
</li>
<li>
<p>A separate card, the "AR2" (downstream of the brick, also linear), derives +12, +/-5, and +/-22 VDC, as
well as hosting audio power amplifiers for game sound.</p>
</li>
<li>
<p>The "brains" of the game are a control board with a 1.5 MHz 6502A processor, ROMs, RAM, and GPIO for
settings DIP switches, coin door etc. Since Tempest is a vector game, a fair bit of the control board is
also dedicated to vector generation; Tempest uses an "analog vector generator" where vectors are swept by
analog integrators with rate inputs fed by DACs. The control board has a daughter-card which has 4x AMD2901
bit-slice ALUs to assist the 6502 with math, and a couple of custom Atari chips ("POKEYs") for sound sound
generation and game control input.</p>
</li>
<li>
<p>Last, there is a color vector CRT, the WG6100. This has X and Y deflection amplifiers similar to an
oscilloscope, and accepts RGB inputs for color/intensity.</p>
</li>
</ul>
<p>These games are quite common, so all of these components have well-understood failure modes; you will find
these discussed in various arcade repair online forums and FAQs. The stuff I always look for:</p>
<ul>
<li>
<p>Brick: There is a large electrolytic, known as "big blue", which is the primary filter for the +10.6 VDC.
If it is still the '80s original, it is probably worth a check. Modern drop-in replacements are available
for ~$15 USD.</p>
<p>There is also a fuse block wired in with crimp quick-disconnects. They are problematic because they may
oxidize or rattle loose, causing increased resistance and eventually thermal runaway as the currents here
are in the multi-amp range and the brick is located at the bottom of the cabinet where air circulation is
not great. It is not uncommon to find toasty wiring and/or melted plastic fuse blocks; if doing repairs in
this area I'll generally just clip off the quick disconnect connectors entirely and solder the wires down
directly to the fuse block tabs to avoid future reliability issues.</p>
</li>
<li>
<p>AR2: Common fails here are also generally thermal issues. Recap kits for these boards are available from the
arcade parts houses, but in my experience aren't often required. Each of the supplies on the AR2 is pretty
easy to bench test, but make sure you test with at least a minimal load in place as some of the linear
regulators here will behave unpredictably when unloaded. I've never personally seen a failure of the
integrated audio amplifiers on the AR2, so I generally don't bother to test them up front; if I have an
audio problem with the game I will come back and give them a look later.</p>
<p>The +5 VDC supply here works with a remote sense, which is a matter of some controversy. There can be an
appreciable (and variable between cabinets) voltage drop from the AR2 to the game boards over the molex
connectors, wiring harness, and game board edge connectors in between. Atari seems to have gone for a
remote sense design to automatically compensate for this. The problem is that it is not uncommon for the
board edge connectors to loosen over time and/or accumulate dust and oxidation, increasing resistance, and
leading to another thermal runaway situation as the supply keeps upping the juice to overcome
ever-increasing resistive drop. It is not uncommon to see toasted wiring, toasted AR2, and/or even burnt
board traces.</p>
<p>Some techs advocate short circuiting the remote sense at the AR2 (known as the "sense mod") with the
argument that it is less destructive to fail into a game-board-under-voltage condition than to fail into
an over-current-until-something-burns situation. Others insist the original design is fine as long as
board and harness connections are well maintained. I tend to leave things stock unless there is evidence
of a problem. If a particular cabinet looks like a chronic +5 burner, though, I'll go ahead and implement
the sense mod as well as repairing/replacing the board edge connector; I also add some additional beefy supply and ground wires directly between the AR2 and voltage test terminals on the game boards to shed
load off the board edge connector.</p>
<p>For a toasted +5 supply, check Q3, the TO3 series pass transistor on the large heat sink. Sometimes this
fails just because of poor thermal connectivity with the heat sink; replacing the stock mica insulator
with a silpad and a very thin coat of fresh thermal grease can help here.</p>
</li>
<li>
<p>WG6100 color vector display: This is its own odyssey :-) Lot's of good info on trouble-shooting and
repairing these is available on the web. In particular, there is a low-voltage supply section on the
deflection board which is quite failure-prone. There are drop-in replacement supply circuits available; you
pull all the components in the original section and solder in a small pre-fab daughter board in their place
(google "LV-2000"). This upgrade increases the long-term reliability of the WG6100 to such a significant
extent that I always opt to install one of these if not already present.</p>
<p>Next most common are fails with the through-hole cable pin connectors. Solder connections here break from
repeated mechanical stresses of plugging and unplugging connecting cables, and for some reason the
original factory solders here seem pretty shoddy. Always worth giving these a reflow with some fresh
solder.</p>
<p>TO3 deflection transistors are mounted off board on the monitor chassis, using the chassis as one big heat
sink. These are frequently a casualty of some other cascading failure in the monitor. Flying leads to
the sockets holding these transistors sometimes break loose from mechanical stresses, or the old sockets
may fail, or mica insulators may develop shorts to the chassis (silpad etc. treatment is generally a good
idea here too.)</p>
<p>One thing to be careful of here is that there seem to be a lot of counterfeits of these particular
transistors (2N3716/2N3792) on the market. Counterfeits will <em>mostly</em> work, but can exhibit some strange
instabilities at cross-over which can manifest as ringing and parasitics in the deflection amplifiers
causing "wiggly" vectors that can be difficult to troubleshoot (see pictures from another WG6100 monitor
repair immediately below). Make sure to order from one of the larger, more reliable, parts houses for
these.</p>
<p><img src='/images/arcades/wg6100-deflection-parasitic_thumbnail_tall.jpeg' title='A parasitic oscillation from a conterfeit deflection transistor in a WG6100 vector monitor. Stimulus is a 1 KHz 8V p-p sine wave. Parasitic initiates near cross-over.' onclick='pswipe("arcades",3);'/>
<img src='/images/arcades/wg6100-deflection-parasitic-zoomed_thumbnail_tall.jpeg' title='Zoom in on parasitic oscillation in WG6100 deflection amplifier. Parasitic is approx 4 MHz 200 mV.' onclick='pswipe("arcades",4);'/></p>
<p>The HV supply in these monitors seems particularly hard on its electrolytic caps; I've seen more cap
failures in these HV supplies than anywhere else in these games. Generally worth just doing a recap kit
on the HV board if the caps don't look fresh when you get there; it can help improve the stability and
appearance of the monitor a lot. After achieving correct and stable B+ on the HV supply, if there still
seem to be brightness problems, check C503 on the neck board and refresh if necessary.</p>
</li>
<li>
<p>Game boards: there are eight small PCB mount potentiometers for trimming the analog X/Y outputs. The stock
parts are open-frame and seem to collect dust and get twitchy and intermittent (open wiper contacts here can
be a cause of loss of video output). I generally just go ahead and freshen these before starting in on the
boards, as I hate working with them when they are intermittent/unreliable.</p>
<p>Solder fails in the large interconnect between the mother and daughter boards are also common; these are
also worth a preemptive reflow.</p>
</li>
</ul>
<p>These two games from my friends were no exception to the above, and after working the standard stuff for both
I had two working bricks, two working AR2s, two working monitors, and one working board set. The second board
was producing no output of any sort, didn't appear to respond to its reset switch, and required further
investigation.</p>
<p>Okay, like any microprocessor project, start with power, clock and reset... Power looked fine. Clock, not
so much. Here's the clock circuit:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/arcades/tempest-clock.png"
title="Atari Tempest clock circuit"/></p>
<p>12 MHz crystal with some pulse shaping scoped out fine. Master clock then goes to counter chip C4 to divide
down to various derived clocks, including the crucial PHI0 for the 6502. Turns out this counter wasn't
counting because its clear input (pin 14, seen arriving from below) was being continuously driven. That input
comes from the watchdog circuit and power on reset circuit:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/arcades/tempest-watchdog.png"
title="Atari Tempest watchdog circuit"/></p>
<p>Reset was continuously asserted here because of a dodgy Molex connector which was not delivering +10.6 VDC to
TL082 K11 at the left. After fixing this, the machine came out of reset, the reset button was working, and
there were signs of activity on the 6502 data and address busses. But the game wasn't really running, and the
watchdog was repeatedly timing out, so it seemed to be executing incorrect code.</p>
<p>Pulled the game ROMs, and used a burner/reader to verify their checksums against published values from the
arcade game forums (all good). Checked for shorts around the sockets (found none) and reseated the ROMs.
Pulled the 6502 and manually drove address bus lines to verify proper operation of the ROM address decoders
(all fine). Okay, so time to watch the microprocessor busses on a logic analyzer and see what's going on...</p>
<p>Now, I love my old HP 1660 logic analyzer, lots, but a friend had recently loaned to me a compact 34-channel
USB logic analyzer (Intronix LA1034) to see if I might be interested in buying it, and I decided to give it a
try for this project. It was pretty easy to probe up the 6502 with a DIP clip, and the software for the
analyzer (Windows only) installed and ran without difficulty on my Windows 10 VM.</p>
<p>When the 6502 comes out of reset, it fetches its reset vector from locations FFFC and FFFD, then jumps to
that address. Looking at the Tempest ROM listings, the reset vector is supposed to point to address D93F.
Watching the 6502 address and data busses, and setting a trigger for address FFFC, we can immediately see
a problem:</p>
<p><br><img style="display:block; margin-left:auto; margin-right:auto"
src="/images/arcades/tempest-reset-bad.png" title="Atari Tempest 6502 coming out of reset w/ bad data
fetch"/><br></p>
<p>Here, the top line is the 6502 address bus, and the middle line is the 6502 data bus. The bottom line is the
output on the ROM bus, upstream of the driver which gates it onto the data bus.</p>
<p>The 6502 comes out of reset, and attempts reads of locations FFFC and FFFD, as visible on the address bus, but
it is receiving incorrect data (C82E vs. the expected D93F). It then jumps to the incorrect address, and from
that point onward we are off in the weeds. Interestingly, we can see here that the ROM is, in fact,
presenting the correct data.</p>
<p>So the first thing was to try replacing the bus driver between the ROM and the 6502 data busses, but this did
not fix the issue (sadness). Besides this and the 6502 itself (already verified by swap with the other
working game board) there are only two other drivers on the processor data bus: H2, leading to the daughter
board, and F2 leading to the RAM bus. ROM bus seen entering here from the bottom:</p>
<p><br><img style="display:block; margin-left:auto; margin-right:auto" src="/images/arcades/tempest-data-bus.png"
title="Atari Tempest microprocessor data bus"/><br></p>
<p>One of these two drivers must be dragging down a couple of lines on the data bus; nothing to do here but try swapping them out one by one. Tried F2 first, and got lucky! Game code began to run, and the game board produced vector outputs. Correct reset sequence after the fix:</p>
<p><br><img style="display:block; margin-left:auto; margin-right:auto"
src="/images/arcades/tempest-reset-good.png" title="Atari Tempest 6502 coming out of reset w/ correct sequencing"/><br></p>
<p>From this point forward, just wrap-up:</p>
<ul>
<li>
<p>The X positions on the ends of some vectors on the second game board set looked slightly incorrect, beyond
what could be adjusted with via the associated rate op-amp offset ("BIP", in Atari-speak) trimmer. This
usually indicates a failing rate DAC. Replaced the X rate DAC on this board and the problem was addressed.</p>
</li>
<li>
<p>Various small mechanical repairs to the cabinets, replacement of bits of missing hardware, and cleanup of a
hacked-up wiring harness on one of the machines.</p>
</li>
<li>
<p>The cabaret machine had a failed fluorescent tube fixture for its marquee light; after checking with the
owner, pulled this and replaced with an LED fixture for greater reliability (I like <a href="https://hamiltonbowes.com/collections/l3-series-120v-led-lighting-system/products/12-strip-light-white-plastic">this one</a>,
which is a 120v fixture that doesn't need a separate transformer or supply.)</p>
</li>
<li>
<p>Another upgrade I really like for Tempest machines is a set of brass bushings for the spinner (available
<a href="https://www.arcadefixit.com/product.sc?productId=382">here</a>). These make the spinner quiet and smooth as
butter. </p>
</li>
</ul>
<p>All done now, and ready to be returned to their owners (after some extensive "burn in" play testing, of
course! :-)</p></div>
<hr>
</div>
</div>
<div class="span3">
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
<li class="nav-header">
Site
</li>
<li><a href="https://fritzm.github.io/archives.html">Archives</a>
<li><a href="https://fritzm.github.io/tags.html">Tags</a>
<li><a href="https://fritzm.github.io/feeds/all.rss.xml" rel="alternate">RSS feed</a></li>
</ul>
</div>
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
<li class="nav-header">
Categories
</li>
<li><a href="https://fritzm.github.io/category/arcade-games.html">Arcade Games</a></li>
<li><a href="https://fritzm.github.io/category/math.html">Math</a></li>
<li><a href="https://fritzm.github.io/category/micros.html">Micros</a></li>
<li><a href="https://fritzm.github.io/category/pdp-11.html">PDP-11</a></li>
<li><a href="https://fritzm.github.io/category/programming.html">Programming</a></li>
<li><a href="https://fritzm.github.io/category/radios.html">Radios</a></li>
</ul>
</div>
<div class="social">
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
<li class="nav-header">
Social
</li>
<li><a href="http://facebook.com/fritzmueller">facebook</a></li>
<li><a href="http://instagram.com/infrafritz">Instagram</a></li>
<li><a href="http://www.linkedin.com/pub/fritz-mueller/a/679/62/">LinkedIn</a></li>
<li><a href="http://jsfiddle.net/user/fritzm/fiddles/">JSFiddle</a></li>
<li><a href="https://github.com/fritzm">GitHub</a></li>
</ul>
</div>
</div>
</div>
</div> </div>
<footer>
<br />
<p><a href="https://fritzm.github.io">fritzm.github.io</a> © Fritz Mueller 2023</p>
</footer>
</div> <!-- /container -->
<!-- Photoswipe -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<div class="pswp__bg"></div>
<div class="pswp__scroll-wrap">
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--share" title="Share"></button>
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://fritzm.github.io/theme/bootstrap-collapse.js"></script>
</body>
</html>