VecFever documentation

< All Topics
Print

Galaga

Namco, 1981

Galaga, Namco’s sequel to Galaxian, was a huge success and still to this day is a lot of fun to play. And was fun to port: for once there were not all that many graphics sprites to vectorize since Galaga only uses a handful of sprite graphics, albeit in many rotations. But all these rotations can be calculated automatically so only one has to be hand-vectorized.

The work here was mainly to get the actual arcade hardware into a static binary translation form for several tightly bound CPUs, a new challenge so more fun: Galaga uses a three-CPU multiprocessing setup with shared memory for all three CPUs. Plus a fourth microprocessor, a Namco custom security chip, with which the main Z80 communicates in an interesting way. This was all relatively straightforward although a red herring bug steered me off-course for a while there: I misinterpreted a -as it turned out- very simple problem as a synchronization issue of the Z80s and/or the security chip. Turns out Galaga writes to ROM-space and the checks for this were accidentally disabled initially…

Afterwards the first one was up all the others fell into place quickly. The bootlegs are basically the older namco code but the licensed ones and the Namco rev.B are all different romsets in principle but most of the code just moved around and the ram variables remain the same as far as I can tell. Gatsbee is another beast, though, an impressive hack with slightly different gameplay which even uses an 8-way joystick so you can move up-/downwards there. I wonder whether this was inspired by Gaplus of the same year of 1984: there you can also move up/down and some sprites look a bit similar.

The other Galaga hacks I came across are sprite graphics swaps or fast shoot hacks – both were added as options to all Galagas here.

Galaga famously also has two bugs in its code – the turnaround after level 255 results either in an odd game state or a reset of the game (the watchdog is then triggered) depending on the difficulty dip switch setting. And the ‘enemies can stop shooting at you entirely’ bug, which the ‘computer archeologist’ dived into in some detail. Quite deliberately neither bug was fixed here. And the watchdog is emulated so it should behave just like the arcade game.

Sprite ROMs

Since the vectorization back-end literally just swaps out vectors for a given sprite rom it is simple to support sprite hacked variations for Galaga. Here are the three sprite roms implemented:

Galaga
Gatsbee
Galaxian (Galgaxian)

Localization

//NAME="GALAGA"
//

GERMAN[] = {
    { 0, 0, "Demoton: An" },
    { 0, 0, "Demoton: Aus" },
    { 0, 0, "Bild: Vollschirm" },
    { 0, 0, "Bild: Normal" },
    { 0, 0, "Schnellschuss-Hack: An" },
    { 0, 0, "Schnellschuss-Hack: Aus" },
    { 0, 0, "High Score sichern" },
    { 0, 0, "deaktiviert" },
    { 0, 0, 0 },
    { 0, 0, 0 },
    { 0, 0, 0 },
    { 0, 0, "                           Willkommen zur vektorisierten Version des Arcadespiels Galaga von Namco (und lizensiert an Midway). Dieser Nachfolger zu Namcos Galaxian aus 1979 ist ein echter Klassiker der goldenen Ära, absolut gerechtfertigt: es erweitert das Galaxianspielkonzept deutlich mit den Bewegungsmustern, Bonusrunden, die Option sich einfangen zu lassen für einen Doppelschuss (bei doppeltem Risiko) und deutlich netteren Tönen und Musik.        Intern ist Galaga auch deutlich erweitert: es nutzt drei Z80 in einem echten Multiprozessorsetup - alle drei nutzen denselben Addressraum (bis auf ihre Code ROMs). Was für Emulationszwecke bedeutet, dass alle drei extrem eng aneinandergekoppelt sind zeitlich, wirklich zeitaufwändig zu emulieren.                 Die erste CPU ist der Hauptprozessor des Spiels mit dem grössten ROM und führt die langwierigen Speicherchecks am Anfang durch, währenddem sie alle anderen CPUs im Reset hält (neben den zwei Z80 auch einen Namco Sicherheitsmikroprozessor).     Danach lässt sie diese laufen für deren ROM-Tests und rudimentären Sicherheits-/Lebenscheck des Mikroprozessors.         Falls alles funktioniert fängt endlich das Spiel an zu laufen wo alle CPUs eine Arbeitsliste pro Interrupt abarbeiten und der Sicherheitschips einmal pro Bild eine Münzvariable und den Status der Joysticks und Knöpfe rüberreicht.          Die erste und zweite CPU teilen sich die Arbeit des Spiels selbst bis auf die Töne und Musik: für diese berechnet die dritte CPU alle Werte für einen Namcoaudiochip 120-mal pro Sekunde. Diese Werte werden hier einfach für den Vectrexchip konvertiert.        Die Explosion ist allerdings im original eine separate Hardwarelogik, da der Namcochip - wie der der Vectrex im übrigen - keine beeindruckenden Explosionen generieren kann.   Hier wurde einfach eine Vectrex-Zweikanalvariante für die Explosion gebastelt und eingebaut.                         "},
    { 0, 0, "                            Willkommen zur vektorisierten Version des Arcadespiels Gallag - einem Bootleg von Galaga. Dieses spielt sich genauso wie Galaga und ist hauptsächlich interessant, falls man zufällig die Spielplatine besitzt (hier liegt eine).  Lokale Reparierer sagten mir bereits mehrfach, dass dies die beste Galagaplatine sei, einfach da sie einfacher am Leben zu halten ist durch die weniger Namcospezialsachen darauf. Nur die Widerstände für die Farben sollte man an die Galagafarben anpassen...                           "},
    { 0, 0, "                            Willkommen zur vektorisierten Version des Arcadespiels Gatsbee - einem sehr aufwändigem Hack von Galaga. Nich nur wurde das komplette ROM der Hauptcpu disassembliert, heftig angepasst und wieder assembliert damals. Auch die Hardware wurde erweitert: Gatsbee nutzt das doppelte and Tilegrafik für die Bitmap des Gatsbeelogos in einer zweiten Bank. Und es nutzt 8-Wege Joysticks, nicht nur 2-Wege wie Galaga.                            "},
    { 0, 0, "                            Willkommen zur vektorisierten Version des Arcadespiels Nebulous Bee - einem sehr seltenen Bootleg von Galaga. Hauptsächlich portiert um einen kurzen Blick auf die Codeänderungen zu werfen und um das Galagaset zu komplettieren. Der Z80 Code ist hier ein praktisch ungeändertes Namco (galago) romset mit nur einem Bit geändert, um den CPU1 Romcheck zu umgehen (Gallag hat gar keine Codeänderungen, da dort die Checksumme angepasst wurde). Die Roms der zweiten und dritten CPU sind sogar identisch zu Namco. Also nur einige Daten wie die Textstrings wurden geändert und die NAMCO Bitmap aus dem Tilerom genommen, genau wie bei Gallag. Die ganze Magie der Bootlegs sitzt in einem vierten Z80, welcher die Namcosicherheitsmechanismen emuliert - aber das musste hier nicht emuliert werden.                          "}
};

FRENCH[] = {
    { 0, 0, "Son du Mode Démo: Oui" },
    { 0, 0, "Son du Mode Démo: Non" },
    { 0, 0, "Taille d'écran: Pleine" },
    { 0, 0, "Taille d'écran: Normale" },
    { 0, 0, "Hack de Tir Rapide: Oui" },
    { 0, 0, "Hack de Tir Rapide: Non" },
    { 0, 0, "Scores non" },
    { 0, 0, "sauvegardés" },
    { 0, 0, "Sprites de la ROM: Galaga" },
    { 0, 0, "Sprites de la ROM: Galaxian" },
    { 0, 0, "Sprites de la ROM: Gatsbee" },
    { 0, 0, "                             Bienvenue dans la version vectorisée du jeu d'arcade Galaga de Namco (distribué par Midway aux Etats-Unis). Cette suite du Galaxian de Namco de 1979 est un véritable classique de l'âge d'or de l'arcade et c'est amplement mérité: ce jeu apporte une réelle profondeur au concept du jeu Galaxian grâce à ses schémas élaborés de déplacement des ennemis, à ses niveaux bonus et à la possibilité de laisser son combattant se faire capturer pour bénéficier d'un double tir (au prix d'un risque également doublé d'être touché par des tirs ennemis). L'environnement sonore est également plus abouti.          En interne, Galaga s'avère tout aussi innovant: il utilise trois Z80 dans une véritable configuration multiprocesseurs, tous les trois partageant le même espace d'adressage (à l'exception de leurs \"codes ROM\"). Cette caractéristique signifie qu'ils sont très étroitement liés entre eux, d'où une émulation très consommatrice de temps.                  Le premier des processeurs est le processeur principal du jeu et dispose de la plus grande ROM: il effectue au démarrage les fastidieuses vérifications de la mémoire tout en gardant les autres processeurs en réinitialisation (à la fois les deux Z80 et un autre microprocesseur de sécurité de Namco).        Il les lance ensuite pour leurs tests de ROM, vérifie leurs réponses et assure, dans l'intervalle de temps qui lui est alloué, la vérification de ses propres ROMS.          Si tout fonctionne correctement, le jeu démarre en mode normal: tous les processeurs se partagent une liste de tâches alors que la puce de sécurité signale les états des crédits, de la manette et des boutons (une fois par image).                          Le premier et le deuxième processeur gèrent ensemble les changements relatifs au jeu lui-même à l'exception des sons et de la musique: pour ceux-ci (hormis \"l'explosion\"), le troisième processeur calcule 120 fois par seconde toutes les valeurs de la puce audio de Namco. Ces valeurs sont alors tout simplement converties pour la puce du Vectrex.          \"L'explosion\", quant à elle, relève d'un circuit spécifiquement dédié et séparé sur le matériel Galaga dans la mesure où la puce sonore de Namco - similaire à celle du Vectrex - n'est pas capable d'en générer à elle seule une suffisamment convaincante. C'est pourquoi, pour cette explosion, j'ai créé et intégré une variante \"Vectrex\" à deux canaux.                         "},
    { 0, 0, "                            Bienvenue dans la version vectorisée du jeu d'arcade Gallag - une version pirate de Galaga. Elle se joue comme le Galaga original mais s'avère surtout intéressante pour les possesseurs de sa carte mère (ce qui est mon cas). Les réparateurs locaux m'ont dit plus d'une fois qu'elle est la meilleure des cartes contenant le jeu Galaga dans la mesure où elle est plus facilement réparable du fait de l'élimination des éléments propres à Namco figurant normalement dessus. Il y a juste à adapter certaines résistances pour obtenir les couleurs d'origine de Galaga...                           "},
    { 0, 0, "                            Bienvenue dans la version vectorisée du jeu d'arcade Gatsbee - un hack très élaboré de Galaga. Non seulement les ROMS du premier processeur ont été complètement désassemblées, fortement modifiées puis réassemblées à l'époque, mais le matériel a également été adapté: Gatsbee utilise le double d'espace alloué à la zone des graphismes dans la rom pour inclure le bitmap du logo du titre dans une deuxième banque. Par ailleurs, il utilise un joystick à 8 directions et pas seulement à 2, comme c'est le cas pour Galaga.                            "}
    { 0, 0, "                            Bienvenue dans la version vectorisée du jeu d'arcade Nebulous Bee – une version pirate rare de Galaga. Je l’ai portée sur le Vectrex pour compléter l'ensemble associé à Galaga, et, par la même occasion, jeter un œil sur ce qui avait changé: le code du Z80 est littéralement un copier-coller du lot de roms Namco (galago), tout comme pour Gallag. Mais ici, il y a juste un bit modifié (résulte en RET Z-> RET à 3534) pour contourner la vérification de la rom par le processeur numéro 1. Si les développeurs avaient calculé leur propre somme de contrôles comme l'avait fait celui de Gallag à l'époque, ils auraient même pu garder la même chose. Les deuxième et troisième ROMs des processeurs sont identiques à galago. Ainsi, seules quelques chaînes de texte ont été modifiées comme le nom du jeu. A noter que la suppression du logo Namco a été effectuée ici dans la rom du processeur principal et celle relative aux graphismes, tout comme pour Gallag. La particularité, pour les deux versions pirates réside dans l’existence d’un quatrième Z80 qui émule la puce de sécurité de Namco – qu’il n’est d’ailleurs pas nécessaire d'émuler ici.                            " }
};

ENGLISH[] = {
    { 0, 0, "Attract Sounds: On" },
    { 0, 0, "Attract Sounds: Off" },
    { 0, 0, "Screen Size: Fullscreen" },
    { 0, 0, "Screen Size: Normal" },
    { 0, 0, "Fast Shoot Hack: On" },
    { 0, 0, "Fast Shoot Hack: Off" },
    { 0, 0, "High Score" },
    { 0, 0, "storage disabled" },
    { 0, 0, "Sprite ROMs: Galaga" },
    { 0, 0, "Sprite ROMs: Galaxian" },
    { 0, 0, "Sprite ROMs: Gatsbee" },
    { 0, 0, "                           Welcome to the vectorised version of the arcade game Galaga by Namco (distributed by Midway in the USA). This sequel to the 1979 Namco game Galaxian is a true classic of the golden age and deservedly so: it expands the Galaxian gameplay quite a bit by introducing the elaborate flying of the enemies including formation flying, the bonus rounds, the option of letting your fighter be captured for a double shot (at double the risk) and a much nicer soundscape.    Internally this game was also breaking new grounds: it uses three Z80 with a true multiprocessing setup - they all share the same address space (except for their code ROMs). Which for emulation purposes means they are very tightly bound together, real time consuming to emulate.                 The first CPU is the master of the game with the largest ROM and handles the memory checks at the start during which it holds all other CPUs (both Z80 and another custom security microprocessor) in reset.     Afterwards for the ROM checks the others are released and their responses for their ROM checks waited for by the 1st CPU - which in the interim checks its own ROMs).        If everything checks out finally the game starts into normal game mode - where all CPUs are working on a task list for eych of them and the security chip reports on credits, joystick and buttons states once per frame.          The first and second CPU together handle all the changes for the game except for all sounds (minus explosion): for these the third CPU calculates for a Namco custom sound chip all values 120 times a second. These sounds effects and music are simply converted into Vectrex values here at the current framerate.        The explosion is a dedicated, separate circuit on the Galaga hardware since the Namco sound chip - similar to the Vectrex one, actually - cannot generate impressive explosions. So I've just made and dropped in a two-channel explosion to simulate at least something going on.                         "},
    { 0, 0, "                            Welcome to the vectorised version of the arcade game Gallag - a bootleg of Galaga. This plays just like an original Galaga and is mostly interesting if you happen to own the pcb (which I do).  Local repairers more than once told me that this is the best Galaga pcb of the bunch since it is emminently repairable due to the elimination of Namco customs on this pcb. Only adapt the resistors in Gallag's output stage to get the original colors, too...                           "},
    { 0, 0, "                            Welcome to the vectorised version of the arcade game Gatsbee - an elaborate hack of Galaga. Not only were the first CPU's ROMs completely disassembled, heavily altered and then reassembled back then. But also the hardware adapted: Gatsbee uses twice the tile graphics rom space to include the title logo bitmap in a second bank. And it uses an 8-way joystick, not just 2-way like Galaga.                            "},
    { 0, 0, "                            Welcome to the vectorised version of the arcade game Nebulous Bee - a rare bootleg of Galaga. Just ported to complete the Galaga set and look at what's changed: the z80 code is literally a verbatim Namco (galago) romset just like Gallag. But here with just one bit changed (results in RET Z->RET at 3534) to circumvent the cpu1 rom check. If they would have calculated their own checksum like the Gallag developer back then they could have even kept that the same, too. The second and third CPU ROMs are identical to galago. So only a few text strings were changed like the name and removal of the Namco logo was done here in the main cpu roms and tile rom, just like Gallag. The magic for both bootlegs resides in a fourth Z80 which emulates the Namco security chip - which was unnecessary to emulate here.                          "}
};
Table of Contents