The SG-1000. Somehow, we’re on the third blog post this year on this little white box. In part one, we RGB modded it, but then decided that it wasn’t good enough. In part two, we built a cartridge, and complained more about RGB. And now, we move on to something completely different: the SG-1000-based arcade hardware! But I don’t have one of those. If only there was something I could do about that… (Plus: a little more complaining about RGB)
Rieko Kodama’s Punch-Out
The first game I played on my test cartridge was Sega’s Champion Boxing. It’s a menu-based fighting game with surprisingly fun gameplay and some very nice graphics; just my opinion, you might say? Well, I’m not the only one who thought Champion Boxing was pretty fun.
Clearly, Sega thought so too– they went and released the game for arcades, despite the fact that it was dependent on the outdated SG-1000 hardware. (To compare, the much more advanced System 1 was Sega’s arcade workhorse by this point) I don’t have the arcade board– I’d love to get my hands on it, though– but at least I do have the flyer, thanks to Sega Retro.
Now, 1984 is just a year before the JAMMA standard, but some things had already become common to Japanese and American arcades alike by then. And one of those was the use of RGB monitors. So the SG-1000-based arcade hardware used, according to MAME, the TMS9928A; not the Sega 315-5066. It definitely couldn’t use the TMS9918A used in earlier SG-1000 models; remember, that only outputs composite video. (I’d like to be able to confirm the circuit they used; perhaps it could be adapted to work with an original SG-1000)
The arcade version of Champion Boxing is pretty close to the original, though it has some nice touches and tweaks. For one, you don’t choose your opponent’s level and then go back to the title screen after winning a match; the single-player game starts at level 1 and keeps going until you lose. The game also spruced up the post-match win for the occasion. (The bird sprite, which uses the primitive sprite zooming of the TMS9918A, is in both versions)
Remember that flyer, though? It has some screenshots. Surprisingly, even the US flyer shows off Japanese text, when the Japanese SG-1000 release only has English-language text. In the final arcade game, language is determined by a dip switch.
Meanwhile, if we hook up our RGB cable to the SG-1000 II and start playing Champion Boxing, we get this:
You can see that the colors are pretty different. The flyer is much closer, I’d say, to what we see on the SG-1000 II with composite video:
And that’s why I’ve kept doing SG-1000 screenshots over composite. If the desaturated colors are good enough for Sega’s arcades, they’re probably the intended version. Okay, okay, I promised I wouldn’t go on about RGB again. Instead, let’s take a look at the hardware that arcade game ran on.
We’re not so different
I don’t have a board of this hardware. But looking at the MAME source, one thing that you might notice is that the SG-1000-based arcade hardware is really, really close to the SG-1000. Unlike the System E, which made many changes, including extra VRAM and a second VDP, it really does look like they just hooked up an SG-1000 to a JAMMA connector. Well, not JAMMA, because it was too early for that.
|SG-1000 Home (NTSC)||SG-1000 Arcade|
|CPU||3.57MHz Z80||3.57MHz Z80|
|VDP||TMS9918A / Sega 315-5066||TMS9928A|
|Sound chip||SN76489A / Sega 315-5066||SN76489A|
|Work RAM||1 kiB||1 kiB|
|Video RAM||16 kiB||16 kiB|
SG-1000 arcade games had the option of using an encrypted Z80-like CPU, but Champion Boxing did not, so I won’t bother discussing that. Champion Pro Wrestling did; discuss what this says about the difference between pro wrestling and boxing fans in the comments.
Going back to comparing this to the SG-1000, one difference we can see in the case of Champion Boxing is the ROM map. On either MyCard or cartridge, it was just a 32kiB home game. But in the arcade? Notice the memory map from the MAME source:
ROM_START( chboxing ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cb6105.bin", 0x0000, 0x4000, CRC(43516f2e) SHA1(e3a9bbe914b5bfdcd1f85ca5fae922c4cae3c106) ) ROM_LOAD( "cb6106.bin", 0x4000, 0x4000, CRC(65e2c750) SHA1(843466b8d6baebb4d5e434fbdafe3ae8fed03475) ) ROM_LOAD( "cb6107.bin", 0x8000, 0x2000, CRC(c2f8e522) SHA1(932276e7ad33aa9efbb4cd10bc3071d88cb082cb) ) ROM_END
This isn’t a 32kiB game like the SG-1000 release of Champion Boxing. MAME prefers to separate different chips into their own files, but with two 16kiB ROMs and one 8kiB, it’s a 40kiB game. And if that sounds familiar, it should: it’s actually mapped exactly as the pseudo-40kiB games we looked at last time. Which means in short, it should fit on our modified cartridge, the one used to play Pachinko. Here’s a look at the memory map:
In the case of Pachinko and other pseudo-40kiB games, most of this ROM was taken up by mirrors of the original. But here, the whole 40kiB will be taken up with unique data. After we obtain a legitimate copy of the Champion Boxing arcade ROMs, and concatenate them in the correct order for our cartridge, a miracle happens:
It just works! And unlike the arcade board, this will work over composite video, which might be nice for some people. But unfortunately, I didn’t spring for the SG-1000 with a coin slot. So, how do I insert coins?
The MAME source says that the service and coin appear in the second port of the Intel peripheral interface adapter, and are the top two bits. But the SG-1000 doesn’t have a peripheral interface adapter; in home systems, that was only used in the SC-3000. (The SK-1100 included one on board, but I don’t have that either) So while playing this game on an SC-3000 might be interesting, that’s for later.
The SG-1000 and the SC-3000 play the same games, so the SG-1000 maps its ports as if they were on an Intel PIA; it’s just that you can’t actually do things like scan the keyboard. (In fact, the PIA is arranged such that the joypads are read like a keyboard row) The Intel PIA has three ports, but the joypad controls only correspond to two, so that’s all the SG-1000 has.
What am I talking about? Here’s a table to compare all the relevant signals. I wrote this table while writing the post, and it really would’ve made things easier if I had written it before actually building this. As far as I can tell,
CON is a signal on the cartridge port, so it doesn’t really matter to us here.
|Port||Bit||SG-1000 Home||SG-1000 Arcade|
||0||P1 UP||P1 UP|
||1||P1 DOWN||P1 DOWN|
||2||P1 LEFT||P1 LEFT|
||3||P1 RIGHT||P1 RIGHT|
||4||P1 Button 1||P1 Button 1|
||5||P1 Button 2||P1 Button 2|
||6||P2 UP||START 1P|
||7||P2 DOWN||START 2P|
||0||P2 LEFT||P2 UP|
||1||P2 RIGHT||P2 DOWN|
||2||P2 Button 1||P2 LEFT|
||3||P2 Button 2||P2 RIGHT|
||P2 Button 1|
||5||P2 Button 2|
So the coin button is port
0xDD, bit 7. Unfortunately, we can look at the peripheral ports document or the table above– Either way, those top two bits are unused on the SG-1000. If they were controller 2 buttons, this would be a lot easier. Instead, we need to dig a bit deeper.
So what’s actually going on in those “disconnected” pins? Let’s take a look at the SG-1000 controller port schematic. This particular schematic is from an SG-1000 model 1, which is why the controller ports are labeled JOY2 and a connector. It also means the IC labels will be wrong compared to my SG-1000 II, which is a bummer. Here is my source, Enri’s excellent schematic– I hope they don’t mind me copying it here.
On the SG-1000,
/JOY SEL will only activate this circuit when we are in the
0xFF range and are reading;
0xDD are just the recommended Sega addresses for these ports, but as usual, there are a lot of “mirrors” that will read the same data from different addresses. We’ll take advantage of this later.
Most importantly for now, though, we see that rather that use a full PIA like on the arcade board or on the SC-3000, the two controller ports are hooked up to the data bus through two 74LS257 chips. We saw the 74LS157 before when looking at Dottori-kun, this is a similar concept. It’s a multiplexer.
A0 line is low, it chooses the first port (
0xDC, above), and when the
A0 line is high, it chooses the second port,
OxDD. You might notice that the inputs to the lines in question on the second 74LS257 aren’t connected to anything on the schematic– surprisingly, looking at the board, they really don’t seem to be connected to anything. I didn’t expect the schematic to be wrong, but leaving inputs on chips disconnected is usually bad practice, even if I did the same thing in my 40kiB cartridge.
To turn these into buttons we’ll need to add some pull-up resistors to +5V (I used 470Ω for no particular reason, and maybe should’ve used something higher), and then the buttons will be connected to ground, and pull it low. While the button is pressed, the full 5V will dissipate in the resistor; if it wasn’t there, you’d have a short circuit, which is usually frowned upon.
Somehow, this worked on the first try, and now we can insert coins. But how do we press start?
Well, this is where the big caveat of this mod becomes apparent. Look at the table again: the player 1 controls are all mapped to the same port in the same way as on the regular SG-1000. But the player 2 buttons are not. The player 2 buttons, as you can see on the table above, are mapped completely differently. Without a complex wiring harness and more mods to pick up all the signals, this is going to be a one-player arcade system.
On the other hand, that also means we can just start the game by pressing “UP” on the player 2 control pad. 2 player start is pressing “DOWN”, but as noted, player 2 is going to have a rough time. (Good news for the older sibling who wants to always win)
And the last question is that you might have noticed that the game is in Japanese. Champion Boxing on SG-1000 is always in English; Japanese text was a nice bonus for the arcades, while American arcades were given a dip switch to change it back. The problem is, the dip switches are mapped to port C on the Intel PIA, port
0xDE. But, we don’t have an Intel PIA, so we don’t have any equivalent to port C… or do we?
Remember, the two 74LS257s emulate choosing the PIA’s port by flipping based on the
A0 address line. It turns out, then, that for us port C is the same as port A. If you hold down the “DOWN” direction on the player 2 controller port as you turn on the console, it will treat that as if you had the DIP for English set. Thankfully, you can then let go, as it only seems to check on startup.
Muddying the RGB waters
Let’s take another look at an arcade game. Much like every other SG-1000-based arcade game, Doki Doki Penguin Land is a port of an SG-1000 game that stays pretty close to the original. Mind you, it’s a much better regarded game than Champion Boxing. It’s also a 48kiB game in the arcade, but the astute among you probably noticed that my cartridge above exposes 48kiB to the SG-1000 already, so it just worked.
It’s a well-loved enough game that it got a sequel (the Master System’s Penguin Land), and in Japan, it was ported to the Sega Saturn, as part of Sega Ages Memorial Selection Vol. 2. In fact, I think this is the only SG-1000-based arcade game to ever get a re-release. And there the title screen looks like this:
Is that our highly saturated SG-1000 II RGB palette? Not quite. Here’s what that would look like:
No, this is something much more sinister… Look at that brown. We don’t need RGB at all to see where Sega got these colors from.
It’s the Master System compatibility palette. I’m starting to think maybe Sega didn’t actually care about the specifics of all these colors, despite the overall level of care and polish that went into the Sega Ages remakes.
The SG-1000-based arcade hardware wasn’t exactly long-lived or significant in Sega history; the only other game to use it was Champion Pro Wrestling, which as noted above, used an encrypted Z80 CPU for anti-piracy protection. (It was a pretty substantial upgrade over the SG-1000 version, adding tag team gameplay) But as the beginning of a Sega history trend of using home systems as the basis for arcade hardware, that’s pretty neat. I wonder if my SG-1000 will sprout any more tails in the future?