genesis_rom


                    THE COMPLETE DOCUMENTATION ABOUT
                           GENESIS ROM FORMAT

                             Version 1.1


  Release history
  ^^^^^^^^^^^^^^^
  Version 1.0 (December, 1997)
   - Initial Release

  Version 1.1 (January, 1998)
   - Splitted rom format explained!
   - New company codes
   - New errors in copyright interpreting found <sigh>
   - Month interpreting (in copyright)

     
  In this document you will find everything you need to know about
the information embedded within a Genesis ROM. You will also find
how to read all this information from the different ROM formats
(BIN, SMD and MD).
  The information in this document was hacked by Volker Oth (dOnut)
and by me with help from technical documents found on internet.
The primary document from the internet that we used was gentech.txt.
  If you want to change this document to add any important info about
the Genesis ROMs, do it freely but I would like to receive a copy of
the updated document. Then, I'll add your name in it and post it on my
homepage. Don't be a lamer and keep all names mentioned here!
  Note that all numbers with a "H" in the left are in hexadecimal, and
the first byte of a file is the ZERO position. All information is
provided based on the BIN file-format because of the nature of this
format(see sections about each rom format).
  *This document should be downloaded from my homepage. Any other site
may contain outdated material!*
  If you use this information for anything, please give the proper
credits to the all these names listed below! I would thank you if you 
include a link to our homepages and emails, too!
  
Felipe XnaK: 
  http://www.classicgaming.com/launchtool
  felipe@ComPorts.com
Volker Oth (dOnut):
  http://members.aol.com/~volkeroth
  volkeroth@aol.com


  THE BASIC INFORMATION:
  ^^^^^^^^^^^^^^^^^^^^^

H100:    'SEGA MEGA DRIVE'                                   1
H110:    '(C)SEGA 1988.JUL'                                  2
H120:    GAME NAME (DOMESTIC)                                3
H150:    GAME NAME (OVERSEAS)                                4
H180:    'XX'                                                5
H182:    'XXXXXXX-XX'                                        6
H18E:    XXXX                                                7
H190:    'XXXXXXXXXXXXXXXX'                                  8
H1A0:    00000000, XXXXXXXX                                  9
H1A8:    RAM                                                10
H1BC:    MODEM DATA                                         11
H1C8:    MEMO                                               12
H1F0:    Country in which the product                       13
         can be released.

1:  This is just the console name. It can be 'SEGA MEGA DRIVE' or
  'SEGA GENESIS' depending on the console's country of origin.

2:  Copyright notice. There SHOULD be 4 characters for the company
code, a space and then the date in yyyy.mmm format; however, there are
variations.
    For a listing of company codes, see "TABLE OF COMPANY CODES".
For a listing of month abbreviations, se "TABLE OF MONTH ABBREVIATIONS".
When the company uses a number as a company code, the copyright has
(in most cases!) this format: '(C)T-XX 1988.JUL', where XX is the
company code. If the company code has three digits, it should use the
space between the code and the date.
       Some wrong copyrights i've found:
   * The year is written as '199X' or '19XX', or doen't include the
    millenium and the century.
   * The company name is '00' or 'XX'
   * Some companies that use a number for company code overwrite the
    hiphen, not the space.
   * Some companies doesn't include the '(C)' in the beginning and
    others include just their name; some just include the the year
   * Some copyrights have the year and month separated by ',','/', '-',
    space or null character (H00). I'd found one that hasn't any separator
    at all!
   -- Good luck! --

3:  This is the so-called "Domestic game name". Is the name the game has
in its country of origin. This field is 48 bytes long...

4:  ... and this is the so-called "Overseas game name". This is the name
the game has worldwide. 48 bytes long too.

5:  Type of product. This is 2 bytes long. Known values:
  GM = Game
  Al = Education

6:  Product code and Version number:
   * The first 7 characters are the product code 
   * The 2 characters after the hiphen is the version number. This will
   vary depending on the the type of ROM or software version

7:  Check sum, a two-bytes value (see "Calculating the Checksum")

8:  I/0 support: (this is 16 bytes long)
      J = Joypad                4 = Team Play
      6 = 6-button Joypad       0 = Joystick for MS
      K = Keyboard              R = Serial RS232C
      P = Printer               T = Tablet
      B = Control Ball          V = Paddle Controller
      F = Floppy Disk Drive     C = CD-ROM
      L = Activator             M = Mega Mouse

9:  ROM capacity. Here you will find the start and end address of the rom,
respectively. The start address in most cases is 0 and the end address is 
the size of rom in BYTES. Note that these values don't include the headers
that some rom images have (discussed later). Each address is 4-bytes long.

10:  There is a lot of information here that I can't help you with. What
I can say is that you can get the start and end positions of the backup
RAM at offset H1B4. Like in ROM addresses, you first acquire the start,
then the end address. Remember, these addresses are four bytes each.

11:  If the rom has no support for MODEM, fill this with spaces. If it has
support for MODEM, then fill in this format:  'MOxxxxyy.z', where:
     xxxx  Firm name the same as in 2
     yy    MODEM NO.
     z     Version

12: I don't know what the heck it is! But by it's name and considering
all roms that I investigated, it seems that you can write whatever you want
in this field...

13:  Countries where the game can be released. What is most interesting
here is that changing this info in some games has different behaviour.
Streets of Rage, for example, automatically changes it's name for Bare
Knuckle if you set the game for Japan. The "official" codes are:
       E = Europe
       J = Japan
       U = USA
    I've found some others as well(I do not guarantee this is correct!)        
       A = Asia
       B = Brazil
       4 = Brazil
       F = France
       8 = Hong Kong
     This field can only contain three countries. This isn't really a
problem because all "unofficial" codes run as Europe! Don't forget to
set spaces to fill the bytes you don't use in this field.


  TABLE OF COMPANY CODES:
  ^^^^^^^^^^^^^^^^^^^^^^

  This table was compiled by myself by just getting the company code
in the ROM and writing the license that appears on the tittle screen.
In other words, it probably contains errors and is missing a lot of
companies.
  When two comp1anies use the same code and are different companies
(at least to my knownledge) the names are separeted by an "or". If the
companies are the same (like Acclain and Flying Edge), they're separated
by a backslash (/).

  CODE                  COMPANY

 ACLD                Ballistic
 ASCI                Asciiware  
 RSI                 Razorsoft
 SEGA                SEGA
 TREC                Treco
 VRGN                Virgin Games
 WSTN                Westone
 10                  Takara
 11                  Taito or Accolade
 12                  Capcom
 13                  Data East
 14                  Namco or Tengen
 15                  Sunsoft
 16                  Bandai
 17                  Dempa
 18                  Technosoft
 19                  Technosoft
 20                  Asmik
 22                  Micronet
 23                  Vic Tokai
 24                  American Sammy
 29                  Kyugo
 32                  Wolfteam
 33                  Kaneko
 35                  Toaplan
 36                  Tecmo
 40                  Toaplan
 42                  UFL Company Limited
 43                  Human
 45                  Game Arts
 47                  Sage's Creation
 48                  Tengen
 49                  Renovation or Telenet
 50                  Eletronic Arts
 56                  Razorsoft
 58                  Mentrix
 60                  Victor Musical Industries
 69                  Arena
 70                  Virgin
 73                  Soft Vision
 74                  Palsoft
 76                  Koei
 79                  U.S. Gold
 81                  Acclaim/Flying Edge 
 83                  Gametek
 86                  Absolute
 93                  Sony
 95                  Konami
 97                  Tradewest
 100                 T*HQ Software
 101                 Tecmagik
 112                 Designer Software
 113                 Psygnosis
 119                 Accolade
 120                 Code Masters
 125                 Interplay
 130                 Activision
 132                 Shiny & Playmates
 144                 Atlus
 151                 Infogrames
 161                 Fox Interactive
 239                 Disney Interactive

- SPECIAL CASES:

  In "Smurfs II" the copyright is just '(C) INFOGRAMES'
 In "Baby's day out" rom, the copyright is: '(C) T-SNK 95-FEB',
but the company name is "HI-TECH entertainment" <sigh>


  TABLE OF MONTH ABBREVIATIONS:
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ABBREVIATIONS        MONTH

 JAN                 January
 FEB                 February
 MAR                 March
 APR or APL          April
 MAY                 May
 JUN                 June
 JUL                 July
 AUG or 08           August
 SEP or SEPT         September
 OCT                 October
 NOV                 November
 DEC                 December


  CALCULATING THE CHECKSUM:
  ^^^^^^^^^^^^^^^^^^^^^^^^

  Genesis checksum is simple enough... All you need to do is:
1) Checksum starts as zero
2) Skip the first 512 bytes of the ROM
3) Read a byte from the rom and multiply its ascii value by 256, then sum
  it to the checksum
4) Read the next byte from the rom and just sum it to the checksum
5) If you're not in the end of file, goto step 3
6) Get the first 16 bits from the resulting checksum and discard the higher
  bits
7) That's your checksum!


  Super Magic Drive Binary file-format (.BIN):
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  This rom file-format is a simple rom dump. Nothing more to add!


  Super Magic Drive Interleaved file-format (.SMD):
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  This is a much more complex file-format. It have a 512 bytes header
and is interleaved in 16KB blocks. These blocks have their even bytes
at the beginning and the odd bytes at the end of them.

  WHAT YOU FIND IN THE 512 BYTES HEADER:

0: Number of blocks                           1
1: H03                                        *
2: SPLIT?                                     2
8: HAA                                        *
9: HBB                                        *
ALL OTHER BYTES: H00

1: This first byte should have the number of 16KB blocks the rom has.
The header isn't part of the formula, so this number is:
            [size of rom-512]/16386
   If the size is more than 255, the value should be H00.

2: This byte indicates if the ROM is a part of a splitted rom series. If
the rom is the last part of the series (or isn't a splitted rom at all),
this byte should be H00. In other cases should be H40. See "CREATING
SPLITTED ROMS" for details on this format.

*: Fixed values


  THE DE-INTERLEAVING CODE (how to convert a SMD to a BIN):

1) Skip the 512 bytes header
2) Get 16KB from the ROM (16384 bytes)
3) Decode the block
4) Write the decoded block to the BIN file

  DECODING A SMD BLOCK (stating byte is 0):

1) Get Middlepoint (8192)
2) Get a byte from the block 
3) If the byte position is equal or smaller than middlepoint, put it
in the first unused EVEN position of the decoded buffer
4) If the byte position is greater than middlepoint, put it in the
first unused ODD position of the decoded buffer

  To convert a BIN to a SMD, just create a header (as explained before) and
then do the reverse process! 


  Multi Game Doctor file-format (.MD):
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  The MD file format also doesn't have a header. The interleaving it uses
is equal to the SMD, but without the division in blocks! (Even bytes in
the end of file, odd bytes in the beginning).
  
  THE DECODING A MD (how to convert a MD to a BIN):

1) Get middlepoint ([size of rom]/2)
2) Get a byte from the ROM
3) If the byte position is equal or smaller than the middlepoint put the
byte in [byte position]*2 of the destination buffer
4) If the byte position is greater than the middlepoint, put the byte in 
([byte position]*2) - [size of rom] -1


  CREATING SPLITTED ROMS:
  ^^^^^^^^^^^^^^^^^^^^^^^

  Splitted ROMs are a SMD divided into pieces. Knowing this, you may
guess that you first need to convert your ROM to a SMD! :)
  To have a splitted ROM created all you need is divide your SMD in
several pieces, usually all with the same size (with the exception of
the last one). After doing that, you need to add a SMD header to all
these pieces. About these SMD headers:
  1) The number of blocks embedded in them should be relative to the
piece, not to the joined ROM.
  2) As stated before, with the exception of the last piece, all roms
should have their SPLIT byte set.


  HOW YOU CAN HELP ME WITH THIS DOCUMENT:
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 - Telling me the intricacies of a MGD ROM image. I never found one, but
I do believe it's equal to MD format.
 - I'm trying to find out how the sprites are saved in Genesis ROMs. If
you have this info, I would like to have it!
 - I never had a rom with modem support. If you have one, please test if
the information about it is correct in this documentation (I got it from
gentech). If you find it's correct, please explain me!!!

  If you have any of this information, send it with your addresses (e-mail,
homepage, etc) so I can add this to the document!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值