Download the software

Get the software here:

smsreader.zip

It consists of two command line utilities; SMSREAD.EXE and SMSWRITE.EXE; plus a text file detailing the command line options for these. Extract the zip file into a directory on your hard drive.

Configuring your PC

Boot your PC and go into CMOS setup, usually achieved by pressing DELETE during the Power On Self Test. Find the options relating to the parallel port - ensure that the port address is set to 378 and that the protocol is set to Bidirectional, ECP or EPP. (SPP will not work.) These options should be set correctly by default, but it's best to check and make sure.

On older PCs (386 and 486), the above options may be set physically via jumpers on the parallel or I/O card. Older non-IBM clone cards may support the SPP (Standard Parallel Port) protocol only, and therefore cannot be used with the SMSReader. The only solution is to find another card, one which does support bidirectional operation.

Using SMSREAD to read cartridges

SMSREAD is the utility provided for reading cartridges. You should see the SMSCMD.TXT file for full details of its features; however, here are some instructions to get you started.

Assuming the SMSReader is connected to the parallel port (it should be connected directly, by the way, not daisy-chained through a scanner or similar device) and the AC adaptor is plugged in, we can begin.

If you're running in a Windows environment, shut down all unnecessary programs (including screen savers) and bring up a DOS prompt.

cd to the directory containing the SMSReader software, and type, for example:

smsread -c128 alexkidd.sms

In this example, the software will read a 128k (One Megabit) cartridge and save it to the file alexkidd.sms. Other settings for different cartridge sizes are self-explanatory; for example -c512, -c256, -c800, -c32. The full range of acceptable values is given in the SMSCMD.TXT file.

Read Example

Long filenames containing spaces should be enclosed in double quotes, i.e.

smsread -c512 "Land Of Illusion Starring Mickey Mouse.sms"

If you wish to read a saved game file from battery backed RAM (as found in Phantasy Star for example), use the -cs switch, as follows:

smsread -cs phanstar.sav

Note that you should insert or remove a cartridge only when prompted to do so by the software.

Speed Settings

If you run into problems, and removing and re-inserting the cartridge doesn't help, try increasing the delay using the -s switch. The default is 4; the delay will increase by a factor of five for each increment in the input value. The maximum is 9. For example:

smsread -s6 -c128 alexkidd.sms

will increase the delay by a factor of twenty-five over the default value. Once you've found a reliable setting, use it each time you start SMSREAD or SMSWRITE.

Auto Mode

If you don't specify a cartridge type using the -c switch, SMSREAD will start in Auto mode and will attempt to auto-detect the cartridge size. It doesn't always work (sometimes producing an overdump), so you should always specify the cartridge size with -c if you know it, but it guesses the correct size about 90% of the time.

Auto Mode should only be used for Sega Master System and Game Gear cartridges. If you have any SG1000 or SC3000 cartridges, the type should be specified manually using the -c switch.

Verify Settings

By default, SMSREAD will verify the cartridge twice. Following the first read cycle, the cartridge is read twice more and compared with the original data. If any differences are found, the process will fail.

You can change the number of verify cycles using the -v switch; the maximum value is 5. -v0 will disable verification (not recommended!) and -v5 will verify the cartridge five times.

Checksum Settings

All European and US Sega Master System games, and most Japanese Master System/Mark III games, have a ROM checksum stored in the header area. By default, SMSREAD will compare the read data against the stored checksum and will warn you if they do not match. Along with the Verify routine, this is an additional (and very important) safeguard against read errors.

Using the -k switch allows you to specify the behaviour of SMSREAD with respect to ROM checksums. -k0 will disable the checksum routine, and should only be used when reading Game Gear or SG/SC cartridges, as these do not have a stored checksum. -k1 (the default) will allow checksum calculation and will warn you if the sum does not match, but still allows the ROM to be written to disk. -k2, on the other hand, will terminate the program with an error if the checksum is wrong.

Port Settings

The final switch of any great value is the -p switch, which allows you to specify a parallel port address other than the 0x378 default. -p378, -p278 and -p3BC are the only values recognised.

Mapper Settings

This is not terribly useful, but the -m switch lets you specify the cartridge mapper type to be used: -m0 (no mapper), -m1 (slot 2 only mapper) or -m2 (dual slot mapper). It's not very useful because SMSREAD by default chooses the most appropriate type based on the cartridge size. Occasionally however, you may have to specify -m1 for cartridges of 256k or higher.

Using SMSWRITE to write cartridges

SMSWRITE is invoked in exactly the same way as SMSREAD, and shares many of its command line switches. Its function is to write saved game files back to battery backed RAM, or to write ROM files to cartridges which have been specially modified with battery backup and SRAM, as described in a later section. Examples:

smswrite -cs phanstar.sav

writes the saved game file phanstar.sav to a cartridge with battery backed RAM for saved games.

smswrite -c32 teddyboy.sms

writes the ROM file teddyboy.sms to a modified cartridge with 32KBytes of battery backed SRAM.

smswrite -c256 bombraid.sms

writes the ROM file bombraid.sms to a modified cartridge with 256KBytes of battery backed SRAM.

Write example

If you do not specify a cartridge size using the -c switch, SMSWRITE will choose the most appropriate size based on the size of the ROM file.

The -m, -p and -s switches have exactly the same functions in SMSWRITE as they do for SMSREAD. Here are some other features and issues with SMSWRITE that are worth noting.

Zipped, Headered and Footered ROMs

The current version of SMSWRITE (version 0.3 at the time of writing) does not handle zipped files. Unzip any ROMs you have before writing them to cartridge.

Some ROMs available on the Internet have 512 byte Super Magic Drive (SMD) headers attached to them. (This is not the same as the ROM header area which stores the checksum and other data.) SMSWRITE will automatically strip SMD headers before writing to cartridge.

Other ROMs have 64 byte footers attached to them. SMSWRITE simply ignores these - they will not be written.

Overdumped ROMs

SMSWRITE in its present form does not have any way of recognising or dealing with overdumped ROMs. I recommend you use SMSFIX.EXE or a similar utility to fix any overdumps you may have.

ROM Header Checking and Patching

These features are set using the -k switch.

Three things are required for a ROM to be playable on a real US or European Sega Master System/Master System II, all found within the header area at 0x7FF0 - 0x7FFF hex. Firstly, the text string TMR SEGA must be present. Secondly, the ROM checksum must be present and correct. Finally, the country code stored at 0x7FFF must be set to 4, which denotes a US or European SMS game.

Why would there be a problem with this? Firstly, many/most Japanese SMS and Mark III games have a country code of 3, and some are missing the TMR SEGA string and/or a checksum. (SG1000 and SC3000 ROMs do not have a header at all.) Any of these will cause the game to fail on a US/European SMS.

Also, many ROMs that are floating round the Internet are actually bad dumps. While these may be playable, the checksum will be wrong, and this too will prevent the game from starting.

The solution is to patch the ROM with the correct checksum, country code data and TMR SEGA string. This is the default behaviour of SMSWRITE, and is set using -k2. It should make all Japanese SMS/Mark III ROMs playable on a US or European SMS. SG1000 and SC3000 ROMs will also work; be warned, though, that the header information may overwrite game data.

Note that only the ROM data written to cartridge will be patched; the source file will remain intact. 'SMSWRITE does not alter your ROMs stored on disk in any way, shape or form.' I don't condone ROM vandalisation!

Using the -k1 setting will warn you if anything in the header is likely to cause problems, but the ROM itself will not be patched.

Using the -k0 setting will cause SMSWRITE to simply ignore the header information. You can use this setting if you're going to be playing the ROMs on a Mega Drive/Genesis (with Power Base Converter), because that system isn't fussy about the headers.

Verify Settings

By default, SMSWRITE will read back what it has written in order to check that no write errors have occurred. You can disable this process using -v0.

Problems?

Hopefully your SMSReader is fully working, and you're happily reading (and possibly writing) cartridges with it. If you're unlucky, though, you may be having one or two problems. The next section (and the FAQ) may help you deal with them...


< Using the SMSReader Software | SMSReader | Troubleshooting >




Return to top
2.411s