Ok... in a few words, Tickle is an arcade machine emulator. I would
really like you to read all
the stuff and so on but in case you are in a hurry feel free to
jump directly to the downloads
Update (2 Jun 2006): Mac OS
X porting is practically finished now. Joysticks are supported and
screen grabbing works (directly makes a PDF on disk, rather than
passing thru the clipboard). Also colors should be correct on every
platform. This version supports Rebound and has a new driver for Pengo.
Here's the download links:
As usual, feedback is always welcome!
Update (16 May 2006): after
a long pause (spent for the most part in chess
programming) I'm back to Tickle and working on a new release. This
time I'll use Mac OS X for development, so I've written a native
front-end that is working decently, and well enough for development. In
fact, I've added a new driver for Pengo (an easy one... in theory) just
to get started in the new environment and I think it will work just
fine. There is much to do, I'll try to cleanup some code and add new
drivers, we'll see. [Download links removed, get the latest version
from the links provided in the latest update above.]
Some notes for this release. This early snapshot is mainly targeted
to Mac OS X. The code is based on version 0.92, and does not contain
Rebound. I will add it very soon. The colors are wrong on the PowerPC
version, and at present I can't test on that platform. Again, I hope to
fix this soon. The Mac OS X program does not support joysticks and
can't snapshot to the clipboard with F4. On the other side, it has a
few GUI enhancements and supports frame-by-frame advancement with
Shift-P. These changes will be ported to Windows in the next dev
Update (10 Aug 2005): added Makefile and a couple of fixes. Executable compiled with MinGW now. Balls rebounds correctly! :-)
Soon after version 0.92 (in 2004), I started working at an ambitious project: emulating the father of all videogames... Pong! Unfortunately I couldn't find decent schematics for it, but during the search I found some very good schematics for another similar game, named Rebound, which is a volleyball simulation.
Because the schematics were quite complex and I was not familiar at all with digital electronics, I decided to design a software library that allowed me to play and experiment with some freedom. This library contains classes for many common components, such as for example the 7400, 7402, 7404, 7408, 7493 and more. The classes are designed so that you can freely connect any output to any input, just like you would do with an electric wire. Then, a small hand-coded piece of code is required to update each component in the proper order, as it would be very costly to do that in a generic way at runtime (though it would be possible to write a circuit analyzer that generates the required code automatically.)
Armed with this library, coffee, a magnifying glass and lots a patience I manually translated in code many of the Rebound circuits: HSYNC, VSYNC, SERVE, SCORE, NET, PADDLE and BALL are all emulated if you happen to have the schematics at hand. I can definitely tell you it was hard work. There are bugs, and there are circuits that I don't fully understand. But... look at the screenshots below... they are not simulated, they are the real circuits from 1974 in action! Isn't this what emulation is all about?
The biggest problem is: this kind of emulation is slow. Very slow, in fact (*). Considering that I do all my development on a 700 MHz Athlon, you see that sometimes I had to wait up to three or four minutes just waiting for the ball to come to a problem spot and try to understand it better. This was unbearable and I decided to freeze the project and wait for more powerful hardware to come.
Now one year has passed, I still have my same old Athlon, much less time at hand and couldn't touch the code at all... :-( Because of this, I have decided to release what I have anyway. Maybe you can find it useful, maybe interesting, maybe it will bring far memories... I hope you enjoy this bit of code anyway: the (unfinished) Rebound emulator! :-)
Get the source code (388K zipped) or a Win32 executable compiled to run in "attract" or "demo" mode (140K zipped).
(*) But see what it's doing... just to emulate that tiny ball you need the Vertical Ball Motion circuit, the Horizontal Ball Motion circuit, the Ball Direction and Speed circuit and finally the Ball Summing circuit (not too mention the other timing signals): you will find all of these in the code, with identical labels for components and lines! Here's the vertical ball motion circuit code as an example.
More analog sounds, as the Galaxian soundboard is now completely emulated. The high level approach I tried with Space Invaders would not really work here, so I had to design an entirely new set of software components that allow me to push emulation down to the level of single resistors and capacitors. While the results are already very interesting for Galaxian, there are other games that sound completely different from what I expected, such as for example War of the Bugs. Try them!
I hope to add more analog stuff in future releases. Some components can be immediately reused for other games (the explosions in Rally-X, Bosconian, Galaga and Xevious use more or less the same circuit of Galaxian and would require no additional development) while new software will be needed especially for circuits that use operational amplifiers, and I'm again thinking of Space Invaders...
Note: I think the background sweeps might not be correct yet, as there's some math I'm not completely sure of and I can't check them against the real hardware. If you know where to find a sample of the very first sweeps that play at the beginning of a new game, I would really appreciate it. But in general, any feedback on this sound emulation will be very welcome.
As usual, there are a few bug fixes and new ROMs: Black Hole, Eyes (fun!), Frogger (still a great game), Galaxian (father of Galaga and a pretty good game by itself), Gingateikoku No Gyakushu (same as UniWarS, way better name though), Jump Shot (doh... a one-o-one basketball on the Pacman hardware), Moon Cresta, UniWar S, War of the Bugs (a Centipede clone that runs on Galaxian hardware).
Release notes from past versions are available here.
The following pages contains screenshots taken from the program. (If you want to take your own screenshots press F4 at any time and a picture of the current screen will be placed into the clipboard.)
Version 0.92: Black Hole, Eyes, Frogger, Galaxian, Gingateikoku No Gyakushu, Jump Shot, Moon Cresta, UniWar S, War of the Bugs.
Version 0.91: Amidar, Battle of Atlantis, Crush Roller, Make Trax, Mars, Scramble, The End.
Version 0.90: Lunar Rescue, Ms. Pacman, Ozma Wars, Pacman, Pacman Plus, Pinball Action, Pooyan, Puckman, Space Attack II, Space Invaders, Space Invaders part II.
Tickle is available in both source and binary form. You can download the source code (335K) and compile the program yourself (see the enclosed readme file for instructions) or get the precompiled Win32 executable (122K).
Latest version is 0.92. This and all past versions are available from the download page. Note: go back to the top for the "Rebound" edition!
In Windows, Tickle requires DirectX 7.0 or better and a working sound card. It is also recommended that the video is configured in True Color (32 bits) or at least High Color (15 or 16 bits) mode.
In Linux, Tickle requires the Qt runtime libraries (automatically installed in KDE) and a working ALSA driver. It is recommended that the video is configured in True Color (32 bits) mode.
In both cases there is no installation. Starting from the folder where the program has been copied, ROMs must be placed in a subdirectory names "roms" and if needed samples must be placed in a subdirectory named "samples". These and the names of the ROM archives are the same default settings used by MAME so it is usually sufficient to just place Tickle in the directory where MAME is.
Please note that no ROMs are distributed with Tickle, nor this site contains any. They must be legally obtained elsewhere. Also, the program must not be bundled or distributed with copyrighted ROMs or related material.
Tickle is Copyright (c) 2004 by Alessandro Scotti.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU
General Public License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Tickle includes the ZLIB library, which is Copyright (c) 1995-2003 by Jean-loup Gailly and Mark Adler.
In the binary distribution, the executable is compressed with UPX, the Ultimate Packer for eXecutables.
Most of the information (but no code!) that was necessary to write the emulation drivers comes from MAME: I would like to thank all of the MAME developers and testers for providing the best emulator out there, and for always keeping it the best.
Copyright (c) 2004 Alessandro Scotti. All rights reserved.
|Home :: Computer Programming|