Showing posts with label freedom fighter. Show all posts
Showing posts with label freedom fighter. Show all posts

Thursday, September 2, 2021

Freedom Fighter information from David Riordan, one of the creators!

 Last night, Brendon Zeidler and I had a chance to have a Zoom call with David Riordan, one of the creators of the laserdisc arcade game Freedom Fighter.  The call was recorded, but I am not sure if it will be published so I am recording some notes from memory so that I don't forget.

The lead (only?) programmer of the game was Dick Huston.

The reason the prototype units were made from converted Star Rider hardware was that Millennium Games purchased old unused Star Rider hardware from Williams under the understanding that about 150 working units would be provided.  In the end, less, maybe 50, units ended up working from that batch.

The modifications to the Star Rider hardware were done by an employee from Los Angeles who was better with electronics than with people.  He also was responsible for designing the custom PIF board that replaces Star Rider's PIF board.  David did not get along with this individual.

The Philips 22VP931 laserdisc player was chosen because of its amazing skipping ability without dropping video.  Philips offered to sell their remaining batch of these players, but would not provide support in case something went wrong (which I found shocking).  Philips also said it would not make any more of these players which meant that Freedom Fighter could have never been scaled up to mass production.  I have still not been able to find any official documentation on how to control these players and don't expect to.

The joystick for the game was custom made.  (Matt's notes follow in this paragraph) It relied on using Star Rider's existing inputs, which included the steering handlebar inputs for left/right movement and the acceleration throttle for up/down. Inputs unused by Star Rider, such as start1/start2, were used for fire and perhaps something else.

The laserdisc video that was split up into very short segments was created by a high-end machine made by Ampex.  The machine was programmed (by a human) ahead of time and fed film reels of the unedited footage and it will chop the film up according to the program.  The film was then reassembled to create the master that was used to manufacture the disc.  (Matt's note: I may have misunderstood this process so my description may not be entirely accurate)

Millennium Games was a company formed by Malibu who owned 30-40 major entertainment venues across the country.  Therefore, Freedom Fighter was a Malibu exclusive title.

Probably less than 50 prototype units were ever produced.

Steven Spielberg was a huge fan of the game and had one in his office at Amblin Entertainment in the 80's.

The animation to Freedom Fighter was done by a Japanese company called TOEI who had made a movie called Galaxy Express 999 and wanted to see their work featured in a video game.  Therefore, they were willing to work for very cheap to create the additional animation needed for the game.  Apparently 90% of the video in Freedom Fighter was created by scratch for this purpose.  On the disc if you can see the main character, it may have been movie footage.  If you are seeing through the main character's eyes, it was new content created specifically for the game.  Voices done for the game were done by Millennium Games.

The attract mode, including the saxophone music, was envisioned by Millennium Games, not TOEI.

The name, Freedom Fighter, was chosen since the alternative, 999, would be too confusing for audiences.

When the game worked, it was a big hit with crowds.  As expected, the laserdisc players tended to fail (due to dust problems) and this spelled the doom of the game from have a longer lifespan.


Thursday, July 9, 2015

How to reverse engineer arcade game hardware

I'll be giving a presentation at CAX again this year.  This time it will be about reverse engineering arcade game hardware.  I'll share some of the tricks I've learned over the years including how to read schematics, disassemble ROM images, use logic analyzers, etc.  I hope to see everyone there ;)

http://caextreme.org/forum/index.php?topic=731.0

Friday, April 3, 2015

The mysterious 680 ohm resistor added to the Freedom Fighter PIF board's E clock




The Freedom Fighter prototype PIF board has a 680 ohm pull-up resistor on the E clock signal which was hand soldered on after the PCB was made. I wasn't sure what effect this would have, so I tested it with my scope. I tested with the resistor and installed and with it removed.


The short answer is that the pull-up resistor seems to strengthen the E signal without affecting the timing.


Without the resistor installed:













With the resistor installed:


Tuesday, March 24, 2015

Freedom Fighter PIF Board

I've been working on improving the VP-931 code for Dexter (used by Firefox) so this was a good time for me to take a look at Freedom Fighter also.  I've reversed engineered the schematics for the PIF prototype board and also written a little utility to "decrypt" the PIF ROM.


Here's the utility:

// Freedom Fighter PIF board has the ROM data lines scrambled, presumably to try to prevent reverse engineering.
// Here is how the ROM data lines match up to the CPU's data lines (verified using multimeter):

// CPU data line ROM data line
// 0 2
// 1 6
// 2 5
// 3 4
// 4 3
// 5 7
// 6 1
// 7 0

#include <stdio.h>
#include <stdexcept>

using namespace std;

int main(int argc, char **argv)
{
if (argc != 3)
{
fprintf(stderr, "Usage: %s [src scrambled rom file] [destination unscrambled rom file]\n");
return 1;
}

try
{
unsigned char u8 = 0;
FILE *F = fopen(argv[1], "rb");

if (!F)
{
throw runtime_error("Cannot open src file");
}
FILE *G = fopen(argv[2], "wb");

if (!G)
{
throw runtime_error("Cannot open destination file");
}

for (;;)
{
int i = fgetc(F);

// EOF ?
if (i == EOF)
{
break;
}

// do bit manipulation
u8 = 0;
u8 |= (((i >> 7) << 0) & (1 << 0));
u8 |= (((i >> 6) << 1) & (1 << 1));
u8 |= (((i >> 0) << 2) & (1 << 2));
u8 |= (((i >> 4) << 3) & (1 << 3));
u8 |= (((i >> 3) << 4) & (1 << 4));
u8 |= (((i >> 2) << 5) & (1 << 5));
u8 |= (((i >> 1) << 6) & (1 << 6));
u8 |= (((i >> 5) << 7) & (1 << 7));

fputc(u8, G);
}

fclose(G);
fclose(F);

return 0;
}
catch (std::exception &ex)
{
fprintf(stderr, "%s\n", ex.what());
return 1;
}
}

Wednesday, March 11, 2015

Star Rider and the changes that Freedom Fighter prototype made

Some of you may be aware that the prototype of Freedom Fighter was mostly based off of Star Rider hardware.  I've said before that I believe that someone intimately familiar with Star Rider was on the Freedom Fighter team because it would otherwise be far too costly to pay someone to learn the Star Rider hardware (I, of course, could be wrong about this).

If you have seen Star Rider in action ( youtube link ), you will note that top 2/3 of the screen pans left and right while the bottom does not pan at all.  This panning effect is called "the expander" internally because the video is expanded by a factor of 2 and can be panned left or right.  This is one of the really revolutionary things that the Star Rider hardware could do (and which Freedom Fighter takes advantage of) which was really ahead of its time.

While studying the schematics, I stumbled upon how the expander is able to only pan the top 2/3 of the screen while leaving the bottom of the screen untouched:


These two ICs, U61 and U77, are 74LS85's which are simple 4-bit comparers.  They can be chained together to form arbitrary huge numbers.  In this case, having two of them means an 8-bit number will be compared.  The number, in this case, to be compared is the current vertical counter value (which is approximately the same as the current vertical line but not quite).  If the current vertical counter value is greater than 0xB4, then expander always gets disabled no matter what via pin 5 of U77 going high.


Here is how it looks on the actual PCB.  Interestingly, these ICs are in about the middle of the board in a seemingly arbitrary spot.

Pin 5 of U77 is not the only thing that can disable the expander:


Pin 5 of U77 goes into pin 8 of U65 which is a NOR gate.  Another input to this gate is pin 9, which on the schematic is labeled "EXPAND DISABLE".  This is controlled ultimately by the main CPU, which means that the ROM program can disable the expander at will.  However, since this is a NOR gate, it means that the ROM program cannot interfere with the "hard-wired" hardware design that forces the expander to be disabled beyond vertical count of 0xB4.  Stated differently, the ROM program can force the expander to be disabled but can never force it to be enabled unconditionally.


Here is U65 on the board with some notes.  Pin 8 is the top-right pin, pin 9 is to the left of it, and pin 10 is to the left of pin 9.  Pin 10 is the final authority on whether the expander actually gets disabled/enabled.

So, I've understood this for a while now.  But I recently was thinking (again) that Freedom Fighter does not exhibit this behavior as far as I can recall.  In fact, Freedom Fighter will expand the full screen unless I am greatly mistaken.

This caused me to be extremely curious.  If Freedom Fighter can expand the entire screen, then whoever worked on the prototype must've disabled the hardware that disables the expander passed vertical count 0xB4!  Get it?  Someone must've disabled the disabler! :)

Rife with curiosity, I brought out the Freedom Fighter board to see if I could find where this modification took place.  Having already found how the original design worked, I had a very good idea about where to look.  It didn't take me long to find it!
Pin 5 of U77 on Freedom Fighter (as you can hopefully see) has been clipped off.  This means that the neat little 8-bit comparer comprised of U61 and U77 now does nothing.  However, one cannot simply clip off this pin without grounding what it is connected to!  So I looked to see what they did with pin 8 of U65.


As I suspected, someone hooked up pin 8 of U65 (formerly hooked up to pin 5 of U77 which has been cut off) to pin 6 of U84, and it appears that someone cut off this pin from the PCB as well (although I didn't notice this until after I had put the board away).  I haven't bothered to find where U84 is on the schematic or what it does, but I am going to make a very educated guess that it most likely is somehow tied to ground.  Why is this my guess?  Because ground will send a logical 0 to pin 8 of U65.  Remember that U65 is a NOR gate.  Sending 0 to a NOR input is essentially converting the gate to a NOT gate, where the other input is the only input that matters.  The goal (I believe) is for the expander to be controlled exclusively by the CPU, and not by a hard-wired hardware configuration.  So the logical way to accomplish this is to do what I just described.  I am somewhat curious what U84 is but am out of time tonight to find out.

UPDATE : U84 pin 6 is VSYNC' from the laserdisc.  As this does not currently make sense to me, I am going to defer judgment until I have a chance to reverse engineer the Freedom Fighter PIF board and see what it is sending to the VGG board instead of Composite Sync, because that would change the interpretation of what U84 pin 6 means.