Keep it Secret, Keep it SEGA

The Trade Mark Security Signature (TMSS) was SEGA’s attempt to prevent unlicensed developers from releasing games for the Genesis / Mega Drive. Failing the TMSS check disables the Visual Display Processor (VDP). Passing the TMSS check displays this lovely screen:


TMSS check passed!

All but the very first (Version 0) consoles have TMSS built in; version 0 consoles skip the screen above and go straight to the game. Sadly, some early games failed to include TMSS code and therefore only work on a Version 0 console. Most of the non-TMSS games were released in Japan, but a few North American games, such as Populous, also have this problem.

How to TMSS

Implementing TMSS requires two steps:

1. Four or five bytes containing the ASCII codes for “SEGA” or ” SEGA” must appear at ROM address 0x100. In my code, I handle that with this line in the header:

	dc.b "SEGA GENESIS    "		; Console name

2. Four bytes containing the ASCII codes for “SEGA” must be written to hardware address 0x00A14000, but this is an illegal operation on a version 0 console, so you need to check the version before doing this. Like so:

; ******************************************************************************
; ********************** Trade Mark Security Signature *************************
; ******************************************************************************
	move.b 0x00A10001, d0		; Move Genesis hardware version to d0
	andi.b #0x0F, d0		; Version is in last four bits, mask with 0F
	beq SkipTMSS			; If version is equal to 0, skip TMSS signature
	move.l #'SEGA', 0x00A14000	; Move the string "SEGA" to 0x00A14000

What Were They Thinking?

Perhaps you’re wondering how SEGA could be so foolish as to make “SEGA” the secret key to bypassing their security system? It may seem silly, but people would have disassembled commercial software and figured out the trick no matter what the secret code word was. However, if an unlicensed developer wrote “SEGA” into their ROMs and made the TMSS screen “PRODUCED BY OR UNDER LICENSE FROM SEGA ENTERPRISES LTD.” appear, SEGA was hoping they could sue them for unauthorized use of their trademark.

Accolade was probably the biggest unlicensed Genesis developer, and they were taken to court for trademark infringement among other things. Initially, SEGA won the case and Accolade had to recall all of their Genesis games and was forbidden from further reverse engineering, but Accolade later reached a settlement and was able to become a licensed SEGA developer. Furthermore, Accolade’s reverse engineering of the TMSS code was ruled to be legal because it was a necessary step to produce a compatible program (and thus not copyrightable code) unlike the unique ideas that go into making a game.

There is Another Way

Through all of this, one secret was revealed. In court, SEGA demonstrated a TMSS Genesis playing a game that did not display the TMSS screen. The significance of this is that an unlicensed developer could, if they knew how, write a Genesis game that does not display “PRODUCED BY OR UNDER LICENSE FROM SEGA ENTERPRISES LTD.” SEGA was hoping this would add weight to their trademark infringement claims by proving that using reverse-engineered TMSS code from commercial games was not required to make a game play. SEGA never revealed the code to do this, and I don’t believe anybody except for a couple of SEGA’s engineers know how.

I wish this knowledge was available because today’s hobbyists and homebrew developers do not wish to falsely display “PRODUCED BY OR UNDER LICENSE FROM SEGA ENTERPRISES LTD.” in their own software.

What’s Next?

The next article (which was actually written before this) covers initializing the VDP and drawing graphics on the screen. I wanted to include this information in that article, but it was getting too long and I needed to be sure it was legal to discuss TMSS code before I posted it on my blog. I think it’s legal. If I am wrong about that, please kindly ask me to take it down.


Next Article

Previous Article

Source Code (test2.asm)

Leave a Reply

Your email address will not be published. Required fields are marked *