Vectrex

Das Vectrex ist eine Spielkonsole, die 1982 auf den Markt kam. Auffälligstes Merkmal ist der eingebaute Hochformat-S/W-Bildschirm zur Ausgabe der Vektorgrafik. Dieser Kompaktaufbau führte zur Einstufung durch Fachzeitschriften in eine eigene Kategorie: Mini-Arcade. Federführender Entwickler war Jay Smith, welcher bereits 1979 das Microvision Handheld für MB entwarf. Hergestellt und veröffentlicht wurde die Konsole in den USA von General Consumer Electric (GCE) ab Oktober 1982. In Europa und Japan übernahm MB den Vertrieb. 1984 stellte MB den Vertrieb ein.

Der Rechnerteil bestand aus einem mit 1,5 MHz getakteten Motorola 6809-Mikroprozessor mit 1 KB RAM und 8 KB ROM (4 KB 'Executive' und 4 KB für Minestorm). Als Soundchip kam ein AY-3-8912 von General Instrument zum Einsatz. Der Bildaufbau erfolgte komplett CPU- gesteuert, d.h. die CPU steuerte in Echtzeit das Zeichnen auf dem Schirm über eine X/Y-Ansteuerung der Bildröhre.

Als Emulator eignet sich MESS. Oder auch - ohne Sound - Vecx. Portabel und inkl. Sourcecode in C! Läßt sich so mit mingw compilieren. (Tasten: a,s,d,f, csr-links+rechts) Für DirectX (Benötigte Header zum compilieren gibts bei www.sdl.org)

Kleiner Emulator mit C Source und Mingw win32 exe: vecx.zip
6809 Assembler mit C Source und Mingw win32 exe: vec_a09.zip

N E U !

Vectrex Emulator mit Overlays, Gameroms (Frei gegeben!) + Sound!

Core emulator by Valavan Manohararajah. Homepage: http://www.valavan.net

SDL+Overlay code by Thomas Mathys.

Sound emulation code by James Higgs. Homepage: http://jum.pdroms.de

E-Mail von: James Higgs am: Thu, 06. Dec 2007 05:06:25 -0800

Hi Peter

I'm glad it worked so easily. I think this is mostly
due to how vecx was originally written to work
cross-platform.

I don't mind if you release your version of vecxsdl on
your site.

My code can be GPL, however I don't know what the
other authors want for their code.

Regards,

James Higgs

vecxsdlsnd.zip

Vectrex Trouble Shooting Guide (EN)
Vectrex Service Manual (EN)

Links:

http://www.vectrexnews.com
http://www.vectrex.nl
http://www.pelikonepeijoonit.net/vec/index.html
http://www.playvectrex.com/designit/chrissalo/toc.htm
http://www.vectrex.biz/
http://geovector.tripod.com/_sgg/f10000.htm
http://www.valavan.net/vectrex.html
http://mitglied.lycos.de/vectrex/start.htm
http://www.emix8.org/static.php?page=VectrexThrustSource
http://www.madtronix.com/html/vectrex.html
ftp://ftp.csus.edu/pub/vectrex/


Units sold

Wieviele Vectrex wurden gebaut? Wieviele gibts davon heute (2007) noch? Diese Frage kann ich bis heute nicht wirklich beantworten. Im Usenet fand ich:

> Does anyone have any info regarding the sales figures of the vectrex?

Since it looks like the serial numbers were created serially as they should be, you can get some idea based on collecting some serial numbers and seeing how high each "group" goes. I have a list from long ago that will get you started. The "groups" are based on region, i.e. USA, Canada, Europe, etc..

Here's my list:
---------------
GCE Vectrex Units
MO: HP3000 (USA)
0000001
0010627
...

0025575
0029907
0039282
...

0092498
0094206
...

0146020
0146795
0149956

ODD ONEs
133905A
139549A

("looks like these are consistently increasing. Maybe there where only
150,000 HP3000's produced. We'll have to see how high it gets.")

GCE Vectrex Units
MO: 3000-CI (Canadian Units)
1012059
1012980
....

1023435
1024993

MB Vectrex Units
MO: 3000 UI-U.K.
2016726
2023309
2028604

MB Vectrex Units (Germany)
MO: 3000-GI-EURO
(EUROPEAN MB)
Old ROM
3010206
3013344
3019282
3037558
New ROM
3061304
3063733
...

3086194
3090492
3116019

Other MB Vectrex Units
4012812
4018788

Notice the 1,2,3 beginning #'s for the MB EUROPEAN units. It looks like
there may have been 5 different starting #'s 0000000, 1000000, 2000000,
3000000, & 4000000.

Anyone have serials from the Japanese Vectre-i (I forgot how we were
doing the plural Vectrex word - yes that has been debated as well ;) )?

Sincerely,
Brett Walach
http://www.PlayVectrex.com


Daraus schließe ich:
Es wurden NICHT 4 Mio. Stück zw. Oktober 1982 und Mitte 1984 gebaut!
Es gab 4 Seriennummerngruppen:

0 xxx xxx   GCE Vectrex Units MO: HP3000 (USA)
1 xxx xxx   GCE Vectrex UnitsMO: 3000-CI (Canadian Units)
2 xxx xxx   MB Vectrex Units MO: 3000 UI-U.K.
3 xxx xxx   MB Vectrex Units MO: 3000-GI-EURO (EUROPEAN MB)
4 xxx xxx   MB Vectrex Units Other

Innerhalb eines jeden Bereichs sind die Seriennummern fortlaufend.
Anhand der 'höchsten' Seriennummern in jedem Bereich kann man die Anzahl der Units pro Bereich ermitteln. Die Summe aller Bereiche ergibt dann die Anzahl aller Units.

0 -  200000
1 -   25000
2 -   35000
3 -  100000
4 -   25000
Daraus ergäbe sich eine Gesamtzahl produzierter Geräte von ca. 400.000 Stück.

Wenn wir annehmen, das davon noch 10% bis heute (2007) überlebt haben, so kommen wir auf ca. 40.000 Stück.


Meine Multicard

Hier beschreibe ich meine Versuche, eine sog. Multicard zu bauen. Als einziges Modul zum 'schlachten' hatte ich Blitz (8k). Zun öffnen einfach die Schraube an der Unterseite lösen und die Plastiknasen/-haken an der Einschubseite lösen. Ich wollte zuerst das ROM sauber auslöten. Hatte schon entsprechende Erfahrung mit dem Auslöten von IC's beim C64 gesammelt. Aber ich hatte nichts, um diese kleine Platine vernünftig zu fixieren.. so gings gar nicht. Also habe ich mich kurzer Hand entschieden, die PIN's nah an der Platine abzukneifen und einen passenden Sockel einfach aufzulöten. Dabei immer wieder kontrollieren, das alles korrekt verbunden ist! Es sollen 16 x 4k Programmbereiche über 4 Steckbrücken/Schalter wählbar sein.
Cartridge slot Belegung:


  OBEN               UNTEN
 -------           --------
   2. Vcc (+5v)    1. /HALT
   4. Vcc (+5v)    3. A7
   6. A8           5. A6
   8. A9           7. A5
  10. A11          9. A4
  12. /OE (1)     11. A3
  14. A10         13. A2
  16. /CE (2)     15. A1
  18. D7          17. A0
  20. D6          19. D0
  22. D5          21. D1
  24. D4          23. D2
  26. D3          25. GND
  28. GND         27. GND
  30. R/*W (3)    29. A12
  32. /CART(4)    31. A13
  34. /NMI        33. A14
  36. /IRQ        35. (5)


(1) Inverted copy of 'E' clock from CPU. Valid CPU access when E is high
(2) A15 from CPU according to the nut. ;) However, the commercial carts I've seen use this line for chip enable.
(3) Note: unused on many carts
(4) Active low Cartridge enable - low when E is high and A15 low. Although I verified that it seems to work, many carts do not use it.
(5) Port B, Bit 6 of the 6522 PIA (software controlled line)

Attention: A11 and /CE ist exchanged at ROM! For Eprom (JEDEC 27XXX), this change must be reversed!

Hier ein 2764 (8k) Eprom und ein 27512 (64k) Eprom im Vergleich:


    +-------\/-------+            +-------\/-------+ 
 1 -|Vpp          Vcc|- 28     1 -|A15          Vcc|- 28
 2 -|A12         /pgm|- 27     2 -|A12          A14|- 27
 3 -|A7            nc|- 26     3 -|A7           A13|- 26 
 4 -|A6            A8|- 25     4 -|A6            A8|- 25
 5 -|A5    2764    A9|- 24     5 -|A5   27512    A9|- 24
 6 -|A4           A11|- 23     6 -|A4           A11|- 23
 7 -|A3           /OE|- 22     7 -|A3       /OE-Vpp|- 22
 8 -|A2           A10|- 21     8 -|A2           A10|- 21
 9 -|A1           /CE|- 20     9 -|A1      /CE-/PGM|- 20
10 -|A0            D7|- 19    10 -|A0            D7|- 19
11 -|D0            D6|- 18    11 -|D0            D6|- 18
12 -|D1            D5|- 17    12 -|D1            D5|- 17
13 -|D2            D4|- 16    13 -|D2            D4|- 16
14 -|GND           D3|- 15    14 -|GND           D3|- 15   
    +----------------+            +----------------+

 

Und hier der 'Plan' der Umschaltung:

Connect pin 26, 27 and 1, 2 (A12, A13, A14, A15) via pullup resistor of 10k and switch to GND for address range selection
of the 16 x 4k blocks:

   o------+-----+ \-----| GND
  26      |    switch
  27     +-+
   1     | | 10k
         +-+
          |
          +  Vcc

Nun wie es aussieht, kann man ein 27512 einfach auch direkt einstecken, wobei dann nur ein 4k Block aktiv ist 
(wahrscheinlich der obere).

16x 4kb Spiele:

AAAA<- Adressleitungen
1111
5432
0000 - armor
0001 - bedlam
0010 - berzerk
0011 - castle
0100 - chasm
0101 - hyper
0110 - mstorm2
0111 - ripoff
1000 - rocks
1001 - space
1010 - starhawk
1011 - sweep
1100 - vpong
1101 - ski
1110 - philo
1111 - castle


Nun, es war nicht ganz wie erwartet.. A12+A15 scheinen auf 0V zu sein.
16x4k = mstorm2 wird gestartet und läuft!

Also sind:
AAAA
1111
5432
0110 - Pegel verdrahtet.

Ich habe dann einen Adapter für das 16x4k Eprom gebastelt, wobei A12-A15 über 10k Widerstand (pullup) an 5V liegen und über DIP-Schalter an GND gelegt werden können. Und so sieht es aus:


Schwarz=GND, Rot=+5V, die 4 andere Drähte gehen zu A12..A15. Also eingelötet ist ein Präzisionssockel. Dann kommt ein Billigsockel, an dem PIN: 1,2,26,27 zur Seite gebogen wurden (1=A15,2=A12,26=A13,27=A14). Damit kein Kontakt zum unteren Sockel möglich ist, muß man die entsprechenden Kontakte am unteren Sockel z.B mit Isolierband abkleben!!
Achtung! Unbedingt +5V am alten PIN 24 des ROM Sockels von A13 des 27C512 isolieren!!

Nicht schön, aber es funktioniert!! Ich habe mal versucht ein Layout der Bauteilplazierung und Verschaltung zu erstellen (Ich hatte nur ein 8-fach DIP-Switch.. 4-fach hätte gereicht). Dazu habe ich zuerst als ASCII Zeichnung probiert.. war mir aber zu unübersichtlich.. Hardcopy gezogen und in Paint die Verbindungen farbig nachgezogen.. Hier das Ergebnis:

Hier das Eprom-Image: vec_27512_4.zip


Joystick Reinigung

Vectrex_Joystick_Reparatur.pdf

Joystick Umbau für Vectrex

The Sega Genesis Controller is a digital controller. The Vectrex joystick is an analog controller. Games like Minestorm don't look at the analog values of the joystick and only look to see what direction the joystick is moved. Games like Minestorm work with these converted Sega Genesis Controllers. Games like HyperChase look at how far the joystick moves in a direction and are not fun to play with these converted controllers.

Schematic:

Direction Control:
                     +5V (Pin 7)
                      ^
                      |     10K
                   .__|__/\/\/\/\___.
                 |                  |
Right Button    -|         3.3K     |
                 | ._____/\/\/\/\___|
                                    |
                                    |
                                    |-------- X Direction
                           3.3K     |          (Pin 5)
                   ._____/\/\/\/\___|
                 |                  |
Left Button     -|                  |
                 | ._____/\/\/\/\___|
                      |    10K
                      |
                    -5V (Pin 9)



                     +5V (Pin 7)
                      ^
                      |    10K
                   .__|__/\/\/\/\___.
                 |                  |
Up Button       -|         3.3K     |
                 | ._____/\/\/\/\___|
                                    |
                                    |
                                    |-------- Y Direction
                           3.3K     |        (Pin 6)
                   ._____/\/\/\/\___|
                 |                  |
Down Button     -|                  |
                 | ._____/\/\/\/\___|
                      |    10K
                      |
                    -5V (Pin 9)





Button Schematic
                                            Same for Button B,C, and Start
                                            except:
                                                  Button B -> Pin 3
                 .__________ (Pin 2)              Button C -> Pin 4
               |                                  Button Start -> Pin 1
Button A      -|
               | .___
                     |
                     |
                    GND (Pin 8)



Pins listed are those of the 9 pin connector.

Vectrex Controller

9 PIN CONNECTOR

Pin Description

1   Button 1
2   Button 2
3   Button 3
4   Button 4
5   Horizontal Pot
6   Vertical Pot
7   +5V
8   GND
9   -5V

The joystick potentiometers work by voltage division between -5V and +5V. Actually, it uses a couple of resistors on 
each side to make it more like -3.4V to 3.4V.

Vertical Pin 6:

Voltage Direction

-3.4 V  Down
0 V     Center
+3.4 V  Up


Horizontal Pin 5:

Voltage Direction

-3.4 V  Left
0 V     Center
+3.4 V  Right


Repairs

(My Vectrex Works Once Again!)
by Jason Merlo
Hello, newsgroup regulars and non-regulars alike -- I thought I might share some of the things I've learned over the last week and a half while attempting to repair my Vectrex machine. I'm not an expert in electronics, but I know a few things and this is one of those occasions where I actually diagnosed the problem correctly and fixed it! If you're a seasoned repair tech, this message will probably bore you from here on out and you'll wince at some of my terminology. But if you're like me and enjoy tinkering, you may also enjoy my notes below. First of all, my machine is a Japanese Bandai Vectrex. It has Japanese writing on all of the console and controller decals. I don't know if it's any different internally from the American Vectrex, since the schematics I have seemed to match up pretty close. Exceptions are noted below. The symptoms: The monitor on this machine used to work just fine with a nice picture until a couple of years ago. Then suddenly, the machine would work upon power-up for about five minutes, and then the monitor would go crazy, with vectors jumping around and everything. Shortly after this, The picture would fade out slowly. As the picture faded out, the image would increase in size -- sort of a 'zoom in, fade out', if you will. After taking the back cover off of the Vectrex the first time, I noticed that the tube filament (the orange glow you see in the neck of the tube) would fade out along with screen. After this the monitor would be dead until you turned it off and on again. The longer you waited with the power off, the longer the picture would stay stable before flipping out the next time. During monitor freak-out periods, the game itself would play fine, as evident from the game sounds I was still hearing. My first thought: Oh shit, it's the flyback transformer. Probably completely irreplaceable in a unit this old and this obscure. A nine-inch vector monitor isn't exactly state of the art anymore. Not that it was to begin with. :) My second thought: The monitor DOES work for a short time, and in my experience when flybacks go, they GO. So something must be overheating. I took the machine apart and blew an entire can of cleaner/degreaser on the board parts that I could get to. I was sure that removing the thick layer of dust from the logic board would help. But this didn't fix the problem. My third thought: This machine is NOT built for service. I spent the better part of a day figuring out how the two boards were affixed into the plastic shell. I took careful notes on which wires I had to desolder and where molex plugs went. For the record, here's the order in which I took apart the Vectrex. There's probably easier ways to get to all the board components, but this is how I did it:
1. Turn the machine down on its face, and remove the back cover. This just lifts off. Probably the easiest part of the repair. :)
2. Unsolder the four monitor yoke wires from the power board. The power board is the vertical board in the left of the cabinet. These wires are in a small line in the center of the board and are colored blue, red, green, and yellow. The four wires loop around and attach directly to the picture tube. I do not understand why the yoke wires are not attached to a molex harness. All of the other monitors I've worked on in video games have a harness that is easily removable. I intend to go back in when I have time and install a harness. Maybe the American Vectrex is different?
3. Unsolder the three wires in the bottom front of the power board. I think these come directly from the transformer at the bottom of the console. There is one white and two red wires here. Make sure to note which red wire goes where. I put a piece of scotch tape on one of them to differentiate them. Also unsolder the short ground braid that connects the two boards.
4. Unplug all molex harnesses between the two boards and remember (or write down) where they go.
5. Clip the white wire tie that holds the neck board to the picture tube. Remove it, and then *gently* pull the neck board off of the picture tube, straight back. Be careful -- I once dropped the back door of a Phoenix machine into the cabinet and sheared the stem of the picture tube clean off. I got lucky -- the tube didn't shatter into a million pieces because it was such a clean break.
6. Get a flathead screwdriver and attach a wire to the metal part of it. Then attach the other end of the wire to something grounded. I used the metal frame of the monitor. There's not much metal inside of a Vectrex, but this seemed to work okay. Then use the screwdriver to remove the anode cap (the suction cup looking thing) off of the picture tube. It has two prongs which need to be squeezed together to unhook it. You may hear a pop when you first put the screwdriver under the rubber. This is normal -- you're discharging the picture tube.
7. Now unscrew the green ground wire from the upper left corner of the picture tube. Also unscrew the two screws holding the power board to the plastic carriage. The power board should come out completely now. Sit it aside and take out the two big screws holding the carriage to the cabinet. Sit this aside too.
8. Now the fun part. Pull the on/off knob straight off. It's hard to do, but it should come off completely. Now take out the one screw that holds the cartridge port and the logic board together. Also remove the four big screws that hold the logic board chassis to the cabinet. Two of these are above the transformer. The entire chassis should come out now and the cartridge port sheath should come off entirely. Put the picture tube in a safe place where it's not going to fall. I put mine next to my cats food and then moved it when I found out that kitty wanted to play with the Vectrex too. Bad kitty, bad!
9. I could never get the logic board completely separate from plastic, but I did get it to the point where I could solder on the rear side without melting anything important. Turn the board upside down and unsolder the two reset button wires from the bottom of the board. There is one gray and one black wire. Then turn the board back over and take out the last three screws. You should now be able to flip the board by itself over to work on it. Whew!
Things I replaced: I've installed many, many Zanen cap kits over the years, so I figured the one thing I would do for sure was replace all the electrolytic caps on both boards. There are four of them on the logic board, and 22 on the power board. After looking at the schematic and talking to a few repair-head friends, I decided that the monitor filament circuit was suspect as well. I got a couple of suggestions to replace the big heater resistor in the circuit. This is R529, a 1W-3.3ohm carbon-film resistor. My board had some very small, almost nonexistent burn marks on the bottom side of the board under the resistor. This didn't alarm me too much, as hot components will do this, even if they're not bad.
I also got a lot of really great suggestions from another Vectrex-head (unfortunately his name and E-mail are on my work account, or I'd give him credit here) who immediately suspected transistor Q502. I didn't think that transistors could overheat -- I thought that like flybacks, when they died, they died. But I decided to replace it as well to remove it from the equation. I found all the parts I needed at the local Tinkertronics, with a few exceptions:
1) The 3.3ohm-1W resistor was just not going to happen. I managed to rustle up a 2W-3.3ohm resistor, though.
2) Q502 is a BU407 NPN transistor in the 220 package (square with 3 leads sticking out of the bottom). I had to get an NTE part for this one, and for reference, the NTE equivalent is NTE 379.
3) I didn't find several electrolytics, including C409. Note that it's okay to go over on the voltage of the replacement caps if you need to. I had to do this for a few of them. For example, the three 1000uf-25V caps were replaced with 1000uf-35V caps.
4) I ordered C409 and the rest of the caps I needed from Zanen Electronics. Zanen did NOT have the 1W resistor I needed, and did NOT have C409. For reference this is a 0.47uf-50V nonpolar electrolytic capacitor. It's the only electrolytic cap in the machine that's nonpolar. Kind of obscure. But the nice folks at Zanen said that they could make one from others. Sure enough, when I got the cap, it was really two caps with their leads soldered together. I was impressed! Those guys at Zanen really know what they're doing.
One other important point: I found out after I'd placed my order that Zanen actually sells cap kits for the Vectrex! I wish I'd thought to ask them before I started scrounging around for parts. Oh well. I buy cap kits all the time from them for videogame monitors. I've said it before and I'll say it now: replacing caps works wonders on a sick monitor.

I discovered a couple of inconsistencies between the schematic's part list and my machine. These caps may have originally matched the manual, and later replaced, though I can't tell for sure:

1) C507 is 47uf-100V, not 4.7uf-100V.
2) C508 is 47uf-100V, not 15uf-63V.
3) C516 is 3.3uf-350V, not 3.3uf-50V. Going over on voltage a little is one thing, but this is quite a bit.
4) C228 on the logic board is nonexistent in my machine. The board is labeled, but no part has ever been there.

Once I had all my parts, I spent about four hours installing them and tightening up solder joints. I didn't see any particular joint that stood out as definitely cold, but there were some where the solder was dull. Some of the joints looked like they didn't get much solder at the factory. I remedied all of these and made all the joints on both boards nice and shiny.

One thing to note on the power board is that two of the caps I had to replace (including C409) live underneath the large heat sink in the middle. I will reiterate: The Vectrex was NOT built with service in mind. To remove this heat sink:

1) Unscrew the two screws on the top side of the sink that hold it to the IC.
2) Unscrew the two transistors that sit on one side of it, one screw each.
3) Unscrew the six screws on the bottom side of the board. Pull the heat sink out gently and sit it aside.

While the heat sink was off, I cleaned off the old heat-sink compound and replaced the mica on the two side transistors. When I put the heat sink back on, I put some new heat-sink compound on the two transistors and the IC. It was the least I could do to make this board prettier. :) I almost replaced the +5 and -5 voltage regulators, but decided against it. These are the two transistors on the side of the large heat sink on the power board (a 7805 and a 7905, respectively). I decided against it because I figured that these probably powered the logic board, which by all accounts was working fine. One of the Vectrex-heads that I talked to mentioned that when he replaced the two caps under the heat sink, he put them on the BACK side of the board so that he could replace them more easily in the future. I realized that I hadn't done this when I was done swapping out parts, but I probably should have taken his advice. Oh well. The heat sink fit back on just fine, though. After swapping out 4 caps on the logic board, 22 caps on the power board, Q502, and R529, I was ready to put the machine back together and see if it worked! Before this, though, I blew another can of cleaner/degreaser on the boards. Most of this went to the logic board, which will always be dirtier than the power board since it sits horizontally. Then I carefully put the machine back together, following my notes in reverse order. Allow me to say it again: I'm really glad I took good notes while disassembling this beast. Other monitors are easy to pull apart, but this one is a real BITCH. Be warned. I left the back cover off of the unit so I could watch in case anything blew up when I turned it on. At least that might give me a clue about where to look in the event of failure. I plugged it in, turned it on ... and the familiar Vectrex "da-da-dummmm" came on. I hadn't broken it! And I noticed that the background hum on the speaker was quite a bit softer. The work of new filter caps, no doubt. I played Mine Storm for about thirty minutes before I realized that I had played Mine Storm for thirty straight minutes without the monitor going nuts. It's fixed!

The problem was therefore one (or a combination) of three things:

1) A cold solder joint with an intermittent connection. I don't think this is very likely, but possible.
2) A dried-up or nearly dried-up electrolytic cap. Likely.
3) A thermal problem with a key monitor component, either Q502 or R529. Also likely.

And after working on somewhere between fifty and a hundred monitors, I still have only seen one bad flyback. It was on the dearest item in my game collection -- my Robotron -- and it was shooting blue sparks out of it like a Frankenstein movie. I still need to figure out what all the adjustment pots on both boards do, because the alignment and size of some vectors suggest that there's an adjustment out of whack somewhere. If someone out there actually managed to read this far, and knows how to align the screen, could you send me an Email? I have Sean Kelly's excellent multicart, which has a great test pattern generator on it. Thanks for reading! I hope my rambling was helpful to any would-be techies out there. :)

Addendum:

In regards to "that suction cup", just make sure as hell you have discharged the tube before you go putting yourself at risk of getting a 20,000 volt shock. Not a good way to end the day, or your life. -Jeff


This story: ©2001-2007 Guddler's Domain

Symptoms: Picture seriously screwy. Lines didn't meet up at all

Well, after going to the retro ball back at the start of December, I'd been playing on a Vectrex console, was seriousy impressed and decided I wanted to get one. I tried one of the console places that was at the show (who shall not be named) and despite promising me that they had them in stock for £70, basically just completely failed to respond to my two emails I sent so I popped a wanted post out on UKVAC. Lo and behold I was offered one that was 99% working for £25 - bargain :) The disclosed problem was that the lines didn't line up properly on all games. Apparently Minestorm was fine though. While I was waiting for the unit to arrive (not long!) I read the service manual and it honestly sounded like this was going to be nice and easy. It sounded like it had just gone out of adjustment and needed a good service - Excellent! Well, that's about where the optimism ends! The unit turned up, and fair enough, it was as described, although I did notice that the controller didn't always want to work. I figured I'd come back to that later. So, popped it on the bench. Cut open a soccer cart, fitted a socket and adjusted the address lines to take a 2732, then burnt the test rom. Bingo - 1 test cartrdige. After going through the whole test procedure it became apparent that there was more up with this than first met the eye. I could get the lines to all meet up with hideously stretched text, OR, I could get nice looking text with terrible lines. That's a pain. I also noticed that the sound buzzed to the point where it was really unusable. So now that's 3 faults!! Hmm. Determind to give the thing a good service as well as just fix it, I ordered in replacements for all the caps and ICs in the unit, together with most of the transistors and diodes too. Armed with this I replaced every single electrolytic cap and I also replaced the big 3A rectifier diodes too since one of my tests showed quite a lot of noise on the recitfied voltages. Unfortunately though, no improvement to our original problem. SO, on to the logic board (oh, and what a PAIN these things are to work on!!). Wanting to never have to dismantle the thing ever again I started by socketing every damn chip in here. After that, fixing the problem was basically just a case of swapping each out until the problem was solved. However, being a little cleverer than that was not hard! The schematics showed me that frankly, the problem was probably the DAC. And it was! Thankfully replacements were easy to get hold of. Before putting it back together I sorted the buzzing out. I implemented the two fixes detailed at PlayVectrex.com. The results are astounding. However a word of warning! This was NOT an easy thing to do!! SO, I now have a Vectrex that doesn't buzz and looks great, however, every now and then the controller wouldn't work on startup. A friend came over and pointed out that on top of this, it didn't display the Vectrex startup screen and that often the tunes that played sounded very drunk. Having not owned one before I didn't know this, but took it on board and yet something else was up with it. Firstly, using his known good unit we worked out that if you held a button down while powering the unit up it bypassed the startup screen. It was starting to sound like something was up with my controller inputs that may also be effecting my sounds. Odd. Looking through the schematics showed me that interestingly enough the sound chip (an AY-8-3912) also handled the inputs as well so figuring my two were related I had a dig through a box of scrap boards and found some quiz machine board with the relevent chip. Replaced it and bingo. Sorted Vectrex :o)

Parts Used:
1 x MC1408CP 8 bit DAC
1 x AY-8-3912
2 x 18way 0.3" Sockets
4 x 14way 0.3" Sockets
2 x 40way 0.6" Sockets
2 x 28way 0.6" Sockets
Various Radial electrolytic caps
3A Rectifier diodes


IC's

CPU     6809
PIA     6522
RAM     2114 x 2  (1k x 4 bit)
Sound   AY-3-8912 General Instruments
DAC     MC1408
TTL     74LS00, 74LS32
CMOS    CD4052 and 4066B
OP-Ams  LF353 and LF347, LM379

From: Mike Blackwell

>From the Vectrex Technical Description (my comments in {curly braces}):

The HP3000 {Vectrex} is a microprocessor based, vector scan system using a standard 9" black & white CRT as its video display device. The microprocessor (MPU) is the Motorola 68A09 device {hardware multiply and divide!}. The MPU operates at 1.6 MHz from a 6 MHz extrenal Xtal. An internal divide by 4 circuit generates the MPU 1.6 MHz "E" clock signal used in the system. Program memory is stored in the 8K x 8 2363 {really 2764} type ROM. This ROM contains common subroutines, the "executive" or assembler instructions plus one complete game {Mine Storm}.

Two 1K x 4 2114 type static RAMS provide storage locations for data indicative of locations of objects, game status, and various other information needed by the microprocessor during game operation. Peripheral Interface Adaptor (PIA) Chip {a 6522A}, has two 8 bit peripheral ports which interfaces the MPU with peripheral devices and external signals. One of the PIA ports interfaces the General Instruments AY-3-8912 sound-IO chip with the MPU and also drives the digital to analog converter chip MC1408. The other PIA port is used as control lines for the sound chip, selector control for the multiplex chip and as means to read the A/D comparator that's used in the joystick successive approximation circuitry. Sound is either MPU generated directly or by use of the AY-3-8912 sound chip.

The AY-3-8912 sound chip is a programmable sound generator containing 3 tone generators and wave shapping circuitry. This chip also has a single 8 bit IO port used to read the status of each of the handcontrollers 4 action switches.

The standard TTL device types 74LS00 and 74LS32 are usued as control line decoders to allow the MPU to select the appropriate circuit element to be addressed at any particular time.

The analog processing section includes digital to analog converter (DAC) chip type MC1408, dual 4 channel multiplexer/demultiplexer chip type CD4052, and dual op-amps types LF353 and LF347.

DAC chip M1408 receives an 8 bit word at data terminals D0-D7. DAC output (pin 4) is current source. One section of IC LF353 is used to change this current to a voltage representative of the 8 bit digital word received by the DAC chip. The LF353 voltage is applied to an input of the dual 4 channel multiplexer (MUX) chip CD4052. This same voltage (designated "DAC" on the schematic) is the X-axis drive signal.

The CD4052 MUX chip serves two purposes: it selectively couples, under MPU control, the output of the DAC current/voltage converter to one of 4 places and is used to selectively couple the inputs from the joystick pots to the voltage comparator IC LF353.

The 4 places to which the "DAC" signal is coupled by the MUX are:

1) The Y-axis sample and hold IC LF347
2) The "0" reference charge capacitor
3) The Z-axis (brightness signal) sample and hold IC LF347
4) MPU sound resistive netowrk

Each of these 4 signals is a voltage value representative of the 8 bit DAC input word for that function.

The joystick pot positions are sensed by a successive approximation process. The MUX chip selects each joystick pot input line and applies it to the plus input of comparator IC LF353. At the same time the MPU generates digital words that are changed to voltages by the DAC and current/voltage converter mentioned previously. These voltages are successfully {successively} applied to the comparator's minus input until the MPU generated voltage is equal to the joystick voltage. The MPU then recognizes the digital word representative of the comparison voltage and is able to establish a location for the joystick pot. The present position for each joystick is sensed in this manner. The pot position information is updated on a regular basis by the MPU.

Returning to the X and Y axis drive signals, these signals are applied to X,Y integrator IC LF347 negative input pins through series analog switch types 4066B. The "zero" reference signal is applied to the positive inputs of the integrators. There are also analog switches across integrator IC capacitors. The series analog switches are controlled by MPU signal RAMP and the parallel capacitor switches are controlled by MPU signal Zero 10. RAMP 10 determines when and for how long the X and Y axis voltage levels will be applied to the integrator amps. Zero 10 is used to discharge the X & Y axis integrator caps thus initializing them for the next signal to be integrated.

The outputs of the X,Y axis integrators are coupled through J-FET switches to IC LM379 deflection amplifiers. The LM379 operates as a voltage to current driver, the current through the deflection coils forming the electromagnetic field which deflects the CRT beam. To protect the CRT from spot burn in the event of a loss of deflection, the Y axis drive amplifiers output is detected and a deflection enable/disable signal is generated. This signal controls the J-FET switches in series with the X,Y deflection amp inputs to reduce the scan drive signal in the event of a software or hardware failure plus discrete transistor type 2SC1921 operates to bias off the CRT.

Conventional full wave rectification and three terminal regulators are used in the low voltage power supply. A special negative DC source is generated by a voltage double-circuit which is used to supply a 13V to the DAV chip.

The high voltage is generated via an oscillator, drive transistor and flyback type transformer circuitry similar to what is commonly used in small black and white TV receivecrs.

Judicious use of bypass caps, RF filter chokes, ferrite beads, etc., has been used in the design to control RFI emmisions.


Vectrex Programming

Dokumente zum Thema (EN):
vecprogman_v1.pdf
vecprogman_v2.pdf
vec_asm.txt

The Program Skeleton
====================

This is about the simplest, most basic program you can write for the Vectrex
which will actually assemble and run:

        ORG     $0000

; Magic Init Block

        FCB     $67,$20
        FCC     "GCE XXXX"
        FCB     $80
        FDB     music
        FDB     $f850
        FDB     $30b8
        FCC     "SIMPLE"
        FCB     $80,$0
start:
        bra start
music:
        FDB     $fee8
        FDB     $feb6
        FCB     $0,$80
        FCB     $0,$80

In fact, it's so simple it doesn't really do anything at all. But it will
work and it shows you all the parts which MUST be included in a Vectrex
program in order for it to work.

First is the line:

        ORG     $0000

This line tells the assembler to start assembling code at memory location
$0000. For the Vectrex, ALL code begins at $0000. However, on many other
computers code can start in a variety of places. Or, you may want to assemble
your code in a bunch of little pieces and then join them together later. As
the assembler is multi-purpose it includes the option to begin assembly
anywhere, but for our purposes with the Vectrex we will ALWAYS use:

        ORG     $0000

Next is the "Magic Init Block"

; Magic Init Block

        FCB     $67,$20
        FCC     "GCE XXXX"
        FCB     $80
        FDB     music
        FDB     $f850
        FDB     $30b8
        FCC     "SIMPLE"
        FCB     $80,$0

This actually contains all the information the Vectrex needs to compose the
screen you see at startup. "GCE XXXX" is the copyright info. "SIMPLE" is the
name of the program/game. music is the starting address of the music data
that is played when the game first starts up. In this case, I've set it to
some music data included below, but there are also several pieces of music
built into the BIOS that you can use. Eventually, you may want to write your
own music.

The actual program is:

start:
        bra start


Which just tells the 6809 to endlessly loop and do nothing. Like I said, a
very simple program.

Finally is the music data:

music:
        FDB     $fee8
        FDB     $feb6
        FCB     $0,$80
        FCB     $0,$80

I won't go into the format for music here, but this code just tells the
Vectrex not to play any music.

And that's it. That's a Vectrex program, though granted it doesn't do much
of anything.

Drawings

Hier wird eine Linie von der Mitte zur oberen rechten Ecke gezeichnet.
Anschließend ein Vector (Dreieck) mit dem Scheitelpunkt in Bildschirmmitte (0,0).
Dieses dreht dann im Gegenuhrzeigersinn um den 0,0 Punkt.
(Das kann man leider in einer Hardcopy nicht sehen ;-)

; Draws a figure
; Based on code by Christopher Tumber
; Based on work by man@sci.fi
; (c) 2007 Peter.Sieg1@gmx.de
; Public Domain for all Vectrex freaks

; First we rename all the BIOS routines
; we'll be needing

waitrecal       EQU   $f192    
movepen7ftod    EQU   $f2fc
intensitytoA    EQU   $f2ab
movedrawVL4     EQU   $f3b7
draw_to_d       EQU   $f3df
ROTVL           equ   $f610

; *** Needed variables
rotangle        equ   $c886    ; Rotation angle
rotated         equ   $c890    ; Takes up some RAM
                               ; (the rotated coordinates)

; You can give them your own names if you want to
; just make sure you understand them, and preferably
; that someone else reading your source code 
; understands them as well. (EQU = equals)
; All programs start from address $0000
; In this example, all numbers are actual numbers
; not hexadecimals like in the tutorials
; Assembly is quite capable of handling real numbers
: and they are much more easy for a beginner to 
; understand
        ORG   $0000

; Init block that needs to be in every program
; the GCE text has to be in place, it is checked
; by BIOS
        FCB   $67,$20
        FCC   "GCE SIEG"
        FCB   $80
        FDB   music
        FDB   $f850
        FDB   $30b8
        FCC   "DRAWING"
        FCB   $80,$0

        clra                     ; Reseting rotation angle
        sta   rotangle 

draw_line:
        inc   rotangle           ; Increase rotation angle

;Draws a line from the middle of screen to top right edge.
        jsr   waitrecal          ; Reset the CRT
        lda   #0                 ; Get y
        ldb   #0                 ; Get x
        jsr   movepen7ftod       ; go to (x,y)
        lda   #$7f               ; Get the Intensity
        jsr   intensitytoA       ; Set intensity
        lda   #127               ; Get y
        ldb   #127               ; Get x
        jsr   draw_to_d          ; draw a line to (x,y)

; draw some vectors
        ldx   #figure            ; Load the vector list
        ldb   #3                 ; Number of vectors
        lda   rotangle           ; Rotation angle
        ldu   #rotated           ; Save to pyoritetyt
        jsr   ROTVL              ; Rotates the coordinates

        jsr   waitrecal          ; Resets the BIOS
        lda   #127               ; Gets the Intensity
        jsr   intensitytoA       ; Sets the Intensity

        lda   #0                 ; Y - coordinate
        ldb   #0                 ; X - coordinate
        jsr   movepen7ftod       ; Moves pen to (Y,X)
        ldx   #rotated           ; Gets the rotated vector list
        lda   #3                 ; Number of vectors
                                 ; = how many vectors 
                                 ; will be drawn, the
                                 ; starting point isn't
                                 ; counted
        ldb   #$80               ; gets the scale
        jsr   movedrawVL4        ; BIOS-routine that
                                 ; draws the vector
        bra   draw_line          ; jumps back to start    

; It jumps back, because on Vectrex, you have to be
; drawing all the time to keep the vectors visible

; bra = branch
; lda = load to register a
; ldb = load to register b

; ein Dreieck
figure:  
       fcb   0,0         ; 0,0 = Bildschirm-Mitte
       fcb   -64,32      ; y=-64=gehe 64 Pixels nach unten und x=32=gehe 32 Pixels nach rechts
       fcb   0,-64       ; y=0=bleibe an y-Position und x=-64=gehe 64 Pixels nach links
       fcb   64,32       ; y=64=gehe 64 Pixels nach oben und x=32gehe 32 Pixels nach rechts

music:
       FDB   $fee8
       FDB   $feb6
       FCB   $28,$08
       FCB   $0,$80


; This basicly tells Vectrex to play nothing

Space Ship


; ### Public Domain for all Vecfreaks
; ### Testing my abilities so far...
; ### Code & comments by man@sci.fi
; ### Needed BIOS routines

WAITRECAL      equ    $f192
INTENSITY      equ    $f2ab
PRINTSTR       equ    $f37a
RESET0REF      equ    $f354
MOVEPEN        equ    $f2fc
MOVEDRAW       equ    $f3b7

JOYDIGITAL     equ    $f1f8  ; Reads joystick positions
JOY1XENABLE    equ    $c81f  ; Enables joystick 1 X
JOY1YENABLE    equ    $c820  ; Enables joystick 1 Y
JOY2XENABLE    equ    $c821  ; Enables joystick 2 X
JOY2YENABLE    equ    $c822  ; Enables joystick 2 Y
JOY1X          equ    $c81b  ; Joystick 1 left/right
JOY1Y          equ    $c81c  ; Joystick 1 up/down
READBUTTONS    equ    $f1ba  ; Reads joystick buttons

alusx          equ    $c881  ; Space ship x position
alusy          equ    $c882  ; Space ship y position

; ### Here we go.

    org    0

; ### The required init block.

    fcb    $67,$20         
    fcc    "GCE MANU"
    fcb    $80               ; All text ends with $80
    fdb    $fd0d             ; Play song "$fe38" from ROM
    fdb    $f850             ; Width, height
    fdb    $30b8             ; y-position, x-position
    fcc    "SPACE SHIP"
    fcb    $80,$0            ; Init block ends with $0

; ### Okay, this sets up the joystick checks, and only
; ### allows them for joystick 1, thus saving us a few
; ### hundred cycles. Don't forget to set joystick 2
; ### to 0, if you don't need it.

    lda    #1                ; 1 is the flag to enable
    sta    JOY1XENABLE       ; joystick 1 X
    lda    #3                ; 3 is the flag to enable
    sta    JOY1YENABLE       ; joystick 1 Y
    lda    #0
    sta    JOY2XENABLE       ; 5 would enable this
    sta    JOY2YENABLE       ; 7 would enable this
    lda    #-50              ; Set the starting y-coordinate
    sta    alusy             ; of the space ship to -50

; #################################
; ### Here's the actual program ###
; #################################

tikku    
    jsr    WAITRECAL         ; BIOS recalibration

; ### The space ship

    jsr    RESET0REF         ; Beam to the center
    lda    #127
    jsr    INTENSITY         ; Sets intensity to 127
    lda    alusy             ; Y - coordinate
    ldb    alusx             ; X - coordinate
    jsr    MOVEPEN
    ldx    #alus             ; Drawing the space ship
    lda     #17              ; Number of vectors
    ldb    #128              ; Scaling
    jsr    MOVEDRAW

; ### Let's frame the area

    jsr    RESET0REF         ; Beam to the center
    lda    #30
    jsr    INTENSITY         ; Intesity to 30
    lda    #0                ; Y
    ldb    #0                ; X
    jsr    MOVEPEN   
    ldx    #reunat           ; Drawing the edges
    lda    #8                ; Vectors
    ldb    #128              ; Scaling
    jsr    MOVEDRAW

; #########################
; ### Reads the buttons ###
; #########################

butt1    
    jsr    READBUTTONS   
    cmpa   #0                ; Compares a to 0
    lbeq   lovejoy           ; If it was 0 -> lovejoy
                             ; Otherwise
    bita   #$01              ; Tests for button 1
    lbeq   lovejoy           ; If it wasn't button 1
                             ; If it was button 1 ->

; ##########################
; ### Reads the joystick ###
; ##########################

lovejoy    
    jsr    JOYDIGITAL        ; Reads joystick
    lda    JOY1X             ; Joy 1 X position to A
    lbeq   noxmove           ; If 0 -> jump to noxmove
    lbmi   lmove             ; If negative -> lmove

; ### If something else (positive)           ###
; ### the joystick has been moved right.     ###
; ### Limiting the maximum x-value to 118    ###

rmove    
    lda    alusx             ; Value of alusx to A
    cmpa   #118              ; Compare A to 118
    lbeq   xiso              ; If it is 118 -> xiso
    inc    alusx             ; Increase alusx
    bra    xready            ; Jump to xready       

xiso    
    lda    #118              ; Load 118 to A
    sta    alusx             ; Store A to alusx
    bra    xready            ; Jump to xready

; ### Joystick has been moved left.          ###
; ### Limiting the minimum y-value to -118   ###

lmove     
    lda    alusx             ; Value of alusx to A
    cmpa   #-118             ; Compare A to -118
    lbeq   xpieni            ; If it is -118 -> xpieni
    dec    alusx             ; Decrease alusx
    bra    xready            ; Jump to xready

xpieni    
    lda    #-118             ; Load -118 to A
    sta    alusx             ; Store A to alusx
    bra    xready            ; Jump to xready

; ### Joystick hasn't been moved left or right.

noxmove   

; ### Done with checking if the joystick
; ### was moved left or right, now checking
; ### if it was moved up or down.

xready    
    lda    JOY1Y             ; Joy 1 Y position to A
    beq    noymove           ; If 0 -> jump to noymove
    bmi    dmove             ; If negative -> dmove

; ### If something else (positive)          ###
; ### the joystick has been moved up.       ###
; ### Limiting the maximum y-value to 126   ###

umove    
    lda    alusy             ; Value of alusy to A
    cmpa   #126              ; Compare A to 126
    lbeq   yiso              ; If it is 126 -> yiso
    inc    alusy             ; Increase alusy
    bra    yready            ; Jump to yready       

yiso    
    lda    #126              ; Load 126 to A
    sta    alusy             ; Store A to alusy
    bra    yready            ; Jump to yready

; ### Joystick has been moved down.         ###   
; ### Limiting the minimum y-value to -111  ###

dmove    
    lda    alusy             ; Value of alusy to A
    cmpa   #-111             ; Compare A to -116
    lbeq   ypieni            ; If it is -116 -> ypieni
    dec    alusy             ; Decrease alusy
    bra    yready            ; Jump to yready

ypieni    
    lda    #-111             ; Load -116 to A
    sta    alusy             ; Store A to alusy
    bra    yready            ; Jump to yready

; ### When making the limits (ie. how far)
; ### the ship can go, you have to count in
; ### the size of the ship. Best way to do this
; ### is to try it out. Ships 'hot spot' is
; ### where the first vector starts from.

; ### Joystick hasn't been moved up or down.
   
noymove   

; ### Done with checking if the joystick has
; ### been moved up or down - so let's go
; ### back to the beginning and check all again.

yready    
   lbra    tikku              ; Repeat    

; ### You need LBRA, because BRA is too short a jump
; ### to jump to the beginning all the way from here

; ### Then all the coordinates that are needed

alus    
    fcb     0,0               ; Tip of the ship
                              ; also the 'hot spot'
    fcb    -3,2
    fcb    -3,1
    fcb    -2,0
    fcb    -3,1
    fcb    0,2
    fcb    -3,2
    fcb    0,-3
    fcb    2,-2
    fcb    0,-6
    fcb    -2,-2
    fcb    0,-3
    fcb    3,2
    fcb    0,2
    fcb    3,1
    fcb    2,0
    fcb    3,1
    fcb    3,2

reunat    
    fcb    126,-126
    fcb    0,126
    fcb    0,126
    fcb    -126,0
    fcb    -126,0
    fcb    0,-126
    fcb    0,-126
    fcb    126,0
    fcb    126,0


Pong Game

Einfaches aber vollständig funktionierendes Pong Spiel.

; this game was written on 08.02.1998 by christopher salomon
; it is public domain

vec_vpong.zip


Ski Game

Einfaches Skiabfahrt 'Spiel'. Kein komplett fertiges Spiel, aber ein funktionierendes Grundgerüst.

; *** Spike goes Skiing ***
; v0.03a
; This source code is copyright Andrew Coleman
; This whole thing is Freeware.
; You can play around with it, steal bits of it, do whatever you want with it really,
; but please DO NOT distribute any modified versions of this source without my permission.

; Big thanks go out to Chris Salamon, without his programming docs i'd never have gotten
; this far.

vec_ski.zip